From 9579d1270bc9193f8dcfedc3fae4bb321a5f6840 Mon Sep 17 00:00:00 2001 From: sunghyunkang1111 <114709653+sunghyunkang1111@users.noreply.github.com> Date: Tue, 3 Mar 2026 16:17:18 -0600 Subject: [PATCH] Localization first batch (#2408) --- src/Explorer/SplashScreen/FabricHome.tsx | 30 +- .../SplashScreen/SampleDataImportDialog.tsx | 46 ++- src/Explorer/SplashScreen/SplashScreen.tsx | 218 +++++++------- src/Localization/en/Resources.json | 282 ++++++++++++++++++ 4 files changed, 441 insertions(+), 135 deletions(-) diff --git a/src/Explorer/SplashScreen/FabricHome.tsx b/src/Explorer/SplashScreen/FabricHome.tsx index e7854631a..c03c26ae3 100644 --- a/src/Explorer/SplashScreen/FabricHome.tsx +++ b/src/Explorer/SplashScreen/FabricHome.tsx @@ -6,6 +6,8 @@ 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 { isFabricNative, isFabricNativeReadOnly } from "Platform/Fabric/FabricUtil"; import * as React from "react"; import { userContext } from "UserContext"; @@ -159,8 +161,8 @@ export const FabricHomeScreen: React.FC = (props: SplashScree const getSplashScreenButtons = (): JSX.Element => { const buttons: FabricHomeScreenButtonProps[] = [ { - title: "New container", - description: "Create a destination container to store your data", + title: t(Keys.splashScreen.fabric.newContainer.title), + description: t(Keys.splashScreen.fabric.newContainer.description), icon: , onClick: () => { const databaseId = isFabricNative() ? userContext.fabricContext?.databaseName : undefined; @@ -168,8 +170,8 @@ export const FabricHomeScreen: React.FC = (props: SplashScree }, }, { - title: "Sample Data", - description: "Load sample data in your database", + title: t(Keys.splashScreen.fabric.sampleData.title), + description: t(Keys.splashScreen.fabric.sampleData.description), icon: , onClick: () => { setSelectedSampleDataConfiguration({ @@ -181,8 +183,8 @@ export const FabricHomeScreen: React.FC = (props: SplashScree }, }, { - title: "Sample Vector Data", - description: "Load sample vector data with text-embedding-ada-002", + title: t(Keys.splashScreen.fabric.sampleVectorData.title), + description: t(Keys.splashScreen.fabric.sampleVectorData.description), icon: , onClick: () => { setSelectedSampleDataConfiguration({ @@ -194,14 +196,14 @@ export const FabricHomeScreen: React.FC = (props: SplashScree }, }, { - title: "App development", - description: "Start here to use an SDK to build your apps", + title: t(Keys.splashScreen.fabric.appDevelopment.title), + description: t(Keys.splashScreen.fabric.appDevelopment.description), icon: , onClick: () => window.open("https://aka.ms/cosmosdbfabricsdk", "_blank"), }, { - title: "Sample Gallery", - description: "Get real-world end-to-end samples", + title: t(Keys.splashScreen.fabric.sampleGallery.title), + description: t(Keys.splashScreen.fabric.sampleGallery.description), icon: , onClick: () => window.open("https://aka.ms/CosmosFabricSamplesGallery", "_blank"), }, @@ -222,7 +224,9 @@ export const FabricHomeScreen: React.FC = (props: SplashScree ); }; - const title = isFabricNativeReadOnly() ? "Use your database" : "Build your database"; + const title = isFabricNativeReadOnly() + ? t(Keys.splashScreen.fabric.useTitle) + : t(Keys.splashScreen.fabric.buildTitle); return ( <> @@ -238,9 +242,9 @@ export const FabricHomeScreen: React.FC = (props: SplashScree {getSplashScreenButtons()} {
- Need help?{" "} + {t(Keys.splashScreen.sections.needHelp)}{" "} - Learn more + {t(Keys.common.learnMore)}
} diff --git a/src/Explorer/SplashScreen/SampleDataImportDialog.tsx b/src/Explorer/SplashScreen/SampleDataImportDialog.tsx index 48f333115..320d795f7 100644 --- a/src/Explorer/SplashScreen/SampleDataImportDialog.tsx +++ b/src/Explorer/SplashScreen/SampleDataImportDialog.tsx @@ -12,6 +12,8 @@ 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 React, { useEffect, useState } from "react"; import * as ViewModels from "../../Contracts/ViewModels"; @@ -59,7 +61,7 @@ export const SampleDataImportDialog: React.FC<{ setStatus("creating"); const databaseName = props.sampleDataConfiguration.databaseName; if (checkContainerExists(databaseName, containerName)) { - const msg = `The container "${containerName}" in database "${databaseName}" already exists. Please delete it and retry.`; + const msg = t(Keys.splashScreen.sampleDataDialog.errorContainerExists, { containerName, databaseName }); setStatus("error"); setErrorMessage(msg); return; @@ -75,7 +77,11 @@ export const SampleDataImportDialog: React.FC<{ ); } catch (error) { setStatus("error"); - setErrorMessage(`Failed to create container: ${error instanceof Error ? error.message : String(error)}`); + setErrorMessage( + t(Keys.splashScreen.sampleDataDialog.errorCreateContainer, { + error: error instanceof Error ? error.message : String(error), + }), + ); return; } @@ -86,7 +92,11 @@ export const SampleDataImportDialog: React.FC<{ setStatus("completed"); } catch (error) { setStatus("error"); - setErrorMessage(`Failed to import data: ${error instanceof Error ? error.message : String(error)}`); + setErrorMessage( + t(Keys.splashScreen.sampleDataDialog.errorImportData, { + error: error instanceof Error ? error.message : String(error), + }), + ); } }; @@ -112,14 +122,26 @@ export const SampleDataImportDialog: React.FC<{ const renderContent = () => { switch (status) { case "idle": - return `Create a container "${containerName}" and import sample data into it. This may take a few minutes.`; + return t(Keys.splashScreen.sampleDataDialog.createPrompt, { containerName }); case "creating": - return ; + return ( + + ); case "importing": - return ; + return ( + + ); case "completed": - return `Successfully created "${containerName}" with sample data.`; + return t(Keys.splashScreen.sampleDataDialog.success, { containerName }); case "error": return (
@@ -132,14 +154,14 @@ export const SampleDataImportDialog: React.FC<{ const getButtonLabel = () => { switch (status) { case "idle": - return "Start"; + return t(Keys.splashScreen.sampleDataDialog.startButton); case "creating": case "importing": - return "Close"; + return t(Keys.common.close); case "completed": - return "Close"; + return t(Keys.common.close); case "error": - return "Close"; + return t(Keys.common.close); } }; @@ -147,7 +169,7 @@ export const SampleDataImportDialog: React.FC<{ props.setOpen(data.open)}> - Sample Data + {t(Keys.splashScreen.sampleDataDialog.title)}
{renderContent()}
diff --git a/src/Explorer/SplashScreen/SplashScreen.tsx b/src/Explorer/SplashScreen/SplashScreen.tsx index 162a78e5a..339bc80d9 100644 --- a/src/Explorer/SplashScreen/SplashScreen.tsx +++ b/src/Explorer/SplashScreen/SplashScreen.tsx @@ -251,8 +251,8 @@ export const SplashScreen: React.FC = ({ explorer }) => { { container.onNewCollectionClicked({ isQuickstart: true }); traceOpen(Action.LaunchQuickstart, { apiType: userContext.apiType }); @@ -260,8 +260,8 @@ export const SplashScreen: React.FC = ({ explorer }) => { /> { container.onNewCollectionClicked(); traceOpen(Action.NewContainerHomepage, { apiType: userContext.apiType }); @@ -272,10 +272,8 @@ export const SplashScreen: React.FC = ({ explorer }) => { { window.open("https://azurecosmosdb.github.io/gallery/?tags=example", "_blank"); traceOpen(Action.LearningResourcesClicked, { apiType: userContext.apiType }); @@ -283,8 +281,8 @@ export const SplashScreen: React.FC = ({ explorer }) => { /> useTabs.getState().openAndActivateReactTab(ReactTabKind.Connect)} /> @@ -299,7 +297,7 @@ export const SplashScreen: React.FC = ({ explorer }) => { usePostgres.getState().showPostgreTeachingBubble && !usePostgres.getState().showResetPasswordBubble && ( usePostgres.getState().setShowPostgreTeachingBubble(false)} @@ -311,15 +309,14 @@ export const SplashScreen: React.FC = ({ explorer }) => { preventDismissOnScroll: true, }} primaryButtonProps={{ - text: "Get started", + text: t(Keys.common.getStarted), onClick: () => { useTabs.getState().openAndActivateReactTab(ReactTabKind.Quickstart); usePostgres.getState().setShowPostgreTeachingBubble(false); }, }} > - Welcome! If you are new to Cosmos DB PGSQL and need help with getting started, here is where you can find - sample data, query. + {t(Keys.splashScreen.teachingBubble.newToPostgres.body)} )} {/*TODO: convert below to use SplashScreenButton */} @@ -351,7 +348,7 @@ export const SplashScreen: React.FC = ({ explorer }) => { ))} {userContext.apiType === "Postgres" && usePostgres.getState().showResetPasswordBubble && ( { @@ -366,7 +363,7 @@ export const SplashScreen: React.FC = ({ explorer }) => { preventDismissOnScroll: true, }} primaryButtonProps={{ - text: "Create", + text: t(Keys.common.create), onClick: () => { localStorage.setItem(userContext.databaseAccount.id, "true"); sendMessage({ @@ -376,7 +373,7 @@ export const SplashScreen: React.FC = ({ explorer }) => { }, }} > - If you haven't changed your password yet, change it now. + {t(Keys.splashScreen.teachingBubble.resetPassword.body)} )}
@@ -395,8 +392,8 @@ export const SplashScreen: React.FC = ({ explorer }) => { const launchQuickstartBtn = { id: "quickstartDescription", iconSrc: QuickStartIcon, - title: "Launch quick start", - description: "Launch a quick start tutorial to get started with sample data", + title: t(Keys.splashScreen.quickStart.title), + description: t(Keys.splashScreen.quickStart.description), onClick: () => { if (userContext.apiType === "Postgres" || userContext.apiType === "VCoreMongo") { useTabs.getState().openAndActivateReactTab(ReactTabKind.Quickstart); @@ -418,8 +415,8 @@ export const SplashScreen: React.FC = ({ explorer }) => { if (userContext.apiType === "Postgres") { return { iconSrc: PowerShellIcon, - title: "PostgreSQL Shell", - description: "Create table and interact with data using PostgreSQL's shell interface", + title: t(Keys.splashScreen.shell.postgres.title), + description: t(Keys.splashScreen.shell.postgres.description), onClick: () => container.openNotebookTerminal(TerminalKind.Postgres), }; } @@ -427,16 +424,16 @@ export const SplashScreen: React.FC = ({ explorer }) => { if (userContext.apiType === "VCoreMongo") { return { iconSrc: PowerShellIcon, - title: "Mongo Shell", - description: "Create a collection and interact with data using MongoDB's shell interface", + title: t(Keys.splashScreen.shell.vcoreMongo.title), + description: t(Keys.splashScreen.shell.vcoreMongo.description), onClick: () => container.openNotebookTerminal(TerminalKind.VCoreMongo), }; } return { iconSrc: ContainersIcon, - title: `New ${getCollectionName()}`, - description: "Create a new container for storage and throughput", + title: t(Keys.splashScreen.newCollection.title, { collectionName: getCollectionName() }), + description: t(Keys.splashScreen.newCollection.description), onClick: () => { container.onNewCollectionClicked(); traceOpen(Action.NewContainerHomepage, { apiType: userContext.apiType }); @@ -446,19 +443,19 @@ export const SplashScreen: React.FC = ({ explorer }) => { const getThirdCard = (): SplashScreenItem => { let icon = ConnectIcon; - let title = "Connect"; - let description = "Prefer using your own choice of tooling? Find the connection string you need to connect"; + let title = t(Keys.splashScreen.connectCard.title); + let description = t(Keys.splashScreen.connectCard.description); let onClick = () => useTabs.getState().openAndActivateReactTab(ReactTabKind.Connect); if (userContext.apiType === "Postgres") { - title = "Connect with pgAdmin"; - description = "Prefer pgAdmin? Find your connection strings here"; + title = t(Keys.splashScreen.connectCard.pgAdmin.title); + description = t(Keys.splashScreen.connectCard.pgAdmin.description); } if (userContext.apiType === "VCoreMongo") { icon = VisualStudioIcon; - title = "Connect with VS Code"; - description = "Query and Manage your MongoDB and DocumentDB clusters in Visual Studio Code"; + title = t(Keys.splashScreen.connectCard.vsCode.title); + description = t(Keys.splashScreen.connectCard.vsCode.description); onClick = () => container?.openInVsCode && container.openInVsCode(); } @@ -487,7 +484,7 @@ export const SplashScreen: React.FC = ({ explorer }) => { info: activity.path, iconSrc: NotebookIcon, title: activity.name, - description: "Notebook", + description: t(Keys.splashScreen.sections.notebook), onClick: () => { const notebookItem = container.createNotebookContentItemFile(activity.name, activity.path); notebookItem && container.openNotebook(notebookItem); @@ -526,18 +523,18 @@ export const SplashScreen: React.FC = ({ explorer }) => { items = [ { link: "https://aka.ms/msl-modeling-partitioning-2", - title: "Advanced Modeling Patterns", - description: "Learn advanced strategies to optimize your database.", + title: t(Keys.splashScreen.top3Items.sql.advancedModeling.title), + description: t(Keys.splashScreen.top3Items.sql.advancedModeling.description), }, { link: "https://aka.ms/msl-modeling-partitioning-1", - title: "Partitioning Best Practices", - description: "Learn to apply data model and partitioning strategies.", + title: t(Keys.splashScreen.top3Items.sql.partitioning.title), + description: t(Keys.splashScreen.top3Items.sql.partitioning.description), }, { link: "https://aka.ms/msl-resource-planning", - title: "Plan Your Resource Requirements", - description: "Get to know the different configuration choices.", + title: t(Keys.splashScreen.top3Items.sql.resourcePlanning.title), + description: t(Keys.splashScreen.top3Items.sql.resourcePlanning.description), }, ]; break; @@ -545,18 +542,18 @@ export const SplashScreen: React.FC = ({ explorer }) => { items = [ { link: "https://aka.ms/mongodbintro", - title: "What is the MongoDB API?", - description: "Understand Azure Cosmos DB for MongoDB and its features.", + title: t(Keys.splashScreen.top3Items.mongo.whatIsMongo.title), + description: t(Keys.splashScreen.top3Items.mongo.whatIsMongo.description), }, { link: "https://aka.ms/mongodbfeaturesupport", - title: "Features and Syntax", - description: "Discover the advantages and features", + title: t(Keys.splashScreen.top3Items.mongo.features.title), + description: t(Keys.splashScreen.top3Items.mongo.features.description), }, { link: "https://aka.ms/mongodbpremigration", - title: "Migrate Your Data", - description: "Pre-migration steps for moving data", + title: t(Keys.splashScreen.top3Items.mongo.migrate.title), + description: t(Keys.splashScreen.top3Items.mongo.migrate.description), }, ]; break; @@ -564,18 +561,18 @@ export const SplashScreen: React.FC = ({ explorer }) => { items = [ { link: "https://aka.ms/cassandrajava", - title: "Build a Java App", - description: "Create a Java app using an SDK.", + title: t(Keys.splashScreen.top3Items.cassandra.buildJavaApp.title), + description: t(Keys.splashScreen.top3Items.cassandra.buildJavaApp.description), }, { link: "https://aka.ms/cassandrapartitioning", - title: "Partitioning Best Practices", - description: "Learn how partitioning works.", + title: t(Keys.splashScreen.top3Items.cassandra.partitioning.title), + description: t(Keys.splashScreen.top3Items.cassandra.partitioning.description), }, { link: "https://aka.ms/cassandraRu", - title: "Request Units (RUs)", - description: "Understand RU charges.", + title: t(Keys.splashScreen.top3Items.cassandra.requestUnits.title), + description: t(Keys.splashScreen.top3Items.cassandra.requestUnits.description), }, ]; break; @@ -583,18 +580,18 @@ export const SplashScreen: React.FC = ({ explorer }) => { items = [ { link: "https://aka.ms/Graphdatamodeling", - title: "Data Modeling", - description: "Graph data modeling recommendations", + title: t(Keys.splashScreen.top3Items.gremlin.dataModeling.title), + description: t(Keys.splashScreen.top3Items.gremlin.dataModeling.description), }, { link: "https://aka.ms/graphpartitioning", - title: "Partitioning Best Practices", - description: "Learn how partitioning works", + title: t(Keys.splashScreen.top3Items.gremlin.partitioning.title), + description: t(Keys.splashScreen.top3Items.gremlin.partitioning.description), }, { link: "https://aka.ms/graphapiquery", - title: "Query Data", - description: "Querying data with Gremlin", + title: t(Keys.splashScreen.top3Items.gremlin.queryData.title), + description: t(Keys.splashScreen.top3Items.gremlin.queryData.description), }, ]; break; @@ -602,18 +599,18 @@ export const SplashScreen: React.FC = ({ explorer }) => { items = [ { link: "https://aka.ms/tableintro", - title: "What is the Table API?", - description: "Understand Azure Cosmos DB for Table and its features", + title: t(Keys.splashScreen.top3Items.tables.whatIsTable.title), + description: t(Keys.splashScreen.top3Items.tables.whatIsTable.description), }, { link: "https://aka.ms/tableimport", - title: "Migrate your data", - description: "Learn how to migrate your data", + title: t(Keys.splashScreen.top3Items.tables.migrate.title), + description: t(Keys.splashScreen.top3Items.tables.migrate.description), }, { link: "https://aka.ms/tablefaq", - title: "Azure Cosmos DB for Table FAQs", - description: "Common questions about Azure Cosmos DB for Table", + title: t(Keys.splashScreen.top3Items.tables.faq.title), + description: t(Keys.splashScreen.top3Items.tables.faq.description), }, ]; break; @@ -670,7 +667,7 @@ export const SplashScreen: React.FC = ({ explorer }) => { {recentItems.length > 0 && ( clearMostRecent()} className={styles.listItemTitle}> - Clear Recents + {t(Keys.splashScreen.sections.clearRecents)} )} @@ -685,15 +682,15 @@ export const SplashScreen: React.FC = ({ explorer }) => { } const cdbLiveTv: item = { link: "https://developer.azurecosmosdb.com/tv", - title: "Learn the Fundamentals", - description: "Watch Azure Cosmos DB Live TV show introductory and how to videos.", + title: t(Keys.splashScreen.learningResources.liveTv.title), + description: t(Keys.splashScreen.learningResources.liveTv.description), }; const commonItems: item[] = [ { link: "https://learn.microsoft.com/azure/cosmos-db/data-explorer-shortcuts", - title: "Data Explorer keyboard shortcuts", - description: "Learn keyboard shortcuts to navigate Data Explorer.", + title: t(Keys.splashScreen.learningResources.shortcuts.title), + description: t(Keys.splashScreen.learningResources.shortcuts.description), }, ]; @@ -704,14 +701,14 @@ export const SplashScreen: React.FC = ({ explorer }) => { apiItems = [ { link: "https://aka.ms/msl-sdk-connect", - title: "Get Started using an SDK", - description: "Learn about the Azure Cosmos DB SDK.", + title: t(Keys.splashScreen.learningResources.sql.sdk.title), + description: t(Keys.splashScreen.learningResources.sql.sdk.description), }, cdbLiveTv, { link: "https://aka.ms/msl-move-data", - title: "Migrate Your Data", - description: "Migrate data using Azure services and open-source solutions.", + title: t(Keys.splashScreen.learningResources.sql.migrate.title), + description: t(Keys.splashScreen.learningResources.sql.migrate.description), }, ]; break; @@ -719,13 +716,13 @@ export const SplashScreen: React.FC = ({ explorer }) => { apiItems = [ { link: "https://aka.ms/mongonodejs", - title: "Build an app with Node.js", - description: "Create a Node.js app.", + title: t(Keys.splashScreen.learningResources.mongo.nodejs.title), + description: t(Keys.splashScreen.learningResources.mongo.nodejs.description), }, { link: "https://aka.ms/mongopython", - title: "Getting Started Guide", - description: "Learn the basics to get started.", + title: t(Keys.splashScreen.learningResources.mongo.gettingStarted.title), + description: t(Keys.splashScreen.learningResources.mongo.gettingStarted.description), }, cdbLiveTv, ]; @@ -734,14 +731,14 @@ export const SplashScreen: React.FC = ({ explorer }) => { apiItems = [ { link: "https://aka.ms/cassandracontainer", - title: "Create a Container", - description: "Get to know the create a container options.", + title: t(Keys.splashScreen.learningResources.cassandra.createContainer.title), + description: t(Keys.splashScreen.learningResources.cassandra.createContainer.description), }, cdbLiveTv, { link: "https://aka.ms/Cassandrathroughput", - title: "Provision Throughput", - description: "Learn how to configure throughput.", + title: t(Keys.splashScreen.learningResources.cassandra.throughput.title), + description: t(Keys.splashScreen.learningResources.cassandra.throughput.description), }, ]; break; @@ -749,13 +746,13 @@ export const SplashScreen: React.FC = ({ explorer }) => { apiItems = [ { link: "https://aka.ms/graphquickstart", - title: "Get Started ", - description: "Create, query, and traverse using the Gremlin console", + title: t(Keys.splashScreen.learningResources.gremlin.getStarted.title), + description: t(Keys.splashScreen.learningResources.gremlin.getStarted.description), }, { link: "https://aka.ms/graphimport", - title: "Import Graph Data", - description: "Learn Bulk ingestion data using BulkExecutor", + title: t(Keys.splashScreen.learningResources.gremlin.importData.title), + description: t(Keys.splashScreen.learningResources.gremlin.importData.description), }, cdbLiveTv, ]; @@ -764,13 +761,13 @@ export const SplashScreen: React.FC = ({ explorer }) => { apiItems = [ { link: "https://aka.ms/tabledotnet", - title: "Build a .NET App", - description: "How to access Azure Cosmos DB for Table from a .NET app.", + title: t(Keys.splashScreen.learningResources.tables.dotnet.title), + description: t(Keys.splashScreen.learningResources.tables.dotnet.description), }, { link: "https://aka.ms/Tablejava", - title: "Build a Java App", - description: "Create a Azure Cosmos DB for Table app with Java SDK ", + title: t(Keys.splashScreen.learningResources.tables.java.title), + description: t(Keys.splashScreen.learningResources.tables.java.description), }, cdbLiveTv, ]; @@ -809,17 +806,17 @@ export const SplashScreen: React.FC = ({ explorer }) => { const postgresNextStepItems: { link: string; title: string; description: string }[] = [ { link: "https://go.microsoft.com/fwlink/?linkid=2208312", - title: "Data Modeling", + title: t(Keys.splashScreen.nextStepItems.postgres.dataModeling), description: "", }, { link: " https://go.microsoft.com/fwlink/?linkid=2206941 ", - title: "How to choose a Distribution Column", + title: t(Keys.splashScreen.nextStepItems.postgres.distributionColumn), description: "", }, { link: "https://go.microsoft.com/fwlink/?linkid=2207425", - title: "Build Apps with Python/Java/Django", + title: t(Keys.splashScreen.nextStepItems.postgres.buildApps), description: "", }, ]; @@ -827,17 +824,17 @@ export const SplashScreen: React.FC = ({ explorer }) => { const vcoreMongoNextStepItems: { link: string; title: string; description: string }[] = [ { link: "https://learn.microsoft.com/azure/cosmos-db/mongodb/vcore/migration-options", - title: "Migrate Data", + title: t(Keys.splashScreen.nextStepItems.vcoreMongo.migrateData), description: "", }, { link: "https://learn.microsoft.com/en-us/azure/cosmos-db/mongodb/vcore/vector-search-ai", - title: "Build AI apps with Vector Search", + title: t(Keys.splashScreen.nextStepItems.vcoreMongo.vectorSearch), description: "", }, { link: "https://learn.microsoft.com/en-us/azure/cosmos-db/mongodb/vcore/tutorial-nodejs-web-app?tabs=github-codespaces", - title: "Build Apps with Nodejs", + title: t(Keys.splashScreen.nextStepItems.vcoreMongo.buildApps), description: "", }, ]; @@ -865,17 +862,17 @@ export const SplashScreen: React.FC = ({ explorer }) => { const postgresLearnMoreItems: { link: string; title: string; description: string }[] = [ { link: "https://go.microsoft.com/fwlink/?linkid=2207226", - title: "Performance Tuning", + title: t(Keys.splashScreen.learnMoreItems.postgres.performanceTuning), description: "", }, { link: "https://go.microsoft.com/fwlink/?linkid=2208037", - title: "Useful Diagnostic Queries", + title: t(Keys.splashScreen.learnMoreItems.postgres.diagnosticQueries), description: "", }, { link: "https://go.microsoft.com/fwlink/?linkid=2205270", - title: "Distributed SQL Reference", + title: t(Keys.splashScreen.learnMoreItems.postgres.sqlReference), description: "", }, ]; @@ -883,17 +880,17 @@ export const SplashScreen: React.FC = ({ explorer }) => { const vcoreMongoLearnMoreItems: { link: string; title: string; description: string }[] = [ { link: "https://learn.microsoft.com/en-us/azure/cosmos-db/mongodb/vcore/vector-search", - title: "Vector Search", + title: t(Keys.splashScreen.learnMoreItems.vcoreMongo.vectorSearch), description: "", }, { link: "https://learn.microsoft.com/en-us/azure/cosmos-db/mongodb/vcore/how-to-create-text-index", - title: "Text Indexing", + title: t(Keys.splashScreen.learnMoreItems.vcoreMongo.textIndexing), description: "", }, { link: "https://learn.microsoft.com/en-us/azure/cosmos-db/mongodb/vcore/troubleshoot-common-issues", - title: "Troubleshoot common issues", + title: t(Keys.splashScreen.learnMoreItems.vcoreMongo.troubleshoot), description: "", }, ]; @@ -934,24 +931,25 @@ export const SplashScreen: React.FC = ({ explorer }) => { persistentBeak > { useCarousel.getState().setShowCoachMark(false); container.onNewCollectionClicked({ isQuickstart: true }); }, }} secondaryButtonProps={{ - text: "Cancel", + text: t(Keys.common.cancel), onClick: () => useCarousel.getState().setShowCoachMark(false), }} onDismiss={() => useCarousel.getState().setShowCoachMark(false)} > - You will be guided to create a sample container with sample data, then we will give you a tour of data - explorer. You can also cancel launching this tour and explore yourself + {t(Keys.splashScreen.teachingBubble.coachMark.body)} )} @@ -965,7 +963,7 @@ export const SplashScreen: React.FC = ({ explorer }) => { fontFamily: '"Segoe UI Semibold", "Segoe UI", "Segoe WP", Tahoma, Arial, sans-serif', }} > - Next steps + {t(Keys.splashScreen.sections.nextSteps)} {getNextStepItems()} @@ -977,7 +975,7 @@ export const SplashScreen: React.FC = ({ explorer }) => { fontFamily: '"Segoe UI Semibold", "Segoe UI", "Segoe WP", Tahoma, Arial, sans-serif', }} > - Tips & learn more + {t(Keys.splashScreen.sections.tipsAndLearnMore)} {getTipsAndLearnMoreItems()} @@ -986,15 +984,15 @@ export const SplashScreen: React.FC = ({ explorer }) => { ) : (
-

Recents

+

{t(Keys.splashScreen.sections.recents)}

{getRecentItems()}
-

Top 3 things you need to know

+

{t(Keys.splashScreen.sections.top3)}

{top3Items()}
-

Learning Resources

+

{t(Keys.splashScreen.sections.learningResources)}

{getLearningResourceItems()}
diff --git a/src/Localization/en/Resources.json b/src/Localization/en/Resources.json index 834c642ac..d3c1caaf8 100644 --- a/src/Localization/en/Resources.json +++ b/src/Localization/en/Resources.json @@ -1,4 +1,37 @@ { + "common": { + "ok": "OK", + "cancel": "Cancel", + "close": "Close", + "save": "Save", + "delete": "Delete", + "update": "Update", + "discard": "Discard", + "execute": "Execute", + "loading": "Loading", + "loadingEllipsis": "Loading...", + "next": "Next", + "previous": "Previous", + "yes": "Yes", + "no": "No", + "result": "Result", + "learnMore": "Learn more", + "getStarted": "Get started", + "retry": "Retry", + "apply": "Apply", + "refresh": "Refresh", + "copy": "Copy", + "create": "Create", + "confirm": "Confirm", + "open": "Open", + "rename": "Rename", + "download": "Download", + "upload": "Upload", + "connect": "Connect", + "remove": "Remove", + "increaseValueBy1": "Increase value by 1", + "decreaseValueBy1": "Decrease value by 1" + }, "splashScreen": { "title": { "default": "Welcome to Azure Cosmos DB", @@ -8,6 +41,255 @@ "subtitle": { "default": "Globally distributed, multi-model database service for any scale", "getStarted": "Get started with our sample datasets, documentation, and additional tools." + }, + "quickStart": { + "title": "Launch quick start", + "description": "Launch a quick start tutorial to get started with sample data" + }, + "newCollection": { + "title": "New {{collectionName}}", + "description": "Create a new container for storage and throughput" + }, + "samplesGallery": { + "title": "Azure Cosmos DB Samples Gallery", + "description": "Discover samples that showcase scalable, intelligent app patterns. Try one now to see how fast you can go from concept to code with Cosmos DB" + }, + "connectCard": { + "title": "Connect", + "description": "Prefer using your own choice of tooling? Find the connection string you need to connect", + "pgAdmin": { + "title": "Connect with pgAdmin", + "description": "Prefer pgAdmin? Find your connection strings here" + }, + "vsCode": { + "title": "Connect with VS Code", + "description": "Query and Manage your MongoDB and DocumentDB clusters in Visual Studio Code" + } + }, + "shell": { + "postgres": { + "title": "PostgreSQL Shell", + "description": "Create table and interact with data using PostgreSQL's shell interface" + }, + "vcoreMongo": { + "title": "Mongo Shell", + "description": "Create a collection and interact with data using MongoDB's shell interface" + } + }, + "teachingBubble": { + "newToPostgres": { + "headline": "New to Cosmos DB PGSQL?", + "body": "Welcome! If you are new to Cosmos DB PGSQL and need help with getting started, here is where you can find sample data, query." + }, + "resetPassword": { + "headline": "Create your password", + "body": "If you haven't changed your password yet, change it now." + }, + "coachMark": { + "headline": "Start with sample {{collectionName}}", + "body": "You will be guided to create a sample container with sample data, then we will give you a tour of data explorer. You can also cancel launching this tour and explore yourself" + } + }, + "sections": { + "recents": "Recents", + "clearRecents": "Clear Recents", + "top3": "Top 3 things you need to know", + "learningResources": "Learning Resources", + "nextSteps": "Next steps", + "tipsAndLearnMore": "Tips & learn more", + "notebook": "Notebook", + "needHelp": "Need help?" + }, + "top3Items": { + "sql": { + "advancedModeling": { + "title": "Advanced Modeling Patterns", + "description": "Learn advanced strategies to optimize your database." + }, + "partitioning": { + "title": "Partitioning Best Practices", + "description": "Learn to apply data model and partitioning strategies." + }, + "resourcePlanning": { + "title": "Plan Your Resource Requirements", + "description": "Get to know the different configuration choices." + } + }, + "mongo": { + "whatIsMongo": { + "title": "What is the MongoDB API?", + "description": "Understand Azure Cosmos DB for MongoDB and its features." + }, + "features": { + "title": "Features and Syntax", + "description": "Discover the advantages and features" + }, + "migrate": { + "title": "Migrate Your Data", + "description": "Pre-migration steps for moving data" + } + }, + "cassandra": { + "buildJavaApp": { + "title": "Build a Java App", + "description": "Create a Java app using an SDK." + }, + "partitioning": { + "title": "Partitioning Best Practices", + "description": "Learn how partitioning works." + }, + "requestUnits": { + "title": "Request Units (RUs)", + "description": "Understand RU charges." + } + }, + "gremlin": { + "dataModeling": { + "title": "Data Modeling", + "description": "Graph data modeling recommendations" + }, + "partitioning": { + "title": "Partitioning Best Practices", + "description": "Learn how partitioning works" + }, + "queryData": { + "title": "Query Data", + "description": "Querying data with Gremlin" + } + }, + "tables": { + "whatIsTable": { + "title": "What is the Table API?", + "description": "Understand Azure Cosmos DB for Table and its features" + }, + "migrate": { + "title": "Migrate your data", + "description": "Learn how to migrate your data" + }, + "faq": { + "title": "Azure Cosmos DB for Table FAQs", + "description": "Common questions about Azure Cosmos DB for Table" + } + } + }, + "learningResources": { + "shortcuts": { + "title": "Data Explorer keyboard shortcuts", + "description": "Learn keyboard shortcuts to navigate Data Explorer." + }, + "liveTv": { + "title": "Learn the Fundamentals", + "description": "Watch Azure Cosmos DB Live TV show introductory and how to videos." + }, + "sql": { + "sdk": { + "title": "Get Started using an SDK", + "description": "Learn about the Azure Cosmos DB SDK." + }, + "migrate": { + "title": "Migrate Your Data", + "description": "Migrate data using Azure services and open-source solutions." + } + }, + "mongo": { + "nodejs": { + "title": "Build an app with Node.js", + "description": "Create a Node.js app." + }, + "gettingStarted": { + "title": "Getting Started Guide", + "description": "Learn the basics to get started." + } + }, + "cassandra": { + "createContainer": { + "title": "Create a Container", + "description": "Get to know the create a container options." + }, + "throughput": { + "title": "Provision Throughput", + "description": "Learn how to configure throughput." + } + }, + "gremlin": { + "getStarted": { + "title": "Get Started ", + "description": "Create, query, and traverse using the Gremlin console" + }, + "importData": { + "title": "Import Graph Data", + "description": "Learn Bulk ingestion data using BulkExecutor" + } + }, + "tables": { + "dotnet": { + "title": "Build a .NET App", + "description": "How to access Azure Cosmos DB for Table from a .NET app." + }, + "java": { + "title": "Build a Java App", + "description": "Create a Azure Cosmos DB for Table app with Java SDK " + } + } + }, + "nextStepItems": { + "postgres": { + "dataModeling": "Data Modeling", + "distributionColumn": "How to choose a Distribution Column", + "buildApps": "Build Apps with Python/Java/Django" + }, + "vcoreMongo": { + "migrateData": "Migrate Data", + "vectorSearch": "Build AI apps with Vector Search", + "buildApps": "Build Apps with Nodejs" + } + }, + "learnMoreItems": { + "postgres": { + "performanceTuning": "Performance Tuning", + "diagnosticQueries": "Useful Diagnostic Queries", + "sqlReference": "Distributed SQL Reference" + }, + "vcoreMongo": { + "vectorSearch": "Vector Search", + "textIndexing": "Text Indexing", + "troubleshoot": "Troubleshoot common issues" + } + }, + "fabric": { + "buildTitle": "Build your database", + "useTitle": "Use your database", + "newContainer": { + "title": "New container", + "description": "Create a destination container to store your data" + }, + "sampleData": { + "title": "Sample Data", + "description": "Load sample data in your database" + }, + "sampleVectorData": { + "title": "Sample Vector Data", + "description": "Load sample vector data with text-embedding-ada-002" + }, + "appDevelopment": { + "title": "App development", + "description": "Start here to use an SDK to build your apps" + }, + "sampleGallery": { + "title": "Sample Gallery", + "description": "Get real-world end-to-end samples" + } + }, + "sampleDataDialog": { + "title": "Sample Data", + "startButton": "Start", + "createPrompt": "Create a container \"{{containerName}}\" and import sample data into it. This may take a few minutes.", + "creatingContainer": "Creating container \"{{containerName}}\"...", + "importingData": "Importing data into \"{{containerName}}\"...", + "success": "Successfully created \"{{containerName}}\" with sample data.", + "errorContainerExists": "The container \"{{containerName}}\" in database \"{{databaseName}}\" already exists. Please delete it and retry.", + "errorCreateContainer": "Failed to create container: {{error}}", + "errorImportData": "Failed to import data: {{error}}" } } }