diff --git a/packages/grafana-i18n/src/i18n.tsx b/packages/grafana-i18n/src/i18n.tsx index 4afa54bb0f5..5435dc3168a 100644 --- a/packages/grafana-i18n/src/i18n.tsx +++ b/packages/grafana-i18n/src/i18n.tsx @@ -1,4 +1,4 @@ -import i18n, { InitOptions, ReactOptions, TFunction } from 'i18next'; +import i18n, { InitOptions, ReactOptions, TFunction as I18NextTFunction } from 'i18next'; import LanguageDetector, { DetectorOptions } from 'i18next-browser-languagedetector'; // eslint-disable-next-line no-restricted-imports import { initReactI18next, setDefaults, setI18n, Trans as I18NextTrans, getI18n } from 'react-i18next'; @@ -6,9 +6,9 @@ import { initReactI18next, setDefaults, setI18n, Trans as I18NextTrans, getI18n import { DEFAULT_LANGUAGE, PSEUDO_LOCALE } from './constants'; import { initRegionalFormat } from './dates'; import { LANGUAGES } from './languages'; -import { TransProps, TransType } from './types'; +import { TFunction, TransProps, TransType } from './types'; -let tFunc: TFunction | undefined; +let tFunc: I18NextTFunction | undefined; let transComponent: TransType; export async function initPluginTranslations(id: string) { @@ -140,7 +140,7 @@ export function addResourceBundle(language: string, namespace: string, resource: getI18nInstance().addResourceBundle(language, namespace, resource, undefined, true); } -export function t(id: string, defaultMessage: string, values?: Record) { +export const t: TFunction = (id: string, defaultMessage: string, values?: Record) => { if (!tFunc) { if (process.env.NODE_ENV !== 'test') { console.warn( @@ -156,7 +156,7 @@ export function t(id: string, defaultMessage: string, values?: Record) => string; + +export type { UseTranslateHook, TransProps, TransType, TFunction }; diff --git a/public/app/core/components/ThemeSelector/ThemeCard.tsx b/public/app/core/components/ThemeSelector/ThemeCard.tsx index 38892d8fa30..24aed29a467 100644 --- a/public/app/core/components/ThemeSelector/ThemeCard.tsx +++ b/public/app/core/components/ThemeSelector/ThemeCard.tsx @@ -1,8 +1,7 @@ import { css } from '@emotion/css'; import { FeatureState, GrafanaTheme2, ThemeRegistryItem } from '@grafana/data'; -import { useTranslate } from '@grafana/i18n'; -import { TFunction } from '@grafana/i18n/internal'; +import { TFunction, useTranslate } from '@grafana/i18n'; import { FeatureBadge, RadioButtonDot, useStyles2 } from '@grafana/ui'; import { ThemePreview } from '../Theme/ThemePreview'; diff --git a/public/app/core/components/help/HelpModal.tsx b/public/app/core/components/help/HelpModal.tsx index 7d1c9d208a2..c413663c9bd 100644 --- a/public/app/core/components/help/HelpModal.tsx +++ b/public/app/core/components/help/HelpModal.tsx @@ -2,8 +2,7 @@ import { css } from '@emotion/css'; import { useMemo } from 'react'; import { GrafanaTheme2 } from '@grafana/data'; -import { Trans, useTranslate } from '@grafana/i18n'; -import { TFunction } from '@grafana/i18n/internal'; +import { TFunction, Trans, useTranslate } from '@grafana/i18n'; import { Grid, Modal, useStyles2, Text } from '@grafana/ui'; import { getModKey } from 'app/core/utils/browser'; diff --git a/public/app/features/alerting/unified/components/rule-editor/labels/LabelsField.tsx b/public/app/features/alerting/unified/components/rule-editor/labels/LabelsField.tsx index 10f82b1e051..a690fd34ea3 100644 --- a/public/app/features/alerting/unified/components/rule-editor/labels/LabelsField.tsx +++ b/public/app/features/alerting/unified/components/rule-editor/labels/LabelsField.tsx @@ -3,8 +3,7 @@ import { FC, useCallback, useMemo, useState } from 'react'; import { Controller, FormProvider, useFieldArray, useForm, useFormContext } from 'react-hook-form'; import { GrafanaTheme2, SelectableValue } from '@grafana/data'; -import { Trans, useTranslate } from '@grafana/i18n'; -import { TFunction } from '@grafana/i18n/internal'; +import { TFunction, Trans, useTranslate } from '@grafana/i18n'; import { Button, Field, InlineLabel, Input, LoadingPlaceholder, Space, Stack, Text, useStyles2 } from '@grafana/ui'; import { labelsApi } from '../../../api/labelsApi'; diff --git a/public/app/features/correlations/Forms/ConfigureCorrelationSourceForm.tsx b/public/app/features/correlations/Forms/ConfigureCorrelationSourceForm.tsx index e03d5b8aa34..a0cc03080a7 100644 --- a/public/app/features/correlations/Forms/ConfigureCorrelationSourceForm.tsx +++ b/public/app/features/correlations/Forms/ConfigureCorrelationSourceForm.tsx @@ -2,8 +2,7 @@ import { css } from '@emotion/css'; import { Controller, useFormContext } from 'react-hook-form'; import { DataSourceInstanceSettings, GrafanaTheme2 } from '@grafana/data'; -import { Trans, useTranslate } from '@grafana/i18n'; -import { TFunction } from '@grafana/i18n/internal'; +import { TFunction, Trans, useTranslate } from '@grafana/i18n'; import { Card, Field, FieldSet, Input, useStyles2 } from '@grafana/ui'; import { DataSourcePicker } from 'app/features/datasources/components/picker/DataSourcePicker'; import { getDatasourceSrv } from 'app/features/plugins/datasource_srv'; diff --git a/public/app/features/datasources/components/picker/BuiltInDataSourceList.tsx b/public/app/features/datasources/components/picker/BuiltInDataSourceList.tsx index 33a26b3abd1..c58003f8529 100644 --- a/public/app/features/datasources/components/picker/BuiltInDataSourceList.tsx +++ b/public/app/features/datasources/components/picker/BuiltInDataSourceList.tsx @@ -1,7 +1,6 @@ import { DataSourceInstanceSettings } from '@grafana/data'; import { selectors } from '@grafana/e2e-selectors'; -import { useTranslate } from '@grafana/i18n'; -import { TFunction } from '@grafana/i18n/internal'; +import { TFunction, useTranslate } from '@grafana/i18n'; import { DataSourceRef } from '@grafana/schema'; import { useDatasources } from '../../hooks'; diff --git a/public/app/features/inspector/InspectJSONTab.tsx b/public/app/features/inspector/InspectJSONTab.tsx index 255bfe5e870..c9348dca512 100644 --- a/public/app/features/inspector/InspectJSONTab.tsx +++ b/public/app/features/inspector/InspectJSONTab.tsx @@ -6,8 +6,7 @@ import { firstValueFrom } from 'rxjs'; import { AppEvents, PanelData, SelectableValue, LoadingState } from '@grafana/data'; import { selectors } from '@grafana/e2e-selectors'; -import { Trans, useTranslate } from '@grafana/i18n'; -import { TFunction } from '@grafana/i18n/internal'; +import { TFunction, Trans, useTranslate } from '@grafana/i18n'; import { locationService } from '@grafana/runtime'; import { Button, CodeEditor, Field, Select, useStyles2 } from '@grafana/ui'; import { appEvents } from 'app/core/core'; diff --git a/public/app/features/logs/components/panel/InfiniteScroll.tsx b/public/app/features/logs/components/panel/InfiniteScroll.tsx index aec46e6ede5..05385f02a04 100644 --- a/public/app/features/logs/components/panel/InfiniteScroll.tsx +++ b/public/app/features/logs/components/panel/InfiniteScroll.tsx @@ -3,8 +3,7 @@ import { usePrevious } from 'react-use'; import { ListChildComponentProps, ListOnItemsRenderedProps } from 'react-window'; import { AbsoluteTimeRange, LogsSortOrder, TimeRange } from '@grafana/data'; -import { useTranslate } from '@grafana/i18n'; -import { TFunction } from '@grafana/i18n/internal'; +import { TFunction, useTranslate } from '@grafana/i18n'; import { config, reportInteraction } from '@grafana/runtime'; import { Spinner, useStyles2 } from '@grafana/ui'; diff --git a/public/app/features/migrate-to-cloud/onprem/EmptyState/CallToAction/ConnectModal.tsx b/public/app/features/migrate-to-cloud/onprem/EmptyState/CallToAction/ConnectModal.tsx index 86333f0efbc..3711bfecf16 100644 --- a/public/app/features/migrate-to-cloud/onprem/EmptyState/CallToAction/ConnectModal.tsx +++ b/public/app/features/migrate-to-cloud/onprem/EmptyState/CallToAction/ConnectModal.tsx @@ -3,8 +3,7 @@ import { useId } from 'react'; import { SubmitHandler, useForm } from 'react-hook-form'; import { GrafanaTheme2 } from '@grafana/data'; -import { Trans, useTranslate } from '@grafana/i18n'; -import { TFunction } from '@grafana/i18n/internal'; +import { TFunction, Trans, useTranslate } from '@grafana/i18n'; import { Modal, Button, Stack, TextLink, Field, Input, Text, useStyles2 } from '@grafana/ui'; import { AlertWithTraceID } from 'app/features/migrate-to-cloud/shared/AlertWithTraceID'; diff --git a/public/app/features/migrate-to-cloud/onprem/Page.tsx b/public/app/features/migrate-to-cloud/onprem/Page.tsx index 9a6ea846572..4be9fb10548 100644 --- a/public/app/features/migrate-to-cloud/onprem/Page.tsx +++ b/public/app/features/migrate-to-cloud/onprem/Page.tsx @@ -1,8 +1,7 @@ import { skipToken } from '@reduxjs/toolkit/query/react'; import { useCallback, useEffect, useState } from 'react'; -import { Trans, useTranslate } from '@grafana/i18n'; -import { TFunction } from '@grafana/i18n/internal'; +import { TFunction, Trans, useTranslate } from '@grafana/i18n'; import { config } from '@grafana/runtime'; import { AlertVariant, Box, Stack, Text } from '@grafana/ui'; diff --git a/public/app/features/migrate-to-cloud/onprem/ResourceDetailsModal.tsx b/public/app/features/migrate-to-cloud/onprem/ResourceDetailsModal.tsx index c7756cd038d..ecc96e5f31b 100644 --- a/public/app/features/migrate-to-cloud/onprem/ResourceDetailsModal.tsx +++ b/public/app/features/migrate-to-cloud/onprem/ResourceDetailsModal.tsx @@ -1,5 +1,4 @@ -import { Trans, useTranslate } from '@grafana/i18n'; -import { TFunction } from '@grafana/i18n/internal'; +import { TFunction, Trans, useTranslate } from '@grafana/i18n'; import { Button, Modal, Stack, Text } from '@grafana/ui'; import { MigrateDataResponseItemDto } from '../api'; diff --git a/public/app/features/migrate-to-cloud/onprem/TypeCell.tsx b/public/app/features/migrate-to-cloud/onprem/TypeCell.tsx index abd9e414e0f..ef42de2a6fd 100644 --- a/public/app/features/migrate-to-cloud/onprem/TypeCell.tsx +++ b/public/app/features/migrate-to-cloud/onprem/TypeCell.tsx @@ -1,5 +1,4 @@ -import { useTranslate } from '@grafana/i18n'; -import { TFunction } from '@grafana/i18n/internal'; +import { TFunction, useTranslate } from '@grafana/i18n'; import { CellProps } from '@grafana/ui'; import { ResourceTableItem } from './types'; diff --git a/public/app/features/migrate-to-cloud/onprem/useNotifyOnSuccess.tsx b/public/app/features/migrate-to-cloud/onprem/useNotifyOnSuccess.tsx index effaaddc1ee..f2e04d146cd 100644 --- a/public/app/features/migrate-to-cloud/onprem/useNotifyOnSuccess.tsx +++ b/public/app/features/migrate-to-cloud/onprem/useNotifyOnSuccess.tsx @@ -1,7 +1,6 @@ import { useRef, useEffect } from 'react'; -import { useTranslate } from '@grafana/i18n'; -import { TFunction } from '@grafana/i18n/internal'; +import { TFunction, useTranslate } from '@grafana/i18n'; import { useAppNotification } from 'app/core/copy/appNotification'; import { GetSnapshotResponseDto, SnapshotDto } from '../api'; diff --git a/public/app/features/plugins/admin/components/UpdateAllModal.tsx b/public/app/features/plugins/admin/components/UpdateAllModal.tsx index 1a09db39fc4..fff4cd18331 100644 --- a/public/app/features/plugins/admin/components/UpdateAllModal.tsx +++ b/public/app/features/plugins/admin/components/UpdateAllModal.tsx @@ -1,7 +1,6 @@ import { useEffect, useMemo, useRef, useState } from 'react'; -import { useTranslate } from '@grafana/i18n'; -import { TFunction } from '@grafana/i18n/internal'; +import { TFunction, useTranslate } from '@grafana/i18n'; import { config, reportInteraction } from '@grafana/runtime'; import { ConfirmModal } from '@grafana/ui'; diff --git a/public/app/features/provisioning/Config/ConfigForm.tsx b/public/app/features/provisioning/Config/ConfigForm.tsx index 27522303f48..2e3b0dd7cab 100644 --- a/public/app/features/provisioning/Config/ConfigForm.tsx +++ b/public/app/features/provisioning/Config/ConfigForm.tsx @@ -2,8 +2,7 @@ import { useEffect, useMemo, useState } from 'react'; import { Controller, useForm } from 'react-hook-form'; import { useNavigate } from 'react-router-dom-v5-compat'; -import { Trans, useTranslate } from '@grafana/i18n'; -import { TFunction } from '@grafana/i18n/internal'; +import { TFunction, Trans, useTranslate } from '@grafana/i18n'; import { Button, Checkbox, diff --git a/public/app/features/provisioning/GettingStarted/GettingStarted.tsx b/public/app/features/provisioning/GettingStarted/GettingStarted.tsx index ddecc146123..cadf84a2cbe 100644 --- a/public/app/features/provisioning/GettingStarted/GettingStarted.tsx +++ b/public/app/features/provisioning/GettingStarted/GettingStarted.tsx @@ -2,8 +2,7 @@ import { css } from '@emotion/css'; import { useState } from 'react'; import { GrafanaTheme2 } from '@grafana/data'; -import { Trans, useTranslate } from '@grafana/i18n'; -import { TFunction } from '@grafana/i18n/internal'; +import { TFunction, Trans, useTranslate } from '@grafana/i18n'; import { Alert, Stack, useStyles2 } from '@grafana/ui'; import { useGetFrontendSettingsQuery, Repository } from 'app/api/clients/provisioning'; import provisioningSvg from 'img/provisioning/provisioning.svg'; diff --git a/public/app/features/provisioning/Job/RecentJobs.tsx b/public/app/features/provisioning/Job/RecentJobs.tsx index de5cbb8f59d..46270c6785b 100644 --- a/public/app/features/provisioning/Job/RecentJobs.tsx +++ b/public/app/features/provisioning/Job/RecentJobs.tsx @@ -1,8 +1,7 @@ import { useMemo } from 'react'; import { intervalToAbbreviatedDurationString, TraceKeyValuePair } from '@grafana/data'; -import { Trans, useTranslate } from '@grafana/i18n'; -import { TFunction } from '@grafana/i18n/internal'; +import { TFunction, Trans, useTranslate } from '@grafana/i18n'; import { Alert, Badge, Box, Card, Icon, InteractiveTable, Spinner, Stack, Text } from '@grafana/ui'; import { Job, Repository, SyncStatus } from 'app/api/clients/provisioning'; import KeyValuesTable from 'app/features/explore/TraceView/components/TraceTimelineViewer/SpanDetail/KeyValuesTable'; diff --git a/public/app/features/provisioning/Wizard/ProvisioningWizard.tsx b/public/app/features/provisioning/Wizard/ProvisioningWizard.tsx index 18713ac2562..b241089815d 100644 --- a/public/app/features/provisioning/Wizard/ProvisioningWizard.tsx +++ b/public/app/features/provisioning/Wizard/ProvisioningWizard.tsx @@ -4,8 +4,7 @@ import { FormProvider, useForm } from 'react-hook-form'; import { useNavigate } from 'react-router-dom-v5-compat'; import { AppEvents, GrafanaTheme2 } from '@grafana/data'; -import { useTranslate } from '@grafana/i18n'; -import { TFunction } from '@grafana/i18n/internal'; +import { TFunction, useTranslate } from '@grafana/i18n'; import { getAppEvents, isFetchError } from '@grafana/runtime'; import { Alert, Box, Button, Stack, Text, useStyles2 } from '@grafana/ui'; import { useDeleteRepositoryMutation, useGetFrontendSettingsQuery } from 'app/api/clients/provisioning'; diff --git a/public/app/features/search/page/components/ActionRow.tsx b/public/app/features/search/page/components/ActionRow.tsx index 23de16ab8ce..dce8e0256dd 100644 --- a/public/app/features/search/page/components/ActionRow.tsx +++ b/public/app/features/search/page/components/ActionRow.tsx @@ -2,8 +2,7 @@ import { css } from '@emotion/css'; import { FormEvent } from 'react'; import { GrafanaTheme2, SelectableValue } from '@grafana/data'; -import { Trans, useTranslate } from '@grafana/i18n'; -import { TFunction } from '@grafana/i18n/internal'; +import { TFunction, Trans, useTranslate } from '@grafana/i18n'; import { config } from '@grafana/runtime'; import { Button, Checkbox, Stack, RadioButtonGroup, useStyles2 } from '@grafana/ui'; import { SortPicker } from 'app/core/components/Select/SortPicker';