Localization first batch (#2408)

This commit is contained in:
sunghyunkang1111
2026-03-03 16:17:18 -06:00
committed by GitHub
parent 9496cf83ee
commit 9579d1270b
4 changed files with 441 additions and 135 deletions

View File

@@ -6,6 +6,8 @@ import { DocumentAddRegular, LinkMultipleRegular, OpenRegular } from "@fluentui/
import { SampleDataConfiguration, SampleDataImportDialog } from "Explorer/SplashScreen/SampleDataImportDialog"; import { SampleDataConfiguration, SampleDataImportDialog } from "Explorer/SplashScreen/SampleDataImportDialog";
import { SampleDataFile } from "Explorer/SplashScreen/SampleUtil"; import { SampleDataFile } from "Explorer/SplashScreen/SampleUtil";
import { CosmosFluentProvider } from "Explorer/Theme/ThemeUtil"; 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 { isFabricNative, isFabricNativeReadOnly } from "Platform/Fabric/FabricUtil";
import * as React from "react"; import * as React from "react";
import { userContext } from "UserContext"; import { userContext } from "UserContext";
@@ -159,8 +161,8 @@ export const FabricHomeScreen: React.FC<SplashScreenProps> = (props: SplashScree
const getSplashScreenButtons = (): JSX.Element => { const getSplashScreenButtons = (): JSX.Element => {
const buttons: FabricHomeScreenButtonProps[] = [ const buttons: FabricHomeScreenButtonProps[] = [
{ {
title: "New container", title: t(Keys.splashScreen.fabric.newContainer.title),
description: "Create a destination container to store your data", description: t(Keys.splashScreen.fabric.newContainer.description),
icon: <DocumentAddRegular />, icon: <DocumentAddRegular />,
onClick: () => { onClick: () => {
const databaseId = isFabricNative() ? userContext.fabricContext?.databaseName : undefined; const databaseId = isFabricNative() ? userContext.fabricContext?.databaseName : undefined;
@@ -168,8 +170,8 @@ export const FabricHomeScreen: React.FC<SplashScreenProps> = (props: SplashScree
}, },
}, },
{ {
title: "Sample Data", title: t(Keys.splashScreen.fabric.sampleData.title),
description: "Load sample data in your database", description: t(Keys.splashScreen.fabric.sampleData.description),
icon: <img src={CosmosDbBlackIcon} alt={"Azure Cosmos DB icon"} aria-hidden="true" />, icon: <img src={CosmosDbBlackIcon} alt={"Azure Cosmos DB icon"} aria-hidden="true" />,
onClick: () => { onClick: () => {
setSelectedSampleDataConfiguration({ setSelectedSampleDataConfiguration({
@@ -181,8 +183,8 @@ export const FabricHomeScreen: React.FC<SplashScreenProps> = (props: SplashScree
}, },
}, },
{ {
title: "Sample Vector Data", title: t(Keys.splashScreen.fabric.sampleVectorData.title),
description: "Load sample vector data with text-embedding-ada-002", description: t(Keys.splashScreen.fabric.sampleVectorData.description),
icon: <img src={AzureOpenAiIcon} alt={"Azure Open AI icon"} aria-hidden="true" />, icon: <img src={AzureOpenAiIcon} alt={"Azure Open AI icon"} aria-hidden="true" />,
onClick: () => { onClick: () => {
setSelectedSampleDataConfiguration({ setSelectedSampleDataConfiguration({
@@ -194,14 +196,14 @@ export const FabricHomeScreen: React.FC<SplashScreenProps> = (props: SplashScree
}, },
}, },
{ {
title: "App development", title: t(Keys.splashScreen.fabric.appDevelopment.title),
description: "Start here to use an SDK to build your apps", description: t(Keys.splashScreen.fabric.appDevelopment.description),
icon: <LinkMultipleRegular />, icon: <LinkMultipleRegular />,
onClick: () => window.open("https://aka.ms/cosmosdbfabricsdk", "_blank"), onClick: () => window.open("https://aka.ms/cosmosdbfabricsdk", "_blank"),
}, },
{ {
title: "Sample Gallery", title: t(Keys.splashScreen.fabric.sampleGallery.title),
description: "Get real-world end-to-end samples", description: t(Keys.splashScreen.fabric.sampleGallery.description),
icon: <img src={GithubIcon} alt={"GitHub icon"} aria-hidden="true" />, icon: <img src={GithubIcon} alt={"GitHub icon"} aria-hidden="true" />,
onClick: () => window.open("https://aka.ms/CosmosFabricSamplesGallery", "_blank"), onClick: () => window.open("https://aka.ms/CosmosFabricSamplesGallery", "_blank"),
}, },
@@ -222,7 +224,9 @@ export const FabricHomeScreen: React.FC<SplashScreenProps> = (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 ( return (
<> <>
<CosmosFluentProvider className={styles.homeContainer}> <CosmosFluentProvider className={styles.homeContainer}>
@@ -238,9 +242,9 @@ export const FabricHomeScreen: React.FC<SplashScreenProps> = (props: SplashScree
{getSplashScreenButtons()} {getSplashScreenButtons()}
{ {
<div className={styles.footer}> <div className={styles.footer}>
Need help?{" "} {t(Keys.splashScreen.sections.needHelp)}{" "}
<Link href="https://learn.microsoft.com/fabric/database/cosmos-db/overview" target="_blank"> <Link href="https://learn.microsoft.com/fabric/database/cosmos-db/overview" target="_blank">
Learn more <OpenRegular /> {t(Keys.common.learnMore)} <OpenRegular />
</Link> </Link>
</div> </div>
} }

View File

@@ -12,6 +12,8 @@ import {
} from "@fluentui/react-components"; } from "@fluentui/react-components";
import Explorer from "Explorer/Explorer"; import Explorer from "Explorer/Explorer";
import { checkContainerExists, createContainer, importData, SampleDataFile } from "Explorer/SplashScreen/SampleUtil"; 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 React, { useEffect, useState } from "react";
import * as ViewModels from "../../Contracts/ViewModels"; import * as ViewModels from "../../Contracts/ViewModels";
@@ -59,7 +61,7 @@ export const SampleDataImportDialog: React.FC<{
setStatus("creating"); setStatus("creating");
const databaseName = props.sampleDataConfiguration.databaseName; const databaseName = props.sampleDataConfiguration.databaseName;
if (checkContainerExists(databaseName, containerName)) { 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"); setStatus("error");
setErrorMessage(msg); setErrorMessage(msg);
return; return;
@@ -75,7 +77,11 @@ export const SampleDataImportDialog: React.FC<{
); );
} catch (error) { } catch (error) {
setStatus("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; return;
} }
@@ -86,7 +92,11 @@ export const SampleDataImportDialog: React.FC<{
setStatus("completed"); setStatus("completed");
} catch (error) { } catch (error) {
setStatus("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 = () => { const renderContent = () => {
switch (status) { switch (status) {
case "idle": 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": case "creating":
return <Spinner size="small" labelPosition="above" label={`Creating container "${containerName}"...`} />; return (
<Spinner
size="small"
labelPosition="above"
label={t(Keys.splashScreen.sampleDataDialog.creatingContainer, { containerName })}
/>
);
case "importing": case "importing":
return <Spinner size="small" labelPosition="above" label={`Importing data into "${containerName}"...`} />; return (
<Spinner
size="small"
labelPosition="above"
label={t(Keys.splashScreen.sampleDataDialog.importingData, { containerName })}
/>
);
case "completed": case "completed":
return `Successfully created "${containerName}" with sample data.`; return t(Keys.splashScreen.sampleDataDialog.success, { containerName });
case "error": case "error":
return ( return (
<div style={{ color: "red" }}> <div style={{ color: "red" }}>
@@ -132,14 +154,14 @@ export const SampleDataImportDialog: React.FC<{
const getButtonLabel = () => { const getButtonLabel = () => {
switch (status) { switch (status) {
case "idle": case "idle":
return "Start"; return t(Keys.splashScreen.sampleDataDialog.startButton);
case "creating": case "creating":
case "importing": case "importing":
return "Close"; return t(Keys.common.close);
case "completed": case "completed":
return "Close"; return t(Keys.common.close);
case "error": case "error":
return "Close"; return t(Keys.common.close);
} }
}; };
@@ -147,7 +169,7 @@ export const SampleDataImportDialog: React.FC<{
<Dialog open={props.open} onOpenChange={(event, data) => props.setOpen(data.open)}> <Dialog open={props.open} onOpenChange={(event, data) => props.setOpen(data.open)}>
<DialogSurface> <DialogSurface>
<DialogBody> <DialogBody>
<DialogTitle>Sample Data</DialogTitle> <DialogTitle>{t(Keys.splashScreen.sampleDataDialog.title)}</DialogTitle>
<DialogContent> <DialogContent>
<div className={styles.dialogContent}>{renderContent()}</div> <div className={styles.dialogContent}>{renderContent()}</div>
</DialogContent> </DialogContent>

View File

@@ -251,8 +251,8 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
<Stack className="splashStackRow" horizontal> <Stack className="splashStackRow" horizontal>
<SplashScreenButton <SplashScreenButton
imgSrc={QuickStartIcon} imgSrc={QuickStartIcon}
title={"Launch quick start"} title={t(Keys.splashScreen.quickStart.title)}
description={"Launch a quick start tutorial to get started with sample data"} description={t(Keys.splashScreen.quickStart.description)}
onClick={() => { onClick={() => {
container.onNewCollectionClicked({ isQuickstart: true }); container.onNewCollectionClicked({ isQuickstart: true });
traceOpen(Action.LaunchQuickstart, { apiType: userContext.apiType }); traceOpen(Action.LaunchQuickstart, { apiType: userContext.apiType });
@@ -260,8 +260,8 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
/> />
<SplashScreenButton <SplashScreenButton
imgSrc={ContainersIcon} imgSrc={ContainersIcon}
title={`New ${getCollectionName()}`} title={t(Keys.splashScreen.newCollection.title, { collectionName: getCollectionName() })}
description={"Create a new container for storage and throughput"} description={t(Keys.splashScreen.newCollection.description)}
onClick={() => { onClick={() => {
container.onNewCollectionClicked(); container.onNewCollectionClicked();
traceOpen(Action.NewContainerHomepage, { apiType: userContext.apiType }); traceOpen(Action.NewContainerHomepage, { apiType: userContext.apiType });
@@ -272,10 +272,8 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
<SplashScreenButton <SplashScreenButton
imgSrc={CosmosDBIcon} imgSrc={CosmosDBIcon}
imgSize={35} imgSize={35}
title={"Azure Cosmos DB Samples Gallery"} title={t(Keys.splashScreen.samplesGallery.title)}
description={ description={t(Keys.splashScreen.samplesGallery.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"
}
onClick={() => { onClick={() => {
window.open("https://azurecosmosdb.github.io/gallery/?tags=example", "_blank"); window.open("https://azurecosmosdb.github.io/gallery/?tags=example", "_blank");
traceOpen(Action.LearningResourcesClicked, { apiType: userContext.apiType }); traceOpen(Action.LearningResourcesClicked, { apiType: userContext.apiType });
@@ -283,8 +281,8 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
/> />
<SplashScreenButton <SplashScreenButton
imgSrc={ConnectIcon} imgSrc={ConnectIcon}
title={"Connect"} title={t(Keys.splashScreen.connectCard.title)}
description={"Prefer using your own choice of tooling? Find the connection string you need to connect"} description={t(Keys.splashScreen.connectCard.description)}
onClick={() => useTabs.getState().openAndActivateReactTab(ReactTabKind.Connect)} onClick={() => useTabs.getState().openAndActivateReactTab(ReactTabKind.Connect)}
/> />
</Stack> </Stack>
@@ -299,7 +297,7 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
usePostgres.getState().showPostgreTeachingBubble && usePostgres.getState().showPostgreTeachingBubble &&
!usePostgres.getState().showResetPasswordBubble && ( !usePostgres.getState().showResetPasswordBubble && (
<TeachingBubble <TeachingBubble
headline="New to Cosmos DB PGSQL?" headline={t(Keys.splashScreen.teachingBubble.newToPostgres.headline)}
target={"#mainButton-quickstartDescription"} target={"#mainButton-quickstartDescription"}
hasCloseButton hasCloseButton
onDismiss={() => usePostgres.getState().setShowPostgreTeachingBubble(false)} onDismiss={() => usePostgres.getState().setShowPostgreTeachingBubble(false)}
@@ -311,15 +309,14 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
preventDismissOnScroll: true, preventDismissOnScroll: true,
}} }}
primaryButtonProps={{ primaryButtonProps={{
text: "Get started", text: t(Keys.common.getStarted),
onClick: () => { onClick: () => {
useTabs.getState().openAndActivateReactTab(ReactTabKind.Quickstart); useTabs.getState().openAndActivateReactTab(ReactTabKind.Quickstart);
usePostgres.getState().setShowPostgreTeachingBubble(false); 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 {t(Keys.splashScreen.teachingBubble.newToPostgres.body)}
sample data, query.
</TeachingBubble> </TeachingBubble>
)} )}
{/*TODO: convert below to use SplashScreenButton */} {/*TODO: convert below to use SplashScreenButton */}
@@ -351,7 +348,7 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
))} ))}
{userContext.apiType === "Postgres" && usePostgres.getState().showResetPasswordBubble && ( {userContext.apiType === "Postgres" && usePostgres.getState().showResetPasswordBubble && (
<TeachingBubble <TeachingBubble
headline="Create your password" headline={t(Keys.splashScreen.teachingBubble.resetPassword.headline)}
target={"#mainButton-quickstartDescription"} target={"#mainButton-quickstartDescription"}
hasCloseButton hasCloseButton
onDismiss={() => { onDismiss={() => {
@@ -366,7 +363,7 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
preventDismissOnScroll: true, preventDismissOnScroll: true,
}} }}
primaryButtonProps={{ primaryButtonProps={{
text: "Create", text: t(Keys.common.create),
onClick: () => { onClick: () => {
localStorage.setItem(userContext.databaseAccount.id, "true"); localStorage.setItem(userContext.databaseAccount.id, "true");
sendMessage({ sendMessage({
@@ -376,7 +373,7 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
}, },
}} }}
> >
If you haven&apos;t changed your password yet, change it now. {t(Keys.splashScreen.teachingBubble.resetPassword.body)}
</TeachingBubble> </TeachingBubble>
)} )}
</div> </div>
@@ -395,8 +392,8 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
const launchQuickstartBtn = { const launchQuickstartBtn = {
id: "quickstartDescription", id: "quickstartDescription",
iconSrc: QuickStartIcon, iconSrc: QuickStartIcon,
title: "Launch quick start", title: t(Keys.splashScreen.quickStart.title),
description: "Launch a quick start tutorial to get started with sample data", description: t(Keys.splashScreen.quickStart.description),
onClick: () => { onClick: () => {
if (userContext.apiType === "Postgres" || userContext.apiType === "VCoreMongo") { if (userContext.apiType === "Postgres" || userContext.apiType === "VCoreMongo") {
useTabs.getState().openAndActivateReactTab(ReactTabKind.Quickstart); useTabs.getState().openAndActivateReactTab(ReactTabKind.Quickstart);
@@ -418,8 +415,8 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
if (userContext.apiType === "Postgres") { if (userContext.apiType === "Postgres") {
return { return {
iconSrc: PowerShellIcon, iconSrc: PowerShellIcon,
title: "PostgreSQL Shell", title: t(Keys.splashScreen.shell.postgres.title),
description: "Create table and interact with data using PostgreSQL's shell interface", description: t(Keys.splashScreen.shell.postgres.description),
onClick: () => container.openNotebookTerminal(TerminalKind.Postgres), onClick: () => container.openNotebookTerminal(TerminalKind.Postgres),
}; };
} }
@@ -427,16 +424,16 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
if (userContext.apiType === "VCoreMongo") { if (userContext.apiType === "VCoreMongo") {
return { return {
iconSrc: PowerShellIcon, iconSrc: PowerShellIcon,
title: "Mongo Shell", title: t(Keys.splashScreen.shell.vcoreMongo.title),
description: "Create a collection and interact with data using MongoDB's shell interface", description: t(Keys.splashScreen.shell.vcoreMongo.description),
onClick: () => container.openNotebookTerminal(TerminalKind.VCoreMongo), onClick: () => container.openNotebookTerminal(TerminalKind.VCoreMongo),
}; };
} }
return { return {
iconSrc: ContainersIcon, iconSrc: ContainersIcon,
title: `New ${getCollectionName()}`, title: t(Keys.splashScreen.newCollection.title, { collectionName: getCollectionName() }),
description: "Create a new container for storage and throughput", description: t(Keys.splashScreen.newCollection.description),
onClick: () => { onClick: () => {
container.onNewCollectionClicked(); container.onNewCollectionClicked();
traceOpen(Action.NewContainerHomepage, { apiType: userContext.apiType }); traceOpen(Action.NewContainerHomepage, { apiType: userContext.apiType });
@@ -446,19 +443,19 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
const getThirdCard = (): SplashScreenItem => { const getThirdCard = (): SplashScreenItem => {
let icon = ConnectIcon; let icon = ConnectIcon;
let title = "Connect"; let title = t(Keys.splashScreen.connectCard.title);
let description = "Prefer using your own choice of tooling? Find the connection string you need to connect"; let description = t(Keys.splashScreen.connectCard.description);
let onClick = () => useTabs.getState().openAndActivateReactTab(ReactTabKind.Connect); let onClick = () => useTabs.getState().openAndActivateReactTab(ReactTabKind.Connect);
if (userContext.apiType === "Postgres") { if (userContext.apiType === "Postgres") {
title = "Connect with pgAdmin"; title = t(Keys.splashScreen.connectCard.pgAdmin.title);
description = "Prefer pgAdmin? Find your connection strings here"; description = t(Keys.splashScreen.connectCard.pgAdmin.description);
} }
if (userContext.apiType === "VCoreMongo") { if (userContext.apiType === "VCoreMongo") {
icon = VisualStudioIcon; icon = VisualStudioIcon;
title = "Connect with VS Code"; title = t(Keys.splashScreen.connectCard.vsCode.title);
description = "Query and Manage your MongoDB and DocumentDB clusters in Visual Studio Code"; description = t(Keys.splashScreen.connectCard.vsCode.description);
onClick = () => container?.openInVsCode && container.openInVsCode(); onClick = () => container?.openInVsCode && container.openInVsCode();
} }
@@ -487,7 +484,7 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
info: activity.path, info: activity.path,
iconSrc: NotebookIcon, iconSrc: NotebookIcon,
title: activity.name, title: activity.name,
description: "Notebook", description: t(Keys.splashScreen.sections.notebook),
onClick: () => { onClick: () => {
const notebookItem = container.createNotebookContentItemFile(activity.name, activity.path); const notebookItem = container.createNotebookContentItemFile(activity.name, activity.path);
notebookItem && container.openNotebook(notebookItem); notebookItem && container.openNotebook(notebookItem);
@@ -526,18 +523,18 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
items = [ items = [
{ {
link: "https://aka.ms/msl-modeling-partitioning-2", link: "https://aka.ms/msl-modeling-partitioning-2",
title: "Advanced Modeling Patterns", title: t(Keys.splashScreen.top3Items.sql.advancedModeling.title),
description: "Learn advanced strategies to optimize your database.", description: t(Keys.splashScreen.top3Items.sql.advancedModeling.description),
}, },
{ {
link: "https://aka.ms/msl-modeling-partitioning-1", link: "https://aka.ms/msl-modeling-partitioning-1",
title: "Partitioning Best Practices", title: t(Keys.splashScreen.top3Items.sql.partitioning.title),
description: "Learn to apply data model and partitioning strategies.", description: t(Keys.splashScreen.top3Items.sql.partitioning.description),
}, },
{ {
link: "https://aka.ms/msl-resource-planning", link: "https://aka.ms/msl-resource-planning",
title: "Plan Your Resource Requirements", title: t(Keys.splashScreen.top3Items.sql.resourcePlanning.title),
description: "Get to know the different configuration choices.", description: t(Keys.splashScreen.top3Items.sql.resourcePlanning.description),
}, },
]; ];
break; break;
@@ -545,18 +542,18 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
items = [ items = [
{ {
link: "https://aka.ms/mongodbintro", link: "https://aka.ms/mongodbintro",
title: "What is the MongoDB API?", title: t(Keys.splashScreen.top3Items.mongo.whatIsMongo.title),
description: "Understand Azure Cosmos DB for MongoDB and its features.", description: t(Keys.splashScreen.top3Items.mongo.whatIsMongo.description),
}, },
{ {
link: "https://aka.ms/mongodbfeaturesupport", link: "https://aka.ms/mongodbfeaturesupport",
title: "Features and Syntax", title: t(Keys.splashScreen.top3Items.mongo.features.title),
description: "Discover the advantages and features", description: t(Keys.splashScreen.top3Items.mongo.features.description),
}, },
{ {
link: "https://aka.ms/mongodbpremigration", link: "https://aka.ms/mongodbpremigration",
title: "Migrate Your Data", title: t(Keys.splashScreen.top3Items.mongo.migrate.title),
description: "Pre-migration steps for moving data", description: t(Keys.splashScreen.top3Items.mongo.migrate.description),
}, },
]; ];
break; break;
@@ -564,18 +561,18 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
items = [ items = [
{ {
link: "https://aka.ms/cassandrajava", link: "https://aka.ms/cassandrajava",
title: "Build a Java App", title: t(Keys.splashScreen.top3Items.cassandra.buildJavaApp.title),
description: "Create a Java app using an SDK.", description: t(Keys.splashScreen.top3Items.cassandra.buildJavaApp.description),
}, },
{ {
link: "https://aka.ms/cassandrapartitioning", link: "https://aka.ms/cassandrapartitioning",
title: "Partitioning Best Practices", title: t(Keys.splashScreen.top3Items.cassandra.partitioning.title),
description: "Learn how partitioning works.", description: t(Keys.splashScreen.top3Items.cassandra.partitioning.description),
}, },
{ {
link: "https://aka.ms/cassandraRu", link: "https://aka.ms/cassandraRu",
title: "Request Units (RUs)", title: t(Keys.splashScreen.top3Items.cassandra.requestUnits.title),
description: "Understand RU charges.", description: t(Keys.splashScreen.top3Items.cassandra.requestUnits.description),
}, },
]; ];
break; break;
@@ -583,18 +580,18 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
items = [ items = [
{ {
link: "https://aka.ms/Graphdatamodeling", link: "https://aka.ms/Graphdatamodeling",
title: "Data Modeling", title: t(Keys.splashScreen.top3Items.gremlin.dataModeling.title),
description: "Graph data modeling recommendations", description: t(Keys.splashScreen.top3Items.gremlin.dataModeling.description),
}, },
{ {
link: "https://aka.ms/graphpartitioning", link: "https://aka.ms/graphpartitioning",
title: "Partitioning Best Practices", title: t(Keys.splashScreen.top3Items.gremlin.partitioning.title),
description: "Learn how partitioning works", description: t(Keys.splashScreen.top3Items.gremlin.partitioning.description),
}, },
{ {
link: "https://aka.ms/graphapiquery", link: "https://aka.ms/graphapiquery",
title: "Query Data", title: t(Keys.splashScreen.top3Items.gremlin.queryData.title),
description: "Querying data with Gremlin", description: t(Keys.splashScreen.top3Items.gremlin.queryData.description),
}, },
]; ];
break; break;
@@ -602,18 +599,18 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
items = [ items = [
{ {
link: "https://aka.ms/tableintro", link: "https://aka.ms/tableintro",
title: "What is the Table API?", title: t(Keys.splashScreen.top3Items.tables.whatIsTable.title),
description: "Understand Azure Cosmos DB for Table and its features", description: t(Keys.splashScreen.top3Items.tables.whatIsTable.description),
}, },
{ {
link: "https://aka.ms/tableimport", link: "https://aka.ms/tableimport",
title: "Migrate your data", title: t(Keys.splashScreen.top3Items.tables.migrate.title),
description: "Learn how to migrate your data", description: t(Keys.splashScreen.top3Items.tables.migrate.description),
}, },
{ {
link: "https://aka.ms/tablefaq", link: "https://aka.ms/tablefaq",
title: "Azure Cosmos DB for Table FAQs", title: t(Keys.splashScreen.top3Items.tables.faq.title),
description: "Common questions about Azure Cosmos DB for Table", description: t(Keys.splashScreen.top3Items.tables.faq.description),
}, },
]; ];
break; break;
@@ -670,7 +667,7 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
</ul> </ul>
{recentItems.length > 0 && ( {recentItems.length > 0 && (
<Link onClick={() => clearMostRecent()} className={styles.listItemTitle}> <Link onClick={() => clearMostRecent()} className={styles.listItemTitle}>
Clear Recents {t(Keys.splashScreen.sections.clearRecents)}
</Link> </Link>
)} )}
</Stack> </Stack>
@@ -685,15 +682,15 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
} }
const cdbLiveTv: item = { const cdbLiveTv: item = {
link: "https://developer.azurecosmosdb.com/tv", link: "https://developer.azurecosmosdb.com/tv",
title: "Learn the Fundamentals", title: t(Keys.splashScreen.learningResources.liveTv.title),
description: "Watch Azure Cosmos DB Live TV show introductory and how to videos.", description: t(Keys.splashScreen.learningResources.liveTv.description),
}; };
const commonItems: item[] = [ const commonItems: item[] = [
{ {
link: "https://learn.microsoft.com/azure/cosmos-db/data-explorer-shortcuts", link: "https://learn.microsoft.com/azure/cosmos-db/data-explorer-shortcuts",
title: "Data Explorer keyboard shortcuts", title: t(Keys.splashScreen.learningResources.shortcuts.title),
description: "Learn keyboard shortcuts to navigate Data Explorer.", description: t(Keys.splashScreen.learningResources.shortcuts.description),
}, },
]; ];
@@ -704,14 +701,14 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
apiItems = [ apiItems = [
{ {
link: "https://aka.ms/msl-sdk-connect", link: "https://aka.ms/msl-sdk-connect",
title: "Get Started using an SDK", title: t(Keys.splashScreen.learningResources.sql.sdk.title),
description: "Learn about the Azure Cosmos DB SDK.", description: t(Keys.splashScreen.learningResources.sql.sdk.description),
}, },
cdbLiveTv, cdbLiveTv,
{ {
link: "https://aka.ms/msl-move-data", link: "https://aka.ms/msl-move-data",
title: "Migrate Your Data", title: t(Keys.splashScreen.learningResources.sql.migrate.title),
description: "Migrate data using Azure services and open-source solutions.", description: t(Keys.splashScreen.learningResources.sql.migrate.description),
}, },
]; ];
break; break;
@@ -719,13 +716,13 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
apiItems = [ apiItems = [
{ {
link: "https://aka.ms/mongonodejs", link: "https://aka.ms/mongonodejs",
title: "Build an app with Node.js", title: t(Keys.splashScreen.learningResources.mongo.nodejs.title),
description: "Create a Node.js app.", description: t(Keys.splashScreen.learningResources.mongo.nodejs.description),
}, },
{ {
link: "https://aka.ms/mongopython", link: "https://aka.ms/mongopython",
title: "Getting Started Guide", title: t(Keys.splashScreen.learningResources.mongo.gettingStarted.title),
description: "Learn the basics to get started.", description: t(Keys.splashScreen.learningResources.mongo.gettingStarted.description),
}, },
cdbLiveTv, cdbLiveTv,
]; ];
@@ -734,14 +731,14 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
apiItems = [ apiItems = [
{ {
link: "https://aka.ms/cassandracontainer", link: "https://aka.ms/cassandracontainer",
title: "Create a Container", title: t(Keys.splashScreen.learningResources.cassandra.createContainer.title),
description: "Get to know the create a container options.", description: t(Keys.splashScreen.learningResources.cassandra.createContainer.description),
}, },
cdbLiveTv, cdbLiveTv,
{ {
link: "https://aka.ms/Cassandrathroughput", link: "https://aka.ms/Cassandrathroughput",
title: "Provision Throughput", title: t(Keys.splashScreen.learningResources.cassandra.throughput.title),
description: "Learn how to configure throughput.", description: t(Keys.splashScreen.learningResources.cassandra.throughput.description),
}, },
]; ];
break; break;
@@ -749,13 +746,13 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
apiItems = [ apiItems = [
{ {
link: "https://aka.ms/graphquickstart", link: "https://aka.ms/graphquickstart",
title: "Get Started ", title: t(Keys.splashScreen.learningResources.gremlin.getStarted.title),
description: "Create, query, and traverse using the Gremlin console", description: t(Keys.splashScreen.learningResources.gremlin.getStarted.description),
}, },
{ {
link: "https://aka.ms/graphimport", link: "https://aka.ms/graphimport",
title: "Import Graph Data", title: t(Keys.splashScreen.learningResources.gremlin.importData.title),
description: "Learn Bulk ingestion data using BulkExecutor", description: t(Keys.splashScreen.learningResources.gremlin.importData.description),
}, },
cdbLiveTv, cdbLiveTv,
]; ];
@@ -764,13 +761,13 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
apiItems = [ apiItems = [
{ {
link: "https://aka.ms/tabledotnet", link: "https://aka.ms/tabledotnet",
title: "Build a .NET App", title: t(Keys.splashScreen.learningResources.tables.dotnet.title),
description: "How to access Azure Cosmos DB for Table from a .NET app.", description: t(Keys.splashScreen.learningResources.tables.dotnet.description),
}, },
{ {
link: "https://aka.ms/Tablejava", link: "https://aka.ms/Tablejava",
title: "Build a Java App", title: t(Keys.splashScreen.learningResources.tables.java.title),
description: "Create a Azure Cosmos DB for Table app with Java SDK ", description: t(Keys.splashScreen.learningResources.tables.java.description),
}, },
cdbLiveTv, cdbLiveTv,
]; ];
@@ -809,17 +806,17 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
const postgresNextStepItems: { link: string; title: string; description: string }[] = [ const postgresNextStepItems: { link: string; title: string; description: string }[] = [
{ {
link: "https://go.microsoft.com/fwlink/?linkid=2208312", link: "https://go.microsoft.com/fwlink/?linkid=2208312",
title: "Data Modeling", title: t(Keys.splashScreen.nextStepItems.postgres.dataModeling),
description: "", description: "",
}, },
{ {
link: " https://go.microsoft.com/fwlink/?linkid=2206941 ", link: " https://go.microsoft.com/fwlink/?linkid=2206941 ",
title: "How to choose a Distribution Column", title: t(Keys.splashScreen.nextStepItems.postgres.distributionColumn),
description: "", description: "",
}, },
{ {
link: "https://go.microsoft.com/fwlink/?linkid=2207425", link: "https://go.microsoft.com/fwlink/?linkid=2207425",
title: "Build Apps with Python/Java/Django", title: t(Keys.splashScreen.nextStepItems.postgres.buildApps),
description: "", description: "",
}, },
]; ];
@@ -827,17 +824,17 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
const vcoreMongoNextStepItems: { link: string; title: string; description: string }[] = [ const vcoreMongoNextStepItems: { link: string; title: string; description: string }[] = [
{ {
link: "https://learn.microsoft.com/azure/cosmos-db/mongodb/vcore/migration-options", link: "https://learn.microsoft.com/azure/cosmos-db/mongodb/vcore/migration-options",
title: "Migrate Data", title: t(Keys.splashScreen.nextStepItems.vcoreMongo.migrateData),
description: "", description: "",
}, },
{ {
link: "https://learn.microsoft.com/en-us/azure/cosmos-db/mongodb/vcore/vector-search-ai", 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: "", description: "",
}, },
{ {
link: "https://learn.microsoft.com/en-us/azure/cosmos-db/mongodb/vcore/tutorial-nodejs-web-app?tabs=github-codespaces", 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: "", description: "",
}, },
]; ];
@@ -865,17 +862,17 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
const postgresLearnMoreItems: { link: string; title: string; description: string }[] = [ const postgresLearnMoreItems: { link: string; title: string; description: string }[] = [
{ {
link: "https://go.microsoft.com/fwlink/?linkid=2207226", link: "https://go.microsoft.com/fwlink/?linkid=2207226",
title: "Performance Tuning", title: t(Keys.splashScreen.learnMoreItems.postgres.performanceTuning),
description: "", description: "",
}, },
{ {
link: "https://go.microsoft.com/fwlink/?linkid=2208037", link: "https://go.microsoft.com/fwlink/?linkid=2208037",
title: "Useful Diagnostic Queries", title: t(Keys.splashScreen.learnMoreItems.postgres.diagnosticQueries),
description: "", description: "",
}, },
{ {
link: "https://go.microsoft.com/fwlink/?linkid=2205270", link: "https://go.microsoft.com/fwlink/?linkid=2205270",
title: "Distributed SQL Reference", title: t(Keys.splashScreen.learnMoreItems.postgres.sqlReference),
description: "", description: "",
}, },
]; ];
@@ -883,17 +880,17 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
const vcoreMongoLearnMoreItems: { link: string; title: string; description: string }[] = [ const vcoreMongoLearnMoreItems: { link: string; title: string; description: string }[] = [
{ {
link: "https://learn.microsoft.com/en-us/azure/cosmos-db/mongodb/vcore/vector-search", 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: "", description: "",
}, },
{ {
link: "https://learn.microsoft.com/en-us/azure/cosmos-db/mongodb/vcore/how-to-create-text-index", 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: "", description: "",
}, },
{ {
link: "https://learn.microsoft.com/en-us/azure/cosmos-db/mongodb/vcore/troubleshoot-common-issues", 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: "", description: "",
}, },
]; ];
@@ -934,24 +931,25 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
persistentBeak persistentBeak
> >
<TeachingBubbleContent <TeachingBubbleContent
headline={`Start with sample ${getCollectionName().toLocaleLowerCase()}`} headline={t(Keys.splashScreen.teachingBubble.coachMark.headline, {
collectionName: getCollectionName().toLocaleLowerCase(),
})}
hasCloseButton hasCloseButton
closeButtonAriaLabel="Close" closeButtonAriaLabel={t(Keys.common.close)}
primaryButtonProps={{ primaryButtonProps={{
text: "Get started", text: t(Keys.common.getStarted),
onClick: () => { onClick: () => {
useCarousel.getState().setShowCoachMark(false); useCarousel.getState().setShowCoachMark(false);
container.onNewCollectionClicked({ isQuickstart: true }); container.onNewCollectionClicked({ isQuickstart: true });
}, },
}} }}
secondaryButtonProps={{ secondaryButtonProps={{
text: "Cancel", text: t(Keys.common.cancel),
onClick: () => useCarousel.getState().setShowCoachMark(false), onClick: () => useCarousel.getState().setShowCoachMark(false),
}} }}
onDismiss={() => 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 {t(Keys.splashScreen.teachingBubble.coachMark.body)}
explorer. You can also cancel launching this tour and explore yourself
</TeachingBubbleContent> </TeachingBubbleContent>
</Coachmark> </Coachmark>
)} )}
@@ -965,7 +963,7 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
fontFamily: '"Segoe UI Semibold", "Segoe UI", "Segoe WP", Tahoma, Arial, sans-serif', fontFamily: '"Segoe UI Semibold", "Segoe UI", "Segoe WP", Tahoma, Arial, sans-serif',
}} }}
> >
Next steps {t(Keys.splashScreen.sections.nextSteps)}
</Text> </Text>
{getNextStepItems()} {getNextStepItems()}
</Stack> </Stack>
@@ -977,7 +975,7 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
fontFamily: '"Segoe UI Semibold", "Segoe UI", "Segoe WP", Tahoma, Arial, sans-serif', fontFamily: '"Segoe UI Semibold", "Segoe UI", "Segoe WP", Tahoma, Arial, sans-serif',
}} }}
> >
Tips & learn more {t(Keys.splashScreen.sections.tipsAndLearnMore)}
</Text> </Text>
{getTipsAndLearnMoreItems()} {getTipsAndLearnMoreItems()}
</Stack> </Stack>
@@ -986,15 +984,15 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
) : ( ) : (
<div className={styles.moreStuffContainer}> <div className={styles.moreStuffContainer}>
<div className={styles.moreStuffColumn}> <div className={styles.moreStuffColumn}>
<h2 className={styles.columnTitle}>Recents</h2> <h2 className={styles.columnTitle}>{t(Keys.splashScreen.sections.recents)}</h2>
{getRecentItems()} {getRecentItems()}
</div> </div>
<div className={styles.moreStuffColumn}> <div className={styles.moreStuffColumn}>
<h2 className={styles.columnTitle}>Top 3 things you need to know</h2> <h2 className={styles.columnTitle}>{t(Keys.splashScreen.sections.top3)}</h2>
{top3Items()} {top3Items()}
</div> </div>
<div className={styles.moreStuffColumn}> <div className={styles.moreStuffColumn}>
<h2 className={styles.columnTitle}>Learning Resources</h2> <h2 className={styles.columnTitle}>{t(Keys.splashScreen.sections.learningResources)}</h2>
{getLearningResourceItems()} {getLearningResourceItems()}
</div> </div>
</div> </div>

View File

@@ -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": { "splashScreen": {
"title": { "title": {
"default": "Welcome to Azure Cosmos DB", "default": "Welcome to Azure Cosmos DB",
@@ -8,6 +41,255 @@
"subtitle": { "subtitle": {
"default": "Globally distributed, multi-model database service for any scale", "default": "Globally distributed, multi-model database service for any scale",
"getStarted": "Get started with our sample datasets, documentation, and additional tools." "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}}"
} }
} }
} }