mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Internationalization: Mark up more of Dashboard Variables and Browse/Search Dashboards (#63518)
* Extract dirty translations from main * Translate some variable phrases * Translate nav bar * Translate search/browse * Fix header returning null * Translate search results type * fix test
This commit is contained in:
parent
0abbfbcc59
commit
54aaaf169f
@ -4086,9 +4086,7 @@ exports[`better eslint`] = {
|
||||
[0, 0, 0, "Do not use any type assertions.", "0"],
|
||||
[0, 0, 0, "Do not use any type assertions.", "1"],
|
||||
[0, 0, 0, "Unexpected any. Specify a different type.", "2"],
|
||||
[0, 0, 0, "Do not use any type assertions.", "3"],
|
||||
[0, 0, 0, "Unexpected any. Specify a different type.", "4"],
|
||||
[0, 0, 0, "Do not use any type assertions.", "5"]
|
||||
[0, 0, 0, "Do not use any type assertions.", "3"]
|
||||
],
|
||||
"public/app/features/search/service/bluge.ts:5381": [
|
||||
[0, 0, 0, "Do not use any type assertions.", "0"],
|
||||
|
@ -7,6 +7,7 @@ import { AsyncState } from 'react-use/lib/useAsync';
|
||||
import { SelectableValue } from '@grafana/data';
|
||||
|
||||
import { useStyles2 } from '../../themes';
|
||||
import { t } from '../../utils/i18n';
|
||||
import { InlineLabel } from '../Forms/InlineLabel';
|
||||
|
||||
import { SegmentSelect } from './SegmentSelect';
|
||||
@ -101,15 +102,15 @@ export function SegmentAsync<T>({
|
||||
|
||||
function mapStateToNoOptionsMessage<T>(state: AsyncState<Array<SelectableValue<T>>>): string {
|
||||
if (state.loading) {
|
||||
return 'Loading options...';
|
||||
return t('grafana-ui.segment-async.loading', 'Loading options...');
|
||||
}
|
||||
|
||||
if (state.error) {
|
||||
return 'Failed to load options';
|
||||
return t('grafana-ui.segment-async.error', 'Failed to load options');
|
||||
}
|
||||
|
||||
if (!Array.isArray(state.value) || state.value.length === 0) {
|
||||
return 'No options found';
|
||||
return t('grafana-ui.segment-async.no-options', 'No options found');
|
||||
}
|
||||
|
||||
return '';
|
||||
|
@ -4,6 +4,7 @@ import React from 'react';
|
||||
import { GrafanaTheme2, NavModelItem } from '@grafana/data';
|
||||
import { Components } from '@grafana/e2e-selectors';
|
||||
import { Icon, IconButton, ToolbarButton, useStyles2 } from '@grafana/ui';
|
||||
import { t } from 'app/core/internationalization';
|
||||
import { HOME_NAV_ID } from 'app/core/reducers/navModel';
|
||||
import { useSelector } from 'app/types';
|
||||
|
||||
@ -39,16 +40,31 @@ export function NavToolbar({
|
||||
return (
|
||||
<div data-testid={Components.NavToolbar.container} className={styles.pageToolbar}>
|
||||
<div className={styles.menuButton}>
|
||||
<IconButton name="bars" tooltip="Toggle menu" tooltipPlacement="bottom" size="xl" onClick={onToggleMegaMenu} />
|
||||
<IconButton
|
||||
name="bars"
|
||||
tooltip={t('navigation.toolbar.toggle-menu', 'Toggle menu')}
|
||||
tooltipPlacement="bottom"
|
||||
size="xl"
|
||||
onClick={onToggleMegaMenu}
|
||||
/>
|
||||
</div>
|
||||
<Breadcrumbs breadcrumbs={breadcrumbs} className={styles.breadcrumbs} />
|
||||
<div className={styles.actions}>
|
||||
{actions}
|
||||
{actions && <NavToolbarSeparator />}
|
||||
{searchBarHidden && (
|
||||
<ToolbarButton onClick={onToggleKioskMode} narrow title="Enable kiosk mode" icon="monitor" />
|
||||
<ToolbarButton
|
||||
onClick={onToggleKioskMode}
|
||||
narrow
|
||||
title={t('navigation.toolbar.enable-kiosk', 'Enable kiosk mode')}
|
||||
icon="monitor"
|
||||
/>
|
||||
)}
|
||||
<ToolbarButton onClick={onToggleSearchBar} narrow title="Toggle top search bar">
|
||||
<ToolbarButton
|
||||
onClick={onToggleSearchBar}
|
||||
narrow
|
||||
title={t('navigation.toolbar.toggle-search-bar', 'Toggle top search bar')}
|
||||
>
|
||||
<Icon name={searchBarHidden ? 'angle-down' : 'angle-up'} size="xl" />
|
||||
</ToolbarButton>
|
||||
</div>
|
||||
|
@ -148,6 +148,8 @@ export function getNavSubTitle(navId: string | undefined) {
|
||||
return config.featureToggles.topnav
|
||||
? t('nav.dashboards.subtitle', 'Create and manage dashboards to visualize your data')
|
||||
: undefined;
|
||||
case 'manage-folder':
|
||||
return t('nav.manage-folder.subtitle', 'Manage folder dashboards and permissions');
|
||||
case 'dashboards/playlists':
|
||||
return t('nav.playlists.subtitle', 'Groups of dashboards that are displayed in a sequence');
|
||||
case 'dashboards/snapshots':
|
||||
|
@ -4,6 +4,7 @@ import { components } from 'react-select';
|
||||
|
||||
import { escapeStringForRegex, GrafanaTheme2 } from '@grafana/data';
|
||||
import { Icon, MultiSelect, useStyles2 } from '@grafana/ui';
|
||||
import { t } from 'app/core/internationalization';
|
||||
|
||||
import { TagBadge } from './TagBadge';
|
||||
import { TagOption } from './TagOption';
|
||||
@ -45,7 +46,7 @@ export const TagFilter = ({
|
||||
inputId,
|
||||
isClearable,
|
||||
onChange,
|
||||
placeholder = 'Filter by tag',
|
||||
placeholder,
|
||||
tagOptions,
|
||||
tags,
|
||||
width,
|
||||
@ -134,10 +135,10 @@ export const TagFilter = ({
|
||||
getOptionValue: (i: any) => i.value,
|
||||
inputId,
|
||||
isMulti: true,
|
||||
loadingMessage: 'Loading...',
|
||||
noOptionsMessage: 'No tags found',
|
||||
onChange: onTagChange,
|
||||
placeholder,
|
||||
loadingMessage: t('tag-filter.loading', 'Loading...'),
|
||||
noOptionsMessage: t('tag-filter.no-tags', 'No tags found'),
|
||||
placeholder: placeholder || t('tag-filter.placeholder', 'Filter by tag'),
|
||||
value: currentlySelectedTags,
|
||||
width,
|
||||
components: {
|
||||
|
@ -3,6 +3,7 @@ import React, { useEffect } from 'react';
|
||||
|
||||
import { GrafanaTheme2 } from '@grafana/data';
|
||||
import { Input, useStyles2, Spinner } from '@grafana/ui';
|
||||
import { t } from 'app/core/internationalization';
|
||||
import { contextSrv } from 'app/core/services/context_srv';
|
||||
import { FolderDTO, AccessControlAction } from 'app/types';
|
||||
|
||||
@ -49,7 +50,11 @@ export const ManageDashboardsNew = React.memo(({ folder }: Props) => {
|
||||
// eslint-disable-next-line jsx-a11y/no-autofocus
|
||||
autoFocus
|
||||
spellCheck={false}
|
||||
placeholder={state.includePanels ? 'Search for dashboards and panels' : 'Search for dashboards'}
|
||||
placeholder={
|
||||
state.includePanels
|
||||
? t('search.search-input.include-panels-placeholder', 'Search for dashboards and panels')
|
||||
: t('search.search-input.placeholder', 'Search for dashboards')
|
||||
}
|
||||
className={styles.searchInput}
|
||||
suffix={false ? <Spinner /> : null}
|
||||
/>
|
||||
|
@ -6,16 +6,25 @@ import { config } from '@grafana/runtime';
|
||||
import { HorizontalGroup, RadioButtonGroup, useStyles2, Checkbox, Button } from '@grafana/ui';
|
||||
import { SortPicker } from 'app/core/components/Select/SortPicker';
|
||||
import { TagFilter, TermCount } from 'app/core/components/TagFilter/TagFilter';
|
||||
import { t, Trans } from 'app/core/internationalization';
|
||||
|
||||
import { SearchLayout, SearchState } from '../../types';
|
||||
|
||||
export const layoutOptions = [
|
||||
{ value: SearchLayout.Folders, icon: 'folder', ariaLabel: 'View by folders' },
|
||||
{ value: SearchLayout.List, icon: 'list-ul', ariaLabel: 'View as list' },
|
||||
];
|
||||
function getLayoutOptions() {
|
||||
const layoutOptions = [
|
||||
{ value: SearchLayout.Folders, icon: 'folder', ariaLabel: t('search.actions.view-as-folders', 'View by folders') },
|
||||
{ value: SearchLayout.List, icon: 'list-ul', ariaLabel: t('search.actions.view-as-list', 'View as list') },
|
||||
];
|
||||
|
||||
if (config.featureToggles.dashboardPreviews) {
|
||||
layoutOptions.push({ value: SearchLayout.Grid, icon: 'apps', ariaLabel: 'Grid view' });
|
||||
if (config.featureToggles.dashboardPreviews) {
|
||||
layoutOptions.push({
|
||||
value: SearchLayout.Grid,
|
||||
icon: 'apps',
|
||||
ariaLabel: t('search.actions.view-as-grid', 'Grid view'),
|
||||
});
|
||||
}
|
||||
|
||||
return layoutOptions;
|
||||
}
|
||||
|
||||
interface Props {
|
||||
@ -80,26 +89,33 @@ export const ActionRow: FC<Props> = ({
|
||||
disabled={layout === SearchLayout.Folders}
|
||||
value={state.includePanels}
|
||||
onChange={() => onSetIncludePanels(!state.includePanels)}
|
||||
label="Include panels"
|
||||
label={t('search.actions.include-panels', 'Include panels')}
|
||||
/>
|
||||
)}
|
||||
|
||||
{showStarredFilter && (
|
||||
<div className={styles.checkboxWrapper}>
|
||||
<Checkbox label="Starred" onChange={onStarredFilterChange} value={state.starred} />
|
||||
<Checkbox
|
||||
label={t('search.actions.starred', 'Starred')}
|
||||
onChange={onStarredFilterChange}
|
||||
value={state.starred}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
{state.datasource && (
|
||||
<Button icon="times" variant="secondary" onClick={() => onDatasourceChange(undefined)}>
|
||||
Datasource: {state.datasource}
|
||||
<Trans i18nKey="search.actions.remove-datasource-filter">
|
||||
Datasource: {{ datasource: state.datasource }}
|
||||
</Trans>
|
||||
</Button>
|
||||
)}
|
||||
</HorizontalGroup>
|
||||
|
||||
<div className={styles.rowContainer}>
|
||||
<HorizontalGroup spacing="md" width="auto">
|
||||
{!hideLayout && (
|
||||
<RadioButtonGroup
|
||||
options={layoutOptions}
|
||||
options={getLayoutOptions()}
|
||||
disabledOptions={disabledOptions}
|
||||
onChange={onLayoutChange}
|
||||
value={layout}
|
||||
@ -109,7 +125,7 @@ export const ActionRow: FC<Props> = ({
|
||||
onChange={(change) => onSortChange(change?.value)}
|
||||
value={state.sort}
|
||||
getSortOptions={getSortOptions}
|
||||
placeholder={sortPlaceholder || 'Sort'}
|
||||
placeholder={sortPlaceholder || t('search.actions.sort-placeholder', 'Sort')}
|
||||
isClearable
|
||||
/>
|
||||
</HorizontalGroup>
|
||||
|
@ -5,6 +5,7 @@ import { useAsync, useLocalStorage } from 'react-use';
|
||||
import { GrafanaTheme2 } from '@grafana/data';
|
||||
import { selectors } from '@grafana/e2e-selectors';
|
||||
import { Card, Checkbox, CollapsableSection, Icon, IconName, Spinner, useStyles2 } from '@grafana/ui';
|
||||
import { t } from 'app/core/internationalization';
|
||||
import { getSectionStorageKey } from 'app/features/search/utils';
|
||||
import { useUniqueId } from 'app/plugins/datasource/influxdb/components/useUniqueId';
|
||||
|
||||
@ -174,7 +175,10 @@ export const FolderSection = ({
|
||||
<>
|
||||
{selectionToggle && selection && (
|
||||
<div onClick={onToggleFolder}>
|
||||
<Checkbox value={selection(section.kind, section.uid)} aria-label="Select folder" />
|
||||
<Checkbox
|
||||
value={selection(section.kind, section.uid)}
|
||||
aria-label={t('search.folder-view.select-folder', 'Select folder')}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
|
||||
@ -186,7 +190,8 @@ export const FolderSection = ({
|
||||
<span id={labelId}>{section.title}</span>
|
||||
{section.url && section.uid !== 'general' && (
|
||||
<a href={section.url} className={styles.link}>
|
||||
<span className={styles.separator}>|</span> <Icon name="folder-upload" /> Go to folder
|
||||
<span className={styles.separator}>|</span> <Icon name="folder-upload" />{' '}
|
||||
{t('search.folder-view.go-to-folder', 'Go to folder')}
|
||||
</a>
|
||||
)}
|
||||
</div>
|
||||
|
@ -12,6 +12,7 @@ import {
|
||||
import { config, getDataSourceSrv } from '@grafana/runtime';
|
||||
import { Checkbox, Icon, IconButton, IconName, TagList } from '@grafana/ui';
|
||||
import appEvents from 'app/core/app_events';
|
||||
import { t } from 'app/core/internationalization';
|
||||
import { PluginIconName } from 'app/features/plugins/admin/types';
|
||||
import { ShowModalReactEvent } from 'app/types/events';
|
||||
|
||||
@ -63,7 +64,7 @@ export const generateColumns = (
|
||||
if (selection('*', '*')) {
|
||||
return (
|
||||
<div className={styles.checkboxHeader}>
|
||||
<IconButton name={'check-square' as any} onClick={clearSelection} />
|
||||
<IconButton name="check-square" onClick={clearSelection} />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@ -132,9 +133,7 @@ export const generateColumns = (
|
||||
},
|
||||
id: `column-name`,
|
||||
field: access.name!,
|
||||
Header: () => {
|
||||
return <div className={styles.headerNameStyle}>Name</div>;
|
||||
},
|
||||
Header: () => <div className={styles.headerNameStyle}>{t('search.results-table.name-header', 'Name')}</div>,
|
||||
width,
|
||||
});
|
||||
availableWidth -= width;
|
||||
@ -184,7 +183,7 @@ export const generateColumns = (
|
||||
},
|
||||
id: `column-location`,
|
||||
field: access.location ?? access.url,
|
||||
Header: 'Location',
|
||||
Header: () => t('search.results-table.location-header', 'Location'),
|
||||
width,
|
||||
});
|
||||
}
|
||||
@ -281,7 +280,7 @@ function makeDataSourceColumn(
|
||||
return {
|
||||
id: `column-datasource`,
|
||||
field,
|
||||
Header: 'Data source',
|
||||
Header: () => t('search.results-table.datasource-header', 'Data source'),
|
||||
Cell: (p) => {
|
||||
const dslist = field.values.get(p.row.index);
|
||||
if (!dslist?.length) {
|
||||
@ -329,7 +328,7 @@ function makeTypeColumn(
|
||||
return {
|
||||
id: `column-type`,
|
||||
field: kindField ?? typeField,
|
||||
Header: 'Type',
|
||||
Header: () => t('search.results-table.type-header', 'Type'),
|
||||
Cell: (p) => {
|
||||
const i = p.row.index;
|
||||
const kind = kindField?.values.get(i) ?? 'dashboard';
|
||||
@ -339,12 +338,12 @@ function makeTypeColumn(
|
||||
txt = kind;
|
||||
switch (txt) {
|
||||
case 'dashboard':
|
||||
txt = 'Dashboard';
|
||||
txt = t('search.results-table.type-dashboard', 'Dashboard');
|
||||
break;
|
||||
|
||||
case 'folder':
|
||||
icon = 'folder';
|
||||
txt = 'Folder';
|
||||
txt = t('search.results-table.type-folder', 'Folder');
|
||||
break;
|
||||
|
||||
case 'panel':
|
||||
@ -400,7 +399,7 @@ function makeTagsColumn(
|
||||
},
|
||||
id: `column-tags`,
|
||||
field: field,
|
||||
Header: 'Tags',
|
||||
Header: () => t('search.results-table.tags-header', 'Tags'),
|
||||
width,
|
||||
};
|
||||
}
|
||||
|
@ -29,7 +29,7 @@ describe('AdHocFilter', () => {
|
||||
await selectEvent.select(selectEl, 'key3', { container: document.body });
|
||||
|
||||
// Select value
|
||||
await userEvent.click(screen.getByText('select value'));
|
||||
await userEvent.click(screen.getByText('Select value'));
|
||||
// There are already some filters rendered
|
||||
const selectEl2 = screen.getAllByTestId('AdHocFilterValue-value-wrapper')[2];
|
||||
await selectEvent.select(selectEl2, 'val3', { container: document.body });
|
||||
|
@ -1,6 +1,7 @@
|
||||
import React, { FC, useCallback, useState } from 'react';
|
||||
|
||||
import { DataSourceRef, SelectableValue } from '@grafana/data';
|
||||
import { t } from 'app/core/internationalization';
|
||||
import { AdHocVariableFilter } from 'app/features/variables/types';
|
||||
|
||||
import { AdHocFilterKey, REMOVE_FILTER_KEY } from './AdHocFilterKey';
|
||||
@ -64,7 +65,7 @@ export const AdHocFilterBuilder: FC<Props> = ({ datasource, appendBefore, onComp
|
||||
<AdHocFilterRenderer
|
||||
datasource={datasource}
|
||||
filter={{ key, value: '', operator, condition: '' }}
|
||||
placeHolder="select value"
|
||||
placeHolder={t('variable.adhoc.placeholder', 'Select value')}
|
||||
onKeyChange={onKeyChanged}
|
||||
onOperatorChange={onOperatorChanged}
|
||||
onValueChange={onValueChanged}
|
||||
|
@ -43,7 +43,7 @@ export class VariableInput extends PureComponent<Props> {
|
||||
value={value ?? ''}
|
||||
onChange={this.onChange}
|
||||
onKeyDown={this.onKeyDown}
|
||||
placeholder={t('variable.picker.input', 'Enter variable value')}
|
||||
placeholder={t('variable.dropdown.placeholder', 'Enter variable value')}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
import React, { ChangeEvent, FocusEvent, KeyboardEvent, ReactElement, useCallback, useEffect, useState } from 'react';
|
||||
|
||||
import { Input } from '@grafana/ui';
|
||||
import { t } from 'app/core/internationalization';
|
||||
import { useDispatch } from 'app/types';
|
||||
|
||||
import { variableAdapters } from '../adapters';
|
||||
@ -70,7 +71,7 @@ export function TextBoxVariablePicker({ variable, onVariableChange, readOnly }:
|
||||
onBlur={onBlur}
|
||||
disabled={readOnly}
|
||||
onKeyDown={onKeyDown}
|
||||
placeholder="Enter variable value"
|
||||
placeholder={t('variable.textbox.placeholder', 'Enter variable value')}
|
||||
id={`var-${variable.id}`}
|
||||
/>
|
||||
);
|
||||
|
@ -18,6 +18,7 @@
|
||||
"section": {
|
||||
"actions": "",
|
||||
"dashboard-search-results": "",
|
||||
"folder-search-results": "",
|
||||
"pages": "",
|
||||
"preferences": "",
|
||||
"recent-dashboards": ""
|
||||
@ -110,6 +111,13 @@
|
||||
"folder-picker": {
|
||||
"loading": "Ordner werden geladen …"
|
||||
},
|
||||
"grafana-ui": {
|
||||
"segment-async": {
|
||||
"error": "",
|
||||
"loading": "",
|
||||
"no-options": ""
|
||||
}
|
||||
},
|
||||
"library-panel": {
|
||||
"add-modal": {
|
||||
"cancel": "Abbrechen",
|
||||
@ -251,6 +259,9 @@
|
||||
"manage-dashboards": {
|
||||
"title": "Durchsuchen"
|
||||
},
|
||||
"manage-folder": {
|
||||
"subtitle": ""
|
||||
},
|
||||
"monitoring": {
|
||||
"subtitle": "Überwachungs- und Infrastruktur-Apps",
|
||||
"title": "Überwachung"
|
||||
@ -345,6 +356,11 @@
|
||||
"navigation": {
|
||||
"kiosk": {
|
||||
"tv-alert": "Drücke ESC, um den Kiosk-Modus zu verlassen"
|
||||
},
|
||||
"toolbar": {
|
||||
"enable-kiosk": "",
|
||||
"toggle-menu": "",
|
||||
"toggle-search-bar": ""
|
||||
}
|
||||
},
|
||||
"news": {
|
||||
@ -393,11 +409,37 @@
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"actions": {
|
||||
"include-panels": "",
|
||||
"remove-datasource-filter": "",
|
||||
"sort-placeholder": "",
|
||||
"starred": "",
|
||||
"view-as-folders": "",
|
||||
"view-as-grid": "",
|
||||
"view-as-list": ""
|
||||
},
|
||||
"dashboard-actions": {
|
||||
"import": "",
|
||||
"new": "",
|
||||
"new-dashboard": "",
|
||||
"new-folder": ""
|
||||
},
|
||||
"folder-view": {
|
||||
"go-to-folder": "",
|
||||
"select-folder": ""
|
||||
},
|
||||
"results-table": {
|
||||
"datasource-header": "",
|
||||
"location-header": "",
|
||||
"name-header": "",
|
||||
"tags-header": "",
|
||||
"type-dashboard": "",
|
||||
"type-folder": "",
|
||||
"type-header": ""
|
||||
},
|
||||
"search-input": {
|
||||
"include-panels-placeholder": "",
|
||||
"placeholder": ""
|
||||
}
|
||||
},
|
||||
"share-modal": {
|
||||
@ -497,6 +539,11 @@
|
||||
},
|
||||
"title": "Einstellungen"
|
||||
},
|
||||
"tag-filter": {
|
||||
"loading": "",
|
||||
"no-tags": "",
|
||||
"placeholder": ""
|
||||
},
|
||||
"time-picker": {
|
||||
"absolute": {
|
||||
"recent-title": "Kürzlich verwendete absolute Bereiche",
|
||||
@ -572,12 +619,20 @@
|
||||
"loading": "Sitzungen werden geladen …"
|
||||
},
|
||||
"variable": {
|
||||
"adhoc": {
|
||||
"placeholder": ""
|
||||
},
|
||||
"dropdown": {
|
||||
"placeholder": ""
|
||||
},
|
||||
"picker": {
|
||||
"input": "Variablenwert eingeben",
|
||||
"link-all": "Alle",
|
||||
"option-all": "Alle",
|
||||
"option-selected-values": "Ausgewählt",
|
||||
"option-tooltip": "Auswahl löschen"
|
||||
},
|
||||
"textbox": {
|
||||
"placeholder": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -18,6 +18,7 @@
|
||||
"section": {
|
||||
"actions": "Actions",
|
||||
"dashboard-search-results": "Dashboards",
|
||||
"folder-search-results": "Folders",
|
||||
"pages": "Pages",
|
||||
"preferences": "Preferences",
|
||||
"recent-dashboards": "Recent dashboards"
|
||||
@ -110,6 +111,13 @@
|
||||
"folder-picker": {
|
||||
"loading": "Loading folders..."
|
||||
},
|
||||
"grafana-ui": {
|
||||
"segment-async": {
|
||||
"error": "Failed to load options",
|
||||
"loading": "Loading options...",
|
||||
"no-options": "No options found"
|
||||
}
|
||||
},
|
||||
"library-panel": {
|
||||
"add-modal": {
|
||||
"cancel": "Cancel",
|
||||
@ -251,6 +259,9 @@
|
||||
"manage-dashboards": {
|
||||
"title": "Browse"
|
||||
},
|
||||
"manage-folder": {
|
||||
"subtitle": "Manage folder dashboards and permissions"
|
||||
},
|
||||
"monitoring": {
|
||||
"subtitle": "Monitoring and infrastructure apps",
|
||||
"title": "Monitoring"
|
||||
@ -345,6 +356,11 @@
|
||||
"navigation": {
|
||||
"kiosk": {
|
||||
"tv-alert": "Press ESC to exit kiosk mode"
|
||||
},
|
||||
"toolbar": {
|
||||
"enable-kiosk": "Enable kiosk mode",
|
||||
"toggle-menu": "Toggle menu",
|
||||
"toggle-search-bar": "Toggle top search bar"
|
||||
}
|
||||
},
|
||||
"news": {
|
||||
@ -393,11 +409,37 @@
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"actions": {
|
||||
"include-panels": "Include panels",
|
||||
"remove-datasource-filter": "Datasource: {{datasource}}",
|
||||
"sort-placeholder": "Sort",
|
||||
"starred": "Starred",
|
||||
"view-as-folders": "View by folders",
|
||||
"view-as-grid": "Grid view",
|
||||
"view-as-list": "View as list"
|
||||
},
|
||||
"dashboard-actions": {
|
||||
"import": "Import",
|
||||
"new": "New",
|
||||
"new-dashboard": "New Dashboard",
|
||||
"new-folder": "New Folder"
|
||||
},
|
||||
"folder-view": {
|
||||
"go-to-folder": "Go to folder",
|
||||
"select-folder": "Select folder"
|
||||
},
|
||||
"results-table": {
|
||||
"datasource-header": "Data source",
|
||||
"location-header": "Location",
|
||||
"name-header": "Name",
|
||||
"tags-header": "Tags",
|
||||
"type-dashboard": "Dashboard",
|
||||
"type-folder": "Folder",
|
||||
"type-header": "Type"
|
||||
},
|
||||
"search-input": {
|
||||
"include-panels-placeholder": "Search for dashboards and panels",
|
||||
"placeholder": "Search for dashboards"
|
||||
}
|
||||
},
|
||||
"share-modal": {
|
||||
@ -497,6 +539,11 @@
|
||||
},
|
||||
"title": "Preferences"
|
||||
},
|
||||
"tag-filter": {
|
||||
"loading": "Loading...",
|
||||
"no-tags": "No tags found",
|
||||
"placeholder": "Filter by tag"
|
||||
},
|
||||
"time-picker": {
|
||||
"absolute": {
|
||||
"recent-title": "Recently used absolute ranges",
|
||||
@ -572,12 +619,20 @@
|
||||
"loading": "Loading sessions..."
|
||||
},
|
||||
"variable": {
|
||||
"adhoc": {
|
||||
"placeholder": "Select value"
|
||||
},
|
||||
"dropdown": {
|
||||
"placeholder": "Enter variable value"
|
||||
},
|
||||
"picker": {
|
||||
"input": "Enter variable value",
|
||||
"link-all": "All",
|
||||
"option-all": "All",
|
||||
"option-selected-values": "Selected",
|
||||
"option-tooltip": "Clear selections"
|
||||
},
|
||||
"textbox": {
|
||||
"placeholder": "Enter variable value"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -18,6 +18,7 @@
|
||||
"section": {
|
||||
"actions": "",
|
||||
"dashboard-search-results": "",
|
||||
"folder-search-results": "",
|
||||
"pages": "",
|
||||
"preferences": "",
|
||||
"recent-dashboards": ""
|
||||
@ -110,6 +111,13 @@
|
||||
"folder-picker": {
|
||||
"loading": "Cargando carpetas..."
|
||||
},
|
||||
"grafana-ui": {
|
||||
"segment-async": {
|
||||
"error": "",
|
||||
"loading": "",
|
||||
"no-options": ""
|
||||
}
|
||||
},
|
||||
"library-panel": {
|
||||
"add-modal": {
|
||||
"cancel": "Cancelar",
|
||||
@ -251,6 +259,9 @@
|
||||
"manage-dashboards": {
|
||||
"title": "Navegar"
|
||||
},
|
||||
"manage-folder": {
|
||||
"subtitle": ""
|
||||
},
|
||||
"monitoring": {
|
||||
"subtitle": "Aplicaciones de supervisión e infraestructura",
|
||||
"title": "Seguimiento"
|
||||
@ -345,6 +356,11 @@
|
||||
"navigation": {
|
||||
"kiosk": {
|
||||
"tv-alert": "Pulse ESC para salir del modo de quiosco"
|
||||
},
|
||||
"toolbar": {
|
||||
"enable-kiosk": "",
|
||||
"toggle-menu": "",
|
||||
"toggle-search-bar": ""
|
||||
}
|
||||
},
|
||||
"news": {
|
||||
@ -393,11 +409,37 @@
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"actions": {
|
||||
"include-panels": "",
|
||||
"remove-datasource-filter": "",
|
||||
"sort-placeholder": "",
|
||||
"starred": "",
|
||||
"view-as-folders": "",
|
||||
"view-as-grid": "",
|
||||
"view-as-list": ""
|
||||
},
|
||||
"dashboard-actions": {
|
||||
"import": "",
|
||||
"new": "",
|
||||
"new-dashboard": "",
|
||||
"new-folder": ""
|
||||
},
|
||||
"folder-view": {
|
||||
"go-to-folder": "",
|
||||
"select-folder": ""
|
||||
},
|
||||
"results-table": {
|
||||
"datasource-header": "",
|
||||
"location-header": "",
|
||||
"name-header": "",
|
||||
"tags-header": "",
|
||||
"type-dashboard": "",
|
||||
"type-folder": "",
|
||||
"type-header": ""
|
||||
},
|
||||
"search-input": {
|
||||
"include-panels-placeholder": "",
|
||||
"placeholder": ""
|
||||
}
|
||||
},
|
||||
"share-modal": {
|
||||
@ -497,6 +539,11 @@
|
||||
},
|
||||
"title": "Preferencias"
|
||||
},
|
||||
"tag-filter": {
|
||||
"loading": "",
|
||||
"no-tags": "",
|
||||
"placeholder": ""
|
||||
},
|
||||
"time-picker": {
|
||||
"absolute": {
|
||||
"recent-title": "Intervalos absolutos utilizados recientemente",
|
||||
@ -572,12 +619,20 @@
|
||||
"loading": "Cargando sesiones..."
|
||||
},
|
||||
"variable": {
|
||||
"adhoc": {
|
||||
"placeholder": ""
|
||||
},
|
||||
"dropdown": {
|
||||
"placeholder": ""
|
||||
},
|
||||
"picker": {
|
||||
"input": "Introducir el valor de la variable",
|
||||
"link-all": "Todo",
|
||||
"option-all": "Todo",
|
||||
"option-selected-values": "Seleccionados",
|
||||
"option-tooltip": "Eliminar selecciones"
|
||||
},
|
||||
"textbox": {
|
||||
"placeholder": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -18,6 +18,7 @@
|
||||
"section": {
|
||||
"actions": "",
|
||||
"dashboard-search-results": "",
|
||||
"folder-search-results": "",
|
||||
"pages": "",
|
||||
"preferences": "",
|
||||
"recent-dashboards": ""
|
||||
@ -110,6 +111,13 @@
|
||||
"folder-picker": {
|
||||
"loading": "Chargement des dossiers..."
|
||||
},
|
||||
"grafana-ui": {
|
||||
"segment-async": {
|
||||
"error": "",
|
||||
"loading": "",
|
||||
"no-options": ""
|
||||
}
|
||||
},
|
||||
"library-panel": {
|
||||
"add-modal": {
|
||||
"cancel": "Annuler",
|
||||
@ -251,6 +259,9 @@
|
||||
"manage-dashboards": {
|
||||
"title": "Parcourir"
|
||||
},
|
||||
"manage-folder": {
|
||||
"subtitle": ""
|
||||
},
|
||||
"monitoring": {
|
||||
"subtitle": "Applications de suivi et d'infrastructure",
|
||||
"title": "Suivi"
|
||||
@ -345,6 +356,11 @@
|
||||
"navigation": {
|
||||
"kiosk": {
|
||||
"tv-alert": "Appuyez sur ESC pour quitter le mode kiosque"
|
||||
},
|
||||
"toolbar": {
|
||||
"enable-kiosk": "",
|
||||
"toggle-menu": "",
|
||||
"toggle-search-bar": ""
|
||||
}
|
||||
},
|
||||
"news": {
|
||||
@ -393,11 +409,37 @@
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"actions": {
|
||||
"include-panels": "",
|
||||
"remove-datasource-filter": "",
|
||||
"sort-placeholder": "",
|
||||
"starred": "",
|
||||
"view-as-folders": "",
|
||||
"view-as-grid": "",
|
||||
"view-as-list": ""
|
||||
},
|
||||
"dashboard-actions": {
|
||||
"import": "",
|
||||
"new": "",
|
||||
"new-dashboard": "",
|
||||
"new-folder": ""
|
||||
},
|
||||
"folder-view": {
|
||||
"go-to-folder": "",
|
||||
"select-folder": ""
|
||||
},
|
||||
"results-table": {
|
||||
"datasource-header": "",
|
||||
"location-header": "",
|
||||
"name-header": "",
|
||||
"tags-header": "",
|
||||
"type-dashboard": "",
|
||||
"type-folder": "",
|
||||
"type-header": ""
|
||||
},
|
||||
"search-input": {
|
||||
"include-panels-placeholder": "",
|
||||
"placeholder": ""
|
||||
}
|
||||
},
|
||||
"share-modal": {
|
||||
@ -497,6 +539,11 @@
|
||||
},
|
||||
"title": "Préférences"
|
||||
},
|
||||
"tag-filter": {
|
||||
"loading": "",
|
||||
"no-tags": "",
|
||||
"placeholder": ""
|
||||
},
|
||||
"time-picker": {
|
||||
"absolute": {
|
||||
"recent-title": "Périodes absolues récemment utilisées",
|
||||
@ -572,12 +619,20 @@
|
||||
"loading": "Chargement des sessions..."
|
||||
},
|
||||
"variable": {
|
||||
"adhoc": {
|
||||
"placeholder": ""
|
||||
},
|
||||
"dropdown": {
|
||||
"placeholder": ""
|
||||
},
|
||||
"picker": {
|
||||
"input": "Entrer la valeur de la variable",
|
||||
"link-all": "Tout",
|
||||
"option-all": "Tout",
|
||||
"option-selected-values": "Sélection",
|
||||
"option-tooltip": "Effacer les sélections"
|
||||
},
|
||||
"textbox": {
|
||||
"placeholder": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -18,6 +18,7 @@
|
||||
"section": {
|
||||
"actions": "Åčŧįőʼnş",
|
||||
"dashboard-search-results": "Đäşĥþőäřđş",
|
||||
"folder-search-results": "Főľđęřş",
|
||||
"pages": "Päģęş",
|
||||
"preferences": "Přęƒęřęʼnčęş",
|
||||
"recent-dashboards": "Ŗęčęʼnŧ đäşĥþőäřđş"
|
||||
@ -110,6 +111,13 @@
|
||||
"folder-picker": {
|
||||
"loading": "Ŀőäđįʼnģ ƒőľđęřş..."
|
||||
},
|
||||
"grafana-ui": {
|
||||
"segment-async": {
|
||||
"error": "Fäįľęđ ŧő ľőäđ őpŧįőʼnş",
|
||||
"loading": "Ŀőäđįʼnģ őpŧįőʼnş...",
|
||||
"no-options": "Ńő őpŧįőʼnş ƒőūʼnđ"
|
||||
}
|
||||
},
|
||||
"library-panel": {
|
||||
"add-modal": {
|
||||
"cancel": "Cäʼnčęľ",
|
||||
@ -251,6 +259,9 @@
|
||||
"manage-dashboards": {
|
||||
"title": "ßřőŵşę"
|
||||
},
|
||||
"manage-folder": {
|
||||
"subtitle": "Mäʼnäģę ƒőľđęř đäşĥþőäřđş äʼnđ pęřmįşşįőʼnş"
|
||||
},
|
||||
"monitoring": {
|
||||
"subtitle": "Mőʼnįŧőřįʼnģ äʼnđ įʼnƒřäşŧřūčŧūřę äppş",
|
||||
"title": "Mőʼnįŧőřįʼnģ"
|
||||
@ -345,6 +356,11 @@
|
||||
"navigation": {
|
||||
"kiosk": {
|
||||
"tv-alert": "Přęşş ĒŜC ŧő ęχįŧ ĸįőşĸ mőđę"
|
||||
},
|
||||
"toolbar": {
|
||||
"enable-kiosk": "Ēʼnäþľę ĸįőşĸ mőđę",
|
||||
"toggle-menu": "Ŧőģģľę męʼnū",
|
||||
"toggle-search-bar": "Ŧőģģľę ŧőp şęäřčĥ þäř"
|
||||
}
|
||||
},
|
||||
"news": {
|
||||
@ -393,11 +409,37 @@
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"actions": {
|
||||
"include-panels": "Ĩʼnčľūđę päʼnęľş",
|
||||
"remove-datasource-filter": "Đäŧäşőūřčę: {{datasource}}",
|
||||
"sort-placeholder": "Ŝőřŧ",
|
||||
"starred": "Ŝŧäřřęđ",
|
||||
"view-as-folders": "Vįęŵ þy ƒőľđęřş",
|
||||
"view-as-grid": "Ğřįđ vįęŵ",
|
||||
"view-as-list": "Vįęŵ äş ľįşŧ"
|
||||
},
|
||||
"dashboard-actions": {
|
||||
"import": "Ĩmpőřŧ",
|
||||
"new": "Ńęŵ",
|
||||
"new-dashboard": "Ńęŵ Đäşĥþőäřđ",
|
||||
"new-folder": "Ńęŵ Főľđęř"
|
||||
},
|
||||
"folder-view": {
|
||||
"go-to-folder": "Ğő ŧő ƒőľđęř",
|
||||
"select-folder": "Ŝęľęčŧ ƒőľđęř"
|
||||
},
|
||||
"results-table": {
|
||||
"datasource-header": "Đäŧä şőūřčę",
|
||||
"location-header": "Ŀőčäŧįőʼn",
|
||||
"name-header": "Ńämę",
|
||||
"tags-header": "Ŧäģş",
|
||||
"type-dashboard": "Đäşĥþőäřđ",
|
||||
"type-folder": "Főľđęř",
|
||||
"type-header": "Ŧypę"
|
||||
},
|
||||
"search-input": {
|
||||
"include-panels-placeholder": "Ŝęäřčĥ ƒőř đäşĥþőäřđş äʼnđ päʼnęľş",
|
||||
"placeholder": "Ŝęäřčĥ ƒőř đäşĥþőäřđş"
|
||||
}
|
||||
},
|
||||
"share-modal": {
|
||||
@ -497,6 +539,11 @@
|
||||
},
|
||||
"title": "Přęƒęřęʼnčęş"
|
||||
},
|
||||
"tag-filter": {
|
||||
"loading": "Ŀőäđįʼnģ...",
|
||||
"no-tags": "Ńő ŧäģş ƒőūʼnđ",
|
||||
"placeholder": "Fįľŧęř þy ŧäģ"
|
||||
},
|
||||
"time-picker": {
|
||||
"absolute": {
|
||||
"recent-title": "Ŗęčęʼnŧľy ūşęđ äþşőľūŧę řäʼnģęş",
|
||||
@ -572,12 +619,20 @@
|
||||
"loading": "Ŀőäđįʼnģ şęşşįőʼnş..."
|
||||
},
|
||||
"variable": {
|
||||
"adhoc": {
|
||||
"placeholder": "Ŝęľęčŧ väľūę"
|
||||
},
|
||||
"dropdown": {
|
||||
"placeholder": "Ēʼnŧęř väřįäþľę väľūę"
|
||||
},
|
||||
"picker": {
|
||||
"input": "Ēʼnŧęř väřįäþľę väľūę",
|
||||
"link-all": "Åľľ",
|
||||
"option-all": "Åľľ",
|
||||
"option-selected-values": "Ŝęľęčŧęđ",
|
||||
"option-tooltip": "Cľęäř şęľęčŧįőʼnş"
|
||||
},
|
||||
"textbox": {
|
||||
"placeholder": "Ēʼnŧęř väřįäþľę väľūę"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -18,6 +18,7 @@
|
||||
"section": {
|
||||
"actions": "",
|
||||
"dashboard-search-results": "",
|
||||
"folder-search-results": "",
|
||||
"pages": "",
|
||||
"preferences": "",
|
||||
"recent-dashboards": ""
|
||||
@ -110,6 +111,13 @@
|
||||
"folder-picker": {
|
||||
"loading": "正在加载文件夹..."
|
||||
},
|
||||
"grafana-ui": {
|
||||
"segment-async": {
|
||||
"error": "",
|
||||
"loading": "",
|
||||
"no-options": ""
|
||||
}
|
||||
},
|
||||
"library-panel": {
|
||||
"add-modal": {
|
||||
"cancel": "取消",
|
||||
@ -251,6 +259,9 @@
|
||||
"manage-dashboards": {
|
||||
"title": "浏览"
|
||||
},
|
||||
"manage-folder": {
|
||||
"subtitle": ""
|
||||
},
|
||||
"monitoring": {
|
||||
"subtitle": "监控和基础设施应用",
|
||||
"title": "正在监控"
|
||||
@ -345,6 +356,11 @@
|
||||
"navigation": {
|
||||
"kiosk": {
|
||||
"tv-alert": "按 ESC 退出 kiosk 模式"
|
||||
},
|
||||
"toolbar": {
|
||||
"enable-kiosk": "",
|
||||
"toggle-menu": "",
|
||||
"toggle-search-bar": ""
|
||||
}
|
||||
},
|
||||
"news": {
|
||||
@ -393,11 +409,37 @@
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"actions": {
|
||||
"include-panels": "",
|
||||
"remove-datasource-filter": "",
|
||||
"sort-placeholder": "",
|
||||
"starred": "",
|
||||
"view-as-folders": "",
|
||||
"view-as-grid": "",
|
||||
"view-as-list": ""
|
||||
},
|
||||
"dashboard-actions": {
|
||||
"import": "",
|
||||
"new": "",
|
||||
"new-dashboard": "",
|
||||
"new-folder": ""
|
||||
},
|
||||
"folder-view": {
|
||||
"go-to-folder": "",
|
||||
"select-folder": ""
|
||||
},
|
||||
"results-table": {
|
||||
"datasource-header": "",
|
||||
"location-header": "",
|
||||
"name-header": "",
|
||||
"tags-header": "",
|
||||
"type-dashboard": "",
|
||||
"type-folder": "",
|
||||
"type-header": ""
|
||||
},
|
||||
"search-input": {
|
||||
"include-panels-placeholder": "",
|
||||
"placeholder": ""
|
||||
}
|
||||
},
|
||||
"share-modal": {
|
||||
@ -497,6 +539,11 @@
|
||||
},
|
||||
"title": "首选项"
|
||||
},
|
||||
"tag-filter": {
|
||||
"loading": "",
|
||||
"no-tags": "",
|
||||
"placeholder": ""
|
||||
},
|
||||
"time-picker": {
|
||||
"absolute": {
|
||||
"recent-title": "最近使用的绝对范围",
|
||||
@ -572,12 +619,20 @@
|
||||
"loading": "正在加载会话..."
|
||||
},
|
||||
"variable": {
|
||||
"adhoc": {
|
||||
"placeholder": ""
|
||||
},
|
||||
"dropdown": {
|
||||
"placeholder": ""
|
||||
},
|
||||
"picker": {
|
||||
"input": "",
|
||||
"link-all": "",
|
||||
"option-all": "",
|
||||
"option-selected-values": "",
|
||||
"option-tooltip": ""
|
||||
},
|
||||
"textbox": {
|
||||
"placeholder": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user