diff --git a/Makefile b/Makefile index 469706de274..837c794858c 100644 --- a/Makefile +++ b/Makefile @@ -140,6 +140,8 @@ endif i18n-extract: i18n-extract-enterprise @echo "Extracting i18n strings for OSS" yarn run i18next --config public/locales/i18next-parser.config.cjs + @echo "Extracting i18n strings for packages" + yarn run packages:i18n-extract @echo "Extracting i18n strings for plugins" yarn run plugin:i18n-extract diff --git a/crowdin.yml b/crowdin.yml index 59366d9a3c0..1f415e96ca7 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -21,4 +21,10 @@ files: [ "type": "i18next_json", "dest": "plugins/mssql/en-US/%original_file_name%" }, + { + "source": "packages/grafana-sql/src/locales/en-US/grafana-sql.json", + "translation": "packages/grafana-sql/src/locales/%locale%/%original_file_name%", + "type": "i18next_json", + "dest": "packages/grafana-sql/en-US/%original_file_name%" + }, ] diff --git a/eslint.config.js b/eslint.config.js index 28bc0da1adb..721a03cec1f 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -304,6 +304,7 @@ module.exports = [ files: [ 'public/app/!(plugins)/**/*.{ts,tsx,js,jsx}', 'packages/grafana-ui/**/*.{ts,tsx,js,jsx}', + 'packages/grafana-sql/**/*.{ts,tsx,js,jsx}', ...pluginsToTranslate.map((plugin) => `${plugin}/**/*.{ts,tsx,js,jsx}`), ], ignores: [ diff --git a/package.json b/package.json index 5bcccf73f61..3c0e0c45d29 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "lint:fix": "yarn lint:ts --fix", "packages:build": "nx run-many -t build --projects='tag:scope:package'", "packages:clean": "rimraf ./npm-artifacts && nx run-many -t clean --projects='tag:scope:package' --maxParallel=100", + "packages:i18n-extract": "nx run-many -t i18n-extract --projects='tag:scope:package'", "packages:prepare": "lerna version --no-push --no-git-tag-version --force-publish --exact", "packages:pack": "mkdir -p ./npm-artifacts && lerna exec --no-private -- yarn pack --out \"../../npm-artifacts/%s-%v.tgz\"", "packages:typecheck": "nx run-many -t typecheck --projects='tag:scope:package'", diff --git a/packages/grafana-sql/package.json b/packages/grafana-sql/package.json index 5af3c3fa16f..7bc977ffa56 100644 --- a/packages/grafana-sql/package.json +++ b/packages/grafana-sql/package.json @@ -11,12 +11,14 @@ }, "main": "src/index.ts", "scripts": { - "typecheck": "tsc --emitDeclarationOnly false --noEmit" + "typecheck": "tsc --emitDeclarationOnly false --noEmit", + "i18n-extract": "i18next --config src/locales/i18next-parser.config.cjs" }, "dependencies": { "@emotion/css": "11.13.5", "@grafana/data": "12.1.0-pre", "@grafana/e2e-selectors": "12.1.0-pre", + "@grafana/i18n": "12.1.0-pre", "@grafana/plugin-ui": "0.10.6", "@grafana/runtime": "12.1.0-pre", "@grafana/ui": "12.1.0-pre", @@ -47,6 +49,7 @@ "@types/react-virtualized-auto-sizer": "1.0.4", "@types/systemjs": "6.15.1", "@types/uuid": "10.0.0", + "i18next-parser": "9.3.0", "jest": "^29.6.4", "ts-jest": "29.2.5", "ts-node": "10.9.2", diff --git a/packages/grafana-sql/src/components/ConfirmModal.tsx b/packages/grafana-sql/src/components/ConfirmModal.tsx index a926b5d74eb..de74570d691 100644 --- a/packages/grafana-sql/src/components/ConfirmModal.tsx +++ b/packages/grafana-sql/src/components/ConfirmModal.tsx @@ -2,6 +2,7 @@ import { css } from '@emotion/css'; import { useRef, useEffect } from 'react'; import { GrafanaTheme2 } from '@grafana/data'; +import { Trans } from '@grafana/i18n'; import { Button, Icon, Modal, useStyles2 } from '@grafana/ui'; type ConfirmModalProps = { @@ -27,26 +28,32 @@ export function ConfirmModal({ isOpen, onCancel, onDiscard, onCopy }: ConfirmMod title={
- Warning + + Warning +
} onDismiss={onCancel} isOpen={isOpen} >

- Builder mode does not display changes made in code. The query builder will display the last changes you made in - builder mode. + + Builder mode does not display changes made in code. The query builder will display the last changes you made + in builder mode. + +

+

+ Do you want to copy your code to the clipboard?

-

Do you want to copy your code to the clipboard?

diff --git a/packages/grafana-sql/src/components/DatasetSelector.tsx b/packages/grafana-sql/src/components/DatasetSelector.tsx index 2e0cf47f014..d6dcdf956c1 100644 --- a/packages/grafana-sql/src/components/DatasetSelector.tsx +++ b/packages/grafana-sql/src/components/DatasetSelector.tsx @@ -2,6 +2,7 @@ import { useEffect } from 'react'; import { useAsync } from 'react-use'; import { SelectableValue } from '@grafana/data'; +import { t } from '@grafana/i18n'; import { Select } from '@grafana/ui'; import { DB, ResourceSelectorProps, SQLDialect, toOption } from '../types'; @@ -75,7 +76,7 @@ export const DatasetSelector = ({ return ( value && onChangeItem(setGroupByField(value))} /> - + ); }; diff --git a/packages/grafana-sql/src/components/visual-query-builder/OrderByRow.tsx b/packages/grafana-sql/src/components/visual-query-builder/OrderByRow.tsx index 8e7286153a9..b67cf78daf9 100644 --- a/packages/grafana-sql/src/components/visual-query-builder/OrderByRow.tsx +++ b/packages/grafana-sql/src/components/visual-query-builder/OrderByRow.tsx @@ -3,6 +3,7 @@ import { useCallback } from 'react'; import * as React from 'react'; import { SelectableValue, toOption } from '@grafana/data'; +import { t } from '@grafana/i18n'; import { EditorField, InputGroup } from '@grafana/plugin-ui'; import { Input, RadioButtonGroup, Select, Space } from '@grafana/ui'; @@ -59,10 +60,10 @@ export function OrderByRow({ sql, onSqlChange, columns, showOffset }: OrderByRow return ( <> - + {showOffset && ( - + )} diff --git a/packages/grafana-sql/src/components/visual-query-builder/Preview.tsx b/packages/grafana-sql/src/components/visual-query-builder/Preview.tsx index c8135dcc457..8aa54143207 100644 --- a/packages/grafana-sql/src/components/visual-query-builder/Preview.tsx +++ b/packages/grafana-sql/src/components/visual-query-builder/Preview.tsx @@ -2,6 +2,7 @@ import { css } from '@emotion/css'; import { useCopyToClipboard } from 'react-use'; import { GrafanaTheme2 } from '@grafana/data'; +import { Trans, t } from '@grafana/i18n'; import { reportInteraction } from '@grafana/runtime'; import { CodeEditor, Field, IconButton, useStyles2 } from '@grafana/ui'; @@ -26,8 +27,14 @@ export function Preview({ rawSql, datasourceType }: PreviewProps) { const labelElement = (
- Preview - copyPreview(rawSql)} name="copy" /> + + Preview + + copyPreview(rawSql)} + name="copy" + />
); diff --git a/packages/grafana-sql/src/components/visual-query-builder/SelectColumn.tsx b/packages/grafana-sql/src/components/visual-query-builder/SelectColumn.tsx index cea8b01e72a..f798f8b9a4b 100644 --- a/packages/grafana-sql/src/components/visual-query-builder/SelectColumn.tsx +++ b/packages/grafana-sql/src/components/visual-query-builder/SelectColumn.tsx @@ -2,6 +2,7 @@ import { useId } from 'react'; import { SelectableValue } from '@grafana/data'; import { selectors } from '@grafana/e2e-selectors'; +import { t } from '@grafana/i18n'; import { EditorField } from '@grafana/plugin-ui'; import { Select } from '@grafana/ui'; @@ -15,7 +16,7 @@ export function SelectColumn({ columns, onParameterChange, value }: Props) { const selectInputId = useId(); return ( - + - +