From f723b4746d6c38685c94790beb0c09f048cd5767 Mon Sep 17 00:00:00 2001 From: sunghyunkang1111 <114709653+sunghyunkang1111@users.noreply.github.com> Date: Wed, 11 Mar 2026 13:51:19 -0500 Subject: [PATCH] Localizations batch 5 and import update (#2422) * Locations import update * Fix formatting * Fix import paths --- src/@types/i18next.d.ts | 2 +- src/Explorer/ContextMenuButtonFactory.tsx | 3 +- src/Explorer/Controls/Dialog.tsx | 3 +- .../Controls/Settings/SettingsComponent.tsx | 3 +- .../Controls/Settings/SettingsRenderUtils.tsx | 5 +- .../ComputedPropertiesComponent.tsx | 3 +- .../ConflictResolutionComponent.tsx | 3 +- .../ContainerPolicyComponent.tsx | 3 +- .../DataMaskingComponent.tsx | 3 +- .../GlobalSecondaryIndexComponent.tsx | 3 +- .../GlobalSecondaryIndexSourceComponent.tsx | 3 +- .../GlobalSecondaryIndexTargetComponent.tsx | 3 +- .../IndexingPolicyComponent.tsx | 3 +- .../IndexingPolicyRefreshComponent.tsx | 3 +- .../AddMongoIndexComponent.tsx | 3 +- .../MongoIndexingPolicyComponent.tsx | 3 +- .../PartitionKeyComponent.tsx | 25 +++--- .../SettingsSubComponents/ScaleComponent.tsx | 9 +- .../SubSettingsComponent.tsx | 3 +- .../ThroughputBucketsComponent.tsx | 3 +- .../ThroughputInputAutoPilotV3Component.tsx | 21 +++-- .../Controls/Settings/SettingsUtils.tsx | 3 +- .../AddCollectionPanel/AddCollectionPanel.tsx | 89 ++++++++++--------- .../AddCollectionPanelUtility.tsx | 3 +- .../AddCollectionPanel.test.tsx.snap | 3 +- .../AddDatabasePanel/AddDatabasePanel.tsx | 11 +-- .../AddGlobalSecondaryIndexPanel.tsx | 3 +- .../CassandraAddCollectionPane.tsx | 3 +- .../ChangePartitionKeyPane.tsx | 3 +- .../CopyNotebookPane/CopyNotebookPane.tsx | 3 +- .../CopyNotebookPaneComponent.tsx | 3 +- .../DeleteCollectionConfirmationPane.tsx | 3 +- .../Panes/DeleteDatabaseConfirmationPanel.tsx | 3 +- .../ExecuteSprocParamsPane.tsx | 3 +- .../ExecuteSprocParamsPane/InputParameter.tsx | 3 +- .../GraphStylingPanel/GraphStylingPanel.tsx | 3 +- .../Panes/LoadQueryPane/LoadQueryPane.tsx | 3 +- .../Panes/NewVertexPanel/NewVertexPanel.tsx | 3 +- .../Panes/PanelInfoErrorComponent.tsx | 3 +- .../PublishNotebookPane.tsx | 3 +- .../PublishNotebookPaneComponent.tsx | 3 +- .../Panes/SaveQueryPane/SaveQueryPane.tsx | 3 +- .../Panes/SettingsPane/SettingsPane.tsx | 3 +- .../TableColumnSelectionPane.tsx | 3 +- .../Panes/Tables/AddTableEntityPanel.tsx | 3 +- .../Panes/Tables/EditTableEntityPanel.tsx | 3 +- .../TableQuerySelectPanel.tsx | 3 +- .../Panes/UploadItemsPane/UploadItemsPane.tsx | 3 +- src/Explorer/SplashScreen/FabricHome.tsx | 3 +- .../SplashScreen/SampleDataImportDialog.tsx | 3 +- src/Explorer/SplashScreen/SplashScreen.tsx | 3 +- src/Explorer/Tabs/ConflictsTab.ts | 3 +- .../Tabs/DocumentsTabV2/DocumentsTabV2.tsx | 3 +- .../MongoShellTab/MongoShellTabComponent.tsx | 3 +- .../Tabs/QueryTab/QueryTabComponent.tsx | 3 +- .../StoredProcedureTabComponent.tsx | 3 +- src/Explorer/Tabs/TriggerTabContent.tsx | 3 +- .../Tabs/UserDefinedFunctionTabContent.tsx | 3 +- src/Localization/en/Resources.json | 41 ++++++++- src/Localization/index.ts | 2 + 60 files changed, 176 insertions(+), 182 deletions(-) create mode 100644 src/Localization/index.ts diff --git a/src/@types/i18next.d.ts b/src/@types/i18next.d.ts index 65fe858fc..6187a401f 100644 --- a/src/@types/i18next.d.ts +++ b/src/@types/i18next.d.ts @@ -1,5 +1,5 @@ import "i18next"; -import Resources from "../Localization/en/Resources.json"; +import Resources from "Localization/en/Resources.json"; declare module "i18next" { interface CustomTypeOptions { diff --git a/src/Explorer/ContextMenuButtonFactory.tsx b/src/Explorer/ContextMenuButtonFactory.tsx index ad4013f7e..c92098211 100644 --- a/src/Explorer/ContextMenuButtonFactory.tsx +++ b/src/Explorer/ContextMenuButtonFactory.tsx @@ -7,8 +7,7 @@ import { AddGlobalSecondaryIndexPanelProps, } from "Explorer/Panes/AddGlobalSecondaryIndexPanel/AddGlobalSecondaryIndexPanel"; import { useDatabases } from "Explorer/useDatabases"; -import { Keys } from "Localization/Keys.generated"; -import { t } from "Localization/t"; +import { Keys, t } from "Localization"; import { isFabric, isFabricNative, openRestoreContainerDialog } from "Platform/Fabric/FabricUtil"; import { Action } from "Shared/Telemetry/TelemetryConstants"; import { traceOpen } from "Shared/Telemetry/TelemetryProcessor"; diff --git a/src/Explorer/Controls/Dialog.tsx b/src/Explorer/Controls/Dialog.tsx index 99718d291..30713f5b5 100644 --- a/src/Explorer/Controls/Dialog.tsx +++ b/src/Explorer/Controls/Dialog.tsx @@ -17,8 +17,7 @@ import { } from "@fluentui/react"; import React, { FC, useEffect } from "react"; import create, { UseStore } from "zustand"; -import { Keys } from "../../Localization/Keys.generated"; -import { t } from "../../Localization/t"; +import { Keys, t } from "Localization"; export interface DialogState { visible: boolean; diff --git a/src/Explorer/Controls/Settings/SettingsComponent.tsx b/src/Explorer/Controls/Settings/SettingsComponent.tsx index 3ed5787a5..ffe6a2f59 100644 --- a/src/Explorer/Controls/Settings/SettingsComponent.tsx +++ b/src/Explorer/Controls/Settings/SettingsComponent.tsx @@ -44,8 +44,7 @@ import { useCommandBar } from "../../Menus/CommandBar/CommandBarComponentAdapter import { SettingsTabV2 } from "../../Tabs/SettingsTabV2"; import "./SettingsComponent.less"; import { mongoIndexingPolicyAADError } from "./SettingsRenderUtils"; -import { Keys } from "../../../Localization/Keys.generated"; -import { t } from "../../../Localization/t"; +import { Keys, t } from "Localization"; import { ConflictResolutionComponent, ConflictResolutionComponentProps, diff --git a/src/Explorer/Controls/Settings/SettingsRenderUtils.tsx b/src/Explorer/Controls/Settings/SettingsRenderUtils.tsx index f95530f59..48fb311b3 100644 --- a/src/Explorer/Controls/Settings/SettingsRenderUtils.tsx +++ b/src/Explorer/Controls/Settings/SettingsRenderUtils.tsx @@ -22,11 +22,10 @@ import { Stack, Text, } from "@fluentui/react"; +import { Keys, t } from "Localization"; import * as React from "react"; import { Urls } from "../../../Common/Constants"; import { StyleConstants } from "../../../Common/StyleConstants"; -import { Keys } from "../../../Localization/Keys.generated"; -import { t } from "../../../Localization/t"; import { hoursInAMonth } from "../../../Shared/Constants"; import { computeRUUsagePriceHourly, @@ -371,7 +370,7 @@ export const getEstimatedSpendingElement = ( export const manualToAutoscaleDisclaimerElement: JSX.Element = ( {t(Keys.controls.settings.throughput.manualToAutoscaleDisclaimer)}{" "} - Learn more + {t(Keys.common.learnMore)} ); diff --git a/src/Explorer/Controls/Settings/SettingsSubComponents/ComputedPropertiesComponent.tsx b/src/Explorer/Controls/Settings/SettingsSubComponents/ComputedPropertiesComponent.tsx index 034e16cf5..03d64a5d2 100644 --- a/src/Explorer/Controls/Settings/SettingsSubComponents/ComputedPropertiesComponent.tsx +++ b/src/Explorer/Controls/Settings/SettingsSubComponents/ComputedPropertiesComponent.tsx @@ -4,8 +4,7 @@ import { titleAndInputStackProps, unsavedEditorWarningMessage } from "Explorer/C import { isDirty } from "Explorer/Controls/Settings/SettingsUtils"; import { loadMonaco } from "Explorer/LazyMonaco"; import { monacoTheme, useThemeStore } from "hooks/useTheme"; -import { Keys } from "../../../../Localization/Keys.generated"; -import { t } from "../../../../Localization/t"; +import { Keys, t } from "Localization"; import * as monaco from "monaco-editor"; import * as React from "react"; export interface ComputedPropertiesComponentProps { diff --git a/src/Explorer/Controls/Settings/SettingsSubComponents/ConflictResolutionComponent.tsx b/src/Explorer/Controls/Settings/SettingsSubComponents/ConflictResolutionComponent.tsx index 739b5c976..afe2dd531 100644 --- a/src/Explorer/Controls/Settings/SettingsSubComponents/ConflictResolutionComponent.tsx +++ b/src/Explorer/Controls/Settings/SettingsSubComponents/ConflictResolutionComponent.tsx @@ -2,8 +2,7 @@ import { ChoiceGroup, IChoiceGroupOption, ITextFieldProps, Stack, TextField } fr import * as React from "react"; import * as DataModels from "../../../../Contracts/DataModels"; import * as ViewModels from "../../../../Contracts/ViewModels"; -import { Keys } from "../../../../Localization/Keys.generated"; -import { t } from "../../../../Localization/t"; +import { Keys, t } from "Localization"; import { conflictResolutionCustomToolTip, conflictResolutionLwwTooltip, diff --git a/src/Explorer/Controls/Settings/SettingsSubComponents/ContainerPolicyComponent.tsx b/src/Explorer/Controls/Settings/SettingsSubComponents/ContainerPolicyComponent.tsx index 311f2bf4e..c025b8645 100644 --- a/src/Explorer/Controls/Settings/SettingsSubComponents/ContainerPolicyComponent.tsx +++ b/src/Explorer/Controls/Settings/SettingsSubComponents/ContainerPolicyComponent.tsx @@ -7,8 +7,7 @@ import { import { titleAndInputStackProps } from "Explorer/Controls/Settings/SettingsRenderUtils"; import { ContainerPolicyTabTypes, isDirty } from "Explorer/Controls/Settings/SettingsUtils"; import { VectorEmbeddingPoliciesComponent } from "Explorer/Controls/VectorSearch/VectorEmbeddingPoliciesComponent"; -import { Keys } from "../../../../Localization/Keys.generated"; -import { t } from "../../../../Localization/t"; +import { Keys, t } from "Localization"; import React from "react"; export interface ContainerPolicyComponentProps { diff --git a/src/Explorer/Controls/Settings/SettingsSubComponents/DataMaskingComponent.tsx b/src/Explorer/Controls/Settings/SettingsSubComponents/DataMaskingComponent.tsx index 8c8f9ff86..2a5535db0 100644 --- a/src/Explorer/Controls/Settings/SettingsSubComponents/DataMaskingComponent.tsx +++ b/src/Explorer/Controls/Settings/SettingsSubComponents/DataMaskingComponent.tsx @@ -2,8 +2,7 @@ import { MessageBar, MessageBarType, Stack } from "@fluentui/react"; import * as monaco from "monaco-editor"; import * as React from "react"; import * as DataModels from "../../../../Contracts/DataModels"; -import { Keys } from "../../../../Localization/Keys.generated"; -import { t } from "../../../../Localization/t"; +import { Keys, t } from "Localization"; import { loadMonaco } from "../../../LazyMonaco"; import { titleAndInputStackProps, unsavedEditorWarningMessage } from "../SettingsRenderUtils"; import { isDirty as isContentDirty, isDataMaskingEnabled } from "../SettingsUtils"; diff --git a/src/Explorer/Controls/Settings/SettingsSubComponents/GlobalSecondaryIndexComponent.tsx b/src/Explorer/Controls/Settings/SettingsSubComponents/GlobalSecondaryIndexComponent.tsx index fe9ee7889..e96a81e71 100644 --- a/src/Explorer/Controls/Settings/SettingsSubComponents/GlobalSecondaryIndexComponent.tsx +++ b/src/Explorer/Controls/Settings/SettingsSubComponents/GlobalSecondaryIndexComponent.tsx @@ -2,8 +2,7 @@ import { FontIcon, Link, Stack, Text } from "@fluentui/react"; import Explorer from "Explorer/Explorer"; import React from "react"; import * as ViewModels from "../../../../Contracts/ViewModels"; -import { Keys } from "../../../../Localization/Keys.generated"; -import { t } from "../../../../Localization/t"; +import { Keys, t } from "Localization"; import { GlobalSecondaryIndexSourceComponent } from "./GlobalSecondaryIndexSourceComponent"; import { GlobalSecondaryIndexTargetComponent } from "./GlobalSecondaryIndexTargetComponent"; diff --git a/src/Explorer/Controls/Settings/SettingsSubComponents/GlobalSecondaryIndexSourceComponent.tsx b/src/Explorer/Controls/Settings/SettingsSubComponents/GlobalSecondaryIndexSourceComponent.tsx index 04ce13c50..d06beab22 100644 --- a/src/Explorer/Controls/Settings/SettingsSubComponents/GlobalSecondaryIndexSourceComponent.tsx +++ b/src/Explorer/Controls/Settings/SettingsSubComponents/GlobalSecondaryIndexSourceComponent.tsx @@ -9,8 +9,7 @@ import { useSidePanel } from "hooks/useSidePanel"; import * as monaco from "monaco-editor"; import React, { useEffect, useRef } from "react"; import * as ViewModels from "../../../../Contracts/ViewModels"; -import { Keys } from "../../../../Localization/Keys.generated"; -import { t } from "../../../../Localization/t"; +import { Keys, t } from "Localization"; export interface GlobalSecondaryIndexSourceComponentProps { collection: ViewModels.Collection; diff --git a/src/Explorer/Controls/Settings/SettingsSubComponents/GlobalSecondaryIndexTargetComponent.tsx b/src/Explorer/Controls/Settings/SettingsSubComponents/GlobalSecondaryIndexTargetComponent.tsx index 211ab54b8..2b8908fbb 100644 --- a/src/Explorer/Controls/Settings/SettingsSubComponents/GlobalSecondaryIndexTargetComponent.tsx +++ b/src/Explorer/Controls/Settings/SettingsSubComponents/GlobalSecondaryIndexTargetComponent.tsx @@ -1,8 +1,7 @@ import { Stack, Text } from "@fluentui/react"; import * as React from "react"; import * as ViewModels from "../../../../Contracts/ViewModels"; -import { Keys } from "../../../../Localization/Keys.generated"; -import { t } from "../../../../Localization/t"; +import { Keys, t } from "Localization"; export interface GlobalSecondaryIndexTargetComponentProps { collection: ViewModels.Collection; diff --git a/src/Explorer/Controls/Settings/SettingsSubComponents/IndexingPolicyComponent.tsx b/src/Explorer/Controls/Settings/SettingsSubComponents/IndexingPolicyComponent.tsx index db2fbbf61..3ce87eacb 100644 --- a/src/Explorer/Controls/Settings/SettingsSubComponents/IndexingPolicyComponent.tsx +++ b/src/Explorer/Controls/Settings/SettingsSubComponents/IndexingPolicyComponent.tsx @@ -3,8 +3,7 @@ import { monacoTheme, useThemeStore } from "hooks/useTheme"; import * as monaco from "monaco-editor"; import * as React from "react"; import * as DataModels from "../../../../Contracts/DataModels"; -import { Keys } from "../../../../Localization/Keys.generated"; -import { t } from "../../../../Localization/t"; +import { Keys, t } from "Localization"; import { loadMonaco } from "../../../LazyMonaco"; import { titleAndInputStackProps, unsavedEditorWarningMessage } from "../SettingsRenderUtils"; import { isDirty, isIndexTransforming } from "../SettingsUtils"; diff --git a/src/Explorer/Controls/Settings/SettingsSubComponents/IndexingPolicyRefresh/IndexingPolicyRefreshComponent.tsx b/src/Explorer/Controls/Settings/SettingsSubComponents/IndexingPolicyRefresh/IndexingPolicyRefreshComponent.tsx index 0bf803cbc..463112e05 100644 --- a/src/Explorer/Controls/Settings/SettingsSubComponents/IndexingPolicyRefresh/IndexingPolicyRefreshComponent.tsx +++ b/src/Explorer/Controls/Settings/SettingsSubComponents/IndexingPolicyRefresh/IndexingPolicyRefreshComponent.tsx @@ -1,8 +1,7 @@ import { MessageBar, MessageBarType } from "@fluentui/react"; import * as React from "react"; import { handleError } from "../../../../../Common/ErrorHandlingUtils"; -import { Keys } from "../../../../../Localization/Keys.generated"; -import { t } from "../../../../../Localization/t"; +import { Keys, t } from "Localization"; import { mongoIndexTransformationRefreshingMessage, renderMongoIndexTransformationRefreshMessage, diff --git a/src/Explorer/Controls/Settings/SettingsSubComponents/MongoIndexingPolicy/AddMongoIndexComponent.tsx b/src/Explorer/Controls/Settings/SettingsSubComponents/MongoIndexingPolicy/AddMongoIndexComponent.tsx index ab0f5a1d9..95d8d6460 100644 --- a/src/Explorer/Controls/Settings/SettingsSubComponents/MongoIndexingPolicy/AddMongoIndexComponent.tsx +++ b/src/Explorer/Controls/Settings/SettingsSubComponents/MongoIndexingPolicy/AddMongoIndexComponent.tsx @@ -9,8 +9,7 @@ import { IDropdownOption, ITextField, } from "@fluentui/react"; -import { Keys } from "../../../../../Localization/Keys.generated"; -import { t } from "../../../../../Localization/t"; +import { Keys, t } from "Localization"; import { addMongoIndexSubElementsTokens, mongoErrorMessageStyles, diff --git a/src/Explorer/Controls/Settings/SettingsSubComponents/MongoIndexingPolicy/MongoIndexingPolicyComponent.tsx b/src/Explorer/Controls/Settings/SettingsSubComponents/MongoIndexingPolicy/MongoIndexingPolicyComponent.tsx index ef74be2f2..450547a61 100644 --- a/src/Explorer/Controls/Settings/SettingsSubComponents/MongoIndexingPolicy/MongoIndexingPolicyComponent.tsx +++ b/src/Explorer/Controls/Settings/SettingsSubComponents/MongoIndexingPolicy/MongoIndexingPolicyComponent.tsx @@ -15,8 +15,7 @@ import { } from "@fluentui/react"; import * as React from "react"; import { MongoIndex } from "../../../../../Utils/arm/generatedClients/cosmos/types"; -import { Keys } from "../../../../../Localization/Keys.generated"; -import { t } from "../../../../../Localization/t"; +import { Keys, t } from "Localization"; import { CollapsibleSectionComponent } from "../../../CollapsiblePanel/CollapsibleSectionComponent"; import { addMongoIndexStackProps, diff --git a/src/Explorer/Controls/Settings/SettingsSubComponents/PartitionKeyComponent.tsx b/src/Explorer/Controls/Settings/SettingsSubComponents/PartitionKeyComponent.tsx index 67fd856cd..d276d6371 100644 --- a/src/Explorer/Controls/Settings/SettingsSubComponents/PartitionKeyComponent.tsx +++ b/src/Explorer/Controls/Settings/SettingsSubComponents/PartitionKeyComponent.tsx @@ -18,8 +18,7 @@ import { cancelDataTransferJob, pollDataTransferJob } from "Common/dataAccess/da import { Platform, configContext } from "ConfigContext"; import Explorer from "Explorer/Explorer"; import { ChangePartitionKeyPane } from "Explorer/Panes/ChangePartitionKeyPane/ChangePartitionKeyPane"; -import { Keys } from "../../../../Localization/Keys.generated"; -import { t } from "../../../../Localization/t"; +import { Keys, t } from "Localization"; import { CosmosSqlDataTransferDataSourceSink, DataTransferJobGetResults, @@ -161,17 +160,17 @@ export const PartitionKeyComponent: React.FC = ({ }; const startPartitionkeyChangeWorkflow = () => { - useSidePanel - .getState() - .openSidePanel( - "Change partition key", - , - ); + useSidePanel.getState().openSidePanel( + t(Keys.controls.settings.partitionKeyEditor.changePartitionKey, { + partitionKeyName: t(Keys.controls.settings.partitionKey.partitionKey).toLowerCase(), + }), + , + ); }; const getPercentageComplete = () => { diff --git a/src/Explorer/Controls/Settings/SettingsSubComponents/ScaleComponent.tsx b/src/Explorer/Controls/Settings/SettingsSubComponents/ScaleComponent.tsx index 38cb670be..1a0aed184 100644 --- a/src/Explorer/Controls/Settings/SettingsSubComponents/ScaleComponent.tsx +++ b/src/Explorer/Controls/Settings/SettingsSubComponents/ScaleComponent.tsx @@ -1,11 +1,10 @@ import { Link, MessageBar, MessageBarType, Stack, Text, TextField } from "@fluentui/react"; +import { Keys, t } from "Localization"; import * as React from "react"; import * as Constants from "../../../../Common/Constants"; import { Platform, configContext } from "../../../../ConfigContext"; import * as DataModels from "../../../../Contracts/DataModels"; import * as ViewModels from "../../../../Contracts/ViewModels"; -import { Keys } from "../../../../Localization/Keys.generated"; -import { t } from "../../../../Localization/t"; import * as SharedConstants from "../../../../Shared/Constants"; import { userContext } from "../../../../UserContext"; import * as AutoPilotUtils from "../../../../Utils/AutoPilotUtils"; @@ -94,8 +93,10 @@ export class ScaleComponent extends React.Component { } const minThroughput: string = this.getMinRUs().toLocaleString(); - const maxThroughput: string = !this.props.isFixedContainer ? "unlimited" : this.getMaxRUs().toLocaleString(); - return `Throughput (${minThroughput} - ${maxThroughput} RU/s)`; + const maxThroughput: string = !this.props.isFixedContainer + ? t(Keys.controls.settings.scale.unlimited) + : this.getMaxRUs().toLocaleString(); + return t(Keys.controls.settings.scale.throughputRangeLabel, { min: minThroughput, max: maxThroughput }); }; public canThroughputExceedMaximumValue = (): boolean => { diff --git a/src/Explorer/Controls/Settings/SettingsSubComponents/SubSettingsComponent.tsx b/src/Explorer/Controls/Settings/SettingsSubComponents/SubSettingsComponent.tsx index 8db9733b9..6020a3547 100644 --- a/src/Explorer/Controls/Settings/SettingsSubComponents/SubSettingsComponent.tsx +++ b/src/Explorer/Controls/Settings/SettingsSubComponents/SubSettingsComponent.tsx @@ -12,8 +12,7 @@ import { } from "@fluentui/react"; import * as React from "react"; import * as ViewModels from "../../../../Contracts/ViewModels"; -import { Keys } from "../../../../Localization/Keys.generated"; -import { t } from "../../../../Localization/t"; +import { Keys, t } from "Localization"; import { userContext } from "../../../../UserContext"; import { Int32 } from "../../../Panes/Tables/Validators/EntityPropertyValidationCommon"; import { diff --git a/src/Explorer/Controls/Settings/SettingsSubComponents/ThroughputInputComponents/ThroughputBucketsComponent.tsx b/src/Explorer/Controls/Settings/SettingsSubComponents/ThroughputInputComponents/ThroughputBucketsComponent.tsx index d401ec088..6d2bb9eb2 100644 --- a/src/Explorer/Controls/Settings/SettingsSubComponents/ThroughputInputComponents/ThroughputBucketsComponent.tsx +++ b/src/Explorer/Controls/Settings/SettingsSubComponents/ThroughputInputComponents/ThroughputBucketsComponent.tsx @@ -1,7 +1,6 @@ import { Label, Slider, Stack, TextField, Toggle } from "@fluentui/react"; import { ThroughputBucket } from "Contracts/DataModels"; -import { Keys } from "../../../../../Localization/Keys.generated"; -import { t } from "../../../../../Localization/t"; +import { Keys, t } from "Localization"; import React, { FC, useEffect, useState } from "react"; import { isDirty } from "../../SettingsUtils"; diff --git a/src/Explorer/Controls/Settings/SettingsSubComponents/ThroughputInputComponents/ThroughputInputAutoPilotV3Component.tsx b/src/Explorer/Controls/Settings/SettingsSubComponents/ThroughputInputComponents/ThroughputInputAutoPilotV3Component.tsx index 8158fb10c..816c05299 100644 --- a/src/Explorer/Controls/Settings/SettingsSubComponents/ThroughputInputComponents/ThroughputInputAutoPilotV3Component.tsx +++ b/src/Explorer/Controls/Settings/SettingsSubComponents/ThroughputInputComponents/ThroughputInputAutoPilotV3Component.tsx @@ -16,10 +16,9 @@ import { Text, TextField, } from "@fluentui/react"; +import { Keys, t } from "Localization"; import React from "react"; import * as DataModels from "../../../../../Contracts/DataModels"; -import { Keys } from "../../../../../Localization/Keys.generated"; -import { t } from "../../../../../Localization/t"; import * as SharedConstants from "../../../../../Shared/Constants"; import { Action, ActionModifiers } from "../../../../../Shared/Telemetry/TelemetryConstants"; import * as TelemetryProcessor from "../../../../../Shared/Telemetry/TelemetryProcessor"; @@ -336,13 +335,16 @@ export class ThroughputInputAutoPilotV3Component extends React.Component< - {newPrices.currencySign} {calculateEstimateNumber(newPrices.hourlyPrice)}/hr + {newPrices.currencySign} {calculateEstimateNumber(newPrices.hourlyPrice)} + {t(Keys.controls.settings.costEstimate.perHour)} - {newPrices.currencySign} {calculateEstimateNumber(newPrices.dailyPrice)}/day + {newPrices.currencySign} {calculateEstimateNumber(newPrices.dailyPrice)} + {t(Keys.controls.settings.costEstimate.perDay)} - {newPrices.currencySign} {calculateEstimateNumber(newPrices.monthlyPrice)}/mo + {newPrices.currencySign} {calculateEstimateNumber(newPrices.monthlyPrice)} + {t(Keys.controls.settings.costEstimate.perMonth)} @@ -359,13 +361,16 @@ export class ThroughputInputAutoPilotV3Component extends React.Component< - {prices.currencySign} {calculateEstimateNumber(prices.hourlyPrice)}/hr + {prices.currencySign} {calculateEstimateNumber(prices.hourlyPrice)} + {t(Keys.controls.settings.costEstimate.perHour)} - {prices.currencySign} {calculateEstimateNumber(prices.dailyPrice)}/day + {prices.currencySign} {calculateEstimateNumber(prices.dailyPrice)} + {t(Keys.controls.settings.costEstimate.perDay)} - {prices.currencySign} {calculateEstimateNumber(prices.monthlyPrice)}/mo + {prices.currencySign} {calculateEstimateNumber(prices.monthlyPrice)} + {t(Keys.controls.settings.costEstimate.perMonth)} diff --git a/src/Explorer/Controls/Settings/SettingsUtils.tsx b/src/Explorer/Controls/Settings/SettingsUtils.tsx index c5be75ade..f445caefd 100644 --- a/src/Explorer/Controls/Settings/SettingsUtils.tsx +++ b/src/Explorer/Controls/Settings/SettingsUtils.tsx @@ -1,8 +1,7 @@ import * as Constants from "../../../Common/Constants"; import * as DataModels from "../../../Contracts/DataModels"; import * as ViewModels from "../../../Contracts/ViewModels"; -import { Keys } from "../../../Localization/Keys.generated"; -import { t } from "../../../Localization/t"; +import { Keys, t } from "Localization"; import { isFabricNative } from "../../../Platform/Fabric/FabricUtil"; import { userContext } from "../../../UserContext"; import { isCapabilityEnabled } from "../../../Utils/CapabilityUtils"; diff --git a/src/Explorer/Panes/AddCollectionPanel/AddCollectionPanel.tsx b/src/Explorer/Panes/AddCollectionPanel/AddCollectionPanel.tsx index 59d0f56e5..0ac56a8c0 100644 --- a/src/Explorer/Panes/AddCollectionPanel/AddCollectionPanel.tsx +++ b/src/Explorer/Panes/AddCollectionPanel/AddCollectionPanel.tsx @@ -42,8 +42,7 @@ import { } from "Explorer/Panes/AddCollectionPanel/AddCollectionPanelUtility"; import { useSidePanel } from "hooks/useSidePanel"; import { useTeachingBubble } from "hooks/useTeachingBubble"; -import { Keys } from "Localization/Keys.generated"; -import { t } from "Localization/t"; +import { Keys, t } from "Localization"; import { DEFAULT_FABRIC_NATIVE_CONTAINER_THROUGHPUT, isFabricNative } from "Platform/Fabric/FabricUtil"; import React from "react"; import { CollectionCreation } from "Shared/Constants"; @@ -185,25 +184,25 @@ export class AddCollectionPanel extends React.Component this.setState({ teachingBubbleStep: 2 }) }} - secondaryButtonProps={{ text: "Cancel", onClick: () => this.setState({ teachingBubbleStep: 0 }) }} + primaryButtonProps={{ text: t(Keys.common.next), onClick: () => this.setState({ teachingBubbleStep: 2 }) }} + secondaryButtonProps={{ + text: t(Keys.common.cancel), + onClick: () => this.setState({ teachingBubbleStep: 0 }), + }} onDismiss={() => this.setState({ teachingBubbleStep: 0 })} - footerContent="Step 1 of 4" + footerContent={t(Keys.panes.addCollection.teachingBubble.stepOfTotal, { current: "1", total: "4" })} > - - Database is the parent of a container. You can create a new database or use an existing one. In this - tutorial we are creating a new database named SampleDB. - + {t(Keys.panes.addCollection.teachingBubble.step1Body)} - Learn more about resources. + {t(Keys.panes.addCollection.teachingBubble.step1LearnMore)} @@ -211,21 +210,21 @@ export class AddCollectionPanel extends React.Component this.setState({ teachingBubbleStep: 3 }) }} - secondaryButtonProps={{ text: "Previous", onClick: () => this.setState({ teachingBubbleStep: 1 }) }} + primaryButtonProps={{ text: t(Keys.common.next), onClick: () => this.setState({ teachingBubbleStep: 3 }) }} + secondaryButtonProps={{ + text: t(Keys.common.previous), + onClick: () => this.setState({ teachingBubbleStep: 1 }), + }} onDismiss={() => this.setState({ teachingBubbleStep: 0 })} - footerContent="Step 2 of 4" + footerContent={t(Keys.panes.addCollection.teachingBubble.stepOfTotal, { current: "2", total: "4" })} > - - Cosmos DB recommends sharing throughput across database. Autoscale will give you a flexible amount of - throughput based on the max RU/s set (Request Units). - + {t(Keys.panes.addCollection.teachingBubble.step2Body)} - Learn more about RU/s. + {t(Keys.panes.addCollection.teachingBubble.step2LearnMore)} @@ -233,36 +232,41 @@ export class AddCollectionPanel extends React.Component this.setState({ teachingBubbleStep: 4 }) }} - secondaryButtonProps={{ text: "Previous", onClick: () => this.setState({ teachingBubbleStep: 2 }) }} + primaryButtonProps={{ text: t(Keys.common.next), onClick: () => this.setState({ teachingBubbleStep: 4 }) }} + secondaryButtonProps={{ + text: t(Keys.common.previous), + onClick: () => this.setState({ teachingBubbleStep: 2 }), + }} onDismiss={() => this.setState({ teachingBubbleStep: 0 })} - footerContent="Step 3 of 4" + footerContent={t(Keys.panes.addCollection.teachingBubble.stepOfTotal, { current: "3", total: "4" })} > - Name your container + {t(Keys.panes.addCollection.teachingBubble.step3Body)} )} {this.state.teachingBubbleStep === 4 && ( { this.setState({ teachingBubbleStep: 5 }); this.submit(); }, }} - secondaryButtonProps={{ text: "Previous", onClick: () => this.setState({ teachingBubbleStep: 2 }) }} + secondaryButtonProps={{ + text: t(Keys.common.previous), + onClick: () => this.setState({ teachingBubbleStep: 2 }), + }} onDismiss={() => this.setState({ teachingBubbleStep: 0 })} - footerContent="Step 4 of 4" + footerContent={t(Keys.panes.addCollection.teachingBubble.stepOfTotal, { current: "4", total: "4" })} > - Last step - you will need to define a partition key for your collection. /address was chosen for this - particular example. A good partition key should have a wide range of possible value + {t(Keys.panes.addCollection.teachingBubble.step4Body)} )} @@ -272,7 +276,9 @@ export class AddCollectionPanel extends React.Component - Database {userContext.apiType === "Mongo" ? "name" : "id"} + {userContext.apiType === "Mongo" + ? t(Keys.panes.addCollection.databaseFieldLabelName) + : t(Keys.panes.addCollection.databaseFieldLabelId)} ) => @@ -404,10 +410,10 @@ export class AddCollectionPanel extends React.Component, database: IDropdownOption) => this.setState({ selectedDatabaseId: database.key as string }) @@ -1027,16 +1033,15 @@ export class AddCollectionPanel extends React.Component {this.state.teachingBubbleStep === 5 && ( this.setState({ teachingBubbleStep: 0 })} styles={{ footer: { width: "100%" } }} > - A sample container is now being created and we are adding sample data for you. It should take about 1 - minute. + {t(Keys.panes.addCollection.teachingBubble.step5Body)}

- Once the sample container is created, review your sample dataset and follow next steps + {t(Keys.panes.addCollection.teachingBubble.step5BodyFollowUp)}

- Database - id + Database id = ({ if (throughput > SharedConstants.CollectionCreation.DefaultCollectionRUs100K && !isCostAcknowledged) { setFormErrors( - t(Keys.panes.addDatabase.acknowledgeSpendError, { period: isAutoscaleSelected ? "monthly" : "daily" }), + isAutoscaleSelected + ? t(Keys.panes.addDatabase.acknowledgeSpendErrorMonthly) + : t(Keys.panes.addDatabase.acknowledgeSpendErrorDaily), ); return false; } @@ -227,7 +228,7 @@ export const AddDatabasePanel: FunctionComponent = ({ {!isServerlessAccount() && ( = ({ }, }, }} - label="Provision throughput" + label={t(Keys.panes.addDatabase.provisionThroughputLabel)} checked={databaseCreateNewShared} onChange={() => setDatabaseCreateNewShared(!databaseCreateNewShared)} /> diff --git a/src/Explorer/Panes/AddGlobalSecondaryIndexPanel/AddGlobalSecondaryIndexPanel.tsx b/src/Explorer/Panes/AddGlobalSecondaryIndexPanel/AddGlobalSecondaryIndexPanel.tsx index ce768e552..f353f4f6a 100644 --- a/src/Explorer/Panes/AddGlobalSecondaryIndexPanel/AddGlobalSecondaryIndexPanel.tsx +++ b/src/Explorer/Panes/AddGlobalSecondaryIndexPanel/AddGlobalSecondaryIndexPanel.tsx @@ -40,8 +40,7 @@ import { PanelInfoErrorComponent } from "Explorer/Panes/PanelInfoErrorComponent" import { PanelLoadingScreen } from "Explorer/Panes/PanelLoadingScreen"; import { useDatabases } from "Explorer/useDatabases"; import { useSidePanel } from "hooks/useSidePanel"; -import { Keys } from "Localization/Keys.generated"; -import { t } from "Localization/t"; +import { Keys, t } from "Localization"; import React, { MutableRefObject, useEffect, useRef, useState } from "react"; import { CollectionCreation } from "Shared/Constants"; import { Action } from "Shared/Telemetry/TelemetryConstants"; diff --git a/src/Explorer/Panes/CassandraAddCollectionPane/CassandraAddCollectionPane.tsx b/src/Explorer/Panes/CassandraAddCollectionPane/CassandraAddCollectionPane.tsx index 1bf31e5b5..525373d64 100644 --- a/src/Explorer/Panes/CassandraAddCollectionPane/CassandraAddCollectionPane.tsx +++ b/src/Explorer/Panes/CassandraAddCollectionPane/CassandraAddCollectionPane.tsx @@ -3,8 +3,7 @@ import * as Constants from "Common/Constants"; import { getErrorMessage, getErrorStack } from "Common/ErrorHandlingUtils"; import { InfoTooltip } from "Common/Tooltip/InfoTooltip"; import { useSidePanel } from "hooks/useSidePanel"; -import { Keys } from "Localization/Keys.generated"; -import { t } from "Localization/t"; +import { Keys, t } from "Localization"; import React, { FunctionComponent, useState } from "react"; import * as SharedConstants from "Shared/Constants"; import { Action } from "Shared/Telemetry/TelemetryConstants"; diff --git a/src/Explorer/Panes/ChangePartitionKeyPane/ChangePartitionKeyPane.tsx b/src/Explorer/Panes/ChangePartitionKeyPane/ChangePartitionKeyPane.tsx index 4ee6437ea..5a91c6755 100644 --- a/src/Explorer/Panes/ChangePartitionKeyPane/ChangePartitionKeyPane.tsx +++ b/src/Explorer/Panes/ChangePartitionKeyPane/ChangePartitionKeyPane.tsx @@ -26,8 +26,7 @@ import { import Explorer from "Explorer/Explorer"; import { RightPaneForm } from "Explorer/Panes/RightPaneForm/RightPaneForm"; import { useDatabases } from "Explorer/useDatabases"; -import { Keys } from "Localization/Keys.generated"; -import { t } from "Localization/t"; +import { Keys, t } from "Localization"; import { userContext } from "UserContext"; import { getCollectionName } from "Utils/APITypeUtils"; import { ValidCosmosDbIdDescription, ValidCosmosDbIdInputPattern } from "Utils/ValidationUtils"; diff --git a/src/Explorer/Panes/CopyNotebookPane/CopyNotebookPane.tsx b/src/Explorer/Panes/CopyNotebookPane/CopyNotebookPane.tsx index d623a8db3..8968e868a 100644 --- a/src/Explorer/Panes/CopyNotebookPane/CopyNotebookPane.tsx +++ b/src/Explorer/Panes/CopyNotebookPane/CopyNotebookPane.tsx @@ -4,8 +4,7 @@ import { HttpStatusCodes, PoolIdType } from "../../../Common/Constants"; import { getErrorMessage, handleError } from "../../../Common/ErrorHandlingUtils"; import { GitHubOAuthService } from "../../../GitHub/GitHubOAuthService"; import { IPinnedRepo, JunoClient } from "../../../Juno/JunoClient"; -import { Keys } from "../../../Localization/Keys.generated"; -import { t } from "../../../Localization/t"; +import { Keys, t } from "Localization"; import * as GitHubUtils from "../../../Utils/GitHubUtils"; import * as NotificationConsoleUtils from "../../../Utils/NotificationConsoleUtils"; import { useSidePanel } from "../../../hooks/useSidePanel"; diff --git a/src/Explorer/Panes/CopyNotebookPane/CopyNotebookPaneComponent.tsx b/src/Explorer/Panes/CopyNotebookPane/CopyNotebookPaneComponent.tsx index 78a9839fe..fa661457b 100644 --- a/src/Explorer/Panes/CopyNotebookPane/CopyNotebookPaneComponent.tsx +++ b/src/Explorer/Panes/CopyNotebookPane/CopyNotebookPaneComponent.tsx @@ -12,8 +12,7 @@ import { import { GitHubReposTitle } from "Explorer/Tree/ResourceTree"; import React, { FormEvent, FunctionComponent } from "react"; import { IPinnedRepo } from "../../../Juno/JunoClient"; -import { Keys } from "../../../Localization/Keys.generated"; -import { t } from "../../../Localization/t"; +import { Keys, t } from "Localization"; import * as GitHubUtils from "../../../Utils/GitHubUtils"; import { useNotebook } from "../../Notebook/useNotebook"; diff --git a/src/Explorer/Panes/DeleteCollectionConfirmationPane/DeleteCollectionConfirmationPane.tsx b/src/Explorer/Panes/DeleteCollectionConfirmationPane/DeleteCollectionConfirmationPane.tsx index 6ce8ba413..be592fb2a 100644 --- a/src/Explorer/Panes/DeleteCollectionConfirmationPane/DeleteCollectionConfirmationPane.tsx +++ b/src/Explorer/Panes/DeleteCollectionConfirmationPane/DeleteCollectionConfirmationPane.tsx @@ -4,8 +4,7 @@ import DeleteFeedback from "Common/DeleteFeedback"; import { getErrorMessage, getErrorStack } from "Common/ErrorHandlingUtils"; import { deleteCollection } from "Common/dataAccess/deleteCollection"; import { Collection } from "Contracts/ViewModels"; -import { Keys } from "Localization/Keys.generated"; -import { t } from "Localization/t"; +import { Keys, t } from "Localization"; import { DefaultExperienceUtility } from "Shared/DefaultExperienceUtility"; import { Action, ActionModifiers } from "Shared/Telemetry/TelemetryConstants"; import * as TelemetryProcessor from "Shared/Telemetry/TelemetryProcessor"; diff --git a/src/Explorer/Panes/DeleteDatabaseConfirmationPanel.tsx b/src/Explorer/Panes/DeleteDatabaseConfirmationPanel.tsx index 81d281e97..c8823766f 100644 --- a/src/Explorer/Panes/DeleteDatabaseConfirmationPanel.tsx +++ b/src/Explorer/Panes/DeleteDatabaseConfirmationPanel.tsx @@ -5,8 +5,7 @@ import DeleteFeedback from "Common/DeleteFeedback"; import { getErrorMessage, getErrorStack } from "Common/ErrorHandlingUtils"; import { deleteDatabase } from "Common/dataAccess/deleteDatabase"; import { Collection, Database } from "Contracts/ViewModels"; -import { Keys } from "Localization/Keys.generated"; -import { t } from "Localization/t"; +import { Keys, t } from "Localization"; import { DefaultExperienceUtility } from "Shared/DefaultExperienceUtility"; import { Action, ActionModifiers } from "Shared/Telemetry/TelemetryConstants"; import * as TelemetryProcessor from "Shared/Telemetry/TelemetryProcessor"; diff --git a/src/Explorer/Panes/ExecuteSprocParamsPane/ExecuteSprocParamsPane.tsx b/src/Explorer/Panes/ExecuteSprocParamsPane/ExecuteSprocParamsPane.tsx index 7ec983803..15725f222 100644 --- a/src/Explorer/Panes/ExecuteSprocParamsPane/ExecuteSprocParamsPane.tsx +++ b/src/Explorer/Panes/ExecuteSprocParamsPane/ExecuteSprocParamsPane.tsx @@ -3,8 +3,7 @@ import { useBoolean } from "@fluentui/react-hooks"; import React, { FunctionComponent, useRef, useState } from "react"; import AddPropertyIcon from "../../../../images/Add-property.svg"; import { useSidePanel } from "../../../hooks/useSidePanel"; -import { Keys } from "../../../Localization/Keys.generated"; -import { t } from "../../../Localization/t"; +import { Keys, t } from "Localization"; import { logConsoleError } from "../../../Utils/NotificationConsoleUtils"; import StoredProcedure from "../../Tree/StoredProcedure"; import { RightPaneForm, RightPaneFormProps } from "../RightPaneForm/RightPaneForm"; diff --git a/src/Explorer/Panes/ExecuteSprocParamsPane/InputParameter.tsx b/src/Explorer/Panes/ExecuteSprocParamsPane/InputParameter.tsx index 78e2edf8b..2b3fd92ab 100644 --- a/src/Explorer/Panes/ExecuteSprocParamsPane/InputParameter.tsx +++ b/src/Explorer/Panes/ExecuteSprocParamsPane/InputParameter.tsx @@ -11,8 +11,7 @@ import { import React, { FunctionComponent } from "react"; import AddPropertyIcon from "../../../../images/Add-property.svg"; import EntityCancelIcon from "../../../../images/Entity_cancel.svg"; -import { Keys } from "../../../Localization/Keys.generated"; -import { t } from "../../../Localization/t"; +import { Keys, t } from "Localization"; const dropdownStyles: Partial = { dropdown: { width: 100 } }; const options = [ diff --git a/src/Explorer/Panes/GraphStylingPanel/GraphStylingPanel.tsx b/src/Explorer/Panes/GraphStylingPanel/GraphStylingPanel.tsx index decc7cdb3..c6a277191 100644 --- a/src/Explorer/Panes/GraphStylingPanel/GraphStylingPanel.tsx +++ b/src/Explorer/Panes/GraphStylingPanel/GraphStylingPanel.tsx @@ -1,7 +1,6 @@ import React, { FunctionComponent } from "react"; import * as ViewModels from "../../../Contracts/ViewModels"; -import { Keys } from "../../../Localization/Keys.generated"; -import { t } from "../../../Localization/t"; +import { Keys, t } from "Localization"; import { useSidePanel } from "../../../hooks/useSidePanel"; import { GraphStyleComponent } from "../../Graph/GraphStyleComponent/GraphStyleComponent"; import { IGraphConfig } from "../../Tabs/GraphTab"; diff --git a/src/Explorer/Panes/LoadQueryPane/LoadQueryPane.tsx b/src/Explorer/Panes/LoadQueryPane/LoadQueryPane.tsx index ef9942004..be10d61ff 100644 --- a/src/Explorer/Panes/LoadQueryPane/LoadQueryPane.tsx +++ b/src/Explorer/Panes/LoadQueryPane/LoadQueryPane.tsx @@ -5,8 +5,7 @@ import folderIcon from "../../../../images/folder_16x16.svg"; import { logError } from "../../../Common/Logger"; import { Collection } from "../../../Contracts/ViewModels"; import { useSidePanel } from "../../../hooks/useSidePanel"; -import { Keys } from "../../../Localization/Keys.generated"; -import { t } from "../../../Localization/t"; +import { Keys, t } from "Localization"; import { userContext } from "../../../UserContext"; import { logConsoleError, logConsoleInfo, logConsoleProgress } from "../../../Utils/NotificationConsoleUtils"; import { useSelectedNode } from "../../useSelectedNode"; diff --git a/src/Explorer/Panes/NewVertexPanel/NewVertexPanel.tsx b/src/Explorer/Panes/NewVertexPanel/NewVertexPanel.tsx index 5570cb3f4..9611f0606 100644 --- a/src/Explorer/Panes/NewVertexPanel/NewVertexPanel.tsx +++ b/src/Explorer/Panes/NewVertexPanel/NewVertexPanel.tsx @@ -1,8 +1,7 @@ import { useBoolean } from "@fluentui/react-hooks"; import React, { FunctionComponent, useState } from "react"; import * as ViewModels from "../../../Contracts/ViewModels"; -import { Keys } from "../../../Localization/Keys.generated"; -import { t } from "../../../Localization/t"; +import { Keys, t } from "Localization"; import { useSidePanel } from "../../../hooks/useSidePanel"; import { NewVertexComponent } from "../../Graph/NewVertexComponent/NewVertexComponent"; import { RightPaneForm, RightPaneFormProps } from "../RightPaneForm/RightPaneForm"; diff --git a/src/Explorer/Panes/PanelInfoErrorComponent.tsx b/src/Explorer/Panes/PanelInfoErrorComponent.tsx index 76532db38..9b53bcb70 100644 --- a/src/Explorer/Panes/PanelInfoErrorComponent.tsx +++ b/src/Explorer/Panes/PanelInfoErrorComponent.tsx @@ -1,6 +1,5 @@ import { Icon, Link, Stack, Text } from "@fluentui/react"; -import { Keys } from "Localization/Keys.generated"; -import { t } from "Localization/t"; +import { Keys, t } from "Localization"; import React from "react"; import { useNotificationConsole } from "../../hooks/useNotificationConsole"; diff --git a/src/Explorer/Panes/PublishNotebookPane/PublishNotebookPane.tsx b/src/Explorer/Panes/PublishNotebookPane/PublishNotebookPane.tsx index e3bf676c5..e11155f37 100644 --- a/src/Explorer/Panes/PublishNotebookPane/PublishNotebookPane.tsx +++ b/src/Explorer/Panes/PublishNotebookPane/PublishNotebookPane.tsx @@ -5,8 +5,7 @@ import { getErrorMessage, getErrorStack, handleError } from "../../../Common/Err import { useNotebookSnapshotStore } from "../../../hooks/useNotebookSnapshotStore"; import { useSidePanel } from "../../../hooks/useSidePanel"; import { JunoClient } from "../../../Juno/JunoClient"; -import { Keys } from "../../../Localization/Keys.generated"; -import { t } from "../../../Localization/t"; +import { Keys, t } from "Localization"; import { Action } from "../../../Shared/Telemetry/TelemetryConstants"; import { traceFailure, traceStart, traceSuccess } from "../../../Shared/Telemetry/TelemetryProcessor"; import * as NotificationConsoleUtils from "../../../Utils/NotificationConsoleUtils"; diff --git a/src/Explorer/Panes/PublishNotebookPane/PublishNotebookPaneComponent.tsx b/src/Explorer/Panes/PublishNotebookPane/PublishNotebookPaneComponent.tsx index e73516a67..ae5257008 100644 --- a/src/Explorer/Panes/PublishNotebookPane/PublishNotebookPaneComponent.tsx +++ b/src/Explorer/Panes/PublishNotebookPane/PublishNotebookPaneComponent.tsx @@ -1,8 +1,7 @@ import { Dropdown, IDropdownProps, ITextFieldProps, Stack, Text, TextField } from "@fluentui/react"; import { ImmutableNotebook } from "@nteract/commutable"; import React, { FunctionComponent, useState } from "react"; -import { Keys } from "../../../Localization/Keys.generated"; -import { t } from "../../../Localization/t"; +import { Keys, t } from "Localization"; import { GalleryCardComponent } from "../../Controls/NotebookGallery/Cards/GalleryCardComponent"; import * as FileSystemUtil from "../../Notebook/FileSystemUtil"; import { SnapshotRequest } from "../../Notebook/NotebookComponent/types"; diff --git a/src/Explorer/Panes/SaveQueryPane/SaveQueryPane.tsx b/src/Explorer/Panes/SaveQueryPane/SaveQueryPane.tsx index 3952e86b6..1249294c1 100644 --- a/src/Explorer/Panes/SaveQueryPane/SaveQueryPane.tsx +++ b/src/Explorer/Panes/SaveQueryPane/SaveQueryPane.tsx @@ -4,8 +4,7 @@ import React, { FunctionComponent, useState } from "react"; import { Areas, SavedQueries } from "../../../Common/Constants"; import { getErrorMessage, getErrorStack } from "../../../Common/ErrorHandlingUtils"; import { Query } from "../../../Contracts/DataModels"; -import { Keys } from "../../../Localization/Keys.generated"; -import { t } from "../../../Localization/t"; +import { Keys, t } from "Localization"; import { Action } from "../../../Shared/Telemetry/TelemetryConstants"; import { traceFailure, traceStart, traceSuccess } from "../../../Shared/Telemetry/TelemetryProcessor"; import { logConsoleError } from "../../../Utils/NotificationConsoleUtils"; diff --git a/src/Explorer/Panes/SettingsPane/SettingsPane.tsx b/src/Explorer/Panes/SettingsPane/SettingsPane.tsx index 00fc142cd..742bbafd6 100644 --- a/src/Explorer/Panes/SettingsPane/SettingsPane.tsx +++ b/src/Explorer/Panes/SettingsPane/SettingsPane.tsx @@ -24,8 +24,7 @@ import { InfoTooltip } from "Common/Tooltip/InfoTooltip"; import { Platform, configContext } from "ConfigContext"; import { useDialog } from "Explorer/Controls/Dialog"; import { useDatabases } from "Explorer/useDatabases"; -import { Keys } from "Localization/Keys.generated"; -import { t } from "Localization/t"; +import { Keys, t } from "Localization"; import { isFabric, isFabricNative } from "Platform/Fabric/FabricUtil"; import { AppStateComponentNames, diff --git a/src/Explorer/Panes/TableColumnSelectionPane/TableColumnSelectionPane.tsx b/src/Explorer/Panes/TableColumnSelectionPane/TableColumnSelectionPane.tsx index dadd00636..60767b57c 100644 --- a/src/Explorer/Panes/TableColumnSelectionPane/TableColumnSelectionPane.tsx +++ b/src/Explorer/Panes/TableColumnSelectionPane/TableColumnSelectionPane.tsx @@ -11,8 +11,7 @@ import { import { configContext } from "ConfigContext"; import { ColumnDefinition } from "Explorer/Tabs/DocumentsTabV2/DocumentsTableComponent"; import { CosmosFluentProvider, getPlatformTheme } from "Explorer/Theme/ThemeUtil"; -import { Keys } from "Localization/Keys.generated"; -import { t } from "Localization/t"; +import { Keys, t } from "Localization"; import React from "react"; import { useSidePanel } from "../../../hooks/useSidePanel"; diff --git a/src/Explorer/Panes/Tables/AddTableEntityPanel.tsx b/src/Explorer/Panes/Tables/AddTableEntityPanel.tsx index bc375e578..ffa5828ad 100644 --- a/src/Explorer/Panes/Tables/AddTableEntityPanel.tsx +++ b/src/Explorer/Panes/Tables/AddTableEntityPanel.tsx @@ -1,7 +1,6 @@ import { IDropdownOption, Image, Label, Stack, Text, TextField } from "@fluentui/react"; import { useBoolean } from "@fluentui/react-hooks"; -import { Keys } from "Localization/Keys.generated"; -import { t } from "Localization/t"; +import { Keys, t } from "Localization"; import { logConsoleError } from "Utils/NotificationConsoleUtils"; import React, { FunctionComponent, useEffect, useState } from "react"; import * as _ from "underscore"; diff --git a/src/Explorer/Panes/Tables/EditTableEntityPanel.tsx b/src/Explorer/Panes/Tables/EditTableEntityPanel.tsx index 19de83b3a..ad1218019 100644 --- a/src/Explorer/Panes/Tables/EditTableEntityPanel.tsx +++ b/src/Explorer/Panes/Tables/EditTableEntityPanel.tsx @@ -1,7 +1,6 @@ import { IDropdownOption, Image, Label, Stack, Text, TextField } from "@fluentui/react"; import { useBoolean } from "@fluentui/react-hooks"; -import { Keys } from "Localization/Keys.generated"; -import { t } from "Localization/t"; +import { Keys, t } from "Localization"; import { logConsoleError } from "Utils/NotificationConsoleUtils"; import React, { FunctionComponent, useEffect, useState } from "react"; import * as _ from "underscore"; diff --git a/src/Explorer/Panes/Tables/TableQuerySelectPanel/TableQuerySelectPanel.tsx b/src/Explorer/Panes/Tables/TableQuerySelectPanel/TableQuerySelectPanel.tsx index c46774ad8..8e64f0acf 100644 --- a/src/Explorer/Panes/Tables/TableQuerySelectPanel/TableQuerySelectPanel.tsx +++ b/src/Explorer/Panes/Tables/TableQuerySelectPanel/TableQuerySelectPanel.tsx @@ -1,6 +1,5 @@ import { Checkbox, Text } from "@fluentui/react"; -import { Keys } from "Localization/Keys.generated"; -import { t } from "Localization/t"; +import { Keys, t } from "Localization"; import React, { FunctionComponent, useEffect, useState } from "react"; import { userContext } from "../../../../UserContext"; import { useSidePanel } from "../../../../hooks/useSidePanel"; diff --git a/src/Explorer/Panes/UploadItemsPane/UploadItemsPane.tsx b/src/Explorer/Panes/UploadItemsPane/UploadItemsPane.tsx index 60a1f5c97..499c9f9b9 100644 --- a/src/Explorer/Panes/UploadItemsPane/UploadItemsPane.tsx +++ b/src/Explorer/Panes/UploadItemsPane/UploadItemsPane.tsx @@ -13,8 +13,7 @@ import { } from "@fluentui/react"; import { Upload } from "Common/Upload/Upload"; import { UploadDetailsRecord } from "Contracts/ViewModels"; -import { Keys } from "Localization/Keys.generated"; -import { t } from "Localization/t"; +import { Keys, t } from "Localization"; import { logConsoleError } from "Utils/NotificationConsoleUtils"; import React, { ChangeEvent, FunctionComponent, useReducer, useState } from "react"; import { getErrorMessage } from "../../Tables/Utilities"; diff --git a/src/Explorer/SplashScreen/FabricHome.tsx b/src/Explorer/SplashScreen/FabricHome.tsx index c03c26ae3..a70243a42 100644 --- a/src/Explorer/SplashScreen/FabricHome.tsx +++ b/src/Explorer/SplashScreen/FabricHome.tsx @@ -6,8 +6,7 @@ import { DocumentAddRegular, LinkMultipleRegular, OpenRegular } from "@fluentui/ import { SampleDataConfiguration, SampleDataImportDialog } from "Explorer/SplashScreen/SampleDataImportDialog"; import { SampleDataFile } from "Explorer/SplashScreen/SampleUtil"; import { CosmosFluentProvider } from "Explorer/Theme/ThemeUtil"; -import { Keys } from "Localization/Keys.generated"; -import { t } from "Localization/t"; +import { Keys, t } from "Localization"; import { isFabricNative, isFabricNativeReadOnly } from "Platform/Fabric/FabricUtil"; import * as React from "react"; import { userContext } from "UserContext"; diff --git a/src/Explorer/SplashScreen/SampleDataImportDialog.tsx b/src/Explorer/SplashScreen/SampleDataImportDialog.tsx index 320d795f7..a15cadf20 100644 --- a/src/Explorer/SplashScreen/SampleDataImportDialog.tsx +++ b/src/Explorer/SplashScreen/SampleDataImportDialog.tsx @@ -12,8 +12,7 @@ import { } from "@fluentui/react-components"; import Explorer from "Explorer/Explorer"; import { checkContainerExists, createContainer, importData, SampleDataFile } from "Explorer/SplashScreen/SampleUtil"; -import { Keys } from "Localization/Keys.generated"; -import { t } from "Localization/t"; +import { Keys, t } from "Localization"; import React, { useEffect, useState } from "react"; import * as ViewModels from "../../Contracts/ViewModels"; diff --git a/src/Explorer/SplashScreen/SplashScreen.tsx b/src/Explorer/SplashScreen/SplashScreen.tsx index 339bc80d9..57a57d7d2 100644 --- a/src/Explorer/SplashScreen/SplashScreen.tsx +++ b/src/Explorer/SplashScreen/SplashScreen.tsx @@ -16,8 +16,7 @@ import { sendMessage } from "Common/MessageHandler"; import { MessageTypes } from "Contracts/ExplorerContracts"; import { TerminalKind } from "Contracts/ViewModels"; import { SplashScreenButton } from "Explorer/SplashScreen/SplashScreenButton"; -import { Keys } from "Localization/Keys.generated"; -import { t } from "Localization/t"; +import { Keys, t } from "Localization"; import { Action } from "Shared/Telemetry/TelemetryConstants"; import { traceOpen } from "Shared/Telemetry/TelemetryProcessor"; import { useCarousel } from "hooks/useCarousel"; diff --git a/src/Explorer/Tabs/ConflictsTab.ts b/src/Explorer/Tabs/ConflictsTab.ts index 42bb930d2..f25c7d3c1 100644 --- a/src/Explorer/Tabs/ConflictsTab.ts +++ b/src/Explorer/Tabs/ConflictsTab.ts @@ -18,8 +18,7 @@ import { queryConflicts } from "../../Common/dataAccess/queryConflicts"; import { updateDocument } from "../../Common/dataAccess/updateDocument"; import * as DataModels from "../../Contracts/DataModels"; import * as ViewModels from "../../Contracts/ViewModels"; -import { Keys } from "../../Localization/Keys.generated"; -import { t } from "../../Localization/t"; +import { Keys, t } from "Localization"; import { Action } from "../../Shared/Telemetry/TelemetryConstants"; import * as TelemetryProcessor from "../../Shared/Telemetry/TelemetryProcessor"; import { CommandButtonComponentProps } from "../Controls/CommandButton/CommandButtonComponent"; diff --git a/src/Explorer/Tabs/DocumentsTabV2/DocumentsTabV2.tsx b/src/Explorer/Tabs/DocumentsTabV2/DocumentsTabV2.tsx index aef6236b1..75d63fc57 100644 --- a/src/Explorer/Tabs/DocumentsTabV2/DocumentsTabV2.tsx +++ b/src/Explorer/Tabs/DocumentsTabV2/DocumentsTabV2.tsx @@ -41,8 +41,7 @@ import { usePrevious } from "Explorer/Tabs/DocumentsTabV2/SelectionHelper"; import { CosmosFluentProvider, LayoutConstants, cosmosShorthands, tokens } from "Explorer/Theme/ThemeUtil"; import { useSelectedNode } from "Explorer/useSelectedNode"; import { KeyboardAction, KeyboardActionGroup, useKeyboardActionGroup } from "KeyboardShortcuts"; -import { Keys } from "Localization/Keys.generated"; -import { t } from "Localization/t"; +import { Keys, t } from "Localization"; import { isFabric } from "Platform/Fabric/FabricUtil"; import { QueryConstants } from "Shared/Constants"; import { LocalStorageUtility, StorageKey } from "Shared/StorageUtility"; diff --git a/src/Explorer/Tabs/MongoShellTab/MongoShellTabComponent.tsx b/src/Explorer/Tabs/MongoShellTab/MongoShellTabComponent.tsx index 024bc2b1c..d0979068c 100644 --- a/src/Explorer/Tabs/MongoShellTab/MongoShellTabComponent.tsx +++ b/src/Explorer/Tabs/MongoShellTab/MongoShellTabComponent.tsx @@ -1,8 +1,7 @@ import React, { Component } from "react"; import { configContext } from "../../../ConfigContext"; import * as ViewModels from "../../../Contracts/ViewModels"; -import { Keys } from "../../../Localization/Keys.generated"; -import { t } from "../../../Localization/t"; +import { Keys, t } from "Localization"; import { Action, ActionModifiers } from "../../../Shared/Telemetry/TelemetryConstants"; import * as TelemetryProcessor from "../../../Shared/Telemetry/TelemetryProcessor"; import { userContext } from "../../../UserContext"; diff --git a/src/Explorer/Tabs/QueryTab/QueryTabComponent.tsx b/src/Explorer/Tabs/QueryTab/QueryTabComponent.tsx index 5a231fbe7..4d92d1a4f 100644 --- a/src/Explorer/Tabs/QueryTab/QueryTabComponent.tsx +++ b/src/Explorer/Tabs/QueryTab/QueryTabComponent.tsx @@ -17,8 +17,7 @@ import { QueryTabStyles, useQueryTabStyles } from "Explorer/Tabs/QueryTab/Styles import { CosmosFluentProvider } from "Explorer/Theme/ThemeUtil"; import { useSelectedNode } from "Explorer/useSelectedNode"; import { KeyboardAction } from "KeyboardShortcuts"; -import { Keys } from "Localization/Keys.generated"; -import { t } from "Localization/t"; +import { Keys, t } from "Localization"; import { QueryConstants } from "Shared/Constants"; import { LocalStorageUtility, StorageKey } from "Shared/StorageUtility"; import { Action } from "Shared/Telemetry/TelemetryConstants"; diff --git a/src/Explorer/Tabs/StoredProcedureTab/StoredProcedureTabComponent.tsx b/src/Explorer/Tabs/StoredProcedureTab/StoredProcedureTabComponent.tsx index 34276730f..5b653716f 100644 --- a/src/Explorer/Tabs/StoredProcedureTab/StoredProcedureTabComponent.tsx +++ b/src/Explorer/Tabs/StoredProcedureTab/StoredProcedureTabComponent.tsx @@ -1,6 +1,7 @@ import { Resource, StoredProcedureDefinition } from "@azure/cosmos"; import { Pivot, PivotItem } from "@fluentui/react"; import { KeyboardAction } from "KeyboardShortcuts"; +import { Keys, t } from "Localization"; import { ValidCosmosDbIdDescription, ValidCosmosDbIdInputPattern } from "Utils/ValidationUtils"; import React from "react"; import ExecuteQueryIcon from "../../../../images/ExecuteQuery.svg"; @@ -11,8 +12,6 @@ import { createStoredProcedure } from "../../../Common/dataAccess/createStoredPr import { ExecuteSprocResult } from "../../../Common/dataAccess/executeStoredProcedure"; import { updateStoredProcedure } from "../../../Common/dataAccess/updateStoredProcedure"; import * as ViewModels from "../../../Contracts/ViewModels"; -import { Keys } from "../../../Localization/Keys.generated"; -import { t } from "../../../Localization/t"; import { useNotificationConsole } from "../../../hooks/useNotificationConsole"; import { useTabs } from "../../../hooks/useTabs"; import { CommandButtonComponentProps } from "../../Controls/CommandButton/CommandButtonComponent"; diff --git a/src/Explorer/Tabs/TriggerTabContent.tsx b/src/Explorer/Tabs/TriggerTabContent.tsx index a892b64d0..01a44f746 100644 --- a/src/Explorer/Tabs/TriggerTabContent.tsx +++ b/src/Explorer/Tabs/TriggerTabContent.tsx @@ -2,6 +2,7 @@ import { TriggerDefinition } from "@azure/cosmos"; import { IDropdownOption, IDropdownStyles, Label, TextField } from "@fluentui/react"; import { Dropdown } from "@fluentui/react/lib/Dropdown"; import { KeyboardAction } from "KeyboardShortcuts"; +import { Keys, t } from "Localization"; import { ValidCosmosDbIdDescription, ValidCosmosDbIdInputPattern } from "Utils/ValidationUtils"; import React, { Component } from "react"; import DiscardIcon from "../../../images/discard.svg"; @@ -11,8 +12,6 @@ import { getErrorMessage, getErrorStack } from "../../Common/ErrorHandlingUtils" import { createTrigger } from "../../Common/dataAccess/createTrigger"; import { updateTrigger } from "../../Common/dataAccess/updateTrigger"; import * as ViewModels from "../../Contracts/ViewModels"; -import { Keys } from "../../Localization/Keys.generated"; -import { t } from "../../Localization/t"; import { Action } from "../../Shared/Telemetry/TelemetryConstants"; import * as TelemetryProcessor from "../../Shared/Telemetry/TelemetryProcessor"; import { SqlTriggerResource } from "../../Utils/arm/generatedClients/cosmos/types"; diff --git a/src/Explorer/Tabs/UserDefinedFunctionTabContent.tsx b/src/Explorer/Tabs/UserDefinedFunctionTabContent.tsx index c409a6d69..4cadeddd7 100644 --- a/src/Explorer/Tabs/UserDefinedFunctionTabContent.tsx +++ b/src/Explorer/Tabs/UserDefinedFunctionTabContent.tsx @@ -2,6 +2,7 @@ import { UserDefinedFunctionDefinition } from "@azure/cosmos"; import { Label, TextField } from "@fluentui/react"; import { FluentProvider, webDarkTheme, webLightTheme } from "@fluentui/react-components"; import { KeyboardAction } from "KeyboardShortcuts"; +import { Keys, t } from "Localization"; import { ValidCosmosDbIdDescription, ValidCosmosDbIdInputPattern } from "Utils/ValidationUtils"; import { useThemeStore } from "hooks/useTheme"; import React, { Component } from "react"; @@ -12,8 +13,6 @@ import { getErrorMessage, getErrorStack } from "../../Common/ErrorHandlingUtils" import { createUserDefinedFunction } from "../../Common/dataAccess/createUserDefinedFunction"; import { updateUserDefinedFunction } from "../../Common/dataAccess/updateUserDefinedFunction"; import * as ViewModels from "../../Contracts/ViewModels"; -import { Keys } from "../../Localization/Keys.generated"; -import { t } from "../../Localization/t"; import { Action } from "../../Shared/Telemetry/TelemetryConstants"; import * as TelemetryProcessor from "../../Shared/Telemetry/TelemetryProcessor"; import { CommandButtonComponentProps } from "../Controls/CommandButton/CommandButtonComponent"; diff --git a/src/Localization/en/Resources.json b/src/Localization/en/Resources.json index 5d8d771af..55a823113 100644 --- a/src/Localization/en/Resources.json +++ b/src/Localization/en/Resources.json @@ -441,7 +441,11 @@ "shareThroughput": "Share throughput across {{collectionsLabel}}", "shareThroughputTooltip": "Provisioned throughput at the {{databaseLabel}} level will be shared across all {{collectionsLabel}} within the {{databaseLabel}}.", "greaterThanError": "Please enter a value greater than {{minValue}} for autopilot throughput", - "acknowledgeSpendError": "Please acknowledge the estimated {{period}} spend." + "acknowledgeSpendError": "Please acknowledge the estimated {{period}} spend.", + "acknowledgeSpendErrorMonthly": "Please acknowledge the estimated monthly spend.", + "acknowledgeSpendErrorDaily": "Please acknowledge the estimated daily spend.", + "provisionSharedThroughputTitle": "Provision shared throughput", + "provisionThroughputLabel": "Provision throughput" }, "addCollection": { "createNew": "Create new", @@ -493,7 +497,31 @@ "acknowledgeShareThroughputError": "Please acknowledge the estimated cost of this dedicated throughput.", "vectorPolicyError": "Please fix errors in container vector policy", "fullTextSearchPolicyError": "Please fix errors in container full text search policy", - "addingSampleDataSet": "Adding sample data set" + "addingSampleDataSet": "Adding sample data set", + "databaseFieldLabelName": "Database name", + "databaseFieldLabelId": "Database id", + "newDatabaseIdPlaceholder": "Type a new database id", + "newDatabaseIdAriaLabel": "New database id, Type a new database id", + "createNewDatabaseAriaLabel": "Create new database", + "useExistingDatabaseAriaLabel": "Use existing database", + "chooseExistingDatabase": "Choose an existing database", + "teachingBubble": { + "step1Headline": "Create sample database", + "step1Body": "Database is the parent of a container. You can create a new database or use an existing one. In this tutorial we are creating a new database named SampleDB.", + "step1LearnMore": "Learn more about resources.", + "step2Headline": "Setting throughput", + "step2Body": "Cosmos DB recommends sharing throughput across database. Autoscale will give you a flexible amount of throughput based on the max RU/s set (Request Units).", + "step2LearnMore": "Learn more about RU/s.", + "step3Headline": "Naming container", + "step3Body": "Name your container", + "step4Headline": "Setting partition key", + "step4Body": "Last step - you will need to define a partition key for your collection. /address was chosen for this particular example. A good partition key should have a wide range of possible value", + "step4CreateContainer": "Create container", + "step5Headline": "Creating sample container", + "step5Body": "A sample container is now being created and we are adding sample data for you. It should take about 1 minute.", + "step5BodyFollowUp": "Once the sample container is created, review your sample dataset and follow next steps", + "stepOfTotal": "Step {{current}} of {{total}}" + } }, "addCollectionUtility": { "shardKeyTooltip": "The shard key (field) is used to split your data across many replica sets (shards) to achieve unlimited scalability. It's critical to choose a field that will evenly distribute your data.", @@ -763,7 +791,10 @@ "howWeCalculate": "How we calculate this", "updatedCostPerMonth": "Updated cost per month", "currentCostPerMonth": "Current cost per month", - "perRu": "/RU" + "perRu": "/RU", + "perHour": "/hr", + "perDay": "/day", + "perMonth": "/mo" }, "throughput": { "manualToAutoscaleDisclaimer": "The starting autoscale max RU/s will be determined by the system, based on the current manual throughput settings and storage of your resource. After autoscale has been enabled, you can change the max RU/s.", @@ -858,7 +889,9 @@ "freeTierLearnMore": "Learn more.", "throughputRuS": "Throughput (RU/s)", "autoScaleCustomSettings": "Your account has custom settings that prevents setting throughput at the container level. Please work with your Cosmos DB engineering team point of contact to make changes.", - "keyspaceSharedThroughput": "This table shared throughput is configured at the keyspace" + "keyspaceSharedThroughput": "This table shared throughput is configured at the keyspace", + "throughputRangeLabel": "Throughput ({{min}} - {{max}} RU/s)", + "unlimited": "unlimited" }, "partitionKeyEditor": { "changePartitionKey": "Change {{partitionKeyName}}", diff --git a/src/Localization/index.ts b/src/Localization/index.ts new file mode 100644 index 000000000..dd2976d6d --- /dev/null +++ b/src/Localization/index.ts @@ -0,0 +1,2 @@ +export { Keys } from "./Keys.generated"; +export { t } from "./t";