mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
I18n: Migrate to I18next (#55845)
* Switch from lingui from i18next * Change lingui messages to i18next messages * Change lingui messages to i18next messages (grafana-ui) * Init i18n for tests
This commit is contained in:
parent
c1d6df4eb7
commit
5361efc225
2
.gitignore
vendored
2
.gitignore
vendored
@ -179,7 +179,7 @@ compilation-stats.json
|
||||
|
||||
# Auto-generated internationalization files
|
||||
public/locales/_build/
|
||||
public/locales/**/*.js
|
||||
public/locales/*/*.js
|
||||
|
||||
deployment_tools_config.json
|
||||
|
||||
|
@ -29,13 +29,5 @@ module.exports = {
|
||||
'\\.svg': '<rootDir>/public/test/mocks/svg.ts',
|
||||
'\\.css': '<rootDir>/public/test/mocks/style.ts',
|
||||
'monaco-editor/esm/vs/editor/editor.api': '<rootDir>/public/test/mocks/monaco.ts',
|
||||
|
||||
// lingui-macro (for i18n) makes use of babel-macro, which we do not enable in tests, so we
|
||||
// provide our own mock component
|
||||
'@lingui/macro': '<rootDir>/public/test/mocks/linguiMacro.tsx',
|
||||
|
||||
// i18n messages.js files are auto-generated, and may not exist when the tests are ran.
|
||||
// Because we mock out <Trans /> anyway, we can mock the messages also
|
||||
'locales/\\w+/messages$': '<rootDir>/public/test/mocks/i18nMessages.ts',
|
||||
},
|
||||
};
|
||||
|
13
package.json
13
package.json
@ -49,9 +49,9 @@
|
||||
"plugins:build-bundled": "grafana-toolkit plugin:bundle-managed",
|
||||
"watch": "yarn start -d watch,start core:start --watchTheme",
|
||||
"ci:test-frontend": "yarn run test:ci && yarn grafana-toolkit node-version-check",
|
||||
"i18n:extract": "lingui extract",
|
||||
"i18n:compile": "lingui compile",
|
||||
"postinstall": "husky install",
|
||||
"i18n:extract": "yarn run i18next -c public/locales/i18next-parser.config.js 'public/**/*.{tsx,ts}' 'packages/grafana-ui/**/*.{tsx,ts}' && node ./public/locales/psuedo.js",
|
||||
"i18n:compile": "echo 'no i18n compile yet, all good'",
|
||||
"betterer": "betterer",
|
||||
"betterer:merge": "betterer merge",
|
||||
"betterer:stats": "ts-node --transpile-only --project ./scripts/cli/tsconfig.json ./scripts/cli/reportBettererStats.ts"
|
||||
@ -96,8 +96,6 @@
|
||||
"@grafana/eslint-config": "5.0.0",
|
||||
"@grafana/toolkit": "workspace:*",
|
||||
"@grafana/tsconfig": "^1.2.0-rc1",
|
||||
"@lingui/cli": "3.14.0",
|
||||
"@lingui/macro": "3.14.0",
|
||||
"@pmmmwh/react-refresh-webpack-plugin": "0.5.7",
|
||||
"@react-types/button": "3.6.1",
|
||||
"@react-types/menu": "3.7.1",
|
||||
@ -131,7 +129,6 @@
|
||||
"@types/jquery": "3.5.14",
|
||||
"@types/js-yaml": "^4.0.5",
|
||||
"@types/jsurl": "^1.2.28",
|
||||
"@types/lingui__macro": "^3",
|
||||
"@types/lodash": "4.14.182",
|
||||
"@types/logfmt": "^1.2.1",
|
||||
"@types/mousetrap": "1.6.9",
|
||||
@ -199,6 +196,7 @@
|
||||
"html-webpack-plugin": "5.5.0",
|
||||
"http-server": "14.1.1",
|
||||
"husky": "8.0.1",
|
||||
"i18next-parser": "6.5.0",
|
||||
"jest": "28.1.3",
|
||||
"jest-canvas-mock": "2.4.0",
|
||||
"jest-date-mock": "1.0.8",
|
||||
@ -269,8 +267,6 @@
|
||||
"@lezer/common": "1.0.0",
|
||||
"@lezer/highlight": "^1.0.0",
|
||||
"@lezer/lr": "1.2.3",
|
||||
"@lingui/core": "3.14.0",
|
||||
"@lingui/react": "3.14.0",
|
||||
"@opentelemetry/api": "1.2.0",
|
||||
"@opentelemetry/exporter-collector": "0.25.0",
|
||||
"@opentelemetry/semantic-conventions": "1.7.0",
|
||||
@ -328,6 +324,7 @@
|
||||
"framework-utils": "^1.1.0",
|
||||
"history": "4.10.1",
|
||||
"hoist-non-react-statics": "3.3.2",
|
||||
"i18next": "^21.9.2",
|
||||
"immer": "9.0.15",
|
||||
"immutable": "4.1.0",
|
||||
"jquery": "3.6.0",
|
||||
@ -352,6 +349,7 @@
|
||||
"pluralize": "^8.0.0",
|
||||
"prismjs": "1.29.0",
|
||||
"prop-types": "15.8.1",
|
||||
"pseudoizer": "^0.1.0",
|
||||
"rc-cascader": "3.7.0",
|
||||
"rc-drawer": "4.4.3",
|
||||
"rc-slider": "9.7.5",
|
||||
@ -367,6 +365,7 @@
|
||||
"react-grid-layout": "1.3.4",
|
||||
"react-highlight-words": "0.18.0",
|
||||
"react-hook-form": "7.5.3",
|
||||
"react-i18next": "^11.18.6",
|
||||
"react-inlinesvg": "3.0.0",
|
||||
"react-moveable": "0.38.4",
|
||||
"react-popper": "2.3.0",
|
||||
|
@ -68,6 +68,7 @@
|
||||
"d3": "5.15.0",
|
||||
"date-fns": "2.29.1",
|
||||
"hoist-non-react-statics": "3.3.2",
|
||||
"i18next": "^21.9.2",
|
||||
"immutable": "4.1.0",
|
||||
"is-hotkey": "0.2.0",
|
||||
"jquery": "3.6.0",
|
||||
@ -88,6 +89,7 @@
|
||||
"react-dropzone": "14.2.2",
|
||||
"react-highlight-words": "0.18.0",
|
||||
"react-hook-form": "7.5.3",
|
||||
"react-i18next": "^11.18.6",
|
||||
"react-inlinesvg": "3.0.0",
|
||||
"react-popper": "2.3.0",
|
||||
"react-popper-tooltip": "^4.3.1",
|
||||
|
@ -7,6 +7,7 @@ import { selectors } from '@grafana/e2e-selectors';
|
||||
import { FilterInput } from '../..';
|
||||
import { stylesFactory, useTheme2 } from '../../../themes';
|
||||
import { getFocusStyles } from '../../../themes/mixins';
|
||||
import { t, Trans } from '../../../utils/i18n';
|
||||
import { CustomScrollbar } from '../../CustomScrollbar/CustomScrollbar';
|
||||
import { Icon } from '../../Icon/Icon';
|
||||
|
||||
@ -148,7 +149,9 @@ const NarrowScreenForm = (props: FormProps) => {
|
||||
aria-expanded={!collapsed}
|
||||
aria-controls="expanded-timerange"
|
||||
>
|
||||
<TimePickerTitle>Absolute time range</TimePickerTitle>
|
||||
<TimePickerTitle>
|
||||
<Trans i18nKey="time-picker.absolute.title">Absolute time range</Trans>
|
||||
</TimePickerTitle>
|
||||
{!hideQuickRanges && <Icon name={!collapsed ? 'angle-up' : 'angle-down'} />}
|
||||
</button>
|
||||
</div>
|
||||
@ -157,9 +160,10 @@ const NarrowScreenForm = (props: FormProps) => {
|
||||
<div className={styles.form}>
|
||||
<TimeRangeContent value={value} onApply={onChange} timeZone={timeZone} isFullscreen={false} />
|
||||
</div>
|
||||
<p></p>
|
||||
{showHistory && (
|
||||
<TimeRangeList
|
||||
title="Recently used absolute ranges"
|
||||
title={t('time-picker.absolute.recent-title', 'Recently used absolute ranges')}
|
||||
options={historyOptions}
|
||||
onChange={onChangeTimeOption}
|
||||
placeholderEmpty={null}
|
||||
@ -183,7 +187,9 @@ const FullScreenForm: React.FC<FormProps> = (props) => {
|
||||
<>
|
||||
<div className={styles.container}>
|
||||
<div className={styles.title} data-testid={selectors.components.TimePicker.absoluteTimeRangeTitle}>
|
||||
<TimePickerTitle>Absolute time range</TimePickerTitle>
|
||||
<TimePickerTitle>
|
||||
<Trans i18nKey="time-picker.absolute.title">Absolute time range</Trans>
|
||||
</TimePickerTitle>
|
||||
</div>
|
||||
<TimeRangeContent
|
||||
value={value}
|
||||
@ -197,7 +203,7 @@ const FullScreenForm: React.FC<FormProps> = (props) => {
|
||||
{props.showHistory && (
|
||||
<div className={styles.recent}>
|
||||
<TimeRangeList
|
||||
title="Recently used absolute ranges"
|
||||
title={t('time-picker.absolute.recent-title', 'Recently used absolute ranges')}
|
||||
options={historyOptions || []}
|
||||
onChange={onChangeTimeOption}
|
||||
placeholderEmpty={<EmptyRecentList />}
|
||||
@ -353,7 +359,7 @@ const getEmptyListStyles = stylesFactory((theme: GrafanaTheme2) => {
|
||||
a,
|
||||
span {
|
||||
font-size: 13px;
|
||||
}
|
||||
}\
|
||||
`,
|
||||
link: css`
|
||||
color: ${theme.colors.text.link};
|
||||
|
34
packages/grafana-ui/src/utils/i18n.tsx
Normal file
34
packages/grafana-ui/src/utils/i18n.tsx
Normal file
@ -0,0 +1,34 @@
|
||||
import i18next from 'i18next';
|
||||
import React from 'react';
|
||||
import { Trans as I18NextTrans, initReactI18next } from 'react-i18next';
|
||||
|
||||
// We want to translate grafana-ui without introducing any breaking changes for consumers
|
||||
// who use grafana-ui outside of grafana (such as grafana.com self serve). The other struggle
|
||||
// is that grafana-ui does not require a top-level provider component, so we don't get the
|
||||
// chance to do the mandatory i18next setup that <Trans /> and t() requires
|
||||
//
|
||||
// We wrap <Trans /> and t() and do a simple check if it hasn't already been set up
|
||||
// (Grafana will init i18next in app.ts), and just set it up with a minimal config
|
||||
// to use the default phrases in the source jsx.
|
||||
|
||||
// Creates a default, english i18next instance when running outside of grafana.
|
||||
// we don't support changing the locale of grafana ui when outside of Grafana
|
||||
function initI18n() {
|
||||
if (!i18next.options.lng) {
|
||||
i18next.use(initReactI18next).init({
|
||||
resources: {},
|
||||
returnEmptyString: false,
|
||||
lng: 'en-US', // this should be the locale of the phrases in our source JSX
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export const Trans: typeof I18NextTrans = (props) => {
|
||||
initI18n();
|
||||
return <I18NextTrans {...props} />;
|
||||
};
|
||||
|
||||
export const t = (id: string, defaultMessage: string) => {
|
||||
initI18n();
|
||||
return i18next.t(id, defaultMessage);
|
||||
};
|
@ -16,7 +16,6 @@ import { AppChrome } from './core/components/AppChrome/AppChrome';
|
||||
import { AppNotificationList } from './core/components/AppNotifications/AppNotificationList';
|
||||
import { NavBar } from './core/components/NavBar/NavBar';
|
||||
import { GrafanaContext } from './core/context/GrafanaContext';
|
||||
import { I18nProvider } from './core/internationalization';
|
||||
import { GrafanaRoute } from './core/navigation/GrafanaRoute';
|
||||
import { RouteDescriptor } from './core/navigation/types';
|
||||
import { contextSrv } from './core/services/context_srv';
|
||||
@ -115,44 +114,42 @@ export class AppWrapper extends React.Component<AppWrapperProps, AppWrapperState
|
||||
return (
|
||||
<React.StrictMode>
|
||||
<Provider store={store}>
|
||||
<I18nProvider>
|
||||
<ErrorBoundaryAlert style="page">
|
||||
<GrafanaContext.Provider value={app.context}>
|
||||
<ThemeProvider value={config.theme2}>
|
||||
<KBarProvider
|
||||
actions={[]}
|
||||
options={{ enableHistory: true, callbacks: { onSelectAction: commandPaletteActionSelected } }}
|
||||
>
|
||||
<ModalsProvider>
|
||||
<GlobalStyles />
|
||||
{this.commandPaletteEnabled() && <CommandPalette />}
|
||||
<div className="grafana-app">
|
||||
<Router history={locationService.getHistory()}>
|
||||
{this.renderNavBar()}
|
||||
<AppChrome>
|
||||
{pageBanners.map((Banner, index) => (
|
||||
<Banner key={index.toString()} />
|
||||
))}
|
||||
<ErrorBoundaryAlert style="page">
|
||||
<GrafanaContext.Provider value={app.context}>
|
||||
<ThemeProvider value={config.theme2}>
|
||||
<KBarProvider
|
||||
actions={[]}
|
||||
options={{ enableHistory: true, callbacks: { onSelectAction: commandPaletteActionSelected } }}
|
||||
>
|
||||
<ModalsProvider>
|
||||
<GlobalStyles />
|
||||
{this.commandPaletteEnabled() && <CommandPalette />}
|
||||
<div className="grafana-app">
|
||||
<Router history={locationService.getHistory()}>
|
||||
{this.renderNavBar()}
|
||||
<AppChrome>
|
||||
{pageBanners.map((Banner, index) => (
|
||||
<Banner key={index.toString()} />
|
||||
))}
|
||||
|
||||
<AngularRoot />
|
||||
<AppNotificationList />
|
||||
{this.searchBarEnabled() && <SearchWrapper />}
|
||||
{ready && this.renderRoutes()}
|
||||
{bodyRenderHooks.map((Hook, index) => (
|
||||
<Hook key={index.toString()} />
|
||||
))}
|
||||
</AppChrome>
|
||||
</Router>
|
||||
</div>
|
||||
<LiveConnectionWarning />
|
||||
<ModalRoot />
|
||||
<PortalContainer />
|
||||
</ModalsProvider>
|
||||
</KBarProvider>
|
||||
</ThemeProvider>
|
||||
</GrafanaContext.Provider>
|
||||
</ErrorBoundaryAlert>
|
||||
</I18nProvider>
|
||||
<AngularRoot />
|
||||
<AppNotificationList />
|
||||
{this.searchBarEnabled() && <SearchWrapper />}
|
||||
{ready && this.renderRoutes()}
|
||||
{bodyRenderHooks.map((Hook, index) => (
|
||||
<Hook key={index.toString()} />
|
||||
))}
|
||||
</AppChrome>
|
||||
</Router>
|
||||
</div>
|
||||
<LiveConnectionWarning />
|
||||
<ModalRoot />
|
||||
<PortalContainer />
|
||||
</ModalsProvider>
|
||||
</KBarProvider>
|
||||
</ThemeProvider>
|
||||
</GrafanaContext.Provider>
|
||||
</ErrorBoundaryAlert>
|
||||
</Provider>
|
||||
</React.StrictMode>
|
||||
);
|
||||
|
@ -47,6 +47,7 @@ import { AppChromeService } from './core/components/AppChrome/AppChromeService';
|
||||
import { getAllOptionEditors, getAllStandardFieldConfigs } from './core/components/OptionsUI/registry';
|
||||
import { PluginPage } from './core/components/PageNew/PluginPage';
|
||||
import { GrafanaContextType } from './core/context/GrafanaContext';
|
||||
import { initializeI18n } from './core/internationalization';
|
||||
import { interceptLinkClicks } from './core/navigation/patch/interceptLinkClicks';
|
||||
import { ModalManager } from './core/services/ModalManager';
|
||||
import { backendSrv } from './core/services/backend_srv';
|
||||
@ -104,6 +105,8 @@ export class GrafanaApp {
|
||||
// Let iframe container know grafana has started loading
|
||||
parent.postMessage('GrafanaAppInit', '*');
|
||||
|
||||
const loadLocalePromise = initializeI18n(config.bootData.user.locale);
|
||||
|
||||
setBackendSrv(backendSrv);
|
||||
initEchoSrv();
|
||||
addClassIfNoOverlayScrollbar();
|
||||
@ -156,8 +159,12 @@ export class GrafanaApp {
|
||||
const modalManager = new ModalManager();
|
||||
modalManager.init();
|
||||
|
||||
// Preload selected app plugins
|
||||
await preloadPlugins(config.pluginsToPreload);
|
||||
await Promise.all([
|
||||
loadLocalePromise,
|
||||
|
||||
// Preload selected app plugins
|
||||
await preloadPlugins(config.pluginsToPreload),
|
||||
]);
|
||||
|
||||
// initialize chrome service
|
||||
const queryParams = locationService.getSearchObject();
|
||||
|
@ -1,10 +1,10 @@
|
||||
import { t } from '@lingui/macro';
|
||||
import { useObservable } from 'react-use';
|
||||
import { BehaviorSubject } from 'rxjs';
|
||||
|
||||
import { AppEvents, NavModelItem, UrlQueryValue } from '@grafana/data';
|
||||
import { locationService } from '@grafana/runtime';
|
||||
import appEvents from 'app/core/app_events';
|
||||
import { t } from 'app/core/internationalization';
|
||||
import store from 'app/core/store';
|
||||
import { isShallowEqual } from 'app/core/utils/isShallowEqual';
|
||||
import { KioskMode } from 'app/types';
|
||||
@ -123,9 +123,7 @@ export class AppChromeService {
|
||||
const { kioskMode, searchBarHidden } = this.state.getValue();
|
||||
|
||||
if (searchBarHidden || kioskMode === KioskMode.TV) {
|
||||
appEvents.emit(AppEvents.alertSuccess, [
|
||||
t({ id: 'navigation.kiosk.tv-alert', message: 'Press ESC to exit kiosk mode' }),
|
||||
]);
|
||||
appEvents.emit(AppEvents.alertSuccess, [t('navigation.kiosk.tv-alert', 'Press ESC to exit kiosk mode')]);
|
||||
return KioskMode.Full;
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
import { css } from '@emotion/css';
|
||||
import { i18n } from '@lingui/core';
|
||||
import { cloneDeep } from 'lodash';
|
||||
import React from 'react';
|
||||
import { useLocation } from 'react-router-dom';
|
||||
@ -7,7 +6,7 @@ import { useLocation } from 'react-router-dom';
|
||||
import { GrafanaTheme2, NavModelItem } from '@grafana/data';
|
||||
import { Menu, MenuItem, useStyles2 } from '@grafana/ui';
|
||||
|
||||
import menuItemTranslations from '../../NavBar/navBarItem-translations';
|
||||
import getNavTranslation from '../../NavBar/navBarItem-translations';
|
||||
import { enrichConfigItems, enrichWithInteractionTracking } from '../../NavBar/utils';
|
||||
|
||||
export interface TopNavBarMenuProps {
|
||||
@ -34,8 +33,7 @@ export function TopNavBarMenu({ node: nodePlain }: TopNavBarMenuProps) {
|
||||
}
|
||||
>
|
||||
{node.children?.map((item) => {
|
||||
const translationKey = item.id && menuItemTranslations[item.id];
|
||||
const itemText = translationKey ? i18n._(translationKey) : item.text;
|
||||
const itemText = getNavTranslation(item.id) ?? item.text;
|
||||
const showExternalLinkIcon = /^https?:\/\//.test(item.url || '');
|
||||
return item.url ? (
|
||||
<MenuItem
|
||||
|
@ -1,11 +1,10 @@
|
||||
import { css } from '@emotion/css';
|
||||
import { useLingui } from '@lingui/react';
|
||||
import React from 'react';
|
||||
|
||||
import { GrafanaTheme2, NavModelItem } from '@grafana/data';
|
||||
import { toIconName, useStyles2 } from '@grafana/ui';
|
||||
|
||||
import menuItemTranslations from '../NavBar/navBarItem-translations';
|
||||
import getNavTranslation from '../NavBar/navBarItem-translations';
|
||||
import { isMatchOrChildMatch } from '../NavBar/utils';
|
||||
|
||||
import { NavBarMenuItem } from './NavBarMenuItem';
|
||||
@ -20,11 +19,10 @@ export function NavBarMenuItemWrapper({
|
||||
activeItem?: NavModelItem;
|
||||
onClose: () => void;
|
||||
}) {
|
||||
const { i18n } = useLingui();
|
||||
const styles = useStyles2(getStyles);
|
||||
|
||||
if (link.emptyMessageId && !linkHasChildren(link)) {
|
||||
const emptyMessageTranslated = i18n._(menuItemTranslations[link.emptyMessageId]);
|
||||
const emptyMessageTranslated = getNavTranslation(link.emptyMessageId);
|
||||
return (
|
||||
<NavBarMenuSection link={link}>
|
||||
<ul className={styles.children}>
|
||||
|
@ -1,5 +1,4 @@
|
||||
import { css, cx } from '@emotion/css';
|
||||
import { useLingui } from '@lingui/react';
|
||||
import { Item } from '@react-stately/collections';
|
||||
import React from 'react';
|
||||
|
||||
@ -12,7 +11,7 @@ import { NavBarItemMenuTrigger } from './NavBarItemMenuTrigger';
|
||||
import { getNavBarItemWithoutMenuStyles } from './NavBarItemWithoutMenu';
|
||||
import { NavBarMenuItem } from './NavBarMenuItem';
|
||||
import { useNavBarContext } from './context';
|
||||
import menuItemTranslations from './navBarItem-translations';
|
||||
import getNavTranslation from './navBarItem-translations';
|
||||
import { getNavModelItemKey } from './utils';
|
||||
|
||||
export interface Props {
|
||||
@ -23,7 +22,6 @@ export interface Props {
|
||||
}
|
||||
|
||||
const NavBarItem = ({ isActive = false, className, reverseMenuDirection = false, link }: Props) => {
|
||||
const { i18n } = useLingui();
|
||||
const theme = useTheme2();
|
||||
const menuItems = link.children ?? [];
|
||||
const { menuIdOpen } = useNavBarContext();
|
||||
@ -55,8 +53,7 @@ const NavBarItem = ({ isActive = false, className, reverseMenuDirection = false,
|
||||
}
|
||||
};
|
||||
|
||||
const translationKey = link.id && menuItemTranslations[link.id];
|
||||
const linkText = translationKey ? i18n._(translationKey) : link.text;
|
||||
const linkText = getNavTranslation(link.id) ?? link.text;
|
||||
|
||||
return (
|
||||
<li className={cx(styles.container, { [styles.containerHover]: section.id === menuIdOpen }, className)}>
|
||||
@ -75,8 +72,7 @@ const NavBarItem = ({ isActive = false, className, reverseMenuDirection = false,
|
||||
onNavigate={onNavigate}
|
||||
>
|
||||
{(item: NavModelItem) => {
|
||||
const translationKey = item.id && menuItemTranslations[item.id];
|
||||
const itemText = translationKey ? i18n._(translationKey) : item.text;
|
||||
const itemText = getNavTranslation(item.id) ?? item.text;
|
||||
const isSection = item.menuItemType === NavMenuItemType.Section;
|
||||
const iconName = item.icon ? toIconName(item.icon) : undefined;
|
||||
const icon = item.showIconInNavbar && !isSection ? iconName : undefined;
|
||||
|
@ -1,5 +1,4 @@
|
||||
import { css } from '@emotion/css';
|
||||
import { useLingui } from '@lingui/react';
|
||||
import { useMenu } from '@react-aria/menu';
|
||||
import { mergeProps } from '@react-aria/utils';
|
||||
import { useTreeState } from '@react-stately/tree';
|
||||
@ -11,7 +10,7 @@ import { CustomScrollbar, useTheme2 } from '@grafana/ui';
|
||||
|
||||
import { NavBarItemMenuItem } from './NavBarItemMenuItem';
|
||||
import { useNavBarItemMenuContext } from './context';
|
||||
import menuItemTranslations from './navBarItem-translations';
|
||||
import getNavTranslation from './navBarItem-translations';
|
||||
import { getNavModelItemKey } from './utils';
|
||||
|
||||
export interface NavBarItemMenuProps extends SpectrumMenuProps<NavModelItem> {
|
||||
@ -22,7 +21,6 @@ export interface NavBarItemMenuProps extends SpectrumMenuProps<NavModelItem> {
|
||||
|
||||
export function NavBarItemMenu(props: NavBarItemMenuProps): ReactElement | null {
|
||||
const { reverseMenuDirection, adjustHeightForBorder, disabledKeys, onNavigate, ...rest } = props;
|
||||
const { i18n } = useLingui();
|
||||
const contextProps = useNavBarItemMenuContext();
|
||||
const completeProps = {
|
||||
...mergeProps(contextProps, rest),
|
||||
@ -61,7 +59,7 @@ export function NavBarItemMenu(props: NavBarItemMenuProps): ReactElement | null
|
||||
));
|
||||
|
||||
if (itemComponents.length === 0 && section.value.emptyMessageId) {
|
||||
const emptyMessageTranslated = i18n._(menuItemTranslations[section.value.emptyMessageId]);
|
||||
const emptyMessageTranslated = getNavTranslation(section.value.emptyMessageId);
|
||||
itemComponents.push(
|
||||
<div key="empty-message" className={styles.emptyMessage}>
|
||||
{emptyMessageTranslated}
|
||||
|
@ -1,5 +1,4 @@
|
||||
import { css, cx } from '@emotion/css';
|
||||
import { useLingui } from '@lingui/react';
|
||||
import { useDialog } from '@react-aria/dialog';
|
||||
import { FocusScope } from '@react-aria/focus';
|
||||
import { OverlayContainer, useOverlay } from '@react-aria/overlays';
|
||||
@ -16,7 +15,7 @@ import { NavBarItemWithoutMenu } from './NavBarItemWithoutMenu';
|
||||
import { NavBarMenuItem } from './NavBarMenuItem';
|
||||
import { NavBarToggle } from './NavBarToggle';
|
||||
import { NavFeatureHighlight } from './NavFeatureHighlight';
|
||||
import menuItemTranslations from './navBarItem-translations';
|
||||
import getNavTranslation from './navBarItem-translations';
|
||||
import { isMatchOrChildMatch } from './utils';
|
||||
|
||||
const MENU_WIDTH = '350px';
|
||||
@ -236,7 +235,6 @@ export function NavItem({
|
||||
activeItem?: NavModelItem;
|
||||
onClose: () => void;
|
||||
}) {
|
||||
const { i18n } = useLingui();
|
||||
const styles = useStyles2(getNavItemStyles);
|
||||
|
||||
if (linkHasChildren(link)) {
|
||||
@ -269,7 +267,7 @@ export function NavItem({
|
||||
</CollapsibleNavItem>
|
||||
);
|
||||
} else if (link.emptyMessageId) {
|
||||
const emptyMessageTranslated = i18n._(menuItemTranslations[link.emptyMessageId]);
|
||||
const emptyMessageTranslated = getNavTranslation(link.emptyMessageId);
|
||||
return (
|
||||
<CollapsibleNavItem onClose={onClose} link={link} isActive={isMatchOrChildMatch(link, activeItem)}>
|
||||
<ul className={styles.children}>
|
||||
|
@ -1,66 +1,100 @@
|
||||
import { MessageDescriptor } from '@lingui/core';
|
||||
import { defineMessage } from '@lingui/macro';
|
||||
|
||||
// Maps the ID of the nav item to a translated phrase to later pass to <Trans />
|
||||
// Because the navigation content is dynamic (defined in the backend), we can not use
|
||||
// the normal inline message definition method.
|
||||
|
||||
import { t } from 'app/core/internationalization';
|
||||
|
||||
// The keys of the TRANSLATED_MENU_ITEMS object (NOT the id inside the defineMessage function)
|
||||
// must match the ID of the navigation item, as defined in the backend nav model
|
||||
|
||||
// see pkg/api/index.go
|
||||
const TRANSLATED_MENU_ITEMS: Record<string, MessageDescriptor> = {
|
||||
home: defineMessage({ id: 'nav.home', message: 'Home' }),
|
||||
|
||||
create: defineMessage({ id: 'nav.create', message: 'Create' }),
|
||||
'create-dashboard': defineMessage({ id: 'nav.create-dashboard', message: 'Dashboard' }),
|
||||
folder: defineMessage({ id: 'nav.create-folder', message: 'Folder' }),
|
||||
import: defineMessage({ id: 'nav.create-import', message: 'Import' }),
|
||||
alert: defineMessage({ id: 'nav.create-alert', message: 'New alert rule' }),
|
||||
|
||||
starred: defineMessage({ id: 'nav.starred', message: 'Starred' }),
|
||||
'starred-empty': defineMessage({ id: 'nav.starred-empty', message: 'Your starred dashboards will appear here' }),
|
||||
dashboards: defineMessage({ id: 'nav.dashboards', message: 'Dashboards' }),
|
||||
'dashboards/browse': defineMessage({ id: 'nav.manage-dashboards', message: 'Browse' }),
|
||||
'dashboards/playlists': defineMessage({ id: 'nav.playlists', message: 'Playlists' }),
|
||||
'dashboards/snapshots': defineMessage({ id: 'nav.snapshots', message: 'Snapshots' }),
|
||||
'dashboards/library-panels': defineMessage({ id: 'nav.library-panels', message: 'Library panels' }),
|
||||
'dashboards/new': defineMessage({ id: 'nav.new-dashboard', message: 'New dashboard' }),
|
||||
'dashboards/folder/new': defineMessage({ id: 'nav.new-folder', message: 'New folder' }),
|
||||
|
||||
explore: defineMessage({ id: 'nav.explore', message: 'Explore' }),
|
||||
|
||||
alerting: defineMessage({ id: 'nav.alerting', message: 'Alerting' }),
|
||||
'alerting-legacy': defineMessage({ id: 'nav.alerting-legacy', message: 'Alerting (legacy)' }),
|
||||
'alert-list': defineMessage({ id: 'nav.alerting-list', message: 'Alert rules' }),
|
||||
receivers: defineMessage({ id: 'nav.alerting-receivers', message: 'Contact points' }),
|
||||
'am-routes': defineMessage({ id: 'nav.alerting-am-routes', message: 'Notification policies' }),
|
||||
channels: defineMessage({ id: 'nav.alerting-channels', message: 'Notification channels' }),
|
||||
|
||||
silences: defineMessage({ id: 'nav.alerting-silences', message: 'Silences' }),
|
||||
groups: defineMessage({ id: 'nav.alerting-groups', message: 'Groups' }),
|
||||
'alerting-admin': defineMessage({ id: 'nav.alerting-admin', message: 'Admin' }),
|
||||
|
||||
cfg: defineMessage({ id: 'nav.config', message: 'Configuration' }),
|
||||
datasources: defineMessage({ id: 'nav.datasources', message: 'Data sources' }),
|
||||
correlations: defineMessage({ id: 'nav.correlations', message: 'Correlations' }),
|
||||
users: defineMessage({ id: 'nav.users', message: 'Users' }),
|
||||
teams: defineMessage({ id: 'nav.teams', message: 'Teams' }),
|
||||
plugins: defineMessage({ id: 'nav.plugins', message: 'Plugins' }),
|
||||
'org-settings': defineMessage({ id: 'nav.org-settings', message: 'Preferences' }),
|
||||
apikeys: defineMessage({ id: 'nav.api-keys', message: 'API keys' }),
|
||||
serviceaccounts: defineMessage({ id: 'nav.service-accounts', message: 'Service accounts' }),
|
||||
|
||||
live: defineMessage({ id: 'nav.live', message: 'Event streaming' }),
|
||||
'live-status': defineMessage({ id: 'nav.live-status', message: 'Status' }),
|
||||
'live-pipeline': defineMessage({ id: 'nav.live-pipeline', message: 'Pipeline' }),
|
||||
'live-cloud': defineMessage({ id: 'nav.live-cloud', message: 'Cloud' }),
|
||||
|
||||
help: defineMessage({ id: 'nav.help', message: 'Help' }),
|
||||
|
||||
'profile-settings': defineMessage({ id: 'nav.profile/settings', message: 'Preferences' }),
|
||||
'change-password': defineMessage({ id: 'nav.profile/password', message: 'Change password' }),
|
||||
'sign-out': defineMessage({ id: 'nav.sign-out', message: 'Sign out' }),
|
||||
};
|
||||
|
||||
export default TRANSLATED_MENU_ITEMS;
|
||||
export default function getNavTranslation(navId: string | undefined) {
|
||||
switch (navId) {
|
||||
case 'home':
|
||||
return t('nav.home', 'Home');
|
||||
case 'create':
|
||||
return t('nav.create', 'Create');
|
||||
case 'create-dashboard':
|
||||
return t('nav.create-dashboard', 'Dashboard');
|
||||
case 'folder':
|
||||
return t('nav.create-folder', 'Folder');
|
||||
case 'import':
|
||||
return t('nav.create-import', 'Import');
|
||||
case 'alert':
|
||||
return t('nav.create-alert', 'New alert rule');
|
||||
case 'starred':
|
||||
return t('nav.starred', 'Starred');
|
||||
case 'starred-empty':
|
||||
return t('nav.starred-empty', 'Your starred dashboards will appear here');
|
||||
case 'dashboards':
|
||||
return t('nav.dashboards', 'Dashboards');
|
||||
case 'dashboards/browse':
|
||||
return t('nav.manage-dashboards', 'Browse');
|
||||
case 'dashboards/playlists':
|
||||
return t('nav.playlists', 'Playlists');
|
||||
case 'dashboards/snapshots':
|
||||
return t('nav.snapshots', 'Snapshots');
|
||||
case 'dashboards/library-panels':
|
||||
return t('nav.library-panels', 'Library panels');
|
||||
case 'dashboards/new':
|
||||
return t('nav.new-dashboard', 'New dashboard');
|
||||
case 'dashboards/folder/new':
|
||||
return t('nav.new-folder', 'New folder');
|
||||
case 'explore':
|
||||
return t('nav.explore', 'Explore');
|
||||
case 'alerting':
|
||||
return t('nav.alerting', 'Alerting');
|
||||
case 'alerting-legacy':
|
||||
return t('nav.alerting-legacy', 'Alerting (legacy)');
|
||||
case 'alert-list':
|
||||
return t('nav.alerting-list', 'Alert rules');
|
||||
case 'receivers':
|
||||
return t('nav.alerting-receivers', 'Contact points');
|
||||
case 'am-routes':
|
||||
return t('nav.alerting-am-routes', 'Notification policies');
|
||||
case 'channels':
|
||||
return t('nav.alerting-channels', 'Notification channels');
|
||||
case 'silences':
|
||||
return t('nav.alerting-silences', 'Silences');
|
||||
case 'groups':
|
||||
return t('nav.alerting-groups', 'Groups');
|
||||
case 'alerting-admin':
|
||||
return t('nav.alerting-admin', 'Admin');
|
||||
case 'cfg':
|
||||
return t('nav.config', 'Configuration');
|
||||
case 'datasources':
|
||||
return t('nav.datasources', 'Data sources');
|
||||
case 'correlations':
|
||||
return t('nav.correlations', 'Correlations');
|
||||
case 'users':
|
||||
return t('nav.users', 'Users');
|
||||
case 'teams':
|
||||
return t('nav.teams', 'Teams');
|
||||
case 'plugins':
|
||||
return t('nav.plugins', 'Plugins');
|
||||
case 'org-settings':
|
||||
return t('nav.org-settings', 'Preferences');
|
||||
case 'apikeys':
|
||||
return t('nav.api-keys', 'API keys');
|
||||
case 'serviceaccounts':
|
||||
return t('nav.service-accounts', 'Service accounts');
|
||||
case 'live':
|
||||
return t('nav.live', 'Event streaming');
|
||||
case 'live-status':
|
||||
return t('nav.live-status', 'Status');
|
||||
case 'live-pipeline':
|
||||
return t('nav.live-pipeline', 'Pipeline');
|
||||
case 'live-cloud':
|
||||
return t('nav.live-cloud', 'Cloud');
|
||||
case 'help':
|
||||
return t('nav.help', 'Help');
|
||||
case 'profile-settings':
|
||||
return t('nav.profile/settings', 'Preferences');
|
||||
case 'change-password':
|
||||
return t('nav.profile/password', 'Change password');
|
||||
case 'sign-out':
|
||||
return t('nav.sign-out', 'Sign out');
|
||||
default:
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,4 @@
|
||||
import { css } from '@emotion/css';
|
||||
import { t } from '@lingui/macro';
|
||||
import { debounce } from 'lodash';
|
||||
import React, { useState, useEffect, useMemo, useCallback, FormEvent } from 'react';
|
||||
import { useAsync } from 'react-use';
|
||||
@ -8,6 +7,7 @@ import { AppEvents, SelectableValue, GrafanaTheme2 } from '@grafana/data';
|
||||
import { selectors } from '@grafana/e2e-selectors';
|
||||
import { useStyles2, ActionMeta, AsyncSelect, Input, InputActionMeta } from '@grafana/ui';
|
||||
import appEvents from 'app/core/app_events';
|
||||
import { t } from 'app/core/internationalization';
|
||||
import { contextSrv } from 'app/core/services/context_srv';
|
||||
import { createFolder, getFolderById, searchFolders } from 'app/features/manage-dashboards/state/actions';
|
||||
import { DashboardSearchHit } from 'app/features/search/types';
|
||||
@ -326,7 +326,7 @@ export function FolderPicker(props: Props) {
|
||||
<AsyncSelect
|
||||
inputId={inputId}
|
||||
aria-label={selectors.components.FolderPicker.input}
|
||||
loadingMessage={t({ id: 'folder-picker.loading', message: 'Loading folders...' })}
|
||||
loadingMessage={t('folder-picker.loading', 'Loading folders...')}
|
||||
defaultOptions
|
||||
defaultValue={folder}
|
||||
inputValue={inputValue}
|
||||
|
@ -1,5 +1,4 @@
|
||||
import { css } from '@emotion/css';
|
||||
import { t, Trans } from '@lingui/macro';
|
||||
import React, { PureComponent } from 'react';
|
||||
|
||||
import { FeatureState, SelectableValue } from '@grafana/data';
|
||||
@ -19,7 +18,8 @@ import {
|
||||
FeatureBadge,
|
||||
} from '@grafana/ui';
|
||||
import { DashboardPicker } from 'app/core/components/Select/DashboardPicker';
|
||||
import { ENGLISH_US, FRENCH_FRANCE, SPANISH_SPAIN } from 'app/core/internationalization/constants';
|
||||
import { t, Trans } from 'app/core/internationalization';
|
||||
import { ENGLISH_US, FRENCH_FRANCE, PSEUDO_LOCALE, SPANISH_SPAIN } from 'app/core/internationalization/constants';
|
||||
import { PreferencesService } from 'app/core/services/PreferencesService';
|
||||
import { UserPreferencesDTO } from 'app/types';
|
||||
|
||||
@ -31,39 +31,32 @@ export interface Props {
|
||||
export type State = UserPreferencesDTO;
|
||||
|
||||
const themes: SelectableValue[] = [
|
||||
{ value: '', label: t({ id: 'shared-preferences.theme.default-label', message: 'Default' }) },
|
||||
{ value: 'dark', label: t({ id: 'shared-preferences.theme.dark-label', message: 'Dark' }) },
|
||||
{ value: 'light', label: t({ id: 'shared-preferences.theme.light-label', message: 'Light' }) },
|
||||
{ value: '', label: t('shared-preferences.theme.default-label', 'Default') },
|
||||
{ value: 'dark', label: t('shared-preferences.theme.dark-label', 'Dark') },
|
||||
{ value: 'light', label: t('shared-preferences.theme.light-label', 'Light') },
|
||||
];
|
||||
|
||||
const languages: Array<SelectableValue<string>> = [
|
||||
{
|
||||
value: '',
|
||||
label: t({
|
||||
id: 'common.locale.default',
|
||||
message: 'Default',
|
||||
}),
|
||||
label: t('common.locale.default', 'Default'),
|
||||
},
|
||||
{
|
||||
value: ENGLISH_US,
|
||||
label: t({
|
||||
id: 'common.locale.en',
|
||||
message: 'English',
|
||||
}),
|
||||
label: t('common.locale.en', 'English'),
|
||||
},
|
||||
{
|
||||
value: SPANISH_SPAIN,
|
||||
label: t({
|
||||
id: 'common.locale.es',
|
||||
message: 'Spanish',
|
||||
}),
|
||||
label: t('common.locale.es', 'Spanish'),
|
||||
},
|
||||
{
|
||||
value: FRENCH_FRANCE,
|
||||
label: t({
|
||||
id: 'common.locale.fr',
|
||||
message: 'French',
|
||||
}),
|
||||
label: t('common.locale.fr', 'French'),
|
||||
},
|
||||
// TODO: dev only
|
||||
{
|
||||
value: PSEUDO_LOCALE,
|
||||
label: 'Pseudo-locale', // no need to translate this key
|
||||
},
|
||||
];
|
||||
|
||||
@ -136,8 +129,8 @@ export class SharedPreferences extends PureComponent<Props, State> {
|
||||
<Form onSubmit={this.onSubmitForm}>
|
||||
{() => {
|
||||
return (
|
||||
<FieldSet label={<Trans id="shared-preferences.title">Preferences</Trans>} disabled={disabled}>
|
||||
<Field label={t({ id: 'shared-preferences.fields.theme-label', message: 'UI Theme' })}>
|
||||
<FieldSet label={<Trans i18nKey="shared-preferences.title">Preferences</Trans>} disabled={disabled}>
|
||||
<Field label={t('shared-preferences.fields.theme-label', 'UI Theme')}>
|
||||
<RadioButtonGroup
|
||||
options={themes}
|
||||
value={themes.find((item) => item.value === theme)?.value}
|
||||
@ -149,7 +142,7 @@ export class SharedPreferences extends PureComponent<Props, State> {
|
||||
label={
|
||||
<Label htmlFor="home-dashboard-select">
|
||||
<span className={styles.labelText}>
|
||||
<Trans id="shared-preferences.fields.home-dashboard-label">Home Dashboard</Trans>
|
||||
<Trans i18nKey="shared-preferences.fields.home-dashboard-label">Home Dashboard</Trans>
|
||||
</span>
|
||||
</Label>
|
||||
}
|
||||
@ -160,16 +153,13 @@ export class SharedPreferences extends PureComponent<Props, State> {
|
||||
onChange={(v) => this.onHomeDashboardChanged(v?.uid ?? '')}
|
||||
defaultOptions={true}
|
||||
isClearable={true}
|
||||
placeholder={t({
|
||||
id: 'shared-preferences.fields.home-dashboard-placeholder',
|
||||
message: 'Default dashboard',
|
||||
})}
|
||||
placeholder={t('shared-preferences.fields.home-dashboard-placeholder', 'Default dashboard')}
|
||||
inputId="home-dashboard-select"
|
||||
/>
|
||||
</Field>
|
||||
|
||||
<Field
|
||||
label={t({ id: 'shared-dashboard.fields.timezone-label', message: 'Timezone' })}
|
||||
label={t('shared-dashboard.fields.timezone-label', 'Timezone')}
|
||||
data-testid={selectors.components.TimeZonePicker.containerV2}
|
||||
>
|
||||
<TimeZonePicker
|
||||
@ -181,7 +171,7 @@ export class SharedPreferences extends PureComponent<Props, State> {
|
||||
</Field>
|
||||
|
||||
<Field
|
||||
label={t({ id: 'shared-preferences.fields.week-start-label', message: 'Week start' })}
|
||||
label={t('shared-preferences.fields.week-start-label', 'Week start')}
|
||||
data-testid={selectors.components.WeekStartPicker.containerV2}
|
||||
>
|
||||
<WeekStartPicker
|
||||
@ -196,7 +186,7 @@ export class SharedPreferences extends PureComponent<Props, State> {
|
||||
label={
|
||||
<Label htmlFor="locale-select">
|
||||
<span className={styles.labelText}>
|
||||
<Trans id="shared-preferences.fields.locale-label">Language</Trans>
|
||||
<Trans i18nKey="shared-preferences.fields.locale-label">Language</Trans>
|
||||
</span>
|
||||
<FeatureBadge featureState={FeatureState.alpha} />
|
||||
</Label>
|
||||
@ -207,10 +197,7 @@ export class SharedPreferences extends PureComponent<Props, State> {
|
||||
value={languages.find((lang) => lang.value === locale)}
|
||||
onChange={(locale: SelectableValue<string>) => this.onLocaleChanged(locale.value ?? '')}
|
||||
options={languages}
|
||||
placeholder={t({
|
||||
id: 'shared-preferences.fields.locale-placeholder',
|
||||
message: 'Choose language',
|
||||
})}
|
||||
placeholder={t('shared-preferences.fields.locale-placeholder', 'Choose language')}
|
||||
inputId="locale-select"
|
||||
/>
|
||||
</Field>
|
||||
@ -222,7 +209,7 @@ export class SharedPreferences extends PureComponent<Props, State> {
|
||||
variant="primary"
|
||||
data-testid={selectors.components.UserProfile.preferencesSaveButton}
|
||||
>
|
||||
<Trans id="common.save">Save</Trans>
|
||||
<Trans i18nKey="common.save">Save</Trans>
|
||||
</Button>
|
||||
</div>
|
||||
</FieldSet>
|
||||
|
@ -1,7 +1,8 @@
|
||||
export const ENGLISH_US = 'en-US';
|
||||
export const FRENCH_FRANCE = 'fr-FR';
|
||||
export const SPANISH_SPAIN = 'es-ES';
|
||||
export const PSEUDO_LOCALE = 'pseudo-LOCALE';
|
||||
|
||||
export const DEFAULT_LOCALE = ENGLISH_US;
|
||||
|
||||
export const VALID_LOCALES: string[] = [ENGLISH_US, FRENCH_FRANCE, SPANISH_SPAIN];
|
||||
export const VALID_LOCALES: string[] = [ENGLISH_US, FRENCH_FRANCE, SPANISH_SPAIN, PSEUDO_LOCALE];
|
||||
|
@ -1,78 +1,69 @@
|
||||
import { I18n, i18n } from '@lingui/core';
|
||||
import { I18nProvider as LinguiI18nProvider } from '@lingui/react';
|
||||
import React, { useEffect } from 'react';
|
||||
import i18n, { BackendModule, ResourceKey } from 'i18next';
|
||||
import React from 'react';
|
||||
import { Trans as I18NextTrans, initReactI18next } from 'react-i18next';
|
||||
|
||||
import config from 'app/core/config';
|
||||
import { DEFAULT_LOCALE, ENGLISH_US, FRENCH_FRANCE, SPANISH_SPAIN, PSEUDO_LOCALE, VALID_LOCALES } from './constants';
|
||||
|
||||
import { messages as fallbackMessages } from '../../../locales/en-US/messages';
|
||||
const messageLoaders: Record<string, () => Promise<ResourceKey>> = {
|
||||
[ENGLISH_US]: () => import('../../../locales/en-US/grafana.json'),
|
||||
[FRENCH_FRANCE]: () => import('../../../locales/fr-FR/grafana.json'),
|
||||
[SPANISH_SPAIN]: () => import('../../../locales/es-ES/grafana.json'),
|
||||
[PSEUDO_LOCALE]: () => import('../../../locales/pseudo-LOCALE/grafana.json'),
|
||||
};
|
||||
|
||||
import { DEFAULT_LOCALE, VALID_LOCALES } from './constants';
|
||||
const loadTranslations: BackendModule = {
|
||||
type: 'backend',
|
||||
init() {},
|
||||
async read(language, namespace, callback) {
|
||||
console.log('using loadTranslations plugin', { language, namespace, callback });
|
||||
const loader = messageLoaders[language];
|
||||
if (!loader) {
|
||||
return callback(new Error('No message loader available for ' + language), null);
|
||||
}
|
||||
|
||||
let i18nInstance: I18n;
|
||||
// TODO: namespace??
|
||||
const messages = await loader();
|
||||
callback(null, messages);
|
||||
},
|
||||
};
|
||||
|
||||
export async function initI18n(localInput: string = DEFAULT_LOCALE) {
|
||||
const validatedLocale = VALID_LOCALES.includes(localInput) ? localInput : DEFAULT_LOCALE;
|
||||
export function initializeI18n(locale: string) {
|
||||
const validLocale = VALID_LOCALES.includes(locale) ? locale : DEFAULT_LOCALE;
|
||||
|
||||
if (i18nInstance && i18nInstance.locale === validatedLocale) {
|
||||
return i18nInstance;
|
||||
}
|
||||
i18n
|
||||
.use(loadTranslations)
|
||||
.use(initReactI18next) // passes i18n down to react-i18next
|
||||
.init({
|
||||
lng: validLocale,
|
||||
|
||||
// Dynamically load the messages for the user's locale
|
||||
const imp =
|
||||
config.featureToggles.internationalization &&
|
||||
(await import(`../../../locales/${validatedLocale}/messages`).catch((err) => {
|
||||
// TODO: Properly return an error if we can't find the messages for a locale
|
||||
return err;
|
||||
}));
|
||||
// We don't bundle any translations, we load them async
|
||||
partialBundledLanguages: true,
|
||||
resources: {},
|
||||
|
||||
i18n.load(validatedLocale, imp?.messages || fallbackMessages);
|
||||
|
||||
// Browser support for Intl.PluralRules is good and covers what we support in .browserlistrc,
|
||||
// but because this could potentially be in a the critical path of loading the frontend lets
|
||||
// be extra careful
|
||||
// If this isnt loaded, Lingui will log a warning and plurals will not be translated correctly.
|
||||
const supportsPluralRules = 'Intl' in window && 'PluralRules' in Intl;
|
||||
if (supportsPluralRules) {
|
||||
const pluralsOrdinal = new Intl.PluralRules(validatedLocale, { type: 'ordinal' });
|
||||
const pluralsCardinal = new Intl.PluralRules(validatedLocale, { type: 'cardinal' });
|
||||
i18n.loadLocaleData(validatedLocale, {
|
||||
plurals(count: number, ordinal: boolean) {
|
||||
return (ordinal ? pluralsOrdinal : pluralsCardinal).select(count);
|
||||
},
|
||||
// If translations are empty strings (no translation), fall back to the default value in source code
|
||||
returnEmptyString: false,
|
||||
});
|
||||
}
|
||||
|
||||
export function changeLanguage(locale: string) {
|
||||
const validLocale = VALID_LOCALES.includes(locale) ? locale : DEFAULT_LOCALE;
|
||||
return i18n.changeLanguage(validLocale);
|
||||
}
|
||||
|
||||
export const Trans: typeof I18NextTrans = (props) => {
|
||||
return <I18NextTrans {...props} />;
|
||||
};
|
||||
|
||||
export const t = (id: string, defaultMessage: string, values?: Record<string, unknown>) => {
|
||||
return i18n.t(id, defaultMessage, values);
|
||||
};
|
||||
|
||||
export const i18nDate = (value: number | Date | string, format: Intl.DateTimeFormatOptions = {}): string => {
|
||||
if (typeof value === 'string') {
|
||||
return i18nDate(new Date(value), format);
|
||||
}
|
||||
const locale = i18n.options.lng ?? DEFAULT_LOCALE;
|
||||
|
||||
i18n.activate(validatedLocale);
|
||||
i18nInstance = i18n;
|
||||
|
||||
return i18nInstance;
|
||||
}
|
||||
|
||||
interface I18nProviderProps {
|
||||
children: React.ReactNode;
|
||||
}
|
||||
export function I18nProvider({ children }: I18nProviderProps) {
|
||||
useEffect(() => {
|
||||
const locale = config.featureToggles.internationalization ? config.bootData.user.locale : DEFAULT_LOCALE;
|
||||
|
||||
initI18n(locale);
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<LinguiI18nProvider i18n={i18n} forceRenderOnLocaleChange={false}>
|
||||
{children}
|
||||
</LinguiI18nProvider>
|
||||
);
|
||||
}
|
||||
|
||||
// This is only really used for ModalManager, as that creates a new react root we need to make sure is localisable.
|
||||
export function provideI18n<P extends {}>(WrappedWithI18N: React.ComponentType<P>) {
|
||||
const I18nProviderWrapper = (props: P) => {
|
||||
return (
|
||||
<I18nProvider>
|
||||
<WrappedWithI18N {...props} />
|
||||
</I18nProvider>
|
||||
);
|
||||
};
|
||||
return I18nProviderWrapper;
|
||||
}
|
||||
const dateFormatter = new Intl.DateTimeFormat(locale, format);
|
||||
return dateFormatter.format(value);
|
||||
};
|
||||
|
@ -9,7 +9,6 @@ import { copyPanel } from 'app/features/dashboard/utils/panel';
|
||||
|
||||
import { ShowConfirmModalEvent, ShowConfirmModalPayload, ShowModalReactEvent } from '../../types/events';
|
||||
import { AngularModalProxy } from '../components/modals/AngularModalProxy';
|
||||
import { provideI18n } from '../internationalization';
|
||||
import { provideTheme } from '../utils/ConfigProvider';
|
||||
|
||||
export class ModalManager {
|
||||
@ -33,7 +32,7 @@ export class ModalManager {
|
||||
},
|
||||
};
|
||||
|
||||
const elem = React.createElement(provideI18n(provideTheme(AngularModalProxy, config.theme2)), modalProps);
|
||||
const elem = React.createElement(provideTheme(AngularModalProxy, config.theme2), modalProps);
|
||||
this.reactModalRoot.appendChild(this.reactModalNode);
|
||||
ReactDOM.render(elem, this.reactModalNode);
|
||||
}
|
||||
|
@ -1,12 +1,12 @@
|
||||
import { css } from '@emotion/css';
|
||||
import { withI18n, withI18nProps } from '@lingui/react';
|
||||
import React, { PureComponent } from 'react';
|
||||
|
||||
import { ConfirmButton, ConfirmModal, Button } from '@grafana/ui';
|
||||
import { contextSrv } from 'app/core/core';
|
||||
import { i18nDate } from 'app/core/internationalization';
|
||||
import { AccessControlAction, UserSession } from 'app/types';
|
||||
|
||||
interface Props extends withI18nProps {
|
||||
interface Props {
|
||||
sessions: UserSession[];
|
||||
|
||||
onSessionRevoke: (id: number) => void;
|
||||
@ -45,7 +45,7 @@ class BaseUserSessions extends PureComponent<Props, State> {
|
||||
};
|
||||
|
||||
render() {
|
||||
const { sessions, i18n } = this.props;
|
||||
const { sessions } = this.props;
|
||||
const { showLogoutModal } = this.state;
|
||||
|
||||
const logoutFromAllDevicesClass = css`
|
||||
@ -73,7 +73,7 @@ class BaseUserSessions extends PureComponent<Props, State> {
|
||||
sessions.map((session, index) => (
|
||||
<tr key={`${session.id}-${index}`}>
|
||||
<td>{session.isActive ? 'Now' : session.seenAt}</td>
|
||||
<td>{i18n.date(session.createdAt, { dateStyle: 'long' })}</td>
|
||||
<td>{i18nDate(session.createdAt, { dateStyle: 'long' })}</td>
|
||||
<td>{session.clientIp}</td>
|
||||
<td>{`${session.browser} on ${session.os} ${session.osVersion}`}</td>
|
||||
<td>
|
||||
@ -116,4 +116,4 @@ class BaseUserSessions extends PureComponent<Props, State> {
|
||||
}
|
||||
}
|
||||
|
||||
export const UserSessions = withI18n()(BaseUserSessions);
|
||||
export const UserSessions = BaseUserSessions;
|
||||
|
@ -1,4 +1,3 @@
|
||||
import { t, Trans } from '@lingui/macro';
|
||||
import React, { FC, ReactNode } from 'react';
|
||||
import { connect, ConnectedProps } from 'react-redux';
|
||||
import { useLocation } from 'react-router-dom';
|
||||
@ -20,6 +19,7 @@ import { NavToolbarSeparator } from 'app/core/components/AppChrome/NavToolbarSep
|
||||
import config from 'app/core/config';
|
||||
import { useGrafana } from 'app/core/context/GrafanaContext';
|
||||
import { useBusEvent } from 'app/core/hooks/useBusEvent';
|
||||
import { t, Trans } from 'app/core/internationalization';
|
||||
import { DashboardCommentsModal } from 'app/features/dashboard/components/DashboardComments/DashboardCommentsModal';
|
||||
import { SaveDashboardDrawer } from 'app/features/dashboard/components/SaveDashboard/SaveDashboardDrawer';
|
||||
import { ShareModal } from 'app/features/dashboard/components/ShareModal';
|
||||
@ -139,8 +139,8 @@ export const DashNav = React.memo<Props>((props) => {
|
||||
|
||||
if (canStar) {
|
||||
let desc = isStarred
|
||||
? t({ id: 'dashboard.toolbar.unmark-favorite', message: 'Unmark as favorite' })
|
||||
: t({ id: 'dashboard.toolbar.mark-favorite', message: 'Mark as favorite' });
|
||||
? t('dashboard.toolbar.unmark-favorite', 'Unmark as favorite')
|
||||
: t('dashboard.toolbar.mark-favorite', 'Mark as favorite');
|
||||
buttons.push(
|
||||
<DashNavButton
|
||||
tooltip={desc}
|
||||
@ -158,7 +158,7 @@ export const DashNav = React.memo<Props>((props) => {
|
||||
<ModalsController key="button-share">
|
||||
{({ showModal, hideModal }) => (
|
||||
<DashNavButton
|
||||
tooltip={t({ id: 'dashboard.toolbar.share', message: 'Share dashboard or panel' })}
|
||||
tooltip={t('dashboard.toolbar.share', 'Share dashboard or panel')}
|
||||
icon="share-alt"
|
||||
iconSize="lg"
|
||||
onClick={() => {
|
||||
@ -184,7 +184,7 @@ export const DashNav = React.memo<Props>((props) => {
|
||||
<ModalsController key="button-dashboard-comments">
|
||||
{({ showModal, hideModal }) => (
|
||||
<DashNavButton
|
||||
tooltip={t({ id: 'dashboard.toolbar.comments-show', message: 'Show dashboard comments' })}
|
||||
tooltip={t('dashboard.toolbar.comments-show', 'Show dashboard comments')}
|
||||
icon="comment-alt-message"
|
||||
iconSize="lg"
|
||||
onClick={() => {
|
||||
@ -207,16 +207,16 @@ export const DashNav = React.memo<Props>((props) => {
|
||||
return (
|
||||
<ButtonGroup key="playlist-buttons">
|
||||
<ToolbarButton
|
||||
tooltip={t({ id: 'dashboard.toolbar.playlist-previous', message: 'Go to previous dashboard' })}
|
||||
tooltip={t('dashboard.toolbar.playlist-previous', 'Go to previous dashboard')}
|
||||
icon="backward"
|
||||
onClick={onPlaylistPrev}
|
||||
narrow
|
||||
/>
|
||||
<ToolbarButton onClick={onPlaylistStop}>
|
||||
<Trans id="dashboard.toolbar.playlist-stop">Stop playlist</Trans>
|
||||
<Trans i18nKey="dashboard.toolbar.playlist-stop">Stop playlist</Trans>
|
||||
</ToolbarButton>
|
||||
<ToolbarButton
|
||||
tooltip={t({ id: 'dashboard.toolbar.playlist-next', message: 'Go to next dashboard' })}
|
||||
tooltip={t('dashboard.toolbar.playlist-next', 'Go to next dashboard')}
|
||||
icon="forward"
|
||||
onClick={onPlaylistNext}
|
||||
narrow
|
||||
@ -245,7 +245,7 @@ export const DashNav = React.memo<Props>((props) => {
|
||||
const buttons: ReactNode[] = [];
|
||||
const tvButton = config.featureToggles.topnav ? null : (
|
||||
<ToolbarButton
|
||||
tooltip={t({ id: 'dashboard.toolbar.tv-button', message: 'Cycle view mode' })}
|
||||
tooltip={t('dashboard.toolbar.tv-button', 'Cycle view mode')}
|
||||
icon="monitor"
|
||||
onClick={onToggleTVMode}
|
||||
key="tv-button"
|
||||
@ -263,7 +263,7 @@ export const DashNav = React.memo<Props>((props) => {
|
||||
if (canEdit && !isFullscreen) {
|
||||
buttons.push(
|
||||
<ToolbarButton
|
||||
tooltip={t({ id: 'dashboard.toolbar.add-panel', message: 'Add panel' })}
|
||||
tooltip={t('dashboard.toolbar.add-panel', 'Add panel')}
|
||||
icon="panel-add"
|
||||
onClick={onAddPanel}
|
||||
key="button-panel-add"
|
||||
@ -276,7 +276,7 @@ export const DashNav = React.memo<Props>((props) => {
|
||||
<ModalsController key="button-save">
|
||||
{({ showModal, hideModal }) => (
|
||||
<ToolbarButton
|
||||
tooltip={t({ id: 'dashboard.toolbar.save', message: 'Save dashboard' })}
|
||||
tooltip={t('dashboard.toolbar.save', 'Save dashboard')}
|
||||
icon="save"
|
||||
onClick={() => {
|
||||
showModal(SaveDashboardDrawer, {
|
||||
@ -293,7 +293,7 @@ export const DashNav = React.memo<Props>((props) => {
|
||||
if (snapshotUrl) {
|
||||
buttons.push(
|
||||
<ToolbarButton
|
||||
tooltip={t({ id: 'dashboard.toolbar.open-original', message: 'Open original dashboard' })}
|
||||
tooltip={t('dashboard.toolbar.open-original', 'Open original dashboard')}
|
||||
onClick={() => gotoSnapshotOrigin(snapshotUrl)}
|
||||
icon="link"
|
||||
key="button-snapshot"
|
||||
@ -304,7 +304,7 @@ export const DashNav = React.memo<Props>((props) => {
|
||||
if (showSettings) {
|
||||
buttons.push(
|
||||
<ToolbarButton
|
||||
tooltip={t({ id: 'dashboard.toolbar.settings', message: 'Dashboard settings' })}
|
||||
tooltip={t('dashboard.toolbar.settings', 'Dashboard settings')}
|
||||
icon="cog"
|
||||
onClick={onOpenSettings}
|
||||
key="button-settings"
|
||||
|
@ -1,4 +1,3 @@
|
||||
import { t } from '@lingui/macro';
|
||||
import React, { Component } from 'react';
|
||||
import { Unsubscribable } from 'rxjs';
|
||||
|
||||
@ -7,6 +6,7 @@ import { TimeRangeUpdatedEvent } from '@grafana/runtime';
|
||||
import { defaultIntervals, RefreshPicker } from '@grafana/ui';
|
||||
import { TimePickerWithHistory } from 'app/core/components/TimePicker/TimePickerWithHistory';
|
||||
import { appEvents } from 'app/core/core';
|
||||
import { t } from 'app/core/internationalization';
|
||||
import { getTimeSrv } from 'app/features/dashboard/services/TimeSrv';
|
||||
|
||||
import { ShiftTimeEvent, ShiftTimeEventDirection, ZoomOutEvent } from '../../../../types/events';
|
||||
@ -107,20 +107,20 @@ export class DashNavTimeControls extends Component<Props> {
|
||||
value={dashboard.refresh}
|
||||
intervals={intervals}
|
||||
isOnCanvas={isOnCanvas}
|
||||
tooltip={t({ id: 'dashboard.toolbar.refresh', message: 'Refresh dashboard' })}
|
||||
tooltip={t('dashboard.toolbar.refresh', 'Refresh dashboard')}
|
||||
noIntervalPicker={hideIntervalPicker}
|
||||
offDescriptionAriaLabelMsg={t({
|
||||
id: 'dashboard.refresh-picker.off-description',
|
||||
message: 'Auto refresh turned off. Choose refresh time interval',
|
||||
})}
|
||||
offDescriptionAriaLabelMsg={t(
|
||||
'dashboard.refresh-picker.off-description',
|
||||
'Auto refresh turned off. Choose refresh time interval'
|
||||
)}
|
||||
onDescriptionAriaLabelMsg={(durationAriaLabel) =>
|
||||
t({
|
||||
id: 'dashboard.refresh-picker.on-description',
|
||||
message: `Choose refresh time interval with current interval ${durationAriaLabel} selected`,
|
||||
})
|
||||
t(
|
||||
'dashboard.refresh-picker.on-description',
|
||||
`Choose refresh time interval with current interval ${durationAriaLabel} selected`
|
||||
)
|
||||
}
|
||||
offOptionLabelMsg={t({ id: 'dashboard.refresh-picker.off-label', message: 'Off' })}
|
||||
offOptionAriaLabelMsg={t({ id: 'dashboard.refresh-picker.off-arialabel', message: 'Turn off auto refresh' })}
|
||||
offOptionLabelMsg={t('dashboard.refresh-picker.off-label', 'Off')}
|
||||
offOptionAriaLabelMsg={t('dashboard.refresh-picker.off-arialabel', 'Turn off auto refresh')}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
|
@ -1,9 +1,9 @@
|
||||
import { t } from '@lingui/macro';
|
||||
import React, { useState } from 'react';
|
||||
|
||||
import { CoreApp, DataSourceApi, formattedValueToString, getValueFormat, PanelData, PanelPlugin } from '@grafana/data';
|
||||
import { getTemplateSrv } from '@grafana/runtime';
|
||||
import { Drawer, Tab, TabsBar } from '@grafana/ui';
|
||||
import { t, Trans } from 'app/core/internationalization';
|
||||
import { InspectDataTab } from 'app/features/inspector/InspectDataTab';
|
||||
import { InspectErrorTab } from 'app/features/inspector/InspectErrorTab';
|
||||
import { InspectJSONTab } from 'app/features/inspector/InspectJSONTab';
|
||||
@ -59,10 +59,7 @@ export const InspectContent = ({
|
||||
}
|
||||
|
||||
const panelTitle = getTemplateSrv().replace(panel.title, panel.scopedVars, 'text') || 'Panel';
|
||||
const title = t({
|
||||
id: 'dashboard.inspect.title',
|
||||
message: `Inspect: ${panelTitle}`,
|
||||
});
|
||||
const title = t('dashboard.inspect.title', 'Inspect: {{panelTitle}}', { panelTitle });
|
||||
|
||||
return (
|
||||
<Drawer
|
||||
@ -74,13 +71,13 @@ export const InspectContent = ({
|
||||
scrollableContent
|
||||
tabs={
|
||||
<TabsBar>
|
||||
{tabs.map((t, index) => {
|
||||
{tabs.map((tab, index) => {
|
||||
return (
|
||||
<Tab
|
||||
key={`${t.value}-${index}`}
|
||||
label={t.label}
|
||||
active={t.value === activeTab}
|
||||
onChangeTab={() => setCurrentTab(t.value || InspectTab.Data)}
|
||||
key={`${tab.value}-${index}`}
|
||||
label={tab.label}
|
||||
active={tab.value === activeTab}
|
||||
onChangeTab={() => setCurrentTab(tab.value || InspectTab.Data)}
|
||||
/>
|
||||
);
|
||||
})}
|
||||
@ -124,8 +121,9 @@ function formatStats(data: PanelData) {
|
||||
const requestTime = request.endTime ? request.endTime - request.startTime : 0;
|
||||
const formatted = formattedValueToString(getValueFormat('ms')(requestTime));
|
||||
|
||||
return t({
|
||||
id: 'dashboard.inspect.subtitle',
|
||||
message: `${queryCount} queries with total query time of ${formatted}`,
|
||||
});
|
||||
return (
|
||||
<Trans i18nKey="dashboard.inspect.subtitle">
|
||||
{{ queryCount }} queries with total query time of {{ formatted }}
|
||||
</Trans>
|
||||
);
|
||||
}
|
||||
|
@ -1,9 +1,9 @@
|
||||
import { t } from '@lingui/macro';
|
||||
import { useMemo } from 'react';
|
||||
import useAsync from 'react-use/lib/useAsync';
|
||||
|
||||
import { DataQueryError, DataSourceApi, PanelData, PanelPlugin } from '@grafana/data';
|
||||
import { getDataSourceSrv } from '@grafana/runtime';
|
||||
import { t } from 'app/core/internationalization';
|
||||
import { DashboardModel, PanelModel } from 'app/features/dashboard/state';
|
||||
import { InspectTab } from 'app/features/inspector/types';
|
||||
|
||||
@ -48,18 +48,18 @@ export const useInspectTabs = (
|
||||
return useMemo(() => {
|
||||
const tabs = [];
|
||||
if (supportsDataQuery(plugin)) {
|
||||
tabs.push({ label: t({ id: 'dashboard.inspect.data-tab', message: 'Data' }), value: InspectTab.Data });
|
||||
tabs.push({ label: t({ id: 'dashboard.inspect.stats-tab', message: 'Stats' }), value: InspectTab.Stats });
|
||||
tabs.push({ label: t('dashboard.inspect.data-tab', 'Data'), value: InspectTab.Data });
|
||||
tabs.push({ label: t('dashboard.inspect.stats-tab', 'Stats'), value: InspectTab.Stats });
|
||||
}
|
||||
|
||||
if (metaDs) {
|
||||
tabs.push({ label: t({ id: 'dashboard.inspect.meta-tab', message: 'Meta Data' }), value: InspectTab.Meta });
|
||||
tabs.push({ label: t('dashboard.inspect.meta-tab', 'Meta Data'), value: InspectTab.Meta });
|
||||
}
|
||||
|
||||
tabs.push({ label: t({ id: 'dashboard.inspect.json-tab', message: 'JSON' }), value: InspectTab.JSON });
|
||||
tabs.push({ label: t('dashboard.inspect.json-tab', 'JSON'), value: InspectTab.JSON });
|
||||
|
||||
if (error && error.message) {
|
||||
tabs.push({ label: t({ id: 'dashboard.inspect.error-tab', message: 'Error' }), value: InspectTab.Error });
|
||||
tabs.push({ label: t('dashboard.inspect.error-tab', 'Error'), value: InspectTab.Error });
|
||||
}
|
||||
|
||||
// This is a quick internal hack to allow custom actions in inspect
|
||||
@ -67,13 +67,13 @@ export const useInspectTabs = (
|
||||
const supplier = (window as any).grafanaPanelInspectActionSupplier as PanelInspectActionSupplier;
|
||||
if (supplier && supplier.getActions(panel)?.length) {
|
||||
tabs.push({
|
||||
label: t({ id: 'dashboard.inspect.actions-tab', message: 'Actions' }),
|
||||
label: t('dashboard.inspect.actions-tab', 'Actions'),
|
||||
value: InspectTab.Actions,
|
||||
});
|
||||
}
|
||||
|
||||
if (dashboard.meta.canEdit && supportsDataQuery(plugin)) {
|
||||
tabs.push({ label: t({ id: 'dashboard.inspect.query-tab', message: 'Query' }), value: InspectTab.Query });
|
||||
tabs.push({ label: t('dashboard.inspect.query-tab', 'Query'), value: InspectTab.Query });
|
||||
}
|
||||
return tabs;
|
||||
}, [panel, plugin, metaDs, dashboard, error]);
|
||||
|
@ -1,8 +1,8 @@
|
||||
import { t, Trans } from '@lingui/macro';
|
||||
import React, { FormEvent, PureComponent } from 'react';
|
||||
|
||||
import { reportInteraction } from '@grafana/runtime/src';
|
||||
import { ClipboardButton, Field, Modal, Switch, TextArea } from '@grafana/ui';
|
||||
import { t, Trans } from 'app/core/internationalization';
|
||||
|
||||
import { ThemePicker } from './ThemePicker';
|
||||
import { ShareModalTabProps } from './types';
|
||||
@ -65,21 +65,18 @@ export class ShareEmbed extends PureComponent<Props, State> {
|
||||
const isRelativeTime = this.props.dashboard ? this.props.dashboard.time.to === 'now' : false;
|
||||
|
||||
const timeRangeDescription = isRelativeTime
|
||||
? t({
|
||||
id: 'share-modal.embed.time-range-description',
|
||||
message: 'Transforms the current relative time range to an absolute time range',
|
||||
})
|
||||
? t(
|
||||
'share-modal.embed.time-range-description',
|
||||
'Transforms the current relative time range to an absolute time range'
|
||||
)
|
||||
: '';
|
||||
|
||||
return (
|
||||
<>
|
||||
<p className="share-modal-info-text">
|
||||
<Trans id="share-modal.embed.info">Generate HTML for embedding an iframe with this panel.</Trans>
|
||||
<Trans i18nKey="share-modal.embed.info">Generate HTML for embedding an iframe with this panel.</Trans>
|
||||
</p>
|
||||
<Field
|
||||
label={t({ id: 'share-modal.embed.time-range', message: 'Current time range' })}
|
||||
description={timeRangeDescription}
|
||||
>
|
||||
<Field label={t('share-modal.embed.time-range', 'Current time range')} description={timeRangeDescription}>
|
||||
<Switch
|
||||
id="share-current-time-range"
|
||||
value={useCurrentTimeRange}
|
||||
@ -88,13 +85,11 @@ export class ShareEmbed extends PureComponent<Props, State> {
|
||||
</Field>
|
||||
<ThemePicker selectedTheme={selectedTheme} onChange={this.onThemeChange} />
|
||||
<Field
|
||||
label={t({ id: 'share-modal.embed.html', message: 'Embed HTML' })}
|
||||
description={
|
||||
<Trans id="share-modal.embed.html-description">
|
||||
The HTML code below can be pasted and included in another web page. Unless anonymous access is enabled,
|
||||
the user viewing that page need to be signed into Grafana for the graph to load.
|
||||
</Trans>
|
||||
}
|
||||
label={t('share-modal.embed.html', 'Embed HTML')}
|
||||
description={t(
|
||||
'share-modal.embed.html-description',
|
||||
'The HTML code below can be pasted and included in another web page. Unless anonymous access is enabled, the user viewing that page need to be signed into Grafana for the graph to load.'
|
||||
)}
|
||||
>
|
||||
<TextArea
|
||||
data-testid="share-embed-html"
|
||||
@ -106,7 +101,7 @@ export class ShareEmbed extends PureComponent<Props, State> {
|
||||
</Field>
|
||||
<Modal.ButtonRow>
|
||||
<ClipboardButton icon="copy" variant="primary" getText={this.getIframeHtml}>
|
||||
<Trans id="share-modal.embed.copy">Copy to clipboard</Trans>
|
||||
<Trans i18nKey="share-modal.embed.copy">Copy to clipboard</Trans>
|
||||
</ClipboardButton>
|
||||
</Modal.ButtonRow>
|
||||
</>
|
||||
|
@ -1,10 +1,10 @@
|
||||
import { Trans, t } from '@lingui/macro';
|
||||
import { saveAs } from 'file-saver';
|
||||
import React, { PureComponent } from 'react';
|
||||
|
||||
import { config, reportInteraction } from '@grafana/runtime';
|
||||
import { Button, Field, Modal, Switch } from '@grafana/ui';
|
||||
import { appEvents } from 'app/core/core';
|
||||
import { t, Trans } from 'app/core/internationalization';
|
||||
import { getBackendSrv } from 'app/core/services/backend_srv';
|
||||
import { DashboardExporter } from 'app/features/dashboard/components/DashExportModal';
|
||||
import { ShowModalReactEvent } from 'app/types/events';
|
||||
@ -135,20 +135,14 @@ export class ShareExport extends PureComponent<Props, State> {
|
||||
const { shareExternally } = this.state;
|
||||
const { trimDefaults } = this.state;
|
||||
|
||||
const exportExternallyTranslation = t({
|
||||
id: 'share-modal.export.share-externally-label',
|
||||
message: `Export for sharing externally`,
|
||||
});
|
||||
const exportExternallyTranslation = t('share-modal.export.share-externally-label', `Export for sharing externally`);
|
||||
|
||||
const exportDefaultTranslation = t({
|
||||
id: 'share-modal.export.share-default-label',
|
||||
message: `Export with default values removed`,
|
||||
});
|
||||
const exportDefaultTranslation = t('share-modal.export.share-default-label', `Export with default values removed`);
|
||||
|
||||
return (
|
||||
<>
|
||||
<p className="share-modal-info-text">
|
||||
<Trans id="share-modal.export.info-text">Export this dashboard.</Trans>
|
||||
<Trans i18nKey="share-modal.export.info-text">Export this dashboard.</Trans>
|
||||
</p>
|
||||
<Field label={exportExternallyTranslation}>
|
||||
<Switch id="share-externally-toggle" value={shareExternally} onChange={this.onShareExternallyChange} />
|
||||
@ -160,13 +154,13 @@ export class ShareExport extends PureComponent<Props, State> {
|
||||
)}
|
||||
<Modal.ButtonRow>
|
||||
<Button variant="secondary" onClick={onDismiss} fill="outline">
|
||||
<Trans id="share-modal.export.cancel-button">Cancel</Trans>
|
||||
<Trans i18nKey="share-modal.export.cancel-button">Cancel</Trans>
|
||||
</Button>
|
||||
<Button variant="secondary" onClick={this.onViewJson}>
|
||||
<Trans id="share-modal.export.view-button">View JSON</Trans>
|
||||
<Trans i18nKey="share-modal.export.view-button">View JSON</Trans>
|
||||
</Button>
|
||||
<Button variant="primary" onClick={this.onSaveAsFile}>
|
||||
<Trans id="share-modal.export.save-button">Save to file</Trans>
|
||||
<Trans i18nKey="share-modal.export.save-button">Save to file</Trans>
|
||||
</Button>
|
||||
</Modal.ButtonRow>
|
||||
</>
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { Trans } from '@lingui/macro';
|
||||
import React, { useEffect } from 'react';
|
||||
|
||||
import { reportInteraction } from '@grafana/runtime/src';
|
||||
import { Trans } from 'app/core/internationalization';
|
||||
import { AddLibraryPanelContents } from 'app/features/library-panels/components/AddLibraryPanelModal/AddLibraryPanelModal';
|
||||
|
||||
import { ShareModalTabProps } from './types';
|
||||
@ -22,7 +22,7 @@ export const ShareLibraryPanel = ({ panel, initialFolderId, onDismiss }: Props)
|
||||
return (
|
||||
<>
|
||||
<p className="share-modal-info-text">
|
||||
<Trans id="share-modal.library.info">Create library panel.</Trans>
|
||||
<Trans i18nKey="share-modal.library.info">Create library panel.</Trans>
|
||||
</p>
|
||||
<AddLibraryPanelContents panel={panel} initialFolderId={initialFolderId} onDismiss={onDismiss!} />
|
||||
</>
|
||||
|
@ -1,10 +1,10 @@
|
||||
import { Trans, t } from '@lingui/macro';
|
||||
import React, { PureComponent } from 'react';
|
||||
|
||||
import { selectors as e2eSelectors } from '@grafana/e2e-selectors';
|
||||
import { reportInteraction } from '@grafana/runtime/src';
|
||||
import { Alert, ClipboardButton, Field, FieldSet, Icon, Input, Switch } from '@grafana/ui';
|
||||
import config from 'app/core/config';
|
||||
import { t, Trans } from 'app/core/internationalization';
|
||||
|
||||
import { ThemePicker } from './ThemePicker';
|
||||
import { ShareModalTabProps } from './types';
|
||||
@ -81,30 +81,21 @@ export class ShareLink extends PureComponent<Props, State> {
|
||||
const selectors = e2eSelectors.pages.SharePanelModal;
|
||||
const isDashboardSaved = Boolean(dashboard.id);
|
||||
|
||||
const timeRangeLabelTranslation = t({
|
||||
id: 'share-modal.link.time-range-label',
|
||||
message: `Lock time range`,
|
||||
});
|
||||
const timeRangeLabelTranslation = t('share-modal.link.time-range-label', `Lock time range`);
|
||||
|
||||
const timeRangeDescriptionTranslation = t({
|
||||
id: 'share-modal.link.time-range-description',
|
||||
message: `Transforms the current relative time range to an absolute time range`,
|
||||
});
|
||||
const timeRangeDescriptionTranslation = t(
|
||||
'share-modal.link.time-range-description',
|
||||
`Transforms the current relative time range to an absolute time range`
|
||||
);
|
||||
|
||||
const shortenURLTranslation = t({
|
||||
id: 'share-modal.link.shorten-url',
|
||||
message: `Shorten URL`,
|
||||
});
|
||||
const shortenURLTranslation = t('share-modal.link.shorten-url', `Shorten URL`);
|
||||
|
||||
const linkURLTranslation = t({
|
||||
id: 'share-modal.link.link-url',
|
||||
message: `Link URL`,
|
||||
});
|
||||
const linkURLTranslation = t('share-modal.link.link-url', `Link URL`);
|
||||
|
||||
return (
|
||||
<>
|
||||
<p className="share-modal-info-text">
|
||||
<Trans id="share-modal.link.info-text">
|
||||
<Trans i18nKey="share-modal.link.info-text">
|
||||
Create a direct link to this dashboard or panel, customized with the options below.
|
||||
</Trans>
|
||||
</p>
|
||||
@ -128,7 +119,7 @@ export class ShareLink extends PureComponent<Props, State> {
|
||||
readOnly
|
||||
addonAfter={
|
||||
<ClipboardButton icon="copy" variant="primary" getText={this.getShareUrl}>
|
||||
<Trans id="share-modal.link.copy-link-button">Copy</Trans>
|
||||
<Trans i18nKey="share-modal.link.copy-link-button">Copy</Trans>
|
||||
</ClipboardButton>
|
||||
}
|
||||
/>
|
||||
@ -142,7 +133,7 @@ export class ShareLink extends PureComponent<Props, State> {
|
||||
<a href={imageUrl} target="_blank" rel="noreferrer" aria-label={selectors.linkToRenderedImage}>
|
||||
<Icon name="camera" />
|
||||
|
||||
<Trans id="share-modal.link.rendered-image">Direct link rendered image</Trans>
|
||||
<Trans i18nKey="share-modal.link.rendered-image">Direct link rendered image</Trans>
|
||||
</a>
|
||||
</div>
|
||||
)}
|
||||
@ -150,10 +141,10 @@ export class ShareLink extends PureComponent<Props, State> {
|
||||
{!isDashboardSaved && (
|
||||
<Alert
|
||||
severity="info"
|
||||
title={t({ id: 'share-modal.link.save-alert', message: `Dashboard is not saved` })}
|
||||
title={t('share-modal.link.save-alert', 'Dashboard is not saved')}
|
||||
bottomSpacing={0}
|
||||
>
|
||||
<Trans id="share-modal.link.save-dashboard">
|
||||
<Trans i18nKey="share-modal.link.save-dashboard">
|
||||
To render a panel image, you must save the dashboard first.
|
||||
</Trans>
|
||||
</Alert>
|
||||
@ -164,10 +155,10 @@ export class ShareLink extends PureComponent<Props, State> {
|
||||
{panel && !config.rendererAvailable && (
|
||||
<Alert
|
||||
severity="info"
|
||||
title={t({ id: 'share-modal.link.render-alert', message: `Image renderer plugin not installed` })}
|
||||
title={t('share-modal.link.render-alert', 'Image renderer plugin not installed')}
|
||||
bottomSpacing={0}
|
||||
>
|
||||
<Trans id="share-modal.link.render-instructions">
|
||||
<Trans i18nKey="share-modal.link.render-instructions">
|
||||
To render a panel image, you must install the
|
||||
<a
|
||||
href="https://grafana.com/grafana/plugins/grafana-image-renderer"
|
||||
|
@ -1,10 +1,10 @@
|
||||
import { t } from '@lingui/macro';
|
||||
import React from 'react';
|
||||
|
||||
import { reportInteraction } from '@grafana/runtime/src';
|
||||
import { Modal, ModalTabsHeader, TabContent } from '@grafana/ui';
|
||||
import { config } from 'app/core/config';
|
||||
import { contextSrv } from 'app/core/core';
|
||||
import { t } from 'app/core/internationalization';
|
||||
import { SharePublicDashboard } from 'app/features/dashboard/components/ShareModal/SharePublicDashboard/SharePublicDashboard';
|
||||
import { DashboardModel, PanelModel } from 'app/features/dashboard/state';
|
||||
import { isPanelModelLibraryPanel } from 'app/features/library-panels/guard';
|
||||
@ -38,25 +38,25 @@ function getInitialState(props: Props): State {
|
||||
function getTabs(props: Props) {
|
||||
const { panel } = props;
|
||||
|
||||
const linkLabel = t({ id: 'share-modal.tab-title.link', message: 'Link' });
|
||||
const linkLabel = t('share-modal.tab-title.link', 'Link');
|
||||
const tabs: ShareModalTabModel[] = [{ label: linkLabel, value: 'link', component: ShareLink }];
|
||||
|
||||
if (contextSrv.isSignedIn) {
|
||||
const snapshotLabel = t({ id: 'share-modal.tab-title.snapshot', message: 'Snapshot' });
|
||||
const snapshotLabel = t('share-modal.tab-title.snapshot', 'Snapshot');
|
||||
tabs.push({ label: snapshotLabel, value: 'snapshot', component: ShareSnapshot });
|
||||
}
|
||||
|
||||
if (panel) {
|
||||
const embedLabel = t({ id: 'share-modal.tab-title.embed', message: 'Embed' });
|
||||
const embedLabel = t('share-modal.tab-title.embed', 'Embed');
|
||||
tabs.push({ label: embedLabel, value: 'embed', component: ShareEmbed });
|
||||
|
||||
if (!isPanelModelLibraryPanel(panel)) {
|
||||
const libraryPanelLabel = t({ id: 'share-modal.tab-title.library-panel', message: 'Library panel' });
|
||||
const libraryPanelLabel = t('share-modal.tab-title.library-panel', 'Library panel');
|
||||
tabs.push({ label: libraryPanelLabel, value: 'library_panel', component: ShareLibraryPanel });
|
||||
}
|
||||
tabs.push(...customPanelTabs);
|
||||
} else {
|
||||
const exportLabel = t({ id: 'share-modal.tab-title.export', message: 'Export' });
|
||||
const exportLabel = t('share-modal.tab-title.export', 'Export');
|
||||
tabs.push({ label: exportLabel, value: 'export', component: ShareExport });
|
||||
tabs.push(...customDashboardTabs);
|
||||
}
|
||||
@ -106,15 +106,7 @@ export class ShareModal extends React.Component<Props, State> {
|
||||
renderTitle() {
|
||||
const { panel } = this.props;
|
||||
const { activeTab } = this.state;
|
||||
const title = panel
|
||||
? t({
|
||||
id: 'share-modal.panel.title',
|
||||
message: 'Share Panel',
|
||||
})
|
||||
: t({
|
||||
id: 'share-modal.dashboard.title',
|
||||
message: 'Share',
|
||||
});
|
||||
const title = panel ? t('share-modal.panel.title', 'Share Panel') : t('share-modal.dashboard.title', 'Share');
|
||||
const tabs = this.getTabs();
|
||||
|
||||
return (
|
||||
|
@ -1,9 +1,9 @@
|
||||
import { Trans, t } from '@lingui/macro';
|
||||
import React, { PureComponent } from 'react';
|
||||
|
||||
import { SelectableValue } from '@grafana/data';
|
||||
import { getBackendSrv, reportInteraction } from '@grafana/runtime';
|
||||
import { Button, ClipboardButton, Field, Input, LinkButton, Modal, Select, Spinner } from '@grafana/ui';
|
||||
import { t, Trans } from 'app/core/internationalization';
|
||||
import { getTimeSrv } from 'app/features/dashboard/services/TimeSrv';
|
||||
import { DashboardModel, PanelModel } from 'app/features/dashboard/state';
|
||||
|
||||
@ -37,31 +37,19 @@ export class ShareSnapshot extends PureComponent<Props, State> {
|
||||
this.dashboard = props.dashboard;
|
||||
this.expireOptions = [
|
||||
{
|
||||
label: t({
|
||||
id: 'share-modal.snapshot.expire-never',
|
||||
message: `Never`,
|
||||
}),
|
||||
label: t('share-modal.snapshot.expire-never', `Never`),
|
||||
value: 0,
|
||||
},
|
||||
{
|
||||
label: t({
|
||||
id: 'share-modal.snapshot.expire-hour',
|
||||
message: `1 Hour`,
|
||||
}),
|
||||
label: t('share-modal.snapshot.expire-hour', `1 Hour`),
|
||||
value: 60 * 60,
|
||||
},
|
||||
{
|
||||
label: t({
|
||||
id: 'share-modal.snapshot.expire-day',
|
||||
message: `1 Day`,
|
||||
}),
|
||||
label: t('share-modal.snapshot.expire-day', `1 Day`),
|
||||
value: 60 * 60 * 24,
|
||||
},
|
||||
{
|
||||
label: t({
|
||||
id: 'share-modal.snapshot.expire-week',
|
||||
message: `7 Days`,
|
||||
}),
|
||||
label: t('share-modal.snapshot.expire-week', `7 Days`),
|
||||
value: 60 * 60 * 24 * 7,
|
||||
},
|
||||
];
|
||||
@ -227,39 +215,26 @@ export class ShareSnapshot extends PureComponent<Props, State> {
|
||||
const { snapshotName, selectedExpireOption, timeoutSeconds, isLoading, sharingButtonText, externalEnabled } =
|
||||
this.state;
|
||||
|
||||
const snapshotNameTranslation = t({
|
||||
id: 'share-modal.snapshot.name',
|
||||
message: `Snapshot name`,
|
||||
});
|
||||
|
||||
const expireTranslation = t({
|
||||
id: 'share-modal.snapshot.expire',
|
||||
message: `Expire`,
|
||||
});
|
||||
|
||||
const timeoutTranslation = t({
|
||||
id: 'share-modal.snapshot.timeout',
|
||||
message: `Timeout (seconds)`,
|
||||
});
|
||||
|
||||
const timeoutDescriptionTranslation = t({
|
||||
id: 'share-modal.snapshot.timeout-description',
|
||||
message: `You might need to configure the timeout value if it takes a long time to collect your dashboard
|
||||
metrics.`,
|
||||
});
|
||||
const snapshotNameTranslation = t('share-modal.snapshot.name', `Snapshot name`);
|
||||
const expireTranslation = t('share-modal.snapshot.expire', `Expire`);
|
||||
const timeoutTranslation = t('share-modal.snapshot.timeout', `Timeout (seconds)`);
|
||||
const timeoutDescriptionTranslation = t(
|
||||
'share-modal.snapshot.timeout-description',
|
||||
`You might need to configure the timeout value if it takes a long time to collect your dashboard metrics.`
|
||||
);
|
||||
|
||||
return (
|
||||
<>
|
||||
<div>
|
||||
<p className="share-modal-info-text">
|
||||
<Trans id="share-modal.snapshot.info-text-1">
|
||||
<Trans i18nKey="share-modal.snapshot.info-text-1">
|
||||
A snapshot is an instant way to share an interactive dashboard publicly. When created, we strip sensitive
|
||||
data like queries (metric, template, and annotation) and panel links, leaving only the visible metric data
|
||||
and series names embedded in your dashboard.
|
||||
</Trans>
|
||||
</p>
|
||||
<p className="share-modal-info-text">
|
||||
<Trans id="share-modal.snapshot.info-text-2">
|
||||
<Trans i18nKey="share-modal.snapshot.info-text-2">
|
||||
Keep in mind, your snapshot <em>can be viewed by anyone</em> that has the link and can access the URL.
|
||||
Share wisely.
|
||||
</Trans>
|
||||
@ -283,7 +258,7 @@ export class ShareSnapshot extends PureComponent<Props, State> {
|
||||
|
||||
<Modal.ButtonRow>
|
||||
<Button variant="secondary" onClick={onDismiss} fill="outline">
|
||||
<Trans id="share-modal.snapshot.cancel-button">Cancel</Trans>
|
||||
<Trans i18nKey="share-modal.snapshot.cancel-button">Cancel</Trans>
|
||||
</Button>
|
||||
{externalEnabled && (
|
||||
<Button variant="secondary" disabled={isLoading} onClick={this.createSnapshot(true)}>
|
||||
@ -291,7 +266,7 @@ export class ShareSnapshot extends PureComponent<Props, State> {
|
||||
</Button>
|
||||
)}
|
||||
<Button variant="primary" disabled={isLoading} onClick={this.createSnapshot()}>
|
||||
<Trans id="share-modal.snapshot.local-button">Local Snapshot</Trans>
|
||||
<Trans i18nKey="share-modal.snapshot.local-button">Local Snapshot</Trans>
|
||||
</Button>
|
||||
</Modal.ButtonRow>
|
||||
</>
|
||||
@ -310,16 +285,16 @@ export class ShareSnapshot extends PureComponent<Props, State> {
|
||||
readOnly
|
||||
addonAfter={
|
||||
<ClipboardButton icon="copy" variant="primary" getText={this.getSnapshotUrl}>
|
||||
<Trans id="share-modal.snapshot.copy-link-button">Copy</Trans>
|
||||
<Trans i18nKey="share-modal.snapshot.copy-link-button">Copy</Trans>
|
||||
</ClipboardButton>
|
||||
}
|
||||
/>
|
||||
</Field>
|
||||
|
||||
<div className="pull-right" style={{ padding: '5px' }}>
|
||||
<Trans id="share-modal.snapshot.mistake-message">Did you make a mistake? </Trans>
|
||||
<Trans i18nKey="share-modal.snapshot.mistake-message">Did you make a mistake? </Trans>
|
||||
<LinkButton fill="text" target="_blank" onClick={this.deleteSnapshot}>
|
||||
<Trans id="share-modal.snapshot.delete-button">Delete snapshot.</Trans>
|
||||
<Trans i18nKey="share-modal.snapshot.delete-button">Delete snapshot.</Trans>
|
||||
</LinkButton>
|
||||
</div>
|
||||
</>
|
||||
@ -330,7 +305,7 @@ export class ShareSnapshot extends PureComponent<Props, State> {
|
||||
return (
|
||||
<div className="share-modal-header">
|
||||
<p className="share-modal-info-text">
|
||||
<Trans id="share-modal.snapshot.deleted-message">
|
||||
<Trans i18nKey="share-modal.snapshot.deleted-message">
|
||||
The snapshot has been deleted. If you have already accessed it once, then it might take up to an hour before
|
||||
before it is removed from browser caches or CDN caches.
|
||||
</Trans>
|
||||
|
@ -1,8 +1,8 @@
|
||||
import { t } from '@lingui/macro';
|
||||
import React from 'react';
|
||||
|
||||
import { SelectableValue } from '@grafana/data';
|
||||
import { RadioButtonGroup, Field } from '@grafana/ui';
|
||||
import { t } from 'app/core/internationalization';
|
||||
|
||||
interface Props {
|
||||
selectedTheme: string;
|
||||
@ -12,35 +12,21 @@ interface Props {
|
||||
export const ThemePicker = ({ selectedTheme = 'current', onChange }: Props) => {
|
||||
const themeOptions: Array<SelectableValue<string>> = [
|
||||
{
|
||||
label: t({
|
||||
id: 'share-modal.theme-picker.current',
|
||||
message: `Current`,
|
||||
}),
|
||||
label: t('share-modal.theme-picker.current', `Current`),
|
||||
value: 'current',
|
||||
},
|
||||
{
|
||||
label: t({
|
||||
id: 'share-modal.theme-picker.dark',
|
||||
message: `Dark`,
|
||||
}),
|
||||
label: t('share-modal.theme-picker.dark', `Dark`),
|
||||
value: 'dark',
|
||||
},
|
||||
{
|
||||
label: t({
|
||||
id: 'share-modal.theme-picker.light',
|
||||
message: `Light`,
|
||||
}),
|
||||
label: t('share-modal.theme-picker.light', `Light`),
|
||||
value: 'light',
|
||||
},
|
||||
];
|
||||
|
||||
return (
|
||||
<Field
|
||||
label={t({
|
||||
id: 'share-modal.theme-picker.field-name',
|
||||
message: `Theme`,
|
||||
})}
|
||||
>
|
||||
<Field label={t('share-modal.theme-picker.field-name', `Theme`)}>
|
||||
<RadioButtonGroup options={themeOptions} value={selectedTheme} onChange={onChange} />
|
||||
</Field>
|
||||
);
|
||||
|
@ -1,9 +1,8 @@
|
||||
import { t } from '@lingui/macro';
|
||||
|
||||
import { PanelMenuItem } from '@grafana/data';
|
||||
import { AngularComponent, getDataSourceSrv, locationService, reportInteraction } from '@grafana/runtime';
|
||||
import { PanelCtrl } from 'app/angular/panel/panel_ctrl';
|
||||
import config from 'app/core/config';
|
||||
import { t } from 'app/core/internationalization';
|
||||
import { contextSrv } from 'app/core/services/context_srv';
|
||||
import { getExploreUrl } from 'app/core/utils/explore';
|
||||
import { DashboardModel } from 'app/features/dashboard/state/DashboardModel';
|
||||
@ -102,10 +101,7 @@ export function getPanelMenu(
|
||||
const menu: PanelMenuItem[] = [];
|
||||
|
||||
if (!panel.isEditing) {
|
||||
const viewTextTranslation = t({
|
||||
id: 'panel.header-menu.view',
|
||||
message: `View`,
|
||||
});
|
||||
const viewTextTranslation = t('panel.header-menu.view', `View`);
|
||||
menu.push({
|
||||
text: viewTextTranslation,
|
||||
iconClassName: 'eye',
|
||||
@ -123,10 +119,7 @@ export function getPanelMenu(
|
||||
});
|
||||
}
|
||||
|
||||
const shareTextTranslation = t({
|
||||
id: 'panel.header-menu.share',
|
||||
message: `Share`,
|
||||
});
|
||||
const shareTextTranslation = t('panel.header-menu.share', `Share`);
|
||||
|
||||
menu.push({
|
||||
text: shareTextTranslation,
|
||||
@ -148,10 +141,7 @@ export function getPanelMenu(
|
||||
|
||||
// Only show these inspect actions for data plugins
|
||||
if (panel.plugin && !panel.plugin.meta.skipDataQuery) {
|
||||
const dataTextTranslation = t({
|
||||
id: 'panel.header-menu.inspect-data',
|
||||
message: `Data`,
|
||||
});
|
||||
const dataTextTranslation = t('panel.header-menu.inspect-data', `Data`);
|
||||
|
||||
inspectMenu.push({
|
||||
text: dataTextTranslation,
|
||||
@ -166,20 +156,14 @@ export function getPanelMenu(
|
||||
}
|
||||
}
|
||||
|
||||
const jsonTextTranslation = t({
|
||||
id: 'panel.header-menu.inspect-json',
|
||||
message: `Panel JSON`,
|
||||
});
|
||||
const jsonTextTranslation = t('panel.header-menu.inspect-json', `Panel JSON`);
|
||||
|
||||
inspectMenu.push({
|
||||
text: jsonTextTranslation,
|
||||
onClick: (e: React.MouseEvent<any>) => onInspectPanel(InspectTab.JSON),
|
||||
});
|
||||
|
||||
const inspectTextTranslation = t({
|
||||
id: 'panel.header-menu.inspect',
|
||||
message: `Inspect`,
|
||||
});
|
||||
const inspectTextTranslation = t('panel.header-menu.inspect', `Inspect`);
|
||||
|
||||
menu.push({
|
||||
type: 'submenu',
|
||||
@ -262,10 +246,7 @@ export function getPanelMenu(
|
||||
}
|
||||
|
||||
if (subMenu.length) {
|
||||
const moreTextTranslation = t({
|
||||
id: 'panel.header-menu.more',
|
||||
message: `More...`,
|
||||
});
|
||||
const moreTextTranslation = t('panel.header-menu.more', `More...`);
|
||||
menu.push({
|
||||
type: 'submenu',
|
||||
text: moreTextTranslation,
|
||||
|
@ -1,9 +1,9 @@
|
||||
import { t } from '@lingui/macro';
|
||||
import React, { FC } from 'react';
|
||||
|
||||
import { DataFrame, DataTransformerID, getFrameDisplayName, SelectableValue } from '@grafana/data';
|
||||
import { Field, HorizontalGroup, Select, Switch, VerticalGroup } from '@grafana/ui';
|
||||
import { QueryOperationRow } from 'app/core/components/QueryOperationRow/QueryOperationRow';
|
||||
import { t } from 'app/core/internationalization';
|
||||
import { PanelModel } from 'app/features/dashboard/state';
|
||||
import { DetailText } from 'app/features/inspector/DetailText';
|
||||
import { GetDataOptions } from 'app/features/query/state/PanelQueryRunner';
|
||||
@ -68,26 +68,26 @@ export const InspectDataOptions: FC<Props> = ({
|
||||
const parts: string[] = [];
|
||||
|
||||
if (selectedDataFrame === DataTransformerID.joinByField) {
|
||||
parts.push(t({ id: 'dashboard.inspect-data.series-to-columns', message: 'Series joined by time' }));
|
||||
parts.push(t('dashboard.inspect-data.series-to-columns', 'Series joined by time'));
|
||||
} else if (data.length > 1) {
|
||||
parts.push(getFrameDisplayName(data[selectedDataFrame as number]));
|
||||
}
|
||||
|
||||
if (options.withTransforms || options.withFieldConfig) {
|
||||
if (options.withTransforms) {
|
||||
parts.push(t({ id: 'dashboard.inspect-data.panel-transforms', message: 'Panel transforms' }));
|
||||
parts.push(t('dashboard.inspect-data.panel-transforms', 'Panel transforms'));
|
||||
}
|
||||
|
||||
if (options.withTransforms && options.withFieldConfig) {
|
||||
}
|
||||
|
||||
if (options.withFieldConfig) {
|
||||
parts.push(t({ id: 'dashboard.inspect-data.formatted', message: 'Formatted data' }));
|
||||
parts.push(t('dashboard.inspect-data.formatted', 'Formatted data'));
|
||||
}
|
||||
}
|
||||
|
||||
if (downloadForExcel) {
|
||||
parts.push(t({ id: 'dashboard.inspect-data.excel-header', message: 'Excel header' }));
|
||||
parts.push(t('dashboard.inspect-data.excel-header', 'Excel header'));
|
||||
}
|
||||
|
||||
return parts.join(', ');
|
||||
@ -98,20 +98,20 @@ export const InspectDataOptions: FC<Props> = ({
|
||||
<QueryOperationRow
|
||||
id="Data options"
|
||||
index={0}
|
||||
title={t({ id: 'dashboard.inspect-data.data-options', message: 'Data options' })}
|
||||
title={t('dashboard.inspect-data.data-options', 'Data options')}
|
||||
headerElement={<DetailText>{getActiveString()}</DetailText>}
|
||||
isOpen={false}
|
||||
>
|
||||
<div className={styles.options} data-testid="dataOptions">
|
||||
<VerticalGroup spacing="none">
|
||||
{data!.length > 1 && (
|
||||
<Field label={t({ id: 'dashboard.inspect-data.dataframe-label', message: 'Show data frame' })}>
|
||||
<Field label={t('dashboard.inspect-data.dataframe-label', 'Show data frame')}>
|
||||
<Select
|
||||
options={selectableOptions}
|
||||
value={selectedDataFrame}
|
||||
onChange={onDataFrameChange}
|
||||
width={30}
|
||||
aria-label={t({ id: 'dashboard.inspect-data.dataframe-aria-label', message: 'Select dataframe' })}
|
||||
aria-label={t('dashboard.inspect-data.dataframe-aria-label', 'Select dataframe')}
|
||||
/>
|
||||
</Field>
|
||||
)}
|
||||
@ -119,14 +119,11 @@ export const InspectDataOptions: FC<Props> = ({
|
||||
<HorizontalGroup>
|
||||
{showPanelTransformationsOption && onOptionsChange && (
|
||||
<Field
|
||||
label={t({
|
||||
id: 'dashboard.inspect-data.transformations-label',
|
||||
message: 'Apply panel transformations',
|
||||
})}
|
||||
description={t({
|
||||
id: 'dashboard.inspect-data.transformations-description',
|
||||
message: 'Table data is displayed with transformations defined in the panel Transform tab.',
|
||||
})}
|
||||
label={t('dashboard.inspect-data.transformations-label', 'Apply panel transformations')}
|
||||
description={t(
|
||||
'dashboard.inspect-data.transformations-description',
|
||||
'Table data is displayed with transformations defined in the panel Transform tab.'
|
||||
)}
|
||||
>
|
||||
<Switch
|
||||
value={!!options.withTransforms}
|
||||
@ -136,11 +133,11 @@ export const InspectDataOptions: FC<Props> = ({
|
||||
)}
|
||||
{showFieldConfigsOption && onOptionsChange && (
|
||||
<Field
|
||||
label={t({ id: 'dashboard.inspect-data.formatted-data-label', message: 'Formatted data' })}
|
||||
description={t({
|
||||
id: 'dashboard.inspect-data.formatted-data-description',
|
||||
message: 'Table data is formatted with options defined in the Field and Override tabs.',
|
||||
})}
|
||||
label={t('dashboard.inspect-data.formatted-data-label', 'Formatted data')}
|
||||
description={t(
|
||||
'dashboard.inspect-data.formatted-data-description',
|
||||
'Table data is formatted with options defined in the Field and Override tabs.'
|
||||
)}
|
||||
>
|
||||
<Switch
|
||||
id="formatted-data-toggle"
|
||||
@ -150,11 +147,11 @@ export const InspectDataOptions: FC<Props> = ({
|
||||
</Field>
|
||||
)}
|
||||
<Field
|
||||
label={t({ id: 'dashboard.inspect-data.download-excel-label', message: 'Download for Excel' })}
|
||||
description={t({
|
||||
id: 'dashboard.inspect-data.download-excel-description',
|
||||
message: 'Adds header to CSV for use with Excel',
|
||||
})}
|
||||
label={t('dashboard.inspect-data.download-excel-label', 'Download for Excel')}
|
||||
description={t(
|
||||
'dashboard.inspect-data.download-excel-description',
|
||||
'Adds header to CSV for use with Excel'
|
||||
)}
|
||||
>
|
||||
<Switch id="excel-toggle" value={downloadForExcel} onChange={toggleDownloadForExcel} />
|
||||
</Field>
|
||||
|
@ -1,5 +1,4 @@
|
||||
import { css } from '@emotion/css';
|
||||
import { t, Trans } from '@lingui/macro';
|
||||
import React, { PureComponent } from 'react';
|
||||
import AutoSizer from 'react-virtualized-auto-sizer';
|
||||
|
||||
@ -19,6 +18,7 @@ import { selectors } from '@grafana/e2e-selectors';
|
||||
import { reportInteraction } from '@grafana/runtime';
|
||||
import { Button, Spinner, Table } from '@grafana/ui';
|
||||
import { config } from 'app/core/config';
|
||||
import { t, Trans } from 'app/core/internationalization';
|
||||
import { dataFrameToLogsModel } from 'app/core/logsModel';
|
||||
import { PanelModel } from 'app/features/dashboard/state';
|
||||
import { GetDataOptions } from 'app/features/query/state/PanelQueryRunner';
|
||||
@ -246,7 +246,7 @@ export class InspectDataTab extends PureComponent<Props, State> {
|
||||
margin-bottom: 10px;
|
||||
`}
|
||||
>
|
||||
<Trans id="dashboard.inspect-data.download-csv">Download CSV</Trans>
|
||||
<Trans i18nKey="dashboard.inspect-data.download-csv">Download CSV</Trans>
|
||||
</Button>
|
||||
{hasLogs && (
|
||||
<Button
|
||||
@ -257,7 +257,7 @@ export class InspectDataTab extends PureComponent<Props, State> {
|
||||
margin-left: 10px;
|
||||
`}
|
||||
>
|
||||
<Trans id="dashboard.inspect-data.download-logs">Download logs</Trans>
|
||||
<Trans i18nKey="dashboard.inspect-data.download-logs">Download logs</Trans>
|
||||
</Button>
|
||||
)}
|
||||
{hasTraces && (
|
||||
@ -269,7 +269,7 @@ export class InspectDataTab extends PureComponent<Props, State> {
|
||||
margin-left: 10px;
|
||||
`}
|
||||
>
|
||||
<Trans id="dashboard.inspect-data.download-traces">Download traces</Trans>
|
||||
<Trans i18nKey="dashboard.inspect-data.download-traces">Download traces</Trans>
|
||||
</Button>
|
||||
)}
|
||||
{hasServiceGraph && (
|
||||
@ -281,7 +281,7 @@ export class InspectDataTab extends PureComponent<Props, State> {
|
||||
margin-left: 10px;
|
||||
`}
|
||||
>
|
||||
<Trans id="dashboard.inspect-data.download-service">Download service graph</Trans>
|
||||
<Trans i18nKey="dashboard.inspect-data.download-service">Download service graph</Trans>
|
||||
</Button>
|
||||
)}
|
||||
</div>
|
||||
@ -309,10 +309,7 @@ function buildTransformationOptions() {
|
||||
const transformations: Array<SelectableValue<DataTransformerID>> = [
|
||||
{
|
||||
value: DataTransformerID.joinByField,
|
||||
label: t({
|
||||
id: 'dashboard.inspect-data.transformation',
|
||||
message: 'Series joined by time',
|
||||
}),
|
||||
label: t('dashboard.inspect-data.transformation', 'Series joined by time'),
|
||||
transformer: {
|
||||
id: DataTransformerID.joinByField,
|
||||
options: { byField: undefined }, // defaults to time field
|
||||
|
@ -1,4 +1,3 @@
|
||||
import { t } from '@lingui/macro';
|
||||
import { isEqual } from 'lodash';
|
||||
import React, { PureComponent } from 'react';
|
||||
import AutoSizer from 'react-virtualized-auto-sizer';
|
||||
@ -9,6 +8,7 @@ import { selectors } from '@grafana/e2e-selectors';
|
||||
import { locationService } from '@grafana/runtime';
|
||||
import { Button, CodeEditor, Field, Select } from '@grafana/ui';
|
||||
import { appEvents } from 'app/core/core';
|
||||
import { t } from 'app/core/internationalization';
|
||||
import { DashboardModel, PanelModel } from 'app/features/dashboard/state';
|
||||
|
||||
import { getPanelDataFrames } from '../dashboard/components/HelpWizard/utils';
|
||||
@ -25,27 +25,24 @@ enum ShowContent {
|
||||
|
||||
const options: Array<SelectableValue<ShowContent>> = [
|
||||
{
|
||||
label: t({ id: 'dashboard.inspect-json.panel-json-label', message: 'Panel JSON' }),
|
||||
description: t({
|
||||
id: 'dashboard.inspect-json.panel-json-description',
|
||||
message: 'The model saved in the dashboard JSON that configures how everything works.',
|
||||
}),
|
||||
label: t('dashboard.inspect-json.panel-json-label', 'Panel JSON'),
|
||||
description: t(
|
||||
'dashboard.inspect-json.panel-json-description',
|
||||
'The model saved in the dashboard JSON that configures how everything works.'
|
||||
),
|
||||
value: ShowContent.PanelJSON,
|
||||
},
|
||||
{
|
||||
label: t({ id: 'dashboard.inspect-json.panel-data-label', message: 'Panel data' }),
|
||||
description: t({
|
||||
id: 'dashboard.inspect-json.panel-data-description',
|
||||
message: 'The raw model passed to the panel visualization',
|
||||
}),
|
||||
label: t('dashboard.inspect-json.panel-data-label', 'Panel data'),
|
||||
description: t('dashboard.inspect-json.panel-data-description', 'The raw model passed to the panel visualization'),
|
||||
value: ShowContent.PanelData,
|
||||
},
|
||||
{
|
||||
label: t({ id: 'dashboard.inspect-json.dataframe-label', message: 'DataFrame JSON (from Query)' }),
|
||||
description: t({
|
||||
id: 'dashboard.inspect-json.dataframe-description',
|
||||
message: 'Raw data without transformations and field config applied. ',
|
||||
}),
|
||||
label: t('dashboard.inspect-json.dataframe-label', 'DataFrame JSON (from Query)'),
|
||||
description: t(
|
||||
'dashboard.inspect-json.dataframe-description',
|
||||
'Raw data without transformations and field config applied. '
|
||||
),
|
||||
value: ShowContent.DataFrames,
|
||||
},
|
||||
];
|
||||
@ -120,7 +117,7 @@ export class InspectJSONTab extends PureComponent<Props, State> {
|
||||
return panel!.getSaveModel();
|
||||
}
|
||||
|
||||
return { note: t({ id: 'dashboard.inspect-json.unknown', message: `Unknown Object: ${show}` }) };
|
||||
return { note: t('dashboard.inspect-json.unknown', 'Unknown Object: {{show}}', { show }) };
|
||||
}
|
||||
|
||||
onApplyPanelModel = () => {
|
||||
@ -173,10 +170,7 @@ export class InspectJSONTab extends PureComponent<Props, State> {
|
||||
return (
|
||||
<div className={styles.wrap}>
|
||||
<div className={styles.toolbar} aria-label={selectors.components.PanelInspector.Json.content}>
|
||||
<Field
|
||||
label={t({ id: 'dashboard.inspect-json.select-source', message: 'Select source' })}
|
||||
className="flex-grow-1"
|
||||
>
|
||||
<Field label={t('dashboard.inspect-json.select-source', 'Select source')} className="flex-grow-1">
|
||||
<Select
|
||||
inputId="select-source-dropdown"
|
||||
options={jsonOptions}
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { Trans } from '@lingui/macro';
|
||||
import React from 'react';
|
||||
|
||||
import { DataSourceApi, PanelData } from '@grafana/data';
|
||||
import { Trans } from 'app/core/internationalization';
|
||||
|
||||
interface InspectMetadataTabProps {
|
||||
data: PanelData;
|
||||
@ -9,7 +9,7 @@ interface InspectMetadataTabProps {
|
||||
}
|
||||
export const InspectMetadataTab: React.FC<InspectMetadataTabProps> = ({ data, metadataDatasource }) => {
|
||||
if (!metadataDatasource || !metadataDatasource.components?.MetadataInspector) {
|
||||
return <Trans id="dashboard.inspect-meta.no-inspector">No Metadata Inspector</Trans>;
|
||||
return <Trans i18nKey="dashboard.inspect-meta.no-inspector">No Metadata Inspector</Trans>;
|
||||
}
|
||||
return <metadataDatasource.components.MetadataInspector datasource={metadataDatasource} data={data.series} />;
|
||||
};
|
||||
|
@ -1,8 +1,8 @@
|
||||
import { t } from '@lingui/macro';
|
||||
import React from 'react';
|
||||
|
||||
import { PanelData, QueryResultMetaStat, TimeZone } from '@grafana/data';
|
||||
import { selectors } from '@grafana/e2e-selectors';
|
||||
import { t } from 'app/core/internationalization';
|
||||
|
||||
import { InspectStatsTable } from './InspectStatsTable';
|
||||
|
||||
@ -28,24 +28,24 @@ export const InspectStatsTab: React.FC<InspectStatsTabProps> = ({ data, timeZone
|
||||
|
||||
if (requestTime > 0) {
|
||||
stats.push({
|
||||
displayName: t({ id: 'dashboard.inspect-stats.request-time', message: 'Total request time' }),
|
||||
displayName: t('dashboard.inspect-stats.request-time', 'Total request time'),
|
||||
value: requestTime,
|
||||
unit: 'ms',
|
||||
});
|
||||
}
|
||||
if (processingTime > 0) {
|
||||
stats.push({
|
||||
displayName: t({ id: 'dashboard.inspect-stats.processing-time', message: 'Data processing time' }),
|
||||
displayName: t('dashboard.inspect-stats.processing-time', 'Data processing time'),
|
||||
value: processingTime,
|
||||
unit: 'ms',
|
||||
});
|
||||
}
|
||||
stats.push({
|
||||
displayName: t({ id: 'dashboard.inspect-stats.queries', message: 'Number of queries' }),
|
||||
displayName: t('dashboard.inspect-stats.queries', 'Number of queries'),
|
||||
value: data.request.targets.length,
|
||||
});
|
||||
stats.push({
|
||||
displayName: t({ id: 'dashboard.inspect-stats.rows', message: 'Total number rows' }),
|
||||
displayName: t('dashboard.inspect-stats.rows', 'Total number rows'),
|
||||
value: dataRows,
|
||||
});
|
||||
|
||||
@ -57,8 +57,8 @@ export const InspectStatsTab: React.FC<InspectStatsTabProps> = ({ data, timeZone
|
||||
}
|
||||
}
|
||||
|
||||
const statsTableName = t({ id: 'dashboard.inspect-stats.table-title', message: 'Stats' });
|
||||
const dataStatsTableName = t({ id: 'dashboard.inspect-stats.data-title', message: 'Data source stats' });
|
||||
const statsTableName = t('dashboard.inspect-stats.table-title', 'Stats');
|
||||
const dataStatsTableName = t('dashboard.inspect-stats.data-title', 'Data source stats');
|
||||
|
||||
return (
|
||||
<div aria-label={selectors.components.PanelInspector.Stats.content}>
|
||||
|
@ -1,10 +1,10 @@
|
||||
import { t, Trans } from '@lingui/macro';
|
||||
import React, { useCallback, useEffect, useState } from 'react';
|
||||
import { useAsync, useDebounce } from 'react-use';
|
||||
|
||||
import { isFetchError } from '@grafana/runtime';
|
||||
import { Button, Field, Input, Modal } from '@grafana/ui';
|
||||
import { FolderPicker } from 'app/core/components/Select/FolderPicker';
|
||||
import { t, Trans } from 'app/core/internationalization';
|
||||
|
||||
import { PanelModel } from '../../../dashboard/state';
|
||||
import { getLibraryPanelByName } from '../../state/api';
|
||||
@ -53,13 +53,9 @@ export const AddLibraryPanelContents = ({ panel, initialFolderId, onDismiss }: A
|
||||
return (
|
||||
<>
|
||||
<Field
|
||||
label={t({ id: 'library-panel.add-modal.name', message: 'Library panel name' })}
|
||||
label={t('library-panel.add-modal.name', 'Library panel name')}
|
||||
invalid={invalidInput}
|
||||
error={
|
||||
invalidInput
|
||||
? t({ id: 'library-panel.add-modal.error', message: 'Library panel with this name already exists' })
|
||||
: ''
|
||||
}
|
||||
error={invalidInput ? t('library-panel.add-modal.error', 'Library panel with this name already exists') : ''}
|
||||
>
|
||||
<Input
|
||||
id="share-panel-library-panel-name-input"
|
||||
@ -69,11 +65,11 @@ export const AddLibraryPanelContents = ({ panel, initialFolderId, onDismiss }: A
|
||||
/>
|
||||
</Field>
|
||||
<Field
|
||||
label={t({ id: 'library-panel.add-modal.folder', message: 'Save in folder' })}
|
||||
description={t({
|
||||
id: 'library-panel.add-modal.folder-description',
|
||||
message: 'Library panel permissions are derived from the folder permissions',
|
||||
})}
|
||||
label={t('library-panel.add-modal.folder', 'Save in folder')}
|
||||
description={t(
|
||||
'library-panel.add-modal.folder-description',
|
||||
'Library panel permissions are derived from the folder permissions'
|
||||
)}
|
||||
>
|
||||
<FolderPicker
|
||||
onChange={({ id }) => setFolderId(id)}
|
||||
@ -84,10 +80,10 @@ export const AddLibraryPanelContents = ({ panel, initialFolderId, onDismiss }: A
|
||||
|
||||
<Modal.ButtonRow>
|
||||
<Button variant="secondary" onClick={onDismiss} fill="outline">
|
||||
<Trans id="library-panel.add-modal.cancel">Cancel</Trans>
|
||||
<Trans i18nKey="library-panel.add-modal.cancel">Cancel</Trans>
|
||||
</Button>
|
||||
<Button onClick={onCreate} disabled={invalidInput}>
|
||||
<Trans id="library-panel.add-modal.create">Create library panel</Trans>
|
||||
<Trans i18nKey="library-panel.add-modal.create">Create library panel</Trans>
|
||||
</Button>
|
||||
</Modal.ButtonRow>
|
||||
</>
|
||||
|
@ -1,9 +1,9 @@
|
||||
import { t } from '@lingui/macro';
|
||||
import { useEffect } from 'react';
|
||||
import useAsyncFn from 'react-use/lib/useAsyncFn';
|
||||
|
||||
import { isFetchError } from '@grafana/runtime';
|
||||
import { notifyApp } from 'app/core/actions';
|
||||
import { t } from 'app/core/internationalization';
|
||||
import { PanelModel } from 'app/features/dashboard/state';
|
||||
import { useDispatch } from 'app/types';
|
||||
|
||||
@ -30,21 +30,18 @@ export const usePanelSave = () => {
|
||||
useEffect(() => {
|
||||
if (state.error) {
|
||||
const errorMsg = state.error.message;
|
||||
|
||||
dispatch(
|
||||
notifyApp(
|
||||
createPanelLibraryErrorNotification(
|
||||
t({ id: 'library-panels.save.error', message: `Error saving library panel: "${errorMsg}"` })
|
||||
t('library-panels.save.error', 'Error saving library panel: "{{errorMsg}}"', { errorMsg })
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
if (state.value) {
|
||||
dispatch(
|
||||
notifyApp(
|
||||
createPanelLibrarySuccessNotification(
|
||||
t({ id: 'library-panels.save.success', message: 'Library panel saved' })
|
||||
)
|
||||
)
|
||||
notifyApp(createPanelLibrarySuccessNotification(t('library-panels.save.success', 'Library panel saved')))
|
||||
);
|
||||
}
|
||||
}, [dispatch, state]);
|
||||
|
@ -1,8 +1,8 @@
|
||||
import { Trans } from '@lingui/macro';
|
||||
import React, { PureComponent } from 'react';
|
||||
|
||||
import { selectors } from '@grafana/e2e-selectors';
|
||||
import { Button, LoadingPlaceholder } from '@grafana/ui';
|
||||
import { Trans } from 'app/core/internationalization';
|
||||
import { UserDTO, UserOrg } from 'app/types';
|
||||
|
||||
export interface Props {
|
||||
@ -27,7 +27,7 @@ export class UserOrganizations extends PureComponent<Props> {
|
||||
return (
|
||||
<div>
|
||||
<h3 className="page-sub-heading">
|
||||
<Trans id="user-orgs.title">Organizations</Trans>
|
||||
<Trans i18nKey="user-orgs.title">Organizations</Trans>
|
||||
</h3>
|
||||
|
||||
<div className="gf-form-group">
|
||||
@ -35,10 +35,10 @@ export class UserOrganizations extends PureComponent<Props> {
|
||||
<thead>
|
||||
<tr>
|
||||
<th>
|
||||
<Trans id="user-orgs.name-column">Name</Trans>
|
||||
<Trans i18nKey="user-orgs.name-column">Name</Trans>
|
||||
</th>
|
||||
<th>
|
||||
<Trans id="user-orgs.role-column">Role</Trans>
|
||||
<Trans i18nKey="user-orgs.role-column">Role</Trans>
|
||||
</th>
|
||||
<th />
|
||||
</tr>
|
||||
@ -52,7 +52,7 @@ export class UserOrganizations extends PureComponent<Props> {
|
||||
<td className="text-right">
|
||||
{org.orgId === user?.orgId ? (
|
||||
<Button variant="secondary" size="sm" disabled>
|
||||
<Trans id="user-orgs.current-org-button">Current</Trans>
|
||||
<Trans i18nKey="user-orgs.current-org-button">Current</Trans>
|
||||
</Button>
|
||||
) : (
|
||||
<Button
|
||||
@ -62,7 +62,7 @@ export class UserOrganizations extends PureComponent<Props> {
|
||||
this.props.setUserOrg(org);
|
||||
}}
|
||||
>
|
||||
<Trans id="user-orgs.select-org-button">Select organisation</Trans>
|
||||
<Trans i18nKey="user-orgs.select-org-button">Select organisation</Trans>
|
||||
</Button>
|
||||
)}
|
||||
</td>
|
||||
|
@ -1,9 +1,9 @@
|
||||
import { Trans, t } from '@lingui/macro';
|
||||
import React, { FC } from 'react';
|
||||
|
||||
import { selectors } from '@grafana/e2e-selectors';
|
||||
import { Button, Field, FieldSet, Form, Icon, Input, Tooltip } from '@grafana/ui';
|
||||
import config from 'app/core/config';
|
||||
import { t, Trans } from 'app/core/internationalization';
|
||||
import { UserDTO } from 'app/types';
|
||||
|
||||
import { ProfileUpdateFields } from './types';
|
||||
@ -31,46 +31,43 @@ export const UserProfileEditForm: FC<Props> = ({ user, isSavingUser, updateProfi
|
||||
<Form onSubmit={onSubmitProfileUpdate} validateOn="onBlur">
|
||||
{({ register, errors }) => {
|
||||
return (
|
||||
<FieldSet label={<Trans id="user-profile.title">Edit profile</Trans>}>
|
||||
<FieldSet label={<Trans i18nKey="user-profile.title">Edit profile</Trans>}>
|
||||
<Field
|
||||
label={t({ id: 'user-profile.fields.name-label', message: 'Name' }) + lockMessage}
|
||||
label={t('user-profile.fields.name-label', 'Name') + lockMessage}
|
||||
invalid={!!errors.name}
|
||||
error={<Trans id="user-profile.fields.name-error">Name is required</Trans>}
|
||||
error={<Trans i18nKey="user-profile.fields.name-error">Name is required</Trans>}
|
||||
disabled={disabledEdit}
|
||||
>
|
||||
<Input
|
||||
{...register('name', { required: true })}
|
||||
id="edit-user-profile-name"
|
||||
placeholder={t({ id: 'user-profile.fields.name-label', message: 'Name' })}
|
||||
placeholder={t('user-profile.fields.name-label', 'Name')}
|
||||
defaultValue={user?.name ?? ''}
|
||||
suffix={<InputSuffix />}
|
||||
/>
|
||||
</Field>
|
||||
|
||||
<Field
|
||||
label={t({ id: 'user-profile.fields.email-label', message: 'Email' }) + lockMessage}
|
||||
label={t('user-profile.fields.email-label', 'Email') + lockMessage}
|
||||
invalid={!!errors.email}
|
||||
error={<Trans id="user-profile.fields.email-error">Email is required</Trans>}
|
||||
error={<Trans i18nKey="user-profile.fields.email-error">Email is required</Trans>}
|
||||
disabled={disabledEdit}
|
||||
>
|
||||
<Input
|
||||
{...register('email', { required: true })}
|
||||
id="edit-user-profile-email"
|
||||
placeholder={t({ id: 'user-profile.fields.email-label', message: 'Email' })}
|
||||
placeholder={t('user-profile.fields.email-label', 'Email')}
|
||||
defaultValue={user?.email ?? ''}
|
||||
suffix={<InputSuffix />}
|
||||
/>
|
||||
</Field>
|
||||
|
||||
<Field
|
||||
label={t({ id: 'user-profile.fields.username-label', message: 'Username' }) + lockMessage}
|
||||
disabled={disabledEdit}
|
||||
>
|
||||
<Field label={t('user-profile.fields.username-label', 'Username') + lockMessage} disabled={disabledEdit}>
|
||||
<Input
|
||||
{...register('login')}
|
||||
id="edit-user-profile-username"
|
||||
defaultValue={user?.login ?? ''}
|
||||
placeholder={t({ id: 'user-profile.fields.username-label', message: 'Username' }) + lockMessage}
|
||||
placeholder={t('user-profile.fields.username-label', 'Username') + lockMessage}
|
||||
suffix={<InputSuffix />}
|
||||
/>
|
||||
</Field>
|
||||
@ -82,7 +79,7 @@ export const UserProfileEditForm: FC<Props> = ({ user, isSavingUser, updateProfi
|
||||
data-testid={selectors.components.UserProfile.profileSaveButton}
|
||||
type="submit"
|
||||
>
|
||||
<Trans id="common.save">Save</Trans>
|
||||
<Trans i18nKey="common.save">Save</Trans>
|
||||
</Button>
|
||||
</div>
|
||||
</FieldSet>
|
||||
|
@ -1,12 +1,12 @@
|
||||
import { t, Trans } from '@lingui/macro';
|
||||
import { withI18n, withI18nProps } from '@lingui/react';
|
||||
import { t } from 'i18next';
|
||||
import React, { PureComponent } from 'react';
|
||||
|
||||
import { selectors } from '@grafana/e2e-selectors';
|
||||
import { Button, Icon, LoadingPlaceholder } from '@grafana/ui';
|
||||
import { i18nDate, Trans } from 'app/core/internationalization';
|
||||
import { UserSession } from 'app/types';
|
||||
|
||||
interface Props extends withI18nProps {
|
||||
interface Props {
|
||||
sessions: UserSession[];
|
||||
isLoading: boolean;
|
||||
revokeUserSession: (tokenId: number) => void;
|
||||
@ -14,10 +14,10 @@ interface Props extends withI18nProps {
|
||||
|
||||
class UserSessions extends PureComponent<Props> {
|
||||
render() {
|
||||
const { isLoading, sessions, revokeUserSession, i18n } = this.props;
|
||||
const { isLoading, sessions, revokeUserSession } = this.props;
|
||||
|
||||
if (isLoading) {
|
||||
return <LoadingPlaceholder text={<Trans id="user-sessions.loading">Loading sessions...</Trans>} />;
|
||||
return <LoadingPlaceholder text={<Trans i18nKey="user-sessions.loading">Loading sessions...</Trans>} />;
|
||||
}
|
||||
|
||||
return (
|
||||
@ -30,25 +30,26 @@ class UserSessions extends PureComponent<Props> {
|
||||
<thead>
|
||||
<tr>
|
||||
<th>
|
||||
<Trans id="user-session.seen-at-column">Last seen</Trans>
|
||||
<Trans i18nKey="user-session.seen-at-column">Last seen</Trans>
|
||||
</th>
|
||||
<th>
|
||||
<Trans id="user-session.created-at-column">Logged on</Trans>
|
||||
<Trans i18nKey="user-session.created-at-column">Logged on</Trans>
|
||||
</th>
|
||||
<th>
|
||||
<Trans id="user-session.ip-column">IP address</Trans>
|
||||
<Trans i18nKey="user-session.ip-column">IP address</Trans>
|
||||
</th>
|
||||
<th>
|
||||
<Trans id="user-session.browser-column">Browser & OS</Trans>
|
||||
<Trans i18nKey="user-session.browser-column">Browser & OS</Trans>
|
||||
</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
{sessions.map((session: UserSession, index) => (
|
||||
<tr key={index}>
|
||||
{session.isActive ? <td>Now</td> : <td>{session.seenAt}</td>}
|
||||
<td>{i18n.date(session.createdAt, { dateStyle: 'long' })}</td>
|
||||
<td>{i18nDate(session.createdAt, { dateStyle: 'long' })}</td>
|
||||
<td>{session.clientIp}</td>
|
||||
<td>
|
||||
{session.browser} on {session.os} {session.osVersion}
|
||||
@ -58,7 +59,7 @@ class UserSessions extends PureComponent<Props> {
|
||||
size="sm"
|
||||
variant="destructive"
|
||||
onClick={() => revokeUserSession(session.id)}
|
||||
aria-label={t({ id: 'user-session.revoke', message: 'Revoke user session' })}
|
||||
aria-label={t('user-session.revoke', 'Revoke user session')}
|
||||
>
|
||||
<Icon name="power" />
|
||||
</Button>
|
||||
@ -75,4 +76,4 @@ class UserSessions extends PureComponent<Props> {
|
||||
}
|
||||
}
|
||||
|
||||
export default withI18n()(UserSessions);
|
||||
export default UserSessions;
|
||||
|
@ -5,7 +5,6 @@ import './time_regions_form';
|
||||
import './annotation_tooltip';
|
||||
import './event_editor';
|
||||
|
||||
import { t } from '@lingui/macro';
|
||||
import { auto } from 'angular';
|
||||
import { defaults, find, without } from 'lodash';
|
||||
|
||||
@ -184,11 +183,7 @@ export class GraphCtrl extends MetricsPanelCtrl {
|
||||
}
|
||||
|
||||
onInitPanelActions(actions: any[]) {
|
||||
const toggleTextTranslation = t({
|
||||
id: 'panel.header-menu.more-toggle',
|
||||
message: `Toggle legend`,
|
||||
});
|
||||
actions.push({ text: toggleTextTranslation, click: 'ctrl.toggleLegend()', shortcut: 'p l' });
|
||||
actions.push({ text: 'Toggle legend', click: 'ctrl.toggleLegend()', shortcut: 'p l' });
|
||||
}
|
||||
|
||||
zoomOut(evt: any) {
|
||||
|
289
public/locales/en-US/grafana.json
Normal file
289
public/locales/en-US/grafana.json
Normal file
@ -0,0 +1,289 @@
|
||||
{
|
||||
"common": {
|
||||
"locale": {
|
||||
"default": "Default",
|
||||
"en": "English",
|
||||
"es": "Spanish",
|
||||
"fr": "French"
|
||||
},
|
||||
"save": "Save"
|
||||
},
|
||||
"dashboard": {
|
||||
"inspect": {
|
||||
"actions-tab": "Actions",
|
||||
"data-tab": "Data",
|
||||
"error-tab": "Error",
|
||||
"json-tab": "JSON",
|
||||
"meta-tab": "Meta Data",
|
||||
"query-tab": "Query",
|
||||
"stats-tab": "Stats",
|
||||
"subtitle": "{{queryCount}} queries with total query time of {{formatted}}",
|
||||
"title": "Inspect: {{panelTitle}}"
|
||||
},
|
||||
"inspect-data": {
|
||||
"data-options": "Data options",
|
||||
"dataframe-aria-label": "Select dataframe",
|
||||
"dataframe-label": "Show data frame",
|
||||
"download-csv": "Download CSV",
|
||||
"download-excel-description": "Adds header to CSV for use with Excel",
|
||||
"download-excel-label": "Download for Excel",
|
||||
"download-logs": "Download logs",
|
||||
"download-service": "Download service graph",
|
||||
"download-traces": "Download traces",
|
||||
"excel-header": "Excel header",
|
||||
"formatted": "Formatted data",
|
||||
"formatted-data-description": "Table data is formatted with options defined in the Field and Override tabs.",
|
||||
"formatted-data-label": "Formatted data",
|
||||
"panel-transforms": "Panel transforms",
|
||||
"series-to-columns": "Series joined by time",
|
||||
"transformation": "Series joined by time",
|
||||
"transformations-description": "Table data is displayed with transformations defined in the panel Transform tab.",
|
||||
"transformations-label": "Apply panel transformations"
|
||||
},
|
||||
"inspect-json": {
|
||||
"dataframe-description": "Raw data without transformations and field config applied. ",
|
||||
"dataframe-label": "DataFrame JSON (from Query)",
|
||||
"panel-data-description": "The raw model passed to the panel visualization",
|
||||
"panel-data-label": "Panel data",
|
||||
"panel-json-description": "The model saved in the dashboard JSON that configures how everything works.",
|
||||
"panel-json-label": "Panel JSON",
|
||||
"select-source": "Select source",
|
||||
"unknown": "Unknown Object: {{show}}"
|
||||
},
|
||||
"inspect-meta": {
|
||||
"no-inspector": "No Metadata Inspector"
|
||||
},
|
||||
"inspect-stats": {
|
||||
"data-title": "Data source stats",
|
||||
"processing-time": "Data processing time",
|
||||
"queries": "Number of queries",
|
||||
"request-time": "Total request time",
|
||||
"rows": "Total number rows",
|
||||
"table-title": "Stats"
|
||||
},
|
||||
"refresh-picker": {
|
||||
"off-arialabel": "Turn off auto refresh",
|
||||
"off-description": "Auto refresh turned off. Choose refresh time interval",
|
||||
"off-label": "Off",
|
||||
"on-description": ""
|
||||
},
|
||||
"toolbar": {
|
||||
"add-panel": "Add panel",
|
||||
"comments-show": "Show dashboard comments",
|
||||
"mark-favorite": "Mark as favorite",
|
||||
"open-original": "Open original dashboard",
|
||||
"playlist-next": "Go to next dashboard",
|
||||
"playlist-previous": "Go to previous dashboard",
|
||||
"playlist-stop": "Stop playlist",
|
||||
"refresh": "Refresh dashboard",
|
||||
"save": "Save dashboard",
|
||||
"settings": "Dashboard settings",
|
||||
"share": "Share dashboard or panel",
|
||||
"tv-button": "Cycle view mode",
|
||||
"unmark-favorite": "Unmark as favorite"
|
||||
}
|
||||
},
|
||||
"folder-picker": {
|
||||
"loading": "Loading folders..."
|
||||
},
|
||||
"library-panel": {
|
||||
"add-modal": {
|
||||
"cancel": "Cancel",
|
||||
"create": "Create library panel",
|
||||
"error": "Library panel with this name already exists",
|
||||
"folder": "Save in folder",
|
||||
"folder-description": "Library panel permissions are derived from the folder permissions",
|
||||
"name": "Library panel name"
|
||||
}
|
||||
},
|
||||
"library-panels": {
|
||||
"save": {
|
||||
"error": "Error saving library panel: \"{{errorMsg}}\"",
|
||||
"success": "Library panel saved"
|
||||
}
|
||||
},
|
||||
"nav": {
|
||||
"alerting": "Alerting",
|
||||
"alerting-admin": "Admin",
|
||||
"alerting-am-routes": "Notification policies",
|
||||
"alerting-channels": "Notification channels",
|
||||
"alerting-groups": "Groups",
|
||||
"alerting-legacy": "Alerting (legacy)",
|
||||
"alerting-list": "Alert rules",
|
||||
"alerting-receivers": "Contact points",
|
||||
"alerting-silences": "Silences",
|
||||
"api-keys": "API keys",
|
||||
"config": "Configuration",
|
||||
"correlations": "Correlations",
|
||||
"create": "Create",
|
||||
"create-alert": "New alert rule",
|
||||
"create-dashboard": "Dashboard",
|
||||
"create-folder": "Folder",
|
||||
"create-import": "Import",
|
||||
"dashboards": "Dashboards",
|
||||
"datasources": "Data sources",
|
||||
"explore": "Explore",
|
||||
"help": "Help",
|
||||
"home": "Home",
|
||||
"library-panels": "Library panels",
|
||||
"live": "Event streaming",
|
||||
"live-cloud": "Cloud",
|
||||
"live-pipeline": "Pipeline",
|
||||
"live-status": "Status",
|
||||
"manage-dashboards": "Browse",
|
||||
"new-dashboard": "New dashboard",
|
||||
"new-folder": "New folder",
|
||||
"org-settings": "Preferences",
|
||||
"playlists": "Playlists",
|
||||
"plugins": "Plugins",
|
||||
"profile/password": "Change password",
|
||||
"profile/settings": "Preferences",
|
||||
"service-accounts": "Service accounts",
|
||||
"sign-out": "Sign out",
|
||||
"snapshots": "Snapshots",
|
||||
"starred": "Starred",
|
||||
"starred-empty": "Your starred dashboards will appear here",
|
||||
"teams": "Teams",
|
||||
"users": "Users"
|
||||
},
|
||||
"navigation": {
|
||||
"kiosk": {
|
||||
"tv-alert": "Press ESC to exit kiosk mode"
|
||||
}
|
||||
},
|
||||
"panel": {
|
||||
"header-menu": {
|
||||
"inspect": "Inspect",
|
||||
"inspect-data": "Data",
|
||||
"inspect-json": "Panel JSON",
|
||||
"more": "More...",
|
||||
"share": "Share",
|
||||
"view": "View"
|
||||
}
|
||||
},
|
||||
"share-modal": {
|
||||
"dashboard": {
|
||||
"title": "Share"
|
||||
},
|
||||
"embed": {
|
||||
"copy": "Copy to clipboard",
|
||||
"html": "Embed HTML",
|
||||
"html-description": "The HTML code below can be pasted and included in another web page. Unless anonymous access is enabled, the user viewing that page need to be signed into Grafana for the graph to load.",
|
||||
"info": "Generate HTML for embedding an iframe with this panel.",
|
||||
"time-range": "Current time range",
|
||||
"time-range-description": "Transforms the current relative time range to an absolute time range"
|
||||
},
|
||||
"export": {
|
||||
"cancel-button": "Cancel",
|
||||
"info-text": "Export this dashboard.",
|
||||
"save-button": "Save to file",
|
||||
"share-default-label": "Export with default values removed",
|
||||
"share-externally-label": "Export for sharing externally",
|
||||
"view-button": "View JSON"
|
||||
},
|
||||
"library": {
|
||||
"info": "Create library panel."
|
||||
},
|
||||
"link": {
|
||||
"copy-link-button": "Copy",
|
||||
"info-text": "Create a direct link to this dashboard or panel, customized with the options below.",
|
||||
"link-url": "Link URL",
|
||||
"render-alert": "Image renderer plugin not installed",
|
||||
"render-instructions": "To render a panel image, you must install the <1>Grafana image renderer plugin</1>. Please contact your Grafana administrator to install the plugin.",
|
||||
"rendered-image": "Direct link rendered image",
|
||||
"save-alert": "Dashboard is not saved",
|
||||
"save-dashboard": "To render a panel image, you must save the dashboard first.",
|
||||
"shorten-url": "Shorten URL",
|
||||
"time-range-description": "Transforms the current relative time range to an absolute time range",
|
||||
"time-range-label": "Lock time range"
|
||||
},
|
||||
"panel": {
|
||||
"title": "Share Panel"
|
||||
},
|
||||
"snapshot": {
|
||||
"cancel-button": "Cancel",
|
||||
"copy-link-button": "Copy",
|
||||
"delete-button": "Delete snapshot.",
|
||||
"deleted-message": "The snapshot has been deleted. If you have already accessed it once, then it might take up to an hour before before it is removed from browser caches or CDN caches.",
|
||||
"expire": "Expire",
|
||||
"expire-day": "1 Day",
|
||||
"expire-hour": "1 Hour",
|
||||
"expire-never": "Never",
|
||||
"expire-week": "7 Days",
|
||||
"info-text-1": "A snapshot is an instant way to share an interactive dashboard publicly. When created, we strip sensitive data like queries (metric, template, and annotation) and panel links, leaving only the visible metric data and series names embedded in your dashboard.",
|
||||
"info-text-2": "Keep in mind, your snapshot <1>can be viewed by anyone</1> that has the link and can access the URL. Share wisely.",
|
||||
"local-button": "Local Snapshot",
|
||||
"mistake-message": "Did you make a mistake? ",
|
||||
"name": "Snapshot name",
|
||||
"timeout": "Timeout (seconds)",
|
||||
"timeout-description": "You might need to configure the timeout value if it takes a long time to collect your dashboard metrics."
|
||||
},
|
||||
"tab-title": {
|
||||
"embed": "Embed",
|
||||
"export": "Export",
|
||||
"library-panel": "Library panel",
|
||||
"link": "Link",
|
||||
"snapshot": "Snapshot"
|
||||
},
|
||||
"theme-picker": {
|
||||
"current": "Current",
|
||||
"dark": "Dark",
|
||||
"field-name": "Theme",
|
||||
"light": "Light"
|
||||
}
|
||||
},
|
||||
"shared-dashboard": {
|
||||
"fields": {
|
||||
"timezone-label": "Timezone"
|
||||
}
|
||||
},
|
||||
"shared-preferences": {
|
||||
"fields": {
|
||||
"home-dashboard-label": "Home Dashboard",
|
||||
"home-dashboard-placeholder": "Default dashboard",
|
||||
"locale-label": "Language",
|
||||
"locale-placeholder": "Choose language",
|
||||
"theme-label": "UI Theme",
|
||||
"week-start-label": "Week start"
|
||||
},
|
||||
"theme": {
|
||||
"dark-label": "Dark",
|
||||
"default-label": "Default",
|
||||
"light-label": "Light"
|
||||
},
|
||||
"title": "Preferences"
|
||||
},
|
||||
"time-picker": {
|
||||
"absolute": {
|
||||
"recent-title": "Recently used absolute ranges",
|
||||
"title": "Absolute time range"
|
||||
}
|
||||
},
|
||||
"user-orgs": {
|
||||
"current-org-button": "Current",
|
||||
"name-column": "Name",
|
||||
"role-column": "Role",
|
||||
"select-org-button": "Select organisation",
|
||||
"title": "Organizations"
|
||||
},
|
||||
"user-profile": {
|
||||
"fields": {
|
||||
"email-error": "Email is required",
|
||||
"email-label": "Email",
|
||||
"name-error": "Name is required",
|
||||
"name-label": "Name",
|
||||
"username-label": "Username"
|
||||
},
|
||||
"title": "Edit profile"
|
||||
},
|
||||
"user-session": {
|
||||
"browser-column": "Browser & OS",
|
||||
"created-at-column": "Logged on",
|
||||
"ip-column": "IP address",
|
||||
"revoke": "Revoke user session",
|
||||
"seen-at-column": "Last seen"
|
||||
},
|
||||
"user-sessions": {
|
||||
"loading": "Loading sessions..."
|
||||
}
|
||||
}
|
@ -1,826 +0,0 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"POT-Creation-Date: 2021-11-16 17:00+0000\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: @lingui/cli\n"
|
||||
"Language: en-US\n"
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
"X-Crowdin-SourceKey: msgstr\n"
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "common.locale.default"
|
||||
msgstr "Default"
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "common.locale.en"
|
||||
msgstr "English"
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "common.locale.es"
|
||||
msgstr "Spanish"
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "common.locale.fr"
|
||||
msgstr "French"
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
msgid "common.save"
|
||||
msgstr "Save"
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.data-options"
|
||||
msgstr "Data options"
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.dataframe-aria-label"
|
||||
msgstr "Select dataframe"
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.dataframe-label"
|
||||
msgstr "Show data frame"
|
||||
|
||||
#: public/app/features/inspector/InspectDataTab.tsx
|
||||
msgid "dashboard.inspect-data.download-csv"
|
||||
msgstr "Download CSV"
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.download-excel-description"
|
||||
msgstr "Adds header to CSV for use with Excel"
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.download-excel-label"
|
||||
msgstr "Download for Excel"
|
||||
|
||||
#: public/app/features/inspector/InspectDataTab.tsx
|
||||
msgid "dashboard.inspect-data.download-logs"
|
||||
msgstr "Download logs"
|
||||
|
||||
#: public/app/features/inspector/InspectDataTab.tsx
|
||||
msgid "dashboard.inspect-data.download-service"
|
||||
msgstr "Download service graph"
|
||||
|
||||
#: public/app/features/inspector/InspectDataTab.tsx
|
||||
msgid "dashboard.inspect-data.download-traces"
|
||||
msgstr "Download traces"
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.excel-header"
|
||||
msgstr "Excel header"
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.formatted"
|
||||
msgstr "Formatted data"
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.formatted-data-description"
|
||||
msgstr "Table data is formatted with options defined in the Field and Override tabs."
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.formatted-data-label"
|
||||
msgstr "Formatted data"
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.panel-transforms"
|
||||
msgstr "Panel transforms"
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.series-to-columns"
|
||||
msgstr "Series joined by time"
|
||||
|
||||
#: public/app/features/inspector/InspectDataTab.tsx
|
||||
msgid "dashboard.inspect-data.transformation"
|
||||
msgstr "Series joined by time"
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.transformations-description"
|
||||
msgstr "Table data is displayed with transformations defined in the panel Transform tab."
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.transformations-label"
|
||||
msgstr "Apply panel transformations"
|
||||
|
||||
#: public/app/features/inspector/InspectJSONTab.tsx
|
||||
msgid "dashboard.inspect-json.dataframe-description"
|
||||
msgstr "Raw data without transformations and field config applied."
|
||||
|
||||
#: public/app/features/inspector/InspectJSONTab.tsx
|
||||
msgid "dashboard.inspect-json.dataframe-label"
|
||||
msgstr "DataFrame JSON (from Query)"
|
||||
|
||||
#: public/app/features/inspector/InspectJSONTab.tsx
|
||||
msgid "dashboard.inspect-json.panel-data-description"
|
||||
msgstr "The raw model passed to the panel visualization"
|
||||
|
||||
#: public/app/features/inspector/InspectJSONTab.tsx
|
||||
msgid "dashboard.inspect-json.panel-data-label"
|
||||
msgstr "Panel data"
|
||||
|
||||
#: public/app/features/inspector/InspectJSONTab.tsx
|
||||
msgid "dashboard.inspect-json.panel-json-description"
|
||||
msgstr "The model saved in the dashboard JSON that configures how everything works."
|
||||
|
||||
#: public/app/features/inspector/InspectJSONTab.tsx
|
||||
msgid "dashboard.inspect-json.panel-json-label"
|
||||
msgstr "Panel JSON"
|
||||
|
||||
#: public/app/features/inspector/InspectJSONTab.tsx
|
||||
msgid "dashboard.inspect-json.select-source"
|
||||
msgstr "Select source"
|
||||
|
||||
#: public/app/features/inspector/InspectJSONTab.tsx
|
||||
msgid "dashboard.inspect-json.unknown"
|
||||
msgstr "Unknown Object: {show}"
|
||||
|
||||
#: public/app/features/inspector/InspectMetadataTab.tsx
|
||||
msgid "dashboard.inspect-meta.no-inspector"
|
||||
msgstr "No Metadata Inspector"
|
||||
|
||||
#: public/app/features/inspector/InspectStatsTab.tsx
|
||||
msgid "dashboard.inspect-stats.data-title"
|
||||
msgstr "Data source stats"
|
||||
|
||||
#: public/app/features/inspector/InspectStatsTab.tsx
|
||||
msgid "dashboard.inspect-stats.processing-time"
|
||||
msgstr "Data processing time"
|
||||
|
||||
#: public/app/features/inspector/InspectStatsTab.tsx
|
||||
msgid "dashboard.inspect-stats.queries"
|
||||
msgstr "Number of queries"
|
||||
|
||||
#: public/app/features/inspector/InspectStatsTab.tsx
|
||||
msgid "dashboard.inspect-stats.request-time"
|
||||
msgstr "Total request time"
|
||||
|
||||
#: public/app/features/inspector/InspectStatsTab.tsx
|
||||
msgid "dashboard.inspect-stats.rows"
|
||||
msgstr "Total number rows"
|
||||
|
||||
#: public/app/features/inspector/InspectStatsTab.tsx
|
||||
msgid "dashboard.inspect-stats.table-title"
|
||||
msgstr "Stats"
|
||||
|
||||
#: public/app/features/dashboard/components/Inspector/hooks.ts
|
||||
msgid "dashboard.inspect.actions-tab"
|
||||
msgstr "Actions"
|
||||
|
||||
#: public/app/features/dashboard/components/Inspector/hooks.ts
|
||||
msgid "dashboard.inspect.data-tab"
|
||||
msgstr "Data"
|
||||
|
||||
#: public/app/features/dashboard/components/Inspector/hooks.ts
|
||||
msgid "dashboard.inspect.error-tab"
|
||||
msgstr "Error"
|
||||
|
||||
#: public/app/features/dashboard/components/Inspector/hooks.ts
|
||||
msgid "dashboard.inspect.json-tab"
|
||||
msgstr "JSON"
|
||||
|
||||
#: public/app/features/dashboard/components/Inspector/hooks.ts
|
||||
msgid "dashboard.inspect.meta-tab"
|
||||
msgstr "Meta Data"
|
||||
|
||||
#: public/app/features/dashboard/components/Inspector/hooks.ts
|
||||
msgid "dashboard.inspect.query-tab"
|
||||
msgstr "Query"
|
||||
|
||||
#: public/app/features/dashboard/components/Inspector/hooks.ts
|
||||
msgid "dashboard.inspect.stats-tab"
|
||||
msgstr "Stats"
|
||||
|
||||
#: public/app/features/dashboard/components/Inspector/InspectContent.tsx
|
||||
msgid "dashboard.inspect.subtitle"
|
||||
msgstr "{queryCount} queries with total query time of {formatted}"
|
||||
|
||||
#: public/app/features/dashboard/components/Inspector/InspectContent.tsx
|
||||
msgid "dashboard.inspect.title"
|
||||
msgstr "Inspect: {panelTitle}"
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
|
||||
msgid "dashboard.refresh-picker.off-arialabel"
|
||||
msgstr "Turn off auto refresh"
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
|
||||
msgid "dashboard.refresh-picker.off-description"
|
||||
msgstr "Auto refresh turned off. Choose refresh time interval"
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
|
||||
msgid "dashboard.refresh-picker.off-label"
|
||||
msgstr "Off"
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
|
||||
msgid "dashboard.refresh-picker.on-description"
|
||||
msgstr "Choose refresh time interval with current interval {durationAriaLabel} selected"
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.add-panel"
|
||||
msgstr "Add panel"
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.comments-show"
|
||||
msgstr "Show dashboard comments"
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.mark-favorite"
|
||||
msgstr "Mark as favorite"
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.open-original"
|
||||
msgstr "Open original dashboard"
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.playlist-next"
|
||||
msgstr "Go to next dashboard"
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.playlist-previous"
|
||||
msgstr "Go to previous dashboard"
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.playlist-stop"
|
||||
msgstr "Stop playlist"
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
|
||||
msgid "dashboard.toolbar.refresh"
|
||||
msgstr "Refresh dashboard"
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.save"
|
||||
msgstr "Save dashboard"
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.settings"
|
||||
msgstr "Dashboard settings"
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.share"
|
||||
msgstr "Share dashboard or panel"
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.tv-button"
|
||||
msgstr "Cycle view mode"
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.unmark-favorite"
|
||||
msgstr "Unmark as favorite"
|
||||
|
||||
#: public/app/core/components/Select/FolderPicker.tsx
|
||||
msgid "folder-picker.loading"
|
||||
msgstr "Loading folders..."
|
||||
|
||||
#: public/app/features/library-panels/components/AddLibraryPanelModal/AddLibraryPanelModal.tsx
|
||||
msgid "library-panel.add-modal.cancel"
|
||||
msgstr "Cancel"
|
||||
|
||||
#: public/app/features/library-panels/components/AddLibraryPanelModal/AddLibraryPanelModal.tsx
|
||||
msgid "library-panel.add-modal.create"
|
||||
msgstr "Create library panel"
|
||||
|
||||
#: public/app/features/library-panels/components/AddLibraryPanelModal/AddLibraryPanelModal.tsx
|
||||
msgid "library-panel.add-modal.error"
|
||||
msgstr "Library panel with this name already exists"
|
||||
|
||||
#: public/app/features/library-panels/components/AddLibraryPanelModal/AddLibraryPanelModal.tsx
|
||||
msgid "library-panel.add-modal.folder"
|
||||
msgstr "Save in folder"
|
||||
|
||||
#: public/app/features/library-panels/components/AddLibraryPanelModal/AddLibraryPanelModal.tsx
|
||||
msgid "library-panel.add-modal.folder-description"
|
||||
msgstr "Library panel permissions are derived from the folder permissions"
|
||||
|
||||
#: public/app/features/library-panels/components/AddLibraryPanelModal/AddLibraryPanelModal.tsx
|
||||
msgid "library-panel.add-modal.name"
|
||||
msgstr "Library panel name"
|
||||
|
||||
#: public/app/features/library-panels/utils/usePanelSave.ts
|
||||
msgid "library-panels.save.error"
|
||||
msgstr "Error saving library panel: \"{errorMsg}\""
|
||||
|
||||
#: public/app/features/library-panels/utils/usePanelSave.ts
|
||||
msgid "library-panels.save.success"
|
||||
msgstr "Library panel saved"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.alerting"
|
||||
msgstr "Alerting"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.alerting-admin"
|
||||
msgstr "Admin"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.alerting-am-routes"
|
||||
msgstr "Notification policies"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.alerting-channels"
|
||||
msgstr "Notification channels"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.alerting-groups"
|
||||
msgstr "Groups"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.alerting-legacy"
|
||||
msgstr "Alerting (legacy)"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.alerting-list"
|
||||
msgstr "Alert rules"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.alerting-receivers"
|
||||
msgstr "Contact points"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.alerting-silences"
|
||||
msgstr "Silences"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.api-keys"
|
||||
msgstr "API keys"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.config"
|
||||
msgstr "Configuration"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.create"
|
||||
msgstr "Create"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.create-alert"
|
||||
msgstr "New alert rule"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.create-dashboard"
|
||||
msgstr "Dashboard"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.create-folder"
|
||||
msgstr "Folder"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.create-import"
|
||||
msgstr "Import"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.dashboards"
|
||||
msgstr "Dashboards"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.datasources"
|
||||
msgstr "Data sources"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.explore"
|
||||
msgstr "Explore"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.help"
|
||||
msgstr "Help"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.home"
|
||||
msgstr "Home"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.library-panels"
|
||||
msgstr "Library panels"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.live"
|
||||
msgstr "Event streaming"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.live-cloud"
|
||||
msgstr "Cloud"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.live-pipeline"
|
||||
msgstr "Pipeline"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.live-status"
|
||||
msgstr "Status"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.manage-dashboards"
|
||||
msgstr "Browse"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.new-dashboard"
|
||||
msgstr "New dashboard"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.new-folder"
|
||||
msgstr "New folder"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.org-settings"
|
||||
msgstr "Preferences"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.playlists"
|
||||
msgstr "Playlists"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.plugins"
|
||||
msgstr "Plugins"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.profile/password"
|
||||
msgstr "Change password"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.profile/settings"
|
||||
msgstr "Preferences"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.service-accounts"
|
||||
msgstr "Service accounts"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.sign-out"
|
||||
msgstr "Sign out"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.snapshots"
|
||||
msgstr "Snapshots"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.starred"
|
||||
msgstr "Starred"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.starred-empty"
|
||||
msgstr "Your starred dashboards will appear here"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.teams"
|
||||
msgstr "Teams"
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.users"
|
||||
msgstr "Users"
|
||||
|
||||
#: public/app/core/navigation/kiosk.ts
|
||||
msgid "navigation.kiosk.tv-alert"
|
||||
msgstr "Press ESC to exit Kiosk mode"
|
||||
|
||||
#: public/app/features/dashboard/utils/getPanelMenu.ts
|
||||
msgid "panel.header-menu.inspect"
|
||||
msgstr "Inspect"
|
||||
|
||||
#: public/app/features/dashboard/utils/getPanelMenu.ts
|
||||
msgid "panel.header-menu.inspect-data"
|
||||
msgstr "Data"
|
||||
|
||||
#: public/app/features/dashboard/utils/getPanelMenu.ts
|
||||
msgid "panel.header-menu.inspect-json"
|
||||
msgstr "Panel JSON"
|
||||
|
||||
#: public/app/features/dashboard/utils/getPanelMenu.ts
|
||||
msgid "panel.header-menu.more"
|
||||
msgstr "More..."
|
||||
|
||||
#: public/app/plugins/panel/graph/module.ts
|
||||
msgid "panel.header-menu.more-toggle"
|
||||
msgstr "Toggle legend"
|
||||
|
||||
#: public/app/features/dashboard/utils/getPanelMenu.ts
|
||||
msgid "panel.header-menu.share"
|
||||
msgstr "Share"
|
||||
|
||||
#: public/app/features/dashboard/utils/getPanelMenu.ts
|
||||
msgid "panel.header-menu.view"
|
||||
msgstr "View"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareModal.tsx
|
||||
msgid "share-modal.dashboard.title"
|
||||
msgstr "Share"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareEmbed.tsx
|
||||
msgid "share-modal.embed.copy"
|
||||
msgstr "Copy to clipboard"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareEmbed.tsx
|
||||
msgid "share-modal.embed.html"
|
||||
msgstr "Embed HTML"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareEmbed.tsx
|
||||
msgid "share-modal.embed.html-description"
|
||||
msgstr "The HTML code below can be pasted and included in another web page. Unless anonymous access is enabled, the user viewing that page need to be signed into Grafana for the graph to load."
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareEmbed.tsx
|
||||
msgid "share-modal.embed.info"
|
||||
msgstr "Generate HTML for embedding an iframe with this panel."
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareEmbed.tsx
|
||||
msgid "share-modal.embed.time-range"
|
||||
msgstr "Current time range"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareEmbed.tsx
|
||||
msgid "share-modal.embed.time-range-description"
|
||||
msgstr "Transforms the current relative time range to an absolute time range"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareExport.tsx
|
||||
msgid "share-modal.export.cancel-button"
|
||||
msgstr "Cancel"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareExport.tsx
|
||||
msgid "share-modal.export.info-text"
|
||||
msgstr "Export this dashboard."
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareExport.tsx
|
||||
msgid "share-modal.export.save-button"
|
||||
msgstr "Save to file"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareExport.tsx
|
||||
msgid "share-modal.export.share-default-label"
|
||||
msgstr "Export with default values removed"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareExport.tsx
|
||||
msgid "share-modal.export.share-externally-label"
|
||||
msgstr "Export for sharing externally"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareExport.tsx
|
||||
msgid "share-modal.export.view-button"
|
||||
msgstr "View JSON"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLibraryPanel.tsx
|
||||
msgid "share-modal.library.info"
|
||||
msgstr "Create library panel."
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.copy-link-button"
|
||||
msgstr "Copy"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.info-text"
|
||||
msgstr "Create a direct link to this dashboard or panel, customized with the options below."
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.link-url"
|
||||
msgstr "Link URL"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.render-alert"
|
||||
msgstr "Image renderer plugin not installed"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.render-instructions"
|
||||
msgstr "To render a panel image, you must install the <0>Grafana image renderer plugin</0>. Please contact your Grafana administrator to install the plugin."
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.rendered-image"
|
||||
msgstr "Direct link rendered image"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.save-alert"
|
||||
msgstr "Dashboard is not saved"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.save-dashboard"
|
||||
msgstr "To render a panel image, you must save the dashboard first."
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.shorten-url"
|
||||
msgstr "Shorten URL"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.time-range-description"
|
||||
msgstr "Transforms the current relative time range to an absolute time range"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.time-range-label"
|
||||
msgstr "Lock time range"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareModal.tsx
|
||||
msgid "share-modal.panel.title"
|
||||
msgstr "Share Panel"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.cancel-button"
|
||||
msgstr "Cancel"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.copy-link-button"
|
||||
msgstr "Copy"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.delete-button"
|
||||
msgstr "Delete snapshot."
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.deleted-message"
|
||||
msgstr "The snapshot has been deleted. If you have already accessed it once, then it might take up to an hour before before it is removed from browser caches or CDN caches."
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.expire"
|
||||
msgstr "Expire"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.expire-day"
|
||||
msgstr "1 Day"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.expire-hour"
|
||||
msgstr "1 Hour"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.expire-never"
|
||||
msgstr "Never"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.expire-week"
|
||||
msgstr "7 Days"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.info-text-1"
|
||||
msgstr "A snapshot is an instant way to share an interactive dashboard publicly. When created, we strip sensitive data like queries (metric, template, and annotation) and panel links, leaving only the visible metric data and series names embedded in your dashboard."
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.info-text-2"
|
||||
msgstr "Keep in mind, your snapshot <0>can be viewed by anyone</0> that has the link and can access the URL. Share wisely."
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.local-button"
|
||||
msgstr "Local Snapshot"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.mistake-message"
|
||||
msgstr "Did you make a mistake?"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.name"
|
||||
msgstr "Snapshot name"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.timeout"
|
||||
msgstr "Timeout (seconds)"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.timeout-description"
|
||||
msgstr ""
|
||||
"You might need to configure the timeout value if it takes a long time to collect your dashboard\n"
|
||||
"metrics."
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareModal.tsx
|
||||
msgid "share-modal.tab-title.embed"
|
||||
msgstr "Embed"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareModal.tsx
|
||||
msgid "share-modal.tab-title.export"
|
||||
msgstr "Export"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareModal.tsx
|
||||
msgid "share-modal.tab-title.library-panel"
|
||||
msgstr "Library panel"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareModal.tsx
|
||||
msgid "share-modal.tab-title.link"
|
||||
msgstr "Link"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareModal.tsx
|
||||
msgid "share-modal.tab-title.snapshot"
|
||||
msgstr "Snapshot"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ThemePicker.tsx
|
||||
msgid "share-modal.theme-picker.current"
|
||||
msgstr "Current"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ThemePicker.tsx
|
||||
msgid "share-modal.theme-picker.dark"
|
||||
msgstr "Dark"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ThemePicker.tsx
|
||||
msgid "share-modal.theme-picker.field-name"
|
||||
msgstr "Theme"
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ThemePicker.tsx
|
||||
msgid "share-modal.theme-picker.light"
|
||||
msgstr "Light"
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-dashboard.fields.timezone-label"
|
||||
msgstr "Timezone"
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.fields.home-dashboard-label"
|
||||
msgstr "Home Dashboard"
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.fields.home-dashboard-placeholder"
|
||||
msgstr "Default dashboard"
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.fields.locale-label"
|
||||
msgstr "Language"
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.fields.locale-placeholder"
|
||||
msgstr "Choose language"
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.fields.theme-label"
|
||||
msgstr "UI Theme"
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.fields.week-start-label"
|
||||
msgstr "Week start"
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.theme.dark-label"
|
||||
msgstr "Dark"
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.theme.default-label"
|
||||
msgstr "Default"
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.theme.light-label"
|
||||
msgstr "Light"
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.title"
|
||||
msgstr "Preferences"
|
||||
|
||||
#: public/app/features/profile/UserOrganizations.tsx
|
||||
msgid "user-orgs.current-org-button"
|
||||
msgstr "Current"
|
||||
|
||||
#: public/app/features/profile/UserOrganizations.tsx
|
||||
msgid "user-orgs.name-column"
|
||||
msgstr "Name"
|
||||
|
||||
#: public/app/features/profile/UserOrganizations.tsx
|
||||
msgid "user-orgs.role-column"
|
||||
msgstr "Role"
|
||||
|
||||
#: public/app/features/profile/UserOrganizations.tsx
|
||||
msgid "user-orgs.select-org-button"
|
||||
msgstr "Select organisation"
|
||||
|
||||
#: public/app/features/profile/UserOrganizations.tsx
|
||||
msgid "user-orgs.title"
|
||||
msgstr "Organizations"
|
||||
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
msgid "user-profile.fields.email-error"
|
||||
msgstr "Email is required"
|
||||
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
msgid "user-profile.fields.email-label"
|
||||
msgstr "Email"
|
||||
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
msgid "user-profile.fields.name-error"
|
||||
msgstr "Name is required"
|
||||
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
msgid "user-profile.fields.name-label"
|
||||
msgstr "Name"
|
||||
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
msgid "user-profile.fields.username-label"
|
||||
msgstr "Username"
|
||||
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
msgid "user-profile.title"
|
||||
msgstr "Edit profile"
|
||||
|
||||
#: public/app/features/profile/UserSessions.tsx
|
||||
msgid "user-session.browser-column"
|
||||
msgstr "Browser & OS"
|
||||
|
||||
#: public/app/features/profile/UserSessions.tsx
|
||||
msgid "user-session.created-at-column"
|
||||
msgstr "Logged on"
|
||||
|
||||
#: public/app/features/profile/UserSessions.tsx
|
||||
msgid "user-session.ip-column"
|
||||
msgstr "IP address"
|
||||
|
||||
#: public/app/features/profile/UserSessions.tsx
|
||||
msgid "user-session.revoke"
|
||||
msgstr "Revoke user session"
|
||||
|
||||
#: public/app/features/profile/UserSessions.tsx
|
||||
msgid "user-session.seen-at-column"
|
||||
msgstr "Last seen"
|
||||
|
||||
#: public/app/features/profile/UserSessions.tsx
|
||||
msgid "user-sessions.loading"
|
||||
msgstr "Loading sessions..."
|
||||
|
289
public/locales/es-ES/grafana.json
Normal file
289
public/locales/es-ES/grafana.json
Normal file
@ -0,0 +1,289 @@
|
||||
{
|
||||
"common": {
|
||||
"locale": {
|
||||
"default": "",
|
||||
"en": "",
|
||||
"es": "",
|
||||
"fr": ""
|
||||
},
|
||||
"save": ""
|
||||
},
|
||||
"dashboard": {
|
||||
"inspect": {
|
||||
"actions-tab": "",
|
||||
"data-tab": "",
|
||||
"error-tab": "",
|
||||
"json-tab": "",
|
||||
"meta-tab": "",
|
||||
"query-tab": "",
|
||||
"stats-tab": "",
|
||||
"subtitle": "",
|
||||
"title": ""
|
||||
},
|
||||
"inspect-data": {
|
||||
"data-options": "",
|
||||
"dataframe-aria-label": "",
|
||||
"dataframe-label": "",
|
||||
"download-csv": "",
|
||||
"download-excel-description": "",
|
||||
"download-excel-label": "",
|
||||
"download-logs": "",
|
||||
"download-service": "",
|
||||
"download-traces": "",
|
||||
"excel-header": "",
|
||||
"formatted": "",
|
||||
"formatted-data-description": "",
|
||||
"formatted-data-label": "",
|
||||
"panel-transforms": "",
|
||||
"series-to-columns": "",
|
||||
"transformation": "",
|
||||
"transformations-description": "",
|
||||
"transformations-label": ""
|
||||
},
|
||||
"inspect-json": {
|
||||
"dataframe-description": "",
|
||||
"dataframe-label": "",
|
||||
"panel-data-description": "",
|
||||
"panel-data-label": "",
|
||||
"panel-json-description": "",
|
||||
"panel-json-label": "",
|
||||
"select-source": "",
|
||||
"unknown": ""
|
||||
},
|
||||
"inspect-meta": {
|
||||
"no-inspector": ""
|
||||
},
|
||||
"inspect-stats": {
|
||||
"data-title": "",
|
||||
"processing-time": "",
|
||||
"queries": "",
|
||||
"request-time": "",
|
||||
"rows": "",
|
||||
"table-title": ""
|
||||
},
|
||||
"refresh-picker": {
|
||||
"off-arialabel": "",
|
||||
"off-description": "",
|
||||
"off-label": "",
|
||||
"on-description": ""
|
||||
},
|
||||
"toolbar": {
|
||||
"add-panel": "",
|
||||
"comments-show": "",
|
||||
"mark-favorite": "",
|
||||
"open-original": "",
|
||||
"playlist-next": "",
|
||||
"playlist-previous": "",
|
||||
"playlist-stop": "",
|
||||
"refresh": "",
|
||||
"save": "",
|
||||
"settings": "",
|
||||
"share": "",
|
||||
"tv-button": "",
|
||||
"unmark-favorite": ""
|
||||
}
|
||||
},
|
||||
"folder-picker": {
|
||||
"loading": ""
|
||||
},
|
||||
"library-panel": {
|
||||
"add-modal": {
|
||||
"cancel": "",
|
||||
"create": "",
|
||||
"error": "",
|
||||
"folder": "",
|
||||
"folder-description": "",
|
||||
"name": ""
|
||||
}
|
||||
},
|
||||
"library-panels": {
|
||||
"save": {
|
||||
"error": "",
|
||||
"success": ""
|
||||
}
|
||||
},
|
||||
"nav": {
|
||||
"alerting": "",
|
||||
"alerting-admin": "",
|
||||
"alerting-am-routes": "",
|
||||
"alerting-channels": "",
|
||||
"alerting-groups": "",
|
||||
"alerting-legacy": "",
|
||||
"alerting-list": "",
|
||||
"alerting-receivers": "",
|
||||
"alerting-silences": "",
|
||||
"api-keys": "",
|
||||
"config": "",
|
||||
"correlations": "",
|
||||
"create": "",
|
||||
"create-alert": "",
|
||||
"create-dashboard": "",
|
||||
"create-folder": "",
|
||||
"create-import": "",
|
||||
"dashboards": "",
|
||||
"datasources": "",
|
||||
"explore": "",
|
||||
"help": "",
|
||||
"home": "",
|
||||
"library-panels": "",
|
||||
"live": "",
|
||||
"live-cloud": "",
|
||||
"live-pipeline": "",
|
||||
"live-status": "",
|
||||
"manage-dashboards": "",
|
||||
"new-dashboard": "",
|
||||
"new-folder": "",
|
||||
"org-settings": "",
|
||||
"playlists": "",
|
||||
"plugins": "",
|
||||
"profile/password": "",
|
||||
"profile/settings": "",
|
||||
"service-accounts": "",
|
||||
"sign-out": "",
|
||||
"snapshots": "",
|
||||
"starred": "",
|
||||
"starred-empty": "",
|
||||
"teams": "",
|
||||
"users": ""
|
||||
},
|
||||
"navigation": {
|
||||
"kiosk": {
|
||||
"tv-alert": ""
|
||||
}
|
||||
},
|
||||
"panel": {
|
||||
"header-menu": {
|
||||
"inspect": "",
|
||||
"inspect-data": "",
|
||||
"inspect-json": "",
|
||||
"more": "",
|
||||
"share": "",
|
||||
"view": ""
|
||||
}
|
||||
},
|
||||
"share-modal": {
|
||||
"dashboard": {
|
||||
"title": ""
|
||||
},
|
||||
"embed": {
|
||||
"copy": "",
|
||||
"html": "",
|
||||
"html-description": "",
|
||||
"info": "",
|
||||
"time-range": "",
|
||||
"time-range-description": ""
|
||||
},
|
||||
"export": {
|
||||
"cancel-button": "",
|
||||
"info-text": "",
|
||||
"save-button": "",
|
||||
"share-default-label": "",
|
||||
"share-externally-label": "",
|
||||
"view-button": ""
|
||||
},
|
||||
"library": {
|
||||
"info": ""
|
||||
},
|
||||
"link": {
|
||||
"copy-link-button": "",
|
||||
"info-text": "",
|
||||
"link-url": "",
|
||||
"render-alert": "",
|
||||
"render-instructions": "",
|
||||
"rendered-image": "",
|
||||
"save-alert": "",
|
||||
"save-dashboard": "",
|
||||
"shorten-url": "",
|
||||
"time-range-description": "",
|
||||
"time-range-label": ""
|
||||
},
|
||||
"panel": {
|
||||
"title": ""
|
||||
},
|
||||
"snapshot": {
|
||||
"cancel-button": "",
|
||||
"copy-link-button": "",
|
||||
"delete-button": "",
|
||||
"deleted-message": "",
|
||||
"expire": "",
|
||||
"expire-day": "",
|
||||
"expire-hour": "",
|
||||
"expire-never": "",
|
||||
"expire-week": "",
|
||||
"info-text-1": "",
|
||||
"info-text-2": "",
|
||||
"local-button": "",
|
||||
"mistake-message": "",
|
||||
"name": "",
|
||||
"timeout": "",
|
||||
"timeout-description": ""
|
||||
},
|
||||
"tab-title": {
|
||||
"embed": "",
|
||||
"export": "",
|
||||
"library-panel": "",
|
||||
"link": "",
|
||||
"snapshot": ""
|
||||
},
|
||||
"theme-picker": {
|
||||
"current": "",
|
||||
"dark": "",
|
||||
"field-name": "",
|
||||
"light": ""
|
||||
}
|
||||
},
|
||||
"shared-dashboard": {
|
||||
"fields": {
|
||||
"timezone-label": ""
|
||||
}
|
||||
},
|
||||
"shared-preferences": {
|
||||
"fields": {
|
||||
"home-dashboard-label": "",
|
||||
"home-dashboard-placeholder": "",
|
||||
"locale-label": "",
|
||||
"locale-placeholder": "",
|
||||
"theme-label": "",
|
||||
"week-start-label": ""
|
||||
},
|
||||
"theme": {
|
||||
"dark-label": "",
|
||||
"default-label": "",
|
||||
"light-label": ""
|
||||
},
|
||||
"title": ""
|
||||
},
|
||||
"time-picker": {
|
||||
"absolute": {
|
||||
"recent-title": "",
|
||||
"title": ""
|
||||
}
|
||||
},
|
||||
"user-orgs": {
|
||||
"current-org-button": "",
|
||||
"name-column": "",
|
||||
"role-column": "",
|
||||
"select-org-button": "",
|
||||
"title": ""
|
||||
},
|
||||
"user-profile": {
|
||||
"fields": {
|
||||
"email-error": "",
|
||||
"email-label": "",
|
||||
"name-error": "",
|
||||
"name-label": "",
|
||||
"username-label": ""
|
||||
},
|
||||
"title": ""
|
||||
},
|
||||
"user-session": {
|
||||
"browser-column": "",
|
||||
"created-at-column": "",
|
||||
"ip-column": "",
|
||||
"revoke": "",
|
||||
"seen-at-column": ""
|
||||
},
|
||||
"user-sessions": {
|
||||
"loading": ""
|
||||
}
|
||||
}
|
@ -1,831 +0,0 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"POT-Creation-Date: 2021-11-16 17:00+0000\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: @lingui/cli\n"
|
||||
"Language: es\n"
|
||||
"Project-Id-Version: 2f9cf052fe5ab6c086476d0003c2f658\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2022-08-02 10:57\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Spanish\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Crowdin-SourceKey: msgstr\n"
|
||||
"X-Crowdin-Project: 2f9cf052fe5ab6c086476d0003c2f658\n"
|
||||
"X-Crowdin-Project-ID: 5\n"
|
||||
"X-Crowdin-Language: es\n"
|
||||
"X-Crowdin-File: /main/public/locales/en-US/messages.po\n"
|
||||
"X-Crowdin-File-ID: 59\n"
|
||||
|
||||
# Don't edit this file manually - translations must be managed within Crowdin
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "common.locale.default"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "common.locale.en"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "common.locale.es"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "common.locale.fr"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
msgid "common.save"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.data-options"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.dataframe-aria-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.dataframe-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataTab.tsx
|
||||
msgid "dashboard.inspect-data.download-csv"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.download-excel-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.download-excel-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataTab.tsx
|
||||
msgid "dashboard.inspect-data.download-logs"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataTab.tsx
|
||||
msgid "dashboard.inspect-data.download-service"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataTab.tsx
|
||||
msgid "dashboard.inspect-data.download-traces"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.excel-header"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.formatted"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.formatted-data-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.formatted-data-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.panel-transforms"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.series-to-columns"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataTab.tsx
|
||||
msgid "dashboard.inspect-data.transformation"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.transformations-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.transformations-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectJSONTab.tsx
|
||||
msgid "dashboard.inspect-json.dataframe-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectJSONTab.tsx
|
||||
msgid "dashboard.inspect-json.dataframe-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectJSONTab.tsx
|
||||
msgid "dashboard.inspect-json.panel-data-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectJSONTab.tsx
|
||||
msgid "dashboard.inspect-json.panel-data-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectJSONTab.tsx
|
||||
msgid "dashboard.inspect-json.panel-json-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectJSONTab.tsx
|
||||
msgid "dashboard.inspect-json.panel-json-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectJSONTab.tsx
|
||||
msgid "dashboard.inspect-json.select-source"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectJSONTab.tsx
|
||||
msgid "dashboard.inspect-json.unknown"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectMetadataTab.tsx
|
||||
msgid "dashboard.inspect-meta.no-inspector"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectStatsTab.tsx
|
||||
msgid "dashboard.inspect-stats.data-title"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectStatsTab.tsx
|
||||
msgid "dashboard.inspect-stats.processing-time"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectStatsTab.tsx
|
||||
msgid "dashboard.inspect-stats.queries"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectStatsTab.tsx
|
||||
msgid "dashboard.inspect-stats.request-time"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectStatsTab.tsx
|
||||
msgid "dashboard.inspect-stats.rows"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectStatsTab.tsx
|
||||
msgid "dashboard.inspect-stats.table-title"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/Inspector/hooks.ts
|
||||
msgid "dashboard.inspect.actions-tab"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/Inspector/hooks.ts
|
||||
msgid "dashboard.inspect.data-tab"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/Inspector/hooks.ts
|
||||
msgid "dashboard.inspect.error-tab"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/Inspector/hooks.ts
|
||||
msgid "dashboard.inspect.json-tab"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/Inspector/hooks.ts
|
||||
msgid "dashboard.inspect.meta-tab"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/Inspector/hooks.ts
|
||||
msgid "dashboard.inspect.query-tab"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/Inspector/hooks.ts
|
||||
msgid "dashboard.inspect.stats-tab"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/Inspector/InspectContent.tsx
|
||||
msgid "dashboard.inspect.subtitle"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/Inspector/InspectContent.tsx
|
||||
msgid "dashboard.inspect.title"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
|
||||
msgid "dashboard.refresh-picker.off-arialabel"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
|
||||
msgid "dashboard.refresh-picker.off-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
|
||||
msgid "dashboard.refresh-picker.off-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
|
||||
msgid "dashboard.refresh-picker.on-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.add-panel"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.comments-show"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.mark-favorite"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.open-original"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.playlist-next"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.playlist-previous"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.playlist-stop"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
|
||||
msgid "dashboard.toolbar.refresh"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.save"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.settings"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.share"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.tv-button"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.unmark-favorite"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/Select/FolderPicker.tsx
|
||||
msgid "folder-picker.loading"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/library-panels/components/AddLibraryPanelModal/AddLibraryPanelModal.tsx
|
||||
msgid "library-panel.add-modal.cancel"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/library-panels/components/AddLibraryPanelModal/AddLibraryPanelModal.tsx
|
||||
msgid "library-panel.add-modal.create"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/library-panels/components/AddLibraryPanelModal/AddLibraryPanelModal.tsx
|
||||
msgid "library-panel.add-modal.error"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/library-panels/components/AddLibraryPanelModal/AddLibraryPanelModal.tsx
|
||||
msgid "library-panel.add-modal.folder"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/library-panels/components/AddLibraryPanelModal/AddLibraryPanelModal.tsx
|
||||
msgid "library-panel.add-modal.folder-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/library-panels/components/AddLibraryPanelModal/AddLibraryPanelModal.tsx
|
||||
msgid "library-panel.add-modal.name"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/library-panels/utils/usePanelSave.ts
|
||||
msgid "library-panels.save.error"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/library-panels/utils/usePanelSave.ts
|
||||
msgid "library-panels.save.success"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.alerting"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.alerting-admin"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.alerting-am-routes"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.alerting-channels"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.alerting-groups"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.alerting-legacy"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.alerting-list"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.alerting-receivers"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.alerting-silences"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.api-keys"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.config"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.create"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.create-alert"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.create-dashboard"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.create-folder"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.create-import"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.dashboards"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.datasources"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.explore"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.help"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.home"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.library-panels"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.live"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.live-cloud"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.live-pipeline"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.live-status"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.manage-dashboards"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.new-dashboard"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.new-folder"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.org-settings"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.playlists"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.plugins"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.profile/password"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.profile/settings"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.service-accounts"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.sign-out"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.snapshots"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.starred"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.starred-empty"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.teams"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.users"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/navigation/kiosk.ts
|
||||
msgid "navigation.kiosk.tv-alert"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/utils/getPanelMenu.ts
|
||||
msgid "panel.header-menu.inspect"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/utils/getPanelMenu.ts
|
||||
msgid "panel.header-menu.inspect-data"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/utils/getPanelMenu.ts
|
||||
msgid "panel.header-menu.inspect-json"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/utils/getPanelMenu.ts
|
||||
msgid "panel.header-menu.more"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/plugins/panel/graph/module.ts
|
||||
msgid "panel.header-menu.more-toggle"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/utils/getPanelMenu.ts
|
||||
msgid "panel.header-menu.share"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/utils/getPanelMenu.ts
|
||||
msgid "panel.header-menu.view"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareModal.tsx
|
||||
msgid "share-modal.dashboard.title"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareEmbed.tsx
|
||||
msgid "share-modal.embed.copy"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareEmbed.tsx
|
||||
msgid "share-modal.embed.html"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareEmbed.tsx
|
||||
msgid "share-modal.embed.html-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareEmbed.tsx
|
||||
msgid "share-modal.embed.info"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareEmbed.tsx
|
||||
msgid "share-modal.embed.time-range"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareEmbed.tsx
|
||||
msgid "share-modal.embed.time-range-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareExport.tsx
|
||||
msgid "share-modal.export.cancel-button"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareExport.tsx
|
||||
msgid "share-modal.export.info-text"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareExport.tsx
|
||||
msgid "share-modal.export.save-button"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareExport.tsx
|
||||
msgid "share-modal.export.share-default-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareExport.tsx
|
||||
msgid "share-modal.export.share-externally-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareExport.tsx
|
||||
msgid "share-modal.export.view-button"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLibraryPanel.tsx
|
||||
msgid "share-modal.library.info"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.copy-link-button"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.info-text"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.link-url"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.render-alert"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.render-instructions"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.rendered-image"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.save-alert"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.save-dashboard"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.shorten-url"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.time-range-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.time-range-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareModal.tsx
|
||||
msgid "share-modal.panel.title"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.cancel-button"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.copy-link-button"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.delete-button"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.deleted-message"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.expire"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.expire-day"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.expire-hour"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.expire-never"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.expire-week"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.info-text-1"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.info-text-2"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.local-button"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.mistake-message"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.name"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.timeout"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.timeout-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareModal.tsx
|
||||
msgid "share-modal.tab-title.embed"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareModal.tsx
|
||||
msgid "share-modal.tab-title.export"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareModal.tsx
|
||||
msgid "share-modal.tab-title.library-panel"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareModal.tsx
|
||||
msgid "share-modal.tab-title.link"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareModal.tsx
|
||||
msgid "share-modal.tab-title.snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ThemePicker.tsx
|
||||
msgid "share-modal.theme-picker.current"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ThemePicker.tsx
|
||||
msgid "share-modal.theme-picker.dark"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ThemePicker.tsx
|
||||
msgid "share-modal.theme-picker.field-name"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ThemePicker.tsx
|
||||
msgid "share-modal.theme-picker.light"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-dashboard.fields.timezone-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.fields.home-dashboard-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.fields.home-dashboard-placeholder"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.fields.locale-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.fields.locale-placeholder"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.fields.theme-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.fields.week-start-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.theme.dark-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.theme.default-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.theme.light-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.title"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserOrganizations.tsx
|
||||
msgid "user-orgs.current-org-button"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserOrganizations.tsx
|
||||
msgid "user-orgs.name-column"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserOrganizations.tsx
|
||||
msgid "user-orgs.role-column"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserOrganizations.tsx
|
||||
msgid "user-orgs.select-org-button"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserOrganizations.tsx
|
||||
msgid "user-orgs.title"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
msgid "user-profile.fields.email-error"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
msgid "user-profile.fields.email-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
msgid "user-profile.fields.name-error"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
msgid "user-profile.fields.name-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
msgid "user-profile.fields.username-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
msgid "user-profile.title"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserSessions.tsx
|
||||
msgid "user-session.browser-column"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserSessions.tsx
|
||||
msgid "user-session.created-at-column"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserSessions.tsx
|
||||
msgid "user-session.ip-column"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserSessions.tsx
|
||||
msgid "user-session.revoke"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserSessions.tsx
|
||||
msgid "user-session.seen-at-column"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserSessions.tsx
|
||||
msgid "user-sessions.loading"
|
||||
msgstr ""
|
||||
|
289
public/locales/fr-FR/grafana.json
Normal file
289
public/locales/fr-FR/grafana.json
Normal file
@ -0,0 +1,289 @@
|
||||
{
|
||||
"common": {
|
||||
"locale": {
|
||||
"default": "",
|
||||
"en": "",
|
||||
"es": "",
|
||||
"fr": ""
|
||||
},
|
||||
"save": ""
|
||||
},
|
||||
"dashboard": {
|
||||
"inspect": {
|
||||
"actions-tab": "",
|
||||
"data-tab": "",
|
||||
"error-tab": "",
|
||||
"json-tab": "",
|
||||
"meta-tab": "",
|
||||
"query-tab": "",
|
||||
"stats-tab": "",
|
||||
"subtitle": "",
|
||||
"title": ""
|
||||
},
|
||||
"inspect-data": {
|
||||
"data-options": "",
|
||||
"dataframe-aria-label": "",
|
||||
"dataframe-label": "",
|
||||
"download-csv": "",
|
||||
"download-excel-description": "",
|
||||
"download-excel-label": "",
|
||||
"download-logs": "",
|
||||
"download-service": "",
|
||||
"download-traces": "",
|
||||
"excel-header": "",
|
||||
"formatted": "",
|
||||
"formatted-data-description": "",
|
||||
"formatted-data-label": "",
|
||||
"panel-transforms": "",
|
||||
"series-to-columns": "",
|
||||
"transformation": "",
|
||||
"transformations-description": "",
|
||||
"transformations-label": ""
|
||||
},
|
||||
"inspect-json": {
|
||||
"dataframe-description": "",
|
||||
"dataframe-label": "",
|
||||
"panel-data-description": "",
|
||||
"panel-data-label": "",
|
||||
"panel-json-description": "",
|
||||
"panel-json-label": "",
|
||||
"select-source": "",
|
||||
"unknown": ""
|
||||
},
|
||||
"inspect-meta": {
|
||||
"no-inspector": ""
|
||||
},
|
||||
"inspect-stats": {
|
||||
"data-title": "",
|
||||
"processing-time": "",
|
||||
"queries": "",
|
||||
"request-time": "",
|
||||
"rows": "",
|
||||
"table-title": ""
|
||||
},
|
||||
"refresh-picker": {
|
||||
"off-arialabel": "",
|
||||
"off-description": "",
|
||||
"off-label": "",
|
||||
"on-description": ""
|
||||
},
|
||||
"toolbar": {
|
||||
"add-panel": "",
|
||||
"comments-show": "",
|
||||
"mark-favorite": "",
|
||||
"open-original": "",
|
||||
"playlist-next": "",
|
||||
"playlist-previous": "",
|
||||
"playlist-stop": "",
|
||||
"refresh": "",
|
||||
"save": "",
|
||||
"settings": "",
|
||||
"share": "",
|
||||
"tv-button": "",
|
||||
"unmark-favorite": ""
|
||||
}
|
||||
},
|
||||
"folder-picker": {
|
||||
"loading": ""
|
||||
},
|
||||
"library-panel": {
|
||||
"add-modal": {
|
||||
"cancel": "",
|
||||
"create": "",
|
||||
"error": "",
|
||||
"folder": "",
|
||||
"folder-description": "",
|
||||
"name": ""
|
||||
}
|
||||
},
|
||||
"library-panels": {
|
||||
"save": {
|
||||
"error": "",
|
||||
"success": ""
|
||||
}
|
||||
},
|
||||
"nav": {
|
||||
"alerting": "",
|
||||
"alerting-admin": "",
|
||||
"alerting-am-routes": "",
|
||||
"alerting-channels": "",
|
||||
"alerting-groups": "",
|
||||
"alerting-legacy": "",
|
||||
"alerting-list": "",
|
||||
"alerting-receivers": "",
|
||||
"alerting-silences": "",
|
||||
"api-keys": "",
|
||||
"config": "",
|
||||
"correlations": "",
|
||||
"create": "",
|
||||
"create-alert": "",
|
||||
"create-dashboard": "",
|
||||
"create-folder": "",
|
||||
"create-import": "",
|
||||
"dashboards": "",
|
||||
"datasources": "",
|
||||
"explore": "",
|
||||
"help": "",
|
||||
"home": "",
|
||||
"library-panels": "",
|
||||
"live": "",
|
||||
"live-cloud": "",
|
||||
"live-pipeline": "",
|
||||
"live-status": "",
|
||||
"manage-dashboards": "",
|
||||
"new-dashboard": "",
|
||||
"new-folder": "",
|
||||
"org-settings": "",
|
||||
"playlists": "",
|
||||
"plugins": "",
|
||||
"profile/password": "",
|
||||
"profile/settings": "",
|
||||
"service-accounts": "",
|
||||
"sign-out": "",
|
||||
"snapshots": "",
|
||||
"starred": "",
|
||||
"starred-empty": "",
|
||||
"teams": "",
|
||||
"users": ""
|
||||
},
|
||||
"navigation": {
|
||||
"kiosk": {
|
||||
"tv-alert": ""
|
||||
}
|
||||
},
|
||||
"panel": {
|
||||
"header-menu": {
|
||||
"inspect": "",
|
||||
"inspect-data": "",
|
||||
"inspect-json": "",
|
||||
"more": "",
|
||||
"share": "",
|
||||
"view": ""
|
||||
}
|
||||
},
|
||||
"share-modal": {
|
||||
"dashboard": {
|
||||
"title": ""
|
||||
},
|
||||
"embed": {
|
||||
"copy": "",
|
||||
"html": "",
|
||||
"html-description": "",
|
||||
"info": "",
|
||||
"time-range": "",
|
||||
"time-range-description": ""
|
||||
},
|
||||
"export": {
|
||||
"cancel-button": "",
|
||||
"info-text": "",
|
||||
"save-button": "",
|
||||
"share-default-label": "",
|
||||
"share-externally-label": "",
|
||||
"view-button": ""
|
||||
},
|
||||
"library": {
|
||||
"info": ""
|
||||
},
|
||||
"link": {
|
||||
"copy-link-button": "",
|
||||
"info-text": "",
|
||||
"link-url": "",
|
||||
"render-alert": "",
|
||||
"render-instructions": "",
|
||||
"rendered-image": "",
|
||||
"save-alert": "",
|
||||
"save-dashboard": "",
|
||||
"shorten-url": "",
|
||||
"time-range-description": "",
|
||||
"time-range-label": ""
|
||||
},
|
||||
"panel": {
|
||||
"title": ""
|
||||
},
|
||||
"snapshot": {
|
||||
"cancel-button": "",
|
||||
"copy-link-button": "",
|
||||
"delete-button": "",
|
||||
"deleted-message": "",
|
||||
"expire": "",
|
||||
"expire-day": "",
|
||||
"expire-hour": "",
|
||||
"expire-never": "",
|
||||
"expire-week": "",
|
||||
"info-text-1": "",
|
||||
"info-text-2": "",
|
||||
"local-button": "",
|
||||
"mistake-message": "",
|
||||
"name": "",
|
||||
"timeout": "",
|
||||
"timeout-description": ""
|
||||
},
|
||||
"tab-title": {
|
||||
"embed": "",
|
||||
"export": "",
|
||||
"library-panel": "",
|
||||
"link": "",
|
||||
"snapshot": ""
|
||||
},
|
||||
"theme-picker": {
|
||||
"current": "",
|
||||
"dark": "",
|
||||
"field-name": "",
|
||||
"light": ""
|
||||
}
|
||||
},
|
||||
"shared-dashboard": {
|
||||
"fields": {
|
||||
"timezone-label": ""
|
||||
}
|
||||
},
|
||||
"shared-preferences": {
|
||||
"fields": {
|
||||
"home-dashboard-label": "",
|
||||
"home-dashboard-placeholder": "",
|
||||
"locale-label": "",
|
||||
"locale-placeholder": "",
|
||||
"theme-label": "",
|
||||
"week-start-label": ""
|
||||
},
|
||||
"theme": {
|
||||
"dark-label": "",
|
||||
"default-label": "",
|
||||
"light-label": ""
|
||||
},
|
||||
"title": ""
|
||||
},
|
||||
"time-picker": {
|
||||
"absolute": {
|
||||
"recent-title": "",
|
||||
"title": ""
|
||||
}
|
||||
},
|
||||
"user-orgs": {
|
||||
"current-org-button": "",
|
||||
"name-column": "",
|
||||
"role-column": "",
|
||||
"select-org-button": "",
|
||||
"title": ""
|
||||
},
|
||||
"user-profile": {
|
||||
"fields": {
|
||||
"email-error": "",
|
||||
"email-label": "",
|
||||
"name-error": "",
|
||||
"name-label": "",
|
||||
"username-label": ""
|
||||
},
|
||||
"title": ""
|
||||
},
|
||||
"user-session": {
|
||||
"browser-column": "",
|
||||
"created-at-column": "",
|
||||
"ip-column": "",
|
||||
"revoke": "",
|
||||
"seen-at-column": ""
|
||||
},
|
||||
"user-sessions": {
|
||||
"loading": ""
|
||||
}
|
||||
}
|
@ -1,831 +0,0 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"POT-Creation-Date: 2021-11-16 17:00+0000\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: @lingui/cli\n"
|
||||
"Language: fr\n"
|
||||
"Project-Id-Version: 2f9cf052fe5ab6c086476d0003c2f658\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2022-08-03 13:38\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: French\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Crowdin-SourceKey: msgstr\n"
|
||||
"X-Crowdin-Project: 2f9cf052fe5ab6c086476d0003c2f658\n"
|
||||
"X-Crowdin-Project-ID: 5\n"
|
||||
"X-Crowdin-Language: fr\n"
|
||||
"X-Crowdin-File: /main/public/locales/en-US/messages.po\n"
|
||||
"X-Crowdin-File-ID: 59\n"
|
||||
|
||||
# Don't edit this file manually - translations must be managed within Crowdin
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "common.locale.default"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "common.locale.en"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "common.locale.es"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "common.locale.fr"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
msgid "common.save"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.data-options"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.dataframe-aria-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.dataframe-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataTab.tsx
|
||||
msgid "dashboard.inspect-data.download-csv"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.download-excel-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.download-excel-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataTab.tsx
|
||||
msgid "dashboard.inspect-data.download-logs"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataTab.tsx
|
||||
msgid "dashboard.inspect-data.download-service"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataTab.tsx
|
||||
msgid "dashboard.inspect-data.download-traces"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.excel-header"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.formatted"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.formatted-data-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.formatted-data-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.panel-transforms"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.series-to-columns"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataTab.tsx
|
||||
msgid "dashboard.inspect-data.transformation"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.transformations-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.transformations-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectJSONTab.tsx
|
||||
msgid "dashboard.inspect-json.dataframe-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectJSONTab.tsx
|
||||
msgid "dashboard.inspect-json.dataframe-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectJSONTab.tsx
|
||||
msgid "dashboard.inspect-json.panel-data-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectJSONTab.tsx
|
||||
msgid "dashboard.inspect-json.panel-data-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectJSONTab.tsx
|
||||
msgid "dashboard.inspect-json.panel-json-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectJSONTab.tsx
|
||||
msgid "dashboard.inspect-json.panel-json-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectJSONTab.tsx
|
||||
msgid "dashboard.inspect-json.select-source"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectJSONTab.tsx
|
||||
msgid "dashboard.inspect-json.unknown"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectMetadataTab.tsx
|
||||
msgid "dashboard.inspect-meta.no-inspector"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectStatsTab.tsx
|
||||
msgid "dashboard.inspect-stats.data-title"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectStatsTab.tsx
|
||||
msgid "dashboard.inspect-stats.processing-time"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectStatsTab.tsx
|
||||
msgid "dashboard.inspect-stats.queries"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectStatsTab.tsx
|
||||
msgid "dashboard.inspect-stats.request-time"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectStatsTab.tsx
|
||||
msgid "dashboard.inspect-stats.rows"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectStatsTab.tsx
|
||||
msgid "dashboard.inspect-stats.table-title"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/Inspector/hooks.ts
|
||||
msgid "dashboard.inspect.actions-tab"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/Inspector/hooks.ts
|
||||
msgid "dashboard.inspect.data-tab"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/Inspector/hooks.ts
|
||||
msgid "dashboard.inspect.error-tab"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/Inspector/hooks.ts
|
||||
msgid "dashboard.inspect.json-tab"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/Inspector/hooks.ts
|
||||
msgid "dashboard.inspect.meta-tab"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/Inspector/hooks.ts
|
||||
msgid "dashboard.inspect.query-tab"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/Inspector/hooks.ts
|
||||
msgid "dashboard.inspect.stats-tab"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/Inspector/InspectContent.tsx
|
||||
msgid "dashboard.inspect.subtitle"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/Inspector/InspectContent.tsx
|
||||
msgid "dashboard.inspect.title"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
|
||||
msgid "dashboard.refresh-picker.off-arialabel"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
|
||||
msgid "dashboard.refresh-picker.off-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
|
||||
msgid "dashboard.refresh-picker.off-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
|
||||
msgid "dashboard.refresh-picker.on-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.add-panel"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.comments-show"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.mark-favorite"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.open-original"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.playlist-next"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.playlist-previous"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.playlist-stop"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
|
||||
msgid "dashboard.toolbar.refresh"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.save"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.settings"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.share"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.tv-button"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.unmark-favorite"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/Select/FolderPicker.tsx
|
||||
msgid "folder-picker.loading"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/library-panels/components/AddLibraryPanelModal/AddLibraryPanelModal.tsx
|
||||
msgid "library-panel.add-modal.cancel"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/library-panels/components/AddLibraryPanelModal/AddLibraryPanelModal.tsx
|
||||
msgid "library-panel.add-modal.create"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/library-panels/components/AddLibraryPanelModal/AddLibraryPanelModal.tsx
|
||||
msgid "library-panel.add-modal.error"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/library-panels/components/AddLibraryPanelModal/AddLibraryPanelModal.tsx
|
||||
msgid "library-panel.add-modal.folder"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/library-panels/components/AddLibraryPanelModal/AddLibraryPanelModal.tsx
|
||||
msgid "library-panel.add-modal.folder-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/library-panels/components/AddLibraryPanelModal/AddLibraryPanelModal.tsx
|
||||
msgid "library-panel.add-modal.name"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/library-panels/utils/usePanelSave.ts
|
||||
msgid "library-panels.save.error"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/library-panels/utils/usePanelSave.ts
|
||||
msgid "library-panels.save.success"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.alerting"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.alerting-admin"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.alerting-am-routes"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.alerting-channels"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.alerting-groups"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.alerting-legacy"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.alerting-list"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.alerting-receivers"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.alerting-silences"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.api-keys"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.config"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.create"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.create-alert"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.create-dashboard"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.create-folder"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.create-import"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.dashboards"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.datasources"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.explore"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.help"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.home"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.library-panels"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.live"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.live-cloud"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.live-pipeline"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.live-status"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.manage-dashboards"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.new-dashboard"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.new-folder"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.org-settings"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.playlists"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.plugins"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.profile/password"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.profile/settings"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.service-accounts"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.sign-out"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.snapshots"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.starred"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.starred-empty"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.teams"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.users"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/navigation/kiosk.ts
|
||||
msgid "navigation.kiosk.tv-alert"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/utils/getPanelMenu.ts
|
||||
msgid "panel.header-menu.inspect"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/utils/getPanelMenu.ts
|
||||
msgid "panel.header-menu.inspect-data"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/utils/getPanelMenu.ts
|
||||
msgid "panel.header-menu.inspect-json"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/utils/getPanelMenu.ts
|
||||
msgid "panel.header-menu.more"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/plugins/panel/graph/module.ts
|
||||
msgid "panel.header-menu.more-toggle"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/utils/getPanelMenu.ts
|
||||
msgid "panel.header-menu.share"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/utils/getPanelMenu.ts
|
||||
msgid "panel.header-menu.view"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareModal.tsx
|
||||
msgid "share-modal.dashboard.title"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareEmbed.tsx
|
||||
msgid "share-modal.embed.copy"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareEmbed.tsx
|
||||
msgid "share-modal.embed.html"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareEmbed.tsx
|
||||
msgid "share-modal.embed.html-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareEmbed.tsx
|
||||
msgid "share-modal.embed.info"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareEmbed.tsx
|
||||
msgid "share-modal.embed.time-range"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareEmbed.tsx
|
||||
msgid "share-modal.embed.time-range-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareExport.tsx
|
||||
msgid "share-modal.export.cancel-button"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareExport.tsx
|
||||
msgid "share-modal.export.info-text"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareExport.tsx
|
||||
msgid "share-modal.export.save-button"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareExport.tsx
|
||||
msgid "share-modal.export.share-default-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareExport.tsx
|
||||
msgid "share-modal.export.share-externally-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareExport.tsx
|
||||
msgid "share-modal.export.view-button"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLibraryPanel.tsx
|
||||
msgid "share-modal.library.info"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.copy-link-button"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.info-text"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.link-url"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.render-alert"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.render-instructions"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.rendered-image"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.save-alert"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.save-dashboard"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.shorten-url"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.time-range-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.time-range-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareModal.tsx
|
||||
msgid "share-modal.panel.title"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.cancel-button"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.copy-link-button"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.delete-button"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.deleted-message"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.expire"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.expire-day"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.expire-hour"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.expire-never"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.expire-week"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.info-text-1"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.info-text-2"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.local-button"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.mistake-message"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.name"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.timeout"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.timeout-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareModal.tsx
|
||||
msgid "share-modal.tab-title.embed"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareModal.tsx
|
||||
msgid "share-modal.tab-title.export"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareModal.tsx
|
||||
msgid "share-modal.tab-title.library-panel"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareModal.tsx
|
||||
msgid "share-modal.tab-title.link"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareModal.tsx
|
||||
msgid "share-modal.tab-title.snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ThemePicker.tsx
|
||||
msgid "share-modal.theme-picker.current"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ThemePicker.tsx
|
||||
msgid "share-modal.theme-picker.dark"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ThemePicker.tsx
|
||||
msgid "share-modal.theme-picker.field-name"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ThemePicker.tsx
|
||||
msgid "share-modal.theme-picker.light"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-dashboard.fields.timezone-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.fields.home-dashboard-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.fields.home-dashboard-placeholder"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.fields.locale-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.fields.locale-placeholder"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.fields.theme-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.fields.week-start-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.theme.dark-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.theme.default-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.theme.light-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.title"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserOrganizations.tsx
|
||||
msgid "user-orgs.current-org-button"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserOrganizations.tsx
|
||||
msgid "user-orgs.name-column"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserOrganizations.tsx
|
||||
msgid "user-orgs.role-column"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserOrganizations.tsx
|
||||
msgid "user-orgs.select-org-button"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserOrganizations.tsx
|
||||
msgid "user-orgs.title"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
msgid "user-profile.fields.email-error"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
msgid "user-profile.fields.email-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
msgid "user-profile.fields.name-error"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
msgid "user-profile.fields.name-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
msgid "user-profile.fields.username-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
msgid "user-profile.title"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserSessions.tsx
|
||||
msgid "user-session.browser-column"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserSessions.tsx
|
||||
msgid "user-session.created-at-column"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserSessions.tsx
|
||||
msgid "user-session.ip-column"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserSessions.tsx
|
||||
msgid "user-session.revoke"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserSessions.tsx
|
||||
msgid "user-session.seen-at-column"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserSessions.tsx
|
||||
msgid "user-sessions.loading"
|
||||
msgstr ""
|
||||
|
15
public/locales/i18next-parser.config.js
Normal file
15
public/locales/i18next-parser.config.js
Normal file
@ -0,0 +1,15 @@
|
||||
module.exports = {
|
||||
// Default namespace used in your i18next config
|
||||
defaultNamespace: 'grafana',
|
||||
|
||||
locales: ['en-US', 'fr-FR', 'es-ES', 'pseudo-LOCALE'],
|
||||
|
||||
output: './public/locales/$LOCALE/$NAMESPACE.json',
|
||||
|
||||
pluralSeparator: '__',
|
||||
|
||||
sort: true,
|
||||
|
||||
// Don't include default values for English, they'll remain in the source code
|
||||
skipDefaultValues: (locale) => locale !== 'en-US',
|
||||
};
|
289
public/locales/pseudo-LOCALE/grafana.json
Normal file
289
public/locales/pseudo-LOCALE/grafana.json
Normal file
@ -0,0 +1,289 @@
|
||||
{
|
||||
"common": {
|
||||
"locale": {
|
||||
"default": "Đęƒäūľŧ",
|
||||
"en": "Ēʼnģľįşĥ",
|
||||
"es": "Ŝpäʼnįşĥ",
|
||||
"fr": "Fřęʼnčĥ"
|
||||
},
|
||||
"save": "Ŝävę"
|
||||
},
|
||||
"dashboard": {
|
||||
"inspect": {
|
||||
"actions-tab": "Åčŧįőʼnş",
|
||||
"data-tab": "Đäŧä",
|
||||
"error-tab": "Ēřřőř",
|
||||
"json-tab": "ĴŜØŃ",
|
||||
"meta-tab": "Męŧä Đäŧä",
|
||||
"query-tab": "Qūęřy",
|
||||
"stats-tab": "Ŝŧäŧş",
|
||||
"subtitle": "{{qūęřyCőūʼnŧ}} qūęřįęş ŵįŧĥ ŧőŧäľ qūęřy ŧįmę őƒ {{ƒőřmäŧŧęđ}}",
|
||||
"title": "Ĩʼnşpęčŧ: {{päʼnęľŦįŧľę}}"
|
||||
},
|
||||
"inspect-data": {
|
||||
"data-options": "Đäŧä őpŧįőʼnş",
|
||||
"dataframe-aria-label": "Ŝęľęčŧ đäŧäƒřämę",
|
||||
"dataframe-label": "Ŝĥőŵ đäŧä ƒřämę",
|
||||
"download-csv": "Đőŵʼnľőäđ CŜV",
|
||||
"download-excel-description": "Åđđş ĥęäđęř ŧő CŜV ƒőř ūşę ŵįŧĥ Ēχčęľ",
|
||||
"download-excel-label": "Đőŵʼnľőäđ ƒőř Ēχčęľ",
|
||||
"download-logs": "Đőŵʼnľőäđ ľőģş",
|
||||
"download-service": "Đőŵʼnľőäđ şęřvįčę ģřäpĥ",
|
||||
"download-traces": "Đőŵʼnľőäđ ŧřäčęş",
|
||||
"excel-header": "Ēχčęľ ĥęäđęř",
|
||||
"formatted": "Főřmäŧŧęđ đäŧä",
|
||||
"formatted-data-description": "Ŧäþľę đäŧä įş ƒőřmäŧŧęđ ŵįŧĥ őpŧįőʼnş đęƒįʼnęđ įʼn ŧĥę Fįęľđ äʼnđ Øvęřřįđę ŧäþş.",
|
||||
"formatted-data-label": "Főřmäŧŧęđ đäŧä",
|
||||
"panel-transforms": "Päʼnęľ ŧřäʼnşƒőřmş",
|
||||
"series-to-columns": "Ŝęřįęş ĵőįʼnęđ þy ŧįmę",
|
||||
"transformation": "Ŝęřįęş ĵőįʼnęđ þy ŧįmę",
|
||||
"transformations-description": "Ŧäþľę đäŧä įş đįşpľäyęđ ŵįŧĥ ŧřäʼnşƒőřmäŧįőʼnş đęƒįʼnęđ įʼn ŧĥę päʼnęľ Ŧřäʼnşƒőřm ŧäþ.",
|
||||
"transformations-label": "Åppľy päʼnęľ ŧřäʼnşƒőřmäŧįőʼnş"
|
||||
},
|
||||
"inspect-json": {
|
||||
"dataframe-description": "Ŗäŵ đäŧä ŵįŧĥőūŧ ŧřäʼnşƒőřmäŧįőʼnş äʼnđ ƒįęľđ čőʼnƒįģ äppľįęđ. ",
|
||||
"dataframe-label": "ĐäŧäFřämę ĴŜØŃ (ƒřőm Qūęřy)",
|
||||
"panel-data-description": "Ŧĥę řäŵ mőđęľ päşşęđ ŧő ŧĥę päʼnęľ vįşūäľįžäŧįőʼn",
|
||||
"panel-data-label": "Päʼnęľ đäŧä",
|
||||
"panel-json-description": "Ŧĥę mőđęľ şävęđ įʼn ŧĥę đäşĥþőäřđ ĴŜØŃ ŧĥäŧ čőʼnƒįģūřęş ĥőŵ ęvęřyŧĥįʼnģ ŵőřĸş.",
|
||||
"panel-json-label": "Päʼnęľ ĴŜØŃ",
|
||||
"select-source": "Ŝęľęčŧ şőūřčę",
|
||||
"unknown": "Ůʼnĸʼnőŵʼn Øþĵęčŧ: {{şĥőŵ}}"
|
||||
},
|
||||
"inspect-meta": {
|
||||
"no-inspector": "Ńő Męŧäđäŧä Ĩʼnşpęčŧőř"
|
||||
},
|
||||
"inspect-stats": {
|
||||
"data-title": "Đäŧä şőūřčę şŧäŧş",
|
||||
"processing-time": "Đäŧä přőčęşşįʼnģ ŧįmę",
|
||||
"queries": "Ńūmþęř őƒ qūęřįęş",
|
||||
"request-time": "Ŧőŧäľ řęqūęşŧ ŧįmę",
|
||||
"rows": "Ŧőŧäľ ʼnūmþęř řőŵş",
|
||||
"table-title": "Ŝŧäŧş"
|
||||
},
|
||||
"refresh-picker": {
|
||||
"off-arialabel": "Ŧūřʼn őƒƒ äūŧő řęƒřęşĥ",
|
||||
"off-description": "Åūŧő řęƒřęşĥ ŧūřʼnęđ őƒƒ. Cĥőőşę řęƒřęşĥ ŧįmę įʼnŧęřväľ",
|
||||
"off-label": "؃ƒ",
|
||||
"on-description": ""
|
||||
},
|
||||
"toolbar": {
|
||||
"add-panel": "Åđđ päʼnęľ",
|
||||
"comments-show": "Ŝĥőŵ đäşĥþőäřđ čőmmęʼnŧş",
|
||||
"mark-favorite": "Mäřĸ äş ƒävőřįŧę",
|
||||
"open-original": "Øpęʼn őřįģįʼnäľ đäşĥþőäřđ",
|
||||
"playlist-next": "Ğő ŧő ʼnęχŧ đäşĥþőäřđ",
|
||||
"playlist-previous": "Ğő ŧő přęvįőūş đäşĥþőäřđ",
|
||||
"playlist-stop": "Ŝŧőp pľäyľįşŧ",
|
||||
"refresh": "Ŗęƒřęşĥ đäşĥþőäřđ",
|
||||
"save": "Ŝävę đäşĥþőäřđ",
|
||||
"settings": "Đäşĥþőäřđ şęŧŧįʼnģş",
|
||||
"share": "Ŝĥäřę đäşĥþőäřđ őř päʼnęľ",
|
||||
"tv-button": "Cyčľę vįęŵ mőđę",
|
||||
"unmark-favorite": "Ůʼnmäřĸ äş ƒävőřįŧę"
|
||||
}
|
||||
},
|
||||
"folder-picker": {
|
||||
"loading": "Ŀőäđįʼnģ ƒőľđęřş..."
|
||||
},
|
||||
"library-panel": {
|
||||
"add-modal": {
|
||||
"cancel": "Cäʼnčęľ",
|
||||
"create": "Cřęäŧę ľįþřäřy päʼnęľ",
|
||||
"error": "Ŀįþřäřy päʼnęľ ŵįŧĥ ŧĥįş ʼnämę äľřęäđy ęχįşŧş",
|
||||
"folder": "Ŝävę įʼn ƒőľđęř",
|
||||
"folder-description": "Ŀįþřäřy päʼnęľ pęřmįşşįőʼnş äřę đęřįvęđ ƒřőm ŧĥę ƒőľđęř pęřmįşşįőʼnş",
|
||||
"name": "Ŀįþřäřy päʼnęľ ʼnämę"
|
||||
}
|
||||
},
|
||||
"library-panels": {
|
||||
"save": {
|
||||
"error": "Ēřřőř şävįʼnģ ľįþřäřy päʼnęľ: \"{{ęřřőřMşģ}}\"",
|
||||
"success": "Ŀįþřäřy päʼnęľ şävęđ"
|
||||
}
|
||||
},
|
||||
"nav": {
|
||||
"alerting": "Åľęřŧįʼnģ",
|
||||
"alerting-admin": "Åđmįʼn",
|
||||
"alerting-am-routes": "Ńőŧįƒįčäŧįőʼn pőľįčįęş",
|
||||
"alerting-channels": "Ńőŧįƒįčäŧįőʼn čĥäʼnʼnęľş",
|
||||
"alerting-groups": "Ğřőūpş",
|
||||
"alerting-legacy": "Åľęřŧįʼnģ (ľęģäčy)",
|
||||
"alerting-list": "Åľęřŧ řūľęş",
|
||||
"alerting-receivers": "Cőʼnŧäčŧ pőįʼnŧş",
|
||||
"alerting-silences": "Ŝįľęʼnčęş",
|
||||
"api-keys": "ÅPĨ ĸęyş",
|
||||
"config": "Cőʼnƒįģūřäŧįőʼn",
|
||||
"correlations": "Cőřřęľäŧįőʼnş",
|
||||
"create": "Cřęäŧę",
|
||||
"create-alert": "Ńęŵ äľęřŧ řūľę",
|
||||
"create-dashboard": "Đäşĥþőäřđ",
|
||||
"create-folder": "Főľđęř",
|
||||
"create-import": "Ĩmpőřŧ",
|
||||
"dashboards": "Đäşĥþőäřđş",
|
||||
"datasources": "Đäŧä şőūřčęş",
|
||||
"explore": "Ēχpľőřę",
|
||||
"help": "Ħęľp",
|
||||
"home": "Ħőmę",
|
||||
"library-panels": "Ŀįþřäřy päʼnęľş",
|
||||
"live": "Ēvęʼnŧ şŧřęämįʼnģ",
|
||||
"live-cloud": "Cľőūđ",
|
||||
"live-pipeline": "Pįpęľįʼnę",
|
||||
"live-status": "Ŝŧäŧūş",
|
||||
"manage-dashboards": "ßřőŵşę",
|
||||
"new-dashboard": "Ńęŵ đäşĥþőäřđ",
|
||||
"new-folder": "Ńęŵ ƒőľđęř",
|
||||
"org-settings": "Přęƒęřęʼnčęş",
|
||||
"playlists": "Pľäyľįşŧş",
|
||||
"plugins": "Pľūģįʼnş",
|
||||
"profile/password": "Cĥäʼnģę päşşŵőřđ",
|
||||
"profile/settings": "Přęƒęřęʼnčęş",
|
||||
"service-accounts": "Ŝęřvįčę äččőūʼnŧş",
|
||||
"sign-out": "Ŝįģʼn őūŧ",
|
||||
"snapshots": "Ŝʼnäpşĥőŧş",
|
||||
"starred": "Ŝŧäřřęđ",
|
||||
"starred-empty": "Ÿőūř şŧäřřęđ đäşĥþőäřđş ŵįľľ äppęäř ĥęřę",
|
||||
"teams": "Ŧęämş",
|
||||
"users": "Ůşęřş"
|
||||
},
|
||||
"navigation": {
|
||||
"kiosk": {
|
||||
"tv-alert": "Přęşş ĒŜC ŧő ęχįŧ ĸįőşĸ mőđę"
|
||||
}
|
||||
},
|
||||
"panel": {
|
||||
"header-menu": {
|
||||
"inspect": "Ĩʼnşpęčŧ",
|
||||
"inspect-data": "Đäŧä",
|
||||
"inspect-json": "Päʼnęľ ĴŜØŃ",
|
||||
"more": "Mőřę...",
|
||||
"share": "Ŝĥäřę",
|
||||
"view": "Vįęŵ"
|
||||
}
|
||||
},
|
||||
"share-modal": {
|
||||
"dashboard": {
|
||||
"title": "Ŝĥäřę"
|
||||
},
|
||||
"embed": {
|
||||
"copy": "Cőpy ŧő čľįpþőäřđ",
|
||||
"html": "Ēmþęđ ĦŦMĿ",
|
||||
"html-description": "Ŧĥę ĦŦMĿ čőđę þęľőŵ čäʼn þę päşŧęđ äʼnđ įʼnčľūđęđ įʼn äʼnőŧĥęř ŵęþ päģę. Ůʼnľęşş äʼnőʼnymőūş äččęşş įş ęʼnäþľęđ, ŧĥę ūşęř vįęŵįʼnģ ŧĥäŧ päģę ʼnęęđ ŧő þę şįģʼnęđ įʼnŧő Ğřäƒäʼnä ƒőř ŧĥę ģřäpĥ ŧő ľőäđ.",
|
||||
"info": "Ğęʼnęřäŧę ĦŦMĿ ƒőř ęmþęđđįʼnģ äʼn įƒřämę ŵįŧĥ ŧĥįş päʼnęľ.",
|
||||
"time-range": "Cūřřęʼnŧ ŧįmę řäʼnģę",
|
||||
"time-range-description": "Ŧřäʼnşƒőřmş ŧĥę čūřřęʼnŧ řęľäŧįvę ŧįmę řäʼnģę ŧő äʼn äþşőľūŧę ŧįmę řäʼnģę"
|
||||
},
|
||||
"export": {
|
||||
"cancel-button": "Cäʼnčęľ",
|
||||
"info-text": "Ēχpőřŧ ŧĥįş đäşĥþőäřđ.",
|
||||
"save-button": "Ŝävę ŧő ƒįľę",
|
||||
"share-default-label": "Ēχpőřŧ ŵįŧĥ đęƒäūľŧ väľūęş řęmővęđ",
|
||||
"share-externally-label": "Ēχpőřŧ ƒőř şĥäřįʼnģ ęχŧęřʼnäľľy",
|
||||
"view-button": "Vįęŵ ĴŜØŃ"
|
||||
},
|
||||
"library": {
|
||||
"info": "Cřęäŧę ľįþřäřy päʼnęľ."
|
||||
},
|
||||
"link": {
|
||||
"copy-link-button": "Cőpy",
|
||||
"info-text": "Cřęäŧę ä đįřęčŧ ľįʼnĸ ŧő ŧĥįş đäşĥþőäřđ őř päʼnęľ, čūşŧőmįžęđ ŵįŧĥ ŧĥę őpŧįőʼnş þęľőŵ.",
|
||||
"link-url": "Ŀįʼnĸ ŮŖĿ",
|
||||
"render-alert": "Ĩmäģę řęʼnđęřęř pľūģįʼn ʼnőŧ įʼnşŧäľľęđ",
|
||||
"render-instructions": "Ŧő řęʼnđęř ä päʼnęľ įmäģę, yőū mūşŧ įʼnşŧäľľ ŧĥę&ʼnþşp;<1>Ğřäƒäʼnä įmäģę řęʼnđęřęř pľūģįʼn</1>. Pľęäşę čőʼnŧäčŧ yőūř Ğřäƒäʼnä äđmįʼnįşŧřäŧőř ŧő įʼnşŧäľľ ŧĥę pľūģįʼn.",
|
||||
"rendered-image": "Đįřęčŧ ľįʼnĸ řęʼnđęřęđ įmäģę",
|
||||
"save-alert": "Đäşĥþőäřđ įş ʼnőŧ şävęđ",
|
||||
"save-dashboard": "Ŧő řęʼnđęř ä päʼnęľ įmäģę, yőū mūşŧ şävę ŧĥę đäşĥþőäřđ ƒįřşŧ.",
|
||||
"shorten-url": "Ŝĥőřŧęʼn ŮŖĿ",
|
||||
"time-range-description": "Ŧřäʼnşƒőřmş ŧĥę čūřřęʼnŧ řęľäŧįvę ŧįmę řäʼnģę ŧő äʼn äþşőľūŧę ŧįmę řäʼnģę",
|
||||
"time-range-label": "Ŀőčĸ ŧįmę řäʼnģę"
|
||||
},
|
||||
"panel": {
|
||||
"title": "Ŝĥäřę Päʼnęľ"
|
||||
},
|
||||
"snapshot": {
|
||||
"cancel-button": "Cäʼnčęľ",
|
||||
"copy-link-button": "Cőpy",
|
||||
"delete-button": "Đęľęŧę şʼnäpşĥőŧ.",
|
||||
"deleted-message": "Ŧĥę şʼnäpşĥőŧ ĥäş þęęʼn đęľęŧęđ. Ĩƒ yőū ĥävę äľřęäđy äččęşşęđ įŧ őʼnčę, ŧĥęʼn įŧ mįģĥŧ ŧäĸę ūp ŧő äʼn ĥőūř þęƒőřę þęƒőřę įŧ įş řęmővęđ ƒřőm þřőŵşęř čäčĥęş őř CĐŃ čäčĥęş.",
|
||||
"expire": "Ēχpįřę",
|
||||
"expire-day": "1 Đäy",
|
||||
"expire-hour": "1 Ħőūř",
|
||||
"expire-never": "Ńęvęř",
|
||||
"expire-week": "7 Đäyş",
|
||||
"info-text-1": "Å şʼnäpşĥőŧ įş äʼn įʼnşŧäʼnŧ ŵäy ŧő şĥäřę äʼn įʼnŧęřäčŧįvę đäşĥþőäřđ pūþľįčľy. Ŵĥęʼn čřęäŧęđ, ŵę şŧřįp şęʼnşįŧįvę đäŧä ľįĸę qūęřįęş (męŧřįč, ŧęmpľäŧę, äʼnđ äʼnʼnőŧäŧįőʼn) äʼnđ päʼnęľ ľįʼnĸş, ľęävįʼnģ őʼnľy ŧĥę vįşįþľę męŧřįč đäŧä äʼnđ şęřįęş ʼnämęş ęmþęđđęđ įʼn yőūř đäşĥþőäřđ.",
|
||||
"info-text-2": "Ķęęp įʼn mįʼnđ, yőūř şʼnäpşĥőŧ <1>čäʼn þę vįęŵęđ þy äʼnyőʼnę</1> ŧĥäŧ ĥäş ŧĥę ľįʼnĸ äʼnđ čäʼn äččęşş ŧĥę ŮŖĿ. Ŝĥäřę ŵįşęľy.",
|
||||
"local-button": "Ŀőčäľ Ŝʼnäpşĥőŧ",
|
||||
"mistake-message": "Đįđ yőū mäĸę ä mįşŧäĸę? ",
|
||||
"name": "Ŝʼnäpşĥőŧ ʼnämę",
|
||||
"timeout": "Ŧįmęőūŧ (şęčőʼnđş)",
|
||||
"timeout-description": "Ÿőū mįģĥŧ ʼnęęđ ŧő čőʼnƒįģūřę ŧĥę ŧįmęőūŧ väľūę įƒ įŧ ŧäĸęş ä ľőʼnģ ŧįmę ŧő čőľľęčŧ yőūř đäşĥþőäřđ męŧřįčş."
|
||||
},
|
||||
"tab-title": {
|
||||
"embed": "Ēmþęđ",
|
||||
"export": "Ēχpőřŧ",
|
||||
"library-panel": "Ŀįþřäřy päʼnęľ",
|
||||
"link": "Ŀįʼnĸ",
|
||||
"snapshot": "Ŝʼnäpşĥőŧ"
|
||||
},
|
||||
"theme-picker": {
|
||||
"current": "Cūřřęʼnŧ",
|
||||
"dark": "Đäřĸ",
|
||||
"field-name": "Ŧĥęmę",
|
||||
"light": "Ŀįģĥŧ"
|
||||
}
|
||||
},
|
||||
"shared-dashboard": {
|
||||
"fields": {
|
||||
"timezone-label": "Ŧįmęžőʼnę"
|
||||
}
|
||||
},
|
||||
"shared-preferences": {
|
||||
"fields": {
|
||||
"home-dashboard-label": "Ħőmę Đäşĥþőäřđ",
|
||||
"home-dashboard-placeholder": "Đęƒäūľŧ đäşĥþőäřđ",
|
||||
"locale-label": "Ŀäʼnģūäģę",
|
||||
"locale-placeholder": "Cĥőőşę ľäʼnģūäģę",
|
||||
"theme-label": "ŮĨ Ŧĥęmę",
|
||||
"week-start-label": "Ŵęęĸ şŧäřŧ"
|
||||
},
|
||||
"theme": {
|
||||
"dark-label": "Đäřĸ",
|
||||
"default-label": "Đęƒäūľŧ",
|
||||
"light-label": "Ŀįģĥŧ"
|
||||
},
|
||||
"title": "Přęƒęřęʼnčęş"
|
||||
},
|
||||
"time-picker": {
|
||||
"absolute": {
|
||||
"recent-title": "Ŗęčęʼnŧľy ūşęđ äþşőľūŧę řäʼnģęş",
|
||||
"title": "Åþşőľūŧę ŧįmę řäʼnģę"
|
||||
}
|
||||
},
|
||||
"user-orgs": {
|
||||
"current-org-button": "Cūřřęʼnŧ",
|
||||
"name-column": "Ńämę",
|
||||
"role-column": "Ŗőľę",
|
||||
"select-org-button": "Ŝęľęčŧ őřģäʼnįşäŧįőʼn",
|
||||
"title": "Øřģäʼnįžäŧįőʼnş"
|
||||
},
|
||||
"user-profile": {
|
||||
"fields": {
|
||||
"email-error": "Ēmäįľ įş řęqūįřęđ",
|
||||
"email-label": "Ēmäįľ",
|
||||
"name-error": "Ńämę įş řęqūįřęđ",
|
||||
"name-label": "Ńämę",
|
||||
"username-label": "Ůşęřʼnämę"
|
||||
},
|
||||
"title": "Ēđįŧ přőƒįľę"
|
||||
},
|
||||
"user-session": {
|
||||
"browser-column": "ßřőŵşęř &ämp; ØŜ",
|
||||
"created-at-column": "Ŀőģģęđ őʼn",
|
||||
"ip-column": "ĨP äđđřęşş",
|
||||
"revoke": "Ŗęvőĸę ūşęř şęşşįőʼn",
|
||||
"seen-at-column": "Ŀäşŧ şęęʼn"
|
||||
},
|
||||
"user-sessions": {
|
||||
"loading": "Ŀőäđįʼnģ şęşşįőʼnş..."
|
||||
}
|
||||
}
|
@ -1,824 +0,0 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"POT-Creation-Date: 2022-01-10 10:42+0000\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: @lingui/cli\n"
|
||||
"Language: pseudo-LOCALE\n"
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
# Don't edit this file manually - translations must be managed within Crowdin
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "common.locale.default"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "common.locale.en"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "common.locale.es"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "common.locale.fr"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
msgid "common.save"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.data-options"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.dataframe-aria-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.dataframe-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataTab.tsx
|
||||
msgid "dashboard.inspect-data.download-csv"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.download-excel-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.download-excel-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataTab.tsx
|
||||
msgid "dashboard.inspect-data.download-logs"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataTab.tsx
|
||||
msgid "dashboard.inspect-data.download-service"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataTab.tsx
|
||||
msgid "dashboard.inspect-data.download-traces"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.excel-header"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.formatted"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.formatted-data-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.formatted-data-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.panel-transforms"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.series-to-columns"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataTab.tsx
|
||||
msgid "dashboard.inspect-data.transformation"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.transformations-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectDataOptions.tsx
|
||||
msgid "dashboard.inspect-data.transformations-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectJSONTab.tsx
|
||||
msgid "dashboard.inspect-json.dataframe-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectJSONTab.tsx
|
||||
msgid "dashboard.inspect-json.dataframe-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectJSONTab.tsx
|
||||
msgid "dashboard.inspect-json.panel-data-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectJSONTab.tsx
|
||||
msgid "dashboard.inspect-json.panel-data-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectJSONTab.tsx
|
||||
msgid "dashboard.inspect-json.panel-json-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectJSONTab.tsx
|
||||
msgid "dashboard.inspect-json.panel-json-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectJSONTab.tsx
|
||||
msgid "dashboard.inspect-json.select-source"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectJSONTab.tsx
|
||||
msgid "dashboard.inspect-json.unknown"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectMetadataTab.tsx
|
||||
msgid "dashboard.inspect-meta.no-inspector"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectStatsTab.tsx
|
||||
msgid "dashboard.inspect-stats.data-title"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectStatsTab.tsx
|
||||
msgid "dashboard.inspect-stats.processing-time"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectStatsTab.tsx
|
||||
msgid "dashboard.inspect-stats.queries"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectStatsTab.tsx
|
||||
msgid "dashboard.inspect-stats.request-time"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectStatsTab.tsx
|
||||
msgid "dashboard.inspect-stats.rows"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/inspector/InspectStatsTab.tsx
|
||||
msgid "dashboard.inspect-stats.table-title"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/Inspector/hooks.ts
|
||||
msgid "dashboard.inspect.actions-tab"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/Inspector/hooks.ts
|
||||
msgid "dashboard.inspect.data-tab"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/Inspector/hooks.ts
|
||||
msgid "dashboard.inspect.error-tab"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/Inspector/hooks.ts
|
||||
msgid "dashboard.inspect.json-tab"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/Inspector/hooks.ts
|
||||
msgid "dashboard.inspect.meta-tab"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/Inspector/hooks.ts
|
||||
msgid "dashboard.inspect.query-tab"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/Inspector/hooks.ts
|
||||
msgid "dashboard.inspect.stats-tab"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/Inspector/InspectContent.tsx
|
||||
msgid "dashboard.inspect.subtitle"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/Inspector/InspectContent.tsx
|
||||
msgid "dashboard.inspect.title"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
|
||||
msgid "dashboard.refresh-picker.off-arialabel"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
|
||||
msgid "dashboard.refresh-picker.off-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
|
||||
msgid "dashboard.refresh-picker.off-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
|
||||
msgid "dashboard.refresh-picker.on-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.add-panel"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.comments-show"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.mark-favorite"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.open-original"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.playlist-next"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.playlist-previous"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.playlist-stop"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx
|
||||
msgid "dashboard.toolbar.refresh"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.save"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.settings"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.share"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.tv-button"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/DashNav/DashNav.tsx
|
||||
msgid "dashboard.toolbar.unmark-favorite"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/Select/FolderPicker.tsx
|
||||
msgid "folder-picker.loading"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/library-panels/components/AddLibraryPanelModal/AddLibraryPanelModal.tsx
|
||||
msgid "library-panel.add-modal.cancel"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/library-panels/components/AddLibraryPanelModal/AddLibraryPanelModal.tsx
|
||||
msgid "library-panel.add-modal.create"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/library-panels/components/AddLibraryPanelModal/AddLibraryPanelModal.tsx
|
||||
msgid "library-panel.add-modal.error"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/library-panels/components/AddLibraryPanelModal/AddLibraryPanelModal.tsx
|
||||
msgid "library-panel.add-modal.folder"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/library-panels/components/AddLibraryPanelModal/AddLibraryPanelModal.tsx
|
||||
msgid "library-panel.add-modal.folder-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/library-panels/components/AddLibraryPanelModal/AddLibraryPanelModal.tsx
|
||||
msgid "library-panel.add-modal.name"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/library-panels/utils/usePanelSave.ts
|
||||
msgid "library-panels.save.error"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/library-panels/utils/usePanelSave.ts
|
||||
msgid "library-panels.save.success"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.alerting"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.alerting-admin"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.alerting-am-routes"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.alerting-channels"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.alerting-groups"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.alerting-legacy"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.alerting-list"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.alerting-receivers"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.alerting-silences"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.api-keys"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.config"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.create"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.create-alert"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.create-dashboard"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.create-folder"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.create-import"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.dashboards"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.datasources"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.explore"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.help"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.home"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.library-panels"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.live"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.live-cloud"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.live-pipeline"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.live-status"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.manage-dashboards"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.new-dashboard"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.new-folder"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.org-settings"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.playlists"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.plugins"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.profile/password"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.profile/settings"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.service-accounts"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.sign-out"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.snapshots"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.starred"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.starred-empty"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.teams"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/NavBar/navBarItem-translations.ts
|
||||
msgid "nav.users"
|
||||
msgstr "<<<<<<< HEAD"
|
||||
|
||||
#: public/app/core/navigation/kiosk.ts
|
||||
msgid "navigation.kiosk.tv-alert"
|
||||
msgstr ">>>>>>> main"
|
||||
|
||||
#: public/app/features/dashboard/utils/getPanelMenu.ts
|
||||
msgid "panel.header-menu.inspect"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/utils/getPanelMenu.ts
|
||||
msgid "panel.header-menu.inspect-data"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/utils/getPanelMenu.ts
|
||||
msgid "panel.header-menu.inspect-json"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/utils/getPanelMenu.ts
|
||||
msgid "panel.header-menu.more"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/plugins/panel/graph/module.ts
|
||||
msgid "panel.header-menu.more-toggle"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/utils/getPanelMenu.ts
|
||||
msgid "panel.header-menu.share"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/utils/getPanelMenu.ts
|
||||
msgid "panel.header-menu.view"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareModal.tsx
|
||||
msgid "share-modal.dashboard.title"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareEmbed.tsx
|
||||
msgid "share-modal.embed.copy"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareEmbed.tsx
|
||||
msgid "share-modal.embed.html"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareEmbed.tsx
|
||||
msgid "share-modal.embed.html-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareEmbed.tsx
|
||||
msgid "share-modal.embed.info"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareEmbed.tsx
|
||||
msgid "share-modal.embed.time-range"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareEmbed.tsx
|
||||
msgid "share-modal.embed.time-range-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareExport.tsx
|
||||
msgid "share-modal.export.cancel-button"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareExport.tsx
|
||||
msgid "share-modal.export.info-text"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareExport.tsx
|
||||
msgid "share-modal.export.save-button"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareExport.tsx
|
||||
msgid "share-modal.export.share-default-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareExport.tsx
|
||||
msgid "share-modal.export.share-externally-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareExport.tsx
|
||||
msgid "share-modal.export.view-button"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLibraryPanel.tsx
|
||||
msgid "share-modal.library.info"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.copy-link-button"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.info-text"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.link-url"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.render-alert"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.render-instructions"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.rendered-image"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.save-alert"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.save-dashboard"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.shorten-url"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.time-range-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareLink.tsx
|
||||
msgid "share-modal.link.time-range-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareModal.tsx
|
||||
msgid "share-modal.panel.title"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.cancel-button"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.copy-link-button"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.delete-button"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.deleted-message"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.expire"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.expire-day"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.expire-hour"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.expire-never"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.expire-week"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.info-text-1"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.info-text-2"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.local-button"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.mistake-message"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.name"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.timeout"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx
|
||||
msgid "share-modal.snapshot.timeout-description"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareModal.tsx
|
||||
msgid "share-modal.tab-title.embed"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareModal.tsx
|
||||
msgid "share-modal.tab-title.export"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareModal.tsx
|
||||
msgid "share-modal.tab-title.library-panel"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareModal.tsx
|
||||
msgid "share-modal.tab-title.link"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ShareModal.tsx
|
||||
msgid "share-modal.tab-title.snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ThemePicker.tsx
|
||||
msgid "share-modal.theme-picker.current"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ThemePicker.tsx
|
||||
msgid "share-modal.theme-picker.dark"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ThemePicker.tsx
|
||||
msgid "share-modal.theme-picker.field-name"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/dashboard/components/ShareModal/ThemePicker.tsx
|
||||
msgid "share-modal.theme-picker.light"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-dashboard.fields.timezone-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.fields.home-dashboard-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.fields.home-dashboard-placeholder"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.fields.locale-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.fields.locale-placeholder"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.fields.theme-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.fields.week-start-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.theme.dark-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.theme.default-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.theme.light-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/core/components/SharedPreferences/SharedPreferences.tsx
|
||||
msgid "shared-preferences.title"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserOrganizations.tsx
|
||||
msgid "user-orgs.current-org-button"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserOrganizations.tsx
|
||||
msgid "user-orgs.name-column"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserOrganizations.tsx
|
||||
msgid "user-orgs.role-column"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserOrganizations.tsx
|
||||
msgid "user-orgs.select-org-button"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserOrganizations.tsx
|
||||
msgid "user-orgs.title"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
msgid "user-profile.fields.email-error"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
msgid "user-profile.fields.email-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
msgid "user-profile.fields.name-error"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
msgid "user-profile.fields.name-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
msgid "user-profile.fields.username-label"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserProfileEditForm.tsx
|
||||
msgid "user-profile.title"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserSessions.tsx
|
||||
msgid "user-session.browser-column"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserSessions.tsx
|
||||
msgid "user-session.created-at-column"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserSessions.tsx
|
||||
msgid "user-session.ip-column"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserSessions.tsx
|
||||
msgid "user-session.revoke"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserSessions.tsx
|
||||
msgid "user-session.seen-at-column"
|
||||
msgstr ""
|
||||
|
||||
#: public/app/features/profile/UserSessions.tsx
|
||||
msgid "user-sessions.loading"
|
||||
msgstr ""
|
17
public/locales/psuedo.js
Normal file
17
public/locales/psuedo.js
Normal file
@ -0,0 +1,17 @@
|
||||
const fs = require('fs/promises');
|
||||
const pseudoizer = require('pseudoizer');
|
||||
|
||||
function pseudoizeJsonReplacer(key, value) {
|
||||
if (typeof value === 'string') {
|
||||
return pseudoizer.pseudoize(value);
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
fs.readFile('./public/locales/en-US/grafana.json').then((enJson) => {
|
||||
const enMessages = JSON.parse(enJson);
|
||||
const pseudoJson = JSON.stringify(enMessages, pseudoizeJsonReplacer, 2);
|
||||
|
||||
return fs.writeFile('./public/locales/pseudo-LOCALE/grafana.json', pseudoJson);
|
||||
});
|
@ -1,9 +1,7 @@
|
||||
import React from 'react';
|
||||
|
||||
import { I18nProvider } from '../../app/core/internationalization';
|
||||
|
||||
const TestProvider: React.FC = ({ children }) => {
|
||||
return <I18nProvider>{children}</I18nProvider>;
|
||||
return <>{children}</>;
|
||||
};
|
||||
|
||||
export default TestProvider;
|
||||
|
@ -1,28 +0,0 @@
|
||||
import { MessageDescriptor } from '@lingui/core';
|
||||
import { Trans as OriginalTrans } from '@lingui/macro';
|
||||
import React from 'react';
|
||||
|
||||
export const Trans: typeof OriginalTrans = ({ id, children }) => {
|
||||
return <>{children ?? id}</>;
|
||||
};
|
||||
|
||||
export const Plural: React.FC = () => {
|
||||
throw new Error('Plural mock not implemented yet');
|
||||
};
|
||||
|
||||
export const Select: React.FC = () => {
|
||||
throw new Error('Select mock not implemented yet');
|
||||
};
|
||||
|
||||
export const SelectOrdinal: React.FC = () => {
|
||||
throw new Error('SelectOrdinal mock not implemented yet');
|
||||
};
|
||||
|
||||
export const t = (msg: string | { message: string }) => {
|
||||
return typeof msg === 'string' ? msg : msg.message;
|
||||
};
|
||||
|
||||
export const defineMessage = (descriptor: MessageDescriptor) => {
|
||||
// We return the message as the ID so we can assert on the plain english value
|
||||
return { ...descriptor, id: descriptor.message };
|
||||
};
|
@ -1,5 +1,7 @@
|
||||
import '@testing-library/jest-dom';
|
||||
import i18next from 'i18next';
|
||||
import failOnConsole from 'jest-fail-on-console';
|
||||
import { initReactI18next } from 'react-i18next';
|
||||
|
||||
import { matchers } from './matchers';
|
||||
|
||||
@ -7,3 +9,9 @@ failOnConsole({
|
||||
shouldFailOnLog: true,
|
||||
});
|
||||
expect.extend(matchers);
|
||||
|
||||
i18next.use(initReactI18next).init({
|
||||
resources: {},
|
||||
returnEmptyString: false,
|
||||
lng: 'en-US', // this should be the locale of the phrases in our source JSX
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user