mirror of
https://github.com/grafana/grafana.git
synced 2025-12-18 22:16:21 -05:00
Chore: Replace deprecated i18next-parser (#112512)
* chore: replace deprecated i18next-parser * chore: bump i18next-cli to 1.11.6 * chore: revert translation files * chore: bumps to i18next-cli 1.11.9 * Trigger build * chore: revert translations files * chore: bump i18next-cli * chore: changes after yarn i18n-extract * chore: revert translation files * chore: bump i18next-cli to 1.11.12 * chore: fix select space * chore: add i18next to packages * chore: add i18next-cli to plugin dev deps * chore: fix yarn lock
This commit is contained in:
parent
f76a4885ec
commit
4f2abe185c
32 changed files with 878 additions and 275 deletions
4
.github/CODEOWNERS
vendored
4
.github/CODEOWNERS
vendored
|
|
@ -413,8 +413,8 @@
|
|||
|
||||
/crowdin.yml @grafana/grafana-frontend-platform
|
||||
/public/locales/ @grafanabot
|
||||
/public/locales/i18next-parser.config.cjs @grafana/grafana-frontend-platform
|
||||
/public/locales/i18next-parser-enterprise.config.cjs @grafana/grafana-frontend-platform
|
||||
i18next.config.ts @grafana/grafana-frontend-platform
|
||||
/public/locales/enterprise/i18next.config.ts @grafana/grafana-frontend-platform
|
||||
/public/app/core/internationalization/ @grafana/grafana-frontend-platform
|
||||
/e2e/ @grafana/grafana-frontend-platform
|
||||
/e2e-playwright/cloud-plugins-suite/ @grafana/partner-datasources
|
||||
|
|
|
|||
6
Makefile
6
Makefile
|
|
@ -135,14 +135,14 @@ i18n-extract-enterprise:
|
|||
@echo "Skipping i18n extract for Enterprise: not enabled"
|
||||
else
|
||||
i18n-extract-enterprise:
|
||||
@echo "Extracting i18n strings for Enterprise"
|
||||
yarn run i18next --config public/locales/i18next-parser-enterprise.config.cjs
|
||||
@echo "Extracting i18n strings for Enterprise"
|
||||
cd public/locales/enterprise && yarn run i18next-cli extract --sync-primary
|
||||
endif
|
||||
|
||||
.PHONY: i18n-extract
|
||||
i18n-extract: i18n-extract-enterprise
|
||||
@echo "Extracting i18n strings for OSS"
|
||||
yarn run i18next --config public/locales/i18next-parser.config.cjs
|
||||
yarn run i18next-cli extract --sync-primary
|
||||
@echo "Extracting i18n strings for packages"
|
||||
yarn run packages:i18n-extract
|
||||
@echo "Extracting i18n strings for plugins"
|
||||
|
|
|
|||
13
i18next.config.ts
Normal file
13
i18next.config.ts
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
import { defineConfig } from 'i18next-cli';
|
||||
|
||||
export default defineConfig({
|
||||
locales: ['en-US'], // Only en-US is updated - Crowdin will PR with other languages
|
||||
extract: {
|
||||
ignore: ['public/lib/monaco/**/*', 'public/app/extensions/**/*', 'public/app/plugins/datasource/**/*'],
|
||||
input: ['public/**/*.{tsx,ts}', 'packages/grafana-ui/**/*.{tsx,ts}', 'packages/grafana-data/**/*.{tsx,ts}'],
|
||||
output: 'public/locales/{{language}}/{{namespace}}.json',
|
||||
defaultNS: 'grafana',
|
||||
functions: ['t', '*.t'],
|
||||
transComponents: ['Trans'],
|
||||
},
|
||||
});
|
||||
|
|
@ -210,7 +210,7 @@
|
|||
"html-loader": "5.1.0",
|
||||
"html-webpack-plugin": "5.6.3",
|
||||
"http-server": "14.1.1",
|
||||
"i18next-parser": "9.3.0",
|
||||
"i18next-cli": "1.11.12",
|
||||
"ini": "^5.0.0",
|
||||
"jest": "29.7.0",
|
||||
"jest-canvas-mock": "2.5.2",
|
||||
|
|
|
|||
12
packages/grafana-alerting/i18next.config.ts
Normal file
12
packages/grafana-alerting/i18next.config.ts
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
import { defineConfig } from 'i18next-cli';
|
||||
|
||||
export default defineConfig({
|
||||
locales: ['en-US'], // Only en-US is updated - Crowdin will PR with other languages
|
||||
extract: {
|
||||
input: ['src/**/*.{tsx,ts}'],
|
||||
output: 'src/locales/{{language}}/{{namespace}}.json',
|
||||
defaultNS: 'grafana-alerting',
|
||||
functions: ['t', '*.t'],
|
||||
transComponents: ['Trans'],
|
||||
},
|
||||
});
|
||||
|
|
@ -59,7 +59,7 @@
|
|||
"codegen": "rtk-query-codegen-openapi ./scripts/codegen.ts",
|
||||
"prepack": "cp package.json package.json.bak && ALIAS_PACKAGE_NAME=testing,unstable node ../../scripts/prepare-npm-package.js",
|
||||
"postpack": "mv package.json.bak package.json && rimraf ./unstable ./testing",
|
||||
"i18n-extract": "i18next --config src/locales/i18next-parser.config.cjs"
|
||||
"i18n-extract": "i18next-cli extract --sync-primary"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@grafana/test-utils": "workspace:*",
|
||||
|
|
@ -72,6 +72,7 @@
|
|||
"@types/react-dom": "18.3.5",
|
||||
"@types/tinycolor2": "^1",
|
||||
"i18next": "^25.5.2",
|
||||
"i18next-cli": "1.11.12",
|
||||
"react": "18.3.1",
|
||||
"react-dom": "18.3.1",
|
||||
"react-redux": "^9.2.0",
|
||||
|
|
|
|||
|
|
@ -1,12 +0,0 @@
|
|||
module.exports = {
|
||||
locales: ['en-US'], // Only en-US is updated - Crowdin will PR with other languages
|
||||
sort: true,
|
||||
createOldCatalogs: false,
|
||||
failOnWarnings: true,
|
||||
verbose: false,
|
||||
resetDefaultValueLocale: 'en-US', // Updates extracted values when they change in code
|
||||
|
||||
defaultNamespace: 'grafana-alerting',
|
||||
input: ['../**/*.{tsx,ts}'],
|
||||
output: './src/locales/$LOCALE/$NAMESPACE.json',
|
||||
};
|
||||
12
packages/grafana-prometheus/i18next.config.ts
Normal file
12
packages/grafana-prometheus/i18next.config.ts
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
import { defineConfig } from 'i18next-cli';
|
||||
|
||||
export default defineConfig({
|
||||
locales: ['en-US'], // Only en-US is updated - Crowdin will PR with other languages
|
||||
extract: {
|
||||
input: ['src/**/*.{tsx,ts}'],
|
||||
output: 'src/locales/{{language}}/{{namespace}}.json',
|
||||
defaultNS: 'grafana-prometheus',
|
||||
functions: ['t', '*.t'],
|
||||
transComponents: ['Trans'],
|
||||
},
|
||||
});
|
||||
|
|
@ -33,7 +33,7 @@
|
|||
"build": "tsc -p ./tsconfig.build.json && rollup -c rollup.config.ts --configPlugin esbuild",
|
||||
"bundle": "rollup -c rollup.config.ts --configPlugin esbuild",
|
||||
"clean": "rimraf ./dist ./compiled ./package.tgz",
|
||||
"i18n-extract": "i18next --config src/locales/i18next-parser.config.cjs",
|
||||
"i18n-extract": "i18next-cli extract --sync-primary",
|
||||
"typecheck": "tsc --emitDeclarationOnly false --noEmit",
|
||||
"prepack": "cp package.json package.json.bak && node ../../scripts/prepare-npm-package.js",
|
||||
"postpack": "mv package.json.bak package.json"
|
||||
|
|
@ -91,7 +91,7 @@
|
|||
"@types/pluralize": "^0.0.33",
|
||||
"@types/prismjs": "1.26.5",
|
||||
"esbuild": "0.25.8",
|
||||
"i18next-parser": "9.3.0",
|
||||
"i18next-cli": "1.11.12",
|
||||
"jest": "29.7.0",
|
||||
"jest-environment-jsdom": "29.7.0",
|
||||
"react": "18.3.1",
|
||||
|
|
|
|||
|
|
@ -85,9 +85,9 @@
|
|||
"tooltip-classic-query": "The original implementation of the Prometheus variable query editor. Enter a string with the correct query type and parameters as described in these docs. For example, {{exampleQuery}}.",
|
||||
"tooltip-label": "Returns a list of label values for the label name in all metrics unless the metric is specified.",
|
||||
"tooltip-metric-regex": "Returns a list of label names, optionally filtering by specified metric regex.",
|
||||
"tooltip-query": "Returns a list of Prometheus query results for the query. This can include Prometheus functions, i.e.{{exampleQuery}}.",
|
||||
"tooltip-query": "Returns a list of Prometheus query results for the query. This can include Prometheus functions, i.e. {{exampleQuery}}.",
|
||||
"tooltip-query-type": "The Prometheus data source plugin provides the following query types for template variables.",
|
||||
"tooltip-series-query": "Enter a metric with labels, only a metric or only labels, i.e.{{example1}}, {{example2}}, or {{example3}}. Returns a list of time series associated with the entered data."
|
||||
"tooltip-series-query": "Enter a metric with labels, only a metric or only labels, i.e. {{example1}}, {{example2}}, or {{example3}}. Returns a list of time series associated with the entered data."
|
||||
},
|
||||
"selector-actions": {
|
||||
"aria-label-selector": "selector",
|
||||
|
|
@ -175,16 +175,16 @@
|
|||
"label-scrape-interval": "Scrape interval",
|
||||
"label-series-limit": "Series limit",
|
||||
"label-use-series-endpoint": "Use series endpoint",
|
||||
"more-info": "For more information on configuring prometheus type and version in data sources, see the <2>provisioning documentation</2>.",
|
||||
"more-info": "For more information on configuring prometheus type and version in data sources, see the <2>provisioning documentation</2> .",
|
||||
"placeholder-example-maxsourceresolutionmtimeout": "Example: {{example}}",
|
||||
"title-interval-behaviour": "Interval behaviour",
|
||||
"title-other": "Other",
|
||||
"title-performance": "Performance",
|
||||
"title-query-editor": "Query editor",
|
||||
"tooltip-cache-level": "Sets the browser caching level for editor queries. Higher cache settings are recommended for high cardinality data sources.",
|
||||
"tooltip-custom-query-parameters": "Add custom parameters to the Prometheus query URL. For example {{example1}}, {{example2}}, {{example3}}, or{{example4}}. Multiple parameters should be concatenated together with {{concatenationChar}}.",
|
||||
"tooltip-custom-query-parameters": "Add custom parameters to the Prometheus query URL. For example {{example1}}, {{example2}}, {{example3}}, or {{example4}}. Multiple parameters should be concatenated together with {{concatenationChar}}.",
|
||||
"tooltip-default-editor": "Set default editor option for all users of this data source.",
|
||||
"tooltip-disable-metrics-lookup": "Checking this option will disable the metrics chooser and metric/label support in the query field's autocomplete. This helps if you have performance issues with bigger Prometheus instances. ",
|
||||
"tooltip-disable-metrics-lookup": "Checking this option will disable the metrics chooser and metric/label support in the query field's autocomplete. This helps if you have performance issues with bigger Prometheus instances.",
|
||||
"tooltip-disable-recording-rules-beta": "This feature will disable recording rules. Turn this on to improve dashboard performance",
|
||||
"tooltip-http-method": "You can use either POST or GET HTTP method to query your Prometheus data source. POST is the recommended method as it allows bigger queries. Change this to GET if you have a Prometheus version older than 2.1 or if POST requests are restricted in your network.",
|
||||
"tooltip-incremental-querying-beta": "This feature will change the default behavior of relative queries to always request fresh data from the prometheus instance, instead query results will be cached, and only new records are requested. Turn this on to decrease database and network load.",
|
||||
|
|
@ -479,7 +479,7 @@
|
|||
"aria-label-selector": "selector"
|
||||
},
|
||||
"results-table": {
|
||||
"content-descriptive-type": "When creating a {{descriptiveType}}, Prometheus exposes multiple series with the type counter. ",
|
||||
"content-descriptive-type": "When creating a {{descriptiveType}}, Prometheus exposes multiple series with the type counter.",
|
||||
"description": "Description",
|
||||
"message-expand-label-filters": "There are no metrics found. Try to expand your label filters.",
|
||||
"message-expand-search": "There are no metrics found. Try to expand your search and filters.",
|
||||
|
|
|
|||
|
|
@ -1,12 +0,0 @@
|
|||
module.exports = {
|
||||
locales: ['en-US'], // Only en-US is updated - Crowdin will PR with other languages
|
||||
sort: true,
|
||||
createOldCatalogs: false,
|
||||
failOnWarnings: true,
|
||||
verbose: false,
|
||||
resetDefaultValueLocale: 'en-US', // Updates extracted values when they change in code
|
||||
|
||||
defaultNamespace: 'grafana-prometheus',
|
||||
input: ['../**/*.{tsx,ts}'],
|
||||
output: './src/locales/$LOCALE/$NAMESPACE.json',
|
||||
};
|
||||
12
packages/grafana-sql/i18next.config.ts
Normal file
12
packages/grafana-sql/i18next.config.ts
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
import { defineConfig } from 'i18next-cli';
|
||||
|
||||
export default defineConfig({
|
||||
locales: ['en-US'], // Only en-US is updated - Crowdin will PR with other languages
|
||||
extract: {
|
||||
input: ['src/**/*.{tsx,ts}'],
|
||||
output: 'src/locales/{{language}}/{{namespace}}.json',
|
||||
defaultNS: 'grafana-sql',
|
||||
functions: ['t', '*.t'],
|
||||
transComponents: ['Trans'],
|
||||
},
|
||||
});
|
||||
|
|
@ -12,7 +12,7 @@
|
|||
"main": "src/index.ts",
|
||||
"scripts": {
|
||||
"typecheck": "tsc --emitDeclarationOnly false --noEmit",
|
||||
"i18n-extract": "i18next --config src/locales/i18next-parser.config.cjs"
|
||||
"i18n-extract": "i18next-cli extract --sync-primary"
|
||||
},
|
||||
"dependencies": {
|
||||
"@emotion/css": "11.13.5",
|
||||
|
|
@ -48,7 +48,7 @@
|
|||
"@types/react-virtualized-auto-sizer": "1.0.8",
|
||||
"@types/systemjs": "6.15.3",
|
||||
"@types/uuid": "10.0.0",
|
||||
"i18next-parser": "9.3.0",
|
||||
"i18next-cli": "1.11.12",
|
||||
"jest": "^29.6.4",
|
||||
"ts-jest": "29.4.0",
|
||||
"ts-node": "10.9.2",
|
||||
|
|
|
|||
|
|
@ -11,10 +11,10 @@
|
|||
},
|
||||
"connection-limits": {
|
||||
"auto-max-idle": "Auto max idle",
|
||||
"content-auto-max-idle": "If enabled, automatically set the number of <1>Maximum idle connections</1> to the same value as<3> Max open connections</3>. If the number of maximum open connections is not set it will be set to the default ({{defaultMaxIdle}}).",
|
||||
"content-max-idle": "The maximum number of connections in the idle connection pool.If <1>Max open connections</1> is greater than 0 but less than the <3>Max idle connections</3>, then the <5>Max idle connections</5> will be reduced to match the <8>Max open connections</8> limit. If set to 0, no idle connections are retained.",
|
||||
"content-auto-max-idle": "If enabled, automatically set the number of <i>Maximum idle connections</i> to the same value as <i> Max open connections</i>. If the number of maximum open connections is not set it will be set to the default ({{defaultMaxIdle}}).",
|
||||
"content-max-idle": "The maximum number of connections in the idle connection pool.If <i>Max open connections</i> is greater than 0 but less than the <i>Max idle connections</i>, then the <i>Max idle connections</i> will be reduced to match the <i>Max open connections</i> limit. If set to 0, no idle connections are retained.",
|
||||
"content-max-lifetime": "The maximum amount of time in seconds a connection may be reused. If set to 0, connections are reused forever.",
|
||||
"content-max-open": "The maximum number of open connections to the database. If <1>Max idle connections</1> is greater than 0 and the <3>Max open connections</3> is less than <5>Max idle connections</5>, then<7>Max idle connections</7> will be reduced to match the <9>Max open connections</9> limit. If set to 0, there is no limit on the number of open connections.",
|
||||
"content-max-open": "The maximum number of open connections to the database. If <i>Max idle connections</i> is greater than 0 and the <i>Max open connections</i> is less than <i>Max idle connections</i>, then <i>Max idle connections</i> will be reduced to match the <i>Max open connections</i> limit. If set to 0, there is no limit on the number of open connections.",
|
||||
"max-idle": "Max idle",
|
||||
"max-lifetime": "Max lifetime",
|
||||
"max-open": "Max open",
|
||||
|
|
@ -54,7 +54,7 @@
|
|||
}
|
||||
},
|
||||
"query-header": {
|
||||
"content-invalid-query": "Your query is invalid. Check below for details. <1></1>However, you can still run this query.",
|
||||
"content-invalid-query": "Your query is invalid. Check below for details. <br/>However, you can still run this query.",
|
||||
"editor-modes": {
|
||||
"label-builder": "Builder",
|
||||
"label-code": "Code"
|
||||
|
|
@ -76,7 +76,7 @@
|
|||
"tooltip-format-query": "Format query"
|
||||
},
|
||||
"query-validator": {
|
||||
"query-will-process": "<0></0> This query will process <2>{{bytes}}</2> when run.",
|
||||
"query-will-process": "<0></0> This query will process <strong>{{bytes}}</strong> when run.",
|
||||
"validating-query": "Validating query..."
|
||||
},
|
||||
"raw-editor": {
|
||||
|
|
|
|||
|
|
@ -1,12 +0,0 @@
|
|||
module.exports = {
|
||||
locales: ['en-US'], // Only en-US is updated - Crowdin will PR with other languages
|
||||
sort: true,
|
||||
createOldCatalogs: false,
|
||||
failOnWarnings: true,
|
||||
verbose: false,
|
||||
resetDefaultValueLocale: 'en-US', // Updates extracted values when they change in code
|
||||
|
||||
defaultNamespace: 'grafana-sql',
|
||||
input: ['../**/*.{tsx,ts}'],
|
||||
output: './src/locales/$LOCALE/$NAMESPACE.json',
|
||||
};
|
||||
|
|
@ -245,8 +245,8 @@ const ToggleAllOption = ({
|
|||
innerProps: {},
|
||||
children: (
|
||||
<>
|
||||
<Trans i18nKey="select.select-menu.selected-count">Selected </Trans>
|
||||
{`(${selectedCount ?? 0})`}
|
||||
<Trans i18nKey="select.select-menu.selected-count">Selected</Trans>
|
||||
{` (${selectedCount ?? 0})`}
|
||||
</>
|
||||
),
|
||||
})}
|
||||
|
|
|
|||
|
|
@ -88,9 +88,10 @@ export class UnThemedTableInputCSV extends PureComponent<Props, State> {
|
|||
return (
|
||||
<span key={index}>
|
||||
<Trans i18nKey="grafana-ui.table.csv-counts">
|
||||
Rows:{{ rows }}, Columns:{{ columns }}
|
||||
<Icon name="check-circle" />
|
||||
Rows:{{ rows }}, Columns:{{ columns }}
|
||||
</Trans>
|
||||
|
||||
<Icon name="check-circle" />
|
||||
</span>
|
||||
);
|
||||
})}
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ export function AlertRuleInstances({ ruleUID, depth = 0 }: AlertRuleInstancesPro
|
|||
depth={depth}
|
||||
>
|
||||
<div>
|
||||
<Trans i18nKey="alerting.triage.no-instances-found">No alert instances found for rule: {ruleUID}</Trans>
|
||||
<Trans i18nKey="alerting.triage.no-instances-found">No alert instances found for rule: {{ ruleUID }}</Trans>
|
||||
</div>
|
||||
</GenericRow>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -176,7 +176,7 @@ function LibraryElementInfo({ data }: { data: ResourceTableItem }) {
|
|||
</Text>
|
||||
|
||||
<Text color="secondary">
|
||||
<Trans i18nKey="migrate-to-cloud.resource-table.error-library-element-sub">Library Element {uid}</Trans>
|
||||
<Trans i18nKey="migrate-to-cloud.resource-table.error-library-element-sub">Library Element {{ uid }}</Trans>
|
||||
</Text>
|
||||
</>
|
||||
);
|
||||
|
|
|
|||
12
public/app/plugins/datasource/azuremonitor/i18next.config.ts
Normal file
12
public/app/plugins/datasource/azuremonitor/i18next.config.ts
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
import { defineConfig } from 'i18next-cli';
|
||||
|
||||
export default defineConfig({
|
||||
locales: ['en-US'], // Only en-US is updated - Crowdin will PR with other languages
|
||||
extract: {
|
||||
input: ['**/*.{tsx,ts}'],
|
||||
output: 'locales/{{language}}/{{namespace}}.json',
|
||||
defaultNS: 'grafana-azure-monitor-datasource',
|
||||
functions: ['t', '*.t'],
|
||||
transComponents: ['Trans'],
|
||||
},
|
||||
});
|
||||
|
|
@ -13,11 +13,11 @@
|
|||
"label-resource-group": "Resource Group",
|
||||
"label-resource-name": "Resource Name",
|
||||
"label-resource-number": "Resource {{resourceNum}}",
|
||||
"label-resource-uri": "Resource URI(s) ",
|
||||
"label-resource-uri": "Resource URI(s)",
|
||||
"label-subscription": "Subscription",
|
||||
"placeholder-resource-name": "name",
|
||||
"tooltip-region": "The code region of the resource. Optional for one resource but mandatory when selecting multiple ones.",
|
||||
"tooltip-resource-uri": "Manually edit the <2>resource uri</2>. Supports the use of multiple template variables (ex: /subscriptions/$subId/resourceGroups/$rg)"
|
||||
"tooltip-resource-uri": "Manually edit the <2>resource uri</2> . Supports the use of multiple template variables (ex: /subscriptions/$subId/resourceGroups/$rg)"
|
||||
},
|
||||
"aggregate-item": {
|
||||
"aria-label-aggregate-function": "Aggregate function",
|
||||
|
|
@ -68,7 +68,7 @@
|
|||
},
|
||||
"basic-logs-toggle": {
|
||||
"aria-label-enable-basic-logs": "Basic Logs",
|
||||
"description-basic-logs": "Enabling this feature incurs Azure Monitor per-query costs on dashboard panels that query tables configured for <2>Basic Logs</2>.",
|
||||
"description-basic-logs": "Enabling this feature incurs Azure Monitor per-query costs on dashboard panels that query tables configured for <2>Basic Logs</2> .",
|
||||
"label-enable-basic-logs": "Enable Basic Logs"
|
||||
},
|
||||
"config-editor": {
|
||||
|
|
|
|||
|
|
@ -1,12 +0,0 @@
|
|||
module.exports = {
|
||||
locales: ['en-US'], // Only en-US is updated - Crowdin will PR with other languages
|
||||
sort: true,
|
||||
createOldCatalogs: false,
|
||||
failOnWarnings: true,
|
||||
verbose: false,
|
||||
resetDefaultValueLocale: 'en-US', // Updates extracted values when they change in code
|
||||
|
||||
defaultNamespace: 'grafana-azure-monitor-datasource',
|
||||
input: ['../**/*.{tsx,ts}'],
|
||||
output: './locales/$LOCALE/$NAMESPACE.json',
|
||||
};
|
||||
|
|
@ -38,7 +38,7 @@
|
|||
"@types/prismjs": "1.26.5",
|
||||
"@types/react": "18.3.18",
|
||||
"@types/react-dom": "18.3.5",
|
||||
"i18next-parser": "9.3.0",
|
||||
"i18next-cli": "1.11.12",
|
||||
"jest": "29.7.0",
|
||||
"react-select-event": "5.5.1",
|
||||
"ts-node": "10.9.2",
|
||||
|
|
@ -52,7 +52,7 @@
|
|||
"build": "NODE_OPTIONS='--experimental-strip-types --no-warnings=ExperimentalWarning' webpack -c ./webpack.config.ts --env production",
|
||||
"build:commit": "NODE_OPTIONS='--experimental-strip-types --no-warnings=ExperimentalWarning' webpack -c ./webpack.config.ts --env production --env commit=$(git rev-parse --short HEAD)",
|
||||
"dev": "NODE_OPTIONS='--experimental-strip-types --no-warnings=ExperimentalWarning' webpack -w -c ./webpack.config.ts --env development",
|
||||
"i18n-extract": "i18next --config locales/i18next-parser.config.cjs",
|
||||
"i18n-extract": "i18next-cli extract --sync-primary",
|
||||
"test": "jest --watch --onlyChanged",
|
||||
"test:ci": "jest --maxWorkers 4"
|
||||
},
|
||||
|
|
|
|||
12
public/app/plugins/datasource/mssql/i18next.config.ts
Normal file
12
public/app/plugins/datasource/mssql/i18next.config.ts
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
import { defineConfig } from 'i18next-cli';
|
||||
|
||||
export default defineConfig({
|
||||
locales: ['en-US'], // Only en-US is updated - Crowdin will PR with other languages
|
||||
extract: {
|
||||
input: ['**/*.{tsx,ts}'],
|
||||
output: 'locales/{{language}}/{{namespace}}.json',
|
||||
defaultNS: 'mssql',
|
||||
functions: ['t', '*.t'],
|
||||
transComponents: ['Trans'],
|
||||
},
|
||||
});
|
||||
|
|
@ -41,7 +41,7 @@
|
|||
"fillvalue": "by setting fillvalue Grafana will fill in missing values according to the interval. fillvalue can be either a literal value, {{null}} or {{previous}}; {{previous}} will fill in the previous seen value or {{null}} if none has been seen yet",
|
||||
"macros": "Macros:",
|
||||
"optional": "Optional:",
|
||||
"optional-tip": "return column named <1>{{columnName}}</1> to represent the series name.",
|
||||
"optional-tip": "return column named <i>{{columnName}}</i> to represent the series name.",
|
||||
"optional-tip-2": "If multiple value columns are returned the {{columnName}} column is used as prefix.",
|
||||
"optional-tip-3": "If no column named {{columnName}} is found the column name of the value column is used as series name",
|
||||
"resultsets-time-sorted": "Resultsets of time series queries need to be sorted by time.",
|
||||
|
|
@ -56,20 +56,20 @@
|
|||
"configuration-editor": {
|
||||
"body-user-permission": "The database user should only be granted {{permissionType}} permissions on the specified database and tables you want to query. Grafana does not validate that queries are safe so queries can contain any SQL statement. For example, statements like <3>{{example1}}</3> and <5>{{example2}}</5> would be executed. To protect against this we <7>highly</7> recommend you create a specific MS SQL user with restricted permissions. Check out the <10>Microsoft SQL Server Data Source Docs</10> for more information.",
|
||||
"description-additional-settings": "Additional settings are optional settings that can be configured for more control over your data source. This includes connection limits, connection timeout, group-by time interval, and Secure Socks Proxy.",
|
||||
"description-auth-type-azure-auth": "<0>Azure Authentication</0> Securely authenticate and access Azure resources and applications using Azure AD credentials - Managed Service Identity and Client Secret Credentials are supported.",
|
||||
"description-auth-type-credential-cache": "<0>Windows AD: Credential cache</0> Windows Active Directory - Sign on for domain user via credential cache.",
|
||||
"description-auth-type-credential-cache-file": "<0>Windows AD: Credential cache file</0> Windows Active Directory - Sign on for domain user via credential cache file.",
|
||||
"description-auth-type-keytab": "<0>Windows AD: Keytab</0> Windows Active Directory - Sign on for domain user via keytab file.",
|
||||
"description-auth-type-sql-server": "<0>SQL Server Authentication</0> This is the default mechanism to connect to MS SQL Server. Enter the SQL Server Authentication login or the Windows Authentication login in the DOMAIN\\User format.",
|
||||
"description-auth-type-username-password": "<0>Windows AD: Username + password</0> Windows Active Directory - Sign on for domain user via username/password.",
|
||||
"description-auth-type-windows-auth": "<0>Windows Authentication</0> Windows Integrated Security - single sign on for users who are already logged onto Windows and have enabled this option for MS SQL Server.",
|
||||
"description-auth-type-azure-auth": "<i>Azure Authentication</i> Securely authenticate and access Azure resources and applications using Azure AD credentials - Managed Service Identity and Client Secret Credentials are supported.",
|
||||
"description-auth-type-credential-cache": "<i>Windows AD: Credential cache</i> Windows Active Directory - Sign on for domain user via credential cache.",
|
||||
"description-auth-type-credential-cache-file": "<i>Windows AD: Credential cache file</i> Windows Active Directory - Sign on for domain user via credential cache file.",
|
||||
"description-auth-type-keytab": "<i>Windows AD: Keytab</i> Windows Active Directory - Sign on for domain user via keytab file.",
|
||||
"description-auth-type-sql-server": "<i>SQL Server Authentication</i> This is the default mechanism to connect to MS SQL Server. Enter the SQL Server Authentication login or the Windows Authentication login in the DOMAIN\\User format.",
|
||||
"description-auth-type-username-password": "<i>Windows AD: Username + password</i> Windows Active Directory - Sign on for domain user via username/password.",
|
||||
"description-auth-type-windows-auth": "<i>Windows Authentication</i> Windows Integrated Security - single sign on for users who are already logged onto Windows and have enabled this option for MS SQL Server.",
|
||||
"description-connection-timeout": "The number of seconds to wait before canceling the request when connecting to the database. The default is <1>{{defaultTimeout}}</1>, meaning no timeout.",
|
||||
"description-encrypt": "Determines whether or to which extent a secure SSL TCP/IP connection will be negotiated with the server.",
|
||||
"description-encrypt-disable": "<0>{{encryptionValue}}</0> - Data sent between client and server is not encrypted.",
|
||||
"description-encrypt-false": "<0>{{encryptionValue}}</0> - Data sent between client and server is not encrypted beyond the login packet. (default)",
|
||||
"description-encrypt-disable": "<i>{{encryptionValue}}</i> - Data sent between client and server is not encrypted.",
|
||||
"description-encrypt-false": "<i>{{encryptionValue}}</i> - Data sent between client and server is not encrypted beyond the login packet. (default)",
|
||||
"description-encrypt-older-version": "If you're using an older version of Microsoft SQL Server like 2008 and 2008R2 you may need to disable encryption to be able to connect.",
|
||||
"description-encrypt-true": "<0>{{encryptionValue}}</0> - Data sent between client and server is encrypted.",
|
||||
"description-min-interval": "A lower limit for the auto group by time interval. Recommended to be set to write frequency, for example<1>{{exampleInterval}}</1> if your data is written every minute.",
|
||||
"description-encrypt-true": "<i>{{encryptionValue}}</i> - Data sent between client and server is encrypted.",
|
||||
"description-min-interval": "A lower limit for the auto group by time interval. Recommended to be set to write frequency, for example <1>{{exampleInterval}}</1> if your data is written every minute.",
|
||||
"description-tls-cert": "Path to file containing the public key certificate of the CA that signed the SQL Server certificate. Needed when the server certificate is self signed.",
|
||||
"label-auth-settings": "Azure Authentication Settings",
|
||||
"label-auth-type": "Authentication Type",
|
||||
|
|
@ -104,7 +104,7 @@
|
|||
},
|
||||
"kerberos-advanced-settings": {
|
||||
"description-dns-lookup-kdc": "Indicate whether DNS `SRV` records should be used to locate the KDCs and other servers for a realm. The default is <1>{{default}}</1>.",
|
||||
"description-krb5-config-file-path": "The path to the configuration file for the <2>MIT krb5 package</2>. The default is <4>{{default}}</4>.",
|
||||
"description-krb5-config-file-path": "The path to the configuration file for the <2>MIT krb5 package</2> . The default is <4>{{default}}</4>.",
|
||||
"description-udp-preference-limit": "The default is <1>{{default}}</1> and means always use TCP and is optional.",
|
||||
"label-dns-lookup-kdc": "DNS Lookup KDC",
|
||||
"label-krb5-config-file-path": "krb5 config file path",
|
||||
|
|
|
|||
|
|
@ -1,12 +0,0 @@
|
|||
module.exports = {
|
||||
locales: ['en-US'], // Only en-US is updated - Crowdin will PR with other languages
|
||||
sort: true,
|
||||
createOldCatalogs: false,
|
||||
failOnWarnings: true,
|
||||
verbose: false,
|
||||
resetDefaultValueLocale: 'en-US', // Updates extracted values when they change in code
|
||||
|
||||
defaultNamespace: 'mssql',
|
||||
input: ['../**/*.{tsx,ts}'],
|
||||
output: './locales/$LOCALE/$NAMESPACE.json',
|
||||
};
|
||||
|
|
@ -26,7 +26,7 @@
|
|||
"@types/lodash": "4.17.20",
|
||||
"@types/node": "22.17.0",
|
||||
"@types/react": "18.3.18",
|
||||
"i18next-parser": "9.3.0",
|
||||
"i18next-cli": "1.11.12",
|
||||
"ts-node": "10.9.2",
|
||||
"typescript": "5.9.2",
|
||||
"webpack": "5.101.0"
|
||||
|
|
@ -38,7 +38,7 @@
|
|||
"build": "NODE_OPTIONS='--experimental-strip-types --no-warnings=ExperimentalWarning' webpack -c ./webpack.config.ts --env production",
|
||||
"build:commit": "NODE_OPTIONS='--experimental-strip-types --no-warnings=ExperimentalWarning' webpack -c ./webpack.config.ts --env production --env commit=$(git rev-parse --short HEAD)",
|
||||
"dev": "NODE_OPTIONS='--experimental-strip-types --no-warnings=ExperimentalWarning' webpack -w -c ./webpack.config.ts --env development",
|
||||
"i18n-extract": "i18next --config locales/i18next-parser.config.cjs"
|
||||
"i18n-extract": "i18next-cli extract --sync-primary"
|
||||
},
|
||||
"packageManager": "yarn@4.10.3"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -108,7 +108,7 @@
|
|||
"dismiss": "Dismiss",
|
||||
"heading": "Enterprise authentication",
|
||||
"learn-more-link": "Learn more",
|
||||
"text": "Manage users, teams, and permissions automatically with <1>SAML</1>, <3>SCIM</3>, <6>LDAP</6>, and <8>RBAC</8> — available in Grafana Cloud and Enterprise."
|
||||
"text": "Manage users, teams, and permissions automatically with <strong>SAML</strong>, <strong>SCIM</strong>, <strong>LDAP</strong>, and <strong>RBAC</strong> — available in Grafana Cloud and Enterprise."
|
||||
},
|
||||
"feature-listing": {
|
||||
"title-auditing": "Auditing",
|
||||
|
|
@ -209,7 +209,7 @@
|
|||
"title-delete": "Delete"
|
||||
},
|
||||
"orgs": {
|
||||
"delete-body": "Are you sure you want to delete '{{deleteOrgName}}'?<3></3> <5>All dashboards for this organization will be removed!</5>",
|
||||
"delete-body": "Are you sure you want to delete '{{deleteOrgName}}'?<br/><5>All dashboards for this organization will be removed!</5>",
|
||||
"id-header": "ID",
|
||||
"name-header": "Name",
|
||||
"new-org-button": "New org"
|
||||
|
|
@ -719,6 +719,7 @@
|
|||
"title-annotations": "Annotations"
|
||||
},
|
||||
"link-dashboard-and-panel": "Link dashboard and panel",
|
||||
"placeholder-value-input": "Enter a {{key}}...",
|
||||
"placeholder-value-input-default": "Enter custom annotation content..."
|
||||
},
|
||||
"bulk-actions": {
|
||||
|
|
@ -1144,7 +1145,7 @@
|
|||
"title-something-wrong-trying-fetch-group-details": "Something went wrong when trying to fetch group details"
|
||||
},
|
||||
"evaluation-interval-limit-exceeded": {
|
||||
"body-minimum-interval": "A minimum evaluation interval of <1>{{minInterval}}</1> has been configured in Grafana.<3></3>Please contact the administrator to configure a lower interval.",
|
||||
"body-minimum-interval": "A minimum evaluation interval of <strong>{{minInterval}}</strong> has been configured in Grafana.<br/>Please contact the administrator to configure a lower interval.",
|
||||
"title-global-evaluation-interval-limit-exceeded": "Global evaluation interval limit exceeded"
|
||||
},
|
||||
"existing-rule-editor": {
|
||||
|
|
@ -1292,7 +1293,7 @@
|
|||
"resolved": "Resolved"
|
||||
}
|
||||
},
|
||||
"review-alert-payload": " Review alert data to add to the payload:",
|
||||
"review-alert-payload": "Review alert data to add to the payload:",
|
||||
"title-add-custom-alerts": "Add custom alerts"
|
||||
},
|
||||
"get-alert-suggestions": {
|
||||
|
|
@ -1416,7 +1417,7 @@
|
|||
"title-add-folder-and-labels": "Add folder and labels"
|
||||
},
|
||||
"grafana-managed-rule-type": {
|
||||
"description": "Supports multiple data sources of any kind.<1></1>Transform data with expressions."
|
||||
"description": "Supports multiple data sources of any kind.<br/>Transform data with expressions."
|
||||
},
|
||||
"grafana-modify-export": {
|
||||
"body-invalid-rule-id": "The rule UID in the page URL is invalid. Please check the URL and try again.",
|
||||
|
|
@ -1853,7 +1854,7 @@
|
|||
"aria-label-new": "new"
|
||||
},
|
||||
"mimir-flavored-type": {
|
||||
"description": "Use a Mimir, Loki or Cortex datasource.<1></1>Expressions are not supported."
|
||||
"description": "Use a Mimir, Loki or Cortex datasource.<br/>Expressions are not supported."
|
||||
},
|
||||
"min-interval-option": {
|
||||
"label-interval": "Interval",
|
||||
|
|
@ -2082,7 +2083,7 @@
|
|||
"warning-1": "Deleting this notification policy will permanently remove it.",
|
||||
"warning-2": "Are you sure you want to delete this policy?"
|
||||
},
|
||||
"filter-description": "Filter notification policies by using a comma separated list of matchers, e.g.:<1>severity=critical, region=EMEA</1>",
|
||||
"filter-description": "Filter notification policies by using a comma separated list of matchers, e.g.: <1>severity=critical, region=EMEA</1>",
|
||||
"generated-policies": "Auto-generated policies",
|
||||
"matchers": "Matchers",
|
||||
"metadata": {
|
||||
|
|
@ -2128,7 +2129,8 @@
|
|||
"conflict": "The notification policy tree has been updated by another user.",
|
||||
"error-code": "Error message: \"{{error}}\"",
|
||||
"routes": {
|
||||
"conflictingMatchers": "Cannot add or update route: matchers conflict with an external routing tree if we merged matchers {{-matchers}}. This would make the route unreachable."
|
||||
"conflictingMatchers": "Cannot add or update route: matchers conflict with an external routing tree if we merged matchers {{-matchers}}. This would make the route unreachable.",
|
||||
"unknownMatchers": "<unknown matchers>"
|
||||
},
|
||||
"suffix": "Please refresh the page and try again.",
|
||||
"title": "Failed to add or update notification policy"
|
||||
|
|
@ -2244,7 +2246,7 @@
|
|||
"error-no-query-editor": "Could not load query editor due to: {{errorMessage}}"
|
||||
},
|
||||
"recording-rule-type": {
|
||||
"description": "Precompute expressions.<1></1>Should be combined with an alert rule."
|
||||
"description": "Precompute expressions.<br/>Should be combined with an alert rule."
|
||||
},
|
||||
"recording-rules": {
|
||||
"description-target-data-source": "The Prometheus data source to store recording rules in",
|
||||
|
|
@ -2257,7 +2259,7 @@
|
|||
},
|
||||
"redirect-to-clone-rule": {
|
||||
"body-evaluation-group": "You will need to set a new evaluation group for the copied rule because the original one has been provisioned and cannot be used for rules created in the UI.",
|
||||
"body-not-provisioned": "The new rule will <1>not</1> be marked as a provisioned rule.",
|
||||
"body-not-provisioned": "The new rule will <strong>not</strong> be marked as a provisioned rule.",
|
||||
"confirmText-copy": "Copy",
|
||||
"title-copy-provisioned-alert-rule": "Copy provisioned alert rule"
|
||||
},
|
||||
|
|
@ -2292,13 +2294,13 @@
|
|||
"routing-settings": {
|
||||
"aria-label-group-by": "Group by",
|
||||
"description-group-by": "Combine multiple alerts into a single notification by grouping them by the same label values. If empty, it is inherited from the default notification policy.",
|
||||
"group-interval": "Group interval: <1>{{groupIntervalValue}}</1>",
|
||||
"group-wait": "Group wait: <1>{{groupWaitValue}}</1>",
|
||||
"grouping": "Grouping: <1>{{fields}}</1>",
|
||||
"group-interval": "Group interval: <strong>{{groupIntervalValue}}</strong>",
|
||||
"group-wait": "Group wait: <strong>{{groupWaitValue}}</strong>",
|
||||
"grouping": "Grouping: <strong>{{fields}}</strong>",
|
||||
"label-group-by": "Group by",
|
||||
"label-override-grouping": "Override grouping",
|
||||
"label-override-timings": "Override timings",
|
||||
"repeat-interval": "Repeat interval: <1>{{repeatIntervalValue}}</1>"
|
||||
"repeat-interval": "Repeat interval: <strong>{{repeatIntervalValue}}</strong>"
|
||||
},
|
||||
"rule-actions-buttons": {
|
||||
"title-edit": "Edit",
|
||||
|
|
@ -2554,7 +2556,7 @@
|
|||
"relative-with-to": "<0>{{from}}</0> to <2>{{to}}</2>"
|
||||
},
|
||||
"rule-type-picker": {
|
||||
"grafana-managed": "Select “Grafana managed” unless you have a Mimir, Loki or Cortex data source with the Ruler API enabled."
|
||||
"grafana-managed": "Select “Grafana managed” unless you have a Mimir, Loki or Cortex data source with the Ruler API enabled."
|
||||
},
|
||||
"rule-view": {
|
||||
"query": {
|
||||
|
|
@ -2887,7 +2889,7 @@
|
|||
"test-contact-point-modal": {
|
||||
"custom-notification-message": "You will send a test notification that uses the annotations defined below. This is a good option if you use custom templates and messages.",
|
||||
"notification-message": "Notification message",
|
||||
"predefined-notification-message": "You will send a test notification that uses a predefined alert. If you have defined a custom template or message, for better results switch to <1>custom</1> notification message, from above.",
|
||||
"predefined-notification-message": "You will send a test notification that uses a predefined alert. If you have defined a custom template or message, for better results switch to <strong>custom</strong> notification message, from above.",
|
||||
"send-test-notification": "Send test notification",
|
||||
"title-test-contact-point": "Test contact point"
|
||||
},
|
||||
|
|
@ -2896,7 +2898,7 @@
|
|||
},
|
||||
"threshold-expression-viewer": {
|
||||
"input": "Input",
|
||||
"stop-alerting-when": "Stop alerting (or pending state) when "
|
||||
"stop-alerting-when": "Stop alerting (or pending state) when"
|
||||
},
|
||||
"time-interval": {
|
||||
"add-time-interval": "Add time interval",
|
||||
|
|
@ -2949,7 +2951,7 @@
|
|||
"error-loading-rule": "Error loading rule",
|
||||
"firing-instances-count": "{{firingCount}} firing instances",
|
||||
"instance-details": "Instance Details",
|
||||
"no-instances-found": "No alert instances found for rule: {ruleUID}",
|
||||
"no-instances-found": "No alert instances found for rule: {{ruleUID}}",
|
||||
"no-labels": "No labels",
|
||||
"open-in-sidebar": "Open in sidebar",
|
||||
"open-rule-details": "Open rule details",
|
||||
|
|
@ -3084,7 +3086,7 @@
|
|||
"title-notification-policies": "Notification policies"
|
||||
},
|
||||
"yaml-content-info": {
|
||||
"body": "The YAML content in the editor only contains alert rule configuration <1></1>To configure Prometheus, you need to provide the rest of the <4>configuration file content.</4>"
|
||||
"body": "The YAML content in the editor only contains alert rule configuration <br/>To configure Prometheus, you need to provide the rest of the <4>configuration file content.</4>"
|
||||
}
|
||||
},
|
||||
"alertlist": {
|
||||
|
|
@ -3160,7 +3162,7 @@
|
|||
"no-annotations-found": "No annotations found"
|
||||
},
|
||||
"annotation-list-item": {
|
||||
"tooltip-created-by": "Created by:<1></1> {{email}}"
|
||||
"tooltip-created-by": "Created by:<br/>{{email}}"
|
||||
},
|
||||
"category-annotation-query": "Annotation query",
|
||||
"category-display": "Display",
|
||||
|
|
@ -3198,7 +3200,7 @@
|
|||
},
|
||||
"empty-state": {
|
||||
"button-title": "Add annotation query",
|
||||
"info-box-content": "<0>Annotations provide a way to integrate event data into your graphs. They are visualized as vertical lines and icons on all graph panels. When you hover over an annotation icon you can get event text & tags for the event. You can add annotation events directly from grafana by holding CTRL or CMD + click on graph (or drag region). These will be stored in Grafana's annotation database.</0>",
|
||||
"info-box-content": "<p> Annotations provide a way to integrate event data into your graphs. They are visualized as vertical lines and icons on all graph panels. When you hover over an annotation icon you can get event text & tags for the event. You can add annotation events directly from grafana by holding CTRL or CMD + click on graph (or drag region). These will be stored in Grafana's annotation database. </p>",
|
||||
"info-box-content-2": "Checkout the <2>Annotations documentation</2> for more information.",
|
||||
"title": "There are no custom annotation queries added yet"
|
||||
},
|
||||
|
|
@ -3236,7 +3238,7 @@
|
|||
"auth-settings": "Auth settings"
|
||||
},
|
||||
"auth-drawer-unconneced": {
|
||||
"subtitle": "Configure auth settings. Find out more in our <2>documentation</2>."
|
||||
"subtitle": "Configure auth settings. Find out more in our <2>documentation</2> ."
|
||||
},
|
||||
"auth-drawer-unconnected": {
|
||||
"advanced-auth": "Advanced Auth",
|
||||
|
|
@ -3270,7 +3272,7 @@
|
|||
"allowed-organizations-description": "List of comma- or space-separated organizations. The user should be a member \nof at least one organization to log in.",
|
||||
"allowed-organizations-label": "Allowed organizations",
|
||||
"allowed-organizations-placeholder": "Enter organizations (my-team, myteam...) and press Enter to add",
|
||||
"api-url-description": "The user information endpoint of your OAuth2 provider. Information returned by this endpoint must be compatible with <2>OpenID UserInfo</2>.",
|
||||
"api-url-description": "The user information endpoint of your OAuth2 provider. Information returned by this endpoint must be compatible with <2>OpenID UserInfo</2> .",
|
||||
"api-url-required": "This field must be a valid URL if set.",
|
||||
"auth-style-description": "It determines how \"{{ clientIDLabel }}\" and \"{{ clientSecretLabel }}\" are sent to Oauth2 provider. Default is AutoDetect.",
|
||||
"auth-style-label": "Auth style",
|
||||
|
|
@ -3415,7 +3417,7 @@
|
|||
}
|
||||
},
|
||||
"auth-config-auth-config-page-unconnected": {
|
||||
"subtitle": "Manage your auth settings and configure single sign-on. Find out more in our <2>documentation</2>."
|
||||
"subtitle": "Manage your auth settings and configure single sign-on. Find out more in our <2>documentation</2> ."
|
||||
},
|
||||
"bar-chart": {
|
||||
"warn": {
|
||||
|
|
@ -4133,7 +4135,7 @@
|
|||
},
|
||||
"scopes": {
|
||||
"apply-selected-scopes": "Apply",
|
||||
"selected-scopes-label": "Scopes: "
|
||||
"selected-scopes-label": "Scopes:"
|
||||
},
|
||||
"search-box": {
|
||||
"placeholder": "Search or jump to..."
|
||||
|
|
@ -4275,7 +4277,7 @@
|
|||
"okay": "Okay"
|
||||
},
|
||||
"not-found-datasource": {
|
||||
"body": "Maybe you mistyped the URL or the plugin with the id <1></1> is unavailable.<3></3>To see a list of available datasources please <5>click here</5>."
|
||||
"body": "Maybe you mistyped the URL or the plugin with the id <1></1> is unavailable.<br/>To see a list of available datasources please <5>click here</5>."
|
||||
},
|
||||
"oss": {
|
||||
"connections-home-page": {
|
||||
|
|
@ -4318,8 +4320,8 @@
|
|||
"versionHistory": {
|
||||
"comparison": {
|
||||
"header": {
|
||||
"hide-json-diff": "Hide JSON diff ",
|
||||
"show-json-diff": "Show JSON diff ",
|
||||
"hide-json-diff": "Hide JSON diff",
|
||||
"show-json-diff": "Show JSON diff",
|
||||
"text": "Version {{version}} updated by {{createdBy}} ({{ageString}}) {{message}}"
|
||||
},
|
||||
"select": "Select two versions to start comparing"
|
||||
|
|
@ -4346,7 +4348,7 @@
|
|||
"label-label": "Label",
|
||||
"label-placeholder": "e.g. Tempo traces",
|
||||
"label-required": "This field is required.",
|
||||
"sub-text": "<0>Define text that will describe the correlation.</0>",
|
||||
"sub-text": "<p>Define text that will describe the correlation.</p>",
|
||||
"title": "Define correlation label (Step 1 of 3)"
|
||||
},
|
||||
"configure-correlation-target-form": {
|
||||
|
|
@ -4390,7 +4392,7 @@
|
|||
},
|
||||
"source-form": {
|
||||
"control-required": "This field is required.",
|
||||
"description": "A data point needs to provide values to all variables as fields or as transformations output to make the correlation button appear in the visualization.<1></1>Note: Not every variable needs to be explicitly defined below. A transformation such as <4>logfmt</4> will create variables for every key/value pair.",
|
||||
"description": "A data point needs to provide values to all variables as fields or as transformations output to make the correlation button appear in the visualization.<br/>Note: Not every variable needs to be explicitly defined below. A transformation such as <4>logfmt</4> will create variables for every key/value pair.",
|
||||
"description-external-pre": "You have used following variables in the target URL:",
|
||||
"description-query-pre": "You have used following variables in the target query:",
|
||||
"external-title": "Configure the data source that will use the URL (Step 3 of 3)",
|
||||
|
|
@ -4402,12 +4404,12 @@
|
|||
"results-required": "This field is required.",
|
||||
"source-description": "Results from selected source data source have links displayed in the panel",
|
||||
"source-label": "Source",
|
||||
"sub-text": "<0>Define what data source will display the correlation, and what data will replace previously defined variables.</0>"
|
||||
"sub-text": "<p> Define what data source will display the correlation, and what data will replace previously defined variables. </p>"
|
||||
},
|
||||
"sub-title": "Define how data living in different data sources relates to each other. Read more in the <2>documentation</2>",
|
||||
"target-form": {
|
||||
"control-rules": "This field is required.",
|
||||
"sub-text": "<0>Define what the correlation will link to. With the query type, a query will run when the correlation is clicked. With the external type, clicking the correlation will open a URL.</0>",
|
||||
"sub-text": "<p> Define what the correlation will link to. With the query type, a query will run when the correlation is clicked. With the external type, clicking the correlation will open a URL. </p>",
|
||||
"target-description-external": "Specify the URL that will open when the link is clicked",
|
||||
"target-description-query": "Specify which data source is queried when the link is clicked",
|
||||
"target-label": "Target",
|
||||
|
|
@ -4614,7 +4616,7 @@
|
|||
}
|
||||
},
|
||||
"confirm-plugin-dashboard-save-modal": {
|
||||
"body-plugin-dashboard": "Your changes will be lost when you update the plugin.<1></1><2>Use <1>Save As</1> to create custom version.</2>",
|
||||
"body-plugin-dashboard": "Your changes will be lost when you update the plugin.<br/><2>Use <strong>Save As</strong> to create custom version.</2>",
|
||||
"cancel": "Cancel",
|
||||
"overwrite": "Overwrite",
|
||||
"title-plugin-dashboard": "Plugin dashboard"
|
||||
|
|
@ -4831,7 +4833,7 @@
|
|||
"add-visualization-body": "Select a data source and then query and visualize your data with charts, stats and tables or create lists, markdowns and other widgets.",
|
||||
"add-visualization-button": "Add visualization",
|
||||
"add-visualization-header": "Start your new dashboard by adding a visualization",
|
||||
"import-a-dashboard-body": "Import dashboards from files or <2>grafana.com</2>.",
|
||||
"import-a-dashboard-body": "Import dashboards from files or <2>grafana.com</2> .",
|
||||
"import-a-dashboard-header": "Import a dashboard",
|
||||
"import-dashboard-button": "Import dashboard",
|
||||
"show-less-dashboards": "Show less",
|
||||
|
|
@ -5289,8 +5291,8 @@
|
|||
"title-provisioned": "Provisioned dashboard"
|
||||
},
|
||||
"save-dashboard-error-proxy": {
|
||||
"body-name-exists": "A dashboard with the same name in selected folder already exists.<1></1><2>Would you still like to save this dashboard?</2>",
|
||||
"body-version-mismatch": "Someone else has updated this dashboard<1></1><2>Would you still like to save this dashboard?</2>",
|
||||
"body-name-exists": "A dashboard with the same name in selected folder already exists.<br/><2>Would you still like to save this dashboard?</2>",
|
||||
"body-version-mismatch": "Someone else has updated this dashboard<br/><2>Would you still like to save this dashboard?</2>",
|
||||
"confirmText-save-and-overwrite": "Save and overwrite",
|
||||
"title-name-exists": "Conflict",
|
||||
"title-version-mismatch": "Conflict"
|
||||
|
|
@ -5308,7 +5310,7 @@
|
|||
"cancel": "Cancel",
|
||||
"cannot-be-saved": "This dashboard cannot be saved from the Grafana UI because it has been provisioned from another source. Copy the JSON or save it to a file below, then you can update your dashboard in the provisioning source.",
|
||||
"copy-json-to-clipboard": "Copy JSON to clipboard",
|
||||
"file-path": "<0>File path:</0> {{filePath}}",
|
||||
"file-path": "<strong>File path:</strong> {{filePath}}",
|
||||
"save-json-to-file": "Save JSON to file",
|
||||
"see-docs": "See <2>documentation</2> for more information about provisioning."
|
||||
},
|
||||
|
|
@ -5507,7 +5509,7 @@
|
|||
"transformation-picker": {
|
||||
"info": "Transformations allow you to join, calculate, re-order, hide, and rename your query results before they are visualized.",
|
||||
"info-graph-not-suitable": "Many transforms are not suitable if you're using the Graph visualization, as it currently only supports time series data.",
|
||||
"info-switch-to-table": "It can help to switch to the Table visualization to understand what a transformation is doing. ",
|
||||
"info-switch-to-table": "It can help to switch to the Table visualization to understand what a transformation is doing.",
|
||||
"placeholder-search-for-transformation": "Search for transformation",
|
||||
"read-more": "Read more",
|
||||
"title-transformations": "Transformations"
|
||||
|
|
@ -5573,8 +5575,8 @@
|
|||
"version-history-comparison": {
|
||||
"button-restore": "Restore to version {{version}}",
|
||||
"label-view-json-diff": "View JSON diff",
|
||||
"new-updated-by": "<0>Version {{version}}</0> updated by {{editor}} {{timeAgo}}",
|
||||
"old-updated-by": "<0>Version {{version}}</0> updated by {{editor}} {{timeAgo}}"
|
||||
"new-updated-by": "<strong>Version {{version}}</strong> updated by {{editor}} {{timeAgo}}",
|
||||
"old-updated-by": "<strong>Version {{version}}</strong> updated by {{editor}} {{timeAgo}}"
|
||||
},
|
||||
"version-history-table": {
|
||||
"aria-label-toggle-selection": "Toggle selection of version {{version}}",
|
||||
|
|
@ -5974,7 +5976,7 @@
|
|||
"cancel": "Cancel"
|
||||
},
|
||||
"render-save-button-and-error": {
|
||||
"body-plugin-dashboard": "Your changes will be lost when you update the plugin. Use <1>Save as</1> to create custom version.",
|
||||
"body-plugin-dashboard": "Your changes will be lost when you update the plugin. Use <strong>Save as</strong> to create custom version.",
|
||||
"title-failed-to-save-dashboard": "Failed to save dashboard",
|
||||
"title-plugin-dashboard": "Plugin dashboard",
|
||||
"title-someone-else-has-updated-this-dashboard": "Someone else has updated this dashboard",
|
||||
|
|
@ -5983,7 +5985,7 @@
|
|||
"save-and-overwrite": "'Save and overwrite'"
|
||||
},
|
||||
"library-viz-panel-info": {
|
||||
"last-edited": "{{timeAgo}} by<person />",
|
||||
"last-edited": "{{timeAgo}} by <person />",
|
||||
"usage-count_one": "Used on {{count}} dashboards",
|
||||
"usage-count_other": "Used on {{count}} dashboards"
|
||||
},
|
||||
|
|
@ -6044,7 +6046,7 @@
|
|||
},
|
||||
"panel-data-queries-tab-rendered": {
|
||||
"add-query": "Add query",
|
||||
"expression": "Expression "
|
||||
"expression": "Expression"
|
||||
},
|
||||
"panel-data-transformations-tab": {
|
||||
"tab-label": "Transformations"
|
||||
|
|
@ -6102,7 +6104,7 @@
|
|||
"query": "Query"
|
||||
},
|
||||
"query-variable-editor-form": {
|
||||
"description-examples": "Named capture groups can be used to separate the display text and value (<1>see examples</1>).",
|
||||
"description-examples": "Named capture groups can be used to separate the display text and value ( <1>see examples</1> ).",
|
||||
"description-optional": "Optional, if you want to extract part of a series name or metric node segment.",
|
||||
"label-data-source": "Data source",
|
||||
"label-static-options-sort": "Static options sort",
|
||||
|
|
@ -6163,7 +6165,7 @@
|
|||
"label-message": "Message",
|
||||
"placeholder-describe-changes-optional": "Add a note to describe your changes (optional).",
|
||||
"render-footer": {
|
||||
"body-plugin-dashboard": "Your changes will be lost when you update the plugin. Use <1>Save as</1> to create custom version.",
|
||||
"body-plugin-dashboard": "Your changes will be lost when you update the plugin. Use <strong>Save as</strong> to create custom version.",
|
||||
"no-changes-to-save": "No changes to save",
|
||||
"title-failed-to-save-dashboard": "Failed to save dashboard",
|
||||
"title-plugin-dashboard": "Plugin dashboard",
|
||||
|
|
@ -6199,7 +6201,7 @@
|
|||
"cancel": "Cancel",
|
||||
"cannot-be-saved": "This dashboard cannot be saved from the Grafana UI because it has been provisioned from another source. Copy the JSON or save it to a file below, then you can update your dashboard in the provisioning source.",
|
||||
"copy-json-to-clipboard": "Copy JSON to clipboard",
|
||||
"file-path": "<0>File path:</0> {{filePath}}",
|
||||
"file-path": "<strong>File path:</strong> {{filePath}}",
|
||||
"label-description": "Description",
|
||||
"label-target-folder": "Target folder",
|
||||
"label-title": "Title",
|
||||
|
|
@ -6368,8 +6370,8 @@
|
|||
},
|
||||
"version-history-comparison": {
|
||||
"label-view-json-diff": "View JSON diff",
|
||||
"new-version-updated": "<0>Version {{version}}</0> updated by {{editor}} {{timeAgo}}",
|
||||
"old-version-updated": "<0>Version {{version}}</0> updated by {{editor}} {{timeAgo}}"
|
||||
"new-version-updated": "<strong>Version {{version}}</strong> updated by {{editor}} {{timeAgo}}",
|
||||
"old-version-updated": "<strong>Version {{version}}</strong> updated by {{editor}} {{timeAgo}}"
|
||||
},
|
||||
"version-history-header": {
|
||||
"compare-versions": "Comparing {{baseVersion}} <3></3> {{newVersion}}",
|
||||
|
|
@ -6447,7 +6449,7 @@
|
|||
"provisioned-delete-modal": {
|
||||
"confirm-button": "OK",
|
||||
"text-1": "This dashboard is managed by Grafana provisioning and cannot be deleted. Remove the dashboard from the config file to delete it.",
|
||||
"text-2": "See grafana documentation for more information about provisioning. ",
|
||||
"text-2": "See grafana documentation for more information about provisioning.",
|
||||
"text-3": "File path: {{provisionedId}}",
|
||||
"text-link": "Go to docs page",
|
||||
"title": "Cannot delete provisioned dashboard"
|
||||
|
|
@ -6525,7 +6527,7 @@
|
|||
},
|
||||
"data-source-testing-status-page": {
|
||||
"error-more-details-link": "Click <2>here</2> to learn more about this error.",
|
||||
"success-more-details-links": "Next, you can start to visualize data by <2>building a dashboard</2>, or by querying data in the <5>Explore view</5>."
|
||||
"success-more-details-links": "Next, you can start to visualize data by <2>building a dashboard</2> , or by querying data in the <5>Explore view</5> ."
|
||||
},
|
||||
"data-sources": {
|
||||
"datasource-add-button": {
|
||||
|
|
@ -6621,7 +6623,7 @@
|
|||
"test": "Test"
|
||||
},
|
||||
"cloud-info-box": {
|
||||
"body-alert": "Or skip the effort and get {{mainDS}} (and {{extraDS}}) as fully-managed, scalable, and hosted data sources from Grafana Labs with the <6>free-forever Grafana Cloud plan</6>.",
|
||||
"body-alert": "Or skip the effort and get {{mainDS}} (and {{extraDS}}) as fully-managed, scalable, and hosted data sources from Grafana Labs with the <6>free-forever Grafana Cloud plan</6> .",
|
||||
"title-alert": "Configure your {{mainDS}} data source below"
|
||||
},
|
||||
"dashboards-table": {
|
||||
|
|
@ -6749,18 +6751,18 @@
|
|||
"no-events-yet": "No events yet"
|
||||
},
|
||||
"render-info-viewer": {
|
||||
"data-counter": "Data: {{numDataChanges}} ",
|
||||
"data-counter": "Data: {{numDataChanges}}",
|
||||
"elapsed-time": "Time: {{elapsed}}ms",
|
||||
"field": "Field",
|
||||
"last": "Last",
|
||||
"render-counter": "Render: {{numRenders}} ",
|
||||
"schema-counter": "Schema: {{numSchemaChanges}} ",
|
||||
"render-counter": "Render: {{numRenders}}",
|
||||
"schema-counter": "Schema: {{numSchemaChanges}}",
|
||||
"title-reset-counters": "Reset counters",
|
||||
"tooltip-step-back": "Step back",
|
||||
"type": "Type"
|
||||
},
|
||||
"state-view": {
|
||||
"current-value": "Current value: {{currentValue}} ",
|
||||
"current-value": "Current value: {{currentValue}}",
|
||||
"label-state-name": "State name"
|
||||
}
|
||||
},
|
||||
|
|
@ -7207,7 +7209,7 @@
|
|||
},
|
||||
"footer": {
|
||||
"learn-more": "Learn more",
|
||||
"pro-tip-define-sources-through-configuration-files": " ProTip: You can also define data sources through configuration files. "
|
||||
"pro-tip-define-sources-through-configuration-files": "ProTip: You can also define data sources through configuration files."
|
||||
}
|
||||
},
|
||||
"pane": {
|
||||
|
|
@ -7269,8 +7271,10 @@
|
|||
"query-deleted": "Query deleted"
|
||||
},
|
||||
"rich-history-queries-tab": {
|
||||
"displaying-partial-queries": "Displaying {{ count }} queries",
|
||||
"displaying-queries": "{{ count }} queries",
|
||||
"displaying-partial-queries_one": "Displaying {{ count }} queries",
|
||||
"displaying-partial-queries_other": "Displaying {{ count }} queries",
|
||||
"displaying-queries_one": "{{ count }} queries",
|
||||
"displaying-queries_other": "{{ count }} queries",
|
||||
"filter-aria-label": "Filter queries for data sources(s)",
|
||||
"filter-history": "Filter history",
|
||||
"filter-placeholder": "Filter queries for data sources(s)",
|
||||
|
|
@ -7472,7 +7476,7 @@
|
|||
"copy-shortened-link-menu": "Open copy link options",
|
||||
"refresh-picker-cancel": "Cancel",
|
||||
"refresh-picker-run": "Run query",
|
||||
"split-close": " Close ",
|
||||
"split-close": "Close",
|
||||
"split-close-tooltip": "Close split pane",
|
||||
"split-narrow": "Narrow pane",
|
||||
"split-title": "Split",
|
||||
|
|
@ -7602,8 +7606,8 @@
|
|||
},
|
||||
"math": {
|
||||
"available-math-functions": "Available math functions",
|
||||
"run-math-operations": "Run math operations on one or more queries. You reference the query by {{refExample}} ie. {{ref1}}, {{ref2}}, {{ref3}}etc.<10></10>Example: <12>{{example}}</12>",
|
||||
"tooltip-footer": "See our additional documentation on <2>Math expressions</2>.",
|
||||
"run-math-operations": "Run math operations on one or more queries. You reference the query by {{refExample}} ie. {{ref1}}, {{ref2}}, {{ref3}} etc.<br/>Example: <12>{{example}}</12>",
|
||||
"tooltip-footer": "See our additional documentation on <2>Math expressions</2> .",
|
||||
"tooltip-title": "Math operator",
|
||||
"tooltip-trigger": "Expression"
|
||||
},
|
||||
|
|
@ -8642,7 +8646,7 @@
|
|||
},
|
||||
"data-source-http-settings": {
|
||||
"access-help": "Help <1></1>",
|
||||
"access-help-details": "Access mode controls how requests to the data source will be handled.<1> <1>Server</1></1> should be the preferred way if nothing else is stated.",
|
||||
"access-help-details": "Access mode controls how requests to the data source will be handled. <strong><i>Server</i></strong> should be the preferred way if nothing else is stated.",
|
||||
"access-help-title": "Access help",
|
||||
"access-label": "Access",
|
||||
"allowed-cookies": "Allowed cookies",
|
||||
|
|
@ -8910,7 +8914,7 @@
|
|||
"cell-inspect": "Inspect value",
|
||||
"cell-inspect-tooltip": "Inspect value",
|
||||
"copy": "Copy to Clipboard",
|
||||
"csv-counts": "Rows:{{rows}}, Columns:{{columns}} <5></5>",
|
||||
"csv-counts": "Rows:{{rows}}, Columns:{{columns}}",
|
||||
"csv-placeholder": "Enter CSV here...",
|
||||
"filter-placeholder": "Filter values",
|
||||
"filter-popup-apply": "Ok",
|
||||
|
|
@ -9359,7 +9363,7 @@
|
|||
"error-fetching": "Error fetching LDAP settings",
|
||||
"error-saving": "Error saving LDAP settings",
|
||||
"error-validate-form": "Error validating LDAP settings",
|
||||
"feature-flag-disabled": "This page is only accessible by enabling the <1>ssoSettingsLDAP</1> feature flag.",
|
||||
"feature-flag-disabled": "This page is only accessible by enabling the <strong>ssoSettingsLDAP</strong> feature flag.",
|
||||
"saved": "LDAP settings saved"
|
||||
},
|
||||
"bind-dn": {
|
||||
|
|
@ -9400,7 +9404,7 @@
|
|||
"label": "Search base DNS",
|
||||
"placeholder": "example: dc=grafana,dc=org"
|
||||
},
|
||||
"subtitle": "The LDAP integration in Grafana allows your Grafana users to log in with their LDAP credentials. Find out more in our <2><0>documentation</0></2>.",
|
||||
"subtitle": "The LDAP integration in Grafana allows your Grafana users to log in with their LDAP credentials. Find out more in our <2><0>documentation</0></2> .",
|
||||
"title": "Basic Settings"
|
||||
},
|
||||
"library-panel": {
|
||||
|
|
@ -9444,7 +9448,7 @@
|
|||
"dashboard-name": "Dashboard name"
|
||||
},
|
||||
"library-panel-info": {
|
||||
"last-edited": "Last edited on {{timeAgo}} by<person />",
|
||||
"last-edited": "Last edited on {{timeAgo}} by <person />",
|
||||
"usage-count_one": "Used on {{count}} dashboards",
|
||||
"usage-count_other": "Used on {{count}} dashboards"
|
||||
},
|
||||
|
|
@ -9749,7 +9753,7 @@
|
|||
"tooltip-unpin-line": "Unpin line"
|
||||
},
|
||||
"log-row-message": {
|
||||
"ellipsis": "… ",
|
||||
"ellipsis": "…",
|
||||
"more": "more",
|
||||
"see-details": "See log details",
|
||||
"tooltip-error": "Error: {{errorMessage}}"
|
||||
|
|
@ -10145,7 +10149,7 @@
|
|||
},
|
||||
"resource-table": {
|
||||
"dashboard-load-error": "Unable to load dashboard",
|
||||
"error-library-element-sub": "Library Element {uid}",
|
||||
"error-library-element-sub": "Library Element {{uid}}",
|
||||
"error-library-element-title": "Unable to load library element",
|
||||
"unknown-datasource-title": "Data source {{datasourceUID}}",
|
||||
"unknown-datasource-type": "Unknown data source"
|
||||
|
|
@ -10793,10 +10797,10 @@
|
|||
"placeholder-optional": "(optional)",
|
||||
"role": "Role",
|
||||
"submit": "Submit",
|
||||
"tooltip": "You can now select the \"No basic role\" option and add permissions to your custom needs. You can find more information in <1>our documentation</1>."
|
||||
"tooltip": "You can now select the \"No basic role\" option and add permissions to your custom needs. You can find more information in <1>our documentation</1> ."
|
||||
},
|
||||
"user-invite-page": {
|
||||
"sub-title": "Send invitation or add existing Grafana user to the organization.<1> {{orgName}}</1>",
|
||||
"sub-title": "Send invitation or add existing Grafana user to the organization. <1> {{orgName}}</1>",
|
||||
"text": {
|
||||
"invite-user": "Invite user"
|
||||
}
|
||||
|
|
@ -10885,7 +10889,7 @@
|
|||
"switch-to-table": "Switch to table"
|
||||
},
|
||||
"panel-plugin-error": {
|
||||
"text-load-error": "Check the server startup logs for more information. <1></1>If this plugin was loaded from Git, then make sure it was compiled.",
|
||||
"text-load-error": "Check the server startup logs for more information. <br/>If this plugin was loaded from Git, then make sure it was compiled.",
|
||||
"title-load-error": "Error loading: {{panelId}}",
|
||||
"title-not-found": "Panel plugin not found: {{id}}"
|
||||
},
|
||||
|
|
@ -11079,7 +11083,7 @@
|
|||
},
|
||||
"details": {
|
||||
"connections-tab": {
|
||||
"description": "You currently have the following data sources configured for {{pluginName}}, click a tile to view the configuration details. You can find all of your data source connections in <4><0>Connections</0> - <3>Data sources</3>.</4>"
|
||||
"description": "You currently have the following data sources configured for {{pluginName}}, click a tile to view the configuration details. You can find all of your data source connections in <4><5>Connections</5> - <8>Data sources</8>.</4>"
|
||||
},
|
||||
"disabled-error": {
|
||||
"angular-deprecation-link": "Read more about angular deprecation",
|
||||
|
|
@ -11096,7 +11100,7 @@
|
|||
},
|
||||
"labels": {
|
||||
"contactGrafanaLabs": "Contact Grafana Labs",
|
||||
"customLinks": "Custom links ",
|
||||
"customLinks": "Custom links",
|
||||
"customLinksTooltip": "These links are provided by the plugin developer to offer additional, developer-specific resources and information",
|
||||
"dependencies": "Dependencies",
|
||||
"documentation": "Documentation",
|
||||
|
|
@ -11107,7 +11111,7 @@
|
|||
"latestVersion": "Latest Version",
|
||||
"license": "License",
|
||||
"raiseAnIssue": "Raise an issue",
|
||||
"reportAbuse": "Report a concern ",
|
||||
"reportAbuse": "Report a concern",
|
||||
"reportAbuseTooltip": "Report issues related to malicious or harmful plugins directly to Grafana Labs.",
|
||||
"repository": "Repository",
|
||||
"signature": "Signature",
|
||||
|
|
@ -11117,8 +11121,8 @@
|
|||
"modal": {
|
||||
"cancel": "Cancel",
|
||||
"copyEmail": "Copy email address",
|
||||
"description": "This feature is for reporting malicious or harmful behaviour within plugins. For plugin concerns, email us at: ",
|
||||
"node": "Note: For general plugin issues like bugs or feature requests, please contact the plugin author using the provided links. ",
|
||||
"description": "This feature is for reporting malicious or harmful behaviour within plugins. For plugin concerns, email us at:",
|
||||
"node": "Note: For general plugin issues like bugs or feature requests, please contact the plugin author using the provided links.",
|
||||
"title": "Report a plugin concern"
|
||||
}
|
||||
},
|
||||
|
|
@ -11186,7 +11190,7 @@
|
|||
"message": "All plugins are up to date"
|
||||
},
|
||||
"not-found-plugin": {
|
||||
"body-plugin-not-found": "That plugin cannot be found. Please check the url is correct or <1></1>go to the <3>plugin catalog</3>.",
|
||||
"body-plugin-not-found": "That plugin cannot be found. Please check the url is correct or <br/>go to the <3>plugin catalog</3>.",
|
||||
"title-plugin-not-found": "Plugin not found"
|
||||
},
|
||||
"plugin-actions": {
|
||||
|
|
@ -11494,7 +11498,7 @@
|
|||
"actions": {
|
||||
"set-up-required-feature-toggles": "Set up required feature toggles"
|
||||
},
|
||||
"learn-more-documentation": "Want to learn more? See our <2>documentation</2>.",
|
||||
"learn-more-documentation": "Want to learn more? See our <2>documentation</2> .",
|
||||
"manage-dashboards-provision-updates-automatically": "Manage dashboards as code in Git and provision updates automatically",
|
||||
"manage-your-dashboards-with-remote-provisioning": "Get started with Git Sync",
|
||||
"store-dashboards-in-version-controlled-storage": "Store dashboards in version-controlled storage for better organization and history tracking"
|
||||
|
|
@ -12004,7 +12008,7 @@
|
|||
"annotations-show-text": "Annotations = show",
|
||||
"time-range-picker-disabled-text": "Time range picker = disabled",
|
||||
"time-range-picker-enabled-text": "Time range picker = enabled",
|
||||
"time-range-text": "Time range = "
|
||||
"time-range-text": "Time range ="
|
||||
},
|
||||
"share": {
|
||||
"success-delete": "Your dashboard is no longer shareable"
|
||||
|
|
@ -12043,7 +12047,7 @@
|
|||
"revoke-user-access-modal-desc-line1": "Are you sure you want to revoke access for {{email}}?"
|
||||
},
|
||||
"delete-user-shared-dashboards-modal": {
|
||||
"revoke-user-access-modal-desc-line2": "This action will immediately revoke {{email}}'s access to all shared dashboards."
|
||||
"revoke-user-access-modal-desc-line2": "This action will immediately revoke {{email}}'s access to all shared dashboards."
|
||||
},
|
||||
"modal": {
|
||||
"shared-dashboard-modal-title": "Shared dashboards"
|
||||
|
|
@ -12212,7 +12216,7 @@
|
|||
},
|
||||
"menu": {
|
||||
"clear-button": "Clear all",
|
||||
"tooltip": "You can now select the \"No basic role\" option and add permissions to your custom needs. You can find more information in <1>our documentation</1>."
|
||||
"tooltip": "You can now select the \"No basic role\" option and add permissions to your custom needs. You can find more information in <1>our documentation</1> ."
|
||||
},
|
||||
"menu-aria-label": "Role picker menu",
|
||||
"menu-group-option-aria-label": "Role picker option",
|
||||
|
|
@ -12222,7 +12226,7 @@
|
|||
},
|
||||
"sub-menu-aria-label": "Role picker submenu",
|
||||
"title": {
|
||||
"description": "Assign roles to users to ensure granular control over access to Grafana‘s features and resources. Find out more in our <2>documentation</2>."
|
||||
"description": "Assign roles to users to ensure granular control over access to Grafana‘s features and resources. Find out more in our <2>documentation</2> ."
|
||||
}
|
||||
},
|
||||
"role-picker-drawer": {
|
||||
|
|
@ -12345,7 +12349,7 @@
|
|||
},
|
||||
"select": {
|
||||
"select-menu": {
|
||||
"selected-count": "Selected "
|
||||
"selected-count": "Selected"
|
||||
}
|
||||
},
|
||||
"service-account-create-page": {
|
||||
|
|
@ -12444,6 +12448,7 @@
|
|||
"aria-label-role": "Role"
|
||||
},
|
||||
"service-account-tokens-table": {
|
||||
"aria-label-delete-button": "Delete service account token {{key}}",
|
||||
"created": "Created",
|
||||
"expires": "Expires",
|
||||
"last-used-at": "Last used at",
|
||||
|
|
@ -12531,7 +12536,7 @@
|
|||
"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 an image, you must install the <2>Grafana image renderer plugin</2>. Please contact your Grafana administrator to install the plugin.",
|
||||
"render-instructions": "To render an image, you must install the <2>Grafana image renderer plugin</2> . 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.",
|
||||
|
|
@ -12555,7 +12560,7 @@
|
|||
"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": "Publish Snapshot",
|
||||
"mistake-message": "Did you make a mistake? ",
|
||||
"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.",
|
||||
|
|
@ -13167,7 +13172,7 @@
|
|||
"forwards-time-aria-label": "Move time range forwards",
|
||||
"to": "to",
|
||||
"zoom-out-button": "Zoom out time range",
|
||||
"zoom-out-tooltip": "Time range zoom out <1></1> CTRL+Z"
|
||||
"zoom-out-tooltip": "Time range zoom out <br/>CTRL+Z"
|
||||
},
|
||||
"time-range": {
|
||||
"apply": "Apply time range",
|
||||
|
|
@ -13292,7 +13297,7 @@
|
|||
},
|
||||
"transformations": {
|
||||
"empty": {
|
||||
"add-transformation-body": "Transformations allow data to be changed in various ways before your visualization is shown.<1></1>This includes joining data together, renaming fields, making calculations, formatting data for display, and more.",
|
||||
"add-transformation-body": "Transformations allow data to be changed in various ways before your visualization is shown.<br/>This includes joining data together, renaming fields, making calculations, formatting data for display, and more.",
|
||||
"add-transformation-header": "Start transforming data"
|
||||
}
|
||||
},
|
||||
|
|
@ -13559,7 +13564,7 @@
|
|||
"label-format": "Format",
|
||||
"label-set-timezone": "Set timezone",
|
||||
"label-time-field": "Time field",
|
||||
"tooltip-format": "The output format for the field specified as a <2>Moment.js format string</2>.",
|
||||
"tooltip-format": "The output format for the field specified as a <2>Moment.js format string</2> .",
|
||||
"tooltip-timezone-manually": "Set the timezone of the date manually"
|
||||
},
|
||||
"format-time-transformer-editor": {
|
||||
|
|
@ -14154,8 +14159,8 @@
|
|||
"message": "No users found"
|
||||
},
|
||||
"token-revoked-modal": {
|
||||
"auto-revoked": "Your session token was automatically revoked because you have reached <2>the maximum number of {{numSessions}} concurrent sessions</2> for your account.",
|
||||
"resume-message": "<0>To resume your session, sign in again.</0>Contact your administrator or visit the license page to review your quota if you are repeatedly signed out automatically.",
|
||||
"auto-revoked": "Your session token was automatically revoked because you have reached <strong>the maximum number of {{numSessions}} concurrent sessions</strong> for your account.",
|
||||
"resume-message": "<strong>To resume your session, sign in again.</strong> Contact your administrator or visit the license page to review your quota if you are repeatedly signed out automatically.",
|
||||
"sign-in": "Sign in",
|
||||
"title-you-have-been-automatically-signed-out": "You have been automatically signed out"
|
||||
},
|
||||
|
|
|
|||
13
public/locales/enterprise/i18next.config.ts
Normal file
13
public/locales/enterprise/i18next.config.ts
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
import { defineConfig } from 'i18next-cli';
|
||||
|
||||
import baseConfig from '../../../i18next.config';
|
||||
|
||||
export default defineConfig({
|
||||
...baseConfig,
|
||||
extract: {
|
||||
...baseConfig.extract,
|
||||
defaultNS: 'grafana-enterprise',
|
||||
input: ['../../../public/app/extensions/**/*.{tsx,ts}'],
|
||||
output: '../../../public/app/extensions/locales/{{language}}/{{namespace}}.json',
|
||||
},
|
||||
});
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
const baseConfig = require('./i18next-parser.config.cjs');
|
||||
|
||||
module.exports = {
|
||||
...baseConfig,
|
||||
defaultNamespace: 'grafana-enterprise',
|
||||
input: ['../../public/app/extensions/**/*.{tsx,ts}'],
|
||||
output: './public/app/extensions/locales/$LOCALE/$NAMESPACE.json',
|
||||
};
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
module.exports = {
|
||||
// Base config - same for both OSS and Enterprise
|
||||
locales: ['en-US'], // Only en-US is updated - Crowdin will PR with other languages
|
||||
sort: true,
|
||||
createOldCatalogs: false,
|
||||
failOnWarnings: true,
|
||||
verbose: false,
|
||||
resetDefaultValueLocale: 'en-US', // Updates extracted values when they change in code
|
||||
|
||||
// OSS-specific config
|
||||
defaultNamespace: 'grafana',
|
||||
input: [
|
||||
'../../public/**/*.{tsx,ts}',
|
||||
'!../../public/app/extensions/**/*', // Don't extract from Enterprise
|
||||
'!../../public/app/plugins/datasource/**/*', // Don't extract from datasource plugins
|
||||
'../../packages/grafana-ui/**/*.{tsx,ts}',
|
||||
'../../packages/grafana-data/**/*.{tsx,ts}',
|
||||
],
|
||||
output: './public/locales/$LOCALE/$NAMESPACE.json',
|
||||
};
|
||||
Loading…
Reference in a new issue