Compare commits

..

31 Commits

Author SHA1 Message Date
Sung-Hyun Kang
75182b60b9 fix rAF 2026-03-12 12:40:20 -05:00
Sung-Hyun Kang
17438863fe Fix portal background opening 2026-03-12 12:17:00 -05:00
Nishtha Ahuja
3c97778da5 Searchable dropdown (#2312)
* Searchable dropdown

* format fix

* Refactor SearchableDropdown with Fluent UI components, extract styles, and add tests (#2329)

* Initial plan

* Refactor SearchableDropdown with Fluent UI components and add tests

- Replace native HTML elements with Fluent UI components (Stack, DefaultButton, Text)
- Extract inline styles to SearchableDropdown.styles.ts
- Add comprehensive unit tests (14 test cases)
- Verify behavior consistency with AccountSwitcher tests

Co-authored-by: nishthaAhujaa <45535788+nishthaAhujaa@users.noreply.github.com>

* Optimize SearchableDropdown with useMemo for filteredItems

Co-authored-by: nishthaAhujaa <45535788+nishthaAhujaa@users.noreply.github.com>

* Fix text alignment to match original UI - ensure left alignment

- Add flexContainer.justifyContent: "flex-start" to button styles
- Add textAlign: "left" to button label, item styles, and empty message
- Restore original left-aligned appearance for placeholder and selected text

Co-authored-by: nishthaAhujaa <45535788+nishthaAhujaa@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: nishthaAhujaa <45535788+nishthaAhujaa@users.noreply.github.com>

* Fix TypeScript implicit type errors in SearchableDropdown tests (#2355)

* Initial plan

* Fix TypeScript compilation errors in SearchableDropdown.test.tsx

Co-authored-by: nishthaAhujaa <45535788+nishthaAhujaa@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: nishthaAhujaa <45535788+nishthaAhujaa@users.noreply.github.com>

* ui fixes minor

* format fix

* added search icon and updated the text

* removed callbacks

* added mocked playwright data

* fixed formatting

---------

Co-authored-by: nishthaAhujaa <nishtha17354@iiittd.ac.in>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Sakshi Gupta <sakshig@microsoft.com>
Co-authored-by: sakshigupta12feb <sakshigupta12feb1@gmail.com>
2026-03-12 20:35:59 +05:30
olprod
1dce9c1f37 Localized file check-in by OneLocBuild Task: Build definition ID 13114: Build ID 2449149 (#2414)
* Localized file check-in by OneLocBuild Task: Build definition ID 13114: Build ID 2445565

* Localized file check-in by OneLocBuild Task: Build definition ID 13114: Build ID 2445655

* Localized file check-in by OneLocBuild Task: Build definition ID 13114: Build ID 2446595

* Localized file check-in by OneLocBuild Task: Build definition ID 13114: Build ID 2446660

* Localized file check-in by OneLocBuild Task: Build definition ID 13114: Build ID 2448008

* Localized file check-in by OneLocBuild Task: Build definition ID 13114: Build ID 2449149

---------

Co-authored-by: sunghyunkang1111 <114709653+sunghyunkang1111@users.noreply.github.com>
2026-03-11 16:36:33 -05:00
sunghyunkang1111
f723b4746d Localizations batch 5 and import update (#2422)
* Locations import update

* Fix formatting

* Fix import paths
2026-03-11 13:51:19 -05:00
sunghyunkang1111
0cf0eca068 Add localization strings batch 4 (#2420)
* Add localization strings batch 4

* run prettier

* Update test snap

* Remove duplicates
2026-03-10 14:32:41 -05:00
jawelton74
30fcf0c02e Remove the knownAuthorities property change as it is causing AAD login (#2421)
to fail.
2026-03-09 15:24:38 -07:00
sunghyunkang1111
da7ddd7ef5 Fix duplicate messages (#2418)
* Fix duplicate messages

* fix playwright
2026-03-09 14:45:24 -05:00
asier-isayas
a106b0ebac add the aad endpoint to known authorities when setting up MSAL (#2415)
Co-authored-by: Asier Isayas <aisayas@microsoft.com>
2026-03-06 10:59:35 -08:00
jawelton74
dafb257fa3 Fix the keys blade links to point to the common connection strings (#2417)
blade.
2026-03-06 10:12:24 -08:00
sunghyunkang1111
b256ac1e1f Added localizations 3rd batch (#2413)
* Added localizations 3rd batch

* Fix unit tests
2026-03-06 11:19:00 -06:00
olprod
915f549df9 Localized file check-in by OneLocBuild Task: Build definition ID 13114: Build ID 2444293 (#2412)
* Localized file check-in by OneLocBuild Task: Build definition ID 13114: Build ID 2444219

* Localized file check-in by OneLocBuild Task: Build definition ID 13114: Build ID 2444293

---------

Co-authored-by: sunghyunkang1111 <114709653+sunghyunkang1111@users.noreply.github.com>
2026-03-05 12:54:04 -06:00
sunghyunkang1111
77132be3b3 Localization second batch (#2410)
* Localization second batch

* update test

* fix tests

* Fix test
2026-03-05 12:05:45 -06:00
jawelton74
c343bad630 Remove chromium from the playwright test matrix. (#2409) 2026-03-04 06:05:27 -08:00
sunghyunkang1111
9579d1270b Localization first batch (#2408) 2026-03-03 16:17:18 -06:00
sunghyunkang1111
9496cf83ee Fixing metrics (#2395)
* Fixing metrics

* run prettier
2026-03-02 11:32:51 -06:00
jawelton74
dbe26654f1 Add new config for sov. clouds (#2402)
* Add new cloud origins for CSP.

* Remove the explorer endpoint, it is not needed here.

* Add other clouds as well.

* Fix formatting.
2026-03-02 07:52:00 -08:00
sakshigupta12feb
b478f2732c fixed the % update issue in copyjobs (#2399)
Co-authored-by: Sakshi Gupta <sakshig@microsoft.com>
2026-03-02 17:37:08 +05:30
sunghyunkang1111
204444b878 Added quote escaping for partition key extraction (#2403) 2026-02-27 14:58:14 -06:00
sunghyunkang1111
2e5c355479 Added localization build (#2380)
* Added localization build

* Commit types

* Added locProject.json

* Localized file check-in by OneLocBuild Task: Build definition ID 13114: Build ID 2425084 (#2392)

* Fixed package.json

* Fix compilation error

* Localized file check-in by OneLocBuild Task: Build definition ID 13114: Build ID 2431677 (#2396)

* Localized file check-in by OneLocBuild Task: Build definition ID 13114: Build ID 2432830 (#2397)

* Localized file check-in by OneLocBuild Task: Build definition ID 13114: Build ID 2431872

* Localized file check-in by OneLocBuild Task: Build definition ID 13114: Build ID 2432783

* Localized file check-in by OneLocBuild Task: Build definition ID 13114: Build ID 2432830

* Localized file check-in by OneLocBuild Task: Build definition ID 13114: Build ID 2434398 (#2400)

---------

Co-authored-by: olprod <olprod@microsoft.com>
2026-02-26 13:32:33 -06:00
Laurent Nguyen
5832170b2b Fix extractHeaderStatus to handle undefined and non-string messages (#2393)
* Fix extractHeaderStatus to handle undefined and non-string messages

* Fix unsafe casts

---------

Co-authored-by: Laurent Nguyen <languye@microsoft.com>
2026-02-20 16:42:17 +01:00
sunghyunkang1111
cc26e2800e Fix health metrics race condition and improve expected-failure handling (#2387)
* Fix health monitoring

* fix compile error
2026-02-17 12:54:04 -06:00
Laurent Nguyen
39ac7cf3f2 Add SC1010 to codes redacted in syntax error messages (#2388) 2026-02-16 18:34:54 +01:00
bogercraig
ed3a79f880 Adding origins for additional sov cloud. (#2389) 2026-02-13 16:58:07 -08:00
asier-isayas
68ba19d406 dependabot security alerts + delete containers after each migration e2e test (#2384)
* dependabot security alerts + delete containers after each migration e2e test

* catch error

---------

Co-authored-by: Asier Isayas <aisayas@microsoft.com>
2026-02-12 11:24:30 -08:00
asier-isayas
81ad13508b dependabot batch 3 (#2379)
Co-authored-by: Asier Isayas <aisayas@microsoft.com>
2026-02-11 12:52:05 -08:00
sunghyunkang1111
3f959e2235 Added expected errort handling (#2368) 2026-02-09 14:34:40 -06:00
sindhuba
67250f0f6b Fix timeout for flaky tests (#2378)
* Add changes for Load more option to work

* Remove localhost

* Add Mongo Pagination tests

* Run npm format

* Fix timeout in tests

* Revert "Fix timeout in tests"

This reverts commit 418b81c490.

* Fix timeout in tests

* Minor fix

* Revert "Minor fix"

This reverts commit 87fe289e3a.

* Revert "Fix timeout in tests"

This reverts commit 11c5748a31.

* Fix timeout
2026-02-05 16:14:37 -08:00
asier-isayas
df6312038a Dependabot Part 2 (#2370)
* dependabot part 1

* fix npm ci

* remove overrides

* undo playwright test update

* dependabot part 2

* cross-spawn

---------

Co-authored-by: Asier Isayas <aisayas@microsoft.com>
2026-02-05 08:45:21 -08:00
sindhuba
e6c27f39be Fix pagination issue (#2298)
* Add changes for Load more option to work

* Remove localhost

* Add Mongo Pagination tests

* Run npm format

* Fix error in tests

* Cleanup CORSByPass

* Revert "Cleanup CORSByPass"

This reverts commit de11ece337.
2026-02-03 17:02:23 -08:00
asier-isayas
937989a47d Dependabot part 1 (#2362)
* dependabot part 1

* fix npm ci

* remove overrides

* undo playwright test update

---------

Co-authored-by: Asier Isayas <aisayas@microsoft.com>
2026-02-03 13:21:10 -08:00
145 changed files with 21369 additions and 12429 deletions

1
.gitignore vendored
View File

@@ -17,6 +17,7 @@ Contracts/*
failure.png
screenshots/*
GettingStarted-ignore*.ipynb
src/Localization/Keys.generated.ts
/test-results/
/playwright-report/
/blob-report/

14319
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -4,7 +4,7 @@
"description": "Cosmos Explorer",
"main": "index.js",
"dependencies": {
"@azure/arm-cosmosdb": "9.1.0",
"@azure/arm-cosmosdb": "16.4.0",
"@azure/cosmos": "4.7.0",
"@azure/cosmos-language-service": "0.0.5",
"@azure/identity": "4.5.0",
@@ -14,12 +14,12 @@
"@fluentui/react": "8.119.0",
"@fluentui/react-components": "9.54.2",
"@jupyterlab/services": "6.0.2",
"@jupyterlab/terminal": "3.0.3",
"@jupyterlab/terminal": "3.6.8",
"@microsoft/applicationinsights-web": "2.6.1",
"@nteract/commutable": "7.5.1",
"@nteract/connected-components": "6.8.2",
"@nteract/core": "15.1.9",
"@nteract/data-explorer": "8.0.3",
"@nteract/data-explorer": "8.2.12",
"@nteract/directory-listing": "2.0.6",
"@nteract/dropdown-menu": "1.0.1",
"@nteract/editor": "10.1.12",
@@ -31,7 +31,7 @@
"@nteract/monaco-editor": "3.2.2",
"@nteract/octicons": "2.0.0",
"@nteract/outputs": "3.0.9",
"@nteract/presentational-components": "3.0.7",
"@nteract/presentational-components": "3.4.12",
"@nteract/stateful-components": "1.7.0",
"@nteract/styles": "2.0.2",
"@nteract/transform-geojson": "5.1.8",
@@ -39,25 +39,26 @@
"@nteract/transform-plotly": "6.1.6",
"@nteract/transform-vdom": "4.0.11",
"@nteract/transform-vega": "7.0.6",
"@octokit/request": "8.4.1",
"@octokit/rest": "17.9.2",
"@phosphor/widgets": "1.9.3",
"@testing-library/jest-dom": "6.4.6",
"@types/lodash": "4.14.171",
"@types/mkdirp": "1.0.1",
"@types/node-fetch": "2.5.7",
"@types/node-fetch": "2.6.13",
"@xmldom/xmldom": "0.7.13",
"@xterm/addon-fit": "0.10.0",
"@xterm/xterm": "5.5.0",
"allotment": "1.20.2",
"applicationinsights": "1.8.0",
"bootstrap": "3.4.1",
"canvas": "2.11.2",
"canvas": "3.2.1",
"clean-webpack-plugin": "4.0.0",
"clipboard-copy": "4.0.1",
"copy-webpack-plugin": "11.0.0",
"crossroads": "0.12.2",
"css-element-queries": "1.1.1",
"d3": "7.8.5",
"d3": "7.9.0",
"datatables.net-colreorder-dt": "1.7.0",
"datatables.net-dt": "1.13.8",
"date-fns": "1.29.0",
@@ -70,7 +71,8 @@
"html2canvas": "1.0.0-rc.5",
"i18next": "23.11.5",
"i18next-browser-languagedetector": "6.0.1",
"i18next-http-backend": "1.0.23",
"i18next-http-backend": "3.0.2",
"i18next-resources-to-backend": "1.2.1",
"iframe-resizer-react": "1.1.0",
"immer": "9.0.6",
"immutable": "4.0.0-rc.12",
@@ -79,12 +81,15 @@
"jquery-typeahead": "2.11.1",
"jquery-ui-dist": "1.13.2",
"knockout": "3.5.1",
"loader-utils": "2.0.3",
"lodash": "4.17.23",
"lodash-es": "4.17.23",
"min-document": "2.19.1",
"mkdirp": "1.0.4",
"monaco-editor": "0.44.0",
"ms": "2.1.3",
"nanoid": "3.3.8",
"p-retry": "6.2.1",
"patch-package": "8.0.0",
"patch-package": "8.0.1",
"plotly.js-cartesian-dist-min": "1.52.3",
"post-robot": "10.0.42",
"q": "1.5.1",
@@ -103,7 +108,6 @@
"react-youtube": "9.0.1",
"reflect-metadata": "0.1.13",
"rx-jupyter": "5.5.12",
"sanitize-html": "2.3.3",
"shell-quote": "1.7.3",
"styled-components": "5.0.1",
"swr": "0.4.0",
@@ -111,16 +115,30 @@
"tinykeys": "2.1.0",
"underscore": "1.12.1",
"utility-types": "3.10.0",
"web-vitals": "4.2.4",
"uuid": "9.0.0",
"web-vitals": "4.2.4",
"ws": "8.17.1",
"zustand": "3.5.0"
},
"overrides": {
"d3-color": "3.1.0",
"cross-spawn": "7.0.6",
"less-vars-loader": {
"json5": "1.0.2"
},
"trim": "0.0.3",
"@octokit/plugin-paginate-rest": "9.2.2",
"@octokit/request-error": "5.1.1",
"@octokit/request": "8.4.1",
"prismjs": "1.30.0",
"sanitize-html": "2.17.0"
},
"devDependencies": {
"@babel/core": "7.24.7",
"@babel/core": "7.29.0",
"@babel/preset-env": "7.24.7",
"@babel/preset-react": "7.24.7",
"@babel/preset-typescript": "7.24.7",
"@playwright/test": "1.49.1",
"@playwright/test": "1.55.1",
"@testing-library/react": "11.2.3",
"@types/applicationinsights-js": "1.0.7",
"@types/codemirror": "0.0.56",
@@ -134,7 +152,7 @@
"@types/hasher": "0.0.31",
"@types/jest": "29.5.12",
"@types/jquery": "3.5.29",
"@types/node": "12.11.1",
"@types/node": "18.19.0",
"@types/post-robot": "10.0.1",
"@types/q": "1.5.1",
"@types/react": "17.0.44",
@@ -145,7 +163,7 @@
"@types/react-window": "1.8.8",
"@types/sanitize-html": "1.27.2",
"@types/sinon": "2.3.3",
"@types/styled-components": "5.1.1",
"@types/styled-components": "5.1.32",
"@types/underscore": "1.7.36",
"@types/youtube-player": "5.5.6",
"@typescript-eslint/eslint-plugin": "6.7.4",
@@ -153,6 +171,7 @@
"@webpack-cli/serve": "2.0.5",
"babel-jest": "29.7.0",
"babel-loader": "8.1.0",
"brace-expansion": "1.1.12",
"buffer": "5.1.0",
"case-sensitive-paths-webpack-plugin": "2.4.0",
"create-file-webpack": "1.0.2",
@@ -170,6 +189,7 @@
"html-inline-css-webpack-plugin": "1.11.2",
"html-loader": "5.0.0",
"html-webpack-plugin": "5.5.3",
"i18next-resources-for-ts": "2.0.0",
"jest": "29.7.0",
"jest-canvas-mock": "2.5.2",
"jest-circus": "29.7.0",
@@ -177,7 +197,8 @@
"jest-html-loader": "1.0.0",
"jest-react-hooks-shallow": "1.5.1",
"jest-trx-results-processor": "3.0.2",
"less": "3.8.1",
"js-yaml": "3.14.2",
"less": "4.5.1",
"less-loader": "11.1.3",
"less-vars-loader": "1.1.0",
"mini-css-extract-plugin": "2.1.0",
@@ -195,14 +216,17 @@
"typedoc": "0.26.2",
"typescript": "4.9.5",
"url-loader": "4.1.1",
"wait-on": "4.0.2",
"webpack": "5.88.2",
"webpack-bundle-analyzer": "4.9.1",
"values-to-keys": "1.1.0",
"wait-on": "9.0.3",
"webpack": "5.104.1",
"webpack-bundle-analyzer": "5.2.0",
"webpack-cli": "5.1.4",
"webpack-dev-server": "4.15.2"
"webpack-dev-server": "5.2.3",
"ws": "8.17.1"
},
"scripts": {
"postinstall": "patch-package",
"postinstall": "patch-package && npm run generate:i18n-keys",
"prestart": "npm run generate:i18n-keys",
"start": "webpack serve --mode development",
"dev": "echo \"WARNING: npm run dev has been deprecated\" && npm run build",
"build:dataExplorer:ci": "npm run build:ci",
@@ -229,6 +253,7 @@
"strict:find": "node ./strict-null-checks/find.js",
"strict:add": "node ./strict-null-checks/auto-add.js",
"compile:fullStrict": "tsc -p ./tsconfig.json --strictNullChecks",
"generate:i18n-keys": "node utils/generateI18nKeys.mjs",
"generateARMClients": "npx ts-node utils/armClientGenerator/generator.ts"
},
"repository": {

View File

@@ -26,15 +26,6 @@ export default defineConfig({
},
projects: [
{
name: "chromium",
use: {
...devices["Desktop Chrome"],
launchOptions: {
args: ["--disable-web-security", "--disable-features=IsolateOrigins,site-per-process"],
},
},
},
{
name: "firefox",
use: {

View File

@@ -8,9 +8,10 @@
"name": "cosmos-explorer-preview",
"version": "1.0.0",
"dependencies": {
"body-parser": "^1.20.3",
"express": "^4.21.2",
"http-proxy-middleware": "^3.0.3",
"body-parser": "^2.2.2",
"express": "^5.2.1",
"follow-redirects": "^1.15.6",
"http-proxy-middleware": "^3.0.5",
"node": "^20.19.5",
"node-fetch": "^2.6.1",
"path-to-regexp": "^0.1.12"
@@ -18,8 +19,7 @@
},
"node_modules/@types/http-proxy": {
"version": "1.17.16",
"resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz",
"integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==",
"license": "MIT",
"dependencies": {
"@types/node": "*"
}
@@ -29,50 +29,40 @@
"license": "MIT"
},
"node_modules/accepts": {
"version": "1.3.8",
"license": "MIT",
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz",
"integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==",
"dependencies": {
"mime-types": "~2.1.34",
"negotiator": "0.6.3"
"mime-types": "^3.0.0",
"negotiator": "^1.0.0"
},
"engines": {
"node": ">= 0.6"
}
},
"node_modules/body-parser": {
"version": "1.20.3",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
"integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz",
"integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==",
"dependencies": {
"bytes": "3.1.2",
"content-type": "~1.0.5",
"debug": "2.6.9",
"depd": "2.0.0",
"destroy": "1.2.0",
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"on-finished": "2.4.1",
"qs": "6.13.0",
"raw-body": "2.5.2",
"type-is": "~1.6.18",
"unpipe": "1.0.0"
"bytes": "^3.1.2",
"content-type": "^1.0.5",
"debug": "^4.4.3",
"http-errors": "^2.0.0",
"iconv-lite": "^0.7.0",
"on-finished": "^2.4.1",
"qs": "^6.14.1",
"raw-body": "^3.0.1",
"type-is": "^2.0.1"
},
"engines": {
"node": ">= 0.8",
"npm": "1.2.8000 || >= 1.4.16"
"node": ">=18"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
}
},
"node_modules/body-parser/node_modules/debug": {
"version": "2.6.9",
"license": "MIT",
"dependencies": {
"ms": "2.0.0"
}
},
"node_modules/body-parser/node_modules/ms": {
"version": "2.0.0",
"license": "MIT"
},
"node_modules/bytes": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
@@ -83,8 +73,7 @@
},
"node_modules/call-bind-apply-helpers": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
"function-bind": "^1.1.2"
@@ -95,8 +84,7 @@
},
"node_modules/call-bound": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
"integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.2",
"get-intrinsic": "^1.3.0"
@@ -109,13 +97,15 @@
}
},
"node_modules/content-disposition": {
"version": "0.5.4",
"license": "MIT",
"dependencies": {
"safe-buffer": "5.2.1"
},
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz",
"integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==",
"engines": {
"node": ">= 0.6"
"node": ">=18"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
}
},
"node_modules/content-type": {
@@ -127,20 +117,22 @@
},
"node_modules/cookie": {
"version": "0.7.1",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
"integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/cookie-signature": {
"version": "1.0.6",
"license": "MIT"
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz",
"integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==",
"engines": {
"node": ">=6.6.0"
}
},
"node_modules/debug": {
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
"integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
"license": "MIT",
"dependencies": {
"ms": "^2.1.3"
},
@@ -160,18 +152,9 @@
"node": ">= 0.8"
}
},
"node_modules/destroy": {
"version": "1.2.0",
"license": "MIT",
"engines": {
"node": ">= 0.8",
"npm": "1.2.8000 || >= 1.4.16"
}
},
"node_modules/dunder-proto": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.1",
"es-errors": "^1.3.0",
@@ -195,24 +178,21 @@
},
"node_modules/es-define-property": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
}
},
"node_modules/es-errors": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
}
},
"node_modules/es-object-atoms": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0"
},
@@ -238,104 +218,77 @@
"license": "MIT"
},
"node_modules/express": {
"version": "4.21.2",
"resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz",
"integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==",
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz",
"integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==",
"dependencies": {
"accepts": "~1.3.8",
"array-flatten": "1.1.1",
"body-parser": "1.20.3",
"content-disposition": "0.5.4",
"content-type": "~1.0.4",
"cookie": "0.7.1",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "2.0.0",
"encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"finalhandler": "1.3.1",
"fresh": "0.5.2",
"http-errors": "2.0.0",
"merge-descriptors": "1.0.3",
"methods": "~1.1.2",
"on-finished": "2.4.1",
"parseurl": "~1.3.3",
"path-to-regexp": "0.1.12",
"proxy-addr": "~2.0.7",
"qs": "6.13.0",
"range-parser": "~1.2.1",
"safe-buffer": "5.2.1",
"send": "0.19.0",
"serve-static": "1.16.2",
"setprototypeof": "1.2.0",
"statuses": "2.0.1",
"type-is": "~1.6.18",
"utils-merge": "1.0.1",
"vary": "~1.1.2"
"accepts": "^2.0.0",
"body-parser": "^2.2.1",
"content-disposition": "^1.0.0",
"content-type": "^1.0.5",
"cookie": "^0.7.1",
"cookie-signature": "^1.2.1",
"debug": "^4.4.0",
"depd": "^2.0.0",
"encodeurl": "^2.0.0",
"escape-html": "^1.0.3",
"etag": "^1.8.1",
"finalhandler": "^2.1.0",
"fresh": "^2.0.0",
"http-errors": "^2.0.0",
"merge-descriptors": "^2.0.0",
"mime-types": "^3.0.0",
"on-finished": "^2.4.1",
"once": "^1.4.0",
"parseurl": "^1.3.3",
"proxy-addr": "^2.0.7",
"qs": "^6.14.0",
"range-parser": "^1.2.1",
"router": "^2.2.0",
"send": "^1.1.0",
"serve-static": "^2.2.0",
"statuses": "^2.0.1",
"type-is": "^2.0.1",
"vary": "^1.1.2"
},
"engines": {
"node": ">= 0.10.0"
"node": ">= 18"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
}
},
"node_modules/express/node_modules/array-flatten": {
"version": "1.1.1",
"license": "MIT"
},
"node_modules/express/node_modules/debug": {
"version": "2.6.9",
"license": "MIT",
"dependencies": {
"ms": "2.0.0"
}
},
"node_modules/express/node_modules/ms": {
"version": "2.0.0",
"license": "MIT"
},
"node_modules/finalhandler": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
"integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz",
"integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==",
"dependencies": {
"debug": "2.6.9",
"encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"on-finished": "2.4.1",
"parseurl": "~1.3.3",
"statuses": "2.0.1",
"unpipe": "~1.0.0"
"debug": "^4.4.0",
"encodeurl": "^2.0.0",
"escape-html": "^1.0.3",
"on-finished": "^2.4.1",
"parseurl": "^1.3.3",
"statuses": "^2.0.1"
},
"engines": {
"node": ">= 0.8"
"node": ">= 18.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
}
},
"node_modules/finalhandler/node_modules/debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dependencies": {
"ms": "2.0.0"
}
},
"node_modules/finalhandler/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
"node_modules/follow-redirects": {
"version": "1.15.3",
"version": "1.15.6",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
"integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
"funding": [
{
"type": "individual",
"url": "https://github.com/sponsors/RubenVerborgh"
}
],
"license": "MIT",
"engines": {
"node": ">=4.0"
},
@@ -353,25 +306,23 @@
}
},
"node_modules/fresh": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
"integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz",
"integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==",
"engines": {
"node": ">= 0.6"
"node": ">= 0.8"
}
},
"node_modules/function-bind": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/get-intrinsic": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.2",
"es-define-property": "^1.0.1",
@@ -393,8 +344,7 @@
},
"node_modules/get-proto": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
"license": "MIT",
"dependencies": {
"dunder-proto": "^1.0.1",
"es-object-atoms": "^1.0.0"
@@ -405,8 +355,7 @@
},
"node_modules/gopd": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
@@ -416,8 +365,7 @@
},
"node_modules/has-symbols": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
@@ -427,8 +375,7 @@
},
"node_modules/hasown": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
"license": "MIT",
"dependencies": {
"function-bind": "^1.1.2"
},
@@ -437,17 +384,22 @@
}
},
"node_modules/http-errors": {
"version": "2.0.0",
"license": "MIT",
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
"integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
"dependencies": {
"depd": "2.0.0",
"inherits": "2.0.4",
"setprototypeof": "1.2.0",
"statuses": "2.0.1",
"toidentifier": "1.0.1"
"depd": "~2.0.0",
"inherits": "~2.0.4",
"setprototypeof": "~1.2.0",
"statuses": "~2.0.2",
"toidentifier": "~1.0.1"
},
"engines": {
"node": ">= 0.8"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
}
},
"node_modules/http-proxy": {
@@ -480,8 +432,7 @@
},
"node_modules/http-proxy-middleware/node_modules/braces": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"license": "MIT",
"dependencies": {
"fill-range": "^7.1.1"
},
@@ -491,8 +442,7 @@
},
"node_modules/http-proxy-middleware/node_modules/fill-range": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"license": "MIT",
"dependencies": {
"to-regex-range": "^5.0.1"
},
@@ -502,16 +452,14 @@
},
"node_modules/http-proxy-middleware/node_modules/is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"license": "MIT",
"engines": {
"node": ">=0.12.0"
}
},
"node_modules/http-proxy-middleware/node_modules/micromatch": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
"integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
"license": "MIT",
"dependencies": {
"braces": "^3.0.3",
"picomatch": "^2.3.1"
@@ -522,8 +470,7 @@
},
"node_modules/http-proxy-middleware/node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"license": "MIT",
"dependencies": {
"is-number": "^7.0.0"
},
@@ -532,14 +479,18 @@
}
},
"node_modules/iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"version": "0.7.2",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz",
"integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3"
"safer-buffer": ">= 2.1.2 < 3.0.0"
},
"engines": {
"node": ">=0.10.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
}
},
"node_modules/inherits": {
@@ -570,62 +521,58 @@
"node": ">=0.10.0"
}
},
"node_modules/is-promise": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz",
"integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ=="
},
"node_modules/math-intrinsics": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
}
},
"node_modules/media-typer": {
"version": "0.3.0",
"license": "MIT",
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz",
"integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==",
"engines": {
"node": ">= 0.6"
"node": ">= 0.8"
}
},
"node_modules/merge-descriptors": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
"integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz",
"integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==",
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/methods": {
"version": "1.1.2",
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/mime": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
"bin": {
"mime": "cli.js"
},
"engines": {
"node": ">=4"
}
},
"node_modules/mime-db": {
"version": "1.52.0",
"license": "MIT",
"version": "1.54.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
"integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/mime-types": {
"version": "2.1.35",
"license": "MIT",
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz",
"integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==",
"dependencies": {
"mime-db": "1.52.0"
"mime-db": "^1.54.0"
},
"engines": {
"node": ">= 0.6"
"node": ">=18"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
}
},
"node_modules/ms": {
@@ -633,32 +580,27 @@
"license": "MIT"
},
"node_modules/negotiator": {
"version": "0.6.3",
"license": "MIT",
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz",
"integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/node": {
"version": "20.19.5",
"resolved": "https://registry.npmjs.org/node/-/node-20.19.5.tgz",
"integrity": "sha512-9fJOHEP8AVrwpbhlUxnbudW8IbkseQVxl4yNQyI/rDfP+gNwKEmfPtBc/Luyf677i5Y0HKIBHiApiB9S9vvxKw==",
"hasInstallScript": true,
"license": "ISC",
"dependencies": {
"node-bin-setup": "^1.0.0"
},
"bin": {
"node": "bin/node"
"node": "bin/node.exe"
},
"engines": {
"npm": ">=5.0.0"
}
},
"node_modules/node-bin-setup": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/node-bin-setup/-/node-bin-setup-1.1.4.tgz",
"integrity": "sha512-vWNHOne0ZUavArqPP5LJta50+S8R261Fr5SvGul37HbEDcowvLjwdvd0ZeSr0r2lTSrPxl6okq9QUw8BFGiAxA=="
},
"node_modules/node-fetch": {
"version": "2.6.7",
"license": "MIT",
@@ -677,10 +619,13 @@
}
}
},
"node_modules/node/node_modules/node-bin-setup": {
"version": "1.1.4",
"license": "ISC"
},
"node_modules/object-inspect": {
"version": "1.13.4",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
"integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
@@ -698,6 +643,14 @@
"node": ">= 0.8"
}
},
"node_modules/once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
"dependencies": {
"wrappy": "1"
}
},
"node_modules/parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
@@ -708,8 +661,7 @@
},
"node_modules/path-to-regexp": {
"version": "0.1.12",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
"integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ=="
"license": "MIT"
},
"node_modules/picomatch": {
"version": "2.3.1",
@@ -740,11 +692,10 @@
}
},
"node_modules/qs": {
"version": "6.13.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
"integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
"version": "6.14.1",
"license": "BSD-3-Clause",
"dependencies": {
"side-channel": "^1.0.6"
"side-channel": "^1.1.0"
},
"engines": {
"node": ">=0.6"
@@ -762,40 +713,46 @@
}
},
"node_modules/raw-body": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
"integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz",
"integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==",
"dependencies": {
"bytes": "3.1.2",
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"unpipe": "1.0.0"
"bytes": "~3.1.2",
"http-errors": "~2.0.1",
"iconv-lite": "~0.7.0",
"unpipe": "~1.0.0"
},
"engines": {
"node": ">= 0.8"
"node": ">= 0.10"
}
},
"node_modules/requires-port": {
"version": "1.0.0",
"license": "MIT"
},
"node_modules/safe-buffer": {
"version": "5.2.1",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/feross"
},
{
"type": "patreon",
"url": "https://www.patreon.com/feross"
},
{
"type": "consulting",
"url": "https://feross.org/support"
}
],
"license": "MIT"
"node_modules/router": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz",
"integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==",
"dependencies": {
"debug": "^4.4.0",
"depd": "^2.0.0",
"is-promise": "^4.0.0",
"parseurl": "^1.3.3",
"path-to-regexp": "^8.0.0"
},
"engines": {
"node": ">= 18"
}
},
"node_modules/router/node_modules/path-to-regexp": {
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz",
"integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
}
},
"node_modules/safer-buffer": {
"version": "2.1.2",
@@ -803,61 +760,46 @@
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"node_modules/send": {
"version": "0.19.0",
"resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
"integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz",
"integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==",
"dependencies": {
"debug": "2.6.9",
"depd": "2.0.0",
"destroy": "1.2.0",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"fresh": "0.5.2",
"http-errors": "2.0.0",
"mime": "1.6.0",
"ms": "2.1.3",
"on-finished": "2.4.1",
"range-parser": "~1.2.1",
"statuses": "2.0.1"
"debug": "^4.4.3",
"encodeurl": "^2.0.0",
"escape-html": "^1.0.3",
"etag": "^1.8.1",
"fresh": "^2.0.0",
"http-errors": "^2.0.1",
"mime-types": "^3.0.2",
"ms": "^2.1.3",
"on-finished": "^2.4.1",
"range-parser": "^1.2.1",
"statuses": "^2.0.2"
},
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/send/node_modules/debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dependencies": {
"ms": "2.0.0"
}
},
"node_modules/send/node_modules/debug/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
"node_modules/send/node_modules/encodeurl": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
"integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
"engines": {
"node": ">= 0.8"
"node": ">= 18"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
}
},
"node_modules/serve-static": {
"version": "1.16.2",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
"integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz",
"integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==",
"dependencies": {
"encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"parseurl": "~1.3.3",
"send": "0.19.0"
"encodeurl": "^2.0.0",
"escape-html": "^1.0.3",
"parseurl": "^1.3.3",
"send": "^1.2.0"
},
"engines": {
"node": ">= 0.8.0"
"node": ">= 18"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
}
},
"node_modules/setprototypeof": {
@@ -866,8 +808,7 @@
},
"node_modules/side-channel": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
"integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
"object-inspect": "^1.13.3",
@@ -884,8 +825,7 @@
},
"node_modules/side-channel-list": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
"integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
"object-inspect": "^1.13.3"
@@ -899,8 +839,7 @@
},
"node_modules/side-channel-map": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
"integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.2",
"es-errors": "^1.3.0",
@@ -916,8 +855,7 @@
},
"node_modules/side-channel-weakmap": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
"integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.2",
"es-errors": "^1.3.0",
@@ -933,8 +871,9 @@
}
},
"node_modules/statuses": {
"version": "2.0.1",
"license": "MIT",
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
"integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
"engines": {
"node": ">= 0.8"
}
@@ -951,11 +890,13 @@
"license": "MIT"
},
"node_modules/type-is": {
"version": "1.6.18",
"license": "MIT",
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz",
"integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==",
"dependencies": {
"media-typer": "0.3.0",
"mime-types": "~2.1.24"
"content-type": "^1.0.5",
"media-typer": "^1.1.0",
"mime-types": "^3.0.0"
},
"engines": {
"node": ">= 0.6"
@@ -968,13 +909,6 @@
"node": ">= 0.8"
}
},
"node_modules/utils-merge": {
"version": "1.0.1",
"license": "MIT",
"engines": {
"node": ">= 0.4.0"
}
},
"node_modules/vary": {
"version": "1.1.2",
"license": "MIT",
@@ -993,6 +927,11 @@
"tr46": "~0.0.3",
"webidl-conversions": "^3.0.0"
}
},
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
}
}
}

View File

@@ -11,9 +11,10 @@
"keywords": [],
"author": "Microsoft Corporation",
"dependencies": {
"body-parser": "^1.20.3",
"express": "^4.21.2",
"http-proxy-middleware": "^3.0.3",
"body-parser": "^2.2.2",
"express": "^5.2.1",
"follow-redirects": "^1.15.6",
"http-proxy-middleware": "^3.0.5",
"node": "^20.19.5",
"node-fetch": "^2.6.1",
"path-to-regexp": "^0.1.12"

11
src/@types/i18next.d.ts vendored Normal file
View File

@@ -0,0 +1,11 @@
import "i18next";
import Resources from "Localization/en/Resources.json";
declare module "i18next" {
interface CustomTypeOptions {
defaultNS: "Resources";
resources: {
Resources: typeof Resources;
};
}
}

View File

@@ -1,5 +1,7 @@
import { MessageTypes } from "../Contracts/ExplorerContracts";
import { SubscriptionType } from "../Contracts/SubscriptionType";
import { isExpectedError } from "../Metrics/ErrorClassification";
import { scenarioMonitor } from "../Metrics/ScenarioMonitor";
import { userContext } from "../UserContext";
import { ARMError } from "../Utils/arm/request";
import { logConsoleError } from "../Utils/NotificationConsoleUtils";
@@ -31,6 +33,12 @@ export const handleError = (
// checks for errors caused by firewall and sends them to portal to handle
sendNotificationForError(errorMessage, errorCode);
// Mark expected failures for health metrics (auth, firewall, permissions, etc.)
// This ensures timeouts with expected failures emit healthy instead of unhealthy
if (isExpectedError(error)) {
scenarioMonitor.markExpectedFailure();
}
};
export const getErrorMessage = (error: string | Error = ""): string => {

View File

@@ -38,7 +38,7 @@ export function queryIterator(databaseId: string, collection: Collection, query:
let continuationToken: string;
return {
fetchNext: () => {
return queryDocuments(databaseId, collection, false, query).then((response) => {
return queryDocuments(databaseId, collection, false, query, continuationToken).then((response) => {
continuationToken = response.continuationToken;
const headers: { [key: string]: string | number } = {};
response.headers.forEach((value, key) => {

View File

@@ -0,0 +1,78 @@
import { IButtonStyles, IStackStyles, ITextStyles } from "@fluentui/react";
import * as React from "react";
export const getDropdownButtonStyles = (disabled: boolean): IButtonStyles => ({
root: {
width: "100%",
height: "32px",
padding: "0 28px 0 8px",
border: "1px solid #8a8886",
background: "#fff",
color: "#323130",
textAlign: "left",
cursor: disabled ? "not-allowed" : "pointer",
position: "relative",
},
flexContainer: {
justifyContent: "flex-start",
},
label: {
fontWeight: "normal",
fontSize: "14px",
textAlign: "left",
},
});
export const buttonLabelStyles: ITextStyles = {
root: {
overflow: "hidden",
textOverflow: "ellipsis",
whiteSpace: "nowrap",
display: "block",
textAlign: "left",
},
};
export const buttonWrapperStyles: React.CSSProperties = {
position: "relative",
width: "100%",
};
export const chevronStyles: React.CSSProperties = {
position: "absolute",
right: "8px",
top: "50%",
transform: "translateY(-50%)",
pointerEvents: "none",
fontSize: "12px",
};
export const calloutContentStyles: IStackStyles = {
root: {
display: "flex",
flexDirection: "column",
},
};
export const listContainerStyles: IStackStyles = {
root: {
maxHeight: "300px",
overflowY: "auto",
},
};
export const getItemStyles = (isSelected: boolean): React.CSSProperties => ({
padding: "8px 12px",
cursor: "pointer",
fontSize: "14px",
backgroundColor: isSelected ? "#e6e6e6" : "transparent",
textAlign: "left",
});
export const emptyMessageStyles: ITextStyles = {
root: {
padding: "8px 12px",
color: "#605e5c",
textAlign: "left",
},
};

View File

@@ -0,0 +1,200 @@
import { fireEvent, render, screen } from "@testing-library/react";
import "@testing-library/jest-dom";
import React from "react";
import { SearchableDropdown } from "./SearchableDropdown";
interface TestItem {
id: string;
name: string;
}
describe("SearchableDropdown", () => {
const mockItems: TestItem[] = [
{ id: "1", name: "Item One" },
{ id: "2", name: "Item Two" },
{ id: "3", name: "Item Three" },
];
const defaultProps = {
label: "Test Label",
items: mockItems,
selectedItem: null as TestItem | null,
onSelect: jest.fn(),
getKey: (item: TestItem) => item.id,
getDisplayText: (item: TestItem) => item.name,
placeholder: "Select an item",
filterPlaceholder: "Filter items",
className: "test-dropdown",
};
beforeEach(() => {
jest.clearAllMocks();
});
it("should render with label and placeholder", () => {
render(<SearchableDropdown {...defaultProps} />);
expect(screen.getByText("Test Label")).toBeInTheDocument();
expect(screen.getByText("Select an item")).toBeInTheDocument();
});
it("should display selected item", () => {
const propsWithSelection = {
...defaultProps,
selectedItem: mockItems[0],
};
render(<SearchableDropdown {...propsWithSelection} />);
expect(screen.getByText("Item One")).toBeInTheDocument();
});
it("should show 'No items found' when items array is empty", () => {
const propsWithEmptyItems = {
...defaultProps,
items: [] as TestItem[],
};
render(<SearchableDropdown {...propsWithEmptyItems} />);
expect(screen.getByText("No Test Labels Found")).toBeInTheDocument();
});
it("should open dropdown when button is clicked", () => {
render(<SearchableDropdown {...defaultProps} />);
const button = screen.getByText("Select an item");
fireEvent.click(button);
expect(screen.getByPlaceholderText("Filter items")).toBeInTheDocument();
});
it("should filter items based on search text", () => {
render(<SearchableDropdown {...defaultProps} />);
const button = screen.getByText("Select an item");
fireEvent.click(button);
const searchBox = screen.getByPlaceholderText("Filter items");
fireEvent.change(searchBox, { target: { value: "Two" } });
expect(screen.getByText("Item Two")).toBeInTheDocument();
expect(screen.queryByText("Item One")).not.toBeInTheDocument();
expect(screen.queryByText("Item Three")).not.toBeInTheDocument();
});
it("should call onSelect when an item is clicked", () => {
const onSelectMock = jest.fn();
const propsWithMock = {
...defaultProps,
onSelect: onSelectMock,
};
render(<SearchableDropdown {...propsWithMock} />);
const button = screen.getByText("Select an item");
fireEvent.click(button);
const item = screen.getByText("Item Two");
fireEvent.click(item);
expect(onSelectMock).toHaveBeenCalledWith(mockItems[1]);
});
it("should close dropdown after selecting an item", () => {
render(<SearchableDropdown {...defaultProps} />);
const button = screen.getByText("Select an item");
fireEvent.click(button);
expect(screen.getByPlaceholderText("Filter items")).toBeInTheDocument();
const item = screen.getByText("Item One");
fireEvent.click(item);
expect(screen.queryByPlaceholderText("Filter items")).not.toBeInTheDocument();
});
it("should disable button when disabled prop is true", () => {
const propsWithDisabled = {
...defaultProps,
disabled: true,
};
render(<SearchableDropdown {...propsWithDisabled} />);
const button = screen.getByRole("button");
expect(button).toBeDisabled();
});
it("should not open dropdown when disabled", () => {
const propsWithDisabled = {
...defaultProps,
disabled: true,
};
render(<SearchableDropdown {...propsWithDisabled} />);
const button = screen.getByRole("button");
fireEvent.click(button);
expect(screen.queryByPlaceholderText("Filter items")).not.toBeInTheDocument();
});
it("should show 'No items found' when search yields no results", () => {
render(<SearchableDropdown {...defaultProps} />);
const button = screen.getByText("Select an item");
fireEvent.click(button);
const searchBox = screen.getByPlaceholderText("Filter items");
fireEvent.change(searchBox, { target: { value: "Nonexistent" } });
expect(screen.getByText("No items found")).toBeInTheDocument();
});
it("should handle case-insensitive filtering", () => {
render(<SearchableDropdown {...defaultProps} />);
const button = screen.getByText("Select an item");
fireEvent.click(button);
const searchBox = screen.getByPlaceholderText("Filter items");
fireEvent.change(searchBox, { target: { value: "two" } });
expect(screen.getByText("Item Two")).toBeInTheDocument();
expect(screen.queryByText("Item One")).not.toBeInTheDocument();
});
it("should clear filter text when dropdown is closed and reopened", () => {
render(<SearchableDropdown {...defaultProps} />);
const button = screen.getByText("Select an item");
fireEvent.click(button);
const searchBox = screen.getByPlaceholderText("Filter items");
fireEvent.change(searchBox, { target: { value: "Two" } });
// Close dropdown by selecting an item
const item = screen.getByText("Item Two");
fireEvent.click(item);
// Reopen dropdown
fireEvent.click(button);
// Filter text should be cleared
const reopenedSearchBox = screen.getByPlaceholderText("Filter items");
expect(reopenedSearchBox).toHaveValue("");
});
it("should use custom placeholder text", () => {
const propsWithCustomPlaceholder = {
...defaultProps,
placeholder: "Choose an option",
};
render(<SearchableDropdown {...propsWithCustomPlaceholder} />);
expect(screen.getByText("Choose an option")).toBeInTheDocument();
});
it("should use custom filter placeholder text", () => {
const propsWithCustomFilterPlaceholder = {
...defaultProps,
filterPlaceholder: "Search here",
};
render(<SearchableDropdown {...propsWithCustomFilterPlaceholder} />);
const button = screen.getByText("Select an item");
fireEvent.click(button);
expect(screen.getByPlaceholderText("Search here")).toBeInTheDocument();
});
});

View File

@@ -0,0 +1,155 @@
import {
Callout,
DefaultButton,
DirectionalHint,
Icon,
ISearchBoxStyles,
Label,
SearchBox,
Stack,
Text,
} from "@fluentui/react";
import * as React from "react";
import { useMemo, useRef, useState } from "react";
import {
buttonLabelStyles,
buttonWrapperStyles,
calloutContentStyles,
chevronStyles,
emptyMessageStyles,
getDropdownButtonStyles,
getItemStyles,
listContainerStyles,
} from "./SearchableDropdown.styles";
interface SearchableDropdownProps<T> {
label: string;
items: T[];
selectedItem: T | null;
onSelect: (item: T) => void;
getKey: (item: T) => string;
getDisplayText: (item: T) => string;
placeholder?: string;
filterPlaceholder?: string;
className?: string;
disabled?: boolean;
onDismiss?: () => void;
searchBoxStyles?: Partial<ISearchBoxStyles>;
}
export const SearchableDropdown = <T,>({
label,
items,
selectedItem,
onSelect,
getKey,
getDisplayText,
placeholder = "Select an item",
filterPlaceholder = "Filter items",
className,
disabled = false,
onDismiss,
searchBoxStyles: customSearchBoxStyles,
}: SearchableDropdownProps<T>): React.ReactElement => {
const [isOpen, setIsOpen] = useState(false);
const [filterText, setFilterText] = useState("");
const buttonRef = useRef<HTMLDivElement>(null);
const closeDropdown = () => {
setIsOpen(false);
setFilterText("");
};
const filteredItems = useMemo(
() => items?.filter((item) => getDisplayText(item).toLowerCase().includes(filterText.toLowerCase())),
[items, filterText, getDisplayText],
);
const handleDismiss = () => {
closeDropdown();
onDismiss?.();
};
const handleButtonClick = () => {
if (disabled) {
return;
}
setIsOpen(!isOpen);
};
const handleSelect = (item: T) => {
onSelect(item);
closeDropdown();
};
const buttonLabel = selectedItem
? getDisplayText(selectedItem)
: items?.length === 0
? `No ${label}s Found`
: placeholder;
const buttonId = `${className}-button`;
const buttonStyles = getDropdownButtonStyles(disabled);
return (
<Stack>
<Label htmlFor={buttonId}>{label}</Label>
<div ref={buttonRef} style={buttonWrapperStyles}>
<DefaultButton
id={buttonId}
className={className}
onClick={handleButtonClick}
styles={buttonStyles}
disabled={disabled}
>
<Text styles={buttonLabelStyles}>{buttonLabel}</Text>
</DefaultButton>
<Icon iconName="ChevronDown" style={chevronStyles} />
</div>
{isOpen && (
<Callout
target={buttonRef.current}
onDismiss={handleDismiss}
directionalHint={DirectionalHint.bottomLeftEdge}
isBeakVisible={false}
gapSpace={0}
setInitialFocus
>
<Stack styles={calloutContentStyles} style={{ width: buttonRef.current?.offsetWidth || 300 }}>
<SearchBox
placeholder={filterPlaceholder}
value={filterText}
onChange={(_, newValue) => setFilterText(newValue || "")}
styles={customSearchBoxStyles}
showIcon={true}
/>
<Stack styles={listContainerStyles}>
{filteredItems && filteredItems.length > 0 ? (
filteredItems.map((item) => {
const key = getKey(item);
const isSelected = selectedItem ? getKey(selectedItem) === key : false;
return (
<div
key={key}
onClick={() => handleSelect(item)}
style={getItemStyles(isSelected)}
onMouseEnter={(e) => (e.currentTarget.style.backgroundColor = "#f3f2f1")}
onMouseLeave={(e) =>
(e.currentTarget.style.backgroundColor = isSelected ? "#e6e6e6" : "transparent")
}
>
<Text>{getDisplayText(item)}</Text>
</div>
);
})
) : (
<Text styles={emptyMessageStyles}>No items found</Text>
)}
</Stack>
</Stack>
</Callout>
)}
</Stack>
);
};

View File

@@ -6,7 +6,7 @@ import { MinimalQueryIterator, nextPage } from "../IteratorUtilities";
// Redact sensitive information from BadRequest errors with specific codes
export const redactSyntaxErrorMessage = (error: unknown): unknown => {
const codesToRedact = ["SC1001", "SC2001"];
const codesToRedact = ["SC1001", "SC2001", "SC1010"];
try {
// Handle error objects with a message property

View File

@@ -77,6 +77,12 @@ let configContext: Readonly<ConfigContext> = {
`^https:\\/\\/.*\\.fabric\\.microsoft\\.com$`,
`^https:\\/\\/.*\\.powerbi\\.com$`,
`^https:\\/\\/dataexplorer-preview\\.azurewebsites\\.net$`,
`^https:\\/\\/explorer\\.cosmos\\.sovcloud-api\\.fr$`,
`^https:\\/\\/portal\\.sovcloud-azure\\.fr$`,
`^https:\\/\\/explorer\\.cosmos\\.sovcloud-api\\.de$`,
`^https:\\/\\/portal\\.sovcloud-azure\\.de$`,
`^https:\\/\\/explorer\\.cosmos\\.sovcloud-api\\.sg$`,
`^https:\\/\\/portal\\.sovcloud-azure\\.sg$`,
], // Webpack injects this at build time
gitSha: process.env.GIT_SHA,
hostedExplorerURL: "https://cosmos.azure.com/",

View File

@@ -395,6 +395,14 @@ describe("CopyJobUtils", () => {
expect(result).toBe(false);
});
it("should return false for different completion percentage", () => {
const jobs1 = [createMockJob("job1", "Running")];
const jobs2 = [{ ...createMockJob("job1", "Running"), CompletionPercentage: 75 }];
const result = CopyJobUtils.isEqual(jobs1, jobs2);
expect(result).toBe(false);
});
it("should return true for empty arrays", () => {
const result = CopyJobUtils.isEqual([], []);
expect(result).toBe(true);

View File

@@ -142,7 +142,7 @@ export function isEqual(prevJobs: CopyJobType[], newJobs: CopyJobType[]): boolea
if (!newJob) {
return false;
}
return prevJob.Status === newJob.Status;
return prevJob.Status === newJob.Status && prevJob.CompletionPercentage === newJob.CompletionPercentage;
});
}

View File

@@ -7,6 +7,7 @@ import {
AddGlobalSecondaryIndexPanelProps,
} from "Explorer/Panes/AddGlobalSecondaryIndexPanel/AddGlobalSecondaryIndexPanel";
import { useDatabases } from "Explorer/useDatabases";
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";
@@ -24,6 +25,7 @@ import DeleteTriggerIcon from "../../images/DeleteTrigger.svg";
import DeleteUDFIcon from "../../images/DeleteUDF.svg";
import HostedTerminalIcon from "../../images/Hosted-Terminal.svg";
import * as ViewModels from "../Contracts/ViewModels";
import { extractFeatures } from "../Platform/Hosted/extractFeatures";
import { userContext } from "../UserContext";
import { getCollectionName, getDatabaseName } from "../Utils/APITypeUtils";
import { useSidePanel } from "../hooks/useSidePanel";
@@ -35,7 +37,6 @@ import StoredProcedure from "./Tree/StoredProcedure";
import Trigger from "./Tree/Trigger";
import UserDefinedFunction from "./Tree/UserDefinedFunction";
import { useSelectedNode } from "./useSelectedNode";
import { extractFeatures } from "../Platform/Hosted/extractFeatures";
export interface CollectionContextMenuButtonParams {
databaseId: string;
@@ -57,7 +58,7 @@ export const createDatabaseContextMenu = (container: Explorer, databaseId: strin
{
iconSrc: AddCollectionIcon,
onClick: () => container.onNewCollectionClicked({ databaseId }),
label: `New ${getCollectionName()}`,
label: t(Keys.contextMenu.newContainer, { containerName: getCollectionName() }),
},
];
@@ -67,7 +68,7 @@ export const createDatabaseContextMenu = (container: Explorer, databaseId: strin
items.push({
iconSrc: AddCollectionIcon,
onClick: () => openRestoreContainerDialog(),
label: `Restore ${getCollectionName()}`,
label: t(Keys.contextMenu.restoreContainer, { containerName: getCollectionName() }),
});
}
}
@@ -80,11 +81,11 @@ export const createDatabaseContextMenu = (container: Explorer, databaseId: strin
useSidePanel
.getState()
.openSidePanel(
"Delete " + getDatabaseName(),
t(Keys.contextMenu.deleteDatabase, { databaseName: getDatabaseName() }),
<DeleteDatabaseConfirmationPanel refreshDatabases={() => container.refreshAllDatabases()} />,
);
},
label: `Delete ${getDatabaseName()}`,
label: t(Keys.contextMenu.deleteDatabase, { databaseName: getDatabaseName() }),
styleClass: "deleteDatabaseMenuItem",
});
}
@@ -100,7 +101,7 @@ export const createCollectionContextMenuButton = (
items.push({
iconSrc: AddSqlQueryIcon,
onClick: () => selectedCollection && selectedCollection.onNewQueryClick(selectedCollection, undefined),
label: "New SQL Query",
label: t(Keys.contextMenu.newSqlQuery),
});
}
@@ -108,7 +109,7 @@ export const createCollectionContextMenuButton = (
items.push({
iconSrc: AddSqlQueryIcon,
onClick: () => selectedCollection && selectedCollection.onNewMongoQueryClick(selectedCollection, undefined),
label: "New Query",
label: t(Keys.contextMenu.newQuery),
});
items.push({
@@ -123,8 +124,8 @@ export const createCollectionContextMenuButton = (
},
label:
useNotebook.getState().isShellEnabled || userContext.features.enableCloudShell
? "Open Mongo Shell"
: "New Shell",
? t(Keys.contextMenu.openMongoShell)
: t(Keys.contextMenu.newShell),
});
}
@@ -137,7 +138,7 @@ export const createCollectionContextMenuButton = (
onClick: () => {
container.openNotebookTerminal(ViewModels.TerminalKind.Cassandra);
},
label: "Open Cassandra Shell",
label: t(Keys.contextMenu.openCassandraShell),
});
}
@@ -150,7 +151,7 @@ export const createCollectionContextMenuButton = (
onClick: () => {
selectedCollection && selectedCollection.onNewStoredProcedureClick(selectedCollection, undefined);
},
label: "New Stored Procedure",
label: t(Keys.contextMenu.newStoredProcedure),
});
items.push({
@@ -158,7 +159,7 @@ export const createCollectionContextMenuButton = (
onClick: () => {
selectedCollection && selectedCollection.onNewUserDefinedFunctionClick(selectedCollection);
},
label: "New UDF",
label: t(Keys.contextMenu.newUdf),
});
items.push({
@@ -166,7 +167,7 @@ export const createCollectionContextMenuButton = (
onClick: () => {
selectedCollection && selectedCollection.onNewTriggerClick(selectedCollection, undefined);
},
label: "New Trigger",
label: t(Keys.contextMenu.newTrigger),
});
}
@@ -179,11 +180,11 @@ export const createCollectionContextMenuButton = (
useSidePanel
.getState()
.openSidePanel(
"Delete " + getCollectionName(),
t(Keys.contextMenu.deleteContainer, { containerName: getCollectionName() }),
<DeleteCollectionConfirmationPane refreshDatabases={() => container.refreshAllDatabases()} />,
);
},
label: `Delete ${getCollectionName()}`,
label: t(Keys.contextMenu.deleteContainer, { containerName: getCollectionName() }),
styleClass: "deleteCollectionMenuItem",
});
}
@@ -220,14 +221,14 @@ export const createSampleCollectionContextMenuButton = (): TreeNodeMenuItem[] =>
useTabs.getState().openAndActivateReactTab(ReactTabKind.QueryCopilot);
traceOpen(Action.OpenQueryCopilotFromNewQuery, { apiType: userContext.apiType });
},
label: "New SQL Query",
label: t(Keys.contextMenu.newSqlQuery),
});
} else if (copilotVersion === "v2.0") {
const sampleCollection = useDatabases.getState().sampleDataResourceTokenCollection;
items.push({
iconSrc: AddSqlQueryIcon,
onClick: () => sampleCollection && sampleCollection.onNewQueryClick(sampleCollection, undefined),
label: "New SQL Query",
label: t(Keys.contextMenu.newSqlQuery),
});
}
}
@@ -247,7 +248,7 @@ export const createStoreProcedureContextMenuItems = (
{
iconSrc: DeleteSprocIcon,
onClick: () => storedProcedure.delete(),
label: "Delete Stored Procedure",
label: t(Keys.contextMenu.deleteStoredProcedure),
},
];
};
@@ -261,7 +262,7 @@ export const createTriggerContextMenuItems = (container: Explorer, trigger: Trig
{
iconSrc: DeleteTriggerIcon,
onClick: () => trigger.delete(),
label: "Delete Trigger",
label: t(Keys.contextMenu.deleteTrigger),
},
];
};
@@ -278,7 +279,7 @@ export const createUserDefinedFunctionContextMenuItems = (
{
iconSrc: DeleteUDFIcon,
onClick: () => userDefinedFunction.delete(),
label: "Delete User Defined Function",
label: t(Keys.contextMenu.deleteUdf),
},
];
};

View File

@@ -17,6 +17,7 @@ import {
} from "@fluentui/react";
import React, { FC, useEffect } from "react";
import create, { UseStore } from "zustand";
import { Keys, t } from "Localization";
export interface DialogState {
visible: boolean;
@@ -88,7 +89,7 @@ export const useDialog: UseStore<DialogState> = create((set, get) => ({
isModal: true,
title,
subText,
primaryButtonText: "Close",
primaryButtonText: t(Keys.common.close),
secondaryButtonText: undefined,
onPrimaryButtonClick: () => {
get().closeDialog();

View File

@@ -44,6 +44,7 @@ import { useCommandBar } from "../../Menus/CommandBar/CommandBarComponentAdapter
import { SettingsTabV2 } from "../../Tabs/SettingsTabV2";
import "./SettingsComponent.less";
import { mongoIndexingPolicyAADError } from "./SettingsRenderUtils";
import { Keys, t } from "Localization";
import {
ConflictResolutionComponent,
ConflictResolutionComponentProps,
@@ -689,12 +690,12 @@ export class SettingsComponent extends React.Component<SettingsComponentProps, S
private onDataMaskingContentChange = (newDataMasking: DataModels.DataMaskingPolicy): void => {
const validationErrors = [];
if (newDataMasking.includedPaths === undefined || newDataMasking.includedPaths === null) {
validationErrors.push("includedPaths is required");
validationErrors.push(t(Keys.controls.settings.dataMasking.includedPathsRequired));
} else if (!Array.isArray(newDataMasking.includedPaths)) {
validationErrors.push("includedPaths must be an array");
validationErrors.push(t(Keys.controls.settings.dataMasking.includedPathsMustBeArray));
}
if (newDataMasking.excludedPaths !== undefined && !Array.isArray(newDataMasking.excludedPaths)) {
validationErrors.push("excludedPaths must be an array if provided");
validationErrors.push(t(Keys.controls.settings.dataMasking.excludedPathsMustBeArray));
}
this.setState({
@@ -896,7 +897,7 @@ export class SettingsComponent extends React.Component<SettingsComponentProps, S
const buttons: CommandButtonComponentProps[] = [];
const isExecuting = this.props.settingsTab.isExecuting();
if (this.saveSettingsButton.isVisible()) {
const label = "Save";
const label = t(Keys.common.save);
buttons.push({
iconSrc: SaveIcon,
iconAlt: label,
@@ -909,7 +910,7 @@ export class SettingsComponent extends React.Component<SettingsComponentProps, S
}
if (this.discardSettingsChangesButton.isVisible()) {
const label = "Discard";
const label = t(Keys.common.discard);
buttons.push({
iconSrc: DiscardIcon,
iconAlt: label,
@@ -934,9 +935,10 @@ export class SettingsComponent extends React.Component<SettingsComponentProps, S
const numberOfRegions = userContext.databaseAccount?.properties.locations?.length || 1;
const throughputDelta = (newThroughput - this.offer.autoscaleMaxThroughput) * numberOfRegions;
if (throughputCap && throughputCap !== -1 && throughputCap - this.totalThroughputUsed < throughputDelta) {
throughputError = `Your account is currently configured with a total throughput limit of ${throughputCap} RU/s. This update isn't possible because it would increase the total throughput to ${
this.totalThroughputUsed + throughputDelta
} RU/s. Change total throughput limit in cost management.`;
throughputError = t(Keys.controls.settings.throughput.throughputCapError, {
throughputCap: String(throughputCap),
newTotalThroughput: String(this.totalThroughputUsed + throughputDelta),
});
}
this.setState({ autoPilotThroughput: newThroughput, throughputError });
};
@@ -947,9 +949,10 @@ export class SettingsComponent extends React.Component<SettingsComponentProps, S
const numberOfRegions = userContext.databaseAccount?.properties.locations?.length || 1;
const throughputDelta = (newThroughput - this.offer.manualThroughput) * numberOfRegions;
if (throughputCap && throughputCap !== -1 && throughputCap - this.totalThroughputUsed < throughputDelta) {
throughputError = `Your account is currently configured with a total throughput limit of ${throughputCap} RU/s. This update isn't possible because it would increase the total throughput to ${
this.totalThroughputUsed + throughputDelta
} RU/s. Change total throughput limit in cost management.`;
throughputError = t(Keys.controls.settings.throughput.throughputCapError, {
throughputCap: String(throughputCap),
newTotalThroughput: String(this.totalThroughputUsed + throughputDelta),
});
}
this.setState({ throughput: newThroughput, throughputError });
};
@@ -1560,7 +1563,7 @@ export class SettingsComponent extends React.Component<SettingsComponentProps, S
}
>
{this.shouldShowKeyspaceSharedThroughputMessage() && (
<div>This table shared throughput is configured at the keyspace</div>
<div>{t(Keys.controls.settings.scale.keyspaceSharedThroughput)}</div>
)}
<div

View File

@@ -22,6 +22,7 @@ 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";
@@ -338,10 +339,12 @@ export const getEstimatedSpendingElement = (
const ruRange: string = isAutoscale ? throughput / 10 + " RU/s - " : "";
return (
<Stack>
<Text style={{ fontWeight: 600, color: "var(--colorNeutralForeground1)" }}>Cost estimate*</Text>
<Text style={{ fontWeight: 600, color: "var(--colorNeutralForeground1)" }}>
{t(Keys.controls.settings.costEstimate.title)}
</Text>
{costElement}
<Text style={{ fontWeight: 600, marginTop: 15, color: "var(--colorNeutralForeground1)" }}>
How we calculate this
{t(Keys.controls.settings.costEstimate.howWeCalculate)}
</Text>
<Stack id="throughputSpendElement" style={{ marginTop: 5 }}>
<span>
@@ -353,7 +356,8 @@ export const getEstimatedSpendingElement = (
</span>
<span>
{priceBreakdown.currencySign}
{priceBreakdown.pricePerRu}/RU
{priceBreakdown.pricePerRu}
{t(Keys.controls.settings.costEstimate.perRu)}
</span>
</Stack>
<Text style={{ marginTop: 15, color: "var(--colorNeutralForeground1)" }}>
@@ -365,18 +369,16 @@ export const getEstimatedSpendingElement = (
export const manualToAutoscaleDisclaimerElement: JSX.Element = (
<Text styles={infoAndToolTipTextStyle} id="manualToAutoscaleDisclaimerElement">
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.{" "}
<Link href={Urls.autoscaleMigration}>Learn more</Link>
{t(Keys.controls.settings.throughput.manualToAutoscaleDisclaimer)}{" "}
<Link href={Urls.autoscaleMigration}>{t(Keys.common.learnMore)}</Link>
</Text>
);
export const ttlWarning: JSX.Element = (
<Text styles={infoAndToolTipTextStyle}>
The system will automatically delete items based on the TTL value (in seconds) you provide, without needing a delete
operation explicitly issued by a client application. For more information see,{" "}
{t(Keys.controls.settings.throughput.ttlWarningText)}{" "}
<Link target="_blank" href="https://aka.ms/cosmos-db-ttl">
Time to Live (TTL) in Azure Cosmos DB
{t(Keys.controls.settings.throughput.ttlWarningLinkText)}
</Link>
.
</Text>
@@ -384,29 +386,28 @@ export const ttlWarning: JSX.Element = (
export const unsavedEditorWarningMessage = (editor: editorType): JSX.Element => (
<Text styles={infoAndToolTipTextStyle}>
You have not saved the latest changes made to your{" "}
{t(Keys.controls.settings.throughput.unsavedEditorWarningPrefix)}{" "}
{editor === "indexPolicy"
? "indexing policy"
? t(Keys.controls.settings.throughput.unsavedIndexingPolicy)
: editor === "dataMasking"
? "data masking policy"
: "computed properties"}
. Please click save to confirm the changes.
? t(Keys.controls.settings.throughput.unsavedDataMaskingPolicy)
: t(Keys.controls.settings.throughput.unsavedComputedProperties)}
{t(Keys.controls.settings.throughput.unsavedEditorWarningSuffix)}
</Text>
);
export const updateThroughputDelayedApplyWarningMessage: JSX.Element = (
<Text styles={infoAndToolTipTextStyle} id="updateThroughputDelayedApplyWarningMessage">
You are about to request an increase in throughput beyond the pre-allocated capacity. This operation will take some
time to complete.
{t(Keys.controls.settings.throughput.updateDelayedApplyWarning)}
</Text>
);
export const getUpdateThroughputBeyondInstantLimitMessage = (instantMaximumThroughput: number): JSX.Element => {
return (
<Text id="updateThroughputDelayedApplyWarningMessage">
Scaling up will take 4-6 hours as it exceeds what Azure Cosmos DB can instantly support currently based on your
number of physical partitions. You can increase your throughput to {instantMaximumThroughput} instantly or proceed
with this value and wait until the scale-up is completed.
{t(Keys.controls.settings.throughput.scalingUpDelayMessage, {
instantMaximumThroughput: String(instantMaximumThroughput),
})}
</Text>
);
};
@@ -418,22 +419,26 @@ export const getUpdateThroughputBeyondSupportLimitMessage = (
return (
<>
<Text styles={infoAndToolTipTextStyle} id="updateThroughputDelayedApplyWarningMessage">
Your request to increase throughput exceeds the pre-allocated capacity which may take longer than expected.
There are three options you can choose from to proceed:
{t(Keys.controls.settings.throughput.exceedPreAllocatedMessage)}
</Text>
<ol style={{ fontSize: 14, color: "var(--colorNeutralForeground1)", marginTop: "5px" }}>
<li>You can instantly scale up to {instantMaximumThroughput} RU/s.</li>
<li>
{t(Keys.controls.settings.throughput.instantScaleOption, {
instantMaximumThroughput: String(instantMaximumThroughput),
})}
</li>
{instantMaximumThroughput < maximumThroughput && (
<li>You can asynchronously scale up to any value under {maximumThroughput} RU/s in 4-6 hours.</li>
<li>
{t(Keys.controls.settings.throughput.asyncScaleOption, { maximumThroughput: String(maximumThroughput) })}
</li>
)}
<li>
Your current quota max is {maximumThroughput} RU/s. To go over this limit, you must request a quota increase
and the Azure Cosmos DB team will review.
{t(Keys.controls.settings.throughput.quotaMaxOption, { maximumThroughput: String(maximumThroughput) })}
<Link
href="https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/create-support-request-quota-increase"
target="_blank"
>
Learn more
{t(Keys.common.learnMore)}
</Link>
</li>
</ol>
@@ -444,23 +449,19 @@ export const getUpdateThroughputBeyondSupportLimitMessage = (
export const getUpdateThroughputBelowMinimumMessage = (minimum: number): JSX.Element => {
return (
<Text styles={infoAndToolTipTextStyle}>
You are not able to lower throughput below your current minimum of {minimum} RU/s. For more information on this
limit, please refer to our service quote documentation.
{t(Keys.controls.settings.throughput.belowMinimumMessage, { minimum: String(minimum) })}
<Link
href="https://learn.microsoft.com/en-us/azure/cosmos-db/concepts-limits#minimum-throughput-limits"
target="_blank"
>
Learn more
{t(Keys.common.learnMore)}
</Link>
</Text>
);
};
export const saveThroughputWarningMessage: JSX.Element = (
<Text>
Your bill will be affected as you update your throughput settings. Please review the updated cost estimate below
before saving your changes
</Text>
<Text>{t(Keys.controls.settings.throughput.saveThroughputWarning)}</Text>
);
const getCurrentThroughput = (
@@ -472,23 +473,29 @@ const getCurrentThroughput = (
if (targetThroughput) {
if (throughput) {
return isAutoscale
? `, Current autoscale throughput: ${Math.round(
? `, ${t(Keys.controls.settings.throughput.currentAutoscaleThroughput)} ${Math.round(
throughput / 10,
)} - ${throughput} ${throughputUnit}, Target autoscale throughput: ${Math.round(
targetThroughput / 10,
)} - ${targetThroughput} ${throughputUnit}`
: `, Current manual throughput: ${throughput} ${throughputUnit}, Target manual throughput: ${targetThroughput}`;
)} - ${throughput} ${throughputUnit}, ${t(
Keys.controls.settings.throughput.targetAutoscaleThroughput,
)} ${Math.round(targetThroughput / 10)} - ${targetThroughput} ${throughputUnit}`
: `, ${t(Keys.controls.settings.throughput.currentManualThroughput)} ${throughput} ${throughputUnit}, ${t(
Keys.controls.settings.throughput.targetManualThroughput,
)} ${targetThroughput}`;
} else {
return isAutoscale
? `, Target autoscale throughput: ${Math.round(targetThroughput / 10)} - ${targetThroughput} ${throughputUnit}`
: `, Target manual throughput: ${targetThroughput} ${throughputUnit}`;
? `, ${t(Keys.controls.settings.throughput.targetAutoscaleThroughput)} ${Math.round(
targetThroughput / 10,
)} - ${targetThroughput} ${throughputUnit}`
: `, ${t(Keys.controls.settings.throughput.targetManualThroughput)} ${targetThroughput} ${throughputUnit}`;
}
}
if (!targetThroughput && throughput) {
return isAutoscale
? `, Current autoscale throughput: ${Math.round(throughput / 10)} - ${throughput} ${throughputUnit}`
: `, Current manual throughput: ${throughput} ${throughputUnit}`;
? `, ${t(Keys.controls.settings.throughput.currentAutoscaleThroughput)} ${Math.round(
throughput / 10,
)} - ${throughput} ${throughputUnit}`
: `, ${t(Keys.controls.settings.throughput.currentManualThroughput)} ${throughput} ${throughputUnit}`;
}
return "";
@@ -503,10 +510,10 @@ export const getThroughputApplyDelayedMessage = (
requestedThroughput: number,
): JSX.Element => (
<Text styles={infoAndToolTipTextStyle}>
The request to increase the throughput has successfully been submitted. This operation will take 1-3 business days
to complete. View the latest status in Notifications.
{t(Keys.controls.settings.throughput.applyDelayedMessage)}
<br />
Database: {databaseName}, Container: {collectionName}{" "}
{t(Keys.controls.settings.throughput.databaseLabel)} {databaseName},{" "}
{t(Keys.controls.settings.throughput.containerLabel)} {collectionName}{" "}
{getCurrentThroughput(isAutoscale, throughput, throughputUnit, requestedThroughput)}
</Text>
);
@@ -519,9 +526,13 @@ export const getThroughputApplyShortDelayMessage = (
collectionName: string,
): JSX.Element => (
<Text styles={infoAndToolTipTextStyle} id="throughputApplyShortDelayMessage">
A request to increase the throughput is currently in progress. This operation will take some time to complete.
{t(Keys.controls.settings.throughput.applyShortDelayMessage)}
<br />
{collectionName ? `Database: ${databaseName}, Container: ${collectionName} ` : `Database: ${databaseName} `}
{collectionName
? `${t(Keys.controls.settings.throughput.databaseLabel)} ${databaseName}, ${t(
Keys.controls.settings.throughput.containerLabel,
)} ${collectionName} `
: `${t(Keys.controls.settings.throughput.databaseLabel)} ${databaseName} `}
{getCurrentThroughput(isAutoscale, throughput, throughputUnit)}
</Text>
);
@@ -535,10 +546,13 @@ export const getThroughputApplyLongDelayMessage = (
requestedThroughput: number,
): JSX.Element => (
<Text styles={infoAndToolTipTextStyle} id="throughputApplyLongDelayMessage">
A request to increase the throughput is currently in progress. This operation will take 1-3 business days to
complete. View the latest status in Notifications.
{t(Keys.controls.settings.throughput.applyLongDelayMessage)}
<br />
{collectionName ? `Database: ${databaseName}, Container: ${collectionName} ` : `Database: ${databaseName} `}
{collectionName
? `${t(Keys.controls.settings.throughput.databaseLabel)} ${databaseName}, ${t(
Keys.controls.settings.throughput.containerLabel,
)} ${collectionName} `
: `${t(Keys.controls.settings.throughput.databaseLabel)} ${databaseName} `}
{getCurrentThroughput(isAutoscale, throughput, throughputUnit, requestedThroughput)}
</Text>
);
@@ -547,63 +561,49 @@ export const getToolTipContainer = (content: string | JSX.Element): JSX.Element
content ? <Text styles={infoAndToolTipTextStyle}>{content}</Text> : undefined;
export const conflictResolutionLwwTooltip: JSX.Element = (
<Text styles={infoAndToolTipTextStyle}>
Gets or sets the name of a integer property in your documents which is used for the Last Write Wins (LWW) based
conflict resolution scheme. By default, the system uses the system defined timestamp property, _ts to decide the
winner for the conflicting versions of the document. Specify your own integer property if you want to override the
default timestamp based conflict resolution.
</Text>
<Text styles={infoAndToolTipTextStyle}>{t(Keys.controls.settings.conflictResolution.lwwTooltip)}</Text>
);
export const conflictResolutionCustomToolTip: JSX.Element = (
<Text styles={infoAndToolTipTextStyle}>
Gets or sets the name of a stored procedure (aka merge procedure) for resolving the conflicts. You can write
application defined logic to determine the winner of the conflicting versions of a document. The stored procedure
will get executed transactionally, exactly once, on the server side. If you do not provide a stored procedure, the
conflicts will be populated in the
{t(Keys.controls.settings.conflictResolution.customTooltip)}
<Link className="linkDarkBackground" href="https://aka.ms/dataexplorerconflics" target="_blank">
{` conflicts feed`}
{t(Keys.controls.settings.conflictResolution.customTooltipConflictsFeed)}
</Link>
. You can update/re-register the stored procedure at any time.
{t(Keys.controls.settings.conflictResolution.customTooltipSuffix)}
</Text>
);
export const changeFeedPolicyToolTip: JSX.Element = (
<Text styles={infoAndToolTipTextStyle}>
Enable change feed log retention policy to retain last 10 minutes of history for items in the container by default.
To support this, the request unit (RU) charge for this container will be multiplied by a factor of two for writes.
Reads are unaffected.
</Text>
<Text styles={infoAndToolTipTextStyle}>{t(Keys.controls.settings.changeFeed.tooltip)}</Text>
);
export const mongoIndexingPolicyDisclaimer: JSX.Element = (
<Text style={{ color: "var(--colorNeutralForeground1)" }}>
For queries that filter on multiple properties, create multiple single field indexes instead of a compound index.
{t(Keys.controls.settings.mongoIndexing.disclaimer)}
<Link
href="https://docs.microsoft.com/azure/cosmos-db/mongodb-indexing#index-types"
target="_blank"
style={{ color: "var(--colorBrandForeground1)" }}
>
{` Compound indexes `}
{t(Keys.controls.settings.mongoIndexing.disclaimerCompoundIndexesLink)}
</Link>
are only used for sorting query results. If you need to add a compound index, you can create one using the Mongo
shell.
{t(Keys.controls.settings.mongoIndexing.disclaimerSuffix)}
</Text>
);
export const mongoCompoundIndexNotSupportedMessage: JSX.Element = (
<Text style={{ color: "var(--colorNeutralForeground1)" }}>
Collections with compound indexes are not yet supported in the indexing editor. To modify indexing policy for this
collection, use the Mongo Shell.
{t(Keys.controls.settings.mongoIndexing.compoundNotSupported)}
</Text>
);
export const mongoIndexingPolicyAADError: JSX.Element = (
<MessageBar messageBarType={MessageBarType.error}>
<Text>
To use the indexing policy editor, please login to the
{t(Keys.controls.settings.mongoIndexing.aadError)}
<Link target="_blank" href="https://portal.azure.com">
{"azure portal."}
{t(Keys.controls.settings.mongoIndexing.aadErrorLink)}
</Link>
</Text>
</MessageBar>
@@ -611,7 +611,7 @@ export const mongoIndexingPolicyAADError: JSX.Element = (
export const mongoIndexTransformationRefreshingMessage: JSX.Element = (
<Stack horizontal {...mongoWarningStackProps}>
<Text styles={infoAndToolTipTextStyle}>Refreshing index transformation progress</Text>
<Text styles={infoAndToolTipTextStyle}>{t(Keys.controls.settings.mongoIndexing.refreshingProgress)}</Text>
<Spinner size={SpinnerSize.small} />
</Stack>
);
@@ -623,15 +623,18 @@ export const renderMongoIndexTransformationRefreshMessage = (
if (progress === 0) {
return (
<Text styles={infoAndToolTipTextStyle}>
{"You can make more indexing changes once the current index transformation is complete. "}
<Link onClick={performRefresh}>{"Refresh to check if it has completed."}</Link>
{t(Keys.controls.settings.mongoIndexing.canMakeMoreChangesZero)}
<Link onClick={performRefresh}>{t(Keys.controls.settings.mongoIndexing.refreshToCheck)}</Link>
</Text>
);
} else {
return (
<Text styles={infoAndToolTipTextStyle}>
{`You can make more indexing changes once the current index transformation has completed. It is ${progress}% complete. `}
<Link onClick={performRefresh}>{"Refresh to check the progress."}</Link>
{`${t(Keys.controls.settings.mongoIndexing.canMakeMoreChangesProgress).replace(
"{{progress}}",
String(progress),
)} `}
<Link onClick={performRefresh}>{t(Keys.controls.settings.mongoIndexing.refreshToCheckProgress)}</Link>
</Text>
);
}

View File

@@ -4,6 +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, t } from "Localization";
import * as monaco from "monaco-editor";
import * as React from "react";
export interface ComputedPropertiesComponentProps {
@@ -107,7 +108,7 @@ export class ComputedPropertiesComponent extends React.Component<
this.computedPropertiesEditor = monaco.editor.create(this.computedPropertiesDiv.current, {
value: value,
language: "json",
ariaLabel: "Computed properties",
ariaLabel: t(Keys.controls.settings.computedProperties.ariaLabel),
theme: monacoTheme(),
});
if (this.computedPropertiesEditor) {
@@ -151,9 +152,9 @@ export class ComputedPropertiesComponent extends React.Component<
)}
<Text style={{ marginLeft: "30px", marginBottom: "10px", color: "var(--colorNeutralForeground1)" }}>
<Link target="_blank" href="https://aka.ms/computed-properties-preview/">
{"Learn more"} <FontIcon iconName="NavigateExternalInline" />
{t(Keys.common.learnMore)} <FontIcon iconName="NavigateExternalInline" />
</Link>
&#160; about how to define computed properties and how to use them.
&#160; {t(Keys.controls.settings.computedProperties.learnMorePrefix)}
</Text>
<div
className="settingsV2Editor"

View File

@@ -2,6 +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, t } from "Localization";
import {
conflictResolutionCustomToolTip,
conflictResolutionLwwTooltip,
@@ -32,9 +33,12 @@ export class ConflictResolutionComponent extends React.Component<ConflictResolut
private conflictResolutionChoiceGroupOptions: IChoiceGroupOption[] = [
{
key: DataModels.ConflictResolutionMode.LastWriterWins,
text: "Last Write Wins (default)",
text: t(Keys.controls.settings.conflictResolution.lwwDefault),
},
{
key: DataModels.ConflictResolutionMode.Custom,
text: t(Keys.controls.settings.conflictResolution.customMergeProcedure),
},
{ key: DataModels.ConflictResolutionMode.Custom, text: "Merge Procedure (custom)" },
];
componentDidMount(): void {
@@ -85,7 +89,7 @@ export class ConflictResolutionComponent extends React.Component<ConflictResolut
private getConflictResolutionModeComponent = (): JSX.Element => (
<ChoiceGroup
label="Mode"
label={t(Keys.controls.settings.conflictResolution.mode)}
selectedKey={this.props.conflictResolutionPolicyMode}
options={this.conflictResolutionChoiceGroupOptions}
onChange={this.onConflictResolutionPolicyModeChange}
@@ -103,7 +107,7 @@ export class ConflictResolutionComponent extends React.Component<ConflictResolut
private getConflictResolutionLWWComponent = (): JSX.Element => (
<TextField
id="conflictResolutionLwwTextField"
label={"Conflict Resolver Property"}
label={t(Keys.controls.settings.conflictResolution.conflictResolverProperty)}
onRenderLabel={this.onRenderLwwComponentTextField}
styles={{
fieldGroup: {
@@ -158,7 +162,7 @@ export class ConflictResolutionComponent extends React.Component<ConflictResolut
return (
<TextField
id="conflictResolutionCustomTextField"
label="Stored procedure"
label={t(Keys.controls.settings.conflictResolution.storedProcedure)}
onRenderLabel={this.onRenderCustomComponentTextField}
styles={{
fieldGroup: {

View File

@@ -7,6 +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, t } from "Localization";
import React from "react";
export interface ContainerPolicyComponentProps {
@@ -153,7 +154,7 @@ export const ContainerPolicyComponent: React.FC<ContainerPolicyComponentProps> =
<PivotItem
itemKey={ContainerPolicyTabTypes[ContainerPolicyTabTypes.VectorPolicyTab]}
style={{ marginTop: 20, color: "var(--colorNeutralForeground1)" }}
headerText="Vector Policy"
headerText={t(Keys.controls.settings.containerPolicy.vectorPolicy)}
>
<Stack {...titleAndInputStackProps} styles={{ root: { position: "relative", maxWidth: "400px" } }}>
{vectorEmbeddings && (
@@ -175,7 +176,7 @@ export const ContainerPolicyComponent: React.FC<ContainerPolicyComponentProps> =
<PivotItem
itemKey={ContainerPolicyTabTypes[ContainerPolicyTabTypes.FullTextPolicyTab]}
style={{ marginTop: 20, color: "var(--colorNeutralForeground1)" }}
headerText="Full Text Policy"
headerText={t(Keys.controls.settings.containerPolicy.fullTextPolicy)}
>
<Stack {...titleAndInputStackProps} styles={{ root: { position: "relative", maxWidth: "400px" } }}>
{fullTextSearchPolicy ? (
@@ -218,7 +219,7 @@ export const ContainerPolicyComponent: React.FC<ContainerPolicyComponentProps> =
});
}}
>
Create new full text search policy
{t(Keys.controls.settings.containerPolicy.createFullTextPolicy)}
</DefaultButton>
)}
</Stack>

View File

@@ -2,6 +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, t } from "Localization";
import { loadMonaco } from "../../../LazyMonaco";
import { titleAndInputStackProps, unsavedEditorWarningMessage } from "../SettingsRenderUtils";
import { isDirty as isContentDirty, isDataMaskingEnabled } from "../SettingsUtils";
@@ -89,7 +90,7 @@ export class DataMaskingComponent extends React.Component<DataMaskingComponentPr
value: value,
language: "json",
automaticLayout: true,
ariaLabel: "Data Masking Policy",
ariaLabel: t(Keys.controls.settings.dataMasking.ariaLabel),
fontSize: 13,
minimap: { enabled: false },
wordWrap: "off",
@@ -142,7 +143,7 @@ export class DataMaskingComponent extends React.Component<DataMaskingComponentPr
)}
{this.props.validationErrors.length > 0 && (
<MessageBar messageBarType={MessageBarType.error}>
Validation failed: {this.props.validationErrors.join(", ")}
{t(Keys.controls.settings.dataMasking.validationFailed)} {this.props.validationErrors.join(", ")}
</MessageBar>
)}
<div className="settingsV2Editor" tabIndex={0} ref={this.dataMaskingDiv}></div>

View File

@@ -2,6 +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, t } from "Localization";
import { GlobalSecondaryIndexSourceComponent } from "./GlobalSecondaryIndexSourceComponent";
import { GlobalSecondaryIndexTargetComponent } from "./GlobalSecondaryIndexTargetComponent";
@@ -21,7 +22,9 @@ export const GlobalSecondaryIndexComponent: React.FC<GlobalSecondaryIndexCompone
<Stack tokens={{ childrenGap: 8 }} styles={{ root: { maxWidth: 600 } }}>
<Stack horizontal verticalAlign="center" wrap tokens={{ childrenGap: 8 }}>
{isSourceContainer && (
<Text styles={{ root: { fontWeight: 600 } }}>This container has the following indexes defined for it.</Text>
<Text styles={{ root: { fontWeight: 600 } }}>
{t(Keys.controls.settings.globalSecondaryIndex.indexesDefined)}
</Text>
)}
<Text>
<Link
@@ -31,7 +34,7 @@ export const GlobalSecondaryIndexComponent: React.FC<GlobalSecondaryIndexCompone
Learn more
<FontIcon iconName="NavigateExternalInline" style={{ marginLeft: "4px" }} />
</Link>{" "}
about how to define global secondary indexes and how to use them.
{t(Keys.controls.settings.globalSecondaryIndex.learnMoreSuffix)}
</Text>
</Stack>
{isSourceContainer && <GlobalSecondaryIndexSourceComponent collection={collection} explorer={explorer} />}

View File

@@ -9,6 +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, t } from "Localization";
export interface GlobalSecondaryIndexSourceComponentProps {
collection: ViewModels.Collection;
@@ -67,7 +68,7 @@ export const GlobalSecondaryIndexSourceComponent: React.FC<GlobalSecondaryIndexS
editorRef.current = monacoInstance.editor.create(editorContainerRef.current, {
value: jsonValue,
language: "json",
ariaLabel: "Global Secondary Index JSON",
ariaLabel: t(Keys.controls.settings.globalSecondaryIndex.jsonAriaLabel),
readOnly: true,
});
};
@@ -98,7 +99,7 @@ export const GlobalSecondaryIndexSourceComponent: React.FC<GlobalSecondaryIndexS
}}
/>
<PrimaryButton
text="Add index"
text={t(Keys.controls.settings.globalSecondaryIndex.addIndex)}
styles={{ root: { width: "fit-content", marginTop: 12 } }}
onClick={() =>
useSidePanel

View File

@@ -1,6 +1,7 @@
import { Stack, Text } from "@fluentui/react";
import * as React from "react";
import * as ViewModels from "../../../../Contracts/ViewModels";
import { Keys, t } from "Localization";
export interface GlobalSecondaryIndexTargetComponentProps {
collection: ViewModels.Collection;
@@ -25,17 +26,21 @@ export const GlobalSecondaryIndexTargetComponent: React.FC<GlobalSecondaryIndexT
return (
<Stack tokens={{ childrenGap: 15 }} styles={{ root: { maxWidth: 600 } }}>
<Text styles={textHeadingStyle}>Global Secondary Index Settings</Text>
<Text styles={textHeadingStyle}>{t(Keys.controls.settings.globalSecondaryIndex.settingsTitle)}</Text>
<Stack tokens={{ childrenGap: 5 }}>
<Text styles={{ root: { fontWeight: "600" } }}>Source container</Text>
<Text styles={{ root: { fontWeight: "600" } }}>
{t(Keys.controls.settings.globalSecondaryIndex.sourceContainer)}
</Text>
<Stack styles={valueBoxStyle}>
<Text>{globalSecondaryIndexDefinition?.sourceCollectionId}</Text>
</Stack>
</Stack>
<Stack tokens={{ childrenGap: 5 }}>
<Text styles={{ root: { fontWeight: "600" } }}>Global secondary index definition</Text>
<Text styles={{ root: { fontWeight: "600" } }}>
{t(Keys.controls.settings.globalSecondaryIndex.indexDefinition)}
</Text>
<Stack styles={valueBoxStyle}>
<Text>{globalSecondaryIndexDefinition?.definition}</Text>
</Stack>

View File

@@ -3,6 +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, t } from "Localization";
import { loadMonaco } from "../../../LazyMonaco";
import { titleAndInputStackProps, unsavedEditorWarningMessage } from "../SettingsRenderUtils";
import { isDirty, isIndexTransforming } from "../SettingsUtils";
@@ -119,7 +120,7 @@ export class IndexingPolicyComponent extends React.Component<
value: value,
language: "json",
readOnly: isIndexTransforming(this.props.indexTransformationProgress),
ariaLabel: "Indexing Policy",
ariaLabel: t(Keys.controls.settings.indexingPolicy.ariaLabel),
theme: monacoTheme(),
});
if (this.indexingPolicyEditor) {

View File

@@ -1,6 +1,7 @@
import { MessageBar, MessageBarType } from "@fluentui/react";
import * as React from "react";
import { handleError } from "../../../../../Common/ErrorHandlingUtils";
import { Keys, t } from "Localization";
import {
mongoIndexTransformationRefreshingMessage,
renderMongoIndexTransformationRefreshMessage,
@@ -46,7 +47,11 @@ export class IndexingPolicyRefreshComponent extends React.Component<
try {
await this.props.refreshIndexTransformationProgress();
} catch (error) {
handleError(error, "RefreshIndexTransformationProgress", "Refreshing index transformation progress failed");
handleError(
error,
"RefreshIndexTransformationProgress",
t(Keys.controls.settings.indexingPolicyRefresh.refreshFailed),
);
} finally {
this.setState({ isRefreshing: false });
}

View File

@@ -14,7 +14,7 @@ exports[`IndexingPolicyRefreshComponent renders 1`] = `
}
}
>
You can make more indexing changes once the current index transformation has completed. It is 90% complete.
You can make more indexing changes once the current index transformation has completed. It is 90% complete.
<StyledLinkBase
onClick={[Function]}
>

View File

@@ -9,6 +9,7 @@ import {
IDropdownOption,
ITextField,
} from "@fluentui/react";
import { Keys, t } from "Localization";
import {
addMongoIndexSubElementsTokens,
mongoErrorMessageStyles,
@@ -66,7 +67,7 @@ export class AddMongoIndexComponent extends React.Component<AddMongoIndexCompone
<Stack {...mongoWarningStackProps}>
<Stack horizontal tokens={addMongoIndexSubElementsTokens}>
<TextField
ariaLabel={"Index Field Name " + this.props.position}
ariaLabel={t(Keys.controls.settings.mongoIndexing.indexFieldName) + " " + this.props.position}
disabled={this.props.disabled}
styles={shortWidthTextFieldStyles}
componentRef={this.setRef}
@@ -76,17 +77,17 @@ export class AddMongoIndexComponent extends React.Component<AddMongoIndexCompone
/>
<Dropdown
ariaLabel={"Index Type " + this.props.position}
ariaLabel={t(Keys.controls.settings.mongoIndexing.indexType) + " " + this.props.position}
disabled={this.props.disabled}
styles={shortWidthDropDownStyles}
placeholder="Select an index type"
placeholder={t(Keys.controls.settings.mongoIndexing.selectIndexType)}
selectedKey={this.props.type}
options={this.indexTypes}
onChange={this.onTypeChange}
/>
<IconButton
ariaLabel={"Undo Button " + this.props.position}
ariaLabel={t(Keys.controls.settings.mongoIndexing.undoButton) + " " + this.props.position}
iconProps={{ iconName: "Undo" }}
disabled={!this.props.description && !this.props.type}
onClick={() => this.props.onDiscard()}

View File

@@ -15,6 +15,7 @@ import {
} from "@fluentui/react";
import * as React from "react";
import { MongoIndex } from "../../../../../Utils/arm/generatedClients/cosmos/types";
import { Keys, t } from "Localization";
import { CollapsibleSectionComponent } from "../../../CollapsiblePanel/CollapsibleSectionComponent";
import {
addMongoIndexStackProps,
@@ -83,11 +84,25 @@ export class MongoIndexingPolicyComponent extends React.Component<MongoIndexingP
};
private initialIndexesColumns: IColumn[] = [
{ key: "definition", name: "Definition", fieldName: "definition", minWidth: 100, maxWidth: 200, isResizable: true },
{ key: "type", name: "Type", fieldName: "type", minWidth: 100, maxWidth: 200, isResizable: true },
{
key: "definition",
name: t(Keys.controls.settings.mongoIndexing.definitionColumn),
fieldName: "definition",
minWidth: 100,
maxWidth: 200,
isResizable: true,
},
{
key: "type",
name: t(Keys.controls.settings.mongoIndexing.typeColumn),
fieldName: "type",
minWidth: 100,
maxWidth: 200,
isResizable: true,
},
{
key: "actionButton",
name: "Drop Index",
name: t(Keys.controls.settings.mongoIndexing.dropIndexColumn),
fieldName: "actionButton",
minWidth: 100,
maxWidth: 200,
@@ -96,11 +111,25 @@ export class MongoIndexingPolicyComponent extends React.Component<MongoIndexingP
];
private indexesToBeDroppedColumns: IColumn[] = [
{ key: "definition", name: "Definition", fieldName: "definition", minWidth: 100, maxWidth: 200, isResizable: true },
{ key: "type", name: "Type", fieldName: "type", minWidth: 100, maxWidth: 200, isResizable: true },
{
key: "definition",
name: t(Keys.controls.settings.mongoIndexing.definitionColumn),
fieldName: "definition",
minWidth: 100,
maxWidth: 200,
isResizable: true,
},
{
key: "type",
name: t(Keys.controls.settings.mongoIndexing.typeColumn),
fieldName: "type",
minWidth: 100,
maxWidth: 200,
isResizable: true,
},
{
key: "actionButton",
name: "Add index back",
name: t(Keys.controls.settings.mongoIndexing.addIndexBackColumn),
fieldName: "actionButton",
minWidth: 100,
maxWidth: 200,
@@ -161,7 +190,7 @@ export class MongoIndexingPolicyComponent extends React.Component<MongoIndexingP
private getActionButton = (arrayPosition: number, isCurrentIndex: boolean): JSX.Element => {
return isCurrentIndex ? (
<IconButton
ariaLabel="Delete index Button"
ariaLabel={t(Keys.controls.settings.mongoIndexing.deleteIndexButton)}
iconProps={{ iconName: "Delete" }}
disabled={isIndexTransforming(this.props.indexTransformationProgress)}
onClick={() => {
@@ -170,7 +199,7 @@ export class MongoIndexingPolicyComponent extends React.Component<MongoIndexingP
/>
) : (
<IconButton
ariaLabel="Add back Index Button"
ariaLabel={t(Keys.controls.settings.mongoIndexing.addBackIndexButton)}
iconProps={{ iconName: "Add" }}
onClick={() => {
this.props.onRevertIndexDrop(arrayPosition);
@@ -258,7 +287,10 @@ export class MongoIndexingPolicyComponent extends React.Component<MongoIndexingP
return (
<Stack {...createAndAddMongoIndexStackProps} styles={mediumWidthStackStyles}>
<CollapsibleSectionComponent title="Current index(es)" isExpandedByDefault={true}>
<CollapsibleSectionComponent
title={t(Keys.controls.settings.mongoIndexing.currentIndexes)}
isExpandedByDefault={true}
>
{
<>
<DetailsList
@@ -285,7 +317,10 @@ export class MongoIndexingPolicyComponent extends React.Component<MongoIndexingP
return (
<Stack styles={mediumWidthStackStyles}>
<CollapsibleSectionComponent title="Index(es) to be dropped" isExpandedByDefault={true}>
<CollapsibleSectionComponent
title={t(Keys.controls.settings.mongoIndexing.indexesToBeDropped)}
isExpandedByDefault={true}
>
{indexesToBeDropped.length > 0 && (
<DetailsList
styles={customDetailsListStyles}

View File

@@ -18,6 +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, t } from "Localization";
import {
CosmosSqlDataTransferDataSourceSink,
DataTransferJobGetResults,
@@ -80,7 +81,7 @@ export const PartitionKeyComponent: React.FC<PartitionKeyComponentProps> = ({
return (collection.partitionKeyProperties || []).map((property) => "/" + property).join(", ");
};
const partitionKeyName = "Partition key";
const partitionKeyName = t(Keys.controls.settings.partitionKey.partitionKey);
const partitionKeyValue = getPartitionKeyValue();
const textHeadingStyle = {
@@ -148,22 +149,28 @@ export const PartitionKeyComponent: React.FC<PartitionKeyComponentProps> = ({
const getProgressDescription = (): string => {
const processedCount = portalDataTransferJob?.properties?.processedCount;
const totalCount = portalDataTransferJob?.properties?.totalCount;
const processedCountString = totalCount > 0 ? `(${processedCount} of ${totalCount} documents processed)` : "";
const processedCountString =
totalCount > 0
? t(Keys.controls.settings.partitionKeyEditor.documentsProcessed, {
processedCount: String(processedCount),
totalCount: String(totalCount),
})
: "";
return `${portalDataTransferJob?.properties?.status} ${processedCountString}`;
};
const startPartitionkeyChangeWorkflow = () => {
useSidePanel
.getState()
.openSidePanel(
"Change partition key",
<ChangePartitionKeyPane
sourceDatabase={database}
sourceCollection={collection}
explorer={explorer}
onClose={refreshDataTransferOperations}
/>,
);
useSidePanel.getState().openSidePanel(
t(Keys.controls.settings.partitionKeyEditor.changePartitionKey, {
partitionKeyName: t(Keys.controls.settings.partitionKey.partitionKey).toLowerCase(),
}),
<ChangePartitionKeyPane
sourceDatabase={database}
sourceCollection={collection}
explorer={explorer}
onClose={refreshDataTransferOperations}
/>,
);
};
const getPercentageComplete = () => {
@@ -181,16 +188,28 @@ export const PartitionKeyComponent: React.FC<PartitionKeyComponentProps> = ({
return (
<Stack tokens={{ childrenGap: 20 }} styles={{ root: { maxWidth: 600 } }}>
<Stack tokens={{ childrenGap: 10 }}>
{!isReadOnly && <Text styles={textHeadingStyle}>Change {partitionKeyName.toLowerCase()}</Text>}
{!isReadOnly && (
<Text styles={textHeadingStyle}>
{t(Keys.controls.settings.partitionKeyEditor.changePartitionKey, {
partitionKeyName: partitionKeyName.toLowerCase(),
})}
</Text>
)}
<Stack horizontal tokens={{ childrenGap: 20 }}>
<Stack tokens={{ childrenGap: 5 }}>
<Text styles={textSubHeadingStyle}>Current {partitionKeyName.toLowerCase()}</Text>
<Text styles={textSubHeadingStyle}>Partitioning</Text>
<Text styles={textSubHeadingStyle}>
{t(Keys.controls.settings.partitionKeyEditor.currentPartitionKey, {
partitionKeyName: partitionKeyName.toLowerCase(),
})}
</Text>
<Text styles={textSubHeadingStyle}>{t(Keys.controls.settings.partitionKeyEditor.partitioning)}</Text>
</Stack>
<Stack tokens={{ childrenGap: 5 }} data-test="partition-key-values">
<Text styles={textSubHeadingStyle1}>{partitionKeyValue}</Text>
<Text styles={textSubHeadingStyle1}>
{isHierarchicalPartitionedContainer() ? "Hierarchical" : "Non-hierarchical"}
{isHierarchicalPartitionedContainer()
? t(Keys.controls.settings.partitionKeyEditor.hierarchical)
: t(Keys.controls.settings.partitionKeyEditor.nonHierarchical)}
</Text>
</Stack>
</Stack>
@@ -204,33 +223,33 @@ export const PartitionKeyComponent: React.FC<PartitionKeyComponentProps> = ({
messageBarIconProps={{ iconName: "WarningSolid", className: "messageBarWarningIcon" }}
styles={darkThemeMessageBarStyles}
>
To safeguard the integrity of the data being copied to the new container, ensure that no updates are made to
the source container for the entire duration of the partition key change process.
{t(Keys.controls.settings.partitionKeyEditor.safeguardWarning)}
<Link
href="https://learn.microsoft.com/azure/cosmos-db/container-copy#how-does-container-copy-work"
target="_blank"
underline
style={{ color: "var(--colorBrandForeground1)" }}
>
Learn more
{t(Keys.common.learnMore)}
</Link>
</MessageBar>
<Text styles={{ root: { color: "var(--colorNeutralForeground1)" } }}>
To change the partition key, a new destination container must be created or an existing destination
container selected. Data will then be copied to the destination container.
{t(Keys.controls.settings.partitionKeyEditor.changeDescription)}
</Text>
{configContext.platform !== Platform.Emulator && (
<PrimaryButton
data-test="change-partition-key-button"
styles={{ root: { width: "fit-content" } }}
text="Change"
text={t(Keys.controls.settings.partitionKeyEditor.changeButton)}
onClick={startPartitionkeyChangeWorkflow}
disabled={isCurrentJobInProgress(portalDataTransferJob)}
/>
)}
{portalDataTransferJob && (
<Stack>
<Text styles={textHeadingStyle}>{partitionKeyName} change job</Text>
<Text styles={textHeadingStyle}>
{t(Keys.controls.settings.partitionKeyEditor.changeJob, { partitionKeyName })}
</Text>
<Stack
horizontal
tokens={{ childrenGap: 20 }}
@@ -251,7 +270,10 @@ export const PartitionKeyComponent: React.FC<PartitionKeyComponentProps> = ({
}}
></ProgressIndicator>
{isCurrentJobInProgress(portalDataTransferJob) && (
<DefaultButton text="Cancel" onClick={() => cancelRunningDataTransferJob(portalDataTransferJob)} />
<DefaultButton
text={t(Keys.controls.settings.partitionKeyEditor.cancelButton)}
onClick={() => cancelRunningDataTransferJob(portalDataTransferJob)}
/>
)}
</Stack>
</Stack>

View File

@@ -1,4 +1,5 @@
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";
@@ -92,8 +93,10 @@ export class ScaleComponent extends React.Component<ScaleComponentProps> {
}
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 => {
@@ -156,14 +159,12 @@ export class ScaleComponent extends React.Component<ScaleComponentProps> {
const freeTierLimits = SharedConstants.FreeTierLimits;
return (
<Text>
With free tier, you will get the first {freeTierLimits.RU} RU/s and {freeTierLimits.Storage} GB of storage in
this account for free. To keep your account free, keep the total RU/s across all resources in the account to{" "}
{freeTierLimits.RU} RU/s.
{t(Keys.controls.settings.scale.freeTierInfo, { ru: freeTierLimits.RU, storage: freeTierLimits.Storage })}
<Link
href="https://docs.microsoft.com/en-us/azure/cosmos-db/understand-your-bill#billing-examples-with-free-tier-accounts"
target="_blank"
>
Learn more.
{t(Keys.controls.settings.scale.freeTierLearnMore)}
</Link>
</Text>
);
@@ -188,12 +189,9 @@ export class ScaleComponent extends React.Component<ScaleComponentProps> {
{/* TODO: Replace link with call to the Azure Support blade */}
{this.isAutoScaleEnabled() && (
<Stack {...titleAndInputStackProps}>
<Text>Throughput (RU/s)</Text>
<Text>{t(Keys.controls.settings.scale.throughputRuS)}</Text>
<TextField disabled styles={getTextFieldStyles(undefined, undefined)} />
<Text>
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.
</Text>
<Text>{t(Keys.controls.settings.scale.autoScaleCustomSettings)}</Text>
</Stack>
)}
</Stack>

View File

@@ -12,6 +12,7 @@ import {
} from "@fluentui/react";
import * as React from "react";
import * as ViewModels from "../../../../Contracts/ViewModels";
import { Keys, t } from "Localization";
import { userContext } from "../../../../UserContext";
import { Int32 } from "../../../Panes/Tables/Validators/EntityPropertyValidationCommon";
import {
@@ -85,9 +86,12 @@ export class SubSettingsComponent extends React.Component<SubSettingsComponentPr
constructor(props: SubSettingsComponentProps) {
super(props);
this.geospatialVisible = userContext.apiType === "SQL";
this.partitionKeyName = userContext.apiType === "Mongo" ? "Shard key" : "Partition key";
this.partitionKeyName =
userContext.apiType === "Mongo"
? t(Keys.controls.settings.partitionKey.shardKey)
: t(Keys.controls.settings.partitionKey.partitionKey);
this.partitionKeyValue = this.getPartitionKeyValue();
this.uniqueKeyName = "Unique keys";
this.uniqueKeyName = t(Keys.controls.settings.subSettings.uniqueKeys);
this.uniqueKeyValue = this.getUniqueKeyValue();
}
@@ -143,9 +147,13 @@ export class SubSettingsComponent extends React.Component<SubSettingsComponentPr
};
private ttlChoiceGroupOptions: IChoiceGroupOption[] = [
{ key: TtlType.Off, text: "Off", ariaLabel: "ttl-off-option" },
{ key: TtlType.OnNoDefault, text: "On (no default)", ariaLabel: "ttl-on-no-default-option" },
{ key: TtlType.On, text: "On", ariaLabel: "ttl-on-option" },
{ key: TtlType.Off, text: t(Keys.controls.settings.subSettings.ttlOff), ariaLabel: "ttl-off-option" },
{
key: TtlType.OnNoDefault,
text: t(Keys.controls.settings.subSettings.ttlOnNoDefault),
ariaLabel: "ttl-on-no-default-option",
},
{ key: TtlType.On, text: t(Keys.controls.settings.subSettings.ttlOn), ariaLabel: "ttl-on-option" },
];
public getTtlValue = (value: string): TtlType => {
@@ -216,13 +224,13 @@ export class SubSettingsComponent extends React.Component<SubSettingsComponentPr
}}
>
<Text style={{ color: "var(--colorNeutralForeground1)" }}>
To enable time-to-live (TTL) for your collection/documents,{" "}
{t(Keys.controls.settings.subSettings.mongoTtlMessage)}{" "}
<Link
href="https://docs.microsoft.com/en-us/azure/cosmos-db/mongodb-time-to-live"
target="_blank"
style={{ color: "var(--colorBrandForeground1)" }}
>
create a TTL index
{t(Keys.controls.settings.subSettings.mongoTtlLinkText)}
</Link>
.
</Text>
@@ -231,7 +239,7 @@ export class SubSettingsComponent extends React.Component<SubSettingsComponentPr
<Stack {...titleAndInputStackProps}>
<ChoiceGroup
id="timeToLive"
label="Time to Live"
label={t(Keys.controls.settings.subSettings.timeToLive)}
selectedKey={this.props.timeToLive}
options={this.ttlChoiceGroupOptions}
onChange={this.onTtlChange}
@@ -255,8 +263,8 @@ export class SubSettingsComponent extends React.Component<SubSettingsComponentPr
max={Int32.Max}
value={this.props.displayedTtlSeconds}
onChange={this.onTimeToLiveSecondsChange}
suffix="second(s)"
ariaLabel={`Time to live in seconds`}
suffix={t(Keys.controls.settings.subSettings.seconds)}
ariaLabel={t(Keys.controls.settings.subSettings.timeToLiveInSeconds)}
data-test="ttl-input"
/>
)}
@@ -264,16 +272,16 @@ export class SubSettingsComponent extends React.Component<SubSettingsComponentPr
);
private analyticalTtlChoiceGroupOptions: IChoiceGroupOption[] = [
{ key: TtlType.Off, text: "Off", disabled: true },
{ key: TtlType.OnNoDefault, text: "On (no default)" },
{ key: TtlType.On, text: "On" },
{ key: TtlType.Off, text: t(Keys.controls.settings.subSettings.ttlOff), disabled: true },
{ key: TtlType.OnNoDefault, text: t(Keys.controls.settings.subSettings.ttlOnNoDefault) },
{ key: TtlType.On, text: t(Keys.controls.settings.subSettings.ttlOn) },
];
private getAnalyticalStorageTtlComponent = (): JSX.Element => (
<Stack {...titleAndInputStackProps}>
<ChoiceGroup
id="analyticalStorageTimeToLive"
label="Analytical Storage Time to Live"
label={t(Keys.controls.settings.subSettings.analyticalStorageTtl)}
selectedKey={this.props.analyticalStorageTtlSelection}
options={this.analyticalTtlChoiceGroupOptions}
onChange={this.onAnalyticalStorageTtlSelectionChange}
@@ -294,7 +302,7 @@ export class SubSettingsComponent extends React.Component<SubSettingsComponentPr
min={1}
max={Int32.Max}
value={this.props.analyticalStorageTtlSeconds?.toString()}
suffix="second(s)"
suffix={t(Keys.controls.settings.subSettings.seconds)}
onChange={this.onAnalyticalStorageTtlSecondsChange}
/>
)}
@@ -302,14 +310,22 @@ export class SubSettingsComponent extends React.Component<SubSettingsComponentPr
);
private geoSpatialConfigTypeChoiceGroupOptions: IChoiceGroupOption[] = [
{ key: GeospatialConfigType.Geography, text: "Geography", ariaLabel: "geography-option" },
{ key: GeospatialConfigType.Geometry, text: "Geometry", ariaLabel: "geometry-option" },
{
key: GeospatialConfigType.Geography,
text: t(Keys.controls.settings.subSettings.geography),
ariaLabel: "geography-option",
},
{
key: GeospatialConfigType.Geometry,
text: t(Keys.controls.settings.subSettings.geometry),
ariaLabel: "geometry-option",
},
];
private getGeoSpatialComponent = (): JSX.Element => (
<ChoiceGroup
id="geoSpatialConfig"
label="Geospatial Configuration"
label={t(Keys.controls.settings.subSettings.geospatialConfiguration)}
selectedKey={this.props.geospatialConfigType}
options={this.geoSpatialConfigTypeChoiceGroupOptions}
onChange={this.onGeoSpatialConfigTypeChange}
@@ -318,8 +334,8 @@ export class SubSettingsComponent extends React.Component<SubSettingsComponentPr
);
private changeFeedChoiceGroupOptions: IChoiceGroupOption[] = [
{ key: ChangeFeedPolicyState.Off, text: "Off" },
{ key: ChangeFeedPolicyState.On, text: "On" },
{ key: ChangeFeedPolicyState.Off, text: t(Keys.controls.settings.subSettings.ttlOff) },
{ key: ChangeFeedPolicyState.On, text: t(Keys.controls.settings.subSettings.ttlOn) },
];
private getChangeFeedComponent = (): JSX.Element => {
@@ -328,7 +344,10 @@ export class SubSettingsComponent extends React.Component<SubSettingsComponentPr
return (
<Stack>
<Label id={labelId}>
<ToolTipLabelComponent label="Change feed log retention policy" toolTipElement={changeFeedPolicyToolTip} />
<ToolTipLabelComponent
label={t(Keys.controls.settings.changeFeed.label)}
toolTipElement={changeFeedPolicyToolTip}
/>
</Label>
<ChoiceGroup
id="changeFeedPolicy"
@@ -354,9 +373,10 @@ export class SubSettingsComponent extends React.Component<SubSettingsComponentPr
<Stack {...titleAndInputStackProps}>
{this.getPartitionKeyVisible() && (
<TooltipHost
content={`This ${this.partitionKeyName.toLowerCase()} is used to distribute data across multiple partitions for scalability. The value "${
this.partitionKeyValue
}" determines how documents are partitioned.`}
content={t(Keys.controls.settings.subSettings.partitionKeyTooltipTemplate, {
partitionKeyName: this.partitionKeyName.toLowerCase(),
partitionKeyValue: this.partitionKeyValue,
})}
styles={{
root: {
display: "block",
@@ -373,14 +393,20 @@ export class SubSettingsComponent extends React.Component<SubSettingsComponentPr
)}
{userContext.apiType === "SQL" && this.isLargePartitionKeyEnabled() && (
<Text className={classNames.hintText}>Large {this.partitionKeyName.toLowerCase()} has been enabled.</Text>
<Text className={classNames.hintText}>
{t(Keys.controls.settings.subSettings.largePartitionKeyEnabled, {
partitionKeyName: this.partitionKeyName.toLowerCase(),
})}
</Text>
)}
{userContext.apiType === "SQL" &&
(this.isHierarchicalPartitionedContainer() ? (
<Text className={classNames.hintText}>Hierarchically partitioned container.</Text>
<Text className={classNames.hintText}>{t(Keys.controls.settings.subSettings.hierarchicalPartitioned)}</Text>
) : (
<Text className={classNames.hintText}>Non-hierarchically partitioned container.</Text>
<Text className={classNames.hintText}>
{t(Keys.controls.settings.subSettings.nonHierarchicalPartitioned)}
</Text>
))}
</Stack>
);

View File

@@ -1,5 +1,6 @@
import { Label, Slider, Stack, TextField, Toggle } from "@fluentui/react";
import { ThroughputBucket } from "Contracts/DataModels";
import { Keys, t } from "Localization";
import React, { FC, useEffect, useState } from "react";
import { isDirty } from "../../SettingsUtils";
@@ -65,7 +66,9 @@ export const ThroughputBucketsComponent: FC<ThroughputBucketsComponentProps> = (
return (
<Stack tokens={{ childrenGap: "m" }} styles={{ root: { width: "70%", maxWidth: 700 } }}>
<Label styles={{ root: { color: "var(--colorNeutralForeground1)" } }}>Throughput Buckets</Label>
<Label styles={{ root: { color: "var(--colorNeutralForeground1)" } }}>
{t(Keys.controls.settings.throughputBuckets.label)}
</Label>
<Stack>
{throughputBuckets?.map((bucket) => (
<Stack key={bucket.id} horizontal tokens={{ childrenGap: 8 }} verticalAlign="center">
@@ -76,7 +79,9 @@ export const ThroughputBucketsComponent: FC<ThroughputBucketsComponentProps> = (
value={bucket.maxThroughputPercentage}
onChange={(newValue) => handleBucketChange(bucket.id, newValue)}
showValue={false}
label={`Bucket ${bucket.id}${bucket.id === 1 ? " (Data Explorer Query Bucket)" : ""}`}
label={`${t(Keys.controls.settings.throughputBuckets.bucketLabel, { id: String(bucket.id) })}${
bucket.id === 1 ? t(Keys.controls.settings.throughputBuckets.dataExplorerQueryBucket) : ""
}`}
styles={{
root: { flex: 2, maxWidth: 400 },
titleLabel: {
@@ -99,8 +104,8 @@ export const ThroughputBucketsComponent: FC<ThroughputBucketsComponentProps> = (
disabled={bucket.maxThroughputPercentage === 100}
/>
<Toggle
onText="Active"
offText="Inactive"
onText={t(Keys.controls.settings.throughputBuckets.active)}
offText={t(Keys.controls.settings.throughputBuckets.inactive)}
checked={bucket.maxThroughputPercentage !== 100}
onChange={(event, checked) => onToggle(bucket.id, checked)}
styles={{

View File

@@ -16,6 +16,7 @@ import {
Text,
TextField,
} from "@fluentui/react";
import { Keys, t } from "Localization";
import React from "react";
import * as DataModels from "../../../../../Contracts/DataModels";
import * as SharedConstants from "../../../../../Shared/Constants";
@@ -97,8 +98,8 @@ export class ThroughputInputAutoPilotV3Component extends React.Component<
private throughputInputMaxValue: number;
private autoPilotInputMaxValue: number;
private options: IChoiceGroupOption[] = [
{ key: "true", text: "Autoscale" },
{ key: "false", text: "Manual" },
{ key: "true", text: t(Keys.controls.settings.throughputInput.autoscale) },
{ key: "false", text: t(Keys.controls.settings.throughputInput.manual) },
];
// Style constants for theme-aware colors and layout
@@ -244,7 +245,7 @@ export class ThroughputInputAutoPilotV3Component extends React.Component<
return (
<div>
<Text style={{ fontWeight: 600, color: ThroughputInputAutoPilotV3Component.TEXT_COLOR_PRIMARY }}>
Updated cost per month
{t(Keys.controls.settings.costEstimate.updatedCostPerMonth)}
</Text>
<Stack horizontal style={{ marginTop: 5, marginBottom: 10 }}>
<Text
@@ -253,7 +254,8 @@ export class ThroughputInputAutoPilotV3Component extends React.Component<
color: ThroughputInputAutoPilotV3Component.TEXT_COLOR_PRIMARY,
}}
>
{newPrices.currencySign} {calculateEstimateNumber(newPrices.monthlyPrice / 10)} min
{newPrices.currencySign} {calculateEstimateNumber(newPrices.monthlyPrice / 10)}{" "}
{t(Keys.controls.settings.throughputInput.min)}
</Text>
<Text
style={{
@@ -261,7 +263,8 @@ export class ThroughputInputAutoPilotV3Component extends React.Component<
color: ThroughputInputAutoPilotV3Component.TEXT_COLOR_PRIMARY,
}}
>
{newPrices.currencySign} {calculateEstimateNumber(newPrices.monthlyPrice)} max
{newPrices.currencySign} {calculateEstimateNumber(newPrices.monthlyPrice)}{" "}
{t(Keys.controls.settings.throughputInput.max)}
</Text>
</Stack>
</div>
@@ -274,7 +277,7 @@ export class ThroughputInputAutoPilotV3Component extends React.Component<
<Stack {...checkBoxAndInputStackProps} style={{ marginTop: 15 }}>
{newThroughput && newThroughputCostElement()}
<Text style={{ fontWeight: 600, color: ThroughputInputAutoPilotV3Component.TEXT_COLOR_PRIMARY }}>
Current cost per month
{t(Keys.controls.settings.costEstimate.currentCostPerMonth)}
</Text>
<Stack horizontal style={{ marginTop: 5, color: ThroughputInputAutoPilotV3Component.TEXT_COLOR_PRIMARY }}>
<Text
@@ -283,7 +286,8 @@ export class ThroughputInputAutoPilotV3Component extends React.Component<
color: ThroughputInputAutoPilotV3Component.TEXT_COLOR_PRIMARY,
}}
>
{prices.currencySign} {calculateEstimateNumber(prices.monthlyPrice / 10)} min
{prices.currencySign} {calculateEstimateNumber(prices.monthlyPrice / 10)}{" "}
{t(Keys.controls.settings.throughputInput.min)}
</Text>
<Text
style={{
@@ -291,7 +295,8 @@ export class ThroughputInputAutoPilotV3Component extends React.Component<
color: ThroughputInputAutoPilotV3Component.TEXT_COLOR_PRIMARY,
}}
>
{prices.currencySign} {calculateEstimateNumber(prices.monthlyPrice)} max
{prices.currencySign} {calculateEstimateNumber(prices.monthlyPrice)}{" "}
{t(Keys.controls.settings.throughputInput.max)}
</Text>
</Stack>
</Stack>
@@ -326,17 +331,20 @@ export class ThroughputInputAutoPilotV3Component extends React.Component<
return (
<div>
<Text style={{ fontWeight: 600, color: ThroughputInputAutoPilotV3Component.TEXT_COLOR_PRIMARY }}>
Updated cost per month
{t(Keys.controls.settings.costEstimate.updatedCostPerMonth)}
</Text>
<Stack horizontal style={{ marginTop: 5, marginBottom: 10 }}>
<Text style={this.settingsAndScaleStyle.root}>
{newPrices.currencySign} {calculateEstimateNumber(newPrices.hourlyPrice)}/hr
{newPrices.currencySign} {calculateEstimateNumber(newPrices.hourlyPrice)}
{t(Keys.controls.settings.costEstimate.perHour)}
</Text>
<Text style={this.settingsAndScaleStyle.root}>
{newPrices.currencySign} {calculateEstimateNumber(newPrices.dailyPrice)}/day
{newPrices.currencySign} {calculateEstimateNumber(newPrices.dailyPrice)}
{t(Keys.controls.settings.costEstimate.perDay)}
</Text>
<Text style={this.settingsAndScaleStyle.root}>
{newPrices.currencySign} {calculateEstimateNumber(newPrices.monthlyPrice)}/mo
{newPrices.currencySign} {calculateEstimateNumber(newPrices.monthlyPrice)}
{t(Keys.controls.settings.costEstimate.perMonth)}
</Text>
</Stack>
</div>
@@ -349,17 +357,20 @@ export class ThroughputInputAutoPilotV3Component extends React.Component<
<Stack {...checkBoxAndInputStackProps} style={{ marginTop: 15 }}>
{newThroughput && newThroughputCostElement()}
<Text style={{ fontWeight: 600, color: ThroughputInputAutoPilotV3Component.TEXT_COLOR_PRIMARY }}>
Current cost per month
{t(Keys.controls.settings.costEstimate.currentCostPerMonth)}
</Text>
<Stack horizontal style={{ marginTop: 5 }}>
<Text style={this.settingsAndScaleStyle.root}>
{prices.currencySign} {calculateEstimateNumber(prices.hourlyPrice)}/hr
{prices.currencySign} {calculateEstimateNumber(prices.hourlyPrice)}
{t(Keys.controls.settings.costEstimate.perHour)}
</Text>
<Text style={this.settingsAndScaleStyle.root}>
{prices.currencySign} {calculateEstimateNumber(prices.dailyPrice)}/day
{prices.currencySign} {calculateEstimateNumber(prices.dailyPrice)}
{t(Keys.controls.settings.costEstimate.perDay)}
</Text>
<Text style={this.settingsAndScaleStyle.root}>
{prices.currencySign} {calculateEstimateNumber(prices.monthlyPrice)}/mo
{prices.currencySign} {calculateEstimateNumber(prices.monthlyPrice)}
{t(Keys.controls.settings.costEstimate.perMonth)}
</Text>
</Stack>
</Stack>
@@ -444,10 +455,14 @@ export class ThroughputInputAutoPilotV3Component extends React.Component<
this.setState({ spendAckChecked: checked });
private getStorageCapacityTitle = (): JSX.Element => {
const capacity: string = this.props.isFixed ? "Fixed" : "Unlimited";
const capacity: string = this.props.isFixed
? t(Keys.controls.settings.throughputInput.fixed)
: t(Keys.controls.settings.throughputInput.unlimited);
return (
<Stack {...titleAndInputStackProps}>
<Label style={{ color: "var(--colorNeutralForeground1)" }}>Storage capacity</Label>
<Label style={{ color: "var(--colorNeutralForeground1)" }}>
{t(Keys.controls.settings.throughputInput.storageCapacity)}
</Label>
<Text style={{ color: "var(--colorNeutralForeground1)" }}>{capacity}</Text>
</Stack>
);
@@ -543,9 +558,6 @@ export class ThroughputInputAutoPilotV3Component extends React.Component<
<span style={{ float: "left", transform: "translateX(-50%)" }}>
{this.props.instantMaximumThroughput.toLocaleString(ThroughputInputAutoPilotV3Component.LOCALE_EN_US)}
</span>
<span style={{ float: "right" }}>
{this.props.softAllowedMaximumThroughput.toLocaleString(ThroughputInputAutoPilotV3Component.LOCALE_EN_US)}
</span>
<span style={{ float: "right" }} data-test="soft-allowed-maximum-throughput">
{this.props.softAllowedMaximumThroughput.toLocaleString(ThroughputInputAutoPilotV3Component.LOCALE_EN_US)}
</span>
@@ -558,10 +570,14 @@ export class ThroughputInputAutoPilotV3Component extends React.Component<
/>
<Stack horizontal>
<Stack.Item style={{ width: "34%", paddingRight: "5px" }}>
<Separator styles={this.thoughputRangeSeparatorStyles}>Instant</Separator>
<Separator styles={this.thoughputRangeSeparatorStyles}>
{t(Keys.controls.settings.throughputInput.instant)}
</Separator>
</Stack.Item>
<Stack.Item style={{ width: "66%", paddingLeft: "5px" }}>
<Separator styles={this.thoughputRangeSeparatorStyles}>4-6 hrs</Separator>
<Separator styles={this.thoughputRangeSeparatorStyles}>
{t(Keys.controls.settings.throughputInput.fourToSixHrs)}
</Separator>
</Stack.Item>
</Stack>
</Stack>
@@ -641,7 +657,7 @@ export class ThroughputInputAutoPilotV3Component extends React.Component<
variant="small"
style={{ lineHeight: "20px", fontWeight: 600, color: "var(--colorNeutralForeground1)" }}
>
Minimum RU/s
{t(Keys.controls.settings.throughputInput.minimumRuS)}
</Text>
<FontIcon iconName="Info" style={{ fontSize: 12, color: "var(--colorNeutralForeground2)" }} />
</Stack>
@@ -675,7 +691,7 @@ export class ThroughputInputAutoPilotV3Component extends React.Component<
color: "var(--colorNeutralForeground1)",
}}
>
x 10 =
{t(Keys.controls.settings.throughputInput.x10Equals)}
</Text>
{/* Column 3: Maximum RU/s */}
@@ -685,7 +701,7 @@ export class ThroughputInputAutoPilotV3Component extends React.Component<
variant="small"
style={{ lineHeight: "20px", fontWeight: 600, color: "var(--colorNeutralForeground1)" }}
>
Maximum RU/s
{t(Keys.controls.settings.throughputInput.maximumRuS)}
</Text>
<FontIcon iconName="Info" style={{ fontSize: 12, color: "var(--colorNeutralForeground2)" }} />
</Stack>
@@ -726,7 +742,9 @@ export class ThroughputInputAutoPilotV3Component extends React.Component<
onGetErrorMessage={(value: string) => {
const sanitizedValue = getSanitizedInputValue(value);
const errorMessage: string =
sanitizedValue % 1000 ? "Throughput value must be in increments of 1000" : this.props.throughputError;
sanitizedValue % 1000
? t(Keys.controls.settings.throughput.throughputIncrementError)
: this.props.throughputError;
return <span data-test="autopilot-throughput-input-error">{errorMessage}</span>;
}}
validateOnLoad={false}
@@ -772,7 +790,9 @@ export class ThroughputInputAutoPilotV3Component extends React.Component<
)}
{this.props.isAutoPilotSelected ? (
<Text style={{ marginTop: "40px", color: "var(--colorNeutralForeground1)" }}>
Based on usage, your {this.props.collectionName ? "container" : "database"} throughput will scale from{" "}
{t(Keys.controls.settings.throughputInput.autoscaleDescription, {
resourceType: this.props.collectionName ? "container" : "database",
})}{" "}
<b>
{AutoPilotUtils.getMinRUsBasedOnUserInput(this.props.maxAutoPilotThroughput)} RU/s (10% of max RU/s) -{" "}
{this.props.maxAutoPilotThroughput} RU/s
@@ -787,16 +807,19 @@ export class ThroughputInputAutoPilotV3Component extends React.Component<
styles={this.darkThemeMessageBarStyles}
style={{ marginTop: "40px" }}
>
{`Billing will apply if you provision more than ${SharedConstants.FreeTierLimits.RU} RU/s of manual throughput, or if the resource scales beyond ${SharedConstants.FreeTierLimits.RU} RU/s with autoscale.`}
{t(Keys.controls.settings.throughputInput.freeTierWarning, {
ru: String(SharedConstants.FreeTierLimits.RU),
})}
</MessageBar>
)}
</>
)}
{!this.overrideWithProvisionedThroughputSettings() && (
<Text style={{ color: "var(--colorNeutralForeground1)" }}>
Estimate your required RU/s with
{t(Keys.controls.settings.throughputInput.capacityCalculator)}
<Link target="_blank" href="https://cosmos.azure.com/capacitycalculator/">
{` capacity calculator`} <FontIcon iconName="NavigateExternalInline" />
{t(Keys.controls.settings.throughputInput.capacityCalculatorLink)}{" "}
<FontIcon iconName="NavigateExternalInline" />
</Link>
</Text>
)}
@@ -809,9 +832,7 @@ export class ThroughputInputAutoPilotV3Component extends React.Component<
onChange={this.onSpendAckChecked}
/>
)}
{this.props.isFixed && (
<p>When using a collection with fixed storage capacity, you can set up to 10,000 RU/s.</p>
)}
{this.props.isFixed && <p>{t(Keys.controls.settings.throughputInput.fixedStorageNote)}</p>}
{this.props.collectionName && (
<Stack.Item style={{ marginTop: "40px" }}>{this.getStorageCapacityTitle()}</Stack.Item>
)}

View File

@@ -426,15 +426,6 @@ exports[`ThroughputInputAutoPilotV3Component autopilot input visible 1`] = `
>
5,000
</span>
<span
style={
{
"float": "right",
}
}
>
1,000,000
</span>
<span
data-test="soft-allowed-maximum-throughput"
style={
@@ -561,9 +552,7 @@ exports[`ThroughputInputAutoPilotV3Component autopilot input visible 1`] = `
}
}
>
You are not able to lower throughput below your current minimum of
10000
RU/s. For more information on this limit, please refer to our service quote documentation.
You are not able to lower throughput below your current minimum of 10000 RU/s. For more information on this limit, please refer to our service quote documentation.
<StyledLinkBase
href="https://learn.microsoft.com/en-us/azure/cosmos-db/concepts-limits#minimum-throughput-limits"
target="_blank"
@@ -581,9 +570,7 @@ exports[`ThroughputInputAutoPilotV3Component autopilot input visible 1`] = `
}
}
>
Based on usage, your
container
throughput will scale from
Based on usage, your container throughput will scale from
<b>
400
@@ -692,7 +679,8 @@ exports[`ThroughputInputAutoPilotV3Component autopilot input visible 1`] = `
$
35.04
min
min
</Text>
<Text
style={
@@ -705,7 +693,8 @@ exports[`ThroughputInputAutoPilotV3Component autopilot input visible 1`] = `
$
350.40
max
max
</Text>
</Stack>
</div>
@@ -739,7 +728,8 @@ exports[`ThroughputInputAutoPilotV3Component autopilot input visible 1`] = `
$
35.04
min
min
</Text>
<Text
style={
@@ -752,7 +742,8 @@ exports[`ThroughputInputAutoPilotV3Component autopilot input visible 1`] = `
$
350.40
max
max
</Text>
</Stack>
</Stack>
@@ -1034,15 +1025,6 @@ exports[`ThroughputInputAutoPilotV3Component spendAck checkbox visible 1`] = `
>
5,000
</span>
<span
style={
{
"float": "right",
}
}
>
1,000,000
</span>
<span
data-test="soft-allowed-maximum-throughput"
style={
@@ -1169,9 +1151,7 @@ exports[`ThroughputInputAutoPilotV3Component spendAck checkbox visible 1`] = `
}
}
>
You are not able to lower throughput below your current minimum of
10000
RU/s. For more information on this limit, please refer to our service quote documentation.
You are not able to lower throughput below your current minimum of 10000 RU/s. For more information on this limit, please refer to our service quote documentation.
<StyledLinkBase
href="https://learn.microsoft.com/en-us/azure/cosmos-db/concepts-limits#minimum-throughput-limits"
target="_blank"
@@ -1620,15 +1600,6 @@ exports[`ThroughputInputAutoPilotV3Component throughput input visible 1`] = `
>
5,000
</span>
<span
style={
{
"float": "right",
}
}
>
1,000,000
</span>
<span
data-test="soft-allowed-maximum-throughput"
style={
@@ -1755,9 +1726,7 @@ exports[`ThroughputInputAutoPilotV3Component throughput input visible 1`] = `
}
}
>
You are not able to lower throughput below your current minimum of
10000
RU/s. For more information on this limit, please refer to our service quote documentation.
You are not able to lower throughput below your current minimum of 10000 RU/s. For more information on this limit, please refer to our service quote documentation.
<StyledLinkBase
href="https://learn.microsoft.com/en-us/azure/cosmos-db/concepts-limits#minimum-throughput-limits"
target="_blank"

View File

@@ -27,7 +27,8 @@ exports[`ComputedPropertiesComponent renders 1`] = `
iconName="NavigateExternalInline"
/>
</StyledLinkBase>
  about how to define computed properties and how to use them.
 
about how to define computed properties and how to use them.
</Text>
<div
className="settingsV2Editor"

View File

@@ -33,8 +33,7 @@ exports[`PartitionKeyComponent renders default component and matches snapshot 1`
}
}
>
Change
partition key
Change partition key
</Text>
<Stack
horizontal={true}
@@ -61,8 +60,7 @@ exports[`PartitionKeyComponent renders default component and matches snapshot 1`
}
}
>
Current
partition key
Current partition key
</Text>
<Text
styles={
@@ -223,8 +221,7 @@ exports[`PartitionKeyComponent renders read-only component and matches snapshot
}
}
>
Current
partition key
Current partition key
</Text>
<Text
styles={

View File

@@ -410,9 +410,7 @@ exports[`SubSettingsComponent analyticalTimeToLive hidden 1`] = `
<Text
className="hintText-115"
>
Large
partition key
has been enabled.
Large partition key has been enabled.
</Text>
<Text
className="hintText-115"
@@ -984,9 +982,7 @@ exports[`SubSettingsComponent analyticalTimeToLiveSeconds hidden 1`] = `
<Text
className="hintText-115"
>
Large
partition key
has been enabled.
Large partition key has been enabled.
</Text>
<Text
className="hintText-115"
@@ -1522,9 +1518,7 @@ exports[`SubSettingsComponent changeFeedPolicy hidden 1`] = `
<Text
className="hintText-115"
>
Large
partition key
has been enabled.
Large partition key has been enabled.
</Text>
<Text
className="hintText-115"
@@ -2157,9 +2151,7 @@ exports[`SubSettingsComponent renders 1`] = `
<Text
className="hintText-115"
>
Large
partition key
has been enabled.
Large partition key has been enabled.
</Text>
<Text
className="hintText-115"
@@ -2729,9 +2721,7 @@ exports[`SubSettingsComponent timeToLiveSeconds hidden 1`] = `
<Text
className="hintText-115"
>
Large
partition key
has been enabled.
Large partition key has been enabled.
</Text>
<Text
className="hintText-115"

View File

@@ -1,6 +1,7 @@
import * as Constants from "../../../Common/Constants";
import * as DataModels from "../../../Contracts/DataModels";
import * as ViewModels from "../../../Contracts/ViewModels";
import { Keys, t } from "Localization";
import { isFabricNative } from "../../../Platform/Fabric/FabricUtil";
import { userContext } from "../../../UserContext";
import { isCapabilityEnabled } from "../../../Utils/CapabilityUtils";
@@ -175,25 +176,27 @@ const getStringValue = (value: isDirtyTypes, type: string): string => {
export const getTabTitle = (tab: SettingsV2TabTypes): string => {
switch (tab) {
case SettingsV2TabTypes.ScaleTab:
return "Scale";
return t(Keys.controls.settings.tabTitles.scale);
case SettingsV2TabTypes.ConflictResolutionTab:
return "Conflict Resolution";
return t(Keys.controls.settings.tabTitles.conflictResolution);
case SettingsV2TabTypes.SubSettingsTab:
return "Settings";
return t(Keys.controls.settings.tabTitles.settings);
case SettingsV2TabTypes.IndexingPolicyTab:
return "Indexing Policy";
return t(Keys.controls.settings.tabTitles.indexingPolicy);
case SettingsV2TabTypes.PartitionKeyTab:
return isFabricNative() ? "Partition Keys" : "Partition Keys (preview)";
return isFabricNative()
? t(Keys.controls.settings.tabTitles.partitionKeys)
: t(Keys.controls.settings.tabTitles.partitionKeysPreview);
case SettingsV2TabTypes.ComputedPropertiesTab:
return "Computed Properties";
return t(Keys.controls.settings.tabTitles.computedProperties);
case SettingsV2TabTypes.ContainerVectorPolicyTab:
return "Container Policies";
return t(Keys.controls.settings.tabTitles.containerPolicies);
case SettingsV2TabTypes.ThroughputBucketsTab:
return "Throughput Buckets";
return t(Keys.controls.settings.tabTitles.throughputBuckets);
case SettingsV2TabTypes.GlobalSecondaryIndexTab:
return "Global Secondary Index (Preview)";
return t(Keys.controls.settings.tabTitles.globalSecondaryIndexPreview);
case SettingsV2TabTypes.DataMaskingTab:
return "Masking Policy (preview)";
return t(Keys.controls.settings.tabTitles.maskingPolicyPreview);
default:
throw new Error(`Unknown tab ${tab}`);
}
@@ -203,19 +206,19 @@ export const getMongoNotification = (description: string, type: MongoIndexTypes)
if (description && !type) {
return {
type: MongoNotificationType.Warning,
message: "Please select a type for each index.",
message: t(Keys.controls.settings.mongoNotifications.selectTypeWarning),
};
}
if (type && (!description || description.trim().length === 0)) {
return {
type: MongoNotificationType.Error,
message: "Please enter a field name.",
message: t(Keys.controls.settings.mongoNotifications.enterFieldNameError),
};
} else if (type === MongoIndexTypes.Wildcard && description?.indexOf("$**") === -1) {
return {
type: MongoNotificationType.Error,
message: "Wildcard path is not present in the field name. Use a pattern like " + MongoWildcardPlaceHolder,
message: t(Keys.controls.settings.mongoNotifications.wildcardPathError) + MongoWildcardPlaceHolder,
};
}
@@ -249,28 +252,29 @@ export const isIndexTransforming = (indexTransformationProgress: number): boolea
indexTransformationProgress !== undefined && indexTransformationProgress !== 100;
export const getPartitionKeyName = (apiType: string, isLowerCase?: boolean): string => {
const partitionKeyName = apiType === "Mongo" ? "Shard key" : "Partition key";
const partitionKeyName =
apiType === "Mongo"
? t(Keys.controls.settings.partitionKey.shardKey)
: t(Keys.controls.settings.partitionKey.partitionKey);
return isLowerCase ? partitionKeyName.toLocaleLowerCase() : partitionKeyName;
};
export const getPartitionKeyTooltipText = (apiType: string): string => {
if (apiType === "Mongo") {
return "The shard key (field) is used to split your data across many replica sets (shards) to achieve unlimited scalability. Its critical to choose a field that will evenly distribute your data.";
return t(Keys.controls.settings.partitionKey.shardKeyTooltip);
}
let tooltipText = `The ${getPartitionKeyName(
apiType,
true,
)} is used to automatically distribute data across partitions for scalability. Choose a property in your JSON document that has a wide range of values and evenly distributes request volume.`;
let tooltipText = `The ${getPartitionKeyName(apiType, true)} ${t(
Keys.controls.settings.partitionKey.partitionKeyTooltip,
)}`;
if (apiType === "SQL") {
tooltipText += " For small read-heavy workloads or write-heavy workloads of any size, id is often a good choice.";
tooltipText += t(Keys.controls.settings.partitionKey.sqlPartitionKeyTooltipSuffix);
}
return tooltipText;
};
export const getPartitionKeySubtext = (partitionKeyDefault: boolean, apiType: string): string => {
if (partitionKeyDefault && (apiType === "SQL" || apiType === "Mongo")) {
const subtext = "For small workloads, the item ID is a suitable choice for the partition key.";
return subtext;
return t(Keys.controls.settings.partitionKey.partitionKeySubtext);
}
return "";
};
@@ -278,18 +282,18 @@ export const getPartitionKeySubtext = (partitionKeyDefault: boolean, apiType: st
export const getPartitionKeyPlaceHolder = (apiType: string, index?: number): string => {
switch (apiType) {
case "Mongo":
return "e.g., categoryId";
return t(Keys.controls.settings.partitionKey.mongoPlaceholder);
case "Gremlin":
return "e.g., /address";
return t(Keys.controls.settings.partitionKey.gremlinPlaceholder);
case "SQL":
return `${
index === undefined
? "Required - first partition key e.g., /TenantId"
? t(Keys.controls.settings.partitionKey.sqlFirstPartitionKey)
: index === 0
? "second partition key e.g., /UserId"
: "third partition key e.g., /SessionId"
? t(Keys.controls.settings.partitionKey.sqlSecondPartitionKey)
: t(Keys.controls.settings.partitionKey.sqlThirdPartitionKey)
}`;
default:
return "e.g., /address/zipCode";
return t(Keys.controls.settings.partitionKey.defaultPlaceholder);
}
};

View File

@@ -127,9 +127,13 @@ exports[`SettingsUtils functions render 1`] = `
>
The request to increase the throughput has successfully been submitted. This operation will take 1-3 business days to complete. View the latest status in Notifications.
<br />
Database:
Database:
sampleDb
, Container:
,
Container:
sampleCollection
, Current manual throughput: 1000 RU/s, Target manual throughput: 2000
@@ -309,7 +313,7 @@ exports[`SettingsUtils functions render 1`] = `
}
}
>
You can make more indexing changes once the current index transformation has completed. It is 90% complete.
You can make more indexing changes once the current index transformation has completed. It is 90% complete.
<StyledLinkBase
onClick={[Function]}
>

View File

@@ -113,7 +113,7 @@ export class ContainerSampleGenerator {
? await createMongoDocument(collection.databaseId, collection, shardKey, doc)
: await createDocument(collection, doc);
} catch (error) {
NotificationConsoleUtils.logConsoleError(error);
NotificationConsoleUtils.logConsoleError(error instanceof Error ? error.message : String(error));
}
}),
);

View File

@@ -329,7 +329,10 @@ export class NotificationConsoleComponent extends React.Component<
}
private static extractHeaderStatus(consoleData: ConsoleData) {
return consoleData?.message.split(":\n")[0];
if (!consoleData?.message || typeof consoleData.message !== "string") {
return undefined;
}
return consoleData.message.split(":\n")[0];
}
private onConsoleWasExpanded = (): void => {

View File

@@ -42,6 +42,7 @@ import {
} from "Explorer/Panes/AddCollectionPanel/AddCollectionPanelUtility";
import { useSidePanel } from "hooks/useSidePanel";
import { useTeachingBubble } from "hooks/useTeachingBubble";
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";
@@ -177,31 +178,31 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
messageType="info"
showErrorDetails={false}
link={Constants.Urls.freeTierInformation}
linkText="Learn more"
linkText={t(Keys.common.learnMore)}
/>
)}
{this.state.teachingBubbleStep === 1 && (
<TeachingBubble
headline="Create sample database"
headline={t(Keys.panes.addCollection.teachingBubble.step1Headline)}
target={"#newDatabaseId"}
calloutProps={{ gapSpace: 16 }}
primaryButtonProps={{ text: "Next", onClick: () => 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" })}
>
<Stack>
<Text style={{ color: "white" }}>
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.
</Text>
<Text style={{ color: "white" }}>{t(Keys.panes.addCollection.teachingBubble.step1Body)}</Text>
<Link
style={{ color: "white", fontWeight: 600 }}
target="_blank"
href="https://aka.ms/TeachingbubbleResources"
>
Learn more about resources.
{t(Keys.panes.addCollection.teachingBubble.step1LearnMore)}
</Link>
</Stack>
</TeachingBubble>
@@ -209,21 +210,21 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
{this.state.teachingBubbleStep === 2 && (
<TeachingBubble
headline="Setting throughput"
headline={t(Keys.panes.addCollection.teachingBubble.step2Headline)}
target={"#autoscaleRUValueField"}
calloutProps={{ gapSpace: 16 }}
primaryButtonProps={{ text: "Next", onClick: () => 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" })}
>
<Stack>
<Text style={{ color: "white" }}>
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).
</Text>
<Text style={{ color: "white" }}>{t(Keys.panes.addCollection.teachingBubble.step2Body)}</Text>
<Link style={{ color: "white", fontWeight: 600 }} target="_blank" href="https://aka.ms/teachingbubbleRU">
Learn more about RU/s.
{t(Keys.panes.addCollection.teachingBubble.step2LearnMore)}
</Link>
</Stack>
</TeachingBubble>
@@ -231,36 +232,41 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
{this.state.teachingBubbleStep === 3 && (
<TeachingBubble
headline="Naming container"
headline={t(Keys.panes.addCollection.teachingBubble.step3Headline)}
target={"#collectionId"}
calloutProps={{ gapSpace: 16 }}
primaryButtonProps={{ text: "Next", onClick: () => 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)}
</TeachingBubble>
)}
{this.state.teachingBubbleStep === 4 && (
<TeachingBubble
headline="Setting partition key"
headline={t(Keys.panes.addCollection.teachingBubble.step4Headline)}
target={"#addCollection-partitionKeyValue"}
calloutProps={{ gapSpace: 16 }}
primaryButtonProps={{
text: "Create container",
text: t(Keys.panes.addCollection.teachingBubble.step4CreateContainer),
onClick: () => {
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)}
</TeachingBubble>
)}
@@ -270,21 +276,23 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
<Stack horizontal>
<span className="mandatoryStar">*&nbsp;</span>
<Text className="panelTextBold" variant="small">
Database {userContext.apiType === "Mongo" ? "name" : "id"}
{userContext.apiType === "Mongo"
? t(Keys.panes.addCollection.databaseFieldLabelName)
: t(Keys.panes.addCollection.databaseFieldLabelId)}
</Text>
<TooltipHost
directionalHint={DirectionalHint.bottomLeftEdge}
content={`A database is analogous to a namespace. It is the unit of management for a set of ${getCollectionName(
true,
).toLocaleLowerCase()}.`}
content={t(Keys.panes.addCollection.databaseTooltip, {
collectionName: getCollectionName(true).toLocaleLowerCase(),
})}
>
<Icon
iconName="Info"
className="panelInfoIcon"
tabIndex={0}
ariaLabel={`A database is analogous to a namespace. It is the unit of management for a set of ${getCollectionName(
true,
).toLocaleLowerCase()}.`}
ariaLabel={t(Keys.panes.addCollection.databaseTooltip, {
collectionName: getCollectionName(true).toLocaleLowerCase(),
})}
/>
</TooltipHost>
</Stack>
@@ -295,7 +303,7 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
<input
className="panelRadioBtn"
checked={this.state.createNewDatabase}
aria-label="Create new database"
aria-label={t(Keys.panes.addCollection.createNewDatabaseAriaLabel)}
aria-checked={this.state.createNewDatabase}
name="databaseType"
type="radio"
@@ -304,12 +312,12 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
tabIndex={0}
onChange={this.onCreateNewDatabaseRadioBtnChange.bind(this)}
/>
<span className="panelRadioBtnLabel">Create new</span>
<span className="panelRadioBtnLabel">{t(Keys.panes.addCollection.createNew)}</span>
<input
className="panelRadioBtn"
checked={!this.state.createNewDatabase}
aria-label="Use existing database"
aria-label={t(Keys.panes.addCollection.useExistingDatabaseAriaLabel)}
aria-checked={!this.state.createNewDatabase}
name="databaseType"
type="radio"
@@ -317,7 +325,7 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
tabIndex={0}
onChange={this.onUseExistingDatabaseRadioBtnChange.bind(this)}
/>
<span className="panelRadioBtnLabel">Use existing</span>
<span className="panelRadioBtnLabel">{t(Keys.panes.addCollection.useExisting)}</span>
</div>
</Stack>
)}
@@ -333,10 +341,10 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
autoComplete="off"
pattern={ValidCosmosDbIdInputPattern.source}
title={ValidCosmosDbIdDescription}
placeholder="Type a new database id"
placeholder={t(Keys.panes.addCollection.newDatabaseIdPlaceholder)}
size={40}
className="panelTextField"
aria-label="New database id, Type a new database id"
aria-label={t(Keys.panes.addCollection.newDatabaseIdAriaLabel)}
tabIndex={0}
value={this.state.newDatabaseId}
onChange={(event: React.ChangeEvent<HTMLInputElement>) =>
@@ -347,7 +355,9 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
{!isServerlessAccount() && (
<Stack horizontal>
<Checkbox
label={`Share throughput across ${getCollectionName(true).toLocaleLowerCase()}`}
label={t(Keys.panes.addCollection.shareThroughput, {
collectionName: getCollectionName(true).toLocaleLowerCase(),
})}
checked={this.state.isSharedThroughputChecked}
styles={{
text: { fontSize: 12, color: "var(--colorNeutralForeground1)" },
@@ -365,17 +375,17 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
/>
<TooltipHost
directionalHint={DirectionalHint.bottomLeftEdge}
content={`Throughput configured at the database level will be shared across all ${getCollectionName(
true,
).toLocaleLowerCase()} within the database.`}
content={t(Keys.panes.addCollection.shareThroughputTooltip, {
collectionName: getCollectionName(true).toLocaleLowerCase(),
})}
>
<Icon
iconName="Info"
className="panelInfoIcon"
tabIndex={0}
ariaLabel={`Throughput configured at the database level will be shared across all ${getCollectionName(
true,
).toLocaleLowerCase()} within the database.`}
ariaLabel={t(Keys.panes.addCollection.shareThroughputTooltip, {
collectionName: getCollectionName(true).toLocaleLowerCase(),
})}
/>
</TooltipHost>
</Stack>
@@ -400,10 +410,10 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
)}
{!this.state.createNewDatabase && (
<Dropdown
ariaLabel="Choose an existing database"
ariaLabel={t(Keys.panes.addCollection.chooseExistingDatabase)}
styles={{ title: { height: 27, lineHeight: 27 }, dropdownItem: { fontSize: 12 } }}
style={{ width: 300, fontSize: 12 }}
placeholder="Choose an existing database"
placeholder={t(Keys.panes.addCollection.chooseExistingDatabase)}
options={this.getDatabaseOptions()}
onChange={(event: React.FormEvent<HTMLDivElement>, database: IDropdownOption) =>
this.setState({ selectedDatabaseId: database.key as string })
@@ -424,14 +434,18 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
</Text>
<TooltipHost
directionalHint={DirectionalHint.bottomLeftEdge}
content={`Unique identifier for the ${getCollectionName().toLocaleLowerCase()} and used for id-based routing through REST and all SDKs.`}
content={t(Keys.panes.addCollection.collectionIdTooltip, {
collectionName: getCollectionName().toLocaleLowerCase(),
})}
>
<Icon
role="button"
iconName="Info"
className="panelInfoIcon"
tabIndex={0}
ariaLabel={`Unique identifier for the ${getCollectionName().toLocaleLowerCase()} and used for id-based routing through REST and all SDKs.`}
ariaLabel={t(Keys.panes.addCollection.collectionIdTooltip, {
collectionName: getCollectionName().toLocaleLowerCase(),
})}
/>
</TooltipHost>
</Stack>
@@ -445,10 +459,10 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
autoComplete="off"
pattern={ValidCosmosDbIdInputPattern.source}
title={ValidCosmosDbIdDescription}
placeholder={`e.g., ${getCollectionName()}1`}
placeholder={t(Keys.panes.addCollection.collectionIdPlaceholder, { collectionName: getCollectionName() })}
size={40}
className="panelTextField"
aria-label={`${getCollectionName()} id, Example ${getCollectionName()}1`}
aria-label={t(Keys.panes.addCollection.collectionIdAriaLabel, { collectionName: getCollectionName() })}
value={this.state.collectionId}
onChange={(event: React.ChangeEvent<HTMLInputElement>) =>
this.setState({ collectionId: event.target.value })
@@ -462,7 +476,7 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
<Stack horizontal style={{ marginTop: -4, marginBottom: -5 }}>
<span className="mandatoryStar">*&nbsp;</span>
<Text className="panelTextBold" variant="small">
Indexing
{t(Keys.panes.addCollection.indexing)}
</Text>
</Stack>
@@ -470,32 +484,32 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
<input
className="panelRadioBtn"
checked={this.state.enableIndexing}
aria-label="Turn on indexing"
aria-label={t(Keys.panes.addCollection.turnOnIndexing)}
aria-checked={this.state.enableIndexing}
type="radio"
role="radio"
tabIndex={0}
onChange={this.onTurnOnIndexing.bind(this)}
/>
<span className="panelRadioBtnLabel">Automatic</span>
<span className="panelRadioBtnLabel">{t(Keys.panes.addCollection.automatic)}</span>
<input
className="panelRadioBtn"
checked={!this.state.enableIndexing}
aria-label="Turn off indexing"
aria-label={t(Keys.panes.addCollection.turnOffIndexing)}
aria-checked={!this.state.enableIndexing}
type="radio"
role="radio"
tabIndex={0}
onChange={this.onTurnOffIndexing.bind(this)}
/>
<span className="panelRadioBtnLabel">Off</span>
<span className="panelRadioBtnLabel">{t(Keys.panes.addCollection.off)}</span>
</Stack>
<Text variant="small">
{this.getFreeTierIndexingText()}{" "}
<Link target="_blank" href="https://aka.ms/cosmos-indexing-policy">
Learn more
{t(Keys.common.learnMore)}
</Link>
</Text>
</Stack>
@@ -508,21 +522,17 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
<Stack horizontal style={{ marginTop: -5, marginBottom: -4 }}>
<span className="mandatoryStar">*&nbsp;</span>
<Text className="panelTextBold" variant="small">
Sharding
{t(Keys.panes.addCollection.sharding)}
</Text>
<TooltipHost
directionalHint={DirectionalHint.bottomLeftEdge}
content={
"Sharded collections split your data across many replica sets (shards) to achieve unlimited scalability. Sharded collections require choosing a shard key (field) to evenly distribute your data."
}
content={t(Keys.panes.addCollection.shardingTooltip)}
>
<Icon
iconName="Info"
className="panelInfoIcon"
tabIndex={0}
ariaLabel={
"Sharded collections split your data across many replica sets (shards) to achieve unlimited scalability. Sharded collections require choosing a shard key (field) to evenly distribute your data."
}
ariaLabel={t(Keys.panes.addCollection.shardingTooltip)}
/>
</TooltipHost>
</Stack>
@@ -531,7 +541,7 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
<input
className="panelRadioBtn"
checked={!this.state.isSharded}
aria-label="Unsharded"
aria-label={t(Keys.panes.addCollection.unsharded)}
aria-checked={!this.state.isSharded}
name="unsharded"
type="radio"
@@ -540,12 +550,12 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
tabIndex={0}
onChange={this.onUnshardedRadioBtnChange.bind(this)}
/>
<span className="panelRadioBtnLabel">Unsharded (20GB limit)</span>
<span className="panelRadioBtnLabel">{t(Keys.panes.addCollection.unshardedLabel)}</span>
<input
className="panelRadioBtn"
checked={this.state.isSharded}
aria-label="Sharded"
aria-label={t(Keys.panes.addCollection.sharded)}
aria-checked={this.state.isSharded}
name="sharded"
type="radio"
@@ -554,7 +564,7 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
tabIndex={0}
onChange={this.onShardedRadioBtnChange.bind(this)}
/>
<span className="panelRadioBtnLabel">Sharded</span>
<span className="panelRadioBtnLabel">{t(Keys.panes.addCollection.sharded)}</span>
</Stack>
</Stack>
)}
@@ -679,15 +689,14 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
disabled={this.state.subPartitionKeys.length >= Constants.BackendDefaults.maxNumMultiHashPartition}
onClick={() => this.setState({ subPartitionKeys: [...this.state.subPartitionKeys, ""] })}
>
Add hierarchical partition key
{t(Keys.panes.addCollection.addPartitionKey)}
</DefaultButton>
{this.state.subPartitionKeys.length > 0 && (
<Text variant="small" style={{ color: "var(--colorNeutralForeground1)" }}>
<Icon iconName="InfoSolid" className="removeIcon" tabIndex={0} /> This feature allows you to
partition your data with up to three levels of keys for better data distribution. Requires .NET
V3, Java V4 SDK, or preview JavaScript V3 SDK.{" "}
<Icon iconName="InfoSolid" className="removeIcon" tabIndex={0} />{" "}
{t(Keys.panes.addCollection.hierarchicalPartitionKeyInfo)}{" "}
<Link href="https://aka.ms/cosmos-hierarchical-partitioning" target="_blank">
Learn more
{t(Keys.common.learnMore)}
</Link>
</Text>
)}
@@ -700,7 +709,9 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
{!isServerlessAccount() && !this.state.createNewDatabase && this.isSelectedDatabaseSharedThroughput() && (
<Stack horizontal verticalAlign="center">
<Checkbox
label={`Provision dedicated throughput for this ${getCollectionName().toLocaleLowerCase()}`}
label={t(Keys.panes.addCollection.provisionDedicatedThroughput, {
collectionName: getCollectionName().toLocaleLowerCase(),
})}
checked={this.state.enableDedicatedThroughput}
styles={{
text: { fontSize: 12, color: "var(--colorNeutralForeground1)" },
@@ -718,23 +729,19 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
/>
<TooltipHost
directionalHint={DirectionalHint.bottomLeftEdge}
content={`You can optionally provision dedicated throughput for a ${getCollectionName().toLocaleLowerCase()} within a database that has throughput
provisioned. This dedicated throughput amount will not be shared with other ${getCollectionName(
true,
).toLocaleLowerCase()} in the database and
does not count towards the throughput you provisioned for the database. This throughput amount will be
billed in addition to the throughput amount you provisioned at the database level.`}
content={t(Keys.panes.addCollection.provisionDedicatedThroughputTooltip, {
collectionName: getCollectionName().toLocaleLowerCase(),
collectionNamePlural: getCollectionName(true).toLocaleLowerCase(),
})}
>
<Icon
iconName="Info"
className="panelInfoIcon"
tabIndex={0}
ariaLabel={`You can optionally provision dedicated throughput for a ${getCollectionName().toLocaleLowerCase()} within a database that has throughput
provisioned. This dedicated throughput amount will not be shared with other ${getCollectionName(
true,
).toLocaleLowerCase()} in the database and
does not count towards the throughput you provisioned for the database. This throughput amount will be
billed in addition to the throughput amount you provisioned at the database level.`}
ariaLabel={t(Keys.panes.addCollection.provisionDedicatedThroughputTooltip, {
collectionName: getCollectionName().toLocaleLowerCase(),
collectionNamePlural: getCollectionName(true).toLocaleLowerCase(),
})}
/>
</TooltipHost>
</Stack>
@@ -769,8 +776,8 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
autoComplete="off"
placeholder={
userContext.apiType === "Mongo"
? "Comma separated paths e.g. firstName,address.zipCode"
: "Comma separated paths e.g. /firstName,/address/zipCode"
? t(Keys.panes.addCollection.uniqueKeysPlaceholderMongo)
: t(Keys.panes.addCollection.uniqueKeysPlaceholderSql)
}
className="panelTextField"
value={uniqueKey}
@@ -802,7 +809,7 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
styles={{ root: { padding: 0 }, label: { fontSize: 12, color: "var(--colorNeutralForeground1)" } }}
onClick={() => this.setState({ uniqueKeys: [...this.state.uniqueKeys, ""] })}
>
Add unique key
{t(Keys.panes.addCollection.addUniqueKey)}
</ActionButton>
</Stack>
)}
@@ -823,7 +830,7 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
className="panelRadioBtn"
checked={this.state.enableAnalyticalStore}
disabled={!isSynapseLinkEnabled()}
aria-label="Enable analytical store"
aria-label={t(Keys.panes.addCollection.enableAnalyticalStore)}
aria-checked={this.state.enableAnalyticalStore}
name="analyticalStore"
type="radio"
@@ -832,13 +839,13 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
tabIndex={0}
onChange={this.onEnableAnalyticalStoreRadioBtnChange.bind(this)}
/>
<span className="panelRadioBtnLabel">On</span>
<span className="panelRadioBtnLabel">{t(Keys.panes.addCollection.on)}</span>
<input
className="panelRadioBtn"
checked={!this.state.enableAnalyticalStore}
disabled={!isSynapseLinkEnabled()}
aria-label="Disable analytical store"
aria-label={t(Keys.panes.addCollection.disableAnalyticalStore)}
aria-checked={!this.state.enableAnalyticalStore}
name="analyticalStore"
type="radio"
@@ -847,26 +854,28 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
tabIndex={0}
onChange={this.onDisableAnalyticalStoreRadioBtnChange.bind(this)}
/>
<span className="panelRadioBtnLabel">Off</span>
<span className="panelRadioBtnLabel">{t(Keys.panes.addCollection.off)}</span>
</div>
</Stack>
{!isSynapseLinkEnabled() && (
<Stack className="panelGroupSpacing">
<Text variant="small" style={{ color: "var(--colorNeutralForeground1)" }}>
Azure Synapse Link is required for creating an analytical store{" "}
{getCollectionName().toLocaleLowerCase()}. Enable Synapse Link for this Cosmos DB account. <br />
{t(Keys.panes.addCollection.analyticalStoreSynapseLinkRequired, {
collectionName: getCollectionName().toLocaleLowerCase(),
})}{" "}
<br />
<Link
href="https://aka.ms/cosmosdb-synapselink"
target="_blank"
aria-label={Constants.ariaLabelForLearnMoreLink.AzureSynapseLink}
className="capacitycalculator-link"
>
Learn more
{t(Keys.common.learnMore)}
</Link>
</Text>
<DefaultButton
text="Enable"
text={t(Keys.panes.addCollection.enable)}
onClick={() => this.props.explorer.openEnableSynapseLinkDialog()}
style={{ height: 27, width: 80 }}
styles={{ label: { fontSize: 12 } }}
@@ -878,7 +887,7 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
{this.shouldShowVectorSearchParameters() && (
<Stack>
<CollapsibleSectionComponent
title="Container Vector Policy"
title={t(Keys.panes.addCollection.containerVectorPolicy)}
isExpandedByDefault={false}
onExpand={() => {
scrollToSection("collapsibleVectorPolicySectionContent");
@@ -906,7 +915,7 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
{this.shouldShowFullTextSearchParameters() && (
<Stack>
<CollapsibleSectionComponent
title="Container Full Text Search Policy"
title={t(Keys.panes.addCollection.containerFullTextSearchPolicy)}
isExpandedByDefault={false}
onExpand={() => {
scrollToSection("collapsibleFullTextPolicySectionContent");
@@ -935,7 +944,7 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
)}
{!isFabricNative() && userContext.apiType !== "Tables" && (
<CollapsibleSectionComponent
title="Advanced"
title={t(Keys.panes.addCollection.advanced)}
isExpandedByDefault={false}
onExpand={() => {
TelemetryProcessor.traceOpen(Action.ExpandAddCollectionPaneAdvancedSection);
@@ -948,23 +957,23 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
<Stack horizontal>
<span className="mandatoryStar">*&nbsp;</span>
<Text className="panelTextBold" variant="small">
Indexing
{t(Keys.panes.addCollection.indexing)}
</Text>
<TooltipHost
directionalHint={DirectionalHint.bottomLeftEdge}
content="The _id field is indexed by default. Creating a wildcard index for all fields will optimize queries and is recommended for development."
content={t(Keys.panes.addCollection.mongoIndexingTooltip)}
>
<Icon
iconName="Info"
className="panelInfoIcon"
tabIndex={0}
ariaLabel="The _id field is indexed by default. Creating a wildcard index for all fields will optimize queries and is recommended for development."
ariaLabel={t(Keys.panes.addCollection.mongoIndexingTooltip)}
/>
</TooltipHost>
</Stack>
<Checkbox
label="Create a Wildcard Index on all fields"
label={t(Keys.panes.addCollection.createWildcardIndex)}
checked={this.state.createMongoWildCardIndex}
styles={{
text: { fontSize: 12, color: "var(--colorNeutralForeground1)" },
@@ -986,7 +995,7 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
{userContext.apiType === "SQL" && (
<Stack className="panelGroupSpacing">
<Checkbox
label="My application uses an older Cosmos .NET or Java SDK version (.NET V1 or Java V2)"
label={t(Keys.panes.addCollection.legacySdkCheckbox)}
checked={this.state.useHashV1}
styles={{
text: { fontSize: 12, color: "var(--colorNeutralForeground1)" },
@@ -1003,11 +1012,9 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
}
/>
<Text variant="small" style={{ color: "var(--colorNeutralForeground1)" }}>
<Icon iconName="InfoSolid" className="removeIcon" /> To ensure compatibility with older SDKs, the
created container will use a legacy partitioning scheme that supports partition key values of size
only up to 101 bytes. If this is enabled, you will not be able to use hierarchical partition keys.{" "}
<Icon iconName="InfoSolid" className="removeIcon" /> {t(Keys.panes.addCollection.legacySdkInfo)}{" "}
<Link href="https://aka.ms/cosmos-large-pk" target="_blank">
Learn more
{t(Keys.common.learnMore)}
</Link>
</Text>
</Stack>
@@ -1018,7 +1025,7 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
</div>
{!this.props.isCopyJobFlow && (
<PanelFooterComponent buttonLabel="OK" isButtonDisabled={this.state.isThroughputCapExceeded} />
<PanelFooterComponent buttonLabel={t(Keys.common.ok)} isButtonDisabled={this.state.isThroughputCapExceeded} />
)}
{this.state.isExecuting && (
@@ -1026,16 +1033,15 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
<PanelLoadingScreen />
{this.state.teachingBubbleStep === 5 && (
<TeachingBubble
headline="Creating sample container"
headline={t(Keys.panes.addCollection.teachingBubble.step5Headline)}
target={"#loadingScreen"}
onDismiss={() => 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)}
<br />
<br />
Once the sample container is created, review your sample dataset and follow next steps
{t(Keys.panes.addCollection.teachingBubble.step5BodyFollowUp)}
<br />
<br />
<ProgressIndicator
@@ -1044,7 +1050,7 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
progressTrack: { backgroundColor: "#A6A6A6" },
progressBar: { background: "white" },
}}
label="Adding sample data set"
label={t(Keys.panes.addCollection.addingSampleDataSet)}
/>
</TeachingBubble>
)}
@@ -1150,8 +1156,8 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
private getFreeTierIndexingText(): string {
return this.state.enableIndexing
? "All properties in your documents will be indexed by default for flexible and efficient queries."
: "Indexing will be turned off. Recommended if you don't need to run queries or only have key value operations.";
? t(Keys.panes.addCollection.indexingOnInfo)
: t(Keys.panes.addCollection.indexingOffInfo);
}
private getPartitionKeySubtext(): string {
@@ -1249,14 +1255,14 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
const throughput = this.state.createNewDatabase ? this.newDatabaseThroughput : this.collectionThroughput;
if (throughput > CollectionCreation.DefaultCollectionRUs100K && !this.isCostAcknowledged) {
const errorMessage = this.isNewDatabaseAutoscale
? "Please acknowledge the estimated monthly spend."
: "Please acknowledge the estimated daily spend.";
? t(Keys.panes.addCollection.acknowledgeSpendErrorMonthly)
: t(Keys.panes.addCollection.acknowledgeSpendErrorDaily);
this.setState({ errorMessage });
return false;
}
if (throughput > CollectionCreation.MaxRUPerPartition && !this.state.isSharded) {
this.setState({ errorMessage: "Unsharded collections support up to 10,000 RUs" });
this.setState({ errorMessage: t(Keys.panes.addCollection.unshardedMaxRuError) });
return false;
}
@@ -1270,12 +1276,12 @@ export class AddCollectionPanel extends React.Component<AddCollectionPanelProps,
if (this.shouldShowVectorSearchParameters()) {
if (!this.state.vectorPolicyValidated) {
this.setState({ errorMessage: "Please fix errors in container vector policy" });
this.setState({ errorMessage: t(Keys.panes.addCollection.vectorPolicyError) });
return false;
}
if (!this.state.fullTextPolicyValidated) {
this.setState({ errorMessage: "Please fix errors in container full text search polilcy" });
this.setState({ errorMessage: t(Keys.panes.addCollection.fullTextSearchPolicyError) });
return false;
}
}

View File

@@ -3,28 +3,32 @@ import * as Constants from "Common/Constants";
import { configContext, Platform } from "ConfigContext";
import * as DataModels from "Contracts/DataModels";
import { getFullTextLanguageOptions } from "Explorer/Controls/FullTextSeach/FullTextPoliciesComponent";
import { Keys, t } from "Localization";
import { isFabricNative } from "Platform/Fabric/FabricUtil";
import React from "react";
import { userContext } from "UserContext";
export function getPartitionKeyTooltipText(): string {
if (userContext.apiType === "Mongo") {
return "The shard key (field) is used to split your data across many replica sets (shards) to achieve unlimited scalability. Its critical to choose a field that will evenly distribute your data.";
return t(Keys.panes.addCollectionUtility.shardKeyTooltip);
}
let tooltipText = `The ${getPartitionKeyName(
true,
)} is used to automatically distribute data across partitions for scalability. Choose a property in your JSON document that has a wide range of values and evenly distributes request volume.`;
let tooltipText = t(Keys.panes.addCollectionUtility.partitionKeyTooltip, {
partitionKeyName: getPartitionKeyName(true),
});
if (userContext.apiType === "SQL") {
tooltipText += " For small read-heavy workloads or write-heavy workloads of any size, id is often a good choice.";
tooltipText += t(Keys.panes.addCollectionUtility.partitionKeyTooltipSqlSuffix);
}
return tooltipText;
}
export function getPartitionKeyName(isLowerCase?: boolean): string {
const partitionKeyName = userContext.apiType === "Mongo" ? "Shard key" : "Partition key";
const partitionKeyName =
userContext.apiType === "Mongo"
? t(Keys.panes.addCollectionUtility.shardKeyLabel)
: t(Keys.panes.addCollectionUtility.partitionKeyLabel);
return isLowerCase ? partitionKeyName.toLocaleLowerCase() : partitionKeyName;
}
@@ -32,19 +36,19 @@ export function getPartitionKeyName(isLowerCase?: boolean): string {
export function getPartitionKeyPlaceHolder(index?: number): string {
switch (userContext.apiType) {
case "Mongo":
return "e.g., categoryId";
return t(Keys.panes.addCollectionUtility.shardKeyPlaceholder);
case "Gremlin":
return "e.g., /address";
return t(Keys.panes.addCollectionUtility.partitionKeyPlaceholderDefault);
case "SQL":
return `${
index === undefined
? "Required - first partition key e.g., /TenantId"
? t(Keys.panes.addCollectionUtility.partitionKeyPlaceholderFirst)
: index === 0
? "second partition key e.g., /UserId"
: "third partition key e.g., /SessionId"
? t(Keys.panes.addCollectionUtility.partitionKeyPlaceholderSecond)
: t(Keys.panes.addCollectionUtility.partitionKeyPlaceholderThird)
}`;
default:
return "e.g., /address/zipCode";
return t(Keys.panes.addCollectionUtility.partitionKeyPlaceholderGraph);
}
}
@@ -69,13 +73,12 @@ export function isFreeTierAccount(): boolean {
}
export function UniqueKeysHeader(): JSX.Element {
const tooltipContent =
"Unique keys provide developers with the ability to add a layer of data integrity to their database. By creating a unique key policy when a container is created, you ensure the uniqueness of one or more values per partition key.";
const tooltipContent = t(Keys.panes.addCollectionUtility.uniqueKeysTooltip);
return (
<Stack horizontal style={{ marginBottom: -2 }}>
<Text className="panelTextBold" variant="small">
Unique keys
{t(Keys.panes.addCollectionUtility.uniqueKeysLabel)}
</Text>
<TooltipHost directionalHint={DirectionalHint.bottomLeftEdge} content={tooltipContent}>
<Icon iconName="Info" className="panelInfoIcon" tabIndex={0} ariaLabel={tooltipContent} />
@@ -99,12 +102,11 @@ export function shouldShowAnalyticalStoreOptions(): boolean {
}
export function AnalyticalStoreHeader(): JSX.Element {
const tooltipContent =
"Enable analytical store capability to perform near real-time analytics on your operational data, without impacting the performance of transactional workloads.";
const tooltipContent = t(Keys.panes.addCollectionUtility.analyticalStoreTooltip);
return (
<Stack horizontal style={{ marginBottom: -2 }}>
<Text className="panelTextBold" variant="small">
Analytical Store
{t(Keys.panes.addCollectionUtility.analyticalStoreLabel)}
</Text>
<TooltipHost directionalHint={DirectionalHint.bottomLeftEdge} content={tooltipContent}>
<Icon iconName="Info" className="panelInfoIcon" tabIndex={0} ariaLabel={tooltipContent} />
@@ -116,14 +118,13 @@ export function AnalyticalStoreHeader(): JSX.Element {
export function AnalyticalStorageContent(): JSX.Element {
return (
<Text variant="small">
Enable analytical store capability to perform near real-time analytics on your operational data, without impacting
the performance of transactional workloads.{" "}
{t(Keys.panes.addCollectionUtility.analyticalStoreDescription)}{" "}
<Link
aria-label={Constants.ariaLabelForLearnMoreLink.AnalyticalStore}
target="_blank"
href="https://aka.ms/analytical-store-overview"
>
Learn more
{t(Keys.common.learnMore)}
</Link>
</Text>
);
@@ -155,10 +156,9 @@ export function scrollToSection(id: string): void {
export function ContainerVectorPolicyTooltipContent(): JSX.Element {
return (
<Text variant="small">
Describe any properties in your data that contain vectors, so that they can be made available for similarity
queries.{" "}
{t(Keys.panes.addCollectionUtility.vectorPolicyTooltip)}{" "}
<Link target="_blank" href="https://aka.ms/CosmosDBVectorSetup">
Learn more
{t(Keys.common.learnMore)}
</Link>
</Text>
);

View File

@@ -29,8 +29,7 @@ exports[`AddCollectionPanel should render Default properly 1`] = `
className="panelTextBold"
variant="small"
>
Database
id
Database id
</Text>
<StyledTooltipHostBase
content="A database is analogous to a namespace. It is the unit of management for a set of containers."
@@ -482,10 +481,8 @@ exports[`AddCollectionPanel should render Default properly 1`] = `
}
variant="small"
>
Azure Synapse Link is required for creating an analytical store
Azure Synapse Link is required for creating an analytical store container. Enable Synapse Link for this Cosmos DB account.
container
. Enable Synapse Link for this Cosmos DB account.
<br />
<StyledLinkBase
aria-label="Learn more about Azure Synapse Link."
@@ -608,7 +605,8 @@ exports[`AddCollectionPanel should render Default properly 1`] = `
className="removeIcon"
iconName="InfoSolid"
/>
To ensure compatibility with older SDKs, the created container will use a legacy partitioning scheme that supports partition key values of size only up to 101 bytes. If this is enabled, you will not be able to use hierarchical partition keys.
To ensure compatibility with older SDKs, the created container will use a legacy partitioning scheme that supports partition key values of size only up to 101 bytes. If this is enabled, you will not be able to use hierarchical partition keys.
<StyledLinkBase
href="https://aka.ms/cosmos-large-pk"

View File

@@ -1,5 +1,6 @@
import { Checkbox, Stack, Text, TextField } from "@fluentui/react";
import { getNewDatabaseSharedThroughputDefault } from "Common/DatabaseUtility";
import { Keys, t } from "Localization";
import { ValidCosmosDbIdDescription, ValidCosmosDbIdInputPattern } from "Utils/ValidationUtils";
import React, { FunctionComponent, useEffect, useState } from "react";
import * as Constants from "../../../Common/Constants";
@@ -40,15 +41,18 @@ export const AddDatabasePanel: FunctionComponent<AddDatabasePaneProps> = ({
const isCassandraAccount: boolean = userContext.apiType === "Cassandra";
const databaseLabel: string = isCassandraAccount ? "keyspace" : "database";
const collectionsLabel: string = isCassandraAccount ? "tables" : "collections";
const databaseIdLabel: string = isCassandraAccount ? "Keyspace id" : "Database id";
const databaseIdPlaceHolder: string = isCassandraAccount ? "Type a new keyspace id" : "Type a new database id";
const databaseIdLabel: string = isCassandraAccount
? t(Keys.panes.addDatabase.keyspaceIdLabel)
: t(Keys.panes.addDatabase.databaseIdLabel);
const databaseIdPlaceHolder: string = t(Keys.panes.addDatabase.databaseIdPlaceholder, { databaseLabel });
const [databaseId, setDatabaseId] = useState<string>("");
const databaseIdTooltipText = `A ${
isCassandraAccount ? "keyspace" : "database"
} is a logical container of one or more ${isCassandraAccount ? "tables" : "collections"}`;
const databaseIdTooltipText = t(Keys.panes.addDatabase.databaseTooltip, { databaseLabel, collectionsLabel });
const databaseLevelThroughputTooltipText = `Provisioned throughput at the ${databaseLabel} level will be shared across all ${collectionsLabel} within the ${databaseLabel}.`;
const databaseLevelThroughputTooltipText = t(Keys.panes.addDatabase.shareThroughputTooltip, {
databaseLabel,
collectionsLabel,
});
const [databaseCreateNewShared, setDatabaseCreateNewShared] = useState<boolean>(
getNewDatabaseSharedThroughputDefault(),
);
@@ -144,15 +148,17 @@ export const AddDatabasePanel: FunctionComponent<AddDatabasePaneProps> = ({
// TODO add feature flag that disables validation for customers with custom accounts
if (isAutoscaleSelected) {
if (!AutoPilotUtils.isValidAutoPilotThroughput(throughput)) {
setFormErrors(
`Please enter a value greater than ${AutoPilotUtils.autoPilotThroughput1K} for autopilot throughput`,
);
setFormErrors(t(Keys.panes.addDatabase.greaterThanError, { minValue: AutoPilotUtils.autoPilotThroughput1K }));
return false;
}
}
if (throughput > SharedConstants.CollectionCreation.DefaultCollectionRUs100K && !isCostAcknowledged) {
setFormErrors(`Please acknowledge the estimated ${isAutoscaleSelected ? "monthly" : "daily"} spend.`);
setFormErrors(
isAutoscaleSelected
? t(Keys.panes.addDatabase.acknowledgeSpendErrorMonthly)
: t(Keys.panes.addDatabase.acknowledgeSpendErrorDaily),
);
return false;
}
@@ -169,7 +175,7 @@ export const AddDatabasePanel: FunctionComponent<AddDatabasePaneProps> = ({
const props: RightPaneFormProps = {
formError: formErrors,
isExecuting,
submitButtonText: "OK",
submitButtonText: t(Keys.common.ok),
isSubmitButtonDisabled: isThroughputCapExceeded,
onSubmit,
};
@@ -187,7 +193,7 @@ export const AddDatabasePanel: FunctionComponent<AddDatabasePaneProps> = ({
messageType="info"
showErrorDetails={false}
link={Constants.Urls.freeTierInformation}
linkText="Learn more"
linkText={t(Keys.common.learnMore)}
/>
)}
<div className="panelMainContent">
@@ -222,7 +228,7 @@ export const AddDatabasePanel: FunctionComponent<AddDatabasePaneProps> = ({
{!isServerlessAccount() && (
<Stack horizontal>
<Checkbox
title="Provision shared throughput"
title={t(Keys.panes.addDatabase.provisionSharedThroughputTitle)}
styles={{
text: { fontSize: 12, color: "var(--colorNeutralForeground1)" },
checkbox: { width: 12, height: 12 },
@@ -233,7 +239,7 @@ export const AddDatabasePanel: FunctionComponent<AddDatabasePaneProps> = ({
},
},
}}
label="Provision throughput"
label={t(Keys.panes.addDatabase.provisionThroughputLabel)}
checked={databaseCreateNewShared}
onChange={() => setDatabaseCreateNewShared(!databaseCreateNewShared)}
/>

View File

@@ -40,6 +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, t } from "Localization";
import React, { MutableRefObject, useEffect, useRef, useState } from "react";
import { CollectionCreation } from "Shared/Constants";
import { Action } from "Shared/Telemetry/TelemetryConstants";
@@ -168,19 +169,19 @@ export const AddGlobalSecondaryIndexPanel = (props: AddGlobalSecondaryIndexPanel
}
if (globalSecondaryIndexThroughput > CollectionCreation.DefaultCollectionRUs100K && !isCostAcknowledged) {
const errorMessage: string = "Please acknowledge the estimated monthly spend.";
const errorMessage: string = t(Keys.panes.addCollection.acknowledgeSpendErrorMonthly);
setErrorMessage(errorMessage);
return false;
}
if (showVectorSearchParameters()) {
if (!vectorPolicyValidated) {
setErrorMessage("Please fix errors in container vector policy");
setErrorMessage(t(Keys.panes.addCollection.vectorPolicyError));
return false;
}
if (!fullTextPolicyValidated) {
setErrorMessage("Please fix errors in container full text search policy");
setErrorMessage(t(Keys.panes.addCollection.fullTextSearchPolicyError));
return false;
}
}
@@ -307,7 +308,7 @@ export const AddGlobalSecondaryIndexPanel = (props: AddGlobalSecondaryIndexPanel
<Stack horizontal>
<span className="mandatoryStar">*&nbsp;</span>
<Text className="panelTextBold" variant="small">
Global secondary index container id
{t(Keys.panes.addGlobalSecondaryIndex.globalSecondaryIndexId)}
</Text>
</Stack>
<input
@@ -318,7 +319,7 @@ export const AddGlobalSecondaryIndexPanel = (props: AddGlobalSecondaryIndexPanel
autoComplete="off"
pattern={ValidCosmosDbIdInputPattern.source}
title={ValidCosmosDbIdDescription}
placeholder={`e.g., indexbyEmailId`}
placeholder={t(Keys.panes.addGlobalSecondaryIndex.globalSecondaryIndexIdPlaceholder)}
size={40}
className="panelTextField"
value={globalSecondaryIndexId}
@@ -336,7 +337,7 @@ export const AddGlobalSecondaryIndexPanel = (props: AddGlobalSecondaryIndexPanel
href="https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/materialized-views#defining-materialized-views"
target="blank"
>
Learn more about defining global secondary indexes.
{t(Keys.panes.addGlobalSecondaryIndex.projectionQueryTooltip)}
</Link>
}
>
@@ -349,7 +350,7 @@ export const AddGlobalSecondaryIndexPanel = (props: AddGlobalSecondaryIndexPanel
aria-required
required
autoComplete="off"
placeholder={"SELECT c.email, c.accountId FROM c"}
placeholder={t(Keys.panes.addGlobalSecondaryIndex.projectionQueryPlaceholder)}
size={40}
className="panelTextField"
value={definition || ""}
@@ -393,7 +394,7 @@ export const AddGlobalSecondaryIndexPanel = (props: AddGlobalSecondaryIndexPanel
<AdvancedComponent {...{ useHashV1, setUseHashV1, setSubPartitionKeys }} />
</Stack>
</div>
<PanelFooterComponent buttonLabel="OK" isButtonDisabled={isThroughputCapExceeded} />
<PanelFooterComponent buttonLabel={t(Keys.common.ok)} isButtonDisabled={isThroughputCapExceeded} />
{isExecuting && <PanelLoadingScreen />}
</form>
);

View File

@@ -2,14 +2,15 @@ import { Checkbox, Dropdown, IDropdownOption, Link, Stack, Text, TextField } fro
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, t } from "Localization";
import React, { FunctionComponent, useState } from "react";
import * as SharedConstants from "Shared/Constants";
import { Action } from "Shared/Telemetry/TelemetryConstants";
import * as TelemetryProcessor from "Shared/Telemetry/TelemetryProcessor";
import { userContext } from "UserContext";
import { isServerlessAccount } from "Utils/CapabilityUtils";
import { ValidCosmosDbIdDescription, ValidCosmosDbIdInputPattern } from "Utils/ValidationUtils";
import { useSidePanel } from "hooks/useSidePanel";
import React, { FunctionComponent, useState } from "react";
import { ThroughputInput } from "../../Controls/ThroughputInput/ThroughputInput";
import Explorer from "../../Explorer";
import { CassandraAPIDataClient } from "../../Tables/TableDataClient";
@@ -71,8 +72,8 @@ export const CassandraAddCollectionPane: FunctionComponent<CassandraAddCollectio
if (throughput > SharedConstants.CollectionCreation.DefaultCollectionRUs100K && !isCostAcknowledged) {
const errorMessage =
isNewKeySpaceAutoscale || isTableAutoscale
? "Please acknowledge the estimated monthly spend."
: "Please acknowledge the estimated daily spend.";
? t(Keys.panes.addCollection.acknowledgeSpendErrorMonthly)
: t(Keys.panes.addCollection.acknowledgeSpendErrorDaily);
setFormError(errorMessage);
return;
}
@@ -149,7 +150,7 @@ export const CassandraAddCollectionPane: FunctionComponent<CassandraAddCollectio
const props: RightPaneFormProps = {
formError,
isExecuting,
submitButtonText: "OK",
submitButtonText: t(Keys.common.ok),
isSubmitButtonDisabled: isThroughputCapExceeded,
onSubmit,
};
@@ -161,7 +162,8 @@ export const CassandraAddCollectionPane: FunctionComponent<CassandraAddCollectio
<Stack horizontal>
<span className="mandatoryStar">*&nbsp;</span>
<Text className="panelTextBold" variant="small">
Keyspace name <InfoTooltip>Select an existing keyspace or enter a new keyspace id.</InfoTooltip>
{t(Keys.panes.cassandraAddCollection.keyspaceLabel)}{" "}
<InfoTooltip>{t(Keys.panes.cassandraAddCollection.keyspaceTooltip)}</InfoTooltip>
</Text>
</Stack>
@@ -179,7 +181,7 @@ export const CassandraAddCollectionPane: FunctionComponent<CassandraAddCollectio
setExistingKeyspaceId("");
}}
/>
<span className="panelRadioBtnLabel">Create new</span>
<span className="panelRadioBtnLabel">{t(Keys.panes.addCollection.createNew)}</span>
<input
className="panelRadioBtn"
@@ -193,7 +195,7 @@ export const CassandraAddCollectionPane: FunctionComponent<CassandraAddCollectio
setIsKeyspaceShared(false);
}}
/>
<span className="panelRadioBtnLabel">Use existing</span>
<span className="panelRadioBtnLabel">{t(Keys.panes.addCollection.useExisting)}</span>
</Stack>
{keyspaceCreateNew && (
@@ -275,9 +277,9 @@ export const CassandraAddCollectionPane: FunctionComponent<CassandraAddCollectio
<Stack horizontal>
<span className="mandatoryStar">*&nbsp;</span>
<Text className="panelTextBold" variant="small">
Enter CQL command to create the table.{" "}
{t(Keys.panes.cassandraAddCollection.tableIdLabel)}{" "}
<Link className="underlinedLink" href="https://aka.ms/cassandra-create-table" target="_blank">
Learn More
{t(Keys.common.learnMore)}
</Link>
</Text>
</Stack>
@@ -295,7 +297,7 @@ export const CassandraAddCollectionPane: FunctionComponent<CassandraAddCollectio
autoComplete="off"
pattern={ValidCosmosDbIdInputPattern.source}
title={ValidCosmosDbIdDescription}
placeholder="Enter table Id"
placeholder={t(Keys.panes.cassandraAddCollection.enterTableId)}
size={20}
value={tableId}
onChange={(e, newValue) => setTableId(newValue)}
@@ -307,7 +309,7 @@ export const CassandraAddCollectionPane: FunctionComponent<CassandraAddCollectio
multiline
id="editor-area"
rows={5}
ariaLabel="Table schema"
ariaLabel={t(Keys.panes.cassandraAddCollection.tableSchemaAriaLabel)}
value={userTableQuery}
onChange={(e, newValue) => setUserTableQuery(newValue)}
/>
@@ -318,17 +320,12 @@ export const CassandraAddCollectionPane: FunctionComponent<CassandraAddCollectio
<input
type="checkbox"
id="tableSharedThroughput"
title="Provision dedicated throughput for this table"
title={t(Keys.panes.cassandraAddCollection.provisionDedicatedThroughput)}
checked={dedicateTableThroughput}
onChange={(e) => setDedicateTableThroughput(e.target.checked)}
/>
<span>Provision dedicated throughput for this table</span>
<InfoTooltip>
You can optionally provision dedicated throughput for a table within a keyspace that has throughput
provisioned. This dedicated throughput amount will not be shared with other tables in the keyspace and
does not count towards the throughput you provisioned for the keyspace. This throughput amount will be
billed in addition to the throughput amount you provisioned at the keyspace level.
</InfoTooltip>
<span>{t(Keys.panes.cassandraAddCollection.provisionDedicatedThroughput)}</span>
<InfoTooltip>{t(Keys.panes.cassandraAddCollection.provisionDedicatedThroughputTooltip)}</InfoTooltip>
</Stack>
)}
{!isServerlessAccount() && (!isKeyspaceShared || dedicateTableThroughput) && (

View File

@@ -26,6 +26,7 @@ import {
import Explorer from "Explorer/Explorer";
import { RightPaneForm } from "Explorer/Panes/RightPaneForm/RightPaneForm";
import { useDatabases } from "Explorer/useDatabases";
import { Keys, t } from "Localization";
import { userContext } from "UserContext";
import { getCollectionName } from "Utils/APITypeUtils";
import { ValidCosmosDbIdDescription, ValidCosmosDbIdInputPattern } from "Utils/ValidationUtils";
@@ -72,7 +73,7 @@ export const ChangePartitionKeyPane: React.FC<ChangePartitionKeyPaneProps> = ({
await createDataTransferJob();
await onClose();
} catch (error) {
handleError(error, "ChangePartitionKey", "Failed to start data transfer job");
handleError(error, "ChangePartitionKey", t(Keys.panes.changePartitionKey.failedToStartError));
}
setIsExecuting(false);
useSidePanel.getState().closeSidePanel();
@@ -133,17 +134,21 @@ export const ChangePartitionKeyPane: React.FC<ChangePartitionKeyPaneProps> = ({
};
return (
<RightPaneForm formError={formError} isExecuting={isExecuting} onSubmit={submit} submitButtonText="OK">
<RightPaneForm
formError={formError}
isExecuting={isExecuting}
onSubmit={submit}
submitButtonText={t(Keys.common.ok)}
>
<Stack tokens={{ childrenGap: 10 }} className="panelMainContent">
<Text variant="small" style={{ color: "var(--colorNeutralForeground1)" }}>
When changing a containers partition key, you will need to create a destination container with the correct
partition key. You may also select an existing destination container.&nbsp;
{t(Keys.panes.changePartitionKey.description)}&nbsp;
<Link
href="https://learn.microsoft.com/en-us/azure/cosmos-db/container-copy#container-copy-within-an-azure-cosmos-db-account"
target="_blank"
underline
>
Learn more
{t(Keys.common.learnMore)}
</Link>
</Text>
<Stack>
@@ -218,14 +223,18 @@ export const ChangePartitionKeyPane: React.FC<ChangePartitionKeyPaneProps> = ({
</Text>
<TooltipHost
directionalHint={DirectionalHint.bottomLeftEdge}
content={`Unique identifier for the ${getCollectionName().toLocaleLowerCase()} and used for id-based routing through REST and all SDKs.`}
content={t(Keys.panes.changePartitionKey.collectionIdTooltip, {
collectionName: getCollectionName().toLocaleLowerCase(),
})}
>
<Icon
role="button"
iconName="Info"
className="panelInfoIcon"
tabIndex={0}
ariaLabel={`Unique identifier for the ${getCollectionName().toLocaleLowerCase()} and used for id-based routing through REST and all SDKs.`}
ariaLabel={t(Keys.panes.changePartitionKey.collectionIdTooltip, {
collectionName: getCollectionName().toLocaleLowerCase(),
})}
/>
</TooltipHost>
</Stack>
@@ -239,10 +248,14 @@ export const ChangePartitionKeyPane: React.FC<ChangePartitionKeyPaneProps> = ({
autoComplete="off"
pattern={ValidCosmosDbIdInputPattern.source}
title={ValidCosmosDbIdDescription}
placeholder={`e.g., ${getCollectionName()}1`}
placeholder={t(Keys.panes.changePartitionKey.collectionIdPlaceholder, {
collectionName: getCollectionName(),
})}
size={40}
className="panelTextField"
aria-label={`${getCollectionName()} id, Example ${getCollectionName()}1`}
aria-label={t(Keys.panes.changePartitionKey.collectionIdAriaLabel, {
collectionName: getCollectionName(),
})}
value={targetCollectionId}
onChange={(event: React.ChangeEvent<HTMLInputElement>) => setTargetCollectionId(event.target.value)}
/>
@@ -349,7 +362,7 @@ export const ChangePartitionKeyPane: React.FC<ChangePartitionKeyPaneProps> = ({
disabled={subPartitionKeys.length >= Constants.BackendDefaults.maxNumMultiHashPartition}
onClick={() => setSubPartitionKeys([...subPartitionKeys, ""])}
>
Add hierarchical partition key
{t(Keys.panes.addCollection.addPartitionKey)}
</DefaultButton>
{subPartitionKeys.length > 0 && (
<Text
@@ -357,11 +370,10 @@ export const ChangePartitionKeyPane: React.FC<ChangePartitionKeyPaneProps> = ({
variant="small"
style={{ color: "var(--colorNeutralForeground1)" }}
>
<Icon iconName="InfoSolid" className="removeIcon" tabIndex={0} /> This feature allows you to
partition your data with up to three levels of keys for better data distribution. Requires .NET V3,
Java V4 SDK, or preview JavaScript V3 SDK.{" "}
<Icon iconName="InfoSolid" className="removeIcon" tabIndex={0} />{" "}
{t(Keys.panes.addCollection.hierarchicalPartitionKeyInfo)}{" "}
<Link href="https://aka.ms/cosmos-hierarchical-partitioning" target="_blank">
Learn more
{t(Keys.common.learnMore)}
</Link>
</Text>
)}
@@ -377,14 +389,18 @@ export const ChangePartitionKeyPane: React.FC<ChangePartitionKeyPaneProps> = ({
</Text>
<TooltipHost
directionalHint={DirectionalHint.bottomLeftEdge}
content={`Unique identifier for the ${getCollectionName().toLocaleLowerCase()} and used for id-based routing through REST and all SDKs.`}
content={t(Keys.panes.changePartitionKey.collectionIdTooltip, {
collectionName: getCollectionName().toLocaleLowerCase(),
})}
>
<Icon
role="button"
iconName="Info"
className="panelInfoIcon"
tabIndex={0}
ariaLabel={`Unique identifier for the ${getCollectionName().toLocaleLowerCase()} and used for id-based routing through REST and all SDKs.`}
ariaLabel={t(Keys.panes.changePartitionKey.collectionIdTooltip, {
collectionName: getCollectionName().toLocaleLowerCase(),
})}
/>
</TooltipHost>
</Stack>
@@ -400,7 +416,7 @@ export const ChangePartitionKeyPane: React.FC<ChangePartitionKeyPaneProps> = ({
}}
defaultSelectedKey={targetCollectionId}
responsiveMode={999}
ariaLabel="Existing Containers"
ariaLabel={t(Keys.panes.changePartitionKey.existingContainers)}
/>
</Stack>
)}

View File

@@ -4,6 +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, t } from "Localization";
import * as GitHubUtils from "../../../Utils/GitHubUtils";
import * as NotificationConsoleUtils from "../../../Utils/NotificationConsoleUtils";
import { useSidePanel } from "../../../hooks/useSidePanel";
@@ -82,14 +83,14 @@ export const CopyNotebookPane: FunctionComponent<CopyNotebookPanelProps> = ({
const notebookContentItem = await copyNotebook(selectedLocation);
if (!notebookContentItem) {
throw new Error(`Failed to upload ${name}`);
throw new Error(t(Keys.panes.copyNotebook.uploadFailedError, { name }));
}
NotificationConsoleUtils.logConsoleInfo(`Successfully copied ${name} to ${destination}`);
closeSidePanel();
} catch (error) {
const errorMessage = getErrorMessage(error);
setFormError(`Failed to copy ${name} to ${destination}`);
setFormError(t(Keys.panes.copyNotebook.copyFailedError, { name, destination }));
handleError(errorMessage, "CopyNotebookPaneAdapter/submit", formError);
} finally {
clearMessage && clearMessage();
@@ -136,7 +137,7 @@ export const CopyNotebookPane: FunctionComponent<CopyNotebookPanelProps> = ({
const props: RightPaneFormProps = {
formError,
isExecuting: isExecuting,
submitButtonText: "OK",
submitButtonText: t(Keys.common.ok),
onSubmit: () => submit(),
};

View File

@@ -12,6 +12,7 @@ import {
import { GitHubReposTitle } from "Explorer/Tree/ResourceTree";
import React, { FormEvent, FunctionComponent } from "react";
import { IPinnedRepo } from "../../../Juno/JunoClient";
import { Keys, t } from "Localization";
import * as GitHubUtils from "../../../Utils/GitHubUtils";
import { useNotebook } from "../../Notebook/useNotebook";
@@ -96,8 +97,8 @@ export const CopyNotebookPaneComponent: FunctionComponent<CopyNotebookPaneProps>
return options;
};
const dropDownProps: IDropdownProps = {
label: "Location",
ariaLabel: "Location",
label: t(Keys.panes.copyNotebook.location),
ariaLabel: t(Keys.panes.copyNotebook.locationAriaLabel),
placeholder: "Select an option",
onRenderTitle: onRenderDropDownTitle,
onRenderOption: onRenderDropDownOption,
@@ -109,7 +110,7 @@ export const CopyNotebookPaneComponent: FunctionComponent<CopyNotebookPaneProps>
<div className="paneMainContent">
<Stack tokens={{ childrenGap: 10 }}>
<Stack.Item>
<Label htmlFor="notebookName">Name</Label>
<Label htmlFor="notebookName">{t(Keys.panes.copyNotebook.name)}</Label>
<Text id="notebookName">{name}</Text>
</Stack.Item>

View File

@@ -4,6 +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, t } from "Localization";
import { DefaultExperienceUtility } from "Shared/DefaultExperienceUtility";
import { Action, ActionModifiers } from "Shared/Telemetry/TelemetryConstants";
import * as TelemetryProcessor from "Shared/Telemetry/TelemetryProcessor";
@@ -34,12 +35,15 @@ export const DeleteCollectionConfirmationPane: FunctionComponent<DeleteCollectio
useDatabases.getState().isLastCollection() && !useDatabases.getState().findSelectedDatabase()?.isDatabaseShared();
const collectionName = getCollectionName().toLocaleLowerCase();
const paneTitle = "Delete " + collectionName;
const paneTitle = t(Keys.panes.deleteCollection.panelTitle, { collectionName });
const onSubmit = async (): Promise<void> => {
const collection = useSelectedNode.getState().findSelectedCollection();
if (!collection || inputCollectionName !== collection.id()) {
const errorMessage = "Input id " + inputCollectionName + " does not match the selected " + collection.id();
const errorMessage = t(Keys.panes.deleteCollection.inputMismatch, {
input: inputCollectionName,
selectedId: collection.id(),
});
setFormError(errorMessage);
NotificationConsoleUtils.logConsoleError(
`Error while deleting ${collectionName} ${collection.id()}: ${errorMessage}`,
@@ -106,18 +110,23 @@ export const DeleteCollectionConfirmationPane: FunctionComponent<DeleteCollectio
const props: RightPaneFormProps = {
formError: formError,
isExecuting,
submitButtonText: "OK",
submitButtonText: t(Keys.common.ok),
onSubmit,
};
const confirmContainer = `Confirm by typing the ${collectionName.toLowerCase()} id`;
const reasonInfo = `Help us improve Azure Cosmos DB! What is the reason why you are deleting this ${collectionName}?`;
const confirmContainer = t(Keys.panes.deleteCollection.confirmPrompt, {
collectionName: collectionName.toLowerCase(),
});
const reasonInfo =
t(Keys.panes.deleteCollection.feedbackTitle) +
" " +
t(Keys.panes.deleteCollection.feedbackReason, { collectionName });
return (
<RightPaneForm {...props}>
<div className="panelFormWrapper">
<div className="panelMainContent">
<div className="confirmDeleteInput">
<span className="mandatoryStar">* </span>
<Text variant="small">Confirm by typing the {collectionName.toLowerCase()} id</Text>
<Text variant="small">{confirmContainer}</Text>
<TextField
id="confirmCollectionId"
autoFocus
@@ -133,10 +142,10 @@ export const DeleteCollectionConfirmationPane: FunctionComponent<DeleteCollectio
{shouldRecordFeedback() && (
<div className="deleteCollectionFeedback">
<Text variant="small" block>
Help us improve Azure Cosmos DB!
{t(Keys.panes.deleteCollection.feedbackTitle)}
</Text>
<Text variant="small" block>
What is the reason why you are deleting this {collectionName}?
{t(Keys.panes.deleteCollection.feedbackReason, { collectionName })}
</Text>
<TextField
id="deleteCollectionFeedbackInput"

View File

@@ -34,9 +34,7 @@ exports[`Delete Collection Confirmation Pane submit() should call delete collect
<span
className="css-109"
>
Confirm by typing the
container
id
Confirm by typing the container id
</span>
</Text>
<StyledTextFieldBase

View File

@@ -5,6 +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, t } from "Localization";
import { DefaultExperienceUtility } from "Shared/DefaultExperienceUtility";
import { Action, ActionModifiers } from "Shared/Telemetry/TelemetryConstants";
import * as TelemetryProcessor from "Shared/Telemetry/TelemetryProcessor";
@@ -38,11 +39,19 @@ export const DeleteDatabaseConfirmationPanel: FunctionComponent<DeleteDatabaseCo
const submit = async (): Promise<void> => {
if (selectedDatabase?.id() && databaseInput !== selectedDatabase.id()) {
setFormError(
`Input ${getDatabaseName()} name "${databaseInput}" does not match the selected ${getDatabaseName()} "${selectedDatabase.id()}"`,
t(Keys.panes.deleteDatabase.inputMismatch, {
databaseName: getDatabaseName(),
input: databaseInput,
selectedId: selectedDatabase.id(),
}),
);
logConsoleError(`Error while deleting ${getDatabaseName()} ${selectedDatabase && selectedDatabase.id()}`);
logConsoleError(
`Input ${getDatabaseName()} name "${databaseInput}" does not match the selected ${getDatabaseName()} "${selectedDatabase.id()}"`,
t(Keys.panes.deleteDatabase.inputMismatch, {
databaseName: getDatabaseName(),
input: databaseInput,
selectedId: selectedDatabase.id(),
}),
);
return;
}
@@ -114,18 +123,20 @@ export const DeleteDatabaseConfirmationPanel: FunctionComponent<DeleteDatabaseCo
const props: RightPaneFormProps = {
formError,
isExecuting: isLoading,
submitButtonText: "OK",
submitButtonText: t(Keys.common.ok),
onSubmit: () => submit(),
};
const errorProps: PanelInfoErrorProps = {
messageType: "warning",
showErrorDetails: false,
message:
"Warning! The action you are about to take cannot be undone. Continuing will permanently delete this resource and all of its children resources.",
message: t(Keys.panes.deleteDatabase.warningMessage),
};
const confirmDatabase = `Confirm by typing the ${getDatabaseName()} id (name)`;
const reasonInfo = `Help us improve Azure Cosmos DB! What is the reason why you are deleting this ${getDatabaseName()}?`;
const confirmDatabase = t(Keys.panes.deleteDatabase.confirmPrompt, { databaseName: getDatabaseName() });
const reasonInfo =
t(Keys.panes.deleteDatabase.feedbackTitle) +
" " +
t(Keys.panes.deleteDatabase.feedbackReason, { databaseName: getDatabaseName() });
return (
<RightPaneForm {...props}>
{!formError && <PanelInfoErrorComponent {...errorProps} />}
@@ -148,10 +159,10 @@ export const DeleteDatabaseConfirmationPanel: FunctionComponent<DeleteDatabaseCo
{isLastNonEmptyDatabase() && (
<div className="deleteDatabaseFeedback">
<Text variant="small" block>
Help us improve Azure Cosmos DB!
{t(Keys.panes.deleteDatabase.feedbackTitle)}
</Text>
<Text variant="small" block>
What is the reason why you are deleting this {getDatabaseName()}?
{t(Keys.panes.deleteDatabase.feedbackReason, { databaseName: getDatabaseName() })}
</Text>
<TextField
id="deleteDatabaseFeedbackInput"

View File

@@ -3,6 +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, t } from "Localization";
import { logConsoleError } from "../../../Utils/NotificationConsoleUtils";
import StoredProcedure from "../../Tree/StoredProcedure";
import { RightPaneForm, RightPaneFormProps } from "../RightPaneForm/RightPaneForm";
@@ -45,8 +46,8 @@ export const ExecuteSprocParamsPane: FunctionComponent<ExecuteSprocParamsPanePro
};
const setInvalidParamError = (invalidParam: string): void => {
setFormError(`Invalid param specified: ${invalidParam}`);
logConsoleError(`Invalid param specified: ${invalidParam} is not a valid literal value`);
setFormError(t(Keys.panes.executeStoredProcedure.invalidParamError, { invalidParam }));
logConsoleError(t(Keys.panes.executeStoredProcedure.invalidParamConsoleError, { invalidParam }));
};
const submit = (): void => {
@@ -96,7 +97,7 @@ export const ExecuteSprocParamsPane: FunctionComponent<ExecuteSprocParamsPanePro
const props: RightPaneFormProps = {
formError: formError,
isExecuting: isLoading,
submitButtonText: "Execute",
submitButtonText: t(Keys.common.execute),
onSubmit: () => submit(),
};
@@ -107,9 +108,9 @@ export const ExecuteSprocParamsPane: FunctionComponent<ExecuteSprocParamsPanePro
inputParameters.push(
<InputParameter
key={paramKeyValue.text + i}
dropdownLabel={i === 0 ? "Key" : ""}
inputParameterTitle={i === 0 ? "Enter input parameters (if any)" : ""}
inputLabel={i === 0 ? "Param" : ""}
dropdownLabel={i === 0 ? t(Keys.panes.executeStoredProcedure.key) : ""}
inputParameterTitle={i === 0 ? t(Keys.panes.executeStoredProcedure.enterInputParameters) : ""}
inputLabel={i === 0 ? t(Keys.panes.executeStoredProcedure.param) : ""}
isAddRemoveVisible={true}
onDeleteParamKeyPress={() => deleteParamAtIndex(i)}
onAddNewParamKeyPress={() => addNewParamAtIndex(i + 1)}
@@ -130,9 +131,9 @@ export const ExecuteSprocParamsPane: FunctionComponent<ExecuteSprocParamsPanePro
<RightPaneForm {...props}>
<div className="panelMainContent">
<InputParameter
dropdownLabel="Key"
inputParameterTitle="Partition key value"
inputLabel="Value"
dropdownLabel={t(Keys.panes.executeStoredProcedure.key)}
inputParameterTitle={t(Keys.panes.executeStoredProcedure.partitionKeyValue)}
inputLabel={t(Keys.panes.executeStoredProcedure.value)}
isAddRemoveVisible={false}
onParamValueChange={(_event, newInput?: string) => (partitionValueRef.current = newInput)}
onParamKeyChange={(_event: React.FormEvent<HTMLDivElement>, item: IDropdownOption) =>
@@ -143,8 +144,8 @@ export const ExecuteSprocParamsPane: FunctionComponent<ExecuteSprocParamsPanePro
/>
{getInputParameterComponent()}
<Stack horizontal onClick={() => addNewParamAtLastIndex()} tabIndex={0}>
<Image {...imageProps} src={AddPropertyIcon} alt="Add param" />
<Text className="addNewParamStyle">Add New Param</Text>
<Image {...imageProps} src={AddPropertyIcon} alt={t(Keys.panes.executeStoredProcedure.addParam)} />
<Text className="addNewParamStyle">{t(Keys.panes.executeStoredProcedure.addNewParam)}</Text>
</Stack>
</div>
</RightPaneForm>

View File

@@ -11,6 +11,7 @@ import {
import React, { FunctionComponent } from "react";
import AddPropertyIcon from "../../../../images/Add-property.svg";
import EntityCancelIcon from "../../../../images/Entity_cancel.svg";
import { Keys, t } from "Localization";
const dropdownStyles: Partial<IDropdownStyles> = { dropdown: { width: 100 } };
const options = [
@@ -74,7 +75,7 @@ export const InputParameter: FunctionComponent<InputParameterProps> = ({
<Image
{...imageProps}
src={EntityCancelIcon}
alt="Delete param"
alt={t(Keys.panes.executeStoredProcedure.deleteParam)}
id="deleteparam"
role="button"
onClick={onDeleteParamKeyPress}
@@ -84,7 +85,7 @@ export const InputParameter: FunctionComponent<InputParameterProps> = ({
<Image
{...imageProps}
src={AddPropertyIcon}
alt="Add param"
alt={t(Keys.panes.executeStoredProcedure.addParam)}
id="addparam"
role="button"
onClick={onAddNewParamKeyPress}

View File

@@ -1,5 +1,6 @@
import React, { FunctionComponent } from "react";
import * as ViewModels from "../../../Contracts/ViewModels";
import { Keys, t } from "Localization";
import { useSidePanel } from "../../../hooks/useSidePanel";
import { GraphStyleComponent } from "../../Graph/GraphStyleComponent/GraphStyleComponent";
import { IGraphConfig } from "../../Tabs/GraphTab";
@@ -17,7 +18,7 @@ export const GraphStylingPanel: FunctionComponent<GraphStylingProps> = ({
}: GraphStylingProps): JSX.Element => {
const closeSidePanel = useSidePanel((state) => state.closeSidePanel);
const buttonLabel = "Ok";
const buttonLabel = t(Keys.common.ok);
const submit = (event: React.FormEvent<HTMLFormElement>) => {
event.preventDefault();

View File

@@ -5,6 +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, t } from "Localization";
import { userContext } from "../../../UserContext";
import { logConsoleError, logConsoleInfo, logConsoleProgress } from "../../../Utils/NotificationConsoleUtils";
import { useSelectedNode } from "../../useSelectedNode";
@@ -33,8 +34,8 @@ export const LoadQueryPane: FunctionComponent = (): JSX.Element => {
const submit = async (): Promise<void> => {
setFormError("");
if (!selectedFiles || selectedFiles.length === 0) {
setFormError("No file specified");
logConsoleError("Could not load query -- No file specified. Please input a file.");
setFormError(t(Keys.panes.loadQuery.noFileSpecifiedError));
logConsoleError(t(Keys.panes.loadQuery.noFileSpecifiedError));
return;
}
@@ -48,7 +49,7 @@ export const LoadQueryPane: FunctionComponent = (): JSX.Element => {
setLoadingFalse();
} catch (error) {
setLoadingFalse();
setFormError("Failed to load query");
setFormError(t(Keys.panes.loadQuery.failedToLoadQueryError));
logConsoleError(`Failed to load query from file ${file.name}: ${error}`);
}
};
@@ -71,7 +72,7 @@ export const LoadQueryPane: FunctionComponent = (): JSX.Element => {
};
reader.onerror = (): void => {
setFormError("Failed to load query");
setFormError(t(Keys.panes.loadQuery.failedToLoadQueryFromFileError, { fileName: file.name }));
logConsoleError(`Failed to load query from file ${file.name}`);
};
return reader.readAsText(file);
@@ -79,7 +80,7 @@ export const LoadQueryPane: FunctionComponent = (): JSX.Element => {
const props: RightPaneFormProps = {
formError: formError,
isExecuting: isLoading,
submitButtonText: "Load",
submitButtonText: t(Keys.common.load),
onSubmit: () => submit(),
};
@@ -90,7 +91,7 @@ export const LoadQueryPane: FunctionComponent = (): JSX.Element => {
<Stack horizontal>
<TextField
id="confirmCollectionId"
label="Select a query document"
label={t(Keys.panes.loadQuery.selectFilesToOpen)}
value={selectedFileName}
autoFocus
readOnly

View File

@@ -1,6 +1,7 @@
import { useBoolean } from "@fluentui/react-hooks";
import React, { FunctionComponent, useState } from "react";
import * as ViewModels from "../../../Contracts/ViewModels";
import { Keys, t } from "Localization";
import { useSidePanel } from "../../../hooks/useSidePanel";
import { NewVertexComponent } from "../../Graph/NewVertexComponent/NewVertexComponent";
import { RightPaneForm, RightPaneFormProps } from "../RightPaneForm/RightPaneForm";
@@ -41,7 +42,7 @@ export const NewVertexPanel: FunctionComponent<INewVertexPanelProps> = ({
const props: RightPaneFormProps = {
formError: errorMessage,
isExecuting: isLoading,
submitButtonText: "OK",
submitButtonText: t(Keys.common.ok),
onSubmit: () => submit(),
};

View File

@@ -1,4 +1,5 @@
import { Icon, Link, Stack, Text } from "@fluentui/react";
import { Keys, t } from "Localization";
import React from "react";
import { useNotificationConsole } from "../../hooks/useNotificationConsole";
@@ -20,13 +21,17 @@ export const PanelInfoErrorComponent: React.FunctionComponent<PanelInfoErrorProp
}: PanelInfoErrorProps): JSX.Element => {
const expandConsole = useNotificationConsole((state) => state.expandConsole);
let icon: JSX.Element = <Icon iconName="InfoSolid" className="panelLargeInfoIcon" aria-label="Infomation" />;
let icon: JSX.Element = (
<Icon iconName="InfoSolid" className="panelLargeInfoIcon" aria-label={t(Keys.panes.panelInfo.information)} />
);
if (messageType === "error") {
icon = <Icon iconName="StatusErrorFull" className="panelErrorIcon" aria-label="error" />;
} else if (messageType === "warning") {
icon = <Icon iconName="WarningSolid" className="panelWarningIcon" aria-label="warning" />;
} else if (messageType === "info") {
icon = <Icon iconName="InfoSolid" className="panelLargeInfoIcon" aria-label="Infomation" />;
icon = (
<Icon iconName="InfoSolid" className="panelLargeInfoIcon" aria-label={t(Keys.panes.panelInfo.information)} />
);
}
return (
@@ -43,7 +48,7 @@ export const PanelInfoErrorComponent: React.FunctionComponent<PanelInfoErrorProp
</Text>
{showErrorDetails && (
<a className="paneErrorLink" role="button" onClick={expandConsole} tabIndex={0} onKeyPress={expandConsole}>
More details
{t(Keys.panes.panelInfo.moreDetails)}
</a>
)}
</span>

View File

@@ -5,6 +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, t } from "Localization";
import { Action } from "../../../Shared/Telemetry/TelemetryConstants";
import { traceFailure, traceStart, traceSuccess } from "../../../Shared/Telemetry/TelemetryProcessor";
import * as NotificationConsoleUtils from "../../../Utils/NotificationConsoleUtils";
@@ -91,7 +92,7 @@ export const PublishNotebookPane: FunctionComponent<PublishNotebookPaneAProps> =
let startKey: number;
if (!notebookName || !notebookDescription || !author || !imageSrc) {
setFormError(`Failed to publish ${notebookName} to gallery`);
setFormError(t(Keys.panes.publishNotebook.publishFailedError, { notebookName }));
setFormErrorDetail("Name, description, author and cover image are required");
createFormError(formError, formErrorDetail, "PublishNotebookPaneAdapter/submit");
setIsExecuting(false);
@@ -143,7 +144,11 @@ export const PublishNotebookPane: FunctionComponent<PublishNotebookPaneAProps> =
);
const errorMessage = getErrorMessage(error);
setFormError(`Failed to publish ${FileSystemUtil.stripExtension(notebookName, "ipynb")} to gallery`);
setFormError(
t(Keys.panes.publishNotebook.publishFailedError, {
notebookName: FileSystemUtil.stripExtension(notebookName, "ipynb"),
}),
);
setFormErrorDetail(`${errorMessage}`);
handleError(errorMessage, "PublishNotebookPaneAdapter/submit", formError);
return;

View File

@@ -1,6 +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, t } from "Localization";
import { GalleryCardComponent } from "../../Controls/NotebookGallery/Cards/GalleryCardComponent";
import * as FileSystemUtil from "../../Notebook/FileSystemUtil";
import { SnapshotRequest } from "../../Notebook/NotebookComponent/types";
@@ -57,13 +58,11 @@ export const PublishNotebookPaneComponent: FunctionComponent<PublishNotebookPane
const maxImageSizeInMib = 1.5;
const descriptionPara1 =
"When published, this notebook will appear in the Azure Cosmos DB notebooks public gallery. Make sure you have removed any sensitive data or output before publishing.";
const descriptionPara1 = t(Keys.panes.publishNotebook.publishDescription);
const descriptionPara2 = `Would you like to publish and share "${FileSystemUtil.stripExtension(
notebookName,
"ipynb",
)}" to the gallery?`;
const descriptionPara2 = t(Keys.panes.publishNotebook.publishPrompt, {
name: FileSystemUtil.stripExtension(notebookName, "ipynb"),
});
const options: ImageTypes[] = [ImageTypes.CustomImage, ImageTypes.Url];
if (onTakeSnapshot) {
@@ -74,9 +73,9 @@ export const PublishNotebookPaneComponent: FunctionComponent<PublishNotebookPane
}
const thumbnailSelectorProps: IDropdownProps = {
label: "Cover image",
label: t(Keys.panes.publishNotebook.coverImage),
selectedKey: type,
ariaLabel: "Cover image",
ariaLabel: t(Keys.panes.publishNotebook.coverImage),
options: options.map((value: string) => ({ text: value, key: value })),
onChange: async (event, options) => {
setImageSrc("");
@@ -99,7 +98,7 @@ export const PublishNotebookPaneComponent: FunctionComponent<PublishNotebookPane
notebookContentRef,
});
} else {
firstOutputErrorHandler(new Error("Output does not exist for any of the cells."));
firstOutputErrorHandler(new Error(t(Keys.panes.publishNotebook.outputDoesNotExist)));
}
}
setType(options.text);
@@ -107,8 +106,8 @@ export const PublishNotebookPaneComponent: FunctionComponent<PublishNotebookPane
};
const thumbnailUrlProps: ITextFieldProps = {
label: "Cover image url",
ariaLabel: "Cover image url",
label: t(Keys.panes.publishNotebook.coverImageUrl),
ariaLabel: t(Keys.panes.publishNotebook.coverImageUrl),
required: true,
onChange: (event, newValue) => {
setImageSrc(newValue);
@@ -116,7 +115,7 @@ export const PublishNotebookPaneComponent: FunctionComponent<PublishNotebookPane
};
const firstOutputErrorHandler = (error: Error) => {
const formError = "Failed to capture first output";
const formError = t(Keys.panes.publishNotebook.failedToCaptureOutput);
const formErrorDetail = `${error}`;
const area = "PublishNotebookPaneComponent/UseFirstOutput";
onError(formError, formErrorDetail, area);
@@ -130,7 +129,7 @@ export const PublishNotebookPaneComponent: FunctionComponent<PublishNotebookPane
};
reader.onerror = (error) => {
const formError = `Failed to convert ${file.name} to base64 format`;
const formError = t(Keys.panes.publishNotebook.failedToConvertError, { fileName: file.name });
const formErrorDetail = `${error}`;
const area = "PublishNotebookPaneComponent/selectImageFile";
onError(formError, formErrorDetail, area);
@@ -151,7 +150,7 @@ export const PublishNotebookPaneComponent: FunctionComponent<PublishNotebookPane
const file = event.target.files[0];
if (file.size / 1024 ** 2 > maxImageSizeInMib) {
event.target.value = "";
const formError = `Failed to upload ${file.name}`;
const formError = t(Keys.panes.publishNotebook.failedToUploadError, { fileName: file.name });
const formErrorDetail = `Image is larger than ${maxImageSizeInMib} MiB. Please Choose a different image.`;
const area = "PublishNotebookPaneComponent/selectImageFile";
@@ -185,8 +184,8 @@ export const PublishNotebookPaneComponent: FunctionComponent<PublishNotebookPane
<Stack.Item>
<TextField
label="Name"
ariaLabel="Name"
label={t(Keys.panes.publishNotebook.name)}
ariaLabel={t(Keys.panes.publishNotebook.name)}
defaultValue={FileSystemUtil.stripExtension(notebookName, "ipynb")}
required
onChange={(event, newValue) => {
@@ -198,8 +197,8 @@ export const PublishNotebookPaneComponent: FunctionComponent<PublishNotebookPane
<Stack.Item>
<TextField
label="Description"
ariaLabel="Description"
label={t(Keys.panes.publishNotebook.description)}
ariaLabel={t(Keys.panes.publishNotebook.description)}
multiline
rows={3}
required
@@ -211,9 +210,9 @@ export const PublishNotebookPaneComponent: FunctionComponent<PublishNotebookPane
<Stack.Item>
<TextField
label="Tags"
ariaLabel="Tags"
placeholder="Optional tag 1, Optional tag 2"
label={t(Keys.panes.publishNotebook.tags)}
ariaLabel={t(Keys.panes.publishNotebook.tags)}
placeholder={t(Keys.panes.publishNotebook.tagsPlaceholder)}
onChange={(event, newValue) => {
setNotebookTags(newValue);
}}
@@ -227,7 +226,7 @@ export const PublishNotebookPaneComponent: FunctionComponent<PublishNotebookPane
<Stack.Item>{renderThumbnailSelectors(type)}</Stack.Item>
<Stack.Item>
<Text>Preview</Text>
<Text>{t(Keys.panes.publishNotebook.preview)}</Text>
</Stack.Item>
<Stack.Item>
<GalleryCardComponent

View File

@@ -4,6 +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, t } from "Localization";
import { Action } from "../../../Shared/Telemetry/TelemetryConstants";
import { traceFailure, traceStart, traceSuccess } from "../../../Shared/Telemetry/TelemetryProcessor";
import { logConsoleError } from "../../../Utils/NotificationConsoleUtils";
@@ -28,27 +29,27 @@ export const SaveQueryPane: FunctionComponent<SaveQueryPaneProps> = ({
const [formError, setFormError] = useState<string>("");
const [queryName, setQueryName] = useState<string>("");
const setupSaveQueriesText = `For compliance reasons, we save queries in a container in your Azure Cosmos account, in a separate database called “${SavedQueries.DatabaseName}”. To proceed, we need to create a container in your account, estimated additional cost is $0.77 daily.`;
const title = "Save Query";
const setupSaveQueriesText = t(Keys.panes.saveQuery.setupCostMessage, { databaseName: SavedQueries.DatabaseName });
const title = t(Keys.panes.saveQuery.panelTitle);
const isSaveQueryEnabled = useDatabases((state) => state.isSaveQueryEnabled);
const submit = async (): Promise<void> => {
setFormError("");
if (!isSaveQueryEnabled()) {
setFormError("Cannot save query");
logConsoleError("Failed to save query: account not setup to save queries");
logConsoleError(t(Keys.panes.saveQuery.accountNotSetupError));
}
const queryTab = useTabs.getState().activeTab as NewQueryTab;
const query: string = queryToSave || queryTab?.iTabAccessor.onSaveClickEvent();
if (!queryName || queryName.length === 0) {
setFormError("No query name specified");
logConsoleError("Could not save query -- No query name specified. Please specify a query name.");
setFormError(t(Keys.panes.saveQuery.noQueryNameError));
logConsoleError(t(Keys.panes.saveQuery.noQueryNameError));
return;
} else if (!query || query.length === 0) {
setFormError("Invalid query content specified");
logConsoleError("Could not save query -- Invalid query content specified. Please enter query content.");
setFormError(t(Keys.panes.saveQuery.invalidQueryContentError));
logConsoleError(t(Keys.panes.saveQuery.invalidQueryContentError));
return;
}
@@ -80,8 +81,8 @@ export const SaveQueryPane: FunctionComponent<SaveQueryPaneProps> = ({
} catch (error) {
setLoadingFalse();
const errorMessage = getErrorMessage(error);
setFormError("Failed to save query");
logConsoleError(`Failed to save query: ${errorMessage}`);
setFormError(t(Keys.panes.saveQuery.failedToSaveQueryError, { queryName }));
logConsoleError(t(Keys.panes.saveQuery.failedToSaveQueryError, { queryName }) + ": " + errorMessage);
traceFailure(
Action.SaveQuery,
{
@@ -126,8 +127,8 @@ export const SaveQueryPane: FunctionComponent<SaveQueryPaneProps> = ({
},
startKey,
);
setFormError("Failed to setup a container for saved queries");
logConsoleError(`Failed to setup a container for saved queries: ${errorMessage}`);
setFormError(t(Keys.panes.saveQuery.failedToSetupContainerError));
logConsoleError(t(Keys.panes.saveQuery.failedToSetupContainerError) + ": " + errorMessage);
} finally {
setLoadingFalse();
}
@@ -136,7 +137,7 @@ export const SaveQueryPane: FunctionComponent<SaveQueryPaneProps> = ({
const props: RightPaneFormProps = {
formError: formError,
isExecuting: isLoading,
submitButtonText: isSaveQueryEnabled() ? "Save" : "Complete setup",
submitButtonText: isSaveQueryEnabled() ? t(Keys.common.save) : t(Keys.panes.saveQuery.completeSetup),
onSubmit: () => {
isSaveQueryEnabled() ? submit() : setupQueries();
},
@@ -160,7 +161,7 @@ export const SaveQueryPane: FunctionComponent<SaveQueryPaneProps> = ({
) : (
<TextField
id="saveQueryInput"
label="Name"
label={t(Keys.panes.saveQuery.name)}
autoFocus
styles={{ fieldGroup: { width: 300 } }}
onChange={(event, newInput?: string) => {

View File

@@ -24,6 +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, t } from "Localization";
import { isFabric, isFabricNative } from "Platform/Fabric/FabricUtil";
import {
AppStateComponentNames,
@@ -235,7 +236,7 @@ export const SettingsPane: FunctionComponent<{ explorer: Explorer }> = ({
const regionOptions: IDropdownOption[] = [];
regionOptions.push({
key: userContext?.databaseAccount?.properties?.documentEndpoint,
text: `Global (Default)`,
text: t(Keys.panes.settings.globalDefault),
data: {
isGlobal: true,
writeEnabled: true,
@@ -246,7 +247,7 @@ export const SettingsPane: FunctionComponent<{ explorer: Explorer }> = ({
uniqueAccountRegions.add(loc.locationName);
regionOptions.push({
key: loc.documentEndpoint,
text: `${loc.locationName} (Read/Write)`,
text: `${loc.locationName} ${t(Keys.panes.settings.readWrite)}`,
data: {
isGlobal: false,
writeEnabled: true,
@@ -259,7 +260,7 @@ export const SettingsPane: FunctionComponent<{ explorer: Explorer }> = ({
uniqueAccountRegions.add(loc.locationName);
regionOptions.push({
key: loc.documentEndpoint,
text: `${loc.locationName} (Read)`,
text: `${loc.locationName} ${t(Keys.panes.settings.read)}`,
data: {
isGlobal: false,
writeEnabled: false,
@@ -317,13 +318,9 @@ export const SettingsPane: FunctionComponent<{ explorer: Explorer }> = ({
authError instanceof msalAuthError &&
authError.errorCode === msalBrowserAuthErrorMessage.popUpWindowError.code
) {
logConsoleError(
`We were unable to establish authorization for this account, due to pop-ups being disabled in the browser.\nPlease enable pop-ups for this site and click on "Login for Entra ID" button`,
);
logConsoleError(t(Keys.panes.settings.popupsDisabledError));
} else {
logConsoleError(
`"Failed to acquire authorization token automatically. Please click on "Login for Entra ID" button to enable Entra ID RBAC operations`,
);
logConsoleError(t(Keys.panes.settings.failedToAcquireTokenError));
}
}
} else {
@@ -485,33 +482,33 @@ export const SettingsPane: FunctionComponent<{ explorer: Explorer }> = ({
const genericPaneProps: RightPaneFormProps = {
formError: "",
isExecuting,
submitButtonText: "Apply",
submitButtonText: t(Keys.common.apply),
onSubmit: () => handlerOnSubmit(),
};
const pageOptionList: IChoiceGroupOption[] = [
{ key: Constants.Queries.CustomPageOption, text: "Custom" },
{ key: Constants.Queries.UnlimitedPageOption, text: "Unlimited" },
{ key: Constants.Queries.CustomPageOption, text: t(Keys.panes.settings.custom) },
{ key: Constants.Queries.UnlimitedPageOption, text: t(Keys.panes.settings.unlimited) },
];
const graphAutoOptionList: IChoiceGroupOption[] = [
{ key: "false", text: "Graph" },
{ key: "true", text: "JSON" },
{ key: "false", text: t(Keys.panes.settings.graph) },
{ key: "true", text: t(Keys.panes.settings.json) },
];
const priorityLevelOptionList: IChoiceGroupOption[] = [
{ key: Constants.PriorityLevel.Low, text: "Low" },
{ key: Constants.PriorityLevel.High, text: "High" },
{ key: Constants.PriorityLevel.Low, text: t(Keys.panes.settings.low) },
{ key: Constants.PriorityLevel.High, text: t(Keys.panes.settings.high) },
];
const dataPlaneRBACOptionsList: IChoiceGroupOption[] = [
{ key: Constants.RBACOptions.setAutomaticRBACOption, text: "Automatic" },
{ key: Constants.RBACOptions.setTrueRBACOption, text: "True" },
{ key: Constants.RBACOptions.setFalseRBACOption, text: "False" },
{ key: Constants.RBACOptions.setAutomaticRBACOption, text: t(Keys.panes.settings.automatic) },
{ key: Constants.RBACOptions.setTrueRBACOption, text: t(Keys.panes.settings["true"]) },
{ key: Constants.RBACOptions.setFalseRBACOption, text: t(Keys.panes.settings["false"]) },
];
const defaultQueryResultsViewOptionList: IChoiceGroupOption[] = [
{ key: SplitterDirection.Vertical, text: "Vertical" },
{ key: SplitterDirection.Horizontal, text: "Horizontal" },
{ key: SplitterDirection.Vertical, text: t(Keys.tabs.query.vertical) },
{ key: SplitterDirection.Horizontal, text: t(Keys.tabs.query.horizontal) },
];
const mongoGuidRepresentationDropdownOptions: IDropdownOption[] = [
@@ -724,13 +721,12 @@ export const SettingsPane: FunctionComponent<{ explorer: Explorer }> = ({
{shouldShowQueryPageOptions && (
<AccordionItem value="1">
<AccordionHeader>
<div className={styles.header}>Page Options</div>
<div className={styles.header}>{t(Keys.panes.settings.pageOptions)}</div>
</AccordionHeader>
<AccordionPanel>
<div className={styles.settingsSectionContainer}>
<div className={styles.settingsSectionDescription}>
Choose Custom to specify a fixed amount of query results to show, or choose Unlimited to show as
many query results per page.
{t(Keys.panes.settings.pageOptionsDescription)}
</div>
<ChoiceGroup
ariaLabelledBy="pageOptions"
@@ -744,14 +740,14 @@ export const SettingsPane: FunctionComponent<{ explorer: Explorer }> = ({
{isCustomPageOptionSelected() && (
<div className="tabcontent">
<div className={styles.settingsSectionDescription}>
Query results per page{" "}
{t(Keys.panes.settings.queryResultsPerPage)}{" "}
<InfoTooltip className={styles.headerIcon}>
Enter the number of query results that should be shown per page.
{t(Keys.panes.settings.queryResultsPerPageTooltip)}
</InfoTooltip>
</div>
<SpinButton
ariaLabel="Custom query items per page"
ariaLabel={t(Keys.panes.settings.customQueryItemsPerPage)}
value={"" + customItemPerPage}
onIncrement={(newValue) => {
setCustomItemPerPage(parseInt(newValue) + 1 || customItemPerPage);
@@ -761,8 +757,8 @@ export const SettingsPane: FunctionComponent<{ explorer: Explorer }> = ({
min={1}
step={1}
className="textfontclr"
incrementButtonAriaLabel="Increase value by 1"
decrementButtonAriaLabel="Decrease value by 1"
incrementButtonAriaLabel={t(Keys.common.increaseValueBy1)}
decrementButtonAriaLabel={t(Keys.common.decreaseValueBy1)}
styles={spinButtonStyles}
/>
</div>
@@ -774,20 +770,19 @@ export const SettingsPane: FunctionComponent<{ explorer: Explorer }> = ({
{showEnableEntraIdRbac && (
<AccordionItem value="2">
<AccordionHeader>
<div className={styles.header}>Enable Entra ID RBAC</div>
<div className={styles.header}>{t(Keys.panes.settings.entraIdRbac)}</div>
</AccordionHeader>
<AccordionPanel>
<div className={styles.settingsSectionContainer}>
<div className={styles.settingsSectionDescription}>
Choose Automatic to enable Entra ID RBAC automatically. True/False to force enable/disable Entra
ID RBAC.
{t(Keys.panes.settings.entraIdRbacDescription)}
<a
href="https://learn.microsoft.com/en-us/azure/cosmos-db/how-to-setup-rbac#use-data-explorer"
target="_blank"
rel="noopener noreferrer"
>
{" "}
Learn more{" "}
{t(Keys.common.learnMore)}{" "}
</a>
</div>
<ChoiceGroup
@@ -804,17 +799,17 @@ export const SettingsPane: FunctionComponent<{ explorer: Explorer }> = ({
{userContext.apiType === "SQL" && userContext.authType === AuthType.AAD && !isFabric() && (
<AccordionItem value="3">
<AccordionHeader>
<div className={styles.header}>Region Selection</div>
<div className={styles.header}>{t(Keys.panes.settings.regionSelection)}</div>
</AccordionHeader>
<AccordionPanel>
<div className={styles.settingsSectionContainer}>
<div className={styles.settingsSectionDescription}>
Changes region the Cosmos Client uses to access account.
{t(Keys.panes.settings.regionSelectionDescription)}
</div>
<div>
<span className={styles.subHeader}>Select Region</span>
<span className={styles.subHeader}>{t(Keys.panes.settings.selectRegion)}</span>
<InfoTooltip className={styles.headerIcon}>
Changes the account endpoint used to perform client operations.
{t(Keys.panes.settings.selectRegionTooltip)}
</InfoTooltip>
</div>
<Dropdown
@@ -865,17 +860,16 @@ export const SettingsPane: FunctionComponent<{ explorer: Explorer }> = ({
<>
<AccordionItem value="4">
<AccordionHeader>
<div className={styles.header}>Query Timeout</div>
<div className={styles.header}>{t(Keys.panes.settings.queryTimeout)}</div>
</AccordionHeader>
<AccordionPanel>
<div className={styles.settingsSectionContainer}>
<div className={styles.settingsSectionDescription}>
When a query reaches a specified time limit, a popup with an option to cancel the query will
show unless automatic cancellation has been enabled.
{t(Keys.panes.settings.queryTimeoutDescription)}
</div>
<Toggle
styles={toggleStyles}
label="Enable query timeout"
label={t(Keys.panes.settings.enableQueryTimeout)}
onChange={handleOnQueryTimeoutToggleChange}
defaultChecked={queryTimeoutEnabled}
/>
@@ -883,18 +877,18 @@ export const SettingsPane: FunctionComponent<{ explorer: Explorer }> = ({
{queryTimeoutEnabled && (
<div className={styles.settingsSectionContainer}>
<SpinButton
label="Query timeout (ms)"
label={t(Keys.panes.settings.queryTimeoutMs)}
labelPosition={Position.top}
defaultValue={(queryTimeout || 5000).toString()}
min={100}
step={1000}
onChange={handleOnQueryTimeoutSpinButtonChange}
incrementButtonAriaLabel="Increase value by 1000"
decrementButtonAriaLabel="Decrease value by 1000"
incrementButtonAriaLabel={t(Keys.panes.settings.increaseValueBy1000)}
decrementButtonAriaLabel={t(Keys.panes.settings.decreaseValueBy1000)}
styles={spinButtonStyles}
/>
<Toggle
label="Automatically cancel query after timeout"
label={t(Keys.panes.settings.automaticallyCancelQuery)}
styles={toggleStyles}
onChange={handleOnAutomaticallyCancelQueryToggleChange}
defaultChecked={automaticallyCancelQueryAfterTimeout}
@@ -905,16 +899,16 @@ export const SettingsPane: FunctionComponent<{ explorer: Explorer }> = ({
</AccordionItem>
<AccordionItem value="5">
<AccordionHeader>
<div className={styles.header}>RU Limit</div>
<div className={styles.header}>{t(Keys.panes.settings.ruLimit)}</div>
</AccordionHeader>
<AccordionPanel>
<div className={styles.settingsSectionContainer}>
<div className={styles.settingsSectionDescription}>
If a query exceeds a configured RU limit, the query will be aborted.
{t(Keys.panes.settings.ruLimitDescription)}
</div>
<Toggle
styles={toggleStyles}
label="Enable RU limit"
label={t(Keys.panes.settings.enableRuLimit)}
onChange={handleOnRUThresholdToggleChange}
defaultChecked={ruThresholdEnabled}
/>
@@ -922,14 +916,14 @@ export const SettingsPane: FunctionComponent<{ explorer: Explorer }> = ({
{ruThresholdEnabled && (
<div className={styles.settingsSectionContainer}>
<SpinButton
label="RU Limit (RU)"
label={t(Keys.panes.settings.ruLimitLabel)}
labelPosition={Position.top}
defaultValue={(ruThreshold || DefaultRUThreshold).toString()}
min={1}
step={1000}
onChange={handleOnRUThresholdSpinButtonChange}
incrementButtonAriaLabel="Increase value by 1000"
decrementButtonAriaLabel="Decrease value by 1000"
incrementButtonAriaLabel={t(Keys.panes.settings.increaseValueBy1000)}
decrementButtonAriaLabel={t(Keys.panes.settings.decreaseValueBy1000)}
styles={spinButtonStyles}
/>
</div>
@@ -939,12 +933,12 @@ export const SettingsPane: FunctionComponent<{ explorer: Explorer }> = ({
<AccordionItem value="6">
<AccordionHeader>
<div className={styles.header}>Default Query Results View</div>
<div className={styles.header}>{t(Keys.panes.settings.defaultQueryResults)}</div>
</AccordionHeader>
<AccordionPanel>
<div className={styles.settingsSectionContainer}>
<div className={styles.settingsSectionDescription}>
Select the default view to use when displaying query results.
{t(Keys.panes.settings.defaultQueryResultsDescription)}
</div>
<ChoiceGroup
ariaLabelledBy="defaultQueryResultsView"
@@ -962,17 +956,17 @@ export const SettingsPane: FunctionComponent<{ explorer: Explorer }> = ({
{showRetrySettings && (
<AccordionItem value="7">
<AccordionHeader>
<div className={styles.header}>Retry Settings</div>
<div className={styles.header}>{t(Keys.panes.settings.retrySettings)}</div>
</AccordionHeader>
<AccordionPanel>
<div className={styles.settingsSectionContainer}>
<div className={styles.settingsSectionDescription}>
Retry policy associated with throttled requests during CosmosDB queries.
{t(Keys.panes.settings.retrySettingsDescription)}
</div>
<div>
<span className={styles.subHeader}>Max retry attempts</span>
<span className={styles.subHeader}>{t(Keys.panes.settings.maxRetryAttempts)}</span>
<InfoTooltip className={styles.headerIcon}>
Max number of retries to be performed for a request. Default value 9.
{t(Keys.panes.settings.maxRetryAttemptsTooltip)}
</InfoTooltip>
</div>
<SpinButton
@@ -981,18 +975,17 @@ export const SettingsPane: FunctionComponent<{ explorer: Explorer }> = ({
step={1}
value={"" + retryAttempts}
onChange={handleOnQueryRetryAttemptsSpinButtonChange}
incrementButtonAriaLabel="Increase value by 1"
decrementButtonAriaLabel="Decrease value by 1"
incrementButtonAriaLabel={t(Keys.common.increaseValueBy1)}
decrementButtonAriaLabel={t(Keys.common.decreaseValueBy1)}
onIncrement={(newValue) => setRetryAttempts(parseInt(newValue) + 1 || retryAttempts)}
onDecrement={(newValue) => setRetryAttempts(parseInt(newValue) - 1 || retryAttempts)}
onValidate={(newValue) => setRetryAttempts(parseInt(newValue) || retryAttempts)}
styles={spinButtonStyles}
/>
<div>
<span className={styles.subHeader}>Fixed retry interval (ms)</span>
<span className={styles.subHeader}>{t(Keys.panes.settings.fixedRetryInterval)}</span>
<InfoTooltip className={styles.headerIcon}>
Fixed retry interval in milliseconds to wait between each retry ignoring the retryAfter returned
as part of the response. Default value is 0 milliseconds.
{t(Keys.panes.settings.fixedRetryIntervalTooltip)}
</InfoTooltip>
</div>
<SpinButton
@@ -1001,18 +994,17 @@ export const SettingsPane: FunctionComponent<{ explorer: Explorer }> = ({
step={1000}
value={"" + retryInterval}
onChange={handleOnRetryIntervalSpinButtonChange}
incrementButtonAriaLabel="Increase value by 1000"
decrementButtonAriaLabel="Decrease value by 1000"
incrementButtonAriaLabel={t(Keys.panes.settings.increaseValueBy1000)}
decrementButtonAriaLabel={t(Keys.panes.settings.decreaseValueBy1000)}
onIncrement={(newValue) => setRetryInterval(parseInt(newValue) + 1000 || retryInterval)}
onDecrement={(newValue) => setRetryInterval(parseInt(newValue) - 1000 || retryInterval)}
onValidate={(newValue) => setRetryInterval(parseInt(newValue) || retryInterval)}
styles={spinButtonStyles}
/>
<div>
<span className={styles.subHeader}>Max wait time (s)</span>
<span className={styles.subHeader}>{t(Keys.panes.settings.maxWaitTime)}</span>
<InfoTooltip className={styles.headerIcon}>
Max wait time in seconds to wait for a request while the retries are happening. Default value 30
seconds.
{t(Keys.panes.settings.maxWaitTimeTooltip)}
</InfoTooltip>
</div>
<SpinButton
@@ -1021,8 +1013,8 @@ export const SettingsPane: FunctionComponent<{ explorer: Explorer }> = ({
step={1}
value={"" + MaxWaitTimeInSeconds}
onChange={handleOnMaxWaitTimeSpinButtonChange}
incrementButtonAriaLabel="Increase value by 1"
decrementButtonAriaLabel="Decrease value by 1"
incrementButtonAriaLabel={t(Keys.common.increaseValueBy1)}
decrementButtonAriaLabel={t(Keys.common.decreaseValueBy1)}
onIncrement={(newValue) =>
setMaxWaitTimeInSeconds(parseInt(newValue) + 1 || MaxWaitTimeInSeconds)
}
@@ -1039,24 +1031,26 @@ export const SettingsPane: FunctionComponent<{ explorer: Explorer }> = ({
{!isEmulator && (
<AccordionItem value="8">
<AccordionHeader>
<div className={styles.header}>Enable container pagination</div>
<div className={styles.header}>{t(Keys.panes.settings.enableContainerPagination)}</div>
</AccordionHeader>
<AccordionPanel>
<div className={styles.settingsSectionContainer}>
<div className={styles.settingsSectionDescription}>
Load 50 containers at a time. Currently, containers are not pulled in alphanumeric order.
{t(Keys.panes.settings.enableContainerPaginationDescription)}
</div>
<Checkbox
styles={{
label: { padding: 0 },
}}
className="padding"
ariaLabel="Enable container pagination"
ariaLabel={t(Keys.panes.settings.enableContainerPagination)}
checked={containerPaginationEnabled}
onChange={() => setContainerPaginationEnabled(!containerPaginationEnabled)}
label="Enable container pagination"
label={t(Keys.panes.settings.enableContainerPagination)}
onRenderLabel={() => (
<span style={{ color: "var(--colorNeutralForeground1)" }}>Enable container pagination</span>
<span style={{ color: "var(--colorNeutralForeground1)" }}>
{t(Keys.panes.settings.enableContainerPagination)}
</span>
)}
/>
</div>
@@ -1066,24 +1060,25 @@ export const SettingsPane: FunctionComponent<{ explorer: Explorer }> = ({
{shouldShowCrossPartitionOption && (
<AccordionItem value="9">
<AccordionHeader>
<div className={styles.header}>Enable cross-partition query</div>
<div className={styles.header}>{t(Keys.panes.settings.enableCrossPartitionQuery)}</div>
</AccordionHeader>
<AccordionPanel>
<div className={styles.settingsSectionContainer}>
<div className={styles.settingsSectionDescription}>
Send more than one request while executing a query. More than one request is necessary if the
query is not scoped to single partition key value.
{t(Keys.panes.settings.enableCrossPartitionQueryDescription)}
</div>
<Checkbox
styles={{
label: { padding: 0 },
}}
className="padding"
ariaLabel="Enable cross partition query"
ariaLabel={t(Keys.panes.settings.enableCrossPartitionQuery)}
checked={crossPartitionQueryEnabled}
onChange={() => setCrossPartitionQueryEnabled(!crossPartitionQueryEnabled)}
onRenderLabel={() => (
<span style={{ color: "var(--colorNeutralForeground1)" }}>Enable cross-partition query</span>
<span style={{ color: "var(--colorNeutralForeground1)" }}>
{t(Keys.panes.settings.enableCrossPartitionQuery)}
</span>
)}
/>
</div>
@@ -1093,19 +1088,19 @@ export const SettingsPane: FunctionComponent<{ explorer: Explorer }> = ({
{shouldShowEnhancedQueryControl && (
<AccordionItem value="10">
<AccordionHeader>
<div className={styles.header}>Enhanced query control</div>
<div className={styles.header}>{t(Keys.panes.settings.enhancedQueryControl)}</div>
</AccordionHeader>
<AccordionPanel>
<div className={styles.settingsSectionContainer}>
<div className={styles.settingsSectionDescription}>
Query up to the max degree of parallelism.
{t(Keys.panes.settings.maxDegreeOfParallelismQuery)}
<a
href="https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/performance-tips-query-sdk?tabs=v3&pivots=programming-language-nodejs#enhanced-query-control"
target="_blank"
rel="noopener noreferrer"
>
{" "}
Learn more{" "}
{t(Keys.common.learnMore)}{" "}
</a>
</div>
<Checkbox
@@ -1113,11 +1108,13 @@ export const SettingsPane: FunctionComponent<{ explorer: Explorer }> = ({
label: { padding: 0 },
}}
className="padding"
ariaLabel="EnableQueryControl"
ariaLabel={t(Keys.panes.settings.enableQueryControl)}
checked={queryControlEnabled}
onChange={() => setQueryControlEnabled(!queryControlEnabled)}
onRenderLabel={() => (
<span style={{ color: "var(--colorNeutralForeground1)" }}>Enable query control</span>
<span style={{ color: "var(--colorNeutralForeground1)" }}>
{t(Keys.panes.settings.enableQueryControl)}
</span>
)}
/>
</div>
@@ -1127,14 +1124,12 @@ export const SettingsPane: FunctionComponent<{ explorer: Explorer }> = ({
{shouldShowParallelismOption && (
<AccordionItem value="10">
<AccordionHeader>
<div className={styles.header}>Max degree of parallelism</div>
<div className={styles.header}>{t(Keys.panes.settings.maxDegreeOfParallelism)}</div>
</AccordionHeader>
<AccordionPanel>
<div className={styles.settingsSectionContainer}>
<div className={styles.settingsSectionDescription}>
Gets or sets the number of concurrent operations run client side during parallel query execution.
A positive property value limits the number of concurrent operations to the set value. If it is
set to less than 0, the system automatically decides the number of concurrent operations to run.
{t(Keys.panes.settings.maxDegreeOfParallelismDescription)}
</div>
<SpinButton
min={-1}
@@ -1150,8 +1145,8 @@ export const SettingsPane: FunctionComponent<{ explorer: Explorer }> = ({
setMaxDegreeOfParallelism(parseInt(newValue) - 1 || maxDegreeOfParallelism)
}
onValidate={(newValue) => setMaxDegreeOfParallelism(parseInt(newValue) || maxDegreeOfParallelism)}
ariaLabel="Max degree of parallelism"
label="Max degree of parallelism"
ariaLabel={t(Keys.panes.settings.maxDegreeOfParallelism)}
label={t(Keys.panes.settings.maxDegreeOfParallelism)}
styles={spinButtonStyles}
/>
</div>
@@ -1161,14 +1156,12 @@ export const SettingsPane: FunctionComponent<{ explorer: Explorer }> = ({
{shouldShowPriorityLevelOption && (
<AccordionItem value="11">
<AccordionHeader>
<div className={styles.header}>Priority Level</div>
<div className={styles.header}>{t(Keys.panes.settings.priorityLevel)}</div>
</AccordionHeader>
<AccordionPanel>
<div className={styles.settingsSectionContainer}>
<div className={styles.settingsSectionDescription}>
Sets the priority level for data-plane requests from Data Explorer when using Priority-Based
Execution. If &quot;None&quot; is selected, Data Explorer will not specify priority level, and the
server-side default priority level will be used.
{t(Keys.panes.settings.priorityLevelDescription)}
</div>
<ChoiceGroup
ariaLabelledBy="priorityLevel"
@@ -1184,19 +1177,18 @@ export const SettingsPane: FunctionComponent<{ explorer: Explorer }> = ({
{shouldShowGraphAutoVizOption && (
<AccordionItem value="12">
<AccordionHeader>
<div className={styles.header}>Display Gremlin query results as:&nbsp;</div>
<div className={styles.header}>{t(Keys.panes.settings.displayGremlinQueryResults)}&nbsp;</div>
</AccordionHeader>
<AccordionPanel>
<div className={styles.settingsSectionContainer}>
<div className={styles.settingsSectionDescription}>
Select Graph to automatically visualize the query results as a Graph or JSON to display the
results as JSON.
{t(Keys.panes.settings.displayGremlinQueryResultsDescription)}
</div>
<ChoiceGroup
selectedKey={graphAutoVizDisabled}
options={graphAutoOptionList}
onChange={handleOnGremlinChange}
aria-label="Graph Auto-visualization"
aria-label={t(Keys.panes.settings.graphAutoVisualization)}
/>
</div>
</AccordionPanel>
@@ -1205,25 +1197,25 @@ export const SettingsPane: FunctionComponent<{ explorer: Explorer }> = ({
{shouldShowCopilotSampleDBOption && (
<AccordionItem value="13">
<AccordionHeader>
<div className={styles.header}>Enable sample database</div>
<div className={styles.header}>{t(Keys.panes.settings.enableSampleDatabase)}</div>
</AccordionHeader>
<AccordionPanel>
<div className={styles.settingsSectionContainer}>
<div className={styles.settingsSectionDescription}>
This is a sample database and collection with synthetic product data you can use to explore using
NoSQL queries. This will appear as another database in the Data Explorer UI, and is created by,
and maintained by Microsoft at no cost to you.
{t(Keys.panes.settings.enableSampleDatabaseDescription)}
</div>
<Checkbox
styles={{
label: { padding: 0 },
}}
className="padding"
ariaLabel="Enable sample db for query exploration"
ariaLabel={t(Keys.panes.settings.enableSampleDbAriaLabel)}
checked={copilotSampleDBEnabled}
onChange={handleSampleDatabaseChange}
onRenderLabel={() => (
<span style={{ color: "var(--colorNeutralForeground1)" }}>Enable sample database</span>
<span style={{ color: "var(--colorNeutralForeground1)" }}>
{t(Keys.panes.settings.enableSampleDatabase)}
</span>
)}
/>
</div>
@@ -1233,13 +1225,12 @@ export const SettingsPane: FunctionComponent<{ explorer: Explorer }> = ({
{shouldShowMongoGuidRepresentationOption && (
<AccordionItem value="14">
<AccordionHeader>
<div className={styles.header}>Guid Representation</div>
<div className={styles.header}>{t(Keys.panes.settings.guidRepresentation)}</div>
</AccordionHeader>
<AccordionPanel>
<div className={styles.settingsSectionContainer}>
<div className={styles.settingsSectionDescription}>
GuidRepresentation in MongoDB refers to how Globally Unique Identifiers (GUIDs) are serialized and
deserialized when stored in BSON documents. This will apply to all document operations.
{t(Keys.panes.settings.guidRepresentationDescription)}
</div>
<Dropdown
aria-labelledby="mongoGuidRepresentation"
@@ -1253,7 +1244,7 @@ export const SettingsPane: FunctionComponent<{ explorer: Explorer }> = ({
)}
<AccordionItem value="15">
<AccordionHeader>
<div className={styles.header}>Advanced Settings</div>
<div className={styles.header}>{t(Keys.panes.settings.advancedSettings)}</div>
</AccordionHeader>
<AccordionPanel>
<div className={styles.settingsSectionContainer}>
@@ -1283,14 +1274,13 @@ export const SettingsPane: FunctionComponent<{ explorer: Explorer }> = ({
},
}}
className="padding"
ariaLabel="Ignore partition key on document update"
ariaLabel={t(Keys.panes.settings.ignorePartitionKey)}
checked={ignorePartitionKeyOnDocumentUpdate}
onChange={handleOnIgnorePartitionKeyOnDocumentUpdateChange}
label="Ignore partition key on document update"
label={t(Keys.panes.settings.ignorePartitionKey)}
/>
<InfoTooltip className={styles.headerIcon}>
If checked, the partition key value will not be used to locate the document during update
operations. Only use this if document updates are failing due to an abnormal partition key.
{t(Keys.panes.settings.ignorePartitionKeyTooltip)}
</InfoTooltip>
</Stack>
</div>
@@ -1320,9 +1310,9 @@ export const SettingsPane: FunctionComponent<{ explorer: Explorer }> = ({
}}
onClick={() => {
useDialog.getState().showOkCancelModalDialog(
"Clear History",
t(Keys.panes.settings.clearHistory),
undefined,
"Are you sure you want to proceed?",
t(Keys.panes.settings.clearHistoryConfirm),
() => {
deleteAllStates();
updateUserContext({
@@ -1332,35 +1322,33 @@ export const SettingsPane: FunctionComponent<{ explorer: Explorer }> = ({
});
useClientWriteEnabled.setState({ clientWriteEnabled: true });
},
"Cancel",
t(Keys.common.cancel),
undefined,
<>
<span>
This action will clear the all customizations for this account in this browser, including:
</span>
<span>{t(Keys.panes.settings.clearHistoryDescription)}</span>
<ul className={styles.bulletList}>
<li>Reset your customized tab layout, including the splitter positions</li>
<li>Erase your table column preferences, including any custom columns</li>
<li>Clear your filter history</li>
<li>Reset region selection to global</li>
<li>{t(Keys.panes.settings.clearHistoryTabLayout)}</li>
<li>{t(Keys.panes.settings.clearHistoryTableColumns)}</li>
<li>{t(Keys.panes.settings.clearHistoryFilters)}</li>
<li>{t(Keys.panes.settings.clearHistoryRegion)}</li>
</ul>
</>,
);
}}
>
Clear History
{t(Keys.panes.settings.clearHistory)}
</DefaultButton>
</div>
</div>
<div className="settingsSection">
<div className={`settingsSectionPart ${styles.settingsSectionContainer}`}>
<div className="settingsSectionLabel">Explorer Version</div>
<div className="settingsSectionLabel">{t(Keys.panes.settings.explorerVersion)}</div>
<div>{explorerVersion}</div>
</div>
</div>
<div className="settingsSection">
<div className="settingsSectionPart">
<div className="settingsSectionLabel">Session ID</div>
<div className="settingsSectionLabel">{t(Keys.panes.settings.sessionId)}</div>
<div>{sessionId}</div>
</div>
</div>

View File

@@ -660,7 +660,7 @@ exports[`Settings Pane should render Default properly 1`] = `
Send more than one request while executing a query. More than one request is necessary if the query is not scoped to single partition key value.
</div>
<StyledCheckboxBase
ariaLabel="Enable cross partition query"
ariaLabel="Enable cross-partition query"
checked={false}
className="padding"
onChange={[Function]}
@@ -705,7 +705,7 @@ exports[`Settings Pane should render Default properly 1`] = `
</a>
</div>
<StyledCheckboxBase
ariaLabel="EnableQueryControl"
ariaLabel="Enable query control"
checked={false}
className="padding"
onChange={[Function]}
@@ -1190,7 +1190,8 @@ exports[`Settings Pane should render Gremlin properly 1`] = `
<div
className="___j7dlp70_0000000 fq02s40 f19n0e5"
>
Display Gremlin query results as: 
Display Gremlin query results as:
 
</div>
</AccordionHeader>
<AccordionPanel>

View File

@@ -11,6 +11,7 @@ import {
import { configContext } from "ConfigContext";
import { ColumnDefinition } from "Explorer/Tabs/DocumentsTabV2/DocumentsTableComponent";
import { CosmosFluentProvider, getPlatformTheme } from "Explorer/Theme/ThemeUtil";
import { Keys, t } from "Localization";
import React from "react";
import { useSidePanel } from "../../../hooks/useSidePanel";
@@ -113,13 +114,13 @@ export const TableColumnSelectionPane: React.FC<TableColumnSelectionPaneProps> =
<CosmosFluentProvider>
<div className="panelFormWrapper">
<div className="panelMainContent" style={{ display: "flex", flexDirection: "column" }}>
<Text>Select which columns to display in your view of items in your container.</Text>
<Text>{t(Keys.panes.tableColumnSelection.selectColumns)}</Text>
<div /* Wrap <SearchBox> to avoid margin-bottom set by panelMainContent css */>
<SearchBox
className={styles.searchBox}
value={columnSearchText}
onChange={onSearchChange}
placeholder="Search fields"
placeholder={t(Keys.panes.tableColumnSelection.searchFields)}
/>
</div>
@@ -130,7 +131,9 @@ export const TableColumnSelectionPane: React.FC<TableColumnSelectionPaneProps> =
key={columnDefinition.id}
label={{
className: styles.checkboxLabel,
children: `${columnDefinition.label}${columnDefinition.isPartitionKey ? " (partition key)" : ""}`,
children: `${columnDefinition.label}${
columnDefinition.isPartitionKey ? t(Keys.panes.tableColumnSelection.partitionKeySuffix) : ""
}`,
}}
checked={selectedColumnIdsSet.has(columnDefinition.id)}
onChange={(_, data) => onCheckedValueChange(columnDefinition.id, data)}
@@ -138,15 +141,15 @@ export const TableColumnSelectionPane: React.FC<TableColumnSelectionPaneProps> =
))}
</div>
<Button appearance="secondary" size="small" onClick={() => setNewSelectedColumnIds(defaultSelection)}>
Reset
{t(Keys.panes.tableColumnSelection.reset)}
</Button>
</div>
<div className="panelFooter" style={{ display: "flex", gap: theme.spacingHorizontalS }}>
<Button appearance="primary" onClick={onSave}>
Save
{t(Keys.common.save)}
</Button>
<Button appearance="secondary" onClick={closeSidePanel}>
Cancel
{t(Keys.common.cancel)}
</Button>
</div>
</div>

View File

@@ -1,5 +1,6 @@
import { IDropdownOption, Image, Label, Stack, Text, TextField } from "@fluentui/react";
import { useBoolean } from "@fluentui/react-hooks";
import { Keys, t } from "Localization";
import { logConsoleError } from "Utils/NotificationConsoleUtils";
import React, { FunctionComponent, useEffect, useState } from "react";
import * as _ from "underscore";
@@ -100,8 +101,8 @@ export const AddTableEntityPanel: FunctionComponent<AddTableEntityPanelProps> =
for (let i = 0; i < entities.length; i++) {
const { property, type, value } = entities[i];
if ((property === "PartitionKey" && value === "") || (property === "RowKey" && value === "")) {
logConsoleError(`${property} cannot be empty. Please input a value for ${property}`);
setFormError(`${property} cannot be empty. Please input a value for ${property}`);
logConsoleError(t(Keys.panes.tables.propertyEmptyError, { property }));
setFormError(t(Keys.panes.tables.propertyEmptyError, { property }));
return;
}
@@ -109,13 +110,13 @@ export const AddTableEntityPanel: FunctionComponent<AddTableEntityPanelProps> =
(property === "PartitionKey" && containsAnyWhiteSpace(value) === true) ||
(property === "RowKey" && containsAnyWhiteSpace(value) === true)
) {
logConsoleError(`${property} cannot have whitespace. Please input a value for ${property} without whitespace`);
setFormError(`${property} cannot have whitespace. Please input a value for ${property} without whitespace`);
logConsoleError(t(Keys.panes.tables.whitespaceError, { property }));
setFormError(t(Keys.panes.tables.whitespaceError, { property }));
return;
}
if (!type) {
setFormError(`Property type cannot be empty. Please select a type from the dropdown for property ${property}`);
setFormError(t(Keys.panes.tables.propertyTypeEmptyError, { property }));
return;
}

View File

@@ -1,5 +1,6 @@
import { IDropdownOption, Image, Label, Stack, Text, TextField } from "@fluentui/react";
import { useBoolean } from "@fluentui/react-hooks";
import { Keys, t } from "Localization";
import { logConsoleError } from "Utils/NotificationConsoleUtils";
import React, { FunctionComponent, useEffect, useState } from "react";
import * as _ from "underscore";
@@ -198,7 +199,7 @@ export const EditTableEntityPanel: FunctionComponent<EditTableEntityPanelProps>
}
if (!type) {
setFormError(`Property type cannot be empty. Please select a type from the dropdown for property ${property}`);
setFormError(t(Keys.panes.tables.propertyTypeEmptyError, { property }));
return;
}
@@ -208,8 +209,8 @@ export const EditTableEntityPanel: FunctionComponent<EditTableEntityPanelProps>
(property === "RowKey" && value === "") ||
(property === "RowKey" && value === undefined)
) {
logConsoleError(`${property} cannot be empty. Please input a value for ${property}`);
setFormError(`${property} cannot be empty. Please input a value for ${property}`);
logConsoleError(t(Keys.panes.tables.propertyEmptyError, { property }));
setFormError(t(Keys.panes.tables.propertyEmptyError, { property }));
return;
}
}
@@ -403,7 +404,7 @@ export const EditTableEntityPanel: FunctionComponent<EditTableEntityPanelProps>
)}
</div>
<div className="panelNullWarning" style={{ padding: "20px", color: "red" }}>
Warning: Null fields will not be displayed for editing.
{t(Keys.panes.tables.nullFieldsWarning)}
</div>
</RightPaneForm>
);

View File

@@ -1,4 +1,5 @@
import { Checkbox, Text } from "@fluentui/react";
import { Keys, t } from "Localization";
import React, { FunctionComponent, useEffect, useState } from "react";
import { userContext } from "../../../../UserContext";
import { useSidePanel } from "../../../../hooks/useSidePanel";
@@ -35,7 +36,7 @@ export const TableQuerySelectPanel: FunctionComponent<TableQuerySelectPanelProps
const props: RightPaneFormProps = {
formError: "",
isExecuting: false,
submitButtonText: "OK",
submitButtonText: t(Keys.common.ok),
onSubmit,
};
@@ -121,11 +122,11 @@ export const TableQuerySelectPanel: FunctionComponent<TableQuerySelectPanelProps
<RightPaneForm {...props}>
<div className="panelFormWrapper">
<div className="panelMainContent">
<Text>Select the columns that you want to query.</Text>
<Text>{t(Keys.panes.tableQuerySelect.selectColumns)}</Text>
<div className="column-select-view">
<Checkbox
id="availableCheckbox"
label="Available Columns"
label={t(Keys.panes.tableQuerySelect.availableColumns)}
checked={isAvailableColumnChecked}
onChange={availableColumnsCheckboxClick}
/>

View File

@@ -13,6 +13,7 @@ import {
} from "@fluentui/react";
import { Upload } from "Common/Upload/Upload";
import { UploadDetailsRecord } from "Contracts/ViewModels";
import { Keys, t } from "Localization";
import { logConsoleError } from "Utils/NotificationConsoleUtils";
import React, { ChangeEvent, FunctionComponent, useReducer, useState } from "react";
import { getErrorMessage } from "../../Tables/Utilities";
@@ -63,8 +64,8 @@ export const UploadItemsPane: FunctionComponent<UploadItemsPaneProps> = ({ onUpl
const onSubmit = () => {
setFormError("");
if (!files || files.length === 0) {
setFormError("No files were specified. Please input at least one file.");
logConsoleError("Could not upload items -- No files were specified. Please input at least one file.");
setFormError(t(Keys.panes.uploadItems.noFilesSpecifiedError));
logConsoleError(t(Keys.panes.uploadItems.noFilesSpecifiedError));
return;
}
@@ -150,7 +151,7 @@ export const UploadItemsPane: FunctionComponent<UploadItemsPaneProps> = ({ onUpl
},
{
key: "fileName",
name: "FILE NAME",
name: t(Keys.panes.uploadItems.fileNameColumn),
fieldName: "fileName",
minWidth: 120,
maxWidth: 140,
@@ -169,7 +170,7 @@ export const UploadItemsPane: FunctionComponent<UploadItemsPaneProps> = ({ onUpl
},
{
key: "status",
name: "STATUS",
name: t(Keys.panes.uploadItems.statusColumn),
fieldName: "numSucceeded",
minWidth: 120,
maxWidth: 140,
@@ -178,7 +179,11 @@ export const UploadItemsPane: FunctionComponent<UploadItemsPaneProps> = ({ onUpl
data: "string",
isPadded: true,
onRender: (item: UploadDetailsRecord, index: number, column: IColumn) => {
const fieldContent = `${item.numSucceeded} created, ${item.numThrottled} throttled, ${item.numFailed} errors`;
const fieldContent = t(Keys.panes.uploadItems.uploadStatus, {
numSucceeded: item.numSucceeded,
numThrottled: item.numThrottled,
numFailed: item.numFailed,
});
return (
<TooltipHost
content={fieldContent}
@@ -197,12 +202,12 @@ export const UploadItemsPane: FunctionComponent<UploadItemsPaneProps> = ({ onUpl
<div className="paneMainContent">
<Upload
key={reducer} // Force re-render on state change
label="Select JSON Files"
label={t(Keys.panes.uploadItems.selectJsonFiles)}
onUpload={updateSelectedFiles}
accept="application/json"
multiple
tabIndex={0}
tooltip="Select one or more JSON files to upload. Each file can contain a single JSON document or an array of JSON documents. The combined size of all files in an individual upload operation must be less than 2 MB. You can perform multiple upload operations for larger data sets."
tooltip={t(Keys.panes.uploadItems.selectJsonFilesTooltip)}
/>
{uploadFileData?.length > 0 && (
<div className="fileUploadSummaryContainer" data-test="file-upload-status">

View File

@@ -714,9 +714,7 @@ exports[`Delete Database Confirmation Pane Should call delete database 1`] = `
<span
className="css-126"
>
What is the reason why you are deleting this
Database
?
What is the reason why you are deleting this Database?
</span>
</Text>
<StyledTextFieldBase

View File

@@ -6,6 +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, t } from "Localization";
import { isFabricNative, isFabricNativeReadOnly } from "Platform/Fabric/FabricUtil";
import * as React from "react";
import { userContext } from "UserContext";
@@ -159,8 +160,8 @@ export const FabricHomeScreen: React.FC<SplashScreenProps> = (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: <DocumentAddRegular />,
onClick: () => {
const databaseId = isFabricNative() ? userContext.fabricContext?.databaseName : undefined;
@@ -168,8 +169,8 @@ export const FabricHomeScreen: React.FC<SplashScreenProps> = (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: <img src={CosmosDbBlackIcon} alt={"Azure Cosmos DB icon"} aria-hidden="true" />,
onClick: () => {
setSelectedSampleDataConfiguration({
@@ -181,8 +182,8 @@ export const FabricHomeScreen: React.FC<SplashScreenProps> = (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: <img src={AzureOpenAiIcon} alt={"Azure Open AI icon"} aria-hidden="true" />,
onClick: () => {
setSelectedSampleDataConfiguration({
@@ -194,14 +195,14 @@ export const FabricHomeScreen: React.FC<SplashScreenProps> = (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: <LinkMultipleRegular />,
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: <img src={GithubIcon} alt={"GitHub icon"} aria-hidden="true" />,
onClick: () => window.open("https://aka.ms/CosmosFabricSamplesGallery", "_blank"),
},
@@ -222,7 +223,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 (
<>
<CosmosFluentProvider className={styles.homeContainer}>
@@ -238,9 +241,9 @@ export const FabricHomeScreen: React.FC<SplashScreenProps> = (props: SplashScree
{getSplashScreenButtons()}
{
<div className={styles.footer}>
Need help?{" "}
{t(Keys.splashScreen.sections.needHelp)}{" "}
<Link href="https://learn.microsoft.com/fabric/database/cosmos-db/overview" target="_blank">
Learn more <OpenRegular />
{t(Keys.common.learnMore)} <OpenRegular />
</Link>
</div>
}

View File

@@ -12,6 +12,7 @@ import {
} from "@fluentui/react-components";
import Explorer from "Explorer/Explorer";
import { checkContainerExists, createContainer, importData, SampleDataFile } from "Explorer/SplashScreen/SampleUtil";
import { Keys, t } from "Localization";
import React, { useEffect, useState } from "react";
import * as ViewModels from "../../Contracts/ViewModels";
@@ -59,7 +60,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 +76,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 +91,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 +121,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 <Spinner size="small" labelPosition="above" label={`Creating container "${containerName}"...`} />;
return (
<Spinner
size="small"
labelPosition="above"
label={t(Keys.splashScreen.sampleDataDialog.creatingContainer, { containerName })}
/>
);
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":
return `Successfully created "${containerName}" with sample data.`;
return t(Keys.splashScreen.sampleDataDialog.success, { containerName });
case "error":
return (
<div style={{ color: "red" }}>
@@ -132,14 +153,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 +168,7 @@ export const SampleDataImportDialog: React.FC<{
<Dialog open={props.open} onOpenChange={(event, data) => props.setOpen(data.open)}>
<DialogSurface>
<DialogBody>
<DialogTitle>Sample Data</DialogTitle>
<DialogTitle>{t(Keys.splashScreen.sampleDataDialog.title)}</DialogTitle>
<DialogContent>
<div className={styles.dialogContent}>{renderContent()}</div>
</DialogContent>

View File

@@ -16,6 +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, t } from "Localization";
import { Action } from "Shared/Telemetry/TelemetryConstants";
import { traceOpen } from "Shared/Telemetry/TelemetryProcessor";
import { useCarousel } from "hooks/useCarousel";
@@ -169,16 +170,16 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
switch (userContext.apiType) {
case "Postgres":
title = "Welcome to Azure Cosmos DB for PostgreSQL";
subtitle = "Get started with our sample datasets, documentation, and additional tools.";
title = t(Keys.splashScreen.title.postgres);
subtitle = t(Keys.splashScreen.subtitle.getStarted);
break;
case "VCoreMongo":
title = "Welcome to Azure DocumentDB (with MongoDB compatibility)";
subtitle = "Get started with our sample datasets, documentation, and additional tools.";
title = t(Keys.splashScreen.title.vcoreMongo);
subtitle = t(Keys.splashScreen.subtitle.getStarted);
break;
default:
title = "Welcome to Azure Cosmos DB";
subtitle = "Globally distributed, multi-model database service for any scale";
title = t(Keys.splashScreen.title.default);
subtitle = t(Keys.splashScreen.subtitle.default);
}
React.useEffect(() => {
@@ -249,8 +250,8 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
<Stack className="splashStackRow" horizontal>
<SplashScreenButton
imgSrc={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={() => {
container.onNewCollectionClicked({ isQuickstart: true });
traceOpen(Action.LaunchQuickstart, { apiType: userContext.apiType });
@@ -258,8 +259,8 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
/>
<SplashScreenButton
imgSrc={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 });
@@ -270,10 +271,8 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
<SplashScreenButton
imgSrc={CosmosDBIcon}
imgSize={35}
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"
}
title={t(Keys.splashScreen.samplesGallery.title)}
description={t(Keys.splashScreen.samplesGallery.description)}
onClick={() => {
window.open("https://azurecosmosdb.github.io/gallery/?tags=example", "_blank");
traceOpen(Action.LearningResourcesClicked, { apiType: userContext.apiType });
@@ -281,8 +280,8 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
/>
<SplashScreenButton
imgSrc={ConnectIcon}
title={"Connect"}
description={"Prefer using your own choice of tooling? Find the connection string you need to connect"}
title={t(Keys.splashScreen.connectCard.title)}
description={t(Keys.splashScreen.connectCard.description)}
onClick={() => useTabs.getState().openAndActivateReactTab(ReactTabKind.Connect)}
/>
</Stack>
@@ -297,7 +296,7 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
usePostgres.getState().showPostgreTeachingBubble &&
!usePostgres.getState().showResetPasswordBubble && (
<TeachingBubble
headline="New to Cosmos DB PGSQL?"
headline={t(Keys.splashScreen.teachingBubble.newToPostgres.headline)}
target={"#mainButton-quickstartDescription"}
hasCloseButton
onDismiss={() => usePostgres.getState().setShowPostgreTeachingBubble(false)}
@@ -309,15 +308,14 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ 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)}
</TeachingBubble>
)}
{/*TODO: convert below to use SplashScreenButton */}
@@ -349,7 +347,7 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
))}
{userContext.apiType === "Postgres" && usePostgres.getState().showResetPasswordBubble && (
<TeachingBubble
headline="Create your password"
headline={t(Keys.splashScreen.teachingBubble.resetPassword.headline)}
target={"#mainButton-quickstartDescription"}
hasCloseButton
onDismiss={() => {
@@ -364,7 +362,7 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
preventDismissOnScroll: true,
}}
primaryButtonProps={{
text: "Create",
text: t(Keys.common.create),
onClick: () => {
localStorage.setItem(userContext.databaseAccount.id, "true");
sendMessage({
@@ -374,7 +372,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>
)}
</div>
@@ -393,8 +391,8 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ 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);
@@ -416,8 +414,8 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ 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),
};
}
@@ -425,16 +423,16 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ 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 });
@@ -444,19 +442,19 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ 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();
}
@@ -485,7 +483,7 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ 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);
@@ -524,18 +522,18 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ 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;
@@ -543,18 +541,18 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ 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;
@@ -562,18 +560,18 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ 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;
@@ -581,18 +579,18 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ 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;
@@ -600,18 +598,18 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ 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;
@@ -668,7 +666,7 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
</ul>
{recentItems.length > 0 && (
<Link onClick={() => clearMostRecent()} className={styles.listItemTitle}>
Clear Recents
{t(Keys.splashScreen.sections.clearRecents)}
</Link>
)}
</Stack>
@@ -683,15 +681,15 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ 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),
},
];
@@ -702,14 +700,14 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ 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;
@@ -717,13 +715,13 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ 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,
];
@@ -732,14 +730,14 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ 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;
@@ -747,13 +745,13 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ 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,
];
@@ -762,13 +760,13 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ 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,
];
@@ -807,17 +805,17 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ 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: "",
},
];
@@ -825,17 +823,17 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ 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: "",
},
];
@@ -863,17 +861,17 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ 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: "",
},
];
@@ -881,17 +879,17 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ 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: "",
},
];
@@ -932,24 +930,25 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
persistentBeak
>
<TeachingBubbleContent
headline={`Start with sample ${getCollectionName().toLocaleLowerCase()}`}
headline={t(Keys.splashScreen.teachingBubble.coachMark.headline, {
collectionName: getCollectionName().toLocaleLowerCase(),
})}
hasCloseButton
closeButtonAriaLabel="Close"
closeButtonAriaLabel={t(Keys.common.close)}
primaryButtonProps={{
text: "Get started",
text: t(Keys.common.getStarted),
onClick: () => {
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)}
</TeachingBubbleContent>
</Coachmark>
)}
@@ -963,7 +962,7 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
fontFamily: '"Segoe UI Semibold", "Segoe UI", "Segoe WP", Tahoma, Arial, sans-serif',
}}
>
Next steps
{t(Keys.splashScreen.sections.nextSteps)}
</Text>
{getNextStepItems()}
</Stack>
@@ -975,7 +974,7 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
fontFamily: '"Segoe UI Semibold", "Segoe UI", "Segoe WP", Tahoma, Arial, sans-serif',
}}
>
Tips & learn more
{t(Keys.splashScreen.sections.tipsAndLearnMore)}
</Text>
{getTipsAndLearnMoreItems()}
</Stack>
@@ -984,15 +983,15 @@ export const SplashScreen: React.FC<SplashScreenProps> = ({ explorer }) => {
) : (
<div className={styles.moreStuffContainer}>
<div className={styles.moreStuffColumn}>
<h2 className={styles.columnTitle}>Recents</h2>
<h2 className={styles.columnTitle}>{t(Keys.splashScreen.sections.recents)}</h2>
{getRecentItems()}
</div>
<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()}
</div>
<div className={styles.moreStuffColumn}>
<h2 className={styles.columnTitle}>Learning Resources</h2>
<h2 className={styles.columnTitle}>{t(Keys.splashScreen.sections.learningResources)}</h2>
{getLearningResourceItems()}
</div>
</div>

View File

@@ -18,6 +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, t } from "Localization";
import { Action } from "../../Shared/Telemetry/TelemetryConstants";
import * as TelemetryProcessor from "../../Shared/Telemetry/TelemetryProcessor";
import { CommandButtonComponentProps } from "../Controls/CommandButton/CommandButtonComponent";
@@ -57,7 +58,7 @@ export default class ConflictsTab extends TabsBase {
private _documentsIterator: MinimalQueryIterator;
private _container: Explorer;
private _acceptButtonLabel: ko.Observable<string> = ko.observable("Save");
private _acceptButtonLabel: ko.Observable<string> = ko.observable(t(Keys.common.save));
constructor(options: ViewModels.ConflictsTabOptions) {
super(options);
@@ -213,9 +214,9 @@ export default class ConflictsTab extends TabsBase {
this.selectedConflictContent.subscribe((newContent: string) => this._onEditorContentChange(newContent));
this.conflictOperation.subscribe((newOperationType: string) => {
let operationLabel = "Save";
let operationLabel = t(Keys.common.save);
if (newOperationType === Constants.ConflictOperationType.Replace) {
operationLabel = "Update";
operationLabel = t(Keys.common.update);
}
this._acceptButtonLabel(operationLabel);
@@ -229,7 +230,7 @@ export default class ConflictsTab extends TabsBase {
this._documentsIterator = this.createIterator();
await this.loadNextPage();
} catch (error) {
useDialog.getState().showOkModalDialog("Refresh documents grid failed", getErrorMessage(error));
useDialog.getState().showOkModalDialog(t(Keys.tabs.conflicts.refreshGridFailed), getErrorMessage(error));
}
}
@@ -257,11 +258,11 @@ export default class ConflictsTab extends TabsBase {
useDialog
.getState()
.showOkCancelModalDialog(
"Unsaved changes",
"Changes will be lost. Do you want to continue?",
"OK",
t(Keys.tabs.conflicts.unsavedChanges),
t(Keys.tabs.conflicts.changesWillBeLost),
t(Keys.common.ok),
async () => await this.resolveConflict(),
"Cancel",
t(Keys.common.cancel),
undefined,
);
} else {
@@ -332,7 +333,7 @@ export default class ConflictsTab extends TabsBase {
} catch (error) {
this.isExecutionError(true);
const errorMessage = getErrorMessage(error);
useDialog.getState().showOkModalDialog("Resolve conflict failed", errorMessage);
useDialog.getState().showOkModalDialog(t(Keys.tabs.conflicts.resolveConflictFailed), errorMessage);
TelemetryProcessor.traceFailure(
Action.ResolveConflict,
{
@@ -386,7 +387,7 @@ export default class ConflictsTab extends TabsBase {
} catch (error) {
this.isExecutionError(true);
const errorMessage = getErrorMessage(error);
useDialog.getState().showOkModalDialog("Delete conflict failed", errorMessage);
useDialog.getState().showOkModalDialog(t(Keys.tabs.conflicts.deleteConflictFailed), errorMessage);
TelemetryProcessor.traceFailure(
Action.DeleteConflict,
{
@@ -617,7 +618,7 @@ export default class ConflictsTab extends TabsBase {
}
if (this.discardButton.visible()) {
const label = "Discard";
const label = t(Keys.common.discard);
buttons.push({
iconSrc: DiscardIcon,
iconAlt: label,
@@ -630,7 +631,7 @@ export default class ConflictsTab extends TabsBase {
}
if (this.deleteButton.visible()) {
const label = "Delete";
const label = t(Keys.common.delete);
buttons.push({
iconSrc: DeleteIcon,
iconAlt: label,

View File

@@ -41,6 +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, t } from "Localization";
import { isFabric } from "Platform/Fabric/FabricUtil";
import { QueryConstants } from "Shared/Constants";
import { LocalStorageUtility, StorageKey } from "Shared/StorageUtility";
@@ -349,7 +350,7 @@ export const getTabsButtons = ({
}
const buttons: CommandButtonComponentProps[] = [];
const label = !isPreferredApiMongoDB ? "New Item" : "New Document";
const label = !isPreferredApiMongoDB ? t(Keys.tabs.documents.newItem) : t(Keys.tabs.documents.newDocument);
if (getNewDocumentButtonState(editorState).visible) {
buttons.push({
iconSrc: NewDocumentIcon,
@@ -368,7 +369,7 @@ export const getTabsButtons = ({
}
if (getSaveNewDocumentButtonState(editorState).visible) {
const label = "Save";
const label = t(Keys.common.save);
buttons.push({
iconSrc: SaveIcon,
iconAlt: label,
@@ -386,7 +387,7 @@ export const getTabsButtons = ({
}
if (getDiscardNewDocumentChangesButtonState(editorState).visible) {
const label = "Discard";
const label = t(Keys.common.discard);
buttons.push({
iconSrc: DiscardIcon,
iconAlt: label,
@@ -403,7 +404,7 @@ export const getTabsButtons = ({
}
if (getSaveExistingDocumentButtonState(editorState).visible) {
const label = "Update";
const label = t(Keys.common.update);
buttons.push({
iconSrc: SaveIcon,
iconAlt: label,
@@ -421,7 +422,7 @@ export const getTabsButtons = ({
}
if (getDiscardExistingDocumentChangesButtonState(editorState).visible) {
const label = "Discard";
const label = t(Keys.common.discard);
buttons.push({
iconSrc: DiscardIcon,
iconAlt: label,
@@ -438,7 +439,7 @@ export const getTabsButtons = ({
}
if (selectedRows.size > 0) {
const label = "Delete";
const label = t(Keys.common.delete);
buttons.push({
iconSrc: DeleteDocumentIcon,
iconAlt: label,
@@ -453,7 +454,7 @@ export const getTabsButtons = ({
}
if (!isPreferredApiMongoDB) {
const label = "Upload Item";
const label = t(Keys.tabs.documents.uploadItem);
buttons.push({
id: UPLOAD_BUTTON_ID,
iconSrc: UploadIcon,
@@ -737,17 +738,18 @@ export const DocumentsTabComponent: React.FunctionComponent<IDocumentsTabCompone
} else if (result.statusCode >= 400) {
newFailed.push(result.documentId);
logConsoleError(
`Failed to delete document ${result.documentId.id()} with status code ${result.statusCode}`,
t(Keys.tabs.documents.deleteDocumentFailedLog, {
documentId: result.documentId.id(),
statusCode: result.statusCode,
}),
);
}
});
logConsoleInfo(`Successfully deleted ${newSuccessful.length} document(s)`);
logConsoleInfo(t(Keys.tabs.documents.deleteSuccessLog, { count: newSuccessful.length }));
if (newThrottled.length > 0) {
logConsoleError(
`Failed to delete ${newThrottled.length} document(s) due to "Request too large" (429) error. Retrying...`,
);
logConsoleError(t(Keys.tabs.documents.deleteThrottledLog, { count: newThrottled.length }));
}
// Update result of the bulk delete: method is called again, because the state variables changed
@@ -789,7 +791,7 @@ export const DocumentsTabComponent: React.FunctionComponent<IDocumentsTabCompone
);
let partitionKeyProperties = useMemo(() => {
return partitionKeyPropertyHeaders?.map((partitionKeyPropertyHeader) =>
partitionKeyPropertyHeader.replace(/[/]+/g, ".").substring(1).replace(/[']+/g, ""),
partitionKeyPropertyHeader.replace(/[/]+/g, ".").substring(1).replace(/[']+/g, "").replace(/["]+/g, ""),
);
}, [partitionKeyPropertyHeaders]);
@@ -917,11 +919,11 @@ export const DocumentsTabComponent: React.FunctionComponent<IDocumentsTabCompone
useDialog
.getState()
.showOkCancelModalDialog(
"Unsaved changes",
"Your unsaved changes will be lost. Do you want to continue?",
"OK",
t(Keys.tabs.documents.unsavedChanges),
t(Keys.tabs.documents.unsavedChangesMessage),
t(Keys.common.ok),
onDiscard,
"Cancel",
t(Keys.common.cancel),
onCancelDiscard,
);
} else {
@@ -1011,7 +1013,7 @@ export const DocumentsTabComponent: React.FunctionComponent<IDocumentsTabCompone
(error) => {
onExecutionErrorChange(true);
const errorMessage = getErrorMessage(error);
useDialog.getState().showOkModalDialog("Create document failed", errorMessage);
useDialog.getState().showOkModalDialog(t(Keys.tabs.documents.createDocumentFailed), errorMessage);
TelemetryProcessor.traceFailure(
Action.CreateDocument,
{
@@ -1097,7 +1099,7 @@ export const DocumentsTabComponent: React.FunctionComponent<IDocumentsTabCompone
selectedDocumentId.partitionKeyValue = originalPartitionKeyValue;
onExecutionErrorChange(true);
const errorMessage = getErrorMessage(error);
useDialog.getState().showOkModalDialog("Update document failed", errorMessage);
useDialog.getState().showOkModalDialog(t(Keys.tabs.documents.updateDocumentFailed), errorMessage);
TelemetryProcessor.traceFailure(
Action.UpdateDocument,
{
@@ -1174,7 +1176,12 @@ export const DocumentsTabComponent: React.FunctionComponent<IDocumentsTabCompone
// Remove the check for systemKey, remove call to deleteNoSqlDocument(). deleteNoSqlDocuments() should
// always be called for NoSQL.
deletePromise = deleteNoSqlDocument(_collection, toDeleteDocumentIds[0]).then(() => {
useDialog.getState().showOkModalDialog("Delete document", "Document successfully deleted.");
useDialog
.getState()
.showOkModalDialog(
t(Keys.tabs.documents.deleteDocumentDialogTitle),
t(Keys.tabs.documents.documentDeleted),
);
return [toDeleteDocumentIds[0]];
});
// ----------------------------------------------------------------------------------------------------
@@ -1251,17 +1258,20 @@ export const DocumentsTabComponent: React.FunctionComponent<IDocumentsTabCompone
useDialog
.getState()
.showOkModalDialog(
"Delete documents",
`Some documents failed to delete due to a rate limiting error. Please try again later. To prevent this in the future, consider increasing the throughput on your container or database.`,
t(Keys.tabs.documents.deleteDocumentsDialogTitle),
t(Keys.tabs.documents.throttlingError),
{
linkText: "Learn More",
linkText: t(Keys.common.learnMore),
linkUrl: MONGO_THROTTLING_DOC_URL,
},
);
} else {
useDialog
.getState()
.showOkModalDialog("Delete documents", `Deleting document(s) failed (${error.message})`);
.showOkModalDialog(
t(Keys.tabs.documents.deleteDocumentsDialogTitle),
t(Keys.tabs.documents.deleteFailed, { error: error.message }),
);
}
},
)
@@ -1275,21 +1285,21 @@ export const DocumentsTabComponent: React.FunctionComponent<IDocumentsTabCompone
const isPlural = selectedRows.size > 1;
const documentName = !isPreferredApiMongoDB
? isPlural
? `the selected ${selectedRows.size} items`
: "the selected item"
? t(Keys.tabs.documents.selectedItems, { count: selectedRows.size })
: t(Keys.tabs.documents.selectedItem)
: isPlural
? `the selected ${selectedRows.size} documents`
: "the selected document";
const msg = `Are you sure you want to delete ${documentName}?`;
? t(Keys.tabs.documents.selectedDocuments, { count: selectedRows.size })
: t(Keys.tabs.documents.selectedDocument);
const msg = t(Keys.tabs.documents.confirmDelete, { documentName });
useDialog
.getState()
.showOkCancelModalDialog(
"Confirm delete",
t(Keys.tabs.documents.confirmDeleteTitle),
msg,
"Delete",
t(Keys.common.delete),
() => deleteDocuments(Array.from(selectedRows).map((index) => documentIds[index as number])),
"Cancel",
t(Keys.common.cancel),
undefined,
);
}, [deleteDocuments, documentIds, isPreferredApiMongoDB, selectedRows]);
@@ -1470,7 +1480,11 @@ export const DocumentsTabComponent: React.FunctionComponent<IDocumentsTabCompone
const partitionKey = _partitionKey || (_collection && _collection.partitionKey);
const partitionKeyPropertyHeaders = _collection?.partitionKeyPropertyHeaders || partitionKey?.paths;
const partitionKeyProperties = partitionKeyPropertyHeaders?.map((partitionKeyPropertyHeader) =>
partitionKeyPropertyHeader.replace(/[/]+/g, ".").substring(1).replace(/[']+/g, ""),
partitionKeyPropertyHeader
.replace(/[/]+/g, ".")
.substring(1)
.replace(/[']+/g, "")
.replace(/["]+/g, ""),
);
return newDocumentId(rawDocument, partitionKeyProperties, partitionKeyValue);
@@ -1819,8 +1833,8 @@ export const DocumentsTabComponent: React.FunctionComponent<IDocumentsTabCompone
const partitionKeyProperty = partitionKeyProperties?.[0];
if (partitionKeyProperty !== "_id" && !_hasShardKeySpecified(documentContent)) {
const message = `The document is lacking the shard property: ${partitionKeyProperty}`;
useDialog.getState().showOkModalDialog("Create document failed", message);
const message = t(Keys.tabs.documents.missingShardProperty, { partitionKeyProperty });
useDialog.getState().showOkModalDialog(t(Keys.tabs.documents.createDocumentFailed), message);
onExecutionErrorChange(true);
TelemetryProcessor.traceFailure(
Action.CreateDocument,
@@ -1831,7 +1845,7 @@ export const DocumentsTabComponent: React.FunctionComponent<IDocumentsTabCompone
},
startKey,
);
Logger.logError("Failed to save new document: Document shard key not defined", "MongoDocumentsTab");
Logger.logError(t(Keys.tabs.documents.missingShardKeyLog), "MongoDocumentsTab");
throw new Error("Document without shard key");
}
@@ -1874,7 +1888,7 @@ export const DocumentsTabComponent: React.FunctionComponent<IDocumentsTabCompone
(error) => {
onExecutionErrorChange(true);
const errorMessage = getErrorMessage(error);
useDialog.getState().showOkModalDialog("Create document failed", errorMessage);
useDialog.getState().showOkModalDialog(t(Keys.tabs.documents.createDocumentFailed), errorMessage);
TelemetryProcessor.traceFailure(
Action.CreateDocument,
{
@@ -1945,7 +1959,7 @@ export const DocumentsTabComponent: React.FunctionComponent<IDocumentsTabCompone
(error) => {
onExecutionErrorChange(true);
const errorMessage = getErrorMessage(error);
useDialog.getState().showOkModalDialog("Update document failed", errorMessage);
useDialog.getState().showOkModalDialog(t(Keys.tabs.documents.updateDocumentFailed), errorMessage);
TelemetryProcessor.traceFailure(
Action.UpdateDocument,
{
@@ -2054,7 +2068,7 @@ export const DocumentsTabComponent: React.FunctionComponent<IDocumentsTabCompone
}
} catch (error) {
console.error(error);
useDialog.getState().showOkModalDialog("Refresh documents grid failed", getErrorMessage(error));
useDialog.getState().showOkModalDialog(t(Keys.tabs.documents.refreshGridFailed), getErrorMessage(error));
}
},
[createIterator, filterContent],
@@ -2066,18 +2080,17 @@ export const DocumentsTabComponent: React.FunctionComponent<IDocumentsTabCompone
* @returns 429 warning message
*/
const get429WarningMessageNoSql = (): string => {
let message = 'Some delete requests failed due to a "Request too large" exception (429)';
let message = t(Keys.tabs.documents.requestTooLargeBase);
if (bulkDeleteOperation.count === bulkDeleteProcess.successfulIds.length) {
message += ", but were successfully retried.";
message += ", " + t(Keys.tabs.documents.retriedSuccessfully);
} else if (bulkDeleteMode === "inProgress" || bulkDeleteMode === "aborting") {
message += ". Retrying now.";
message += ". " + t(Keys.tabs.documents.retryingNow);
} else {
message += ".";
}
return (message +=
" To prevent this in the future, consider increasing the throughput on your container or database.");
return (message += " " + t(Keys.tabs.documents.increaseThroughputTip));
};
const onColumnSelectionChange = (newSelectedColumnIds: string[]): void => {
@@ -2124,7 +2137,7 @@ export const DocumentsTabComponent: React.FunctionComponent<IDocumentsTabCompone
const nonBlankLastFilters = lastFilterContents.filter((filter) => filter.trim() !== "");
if (nonBlankLastFilters.length > 0) {
options.push({
label: "Saved filters",
label: t(Keys.tabs.documents.savedFilters),
options: nonBlankLastFilters,
});
}
@@ -2153,14 +2166,14 @@ export const DocumentsTabComponent: React.FunctionComponent<IDocumentsTabCompone
dropdownOptions={getFilterChoices()}
placeholder={
isPreferredApiMongoDB
? "Type a query predicate (e.g., {´a´:´foo´}), or choose one from the drop down list, or leave empty to query all documents."
: "Type a query predicate (e.g., WHERE c.id=´1´), or choose one from the drop down list, or leave empty to query all documents."
? t(Keys.tabs.documents.mongoFilterPlaceholder)
: t(Keys.tabs.documents.sqlFilterPlaceholder)
}
title="Type a query predicate or choose one from the list."
title={t(Keys.tabs.documents.filterTooltip)}
value={filterContent}
onChange={updateFilterContent}
onKeyDown={onFilterKeyDown}
bottomLink={{ text: "Learn more", url: DATA_EXPLORER_DOC_URL }}
bottomLink={{ text: t(Keys.common.learnMore), url: DATA_EXPLORER_DOC_URL }}
/>
<Button
appearance="primary"
@@ -2176,10 +2189,12 @@ export const DocumentsTabComponent: React.FunctionComponent<IDocumentsTabCompone
}
}}
disabled={isExecuting && isPreferredApiMongoDB}
aria-label={!isExecuting || isPreferredApiMongoDB ? "Apply filter" : "Cancel"}
aria-label={
!isExecuting || isPreferredApiMongoDB ? t(Keys.tabs.documents.applyFilter) : t(Keys.common.cancel)
}
tabIndex={0}
>
{!isExecuting || isPreferredApiMongoDB ? "Apply Filter" : "Cancel"}
{!isExecuting || isPreferredApiMongoDB ? t(Keys.tabs.documents.applyFilter) : t(Keys.common.cancel)}
</Button>
</div>
<Allotment
@@ -2223,14 +2238,14 @@ export const DocumentsTabComponent: React.FunctionComponent<IDocumentsTabCompone
</div>
{tableContainerSizePx?.width >= calculateOffset(selectedColumnIds.length) + 200 && (
<div
title="Refresh"
title={t(Keys.common.refresh)}
className={styles.refreshBtn}
role="button"
onClick={() => refreshDocumentsGrid(false)}
aria-label="Refresh"
aria-label={t(Keys.common.refresh)}
tabIndex={0}
>
<img src={RefreshIcon} alt="Refresh" />
<img src={RefreshIcon} alt={t(Keys.common.refresh)} />
</div>
)}
</div>
@@ -2243,7 +2258,7 @@ export const DocumentsTabComponent: React.FunctionComponent<IDocumentsTabCompone
onClick={() => loadNextPage(documentsIterator.iterator, false)}
onKeyDown={onLoadMoreKeyInput}
>
Load more
{t(Keys.tabs.documents.loadMore)}
</a>
)}
</div>
@@ -2255,7 +2270,7 @@ export const DocumentsTabComponent: React.FunctionComponent<IDocumentsTabCompone
language={"json"}
content={selectedDocumentContent}
isReadOnly={false}
ariaLabel={"Document editor"}
ariaLabel={t(Keys.tabs.documents.documentEditor)}
lineNumbers={"on"}
theme={"_theme"}
onContentChanged={_onEditorContentChange}
@@ -2263,7 +2278,9 @@ export const DocumentsTabComponent: React.FunctionComponent<IDocumentsTabCompone
/>
)}
{selectedRows.size > 1 && (
<span style={{ margin: 10 }}>Number of selected documents: {selectedRows.size}</span>
<span style={{ margin: 10 }}>
{t(Keys.tabs.documents.numberOfSelectedDocuments, { count: selectedRows.size })}
</span>
)}
</div>
</Allotment.Pane>
@@ -2272,42 +2289,43 @@ export const DocumentsTabComponent: React.FunctionComponent<IDocumentsTabCompone
{bulkDeleteOperation && (
<ProgressModalDialog
isOpen={isBulkDeleteDialogOpen}
dismissText="Abort"
dismissText={t(Keys.tabs.documents.abort)}
onDismiss={() => {
setIsBulkDeleteDialogOpen(false);
setBulkDeleteOperation(undefined);
}}
onCancel={() => setBulkDeleteMode("aborting")}
title={`Deleting ${bulkDeleteOperation.count} document(s)`}
message={`Successfully deleted ${bulkDeleteProcess.successfulIds.length} document(s).`}
title={t(Keys.tabs.documents.deletingDocuments, { count: bulkDeleteOperation.count })}
message={t(Keys.tabs.documents.deletedDocumentsSuccess, { count: bulkDeleteProcess.successfulIds.length })}
maxValue={bulkDeleteOperation.count}
value={bulkDeleteProcess.successfulIds.length}
mode={bulkDeleteMode}
>
<div className={styles.deleteProgressContent}>
{(bulkDeleteMode === "aborting" || bulkDeleteMode === "aborted") && (
<div style={{ paddingBottom: tokens.spacingVerticalL }}>Deleting document(s) was aborted.</div>
<div style={{ paddingBottom: tokens.spacingVerticalL }}>{t(Keys.tabs.documents.deleteAborted)}</div>
)}
{(bulkDeleteProcess.failedIds.length > 0 ||
(bulkDeleteProcess.throttledIds.length > 0 && bulkDeleteMode !== "inProgress")) && (
<MessageBar intent="error" style={{ marginBottom: tokens.spacingVerticalL }}>
<MessageBarBody>
<MessageBarTitle>Error</MessageBarTitle>
Failed to delete{" "}
{bulkDeleteMode === "inProgress"
? bulkDeleteProcess.failedIds.length
: bulkDeleteProcess.failedIds.length + bulkDeleteProcess.throttledIds.length}{" "}
document(s).
<MessageBarTitle>{t(Keys.tabs.documents.error)}</MessageBarTitle>
{t(Keys.tabs.documents.failedToDeleteDocuments, {
count:
bulkDeleteMode === "inProgress"
? bulkDeleteProcess.failedIds.length
: bulkDeleteProcess.failedIds.length + bulkDeleteProcess.throttledIds.length,
})}
</MessageBarBody>
</MessageBar>
)}
{bulkDeleteProcess.hasBeenThrottled && (
<MessageBar intent="warning">
<MessageBarBody>
<MessageBarTitle>Warning</MessageBarTitle>
<MessageBarTitle>{t(Keys.tabs.documents.warning)}</MessageBarTitle>
{get429WarningMessageNoSql()}{" "}
<Link href={NO_SQL_THROTTLING_DOC_URL} target="_blank">
Learn More
{t(Keys.common.learnMore)}
</Link>
</MessageBarBody>
</MessageBar>

View File

@@ -44,13 +44,13 @@ exports[`Documents tab (noSql API) when rendered should render the page 1`] = `
}
onChange={[Function]}
onKeyDown={[Function]}
placeholder="Type a query predicate (e.g., WHERE c.id=´1´), or choose one from the drop down list, or leave empty to query all documents."
placeholder="Type a query predicate (e.g., WHERE c.id="1"), or choose one from the drop down list, or leave empty to query all documents."
title="Type a query predicate or choose one from the list."
value=""
/>
<Button
appearance="primary"
aria-label="Apply filter"
aria-label="Apply Filter"
data-test="DocumentsTab/ApplyFilter"
disabled={false}
onClick={[Function]}

View File

@@ -1,6 +1,7 @@
import React, { Component } from "react";
import { configContext } from "../../../ConfigContext";
import * as ViewModels from "../../../Contracts/ViewModels";
import { Keys, t } from "Localization";
import { Action, ActionModifiers } from "../../../Shared/Telemetry/TelemetryConstants";
import * as TelemetryProcessor from "../../../Shared/Telemetry/TelemetryProcessor";
import { userContext } from "../../../UserContext";
@@ -212,7 +213,7 @@ export default class MongoShellTabComponent extends Component<
src={this.state.url}
id={this.props.tabsBaseInstance.tabId}
onLoad={(event) => this.setContentFocus(event)}
title="Mongo Shell"
title={t(Keys.tabs.mongoShell.title)}
role="tabpanel"
></iframe>
);

View File

@@ -17,6 +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, t } from "Localization";
import { QueryConstants } from "Shared/Constants";
import { LocalStorageUtility, StorageKey } from "Shared/StorageUtility";
import { Action } from "Shared/Telemetry/TelemetryConstants";
@@ -315,7 +316,9 @@ class QueryTabComponentImpl extends React.Component<QueryTabComponentImplProps,
};
public onSaveQueryClick = (): void => {
useSidePanel.getState().openSidePanel("Save Query", <SaveQueryPane explorer={this.props.collection.container} />);
useSidePanel
.getState()
.openSidePanel(t(Keys.tabs.query.saveQuery), <SaveQueryPane explorer={this.props.collection.container} />);
};
public launchQueryCopilotChat = (): void => {
@@ -325,7 +328,10 @@ class QueryTabComponentImpl extends React.Component<QueryTabComponentImplProps,
public onSavedQueriesClick = (): void => {
useSidePanel
.getState()
.openSidePanel("Open Saved Queries", <BrowseQueriesPane explorer={this.props.collection.container} />);
.openSidePanel(
t(Keys.tabs.query.openSavedQueries),
<BrowseQueriesPane explorer={this.props.collection.container} />,
);
};
public toggleResult(): void {
@@ -473,7 +479,8 @@ class QueryTabComponentImpl extends React.Component<QueryTabComponentImplProps,
protected getTabsButtons(): CommandButtonComponentProps[] {
const buttons: CommandButtonComponentProps[] = [];
if (this.executeQueryButton.visible) {
const label = this.state.selectedContent?.length > 0 ? "Execute Selection" : "Execute Query";
const label =
this.state.selectedContent?.length > 0 ? t(Keys.tabs.query.executeSelection) : t(Keys.tabs.query.executeQuery);
buttons.push({
iconSrc: ExecuteQueryIcon,
iconAlt: label,
@@ -490,7 +497,7 @@ class QueryTabComponentImpl extends React.Component<QueryTabComponentImplProps,
if (this.saveQueryButton.visible) {
if (configContext.platform !== Platform.Fabric) {
const label = "Save Query";
const label = t(Keys.tabs.query.saveQuery);
buttons.push({
iconSrc: SaveQueryIcon,
iconAlt: label,
@@ -507,11 +514,11 @@ class QueryTabComponentImpl extends React.Component<QueryTabComponentImplProps,
buttons.push({
iconSrc: DownloadQueryIcon,
iconAlt: "Download Query",
iconAlt: t(Keys.tabs.query.downloadQuery),
keyboardAction: KeyboardAction.DOWNLOAD_ITEM,
onCommandClick: this.onDownloadQueryClick,
commandButtonLabel: "Download Query",
ariaLabel: "Download Query",
commandButtonLabel: t(Keys.tabs.query.downloadQuery),
ariaLabel: t(Keys.tabs.query.downloadQuery),
hasPopup: false,
disabled: !this.saveQueryButton.enabled,
});
@@ -568,7 +575,7 @@ class QueryTabComponentImpl extends React.Component<QueryTabComponentImplProps,
// }
if (!this.props.isPreferredApiMongoDB && this.state.isExecuting) {
const label = "Cancel query";
const label = t(Keys.tabs.query.cancelQuery);
buttons.push({
iconSrc: CancelQueryIcon,
iconAlt: label,
@@ -589,23 +596,23 @@ class QueryTabComponentImpl extends React.Component<QueryTabComponentImplProps,
const verticalButton: CommandButtonComponentProps = {
isSelected: this.state.queryResultsView === SplitterDirection.Vertical,
iconSrc: this.state.queryResultsView === SplitterDirection.Vertical ? CheckIcon : undefined,
commandButtonLabel: "Vertical",
ariaLabel: "Vertical",
commandButtonLabel: t(Keys.tabs.query.vertical),
ariaLabel: t(Keys.tabs.query.vertical),
onCommandClick: () => this._setViewLayout(SplitterDirection.Vertical),
hasPopup: false,
};
const horizontalButton: CommandButtonComponentProps = {
isSelected: this.state.queryResultsView === SplitterDirection.Horizontal,
iconSrc: this.state.queryResultsView === SplitterDirection.Horizontal ? CheckIcon : undefined,
commandButtonLabel: "Horizontal",
ariaLabel: "Horizontal",
commandButtonLabel: t(Keys.tabs.query.horizontal),
ariaLabel: t(Keys.tabs.query.horizontal),
onCommandClick: () => this._setViewLayout(SplitterDirection.Horizontal),
hasPopup: false,
};
return {
commandButtonLabel: "View",
ariaLabel: "View",
commandButtonLabel: t(Keys.tabs.query.view),
ariaLabel: t(Keys.tabs.query.view),
hasPopup: true,
children: [verticalButton, horizontalButton],
};
@@ -782,7 +789,7 @@ class QueryTabComponentImpl extends React.Component<QueryTabComponentImplProps,
modelMarkers={this.state.modelMarkers}
isReadOnly={false}
wordWrap={"on"}
ariaLabel={"Editing Query"}
ariaLabel={t(Keys.tabs.query.editingQuery)}
lineNumbers={"on"}
theme={this.props.monacoTheme}
onContentChanged={(newContent: string) => this.onChangeContent(newContent)}

View File

@@ -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";
@@ -133,7 +134,7 @@ export default class StoredProcedureTabComponent extends React.Component<
this.collection = this.props.collection;
this.executeResultsEditorId = `executestoredprocedureresults${this.props.scriptTabBaseInstance.tabId}`;
this.executeLogsEditorId = `executestoredprocedurelogs${this.props.scriptTabBaseInstance.tabId}`;
this.props.scriptTabBaseInstance.ariaLabel("Stored Procedure Body");
this.props.scriptTabBaseInstance.ariaLabel(t(Keys.tabs.storedProcedure.body));
this.props.iStorProcTabComponentAccessor({
onExecuteSprocsResultEvent: this.onExecuteSprocsResult.bind(this),
@@ -318,7 +319,7 @@ export default class StoredProcedureTabComponent extends React.Component<
protected getTabsButtons(): CommandButtonComponentProps[] {
const buttons: CommandButtonComponentProps[] = [];
const label = "Save";
const label = t(Keys.common.save);
if (this.state.saveButton.visible) {
buttons.push({
iconSrc: SaveIcon,
@@ -333,7 +334,7 @@ export default class StoredProcedureTabComponent extends React.Component<
}
if (this.state.updateButton.visible) {
const label = "Update";
const label = t(Keys.common.update);
buttons.push({
iconSrc: SaveIcon,
iconAlt: label,
@@ -347,7 +348,7 @@ export default class StoredProcedureTabComponent extends React.Component<
}
if (this.state.discardButton.visible) {
const label = "Discard";
const label = t(Keys.common.discard);
buttons.push({
iconSrc: DiscardIcon,
iconAlt: label,
@@ -361,7 +362,7 @@ export default class StoredProcedureTabComponent extends React.Component<
}
if (this.state.executeButton.visible) {
const label = "Execute";
const label = t(Keys.common.execute);
buttons.push({
iconSrc: ExecuteQueryIcon,
iconAlt: label,
@@ -519,7 +520,7 @@ export default class StoredProcedureTabComponent extends React.Component<
<div className="tab-pane flexContainer stored-procedure-tab" role="tabpanel">
<div className="storedTabForm flexContainer">
<div className="formTitleFirst">
Stored Procedure Id
{t(Keys.tabs.storedProcedure.id)}
<span className="mandatoryStar" style={{ color: "#ff0707", fontSize: "14px", fontWeight: "bold" }}>
*&nbsp;
</span>
@@ -531,28 +532,28 @@ export default class StoredProcedureTabComponent extends React.Component<
required
pattern={ValidCosmosDbIdInputPattern.source}
title={ValidCosmosDbIdDescription}
aria-label="Stored procedure id"
placeholder="Enter the new stored procedure id"
aria-label={t(Keys.tabs.storedProcedure.idAriaLabel)}
placeholder={t(Keys.tabs.storedProcedure.idPlaceholder)}
size={40}
value={this.state.id}
onChange={(event: React.ChangeEvent<HTMLInputElement>) => this.handleIdOnChange(event)}
/>
</span>
<div className="spUdfTriggerHeader">Stored Procedure Body</div>
<div className="spUdfTriggerHeader">{t(Keys.tabs.storedProcedure.body)}</div>
<EditorReact
language={"javascript"}
content={this.state.sProcEditorContent}
isReadOnly={false}
ariaLabel={"Stored procedure body"}
ariaLabel={t(Keys.tabs.storedProcedure.bodyAriaLabel)}
lineNumbers={"on"}
theme={"_theme"}
onContentChanged={(newContent: string) => this.onChangeContent(newContent)}
/>
{this.state.hasResults && (
<div className="results-container">
<Pivot aria-label="Successful execution of stored procedure" style={{ height: "100%" }}>
<Pivot aria-label={t(Keys.tabs.storedProcedure.successfulExecution)} style={{ height: "100%" }}>
<PivotItem
headerText="Result"
headerText={t(Keys.common.result)}
headerButtonProps={{
"data-order": 1,
"data-title": "Result",
@@ -563,11 +564,11 @@ export default class StoredProcedureTabComponent extends React.Component<
language={"javascript"}
content={this.state.resultData}
isReadOnly={true}
ariaLabel={"Execute stored procedure result"}
ariaLabel={t(Keys.tabs.storedProcedure.resultAriaLabel)}
/>
</PivotItem>
<PivotItem
headerText="console.log"
headerText={t(Keys.tabs.storedProcedure.consoleLogTab)}
headerButtonProps={{
"data-order": 2,
"data-title": "console.log",
@@ -578,7 +579,7 @@ export default class StoredProcedureTabComponent extends React.Component<
language={"javascript"}
content={this.state.logsData}
isReadOnly={true}
ariaLabel={"Execute stored procedure logs"}
ariaLabel={t(Keys.tabs.storedProcedure.logsAriaLabel)}
/>
</PivotItem>
</Pivot>
@@ -586,16 +587,16 @@ export default class StoredProcedureTabComponent extends React.Component<
)}
{this.state.hasErrors && (
<div className="errors-container">
<div className="errors-header">Errors:</div>
<div className="errors-header">{t(Keys.tabs.storedProcedure.errors)}</div>
<div className="errorContent">
<span className="errorMessage">{this.state.error}</span>
<span className="errorDetailsLink">
<a
aria-label="Error details link"
aria-label={t(Keys.tabs.storedProcedure.errorDetailsAriaLabel)}
onClick={() => this.onErrorDetailsClick()}
onKeyPress={(event: React.KeyboardEvent<HTMLAnchorElement>) => this.onErrorDetailsKeyPress(event)}
>
More details
{t(Keys.tabs.storedProcedure.moreDetails)}
</a>
</span>
</div>

View File

@@ -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";
@@ -19,8 +20,8 @@ import { EditorReact } from "../Controls/Editor/EditorReact";
import { useCommandBar } from "../Menus/CommandBar/CommandBarComponentAdapter";
import TriggerTab from "./TriggerTab";
const triggerTypeOptions: IDropdownOption[] = [
{ key: "Pre", text: "Pre" },
{ key: "Post", text: "Post" },
{ key: "Pre", text: t(Keys.tabs.trigger.pre) },
{ key: "Post", text: t(Keys.tabs.trigger.post) },
];
const dropdownStyles: Partial<IDropdownStyles> = {
@@ -147,10 +148,10 @@ const dropdownStyles: Partial<IDropdownStyles> = {
};
const triggerOperationOptions: IDropdownOption[] = [
{ key: "All", text: "All" },
{ key: "Create", text: "Create" },
{ key: "Delete", text: "Delete" },
{ key: "Replace", text: "Replace" },
{ key: "All", text: t(Keys.tabs.trigger.all) },
{ key: "Create", text: t(Keys.tabs.trigger.operationCreate) },
{ key: "Delete", text: t(Keys.tabs.trigger.operationDelete) },
{ key: "Replace", text: t(Keys.tabs.trigger.operationReplace) },
];
interface Ibutton {
@@ -334,7 +335,7 @@ export class TriggerTabContent extends Component<TriggerTab, ITriggerTabContentS
protected getTabsButtons(): CommandButtonComponentProps[] {
const buttons: CommandButtonComponentProps[] = [];
const label = "Save";
const label = t(Keys.common.save);
if (this.saveButton.visible) {
buttons.push({
setState: this.setState,
@@ -351,7 +352,7 @@ export class TriggerTabContent extends Component<TriggerTab, ITriggerTabContentS
}
if (this.updateButton.visible) {
const label = "Update";
const label = t(Keys.common.update);
buttons.push({
...this,
iconSrc: SaveIcon,
@@ -366,7 +367,7 @@ export class TriggerTabContent extends Component<TriggerTab, ITriggerTabContentS
}
if (this.discardButton.visible) {
const label = "Discard";
const label = t(Keys.common.discard);
buttons.push({
setState: this.setState,
...this,
@@ -415,14 +416,14 @@ export class TriggerTabContent extends Component<TriggerTab, ITriggerTabContentS
<div className="tab-pane flexContainer trigger-form" role="tabpanel">
<TextField
className="trigger-field"
label="Trigger Id"
label={t(Keys.tabs.trigger.id)}
id="entityTimeId"
autoFocus
required
type="text"
pattern={ValidCosmosDbIdInputPattern.source}
title={ValidCosmosDbIdDescription}
placeholder="Enter the new trigger id"
placeholder={t(Keys.tabs.trigger.idPlaceholder)}
size={40}
value={triggerId}
readOnly={!isIdEditable}
@@ -446,8 +447,8 @@ export class TriggerTabContent extends Component<TriggerTab, ITriggerTabContentS
}}
/>
<Dropdown
placeholder="Trigger Type"
label="Trigger Type"
placeholder={t(Keys.tabs.trigger.type)}
label={t(Keys.tabs.trigger.type)}
options={triggerTypeOptions}
selectedKey={triggerType}
className="trigger-field"
@@ -455,8 +456,8 @@ export class TriggerTabContent extends Component<TriggerTab, ITriggerTabContentS
styles={dropdownStyles}
/>
<Dropdown
placeholder="Trigger Operation"
label="Trigger Operation"
placeholder={t(Keys.tabs.trigger.operation)}
label={t(Keys.tabs.trigger.operation)}
selectedKey={triggerOperation}
options={triggerOperationOptions}
className="trigger-field"
@@ -465,12 +466,12 @@ export class TriggerTabContent extends Component<TriggerTab, ITriggerTabContentS
}
styles={dropdownStyles}
/>
<Label className="trigger-field">Trigger Body</Label>
<Label className="trigger-field">{t(Keys.tabs.trigger.body)}</Label>
<EditorReact
language={"json"}
content={triggerBody}
isReadOnly={false}
ariaLabel={"Graph JSON"}
ariaLabel={t(Keys.tabs.trigger.bodyAriaLabel)}
onContentChanged={this.handleTriggerBodyChange}
/>
</div>

View File

@@ -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";
@@ -82,7 +83,7 @@ export default class UserDefinedFunctionTabContent extends Component<
protected getTabsButtons(): CommandButtonComponentProps[] {
const buttons: CommandButtonComponentProps[] = [];
const label = "Save";
const label = t(Keys.common.save);
if (this.saveButton.visible) {
buttons.push({
...this,
@@ -99,7 +100,7 @@ export default class UserDefinedFunctionTabContent extends Component<
}
if (this.updateButton.visible) {
const label = "Update";
const label = t(Keys.common.update);
buttons.push({
...this,
iconSrc: SaveIcon,
@@ -114,7 +115,7 @@ export default class UserDefinedFunctionTabContent extends Component<
}
if (this.discardButton.visible) {
const label = "Discard";
const label = t(Keys.common.discard);
buttons.push({
setState: this.setState,
...this,
@@ -265,7 +266,7 @@ export default class UserDefinedFunctionTabContent extends Component<
<FluentProvider theme={currentTheme}>
<TextField
className="trigger-field"
label="User Defined Function Id"
label={t(Keys.tabs.udf.id)}
id="entityTimeId"
autoFocus
required
@@ -273,7 +274,7 @@ export default class UserDefinedFunctionTabContent extends Component<
type="text"
pattern={ValidCosmosDbIdInputPattern.source}
title={ValidCosmosDbIdDescription}
placeholder="Enter the new user defined function id"
placeholder={t(Keys.tabs.udf.idPlaceholder)}
size={40}
value={udfId}
onChange={this.handleUdfIdChange}
@@ -299,12 +300,12 @@ export default class UserDefinedFunctionTabContent extends Component<
}}
/>{" "}
</FluentProvider>
<Label className="trigger-field">User Defined Function Body</Label>
<Label className="trigger-field">{t(Keys.tabs.udf.body)}</Label>
<EditorReact
language={"javascript"}
content={udfBody}
isReadOnly={false}
ariaLabel={"User defined function body"}
ariaLabel={t(Keys.tabs.udf.bodyAriaLabel)}
onContentChanged={this.handleUdfBodyChange}
/>
</div>

View File

@@ -1,3 +1,4 @@
import "./i18n";
import React, { useState } from "react";
import ReactDOM from "react-dom";
import Arrow from "../images/Arrow.svg";

View File

@@ -0,0 +1,14 @@
{
"Projects": [
{
"LanguageSet": "Azure_LanguagesExt",
"LocItems": [
{
"SourceFile": "src\\Localization\\en\\Resources.json",
"CopyOption": "LangIDOnPath",
"OutputPath": "src\\Localization"
}
]
}
]
}

View File

@@ -0,0 +1,727 @@
{
"common": {
"ok": "OK",
"cancel": "Zrušit",
"close": "Zavřít",
"save": "Uložit",
"delete": "Odstranit",
"update": "Aktualizovat",
"discard": "Zahodit",
"execute": "Provést",
"loading": "Načítání",
"loadingEllipsis": "Načítání…",
"next": "Další",
"previous": "Předchozí",
"yes": "Ano",
"no": "Ne",
"result": "Výsledek",
"learnMore": "Další informace",
"getStarted": "Začínáme",
"retry": "Zkusit znovu",
"apply": "Použít",
"refresh": "Aktualizovat",
"copy": "Kopírovat",
"create": "Vytvořit",
"confirm": "Potvrdit",
"open": "Otevřít",
"rename": "Přejmenovat",
"download": "Stáhnout",
"upload": "Nahrát",
"connect": "Připojit",
"remove": "Odebrat",
"load": "Načíst",
"publish": "Publikovat",
"browse": "Procházet",
"increaseValueBy1": "Zvýšit hodnotu o 1",
"decreaseValueBy1": "Snížit hodnotu o 1"
},
"splashScreen": {
"title": {
"default": "Vítá vás Azure Cosmos DB",
"postgres": "Vítá vás Azure Cosmos DB for PostgreSQL",
"vcoreMongo": "Vítá vás Azure DocumentDB (s kompatibilitou MongoDB)"
},
"subtitle": {
"default": "Globálně distribuovaná databázová služba s více modely pro libovolné škálování",
"getStarted": "Začněte s našimi ukázkovými datovými sadami, dokumentací a dalšími nástroji."
},
"quickStart": {
"title": "Spustit rychlý start",
"description": "Spusťte kurz rychlého startu a začněte pracovat s ukázkovými daty"
},
"newCollection": {
"title": "Nové: {{collectionName}}",
"description": "Vytvořit nový kontejner pro úložiště a propustnost"
},
"samplesGallery": {
"title": "Galerie ukázek Azure Cosmos DB",
"description": "Prohlédněte si ukázky, které představují škálovatelné a inteligentní vzory aplikací. Vyzkoušejte si to hned a uvidíte, jak rychle můžete s Cosmos DB přejít od konceptu ke kódu."
},
"connectCard": {
"title": "Připojit",
"description": "Dáváte přednost používání vlastních nástrojů? Najděte připojovací řetězec, který potřebujete k připojení",
"pgAdmin": {
"title": "Připojit pomocí pgAdmin",
"description": "Upřednostňujete pgAdmin? Tady najdete připojovací řetězce."
},
"vsCode": {
"title": "Připojení pomocí VS Code",
"description": "Dotazujte se na své clustery MongoDB a DocumentDB a spravujte je ve Visual Studio Code"
}
},
"shell": {
"postgres": {
"title": "Prostředí PostgreSQL",
"description": "Vytvoření tabulky a interakce s daty pomocí rozhraní prostředí PostgreSQL"
},
"vcoreMongo": {
"title": "Prostředí Mongo",
"description": "Vytvořte kolekci a pracujte s daty pomocí rozhraní prostředí MongoDB"
}
},
"teachingBubble": {
"newToPostgres": {
"headline": "Začínáte s Cosmos DB PGSQL?",
"body": "Vítejte! Pokud s Cosmos DB PGSQL začínáte a potřebujete pomoc s prvními kroky, najdete tady ukázková data a dotazy."
},
"resetPassword": {
"headline": "Vytvořte si heslo",
"body": "Pokud jste si ještě nezměnili heslo, změňte si ho teď."
},
"coachMark": {
"headline": "Začít s ukázkou {{collectionName}}",
"body": "Provedeme vás vytvořením ukázkového kontejneru s ukázkovými daty. Pak vás provedeme průzkumníkem dat. Můžete také zrušit spuštění této prohlídky a prozkoumat si vše sami"
}
},
"sections": {
"recents": "Poslední",
"clearRecents": "Vymazat poslední",
"top3": "3 nejdůležitější věci, které potřebujete vědět",
"learningResources": "Studijní materiály",
"nextSteps": "Další kroky",
"tipsAndLearnMore": "Tipy a další informace",
"notebook": "Poznámkový blok",
"needHelp": "Potřebujete pomoc?"
},
"top3Items": {
"sql": {
"advancedModeling": {
"title": "Pokročilé vzory modelování",
"description": "Seznamte se s pokročilými strategiemi pro optimalizaci databáze."
},
"partitioning": {
"title": "Osvědčené postupy vytváření oddílů",
"description": "Naučte se používat strategie datového modelu a rozdělení na oddíly"
},
"resourcePlanning": {
"title": "Naplánujte si požadavky na zdroje",
"description": "Seznamte se s různými možnostmi konfigurace."
}
},
"mongo": {
"whatIsMongo": {
"title": "Co je rozhraní MongoDB API?",
"description": "Seznamte se se službou Azure Cosmos DB for MongoDB a s jejími funkcemi."
},
"features": {
"title": "Funkce a syntaxe",
"description": "Objevte výhody a funkce"
},
"migrate": {
"title": "Migrovat data",
"description": "Kroky před migrací pro přesun dat"
}
},
"cassandra": {
"buildJavaApp": {
"title": "Vytvořte aplikaci Java",
"description": "Vytvořte aplikaci v Javě pomocí sady SDK."
},
"partitioning": {
"title": "Osvědčené postupy vytváření oddílů",
"description": "Zjistěte, jak funguje dělení na oddíly."
},
"requestUnits": {
"title": "Jednotky žádosti (RU)",
"description": "Vysvětlení poplatků za RU"
}
},
"gremlin": {
"dataModeling": {
"title": "Modelování dat",
"description": "Doporučení k modelování dat grafu"
},
"partitioning": {
"title": "Osvědčené postupy vytváření oddílů",
"description": "Zjistěte, jak funguje dělení na oddíly"
},
"queryData": {
"title": "Data dotazu",
"description": "Dotazování na data pomocí Gremlin"
}
},
"tables": {
"whatIsTable": {
"title": "Co je Table API?",
"description": "Seznamte se se službou Azure Cosmos DB for Table a s jejími funkcemi"
},
"migrate": {
"title": "Migrujte svá data",
"description": "Informace o migraci dat"
},
"faq": {
"title": "Nejčastější dotazy k Azure Cosmos DB for Table",
"description": "Běžné otázky k Azure Cosmos DB for Table"
}
}
},
"learningResources": {
"shortcuts": {
"title": "Klávesové zkratky Data Exploreru",
"description": "Naučte se klávesové zkratky pro navigaci v Data Exploreru."
},
"liveTv": {
"title": "Naučte se základy",
"description": "Podívejte se na úvodní videa a videa s postupy Azure Cosmos DB Live TV."
},
"sql": {
"sdk": {
"title": "Začínáme s používáním sady SDK",
"description": "Přečtěte si o sadě Azure Cosmos DB SDK."
},
"migrate": {
"title": "Migrovat data",
"description": "Migrujte data pomocí služeb Azure a opensourcových řešení."
}
},
"mongo": {
"nodejs": {
"title": "Vytvořit aplikaci s Node.js",
"description": "Vytvořte aplikaci Node.js."
},
"gettingStarted": {
"title": "Úvodní příručka",
"description": "Seznamte se se základy, které vám pomůžou začít."
}
},
"cassandra": {
"createContainer": {
"title": "Vytvořit kontejner",
"description": "Seznamte se s možnostmi vytvoření kontejneru."
},
"throughput": {
"title": "Zřídit propustnost",
"description": "Zjistěte, jak nakonfigurovat propustnost."
}
},
"gremlin": {
"getStarted": {
"title": "Začínáme ",
"description": "Vytvoření, dotaz a procházení pomocí konzoly Gremlin"
},
"importData": {
"title": "Importovat data grafu",
"description": "Naučte se hromadně přijímat data pomocí BulkExecutor"
}
},
"tables": {
"dotnet": {
"title": "Vytvoření aplikace .NET",
"description": "Jak získat přístup k Azure Cosmos DB for Table z aplikace .NET"
},
"java": {
"title": "Vytvořte aplikaci Java",
"description": "Vytvořte aplikaci Azure Cosmos DB for Table se sadou Java SDK "
}
}
},
"nextStepItems": {
"postgres": {
"dataModeling": "Modelování dat",
"distributionColumn": "Jak zvolit sloupec pro distribuci",
"buildApps": "Vytvářejte aplikace pomocí Pythonu, Javy nebo Django"
},
"vcoreMongo": {
"migrateData": "Migrovat data",
"vectorSearch": "Vytvářejte AI aplikace pomocí vektorového vyhledávání",
"buildApps": "Vytvářejte aplikace pomocí Node.js"
}
},
"learnMoreItems": {
"postgres": {
"performanceTuning": "Optimalizace výkonu",
"diagnosticQueries": "Užitečné diagnostické dotazy",
"sqlReference": "Referenční informace k distribuovanému SQL"
},
"vcoreMongo": {
"vectorSearch": "Vektorové vyhledávání",
"textIndexing": "Indexování textu",
"troubleshoot": "Řešení častých problémů"
}
},
"fabric": {
"buildTitle": "Vytvořit databázi",
"useTitle": "Použijte svou databázi",
"newContainer": {
"title": "Nový kontejner",
"description": "Vytvořit cílový kontejner pro uložení dat"
},
"sampleData": {
"title": "Ukázková data",
"description": "Načtěte ukázková data do své databáze"
},
"sampleVectorData": {
"title": "Ukázková vektorová data",
"description": "Načíst ukázková vektorová data pomocí text-embedding-ada-002"
},
"appDevelopment": {
"title": "Vývoj aplikací",
"description": "Začněte tady, pokud chcete k vytváření aplikací použít sadu SDK"
},
"sampleGallery": {
"title": "Galerie ukázek",
"description": "Získejte komplexní ukázky z reálného světa"
}
},
"sampleDataDialog": {
"title": "Ukázková data",
"startButton": "Spustit",
"createPrompt": "Vytvořte kontejner {{containerName}} a importujte do něj ukázková data. Může to trvat několik minut.",
"creatingContainer": "Vytváří se kontejner {{containerName}}...",
"importingData": "Importují se data do {{containerName}}...",
"success": "{{containerName}} úspěšně vytvořeno s ukázkovými daty",
"errorContainerExists": "Kontejner {{containerName}} v databázi {{databaseName}} už existuje. Odstraňte ho prosím a zkuste to znovu.",
"errorCreateContainer": "Nepovedlo se vytvořit kontejner: {{error}}",
"errorImportData": "Nepovedlo se naimportovat data: {{error}}"
}
},
"contextMenu": {
"newContainer": "Nový kontejner {{containerName}}",
"restoreContainer": "Obnovit kontejner {{containerName}}",
"deleteDatabase": "Odstranit databázi {{databaseName}}",
"deleteContainer": "Odstranit kontejner {{containerName}}",
"newSqlQuery": "Nový dotaz SQL",
"newQuery": "Nový dotaz",
"openMongoShell": "Otevřít Mongo Shell",
"newShell": "Nové prostředí",
"openCassandraShell": "Otevřít prostředí Cassandra",
"newStoredProcedure": "Nová uložená procedura",
"newUdf": "Nové UDF",
"newTrigger": "Nová aktivační událost",
"deleteStoredProcedure": "Odstranit uloženou proceduru",
"deleteTrigger": "Odstranit aktivační událost",
"deleteUdf": "Odstranit uživatelem definovanou funkci"
},
"tabs": {
"documents": {
"newItem": "Nová položka",
"newDocument": "Nový dokument",
"uploadItem": "Nahrát položku",
"applyFilter": "Použít filtr",
"unsavedChanges": "Neuložené změny",
"unsavedChangesMessage": "Vaše neuložené změny se ztratí. Chcete pokračovat?",
"createDocumentFailed": "Vytvoření dokumentu se nezdařilo",
"updateDocumentFailed": "Nepovedlo se aktualizovat dokument",
"documentDeleted": "Dokument se úspěšně odstranil.",
"deleteDocumentDialogTitle": "Odstranit dokument",
"deleteDocumentsDialogTitle": "Odstranit dokumenty",
"throttlingError": "Některé dokumenty se nepovedlo odstranit kvůli chybě omezení rychlosti. Zkuste to prosím znovu později. Pokud tomu chcete v budoucnu zabránit, zvažte zvýšení propustnosti vašeho kontejneru nebo databáze.",
"deleteFailed": "Odstranění dokumentů (celkem {{error}}) se nezdařilo",
"missingShardProperty": "V dokumentu chybí vlastnost extentu: {{partitionKeyProperty}}",
"refreshGridFailed": "Nepovedlo se aktualizovat mřížku dokumentů",
"confirmDelete": "Opravdu chcete odstranit dokument {{documentName}}?",
"confirmDeleteTitle": "Potvrdit odstranění",
"selectedItems": "vybrané položky (celkem {{count}})",
"selectedItem": "vybraná položka",
"selectedDocuments": "vybrané dokumenty (celkem {{count}})",
"selectedDocument": "vybraný dokument",
"deleteDocumentFailedLog": "Nepovedlo se odstranit dokument {{documentId}} se stavovým kódem {{statusCode}}",
"deleteSuccessLog": "Dokumenty (celkem {{count}}) se úspěšně odstranily",
"deleteThrottledLog": "Nepovedlo se odstranit tento počet dokumentů: {{count}}, protože došlo k chybě „Žádost je příliš velká“ (429). Opakování…",
"missingShardKeyLog": "Nepovedlo se uložit nový dokument: Klíč extentu dokumentu není definovaný",
"filterTooltip": "Zadejte predikát dotazu nebo ho vyberte ze seznamu.",
"loadMore": "Načíst další",
"documentEditor": "Editor dokumentů",
"savedFilters": "Uložené filtry",
"defaultFilters": "Výchozí filtry",
"abort": "Přerušit",
"deletingDocuments": "Odstraňují se dokumenty (celkem {{count}})",
"deletedDocumentsSuccess": "Dokumenty (celkem {{count}}) se úspěšně odstranily.",
"deleteAborted": "Odstraňování dokumentů bylo přerušeno.",
"failedToDeleteDocuments": "Nepovedlo se odstranit dokumenty (celkem {{count}}).",
"requestTooLargeBase": "Některé žádosti o odstranění selhaly kvůli výjimce „Žádost je příliš velká“ (429)",
"retriedSuccessfully": "Bylo ale úspěšně opakováno.",
"retryingNow": "Probíhá opakovaný pokus.",
"increaseThroughputTip": "Pokud tomu chcete v budoucnu zabránit, zvažte zvýšení propustnosti vašeho kontejneru nebo databáze.",
"numberOfSelectedDocuments": "Počet vybraných dokumentů: {{count}}",
"mongoFilterPlaceholder": "Zadejte predikát dotazu (např. {\"id\":\"foo\"}) nebo zvolte některý z rozevíracího seznamu, případně to ponechte prázdné pro dotazování všech dokumentů.",
"sqlFilterPlaceholder": "Zadejte predikát dotazu (např. WHERE c.id=\"1\") nebo zvolte některý z rozevíracího seznamu, případně to ponechte prázdné pro dotazování všech dokumentů.",
"error": "Chyba",
"warning": "Upozornění"
},
"query": {
"executeQuery": "Spustit dotaz",
"executeSelection": "Spustit výběr",
"saveQuery": "Uložit dotaz",
"downloadQuery": "Stáhnout dotaz",
"cancelQuery": "Zrušit dotaz",
"openSavedQueries": "Otevřít uložené dotazy",
"vertical": "Svislé",
"horizontal": "Vodorovné",
"view": "Zobrazit",
"editingQuery": "Upravuje se dotaz"
},
"storedProcedure": {
"id": "ID uložené procedury",
"idPlaceholder": "Zadejte nové ID uložené procedury",
"idAriaLabel": "ID uložené procedury",
"body": "Text uložené procedury",
"bodyAriaLabel": "Text uložené procedury",
"successfulExecution": "Úspěšné spuštění uložené procedury",
"resultAriaLabel": "Spustit výsledek uložené procedury",
"logsAriaLabel": "Spustit protokoly uložených procedur",
"errors": "Chyby:",
"errorDetailsAriaLabel": "Odkaz na podrobnosti o chybě",
"moreDetails": "Více podrobností",
"consoleLogTab": "console.log"
},
"trigger": {
"id": "ID aktivační události",
"idPlaceholder": "Zadejte nové ID aktivační události",
"type": "Typ aktivační události",
"operation": "Operace aktivační události",
"body": "Tělo aktivační události",
"bodyAriaLabel": "Text aktivační události",
"pre": "Před",
"post": "Publikovat",
"all": "Vše",
"operationCreate": "Vytvořit",
"operationDelete": "Odstranit",
"operationReplace": "Nahradit"
},
"udf": {
"id": "ID uživatelem definované funkce",
"idPlaceholder": "Zadejte nové ID uživatelem definované funkce",
"body": "Text uživatelem definované funkce",
"bodyAriaLabel": "Text uživatelem definované funkce"
},
"conflicts": {
"unsavedChanges": "Neuložené změny",
"changesWillBeLost": "Změny budou ztraceny. Chcete pokračovat?",
"resolveConflictFailed": "Vyřešení konfliktu se nezdařilo",
"deleteConflictFailed": "Odstranění konfliktu se nezdařilo",
"refreshGridFailed": "Nepovedlo se aktualizovat mřížku dokumentů"
},
"mongoShell": {
"title": "Prostředí Mongo"
}
},
"panes": {
"deleteDatabase": {
"panelTitle": "Delete {{databaseName}}",
"warningMessage": "Warning! The action you are about to take cannot be undone. Continuing will permanently delete this resource and all of its children resources.",
"confirmPrompt": "Confirm by typing the {{databaseName}} id (name)",
"inputMismatch": "Input {{databaseName}} name \"{{input}}\" does not match the selected {{databaseName}} \"{{selectedId}}\"",
"feedbackTitle": "Help us improve Azure Cosmos DB!",
"feedbackReason": "What is the reason why you are deleting this {{databaseName}}?"
},
"deleteCollection": {
"panelTitle": "Delete {{collectionName}}",
"confirmPrompt": "Confirm by typing the {{collectionName}} id",
"inputMismatch": "Input id {{input}} does not match the selected {{selectedId}}",
"feedbackTitle": "Help us improve Azure Cosmos DB!",
"feedbackReason": "What is the reason why you are deleting this {{collectionName}}?"
},
"addDatabase": {
"databaseLabel": "Database {{suffix}}",
"databaseIdLabel": "Database id",
"keyspaceIdLabel": "Keyspace id",
"databaseIdPlaceholder": "Type a new {{databaseLabel}} id",
"databaseTooltip": "A {{databaseLabel}} is a logical container of one or more {{collectionsLabel}}",
"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."
},
"addCollection": {
"createNew": "Create new",
"useExisting": "Use existing",
"databaseTooltip": "A database is analogous to a namespace. It is the unit of management for a set of {{collectionName}}.",
"shareThroughput": "Share throughput across {{collectionName}}",
"shareThroughputTooltip": "Throughput configured at the database level will be shared across all {{collectionName}} within the database.",
"collectionIdLabel": "{{collectionName}} id",
"collectionIdTooltip": "Unique identifier for the {{collectionName}} and used for id-based routing through REST and all SDKs.",
"collectionIdPlaceholder": "e.g., {{collectionName}}1",
"collectionIdAriaLabel": "{{collectionName}} id, Example {{collectionName}}1",
"existingDatabaseAriaLabel": "Choose existing {{databaseName}} id",
"existingDatabasePlaceholder": "Choose existing {{databaseName}} id",
"indexing": "Indexing",
"turnOnIndexing": "Turn on indexing",
"automatic": "Automatic",
"turnOffIndexing": "Turn off indexing",
"off": "Off",
"sharding": "Sharding",
"shardingTooltip": "Sharded collections split your data across many replica sets (shards) to achieve unlimited scalability. Sharded collections require choosing a shard key (field) to evenly distribute your data.",
"unsharded": "Unsharded",
"unshardedLabel": "Unsharded (20GB limit)",
"sharded": "Sharded",
"addPartitionKey": "Add hierarchical partition key",
"hierarchicalPartitionKeyInfo": "This feature allows you to partition your data with up to three levels of keys for better data distribution. Requires .NET V3, Java V4 SDK, or preview JavaScript V3 SDK.",
"provisionDedicatedThroughput": "Provision dedicated throughput for this {{collectionName}}",
"provisionDedicatedThroughputTooltip": "You can optionally provision dedicated throughput for a {{collectionName}} within a database that has throughput provisioned. This dedicated throughput amount will not be shared with other {{collectionNamePlural}} in the database and does not count towards the throughput you provisioned for the database. This throughput amount will be billed in addition to the throughput amount you provisioned at the database level.",
"uniqueKeysPlaceholderMongo": "Comma separated paths e.g. firstName,address.zipCode",
"uniqueKeysPlaceholderSql": "Comma separated paths e.g. /firstName,/address/zipCode",
"addUniqueKey": "Add unique key",
"enableAnalyticalStore": "Enable analytical store",
"disableAnalyticalStore": "Disable analytical store",
"on": "On",
"analyticalStoreSynapseLinkRequired": "Azure Synapse Link is required for creating an analytical store {{collectionName}}. Enable Synapse Link for this Cosmos DB account.",
"enable": "Enable",
"containerVectorPolicy": "Container Vector Policy",
"containerFullTextSearchPolicy": "Container Full Text Search Policy",
"advanced": "Advanced",
"mongoIndexingTooltip": "The _id field is indexed by default. Creating a wildcard index for all fields will optimize queries and is recommended for development.",
"createWildcardIndex": "Create a Wildcard Index on all fields",
"legacySdkCheckbox": "My application uses an older Cosmos .NET or Java SDK version (.NET V1 or Java V2)",
"legacySdkInfo": "To ensure compatibility with older SDKs, the created container will use a legacy partitioning scheme that supports partition key values of size only up to 101 bytes. If this is enabled, you will not be able to use hierarchical partition keys.",
"indexingOnInfo": "All properties in your documents will be indexed by default for flexible and efficient queries.",
"indexingOffInfo": "Indexing will be turned off. Recommended if you don't need to run queries or only have key value operations.",
"indexingOffWarning": "By creating this container with indexing turned off, you will not be able to make any indexing policy changes. Indexing changes are only allowed on a container with a indexing policy.",
"acknowledgeSpendErrorMonthly": "Please acknowledge the estimated monthly spend.",
"acknowledgeSpendErrorDaily": "Please acknowledge the estimated daily spend.",
"unshardedMaxRuError": "Unsharded collections support up to 10,000 RUs",
"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"
},
"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.",
"partitionKeyTooltip": "The {{partitionKeyName}} is used to automatically distribute data across partitions for scalability. Choose a property in your JSON document that has a wide range of values and evenly distributes request volume.",
"partitionKeyTooltipSqlSuffix": " For small read-heavy workloads or write-heavy workloads of any size, id is often a good choice.",
"shardKeyLabel": "Shard key",
"partitionKeyLabel": "Partition key",
"shardKeyPlaceholder": "e.g., categoryId",
"partitionKeyPlaceholderDefault": "e.g., /address",
"partitionKeyPlaceholderFirst": "Required - first partition key e.g., /TenantId",
"partitionKeyPlaceholderSecond": "druhý klíč oddílu, například /UserId",
"partitionKeyPlaceholderThird": "third partition key e.g., /SessionId",
"partitionKeyPlaceholderGraph": "e.g., /address/zipCode",
"uniqueKeysTooltip": "Unique keys provide developers with the ability to add a layer of data integrity to their database. By creating a unique key policy when a container is created, you ensure the uniqueness of one or more values per partition key.",
"uniqueKeysLabel": "Unique keys",
"analyticalStoreLabel": "Analytical Store",
"analyticalStoreTooltip": "Enable analytical store capability to perform near real-time analytics on your operational data, without impacting the performance of transactional workloads.",
"analyticalStoreDescription": "Enable analytical store capability to perform near real-time analytics on your operational data, without impacting the performance of transactional workloads.",
"vectorPolicyTooltip": "Describe any properties in your data that contain vectors, so that they can be made available for similarity queries."
},
"settings": {
"pageOptions": "Page Options",
"pageOptionsDescription": "Choose Custom to specify a fixed amount of query results to show, or choose Unlimited to show as many query results per page.",
"queryResultsPerPage": "Query results per page",
"queryResultsPerPageTooltip": "Enter the number of query results that should be shown per page.",
"customQueryItemsPerPage": "Custom query items per page",
"custom": "Custom",
"unlimited": "Unlimited",
"entraIdRbac": "Enable Entra ID RBAC",
"entraIdRbacDescription": "Choose Automatic to enable Entra ID RBAC automatically. True/False to force enable/disable Entra ID RBAC.",
"true": "True",
"false": "False",
"regionSelection": "Region Selection",
"regionSelectionDescription": "Changes region the Cosmos Client uses to access account.",
"selectRegion": "Select Region",
"selectRegionTooltip": "Changes the account endpoint used to perform client operations.",
"globalDefault": "Global (Default)",
"readWrite": "(Read/Write)",
"read": "(Read)",
"queryTimeout": "Query Timeout",
"queryTimeoutDescription": "When a query reaches a specified time limit, a popup with an option to cancel the query will show unless automatic cancellation has been enabled.",
"enableQueryTimeout": "Enable query timeout",
"queryTimeoutMs": "Query timeout (ms)",
"automaticallyCancelQuery": "Automatically cancel query after timeout",
"ruLimit": "RU Limit",
"ruLimitDescription": "If a query exceeds a configured RU limit, the query will be aborted.",
"enableRuLimit": "Enable RU limit",
"ruLimitLabel": "RU Limit (RU)",
"defaultQueryResults": "Default Query Results View",
"defaultQueryResultsDescription": "Select the default view to use when displaying query results.",
"retrySettings": "Retry Settings",
"retrySettingsDescription": "Retry policy associated with throttled requests during CosmosDB queries.",
"maxRetryAttempts": "Max retry attempts",
"maxRetryAttemptsTooltip": "Max number of retries to be performed for a request. Default value 9.",
"fixedRetryInterval": "Fixed retry interval (ms)",
"fixedRetryIntervalTooltip": "Fixed retry interval in milliseconds to wait between each retry ignoring the retryAfter returned as part of the response. Default value is 0 milliseconds.",
"maxWaitTime": "Max wait time (s)",
"maxWaitTimeTooltip": "Max wait time in seconds to wait for a request while the retries are happening. Default value 30 seconds.",
"enableContainerPagination": "Enable container pagination",
"enableContainerPaginationDescription": "Load 50 containers at a time. Currently, containers are not pulled in alphanumeric order.",
"enableCrossPartitionQuery": "Enable cross-partition query",
"enableCrossPartitionQueryDescription": "Send more than one request while executing a query. More than one request is necessary if the query is not scoped to single partition key value.",
"maxDegreeOfParallelism": "Maximální stupeň paralelismu",
"maxDegreeOfParallelismDescription": "Gets or sets the number of concurrent operations run client side during parallel query execution. A positive property value limits the number of concurrent operations to the set value. If it is set to less than 0, the system automatically decides the number of concurrent operations to run.",
"maxDegreeOfParallelismQuery": "Query up to the max degree of parallelism.",
"priorityLevel": "Priority Level",
"priorityLevelDescription": "Sets the priority level for data-plane requests from Data Explorer when using Priority-Based Execution. If \"None\" is selected, Data Explorer will not specify priority level, and the server-side default priority level will be used.",
"displayGremlinQueryResults": "Display Gremlin query results as:",
"displayGremlinQueryResultsDescription": "Select Graph to automatically visualize the query results as a Graph or JSON to display the results as JSON.",
"graph": "Graph",
"json": "JSON",
"graphAutoVisualization": "Graph Auto-visualization",
"enableSampleDatabase": "Enable sample database",
"enableSampleDatabaseDescription": "This is a sample database and collection with synthetic product data you can use to explore using NoSQL queries. This will appear as another database in the Data Explorer UI, and is created by, and maintained by Microsoft at no cost to you.",
"enableSampleDbAriaLabel": "Enable sample db for query exploration",
"guidRepresentation": "Guid Representation",
"guidRepresentationDescription": "GuidRepresentation in MongoDB refers to how Globally Unique Identifiers (GUIDs) are serialized and deserialized when stored in BSON documents. This will apply to all document operations.",
"advancedSettings": "Advanced Settings",
"ignorePartitionKey": "Ignore partition key on document update",
"ignorePartitionKeyTooltip": "If checked, the partition key value will not be used to locate the document during update operations. Only use this if document updates are failing due to an abnormal partition key.",
"clearHistory": "Clear History",
"clearHistoryConfirm": "Opravdu chcete pokračovat?",
"clearHistoryDescription": "This action will clear the all customizations for this account in this browser, including:",
"clearHistoryTabLayout": "Reset your customized tab layout, including the splitter positions",
"clearHistoryTableColumns": "Erase your table column preferences, including any custom columns",
"clearHistoryFilters": "Clear your filter history",
"clearHistoryRegion": "Reset region selection to global",
"increaseValueBy1000": "Increase value by 1000",
"decreaseValueBy1000": "Decrease value by 1000",
"none": "None",
"low": "Low",
"high": "High",
"automatic": "Automatic",
"enhancedQueryControl": "Enhanced query control",
"enableQueryControl": "Enable query control",
"explorerVersion": "Explorer Version",
"accountId": "Account ID",
"sessionId": "Session ID",
"popupsDisabledError": "We were unable to establish authorization for this account, due to pop-ups being disabled in the browser.\nPlease enable pop-ups for this site and click on \"Login for Entra ID\" button",
"failedToAcquireTokenError": "Failed to acquire authorization token automatically. Please click on \"Login for Entra ID\" button to enable Entra ID RBAC operations"
},
"saveQuery": {
"panelTitle": "Save Query",
"setupCostMessage": "For compliance reasons, we save queries in a container in your Azure Cosmos account, in a separate database called “{{databaseName}}”. To proceed, we need to create a container in your account, estimated additional cost is $0.77 daily.",
"completeSetup": "Complete setup",
"noQueryNameError": "No query name specified",
"invalidQueryContentError": "Invalid query content specified",
"failedToSaveQueryError": "Failed to save query {{queryName}}",
"failedToSetupContainerError": "Failed to setup a container for saved queries",
"accountNotSetupError": "Failed to save query: account not setup to save queries",
"name": "Name"
},
"loadQuery": {
"noFileSpecifiedError": "No file specified",
"failedToLoadQueryError": "Dotaz se nepovedlo načíst.",
"failedToLoadQueryFromFileError": "Failed to load query from file {{fileName}}",
"selectFilesToOpen": "Select a query document",
"browseFiles": "Browse"
},
"executeStoredProcedure": {
"enterInputParameters": "Enter input parameters (if any)",
"key": "Key",
"param": "Param",
"partitionKeyValue": "Partition key value",
"value": "Value",
"addNewParam": "Add New Param",
"addParam": "Add param",
"deleteParam": "Delete param",
"invalidParamError": "Invalid param specified: {{invalidParam}}",
"invalidParamConsoleError": "Invalid param specified: {{invalidParam}} is not a valid literal value",
"stringType": "String",
"customType": "Custom"
},
"uploadItems": {
"noFilesSpecifiedError": "No files were specified. Please input at least one file.",
"selectJsonFiles": "Select JSON Files",
"selectJsonFilesTooltip": "Select one or more JSON files to upload. Each file can contain a single JSON document or an array of JSON documents. The combined size of all files in an individual upload operation must be less than 2 MB. You can perform multiple upload operations for larger data sets.",
"fileNameColumn": "FILE NAME",
"statusColumn": "STATUS",
"uploadStatus": "{{numSucceeded}} created, {{numThrottled}} throttled, {{numFailed}} errors",
"uploadedFiles": "Uploaded files"
},
"copyNotebook": {
"copyFailedError": "Failed to copy {{name}} to {{destination}}",
"uploadFailedError": "Failed to upload {{name}}",
"location": "Location",
"locationAriaLabel": "Location",
"selectLocation": "Select a notebook location to copy",
"name": "Name"
},
"publishNotebook": {
"publishFailedError": "Failed to publish {{notebookName}} to gallery",
"publishDescription": "When published, this notebook will appear in the Azure Cosmos DB notebooks public gallery. Make sure you have removed any sensitive data or output before publishing.",
"publishPrompt": "Would you like to publish and share \"{{name}}\" to the gallery?",
"coverImage": "Cover image",
"coverImageUrl": "Cover image url",
"name": "Name",
"description": "Description",
"tags": "Tags",
"tagsPlaceholder": "Optional tag 1, Optional tag 2",
"preview": "Preview",
"urlType": "URL",
"customImage": "Custom Image",
"takeScreenshot": "Take Screenshot",
"useFirstDisplayOutput": "Use First Display Output",
"failedToCaptureOutput": "Failed to capture first output",
"outputDoesNotExist": "Output does not exist for any of the cells.",
"failedToConvertError": "Failed to convert {{fileName}} to base64 format",
"failedToUploadError": "Failed to upload {{fileName}}"
},
"changePartitionKey": {
"failedToStartError": "Failed to start data transfer job",
"suboptimalPartitionKeyError": "Warning: The system has detected that your collection may be using a suboptimal partition key",
"description": "When changing a containers partition key, you will need to create a destination container with the correct partition key. You may also select an existing destination container.",
"sourceContainerId": "Source {{collectionName}} id",
"destinationContainerId": "Destination {{collectionName}} id",
"collectionIdTooltip": "Unique identifier for the {{collectionName}} and used for id-based routing through REST and all SDKs.",
"collectionIdPlaceholder": "e.g., {{collectionName}}1",
"collectionIdAriaLabel": "{{collectionName}} id, Example {{collectionName}}1",
"existingContainers": "Existing Containers",
"partitionKeyWarning": "The destination container must not already exist. Data Explorer will create a new destination container for you."
},
"cassandraAddCollection": {
"keyspaceLabel": "Keyspace name",
"keyspaceTooltip": "Select an existing keyspace or enter a new keyspace id.",
"tableIdLabel": "Enter CQL command to create the table.",
"enterTableId": "Enter table Id",
"tableSchemaAriaLabel": "Table schema",
"provisionDedicatedThroughput": "Provision dedicated throughput for this table",
"provisionDedicatedThroughputTooltip": "You can optionally provision dedicated throughput for a table within a keyspace that has throughput provisioned. This dedicated throughput amount will not be shared with other tables in the keyspace and does not count towards the throughput you provisioned for the keyspace. This throughput amount will be billed in addition to the throughput amount you provisioned at the keyspace level."
},
"tables": {
"addProperty": "Add Property",
"addRow": "Add Row",
"addEntity": "Add Entity",
"back": "back",
"nullFieldsWarning": "Warning: Null fields will not be displayed for editing.",
"propertyEmptyError": "{{property}} cannot be empty. Please input a value for {{property}}",
"whitespaceError": "{{property}} cannot have whitespace. Please input a value for {{property}} without whitespace",
"propertyTypeEmptyError": "Property type cannot be empty. Please select a type from the dropdown for property {{property}}"
},
"tableQuerySelect": {
"selectColumns": "Vyberte sloupce, na které se chcete dotázat.",
"availableColumns": "Available Columns"
},
"tableColumnSelection": {
"selectColumns": "Select which columns to display in your view of items in your container.",
"searchFields": "Search fields",
"reset": "Reset",
"partitionKeySuffix": " (partition key)"
},
"newVertex": {
"addProperty": "Add Property"
},
"addGlobalSecondaryIndex": {
"globalSecondaryIndexId": "Global secondary index container id",
"globalSecondaryIndexIdPlaceholder": "e.g., indexbyEmailId",
"projectionQuery": "Projection query",
"projectionQueryPlaceholder": "SELECT c.email, c.accountId FROM c",
"projectionQueryTooltip": "Learn more about defining global secondary indexes.",
"disabledTitle": "A global secondary index is already being created. Please wait for it to complete before creating another one."
},
"stringInput": {
"inputMismatchError": "Input {{input}} does not match the selected {{selectedId}}"
},
"panelInfo": {
"information": "Information",
"moreDetails": "More details"
}
}
}

View File

@@ -0,0 +1,727 @@
{
"common": {
"ok": "OK",
"cancel": "Abbrechen",
"close": "Schließen",
"save": "Speichern",
"delete": "Löschen",
"update": "Aktualisieren",
"discard": "Verwerfen",
"execute": "Ausführen",
"loading": "Wird geladen",
"loadingEllipsis": "Wird geladen...",
"next": "Weiter",
"previous": "Zurück",
"yes": "Ja",
"no": "Nein",
"result": "Ergebnis",
"learnMore": "Weitere Informationen",
"getStarted": "Erste Schritte",
"retry": "Wiederholen",
"apply": "Anwenden",
"refresh": "Aktualisieren",
"copy": "Kopieren",
"create": "Erstellen",
"confirm": "Bestätigen",
"open": "Öffnen",
"rename": "Umbenennen",
"download": "Herunterladen",
"upload": "Hochladen",
"connect": "Verbinden",
"remove": "Entfernen",
"load": "Laden",
"publish": "Veröffentlichen",
"browse": "Durchsuchen",
"increaseValueBy1": "Wert um 1 erhöhen",
"decreaseValueBy1": "Wert um 1 verringern"
},
"splashScreen": {
"title": {
"default": "Willkommen bei Azure Cosmos DB",
"postgres": "Willkommen bei Azure Cosmos DB for PostgreSQL",
"vcoreMongo": "Willkommen bei Azure DocumentDB (mit MongoDB-Kompatibilität)"
},
"subtitle": {
"default": "Global verteilter Datenbankdienst mit Unterstützung mehrerer Datenmodelle in jeder Größenordnung",
"getStarted": "Erste Schritte mit unseren Beispieldatensätzen, der Dokumentation und weiteren Tools."
},
"quickStart": {
"title": "Schnellstart starten",
"description": "Starten Sie ein Schnellstarttutorial, um mit Beispieldaten zu beginnen."
},
"newCollection": {
"title": "Neue {{collectionName}}",
"description": "Neuen Container für Speicher und Durchsatz erstellen"
},
"samplesGallery": {
"title": "Azure Cosmos DB-Beispielgalerie",
"description": "Entdecken Sie Beispiele, die skalierbare, intelligente App-Muster zeigen. Probieren Sie jetzt eines aus, um zu sehen, wie schnell Sie mit Cosmos DB vom Konzept zum Code gelangen."
},
"connectCard": {
"title": "Verbinden",
"description": "Bevorzugen Sie Ihre eigene Toolauswahl? Finden Sie die Verbindungszeichenfolge, die Sie für die Verbindung benötigen.",
"pgAdmin": {
"title": "Verbindung mit pgAdmin herstellen",
"description": "pgAdmin bevorzugen? Hier finden Sie Ihre Verbindungszeichenfolgen."
},
"vsCode": {
"title": "Mit VS Code verbinden",
"description": "Abfragen und Verwalten Ihrer MongoDB- und DocumentDB-Cluster in Visual Studio Code."
}
},
"shell": {
"postgres": {
"title": "PostgreSQL-Shell",
"description": "Erstellen Sie eine Tabelle und interagieren Sie mit Daten über die Shellschnittstelle von PostgreSQL."
},
"vcoreMongo": {
"title": "Mongo-Shell",
"description": "Erstellen Sie eine Sammlung und interagieren Sie mit Daten über die Shellschnittstelle von MongoDB."
}
},
"teachingBubble": {
"newToPostgres": {
"headline": "Neu bei Cosmos DB PGSQL?",
"body": "Willkommen! Wenn Sie neu bei Cosmos DB PGSQL sind und Hilfe beim Einstieg benötigen, finden Sie hier Beispieldaten und Abfragen."
},
"resetPassword": {
"headline": "Ihr Kennwort erstellen",
"body": "Wenn Sie Ihr Kennwort noch nicht geändert haben, ändern Sie es jetzt."
},
"coachMark": {
"headline": "Mit Beispiel „{{collectionName}}“ starten",
"body": "Sie werden angeleitet, einen Beispielcontainer mit Beispieldaten zu erstellen. Anschließend erhalten Sie eine Tour durch den Datenexplorer. Sie können die Tour auch abbrechen und selbst erkunden."
}
},
"sections": {
"recents": "Zuletzt verwendet",
"clearRecents": "Zuletzt verwendete Elemente löschen",
"top3": "Die drei wichtigsten Dinge, die Sie wissen sollten",
"learningResources": "Lernressourcen",
"nextSteps": "Nächste Schritte",
"tipsAndLearnMore": "Tipps und weitere Informationen",
"notebook": "Notebook",
"needHelp": "Benötigen Sie Hilfe?"
},
"top3Items": {
"sql": {
"advancedModeling": {
"title": "Erweiterte Modellierungsmuster",
"description": "Erfahren Sie mehr über fortgeschrittene Strategien zur Optimierung Ihrer Datenbank."
},
"partitioning": {
"title": "Best Practices für die Partitionierung",
"description": "Lernen Sie, Datenmodell- und Partitionierungsstrategien anzuwenden."
},
"resourcePlanning": {
"title": "Ihre Ressourcenanforderungen planen",
"description": "Machen Sie sich mit den verschiedenen Konfigurationsmöglichkeiten vertraut."
}
},
"mongo": {
"whatIsMongo": {
"title": "Was ist die MongoDB-API?",
"description": "Verstehen Sie Azure Cosmos DB for MongoDB und seine Funktionen."
},
"features": {
"title": "Funktionen und Syntax",
"description": "Entdecken Sie die Vorteile und Funktionen"
},
"migrate": {
"title": "Ihre Daten migrieren",
"description": "Vorbereitende Schritte zur Datenmigration"
}
},
"cassandra": {
"buildJavaApp": {
"title": "Java-App erstellen",
"description": "Java-App mithilfe eines SDK erstellen."
},
"partitioning": {
"title": "Best Practices für die Partitionierung",
"description": "Erfahren Sie, wie Partitionierung funktioniert."
},
"requestUnits": {
"title": "Anforderungseinheiten (RUs)",
"description": "RU-Gebühren verstehen"
}
},
"gremlin": {
"dataModeling": {
"title": "Datenmodellierung",
"description": "Empfehlungen zur Graphdatenmodellierung"
},
"partitioning": {
"title": "Best Practices für die Partitionierung",
"description": "Erfahren Sie, wie Partitionierung funktioniert"
},
"queryData": {
"title": "Daten abfragen",
"description": "Daten mit Gremlin abfragen"
}
},
"tables": {
"whatIsTable": {
"title": "Was ist die Table-API?",
"description": "Verstehen Sie Azure Cosmos DB for Table und seine Funktionen."
},
"migrate": {
"title": "Ihre Daten migrieren",
"description": "Erfahren Sie, wie Sie Ihre Daten migrieren."
},
"faq": {
"title": "Häufig gestellte Fragen zu Azure Cosmos DB for Table",
"description": "Häufige Fragen zu Azure Cosmos DB for Table"
}
}
},
"learningResources": {
"shortcuts": {
"title": "Tastenkombinationen im Datenexplorer",
"description": "Lernen Sie Tastenkombinationen zur Navigation im Datenexplorer."
},
"liveTv": {
"title": "Grundlagen erlernen",
"description": "Sehen Sie sich die Einführung und Anleitungsvideos der Azure Cosmos DB Live TV-Sendung an."
},
"sql": {
"sdk": {
"title": "Erste Schritte mit einem SDK",
"description": "Mehr über das Azure Cosmos DB SDK erfahren."
},
"migrate": {
"title": "Ihre Daten migrieren",
"description": "Migrieren Sie Daten mit Azure-Diensten und Open-Source-Lösungen."
}
},
"mongo": {
"nodejs": {
"title": "App mit Node.js erstellen",
"description": "Node.js-App erstellen."
},
"gettingStarted": {
"title": "Leitfaden für erste Schritte",
"description": "Lernen Sie die Grundlagen für den Einstieg kennen."
}
},
"cassandra": {
"createContainer": {
"title": "Container erstellen",
"description": "Erfahren Sie mehr über die Optionen zum Erstellen eines Containers."
},
"throughput": {
"title": "Durchsatz bereitstellen",
"description": "Erfahren Sie, wie Sie den Durchsatz konfigurieren."
}
},
"gremlin": {
"getStarted": {
"title": "Erste Schritte ",
"description": "Erstellen, Abfragen und Durchlaufen mithilfe der Gremlin-Konsole"
},
"importData": {
"title": "Graphdaten importieren",
"description": "Massendatenaufnahme mit BulkExecutor erlernen"
}
},
"tables": {
"dotnet": {
"title": ".NET-App erstellen",
"description": "So greifen Sie mit einer .NET-App auf Azure Cosmos DB for Table zu."
},
"java": {
"title": "Java-App erstellen",
"description": "Erstellen Sie eine Azure Cosmos DB for Table-App mit dem Java SDK. "
}
}
},
"nextStepItems": {
"postgres": {
"dataModeling": "Datenmodellierung",
"distributionColumn": "So wählen Sie eine Verteilungsspalte aus.",
"buildApps": "Apps mit Python/Java/Django erstellen"
},
"vcoreMongo": {
"migrateData": "Daten migrieren",
"vectorSearch": "KI-Apps mit Vektorsuche erstellen",
"buildApps": "Apps mit Node.js erstellen"
}
},
"learnMoreItems": {
"postgres": {
"performanceTuning": "Leistungsoptimierung",
"diagnosticQueries": "Nützliche Diagnoseabfragen",
"sqlReference": "Referenz für verteiltes SQL"
},
"vcoreMongo": {
"vectorSearch": "Vektorsuche",
"textIndexing": "Textindizierung",
"troubleshoot": "Häufige Probleme beheben"
}
},
"fabric": {
"buildTitle": "Ihre Datenbank erstellen",
"useTitle": "Ihre Datenbank nutzen",
"newContainer": {
"title": "Neuer Container",
"description": "Zielcontainer zum Speichern Ihrer Daten erstellen."
},
"sampleData": {
"title": "Beispieldaten",
"description": "Beispieldaten in Ihrer Datenbank laden"
},
"sampleVectorData": {
"title": "Beispielvektordaten",
"description": "Beispielvektordaten mit text-embedding-ada-002 laden"
},
"appDevelopment": {
"title": "App-Entwicklung",
"description": "Starten Sie hier, um ein SDK zum Erstellen Ihrer Apps zu verwenden."
},
"sampleGallery": {
"title": "Beispielgalerie",
"description": "End-to-End-Beispiele aus der Praxis ansehen"
}
},
"sampleDataDialog": {
"title": "Beispieldaten",
"startButton": "Starten",
"createPrompt": "Erstellen Sie einen Container „{{containerName}}“ und importieren Sie Beispieldaten. Dies kann einige Minuten dauern.",
"creatingContainer": "Container „{{containerName}}“ wird erstellt...",
"importingData": "Daten werden in „{{containerName}}“ importiert...",
"success": "„{{containerName}}“ wurde erfolgreich mit Beispieldaten erstellt.",
"errorContainerExists": "Der Container „{{containerName}}“ in der Datenbank „{{databaseName}}“ existiert bereits. Bitte löschen Sie ihn und versuchen Sie es erneut.",
"errorCreateContainer": "Fehler beim Erstellen des Containers: {{error}}",
"errorImportData": "Fehler beim Importieren von Daten: {{error}}"
}
},
"contextMenu": {
"newContainer": "Neu: {{containerName}}",
"restoreContainer": "{{containerName}} wiederherstellen",
"deleteDatabase": "{{databaseName}} löschen",
"deleteContainer": "{{containerName}} löschen",
"newSqlQuery": "Neue SQL-Abfrage",
"newQuery": "Neue Abfrage",
"openMongoShell": "Mongo Shell öffnen",
"newShell": "Neue Shell",
"openCassandraShell": "Cassandra Shell öffnen",
"newStoredProcedure": "Neue gespeicherte Prozedur",
"newUdf": "Neue UDF",
"newTrigger": "Neuer Trigger",
"deleteStoredProcedure": "Gespeicherte Prozedur löschen",
"deleteTrigger": "Trigger löschen",
"deleteUdf": "Benutzerdefinierte Funktion löschen"
},
"tabs": {
"documents": {
"newItem": "Neues Element",
"newDocument": "Neues Dokument",
"uploadItem": "Element hochladen",
"applyFilter": "Filter anwenden",
"unsavedChanges": "Nicht gespeicherte Änderungen",
"unsavedChangesMessage": "Ihre nicht gespeicherten Änderungen gehen verloren. Möchten Sie fortfahren?",
"createDocumentFailed": "Fehler beim Erstellen des Dokuments",
"updateDocumentFailed": "Fehler beim Aktualisieren des Dokuments",
"documentDeleted": "Das Dokument wurde erfolgreich gelöscht.",
"deleteDocumentDialogTitle": "Dokument löschen",
"deleteDocumentsDialogTitle": "Dokumente löschen",
"throttlingError": "Einige Dokumente konnten aufgrund einer Ratenbegrenzung nicht gelöscht werden. Versuchen Sie es später erneut. Um dies künftig zu vermeiden, sollten Sie den Durchsatz Ihres Containers oder Ihrer Datenbank erhöhen.",
"deleteFailed": "Fehler beim Löschen von Dokumenten ({{error}}).",
"missingShardProperty": "Im Dokument fehlt die Shardeigenschaft: {{partitionKeyProperty}}",
"refreshGridFailed": "Fehler beim Aktualisieren des Dokumentrasters",
"confirmDelete": "Möchten Sie {{documentName}} wirklich löschen?",
"confirmDeleteTitle": "Löschen bestätigen",
"selectedItems": "die ausgewählten {{count}} Elemente",
"selectedItem": "das ausgewählte Element",
"selectedDocuments": "die ausgewählten {{count}} Dokumente",
"selectedDocument": "das ausgewählte Dokument",
"deleteDocumentFailedLog": "Fehler beim Löschen des Dokuments {{documentId}} mit Statuscode {{statusCode}}.",
"deleteSuccessLog": "{{count}} Dokument(e) wurde(n) erfolgreich gelöscht.",
"deleteThrottledLog": "Fehler beim Löschen von {{count}} Dokument(en) aufgrund des Fehlers „Anforderung zu groß“ (429) Vorgang wird wiederholt …",
"missingShardKeyLog": "Fehler beim Speichern des neuen Dokuments: Der Shardschlüssel des Dokuments ist nicht definiert.",
"filterTooltip": "Geben Sie ein Abfrageprädikat ein oder wählen Sie eines aus der Liste aus.",
"loadMore": "Mehr laden",
"documentEditor": "Dokumenteneditor",
"savedFilters": "Gespeicherte Filter",
"defaultFilters": "Standardfilter",
"abort": "Abbrechen",
"deletingDocuments": "{{count}} Dokument(e) wird/werden gelöscht",
"deletedDocumentsSuccess": "{{count}} Dokument(e) wurde(n) erfolgreich gelöscht.",
"deleteAborted": "Das Löschen von Dokumenten wurde abgebrochen.",
"failedToDeleteDocuments": "Fehler beim Löschen von {{count}} Dokument(en).",
"requestTooLargeBase": "Einige Löschanforderungen sind aufgrund einer Ausnahme „Anforderung zu groß“ (429) fehlgeschlagen.",
"retriedSuccessfully": "wurden jedoch erfolgreich wiederholt.",
"retryingNow": "Der Vorgang wird jetzt wiederholt.",
"increaseThroughputTip": "Um dies künftig zu vermeiden, sollten Sie den Durchsatz Ihres Containers oder Ihrer Datenbank erhöhen.",
"numberOfSelectedDocuments": "Anzahl der ausgewählten Dokumente: {{count}}",
"mongoFilterPlaceholder": "Geben Sie ein Abfrageprädikat (z. B. {\"id\":\"foo\"}) ein, wählen Sie eines aus der Dropdownliste oder lassen Sie das Feld leer, um alle Dokumente abzufragen.",
"sqlFilterPlaceholder": "Geben Sie ein Abfrageprädikat (z. B. WHERE c.id=\"1\") ein, wählen Sie eines aus der Dropdownliste oder lassen Sie das Feld leer, um alle Dokumente abzufragen.",
"error": "Fehler",
"warning": "Warnung"
},
"query": {
"executeQuery": "Abfrage ausführen",
"executeSelection": "Auswahl ausführen",
"saveQuery": "Abfrage speichern",
"downloadQuery": "Abfrage herunterladen",
"cancelQuery": "Abfrage abbrechen",
"openSavedQueries": "Gespeicherte Abfragen öffnen",
"vertical": "Vertikal",
"horizontal": "Horizontal",
"view": "Ansicht",
"editingQuery": "Abfrage wird bearbeitet"
},
"storedProcedure": {
"id": "ID der gespeicherten Prozedur",
"idPlaceholder": "Geben Sie die ID der neuen gespeicherten Prozedur ein.",
"idAriaLabel": "ID der gespeicherten Prozedur",
"body": "Text der gespeicherten Prozedur",
"bodyAriaLabel": "Text der gespeicherten Prozedur",
"successfulExecution": "Die gespeicherte Prozedur wurde erfolgreich ausgeführt.",
"resultAriaLabel": "Ergebnis der gespeicherten Prozedur ausführen",
"logsAriaLabel": "Protokolle für gespeicherte Prozedur ausführen",
"errors": "Fehler:",
"errorDetailsAriaLabel": "Link zu Fehlerdetails",
"moreDetails": "Weitere Details",
"consoleLogTab": "console.log"
},
"trigger": {
"id": "Trigger-ID",
"idPlaceholder": "Geben Sie die neue Trigger-ID ein.",
"type": "Triggertyp",
"operation": "Triggervorgang",
"body": "Triggertext",
"bodyAriaLabel": "Triggertext",
"pre": "Vor",
"post": "Beitrag",
"all": "Alle",
"operationCreate": "Erstellen",
"operationDelete": "Löschen",
"operationReplace": "Ersetzen"
},
"udf": {
"id": "ID der benutzerdefinierten Funktion",
"idPlaceholder": "Geben Sie die ID der neuen benutzerdefinierten Funktion ein.",
"body": "Text der benutzerdefinierten Funktion",
"bodyAriaLabel": "Text der benutzerdefinierten Funktion"
},
"conflicts": {
"unsavedChanges": "Nicht gespeicherte Änderungen",
"changesWillBeLost": "Nicht gespeicherte Änderungen gehen verloren. Möchten Sie fortfahren?",
"resolveConflictFailed": "Fehler beim Auflösen des Konflikts",
"deleteConflictFailed": "Fehler beim Löschen des Konflikts.",
"refreshGridFailed": "Fehler beim Aktualisieren des Dokumentrasters"
},
"mongoShell": {
"title": "Mongo Shell"
}
},
"panes": {
"deleteDatabase": {
"panelTitle": "{{databaseName}} löschen",
"warningMessage": "Warnung! Die Aktion, die Sie ausführen möchten, kann nicht rückgängig gemacht werden. Wenn Sie fortfahren, werden diese Ressource und alle untergeordneten Ressourcen dauerhaft gelöscht.",
"confirmPrompt": "Durch Eingabe der {{databaseName}}-ID (Name) bestätigen",
"inputMismatch": "Eingabe {{databaseName}} Name „{{input}}“ stimmt nicht mit dem ausgewählten {{databaseName}} „{{selectedId}}“ überein.",
"feedbackTitle": "Helfen Sie uns, Azure Cosmos DB zu verbessern!",
"feedbackReason": "Aus welchem Grund löschen Sie diese {{databaseName}}?"
},
"deleteCollection": {
"panelTitle": "{{collectionName}} löschen",
"confirmPrompt": "Durch Eingabe der {{collectionName}}-ID bestätigen",
"inputMismatch": "Die Eingabe-ID {{input}} stimmt nicht mit der ausgewählten {{selectedId}} überein.",
"feedbackTitle": "Helfen Sie uns, Azure Cosmos DB zu verbessern!",
"feedbackReason": "Aus welchem Grund löschen Sie diese {{collectionName}}?"
},
"addDatabase": {
"databaseLabel": "Datenbank {{suffix}}",
"databaseIdLabel": "Datenbank-ID",
"keyspaceIdLabel": "Keyspace-ID",
"databaseIdPlaceholder": "Neue {{databaseLabel}}-ID eingeben",
"databaseTooltip": "{{databaseLabel}} ist ein logischer Container mit mindestens einem {{collectionsLabel}}",
"shareThroughput": "Durchsatz für {{collectionsLabel}} gemeinsam nutzen",
"shareThroughputTooltip": "Der bereitgestellte Durchsatz auf der {{databaseLabel}}-Ebene wird von allen {{collectionsLabel}} innerhalb von {{databaseLabel}} gemeinsam genutzt.",
"greaterThanError": "Geben Sie für den Autopilot-Durchsatz einen Wert ein, der größer als {{minValue}} ist.",
"acknowledgeSpendError": "Bestätigen Sie die geschätzten {{period}} Ausgaben."
},
"addCollection": {
"createNew": "Neu erstellen",
"useExisting": "Vorhandene verwenden",
"databaseTooltip": "Eine Datenbank entspricht einem Namespace. Das ist die Verwaltungseinheit für einen Satz von {{collectionName}}.",
"shareThroughput": "Durchsatz für {{collectionName}} gemeinsam nutzen",
"shareThroughputTooltip": "Der auf Datenbankebene konfigurierte Durchsatz wird von allen {{collectionName}} innerhalb der Datenbank gemeinsam genutzt.",
"collectionIdLabel": "{{collectionName}} ID",
"collectionIdTooltip": "Eindeutiger Bezeichner für {{collectionName}} und wird für id-basiertes Routing über REST und alle SDKs verwendet.",
"collectionIdPlaceholder": "Beispiel: {{collectionName}}1",
"collectionIdAriaLabel": "{{collectionName}} ID, Beispiel {{collectionName}}1",
"existingDatabaseAriaLabel": "Vorhandene {{databaseName}}-ID auswählen",
"existingDatabasePlaceholder": "Vorhandene {{databaseName}}-ID auswählen",
"indexing": "Indizierung",
"turnOnIndexing": "Indizierung aktivieren",
"automatic": "Automatisch",
"turnOffIndexing": "Indizierung deaktivieren",
"off": "Aus",
"sharding": "Sharding",
"shardingTooltip": "Shardsammlungen teilen Ihre Daten auf viele Replikatgruppen (Shards) auf, um unbegrenzte Skalierbarkeit zu erzielen. Shardsammlungen erfordern die Auswahl eines Shardschlüssels (Felds), um Ihre Daten gleichmäßig zu verteilen.",
"unsharded": "Ohne Sharding",
"unshardedLabel": "Ohne Sharding (20-GB-Limit)",
"sharded": "Mit Sharding",
"addPartitionKey": "Hierarchischen Partitionsschlüssel hinzufügen",
"hierarchicalPartitionKeyInfo": "Mit diesem Feature können Sie Ihre Daten mit bis zu drei Schlüsselebenen partitionieren, um eine bessere Datenverteilung zu erzielen. Erfordert .NET V3, Java V4 SDK oder JavaScript V3 SDK (Vorschauversion).",
"provisionDedicatedThroughput": "Dedizierten Durchsatz für {{collectionName}} bereitstellen",
"provisionDedicatedThroughputTooltip": "Sie können optional dedizierten Durchsatz für eine {{collectionName}} in einer Datenbank bereitstellen, für die Durchsatz bereitgestellt wurde. Dieser dedizierte Durchsatz wird nicht für andere {{collectionNamePlural}} in der Datenbank freigegeben und zählt nicht zum Durchsatz, den Sie für die Datenbank bereitgestellt haben. Diese Durchsatzmenge wird zusätzlich zu dem Durchsatz, den Sie auf Datenbankebene bereitgestellt haben, in Rechnung gestellt.",
"uniqueKeysPlaceholderMongo": "Durch Trennzeichen getrennte Pfade, z. B. firstName,address.zipCode",
"uniqueKeysPlaceholderSql": "Durch Trennzeichen getrennte Pfade, z. B. /firstName,/address/zipCode",
"addUniqueKey": "Eindeutigen Schlüssel hinzufügen",
"enableAnalyticalStore": "Analysespeicher aktivieren",
"disableAnalyticalStore": "Analysespeicher deaktivieren",
"on": "Ein",
"analyticalStoreSynapseLinkRequired": "Azure Synapse Link ist zum Erstellen eines Analysespeichers {{collectionName}}erforderlich. Aktivieren Sie Synapse Link für dieses Cosmos DB-Konto.",
"enable": "Aktivieren",
"containerVectorPolicy": "Containervektorrichtlinie",
"containerFullTextSearchPolicy": "Richtlinie für Container-Volltextsuche",
"advanced": "Erweitert",
"mongoIndexingTooltip": "Das Feld _id wird standardmäßig indiziert. Das Erstellen eines Platzhalterindexes für alle Felder wird für die Entwicklung empfohlen, weil dadurch Abfragen optimiert werden.",
"createWildcardIndex": "Platzhalterindex für alle Felder erstellen",
"legacySdkCheckbox": "Meine Anwendung verwendet eine ältere Cosmos .NET- oder Java SDK-Version (.NET V1 oder Java V2).",
"legacySdkInfo": "Um die Kompatibilität mit älteren SDKs sicherzustellen, verwendet der erstellte Container ein Legacypartitionierungsschema, das Partitionsschlüsselwerte nur mit einer Größe von bis zu 101 Bytes unterstützt. Wenn dies aktiviert ist, können Sie keine hierarchischen Partitionsschlüssel verwenden.",
"indexingOnInfo": "Alle Eigenschaften in Ihren Dokumenten werden standardmäßig für flexible und effiziente Abfragen indiziert.",
"indexingOffInfo": "Die Indizierung wird deaktiviert. Empfohlen, wenn Sie keine Abfragen ausführen müssen oder nur Schlüsselwertvorgänge ausführen müssen.",
"indexingOffWarning": "Wenn Sie diesen Container mit deaktivierter Indizierung erstellen, können Sie keine Änderungen an der Indizierungsrichtlinie vornehmen. Indizierungsänderungen sind nur an einem Container mit einer Indizierungsrichtlinie zulässig.",
"acknowledgeSpendErrorMonthly": "Bestätigen Sie die geschätzten monatlichen Ausgaben.",
"acknowledgeSpendErrorDaily": "Bestätigen Sie die geschätzten täglichen Ausgaben.",
"unshardedMaxRuError": "Sammlungen ohne Sharding unterstützen bis zu 10.000 RUs.",
"acknowledgeShareThroughputError": "Bestätigen Sie die geschätzten Kosten für diesen dedizierten Durchsatz.",
"vectorPolicyError": "Beheben Sie Fehler in der Containervektorrichtlinie.",
"fullTextSearchPolicyError": "Beheben Sie Fehler in der Richtlinie für die Container-Volltextsuche.",
"addingSampleDataSet": "Beispieldataset wird hinzugefügt"
},
"addCollectionUtility": {
"shardKeyTooltip": "Der Shardschlüssel (Feld) wird verwendet, um Ihre Daten auf viele Replikatgruppen (Shards) aufzuteilen, um unbegrenzte Skalierbarkeit zu erzielen. Es ist wichtig, ein Feld auszuwählen, das Ihre Daten gleichmäßig verteilt.",
"partitionKeyTooltip": "{{partitionKeyName}} wird verwendet, um Daten aus Gründen der Skalierbarkeit automatisch auf Partitionen zu verteilen. Wählen Sie in Ihrem JSON-Dokument eine Eigenschaft, die eine große Bandbreite an Werten aufweist und das Anforderungsvolumen gleichmäßig verteilt.",
"partitionKeyTooltipSqlSuffix": " Bei kleinen Workloads mit vielen Lese- oder Schreibvorgängen beliebiger Größe ist die ID häufig eine gute Wahl.",
"shardKeyLabel": "Shardschlüssel",
"partitionKeyLabel": "Partitionsschlüssel",
"shardKeyPlaceholder": "Beispiel: categoryId",
"partitionKeyPlaceholderDefault": "Beispiel: /address",
"partitionKeyPlaceholderFirst": "Erforderlich erster Partitionsschlüssel, z. B. /TenantId",
"partitionKeyPlaceholderSecond": "zweiter Partitionsschlüssel, z. B. /UserId",
"partitionKeyPlaceholderThird": "Dritter Partitionsschlüssel, z. B. /SessionId",
"partitionKeyPlaceholderGraph": "Beispiel: /address/zipCode",
"uniqueKeysTooltip": "Eindeutige Schlüssel bieten Entwicklern die Möglichkeit, ihrer Datenbank eine Ebene der Datenintegrität hinzuzufügen. Indem Sie beim Erstellen eines Containers eine Richtlinie für eindeutige Schlüssel erstellen, stellen Sie die Eindeutigkeit eines oder mehrerer Werte pro Partitionsschlüssel sicher.",
"uniqueKeysLabel": "Eindeutige Schlüssel",
"analyticalStoreLabel": "Analysespeicher",
"analyticalStoreTooltip": "Aktivieren Sie die Analysespeicherfunktion, um Analysen ihrer operativen Daten nahezu in Echtzeit durchzuführen, ohne die Leistung von Transaktionsworkloads zu beeinträchtigen.",
"analyticalStoreDescription": "Aktivieren Sie die Analysespeicherfunktion, um Analysen ihrer operativen Daten nahezu in Echtzeit durchzuführen, ohne die Leistung von Transaktionsworkloads zu beeinträchtigen.",
"vectorPolicyTooltip": "Beschreiben Sie alle Eigenschaften in Ihren Daten, die Vektoren enthalten, damit sie für Ähnlichkeitsabfragen verfügbar gemacht werden können."
},
"settings": {
"pageOptions": "Seitenoptionen",
"pageOptionsDescription": "Wählen Sie „Benutzerdefiniert“ aus, um eine feste Anzahl anzuzeigender Abfrageergebnisse anzugeben, oder wählen Sie „Unbegrenzt“ aus, um beliebig viele Abfrageergebnisse pro Seite anzuzeigen.",
"queryResultsPerPage": "Abfrageergebnisse pro Seite",
"queryResultsPerPageTooltip": "Geben Sie die Anzahl der Abfrageergebnisse ein, die pro Seite angezeigt werden sollen.",
"customQueryItemsPerPage": "Benutzerdefinierte Abfrageelemente pro Seite",
"custom": "Benutzerdefiniert",
"unlimited": "Unbegrenzt",
"entraIdRbac": "RBAC für Entra ID aktivieren",
"entraIdRbacDescription": "Wählen Sie „Automatisch“ aus, um RBAC für Entra ID automatisch zu aktivieren. True/False, um das Aktivieren/Deaktivieren von RBAC für Entra ID zu erzwingen.",
"true": "Wahr",
"false": "Falsch",
"regionSelection": "Bereichsauswahl",
"regionSelectionDescription": "Ändert die Region, die der Cosmos-Client für den Zugriff auf das Konto verwendet.",
"selectRegion": "Region auswählen",
"selectRegionTooltip": "Ändert den Kontoendpunkt, der zum Ausführen von Clientvorgängen verwendet wird.",
"globalDefault": "Global (Standard)",
"readWrite": "(Lesen/Schreiben)",
"read": "(Lesen)",
"queryTimeout": "Abfragetimeout",
"queryTimeoutDescription": "Wenn eine Abfrage ein angegebenes Zeitlimit erreicht, wird ein Popup mit einer Option zum Abbrechen der Abfrage angezeigt, es sei denn, der automatische Abbruch wurde aktiviert.",
"enableQueryTimeout": "Abfragetimeout aktivieren",
"queryTimeoutMs": "Abfragetimeout (ms)",
"automaticallyCancelQuery": "Abfrage nach Timeout automatisch abbrechen",
"ruLimit": "RU-Limit",
"ruLimitDescription": "Wenn eine Abfrage ein konfiguriertes RU-Limit überschreitet, wird die Abfrage abgebrochen.",
"enableRuLimit": "RU-Limit aktivieren",
"ruLimitLabel": "RU-Limit (RU)",
"defaultQueryResults": "Standardansicht der Abfrageergebnisse",
"defaultQueryResultsDescription": "Wählen Sie die Standardansicht aus, die zum Anzeigen von Abfrageergebnissen verwendet werden soll.",
"retrySettings": "Wiederholungseinstellungen",
"retrySettingsDescription": "Wiederholungsrichtlinie, die gedrosselten Anforderungen während CosmosDB-Abfragen zugeordnet ist.",
"maxRetryAttempts": "Max. Wiederholungsversuche",
"maxRetryAttemptsTooltip": "Maximale Anzahl von Wiederholungen, die für eine Anforderung ausgeführt werden sollen. Standardwert: 9.",
"fixedRetryInterval": "Festes Wiederholungsintervall (ms)",
"fixedRetryIntervalTooltip": "Festes Wiederholungsintervall in Millisekunden, das zwischen den einzelnen Wiederholungsversuchen abgewartet wird, wobei das als Teil der Antwort zurückgegebene retryAfter ignoriert wird. Der Standardwert beträgt 0 Millisekunden.",
"maxWaitTime": "Maximale Wartezeit (s)",
"maxWaitTimeTooltip": "Maximale Wartezeit in Sekunden für eine Anforderung während der Wiederholungsversuche. Standardwert: 30 Sekunden.",
"enableContainerPagination": "Containerpaginierung aktivieren",
"enableContainerPaginationDescription": "Laden Sie jeweils 50 Container. Derzeit werden Container nicht in alphanumerischer Reihenfolge abgerufen.",
"enableCrossPartitionQuery": "Partitionsübergreifende Abfrage aktivieren",
"enableCrossPartitionQueryDescription": "Senden Sie während der Ausführung einer Abfrage mehrere Anforderungen. Wenn die Abfrage nicht auf einen einzelnen Partitionsschlüsselwert beschränkt ist, sind mehrere Anforderungen erforderlich.",
"maxDegreeOfParallelism": "Max. Grad an Parallelität",
"maxDegreeOfParallelismDescription": "Ruft die Anzahl gleichzeitiger Vorgänge ab, die während der parallelen Abfrageausführung clientseitig ausgeführt werden, oder legt diese fest. Ein positiver Eigenschaftswert schränkt die Anzahl gleichzeitiger Vorgänge auf den festgelegten Wert ein. Wenn der Wert auf weniger als 0 festgelegt ist, entscheidet das System automatisch, wie viele gleichzeitige Vorgänge ausgeführt werden sollen.",
"maxDegreeOfParallelismQuery": "Bis zum maximalen Grad an Parallelität abfragen.",
"priorityLevel": "Prioritätsstufe",
"priorityLevelDescription": "Legt die Prioritätsstufe für Datenebenenanforderungen von Daten-Explorer fest, wenn die prioritätsbasierte Ausführung verwendet wird. Wenn „Keine“ ausgewählt ist, gibt Daten-Explorer keine Prioritätsstufe an, und die serverseitige Standardprioritätsstufe wird verwendet.",
"displayGremlinQueryResults": "Gremlin-Abfrageergebnisse anzeigen als:",
"displayGremlinQueryResultsDescription": "Wählen Sie „Graph“ aus, um die Abfrageergebnisse automatisch als Graph zu visualisieren, oder wählen Sie „JSON“ aus, um die Ergebnisse als JSON anzuzeigen.",
"graph": "Graph",
"json": "JSON",
"graphAutoVisualization": "Automatische Graphvisualisierung",
"enableSampleDatabase": "Beispieldatenbank aktivieren",
"enableSampleDatabaseDescription": "Dies ist eine Beispieldatenbank und Sammlung mit synthetischen Produktdaten, die Sie mithilfe von NoSQL-Abfragen untersuchen können. Dies wird als eine weitere Datenbank auf der Daten-Explorer-Benutzeroberfläche angezeigt und von Microsoft erstellt und kostenlos für Sie verwaltet.",
"enableSampleDbAriaLabel": "Beispieldatenbank für die Abfrageuntersuchung aktivieren",
"guidRepresentation": "GUID-Darstellung",
"guidRepresentationDescription": "GuidRepresentation in MongoDB bezieht sich darauf, wie GUIDs (Globally Unique Identifiers) serialisiert und deserialisiert werden, wenn sie in BSON-Dokumenten gespeichert werden. Dies gilt für alle Dokumentvorgänge.",
"advancedSettings": "Erweiterte Einstellungen",
"ignorePartitionKey": "Partitionsschlüssel bei Dokumentaktualisierung ignorieren",
"ignorePartitionKeyTooltip": "Wenn diese Option aktiviert ist, wird der Partitionsschlüsselwert nicht verwendet, um das Dokument während Aktualisierungsvorgängen zu finden. Verwenden Sie diese Option nur, wenn Dokumentaktualisierungen aufgrund eines ungewöhnlichen Partitionsschlüssels fehlschlagen.",
"clearHistory": "Verlauf löschen",
"clearHistoryConfirm": "Möchten Sie fortfahren?",
"clearHistoryDescription": "Durch diese Aktion werden alle Anpassungen für dieses Konto in diesem Browser gelöscht, einschließlich:",
"clearHistoryTabLayout": "Setzen Sie Ihre benutzerdefinierten Registerkartenlayouts zurück, einschließlich der Splitterpositionen",
"clearHistoryTableColumns": "Löschen Sie Ihre Tabellenspalteneinstellungen, einschließlich aller benutzerdefinierten Spalten",
"clearHistoryFilters": "Filterverlauf löschen",
"clearHistoryRegion": "Bereichsauswahl auf „Global“ zurücksetzen",
"increaseValueBy1000": "Wert um 1000 erhöhen",
"decreaseValueBy1000": "Wert um 1000 verringern",
"none": "Kein(e)",
"low": "Niedrig",
"high": "Hoch",
"automatic": "Automatisch",
"enhancedQueryControl": "Erweitertes Abfragesteuerelement",
"enableQueryControl": "Abfragesteuerelement aktivieren",
"explorerVersion": "Explorer-Version",
"accountId": "Konto-ID",
"sessionId": "Sitzungs-ID",
"popupsDisabledError": "Wir konnten keine Autorisierung für dieses Konto einrichten, weil Popups im Browser deaktiviert wurden.\nAktivieren Sie Popups für diese Website, und klicken Sie auf die Schaltfläche „Anmeldung für Entra-ID“.",
"failedToAcquireTokenError": "Fehler beim automatischen Abrufen des Autorisierungstokens. Klicken Sie auf die Schaltfläche „Anmeldung für Entra-ID“, um RBAC-Vorgänge für Entra ID zu aktivieren."
},
"saveQuery": {
"panelTitle": "Abfrage speichern",
"setupCostMessage": "Aus Compliancegründen speichern wir Abfragen in einem Container in Ihrem Azure Cosmos-Konto in einer separaten Datenbank namens „{{databaseName}}“. Um fortzufahren, müssen wir einen Container in Ihrem Konto erstellen. Die geschätzten zusätzlichen Kosten betragen 0,77 USD pro Tag.",
"completeSetup": "Einrichtung abschließen",
"noQueryNameError": "Kein Abfragename angegeben",
"invalidQueryContentError": "Ungültiger Abfrageinhalt angegeben",
"failedToSaveQueryError": "Fehler beim Speichern der Abfrage {{queryName}}",
"failedToSetupContainerError": "Fehler beim Einrichten eines Containers für gespeicherte Abfragen",
"accountNotSetupError": "Fehler beim Speichern der Abfrage: Konto zum Speichern von Abfragen nicht eingerichtet",
"name": "Name"
},
"loadQuery": {
"noFileSpecifiedError": "Keine Datei angegeben",
"failedToLoadQueryError": "Fehler beim Laden der Abfrage.",
"failedToLoadQueryFromFileError": "Fehler beim Laden der Abfrage aus der Datei {{fileName}}",
"selectFilesToOpen": "Abfragedokument auswählen",
"browseFiles": "Durchsuchen"
},
"executeStoredProcedure": {
"enterInputParameters": "Eingabeparameter eingeben (falls vorhanden)",
"key": "Schlüssel",
"param": "Param.",
"partitionKeyValue": "Partitionsschlüsselwert",
"value": "Wert",
"addNewParam": "Neuen Parameter hinzufügen",
"addParam": "Parameter hinzufügen",
"deleteParam": "Parameter löschen",
"invalidParamError": "Ungültiger Parameter angegeben: {{invalidParam}}",
"invalidParamConsoleError": "Ungültiger Parameter angegeben: {{invalidParam}} ist kein gültiger Literalwert.",
"stringType": "Zeichenfolge",
"customType": "Benutzerdefiniert"
},
"uploadItems": {
"noFilesSpecifiedError": "Es wurden keine Dateien angegeben. Geben Sie mindestens eine Datei ein.",
"selectJsonFiles": "JSON-Dateien auswählen",
"selectJsonFilesTooltip": "Wählen Sie mindestens eine JSON-Datei zum Hochladen aus. Jede Datei kann ein einzelnes JSON-Dokument oder ein Array von JSON-Dokumenten enthalten. Die kombinierte Größe aller Dateien in einem einzelnen Uploadvorgang muss kleiner als 2 MB sein. Sie können mehrere Uploadvorgänge für größere Datasets ausführen.",
"fileNameColumn": "DATEINAME",
"statusColumn": "STATUS",
"uploadStatus": "{{numSucceeded}} erstellt, {{numThrottled}} gedrosselt, {{numFailed}} Fehler",
"uploadedFiles": "Hochgeladene Dateien"
},
"copyNotebook": {
"copyFailedError": "Fehler beim Kopieren von {{name}} nach {{destination}}",
"uploadFailedError": "Fehler beim Hochladen von „{{name}}“",
"location": "Speicherort",
"locationAriaLabel": "Speicherort",
"selectLocation": "Notizbuchspeicherort zum Kopieren auswählen",
"name": "Name"
},
"publishNotebook": {
"publishFailedError": "Fehler beim Veröffentlichen von {{notebookName}} im Katalog",
"publishDescription": "Nach der Veröffentlichung wird dieses Notebook im öffentlichen Katalog Azure Cosmos DB Notebooks angezeigt. Stellen Sie sicher, dass Sie alle vertraulichen Daten oder Ausgaben vor der Veröffentlichung entfernt haben.",
"publishPrompt": "Möchten Sie „{{name}}“ im Katalog veröffentlichen und freigeben?",
"coverImage": "Titelbild",
"coverImageUrl": "Titelbild-URL",
"name": "Name",
"description": "Beschreibung",
"tags": "Kategorien",
"tagsPlaceholder": "Optionales Tag 1, optionales Tag 2",
"preview": "Vorschau",
"urlType": "URL",
"customImage": "Benutzerdefiniertes Image",
"takeScreenshot": "Screenshot erstellen",
"useFirstDisplayOutput": "Erste Anzeigeausgabe verwenden",
"failedToCaptureOutput": "Fehler beim Erfassen der ersten Ausgabe",
"outputDoesNotExist": "Für keine der Zellen ist eine Ausgabe vorhanden.",
"failedToConvertError": "Fehler beim Konvertieren von {{fileName}} in das Base64-Format",
"failedToUploadError": "Fehler beim Hochladen von „{{fileName}}“"
},
"changePartitionKey": {
"failedToStartError": "Fehler beim Starten des Datenübertragungsauftrags",
"suboptimalPartitionKeyError": "Warnung: Das System hat festgestellt, dass Ihre Sammlung möglicherweise keinen optimalen Partitionsschlüssel verwendet.",
"description": "Wenn Sie den Partitionsschlüssel eines Containers ändern, müssen Sie einen Zielcontainer mit dem richtigen Partitionsschlüssel erstellen. Sie können auch einen vorhandenen Zielcontainer auswählen.",
"sourceContainerId": "Quell-{{collectionName}}-ID",
"destinationContainerId": "Ziel-{{collectionName}}-ID",
"collectionIdTooltip": "Eindeutiger Bezeichner für {{collectionName}} und wird für id-basiertes Routing über REST und alle SDKs verwendet.",
"collectionIdPlaceholder": "Beispiel: {{collectionName}}1",
"collectionIdAriaLabel": "{{collectionName}} ID, Beispiel {{collectionName}}1",
"existingContainers": "Vorhandene Container",
"partitionKeyWarning": "Der Zielcontainer darf nicht bereits vorhanden sein. Daten-Explorer erstellt einen neuen Zielcontainer für Sie."
},
"cassandraAddCollection": {
"keyspaceLabel": "Keyspacename",
"keyspaceTooltip": "Wählen Sie einen vorhandenen Keyspace aus, oder geben Sie eine neue Keyspace-ID ein.",
"tableIdLabel": "Geben Sie den CQL-Befehl ein, um die Tabelle zu erstellen.",
"enterTableId": "Tabellen-ID eingeben",
"tableSchemaAriaLabel": "Tabellenschema",
"provisionDedicatedThroughput": "Dedizierten Durchsatz für diese Tabelle bereitstellen",
"provisionDedicatedThroughputTooltip": "Sie können optional dedizierten Durchsatz für eine Tabelle in einem Keyspace bereitstellen, in dem Durchsatz bereitgestellt wurde. Diese dedizierte Durchsatzmenge wird nicht für andere Tabellen im Keyspace freigegeben und wird nicht auf den Durchsatz angerechnet, den Sie für den Keyspace bereitgestellt haben. Diese Durchsatzmenge wird zusätzlich zu dem Durchsatz in Rechnung gestellt, den Sie auf Keyspaceebene bereitgestellt haben."
},
"tables": {
"addProperty": "Eigenschaft hinzufügen",
"addRow": "Zeile hinzufügen",
"addEntity": "Entität hinzufügen",
"back": "zurück",
"nullFieldsWarning": "Warnung: Nullfelder werden nicht zum Bearbeiten angezeigt.",
"propertyEmptyError": "{{property}} darf nicht leer sein. Geben Sie einen Wert für {{property}} ein.",
"whitespaceError": "{{property}} darf keine Leerzeichen enthalten. Geben Sie einen Wert für {{property}} ohne Leerzeichen ein.",
"propertyTypeEmptyError": "Der Eigenschaftentyp darf nicht leer sein. Wählen Sie einen Typ aus der Dropdownliste für die Eigenschaft {{property}} aus."
},
"tableQuerySelect": {
"selectColumns": "Wählen Sie die Spalten aus, die abgefragt werden sollen.",
"availableColumns": "Verfügbare Spalten"
},
"tableColumnSelection": {
"selectColumns": "Wählen Sie aus, welche Spalten in der Ansicht der Elemente in Ihrem Container angezeigt werden sollen.",
"searchFields": "Suchfelder",
"reset": "Zurücksetzen",
"partitionKeySuffix": " (Partitionsschlüssel)"
},
"newVertex": {
"addProperty": "Eigenschaft hinzufügen"
},
"addGlobalSecondaryIndex": {
"globalSecondaryIndexId": "Container-ID des globalen sekundären Indexes",
"globalSecondaryIndexIdPlaceholder": "Beispiel: indexbyEmailId",
"projectionQuery": "Projektionsabfrage",
"projectionQueryPlaceholder": "SELECT c.email, c.accountId FROM c",
"projectionQueryTooltip": "Erfahren Sie mehr über das Definieren globaler sekundärer Indizes.",
"disabledTitle": "Ein globaler sekundärer Index wird bereits erstellt. Warten Sie, bis der Vorgang abgeschlossen ist, bevor Sie einen weiteren erstellen."
},
"stringInput": {
"inputMismatchError": "Die Eingabe {{input}} stimmt nicht mit der ausgewählten {{selectedId}} überein."
},
"panelInfo": {
"information": "Informationen",
"moreDetails": "Weitere Details"
}
}
}

View File

@@ -0,0 +1,968 @@
{
"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",
"load": "Load",
"publish": "Publish",
"browse": "Browse",
"increaseValueBy1": "Increase value by 1",
"decreaseValueBy1": "Decrease value by 1"
},
"splashScreen": {
"title": {
"default": "Welcome to Azure Cosmos DB",
"postgres": "Welcome to Azure Cosmos DB for PostgreSQL",
"vcoreMongo": "Welcome to Azure DocumentDB (with MongoDB compatibility)"
},
"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}}"
}
},
"contextMenu": {
"newContainer": "New {{containerName}}",
"restoreContainer": "Restore {{containerName}}",
"deleteDatabase": "Delete {{databaseName}}",
"deleteContainer": "Delete {{containerName}}",
"newSqlQuery": "New SQL Query",
"newQuery": "New Query",
"openMongoShell": "Open Mongo Shell",
"newShell": "New Shell",
"openCassandraShell": "Open Cassandra Shell",
"newStoredProcedure": "New Stored Procedure",
"newUdf": "New UDF",
"newTrigger": "New Trigger",
"deleteStoredProcedure": "Delete Stored Procedure",
"deleteTrigger": "Delete Trigger",
"deleteUdf": "Delete User Defined Function"
},
"tabs": {
"documents": {
"newItem": "New Item",
"newDocument": "New Document",
"uploadItem": "Upload Item",
"applyFilter": "Apply Filter",
"unsavedChanges": "Unsaved changes",
"unsavedChangesMessage": "Your unsaved changes will be lost. Do you want to continue?",
"createDocumentFailed": "Create document failed",
"updateDocumentFailed": "Update document failed",
"documentDeleted": "Document successfully deleted.",
"deleteDocumentDialogTitle": "Delete document",
"deleteDocumentsDialogTitle": "Delete documents",
"throttlingError": "Some documents failed to delete due to a rate limiting error. Please try again later. To prevent this in the future, consider increasing the throughput on your container or database.",
"deleteFailed": "Deleting document(s) failed ({{error}})",
"missingShardProperty": "The document is lacking the shard property: {{partitionKeyProperty}}",
"refreshGridFailed": "Refresh documents grid failed",
"confirmDelete": "Are you sure you want to delete {{documentName}}?",
"confirmDeleteTitle": "Confirm delete",
"selectedItems": "the selected {{count}} items",
"selectedItem": "the selected item",
"selectedDocuments": "the selected {{count}} documents",
"selectedDocument": "the selected document",
"deleteDocumentFailedLog": "Failed to delete document {{documentId}} with status code {{statusCode}}",
"deleteSuccessLog": "Successfully deleted {{count}} document(s)",
"deleteThrottledLog": "Failed to delete {{count}} document(s) due to \"Request too large\" (429) error. Retrying...",
"missingShardKeyLog": "Failed to save new document: Document shard key not defined",
"filterTooltip": "Type a query predicate or choose one from the list.",
"loadMore": "Load more",
"documentEditor": "Document editor",
"savedFilters": "Saved filters",
"defaultFilters": "Default filters",
"abort": "Abort",
"deletingDocuments": "Deleting {{count}} document(s)",
"deletedDocumentsSuccess": "Successfully deleted {{count}} document(s).",
"deleteAborted": "Deleting document(s) was aborted.",
"failedToDeleteDocuments": "Failed to delete {{count}} document(s).",
"requestTooLargeBase": "Some delete requests failed due to a \"Request too large\" exception (429)",
"retriedSuccessfully": "but were successfully retried.",
"retryingNow": "Retrying now.",
"increaseThroughputTip": "To prevent this in the future, consider increasing the throughput on your container or database.",
"numberOfSelectedDocuments": "Number of selected documents: {{count}}",
"mongoFilterPlaceholder": "Type a query predicate (e.g., {\"id\":\"foo\"}), or choose one from the drop down list, or leave empty to query all documents.",
"sqlFilterPlaceholder": "Type a query predicate (e.g., WHERE c.id=\"1\"), or choose one from the drop down list, or leave empty to query all documents.",
"error": "Error",
"warning": "Warning"
},
"query": {
"executeQuery": "Execute Query",
"executeSelection": "Execute Selection",
"saveQuery": "Save Query",
"downloadQuery": "Download Query",
"cancelQuery": "Cancel query",
"openSavedQueries": "Open Saved Queries",
"vertical": "Vertical",
"horizontal": "Horizontal",
"view": "View",
"editingQuery": "Editing Query"
},
"storedProcedure": {
"id": "Stored Procedure Id",
"idPlaceholder": "Enter the new stored procedure id",
"idAriaLabel": "Stored procedure id",
"body": "Stored Procedure Body",
"bodyAriaLabel": "Stored procedure body",
"successfulExecution": "Successful execution of stored procedure",
"resultAriaLabel": "Execute stored procedure result",
"logsAriaLabel": "Execute stored procedure logs",
"errors": "Errors:",
"errorDetailsAriaLabel": "Error details link",
"moreDetails": "More details",
"consoleLogTab": "console.log"
},
"trigger": {
"id": "Trigger Id",
"idPlaceholder": "Enter the new trigger id",
"type": "Trigger Type",
"operation": "Trigger Operation",
"body": "Trigger Body",
"bodyAriaLabel": "Trigger body",
"pre": "Pre",
"post": "Post",
"all": "All",
"operationCreate": "Create",
"operationDelete": "Delete",
"operationReplace": "Replace"
},
"udf": {
"id": "User Defined Function Id",
"idPlaceholder": "Enter the new user defined function id",
"body": "User Defined Function Body",
"bodyAriaLabel": "User defined function body"
},
"conflicts": {
"unsavedChanges": "Unsaved changes",
"changesWillBeLost": "Changes will be lost. Do you want to continue?",
"resolveConflictFailed": "Resolve conflict failed",
"deleteConflictFailed": "Delete conflict failed",
"refreshGridFailed": "Refresh documents grid failed"
},
"mongoShell": {
"title": "Mongo Shell"
}
},
"panes": {
"deleteDatabase": {
"panelTitle": "Delete {{databaseName}}",
"warningMessage": "Warning! The action you are about to take cannot be undone. Continuing will permanently delete this resource and all of its children resources.",
"confirmPrompt": "Confirm by typing the {{databaseName}} id (name)",
"inputMismatch": "Input {{databaseName}} name \"{{input}}\" does not match the selected {{databaseName}} \"{{selectedId}}\"",
"feedbackTitle": "Help us improve Azure Cosmos DB!",
"feedbackReason": "What is the reason why you are deleting this {{databaseName}}?"
},
"deleteCollection": {
"panelTitle": "Delete {{collectionName}}",
"confirmPrompt": "Confirm by typing the {{collectionName}} id",
"inputMismatch": "Input id {{input}} does not match the selected {{selectedId}}",
"feedbackTitle": "Help us improve Azure Cosmos DB!",
"feedbackReason": "What is the reason why you are deleting this {{collectionName}}?"
},
"addDatabase": {
"databaseLabel": "Database {{suffix}}",
"databaseIdLabel": "Database id",
"keyspaceIdLabel": "Keyspace id",
"databaseIdPlaceholder": "Type a new {{databaseLabel}} id",
"databaseTooltip": "A {{databaseLabel}} is a logical container of one or more {{collectionsLabel}}",
"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.",
"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",
"useExisting": "Use existing",
"databaseTooltip": "A database is analogous to a namespace. It is the unit of management for a set of {{collectionName}}.",
"shareThroughput": "Share throughput across {{collectionName}}",
"shareThroughputTooltip": "Throughput configured at the database level will be shared across all {{collectionName}} within the database.",
"collectionIdLabel": "{{collectionName}} id",
"collectionIdTooltip": "Unique identifier for the {{collectionName}} and used for id-based routing through REST and all SDKs.",
"collectionIdPlaceholder": "e.g., {{collectionName}}1",
"collectionIdAriaLabel": "{{collectionName}} id, Example {{collectionName}}1",
"existingDatabaseAriaLabel": "Choose existing {{databaseName}} id",
"existingDatabasePlaceholder": "Choose existing {{databaseName}} id",
"indexing": "Indexing",
"turnOnIndexing": "Turn on indexing",
"automatic": "Automatic",
"turnOffIndexing": "Turn off indexing",
"off": "Off",
"sharding": "Sharding",
"shardingTooltip": "Sharded collections split your data across many replica sets (shards) to achieve unlimited scalability. Sharded collections require choosing a shard key (field) to evenly distribute your data.",
"unsharded": "Unsharded",
"unshardedLabel": "Unsharded (20GB limit)",
"sharded": "Sharded",
"addPartitionKey": "Add hierarchical partition key",
"hierarchicalPartitionKeyInfo": "This feature allows you to partition your data with up to three levels of keys for better data distribution. Requires .NET V3, Java V4 SDK, or preview JavaScript V3 SDK.",
"provisionDedicatedThroughput": "Provision dedicated throughput for this {{collectionName}}",
"provisionDedicatedThroughputTooltip": "You can optionally provision dedicated throughput for a {{collectionName}} within a database that has throughput provisioned. This dedicated throughput amount will not be shared with other {{collectionNamePlural}} in the database and does not count towards the throughput you provisioned for the database. This throughput amount will be billed in addition to the throughput amount you provisioned at the database level.",
"uniqueKeysPlaceholderMongo": "Comma separated paths e.g. firstName,address.zipCode",
"uniqueKeysPlaceholderSql": "Comma separated paths e.g. /firstName,/address/zipCode",
"addUniqueKey": "Add unique key",
"enableAnalyticalStore": "Enable analytical store",
"disableAnalyticalStore": "Disable analytical store",
"on": "On",
"analyticalStoreSynapseLinkRequired": "Azure Synapse Link is required for creating an analytical store {{collectionName}}. Enable Synapse Link for this Cosmos DB account.",
"enable": "Enable",
"containerVectorPolicy": "Container Vector Policy",
"containerFullTextSearchPolicy": "Container Full Text Search Policy",
"advanced": "Advanced",
"mongoIndexingTooltip": "The _id field is indexed by default. Creating a wildcard index for all fields will optimize queries and is recommended for development.",
"createWildcardIndex": "Create a Wildcard Index on all fields",
"legacySdkCheckbox": "My application uses an older Cosmos .NET or Java SDK version (.NET V1 or Java V2)",
"legacySdkInfo": "To ensure compatibility with older SDKs, the created container will use a legacy partitioning scheme that supports partition key values of size only up to 101 bytes. If this is enabled, you will not be able to use hierarchical partition keys.",
"indexingOnInfo": "All properties in your documents will be indexed by default for flexible and efficient queries.",
"indexingOffInfo": "Indexing will be turned off. Recommended if you don't need to run queries or only have key value operations.",
"indexingOffWarning": "By creating this container with indexing turned off, you will not be able to make any indexing policy changes. Indexing changes are only allowed on a container with a indexing policy.",
"acknowledgeSpendErrorMonthly": "Please acknowledge the estimated monthly spend.",
"acknowledgeSpendErrorDaily": "Please acknowledge the estimated daily spend.",
"unshardedMaxRuError": "Unsharded collections support up to 10,000 RUs",
"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",
"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.",
"partitionKeyTooltip": "The {{partitionKeyName}} is used to automatically distribute data across partitions for scalability. Choose a property in your JSON document that has a wide range of values and evenly distributes request volume.",
"partitionKeyTooltipSqlSuffix": " For small read-heavy workloads or write-heavy workloads of any size, id is often a good choice.",
"shardKeyLabel": "Shard key",
"partitionKeyLabel": "Partition key",
"shardKeyPlaceholder": "e.g., categoryId",
"partitionKeyPlaceholderDefault": "e.g., /address",
"partitionKeyPlaceholderFirst": "Required - first partition key e.g., /TenantId",
"partitionKeyPlaceholderSecond": "second partition key e.g., /UserId",
"partitionKeyPlaceholderThird": "third partition key e.g., /SessionId",
"partitionKeyPlaceholderGraph": "e.g., /address/zipCode",
"uniqueKeysTooltip": "Unique keys provide developers with the ability to add a layer of data integrity to their database. By creating a unique key policy when a container is created, you ensure the uniqueness of one or more values per partition key.",
"uniqueKeysLabel": "Unique keys",
"analyticalStoreLabel": "Analytical Store",
"analyticalStoreTooltip": "Enable analytical store capability to perform near real-time analytics on your operational data, without impacting the performance of transactional workloads.",
"analyticalStoreDescription": "Enable analytical store capability to perform near real-time analytics on your operational data, without impacting the performance of transactional workloads.",
"vectorPolicyTooltip": "Describe any properties in your data that contain vectors, so that they can be made available for similarity queries."
},
"settings": {
"pageOptions": "Page Options",
"pageOptionsDescription": "Choose Custom to specify a fixed amount of query results to show, or choose Unlimited to show as many query results per page.",
"queryResultsPerPage": "Query results per page",
"queryResultsPerPageTooltip": "Enter the number of query results that should be shown per page.",
"customQueryItemsPerPage": "Custom query items per page",
"custom": "Custom",
"unlimited": "Unlimited",
"entraIdRbac": "Enable Entra ID RBAC",
"entraIdRbacDescription": "Choose Automatic to enable Entra ID RBAC automatically. True/False to force enable/disable Entra ID RBAC.",
"true": "True",
"false": "False",
"regionSelection": "Region Selection",
"regionSelectionDescription": "Changes region the Cosmos Client uses to access account.",
"selectRegion": "Select Region",
"selectRegionTooltip": "Changes the account endpoint used to perform client operations.",
"globalDefault": "Global (Default)",
"readWrite": "(Read/Write)",
"read": "(Read)",
"queryTimeout": "Query Timeout",
"queryTimeoutDescription": "When a query reaches a specified time limit, a popup with an option to cancel the query will show unless automatic cancellation has been enabled.",
"enableQueryTimeout": "Enable query timeout",
"queryTimeoutMs": "Query timeout (ms)",
"automaticallyCancelQuery": "Automatically cancel query after timeout",
"ruLimit": "RU Limit",
"ruLimitDescription": "If a query exceeds a configured RU limit, the query will be aborted.",
"enableRuLimit": "Enable RU limit",
"ruLimitLabel": "RU Limit (RU)",
"defaultQueryResults": "Default Query Results View",
"defaultQueryResultsDescription": "Select the default view to use when displaying query results.",
"retrySettings": "Retry Settings",
"retrySettingsDescription": "Retry policy associated with throttled requests during CosmosDB queries.",
"maxRetryAttempts": "Max retry attempts",
"maxRetryAttemptsTooltip": "Max number of retries to be performed for a request. Default value 9.",
"fixedRetryInterval": "Fixed retry interval (ms)",
"fixedRetryIntervalTooltip": "Fixed retry interval in milliseconds to wait between each retry ignoring the retryAfter returned as part of the response. Default value is 0 milliseconds.",
"maxWaitTime": "Max wait time (s)",
"maxWaitTimeTooltip": "Max wait time in seconds to wait for a request while the retries are happening. Default value 30 seconds.",
"enableContainerPagination": "Enable container pagination",
"enableContainerPaginationDescription": "Load 50 containers at a time. Currently, containers are not pulled in alphanumeric order.",
"enableCrossPartitionQuery": "Enable cross-partition query",
"enableCrossPartitionQueryDescription": "Send more than one request while executing a query. More than one request is necessary if the query is not scoped to single partition key value.",
"maxDegreeOfParallelism": "Max degree of parallelism",
"maxDegreeOfParallelismDescription": "Gets or sets the number of concurrent operations run client side during parallel query execution. A positive property value limits the number of concurrent operations to the set value. If it is set to less than 0, the system automatically decides the number of concurrent operations to run.",
"maxDegreeOfParallelismQuery": "Query up to the max degree of parallelism.",
"priorityLevel": "Priority Level",
"priorityLevelDescription": "Sets the priority level for data-plane requests from Data Explorer when using Priority-Based Execution. If \"None\" is selected, Data Explorer will not specify priority level, and the server-side default priority level will be used.",
"displayGremlinQueryResults": "Display Gremlin query results as:",
"displayGremlinQueryResultsDescription": "Select Graph to automatically visualize the query results as a Graph or JSON to display the results as JSON.",
"graph": "Graph",
"json": "JSON",
"graphAutoVisualization": "Graph Auto-visualization",
"enableSampleDatabase": "Enable sample database",
"enableSampleDatabaseDescription": "This is a sample database and collection with synthetic product data you can use to explore using NoSQL queries. This will appear as another database in the Data Explorer UI, and is created by, and maintained by Microsoft at no cost to you.",
"enableSampleDbAriaLabel": "Enable sample db for query exploration",
"guidRepresentation": "Guid Representation",
"guidRepresentationDescription": "GuidRepresentation in MongoDB refers to how Globally Unique Identifiers (GUIDs) are serialized and deserialized when stored in BSON documents. This will apply to all document operations.",
"advancedSettings": "Advanced Settings",
"ignorePartitionKey": "Ignore partition key on document update",
"ignorePartitionKeyTooltip": "If checked, the partition key value will not be used to locate the document during update operations. Only use this if document updates are failing due to an abnormal partition key.",
"clearHistory": "Clear History",
"clearHistoryConfirm": "Are you sure you want to proceed?",
"clearHistoryDescription": "This action will clear the all customizations for this account in this browser, including:",
"clearHistoryTabLayout": "Reset your customized tab layout, including the splitter positions",
"clearHistoryTableColumns": "Erase your table column preferences, including any custom columns",
"clearHistoryFilters": "Clear your filter history",
"clearHistoryRegion": "Reset region selection to global",
"increaseValueBy1000": "Increase value by 1000",
"decreaseValueBy1000": "Decrease value by 1000",
"none": "None",
"low": "Low",
"high": "High",
"automatic": "Automatic",
"enhancedQueryControl": "Enhanced query control",
"enableQueryControl": "Enable query control",
"explorerVersion": "Explorer Version",
"accountId": "Account ID",
"sessionId": "Session ID",
"popupsDisabledError": "We were unable to establish authorization for this account, due to pop-ups being disabled in the browser.\nPlease enable pop-ups for this site and click on \"Login for Entra ID\" button",
"failedToAcquireTokenError": "Failed to acquire authorization token automatically. Please click on \"Login for Entra ID\" button to enable Entra ID RBAC operations"
},
"saveQuery": {
"panelTitle": "Save Query",
"setupCostMessage": "For compliance reasons, we save queries in a container in your Azure Cosmos account, in a separate database called \u201c{{databaseName}}\u201d. To proceed, we need to create a container in your account, estimated additional cost is $0.77 daily.",
"completeSetup": "Complete setup",
"noQueryNameError": "No query name specified",
"invalidQueryContentError": "Invalid query content specified",
"failedToSaveQueryError": "Failed to save query {{queryName}}",
"failedToSetupContainerError": "Failed to setup a container for saved queries",
"accountNotSetupError": "Failed to save query: account not setup to save queries",
"name": "Name"
},
"loadQuery": {
"noFileSpecifiedError": "No file specified",
"failedToLoadQueryError": "Failed to load query",
"failedToLoadQueryFromFileError": "Failed to load query from file {{fileName}}",
"selectFilesToOpen": "Select a query document",
"browseFiles": "Browse"
},
"executeStoredProcedure": {
"enterInputParameters": "Enter input parameters (if any)",
"key": "Key",
"param": "Param",
"partitionKeyValue": "Partition key value",
"value": "Value",
"addNewParam": "Add New Param",
"addParam": "Add param",
"deleteParam": "Delete param",
"invalidParamError": "Invalid param specified: {{invalidParam}}",
"invalidParamConsoleError": "Invalid param specified: {{invalidParam}} is not a valid literal value",
"stringType": "String",
"customType": "Custom"
},
"uploadItems": {
"noFilesSpecifiedError": "No files were specified. Please input at least one file.",
"selectJsonFiles": "Select JSON Files",
"selectJsonFilesTooltip": "Select one or more JSON files to upload. Each file can contain a single JSON document or an array of JSON documents. The combined size of all files in an individual upload operation must be less than 2 MB. You can perform multiple upload operations for larger data sets.",
"fileNameColumn": "FILE NAME",
"statusColumn": "STATUS",
"uploadStatus": "{{numSucceeded}} created, {{numThrottled}} throttled, {{numFailed}} errors",
"uploadedFiles": "Uploaded files"
},
"copyNotebook": {
"copyFailedError": "Failed to copy {{name}} to {{destination}}",
"uploadFailedError": "Failed to upload {{name}}",
"location": "Location",
"locationAriaLabel": "Location",
"selectLocation": "Select a notebook location to copy",
"name": "Name"
},
"publishNotebook": {
"publishFailedError": "Failed to publish {{notebookName}} to gallery",
"publishDescription": "When published, this notebook will appear in the Azure Cosmos DB notebooks public gallery. Make sure you have removed any sensitive data or output before publishing.",
"publishPrompt": "Would you like to publish and share \"{{name}}\" to the gallery?",
"coverImage": "Cover image",
"coverImageUrl": "Cover image url",
"name": "Name",
"description": "Description",
"tags": "Tags",
"tagsPlaceholder": "Optional tag 1, Optional tag 2",
"preview": "Preview",
"urlType": "URL",
"customImage": "Custom Image",
"takeScreenshot": "Take Screenshot",
"useFirstDisplayOutput": "Use First Display Output",
"failedToCaptureOutput": "Failed to capture first output",
"outputDoesNotExist": "Output does not exist for any of the cells.",
"failedToConvertError": "Failed to convert {{fileName}} to base64 format",
"failedToUploadError": "Failed to upload {{fileName}}"
},
"changePartitionKey": {
"failedToStartError": "Failed to start data transfer job",
"suboptimalPartitionKeyError": "Warning: The system has detected that your collection may be using a suboptimal partition key",
"description": "When changing a container\u2019s partition key, you will need to create a destination container with the correct partition key. You may also select an existing destination container.",
"sourceContainerId": "Source {{collectionName}} id",
"destinationContainerId": "Destination {{collectionName}} id",
"collectionIdTooltip": "Unique identifier for the {{collectionName}} and used for id-based routing through REST and all SDKs.",
"collectionIdPlaceholder": "e.g., {{collectionName}}1",
"collectionIdAriaLabel": "{{collectionName}} id, Example {{collectionName}}1",
"existingContainers": "Existing Containers",
"partitionKeyWarning": "The destination container must not already exist. Data Explorer will create a new destination container for you."
},
"cassandraAddCollection": {
"keyspaceLabel": "Keyspace name",
"keyspaceTooltip": "Select an existing keyspace or enter a new keyspace id.",
"tableIdLabel": "Enter CQL command to create the table.",
"enterTableId": "Enter table Id",
"tableSchemaAriaLabel": "Table schema",
"provisionDedicatedThroughput": "Provision dedicated throughput for this table",
"provisionDedicatedThroughputTooltip": "You can optionally provision dedicated throughput for a table within a keyspace that has throughput provisioned. This dedicated throughput amount will not be shared with other tables in the keyspace and does not count towards the throughput you provisioned for the keyspace. This throughput amount will be billed in addition to the throughput amount you provisioned at the keyspace level."
},
"tables": {
"addProperty": "Add Property",
"addRow": "Add Row",
"addEntity": "Add Entity",
"back": "back",
"nullFieldsWarning": "Warning: Null fields will not be displayed for editing.",
"propertyEmptyError": "{{property}} cannot be empty. Please input a value for {{property}}",
"whitespaceError": "{{property}} cannot have whitespace. Please input a value for {{property}} without whitespace",
"propertyTypeEmptyError": "Property type cannot be empty. Please select a type from the dropdown for property {{property}}"
},
"tableQuerySelect": {
"selectColumns": "Select the columns that you want to query.",
"availableColumns": "Available Columns"
},
"tableColumnSelection": {
"selectColumns": "Select which columns to display in your view of items in your container.",
"searchFields": "Search fields",
"reset": "Reset",
"partitionKeySuffix": " (partition key)"
},
"newVertex": {
"addProperty": "Add Property"
},
"addGlobalSecondaryIndex": {
"globalSecondaryIndexId": "Global secondary index container id",
"globalSecondaryIndexIdPlaceholder": "e.g., indexbyEmailId",
"projectionQuery": "Projection query",
"projectionQueryPlaceholder": "SELECT c.email, c.accountId FROM c",
"projectionQueryTooltip": "Learn more about defining global secondary indexes.",
"disabledTitle": "A global secondary index is already being created. Please wait for it to complete before creating another one."
},
"stringInput": {
"inputMismatchError": "Input {{input}} does not match the selected {{selectedId}}"
},
"panelInfo": {
"information": "Information",
"moreDetails": "More details"
}
},
"controls": {
"settings": {
"tabTitles": {
"scale": "Scale",
"conflictResolution": "Conflict Resolution",
"settings": "Settings",
"indexingPolicy": "Indexing Policy",
"partitionKeys": "Partition Keys",
"partitionKeysPreview": "Partition Keys (preview)",
"computedProperties": "Computed Properties",
"containerPolicies": "Container Policies",
"throughputBuckets": "Throughput Buckets",
"globalSecondaryIndexPreview": "Global Secondary Index (Preview)",
"maskingPolicyPreview": "Masking Policy (preview)"
},
"mongoNotifications": {
"selectTypeWarning": "Please select a type for each index.",
"enterFieldNameError": "Please enter a field name.",
"wildcardPathError": "Wildcard path is not present in the field name. Use a pattern like "
},
"partitionKey": {
"shardKey": "Shard key",
"partitionKey": "Partition key",
"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.",
"partitionKeyTooltip": "is used to automatically distribute data across partitions for scalability. Choose a property in your JSON document that has a wide range of values and evenly distributes request volume.",
"sqlPartitionKeyTooltipSuffix": " For small read-heavy workloads or write-heavy workloads of any size, id is often a good choice.",
"partitionKeySubtext": "For small workloads, the item ID is a suitable choice for the partition key.",
"mongoPlaceholder": "e.g., categoryId",
"gremlinPlaceholder": "e.g., /address",
"sqlFirstPartitionKey": "Required - first partition key e.g., /TenantId",
"sqlSecondPartitionKey": "second partition key e.g., /UserId",
"sqlThirdPartitionKey": "third partition key e.g., /SessionId",
"defaultPlaceholder": "e.g., /address/zipCode"
},
"costEstimate": {
"title": "Cost estimate*",
"howWeCalculate": "How we calculate this",
"updatedCostPerMonth": "Updated cost per month",
"currentCostPerMonth": "Current cost per month",
"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.",
"ttlWarningText": "The system will automatically delete items based on the TTL value (in seconds) you provide, without needing a delete operation explicitly issued by a client application. For more information see,",
"ttlWarningLinkText": "Time to Live (TTL) in Azure Cosmos DB",
"unsavedIndexingPolicy": "indexing policy",
"unsavedDataMaskingPolicy": "data masking policy",
"unsavedComputedProperties": "computed properties",
"unsavedEditorWarningPrefix": "You have not saved the latest changes made to your",
"unsavedEditorWarningSuffix": ". Please click save to confirm the changes.",
"updateDelayedApplyWarning": "You are about to request an increase in throughput beyond the pre-allocated capacity. This operation will take some time to complete.",
"scalingUpDelayMessage": "Scaling up will take 4-6 hours as it exceeds what Azure Cosmos DB can instantly support currently based on your number of physical partitions. You can increase your throughput to {{instantMaximumThroughput}} instantly or proceed with this value and wait until the scale-up is completed.",
"exceedPreAllocatedMessage": "Your request to increase throughput exceeds the pre-allocated capacity which may take longer than expected. There are three options you can choose from to proceed:",
"instantScaleOption": "You can instantly scale up to {{instantMaximumThroughput}} RU/s.",
"asyncScaleOption": "You can asynchronously scale up to any value under {{maximumThroughput}} RU/s in 4-6 hours.",
"quotaMaxOption": "Your current quota max is {{maximumThroughput}} RU/s. To go over this limit, you must request a quota increase and the Azure Cosmos DB team will review.",
"belowMinimumMessage": "You are not able to lower throughput below your current minimum of {{minimum}} RU/s. For more information on this limit, please refer to our service quote documentation.",
"saveThroughputWarning": "Your bill will be affected as you update your throughput settings. Please review the updated cost estimate below before saving your changes",
"currentAutoscaleThroughput": "Current autoscale throughput:",
"targetAutoscaleThroughput": "Target autoscale throughput:",
"currentManualThroughput": "Current manual throughput:",
"targetManualThroughput": "Target manual throughput:",
"applyDelayedMessage": "The request to increase the throughput has successfully been submitted. This operation will take 1-3 business days to complete. View the latest status in Notifications.",
"databaseLabel": "Database:",
"containerLabel": "Container:",
"applyShortDelayMessage": "A request to increase the throughput is currently in progress. This operation will take some time to complete.",
"applyLongDelayMessage": "A request to increase the throughput is currently in progress. This operation will take 1-3 business days to complete. View the latest status in Notifications.",
"throughputCapError": "Your account is currently configured with a total throughput limit of {{throughputCap}} RU/s. This update isn't possible because it would increase the total throughput to {{newTotalThroughput}} RU/s. Change total throughput limit in cost management.",
"throughputIncrementError": "Throughput value must be in increments of 1000"
},
"conflictResolution": {
"lwwDefault": "Last Write Wins (default)",
"customMergeProcedure": "Merge Procedure (custom)",
"mode": "Mode",
"conflictResolverProperty": "Conflict Resolver Property",
"storedProcedure": "Stored procedure",
"lwwTooltip": "Gets or sets the name of a integer property in your documents which is used for the Last Write Wins (LWW) based conflict resolution scheme. By default, the system uses the system defined timestamp property, _ts to decide the winner for the conflicting versions of the document. Specify your own integer property if you want to override the default timestamp based conflict resolution.",
"customTooltip": "Gets or sets the name of a stored procedure (aka merge procedure) for resolving the conflicts. You can write application defined logic to determine the winner of the conflicting versions of a document. The stored procedure will get executed transactionally, exactly once, on the server side. If you do not provide a stored procedure, the conflicts will be populated in the",
"customTooltipConflictsFeed": " conflicts feed",
"customTooltipSuffix": ". You can update/re-register the stored procedure at any time."
},
"changeFeed": {
"label": "Change feed log retention policy",
"tooltip": "Enable change feed log retention policy to retain last 10 minutes of history for items in the container by default. To support this, the request unit (RU) charge for this container will be multiplied by a factor of two for writes. Reads are unaffected."
},
"mongoIndexing": {
"disclaimer": "For queries that filter on multiple properties, create multiple single field indexes instead of a compound index.",
"disclaimerCompoundIndexesLink": " Compound indexes ",
"disclaimerSuffix": "are only used for sorting query results. If you need to add a compound index, you can create one using the Mongo shell.",
"compoundNotSupported": "Collections with compound indexes are not yet supported in the indexing editor. To modify indexing policy for this collection, use the Mongo Shell.",
"aadError": "To use the indexing policy editor, please login to the",
"aadErrorLink": "azure portal.",
"refreshingProgress": "Refreshing index transformation progress",
"canMakeMoreChangesZero": "You can make more indexing changes once the current index transformation is complete. ",
"refreshToCheck": "Refresh to check if it has completed.",
"canMakeMoreChangesProgress": "You can make more indexing changes once the current index transformation has completed. It is {{progress}}% complete. ",
"refreshToCheckProgress": "Refresh to check the progress.",
"definitionColumn": "Definition",
"typeColumn": "Type",
"dropIndexColumn": "Drop Index",
"addIndexBackColumn": "Add index back",
"deleteIndexButton": "Delete index Button",
"addBackIndexButton": "Add back Index Button",
"currentIndexes": "Current index(es)",
"indexesToBeDropped": "Index(es) to be dropped",
"indexFieldName": "Index Field Name",
"indexType": "Index Type",
"selectIndexType": "Select an index type",
"undoButton": "Undo Button"
},
"subSettings": {
"timeToLive": "Time to Live",
"ttlOff": "Off",
"ttlOnNoDefault": "On (no default)",
"ttlOn": "On",
"seconds": "second(s)",
"timeToLiveInSeconds": "Time to live in seconds",
"analyticalStorageTtl": "Analytical Storage Time to Live",
"geospatialConfiguration": "Geospatial Configuration",
"geography": "Geography",
"geometry": "Geometry",
"uniqueKeys": "Unique keys",
"mongoTtlMessage": "To enable time-to-live (TTL) for your collection/documents,",
"mongoTtlLinkText": "create a TTL index",
"partitionKeyTooltipTemplate": "This {{partitionKeyName}} is used to distribute data across multiple partitions for scalability. The value \"{{partitionKeyValue}}\" determines how documents are partitioned.",
"largePartitionKeyEnabled": "Large {{partitionKeyName}} has been enabled.",
"hierarchicalPartitioned": "Hierarchically partitioned container.",
"nonHierarchicalPartitioned": "Non-hierarchically partitioned container."
},
"scale": {
"freeTierInfo": "With free tier, you will get the first {{ru}} RU/s and {{storage}} GB of storage in this account for free. To keep your account free, keep the total RU/s across all resources in the account to {{ru}} RU/s.",
"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",
"throughputRangeLabel": "Throughput ({{min}} - {{max}} RU/s)",
"unlimited": "unlimited"
},
"partitionKeyEditor": {
"changePartitionKey": "Change {{partitionKeyName}}",
"currentPartitionKey": "Current {{partitionKeyName}}",
"partitioning": "Partitioning",
"hierarchical": "Hierarchical",
"nonHierarchical": "Non-hierarchical",
"safeguardWarning": "To safeguard the integrity of the data being copied to the new container, ensure that no updates are made to the source container for the entire duration of the partition key change process.",
"changeDescription": "To change the partition key, a new destination container must be created or an existing destination container selected. Data will then be copied to the destination container.",
"changeButton": "Change",
"changeJob": "{{partitionKeyName}} change job",
"cancelButton": "Cancel",
"documentsProcessed": "({{processedCount}} of {{totalCount}} documents processed)"
},
"computedProperties": {
"ariaLabel": "Computed properties",
"learnMorePrefix": "about how to define computed properties and how to use them."
},
"indexingPolicy": {
"ariaLabel": "Indexing Policy"
},
"dataMasking": {
"ariaLabel": "Data Masking Policy",
"validationFailed": "Validation failed:",
"includedPathsRequired": "includedPaths is required",
"includedPathsMustBeArray": "includedPaths must be an array",
"excludedPathsMustBeArray": "excludedPaths must be an array if provided"
},
"containerPolicy": {
"vectorPolicy": "Vector Policy",
"fullTextPolicy": "Full Text Policy",
"createFullTextPolicy": "Create new full text search policy"
},
"globalSecondaryIndex": {
"indexesDefined": "This container has the following indexes defined for it.",
"learnMoreSuffix": "about how to define global secondary indexes and how to use them.",
"jsonAriaLabel": "Global Secondary Index JSON",
"addIndex": "Add index",
"settingsTitle": "Global Secondary Index Settings",
"sourceContainer": "Source container",
"indexDefinition": "Global secondary index definition"
},
"indexingPolicyRefresh": {
"refreshFailed": "Refreshing index transformation progress failed"
},
"throughputInput": {
"autoscale": "Autoscale",
"manual": "Manual",
"minimumRuS": "Minimum RU/s",
"maximumRuS": "Maximum RU/s",
"x10Equals": "x 10 =",
"storageCapacity": "Storage capacity",
"fixed": "Fixed",
"unlimited": "Unlimited",
"instant": "Instant",
"fourToSixHrs": "4-6 hrs",
"autoscaleDescription": "Based on usage, your {{resourceType}} throughput will scale from",
"freeTierWarning": "Billing will apply if you provision more than {{ru}} RU/s of manual throughput, or if the resource scales beyond {{ru}} RU/s with autoscale.",
"capacityCalculator": "Estimate your required RU/s with",
"capacityCalculatorLink": " capacity calculator",
"fixedStorageNote": "When using a collection with fixed storage capacity, you can set up to 10,000 RU/s.",
"min": "min",
"max": "max"
},
"throughputBuckets": {
"label": "Throughput Buckets",
"bucketLabel": "Bucket {{id}}",
"dataExplorerQueryBucket": " (Data Explorer Query Bucket)",
"active": "Active",
"inactive": "Inactive"
}
}
}
}

View File

@@ -0,0 +1,727 @@
{
"common": {
"ok": "Aceptar",
"cancel": "Cancelar",
"close": "Cerrar",
"save": "Guardar",
"delete": "Eliminar",
"update": "Actualizar",
"discard": "Descartar",
"execute": "Ejecutar",
"loading": "Cargando",
"loadingEllipsis": "Cargando…",
"next": "Siguiente",
"previous": "Anterior",
"yes": "Sí",
"no": "No",
"result": "Resultado",
"learnMore": "Más información",
"getStarted": "Comenzar",
"retry": "Reintentar",
"apply": "Aplicar",
"refresh": "Actualizar",
"copy": "Copiar",
"create": "Crear",
"confirm": "Confirmar",
"open": "Abrir",
"rename": "Cambiar nombre",
"download": "Descargar",
"upload": "Cargar",
"connect": "Conectar",
"remove": "Quitar",
"load": "Cargar",
"publish": "Publicar",
"browse": "Examinar",
"increaseValueBy1": "Aumentar valor en 1",
"decreaseValueBy1": "Disminuir valor en 1"
},
"splashScreen": {
"title": {
"default": "Le presentamos Azure Cosmos DB",
"postgres": "Le damos la bienvenida a Azure Cosmos DB for PostgreSQL",
"vcoreMongo": "Le damos la bienvenida a Azure DocumentDB (con compatibilidad con MongoDB)"
},
"subtitle": {
"default": "Servicio de base de datos multimodelo distribuido globalmente para cualquier escala",
"getStarted": "Introducción a nuestros conjuntos de datos de ejemplo, documentación y herramientas adicionales."
},
"quickStart": {
"title": "Inicio rápido",
"description": "Iniciar un tutorial de inicio rápido para empezar a trabajar con datos de ejemplo"
},
"newCollection": {
"title": "Nuevo elemento: {{collectionName}}",
"description": "Creación de un nuevo contenedor para el almacenamiento y el rendimiento"
},
"samplesGallery": {
"title": "Galería de ejemplos de Azure Cosmos DB",
"description": "Descubra ejemplos que muestran patrones de aplicaciones inteligentes y escalables. Pruebe una ahora para ver la rapidez con la que puede pasar del concepto al código con Cosmos DB"
},
"connectCard": {
"title": "Conectar",
"description": "¿Prefiere usar sus propias herramientas? Busque la cadena de conexión que necesita para conectarse.",
"pgAdmin": {
"title": "Conexión con pgAdmin",
"description": "¿Prefiere pgAdmin? Busque las cadenas de conexión aquí"
},
"vsCode": {
"title": "Conectar con VS Code",
"description": "Consulta y administración de los clústeres de MongoDB y DocumentDB en Visual Studio Code"
}
},
"shell": {
"postgres": {
"title": "PostgreSQL Shell",
"description": "Creación de una tabla e interacción con datos mediante la interfaz de shell de PostgreSQL"
},
"vcoreMongo": {
"title": "Mongo Shell",
"description": "Creación de una colección e interacción con datos mediante la interfaz de shell de MongoDB"
}
},
"teachingBubble": {
"newToPostgres": {
"headline": "¿Es nuevo en Cosmos DB PGSQL?",
"body": "Le damos la bienvenida Si no está familiarizado con Cosmos DB PGSQL y necesita ayuda para empezar, aquí puede encontrar datos de ejemplo y consultarlos."
},
"resetPassword": {
"headline": "Crear la contraseña",
"body": "Si aún no ha cambiado la contraseña, cámbiela ahora."
},
"coachMark": {
"headline": "Empezar con el ejemplo {{collectionName}}",
"body": "Se le guiará para crear un contenedor de ejemplo con datos de ejemplo y, a continuación, le ofreceremos un paseo por el explorador de datos. También puede cancelar la reserva de esta excursión y explorarla por su cuenta."
}
},
"sections": {
"recents": "Recientes",
"clearRecents": "Borrar recientes",
"top3": "3 cosas principales que debes saber",
"learningResources": "Recursos de aprendizaje",
"nextSteps": "Siguientes pasos",
"tipsAndLearnMore": "Sugerencias y más información",
"notebook": "Notebook",
"needHelp": "¿Necesita ayuda?"
},
"top3Items": {
"sql": {
"advancedModeling": {
"title": "Patrones de modelado avanzados",
"description": "Obtenga información acerca de las estrategias avanzadas para optimizar la base de datos."
},
"partitioning": {
"title": "procedimientos recomendados de creación de particiones",
"description": "Aprenda a aplicar estrategias de creación de particiones y modelo de datos."
},
"resourcePlanning": {
"title": "Planear los requisitos de recursos",
"description": "Conozca las distintas opciones de configuración."
}
},
"mongo": {
"whatIsMongo": {
"title": "¿Qué es MongoDB API?",
"description": "Comprenda Azure Cosmos DB de MongoDB y sus características."
},
"features": {
"title": "Características y sintaxis",
"description": "Descubra las ventajas y características"
},
"migrate": {
"title": "Migrar los datos",
"description": "Pasos previos a la migración para mover datos"
}
},
"cassandra": {
"buildJavaApp": {
"title": "Compilación de una aplicación java",
"description": "Cree una aplicación java mediante un SDK."
},
"partitioning": {
"title": "procedimientos recomendados de creación de particiones",
"description": "Obtenga información acerca de cómo funciona la creación de particiones."
},
"requestUnits": {
"title": "Unidades de solicitud (RU)",
"description": "Descripción de los cargos de RU."
}
},
"gremlin": {
"dataModeling": {
"title": "Modelado de datos",
"description": "Recomendaciones de modelado de datos de grafos"
},
"partitioning": {
"title": "procedimientos recomendados de creación de particiones",
"description": "Obtenga información sobre cómo funciona la creación de particiones"
},
"queryData": {
"title": "Consultar datos",
"description": "Consulta de datos con Gremlin"
}
},
"tables": {
"whatIsTable": {
"title": "¿Cuál es el Table API?",
"description": "Descripción de Azure Cosmos DB para Table y sus características"
},
"migrate": {
"title": "Migrar los datos",
"description": "Obtenga información sobre cómo migrar sus datos"
},
"faq": {
"title": "Azure Cosmos DB para preguntas más frecuentes sobre tablas",
"description": "Preguntas comunes sobre Azure Cosmos DB para table"
}
}
},
"learningResources": {
"shortcuts": {
"title": "Explorador de datos métodos abreviados de teclado",
"description": "Obtenga información acerca de los métodos abreviados de teclado para navegar por Explorador de datos."
},
"liveTv": {
"title": "Conozca los aspectos básicos",
"description": "Vea Azure Cosmos DB introducción a programas de TV en vivo y vídeos de procedimientos."
},
"sql": {
"sdk": {
"title": "Introducción al uso de un SDK",
"description": "Obtenga información acerca del SDK de Azure Cosmos DB."
},
"migrate": {
"title": "Migrar los datos",
"description": "Migre datos mediante servicios de Azure y soluciones de código abierto."
}
},
"mongo": {
"nodejs": {
"title": "Compilación de una aplicación con Node.js",
"description": "Cree una aplicación Node.js."
},
"gettingStarted": {
"title": "Guía de introducción",
"description": "Conozca los conceptos básicos para empezar."
}
},
"cassandra": {
"createContainer": {
"title": "Crear un contenedor",
"description": "Conozca las opciones de creación de un contenedor."
},
"throughput": {
"title": "Aprovisionar rendimiento",
"description": "Aprenda a configurar el rendimiento."
}
},
"gremlin": {
"getStarted": {
"title": "Introducción ",
"description": "Creación, consulta y recorrido mediante la consola de Gremlin"
},
"importData": {
"title": "Importar datos del gráfico",
"description": "Información sobre los datos de ingesta masiva mediante BulkExecutor"
}
},
"tables": {
"dotnet": {
"title": "Compilación de una aplicación .NET",
"description": "Cómo acceder a Azure Cosmos DB para Table desde una aplicación .NET."
},
"java": {
"title": "Compilación de una aplicación java",
"description": "Creación de una Azure Cosmos DB para la aplicación Table con el SDK de Java "
}
}
},
"nextStepItems": {
"postgres": {
"dataModeling": "Modelado de datos",
"distributionColumn": "Cómo elegir una columna de distribución",
"buildApps": "Compilación de aplicaciones con Python, Java y Django"
},
"vcoreMongo": {
"migrateData": "Migrar datos",
"vectorSearch": "Creación de aplicaciones de inteligencia artificial con Vector Search",
"buildApps": "Compilación de aplicaciones con Nodejs"
}
},
"learnMoreItems": {
"postgres": {
"performanceTuning": "Ajuste de rendimiento",
"diagnosticQueries": "Consultas de diagnóstico útiles",
"sqlReference": "Referencia de SQL distribuida"
},
"vcoreMongo": {
"vectorSearch": "Vector de búsqueda",
"textIndexing": "Indización de texto",
"troubleshoot": "Solucionar problemas comunes"
}
},
"fabric": {
"buildTitle": "Compilación de la base de datos",
"useTitle": "Uso de la base de datos",
"newContainer": {
"title": "Nuevo contenedor",
"description": "Creación de un contenedor de destino para almacenar los datos"
},
"sampleData": {
"title": "Datos de ejemplo",
"description": "Carga de datos de ejemplo en la base de datos"
},
"sampleVectorData": {
"title": "Datos vectoriales de ejemplo",
"description": "Carga de datos vectoriales de ejemplo con text-embedding-ada-002"
},
"appDevelopment": {
"title": "Desarrollo de aplicaciones",
"description": "Empiece aquí para usar un SDK para compilar sus aplicaciones"
},
"sampleGallery": {
"title": "Galería de ejemplos",
"description": "Obtener ejemplos de un extremo a otro del mundo real"
}
},
"sampleDataDialog": {
"title": "Datos de ejemplo",
"startButton": "Inicio",
"createPrompt": "Cree un contenedor \"{{containerName}}\" e importe datos de ejemplo en él. Esto podría tardar unos minutos.",
"creatingContainer": "Creando contenedor \"{{containerName}}\"...",
"importingData": "Importando datos en \"{{containerName}}\"...",
"success": "Se ha creado correctamente \"{{containerName}}\" con datos de ejemplo.",
"errorContainerExists": "El contenedor \"{{containerName}}\" de la base de datos \"{{databaseName}}\" ya existe. Elimínelo y vuelva a intentarlo.",
"errorCreateContainer": "Error al crear el contenedor: {{error}}",
"errorImportData": "No se pudieron importar los datos: {{error}}"
}
},
"contextMenu": {
"newContainer": "Nuevo {{containerName}}",
"restoreContainer": "Restaurar {{containerName}}",
"deleteDatabase": "Eliminar {{databaseName}}",
"deleteContainer": "Eliminar {{containerName}}",
"newSqlQuery": "Nueva consulta de SQL",
"newQuery": "Nueva consulta",
"openMongoShell": "Abrir Shell de Mongo",
"newShell": "Nuevo shell",
"openCassandraShell": "Abrir Shell de Cassandra",
"newStoredProcedure": "Nuevo procedimiento almacenado",
"newUdf": "Nueva UDF",
"newTrigger": "Nuevo desencadenador",
"deleteStoredProcedure": "Eliminar procedimiento almacenado",
"deleteTrigger": "Eliminar desencadenador",
"deleteUdf": "Eliminar función definida por el usuario"
},
"tabs": {
"documents": {
"newItem": "Nuevo elemento",
"newDocument": "Nuevo documento",
"uploadItem": "Cargar elemento",
"applyFilter": "Aplicar filtro",
"unsavedChanges": "Cambios sin guardar",
"unsavedChangesMessage": "Se perderán los cambios no guardados. ¿Quiere continuar?",
"createDocumentFailed": "Error al crear el documento",
"updateDocumentFailed": "Error al actualizar el documento",
"documentDeleted": "El documento se eliminó correctamente.",
"deleteDocumentDialogTitle": "Eliminar documento",
"deleteDocumentsDialogTitle": "Eliminar documentos",
"throttlingError": "Algunos documentos no se pudieron eliminar debido a un error de limitación de velocidad. Inténtelo de nuevo más tarde. Para evitar esto en el futuro, considere la posibilidad de aumentar el rendimiento en el contenedor o la base de datos.",
"deleteFailed": "Error al eliminar documentos ({{error}})",
"missingShardProperty": "El documento carece de la propiedad de partición: {{partitionKeyProperty}}",
"refreshGridFailed": "Error al actualizar la cuadrícula de documentos",
"confirmDelete": "¿Seguro que desea eliminar {{documentName}}?",
"confirmDeleteTitle": "Confirmar eliminación",
"selectedItems": "los elementos seleccionados {{count}}",
"selectedItem": "el elemento seleccionado",
"selectedDocuments": "los documentos seleccionados {{count}} ",
"selectedDocument": "el documento seleccionado",
"deleteDocumentFailedLog": "No se pudo eliminar el documento {{documentId}} con código de estado {{statusCode}}",
"deleteSuccessLog": "Documentos eliminados {{count}} correctamente",
"deleteThrottledLog": "No se pudieron eliminar {{count}} documentos debido al error \"Solicitud demasiado grande\" (429). Reintentando...",
"missingShardKeyLog": "No se pudo guardar el nuevo documento: clave de partición de documento no definida",
"filterTooltip": "Escriba un predicado de consulta o elija uno de la lista.",
"loadMore": "Cargar más",
"documentEditor": "Editor de documentos",
"savedFilters": "Filtros guardados",
"defaultFilters": "Filtros predeterminados",
"abort": "Anular",
"deletingDocuments": "Eliminando {{count}} documentos",
"deletedDocumentsSuccess": "Los documentos se eliminaron {{count}} correctamente.",
"deleteAborted": "Se anuló la eliminación de documentos.",
"failedToDeleteDocuments": "No se pudieron eliminar {{count}} documentos.",
"requestTooLargeBase": "Error en algunas solicitudes de eliminación debido a una excepción \"Solicitud demasiado grande\" (429)",
"retriedSuccessfully": "pero se reintentaron correctamente.",
"retryingNow": "Reintentar ahora.",
"increaseThroughputTip": "Para evitar esto en el futuro, considere la posibilidad de aumentar el rendimiento en el contenedor o la base de datos.",
"numberOfSelectedDocuments": "Número de documentos seleccionados: {{count}}",
"mongoFilterPlaceholder": "Escriba un predicado de consulta (por ejemplo, {\"id\":\"foo\"}), elija uno de la lista desplegable o déjelo vacío para consultar todos los documentos.",
"sqlFilterPlaceholder": "Escriba un predicado de consulta (por ejemplo, WHERE c.id=\"1\"), elija uno de la lista desplegable o déjelo vacío para consultar todos los documentos.",
"error": "Error",
"warning": "Advertencia"
},
"query": {
"executeQuery": "Ejecutar la consulta",
"executeSelection": "Ejecutar selección",
"saveQuery": "Guardar consulta",
"downloadQuery": "Descargar consulta",
"cancelQuery": "Cancelar consulta",
"openSavedQueries": "Abrir consultas guardadas",
"vertical": "Vertical",
"horizontal": "Horizontal",
"view": "Vista",
"editingQuery": "Editar consulta"
},
"storedProcedure": {
"id": "Id. de procedimiento almacenado",
"idPlaceholder": "Escriba el nuevo identificador de procedimiento almacenado",
"idAriaLabel": "Id. de procedimiento almacenado",
"body": "Cuerpo del procedimiento almacenado",
"bodyAriaLabel": "Cuerpo del procedimiento almacenado",
"successfulExecution": "Ejecución correcta del procedimiento almacenado",
"resultAriaLabel": "Ejecutar resultado de procedimiento almacenado",
"logsAriaLabel": "Ejecución de registros de procedimientos almacenados",
"errors": "Errores:",
"errorDetailsAriaLabel": "Vínculo de detalles del error",
"moreDetails": "Más detalles",
"consoleLogTab": "console.log"
},
"trigger": {
"id": "Id. de desencadenador",
"idPlaceholder": "Escriba el nuevo identificador del desencadenador",
"type": "Tipo de desencadenador",
"operation": "Operación del desencadenador",
"body": "Cuerpo del desencadenador",
"bodyAriaLabel": "Cuerpo del desencadenador",
"pre": "Previo",
"post": "Publicar",
"all": "Todo",
"operationCreate": "Crear",
"operationDelete": "Eliminar",
"operationReplace": "Reemplazar"
},
"udf": {
"id": "Id. de función definida por el usuario",
"idPlaceholder": "Escriba el nuevo identificador de función definido por el usuario",
"body": "Cuerpo de la función definida por el usuario",
"bodyAriaLabel": "Cuerpo de la función definida por el usuario"
},
"conflicts": {
"unsavedChanges": "Cambios sin guardar",
"changesWillBeLost": "Se perderán los cambios. ¿Quiere continuar?",
"resolveConflictFailed": "Error al resolver el conflicto",
"deleteConflictFailed": "Error al eliminar el conflicto",
"refreshGridFailed": "Error al actualizar la cuadrícula de documentos"
},
"mongoShell": {
"title": "Mongo Shell"
}
},
"panes": {
"deleteDatabase": {
"panelTitle": "Eliminar {{databaseName}}",
"warningMessage": "¡Advertencia! La acción que va a realizar no se puede deshacer. Si continúa, se eliminará permanentemente este recurso y todos sus recursos secundarios.",
"confirmPrompt": "Confirme escribiendo el {{databaseName}} identificador (nombre)",
"inputMismatch": "El nombre de entrada {{databaseName}} \"{{input}}\" no coincide con el {{databaseName}} seleccionado \"{{selectedId}}\"",
"feedbackTitle": "Ayúdenos a mejorar Azure Cosmos DB.",
"feedbackReason": "¿Cuál es el motivo por el que está eliminando esto {{databaseName}}?"
},
"deleteCollection": {
"panelTitle": "Eliminar {{collectionName}}",
"confirmPrompt": "Confirme escribiendo el {{collectionName}} id.",
"inputMismatch": "El id de entrada {{input}} no coincide con el seleccionado {{selectedId}}",
"feedbackTitle": "Ayúdenos a mejorar Azure Cosmos DB.",
"feedbackReason": "¿Cuál es el motivo por el que está eliminando esto {{collectionName}}?"
},
"addDatabase": {
"databaseLabel": "Base de datos {{suffix}}",
"databaseIdLabel": "Id. de base de datos",
"keyspaceIdLabel": "Id. de espacio de claves",
"databaseIdPlaceholder": "Escriba un nuevo {{databaseLabel}} identificador",
"databaseTooltip": "Un {{databaseLabel}} es un contenedor lógico de uno o varios {{collectionsLabel}}",
"shareThroughput": "Compartir el rendimiento entre {{collectionsLabel}}",
"shareThroughputTooltip": "El rendimiento aprovisionado en el {{databaseLabel}} nivel se compartirá entre todos {{collectionsLabel}} dentro de {{databaseLabel}}.",
"greaterThanError": "Escriba un valor mayor que para el {{minValue}} rendimiento de Autopilot",
"acknowledgeSpendError": "Confirme el gasto estimado {{period}}."
},
"addCollection": {
"createNew": "Crear nuevo",
"useExisting": "Usar existente",
"databaseTooltip": "Una base de datos es análoga a un espacio de nombres. Es la unidad de administración de un conjunto de {{collectionName}}.",
"shareThroughput": "Compartir el rendimiento entre {{collectionName}}",
"shareThroughputTooltip": "El rendimiento configurado en el nivel de base de datos se compartirá en toda {{collectionName}} la base de datos.",
"collectionIdLabel": "{{collectionName}} Id. ",
"collectionIdTooltip": "Identificador único de y usado para el {{collectionName}} enrutamiento basado en identificadores a través de REST y todos los SDK.",
"collectionIdPlaceholder": "por ejemplo, {{collectionName}}1",
"collectionIdAriaLabel": "{{collectionName}} id., ejemplo {{collectionName}}1",
"existingDatabaseAriaLabel": "Elegir id. existente {{databaseName}} ",
"existingDatabasePlaceholder": "Elegir id. existente {{databaseName}} ",
"indexing": "Indexación",
"turnOnIndexing": "Activar la indexación",
"automatic": "Automático",
"turnOffIndexing": "Desactivar la indexación",
"off": "Desactivado",
"sharding": "Particionamiento",
"shardingTooltip": "Las colecciones particionadas dividen sus datos entre varios conjuntos de réplicas (shards) para lograr una escalabilidad ilimitada. Las colecciones particionadas requieren elegir una clave de partición (campo) para distribuir uniformemente los datos.",
"unsharded": "Sin cambios",
"unshardedLabel": "Sin cambios (límite de 20 GB)",
"sharded": "Particionado",
"addPartitionKey": "Agregar clave de partición jerárquica",
"hierarchicalPartitionKeyInfo": "Esta característica permite particionar los datos con hasta tres niveles de claves para una mejor distribución de los datos. Requiere .NET V3, el SDK de Java V4, o la versión preliminar del SDK de JavaScript V3.",
"provisionDedicatedThroughput": "Aprovisionar rendimiento dedicado para esto {{collectionName}}",
"provisionDedicatedThroughputTooltip": "Opcionalmente, puede aprovisionar un rendimiento dedicado para una {{collectionName}} base de datos que tenga el rendimiento aprovisionado. Esta cantidad de rendimiento dedicado no se compartirá con otros {{collectionNamePlural}} usuarios de la base de datos y no se contabilizará para el rendimiento aprovisionado para la base de datos. Esta cantidad de rendimiento se facturará además de la cantidad de rendimiento que aprovisionó en el nivel de base de datos.",
"uniqueKeysPlaceholderMongo": "Rutas de acceso separadas por comas, por ejemplo, firstName, address.zipCode",
"uniqueKeysPlaceholderSql": "Rutas de acceso separadas por comas, por ejemplo, /firstName,/address/zipCode",
"addUniqueKey": "Agregar clave única",
"enableAnalyticalStore": "Habilitar almacén analítico",
"disableAnalyticalStore": "Deshabilitar almacén analítico",
"on": "Activado",
"analyticalStoreSynapseLinkRequired": "Azure Synapse Link es necesario para crear un almacén analítico {{collectionName}}. Habilite Azure Synapse Link para esta cuenta de Cosmos DB.",
"enable": "Habilitar",
"containerVectorPolicy": "Directiva de vector de contenedor",
"containerFullTextSearchPolicy": "Directiva de búsqueda de texto completo del contenedor",
"advanced": "Avanzado",
"mongoIndexingTooltip": "El campo _id está indexado de forma predeterminada. La creación de un índice de caracteres comodín para todos los campos optimizará las consultas y se recomienda para el desarrollo.",
"createWildcardIndex": "Crear un índice de caracteres comodín en todos los campos",
"legacySdkCheckbox": "Mi aplicación usa una versión anterior del SDK de .NET o Java de Cosmos (.NET V1 o Java V2)",
"legacySdkInfo": "Para garantizar la compatibilidad con los SDK anteriores, el contenedor creado usará un esquema de partición heredado que admite valores de clave de partición de hasta 101 bytes de tamaño. Si esta opción está habilitada, no podrá usar claves de partición jerárquicas.",
"indexingOnInfo": "Todas las propiedades de los documentos se indexarán de forma predeterminada para que las consultas sean flexibles y eficaces.",
"indexingOffInfo": "La indexación se desactivará. Se recomienda si no necesita ejecutar consultas o solo tiene operaciones de valor de clave.",
"indexingOffWarning": "Al crear este contenedor con la indexación desactivada, no podrá realizar ningún cambio en la directiva de indexación. Los cambios de indexación solo se permiten en un contenedor con una directiva de indexación.",
"acknowledgeSpendErrorMonthly": "Confirme el gasto mensual estimado.",
"acknowledgeSpendErrorDaily": "Confirme el gasto diario estimado.",
"unshardedMaxRuError": "Las colecciones sin cambios admiten hasta 10 000 RU",
"acknowledgeShareThroughputError": "Confirme el coste estimado de este rendimiento dedicado.",
"vectorPolicyError": "Corrija los errores en la directiva de vector de contenedor",
"fullTextSearchPolicyError": "Corrija los errores en la directiva de búsqueda de texto completo del contenedor",
"addingSampleDataSet": "Adición de un conjunto de datos de ejemplo"
},
"addCollectionUtility": {
"shardKeyTooltip": "La clave de partición (campo) se usa para dividir los datos entre muchos conjuntos de réplicas (particiones) para lograr una escalabilidad ilimitada. Es fundamental elegir un campo que distribuya uniformemente los datos.",
"partitionKeyTooltip": "El {{partitionKeyName}} se usa para distribuir datos automáticamente entre particiones con fines de escalabilidad. Elija una propiedad en el documento JSON que tenga una amplia gama de valores y distribuya uniformemente el volumen de solicitudes.",
"partitionKeyTooltipSqlSuffix": " En el caso de las cargas de trabajo de lectura intensiva o de escritura intensiva de cualquier tamaño, el identificador suele ser una buena opción.",
"shardKeyLabel": "Clave de partición",
"partitionKeyLabel": "Clave de partición",
"shardKeyPlaceholder": "por ejemplo, categoryId",
"partitionKeyPlaceholderDefault": "por ejemplo, /address",
"partitionKeyPlaceholderFirst": "Requerido: primera clave de partición, por ejemplo, /TenantId",
"partitionKeyPlaceholderSecond": "segunda clave de partición, p. ej., /UserId",
"partitionKeyPlaceholderThird": "tercera clave de partición, por ejemplo, /SessionId",
"partitionKeyPlaceholderGraph": "por ejemplo, /address/zipCode",
"uniqueKeysTooltip": "Las claves únicas proporcionan a los desarrolladores la capacidad de agregar una capa de integridad de datos a su base de datos. Al crear una directiva de clave única cuando se crea un contenedor, se garantiza la unicidad de uno o varios valores por clave de partición.",
"uniqueKeysLabel": "Claves únicas",
"analyticalStoreLabel": "Almacén analítico",
"analyticalStoreTooltip": "Habilite la funcionalidad de almacén analítico para realizar análisis casi en tiempo real de los datos operativos, sin afectar al rendimiento de las cargas de trabajo transaccionales.",
"analyticalStoreDescription": "Habilite la funcionalidad de almacén analítico para realizar análisis casi en tiempo real de los datos operativos, sin afectar al rendimiento de las cargas de trabajo transaccionales.",
"vectorPolicyTooltip": "Describir las propiedades de los datos que contienen vectores, de modo que se puedan poner a disposición de las consultas de similitud."
},
"settings": {
"pageOptions": "Opciones de página",
"pageOptionsDescription": "Elija Personalizar para especificar una cantidad fija de resultados de consulta para mostrar o elija Ilimitado para mostrar tantos resultados de consulta por página.",
"queryResultsPerPage": "Resultados de la consulta por página",
"queryResultsPerPageTooltip": "Escriba el número de resultados de la consulta que se deben mostrar por página.",
"customQueryItemsPerPage": "Elementos de consulta personalizados por página",
"custom": "Personalizado",
"unlimited": "Sin límites",
"entraIdRbac": "Habilitar RBAC de Entra ID",
"entraIdRbacDescription": "Elija Automático para habilitar RBAC de Entra ID automáticamente. True/False para forzar la activación o desactivación de RBAC de Entra ID.",
"true": "Verdadero",
"false": "Falso",
"regionSelection": "Selección de región",
"regionSelectionDescription": "Cambia la región que usa el cliente de Cosmos para acceder a la cuenta.",
"selectRegion": "Seleccionar región",
"selectRegionTooltip": "Cambia el punto de conexión de cuenta usado para realizar operaciones de cliente.",
"globalDefault": "Global (predeterminado)",
"readWrite": "(Lectura y escritura)",
"read": "(Lectura)",
"queryTimeout": "Tiempo de espera de consulta",
"queryTimeoutDescription": "Cuando una consulta alcanza un límite de tiempo especificado, se mostrará un elemento emergente con una opción para cancelar la consulta, a menos que se haya habilitado la cancelación automática.",
"enableQueryTimeout": "Habilitar tiempo de espera de consulta",
"queryTimeoutMs": "Tiempo de espera de consulta (ms)",
"automaticallyCancelQuery": "Cancelar automáticamente la consulta después del tiempo de espera",
"ruLimit": "Límite de RU",
"ruLimitDescription": "Si una consulta supera un límite de RU configurado, se anulará la consulta.",
"enableRuLimit": "Habilitar límite de RU",
"ruLimitLabel": "Límite de RU (RU)",
"defaultQueryResults": "Vista de resultados de consulta predeterminada",
"defaultQueryResultsDescription": "Seleccione la vista predeterminada que se va a usar al mostrar los resultados de la consulta.",
"retrySettings": "Configuración de reintentos",
"retrySettingsDescription": "Directiva de reintentos asociada a solicitudes limitadas durante las consultas de CosmosDB.",
"maxRetryAttempts": "Número máximo de reintentos",
"maxRetryAttemptsTooltip": "Número máximo de reintentos que se van a realizar para una solicitud. Valor predeterminado 9.",
"fixedRetryInterval": "Intervalo de reintento fijo (ms)",
"fixedRetryIntervalTooltip": "Se ha corregido el intervalo de reintentos en milisegundos para esperar entre cada reintento omitiendo el retryAfter devuelto como parte de la respuesta. El valor predeterminado es 0 milisegundos.",
"maxWaitTime": "Tiempo de espera máximo (s)",
"maxWaitTimeTooltip": "Tiempo de espera máximo en segundos para esperar una solicitud mientras se producen los reintentos. Valor predeterminado de 30 segundos.",
"enableContainerPagination": "Habilitar paginación de contenedor",
"enableContainerPaginationDescription": "Cargue 50 contenedores a la vez. Actualmente, los contenedores no se extraen en orden alfanumérico.",
"enableCrossPartitionQuery": "Habilitar consulta entre particiones",
"enableCrossPartitionQueryDescription": "Enviar más de una solicitud mientras se ejecuta una consulta. Se necesita más de una solicitud si la consulta no tiene como ámbito un valor de clave de partición única.",
"maxDegreeOfParallelism": "Grado máximo de paralelismo",
"maxDegreeOfParallelismDescription": "Obtiene o establece el número de operaciones simultáneas que se ejecutan en el lado cliente durante la ejecución de consultas en paralelo. Un valor de propiedad positivo limita el número de operaciones simultáneas al valor establecido. Si se establece en menos de 0, el sistema decide automáticamente el número de operaciones simultáneas que se van a ejecutar.",
"maxDegreeOfParallelismQuery": "Consultar hasta el grado máximo de paralelismo.",
"priorityLevel": "Nivel de prioridad",
"priorityLevelDescription": "Establece el nivel de prioridad para las solicitudes de plano de Data Explorer al usar la ejecución basada en prioridad. Si se selecciona \"Ninguno\", Data Explorer no especificará nivel de prioridad y se usará el nivel predeterminado del servidor.",
"displayGremlinQueryResults": "Mostrar los resultados de la consulta de Gremlin como:",
"displayGremlinQueryResultsDescription": "Seleccione Graph para visualizar automáticamente los resultados de la consulta como un gráfico o JSON para mostrar los resultados como JSON.",
"graph": "Graph",
"json": "JSON",
"graphAutoVisualization": "Visualización automática de Graph",
"enableSampleDatabase": "Habilitar base de datos de ejemplo",
"enableSampleDatabaseDescription": "Se trata de una base de datos de ejemplo y una colección con datos de productos sintéticos que puede usar para explorar mediante consultas NoSQL. Aparecerá como otra base de datos en la interfaz de Data Explorer y es creada y mantenida por Microsoft sin coste para usted.",
"enableSampleDbAriaLabel": "Habilitación de la base de datos de ejemplo para la exploración de consultas",
"guidRepresentation": "Representación de GUID",
"guidRepresentationDescription": "GuidRepresentation en MongoDB hace referencia a cómo se serializan y deserializan los identificadores únicos globales (GUID) cuando se almacenan en documentos BSON. Esto se aplicará a todas las operaciones de documento.",
"advancedSettings": "Configuración avanzada",
"ignorePartitionKey": "Omitir clave de partición en la actualización del documento",
"ignorePartitionKeyTooltip": "Si se activa, el valor de clave de partición no se usará para buscar el documento durante las operaciones de actualización. Use esta opción solo si se producen errores en las actualizaciones del documento debido a una clave de partición anómala.",
"clearHistory": "Borrar historial",
"clearHistoryConfirm": "¿Seguro que quiere continuar?",
"clearHistoryDescription": "Esta acción borrará todas las personalizaciones de esta cuenta en este explorador, incluidas:",
"clearHistoryTabLayout": "Restablecer el diseño de pestaña personalizado, incluidas las posiciones divisora",
"clearHistoryTableColumns": "Borrar las preferencias de columna de la tabla, incluidas las columnas personalizadas",
"clearHistoryFilters": "Borrar el historial de filtros",
"clearHistoryRegion": "Restablecer selección de región a global",
"increaseValueBy1000": "Aumentar valor en 1 000",
"decreaseValueBy1000": "Disminuir valor en 1 000",
"none": "Ninguno",
"low": "Bajo",
"high": "Alto",
"automatic": "Automático",
"enhancedQueryControl": "Control de consulta mejorado",
"enableQueryControl": "Habilitar control de consulta",
"explorerVersion": "Versión del explorador",
"accountId": "Id. de cuenta",
"sessionId": "Id. de sesión",
"popupsDisabledError": "No se pudo establecer la autorización para esta cuenta debido a que los elementos emergentes se deshabilitaron en el explorador.\nHabilite los elementos emergentes para este sitio y haga clic en el botón \"Iniciar sesión para Entra ID\"",
"failedToAcquireTokenError": "No se pudo adquirir automáticamente el token de autorización. Haga clic en el botón \"Iniciar sesión para Entra ID\" para habilitar las operaciones RBAC de Entra ID"
},
"saveQuery": {
"panelTitle": "Guardar consulta",
"setupCostMessage": "Por motivos de cumplimiento, guardamos las consultas en un contenedor de la cuenta de Azure Cosmos, en una base de datos independiente denominada \"{{databaseName}}\". Para continuar, necesitamos crear un contenedor en su cuenta, el coste adicional estimado es de 0,77 USD al día.",
"completeSetup": "Completar instalación",
"noQueryNameError": "No se especificó ningún nombre de consulta",
"invalidQueryContentError": "Contenido de consulta especificado no válido",
"failedToSaveQueryError": "No se pudo guardar la consulta {{queryName}}",
"failedToSetupContainerError": "No se pudo configurar un contenedor para las consultas guardadas",
"accountNotSetupError": "No se pudo guardar la consulta: la cuenta no está configurada para guardar consultas",
"name": "Nombre"
},
"loadQuery": {
"noFileSpecifiedError": "No se especificó ningún archivo",
"failedToLoadQueryError": "No se pudo cargar la consulta.",
"failedToLoadQueryFromFileError": "No se pudo cargar la consulta desde el archivo {{fileName}}",
"selectFilesToOpen": "Seleccionar un documento de consulta",
"browseFiles": "Examinar"
},
"executeStoredProcedure": {
"enterInputParameters": "Escriba los parámetros de entrada (si los hay)",
"key": "Clave",
"param": "Param",
"partitionKeyValue": "Valor de la clave de partición",
"value": "Valor",
"addNewParam": "Agregar nuevo parámetro",
"addParam": "Agregar parámetro",
"deleteParam": "Eliminar parámetro",
"invalidParamError": "Parámetro especificado no válido: {{invalidParam}}",
"invalidParamConsoleError": "Parámetro especificado no válido: {{invalidParam}} no es un valor literal válido",
"stringType": "Cadena",
"customType": "Personalizado"
},
"uploadItems": {
"noFilesSpecifiedError": "No se especificó ningún archivo. Escriba al menos un archivo.",
"selectJsonFiles": "Seleccionar archivos JSON",
"selectJsonFilesTooltip": "Seleccione uno o varios archivos JSON para cargar. Cada archivo puede contener un único documento JSON o una matriz de documentos JSON. El tamaño combinado de todos los archivos de una operación de carga individual debe ser inferior a 2 MB. Puede realizar varias operaciones de carga para conjuntos de datos más grandes.",
"fileNameColumn": "NOMBRE DE ARCHIVO",
"statusColumn": "ESTADO",
"uploadStatus": "{{numSucceeded}} creado, {{numThrottled}} limitado, {{numFailed}} errores",
"uploadedFiles": "Archivos cargados"
},
"copyNotebook": {
"copyFailedError": "No se pudo copiar {{name}} en {{destination}}",
"uploadFailedError": "Error al cargar {{name}}.",
"location": "Ubicación",
"locationAriaLabel": "Ubicación",
"selectLocation": "Seleccionar una ubicación de bloc de notas para copiar",
"name": "Nombre"
},
"publishNotebook": {
"publishFailedError": "No se pudo publicar {{notebookName}} en la galería",
"publishDescription": "Cuando se publique, este bloc de notas aparecerá en la galería pública de blocs de notas de Azure Cosmos DB. Asegúrese de que ha quitado los datos confidenciales o la salida antes de la publicación.",
"publishPrompt": "¿Desea publicar y compartir \"{{name}}\" en la galería?",
"coverImage": "Imagen de portada",
"coverImageUrl": "Dirección URL de la imagen de portada",
"name": "Nombre",
"description": "Descripción",
"tags": "Etiquetas",
"tagsPlaceholder": "Etiqueta opcional 1, etiqueta opcional 2",
"preview": "Versión preliminar",
"urlType": "URL",
"customImage": "Imagen personalizada",
"takeScreenshot": "Obtener recorte de pantalla",
"useFirstDisplayOutput": "Usar la primera salida de pantalla",
"failedToCaptureOutput": "No se pudo capturar la primera salida",
"outputDoesNotExist": "La salida no existe para ninguna de las celdas.",
"failedToConvertError": "No se pudo convertir {{fileName}} al formato base64",
"failedToUploadError": "No se pudo cargar {{fileName}}"
},
"changePartitionKey": {
"failedToStartError": "No se pudo iniciar el trabajo de transferencia de datos",
"suboptimalPartitionKeyError": "Advertencia: el sistema ha detectado que la colección puede estar usando una clave de partición poco óptima",
"description": "Al cambiar la clave de partición de un contenedor, deberá crear un contenedor de destino con la clave de partición correcta. También puede seleccionar un contenedor de destino existente.",
"sourceContainerId": "Id. de origen {{collectionName}} ",
"destinationContainerId": "Id. de destino {{collectionName}}",
"collectionIdTooltip": "Identificador único de y usado para el {{collectionName}} enrutamiento basado en identificadores a través de REST y todos los SDK.",
"collectionIdPlaceholder": "por ejemplo, {{collectionName}}1",
"collectionIdAriaLabel": "{{collectionName}} id., ejemplo {{collectionName}}1",
"existingContainers": "Contenedores existentes",
"partitionKeyWarning": "El contenedor de destino no debe existir aún. Explorador de datos creará un nuevo contenedor de destino."
},
"cassandraAddCollection": {
"keyspaceLabel": "Nombre del espacio de claves",
"keyspaceTooltip": "Seleccione un espacio de claves existente o escriba un nuevo identificador de espacio de claves.",
"tableIdLabel": "Escriba el comando CQL para crear la tabla.",
"enterTableId": "Escriba el id. de tabla",
"tableSchemaAriaLabel": "Esquema de tabla",
"provisionDedicatedThroughput": "Aprovisionamiento del rendimiento dedicado para esta tabla",
"provisionDedicatedThroughputTooltip": "Opcionalmente, puede aprovisionar el rendimiento dedicado para una tabla dentro de un espacio de claves que tenga aprovisionado el rendimiento. Esta cantidad de rendimiento dedicado no se compartirá con otras tablas del espacio de claves y no cuenta para el rendimiento aprovisionado para el espacio de claves. Esta cantidad de rendimiento se facturará además de la cantidad de rendimiento que aprovisionó en el nivel de espacio de claves."
},
"tables": {
"addProperty": "Agregar propiedad",
"addRow": "Agregar fila",
"addEntity": "Agregar entidad",
"back": "atrás",
"nullFieldsWarning": "Advertencia: los campos nulos no se mostrarán para su edición.",
"propertyEmptyError": "{{property}} no puede estar vacío. Escriba un valor para {{property}}",
"whitespaceError": "{{property}} no puede tener espacios en blanco. Escriba un valor para {{property}} sin espacios en blanco",
"propertyTypeEmptyError": "El tipo de propiedad no puede estar vacío. Seleccione un tipo en la lista desplegable para la propiedad {{property}}"
},
"tableQuerySelect": {
"selectColumns": "Seleccione las columnas que quiere consultar.",
"availableColumns": "Columnas disponibles"
},
"tableColumnSelection": {
"selectColumns": "Seleccione las columnas que se mostrarán en la vista de elementos del contenedor.",
"searchFields": "Buscar campos",
"reset": "Restablecer",
"partitionKeySuffix": " (clave de partición)"
},
"newVertex": {
"addProperty": "Agregar propiedad"
},
"addGlobalSecondaryIndex": {
"globalSecondaryIndexId": "Id. de contenedor de índice secundario global",
"globalSecondaryIndexIdPlaceholder": "por ejemplo, indexbyEmailId",
"projectionQuery": "Consulta de proyección",
"projectionQueryPlaceholder": "SELECT c.email, c.accountId FROM c",
"projectionQueryTooltip": "Obtenga más información sobre cómo definir índices secundarios globales.",
"disabledTitle": "Ya se está creando un índice secundario global. Espere a que se complete antes de crear otra."
},
"stringInput": {
"inputMismatchError": "La entrada {{input}} no coincide con la seleccionada {{selectedId}}"
},
"panelInfo": {
"information": "Información",
"moreDetails": "Más detalles"
}
}
}

View File

@@ -0,0 +1,727 @@
{
"common": {
"ok": "OK",
"cancel": "Annuler",
"close": "Fermer",
"save": "Enregistrer",
"delete": "Supprimer",
"update": "Mettre à jour",
"discard": "Abandonner",
"execute": "Exécuter",
"loading": "Chargement",
"loadingEllipsis": "Chargement en cours...",
"next": "Suivant",
"previous": "Précédent",
"yes": "Oui",
"no": "Non",
"result": "Résultat",
"learnMore": "En savoir plus",
"getStarted": "Démarrage",
"retry": "Réessayer",
"apply": "Appliquer",
"refresh": "Actualiser",
"copy": "Copier",
"create": "Créer",
"confirm": "Confirmer",
"open": "Ouvrir",
"rename": "Renommer",
"download": "Télécharger",
"upload": "Charger",
"connect": "Connexion",
"remove": "Supprimer",
"load": "Charger",
"publish": "Publier",
"browse": "Parcourir",
"increaseValueBy1": "Augmenter la valeur de 1",
"decreaseValueBy1": "Diminuer la valeur de 1"
},
"splashScreen": {
"title": {
"default": "Bienvenue dans Azure Cosmos DB",
"postgres": "Bienvenue à Azure Cosmos DB for PostgreSQL",
"vcoreMongo": "Bienvenue à Azure DocumentDB (avec compatibilité MongoDB)"
},
"subtitle": {
"default": "Service de base de données multimodèle, mondialement distribuée et disponible à toute échelle",
"getStarted": "Commencez avec nos jeux de données dexemple, notre documentation et nos outils supplémentaires."
},
"quickStart": {
"title": "Lancer le démarrage rapide",
"description": "Lancer un didacticiel de démarrage rapide pour prendre en main les données dexemple"
},
"newCollection": {
"title": "Nouvelle {{collectionName}}",
"description": "Créer un nouveau conteneur pour le stockage et le débit"
},
"samplesGallery": {
"title": "Galerie déchantillons Azure Cosmos DB",
"description": "Découvrez des exemples qui présentent des modèles dapplication évolutifs et intelligents. Essayez-en un tout de suite pour voir à quelle vitesse vous pouvez passer du concept au code grâce à Cosmos DB"
},
"connectCard": {
"title": "Connecter",
"description": "Vous préférez utiliser vos propres outils ? Trouvez la chaîne de connexion dont vous avez besoin pour vous connecter",
"pgAdmin": {
"title": "Se connecter avec pgAdmin",
"description": "Préférez-vous pgAdmin ? Trouvez vos chaînes de connexion ici"
},
"vsCode": {
"title": "Connecter avec VS Code",
"description": "Interroger et gérer vos clusters MongoDB et DocumentDB dans Visual Studio Code"
}
},
"shell": {
"postgres": {
"title": "Interpréteur de commandes PostgreSQL",
"description": "Créer un tableau et interagir avec les données à laide de linterface dinterpréteur PostgreSQL"
},
"vcoreMongo": {
"title": "Interpréteur de commandes Mongo",
"description": "Créer une collection et interagir avec les données à laide de linterface dinterpréteur MongoDB"
}
},
"teachingBubble": {
"newToPostgres": {
"headline": "Vous débutez avec Cosmos DB PGSQL ?",
"body": "Bienvenue ! Si vous débutez avec Cosmos DB PGSQL et avez besoin daide pour démarrer, voici où trouver des échantillons de données et des requêtes."
},
"resetPassword": {
"headline": "Créer votre mot de passe",
"body": "Si vous navez pas encore modifié votre mot de passe, faites-le maintenant."
},
"coachMark": {
"headline": "Commencer par lexemple {{collectionName}}",
"body": "Nous vous guiderons dans la création dun conteneur dexemple avec des échantillons de données, puis nous vous ferons visiter lexplorateur de données. Vous pouvez également annuler cette visite et explorer par vous-même"
}
},
"sections": {
"recents": "Récents",
"clearRecents": "Effacer les éléments récents",
"top3": "Les 3 principales choses à savoir",
"learningResources": "Ressources pédagogiques",
"nextSteps": "Étapes suivantes",
"tipsAndLearnMore": "Conseils et plus dinformations",
"notebook": "Bloc-notes",
"needHelp": "Avez-vous besoin daide ?"
},
"top3Items": {
"sql": {
"advancedModeling": {
"title": "Motifs de modélisation avancés",
"description": "Découvrez des stratégies avancées pour optimiser votre base de données."
},
"partitioning": {
"title": "Les meilleures pratiques de partitionnement",
"description": "Apprenez à appliquer des stratégies de modélisation des données et de partitionnement."
},
"resourcePlanning": {
"title": "Planifier vos besoins en ressources",
"description": "Découvrez les différentes options de configuration."
}
},
"mongo": {
"whatIsMongo": {
"title": "Quest-ce que lAPI MongoDB ?",
"description": "Comprenez Azure Cosmos DB for MongoDB et ses fonctionnalités."
},
"features": {
"title": "Fonctionnalités et syntaxe",
"description": "Découvrir les avantages et les fonctionnalités"
},
"migrate": {
"title": "Migrer vos données",
"description": "Étapes pré-migration pour le déplacement des données"
}
},
"cassandra": {
"buildJavaApp": {
"title": "Créer une application Java",
"description": "Créez une application Java avec un SDK."
},
"partitioning": {
"title": "Les meilleures pratiques de partitionnement",
"description": "Découvrez comment fonctionne le partitionnement."
},
"requestUnits": {
"title": "Unités de requêtes (RU)",
"description": "Comprendre les frais de RU."
}
},
"gremlin": {
"dataModeling": {
"title": "Modélisation des données",
"description": "Recommandations pour la modélisation des données de Graph"
},
"partitioning": {
"title": "Les meilleures pratiques de partitionnement",
"description": "Découvrir comment fonctionne le partitionnement"
},
"queryData": {
"title": "Données de requête",
"description": "Interroger des données avec Gremlin"
}
},
"tables": {
"whatIsTable": {
"title": "Quest-ce que lAPI Table ?",
"description": "Comprendre Azure Cosmos DB for Table et ses fonctionnalités"
},
"migrate": {
"title": "Migrer vos données",
"description": "Découvrir comment migrer vos données"
},
"faq": {
"title": "FAQ Azure Cosmos DB for Table",
"description": "Questions courantes sur Azure Cosmos DB for Table"
}
}
},
"learningResources": {
"shortcuts": {
"title": "Raccourcis clavier pour Data Explorer",
"description": "Découvrez les raccourcis clavier pour naviguer dans Data Explorer."
},
"liveTv": {
"title": "Découvrir les principes de base",
"description": "Regardez lémission de télé en direct Azure Cosmos DB pour découvrir des vidéos dintroduction et des tutos."
},
"sql": {
"sdk": {
"title": "Prise en main dun SDK",
"description": "En savoir plus sur le SDK Azure Cosmos DB."
},
"migrate": {
"title": "Migrer vos données",
"description": "Migrez des données avec les services Azure et des solutions open source."
}
},
"mongo": {
"nodejs": {
"title": "Générer une application avec Node.js",
"description": "Créez une application Node.js."
},
"gettingStarted": {
"title": "Guide de prise en main",
"description": "Apprenez les notions de base pour démarrer."
}
},
"cassandra": {
"createContainer": {
"title": "Créer un conteneur",
"description": "Découvrez les options de création de conteneurs."
},
"throughput": {
"title": "Débit dapprovisionnement",
"description": "Découvrir comment configurer le débit."
}
},
"gremlin": {
"getStarted": {
"title": "Prise en main ",
"description": "Créer, interroger et parcourir avec la console Gremlin"
},
"importData": {
"title": "Importer les données de Graph",
"description": "Apprendre lingestion de données en bloc avec BulkExecutor"
}
},
"tables": {
"dotnet": {
"title": "Créer une application .NET",
"description": "Comment accéder à Azure Cosmos DB for Table depuis une application .NET."
},
"java": {
"title": "Créer une application Java",
"description": "Créez une application Azure Cosmos DB for Table avec le SDK Java "
}
}
},
"nextStepItems": {
"postgres": {
"dataModeling": "Modélisation des données",
"distributionColumn": "Comment choisir une colonne de distribution",
"buildApps": "Créer des applications avec Python/Java/Django"
},
"vcoreMongo": {
"migrateData": "Migrer des données",
"vectorSearch": "Créer des applications dIA avec la recherche vectorielle",
"buildApps": "Générer des applications avec Node.js"
}
},
"learnMoreItems": {
"postgres": {
"performanceTuning": "Optimisation des performances",
"diagnosticQueries": "Requêtes de diagnostic utiles",
"sqlReference": "Référence SQL distribuée"
},
"vcoreMongo": {
"vectorSearch": "Recherche vectorielle",
"textIndexing": "Indexation de texte",
"troubleshoot": "Résoudre des problèmes courants"
}
},
"fabric": {
"buildTitle": "Générer votre base de données",
"useTitle": "Utiliser votre base de données",
"newContainer": {
"title": "Nouveau conteneur",
"description": "Créer un conteneur de destination pour stocker vos données"
},
"sampleData": {
"title": "Échantillons de données",
"description": "Charger des échantillons de données dans votre base de données"
},
"sampleVectorData": {
"title": "Échantillons de données vectorielles",
"description": "Charger des exemples de données vectorielles avec text-embedding-ada-002"
},
"appDevelopment": {
"title": "Développer des applications",
"description": "Commencer ici pour utiliser un SDK afin de créer vos applications"
},
"sampleGallery": {
"title": "Galerie déchantillons",
"description": "Obtenez des échantillons réels de bout en bout"
}
},
"sampleDataDialog": {
"title": "Échantillons de données",
"startButton": "Commencer",
"createPrompt": "Créez un conteneur « {{containerName}} » et importez-y des échantillons de données. Cela peut prendre quelques minutes.",
"creatingContainer": "Création en cours du conteneur « {{containerName}} »...",
"importingData": "Importation en cours de données dans « {{containerName}} »...",
"success": "Vous avez bien créé « {{containerName}} » avec des échantillons de données.",
"errorContainerExists": "Le conteneur « {{containerName}} » dans la base de données « {{databaseName}} » existe déjà. Supprimez-le, puis réessayez.",
"errorCreateContainer": "Nous navons pas pu créer le conteneur : {{error}}",
"errorImportData": "Nous navons pas pu importer les données : {{error}}"
}
},
"contextMenu": {
"newContainer": "Nouveau {{containerName}}",
"restoreContainer": "Restaurer {{containerName}}",
"deleteDatabase": "Supprimer {{databaseName}}",
"deleteContainer": "Supprimer {{containerName}}",
"newSqlQuery": "Nouvelle requête SQL",
"newQuery": "Nouvelle requête",
"openMongoShell": "Ouvrir linterpréteur de commandes Mongo",
"newShell": "Nouvel interpréteur de commandes",
"openCassandraShell": "Ouvrir linterpréteur de commandes Cassandra",
"newStoredProcedure": "Nouvelle procédure stockée",
"newUdf": "Nouvelle UDF",
"newTrigger": "Nouveau déclencheur",
"deleteStoredProcedure": "Supprimer la procédure stockée",
"deleteTrigger": "Supprimer le déclencheur",
"deleteUdf": "Supprimer une fonction définie par lutilisateur"
},
"tabs": {
"documents": {
"newItem": "Nouvel élément",
"newDocument": "Nouveau document",
"uploadItem": "Charger lélément",
"applyFilter": "Appliquer le filtre",
"unsavedChanges": "Modifications non enregistrées",
"unsavedChangesMessage": "Vos modifications non enregistrées seront perdues. Voulez-vous continuer ?",
"createDocumentFailed": "Nous navons pas pu créer le document",
"updateDocumentFailed": "Nous navons pas pu mettre à jour le document",
"documentDeleted": "Nous avons bien supprimé le document.",
"deleteDocumentDialogTitle": "Supprimer le document",
"deleteDocumentsDialogTitle": "Supprimer des documents",
"throttlingError": "Nous navons pas pu supprimer certains documents en raison dune erreur de limitation de débit. Réessayez plus tard. Pour éviter ce cas de figure à lavenir, envisagez daugmenter le débit de votre conteneur ou de votre base de données.",
"deleteFailed": "Nous navons pas pu supprimer le ou les documents ({{error}})",
"missingShardProperty": "Le document ne contient pas la propriété de partition : {{partitionKeyProperty}}",
"refreshGridFailed": "Nous navons pas pu actualiser la grille des documents",
"confirmDelete": "Voulez-vous vraiment supprimer {{documentName}} ?",
"confirmDeleteTitle": "Confirmer la suppression",
"selectedItems": "les {{count}} éléments sélectionnés",
"selectedItem": "lélément sélectionné",
"selectedDocuments": "les {{count}} documents sélectionnés",
"selectedDocument": "le document sélectionné",
"deleteDocumentFailedLog": "Nous navons pas pu supprimer le document {{documentId}} avec le code détat {{statusCode}}",
"deleteSuccessLog": "Nous avons bien supprimé {{count}} document(s)",
"deleteThrottledLog": "Nous navons pas pu supprimer {{count}} document(s) en raison de lerreur « Requête trop volumineuse » (429). Nouvelle tentative...",
"missingShardKeyLog": "Nous navons pas pu enregistrer le nouveau document : clé de partition du document non définie",
"filterTooltip": "Tapez un prédicat de requête ou choisissez-en un dans la liste.",
"loadMore": "Charger plus",
"documentEditor": "Éditeur de document",
"savedFilters": "Filtres enregistrés",
"defaultFilters": "Filtres par défaut",
"abort": "Abandonner",
"deletingDocuments": "Suppression en cours de {{count}} document(s)",
"deletedDocumentsSuccess": "Nous avons bien supprimé {{count}} document(s).",
"deleteAborted": "La suppression du ou des documents a été abandonnée.",
"failedToDeleteDocuments": "Nous navons pas pu supprimer {{count}} document(s).",
"requestTooLargeBase": "Certaines requêtes de suppression ont échoué en raison dune exception « Demande trop volumineuse » (429)",
"retriedSuccessfully": "mais ont bien été réessayés.",
"retryingNow": "Nouvelle tentative en cours.",
"increaseThroughputTip": "Pour éviter ce cas de figure à lavenir, envisagez daugmenter le débit de votre conteneur ou de votre base de données.",
"numberOfSelectedDocuments": "Nombre de documents sélectionnés : {{count}}",
"mongoFilterPlaceholder": "Tapez un prédicat de requête (p. ex. {\"id\":\"foo\"}), choisissez-en un dans la liste déroulante, ou laissez le champ vide pour interroger tous les documents.",
"sqlFilterPlaceholder": "Tapez un prédicat de requête (p. ex. WHERE c.id=\"1\"), choisissez-en un dans la liste déroulante, ou laissez le champ vide pour interroger tous les documents.",
"error": "Erreur",
"warning": "Avertissement"
},
"query": {
"executeQuery": "Exécuter la requête",
"executeSelection": "Exécuter la sélection",
"saveQuery": "Enregistrer la requête",
"downloadQuery": "Télécharger la requête",
"cancelQuery": "Annuler la requête",
"openSavedQueries": "Ouvrir les requêtes enregistrées",
"vertical": "Verticale",
"horizontal": "Horizontale",
"view": "Afficher",
"editingQuery": "Modification en cours de la requête"
},
"storedProcedure": {
"id": "ID de procédure stockée",
"idPlaceholder": "Entrer le nouvel ID de procédure stockée",
"idAriaLabel": "ID de procédure stockée",
"body": "Corps de procédure stockée",
"bodyAriaLabel": "Corps de procédure stockée",
"successfulExecution": "Nous avons réussi lexécution de la procédure stockée",
"resultAriaLabel": "Exécuter le résultat de la procédure stockée",
"logsAriaLabel": "Exécuter les journaux dactivité de la procédure stockée",
"errors": "Erreurs :",
"errorDetailsAriaLabel": "Lien vers les détails derreur",
"moreDetails": "Plus de détails",
"consoleLogTab": "console.log"
},
"trigger": {
"id": "ID de déclencheur",
"idPlaceholder": "Entrer le nouvel ID de déclencheur",
"type": "Type de déclencheur",
"operation": "Déclencher lopération",
"body": "Corps de déclencheur",
"bodyAriaLabel": "Corps de déclencheur",
"pre": "Avant",
"post": "Publier",
"all": "Tous",
"operationCreate": "Créer",
"operationDelete": "Supprimer",
"operationReplace": "Remplacer"
},
"udf": {
"id": "ID de fonction définie par lutilisateur",
"idPlaceholder": "Entrer le nouvel ID de fonction définie par lutilisateur",
"body": "Corps de fonction défini par lutilisateur",
"bodyAriaLabel": "Corps de fonction définie par lutilisateur"
},
"conflicts": {
"unsavedChanges": "Modifications non enregistrées",
"changesWillBeLost": "Les modifications seront perdues. Voulez-vous continuer ?",
"resolveConflictFailed": "Échec de la résolution de conflit",
"deleteConflictFailed": "Nous navons pas pu résoudre le conflit",
"refreshGridFailed": "Nous navons pas pu actualiser la grille des documents"
},
"mongoShell": {
"title": "Interpréteur de commandes Mongo"
}
},
"panes": {
"deleteDatabase": {
"panelTitle": "Supprimer {{databaseName}}",
"warningMessage": "Attention ! Il ne sera pas possible dannuler cette action. Si vous continuez, cette ressource et toutes ses ressources enfants seront définitivement supprimées.",
"confirmPrompt": "Confirmer en tapant lID de {{databaseName}} (nom)",
"inputMismatch": "Le nom « {{input}} » de lentrée {{databaseName}} ne correspond pas au {{databaseName}} « {{selectedId}} » sélectionné",
"feedbackTitle": "Aidez-nous à améliorer Azure Cosmos DB !",
"feedbackReason": "Pourquoi supprimez-vous {{databaseName}} ?"
},
"deleteCollection": {
"panelTitle": "Supprimer {{collectionName}}",
"confirmPrompt": "Confirmer en tapant lID de {{collectionName}}",
"inputMismatch": "LID dentrée {{input}} ne correspond pas à lID {{selectedId}} sélectionné",
"feedbackTitle": "Aidez-nous à améliorer Azure Cosmos DB !",
"feedbackReason": "Pourquoi supprimez-vous {{collectionName}} ?"
},
"addDatabase": {
"databaseLabel": "Base de données {{suffix}}",
"databaseIdLabel": "ID de base de données",
"keyspaceIdLabel": "ID despace clé",
"databaseIdPlaceholder": "Entrer un nouvel ID de {{databaseLabel}}",
"databaseTooltip": "Une {{databaseLabel}} est un conteneur logique dun ou plusieurs {{collectionsLabel}}",
"shareThroughput": "Partager le débit sur {{collectionsLabel}}",
"shareThroughputTooltip": "Le débit approvisionné au niveau {{databaseLabel}} est partagé entre tous les {{collectionsLabel}} du {{databaseLabel}}.",
"greaterThanError": "Entrer une valeur supérieure à {{minValue}} pour le débit Autopilot",
"acknowledgeSpendError": "Prenez en compte lestimation des dépenses {{period}}."
},
"addCollection": {
"createNew": "Créer",
"useExisting": "Utiliser lélément existant",
"databaseTooltip": "Une base de données est comparable à un espace de noms. Il sagit de lunité de gestion dun ensemble de {{collectionName}}.",
"shareThroughput": "Partager le débit sur {{collectionName}}",
"shareThroughputTooltip": "Le débit configuré au niveau de la base de données sera partagé entre tous les {{collectionName}} de la base de données.",
"collectionIdLabel": "ID de {{collectionName}}",
"collectionIdTooltip": "Lidentificateur unique du {{collectionName}}, également utilisé pour le routage basé sur lID dans REST et tous les SDK.",
"collectionIdPlaceholder": "p. ex. {{collectionName}}1",
"collectionIdAriaLabel": "ID {{collectionName}}, Exemple {{collectionName}}1",
"existingDatabaseAriaLabel": "Choisir un id existant de {{databaseName}}",
"existingDatabasePlaceholder": "Choisir un id existant de {{databaseName}}",
"indexing": "Indexation",
"turnOnIndexing": "Activer lindexation",
"automatic": "Automatique",
"turnOffIndexing": "Désactiver lindexation",
"off": "Désactivé",
"sharding": "Partitionnement",
"shardingTooltip": "Les collections partitionnées fractionnent vos données entre de nombreux jeux de réplicas (partitions) pour atteindre une scalabilité illimitée. Les collections partitionnées vous obligent à choisir une clé de partition (champ) pour distribuer uniformément vos données.",
"unsharded": "Non partitionné",
"unshardedLabel": "Non partitionné (limite de 20 Go)",
"sharded": "Partitionné",
"addPartitionKey": "Ajouter une clé de partition hiérarchique",
"hierarchicalPartitionKeyInfo": "Cette fonctionnalité vous permet de partitionner vos données avec jusquà trois niveaux de clés pour une meilleure distribution des données. Nécessite .NET V3, le SDK Java V4 ou la préversion du SDK JavaScript V3.",
"provisionDedicatedThroughput": "Approvisionner le débit dédié pour {{collectionName}}",
"provisionDedicatedThroughputTooltip": "Vous pouvez éventuellement approvisionner un débit dédié pour un {{collectionName}} dans un espace de clés dont le débit est approvisionné. Ce débit dédié ne sera pas partagé avec les autres {{collectionNamePlural}} de la base de données et ne sera pas pris en compte dans le débit que vous approvisionnez pour la base de données. Cette quantité de débit sera facturée en plus du débit que vous approvisionnez au niveau de la base de données.",
"uniqueKeysPlaceholderMongo": "Chemins séparés par des virgules, p. ex. firstName,address.zipCode",
"uniqueKeysPlaceholderSql": "Chemins séparés par des virgules, p. ex. /firstName,/address/zipCode",
"addUniqueKey": "Ajouter une clé unique",
"enableAnalyticalStore": "Activer le magasin analytique",
"disableAnalyticalStore": "Désactiver le magasin analytique",
"on": "Activé",
"analyticalStoreSynapseLinkRequired": "Azure Synapse Link est obligatoire pour créer un magasin analytique de {{collectionName}}. Activez Synapse Link pour ce compte Cosmos DB.",
"enable": "Activer",
"containerVectorPolicy": "Stratégie de vecteur de conteneur",
"containerFullTextSearchPolicy": "Stratégie de recherche en texte intégral du conteneur",
"advanced": "Avancé",
"mongoIndexingTooltip": "Le champ _id est indexé par défaut. La création dun index générique pour tous les champs optimise les requêtes. Elle est recommandée pour le développement.",
"createWildcardIndex": "Créer un index générique sur tous les champs",
"legacySdkCheckbox": "Mon application utilise une version antérieure de Cosmos .NET ou du SDK Java (.NET V1 ou Java V2)",
"legacySdkInfo": "Pour garantir la compatibilité avec les anciens Kits de développement logiciels (SDK), le conteneur créé utilise un schéma de partitionnement hérité qui prend en charge des valeurs de clés de partition dune taille maximale de 101 octets. Si cette option est activée, vous ne pouvez pas utiliser de clés de partition hiérarchiques.",
"indexingOnInfo": "Toutes les propriétés de vos documents seront indexées par défaut pour permettre des requêtes flexibles et efficaces.",
"indexingOffInfo": "Lindexation sera désactivée. Nous recommandons cette option si vous navez pas besoin dexécuter des requêtes ou si vous neffectuez que des opérations clé-valeur.",
"indexingOffWarning": "En créant ce conteneur avec lindexation désactivée, vous ne pouvez pas modifier la stratégie dindexation. Les modifications dindexation ne sont autorisées que sur un conteneur disposant dune stratégie dindexation.",
"acknowledgeSpendErrorMonthly": "Prenez en compte lestimation des dépenses mensuelles.",
"acknowledgeSpendErrorDaily": "Prenez en compte lestimation des dépenses quotidiennes.",
"unshardedMaxRuError": "Les collections non partitionnées prennent en charge un maximum de 10 000 RU",
"acknowledgeShareThroughputError": "Noubliez pas de prendre en compte le coût estimé de ce débit dédié.",
"vectorPolicyError": "Corriger les erreurs dans la stratégie de vecteur du conteneur",
"fullTextSearchPolicyError": "Corrigez les erreurs dans la stratégie de recherche en texte intégral du conteneur",
"addingSampleDataSet": "Ajout en cours dun exemple de jeu de données"
},
"addCollectionUtility": {
"shardKeyTooltip": "Utilisez les clés de partition (champ) pour fractionner vos données entre de nombreux jeux de réplicas (partitions) pour atteindre une scalabilité illimitée. Il est essentiel de choisir un champ qui répartit uniformément vos données.",
"partitionKeyTooltip": "La {{partitionKeyName}} est utilisée pour distribuer automatiquement les données entre les partitions à des fins de scalabilité. Choisissez une propriété dans votre document JSON qui propose un grand éventail de valeurs et distribue uniformément le volume des requêtes.",
"partitionKeyTooltipSqlSuffix": " Pour les charges de travail de petite taille à lecture intensive ou les charges de travail à écriture intensive de toute taille, lID est souvent un choix judicieux.",
"shardKeyLabel": "Clé de partition",
"partitionKeyLabel": "Clé de partition",
"shardKeyPlaceholder": "p. ex. categoryId",
"partitionKeyPlaceholderDefault": "p. ex. /address",
"partitionKeyPlaceholderFirst": "Obligatoire : première clé de partition, p. ex. /TenantId",
"partitionKeyPlaceholderSecond": "deuxième clé de partition, par exemple, /UserId",
"partitionKeyPlaceholderThird": "troisième clé de partition, p. ex. /SessionId",
"partitionKeyPlaceholderGraph": "p. ex. /address/zipCode",
"uniqueKeysTooltip": "Les clés uniques permettent aux développeurs dajouter une couche dintégrité des données à leur base de données. En créant une stratégie de clé unique lors de la création dun conteneur, vous garantissez lunicité dune ou plusieurs valeurs par clé de partition.",
"uniqueKeysLabel": "Clés uniques",
"analyticalStoreLabel": "Magasin analytique",
"analyticalStoreTooltip": "Activez la fonctionnalité de magasin analytique pour effectuer des analyses en quasi-temps réel sur vos données opérationnelles, sans impacter les performances des charges de travail transactionnelles.",
"analyticalStoreDescription": "Activez la fonctionnalité de magasin analytique pour effectuer des analyses en quasi-temps réel sur vos données opérationnelles, sans impacter les performances des charges de travail transactionnelles.",
"vectorPolicyTooltip": "Décrivez nimporte quelle propriété de vos données qui contient des vecteurs afin quelles puissent être utilisées pour des requêtes de similarité."
},
"settings": {
"pageOptions": "Options de page",
"pageOptionsDescription": "Choisissez Personnalisé pour spécifier un nombre fixe de résultats de requête à afficher, ou Illimité pour afficher autant de résultats que possible par page.",
"queryResultsPerPage": "Résultats de requête par page",
"queryResultsPerPageTooltip": "Entrez le nombre de résultats de requête à afficher par page.",
"customQueryItemsPerPage": "Le nombre déléments de requête personnalisés par page",
"custom": "Personnalisé",
"unlimited": "Illimité",
"entraIdRbac": "Activer le RBAC dEntra ID",
"entraIdRbacDescription": "Choisissez Automatique pour activer automatiquement le RBAC dEntra ID. True/False pour forcer lactivation ou la désactivation du RBAC dEntra ID.",
"true": "True",
"false": "Faux",
"regionSelection": "Sélection de zone",
"regionSelectionDescription": "Modifie la région utilisée par le client Cosmos pour accéder au compte.",
"selectRegion": "Sélectionner une région",
"selectRegionTooltip": "Modifie le point de terminaison du compte utilisé pour effectuer des opérations client.",
"globalDefault": "Global (par défaut)",
"readWrite": "(En lecture et en écriture)",
"read": "(Lecture)",
"queryTimeout": "Expiration de la requête",
"queryTimeoutDescription": "Lorsquune requête atteint une limite de temps spécifiée, une fenêtre contextuelle proposant dannuler la requête saffiche, sauf si lannulation automatique est activée.",
"enableQueryTimeout": "Activer le délai dexpiration de requête",
"queryTimeoutMs": "Délai dexpiration de la requête (ms)",
"automaticallyCancelQuery": "Annuler automatiquement la requête après expiration du délai dattente",
"ruLimit": "Limite de RU",
"ruLimitDescription": "Si une requête dépasse une limite de RU configurée, elle sera annulée.",
"enableRuLimit": "Activer la limite de RU",
"ruLimitLabel": "Limite de RU (RU)",
"defaultQueryResults": "Affichage par défaut des résultats de la requête",
"defaultQueryResultsDescription": "Sélectionnez laffichage par défaut à utiliser pour montrer les résultats de la requête.",
"retrySettings": "Paramètres de nouvelle tentative",
"retrySettingsDescription": "La stratégie de nouvelles tentatives associée aux requêtes limitées lors des requêtes CosmosDB.",
"maxRetryAttempts": "Maximum de nouvelles tentatives",
"maxRetryAttemptsTooltip": "Nombre maximal de tentatives à effectuer pour une requête. Valeur par défaut 9.",
"fixedRetryInterval": "Intervalle fixe avant nouvelle tentative (ms)",
"fixedRetryIntervalTooltip": "Intervalle fixe avant nouvelle tentative, en millisecondes, en ignorant la valeur retryAfter retournée dans la réponse. La valeur par défaut est de 0 milliseconde.",
"maxWaitTime": "Temps dattente maximal (s)",
"maxWaitTimeTooltip": "Le temps dattente maximal en secondes pour une requête pendant les nouvelles tentatives. La valeur par défaut est de 30 secondes.",
"enableContainerPagination": "Activer la pagination du conteneur",
"enableContainerPaginationDescription": "Chargez 50 conteneurs à la fois. Actuellement, les conteneurs ne sont pas tirés (pulled) dans lordre alphanumérique.",
"enableCrossPartitionQuery": "Activer les requêtes entre les partitions",
"enableCrossPartitionQueryDescription": "Envoyez plusieurs requêtes lors de lexécution dune requête. Plusieurs requêtes sont nécessaires si la requête ne cible pas une seule valeur de clé de partition.",
"maxDegreeOfParallelism": "Degré maximal de parallélisme",
"maxDegreeOfParallelismDescription": "Récupère ou définit le nombre dopérations simultanées exécutées côté client lors de lexécution parallèle dune requête. Une valeur positive limite le nombre dopérations simultanées à cette valeur. Si elle est inférieure à 0, le système détermine automatiquement le nombre dopérations simultanées à exécuter.",
"maxDegreeOfParallelismQuery": "Interrogez jusquau degré maximal de parallélisme.",
"priorityLevel": "Niveau de priorité",
"priorityLevelDescription": "Définit le niveau de priorité des requêtes du plan de données provenant de lExplorateur de données lors de lutilisation de lexécution basée sur la priorité. Si « Aucun » est sélectionné, lExplorateur de données ne spécifie pas de niveau de priorité et le niveau de priorité par défaut côté serveur est utilisé.",
"displayGremlinQueryResults": "Afficher les résultats de la requête Gremlin sous forme de :",
"displayGremlinQueryResultsDescription": "Sélectionnez Graphique pour visualiser automatiquement les résultats de la requête sous forme de graphique ou JSON pour afficher les résultats au format JSON.",
"graph": "Graphique",
"json": "JSON",
"graphAutoVisualization": "Visualisation automatique du graphique",
"enableSampleDatabase": "Activer lexemple de données",
"enableSampleDatabaseDescription": "Il sagit dun exemple de base de données et de collection avec des données de produit synthétiques que vous pouvez utiliser pour découvrir les requêtes NoSQL. Elle apparaîtra comme toute autre base de données dans lIU dExplorateur de données. Elle est gratuitement créée et maintenue par Microsoft.",
"enableSampleDbAriaLabel": "Activer lexemple de base de données pour explorer les requêtes",
"guidRepresentation": "Représentation de GUID",
"guidRepresentationDescription": "GuidRepresentation dans MongoDB désigne la manière dont les identifiants uniques globaux (GUID) sont sérialisés et désérialisés lorsquils sont stockés dans des documents BSON. Cela sapplique à toutes les opérations de documents.",
"advancedSettings": "Paramètres avancés",
"ignorePartitionKey": "Ignorer la clé de partition lors de la mise à jour du document",
"ignorePartitionKeyTooltip": "Si cette option est cochée, la valeur de la clé de partition nest pas utilisée pour localiser le document lors des opérations de mise à jour. Utilisez cette option uniquement si les mises à jour de document échouent à cause dune clé de partition anormale.",
"clearHistory": "Effacer lhistorique",
"clearHistoryConfirm": "Voulez-vous vraiment continuer ?",
"clearHistoryDescription": "Cette action efface toutes les personnalisations pour ce compte dans ce navigateur, notamment :",
"clearHistoryTabLayout": "Réinitialiser votre disposition donglets personnalisée, y compris les positions de séparateurs",
"clearHistoryTableColumns": "Effacez les préférences de colonnes de votre tableau, y compris les colonnes personnalisées",
"clearHistoryFilters": "Effacer votre historique de filtres",
"clearHistoryRegion": "Réinitialiser la sélection de région à globale",
"increaseValueBy1000": "Augmenter la valeur de 1 000",
"decreaseValueBy1000": "Diminuer la valeur de 1 000",
"none": "Aucun",
"low": "Faible",
"high": "Élevé",
"automatic": "Automatique",
"enhancedQueryControl": "Contrôle de requête amélioré",
"enableQueryControl": "Activer le contrôle de requête",
"explorerVersion": "Version dExplorer",
"accountId": "ID de compte",
"sessionId": "ID de session",
"popupsDisabledError": "Nous navons pas pu établir lautorisation pour ce compte, car les fenêtres contextuelles sont désactivées dans le navigateur.\nActiver les fenêtres contextuelles pour ce site et cliquer sur le bouton « Connexion avec Entra ID »",
"failedToAcquireTokenError": "Nous navons pas pu obtenir automatiquement le jeton dautorisation. Cliquer sur le bouton « Connexion à Entra ID » pour activer les opérations de RBAC dEntra ID"
},
"saveQuery": {
"panelTitle": "Enregistrer la requête",
"setupCostMessage": "Pour des raisons de conformité, nous enregistrons les requêtes dans un conteneur de votre compte Azure Cosmos, au sein dune base de données distincte appelée « {{databaseName}} ». Pour continuer, nous devons créer un conteneur dans votre compte. Le coût supplémentaire estimé est de 0,77 $ par jour.",
"completeSetup": "Terminer la configuration",
"noQueryNameError": "Aucun nom de requête nest spécifié",
"invalidQueryContentError": "Le contenu de requête spécifié nest pas valide",
"failedToSaveQueryError": "Nous navons pas pu enregistrer la requête {{queryName}}",
"failedToSetupContainerError": "Nous navons pas pu configurer un conteneur pour les requêtes enregistrées",
"accountNotSetupError": "Nous navons pas pu enregistrer la requête : le compte nest pas configuré pour enregistrer les requêtes",
"name": "Nom"
},
"loadQuery": {
"noFileSpecifiedError": "Aucun fichier nest spécifié",
"failedToLoadQueryError": "Impossible de charger la requête",
"failedToLoadQueryFromFileError": "Nous navons pas pu charger la requête à partir du fichier {{fileName}}",
"selectFilesToOpen": "Sélectionner un document de requête",
"browseFiles": "Parcourir"
},
"executeStoredProcedure": {
"enterInputParameters": "Saisir les paramètres dentrée (le cas échéant)",
"key": "Clé",
"param": "Paramètre",
"partitionKeyValue": "Valeur de la clé de partition",
"value": "Valeur",
"addNewParam": "Ajouter un nouveau paramètre",
"addParam": "Ajouter un paramètre",
"deleteParam": "Supprimer le paramètre",
"invalidParamError": "Paramètre non valide spécifié : {{invalidParam}}",
"invalidParamConsoleError": "Paramètre non valide spécifié : {{invalidParam}} nest pas une valeur littérale valide",
"stringType": "Chaîne",
"customType": "Personnalisé"
},
"uploadItems": {
"noFilesSpecifiedError": "Aucun fichier nest spécifié. Indiquez au moins un fichier.",
"selectJsonFiles": "Sélectionner des fichiers JSON",
"selectJsonFilesTooltip": "Sélectionnez un ou plusieurs fichiers JSON à charger. Chaque fichier peut contenir un document JSON unique ou un groupe de documents JSON. La taille combinée de tous les fichiers lors dune opération de chargement individuelle doit être inférieure à 2 Mo. Vous pouvez effectuer plusieurs opérations de chargement pour des ensembles de données plus volumineux.",
"fileNameColumn": "NOM DE FICHIER",
"statusColumn": "ÉTAT",
"uploadStatus": "{{numSucceeded}} créé(s), {{numThrottled}} limité(s), {{numFailed}} erreur(s)",
"uploadedFiles": "Fichiers chargés"
},
"copyNotebook": {
"copyFailedError": "Nous navons pas pu copier {{name}} vers {{destination}}",
"uploadFailedError": "Nous navons pas pu charger {{name}}",
"location": "Emplacement",
"locationAriaLabel": "Emplacement",
"selectLocation": "Sélectionner un emplacement de bloc-notes vers lequel effectuer une copie",
"name": "Nom"
},
"publishNotebook": {
"publishFailedError": "Nous navons pas pu publier {{notebookName}} dans la galerie",
"publishDescription": "Une fois publié, ce bloc-notes apparaîtra dans la galerie publique de bloc-notes dAzure Cosmos DB. Veillez à bien supprimer toutes les données sensibles et tout résultat avant la publication.",
"publishPrompt": "Voulez-vous publier et partager « {{name}} » dans la galerie ?",
"coverImage": "Image de couverture",
"coverImageUrl": "URL dimage de couverture",
"name": "Nom",
"description": "Description",
"tags": "Balises",
"tagsPlaceholder": "Balise facultative 1, Balise facultative 2",
"preview": "Aperçu",
"urlType": "URL",
"customImage": "Image personnalisée",
"takeScreenshot": "Prendre une capture décran",
"useFirstDisplayOutput": "Utiliser le résultat du premier affichage",
"failedToCaptureOutput": "Nous navons pas pu capturer le premier résultat",
"outputDoesNotExist": "Aucune des cellules ne présente de résultats.",
"failedToConvertError": "Nous navons pas pu convertir {{fileName}} au format base64",
"failedToUploadError": "Nous navons pas pu charger {{fileName}}"
},
"changePartitionKey": {
"failedToStartError": "Nous navons pas pu démarrer la tâche de transfert de données",
"suboptimalPartitionKeyError": "Avertissement : Le système a détecté que votre collection utilise peut-être une clé de partition sous-optimale",
"description": "Lorsque vous modifiez la clé de partition dun conteneur, vous devez créer un conteneur de destination avec la bonne clé de partition. Vous pouvez également sélectionner un conteneur de destination existant.",
"sourceContainerId": "ID de source de {{collectionName}}",
"destinationContainerId": "ID de destination de {{collectionName}}",
"collectionIdTooltip": "Lidentificateur unique du {{collectionName}}, également utilisé pour le routage basé sur lID dans REST et tous les SDK.",
"collectionIdPlaceholder": "p. ex. {{collectionName}}1",
"collectionIdAriaLabel": "ID {{collectionName}}, Exemple {{collectionName}}1",
"existingContainers": "Conteneurs existants",
"partitionKeyWarning": "Le conteneur de destination ne doit pas déjà exister. LExplorateur de données vous crée un nouveau conteneur de destination."
},
"cassandraAddCollection": {
"keyspaceLabel": "Nom de lespace de clés",
"keyspaceTooltip": "Sélectionnez un espace de clés existant ou saisissez un nouvel ID despace de clés.",
"tableIdLabel": "Entrez la commande CQL pour créer le tableau.",
"enterTableId": "Entrer lID de tableau",
"tableSchemaAriaLabel": "Schéma de tableau",
"provisionDedicatedThroughput": "Approvisionner le débit dédié pour ce tableau",
"provisionDedicatedThroughputTooltip": "Vous pouvez éventuellement approvisionner un débit dédié pour un tableau dans un espace de clés dont le débit est approvisionné. Ce débit dédié ne sera pas partagé avec les autres tableaux de lespace de clés et ne sera pas pris en compte dans le débit que vous approvisionnez pour lespace de clés. Cette quantité de débit sera facturée en plus du débit que vous approvisionnez au niveau de lespace de clés."
},
"tables": {
"addProperty": "Ajouter une propriété",
"addRow": "Ajouter une ligne",
"addEntity": "Ajouter une entité",
"back": "retour",
"nullFieldsWarning": "Avertissement : Les champs nuls ne sont pas affichés pour la modification.",
"propertyEmptyError": "{{property}} ne peut pas être vide. Entrer une valeur pour {{property}}",
"whitespaceError": "{{property}} ne peut pas contenir despace. Saisir une valeur pour {{property}}, sans espaces",
"propertyTypeEmptyError": "Le type de propriété ne peut pas être vide. Sélectionner un type dans la liste déroulante pour la propriété {{property}}"
},
"tableQuerySelect": {
"selectColumns": "Sélectionnez les colonnes à interroger.",
"availableColumns": "Colonnes disponibles"
},
"tableColumnSelection": {
"selectColumns": "Sélectionnez les colonnes à afficher dans la vue des éléments de votre conteneur.",
"searchFields": "Champs de recherche",
"reset": "Réinitialiser",
"partitionKeySuffix": " (clé de partition)"
},
"newVertex": {
"addProperty": "Ajouter une propriété"
},
"addGlobalSecondaryIndex": {
"globalSecondaryIndexId": "ID de conteneur dindex secondaire global",
"globalSecondaryIndexIdPlaceholder": "p. ex. indexbyEmailId",
"projectionQuery": "Requête de projection",
"projectionQueryPlaceholder": "SÉLECTIONNER c.email, c.accountId DE c",
"projectionQueryTooltip": "En savoir plus sur la définition des index secondaires globaux.",
"disabledTitle": "Un index secondaire global est déjà en cours de création. Attendez quil soit terminé avant den créer un nouveau."
},
"stringInput": {
"inputMismatchError": "Lentrée {{input}} ne correspond pas à lID {{selectedId}} sélectionné"
},
"panelInfo": {
"information": "Informations",
"moreDetails": "Plus de détails"
}
}
}

View File

@@ -0,0 +1,727 @@
{
"common": {
"ok": "OK",
"cancel": "Mégse",
"close": "Bezárás",
"save": "Mentés",
"delete": "Törlés",
"update": "Frissítés",
"discard": "Elvetés",
"execute": "Végrehajtás",
"loading": "Betöltés folyamatban",
"loadingEllipsis": "Betöltés...",
"next": "Következő",
"previous": "Előző",
"yes": "Igen",
"no": "Nem",
"result": "Eredmény",
"learnMore": "További információ",
"getStarted": "Első lépések",
"retry": "Újrapróbálkozás",
"apply": "Alkalmaz",
"refresh": "Frissítés",
"copy": "Másolás",
"create": "Létrehozás",
"confirm": "Megerősítés",
"open": "Megnyitás",
"rename": "Átnevezés",
"download": "Letöltés",
"upload": "Feltöltés",
"connect": "Kapcsolódás",
"remove": "Eltávolítás",
"load": "Betöltés",
"publish": "Közzététel",
"browse": "Tallózás",
"increaseValueBy1": "Érték növelése 1-gyel",
"decreaseValueBy1": "Érték csökkentése 1-gyel"
},
"splashScreen": {
"title": {
"default": "Üdvözli az Azure Cosmos DB",
"postgres": "Üdvözli az Azure Cosmos DB for PostgreSQL",
"vcoreMongo": "Üdvözli az Azure DocumentDB (MongoDB-kompatibilitással)"
},
"subtitle": {
"default": "Globálisan elosztott, többmodelles adatbázis-szolgáltatás bármilyen mérethez",
"getStarted": "Ismerje meg a minta adathalmazok, a dokumentáció és a további eszközök használatának első lépéseit."
},
"quickStart": {
"title": "A Rövid útmutató elindítása",
"description": "Gyors üzembe helyezési oktatóanyag indítása a mintaadatok használatának első lépéseihez"
},
"newCollection": {
"title": "Új {{collectionName}}",
"description": "Új tároló létrehozása a tároláshoz és az átviteli sebességhez"
},
"samplesGallery": {
"title": "Azure Cosmos DB minták gyűjteménye",
"description": "Fedezzen fel skálázható, intelligens alkalmazásmintákat. Próbálja ki most, hogy lássa, milyen gyorsan válthat a fogalmakról a kódolásra a Cosmos DB használatával"
},
"connectCard": {
"title": "Csatlakozás",
"description": "Inkább a saját eszközeit használná? Találja meg a kapcsolati sztringet, amire a csatlakozáshoz szüksége van",
"pgAdmin": {
"title": "Kapcsolódás pgAdmin használatával",
"description": "Előnyben részesíti a pgAdmin-t? Itt találja a kapcsolati sztringeket"
},
"vsCode": {
"title": "Csatlakozás VS Code használatával",
"description": "MongoDB- és DocumentDB-fürtök lekérdezése és kezelése Visual Studio Code-ban"
}
},
"shell": {
"postgres": {
"title": "PostgreSQL Shell",
"description": "Tábla létrehozása és az adatok kezelése a PostgreSQL shell felület használatával"
},
"vcoreMongo": {
"title": "Mongo shell",
"description": "Gyűjtemény létrehozása és az adatok kezelése a MongoDB felületének használatával"
}
},
"teachingBubble": {
"newToPostgres": {
"headline": "Most ismerkedik a Cosmos DB PGSQL-lel?",
"body": "Üdvözöljük! Ha most ismerkedik a Cosmos DB PGSQL használatával és segítségre van szüksége az első lépésekhez, itt találhat mintaadatokat, lekérdezéseket."
},
"resetPassword": {
"headline": "Jelszó létrehozása",
"body": "Ha még nem módosította a jelszavát, módosítsa most."
},
"coachMark": {
"headline": "Kezdje a(z) {{collectionName}} mintával",
"body": "Végigvezetjük egy mintatároló létrehozásán mintaadatokkal, majd bemutatjuk az adatkezelőt. A bemutató indítását meg is szakíthatja, és felfedezheti önállóan"
}
},
"sections": {
"recents": "Legutóbbiak",
"clearRecents": "Legutóbbiak törlése",
"top3": "A 3 legfontosabb tudnivaló",
"learningResources": "Tanulási források",
"nextSteps": "Következő lépések",
"tipsAndLearnMore": "Tippek és további információ",
"notebook": "Jegyzetfüzet",
"needHelp": "Segítségre van szüksége?"
},
"top3Items": {
"sql": {
"advancedModeling": {
"title": "Speciális modellezési minták",
"description": "Ismerjen meg speciális stratégiákat z adatbázis optimalizálásához."
},
"partitioning": {
"title": "Ajánlott particionálási eljárások",
"description": "Tudja meg, hogyan alkalmazhat adatmodellt és particionálási stratégiákat."
},
"resourcePlanning": {
"title": "Az erőforrás-követelmények megtervezése",
"description": "Ismerkedjen meg a különböző konfigurációs lehetőségekkel."
}
},
"mongo": {
"whatIsMongo": {
"title": "Mi az a MongoDB API?",
"description": "Ismerje meg az Azure Cosmos DB for MongoDB használatát és funkcióit."
},
"features": {
"title": "Funkciók és szintaxis",
"description": "Az előnyök és funkciók felfedezése"
},
"migrate": {
"title": "Adatok áttelepítése",
"description": "Áttelepítés előtti lépések az adatok áthelyezéséhez"
}
},
"cassandra": {
"buildJavaApp": {
"title": "Java-alkalmazás létrehozása",
"description": "Java-alkalmazás létrehozása SDK használatával."
},
"partitioning": {
"title": "Ajánlott particionálási eljárások",
"description": "Ismerje meg a particionálás működését."
},
"requestUnits": {
"title": "Kérelemegységek (RU-k)",
"description": "A kérelemegység-díjak ismertetése."
}
},
"gremlin": {
"dataModeling": {
"title": "Adatmodellezés",
"description": "Gráfadatok modellezésével kapcsolatos javaslatok"
},
"partitioning": {
"title": "Ajánlott particionálási eljárások",
"description": "Ismerje meg a particionálás működését"
},
"queryData": {
"title": "Adatok lekérdezése",
"description": "Adatok lekérdezése a Gremlinnel"
}
},
"tables": {
"whatIsTable": {
"title": "Mi a tábla-API?",
"description": "Ismerje meg az Azure Cosmos DB for Table használatát és funkcióit"
},
"migrate": {
"title": "Adatok áttelepítése",
"description": "Ismerje meg, hogyan telepítheti át az adatait"
},
"faq": {
"title": "Azure Cosmos DB for Table GYIK",
"description": "Gyakori kérdések a Azure Cosmos DB for Table kapcsán"
}
}
},
"learningResources": {
"shortcuts": {
"title": "Adatkezelő billentyűparancsok",
"description": "Ismerje meg a Data Explorer navigálásához használható billentyűparancsokat."
},
"liveTv": {
"title": "Az alapok megismerése",
"description": "Nézze meg Azure Cosmos DB élő tv-műsor bevezető videóit és videóit."
},
"sql": {
"sdk": {
"title": "Az SDK használatának első lépései",
"description": "Tudnivalók a Azure Cosmos DB SDK-ról."
},
"migrate": {
"title": "Adatok áttelepítése",
"description": "Adatok áttelepítése Azure-szolgáltatásokkal és nyílt forráskódú megoldásokkal."
}
},
"mongo": {
"nodejs": {
"title": "Alkalmazás készítése Node.js használatával",
"description": "Hozzon létre egy Node.js alkalmazást."
},
"gettingStarted": {
"title": "Első lépéseket ismertető útmutató",
"description": "Első lépésként ismerkedjen meg az alapokkal."
}
},
"cassandra": {
"createContainer": {
"title": "Tároló létrehozása",
"description": "Ismerje meg a tárolók létrehozásának lehetőségeit."
},
"throughput": {
"title": "Átviteli sebesség kiosztása",
"description": "Útmutató az átviteli sebesség konfigurálásához."
}
},
"gremlin": {
"getStarted": {
"title": "Első lépések ",
"description": "Létrehozás, lekérdezés és bejárás a Gremlin-konzol használatával"
},
"importData": {
"title": "Gráfadatok importálása",
"description": "Tömeges betöltési adatok megismerése a BulkExecutor használatával"
}
},
"tables": {
"dotnet": {
"title": ".NET-alkalmazás létrehozása",
"description": "Az Azure Cosmos DB for Table elérése .NET-alkalmazásból."
},
"java": {
"title": "Java-alkalmazás létrehozása",
"description": "Azure Cosmos DB for Table alkalmazás létrehozása Java SDK használatával "
}
}
},
"nextStepItems": {
"postgres": {
"dataModeling": "Adatmodellezés",
"distributionColumn": "Terjesztési oszlop kiválasztása",
"buildApps": "Alkalmazások készítése Python/Java/Django használatával"
},
"vcoreMongo": {
"migrateData": "Adatok áttelepítése",
"vectorSearch": "AI-alkalmazások létrehozása vektor keresés használatával",
"buildApps": "Alkalmazások létrehozása a Nodejs használatával"
}
},
"learnMoreItems": {
"postgres": {
"performanceTuning": "Teljesítményhangolás",
"diagnosticQueries": "Hasznos diagnosztikai lekérdezések",
"sqlReference": "Elosztott SQL-referencia"
},
"vcoreMongo": {
"vectorSearch": "Vektor keresés",
"textIndexing": "Szövegindexelés",
"troubleshoot": "A leggyakoribb problémák elhárítása"
}
},
"fabric": {
"buildTitle": "Adatbázis létrehozása",
"useTitle": "Saját adatbázis használata",
"newContainer": {
"title": "Új tároló",
"description": "Céltároló létrehozása az adatok tárolásához"
},
"sampleData": {
"title": "Mintaadatok",
"description": "Mintaadatok betöltése az adatbázisban"
},
"sampleVectorData": {
"title": "Mintavektoradatok",
"description": "Mintavektoradatok betöltése text-embedding-ada-002 használatával"
},
"appDevelopment": {
"title": "Alkalmazásfejlesztés",
"description": "Kezdje itt az alkalmazások SDK-val történő létrehozásához"
},
"sampleGallery": {
"title": "Mintagyűjtemény",
"description": "Valós, teljes körű minták"
}
},
"sampleDataDialog": {
"title": "Mintaadatok",
"startButton": "Kezdés",
"createPrompt": "Hozzon létre egy {{containerName}} tárolót, és importálja a mintaadatokat. Ez több percet is igénybe vehet.",
"creatingContainer": "A(z) {{containerName}} tároló létrehozása...",
"importingData": "Adatok importálása a következőbe: {{containerName}}...",
"success": "A(z) {{containerName}} sikeresen létrehozva mintaadatokkal.",
"errorContainerExists": "A(z) {{containerName}} tároló már létezik a(z) {{databaseName}} adatbázisban. Törölje, majd próbálkozzon újra.",
"errorCreateContainer": "Nem sikerült létrehozni a tárolót: {{error}}",
"errorImportData": "Nem sikerült az adatok importálása: {{error}}"
}
},
"contextMenu": {
"newContainer": "Új {{containerName}}",
"restoreContainer": "{{containerName}} visszaállítása",
"deleteDatabase": "{{databaseName}} törlése",
"deleteContainer": "{{containerName}} törlése",
"newSqlQuery": "Új SQL-lekérdezés",
"newQuery": "Új lekérdezés",
"openMongoShell": "Mongo-felület megnyitása",
"newShell": "Új felület",
"openCassandraShell": "Cassandra-felület megnyitása",
"newStoredProcedure": "Új tárolt eljárás",
"newUdf": "Új UDF",
"newTrigger": "Új eseményindító",
"deleteStoredProcedure": "Tárolt eljárás törlése",
"deleteTrigger": "Trigger törlése",
"deleteUdf": "Felhasználó által definiált függvény törlése"
},
"tabs": {
"documents": {
"newItem": "Új elem",
"newDocument": "Új dokumentum",
"uploadItem": "Elem feltöltése",
"applyFilter": "Szűrő alkalmazása",
"unsavedChanges": "Nem mentett módosítások",
"unsavedChangesMessage": "A nem mentett módosítások elvesznek. Folytatja?",
"createDocumentFailed": "A dokumentum létrehozása nem sikerült",
"updateDocumentFailed": "A dokumentum frissítése nem sikerült",
"documentDeleted": "A dokumentum törlése sikerült.",
"deleteDocumentDialogTitle": "Dokumentum törlése",
"deleteDocumentsDialogTitle": "Dokumentumok törlése",
"throttlingError": "Néhány dokumentum törlése sebességkorlátozási hiba miatt nem sikerült. Próbálkozzon újra később. A jövőben a hasonló esetek elkerülése érdekében fontolja meg a tároló vagy az adatbázis átviteli sebességének növelését.",
"deleteFailed": "Nem sikerült törölni a dokumentum(oka)t ({{error}})",
"missingShardProperty": "A dokumentumból hiányzik a szegmens tulajdonság: {{partitionKeyProperty}}",
"refreshGridFailed": "Nem sikerült frissíteni a dokumentumrácsot",
"confirmDelete": "Biztosan törli a következőt: {{documentName}}?",
"confirmDeleteTitle": "Törlés megerősítése",
"selectedItems": "a kijelölt {{count}} elemek",
"selectedItem": "a kijelölt elem",
"selectedDocuments": "a kijelölt {{count}} dokumentumok",
"selectedDocument": "a kijelölt dokumentum",
"deleteDocumentFailedLog": "Nem sikerült törölni a(z) {{statusCode}} állapotkóddal rendelkező {{documentId}} dokumentumot",
"deleteSuccessLog": "{{count}} dokumentum törlése sikerült",
"deleteThrottledLog": "Nem sikerült törölni {{count}} dokumentumot a „Túl nagy kérés” (429) hiba miatt. Újrapróbálkozás...",
"missingShardKeyLog": "Nem sikerült menteni az új dokumentumot: a dokumentum szegmenskulcsa nincs megadva",
"filterTooltip": "Írjon be egy lekérdezési predikátumot, vagy válasszon egyet a listából.",
"loadMore": "Továbbiak betöltése",
"documentEditor": "Dokumentumszerkesztő",
"savedFilters": "Mentett szűrők",
"defaultFilters": "Alapértelmezett szűrők",
"abort": "Megszakítás",
"deletingDocuments": "{{count}} dokumentum törlése",
"deletedDocumentsSuccess": "{{count}} dokumentum törlése sikerült.",
"deleteAborted": "A dokumentum(ok) törlése megszakadt.",
"failedToDeleteDocuments": "Nem sikerült törölni {{count}} dokumentumot.",
"requestTooLargeBase": "Néhány törlési kérés sikertelen volt a „Túl nagy kérés” kivétel (429) miatt",
"retriedSuccessfully": "de a rendszer sikeresen újrapróbálkozott.",
"retryingNow": "Újrapróbálkozás most.",
"increaseThroughputTip": "A jövőben a hasonló esetek elkerülése érdekében fontolja meg a tároló vagy az adatbázis átviteli sebességének növelését.",
"numberOfSelectedDocuments": "A kijelölt dokumentumok száma: {{count}}",
"mongoFilterPlaceholder": "Írjon be egy lekérdezési feltételt (pl. {\"id\":\"foo\"}), válasszon egyet a legördülő listából, vagy hagyja üresen az összes dokumentum lekérdezéséhez.",
"sqlFilterPlaceholder": "Írjon be egy lekérdezési feltételt (pl. WHERE c.id=\"1\"), válasszon egyet a legördülő listából, vagy hagyja üresen az összes dokumentum lekérdezéséhez.",
"error": "Hiba",
"warning": "Figyelmeztetés"
},
"query": {
"executeQuery": "Lekérdezés végrehajtása",
"executeSelection": "Kijelölés végrehajtása",
"saveQuery": "Lekérdezés mentése",
"downloadQuery": "Lekérdezés letöltése",
"cancelQuery": "Lekérdezés megszakítása",
"openSavedQueries": "Mentett lekérdezések megnyitása",
"vertical": "Ágazat",
"horizontal": "Vízszintes",
"view": "Megtekintés",
"editingQuery": "Lekérdezés szerkesztése"
},
"storedProcedure": {
"id": "Tárolt eljárás azonosítója",
"idPlaceholder": "Adja meg az új tárolt eljárás azonosítóját",
"idAriaLabel": "Tárolt eljárás azonosítója",
"body": "Tárolt eljárás törzse",
"bodyAriaLabel": "Tárolt eljárás törzse",
"successfulExecution": "A tárolt eljárás sikeres végrehajtása",
"resultAriaLabel": "Tárolt eljárás végrehajtásának eredménye",
"logsAriaLabel": "Tárolt eljárásnaplók végrehajtása",
"errors": "Hibák:",
"errorDetailsAriaLabel": "Hiba részleteinek hivatkozása",
"moreDetails": "További részletek",
"consoleLogTab": "console.log"
},
"trigger": {
"id": "Eseményindító azonosítója",
"idPlaceholder": "Adja meg az új eseményindító azonosítóját",
"type": "Eseményindító típusa",
"operation": "Triggerművelet",
"body": "Triggertörzs",
"bodyAriaLabel": "Eseményindító törzse",
"pre": "Előzetes",
"post": "Közzététel",
"all": "Az összes",
"operationCreate": "Létrehozás",
"operationDelete": "Törlés",
"operationReplace": "Lecserélés"
},
"udf": {
"id": "Felhasználó által meghatározott függvény azonosítója",
"idPlaceholder": "Adja meg az új, felhasználó által meghatározott függvény azonosítóját",
"body": "Felhasználó által meghatározott függvény törzse",
"bodyAriaLabel": "Felhasználó által meghatározott függvény törzse"
},
"conflicts": {
"unsavedChanges": "Nem mentett módosítások",
"changesWillBeLost": "Az összes módosítás elveszik. Folytatja?",
"resolveConflictFailed": "Az ütközés feloldása meghiúsult",
"deleteConflictFailed": "Az ütközés törlése nem sikerült",
"refreshGridFailed": "Nem sikerült frissíteni a dokumentumrácsot"
},
"mongoShell": {
"title": "Mongo-felület"
}
},
"panes": {
"deleteDatabase": {
"panelTitle": "A(z) {{databaseName}} törlése",
"warningMessage": "Figyelem! A végrehajtani kívánt művelet nem vonható vissza. Ha folytatja, úgy véglegesen törli az erőforrást és annak minden gyermekerőforrását.",
"confirmPrompt": "Megerősítés a(z) {{databaseName}}-azonosító (név) beírásával",
"inputMismatch": "A(z) {{databaseName}} bemenet {{input}} neve nem egyezik a kijelölt {{databaseName}} {{selectedId}} értékével",
"feedbackTitle": "Segítsen a Azure Cosmos DB továbbfejlesztésében!",
"feedbackReason": "Mi a(z) {{databaseName}} törlésének oka?"
},
"deleteCollection": {
"panelTitle": "A(z) {{collectionName}} törlése",
"confirmPrompt": "Megerősítés a(z) {{collectionName}} azonosítójának beírásával",
"inputMismatch": "A(z) {{input}} bemeneti azonosító nem egyezik a kijelölt {{selectedId}} értékével",
"feedbackTitle": "Segítsen a Azure Cosmos DB továbbfejlesztésében!",
"feedbackReason": "Mi a(z) {{collectionName}} törlésének oka?"
},
"addDatabase": {
"databaseLabel": "{{suffix}} adatbázis",
"databaseIdLabel": "Adatbázis-azonosító",
"keyspaceIdLabel": "Kulcstér azonosítója",
"databaseIdPlaceholder": "Írjon be egy új {{databaseLabel}}-azonosítót",
"databaseTooltip": "A(z) {{databaseLabel}} egy vagy több {{collectionsLabel}} logikai tárolója",
"shareThroughput": "Átviteli sebesség megosztása az összes {{collectionsLabel}} között",
"shareThroughputTooltip": "A(z) {{databaseLabel}} szinten kiépített átviteli sebesség meg lesz osztva az összes {{collectionsLabel}} között a(z) {{databaseLabel}} keretein belül.",
"greaterThanError": "Az Autopilot átviteli sebességéhez olyan értéket adjon meg, ami nagyobb, mint {{minValue}}",
"acknowledgeSpendError": "Nyugtázza a becsült {{period}} ráfordítást."
},
"addCollection": {
"createNew": "Új létrehozása",
"useExisting": "Meglévő használata",
"databaseTooltip": "Az adatbázis hasonló a névtérhez. Ez a(z) {{collectionName}}-készlet felügyeleti egysége.",
"shareThroughput": "Átviteli sebesség megosztása az összes {{collectionName}} között",
"shareThroughputTooltip": "Az adatbázis szintjén konfigurált átviteli sebesség az összes {{collectionName}} között meg lesz osztva az adatbázisban.",
"collectionIdLabel": "{{collectionName}}-azonosító",
"collectionIdTooltip": "A(z) {{collectionName}} egyedi azonosítója, amelyet a rendszer az azonosítóalapú útválasztás során használ a REST-ben és az összes SDK-ban.",
"collectionIdPlaceholder": "például {{collectionName}}1",
"collectionIdAriaLabel": "{{collectionName}}-azonosító, {{collectionName}}1. példa",
"existingDatabaseAriaLabel": "Meglévő {{databaseName}}-azonosító kiválasztása",
"existingDatabasePlaceholder": "Meglévő {{databaseName}}-azonosító kiválasztása",
"indexing": "Indexelés",
"turnOnIndexing": "Indexelés bekapcsolása",
"automatic": "Automatikus",
"turnOffIndexing": "Indexelés kikapcsolása",
"off": "Ki",
"sharding": "Horizontális skálázás",
"shardingTooltip": "A horizontálisan skálázott gyűjtemények több replikakészletre (szegmensre) osztják fel az adatokat a korlátlan méretezhetőség érdekében. A horizontálisan skálázott gyűjtemények esetében ki kell választani egy szegmenskulcsot (mezőt) az adatok egyenletes elosztásához.",
"unsharded": "Horizontálisan nem skálázott",
"unshardedLabel": "Horizontálisan nem skálázott (20 GB-os korlát)",
"sharded": "Horizontálisan skálázott",
"addPartitionKey": "Hierarchikus partíciókulcs hozzáadása",
"hierarchicalPartitionKeyInfo": "Ez a funkció lehetővé teszi, hogy akár három kulcsszinttel particionálja az adatokat a jobb adatelosztás érdekében. A használatához .NET V3, Java V4 SDK vagy előzetes verziójú JavaScript V3 SDK szükséges.",
"provisionDedicatedThroughput": "Dedikált átviteli sebesség kiépítése ehhez: {{collectionName}}",
"provisionDedicatedThroughputTooltip": "Opcionálisan dedikált átviteli sebességet is kioszthat egy {{collectionName}} elemhez egy kiépített átviteli sebességgel rendelkező adatbázison belül. Ez a dedikált átviteli sebesség-mennyiség nem lesz megosztva a kulcstér más {{collectionNamePlural}} elemeivel, és nem számít bele az adatbázis kiosztott átviteli sebességbe. Ezt az átviteli sebességet az adatbázis szintjén kiosztott átviteli sebességen felül számlázzuk.",
"uniqueKeysPlaceholderMongo": "Vesszővel elválasztott elérési utak, például firstName,address.zipCode",
"uniqueKeysPlaceholderSql": "Vesszővel elválasztott elérési utak, például /firstName,/address/zipCode",
"addUniqueKey": "Egyedi kulcs hozzáadása",
"enableAnalyticalStore": "Elemzési tár engedélyezése",
"disableAnalyticalStore": "Elemzési tár letiltása",
"on": "Be",
"analyticalStoreSynapseLinkRequired": "Azure Synapse Link szükséges a(z) {{collectionName}} elemzési tár létrehozásához. Engedélyezze a Synapse Link szolgáltatást ehhez a Cosmos DB fiókhoz.",
"enable": "Engedélyezés",
"containerVectorPolicy": "Tárolóvektor-házirend",
"containerFullTextSearchPolicy": "Tároló teljes szöveges keresési szabályzata",
"advanced": "Speciális",
"mongoIndexingTooltip": "Az _id mező alapértelmezés szerint indexelve van. Egy helyettesítő karakteres index létrehozása az összes mezőhöz optimalizálja a lekérdezéseket; ez ajánlott a fejlesztéshez.",
"createWildcardIndex": "Helyettesítő karakteres index létrehozása az összes mezőhöz",
"legacySdkCheckbox": "Az alkalmazásom egy régebbi Cosmos .NET- vagy Java SDK-verziót (.NET V1 vagy Java V2) használ",
"legacySdkInfo": "A régebbi SDK-kkal való kompatibilitás biztosítása érdekében a létrehozott tároló egy örökölt particionálási sémát fog használni, amely legfeljebb 101 bájt méretű partíciókulcs-értékeket támogat. Ha ez engedélyezve van, nem használhat hierarchikus partíciókulcsokat.",
"indexingOnInfo": "A dokumentumok összes tulajdonsága alapértelmezés szerint indexelve lesz a rugalmas és hatékony lekérdezések érdekében.",
"indexingOffInfo": "Az indexelés ki lesz kapcsolva. Akkor ajánlott, ha nem kell lekérdezéseket futtatnia, vagy csak kulcsérték-műveletekkel rendelkezik.",
"indexingOffWarning": "Ha úgy hozza létre ezt a tárolót, hogy az indexelés ki van kapcsolva, nem fogja tudni módosítani az indexelési szabályzatot. Az indexelési módosítások csak indexelési szabályzattal rendelkező tárolókon engedélyezettek.",
"acknowledgeSpendErrorMonthly": "Nyugtázza a becsült havi ráfordítást.",
"acknowledgeSpendErrorDaily": "Nyugtázza a becsült napi ráfordítást.",
"unshardedMaxRuError": "A horizontálisan nem skálázott gyűjtemények legfeljebb 10 000 kérelemegységet támogatnak",
"acknowledgeShareThroughputError": "Nyugtázza a dedikált átviteli sebesség becsült költségét.",
"vectorPolicyError": "Javítsa ki a tároló vektorházirendjének hibáit",
"fullTextSearchPolicyError": "Javítsa ki a tároló teljes szöveges keresési szabályzatának hibáit",
"addingSampleDataSet": "Mintaadatkészlet hozzáadása"
},
"addCollectionUtility": {
"shardKeyTooltip": "A szegmenskulcs (mező) az adatok több replikakészletre (szegmensre) való felosztására szolgál a korlátlan méretezhetőség érdekében. Kritikus fontosságú olyan mezőt választani, amely egyenletesen osztja el az adatokat.",
"partitionKeyTooltip": "A(z) {{partitionKeyName}} automatikusan elosztja az adatokat a partíciók között a méretezhetőség érdekében. Válasszon egy olyan tulajdonságot a JSON-dokumentumban, amely számos értékkel rendelkezik, és egyenletesen osztja el a kérések mennyiségét.",
"partitionKeyTooltipSqlSuffix": " A kisméretű olvasásigényes, vagy bármilyen méretű írásigényes számítási feladatok esetében az azonosító gyakran jó választás.",
"shardKeyLabel": "Szegmenskulcs",
"partitionKeyLabel": "Partíciókulcs",
"shardKeyPlaceholder": "például categoryId",
"partitionKeyPlaceholderDefault": "például /address",
"partitionKeyPlaceholderFirst": "Kötelező első partíciókulcs, például /TenantId",
"partitionKeyPlaceholderSecond": "második partíciókulcs, például /UserId",
"partitionKeyPlaceholderThird": "harmadik partíciókulcs, például /SessionId",
"partitionKeyPlaceholderGraph": "például, /address/zipCode",
"uniqueKeysTooltip": "Az egyedi kulcsok lehetővé teszik a fejlesztők számára, hogy adatintegritási réteget adjanak az adatbázisukhoz. Egy tároló létrehozásakor egy egyedi kulcsszabályzat létrehozásával biztosítja egy vagy több érték egyediségét partíciókulcsonként.",
"uniqueKeysLabel": "Egyedi kulcsok",
"analyticalStoreLabel": "Elemzési tár",
"analyticalStoreTooltip": "Engedélyezze az elemzési tár képességet, hogy közel valós idejű elemzéseket végezhessen az operatív adatokon anélkül, hogy az hatással lenne a tranzakciós számítási feladatok teljesítményére.",
"analyticalStoreDescription": "Engedélyezze az elemzési tár képességet, hogy közel valós idejű elemzéseket végezhessen az operatív adatokon anélkül, hogy az hatással lenne a tranzakciós számítási feladatok teljesítményére.",
"vectorPolicyTooltip": "Ismertesse az adataiban a vektorokat tartalmazó tulajdonságokat, hogy elérhetővé lehessen tenni azokat hasonlósági lekérdezésekhez."
},
"settings": {
"pageOptions": "Lapbeállítások",
"pageOptionsDescription": "Válassza az Egyéni lehetőséget a megjelenítendő lekérdezési eredmények rögzített mennyiségének megadásához, vagy válassza a Korlátlan lehetőséget, ha oldalanként annyi lekérdezési eredményt szeretne megjeleníteni.",
"queryResultsPerPage": "Lekérdezési eredmények oldalanként",
"queryResultsPerPageTooltip": "Adja meg az oldalanként megjelenítendő lekérdezési eredmények számát.",
"customQueryItemsPerPage": "Egyéni lekérdezéselemek oldalanként",
"custom": "Egyéni",
"unlimited": "Korlátlan",
"entraIdRbac": "Entra ID RBAC engedélyezése",
"entraIdRbacDescription": "Válassza az Automatikus lehetőséget az Entra ID RBAC automatikus engedélyezéséhez. Igaz/Hamis az Entra ID RBAC engedélyezésének/letiltásának kényszerítéséhez.",
"true": "Igaz",
"false": "Hamis",
"regionSelection": "Régió kiválasztása",
"regionSelectionDescription": "A Cosmos-ügyfél által a fiók eléréséhez használt régiót módosítja.",
"selectRegion": "Régió kiválasztása",
"selectRegionTooltip": "Módosítja az ügyfélműveletek végrehajtásához használt fiókvégpontot.",
"globalDefault": "Globális (alapértelmezett)",
"readWrite": "(Olvasás/írás)",
"read": "(Olvasás)",
"queryTimeout": "Lekérdezés időkorlátja",
"queryTimeoutDescription": "Ha egy lekérdezés eléri a megadott időkorlátot, megjelenik egy, a lekérdezés megszakítására szolgáló előugró ablak, kivéve, ha engedélyezve van az automatikus megszakítás.",
"enableQueryTimeout": "Lekérdezés időtúllépésének engedélyezése",
"queryTimeoutMs": "Lekérdezés időkorlátja (ms)",
"automaticallyCancelQuery": "Lekérdezés automatikus megszakítása időtúllépés után",
"ruLimit": "RU-korlát",
"ruLimitDescription": "Ha egy lekérdezés túllépi a konfigurált RU-korlátot, a rendszer megszakítja a lekérdezést.",
"enableRuLimit": "RU-korlát bekapcsolása",
"ruLimitLabel": "RU-korlát (RU)",
"defaultQueryResults": "Lekérdezési eredmények alapértelmezett nézete",
"defaultQueryResultsDescription": "Válassza ki a lekérdezés eredményeinek megjelenítésekor használandó alapértelmezett nézetet.",
"retrySettings": "Ismétlések beállításai",
"retrySettingsDescription": "Szabályozott kérelmekhez társított újrapróbálkozási szabályzat a CosmosDB-lekérdezések során.",
"maxRetryAttempts": "Újrapróbálkozások maximális száma",
"maxRetryAttemptsTooltip": "A kérelmekhez végrehajtandó újrapróbálkozások maximális száma. Alapértelmezett érték: 9.",
"fixedRetryInterval": "Rögzített újrapróbálkozási időköz (ms)",
"fixedRetryIntervalTooltip": "Kijavítottuk az egyes újrapróbálkozások közötti várakozáshoz ezredmásodpercben megadott újrapróbálkozási időközt amely, figyelmen kívül hagyta a válasz részeként visszaadott retryAfter értéket. Az alapértelmezett érték 0 ezredmásodperc.",
"maxWaitTime": "Maximális várakozási idő (s)",
"maxWaitTimeTooltip": "Maximális várakozási idő másodpercben, amíg a rendszer egy kérelemre várakozik, amíg az újrapróbálkozások történnek. Alapértelmezett érték: 30 másodperc.",
"enableContainerPagination": "Tároló oldalakra tördelésének engedélyezése",
"enableContainerPaginationDescription": "Egyszerre 50 tároló betöltése. A tárolók lekérése jelenleg nem alfanumerikus sorrendben történik.",
"enableCrossPartitionQuery": "Partíciók közötti lekérdezés engedélyezése",
"enableCrossPartitionQueryDescription": "Lekérdezés végrehajtása során több kérés is küldhető. Egynél több kérésre van szükség, ha a lekérdezés hatóköre nincs egyetlen partíciókulcs-értékre korlátozva.",
"maxDegreeOfParallelism": "Párhuzamosság maximális foka",
"maxDegreeOfParallelismDescription": "Lekérdezi vagy beállítja az egyidejűleg futtatott műveletek számát az ügyféloldalon a párhuzamos lekérdezés-végrehajtás során. A pozitív tulajdonságérték az egyidejű műveletek számát a beállított értékre korlátozza. Ha 0-nál kisebb értékre van állítva, a rendszer automatikusan eldönti az egyidejű futtatandó műveletek számát.",
"maxDegreeOfParallelismQuery": "Lekérdezés a párhuzamosság maximális mértékéig.",
"priorityLevel": "Prioritásszint",
"priorityLevelDescription": "Beállítja a prioritási szintet a Data Explorerből érkező adatsík-kérelmekhez prioritásalapú végrehajtás használatakor. Ha a Nincs érték van kiválasztva, a Data Explorer nem adja meg a prioritási szintet, és a kiszolgálóoldali alapértelmezett prioritási szintet fogja használni.",
"displayGremlinQueryResults": "Gremlin-lekérdezés eredményeinek megjelenítése a következőként:",
"displayGremlinQueryResultsDescription": "Válassza a Graph lehetőséget a lekérdezés eredményeinek automatikusan gráfként, vagy a JSON lehetőséget JSON-ként való megjelenítéséhez.",
"graph": "Gráf",
"json": "JSON",
"graphAutoVisualization": "Gráf automatikus vizualizációja",
"enableSampleDatabase": "Mintaadatbázis engedélyezése",
"enableSampleDatabaseDescription": "Ez egy mintaadatbázis és -gyűjtemény szintetikus termékadatokkal, amelyeket NoSQL-lekérdezésekkel való felderítésre használhat. Ez egy másik adatbázisként jelenik meg a Data Explorer felhasználói felületén, amelyet a Microsoft hoz létre és tart karban díjmentesen.",
"enableSampleDbAriaLabel": "Mintaadatbázis engedélyezése a lekérdezések feltárásához",
"guidRepresentation": "GUID-ábrázolás",
"guidRepresentationDescription": "A MongoDB GuidRepresentation tulajdonsága arra utal, hogy a globálisan egyedi azonosítók (GUID-ok) szerializálása és deszerializálása hogyan történik BSON-dokumentumokban való tárolás esetén. Ez minden dokumentumműveletre érvényes lesz.",
"advancedSettings": "Speciális beállítások",
"ignorePartitionKey": "Partíciókulcs figyelmen kívül hagyása a dokumentum frissítésekor",
"ignorePartitionKeyTooltip": "Ha be van jelölve, a rendszer nem használja a partíciókulcs értékét a dokumentum megkereséséhez a frissítési műveletek során. Csak akkor használja, ha a dokumentumfrissítések rendellenes partíciókulcs miatt meghiúsulnak.",
"clearHistory": "Előzmények törlése",
"clearHistoryConfirm": "Biztosan folytatja?",
"clearHistoryDescription": "Ez a művelet törli a fiók összes testreszabását ebben a böngészőben, beleértve a következőket:",
"clearHistoryTabLayout": "A testre szabott lapelrendezés alaphelyzetbe állítása, beleértve az elválasztóhelyeket is",
"clearHistoryTableColumns": "A táblázat oszlopbeállításainak törlése, beleértve az egyéni oszlopokat is",
"clearHistoryFilters": "Szűrőelőzmények törlése",
"clearHistoryRegion": "Régiókiválasztás visszaállítása globálisra",
"increaseValueBy1000": "Érték növelése 1000-rel",
"decreaseValueBy1000": "Érték csökkentése 1000-rel",
"none": "Nincs",
"low": "Alacsony",
"high": "Magas",
"automatic": "Automatikus",
"enhancedQueryControl": "Továbbfejlesztett lekérdezésvezérlő",
"enableQueryControl": "Lekérdezésvezérlő engedélyezése",
"explorerVersion": "Explorer verziója",
"accountId": "Fiókazonosító",
"sessionId": "Munkamenet-azonosító",
"popupsDisabledError": "Nem sikerült hitelesítést létrehozni ehhez a fiókhoz, mert a böngészőben le vannak tiltva az előugró ablakok.\nEngedélyezze az előugró ablakokat ehhez a webhelyhez, majd kattintson az Entra ID bejelentkezés gombra",
"failedToAcquireTokenError": "Nem sikerült automatikusan beszerezni az engedélyezési jogkivonatot. Kattintson az Entra ID bejelentkezés gombra az Entra ID RBAC-műveletek engedélyezéséhez"
},
"saveQuery": {
"panelTitle": "Lekérdezés mentése",
"setupCostMessage": "Megfelelőségi okokból a lekérdezéseket egy tárolóba mentjük az Azure Cosmos-fiókjában, egy különálló, {{databaseName}} nevű adatbázisban. A folytatáshoz létre kell hoznunk egy tárolót a fiókjában. A becsült további költség naponta 0,77 USD.",
"completeSetup": "Beállítás befejezése",
"noQueryNameError": "Nincs megadva lekérdezésnév",
"invalidQueryContentError": "Érvénytelen lekérdezési tartalom megadva",
"failedToSaveQueryError": "A(z) {{queryName}} lekérdezés mentése nem sikerült",
"failedToSetupContainerError": "Nem sikerült beállítani tárolót a mentett lekérdezésekhez",
"accountNotSetupError": "Nem sikerült menteni a lekérdezést: a fiók nincs beállítva a lekérdezések mentéséhez",
"name": "Név"
},
"loadQuery": {
"noFileSpecifiedError": "Nincs megadva fájl",
"failedToLoadQueryError": "Nem sikerült betölteni a lekérdezést",
"failedToLoadQueryFromFileError": "Nem sikerült betölteni a lekérdezést (z) {{fileName}} fájlból",
"selectFilesToOpen": "Lekérdezési dokumentum kiválasztása",
"browseFiles": "Tallózás"
},
"executeStoredProcedure": {
"enterInputParameters": "Adja meg a bemeneti paramétereket (ha vannak ilyenek)",
"key": "Kulcs",
"param": "Paraméter",
"partitionKeyValue": "Partíciókulcs értéke",
"value": "Érték",
"addNewParam": "Új paraméter hozzáadása",
"addParam": "Paraméter hozzáadása",
"deleteParam": "Paraméter törlése",
"invalidParamError": "Érvénytelen paraméter megadva: {{invalidParam}}",
"invalidParamConsoleError": "Érvénytelen paraméter megadva: a(z) {{invalidParam}} nem érvényes konstansérték",
"stringType": "Sztring",
"customType": "Egyéni"
},
"uploadItems": {
"noFilesSpecifiedError": "Nincs megadva fájl. Adjon meg legalább egy fájlt.",
"selectJsonFiles": "JSON-fájlok kiválasztása",
"selectJsonFilesTooltip": "Jelöljön ki egy vagy több feltöltendő JSON-fájlt. Minden fájl egyetlen JSON-dokumentumot vagy egy JSON-dokumentumtömböt tartalmazhat. Az egyes feltöltési műveletek összes fájljának összesített méretének 2 MB alatt kell lennie. Nagyobb adatkészletek esetében több feltöltési műveletet is végrehajthat.",
"fileNameColumn": "FÁJLNÉV",
"statusColumn": "ÁLLAPOT",
"uploadStatus": "{{numSucceeded}} létrehozva, {{numThrottled}} szabályozva, {{numFailed}} hiba",
"uploadedFiles": "Feltöltött fájlok"
},
"copyNotebook": {
"copyFailedError": "Nem sikerült a(z) {{name}} másolása ide: {{destination}}",
"uploadFailedError": "Nem sikerült a(z) {{name}} feltöltése",
"location": "Hely",
"locationAriaLabel": "Hely",
"selectLocation": "Jegyzetfüzet másolási helyének kiválasztása",
"name": "Név"
},
"publishNotebook": {
"publishFailedError": "Nem sikerült a(z) {{notebookName}} közzététele a katalógusban",
"publishDescription": "Közzétételkor ez a jegyzetfüzet megjelenik a Azure Cosmos DB jegyzetfüzetek nyilvános katalógusában. A közzététel előtt győződjön meg arról, hogy eltávolította a bizalmas adatokat vagy kimeneteket.",
"publishPrompt": "Közzéteszi és megosztja a(z) {{name}} dokumentumot a katalógusban?",
"coverImage": "Borítókép",
"coverImageUrl": "Borítókép URL-címe",
"name": "Név",
"description": "Leírás",
"tags": "Címkék",
"tagsPlaceholder": "Nem kötelező címke 1, nem kötelező címke 2",
"preview": "Előzetes verzió",
"urlType": "URL-cím",
"customImage": "Egyéni rendszerkép",
"takeScreenshot": "Képernyőkép készítése",
"useFirstDisplayOutput": "Első megjelenítési kimenet használata",
"failedToCaptureOutput": "Nem sikerült rögzíteni az első kimenetet",
"outputDoesNotExist": "A kimenet nem létezik egyik cellához sem.",
"failedToConvertError": "Nem sikerült a(z) {{fileName}} base64 formátumra való konvertálása",
"failedToUploadError": "Nem sikerült a(z) {{fileName}} feltöltése"
},
"changePartitionKey": {
"failedToStartError": "Nem sikerült elindítani az adatátviteli feladatot",
"suboptimalPartitionKeyError": "Figyelmeztetés: A rendszer úgy észlelte, hogy a gyűjtemény valószínűleg nem optimális partíciókulcsot használ",
"description": "A tároló partíciókulcsának módosításakor létre kell hoznia egy céltárolót a megfelelő partíciókulccsal. Kiválaszthat egy meglévő céltárolót is.",
"sourceContainerId": "Forrás {{collectionName}}-azonosítója",
"destinationContainerId": "Cél {{collectionName}}-azonosítója",
"collectionIdTooltip": "A(z) {{collectionName}} egyedi azonosítója, amelyet a rendszer az azonosítóalapú útválasztás során használ a REST-ben és az összes SDK-ban.",
"collectionIdPlaceholder": "például {{collectionName}}1",
"collectionIdAriaLabel": "{{collectionName}}-azonosító, {{collectionName}}1. példa",
"existingContainers": "Meglévő tárolók",
"partitionKeyWarning": "A céltároló még nem létezhet. A Data Explorer egy új céltárolót hoz létre."
},
"cassandraAddCollection": {
"keyspaceLabel": "Kulcstér neve",
"keyspaceTooltip": "Válasszon ki egy meglévő kulcsteret, vagy adjon meg egy új kulcstér-azonosítót.",
"tableIdLabel": "A tábla létrehozásához írja be a CQL parancsot.",
"enterTableId": "Táblaazonosító megadása",
"tableSchemaAriaLabel": "Táblaséma",
"provisionDedicatedThroughput": "Dedikált átviteli sebesség kiépítése ehhez a táblához",
"provisionDedicatedThroughputTooltip": "Opcionálisan dedikált átviteli sebességet is kioszthat egy táblához egy kiépített átviteli sebességgel rendelkező kulcstéren belül. Ez a dedikált átviteli sebesség nem lesz megosztva a kulcstér más tábláival, és nem számít bele a kulcstérhez kiosztott átviteli sebességbe. Ezt az átviteli sebességet a kulcstér szintjén kiosztott átviteli sebességen felül számlázzuk."
},
"tables": {
"addProperty": "Tulajdonság hozzáadása",
"addRow": "Sor hozzáadása",
"addEntity": "Entitás hozzáadása",
"back": "vissza",
"nullFieldsWarning": "Figyelmeztetés: A null értékű mezők nem jelennek meg szerkesztésre.",
"propertyEmptyError": "A(z) {{property}} nem lehet üres. Adjon meg egy értéket a(z) {{property}} tulajdonsághoz",
"whitespaceError": "a(z) {{property}} nem rendelkezhet szóközzel. Adjon meg egy szóköz nélküli értéket a(z) {{property}} számára",
"propertyTypeEmptyError": "A tulajdonságtípus nem lehet üres. Válasszon típust a(z) {{property}}tulajdonság legördülő listájából"
},
"tableQuerySelect": {
"selectColumns": "Válassza ki a lekérdezni kívánt oszlopokat.",
"availableColumns": "Elérhető oszlopok"
},
"tableColumnSelection": {
"selectColumns": "Válassza ki, hogy mely oszlopok jelenjenek meg a tároló elemeinek nézetében.",
"searchFields": "Mezők keresése",
"reset": "Alaphelyzetbe állítás",
"partitionKeySuffix": " (partíciókulcs)"
},
"newVertex": {
"addProperty": "Tulajdonság hozzáadása"
},
"addGlobalSecondaryIndex": {
"globalSecondaryIndexId": "Globális másodlagos index tárolóazonosítója",
"globalSecondaryIndexIdPlaceholder": "például indexbyEmailId",
"projectionQuery": "Leképezési lekérdezés",
"projectionQueryPlaceholder": "SELECT c.email, c.accountId FROM c",
"projectionQueryTooltip": "További információ a globális másodlagos indexek definiálásáról.",
"disabledTitle": "Már folyamatban van egy globális másodlagos index létrehozása. Várja meg, amíg befejeződik, mielőtt egy másikat hozna létre."
},
"stringInput": {
"inputMismatchError": "A(z) {{input}} bemenet nem egyezik a kijelölt {{selectedId}} értékével"
},
"panelInfo": {
"information": "Információ",
"moreDetails": "További részletek"
}
}
}

View File

@@ -0,0 +1,727 @@
{
"common": {
"ok": "OK",
"cancel": "Batal",
"close": "Tutup",
"save": "Simpan",
"delete": "Hapus",
"update": "Perbarui",
"discard": "Buang",
"execute": "Jalankan",
"loading": "Memuat",
"loadingEllipsis": "Memuat...",
"next": "Berikutnya",
"previous": "Sebelumnya",
"yes": "Ya",
"no": "Tidak",
"result": "Hasil",
"learnMore": "Pelajari selengkapnya",
"getStarted": "Mulai",
"retry": "Coba lagi",
"apply": "Terapkan",
"refresh": "Refresh",
"copy": "Salin",
"create": "Buat",
"confirm": "Konfirmasi",
"open": "Buka",
"rename": "Ganti nama",
"download": "Unduh",
"upload": "Unggah",
"connect": "Sambungkan",
"remove": "Hapus",
"load": "Muat",
"publish": "Terbitkan",
"browse": "Telusuri",
"increaseValueBy1": "Tambah nilai sebesar 1",
"decreaseValueBy1": "Kurangi nilai sebesar 1"
},
"splashScreen": {
"title": {
"default": "Selamat Datang di Azure Cosmos DB",
"postgres": "Selamat datang di Azure Cosmos DB for PostgreSQL",
"vcoreMongo": "Selamat datang di Azure DocumentDB (dengan kompatibilitas MongoDB)"
},
"subtitle": {
"default": "Layanan database multimodel yang didistribusikan secara global untuk skala apa saja",
"getStarted": "Mulai dengan himpunan data sampel, dokumentasi, dan alat tambahan kami."
},
"quickStart": {
"title": "Luncurkan mulai cepat",
"description": "Mulai tutorial cepat untuk memulai dengan data sampel"
},
"newCollection": {
"title": "{{collectionName}} baru",
"description": "Buat kontainer baru untuk penyimpanan dan throughput"
},
"samplesGallery": {
"title": "Azure Cosmos DB Samples Gallery",
"description": "Temukan sampel yang menampilkan pola aplikasi cerdas yang dapat diskalakan. Coba sekarang untuk melihat seberapa cepat Anda bisa beralih dari konsep ke kode dengan Cosmos DB"
},
"connectCard": {
"title": "Sambungkan",
"description": "Lebih suka menggunakan alat pilihan sendiri? Temukan string koneksi yang diperlukan untuk menyambung",
"pgAdmin": {
"title": "Sambungkan dengan pgAdmin",
"description": "Lebih suka pgAdmin? Temukan string koneksi di sini"
},
"vsCode": {
"title": "Sambungkan dengan Visual Studio Code",
"description": "Kueri dan kelola klaster MongoDB dan DocumentDB di Visual Studio Code"
}
},
"shell": {
"postgres": {
"title": "PostgreSQL Shell",
"description": "Buat tabel dan interaksi dengan data menggunakan antarmuka shell PostgreSQL"
},
"vcoreMongo": {
"title": "Mongo Shell",
"description": "Buat koleksi dan interaksi dengan data menggunakan antarmuka shell MongoDB"
}
},
"teachingBubble": {
"newToPostgres": {
"headline": "Baru menggunakan Cosmos DB PGSQL?",
"body": "Selamat datang! Jika baru menggunakan Cosmos DB PGSQL dan butuh bantuan memulai, di sini Anda dapat menemukan data sampel dan kueri."
},
"resetPassword": {
"headline": "Buat kata sandi Anda",
"body": "Jika belum mengubah kata sandi, ubah sekarang."
},
"coachMark": {
"headline": "Mulai dengan sampel {{collectionName}}",
"body": "Anda akan dipandu membuat kontainer sampel dengan data sampel, lalu kami akan memberikan tur penjelajah data. Anda juga bisa membatalkan tur ini dan menjelajah sendiri"
}
},
"sections": {
"recents": "Terbaru",
"clearRecents": "Bersihkan Riwayat Terbaru",
"top3": "3 Hal Terpenting yang Perlu Diketahui",
"learningResources": "Sumber Daya Pembelajaran",
"nextSteps": "Langkah berikutnya",
"tipsAndLearnMore": "Tips & pelajari selengkapnya",
"notebook": "Buku catatan",
"needHelp": "Perlu bantuan?"
},
"top3Items": {
"sql": {
"advancedModeling": {
"title": "Pola Pemodelan Lanjutan",
"description": "Pelajari strategi lanjutan untuk mengoptimalkan database."
},
"partitioning": {
"title": "Praktik Terbaik Pemartisian",
"description": "Pelajari cara menerapkan model data dan strategi pemartisian."
},
"resourcePlanning": {
"title": "Rencanakan Kebutuhan Sumber Daya Anda",
"description": "Kenali Berbagai Pilihan Konfigurasi."
}
},
"mongo": {
"whatIsMongo": {
"title": "Apa itu API MongoDB?",
"description": "Pahami Azure Cosmos DB for MongoDB dan fitur-fiturnya."
},
"features": {
"title": "Fitur dan Sintaks",
"description": "Temukan Keunggulan dan Fitur"
},
"migrate": {
"title": "Migrasikan Data",
"description": "Langkah Pra-migrasi untuk Memindahkan Data"
}
},
"cassandra": {
"buildJavaApp": {
"title": "Buat Aplikasi Java",
"description": "Buat aplikasi Java menggunakan SDK."
},
"partitioning": {
"title": "Praktik Terbaik Pemartisian",
"description": "Pelajari cara kerja pemartisian."
},
"requestUnits": {
"title": "Unit Permintaan (RU)",
"description": "Pahami Biaya RU."
}
},
"gremlin": {
"dataModeling": {
"title": "Pemodelan Data",
"description": "Rekomendasi Pemodelan Data Grafik"
},
"partitioning": {
"title": "Praktik Terbaik Pemartisian",
"description": "Pelajari cara kerja partisi"
},
"queryData": {
"title": "Data Kueri",
"description": "Mengkueri data dengan Gremlin"
}
},
"tables": {
"whatIsTable": {
"title": "Apa itu Table API?",
"description": "Memahami Azure Cosmos DB for Table dan fiturnya"
},
"migrate": {
"title": "Migrasikan data Anda",
"description": "Pelajari cara memigrasikan data Anda"
},
"faq": {
"title": "Tanya Jawab Umum Azure Cosmos DB for Table",
"description": "Pertanyaan umum tentang Azure Cosmos DB for Table"
}
}
},
"learningResources": {
"shortcuts": {
"title": "Pintasan keyboard Data Explorer",
"description": "Pelajari pintasan keyboard untuk menavigasi Data Explorer."
},
"liveTv": {
"title": "Pelajari Dasar",
"description": "Tonton video perkenalan dan tutorial Azure Cosmos DB Live TV."
},
"sql": {
"sdk": {
"title": "Mulai menggunakan SDK",
"description": "Pelajari tentang Azure Cosmos DB SDK."
},
"migrate": {
"title": "Migrasikan Data",
"description": "Migrasikan data menggunakan layanan Azure dan solusi sumber terbuka."
}
},
"mongo": {
"nodejs": {
"title": "Buat aplikasi dengan Node.js",
"description": "Buat aplikasi Node.js."
},
"gettingStarted": {
"title": "Panduan Persiapan",
"description": "Pelajari dasar untuk memulai."
}
},
"cassandra": {
"createContainer": {
"title": "Buat Kontainer",
"description": "Kenali opsi buat kontainer."
},
"throughput": {
"title": "Throughput Penyediaan",
"description": "Pelajari cara mengonfigurasi throughput."
}
},
"gremlin": {
"getStarted": {
"title": "Mulai ",
"description": "Buat, kueri, dan jelajahi menggunakan konsol Gremlin"
},
"importData": {
"title": "Impor Data Graf",
"description": "Pelajari penyerapan massal data menggunakan BulkExecutor"
}
},
"tables": {
"dotnet": {
"title": "Buat Aplikasi .NET",
"description": "Cara mengakses Azure Cosmos DB for Table dari aplikasi .NET."
},
"java": {
"title": "Buat Aplikasi Java",
"description": "Buat aplikasi Azure Cosmos DB for Table dengan Java SDK "
}
}
},
"nextStepItems": {
"postgres": {
"dataModeling": "Pemodelan Data",
"distributionColumn": "Cara memilih Kolom Distribusi",
"buildApps": "Buat Aplikasi dengan Python/Java/Django"
},
"vcoreMongo": {
"migrateData": "Migrasikan Data",
"vectorSearch": "Buat aplikasi AI dengan Pencarian Vektor",
"buildApps": "Buat Aplikasi dengan Nodejs"
}
},
"learnMoreItems": {
"postgres": {
"performanceTuning": "Penyetelan Performa",
"diagnosticQueries": "Kueri Diagnostik yang Berguna",
"sqlReference": "Referensi SQL Terdistribusi"
},
"vcoreMongo": {
"vectorSearch": "Pencarian Vektor",
"textIndexing": "Pengindeksan Teks",
"troubleshoot": "Pecahkan masalah umum"
}
},
"fabric": {
"buildTitle": "Bangun database Anda",
"useTitle": "Gunakan database Anda",
"newContainer": {
"title": "Kontainer baru",
"description": "Buat kontainer tujuan untuk menyimpan data"
},
"sampleData": {
"title": "Data Sampel",
"description": "Muat data sampel ke database"
},
"sampleVectorData": {
"title": "Data Vektor Sampel",
"description": "Muat data vektor sampel dengan text-embedding-ada-002"
},
"appDevelopment": {
"title": "Pengembangan aplikasi",
"description": "Mulai di sini untuk menggunakan SDK membangun aplikasi"
},
"sampleGallery": {
"title": "Galeri Sampel",
"description": "Dapatkan sampel menyeluruh dunia nyata"
}
},
"sampleDataDialog": {
"title": "Data Sampel",
"startButton": "Mulai",
"createPrompt": "Buat kontainer \"{{containerName}}\" dan impor data sampel ke dalamnya. Proses ini memerlukan waktu beberapa menit.",
"creatingContainer": "Membuat kontainer \"{{containerName}}\"...",
"importingData": "Mengimpor data ke \"{{containerName}}\"...",
"success": "Berhasil membuat \"{{containerName}}\" dengan data sampel.",
"errorContainerExists": "Kontainer \"{{containerName}}\" di database \"{{databaseName}}\" sudah ada. Hapus dan coba lagi.",
"errorCreateContainer": "Gagal membuat kontainer: {{error}}",
"errorImportData": "Gagal mengimpor data: {{error}}"
}
},
"contextMenu": {
"newContainer": "{{containerName}} baru",
"restoreContainer": "Pulihkan {{containerName}}",
"deleteDatabase": "Hapus {{databaseName}}",
"deleteContainer": "Hapus {{containerName}}",
"newSqlQuery": "Kueri SQL Baru",
"newQuery": "Kueri Baru",
"openMongoShell": "Buka Mongo Shell",
"newShell": "Shell Baru",
"openCassandraShell": "Buka Cassandra Shell",
"newStoredProcedure": "Prosedur Tersimpan Baru",
"newUdf": "UDF baru",
"newTrigger": "Pemicu Baru",
"deleteStoredProcedure": "Hapus Prosedur tersimpan",
"deleteTrigger": "Hapus Pemicu",
"deleteUdf": "Hapus Fungsi yang Ditentukan Pengguna"
},
"tabs": {
"documents": {
"newItem": "Item Baru",
"newDocument": "Dokumen Baru",
"uploadItem": "Unggah Item",
"applyFilter": "Terapkan Filter",
"unsavedChanges": "Perubahan yang belum disimpan",
"unsavedChangesMessage": "Perubahan yang belum disimpan akan hilang. Lanjutkan?",
"createDocumentFailed": "Gagal membuat dokumen",
"updateDocumentFailed": "Gagal memperbarui dokumen",
"documentDeleted": "Dokumen berhasil dihapus.",
"deleteDocumentDialogTitle": "Hapus dokumen",
"deleteDocumentsDialogTitle": "Hapus dokumen",
"throttlingError": "Beberapa dokumen gagal dihapus karena kesalahan pembatasan laju. Coba lagi nanti. Untuk mencegah hal ini terjadi lagi, coba tambah throughput di kontainer atau database Anda.",
"deleteFailed": "Gagal menghapus dokumen ({{error}})",
"missingShardProperty": "Dokumen tidak memiliki properti shard: {{partitionKeyProperty}}",
"refreshGridFailed": "Gagal me-refresh kisi dokumen",
"confirmDelete": "Yakin ingin menghapus {{documentName}}?",
"confirmDeleteTitle": "Konfirmasikan penghapusan",
"selectedItems": "{{count}} item yang dipilih",
"selectedItem": "item yang dipilih",
"selectedDocuments": "{{count}} dokumen yang dipilih",
"selectedDocument": "dokumen yang dipilih",
"deleteDocumentFailedLog": "Gagal menghapus dokumen {{documentId}} dengan kode status {{statusCode}}",
"deleteSuccessLog": "{{count}} dokumen berhasil dihapus",
"deleteThrottledLog": "Gagal menghapus {{count}} dokumen karena kesalahan \"Permintaan terlalu besar\" (429). Mencoba lagi...",
"missingShardKeyLog": "Gagal menyimpan dokumen baru: Kunci shard dokumen tidak ditentukan",
"filterTooltip": "Ketik predikat kueri atau pilih salah satu dari daftar.",
"loadMore": "Muat lainnya",
"documentEditor": "Editor dokumen",
"savedFilters": "Filter tersimpan",
"defaultFilters": "Filter default",
"abort": "Batalkan",
"deletingDocuments": "Menghapus {{count}} dokumen",
"deletedDocumentsSuccess": "Berhasil menghapus {{count}} dokumen.",
"deleteAborted": "Penghapusan dokumen dibatalkan.",
"failedToDeleteDocuments": "Gagal menghapus {{count}} dokumen.",
"requestTooLargeBase": "Beberapa permintaan penghapusan gagal karena pengecualian \"Permintaan terlalu besar\" (429)",
"retriedSuccessfully": "tetapi berhasil dicoba ulang.",
"retryingNow": "Mencoba lagi sekarang.",
"increaseThroughputTip": "Untuk mencegah hal ini terjadi lagi, coba tambah throughput di kontainer atau database Anda.",
"numberOfSelectedDocuments": "Jumlah dokumen yang dipilih: {{count}}",
"mongoFilterPlaceholder": "Ketik predikat kueri (misalnya, {\"id\":\"foo\"}), atau pilih salah satu dari daftar menurun, atau biarkan kosong untuk mengkueri semua dokumen.",
"sqlFilterPlaceholder": "Ketik predikat kueri (misalnya, WHERE c.id=\"1\"), atau pilih salah satu dari daftar menurun, atau kosongkan untuk mengkueri semua dokumen.",
"error": "Kesalahan",
"warning": "Peringatan"
},
"query": {
"executeQuery": "Jalankan Kueri",
"executeSelection": "Jalankan Pilihan",
"saveQuery": "Simpan Kueri",
"downloadQuery": "Unduh Kueri",
"cancelQuery": "Batalkan kueri",
"openSavedQueries": "Buka Kueri Tersimpan",
"vertical": "Vertikal",
"horizontal": "Horizontal",
"view": "Tampilkan",
"editingQuery": "Mengedit Kueri"
},
"storedProcedure": {
"id": "ID Prosedur Tersimpan",
"idPlaceholder": "Masukkan ID prosedur baru yang disimpan",
"idAriaLabel": "ID prosedur tersimpan",
"body": "Isi Prosedur Tersimpan",
"bodyAriaLabel": "Isi prosedur tersimpan",
"successfulExecution": "Eksekusi prosedur tersimpan berhasil",
"resultAriaLabel": "Jalankan hasil prosedur tersimpan",
"logsAriaLabel": "Jalankan log prosedur tersimpan",
"errors": "Kesalahan:",
"errorDetailsAriaLabel": "Tautan detail kesalahan",
"moreDetails": "Detail selengkapnya",
"consoleLogTab": "console.log"
},
"trigger": {
"id": "ID Pemicu",
"idPlaceholder": "Masukkan ID pemicu baru",
"type": "Tipe Pemicu",
"operation": "Operasi Pemicu",
"body": "Isi Pemicu",
"bodyAriaLabel": "Isi pemicu",
"pre": "Pra",
"post": "Posting",
"all": "Semua",
"operationCreate": "Buat",
"operationDelete": "Hapus",
"operationReplace": "Ganti"
},
"udf": {
"id": "ID Fungsi yang Ditentukan Pengguna",
"idPlaceholder": "Masukkan ID fungsi yang ditentukan pengguna baru",
"body": "Isi Fungsi yang Ditentukan Pengguna",
"bodyAriaLabel": "Isi fungsi yang ditentukan pengguna"
},
"conflicts": {
"unsavedChanges": "Perubahan yang belum disimpan",
"changesWillBeLost": "Perubahan akan hilang. Lanjutkan?",
"resolveConflictFailed": "Gagal mengatasi konflik",
"deleteConflictFailed": "Gagal menghapus konflik",
"refreshGridFailed": "Gagal me-refresh kisi dokumen"
},
"mongoShell": {
"title": "Mongo Shell"
}
},
"panes": {
"deleteDatabase": {
"panelTitle": "Hapus {{databaseName}}",
"warningMessage": "Peringatan! Tindakan yang akan Anda lakukan tidak dapat dibatalkan. Melanjutkan akan menghapus sumber daya dan semua sumber daya anaknya secara permanen.",
"confirmPrompt": "Konfirmasikan dengan mengetik id {{databaseName}} (nama)",
"inputMismatch": "Nama {{databaseName}} input \"{{input}}\" tidak cocok dengan {{databaseName}} \"{{selectedId}}\" yang dipilih",
"feedbackTitle": "Bantuan kami meningkatkan Azure Cosmos DB!",
"feedbackReason": "Apa alasan menghapus {{databaseName}} ini?"
},
"deleteCollection": {
"panelTitle": "Hapus {{collectionName}}",
"confirmPrompt": "Konfirmasikan dengan mengetik id {{collectionName}}",
"inputMismatch": "Id input {{input}} tidak cocok dengan {{selectedId}} yang dipilih",
"feedbackTitle": "Bantuan kami meningkatkan Azure Cosmos DB!",
"feedbackReason": "Apa alasan menghapus {{collectionName}} ini?"
},
"addDatabase": {
"databaseLabel": "Database {{suffix}}",
"databaseIdLabel": "Id database",
"keyspaceIdLabel": "Id ruang kunci",
"databaseIdPlaceholder": "Ketik id {{databaseLabel}} baru",
"databaseTooltip": "{{databaseLabel}} adalah kontainer logis dari satu atau beberapa {{collectionsLabel}}",
"shareThroughput": "Bagikan throughput di {{collectionsLabel}}",
"shareThroughputTooltip": "Throughput yang diprovisi di tingkat {{databaseLabel}} akan dibagikan ke semua {{collectionsLabel}} dalam {{databaseLabel}}.",
"greaterThanError": "Masukkan nilai yang lebih besar dari {{minValue}} untuk throughput autopilot",
"acknowledgeSpendError": "Setujui perkiraan pengeluaran {{period}}."
},
"addCollection": {
"createNew": "Buat baru",
"useExisting": "Gunakan yang sudah ada",
"databaseTooltip": "Database serupa dengan namespace. Ini adalah unit manajemen untuk serangkaian {{collectionName}}.",
"shareThroughput": "Bagikan throughput di {{collectionName}}",
"shareThroughputTooltip": "Throughput yang dikonfigurasi di tingkat database akan dibagikan ke semua {{collectionName}} dalam database.",
"collectionIdLabel": "{{collectionName}} id",
"collectionIdTooltip": "Pengidentifikasi unik untuk {{collectionName}} dan digunakan untuk perutean berbasis id melalui REST dan semua SDK.",
"collectionIdPlaceholder": "misalnya, {{collectionName}}1",
"collectionIdAriaLabel": "{{collectionName}} id, Contoh {{collectionName}}1",
"existingDatabaseAriaLabel": "Pilih id {{databaseName}} yang sudah ada",
"existingDatabasePlaceholder": "Pilih id {{databaseName}} yang sudah ada",
"indexing": "Mengindeks",
"turnOnIndexing": "Aktifkan pengindeksan",
"automatic": "Otomatis",
"turnOffIndexing": "Nonaktifkan pengindeksan",
"off": "Nonaktif",
"sharding": "Pecahan",
"shardingTooltip": "Koleksi yang dipecah membagi data Anda ke banyak set replika (shard) untuk mencapai skalabilitas tanpa batas. Koleksi yang dipecah mengharuskan pemilihan kunci shard (bidang) untuk mendistribusikan data secara merata.",
"unsharded": "Tidak dipecah",
"unshardedLabel": "Tidak dipecah (batas 20GB)",
"sharded": "Dipecah",
"addPartitionKey": "Tambahkan kunci partisi hierarkis",
"hierarchicalPartitionKeyInfo": "Fitur ini memungkinkan partisi data dengan maksimal tiga tingkat kunci untuk distribusi data yang lebih baik. Memerlukan .NET V3, Java V4 SDK, atau pratinjau JavaScript V3 SDK.",
"provisionDedicatedThroughput": "Provisikan throughput khusus untuk {{collectionName}} ini",
"provisionDedicatedThroughputTooltip": "Anda juga dapat memprovisikan throughput khusus untuk {{collectionName}} dalam ruang kunci yang sudah memiliki provisi throughput. Jumlah throughput khusus ini tidak akan dibagikan dengan {{collectionNamePlural}} lain dalam ruang kunci dan tidak dihitung ke dalam throughput yang Anda provisikan untuk ruang kunci tersebut. Jumlah throughput ini akan ditagih di luar throughput yang Anda provisikan di tingkat database.",
"uniqueKeysPlaceholderMongo": "Jalur yang dipisahkan koma, misalnya firstName,address.zipCode",
"uniqueKeysPlaceholderSql": "Jalur yang dipisahkan koma, misalnya /firstName,/address/zipCode",
"addUniqueKey": "Tambahkan kunci unik",
"enableAnalyticalStore": "Aktifkan penyimpanan analitik",
"disableAnalyticalStore": "Nonaktifkan penyimpanan analitik",
"on": "Aktif",
"analyticalStoreSynapseLinkRequired": "Azure Synapse Link diperlukan untuk membuat penyimpanan analitik {{collectionName}}. Aktifkan Azure Synapse Link untuk akun Cosmos DB ini.",
"enable": "Aktifkan",
"containerVectorPolicy": "Kebijakan Vektor Kontainer",
"containerFullTextSearchPolicy": "Kebijakan Pencarian Teks Lengkap Kontainer",
"advanced": "Tingkat lanjut",
"mongoIndexingTooltip": "Field _id diindeks secara default. Membuat indeks wildcard untuk semua bidang akan mengoptimalkan kueri dan disarankan untuk pengembangan.",
"createWildcardIndex": "Buat Indeks Wildcard di semua bidang",
"legacySdkCheckbox": "Aplikasi saya menggunakan versi Cosmos .NET atau Java SDK lama (.NET V1 atau Java V2)",
"legacySdkInfo": "Untuk memastikan kompatibilitas dengan SDK lama, kontainer yang dibuat akan menggunakan skema partisi lama yang mendukung nilai kunci partisi dengan ukuran maksimal 101 byte. Jika diaktifkan, Anda tidak dapat menggunakan kunci partisi hierarkis.",
"indexingOnInfo": "Semua properti dalam dokumen akan diindeks secara default untuk kueri yang fleksibel dan efisien.",
"indexingOffInfo": "Pengindeksan akan dinonaktifkan. Disarankan jika Anda tidak perlu menjalankan kueri atau hanya melakukan operasi nilai kunci.",
"indexingOffWarning": "Dengan membuat kontainer ini dengan pengindeksan dinonaktifkan, Anda tidak dapat mengubah kebijakan pengindeksan. Perubahan pengindeksan hanya diperbolehkan terhadap kontainer dengan kebijakan pengindeksan.",
"acknowledgeSpendErrorMonthly": "Setujui perkiraan pengeluaran bulanan.",
"acknowledgeSpendErrorDaily": "Setujui perkiraan pengeluaran harian.",
"unshardedMaxRuError": "Koleksi yang tidak dipecah mendukung hingga 10.000 RU",
"acknowledgeShareThroughputError": "Setujui perkiraan biaya throughput khusus ini.",
"vectorPolicyError": "Perbaiki kesalahan dalam kebijakan vektor kontainer",
"fullTextSearchPolicyError": "Perbaiki kesalahan dalam kebijakan pencarian teks lengkap kontainer",
"addingSampleDataSet": "Menambahkan sampel himpunan data"
},
"addCollectionUtility": {
"shardKeyTooltip": "Kunci shard (bidang) digunakan untuk membagi data Anda ke banyak set replika (shard) untuk mencapai skalabilitas tanpa batas. Penting memilih bidang yang mendistribusikan data secara merata.",
"partitionKeyTooltip": "{{partitionKeyName}} digunakan untuk mendistribusikan data secara otomatis di seluruh partisi untuk skalabilitas. Pilih properti dalam dokumen JSON Anda yang memiliki berbagai nilai dan mendistribusikan volume permintaan secara merata.",
"partitionKeyTooltipSqlSuffix": " Untuk beban kerja baca berat atau beban kerja tulis berat yang kecil dengan ukuran apa pun, id sering menjadi pilihan yang baik.",
"shardKeyLabel": "Tombol shard",
"partitionKeyLabel": "Kunci partisi",
"shardKeyPlaceholder": "misalnya, categoryId",
"partitionKeyPlaceholderDefault": "misalnya, /address",
"partitionKeyPlaceholderFirst": "Wajib - kunci partisi pertama misalnya, /TenantId",
"partitionKeyPlaceholderSecond": "kunci partisi kedua misalnya, /UserId",
"partitionKeyPlaceholderThird": "kunci partisi ketiga misalnya, /SessionId",
"partitionKeyPlaceholderGraph": "misalnya /address/zipCode",
"uniqueKeysTooltip": "Kunci unik memberi pengembang kemampuan menambahkan lapisan integritas data ke database. Dengan membuat kebijakan kunci unik saat kontainer dibuat, Anda memastikan keunikan satu atau beberapa nilai per kunci partisi.",
"uniqueKeysLabel": "Kunci unik",
"analyticalStoreLabel": "Penyimpanan Analitik",
"analyticalStoreTooltip": "Aktifkan kemampuan penyimpanan analitik untuk melakukan analitik mendekati real-time terhadap data operasional tanpa memengaruhi performa beban kerja transaksional.",
"analyticalStoreDescription": "Aktifkan kemampuan penyimpanan analitik untuk melakukan analitik mendekati real-time terhadap data operasional tanpa memengaruhi performa beban kerja transaksional.",
"vectorPolicyTooltip": "Jelaskan properti dalam data Anda yang berisi vektor agar dapat disediakan untuk kueri kemiripan."
},
"settings": {
"pageOptions": "Opsi Halaman",
"pageOptionsDescription": "Pilih Kustom untuk menentukan jumlah hasil kueri tetap yang akan ditampilkan, atau pilih Tak Terbatas untuk menampilkan sebanyak mungkin hasil kueri per halaman.",
"queryResultsPerPage": "Hasil kueri per halaman",
"queryResultsPerPageTooltip": "Masukkan jumlah hasil kueri yang harus ditampilkan per halaman.",
"customQueryItemsPerPage": "Item kueri kustom per halaman",
"custom": "Kustom",
"unlimited": "Tidak terbatas",
"entraIdRbac": "Aktifkan RBAC Entra ID",
"entraIdRbacDescription": "Pilih Otomatis untuk mengaktifkan RBAC Entra ID secara otomatis. True/False untuk mengaktifkan atau menonaktifkan RBAC Entra ID secara paksa.",
"true": "True",
"false": "False",
"regionSelection": "Pemilihan Wilayah",
"regionSelectionDescription": "Mengubah wilayah yang digunakan Klien Cosmos untuk mengakses akun.",
"selectRegion": "Pilih Wilayah",
"selectRegionTooltip": "Mengubah titik akhir akun yang digunakan untuk melakukan operasi klien.",
"globalDefault": "Global (Default)",
"readWrite": "(Baca/Tulis)",
"read": "(Baca)",
"queryTimeout": "Batas Waktu Kueri",
"queryTimeoutDescription": "Saat kueri mencapai batas waktu yang ditentukan, popup dengan opsi untuk membatalkan kueri akan muncul kecuali pembatalan otomatis telah diaktifkan.",
"enableQueryTimeout": "Aktifkan batas waktu kueri",
"queryTimeoutMs": "Batas waktu kueri (mdtk)",
"automaticallyCancelQuery": "Batalkan kueri secara otomatis setelah batas waktu",
"ruLimit": "RU Limit",
"ruLimitDescription": "Jika kueri melebihi batas RU yang dikonfigurasi, kueri akan dibatalkan.",
"enableRuLimit": "Aktifkan batas RU",
"ruLimitLabel": "RU Limit (RU)",
"defaultQueryResults": "Tampilan Hasil Kueri Default",
"defaultQueryResultsDescription": "Pilih tampilan default untuk digunakan saat menampilkan hasil kueri.",
"retrySettings": "Pengaturan Coba Lagi",
"retrySettingsDescription": "Kebijakan percobaan kembali yang terkait dengan permintaan yang dibatasi selama kueri CosmosDB.",
"maxRetryAttempts": "Upaya percobaan kembali maks",
"maxRetryAttemptsTooltip": "Jumlah maks percobaan kembali yang akan dilakukan untuk sebuah permintaan. Nilai default 9.",
"fixedRetryInterval": "Interval percobaan kembali tetap (mdtk)",
"fixedRetryIntervalTooltip": "Interval percobaan kembali tetap dalam milidetik untuk menunggu di antara setiap percobaan kembali, mengabaikan retryAfter yang dihasilkan sebagai bagian dari respons. Nilai default-nya adalah 0 milidetik.",
"maxWaitTime": "Waktu tunggu maks (dtk)",
"maxWaitTimeTooltip": "Waktu tunggu maks dalam detik untuk menunggu permintaan selama percobaan kembali berlangsung. Nilai default 30 detik.",
"enableContainerPagination": "Aktifkan penomoran halaman kontainer",
"enableContainerPaginationDescription": "Muat 50 kontainer sekaligus. Saat ini, kontainer tidak dimuat dalam urutan alfanumerik.",
"enableCrossPartitionQuery": "Aktifkan kueri partisi silang",
"enableCrossPartitionQueryDescription": "Kirim lebih dari satu permintaan saat menjalankan kueri. Lebih dari satu permintaan diperlukan jika kueri tidak dibatasi pada satu nilai kunci partisi.",
"maxDegreeOfParallelism": "Tingkat paralelisme maksimum",
"maxDegreeOfParallelismDescription": "Mengambil atau mengatur jumlah operasi serentak yang dijalankan di sisi klien selama eksekusi kueri paralel. Nilai properti positif membatasi jumlah operasi serentak sesuai nilai yang ditetapkan. Jika diatur kurang dari 0, sistem menentukan secara otomatis jumlah operasi serentak yang dijalankan.",
"maxDegreeOfParallelismQuery": "Kueri hingga tingkat paralelisme maks.",
"priorityLevel": "Tingkat Prioritas",
"priorityLevelDescription": "Menetapkan tingkat prioritas untuk permintaan data-plane dari Data Explorer saat menggunakan Eksekusi Berbasis Prioritas. Jika dipilih \"Tidak ada\", Data Explorer tidak akan menentukan tingkat prioritas dan tingkat prioritas default sisi server akan digunakan.",
"displayGremlinQueryResults": "Tampilkan hasil kueri Gremlin sebagai:",
"displayGremlinQueryResultsDescription": "Pilih Grafik untuk memvisualisasikan hasil kueri secara otomatis sebagai Grafik atau JSON untuk menampilkan hasil sebagai JSON.",
"graph": "Grafik",
"json": "JSON",
"graphAutoVisualization": "Visualisasi Otomatis Grafik",
"enableSampleDatabase": "Aktifkan sampel database",
"enableSampleDatabaseDescription": "Ini adalah database dan koleksi sampel dengan data produk sintetis yang dapat digunakan untuk menjelajahi kueri NoSQL. Ini akan muncul sebagai database lain di UI Data Explorer, dibuat dan dikelola oleh Microsoft tanpa biaya untuk Anda.",
"enableSampleDbAriaLabel": "Aktifkan db sampel untuk penjelajahan kueri",
"guidRepresentation": "Representasi Guid",
"guidRepresentationDescription": "GuidRepresentation di MongoDB mengacu pada cara Pengidentifikasi Unik Global (GUID) diserialisasi dan dideserialisasi saat disimpan dalam dokumen BSON. Ini berlaku untuk semua operasi dokumen.",
"advancedSettings": "Pengaturan Tingkat Lanjut",
"ignorePartitionKey": "Abaikan kunci partisi saat memperbarui dokumen",
"ignorePartitionKeyTooltip": "Jika dicentang, nilai kunci partisi tidak akan digunakan untuk menemukan dokumen selama operasi pembaruan. Gunakan hanya jika pembaruan dokumen gagal karena kunci partisi yang tidak normal.",
"clearHistory": "Hapus Riwayat",
"clearHistoryConfirm": "Yakin ingin melanjutkan?",
"clearHistoryDescription": "Tindakan ini akan menghapus semua kustomisasi untuk akun ini di browser ini, termasuk:",
"clearHistoryTabLayout": "Atur ulang tata letak tab yang dikustomisasi, termasuk posisi pemisah",
"clearHistoryTableColumns": "Hapus preferensi kolom tabel Anda, termasuk kolom kustom apa pun",
"clearHistoryFilters": "Hapus riwayat filter Anda",
"clearHistoryRegion": "Atur ulang pilihan wilayah ke global",
"increaseValueBy1000": "Naikkan nilai sebesar 1000",
"decreaseValueBy1000": "Kurangi nilai sebesar 1000",
"none": "Tidak ada",
"low": "Rendah",
"high": "Tinggi",
"automatic": "Otomatis",
"enhancedQueryControl": "Kontrol kueri yang disempurnakan",
"enableQueryControl": "Aktifkan kontrol kueri",
"explorerVersion": "Versi Explorer",
"accountId": "ID Akun",
"sessionId": "ID Sesi",
"popupsDisabledError": "Kami tidak dapat melakukan otorisasi untuk akun ini karena pop-up dinonaktifkan di browser.\nAktifkan pop-up untuk situs ini dan klik tombol \"Masuk untuk ID Entra\"",
"failedToAcquireTokenError": "Gagal memperoleh token otorisasi secara otomatis. Klik tombol \"Masuk untuk Entra ID\" untuk mengaktifkan operasi RBAC Entra ID"
},
"saveQuery": {
"panelTitle": "Simpan Kueri",
"setupCostMessage": "Untuk alasan kepatuhan, kami menyimpan kueri dalam kontainer di akun Azure Cosmos Anda, di database terpisah bernama \"{{databaseName}}\". Untuk melanjutkan, kami perlu membuat kontainer di akun Anda, dengan perkiraan biaya tambahan $0,77 per hari.",
"completeSetup": "Selesaikan penyiapan",
"noQueryNameError": "Tidak ada nama kueri yang ditentukan",
"invalidQueryContentError": "Konten kueri yang ditentukan tidak valid",
"failedToSaveQueryError": "Gagal menyimpan kueri {{queryName}}",
"failedToSetupContainerError": "Gagal menyiapkan kontainer untuk kueri tersimpan",
"accountNotSetupError": "Gagal menyimpan kueri: akun tidak disiapkan untuk menyimpan kueri",
"name": "Nama"
},
"loadQuery": {
"noFileSpecifiedError": "Tidak ada file yang ditentukan",
"failedToLoadQueryError": "Gagal memuat kueri.",
"failedToLoadQueryFromFileError": "Gagal memuat kueri dari file {{fileName}}",
"selectFilesToOpen": "Pilih dokumen kueri",
"browseFiles": "Telusuri"
},
"executeStoredProcedure": {
"enterInputParameters": "Masukkan parameter input (jika ada)",
"key": "Kunci",
"param": "Param",
"partitionKeyValue": "Nilai kunci partisi",
"value": "Nilai",
"addNewParam": "Tambahkan Parameter Baru",
"addParam": "Tambahkan parameter",
"deleteParam": "Hapus parameter",
"invalidParamError": "Parameter yang ditentukan tidak valid: {{invalidParam}}",
"invalidParamConsoleError": "Parameter yang ditentukan tidak valid: {{invalidParam}} bukan nilai literal yang valid",
"stringType": "String",
"customType": "Kustom"
},
"uploadItems": {
"noFilesSpecifiedError": "Tidak ada file yang ditentukan. Masukkan setidaknya satu file.",
"selectJsonFiles": "Pilih Files JSON",
"selectJsonFilesTooltip": "Pilih satu atau beberapa file JSON untuk diunggah. Setiap file dapat berisi satu dokumen JSON atau susunan dokumen JSON. Ukuran gabungan semua file dalam satu operasi pengunggahan harus kurang dari 2 MB. Anda dapat melakukan beberapa operasi pengunggahan untuk himpunan data yang lebih besar.",
"fileNameColumn": "NAMA FILE",
"statusColumn": "STATUS",
"uploadStatus": "{{numSucceeded}} dibuat, {{numThrottled}} dibatasi, {{numFailed}} kesalahan",
"uploadedFiles": "File yang diunggah"
},
"copyNotebook": {
"copyFailedError": "Gagal menyalin {{name}} ke {{destination}}",
"uploadFailedError": "Gagal mengunggah {{name}}",
"location": "Lokasi",
"locationAriaLabel": "Lokasi",
"selectLocation": "Pilih lokasi buku catatan untuk disalin",
"name": "Nama"
},
"publishNotebook": {
"publishFailedError": "Gagal menerbitkan {{notebookName}} ke galeri",
"publishDescription": "Saat diterbitkan, buku catatan ini akan muncul di galeri publik buku catatan Azure Cosmos DB. Pastikan Anda telah menghapus data atau output sensitif sebelum menerbitkan.",
"publishPrompt": "Apakah Anda ingin menerbitkan dan membagikan \"{{name}}\" ke galeri?",
"coverImage": "Gambar sampul",
"coverImageUrl": "Url gambar sampul",
"name": "Nama",
"description": "Deskripsi",
"tags": "Tag",
"tagsPlaceholder": "Tag opsional 1, Tag opsional 2",
"preview": "Pratinjau",
"urlType": "URL",
"customImage": "Gambar Kustom",
"takeScreenshot": "Ambil Cuplikan Layar",
"useFirstDisplayOutput": "Gunakan Output Tampilan Pertama",
"failedToCaptureOutput": "Gagal mengambil output pertama",
"outputDoesNotExist": "Output tidak ada untuk sel mana pun.",
"failedToConvertError": "Gagal mengonversi {{fileName}} ke format base64",
"failedToUploadError": "Gagal mengunggah {{fileName}}"
},
"changePartitionKey": {
"failedToStartError": "Gagal memulai tugas transfer data",
"suboptimalPartitionKeyError": "Peringatan: Sistem mendeteksi bahwa koleksi Anda mungkin menggunakan kunci partisi yang kurang optimal",
"description": "Saat mengubah kunci partisi kontainer, Anda harus membuat kontainer tujuan dengan kunci partisi yang benar. Anda juga dapat memilih kontainer tujuan yang sudah ada.",
"sourceContainerId": "ID {{collectionName}} sumber",
"destinationContainerId": "Id {{collectionName}} tujuan",
"collectionIdTooltip": "Pengidentifikasi unik untuk {{collectionName}} dan digunakan untuk perutean berbasis id melalui REST dan semua SDK.",
"collectionIdPlaceholder": "misalnya, {{collectionName}}1",
"collectionIdAriaLabel": "{{collectionName}} id, Contoh {{collectionName}}1",
"existingContainers": "Kontainer yang Sudah Ada",
"partitionKeyWarning": "Kontainer tujuan tidak boleh sudah ada. Data Explorer akan membuat kontainer tujuan baru untuk Anda."
},
"cassandraAddCollection": {
"keyspaceLabel": "Nama ruang kunci",
"keyspaceTooltip": "Pilih ruang kunci yang sudah ada atau masukkan ID ruang kunci baru.",
"tableIdLabel": "Masukkan perintah CQL untuk membuat tabel.",
"enterTableId": "Masukkan id tabel",
"tableSchemaAriaLabel": "Skema tabel",
"provisionDedicatedThroughput": "Provisikan throughput khusus untuk tabel ini",
"provisionDedicatedThroughputTooltip": "Anda juga dapat memprovisikan throughput khusus untuk tabel dalam ruang kunci yang sudah memiliki provisi throughput. Jumlah throughput khusus ini tidak akan dibagikan dengan tabel lain dalam ruang kunci dan tidak dihitung ke dalam throughput yang Anda provisikan untuk ruang kunci tersebut. Jumlah throughput ini akan ditagih di luar throughput yang Anda provisikan di tingkat ruang kunci."
},
"tables": {
"addProperty": "Tambahkan Properti",
"addRow": "Tambahkan Baris",
"addEntity": "Tambahkan Entitas",
"back": "kembali",
"nullFieldsWarning": "Peringatan: Field null tidak akan ditampilkan untuk pengeditan.",
"propertyEmptyError": "{{property}} tidak boleh kosong. Masukkan nilai untuk {{property}}",
"whitespaceError": "{{property}} tidak boleh berisi spasi. Masukkan nilai untuk {{property}} tanpa spasi",
"propertyTypeEmptyError": "Jenis properti tidak boleh kosong. Pilih tipe dari dropdown untuk properti {{property}}"
},
"tableQuerySelect": {
"selectColumns": "Pilih kolom yang ingin dikueri.",
"availableColumns": "Kolom yang Tersedia"
},
"tableColumnSelection": {
"selectColumns": "Pilih kolom yang akan ditampilkan dalam tampilan item di kontainer Anda.",
"searchFields": "Bidang pencarian",
"reset": "Atur ulang",
"partitionKeySuffix": " (kunci partisi)"
},
"newVertex": {
"addProperty": "Tambahkan Properti"
},
"addGlobalSecondaryIndex": {
"globalSecondaryIndexId": "Id kontainer indeks sekunder global",
"globalSecondaryIndexIdPlaceholder": "misalnya, indexbyEmailId",
"projectionQuery": "Kueri proyeksi",
"projectionQueryPlaceholder": "SELECT c.email, c.accountId FROM c",
"projectionQueryTooltip": "Pelajari lebih lanjut tentang mendefinisikan indeks sekunder global.",
"disabledTitle": "Indeks sekunder global sedang dibuat. Tunggu hingga selesai sebelum memulai yang lain."
},
"stringInput": {
"inputMismatchError": "Input {{input}} tidak cocok dengan {{selectedId}} yang dipilih"
},
"panelInfo": {
"information": "Informasi",
"moreDetails": "Detail selengkapnya"
}
}
}

View File

@@ -0,0 +1,2 @@
export { Keys } from "./Keys.generated";
export { t } from "./t";

View File

@@ -0,0 +1,727 @@
{
"common": {
"ok": "OK",
"cancel": "Annulla",
"close": "Chiudi",
"save": "Salva",
"delete": "Elimina",
"update": "Aggiorna",
"discard": "Rimuovi",
"execute": "Esegui",
"loading": "Caricamento",
"loadingEllipsis": "Caricamento...",
"next": "Avanti",
"previous": "Indietro",
"yes": "Sì",
"no": "No",
"result": "Risultato",
"learnMore": "Altre informazioni",
"getStarted": "Attività iniziali",
"retry": "Riprova",
"apply": "Applica",
"refresh": "Aggiorna",
"copy": "Copia",
"create": "Crea",
"confirm": "Conferma",
"open": "Apri",
"rename": "Rinomina",
"download": "Scarica",
"upload": "Carica",
"connect": "Connetti",
"remove": "Rimuovi",
"load": "Carica",
"publish": "Pubblica",
"browse": "Sfoglia",
"increaseValueBy1": "Aumentare il valore di 1",
"decreaseValueBy1": "Diminuisci il valore di 1"
},
"splashScreen": {
"title": {
"default": "Benvenuto in Azure Cosmos DB",
"postgres": "Benvenuti in Azure Cosmos DB for PostgreSQL",
"vcoreMongo": "Benvenuti in Azure DocumentDB (con compatibilità MongoDB)"
},
"subtitle": {
"default": "Servizio database multimodello distribuito a livello globale a qualsiasi livello di scalabilità",
"getStarted": "Inizia con i nostri set di dati di esempio, la documentazione e gli strumenti aggiuntivi."
},
"quickStart": {
"title": "Avviare l'avvio rapido",
"description": "Avvia un'esercitazione di avvio rapido per iniziare con i dati di esempio"
},
"newCollection": {
"title": "Nuova {{collectionName}}",
"description": "Crea un nuovo contenitore per archiviazione e velocità effettiva"
},
"samplesGallery": {
"title": "Galleria di esempi di Azure Cosmos DB",
"description": "Scoprire esempi che mostrano modelli di app scalabili e intelligenti. Prova subito uno di questi esempi per vedere quanto velocemente puoi passare dal concetto al codice con Cosmos DB"
},
"connectCard": {
"title": "Connetti",
"description": "Preferisci usare gli strumenti che scegli tu? Trova la stringa di connessione necessaria per collegarti",
"pgAdmin": {
"title": "Connettiti con pgAdmin",
"description": "Preferisci pgAdmin? Trovare le stringhe di connessione qui"
},
"vsCode": {
"title": "Connetti con VS Code",
"description": "Esegui query e gestisci i cluster MongoDB e DocumentDB in Visual Studio Code"
}
},
"shell": {
"postgres": {
"title": "Shell di PostgreSQL",
"description": "Creare una tabella e interagire con i dati usando l'interfaccia shell di PostgreSQL"
},
"vcoreMongo": {
"title": "Shell Mongo",
"description": "Creare una raccolta e interagire con i dati usando l'interfaccia shell di MongoDB"
}
},
"teachingBubble": {
"newToPostgres": {
"headline": "Nuovo utente di Cosmos DB PGSQL?",
"body": "Ti diamo il benvenuto! Se non si ha familiarità con Cosmos DB PGSQL e si ha bisogno di assistenza per iniziare, qui è possibile trovare dati di esempio ed eseguire query."
},
"resetPassword": {
"headline": "Crea la password",
"body": "Se la password non è ancora stata modificata, modificarla ora."
},
"coachMark": {
"headline": "Inizia con l'esempio {{collectionName}}",
"body": "L'utente verrà guidato nella creazione di un contenitore di esempio con dati di esempio, quindi verrà visualizzata una presentazione di Esplora dati. È anche possibile annullare l'avvio di questa presentazione ed eseguire l'esplorazione da soli"
}
},
"sections": {
"recents": "Recenti",
"clearRecents": "Cancella recenti",
"top3": "Le 3 cose principali da sapere",
"learningResources": "Risorse di formazione",
"nextSteps": "Passaggi successivi",
"tipsAndLearnMore": "Suggerimenti e altre informazioni",
"notebook": "Notebook",
"needHelp": "Serve aiuto?"
},
"top3Items": {
"sql": {
"advancedModeling": {
"title": "Modelli di modellazione avanzati",
"description": "Informazioni sulle strategie avanzate per ottimizzare il database."
},
"partitioning": {
"title": "Procedure consigliate per il partizionamento",
"description": "Informazioni su come applicare il modello di dati e le strategie di partizionamento."
},
"resourcePlanning": {
"title": "Pianifica i requisiti delle risorse",
"description": "Informazioni sulle diverse opzioni di configurazione."
}
},
"mongo": {
"whatIsMongo": {
"title": "Cos'è l'API MongoDB?",
"description": "Informazioni su Azure Cosmos DB for MongoDB e le relative funzionalità."
},
"features": {
"title": "Funzionalità e sintassi",
"description": "Scoprire i vantaggi e le funzionalità"
},
"migrate": {
"title": "Esegui la migrazione dei dati",
"description": "Passaggi preliminari per la migrazione dei dati"
}
},
"cassandra": {
"buildJavaApp": {
"title": "Crea un'app Java",
"description": "Crea un'app Java usando un SDK."
},
"partitioning": {
"title": "Procedure consigliate per il partizionamento",
"description": "Informazioni sul funzionamento del partizionamento."
},
"requestUnits": {
"title": "Unità richiesta",
"description": "Informazioni sugli addebiti per le UR."
}
},
"gremlin": {
"dataModeling": {
"title": "Modellazione dei dati",
"description": "Raccomandazioni per la modellazione dei dati di Graph"
},
"partitioning": {
"title": "Procedure consigliate per il partizionamento",
"description": "Informazioni sul funzionamento del partizionamento"
},
"queryData": {
"title": "Esegui query sui dati",
"description": "Esecuzione di query sui dati con Gremlin"
}
},
"tables": {
"whatIsTable": {
"title": "Cos'è l'API Table?",
"description": "Informazioni su Azure Cosmos DB for Table e le relative funzionalità"
},
"migrate": {
"title": "Esegui la migrazione dei dati",
"description": "Informazioni su come eseguire la migrazione dei dati"
},
"faq": {
"title": "Domande frequenti su Azure Cosmos DB for Table",
"description": "Domande comuni su Azure Cosmos DB for Table"
}
}
},
"learningResources": {
"shortcuts": {
"title": "Scelte rapide da tastiera di Esplora dati",
"description": "Informazioni sulle scelte rapide da tastiera per spostarsi in Esplora dati."
},
"liveTv": {
"title": "Informazioni sulle nozioni fondamentali",
"description": "Guarda il programma Azure Cosmos DB Live TV e i video introduttivi e dimostrativi."
},
"sql": {
"sdk": {
"title": "Attività iniziali con un SDK",
"description": "Informazioni sull'SDK di Azure Cosmos DB."
},
"migrate": {
"title": "Esegui la migrazione dei dati",
"description": "Esegui la migrazione dei dati con i servizi di Azure e le soluzioni open source."
}
},
"mongo": {
"nodejs": {
"title": "Crea un'app con Node.js",
"description": "Crea un'app Node.js."
},
"gettingStarted": {
"title": "Guida introduttiva",
"description": "Informazioni di base per iniziare."
}
},
"cassandra": {
"createContainer": {
"title": "Crea un contenitore",
"description": "Informazioni sulle opzioni di creazione di un contenitore."
},
"throughput": {
"title": "Provisioning velocità effettiva",
"description": "Informazioni su come configurare la velocità effettiva."
}
},
"gremlin": {
"getStarted": {
"title": "Attività iniziali ",
"description": "Crea, esegui query e naviga usando la console Gremlin"
},
"importData": {
"title": "Importa dati di Graph",
"description": "Informazioni sull'inserimento di dati in blocco con BulkExecutor"
}
},
"tables": {
"dotnet": {
"title": "Crea un'app .NET",
"description": "Come accedere ad Azure Cosmos DB for Table da un'app .NET."
},
"java": {
"title": "Crea un'app Java",
"description": "Crea un'app Azure Cosmos DB for Table con Java SDK "
}
}
},
"nextStepItems": {
"postgres": {
"dataModeling": "Modellazione dei dati",
"distributionColumn": "Come scegliere una colonna di distribuzione",
"buildApps": "Crea app con Python/Java/Django"
},
"vcoreMongo": {
"migrateData": "Esegui la migrazione dei dati",
"vectorSearch": "Crea app IA con Ricerca vettoriale",
"buildApps": "Crea app con Node.js"
}
},
"learnMoreItems": {
"postgres": {
"performanceTuning": "Ottimizzazione delle prestazioni",
"diagnosticQueries": "Query diagnostiche utili",
"sqlReference": "Riferimento SQL distribuito"
},
"vcoreMongo": {
"vectorSearch": "Ricerca vettoriale",
"textIndexing": "Indicizzazione del testo",
"troubleshoot": "Risolvere i problemi comuni"
}
},
"fabric": {
"buildTitle": "Crea il database",
"useTitle": "Usa il database",
"newContainer": {
"title": "Nuovo contenitore",
"description": "Crea un contenitore di destinazione per archiviare i dati"
},
"sampleData": {
"title": "Dati di esempio",
"description": "Carica i dati di esempio nel database"
},
"sampleVectorData": {
"title": "Dati vettoriali di esempio",
"description": "Carica dati vettoriali di esempio con text-embedding-ada-002"
},
"appDevelopment": {
"title": "Sviluppo di app",
"description": "Inizia da qui per usare un SDK per creare le app"
},
"sampleGallery": {
"title": "Raccolta di esempi",
"description": "Ottieni esempi end-to-end reali"
}
},
"sampleDataDialog": {
"title": "Dati di esempio",
"startButton": "Avvia",
"createPrompt": "Crea un contenitore \"{{containerName}}\" e importa al suo interno i dati di esempio. L'operazione potrebbe richiedere alcuni minuti.",
"creatingContainer": "Creazione del contenitore \"{{containerName}}\"...",
"importingData": "Importazione dei dati in \"{{containerName}}\"...",
"success": "Creazione di \"{{containerName}}\" con dati di esempio completata.",
"errorContainerExists": "Il contenitore \"{{containerName}}\" nel database \"{{databaseName}}\" esiste già. Eliminarlo e riprovare.",
"errorCreateContainer": "Non è possibile creare il contenitore {{error}}",
"errorImportData": "Non è possibile importare i dati: {{error}}"
}
},
"contextMenu": {
"newContainer": "Nuovo {{containerName}}",
"restoreContainer": "Ripristina {{containerName}}",
"deleteDatabase": "Elimina {{databaseName}}",
"deleteContainer": "Elimina {{containerName}}",
"newSqlQuery": "Nuova query SQL",
"newQuery": "Nuova query",
"openMongoShell": "Apri shell Mongo",
"newShell": "Nuova Shell",
"openCassandraShell": "Apri shell Cassandra",
"newStoredProcedure": "Nuova stored procedure",
"newUdf": "Nuova funzione definita dall'utente",
"newTrigger": "Nuovo trigger",
"deleteStoredProcedure": "Elimina stored procedure",
"deleteTrigger": "Elimina trigger",
"deleteUdf": "Elimina funzione definita dall'utente"
},
"tabs": {
"documents": {
"newItem": "Nuovo elemento",
"newDocument": "Nuovo documento",
"uploadItem": "Carica elemento",
"applyFilter": "Applica filtro",
"unsavedChanges": "Modifiche non salvate",
"unsavedChangesMessage": "Le modifiche non salvate andranno perse. Continuare?",
"createDocumentFailed": "Non è possibile creare il documento",
"updateDocumentFailed": "Non è possibile aggiornare il documento",
"documentDeleted": "Documento eliminato correttamente.",
"deleteDocumentDialogTitle": "Eliminare il documento",
"deleteDocumentsDialogTitle": "Elimina documenti",
"throttlingError": "Alcuni documenti non sono stati eliminati a causa di un errore di limitazione della velocità. Riprova più tardi. Per evitare che si ripeta in futuro, valuta la possibilità di aumentare la velocità effettiva nel tuo contenitore o database.",
"deleteFailed": "Eliminazione documento/i non riuscita ({{error}})",
"missingShardProperty": "Nel documento manca la proprietà di partizione: {{partitionKeyProperty}}",
"refreshGridFailed": "Aggiornamento griglia documenti non riuscito",
"confirmDelete": "Eliminare {{documentName}}?",
"confirmDeleteTitle": "Conferma eliminazione",
"selectedItems": "i {{count}} elementi selezionati",
"selectedItem": "l'elemento selezionato",
"selectedDocuments": "i {{count}} documenti selezionati",
"selectedDocument": "il documento selezionato",
"deleteDocumentFailedLog": "Non è possibile eliminare il documento {{documentId}} con codice di stato {{statusCode}}",
"deleteSuccessLog": "Eliminazione di {{count}} documento/i eseguita correttamente",
"deleteThrottledLog": "Non è possibile eliminare {{count}} documento/i a causa di un errore di tipo \"Richiesta troppo grande\" (429). Nuovo tentativo in corso...",
"missingShardKeyLog": "Non è possibile salvare il nuovo documento: chiave di partizione del documento non definita",
"filterTooltip": "Digitare un predicato di query o sceglierne uno dall'elenco.",
"loadMore": "Carica altro",
"documentEditor": "Editor di documenti",
"savedFilters": "Filtri salvati",
"defaultFilters": "Filtri predefiniti",
"abort": "Interrompi",
"deletingDocuments": "Eliminazione di {{count}} documento/i",
"deletedDocumentsSuccess": "Eliminazione di {{count}} documento/i eseguita correttamente.",
"deleteAborted": "L'eliminazione di uno o più documenti è stata interrotta.",
"failedToDeleteDocuments": "Non è possibile eliminare {{count}} documento/i.",
"requestTooLargeBase": "Non è possibile eliminare alcune richieste a causa di un'eccezione di tipo \"Richiesta troppo grande\" (429)",
"retriedSuccessfully": "ma un nuovo tentativo è andato a buon fine.",
"retryingNow": "Nuovo tentativo in corso.",
"increaseThroughputTip": "Per evitare che si ripeta in futuro, valuta la possibilità di aumentare la velocità effettiva nel tuo contenitore o database.",
"numberOfSelectedDocuments": "Numero di documenti selezionati: {{count}}",
"mongoFilterPlaceholder": "Digitare un predicato di query (ad esempio {\"id\":\"foo\"}), sceglierne uno dall'elenco a discesa oppure lasciare vuoto il campo per eseguire la query su tutti i documenti.",
"sqlFilterPlaceholder": "Digitare un predicato di query (ad esempio WHERE c.id=\"1\"), sceglierne uno dall'elenco a discesa oppure lasciare vuoto il campo per eseguire la query su tutti i documenti.",
"error": "Errore",
"warning": "Avviso"
},
"query": {
"executeQuery": "Esegui query",
"executeSelection": "Esegui selezione",
"saveQuery": "Salva query",
"downloadQuery": "Scarica query",
"cancelQuery": "Annulla query",
"openSavedQueries": "Apri query salvate",
"vertical": "Verticale",
"horizontal": "Orizzontale",
"view": "Visualizza",
"editingQuery": "Modifica della query"
},
"storedProcedure": {
"id": "ID stored procedure",
"idPlaceholder": "Immettere il nuovo ID stored procedure",
"idAriaLabel": "ID stored procedure",
"body": "Corpo della stored procedure",
"bodyAriaLabel": "Corpo stored procedure",
"successfulExecution": "Stored procedure eseguita correttamente",
"resultAriaLabel": "Eseguire il risultato della stored procedure",
"logsAriaLabel": "Eseguire log delle stored procedure",
"errors": "Errori:",
"errorDetailsAriaLabel": "Collegamento dettagli errori",
"moreDetails": "Altri dettagli",
"consoleLogTab": "console.log"
},
"trigger": {
"id": "ID trigger",
"idPlaceholder": "Immettere il nuovo ID trigger",
"type": "Tipo di trigger",
"operation": "Operazione trigger",
"body": "Corpo trigger",
"bodyAriaLabel": "Corpo del trigger",
"pre": "Pre",
"post": "Pubblicare",
"all": "Tutti",
"operationCreate": "Crea",
"operationDelete": "Elimina",
"operationReplace": "Sostituisci"
},
"udf": {
"id": "ID funzione definita dall'utente",
"idPlaceholder": "Immettere l'ID della nuova funzione definita dall'utente",
"body": "Corpo della funzione definita dall'utente",
"bodyAriaLabel": "Corpo della funzione definita dall'utente"
},
"conflicts": {
"unsavedChanges": "Modifiche non salvate",
"changesWillBeLost": "Le modifiche andranno perse. Continuare?",
"resolveConflictFailed": "Risoluzione conflitto non riuscita",
"deleteConflictFailed": "Non è possibile eliminare il conflitto",
"refreshGridFailed": "Aggiornamento griglia documenti non riuscito"
},
"mongoShell": {
"title": "Shell Mongo"
}
},
"panes": {
"deleteDatabase": {
"panelTitle": "Elimina {{databaseName}}",
"warningMessage": "Avviso! L'azione che si sta per eseguire non può essere annullata. Se si continua, la risorsa verrà definitivamente eliminata insieme a tutte le relative risorse figlio.",
"confirmPrompt": "Conferma digitando l'ID {{databaseName}} (nome)",
"inputMismatch": "Il nome di input {{databaseName}} \"{{input}}\" non corrisponde all'elemento {{databaseName}} selezionato \"{{selectedId}}\"",
"feedbackTitle": "Aiutaci a migliorare Azure Cosmos DB!",
"feedbackReason": "Qual è il motivo per cui si sta eliminando {{databaseName}}?"
},
"deleteCollection": {
"panelTitle": "Elimina {{collectionName}}",
"confirmPrompt": "Conferma digitando l'ID {{collectionName}}",
"inputMismatch": "L'ID input {{input}} non corrisponde all'elemento {{selectedId}} selezionato",
"feedbackTitle": "Aiutaci a migliorare Azure Cosmos DB!",
"feedbackReason": "Qual è il motivo per cui si sta eliminando {{collectionName}}?"
},
"addDatabase": {
"databaseLabel": "Database {{suffix}}",
"databaseIdLabel": "ID database",
"keyspaceIdLabel": "ID spazio chiavi",
"databaseIdPlaceholder": "Digitare un nuovo ID {{databaseLabel}}",
"databaseTooltip": "Un {{databaseLabel}} è un contenitore logico di una o più {{collectionsLabel}}",
"shareThroughput": "Condividi velocità effettiva in {{collectionsLabel}}",
"shareThroughputTooltip": "La velocità effettiva con provisioning al livello {{databaseLabel}} sarà condivisa tra tutte le {{collectionsLabel}} all'interno di {{databaseLabel}}.",
"greaterThanError": "Immettere un valore maggiore di {{minValue}} per la velocità effettiva di Autopilot",
"acknowledgeSpendError": "Confermare la spesa stimata di {{period}}."
},
"addCollection": {
"createNew": "Crea nuovo",
"useExisting": "Usa esistente",
"databaseTooltip": "Un database è analogo a uno spazio dei nomi. È l'unità di gestione per un set di {{collectionName}}.",
"shareThroughput": "Condividi velocità effettiva in {{collectionName}}",
"shareThroughputTooltip": "La velocità effettiva configurata a livello di database sarà condivisa tra tutte le {{collectionName}} all'interno del database.",
"collectionIdLabel": "ID {{collectionName}}",
"collectionIdTooltip": "Identificatore univoco per {{collectionName}} e usato per il routing basato su IP in REST e in tutti gli SDK.",
"collectionIdPlaceholder": "Ad esempio, {{collectionName}}1",
"collectionIdAriaLabel": "ID {{collectionName}}, esempio {{collectionName}}1",
"existingDatabaseAriaLabel": "Sceglierne un id {{databaseName}} esistente",
"existingDatabasePlaceholder": "Sceglierne un id {{databaseName}} esistente",
"indexing": "Indicizzazione",
"turnOnIndexing": "Attiva indicizzazione",
"automatic": "Automatico",
"turnOffIndexing": "Disattiva indicizzazione",
"off": "Disattivato",
"sharding": "Partizionamento orizzontale",
"shardingTooltip": "Le raccolte partizionate distribuiscono i dati su molti set di repliche (partizioni) per ottenere scalabilità illimitata. Le raccolte partizionate richiedono la scelta di una chiave di partizione (campo) per distribuire uniformemente i dati.",
"unsharded": "Non partizionato",
"unshardedLabel": "Non partizionato (limite di 20 GB)",
"sharded": "Partizionato",
"addPartitionKey": "Aggiungi chiave di partizione gerarchica",
"hierarchicalPartitionKeyInfo": "Questa funzionalità consente di partizionare i dati con fino a tre livelli di chiavi per una migliore distribuzione dei dati. Richiede .NET V3, Java V4 SDK o JavaScript V3 SDK in anteprima.",
"provisionDedicatedThroughput": "Eseguire il provisioning della velocità effettiva dedicata per {{collectionName}}",
"provisionDedicatedThroughputTooltip": "È possibile effettuare facoltativamente il provisioning di una velocità effettiva dedicata per un {{collectionName}} di un database che ha già una velocità effettiva con provisioning. Questa velocità effettiva dedicata non sarà condivisa con altri {{collectionNamePlural}} nel database e non verrà conteggiata nella velocità effettiva con provisioning per il database. Questa velocità effettiva verrà fatturata in aggiunta a quella con provisioning a livello di database.",
"uniqueKeysPlaceholderMongo": "Percorsi separati da virgole, ad esempio, firstName,address.zipCode",
"uniqueKeysPlaceholderSql": "Percorsi separati da virgole, ad esempio /firstName,/address/zipCode",
"addUniqueKey": "Aggiungi chiave univoca",
"enableAnalyticalStore": "Abilita archivio analitico",
"disableAnalyticalStore": "Disabilita archivio analitico",
"on": "Attivato",
"analyticalStoreSynapseLinkRequired": "Il Collegamento ad Azure Synapse è necessario per creare un archivio analitico {{collectionName}}. Abilita Collegamento ad Azure Synapse per questo account Cosmos DB.",
"enable": "Abilita",
"containerVectorPolicy": "Criteri vettore contenitore",
"containerFullTextSearchPolicy": "Criterio di ricerca full-text contenitore",
"advanced": "Avanzate",
"mongoIndexingTooltip": "Il campo _id è indicizzato per impostazione predefinita. La creazione di un indice di caratteri jolly per tutti i campi ottimizza le query ed è consigliata per lo sviluppo.",
"createWildcardIndex": "Creare un indice di caratteri jolly su tutti i campi",
"legacySdkCheckbox": "L'applicazione usa una versione precedente di Cosmos .NET o Java SDK (.NET V1 o Java V2)",
"legacySdkInfo": "Per garantire la compatibilità con SDK meno recenti, il contenitore creato utilizzerà uno schema di partizionamento legacy che supporta valori di chiave di partizione di dimensioni di fino a 101 byte. Se questa opzione è abilitata, non sarà possibile usare chiavi di partizione gerarchiche.",
"indexingOnInfo": "Tutte le proprietà nei documenti verranno indicizzate per impostazione predefinita per query flessibili ed efficienti.",
"indexingOffInfo": "L'indicizzazione verrà disattivata. Consigliato se non è necessario eseguire query o se si effettuano solo operazioni chiave-valore.",
"indexingOffWarning": "Creando questo contenitore con indicizzazione disattivata, non sarà possibile modificare i criteri di indicizzazione. Le modifiche sono consentite solo su contenitori con un criterio di indicizzazione attivo.",
"acknowledgeSpendErrorMonthly": "Confermare la spesa mensile stimata.",
"acknowledgeSpendErrorDaily": "Confermare la spesa giornaliera stimata.",
"unshardedMaxRuError": "Le raccolte non partizionate supportano fino a 10.000 UR",
"acknowledgeShareThroughputError": "Confermare il costo stimato di questa velocità effettiva dedicata.",
"vectorPolicyError": "Correggere gli errori nei criteri sul vettore contenitore",
"fullTextSearchPolicyError": "Correggere gli errori nei criteri di ricerca full-text del contenitore",
"addingSampleDataSet": "Aggiunta dei set di dati di esempio"
},
"addCollectionUtility": {
"shardKeyTooltip": "La chiave di partizione (campo) viene usata per distribuire i dati su molti set di repliche (partizioni) per ottenere scalabilità illimitata. È fondamentale scegliere un campo che distribuisca uniformemente i dati.",
"partitionKeyTooltip": "{{partitionKeyName}} viene usata per distribuire automaticamente i dati tra le partizioni per la scalabilità. Scegliere una proprietà nel documento JSON che abbia un'ampia gamma di valori e distribuisca uniformemente il volume delle richieste.",
"partitionKeyTooltipSqlSuffix": " Per carichi di lavoro piccoli e con molte letture o per carichi di qualsiasi dimensione con molte scritture, ID è spesso una buona scelta.",
"shardKeyLabel": "Chiave di partizione",
"partitionKeyLabel": "Chiave di partizione",
"shardKeyPlaceholder": "Ad esempio, categoryId",
"partitionKeyPlaceholderDefault": "Ad esempio, /address",
"partitionKeyPlaceholderFirst": "Obbligatorio - prima chiave di partizione, ad esempio /TenantId",
"partitionKeyPlaceholderSecond": "seconda chiave di partizione, ad esempio /UserId",
"partitionKeyPlaceholderThird": "terza chiave di partizione, ad esempio /SessionId",
"partitionKeyPlaceholderGraph": "Ad esempio, /address/zipCode",
"uniqueKeysTooltip": "Le chiavi univoche permettono agli sviluppatori di aggiungere un livello di integrità dei dati al database. Creando un criterio di chiave univoca alla creazione del contenitore, si garantisce l'unicità di uno o più valori per chiave di partizione.",
"uniqueKeysLabel": "Chiavi univoche",
"analyticalStoreLabel": "Archivio analitico",
"analyticalStoreTooltip": "Abilitare la funzionalità di archivio analitico per eseguire analisi near real-time sui dati operativi, senza influire sulle prestazioni dei carichi di lavoro transazionali.",
"analyticalStoreDescription": "Abilitare la funzionalità di archivio analitico per eseguire analisi near real-time sui dati operativi, senza influire sulle prestazioni dei carichi di lavoro transazionali.",
"vectorPolicyTooltip": "Descrivere le proprietà nei dati che contengono vettori, in modo che possano essere rese disponibili per query di similarità."
},
"settings": {
"pageOptions": "Opzioni pagina",
"pageOptionsDescription": "Scegliere Personalizzato per specificare un numero fisso di risultati della query da visualizzare, oppure Senza limiti per mostrare quanti più risultati possibile per pagina.",
"queryResultsPerPage": "Risultati query per pagina",
"queryResultsPerPageTooltip": "Immettere il numero di risultati della query da visualizzare per pagina.",
"customQueryItemsPerPage": "Elementi query personalizzati per pagina",
"custom": "Personalizzato",
"unlimited": "Senza limiti",
"entraIdRbac": "Abilita controllo degli accessi in base al ruolo per Entra ID",
"entraIdRbacDescription": "Scegliere Automatico per abilitare automaticamente il controllo degli accessi in base al ruolo di Entra ID. True/False per forzare l'abilitazione/disabilitazione del controllo degli accessi in base al ruolo di Entra ID.",
"true": "Vero",
"false": "Falso",
"regionSelection": "Selezione area",
"regionSelectionDescription": "Modifica l'area geografica che il client Cosmos usa per accedere all'account.",
"selectRegion": "Seleziona area",
"selectRegionTooltip": "Modifica l'endpoint dell'account usato per eseguire le operazioni client.",
"globalDefault": "Globale (impostazione predefinita)",
"readWrite": "(Lettura/Scrittura)",
"read": "(Lettura)",
"queryTimeout": "Timeout query",
"queryTimeoutDescription": "Quando una query raggiunge un limite di tempo specificato, viene mostrato un popup con l'opzione per annullare la query, a meno che non sia stato abilitato l'annullamento automatico.",
"enableQueryTimeout": "Abilita timeout query",
"queryTimeoutMs": "Timeout query (ms)",
"automaticallyCancelQuery": "Cancella automaticamente la query dopo il timeout",
"ruLimit": "Limite UR",
"ruLimitDescription": "Se una query supera un limite di UR configurato, la query verrà interrotta.",
"enableRuLimit": "Abilita limite UR",
"ruLimitLabel": "Limite UR (UR)",
"defaultQueryResults": "Visualizzazione predefinita dei risultati della query",
"defaultQueryResultsDescription": "Selezionare la visualizzazione predefinita da usare per mostrare i risultati della query.",
"retrySettings": "Impostazioni nuovi tentativi",
"retrySettingsDescription": "Criteri di ripetizione associati alle richieste limitate durante le query di CosmosDB.",
"maxRetryAttempts": "Numero massimo di nuovi tentativi",
"maxRetryAttemptsTooltip": "Numero massimo di nuovi tentativi da eseguire per una richiesta. Valore predefinito 9.",
"fixedRetryInterval": "Intervallo fisso tra tentativi (ms)",
"fixedRetryIntervalTooltip": "Intervallo tra tentativi fisso di attesa in millisecondi tra ogni tentativo, ignorando il valore retryAfter restituito nella risposta. Il valore predefinito è 0 millisecondi.",
"maxWaitTime": "Tempo massimo di attesa (s)",
"maxWaitTimeTooltip": "Tempo massimo di attesa in secondi per una richiesta durante i nuovi tentativi. Il valore predefinito è 30 secondi.",
"enableContainerPagination": "Abilita impaginazione contenitore",
"enableContainerPaginationDescription": "Carica 50 contenitori alla volta. Attualmente, i contenitori non vengono caricati in ordine alfanumerico.",
"enableCrossPartitionQuery": "Abilita query su più partizioni",
"enableCrossPartitionQueryDescription": "Invia più di una richiesta durante l'esecuzione di una query. Sono necessarie più richieste se l'ambito della query non è limitato a un singolo valore di chiave di partizione.",
"maxDegreeOfParallelism": "Massimo grado di parallelismo",
"maxDegreeOfParallelismDescription": "Ottiene o imposta il numero di operazioni simultanee eseguite lato client durante l'esecuzione parallela di query. Un valore positivo limita il numero di operazioni simultanee al valore impostato. Se impostato su un valore inferiore a 0, il sistema decide automaticamente quante operazioni simultanee eseguire.",
"maxDegreeOfParallelismQuery": "Esegui query fino al massimo grado di parallelismo.",
"priorityLevel": "Livello di priorità",
"priorityLevelDescription": "Imposta il livello di priorità per le richieste del piano dati da Esplora dati quando si usa Esecuzione basata sulla priorità. Se si seleziona \"Nessuno\", Esplora dati non specificherà il livello di priorità e verrà usato il livello predefinito lato server.",
"displayGremlinQueryResults": "Visualizza i risultati della query Gremlin come:",
"displayGremlinQueryResultsDescription": "Selezionare Graph per visualizzare automaticamente i risultati della query come grafico o JSON per visualizzarli come JSON.",
"graph": "Graph",
"json": "JSON",
"graphAutoVisualization": "Visualizzazione automatica Graph",
"enableSampleDatabase": "Abilita database di esempio",
"enableSampleDatabaseDescription": "Questo è un database e una raccolta di esempio con dati prodotto sintetici che è possibile usare per esplorare le query NoSQL. Verrà visualizzato come un altro database nell'interfaccia Esplora dati, ed è creato e mantenuto da Microsoft gratuitamente.",
"enableSampleDbAriaLabel": "Abilita database di esempio per l'esplorazione delle query",
"guidRepresentation": "Dichiarazione GUID",
"guidRepresentationDescription": "GuidRepresentation in MongoDB indica come gli identificatori univoci globali (GUID) vengono serializzati e deserializzati quando archiviati in documenti BSON. Si applica a tutte le operazioni sui documenti.",
"advancedSettings": "Impostazioni avanzate",
"ignorePartitionKey": "Ignora chiave di partizione durante l'aggiornamento del documento",
"ignorePartitionKeyTooltip": "Se selezionato, il valore della chiave di partizione non verrà usato per individuare il documento durante le operazioni di aggiornamento. Usare solo se gli aggiornamenti del documento non riescono a causa di una chiave di partizione anomala.",
"clearHistory": "Cancella cronologia",
"clearHistoryConfirm": "Continuare?",
"clearHistoryDescription": "Questa azione cancellerà tutte le personalizzazioni per questo account in questo browser, tra cui:",
"clearHistoryTabLayout": "Reimpostare il layout di scheda personalizzato, incluse le posizioni della barra di divisione",
"clearHistoryTableColumns": "Cancellare le preferenze di colonna della tabella, incluse le colonne personalizzate",
"clearHistoryFilters": "Cancella cronologia filtri",
"clearHistoryRegion": "Reimposta la selezione dell'area geografica su globale",
"increaseValueBy1000": "Aumentare il valore di 1000",
"decreaseValueBy1000": "Riduci valore di 1000",
"none": "Nessuno",
"low": "Basso",
"high": "Alto",
"automatic": "Automatico",
"enhancedQueryControl": "Controllo query avanzato",
"enableQueryControl": "Abilita controllo query",
"explorerVersion": "Versione di Explorer",
"accountId": "ID account",
"sessionId": "ID sessione",
"popupsDisabledError": "Non è stato possibile stabilire l'autorizzazione per questo account perché i popup sono disabilitati nel browser.\nAbilitare i popup per questo sito e fare clic sul pulsante \"Accedi per Entra ID\"",
"failedToAcquireTokenError": "Non è stato possibile acquisire il token di autorizzazione automaticamente. Fare clic sul pulsante \"Accedi per Entra ID\" per abilitare le operazioni di controllo degli accessi in base al ruolo di Entra ID"
},
"saveQuery": {
"panelTitle": "Salva query",
"setupCostMessage": "Per motivi di conformità, le query vengono salvate in un contenitore nell'account Azure Cosmos, in un database separato chiamato \"{{databaseName}}\". Per procedere, è necessario creare un contenitore nell'account, il costo aggiuntivo stimato è di 0,77 $ al giorno.",
"completeSetup": "Completa configurazione",
"noQueryNameError": "Nessun nome query specificato",
"invalidQueryContentError": "Contenuto query non valido specificato",
"failedToSaveQueryError": "Non è stato possibile salvare la query {{queryName}}",
"failedToSetupContainerError": "Non è stato possibile configurare un contenitore per le query salvate",
"accountNotSetupError": "Non è stato possibile salvare la query: l'account non è configurato per salvare query",
"name": "Nome"
},
"loadQuery": {
"noFileSpecifiedError": "Nessun file specificato",
"failedToLoadQueryError": "Non è stato possibile caricare la query",
"failedToLoadQueryFromFileError": "Non è stato possibile caricare la query dal file {{fileName}}",
"selectFilesToOpen": "Selezionare un documento di query",
"browseFiles": "Esplora"
},
"executeStoredProcedure": {
"enterInputParameters": "Inserisci i parametri di input (se presenti)",
"key": "Chiave",
"param": "Parametro",
"partitionKeyValue": "Valore chiave di partizione",
"value": "Valore",
"addNewParam": "Aggiungi nuovo parametro",
"addParam": "Aggiungi parametro",
"deleteParam": "Elimina parametro",
"invalidParamError": "Parametro non valido specificato: {{invalidParam}}",
"invalidParamConsoleError": "Parametro specificato non valido: {{invalidParam}} non è un valore letterale valido",
"stringType": "Stringa",
"customType": "Personalizzato"
},
"uploadItems": {
"noFilesSpecifiedError": "Non è stato specificato alcun file. Immettere almeno un file.",
"selectJsonFiles": "Seleziona Files JSON",
"selectJsonFilesTooltip": "Selezionare uno o più file JSON da caricare. Ogni file può contenere un singolo documento JSON o una matrice di documenti JSON. Le dimensioni combinate di tutti i file in una singola operazione di caricamento deve essere inferiore a 2 MB. Per set di dati più grandi, è possibile eseguire più operazioni di caricamento.",
"fileNameColumn": "NOME FILE",
"statusColumn": "STATO",
"uploadStatus": "{{numSucceeded}} creati, {{numThrottled}} con limitazione, {{numFailed}} errori",
"uploadedFiles": "File caricati"
},
"copyNotebook": {
"copyFailedError": "Non è stato possibile copiare {{name}} in {{destination}}",
"uploadFailedError": "Non è possibile caricare {{name}}",
"location": "Posizione",
"locationAriaLabel": "Posizione",
"selectLocation": "Selezionare una posizione del notebook in cui copiare",
"name": "Nome"
},
"publishNotebook": {
"publishFailedError": "Non è stato possibile pubblicare {{notebookName}} nella raccolta",
"publishDescription": "Quando viene pubblicato, questo notebook sarà visualizzato nella raccolta pubblica di Azure Cosmos DB. Assicurarsi di aver rimosso dati o output sensibili prima della pubblicazione.",
"publishPrompt": "Pubblicare e condividere \"{{name}}\" nella raccolta?",
"coverImage": "Immagine di copertina",
"coverImageUrl": "URL immagine di copertina",
"name": "Nome",
"description": "Descrizione",
"tags": "Tag",
"tagsPlaceholder": "Tag facoltativo 1, tag facoltativo 2",
"preview": "Anteprima",
"urlType": "URL",
"customImage": "Immagine personalizzata",
"takeScreenshot": "Crea screenshot",
"useFirstDisplayOutput": "Usa output prima visualizzazione",
"failedToCaptureOutput": "Non è stato possibile acquisire il primo output",
"outputDoesNotExist": "L'output non esiste per nessuna delle celle.",
"failedToConvertError": "Non è stato possibile convertire {{fileName}} nel formato base64",
"failedToUploadError": "Non è possibile caricare {{fileName}}"
},
"changePartitionKey": {
"failedToStartError": "Non è stato possibile avviare il processo di trasferimento dati",
"suboptimalPartitionKeyError": "Avviso: il sistema ha rilevato che la raccolta potrebbe usare una chiave di partizione non ottimale",
"description": "Quando si modifica la chiave di partizione di un contenitore, è necessario creare un contenitore di destinazione con la chiave corretta. È anche possibile selezionare un contenitore di destinazione esistente.",
"sourceContainerId": "ID {{collectionName}} origine",
"destinationContainerId": "ID {{collectionName}} destinazione",
"collectionIdTooltip": "Identificatore univoco per {{collectionName}} e usato per il routing basato su IP in REST e in tutti gli SDK.",
"collectionIdPlaceholder": "Ad esempio, {{collectionName}}1",
"collectionIdAriaLabel": "ID {{collectionName}}, esempio {{collectionName}}1",
"existingContainers": "Contenitori esistenti",
"partitionKeyWarning": "Il contenitore di destinazione non deve essere già presente. Esplora dati creerà un nuovo contenitore di destinazione per l'utente."
},
"cassandraAddCollection": {
"keyspaceLabel": "Nome spazio chiavi",
"keyspaceTooltip": "Selezionare uno spazio chiavi esistente o inserire un nuovo ID spazio chiavi.",
"tableIdLabel": "Immettere il comando CQL per creare la tabella.",
"enterTableId": "Immetti ID tabella",
"tableSchemaAriaLabel": "Schema della tabella",
"provisionDedicatedThroughput": "Eseguire il provisioning della velocità effettiva dedicata per questa tabella",
"provisionDedicatedThroughputTooltip": "È possibile effettuare facoltativamente il provisioning di una velocità effettiva dedicata per una tabella all'interno di uno spazio chiavi che ha già una velocità con provisioning. Questa velocità effettiva dedicata non sarà condivisa con altre tabelle nello spazio chiavi e non verrà conteggiata nella velocità con provisioning per lo spazio chiavi. Questa velocità effettiva verrà fatturata in aggiunta a quella con provisioning a livello di spazio chiavi."
},
"tables": {
"addProperty": "Aggiungi proprietà",
"addRow": "Aggiungi riga",
"addEntity": "Aggiungi entità",
"back": "indietro",
"nullFieldsWarning": "Avviso: i campi Null non saranno mostrati per la modifica.",
"propertyEmptyError": "{{property}} non può essere vuoto. Immettere un valore per {{property}}",
"whitespaceError": "{{property}} non può contenere spazi vuoti. Immettere un valore per {{property}} senza spazi vuoti",
"propertyTypeEmptyError": "Il tipo di proprietà non può essere vuoto. Selezionare un tipo dal menu a discesa per la proprietà {{property}}"
},
"tableQuerySelect": {
"selectColumns": "Selezionare le colonne da usare per eseguire la query.",
"availableColumns": "Colonne disponibili"
},
"tableColumnSelection": {
"selectColumns": "Selezionare le colonne da visualizzare nella vista degli elementi nel contenitore.",
"searchFields": "Campi di ricerca",
"reset": "Ripristina",
"partitionKeySuffix": " (chiave di partizione)"
},
"newVertex": {
"addProperty": "Aggiungi proprietà"
},
"addGlobalSecondaryIndex": {
"globalSecondaryIndexId": "ID contenitore indice secondario globale",
"globalSecondaryIndexIdPlaceholder": "Ad esempio, indexbyEmailId",
"projectionQuery": "Query di proiezione",
"projectionQueryPlaceholder": "SELEZIONA c.email, c.accountId DA c",
"projectionQueryTooltip": "Altre informazioni sulla definizione degli indici secondari globali.",
"disabledTitle": "È già in corso la creazione di un indice secondario globale. Attendere il completamento prima di crearne un altro."
},
"stringInput": {
"inputMismatchError": "L'input {{input}} non corrisponde all'elemento {{selectedId}} selezionato"
},
"panelInfo": {
"information": "Informazioni",
"moreDetails": "Altri dettagli"
}
}
}

View File

@@ -0,0 +1,727 @@
{
"common": {
"ok": "OK",
"cancel": "キャンセル",
"close": "閉じる",
"save": "保存",
"delete": "削除",
"update": "更新",
"discard": "破棄",
"execute": "実行",
"loading": "読み込み中",
"loadingEllipsis": "読み込み中...",
"next": "次へ",
"previous": "前へ",
"yes": "はい",
"no": "いいえ",
"result": "結果",
"learnMore": "詳細情報",
"getStarted": "開始する",
"retry": "再試行",
"apply": "適用",
"refresh": "最新の情報に更新",
"copy": "コピー",
"create": "作成",
"confirm": "確認",
"open": "開く",
"rename": "名前の変更",
"download": "ダウンロード",
"upload": "アップロード",
"connect": "接続",
"remove": "削除",
"load": "読み込み",
"publish": "公開",
"browse": "参照",
"increaseValueBy1": "値を 1 増加",
"decreaseValueBy1": "値を 1 減少"
},
"splashScreen": {
"title": {
"default": "Azure Cosmos DB へようこそ",
"postgres": "Azure Cosmos DB for PostgreSQL へようこそ",
"vcoreMongo": "Azure DocumentDB (MongoDB 互換) へようこそ"
},
"subtitle": {
"default": "あらゆるスケールに対応するグローバル分散型のマルチモデル データベース サーバー",
"getStarted": "サンプル データセット、ドキュメント、追加ツールを使用して開始してください。"
},
"quickStart": {
"title": "クイック スタートの起動",
"description": "クイック スタート チュートリアルを起動してサンプル データの使用を開始します"
},
"newCollection": {
"title": "新しい {{collectionName}}",
"description": "ストレージとスループット用の新しいコンテナーを作成します"
},
"samplesGallery": {
"title": "Azure Cosmos DB サンプル ギャラリー",
"description": "スケーラブルでインテリジェントなアプリ パターンを紹介するサンプルをご確認ください。今すぐ試して、Cosmos DB を使用して概念からコードにどれほど迅速に移行できるか確認してください"
},
"connectCard": {
"title": "接続",
"description": "独自に選択したツールの使用を優先しますか?接続に必要な接続文字列を検索します",
"pgAdmin": {
"title": "pgAdmin を使用して接続",
"description": "pgAdmin を優先しますか?ここで接続文字列を検索します"
},
"vsCode": {
"title": "VS Code で接続する",
"description": "Visual Studio Code で MongoDB および DocumentDB クラスターのクエリの実行と管理を行います"
}
},
"shell": {
"postgres": {
"title": "PostgreSQL シェル",
"description": "PostgreSQL のシェル インターフェイスを使用して、テーブルを作成し、データを操作します"
},
"vcoreMongo": {
"title": "Mongo シェル",
"description": "MongoDB のシェル インターフェイスを使用して、コレクションを作成し、データを操作します"
}
},
"teachingBubble": {
"newToPostgres": {
"headline": "Cosmos DB PGSQL を使用するのは初めてですか?",
"body": "ようこそ! Cosmos DB PGSQL を使用するのが初めてで、作業の開始に関するヘルプが必要な場合は、ここでサンプル データやクエリを見つけることができます。"
},
"resetPassword": {
"headline": "パスワードの作成",
"body": "パスワードをまだ変更していない場合は、今すぐ変更してください。"
},
"coachMark": {
"headline": "サンプル {{collectionName}} から開始する",
"body": "サンプル データを含むサンプル コンテナーを作成するように案内され、その後、データ エクスプローラーのツアーが表示されます。このツアーの開始を取り消して、自分で探索することもできます"
}
},
"sections": {
"recents": "最近使用したもの",
"clearRecents": "最近使用したものをクリアする",
"top3": "知っておくべき上位 3 つのこと",
"learningResources": "学習リソース",
"nextSteps": "次の手順",
"tipsAndLearnMore": "ヒントと詳細の確認",
"notebook": "ノートブック",
"needHelp": "ヘルプが必要ですか?"
},
"top3Items": {
"sql": {
"advancedModeling": {
"title": "高度なモデリング パターン",
"description": "データベースを最適化するための高度な戦略について説明します。"
},
"partitioning": {
"title": "パーティション分割のベスト プラクティス",
"description": "データ モデルとパーティション分割戦略の適用について説明します。"
},
"resourcePlanning": {
"title": "リソース要件の計画",
"description": "さまざまな構成の選択肢について理解を深めます。"
}
},
"mongo": {
"whatIsMongo": {
"title": "MongoDB API とは",
"description": "Azure Cosmos DB for MongoDB とその機能について理解します。"
},
"features": {
"title": "機能と構文",
"description": "利点と機能を確認します"
},
"migrate": {
"title": "データの移行",
"description": "データを移動するための移行前の手順"
}
},
"cassandra": {
"buildJavaApp": {
"title": "Java アプリのビルド",
"description": "SDK を使用して Java アプリを作成します。"
},
"partitioning": {
"title": "パーティション分割のベスト プラクティス",
"description": "パーティション分割のしくみについて説明します。"
},
"requestUnits": {
"title": "要求ユニット (RU)",
"description": "RU 料金について理解します。"
}
},
"gremlin": {
"dataModeling": {
"title": "データ モデリング",
"description": "グラフ データ モデリングの推奨事項"
},
"partitioning": {
"title": "パーティション分割のベスト プラクティス",
"description": "パーティション分割のしくみについて確認します"
},
"queryData": {
"title": "データのクエリを実行",
"description": "Gremlin を使用してデータのクエリを実行しています"
}
},
"tables": {
"whatIsTable": {
"title": "Table API とは",
"description": "Azure Cosmos DB for Table とその機能について理解します"
},
"migrate": {
"title": "データの移行",
"description": "データを移行する方法について確認します"
},
"faq": {
"title": "Azure Cosmos DB for Table に関する FAQ",
"description": "Azure Cosmos DB for Table に関する一般的な質問"
}
}
},
"learningResources": {
"shortcuts": {
"title": "Data Explorer のキーボード ショートカット",
"description": "データ エクスプローラーを操作するためのキーボード ショートカットについて説明します。"
},
"liveTv": {
"title": "基礎を確認する",
"description": "Azure Cosmos DB のライブ テレビ ショーの紹介や使い方に関するビデオをご覧ください。"
},
"sql": {
"sdk": {
"title": "SDK を使用して開始",
"description": "Azure Cosmos DB SDK について説明します。"
},
"migrate": {
"title": "データの移行",
"description": "Azure サービスとオープンソース ソリューションを使用してデータを移行します。"
}
},
"mongo": {
"nodejs": {
"title": "Node.js を使用してアプリをビルド",
"description": "Node.js アプリを作成します。"
},
"gettingStarted": {
"title": "作業の開始ガイド",
"description": "開始するための基本情報について説明します。"
}
},
"cassandra": {
"createContainer": {
"title": "コンテナーの作成",
"description": "コンテナーの作成オプションについて理解を深めます。"
},
"throughput": {
"title": "スループットのプロビジョニング",
"description": "スループットを構成する方法について説明します。"
}
},
"gremlin": {
"getStarted": {
"title": "開始 ",
"description": "Gremlin コンソールを使用して作成、クエリの実行、走査を行います"
},
"importData": {
"title": "グラフ データのインポート",
"description": "BulkExecutor を使用した一括インジェスト データについて確認します"
}
},
"tables": {
"dotnet": {
"title": ".NET アプリのビルド",
"description": ".NET アプリから Azure Cosmos DB for Table にアクセスする方法。"
},
"java": {
"title": "Java アプリのビルド",
"description": "Java SDK を使用して Azure Cosmos DB for Table アプリを作成します "
}
}
},
"nextStepItems": {
"postgres": {
"dataModeling": "データ モデリング",
"distributionColumn": "ディストリビューション列を選択する方法",
"buildApps": "Python/Java/Django を使用してアプリをビルド"
},
"vcoreMongo": {
"migrateData": "データの移行",
"vectorSearch": "ベクトル検索を使用して AI アプリをビルド",
"buildApps": "Nodejs を使用してアプリをビルド"
}
},
"learnMoreItems": {
"postgres": {
"performanceTuning": "パフォーマンス チューニング",
"diagnosticQueries": "有用な診断クエリ",
"sqlReference": "分散 SQL リファレンス"
},
"vcoreMongo": {
"vectorSearch": "ベクトル検索",
"textIndexing": "テキストのインデックス作成",
"troubleshoot": "一般的な問題のトラブルシューティング"
}
},
"fabric": {
"buildTitle": "データベースのビルド",
"useTitle": "データベースの使用",
"newContainer": {
"title": "新しいコンテナー",
"description": "データを格納する先のコンテナーを作成します"
},
"sampleData": {
"title": "サンプル データ",
"description": "データベースにサンプル データを読み込みます"
},
"sampleVectorData": {
"title": "サンプル ベクトル データ",
"description": "text-embedding-ada-002 を使用してサンプル ベクトル データを読み込みます"
},
"appDevelopment": {
"title": "アプリ開発",
"description": "SDK を使用してアプリをビルドするには、ここから開始してください"
},
"sampleGallery": {
"title": "サンプル ギャラリー",
"description": "実際のエンド ツー エンドのサンプルを取得します"
}
},
"sampleDataDialog": {
"title": "サンプル データ",
"startButton": "開始",
"createPrompt": "コンテナー \"{{containerName}}\" を作成し、そこにサンプル データをインポートしてください。これには数分かかる場合があります。",
"creatingContainer": "コンテナー \"{{containerName}}\" を作成しています...",
"importingData": "データを \"{{containerName}}\" にインポートしています...",
"success": "サンプル データを含む \"{{containerName}}\" が正常に作成されました。",
"errorContainerExists": "データベース \"{{databaseName}}\" のコンテナー \"{{containerName}}\" は既に存在します。削除してから、もう一度お試しください。",
"errorCreateContainer": "コンテナーを作成できませんでした: {{error}}",
"errorImportData": "データをインポートできませんでした: {{error}}"
}
},
"contextMenu": {
"newContainer": "新しい {{containerName}}",
"restoreContainer": "{{containerName}} の復元",
"deleteDatabase": "{{databaseName}} の削除",
"deleteContainer": "{{containerName}} の削除",
"newSqlQuery": "新しい SQL クエリ",
"newQuery": "新しいクエリ",
"openMongoShell": "Mongo シェルを開く",
"newShell": "新しいシェル",
"openCassandraShell": "Cassandra シェルを開く",
"newStoredProcedure": "新しいストアド プロシージャ",
"newUdf": "新しい UDF",
"newTrigger": "新しいトリガー",
"deleteStoredProcedure": "ストアド プロシージャの削除",
"deleteTrigger": "トリガーの削除",
"deleteUdf": "ユーザー定義関数の削除"
},
"tabs": {
"documents": {
"newItem": "新しい項目",
"newDocument": "新規ドキュメント",
"uploadItem": "項目のアップロード",
"applyFilter": "フィルターの適用",
"unsavedChanges": "未保存の変更",
"unsavedChangesMessage": "保存されていない変更はすべて失われます。続行しますか?",
"createDocumentFailed": "ドキュメントの作成に失敗しました",
"updateDocumentFailed": "ドキュメントの更新に失敗しました",
"documentDeleted": "ドキュメントが正常に削除されました。",
"deleteDocumentDialogTitle": "ドキュメントの削除",
"deleteDocumentsDialogTitle": "ドキュメントの削除",
"throttlingError": "レート制限エラーにより、一部のドキュメントの削除に失敗しました。後でもう一度お試しください。今後これを防ぐには、コンテナーまたはデータベースのスループットを増やすことを検討してください。",
"deleteFailed": "ドキュメントの削除に失敗しました ({{error}})",
"missingShardProperty": "ドキュメントにシャード プロパティがありません: {{partitionKeyProperty}}",
"refreshGridFailed": "ドキュメント グリッドの更新に失敗しました",
"confirmDelete": "{{documentName}} を削除しますか?",
"confirmDeleteTitle": "削除の確認",
"selectedItems": "選択した {{count}} 個の項目",
"selectedItem": "選択した項目",
"selectedDocuments": "選択した {{count}} 件のドキュメント",
"selectedDocument": "選択したドキュメント",
"deleteDocumentFailedLog": "状態コード {{statusCode}} で、ドキュメント {{documentId}} を削除できませんでした",
"deleteSuccessLog": "{{count}} 件のドキュメントが正常に削除されました",
"deleteThrottledLog": "\"要求が大きすぎる\" (429) エラーにより {{count}} 件のドキュメントを削除できませんでした。再試行しています...",
"missingShardKeyLog": "新しいドキュメントを保存できませんでした: ドキュメントのシャード キーが定義されていません",
"filterTooltip": "クエリ述語を入力するか、一覧から 1 つ選択してください。",
"loadMore": "さらに読み込む",
"documentEditor": "ドキュメント エディター",
"savedFilters": "保存済みのフィルター",
"defaultFilters": "既定のフィルター",
"abort": "中止",
"deletingDocuments": "{{count}} 件のドキュメントを削除しています",
"deletedDocumentsSuccess": "{{count}} 件のドキュメントが正常に削除されました。",
"deleteAborted": "ドキュメントの削除が中止されました。",
"failedToDeleteDocuments": "{{count}} 件のドキュメントを削除できませんでした。",
"requestTooLargeBase": "\"要求が大きすぎる\" 例外 (429) により、一部の削除要求が失敗しました",
"retriedSuccessfully": "正常に再試行されました。",
"retryingNow": "再試行しています。",
"increaseThroughputTip": "今後これを防ぐには、コンテナーまたはデータベースのスループットを増やすことを検討してください。",
"numberOfSelectedDocuments": "選択したドキュメントの数: {{count}}",
"mongoFilterPlaceholder": "クエリ述語 (例: {\"id\":\"foo\"}) を入力するか、ドロップダウン リストから 1 つ選択するか、すべてのドキュメントをクエリする場合は空のままにします。",
"sqlFilterPlaceholder": "クエリ述語 (WHERE c.id=\"1\" など) を入力するか、ドロップダウン リストからクエリ述語を選択するか、空のままにしてすべてのドキュメントのクエリを実行します。",
"error": "エラー",
"warning": "警告"
},
"query": {
"executeQuery": "クエリの実行",
"executeSelection": "選択範囲の実行",
"saveQuery": "クエリの保存",
"downloadQuery": "クエリのダウンロード",
"cancelQuery": "クエリのキャンセル",
"openSavedQueries": "保存したクエリを開く",
"vertical": "縦",
"horizontal": "水平",
"view": "表示",
"editingQuery": "クエリを編集しています"
},
"storedProcedure": {
"id": "ストアド プロシージャ ID",
"idPlaceholder": "新しいストアド プロシージャ ID を入力してください",
"idAriaLabel": "ストアド プロシージャ ID",
"body": "ストアド プロシージャ本文",
"bodyAriaLabel": "ストアド プロシージャ本文",
"successfulExecution": "ストアド プロシージャの正常な実行",
"resultAriaLabel": "ストアド プロシージャの実行結果",
"logsAriaLabel": "ストアド プロシージャの実行ログ",
"errors": "エラー:",
"errorDetailsAriaLabel": "エラーの詳細リンク",
"moreDetails": "その他の詳細",
"consoleLogTab": "console.log"
},
"trigger": {
"id": "トリガー ID",
"idPlaceholder": "新しいトリガー ID を入力してください",
"type": "トリガーの種類",
"operation": "トリガーの操作",
"body": "トリガー本文",
"bodyAriaLabel": "トリガー本文",
"pre": "プレ",
"post": "投稿",
"all": "すべて",
"operationCreate": "作成",
"operationDelete": "削除",
"operationReplace": "置換"
},
"udf": {
"id": "ユーザー定義関数 ID",
"idPlaceholder": "新しいユーザー定義関数 ID を入力してください",
"body": "ユーザー定義関数本文",
"bodyAriaLabel": "ユーザー定義関数本文"
},
"conflicts": {
"unsavedChanges": "未保存の変更",
"changesWillBeLost": "変更が失われます。続行しますか?",
"resolveConflictFailed": "競合の解決に失敗しました",
"deleteConflictFailed": "削除の競合が失敗しました",
"refreshGridFailed": "ドキュメント グリッドの更新に失敗しました"
},
"mongoShell": {
"title": "Mongo シェル"
}
},
"panes": {
"deleteDatabase": {
"panelTitle": "{{databaseName}} の削除",
"warningMessage": "警告!実行しようとしている操作を元に戻すことはできません。続行すると、このリソースとそのすべての子リソースが完全に削除されます。",
"confirmPrompt": "{{databaseName}} ID (名前) を入力して確認してください",
"inputMismatch": "入力 {{databaseName}} 名 \"{{input}}\" が、選択した {{databaseName}} \"{{selectedId}}\" と一致しません",
"feedbackTitle": "Azure Cosmos DB の改善にご協力ください。",
"feedbackReason": "この {{databaseName}} を削除する理由を教えてください。"
},
"deleteCollection": {
"panelTitle": "{{collectionName}} の削除",
"confirmPrompt": "{{collectionName}} ID を入力して確認してください",
"inputMismatch": "入力 ID {{input}} が選択した {{selectedId}} と一致しません",
"feedbackTitle": "Azure Cosmos DB の改善にご協力ください。",
"feedbackReason": "この {{collectionName}} を削除する理由を教えてください。"
},
"addDatabase": {
"databaseLabel": "データベース {{suffix}}",
"databaseIdLabel": "データベース ID",
"keyspaceIdLabel": "キースペース ID",
"databaseIdPlaceholder": "新しい {{databaseLabel}} ID を入力してください",
"databaseTooltip": "{{databaseLabel}} は 1 つ以上の {{collectionsLabel}} の論理コンテナーです",
"shareThroughput": "{{collectionsLabel}} 全体でスループットを共有する",
"shareThroughputTooltip": "{{databaseLabel}} レベルでプロビジョニングされたスループットは、{{collectionsLabel}} 内のすべての {{databaseLabel}} で共有されます。",
"greaterThanError": "オートパイロット スループットの {{minValue}} より大きい値を入力してください",
"acknowledgeSpendError": "毎月の推定 {{period}} 支出に同意してください。"
},
"addCollection": {
"createNew": "新規作成",
"useExisting": "既存のものを使用",
"databaseTooltip": "データベースは名前空間に類似しています。{{collectionName}} のセットの管理単位です。",
"shareThroughput": "{{collectionName}} 全体でスループットを共有する",
"shareThroughputTooltip": "データベース レベルで構成されたスループットは、データベース内のすべての {{collectionName}} で共有されます。",
"collectionIdLabel": "{{collectionName}} ID",
"collectionIdTooltip": "REST とすべての SDK を介した ID ベースのルーティングに使用される {{collectionName}} の一意識別子。",
"collectionIdPlaceholder": "例: {{collectionName}}1",
"collectionIdAriaLabel": "{{collectionName}} ID、例 {{collectionName}}1",
"existingDatabaseAriaLabel": "既存の {{databaseName}} ID を選択してください",
"existingDatabasePlaceholder": "既存の {{databaseName}} ID を選択してください",
"indexing": "インデックス作成",
"turnOnIndexing": "インデックス作成を有効にする",
"automatic": "自動",
"turnOffIndexing": "インデックス作成を無効にする",
"off": "オフ",
"sharding": "シャーディング",
"shardingTooltip": "シャード化されたコレクションは、無制限のスケーラビリティを実現するために、データを多数のレプリカ セット (シャード) に分割します。シャード コレクションでは、データを均等に分散するためにシャード キー (フィールド) を選択する必要があります。",
"unsharded": "シャードなし",
"unshardedLabel": "シャードなし (20 GB の制限)",
"sharded": "シャード化",
"addPartitionKey": "階層パーティション キーの追加",
"hierarchicalPartitionKeyInfo": "この機能を使用すると、データを最大 3 レベルのキーでパーティション分割して、データの分散を向上できます。.NET V3、Java V4 SDK、またはプレビュー JavaScript V3 SDK が必要です。",
"provisionDedicatedThroughput": "この {{collectionName}} の専用スループットをプロビジョニングする",
"provisionDedicatedThroughputTooltip": "必要に応じて、スループットがプロビジョニングされているデータベース内の {{collectionName}} に対して専用のスループットをプロビジョニングできます。この専用スループット量は、データベース内の他の {{collectionNamePlural}} と共有されず、データベース用にプロビジョニングしたスループットにはカウントされません。このスループットはデータベース レベルでプロビジョニングしたスループットに加えて課金されます。",
"uniqueKeysPlaceholderMongo": "コンマ区切りのパス (例: firstName,address.zipCode)",
"uniqueKeysPlaceholderSql": "コンマ区切りのパス (例: /firstName,/address/zipCode)",
"addUniqueKey": "一意キーの追加",
"enableAnalyticalStore": "分析ストアを有効にする",
"disableAnalyticalStore": "分析ストアを無効にする",
"on": "オン",
"analyticalStoreSynapseLinkRequired": "Azure Synapse リンクは、{{collectionName}} 分析ストアを作成するために必要です。この Cosmos DB アカウントで Synapse Link を有効にします。",
"enable": "有効にする",
"containerVectorPolicy": "コンテナー ベクトル ポリシー",
"containerFullTextSearchPolicy": "コンテナーのフルテキスト検索ポリシー",
"advanced": "詳細",
"mongoIndexingTooltip": "_id フィールドは、既定でインデックスが作成されます。すべてのフィールドにワイルドカード インデックスを作成すると、クエリが最適化され、開発に推奨されます。",
"createWildcardIndex": "すべてのフィールドにワイルドカード インデックスを作成する",
"legacySdkCheckbox": "アプリケーションで以前の Cosmos .NET または Java SDK バージョン (.NET V1 または Java V2) を使用しています",
"legacySdkInfo": "古い SDK との互換性を確保するため、作成されるコンテナーは最大 101 バイトのサイズのパーティション キー値のみをサポートするレガシ パーティション スキーマを使用します。これを有効にすると、階層パーティション キーは使用できません。",
"indexingOnInfo": "ドキュメント内のすべてのプロパティは、柔軟で効率的なクエリのために既定でインデックスが作成されます。",
"indexingOffInfo": "インデックス作成は無効になります。クエリを実行する必要がない、またはキー値操作のみを行う場合に推奨されます。",
"indexingOffWarning": "インデックス作成をオフにしてこのコンテナーを作成すると、インデックス作成ポリシーの変更はできません。インデックス作成ポリシーの変更は、インデックス作成ポリシーを持つコンテナーでのみ許可されます。",
"acknowledgeSpendErrorMonthly": "毎月の推定支出に同意してください。",
"acknowledgeSpendErrorDaily": "毎日の推定支出に同意してください。",
"unshardedMaxRuError": "シャーディングされていないコレクションでは、最大 10,000 RU がサポートされます",
"acknowledgeShareThroughputError": "この専用スループットの推定コストを確認してください。",
"vectorPolicyError": "コンテナー ベクトル ポリシーのエラーを修正してください",
"fullTextSearchPolicyError": "コンテナーのフルテキスト検索ポリシーのエラーを修正してください",
"addingSampleDataSet": "サンプル データ セットの追加"
},
"addCollectionUtility": {
"shardKeyTooltip": "シャード キー (フィールド) は、無制限のスケーラビリティを実現するために、多数のレプリカ セット (シャード) にデータを分割するために使用されます。データを均等に分散するフィールドを選択することが重要です。",
"partitionKeyTooltip": "{{partitionKeyName}} は、スケーラビリティのためにパーティション間でデータを自動的に分散するために使用されます。さまざまな値を持ち、要求ボリュームを均等に分散する JSON ドキュメントのプロパティを選択します。",
"partitionKeyTooltipSqlSuffix": " 読み取り負荷の高い小規模なワークロードや、任意のサイズの書き込み負荷の高いワークロードの場合、ID が適していることがよくあります。",
"shardKeyLabel": "シャード キー",
"partitionKeyLabel": "パーティション キー",
"shardKeyPlaceholder": "例: categoryId",
"partitionKeyPlaceholderDefault": "例: /address",
"partitionKeyPlaceholderFirst": "必須: 最初のパーティション キー (例: /TenantId)",
"partitionKeyPlaceholderSecond": "2 番目のパーティション キー (例: /UserId)",
"partitionKeyPlaceholderThird": "3 番目のパーティション キー 例: /SessionId",
"partitionKeyPlaceholderGraph": "例: /address/zipCode",
"uniqueKeysTooltip": "一意キーにより、開発者はデータベースにデータ整合性の層を追加できます。コンテナーの作成時に一意キー ポリシーを作成することで、パーティション キーごとに 1 つ以上の値の一意性を確保します。",
"uniqueKeysLabel": "一意キー",
"analyticalStoreLabel": "分析ストア",
"analyticalStoreTooltip": "分析ストア機能を有効にすると、トランザクション ワークロードのパフォーマンスに影響を与えずに、操作データに対してほぼリアルタイムの分析を実行できます。",
"analyticalStoreDescription": "分析ストア機能を有効にすると、トランザクション ワークロードのパフォーマンスに影響を与えずに、操作データに対してほぼリアルタイムの分析を実行できます。",
"vectorPolicyTooltip": "ベクトルを含むデータ内のプロパティを記述して、類似性クエリで使用できるようにします。"
},
"settings": {
"pageOptions": "ページ オプション",
"pageOptionsDescription": "[カスタム] を選択して表示するクエリ結果の固定数を指定するか、[無制限] を選択してページあたりのクエリ結果の数を無制限に表示します。",
"queryResultsPerPage": "ページあたりのクエリ結果",
"queryResultsPerPageTooltip": "ページごとに表示するクエリ結果の数を入力します。",
"customQueryItemsPerPage": "ページあたりのカスタム クエリ アイテム数",
"custom": "カスタム",
"unlimited": "無制限",
"entraIdRbac": "Entra ID RBAC を有効にする",
"entraIdRbacDescription": "[自動] を選択すると Entra ID RBAC が自動的に有効になります。強制的に有効または無効にする場合は True/False を選択します。",
"true": "True",
"false": "False",
"regionSelection": "リージョンの選択",
"regionSelectionDescription": "Cosmos Client がアカウントへのアクセスに使用するリージョンを変更します。",
"selectRegion": "リージョンの選択",
"selectRegionTooltip": "クライアント操作の実行に使用するアカウント エンドポイントを変更します。",
"globalDefault": "グローバル (既定)",
"readWrite": "(読み取り/書き込み)",
"read": "(読み取り)",
"queryTimeout": "クエリ タイムアウト",
"queryTimeoutDescription": "クエリが指定された制限時間に達すると、自動キャンセルが有効になっていない限り、クエリをキャンセルするオプションを含むポップアップが表示されます。",
"enableQueryTimeout": "クエリタイムアウトを有効にする",
"queryTimeoutMs": "クエリ タイムアウト (ms)",
"automaticallyCancelQuery": "タイムアウト後にクエリを自動的にキャンセルする",
"ruLimit": "RU 制限",
"ruLimitDescription": "クエリが構成された RU 制限を超えた場合、クエリは中止されます。",
"enableRuLimit": "RU 制限を有効にする",
"ruLimitLabel": "RU 制限 (RU)",
"defaultQueryResults": "既定のクエリ結果ビュー",
"defaultQueryResultsDescription": "クエリ結果を表示するときに使用する既定のビューを選択します。",
"retrySettings": "再試行の設定",
"retrySettingsDescription": "CosmosDB クエリ中に調整された要求に関連付けられている再試行ポリシー。",
"maxRetryAttempts": "最大再試行回数",
"maxRetryAttemptsTooltip": "要求に対して実行される再試行の最大数。既定値 9。",
"fixedRetryInterval": "固定再試行間隔 (ミリ秒)",
"fixedRetryIntervalTooltip": "応答の一部として返された retryAfter を無視して、各再試行の間に待機する固定の間隔 (ミリ秒単位)。既定値は 0 ミリ秒です。",
"maxWaitTime": "最大待機時間 (秒)",
"maxWaitTimeTooltip": "再試行が行われている間に要求を待機する最大待機時間 (秒)。既定値は 30 秒です。",
"enableContainerPagination": "コンテナーのページネーションを有効にする",
"enableContainerPaginationDescription": "一度に 50 個のコンテナーを読み込みます。現時点では、コンテナーは英数字順にプルされません。",
"enableCrossPartitionQuery": "クロスパーティション クエリを有効にする",
"enableCrossPartitionQueryDescription": "クエリ実行中に複数の要求を送信します。クエリのスコープが 1 つのパーティション キー値でない場合は、複数の要求が必要です。",
"maxDegreeOfParallelism": "並列処理の最大次数",
"maxDegreeOfParallelismDescription": "並列クエリの実行中にクライアント側で実行される同時実行操作の数を取得または設定します。正のプロパティ値は、同時操作の数を設定値に制限します。0 未満に設定すると、システムが同時に実行する操作の数を自動的に決定します。",
"maxDegreeOfParallelismQuery": "並列処理の最大限度までクエリを実行します。",
"priorityLevel": "優先度レベル",
"priorityLevelDescription": "優先度ベースの実行を使用する場合のデータ エクスプローラーからのデータ プレーン要求の優先度レベルを設定します。[なし] が選択されている場合、データ エクスプローラーは優先度レベルを指定せず、サーバー側の既定の優先度レベルが使用されます。",
"displayGremlinQueryResults": "Gremlin クエリの結果を次のように表示します:",
"displayGremlinQueryResultsDescription": "[グラフ] を選択すると、クエリ結果がグラフまたは JSON として自動的に視覚化され、結果が JSON として表示されます。",
"graph": "グラフ",
"json": "JSON",
"graphAutoVisualization": "グラフの自動視覚化",
"enableSampleDatabase": "サンプル データベースを有効にする",
"enableSampleDatabaseDescription": "これは、NoSQL クエリの探索に使用できる合成製品データを含むサンプルのデータベースとコレクションです。データ エクスプローラー UI に別のデータベースとして表示され、Microsoft によって作成、管理され、無料で利用できます。",
"enableSampleDbAriaLabel": "クエリ探索用にサンプル db を有効にします",
"guidRepresentation": "GUID 表現",
"guidRepresentationDescription": "MongoDB の GuidRepresentation は、BSON ドキュメントに格納されている場合にグローバル一意識別子 (GUID) をシリアル化および逆シリアル化する方法を示します。これは、すべてのドキュメント操作に適用されます。",
"advancedSettings": "詳細設定",
"ignorePartitionKey": "ドキュメントの更新時にパーティション キーを無視する",
"ignorePartitionKeyTooltip": "オンにした場合、パーティション キーの値は、更新操作中にドキュメントを検索するために使用されません。これは、異常なパーティション キーが原因でドキュメントの更新が失敗する場合にのみ使用します。",
"clearHistory": "履歴のクリア",
"clearHistoryConfirm": "続行しますか?",
"clearHistoryDescription": "この操作により、このブラウザーでこのアカウントのすべてのカスタマイズがクリアされます。次のものが含まれます:",
"clearHistoryTabLayout": "スプリッターの位置を含め、カスタマイズしたタブ レイアウトをリセットする",
"clearHistoryTableColumns": "カスタム列を含むテーブル列の基本設定を消去する",
"clearHistoryFilters": "フィルター履歴をクリアする",
"clearHistoryRegion": "リージョンの選択をグローバルにリセットする",
"increaseValueBy1000": "値を 1000 増やす",
"decreaseValueBy1000": "値を 1000 減らす",
"none": "なし",
"low": "低",
"high": "高",
"automatic": "自動",
"enhancedQueryControl": "拡張クエリ コントロール",
"enableQueryControl": "クエリ コントロールを有効にする",
"explorerVersion": "エクスプローラー バージョン",
"accountId": "アカウント ID",
"sessionId": "セッション ID",
"popupsDisabledError": "ブラウザーでポップアップが無効になっているため、このアカウントの承認を確立できませんでした。\nこのサイトのポップアップを有効にし、[Entra ID のログイン] ボタンをクリックしてください",
"failedToAcquireTokenError": "承認トークンを自動的に取得できませんでした。[Entra ID のログイン] ボタンをクリックして、Entra ID RBAC 操作を有効にしてください"
},
"saveQuery": {
"panelTitle": "クエリの保存",
"setupCostMessage": "コンプライアンス上の理由から、クエリは Azure Cosmos アカウントのコンテナーに保存され、“{{databaseName}}”という名の別のデータベースに保存されます。続行するには、アカウントにコンテナーを作成する必要があります。推定追加コストは 1 日 0.77 ドルです。",
"completeSetup": "セットアップが完了しました",
"noQueryNameError": "クエリ名が指定されていません",
"invalidQueryContentError": "無効なクエリ コンテンツが指定されました",
"failedToSaveQueryError": "クエリ {{queryName}} の保存に失敗しました",
"failedToSetupContainerError": "保存されたクエリ用のコンテナーをセットアップできませんでした",
"accountNotSetupError": "クエリの保存に失敗しました: アカウントがクエリ保存用に設定されていません",
"name": "名前"
},
"loadQuery": {
"noFileSpecifiedError": "ファイルが指定されていません",
"failedToLoadQueryError": "クエリを読み込めませんでした",
"failedToLoadQueryFromFileError": "ファイル {{fileName}} からクエリを読み込めませんでした",
"selectFilesToOpen": "クエリ ドキュメントを選択してください",
"browseFiles": "参照"
},
"executeStoredProcedure": {
"enterInputParameters": "入力パラメーターを入力します (存在する場合)",
"key": "キー",
"param": "パラメーター",
"partitionKeyValue": "パーティション キーの値",
"value": "値",
"addNewParam": "新しいパラメーターを追加する",
"addParam": "パラメーターを追加する",
"deleteParam": "パラメーターを削除する",
"invalidParamError": "無効なパラメーターが指定されました: {{invalidParam}}",
"invalidParamConsoleError": "無効なパラメーターが指定されました: {{invalidParam}} は有効なリテラル値ではありません",
"stringType": "文字列",
"customType": "カスタム"
},
"uploadItems": {
"noFilesSpecifiedError": "ファイルが指定されていません。少なくとも 1 つのファイルを入力してください。",
"selectJsonFiles": "JSON ファイルの選択",
"selectJsonFilesTooltip": "アップロードする JSON ファイルを 1 つ以上選択します。各ファイルには単一の JSON ドキュメントまたは JSON ドキュメントの配列を含めることができます。個々のアップロード操作でのすべてのファイルの合計サイズは 2 MB 未満である必要があります。大規模なデータ セットに対して複数のアップロード操作を実行できます。",
"fileNameColumn": "ファイル名",
"statusColumn": "状態",
"uploadStatus": "{{numSucceeded}} 件作成済み、{{numThrottled}} 件調整済み、{{numFailed}} 件のエラー",
"uploadedFiles": "ファイルをアップロードしました"
},
"copyNotebook": {
"copyFailedError": "{{name}} を {{destination}} にコピーできませんでした",
"uploadFailedError": "{{name}} をアップロードできませんでした",
"location": "場所",
"locationAriaLabel": "場所",
"selectLocation": "コピーするノートブックの場所を選択する",
"name": "名前"
},
"publishNotebook": {
"publishFailedError": "{{notebookName}} をギャラリーに発行できませんでした",
"publishDescription": "公開すると、このノートブックは Azure Cosmos DB ノートブックのパブリック ギャラリーに表示されます。公開前に機密データや出力が削除されていることを確認してください。",
"publishPrompt": "\"{{name}}\" をギャラリーに公開して共有しますか?",
"coverImage": "カバー画像",
"coverImageUrl": "カバー画像の URL",
"name": "名前",
"description": "説明",
"tags": "タグ",
"tagsPlaceholder": "オプションのタグ 1、オプションのタグ 2",
"preview": "プレビュー",
"urlType": "URL",
"customImage": "カスタム イメージ",
"takeScreenshot": "スクリーンショットを撮る",
"useFirstDisplayOutput": "最初のディスプレイ出力を使用する",
"failedToCaptureOutput": "最初の出力をキャプチャできませんでした",
"outputDoesNotExist": "どのセルにも出力が存在しません。",
"failedToConvertError": "{{fileName}} を base64 形式に変換できませんでした",
"failedToUploadError": "{{fileName}} をアップロードできませんでした"
},
"changePartitionKey": {
"failedToStartError": "データ転送ジョブの開始に失敗しました",
"suboptimalPartitionKeyError": "警告: システムはコレクションが最適でないパーティション キーを使用している可能性を検出しました",
"description": "コンテナーのパーティション キーを変更する場合は、適切なパーティション キーを使用して宛先コンテナーを作成する必要があります。既存の宛先コンテナーを選択することも可能です。",
"sourceContainerId": "ソース {{collectionName}} ID",
"destinationContainerId": "宛先 {{collectionName}} ID",
"collectionIdTooltip": "REST とすべての SDK を介した ID ベースのルーティングに使用される {{collectionName}} の一意識別子。",
"collectionIdPlaceholder": "例: {{collectionName}}1",
"collectionIdAriaLabel": "{{collectionName}} ID、例 {{collectionName}}1",
"existingContainers": "既存のコンテナー",
"partitionKeyWarning": "宛先コンテナーがまだ存在していない必要があります。データ エクスプローラーが新しい宛先コンテナーを作成します。"
},
"cassandraAddCollection": {
"keyspaceLabel": "キースペース名",
"keyspaceTooltip": "既存のキースペースを選択するか、新しいキースペース ID を入力します。",
"tableIdLabel": "CQL コマンドを入力してテーブルを作成します。",
"enterTableId": "テーブル ID の入力",
"tableSchemaAriaLabel": "テーブル スキーマ",
"provisionDedicatedThroughput": "このテーブルの専用スループットをプロビジョニングする",
"provisionDedicatedThroughputTooltip": "必要に応じて、スループットがプロビジョニングされているキースペース内のテーブルの専用スループットをプロビジョニングできます。この専用スループットはキースペース内の他のテーブルと共有されず、キースペースにプロビジョニングしたスループットには含まれません。このスループットはキースペース レベルでプロビジョニングしたスループットに加えて課金されます。"
},
"tables": {
"addProperty": "プロパティの追加",
"addRow": "行の追加",
"addEntity": "エンティティの追加",
"back": "戻る",
"nullFieldsWarning": "警告: null 値フィールドは編集用に表示されません。",
"propertyEmptyError": "{{property}} を空にすることはできません。{{property}} の値を入力してください",
"whitespaceError": "{{property}} に空白を含めることはできません。空白を含まない {{property}} の値を入力してください",
"propertyTypeEmptyError": "プロパティの型を空にすることはできません。プロパティ {{property}} のドロップダウンから型を選択してください"
},
"tableQuerySelect": {
"selectColumns": "クエリを実行する列を選択してください。",
"availableColumns": "使用可能な列"
},
"tableColumnSelection": {
"selectColumns": "コンテナー内の項目のビューに表示する列を選択します。",
"searchFields": "検索フィールド",
"reset": "リセット",
"partitionKeySuffix": " (パーティション キー)"
},
"newVertex": {
"addProperty": "プロパティの追加"
},
"addGlobalSecondaryIndex": {
"globalSecondaryIndexId": "グローバル セカンダリ インデックス コンテナー ID",
"globalSecondaryIndexIdPlaceholder": "例: indexbyEmailId",
"projectionQuery": "プロジェクション クエリ",
"projectionQueryPlaceholder": "SELECT c.email, c.accountId FROM c",
"projectionQueryTooltip": "グローバル セカンダリ インデックスの定義に関する詳細情報",
"disabledTitle": "グローバル セカンダリ インデックスは既に作成されています。完了するまで待ってから、別のものを作成してください。"
},
"stringInput": {
"inputMismatchError": "入力 {{input}} が選択した {{selectedId}} と一致しません"
},
"panelInfo": {
"information": "情報",
"moreDetails": "その他の詳細"
}
}
}

View File

@@ -0,0 +1,727 @@
{
"common": {
"ok": "확인",
"cancel": "취소",
"close": "닫기",
"save": "저장",
"delete": "삭제",
"update": "업데이트",
"discard": "삭제",
"execute": "실행",
"loading": "로드 중",
"loadingEllipsis": "로드 중...",
"next": "다음",
"previous": "이전",
"yes": "예",
"no": "아니요",
"result": "결과",
"learnMore": "자세한 정보",
"getStarted": "시작",
"retry": "다시 시도",
"apply": "적용",
"refresh": "새로 고침",
"copy": "복사",
"create": "만들기",
"confirm": "확인",
"open": "열기",
"rename": "이름 바꾸기",
"download": "다운로드",
"upload": "업로드",
"connect": "연결",
"remove": "제거",
"load": "로드",
"publish": "게시",
"browse": "찾아보기",
"increaseValueBy1": "값을 1만큼 늘리기",
"decreaseValueBy1": "값을 1만큼 줄이기"
},
"splashScreen": {
"title": {
"default": "Azure Cosmos DB 시작",
"postgres": "Azure Cosmos DB for PostgreSQL 시작",
"vcoreMongo": "Azure DocumentDB 시작(MongoDB 호환성 포함)"
},
"subtitle": {
"default": "모든 규모에 대해 전역적으로 분산된 다중 모델 데이터베이스 서비스",
"getStarted": "샘플 데이터 세트, 설명서 및 추가 도구를 시작하세요."
},
"quickStart": {
"title": "빠른 시작 개시",
"description": "빠른 시작 자습서를 시작하여 샘플 데이터 시작"
},
"newCollection": {
"title": "새 {{collectionName}}",
"description": "스토리지 및 처리량에 대한 새 컨테이너 만들기"
},
"samplesGallery": {
"title": "Azure Cosmos DB 샘플 갤러리",
"description": "확장성 있는 인텔리전트 앱 패턴을 보여 주는 샘플을 검색합니다. Cosmos DB 사용하여 개념에서 코드로 얼마나 빨리 이동할 수 있는지 확인해 보세요."
},
"connectCard": {
"title": "연결",
"description": "원하는 도구 사용을 선호하시나요? 연결해야 하는 연결 문자열 찾기",
"pgAdmin": {
"title": "pgAdmin으로 연결",
"description": "pgAdmin을 선호하시나요? 여기에서 연결 문자열 찾기"
},
"vsCode": {
"title": "VS Code와 연결",
"description": "Visual Studio Code MongoDB 및 DocumentDB 클러스터 쿼리 및 관리"
}
},
"shell": {
"postgres": {
"title": "PostgreSQL 셸",
"description": "PostgreSQL의 셸 인터페이스를 사용하여 테이블 만들기 및 데이터 조작"
},
"vcoreMongo": {
"title": "Mongo Shell",
"description": "MongoDB의 셸 인터페이스를 사용하여 컬렉션 만들기 및 데이터 조작"
}
},
"teachingBubble": {
"newToPostgres": {
"headline": "PGSQL을 Cosmos DB?",
"body": "환영합니다. PGSQL을 Cosmos DB 시작에 대한 도움이 필요한 경우 샘플 데이터, 쿼리를 찾을 수 있는 위치는 다음과 같습니다."
},
"resetPassword": {
"headline": "암호 만들기",
"body": "암호를 아직 변경하지 않은 경우 지금 변경하세요."
},
"coachMark": {
"headline": "샘플 {{collectionName}} 시작",
"body": "샘플 데이터를 사용하여 샘플 컨테이너를 만드는 과정을 안내한 다음 데이터 탐색기를 둘러보겠습니다. 이 둘러보기 시작을 취소하고 직접 탐색할 수도 있습니다."
}
},
"sections": {
"recents": "최근 항목",
"clearRecents": "최근 항목 지우기",
"top3": "꼭 알아야 할 3가지",
"learningResources": "학습 리소스",
"nextSteps": "다음 단계",
"tipsAndLearnMore": "팁 및 자세한 정보",
"notebook": "Notebook",
"needHelp": "도움이 필요하세요?"
},
"top3Items": {
"sql": {
"advancedModeling": {
"title": "고급 모델링 패턴",
"description": "데이터베이스를 최적화하기 위한 고급 전략을 알아봅니다."
},
"partitioning": {
"title": "분할 모범 사례",
"description": "데이터 모델 및 분할 전략을 적용하는 방법을 알아봅니다."
},
"resourcePlanning": {
"title": "리소스 요구 사항 계획",
"description": "다양한 구성 선택 사항에 대해 알아보세요."
}
},
"mongo": {
"whatIsMongo": {
"title": "MongoDB API란?",
"description": "MongoDB 및 해당 기능에 대한 Azure Cosmos DB 이해합니다."
},
"features": {
"title": "기능 및 구문",
"description": "장점 및 기능 살펴보기"
},
"migrate": {
"title": "데이터 마이그레이션",
"description": "데이터 이동을 위한 마이그레이션 전 단계"
}
},
"cassandra": {
"buildJavaApp": {
"title": "Java 앱 빌드",
"description": "SDK를 사용하여 Java 앱을 만듭니다."
},
"partitioning": {
"title": "분할 모범 사례",
"description": "분할의 작동 방식을 알아봅니다."
},
"requestUnits": {
"title": "RU(요청 단위)",
"description": "RU 요금을 이해합니다."
}
},
"gremlin": {
"dataModeling": {
"title": "데이터 모델링",
"description": "그래프 데이터 모델링 권장 사항"
},
"partitioning": {
"title": "분할 모범 사례",
"description": "분할의 작동 방식 알아보기"
},
"queryData": {
"title": "데이터 쿼리",
"description": "Gremlin을 사용하여 데이터 쿼리"
}
},
"tables": {
"whatIsTable": {
"title": "Table API 무엇인가요?",
"description": "테이블 및 해당 기능에 대한 Azure Cosmos DB 이해"
},
"migrate": {
"title": "데이터 마이그레이션",
"description": "데이터 마이그레이션 방법 알아보기"
},
"faq": {
"title": "테이블 FAQ에 대한 Azure Cosmos DB",
"description": "테이블 Azure Cosmos DB 대한 일반적인 질문"
}
}
},
"learningResources": {
"shortcuts": {
"title": "바로 가기 키 데이터 탐색기",
"description": "Data Explorer를 탐색하는 키보드 단축키를 배워보세요."
},
"liveTv": {
"title": "기본 사항 알아보기",
"description": "Azure Cosmos DB Live TV 쇼 소개 및 비디오 방법을 시청하세요."
},
"sql": {
"sdk": {
"title": "SDK 사용 시작",
"description": "Azure Cosmos DB SDK에 대해 알아봅니다."
},
"migrate": {
"title": "데이터 마이그레이션",
"description": "Azure 서비스 및 오픈 소스 솔루션을 사용하여 데이터를 마이그레이션합니다."
}
},
"mongo": {
"nodejs": {
"title": "Node.js 사용하여 앱 빌드",
"description": "Node.js 앱을 만듭니다."
},
"gettingStarted": {
"title": "시작 가이드",
"description": "시작하는 데 필요한 기본 사항을 알아보세요."
}
},
"cassandra": {
"createContainer": {
"title": "컨테이너 만들기",
"description": "컨테이너 만들기 옵션을 알아보세요."
},
"throughput": {
"title": "처리량 프로비저닝",
"description": "처리량을 구성하는 방법을 알아봅니다."
}
},
"gremlin": {
"getStarted": {
"title": "시작 ",
"description": "Gremlin 콘솔을 사용하여 만들기, 쿼리 및 트래버스"
},
"importData": {
"title": "Graph 데이터 가져오기",
"description": "BulkExecutor를 사용하여 대량 수집 데이터 알아보기"
}
},
"tables": {
"dotnet": {
"title": ".NET 앱 만들기",
"description": ".NET 앱에서 Table용 Azure Cosmos DB에 액세스하는 방법입니다."
},
"java": {
"title": "Java 앱 빌드",
"description": "Java SDK를 사용하여 Table 앱에 대한 Azure Cosmos DB 만들기 "
}
}
},
"nextStepItems": {
"postgres": {
"dataModeling": "데이터 모델링",
"distributionColumn": "배포 열을 선택하는 방법",
"buildApps": "Python/Java/Django를 사용하여 앱 빌드"
},
"vcoreMongo": {
"migrateData": "데이터 마이그레이션",
"vectorSearch": "벡터 검색을 사용하여 AI 앱 빌드",
"buildApps": "Nodejs를 사용하여 앱 빌드"
}
},
"learnMoreItems": {
"postgres": {
"performanceTuning": "성능 튜닝",
"diagnosticQueries": "유용한 진단 쿼리",
"sqlReference": "분산 SQL 참조"
},
"vcoreMongo": {
"vectorSearch": "벡터 검색",
"textIndexing": "텍스트 인덱싱",
"troubleshoot": "일반적인 문제 해결"
}
},
"fabric": {
"buildTitle": "데이터베이스 빌드",
"useTitle": "데이터베이스 사용",
"newContainer": {
"title": "새 컨테이너",
"description": "데이터를 저장할 대상 컨테이너 만들기"
},
"sampleData": {
"title": "샘플 데이터",
"description": "데이터베이스에 샘플 데이터 로드"
},
"sampleVectorData": {
"title": "샘플 벡터 데이터",
"description": "text-embedding-ada-002를 사용하여 샘플 벡터 데이터 로드"
},
"appDevelopment": {
"title": "앱 개발",
"description": "SDK를 사용하여 앱을 빌드하려면 여기에서 시작하세요."
},
"sampleGallery": {
"title": "샘플 갤러리",
"description": "실제 엔드 투 엔드 샘플 가져오기"
}
},
"sampleDataDialog": {
"title": "샘플 데이터",
"startButton": "시작",
"createPrompt": "\"{{containerName}}\" 컨테이너를 만들고 샘플 데이터를 해당 컨테이너로 가져옵니다. 몇 분 정도 걸릴 수 있습니다.",
"creatingContainer": "컨테이너 \"{{containerName}}\"을(를) 만드는 중...",
"importingData": "\"{{containerName}}\"로 데이터를 가져오는 중...",
"success": "샘플 데이터를 사용하여 \"{{containerName}}\"을 만들었습니다.",
"errorContainerExists": "데이터베이스 \"{{databaseName}}\"의 컨테이너 \"{{containerName}}\"이(가) 이미 있습니다. 삭제하고 다시 시도하세요.",
"errorCreateContainer": "컨테이너를 만들지 못했습니다. {{error}}",
"errorImportData": "데이터를 가져오지 못했습니다. {{error}}"
}
},
"contextMenu": {
"newContainer": "새 {{containerName}}",
"restoreContainer": "{{containerName}} 복원",
"deleteDatabase": "{{databaseName}} 삭제",
"deleteContainer": "{{containerName}} 삭제",
"newSqlQuery": "새 SQL 쿼리",
"newQuery": "새 쿼리",
"openMongoShell": "Mongo Shell 열기",
"newShell": "새 셸",
"openCassandraShell": "Cassandra Shell 열기",
"newStoredProcedure": "새 저장 프로시저",
"newUdf": "새 UDF",
"newTrigger": "새 트리거",
"deleteStoredProcedure": "저장 프로시저 삭제",
"deleteTrigger": "트리거 삭제",
"deleteUdf": "사용자 정의 함수 삭제"
},
"tabs": {
"documents": {
"newItem": "새 항목",
"newDocument": "새 문서",
"uploadItem": "항목 업로드",
"applyFilter": "필터 적용",
"unsavedChanges": "저장되지 않은 변경 내용",
"unsavedChangesMessage": "저장하지 않은 변경 내용이 손실됩니다. 계속하시겠습니까?",
"createDocumentFailed": "문서 만들기 실패",
"updateDocumentFailed": "문서 업데이트 실패",
"documentDeleted": "문서를 삭제했습니다.",
"deleteDocumentDialogTitle": "문서 삭제",
"deleteDocumentsDialogTitle": "문서 삭제",
"throttlingError": "트래픽률 제한 오류로 인해 일부 문서 삭제에 실패했습니다. 나중에 다시 시도하세요. 앞으로 이런 일이 없도록 컨테이너나 데이터베이스의 처리량을 늘려 보세요.",
"deleteFailed": "문서 삭제 실패({{error}})",
"missingShardProperty": "문서에 분할 속성이 없습니다. {{partitionKeyProperty}}",
"refreshGridFailed": "문서 그리드 새로 고침 실패",
"confirmDelete": "{{documentName}}을(를) 삭제하시겠습니까?",
"confirmDeleteTitle": "삭제 확인",
"selectedItems": "선택한 항목 {{count}}개",
"selectedItem": "선택한 항목",
"selectedDocuments": "선택한 문서 {{count}}개",
"selectedDocument": "선택한 문서",
"deleteDocumentFailedLog": "문서 {{documentId}}개 삭제 실패(상태 코드 {{statusCode}})",
"deleteSuccessLog": "문서 {{count}}개를 삭제함",
"deleteThrottledLog": "\"요청이 너무 큽니다\"(429) 오류로 인해 문서 {{count}}개를 삭제하지 못했습니다. 다시 시도하는 중...",
"missingShardKeyLog": "새 문서 저장에 실패했습니다. 문서 분할 키가 정의되어 있지 않습니다.",
"filterTooltip": "쿼리 조건을 입력하거나 목록에서 하나를 선택하세요.",
"loadMore": "더 많이 로드",
"documentEditor": "문서 편집기",
"savedFilters": "저장된 필터",
"defaultFilters": "기본 필터",
"abort": "중단",
"deletingDocuments": "문서 {{count}}개를 삭제하는 중",
"deletedDocumentsSuccess": "문서 {{count}}개를 삭제했습니다.",
"deleteAborted": "문서 삭제를 중단했습니다.",
"failedToDeleteDocuments": "문서 {{count}}개를 삭제하지 못했습니다.",
"requestTooLargeBase": "\"요청이 너무 큼\" 예외(429)로 인해 일부 삭제 요청이 실패했습니다.",
"retriedSuccessfully": "하지만 다시 시도하여 성공했습니다.",
"retryingNow": "지금 다시 시도 중입니다.",
"increaseThroughputTip": "앞으로 이런 일이 없도록 컨테이너나 데이터베이스의 처리량을 늘려 보세요.",
"numberOfSelectedDocuments": "선택한 문서 수: {{count}}개",
"mongoFilterPlaceholder": "쿼리 조건자(예: {\"id\":\"foo\"})를 입력하거나 드롭다운 목록에서 하나를 선택하거나, 모든 문서를 쿼리하려면 비워두세요.",
"sqlFilterPlaceholder": "쿼리 조건자(예: WHERE c.id=\"1\")를 입력하거나 드롭다운 목록에서 하나를 선택하거나, 모든 문서를 쿼리하려면 비워두세요.",
"error": "오류",
"warning": "경고"
},
"query": {
"executeQuery": "쿼리 실행",
"executeSelection": "선택 영역 실행",
"saveQuery": "쿼리 저장",
"downloadQuery": "쿼리 다운로드",
"cancelQuery": "쿼리 취소",
"openSavedQueries": "저장된 쿼리 열기",
"vertical": "수직",
"horizontal": "수평",
"view": "보기",
"editingQuery": "쿼리를 편집하는 증"
},
"storedProcedure": {
"id": "저장 프로시저 ID",
"idPlaceholder": "새 저장 프로시저 ID 입력",
"idAriaLabel": "저장 프로시저 ID",
"body": "저장 프로시저 본문",
"bodyAriaLabel": "저장 프로시저 본문",
"successfulExecution": "저장 프로시저 실행 성공",
"resultAriaLabel": "저장 프로시저 결과 실행",
"logsAriaLabel": "저장 프로시저 로그 실행",
"errors": "오류:",
"errorDetailsAriaLabel": "오류 세부 정보 링크",
"moreDetails": "추가 세부 정보",
"consoleLogTab": "console.log"
},
"trigger": {
"id": "트리거 ID",
"idPlaceholder": "새 트리거 ID 입력",
"type": "트리거 유형",
"operation": "트리거 작업",
"body": "트리거 본문",
"bodyAriaLabel": "트리거 본문",
"pre": "사전",
"post": "게시",
"all": "모두",
"operationCreate": "만들기",
"operationDelete": "삭제",
"operationReplace": "바꾸기"
},
"udf": {
"id": "사용자 정의 함수 ID",
"idPlaceholder": "새 사용자 정의 함수 ID 입력",
"body": "사용자 정의 함수 본문",
"bodyAriaLabel": "사용자 정의 함수 본문"
},
"conflicts": {
"unsavedChanges": "저장되지 않은 변경 내용",
"changesWillBeLost": "모든 변경 내용이 손실됩니다. 계속하시겠습니까?",
"resolveConflictFailed": "충돌 확인에 실패했습니다.",
"deleteConflictFailed": "충돌 삭제 실패",
"refreshGridFailed": "문서 그리드 새로 고침 실패"
},
"mongoShell": {
"title": "Mongo Shell"
}
},
"panes": {
"deleteDatabase": {
"panelTitle": "{{databaseName}} 삭제",
"warningMessage": "경고! 수행하려는 작업은 실행 취소할 수 없습니다. 계속하면 이 리소스와 모든 자식 리소스가 영구적으로 삭제됩니다.",
"confirmPrompt": "{{databaseName}} ID(이름)를 입력하여 확인",
"inputMismatch": "입력한 {{databaseName}} 이름 \"{{input}}\"이(가) 선택한 {{databaseName}} \"{{selectedId}}\"와(과) 일치하지 않습니다.",
"feedbackTitle": "Azure Cosmos DB 개선에 도움을 주세요!",
"feedbackReason": "이 {{databaseName}}을(를) 삭제하는 이유는 무엇인가요?"
},
"deleteCollection": {
"panelTitle": "{{collectionName}} 삭제",
"confirmPrompt": "{{collectionName}} ID를 입력하여 확인하세요",
"inputMismatch": "입력한 ID {{input}}이(가) 선택한 {{selectedId}}와(과) 일치하지 않습니다.",
"feedbackTitle": "Azure Cosmos DB 개선에 도움을 주세요!",
"feedbackReason": "이 {{collectionName}}을(를) 삭제하는 이유가 무엇인가요?"
},
"addDatabase": {
"databaseLabel": "데이터베이스 {{suffix}}",
"databaseIdLabel": "데이터베이스 ID",
"keyspaceIdLabel": "키스페이스 ID",
"databaseIdPlaceholder": "새 {{databaseLabel}} ID 입력",
"databaseTooltip": "{{databaseLabel}}은(는) 하나 이상의 {{collectionsLabel}} 논리 컨테이너입니다.",
"shareThroughput": "{{collectionsLabel}} 전체에서 처리량 공유",
"shareThroughputTooltip": "{{databaseLabel}} 수준에서 프로비전된 처리량은 {{databaseLabel}} 내의 모든 {{collectionsLabel}}에서 공유됩니다.",
"greaterThanError": "autopilot 처리량에 대해 {{minValue}} 보다 큰 값을 입력하세요.",
"acknowledgeSpendError": "예상 {{period}} 지출을 확인하세요."
},
"addCollection": {
"createNew": "새로 만들기",
"useExisting": "기존 항목 사용",
"databaseTooltip": "데이터베이스는 네임스페이스와 유사합니다. 데이터베이스는 {{collectionName}} 집합을 관리하는 단위입니다.",
"shareThroughput": "{{collectionName}}의 처리량 공유",
"shareThroughputTooltip": "데이터베이스 수준에서 구성된 처리량은 데이터베이스 내 모든 {{collectionName}}에서 공유됩니다.",
"collectionIdLabel": "{{collectionName}} ID",
"collectionIdTooltip": "{{collectionName}}의 고유 식별자이며 REST 및 모든 SDK를 통해 ID 기반 라우팅에 사용됩니다.",
"collectionIdPlaceholder": "e.g., {{collectionName}}1",
"collectionIdAriaLabel": "{{collectionName}} ID, 예제 {{collectionName}}1",
"existingDatabaseAriaLabel": "기존 {{databaseName}} ID 선택",
"existingDatabasePlaceholder": "기존 {{databaseName}} ID 선택",
"indexing": "인덱싱",
"turnOnIndexing": "인덱싱 켜기",
"automatic": "자동",
"turnOffIndexing": "인덱싱 끄기",
"off": "끄기",
"sharding": "분할",
"shardingTooltip": "분할된 컬렉션은 데이터를 여러 복제본 집합(샤드)에 분산하여 무제한 확장성을 제공합니다. 분할된 컬렉션을 사용하려면 데이터를 고르게 분산할 샤드 키(필드)를 선택해야 합니다.",
"unsharded": "분할되지 않음",
"unshardedLabel": "분할되지 않음(20GB 제한)",
"sharded": "분할됨",
"addPartitionKey": "계층형 파티션 키 추가",
"hierarchicalPartitionKeyInfo": "이 기능을 사용하면 최대 3단계 키로 데이터를 분할해 데이터 분포를 개선할 수 있습니다. .NET V3, Java V4 SDK 또는 미리 보기 JavaScript V3 SDK가 필요합니다.",
"provisionDedicatedThroughput": "이 {{collectionName}}에 대한 전용 처리량 프로비전",
"provisionDedicatedThroughputTooltip": "필요에 따라 처리량이 프로비전된 데이터베이스 내의 {{collectionName}}에 대한 전용 처리량을 프로비전할 수 있습니다. 이 전용 처리량은 데이터베이스의 다른 {{collectionNamePlural}} 공유되지 않으며 데이터베이스에 대해 프로비전한 처리량에 포함되지 않습니다. 이 처리량은 데이터베이스 수준에서 프로비전한 처리량 외에도 요금이 청구됩니다.",
"uniqueKeysPlaceholderMongo": "쉼표로 구분된 경로(예: firstName,address.zipCode)",
"uniqueKeysPlaceholderSql": "쉼표로 구분된 경로 예: /firstName,/address/zipCode",
"addUniqueKey": "고유 키 추가",
"enableAnalyticalStore": "분석 저장소 사용",
"disableAnalyticalStore": "분석 저장소 사용 안 함",
"on": "켜기",
"analyticalStoreSynapseLinkRequired": "분석 저장소 {{collectionName}}을(를) 만들려면 Azure Synapse Link가 필요합니다. 이 Cosmos DB 계정에서 Synapse Link를 사용하도록 설정하세요.",
"enable": "활성화",
"containerVectorPolicy": "컨테이너 벡터 정책",
"containerFullTextSearchPolicy": "컨테이너 전체 텍스트 검색 정책",
"advanced": "고급",
"mongoIndexingTooltip": "_id 필드는 기본적으로 인덱싱됩니다. 모든 필드에 와일드카드 인덱스를 생성하면 쿼리가 최적화되어 개발에 권장됩니다.",
"createWildcardIndex": "모든 필드에 와일드카드 인덱스 만들기",
"legacySdkCheckbox": "내 애플리케이션은 이전 Cosmos .NET 또는 Java SDK 버전(.NET V1 또는 Java V2)을 사용합니다.",
"legacySdkInfo": "이전 SDK와 호환되도록 생성된 컨테이너는 최대 101바이트 크기의 파티션 키 값을 지원하는 레거시 분할 방식을 사용합니다. 이 옵션을 사용하면 계층형 파티션 키를 사용할 수 없습니다.",
"indexingOnInfo": "문서의 모든 속성은 유연하고 효율적인 쿼리를 위해 기본적으로 인덱싱됩니다.",
"indexingOffInfo": "인덱싱이 꺼집니다. 쿼리를 실행하지 않거나 키 값 작업만 하는 경우 권장합니다.",
"indexingOffWarning": "인덱싱이 꺼진 상태로 컨테이너를 만들면 인덱싱 정책을 변경할 수 없습니다. 인덱싱 정책이 있는 컨테이너에서만 인덱싱 변경이 허용됩니다.",
"acknowledgeSpendErrorMonthly": "월별 예상 지출을 확인하세요.",
"acknowledgeSpendErrorDaily": "예상 일별 지출을 확인하세요.",
"unshardedMaxRuError": "분할되지 않은 컬렉션은 최대 10,000RU를 지원합니다.",
"acknowledgeShareThroughputError": "이 전용 처리량의 예상 비용을 확인해 주세요.",
"vectorPolicyError": "컨테이너 벡터 정책의 오류를 수정하세요.",
"fullTextSearchPolicyError": "컨테이너 전체 텍스트 검색 정책의 오류를 수정해 주세요.",
"addingSampleDataSet": "샘플 데이터 세트 추가"
},
"addCollectionUtility": {
"shardKeyTooltip": "샤드 키(필드)는 데이터를 여러 복제본 집합(샤드)에 분산해 무제한 확장성을 제공합니다. 데이터를 고르게 분산할 필드를 신중히 선택하는 것이 중요합니다.",
"partitionKeyTooltip": "{{partitionKeyName}} 확장성을 위해 파티션 간에 데이터를 자동으로 분산하는 데 사용됩니다. 다양한 값을 갖고 요청 볼륨을 고르게 분산하는 JSON 문서의 속성을 선택하세요.",
"partitionKeyTooltipSqlSuffix": " 읽기 작업이 적거나 쓰기 작업이 많은 모든 크기의 워크로드에는 id가 좋은 선택입니다.",
"shardKeyLabel": "분할 키",
"partitionKeyLabel": "파티션 키",
"shardKeyPlaceholder": "e.g., categoryId",
"partitionKeyPlaceholderDefault": "예: /address",
"partitionKeyPlaceholderFirst": "필수 - 첫 번째 파티션 키(예: /TenantId)",
"partitionKeyPlaceholderSecond": "두 번째 파티션 키(예: /UserId)",
"partitionKeyPlaceholderThird": "세 번째 파티션 키(예: /SessionId)",
"partitionKeyPlaceholderGraph": "e.g., /address/zipCode",
"uniqueKeysTooltip": "고유 키는 개발자가 데이터베이스에 데이터 무결성 계층을 추가할 수 있게 합니다. 컨테이너 생성 시 고유 키 정책을 설정하면 파티션 키별로 하나 이상의 값이 고유함을 보장합니다.",
"uniqueKeysLabel": "고유 키",
"analyticalStoreLabel": "분석 저장소",
"analyticalStoreTooltip": "트랜잭션 워크로드 성능에 영향을 주지 않고 운영 데이터에 대해 거의 실시간 분석을 수행할 수 있도록 분석 저장소 기능을 사용하도록 설정하세요.",
"analyticalStoreDescription": "트랜잭션 워크로드 성능에 영향을 주지 않고 운영 데이터에 대해 거의 실시간 분석을 수행할 수 있도록 분석 저장소 기능을 사용하도록 설정하세요.",
"vectorPolicyTooltip": "유사성 쿼리에 사용할 수 있도록 벡터가 포함된 데이터 속성을 설명하세요."
},
"settings": {
"pageOptions": "페이지 옵션",
"pageOptionsDescription": "고정된 쿼리 결과 수를 지정하려면 [사용자 지정]을 선택하고, 페이지당 최대 쿼리 결과를 표시하려면 [제한 없음]을 선택하세요.",
"queryResultsPerPage": "페이지당 쿼리 결과",
"queryResultsPerPageTooltip": "페이지당 표시할 쿼리 결과 수를 입력하세요.",
"customQueryItemsPerPage": "페이지당 사용자 지정 쿼리 항목 수",
"custom": "사용자 지정",
"unlimited": "무제한",
"entraIdRbac": "Entra ID RBAC 사용 설정",
"entraIdRbacDescription": "Entra ID RBAC를 자동으로 사용하려면 [자동]을 선택하세요. 강제로 사용하거나 사용하지 않으려면 True/False를 선택하세요.",
"true": "True",
"false": "False",
"regionSelection": "영역 선택",
"regionSelectionDescription": "Cosmos 클라이언트가 계정에 액세스할 때 사용하는 지역을 변경합니다.",
"selectRegion": "지역 선택",
"selectRegionTooltip": "클라이언트 작업에 사용할 계정 끝점을 변경합니다.",
"globalDefault": "전역(기본값)",
"readWrite": "(읽기/쓰기)",
"read": "(읽기)",
"queryTimeout": "쿼리 시간 초과",
"queryTimeoutDescription": "쿼리가 지정된 시간 제한에 도달하면 자동 취소가 설정되어 있지 않은 경우 쿼리를 취소할 수 있는 팝업이 표시됩니다.",
"enableQueryTimeout": "쿼리 제한 시간 사용",
"queryTimeoutMs": "쿼리 시간 제한(밀리초)",
"automaticallyCancelQuery": "시간 초과 시 쿼리 자동 취소",
"ruLimit": "RU 제한",
"ruLimitDescription": "쿼리가 설정된 RU 제한을 초과하면 쿼리가 중단됩니다.",
"enableRuLimit": "RU 제한 사용",
"ruLimitLabel": "RU 제한(RU)",
"defaultQueryResults": "기본 쿼리 결과 보기",
"defaultQueryResultsDescription": "쿼리 결과를 표시할 때 사용할 기본 보기를 선택하세요.",
"retrySettings": "설정 다시 시도",
"retrySettingsDescription": "CosmosDB 쿼리 중 제한된 요청에 적용되는 재시도 정책입니다.",
"maxRetryAttempts": "최대 재시도 횟수",
"maxRetryAttemptsTooltip": "요청에 대해 수행할 최대 재시도 횟수입니다. 기본값 9.",
"fixedRetryInterval": "수정된 재시도 간격(밀리초)",
"fixedRetryIntervalTooltip": "응답에 포함된 retryAfter를 무시하고 각 재시도 사이에 대기하는 고정 재시도 간격(밀리초)입니다. 기본값은 0밀리초입니다.",
"maxWaitTime": "최대 대기 시간(초)",
"maxWaitTimeTooltip": "재시도 중 요청을 대기하는 최대 대기 시간(초)입니다. 기본값은 30초입니다.",
"enableContainerPagination": "컨테이너 페이지 매김 사용 설정",
"enableContainerPaginationDescription": "한 번에 50개의 컨테이너를 로드합니다. 현재 컨테이너는 영숫자 순서로 불러오지 않습니다.",
"enableCrossPartitionQuery": "파티션 간 쿼리 사용 설정",
"enableCrossPartitionQueryDescription": "쿼리를 실행하는 동안 두 개 이상의 요청을 보냅니다. 쿼리가 단일 파티션 키 값으로 제한되지 않은 경우 여러 요청이 필요합니다.",
"maxDegreeOfParallelism": "최대 병렬 처리 수준",
"maxDegreeOfParallelismDescription": "병렬 쿼리 실행 시 클라이언트 쪽에서 동시에 실행되는 작업 수를 가져오거나 설정합니다. 양수 값으로 설정하면 동시 작업 수가 해당 값으로 제한됩니다. 0보다 작게 설정하면 시스템이 자동으로 실행할 동시 작업 수를 결정합니다.",
"maxDegreeOfParallelismQuery": "최대 병렬 처리 수준까지 쿼리",
"priorityLevel": "우선 순위 수준",
"priorityLevelDescription": "Priority-Based 실행 시 Data Explorer의 데이터 평면 요청 우선순위 수준을 설정합니다. \"없음\"을 선택하면 Data Explorer가 우선순위를 지정하지 않고 서버 기본 우선순위가 적용됩니다.",
"displayGremlinQueryResults": "Gremlin 쿼리 결과 표시 방식:",
"displayGremlinQueryResultsDescription": "쿼리 결과를 그래프로 자동 시각화하거나 JSON으로 표시하려면 Graph를 선택하세요.",
"graph": "Graph",
"json": "JSON",
"graphAutoVisualization": "그래프 자동 시각화",
"enableSampleDatabase": "샘플 데이터베이스 사용 설정",
"enableSampleDatabaseDescription": "이 샘플 데이터베이스와 컬렉션은 NoSQL 쿼리를 탐색하는 데 사용할 수 있는 가상 제품 데이터를 포함합니다. Data Explorer UI에 별도의 데이터베이스로 표시되며, Microsoft가 비용 없이 생성하고 유지 관리합니다.",
"enableSampleDbAriaLabel": "쿼리 탐색용 샘플 DB 사용 설정",
"guidRepresentation": "GUID 표현",
"guidRepresentationDescription": "MongoDB의 GuidRepresentation은 BSON 문서에 저장할 때 GUID(전역 고유 식별자)가 직렬화되고 역직렬화되는 방식을 나타냅니다. 모든 문서 작업에 적용됩니다.",
"advancedSettings": "고급 설정",
"ignorePartitionKey": "문서 업데이트 시 파티션 키 무시",
"ignorePartitionKeyTooltip": "선택하면 업데이트 작업 시 파티션 키 값을 사용해 문서를 찾지 않습니다. 비정상적인 파티션 키로 인해 문서 업데이트가 실패할 때만 사용하세요.",
"clearHistory": "기록 지우기",
"clearHistoryConfirm": "계속 진행하시겠습니까?",
"clearHistoryDescription": "이 작업을 수행하면 이 브라우저에서 이 계정에 대한 모든 사용자 지정이 다음을 포함해 지워집니다.",
"clearHistoryTabLayout": "분할기 위치를 포함해 사용자 지정한 탭 레이아웃을 초기화합니다.",
"clearHistoryTableColumns": "사용자 지정 열을 포함해 테이블 열 기본 설정을 지웁니다.",
"clearHistoryFilters": "필터 기록 지우기",
"clearHistoryRegion": "영역 선택을 전역으로 재설정",
"increaseValueBy1000": "1000씩 값 늘리기",
"decreaseValueBy1000": "값을 1000으로 줄입니다.",
"none": "없음",
"low": "낮음",
"high": "높음",
"automatic": "자동",
"enhancedQueryControl": "향상된 쿼리 제어",
"enableQueryControl": "쿼리 제어 사용 설정",
"explorerVersion": "Explorer 버전",
"accountId": "계정 ID",
"sessionId": "세션 ID",
"popupsDisabledError": "브라우저에서 팝업이 차단되어 이 계정에 대한 권한 부여를 설정할 수 없습니다.\n이 사이트에 대해 팝업을 허용한 후 \"Entra ID에 로그인\" 버튼을 클릭하세요.",
"failedToAcquireTokenError": "권한 부여 토큰을 자동으로 가져오지 못했습니다. Entra ID RBAC 작업을 사용하려면 \"Entra ID 로그인\" 버튼을 클릭하세요."
},
"saveQuery": {
"panelTitle": "쿼리 저장",
"setupCostMessage": "규정 준수를 위해 쿼리를 \"{{databaseName}}\"이라는 별도의 데이터베이스 내 Azure Cosmos 계정의 컨테이너에 저장합니다. 계속하려면 계정에 컨테이너를 생성해야 하며, 예상 추가 비용은 하루 $0.77입니다.",
"completeSetup": "설정 완료",
"noQueryNameError": "쿼리 이름이 지정되지 않았습니다.",
"invalidQueryContentError": "잘못된 쿼리 내용이 지정되었습니다.",
"failedToSaveQueryError": "쿼리 {{queryName}}을(를) 저장하지 못했습니다.",
"failedToSetupContainerError": "저장된 쿼리용 컨테이너 설정에 실패했습니다.",
"accountNotSetupError": "쿼리를 저장하지 못했습니다. 계정이 쿼리 저장을 설정하지 않았습니다.",
"name": "이름"
},
"loadQuery": {
"noFileSpecifiedError": "지정된 파일이 없습니다.",
"failedToLoadQueryError": "쿼리를 로드하지 못했습니다.",
"failedToLoadQueryFromFileError": "{{fileName}} 파일에서 쿼리를 불러오지 못했습니다.",
"selectFilesToOpen": "쿼리 문서 선택",
"browseFiles": "찾아보기"
},
"executeStoredProcedure": {
"enterInputParameters": "입력 매개변수 입력(있는 경우)",
"key": "키",
"param": "Param",
"partitionKeyValue": "파티션 키 값",
"value": "값",
"addNewParam": "새 매개변수 추가",
"addParam": "매개 변수 추가",
"deleteParam": "매개변수 삭제",
"invalidParamError": "잘못된 매개 변수를 지정했습니다. {{invalidParam}}",
"invalidParamConsoleError": "잘못된 매개변수가 지정되었습니다. {{invalidParam}}은(는) 올바른 리터럴 값이 아닙니다.",
"stringType": "문자열",
"customType": "사용자 지정"
},
"uploadItems": {
"noFilesSpecifiedError": "파일을 지정하지 않았습니다. 파일을 하나 이상 입력하세요.",
"selectJsonFiles": "JSON Files 선택",
"selectJsonFilesTooltip": "업로드할 JSON 파일을 하나 이상 선택하세요. 각 파일에는 단일 JSON 문서 또는 JSON 문서 배열이 포함될 수 있습니다. 한 번의 업로드 작업에서 모든 파일의 총 크기는 2MB 미만이어야 합니다. 더 큰 데이터 세트는 여러 번에 나누어 업로드할 수 있습니다.",
"fileNameColumn": "파일 이름",
"statusColumn": "상태",
"uploadStatus": "{{numSucceeded}} 생성됨, {{numThrottled}} 제한됨, {{numFailed}} 오류 발생",
"uploadedFiles": "업로드된 파일"
},
"copyNotebook": {
"copyFailedError": "{{name}}을(를) {{destination}}(으)로 복사 실패",
"uploadFailedError": "'{{name}}' 업로드 실패",
"location": "위치",
"locationAriaLabel": "위치",
"selectLocation": "복사할 노트북 위치 선택",
"name": "이름"
},
"publishNotebook": {
"publishFailedError": "{{notebookName}}을(를) 갤러리에 게시하지 못했습니다.",
"publishDescription": "게시하면 이 노트북이 Azure Cosmos DB 노트북 공개 갤러리에 표시됩니다. 게시 전에 민감한 데이터나 출력이 제거되었는지 확인하세요.",
"publishPrompt": "\"{{name}}\"을(를) 게시하고 갤러리에 공유하시겠습니까?",
"coverImage": "커버 이미지",
"coverImageUrl": "표지 이미지 URL",
"name": "이름",
"description": "설명",
"tags": "태그",
"tagsPlaceholder": "선택 태그 1, 선택 태그 2",
"preview": "미리 보기",
"urlType": "URL",
"customImage": "사용자 지정 이미지",
"takeScreenshot": "화면 캡처",
"useFirstDisplayOutput": "첫 번째 디스플레이 출력 사용",
"failedToCaptureOutput": "첫 번째 출력을 캡처하지 못했습니다.",
"outputDoesNotExist": "셀에 대한 출력이 없습니다.",
"failedToConvertError": "{{fileName}}을(를) base64 형식으로 변환하지 못했습니다.",
"failedToUploadError": "{{fileName}} 업로드 실패"
},
"changePartitionKey": {
"failedToStartError": "데이터 전송 작업을 시작하지 못했습니다.",
"suboptimalPartitionKeyError": "경고: 컬렉션이 최적이 아닌 파티션 키를 사용하고 있을 수 있습니다.",
"description": "컨테이너의 파티션 키를 변경하려면 올바른 파티션 키를 가진 대상 컨테이너를 새로 만들어야 합니다. 기존 대상 컨테이너를 선택할 수도 있습니다.",
"sourceContainerId": "원본 {{collectionName}} ID",
"destinationContainerId": "대상 {{collectionName}} ID",
"collectionIdTooltip": "{{collectionName}}의 고유 식별자이며 REST 및 모든 SDK를 통해 ID 기반 라우팅에 사용됩니다.",
"collectionIdPlaceholder": "e.g., {{collectionName}}1",
"collectionIdAriaLabel": "{{collectionName}} ID, 예제 {{collectionName}}1",
"existingContainers": "기존 컨테이너",
"partitionKeyWarning": "대상 컨테이너가 이미 존재하면 안 됩니다. Explorer가 새 대상 컨테이너를 생성합니다."
},
"cassandraAddCollection": {
"keyspaceLabel": "키스페이스 이름",
"keyspaceTooltip": "기존 키스페이스를 선택하거나 새 키스페이스 ID를 입력하세요.",
"tableIdLabel": "테이블을 만들려면 CQL 명령을 입력하세요.",
"enterTableId": "테이블 ID 입력",
"tableSchemaAriaLabel": "테이블 스키마",
"provisionDedicatedThroughput": "이 테이블에 대한 전용 처리량 프로비전",
"provisionDedicatedThroughputTooltip": "키스페이스에 처리량이 프로비전된 경우, 테이블에 전용 처리량을 선택적으로 프로비전할 수 있습니다. 이 전용 처리량은 키스페이스 내 다른 테이블과 공유되지 않으며, 키스페이스에 프로비전한 처리량에 포함되지 않습니다. 이 전용 처리량은 키스페이스 수준에서 프로비전한 처리량과 별도로 청구됩니다."
},
"tables": {
"addProperty": "속성 추가",
"addRow": "행 추가",
"addEntity": "엔터티 추가",
"back": "뒤로",
"nullFieldsWarning": "경고: Null 필드는 편집용으로 표시되지 않습니다.",
"propertyEmptyError": "{{property}}을(를) 비워 둘 수 없습니다. {{property}} 값을 입력하세요.",
"whitespaceError": "{{property}}에 공백을 포함할 수 없습니다. {{property}}에 공백 없이 값을 입력하세요.",
"propertyTypeEmptyError": "속성 형식은 비워 둘 수 없습니다. 속성 {{property}}에 대한 드롭다운에서 형식을 선택하세요."
},
"tableQuerySelect": {
"selectColumns": "쿼리할 열을 선택하세요.",
"availableColumns": "사용 가능한 열"
},
"tableColumnSelection": {
"selectColumns": "컨테이너 항목 보기에서 표시할 열을 선택하세요.",
"searchFields": "검색 필드",
"reset": "다시 설정",
"partitionKeySuffix": " (파티션 키)"
},
"newVertex": {
"addProperty": "속성 추가"
},
"addGlobalSecondaryIndex": {
"globalSecondaryIndexId": "전역 보조 인덱스 컨테이너 ID",
"globalSecondaryIndexIdPlaceholder": "e.g., indexbyEmailId",
"projectionQuery": "프로젝션 쿼리",
"projectionQueryPlaceholder": "SELECT c.email, c.accountId FROM c",
"projectionQueryTooltip": "전역 보조 인덱스 정의에 대해 자세히 알아보세요.",
"disabledTitle": "전역 보조 인덱스가 이미 생성 중입니다. 다른 항목을 만들기 전에 완료되기를 기다려 주세요."
},
"stringInput": {
"inputMismatchError": "입력한 {{input}}이(가) 선택한 {{selectedId}}와(과) 일치하지 않습니다."
},
"panelInfo": {
"information": "정보",
"moreDetails": "추가 세부 정보"
}
}
}

View File

@@ -0,0 +1,727 @@
{
"common": {
"ok": "OK",
"cancel": "Annuleren",
"close": "Sluiten",
"save": "Opslaan",
"delete": "Verwijderen",
"update": "Bijwerken",
"discard": "Negeren",
"execute": "Uitvoeren",
"loading": "Laden",
"loadingEllipsis": "Laden...",
"next": "Volgende",
"previous": "Vorige",
"yes": "Ja",
"no": "Nee",
"result": "Resultaat",
"learnMore": "Meer informatie",
"getStarted": "Aan de slag",
"retry": "Opnieuw proberen",
"apply": "Toepassen",
"refresh": "Vernieuwen",
"copy": "Kopiëren",
"create": "Maken",
"confirm": "Bevestigen",
"open": "Open",
"rename": "Naam wijzigen",
"download": "Downloaden",
"upload": "Uploaden",
"connect": "Verbinding maken",
"remove": "Verwijderen",
"load": "Laden",
"publish": "Publiceren",
"browse": "Bladeren",
"increaseValueBy1": "Waarde verhogen met 1",
"decreaseValueBy1": "Waarde verlagen met 1"
},
"splashScreen": {
"title": {
"default": "Welkom bij Azure Cosmos DB",
"postgres": "Welkom bij Azure Cosmos DB for PostgreSQL",
"vcoreMongo": "Welkom bij Azure DocumentDB (met MongoDB-compatibiliteit)"
},
"subtitle": {
"default": "Wereldwijd gedistribueerde, multi-modeldatabase-service voor elke schaalgrootte",
"getStarted": "Ga aan de slag met onze voorbeelddatasets, documentatie en extra tools."
},
"quickStart": {
"title": "Quick Start starten",
"description": "Start een snelstart-zelfstudie om aan de slag te gaan met voorbeeldgegevens"
},
"newCollection": {
"title": "Nieuw {{collectionName}}",
"description": "Een nieuwe container maken voor opslag en doorvoer"
},
"samplesGallery": {
"title": "Galerie met voorbeelden van Azure Cosmos DB",
"description": "Ontdek voorbeelden waarin schaalbare, intelligente app-patronen worden getoond. Probeer er nu een om te zien hoe snel u van concept naar code kunt gaan met Cosmos DB"
},
"connectCard": {
"title": "Verbinding maken",
"description": "Gebruikt u liever uw eigen hulpprogramma's? Zoek de connection string die u nodig hebt om verbinding te maken",
"pgAdmin": {
"title": "Verbinden met pgAdmin",
"description": "Voorkeur voor pgAdmin? Uw verbindingsreeksen vindt u hier"
},
"vsCode": {
"title": "Verbinding maken met VS Code",
"description": "Query's uitvoeren en beheren op uw MongoDB- en DocumentDB-clusters in Visual Studio Code"
}
},
"shell": {
"postgres": {
"title": "PostgreSQL-shell",
"description": "Een tabel maken en communiceren met gegevens met de shell-interface van PostgreSQL"
},
"vcoreMongo": {
"title": "Mongo-shell",
"description": "Een verzameling maken en communiceren met gegevens met behulp van de shell-interface van MongoDB"
}
},
"teachingBubble": {
"newToPostgres": {
"headline": "Nieuw bij Cosmos DB PGSQL?",
"body": "Welkom! Als u Cosmos DB PGSQL nog niet kent en hulp nodig hebt om aan de slag te gaan, kunt u hier voorbeeldgegevens vinden en query's uitvoeren."
},
"resetPassword": {
"headline": "Uw wachtwoord maken",
"body": "Als u uw wachtwoord nog niet hebt gewijzigd, doe dat dan nu."
},
"coachMark": {
"headline": "Beginnen met voorbeeld {{collectionName}}",
"body": "U wordt begeleid bij het maken van een voorbeeldcontainer met voorbeeldgegevens. Vervolgens krijgt u een rondleiding door Data Explorer. U kunt ook het starten van deze tour annuleren en zelf op verkenning gaan"
}
},
"sections": {
"recents": "Recente items",
"clearRecents": "Recente items wissen",
"top3": "De drie belangrijkste zaken om te weten",
"learningResources": "Trainingsresources",
"nextSteps": "Volgende stappen",
"tipsAndLearnMore": "Tips & meer informatie",
"notebook": "Notitieboek",
"needHelp": "Hulp nodig?"
},
"top3Items": {
"sql": {
"advancedModeling": {
"title": "Geavanceerde modelleringspatronen",
"description": "Leer geavanceerde strategieën om uw database te optimaliseren."
},
"partitioning": {
"title": "Best practices voor partitionering",
"description": "Meer informatie over het toepassen van gegevensmodel- en partitioneringsstrategieën."
},
"resourcePlanning": {
"title": "Uw resourcevereisten plannen",
"description": "Leer de verschillende configuratieopties kennen."
}
},
"mongo": {
"whatIsMongo": {
"title": "Wat is de MongoDB-API?",
"description": "Meer informatie over Azure Cosmos DB for MongoDB en de bijbehorende functies."
},
"features": {
"title": "Functies en syntaxis",
"description": "Ontdek de voordelen en functies"
},
"migrate": {
"title": "Uw gegevens migreren",
"description": "Stappen voorafgaand aan de migratie voor het verplaatsen van gegevens"
}
},
"cassandra": {
"buildJavaApp": {
"title": "Een Java-app bouwen",
"description": "Maak een Java-app met behulp van een SDK."
},
"partitioning": {
"title": "Best practices voor partitionering",
"description": "Meer informatie over de werking van partitionering."
},
"requestUnits": {
"title": "Aanvraageenheden (RU's)",
"description": "Meer informatie over RU-kosten."
}
},
"gremlin": {
"dataModeling": {
"title": "Gegevensmodellering",
"description": "Aanbevelingen voor grafiekgegevensmodellering"
},
"partitioning": {
"title": "Best practices voor partitionering",
"description": "Meer informatie over partitionering"
},
"queryData": {
"title": "Gegevens opvragen",
"description": "Gegevens opvragen met Gremlin"
}
},
"tables": {
"whatIsTable": {
"title": "Wat is de tabel-API?",
"description": "Meer informatie over Azure Cosmos DB for Table en de bijbehorende functies"
},
"migrate": {
"title": "Uw gegevens migreren",
"description": "Meer informatie over het migreren van uw gegevens"
},
"faq": {
"title": "Veelgestelde vragen over Azure Cosmos DB for Table",
"description": "Veelgestelde vragen over Azure Cosmos DB for Table"
}
}
},
"learningResources": {
"shortcuts": {
"title": "Sneltoetsen in Data Explorer",
"description": "Leer sneltoetsen om door Data Explorer te navigeren."
},
"liveTv": {
"title": "Meer informatie over de basisprincipes",
"description": "Bekijk de introductie- en instructievideo's van Azure Cosmos DB Live TV."
},
"sql": {
"sdk": {
"title": "Aan de slag met een SDK",
"description": "Meer informatie over de Azure Cosmos DB SDK."
},
"migrate": {
"title": "Uw gegevens migreren",
"description": "Migreer gegevens met behulp van Azure-services en opensource-oplossingen."
}
},
"mongo": {
"nodejs": {
"title": "Een app bouwen met Node.js",
"description": "Maak een Node.js-app."
},
"gettingStarted": {
"title": "Aan de slag-handleiding",
"description": "Leer de basisbeginselen om aan de slag te gaan."
}
},
"cassandra": {
"createContainer": {
"title": "Een container maken",
"description": "Maak kennis met de opties om een container te maken."
},
"throughput": {
"title": "Inrichtingsdoorvoer",
"description": "Meer informatie over het configureren van doorvoer."
}
},
"gremlin": {
"getStarted": {
"title": "Aan de slag ",
"description": "Maken, query's uitvoeren en bladeren met behulp van de Gremlin-console"
},
"importData": {
"title": "Grafiekgegevens importeren",
"description": "Informatie over bulkopnamegegevens met BulkExecutor"
}
},
"tables": {
"dotnet": {
"title": "Een .NET-app bouwen",
"description": "Toegang krijgen tot Azure Cosmos DB for Table vanuit een .NET-app."
},
"java": {
"title": "Een Java-app bouwen",
"description": "Een Azure Cosmos DB for Table-app maken met Java SDK "
}
}
},
"nextStepItems": {
"postgres": {
"dataModeling": "Gegevensmodellering",
"distributionColumn": "Een distributiekolom kiezen",
"buildApps": "Apps bouwen met Python/Java/Django"
},
"vcoreMongo": {
"migrateData": "Gegevens migreren",
"vectorSearch": "AI-apps bouwen met vector search",
"buildApps": "Apps bouwen met Node.js"
}
},
"learnMoreItems": {
"postgres": {
"performanceTuning": "Prestaties afstemmen",
"diagnosticQueries": "Nuttige diagnostische query's",
"sqlReference": "Gedistribueerde SQL-verwijzing"
},
"vcoreMongo": {
"vectorSearch": "Vector search",
"textIndexing": "Tekstindexeren",
"troubleshoot": "Veelvoorkomende problemen oplossen"
}
},
"fabric": {
"buildTitle": "Uw database bouwen",
"useTitle": "Uw database gebruiken",
"newContainer": {
"title": "Nieuwe container",
"description": "Een doelcontainer maken om uw gegevens op te slaan"
},
"sampleData": {
"title": "Voorbeeldgegevens",
"description": "Voorbeeldgegevens laden in uw database"
},
"sampleVectorData": {
"title": "Voorbeeldvectorgegevens",
"description": "Voorbeeldvectorgegevens laden met Text-Embedding-ADA-002"
},
"appDevelopment": {
"title": "App-ontwikkeling",
"description": "Begin hier met het gebruik van een SDK om uw apps te bouwen"
},
"sampleGallery": {
"title": "Voorbeeldgalerie",
"description": "Krijg end-to-end-voorbeelden uit de praktijk"
}
},
"sampleDataDialog": {
"title": "Voorbeeldgegevens",
"startButton": "Begin",
"createPrompt": "Maak een container {{containerName}} en importeer er voorbeeldgegevens in. Dit kan enkele minuten duren.",
"creatingContainer": "De container {{containerName}} wordt gemaakt...",
"importingData": "Gegevens importeren in {{containerName}}...",
"success": "{{containerName}} is gemaakt met voorbeeldgegevens.",
"errorContainerExists": "De container {{containerName}} in database {{databaseName}} bestaat al. Verwijder het en probeer het opnieuw.",
"errorCreateContainer": "Kan de container niet maken: {{error}}",
"errorImportData": "Kan geen gegevens importeren: {{error}}"
}
},
"contextMenu": {
"newContainer": "Nieuw {{containerName}}",
"restoreContainer": "{{containerName}} herstellen",
"deleteDatabase": "{{databaseName}} verwijderen",
"deleteContainer": "{{containerName}} verwijderen",
"newSqlQuery": "Nieuwe SQL-query",
"newQuery": "Nieuwe query",
"openMongoShell": "Mongo-shell openen",
"newShell": "Nieuwe shell",
"openCassandraShell": "Cassandra-shell openen",
"newStoredProcedure": "Nieuwe opgeslagen procedure",
"newUdf": "Nieuwe UDF",
"newTrigger": "Nieuwe trigger",
"deleteStoredProcedure": "Opgeslagen procedure verwijderen",
"deleteTrigger": "Trigger verwijderen",
"deleteUdf": "Door de gebruiker gedefinieerde functie verwijderen"
},
"tabs": {
"documents": {
"newItem": "Nieuw item",
"newDocument": "Nieuw document",
"uploadItem": "Item uploaden",
"applyFilter": "Filter toepassen",
"unsavedChanges": "Niet-opgeslagen wijzigingen",
"unsavedChangesMessage": "Niet-opgeslagen wijzigingen gaan verloren. Wilt u doorgaan?",
"createDocumentFailed": "Het maken van het document is mislukt",
"updateDocumentFailed": "Het bijwerken van het document is mislukt",
"documentDeleted": "Document is verwijderd.",
"deleteDocumentDialogTitle": "Document verwijderen",
"deleteDocumentsDialogTitle": "Documenten verwijderen",
"throttlingError": "Sommige documenten kunnen niet worden verwijderd vanwege een fout met snelheidsbeperking. Probeer het later opnieuw. Als u dit in de toekomst wilt voorkomen, kunt u overwegen de doorvoer voor uw container of database te verhogen.",
"deleteFailed": "Het verwijderen van een of meer documenten is mislukt ({{error}})",
"missingShardProperty": "De shard-eigenschap ontbreekt in het document: {{partitionKeyProperty}}",
"refreshGridFailed": "Kan het raster met documenten niet vernieuwen",
"confirmDelete": "Weet u zeker dat u {{documentName}} wilt verwijderen?",
"confirmDeleteTitle": "Verwijderen bevestigen",
"selectedItems": "de geselecteerde {{count}} items",
"selectedItem": "het geselecteerde item",
"selectedDocuments": "de {{count}} geselecteerde documenten",
"selectedDocument": "het geselecteerde document",
"deleteDocumentFailedLog": "Kan het document {{documentId}} met de statuscode {{statusCode}} niet verwijderen",
"deleteSuccessLog": "{{count}} document(en) zijn verwijderd",
"deleteThrottledLog": "Kan {{count}} document(en) niet verwijderen vanwege de fout 'Aanvraag te groot' (429). Opnieuw proberen...",
"missingShardKeyLog": "Kan het nieuwe document niet opslaan: de shardsleutel van het document is niet gedefinieerd",
"filterTooltip": "Typ een querypredicaat of kies een querypredicaat uit de lijst.",
"loadMore": "Meer laden",
"documentEditor": "Document-editor",
"savedFilters": "Opgeslagen filters",
"defaultFilters": "Standaardfilters",
"abort": "Afbreken",
"deletingDocuments": "{{count}} document(en) verwijderen",
"deletedDocumentsSuccess": "{{count}} document(en) zijn verwijderd.",
"deleteAborted": "Het verwijderen van een of meer documenten is afgebroken.",
"failedToDeleteDocuments": "Kan {{count}} document(en) niet verwijderen.",
"requestTooLargeBase": "Sommige verwijderverzoeken zijn mislukt vanwege een fout 'Aanvraag te groot' (429)",
"retriedSuccessfully": "maar er is opnieuw geprobeerd.",
"retryingNow": "Nu opnieuw proberen...",
"increaseThroughputTip": "Als u dit in de toekomst wilt voorkomen, kunt u overwegen de doorvoer voor uw container of database te verhogen.",
"numberOfSelectedDocuments": "Aantal geselecteerde documenten: {{count}}",
"mongoFilterPlaceholder": "Typ een querypredicaat (bijvoorbeeld {\"id\":\"foo\"}), of kies een querypredicaat in de vervolgkeuzelijst of laat leeg om een query uit te voeren op alle documenten.",
"sqlFilterPlaceholder": "Typ een querypredicaat (bijvoorbeeld WHERE c.id=\"1\"), of kies een querypredicaat in de vervolgkeuzelijst of laat leeg om een query uit te voeren op alle documenten.",
"error": "Fout",
"warning": "Waarschuwing"
},
"query": {
"executeQuery": "Query uitvoeren",
"executeSelection": "Selectie uitvoeren",
"saveQuery": "Query opslaan",
"downloadQuery": "Query downloaden",
"cancelQuery": "Query annuleren",
"openSavedQueries": "Opgeslagen query's openen",
"vertical": "Verticaal",
"horizontal": "Horizontaal",
"view": "Weergeven",
"editingQuery": "Query aan het bewerken"
},
"storedProcedure": {
"id": "Opgeslagen procedure-id",
"idPlaceholder": "Voer de nieuwe opgeslagen procedure-id in",
"idAriaLabel": "Opgeslagen procedure-id",
"body": "Hoofdtekst van opgeslagen procedure",
"bodyAriaLabel": "Hoofdtekst van opgeslagen procedure",
"successfulExecution": "Geslaagde uitvoering van opgeslagen procedure",
"resultAriaLabel": "Resultaat van opgeslagen procedure uitvoeren",
"logsAriaLabel": "Opgeslagen procedurelogboeken uitvoeren",
"errors": "Fouten:",
"errorDetailsAriaLabel": "Koppeling foutdetails",
"moreDetails": "Meer informatie",
"consoleLogTab": "console.log"
},
"trigger": {
"id": "Trigger-id",
"idPlaceholder": "Voer de nieuwe trigger-id in",
"type": "Triggertype",
"operation": "Activeringsbewerking",
"body": "Hoofdtekst van trigger",
"bodyAriaLabel": "Hoofdtekst van trigger",
"pre": "Pre",
"post": "Bericht",
"all": "Alle",
"operationCreate": "Maken",
"operationDelete": "Verwijderen",
"operationReplace": "Vervangen"
},
"udf": {
"id": "Door de gebruiker gedefinieerde functie-id",
"idPlaceholder": "Voer de nieuwe door de gebruiker gedefinieerde functie-id in",
"body": "Hoofdtekst van door de gebruiker gedefinieerde functie",
"bodyAriaLabel": "Hoofdtekst van door de gebruiker gedefinieerde functie"
},
"conflicts": {
"unsavedChanges": "Niet-opgeslagen wijzigingen",
"changesWillBeLost": "Wijzigingen gaan verloren. Wilt u doorgaan?",
"resolveConflictFailed": "Oplossen van conflict is mislukt",
"deleteConflictFailed": "Verwijderen van conflict is mislukt",
"refreshGridFailed": "Kan het raster met documenten niet vernieuwen"
},
"mongoShell": {
"title": "Mongo-shell"
}
},
"panes": {
"deleteDatabase": {
"panelTitle": "Delete {{databaseName}}",
"warningMessage": "Warning! The action you are about to take cannot be undone. Continuing will permanently delete this resource and all of its children resources.",
"confirmPrompt": "Confirm by typing the {{databaseName}} id (name)",
"inputMismatch": "Input {{databaseName}} name \"{{input}}\" does not match the selected {{databaseName}} \"{{selectedId}}\"",
"feedbackTitle": "Help us improve Azure Cosmos DB!",
"feedbackReason": "What is the reason why you are deleting this {{databaseName}}?"
},
"deleteCollection": {
"panelTitle": "Delete {{collectionName}}",
"confirmPrompt": "Confirm by typing the {{collectionName}} id",
"inputMismatch": "Input id {{input}} does not match the selected {{selectedId}}",
"feedbackTitle": "Help us improve Azure Cosmos DB!",
"feedbackReason": "What is the reason why you are deleting this {{collectionName}}?"
},
"addDatabase": {
"databaseLabel": "Database {{suffix}}",
"databaseIdLabel": "Database id",
"keyspaceIdLabel": "Keyspace id",
"databaseIdPlaceholder": "Type a new {{databaseLabel}} id",
"databaseTooltip": "A {{databaseLabel}} is a logical container of one or more {{collectionsLabel}}",
"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."
},
"addCollection": {
"createNew": "Create new",
"useExisting": "Use existing",
"databaseTooltip": "A database is analogous to a namespace. It is the unit of management for a set of {{collectionName}}.",
"shareThroughput": "Share throughput across {{collectionName}}",
"shareThroughputTooltip": "Throughput configured at the database level will be shared across all {{collectionName}} within the database.",
"collectionIdLabel": "{{collectionName}} id",
"collectionIdTooltip": "Unique identifier for the {{collectionName}} and used for id-based routing through REST and all SDKs.",
"collectionIdPlaceholder": "e.g., {{collectionName}}1",
"collectionIdAriaLabel": "{{collectionName}} id, Example {{collectionName}}1",
"existingDatabaseAriaLabel": "Choose existing {{databaseName}} id",
"existingDatabasePlaceholder": "Choose existing {{databaseName}} id",
"indexing": "Indexing",
"turnOnIndexing": "Turn on indexing",
"automatic": "Automatic",
"turnOffIndexing": "Turn off indexing",
"off": "Off",
"sharding": "Sharding",
"shardingTooltip": "Sharded collections split your data across many replica sets (shards) to achieve unlimited scalability. Sharded collections require choosing a shard key (field) to evenly distribute your data.",
"unsharded": "Unsharded",
"unshardedLabel": "Unsharded (20GB limit)",
"sharded": "Sharded",
"addPartitionKey": "Add hierarchical partition key",
"hierarchicalPartitionKeyInfo": "This feature allows you to partition your data with up to three levels of keys for better data distribution. Requires .NET V3, Java V4 SDK, or preview JavaScript V3 SDK.",
"provisionDedicatedThroughput": "Provision dedicated throughput for this {{collectionName}}",
"provisionDedicatedThroughputTooltip": "You can optionally provision dedicated throughput for a {{collectionName}} within a database that has throughput provisioned. This dedicated throughput amount will not be shared with other {{collectionNamePlural}} in the database and does not count towards the throughput you provisioned for the database. This throughput amount will be billed in addition to the throughput amount you provisioned at the database level.",
"uniqueKeysPlaceholderMongo": "Comma separated paths e.g. firstName,address.zipCode",
"uniqueKeysPlaceholderSql": "Comma separated paths e.g. /firstName,/address/zipCode",
"addUniqueKey": "Add unique key",
"enableAnalyticalStore": "Enable analytical store",
"disableAnalyticalStore": "Disable analytical store",
"on": "On",
"analyticalStoreSynapseLinkRequired": "Azure Synapse Link is required for creating an analytical store {{collectionName}}. Enable Synapse Link for this Cosmos DB account.",
"enable": "Enable",
"containerVectorPolicy": "Container Vector Policy",
"containerFullTextSearchPolicy": "Container Full Text Search Policy",
"advanced": "Advanced",
"mongoIndexingTooltip": "The _id field is indexed by default. Creating a wildcard index for all fields will optimize queries and is recommended for development.",
"createWildcardIndex": "Create a Wildcard Index on all fields",
"legacySdkCheckbox": "My application uses an older Cosmos .NET or Java SDK version (.NET V1 or Java V2)",
"legacySdkInfo": "To ensure compatibility with older SDKs, the created container will use a legacy partitioning scheme that supports partition key values of size only up to 101 bytes. If this is enabled, you will not be able to use hierarchical partition keys.",
"indexingOnInfo": "All properties in your documents will be indexed by default for flexible and efficient queries.",
"indexingOffInfo": "Indexing will be turned off. Recommended if you don't need to run queries or only have key value operations.",
"indexingOffWarning": "By creating this container with indexing turned off, you will not be able to make any indexing policy changes. Indexing changes are only allowed on a container with a indexing policy.",
"acknowledgeSpendErrorMonthly": "Please acknowledge the estimated monthly spend.",
"acknowledgeSpendErrorDaily": "Please acknowledge the estimated daily spend.",
"unshardedMaxRuError": "Unsharded collections support up to 10,000 RUs",
"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"
},
"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.",
"partitionKeyTooltip": "The {{partitionKeyName}} is used to automatically distribute data across partitions for scalability. Choose a property in your JSON document that has a wide range of values and evenly distributes request volume.",
"partitionKeyTooltipSqlSuffix": " For small read-heavy workloads or write-heavy workloads of any size, id is often a good choice.",
"shardKeyLabel": "Shard key",
"partitionKeyLabel": "Partition key",
"shardKeyPlaceholder": "e.g., categoryId",
"partitionKeyPlaceholderDefault": "e.g., /address",
"partitionKeyPlaceholderFirst": "Required - first partition key e.g., /TenantId",
"partitionKeyPlaceholderSecond": "second partition key e.g., /UserId",
"partitionKeyPlaceholderThird": "third partition key e.g., /SessionId",
"partitionKeyPlaceholderGraph": "e.g., /address/zipCode",
"uniqueKeysTooltip": "Unique keys provide developers with the ability to add a layer of data integrity to their database. By creating a unique key policy when a container is created, you ensure the uniqueness of one or more values per partition key.",
"uniqueKeysLabel": "Unique keys",
"analyticalStoreLabel": "Analytical Store",
"analyticalStoreTooltip": "Enable analytical store capability to perform near real-time analytics on your operational data, without impacting the performance of transactional workloads.",
"analyticalStoreDescription": "Enable analytical store capability to perform near real-time analytics on your operational data, without impacting the performance of transactional workloads.",
"vectorPolicyTooltip": "Describe any properties in your data that contain vectors, so that they can be made available for similarity queries."
},
"settings": {
"pageOptions": "Page Options",
"pageOptionsDescription": "Choose Custom to specify a fixed amount of query results to show, or choose Unlimited to show as many query results per page.",
"queryResultsPerPage": "Query results per page",
"queryResultsPerPageTooltip": "Enter the number of query results that should be shown per page.",
"customQueryItemsPerPage": "Custom query items per page",
"custom": "Custom",
"unlimited": "Unlimited",
"entraIdRbac": "Enable Entra ID RBAC",
"entraIdRbacDescription": "Choose Automatic to enable Entra ID RBAC automatically. True/False to force enable/disable Entra ID RBAC.",
"true": "True",
"false": "False",
"regionSelection": "Region Selection",
"regionSelectionDescription": "Changes region the Cosmos Client uses to access account.",
"selectRegion": "Select Region",
"selectRegionTooltip": "Changes the account endpoint used to perform client operations.",
"globalDefault": "Global (Default)",
"readWrite": "(Read/Write)",
"read": "(Read)",
"queryTimeout": "Query Timeout",
"queryTimeoutDescription": "When a query reaches a specified time limit, a popup with an option to cancel the query will show unless automatic cancellation has been enabled.",
"enableQueryTimeout": "Enable query timeout",
"queryTimeoutMs": "Query timeout (ms)",
"automaticallyCancelQuery": "Automatically cancel query after timeout",
"ruLimit": "RU Limit",
"ruLimitDescription": "If a query exceeds a configured RU limit, the query will be aborted.",
"enableRuLimit": "Enable RU limit",
"ruLimitLabel": "RU Limit (RU)",
"defaultQueryResults": "Default Query Results View",
"defaultQueryResultsDescription": "Select the default view to use when displaying query results.",
"retrySettings": "Retry Settings",
"retrySettingsDescription": "Retry policy associated with throttled requests during CosmosDB queries.",
"maxRetryAttempts": "Max retry attempts",
"maxRetryAttemptsTooltip": "Max number of retries to be performed for a request. Default value 9.",
"fixedRetryInterval": "Fixed retry interval (ms)",
"fixedRetryIntervalTooltip": "Fixed retry interval in milliseconds to wait between each retry ignoring the retryAfter returned as part of the response. Default value is 0 milliseconds.",
"maxWaitTime": "Max wait time (s)",
"maxWaitTimeTooltip": "Max wait time in seconds to wait for a request while the retries are happening. Default value 30 seconds.",
"enableContainerPagination": "Enable container pagination",
"enableContainerPaginationDescription": "Load 50 containers at a time. Currently, containers are not pulled in alphanumeric order.",
"enableCrossPartitionQuery": "Enable cross-partition query",
"enableCrossPartitionQueryDescription": "Send more than one request while executing a query. More than one request is necessary if the query is not scoped to single partition key value.",
"maxDegreeOfParallelism": "Maximale mate van parallelle uitvoering",
"maxDegreeOfParallelismDescription": "Gets or sets the number of concurrent operations run client side during parallel query execution. A positive property value limits the number of concurrent operations to the set value. If it is set to less than 0, the system automatically decides the number of concurrent operations to run.",
"maxDegreeOfParallelismQuery": "Query up to the max degree of parallelism.",
"priorityLevel": "Priority Level",
"priorityLevelDescription": "Sets the priority level for data-plane requests from Data Explorer when using Priority-Based Execution. If \"None\" is selected, Data Explorer will not specify priority level, and the server-side default priority level will be used.",
"displayGremlinQueryResults": "Display Gremlin query results as:",
"displayGremlinQueryResultsDescription": "Select Graph to automatically visualize the query results as a Graph or JSON to display the results as JSON.",
"graph": "Graph",
"json": "JSON",
"graphAutoVisualization": "Graph Auto-visualization",
"enableSampleDatabase": "Enable sample database",
"enableSampleDatabaseDescription": "This is a sample database and collection with synthetic product data you can use to explore using NoSQL queries. This will appear as another database in the Data Explorer UI, and is created by, and maintained by Microsoft at no cost to you.",
"enableSampleDbAriaLabel": "Enable sample db for query exploration",
"guidRepresentation": "Guid Representation",
"guidRepresentationDescription": "GuidRepresentation in MongoDB refers to how Globally Unique Identifiers (GUIDs) are serialized and deserialized when stored in BSON documents. This will apply to all document operations.",
"advancedSettings": "Advanced Settings",
"ignorePartitionKey": "Ignore partition key on document update",
"ignorePartitionKeyTooltip": "If checked, the partition key value will not be used to locate the document during update operations. Only use this if document updates are failing due to an abnormal partition key.",
"clearHistory": "Clear History",
"clearHistoryConfirm": "Weet u zeker dat u wilt verdergaan?",
"clearHistoryDescription": "This action will clear the all customizations for this account in this browser, including:",
"clearHistoryTabLayout": "Reset your customized tab layout, including the splitter positions",
"clearHistoryTableColumns": "Erase your table column preferences, including any custom columns",
"clearHistoryFilters": "Clear your filter history",
"clearHistoryRegion": "Reset region selection to global",
"increaseValueBy1000": "Increase value by 1000",
"decreaseValueBy1000": "Decrease value by 1000",
"none": "None",
"low": "Low",
"high": "High",
"automatic": "Automatic",
"enhancedQueryControl": "Enhanced query control",
"enableQueryControl": "Enable query control",
"explorerVersion": "Explorer Version",
"accountId": "Account ID",
"sessionId": "Session ID",
"popupsDisabledError": "We were unable to establish authorization for this account, due to pop-ups being disabled in the browser.\nPlease enable pop-ups for this site and click on \"Login for Entra ID\" button",
"failedToAcquireTokenError": "Failed to acquire authorization token automatically. Please click on \"Login for Entra ID\" button to enable Entra ID RBAC operations"
},
"saveQuery": {
"panelTitle": "Save Query",
"setupCostMessage": "For compliance reasons, we save queries in a container in your Azure Cosmos account, in a separate database called “{{databaseName}}”. To proceed, we need to create a container in your account, estimated additional cost is $0.77 daily.",
"completeSetup": "Complete setup",
"noQueryNameError": "No query name specified",
"invalidQueryContentError": "Invalid query content specified",
"failedToSaveQueryError": "Failed to save query {{queryName}}",
"failedToSetupContainerError": "Failed to setup a container for saved queries",
"accountNotSetupError": "Failed to save query: account not setup to save queries",
"name": "Name"
},
"loadQuery": {
"noFileSpecifiedError": "No file specified",
"failedToLoadQueryError": "Kan de query niet laden",
"failedToLoadQueryFromFileError": "Failed to load query from file {{fileName}}",
"selectFilesToOpen": "Select a query document",
"browseFiles": "Browse"
},
"executeStoredProcedure": {
"enterInputParameters": "Enter input parameters (if any)",
"key": "Key",
"param": "Param",
"partitionKeyValue": "Partition key value",
"value": "Value",
"addNewParam": "Add New Param",
"addParam": "Add param",
"deleteParam": "Delete param",
"invalidParamError": "Invalid param specified: {{invalidParam}}",
"invalidParamConsoleError": "Invalid param specified: {{invalidParam}} is not a valid literal value",
"stringType": "String",
"customType": "Custom"
},
"uploadItems": {
"noFilesSpecifiedError": "No files were specified. Please input at least one file.",
"selectJsonFiles": "Select JSON Files",
"selectJsonFilesTooltip": "Select one or more JSON files to upload. Each file can contain a single JSON document or an array of JSON documents. The combined size of all files in an individual upload operation must be less than 2 MB. You can perform multiple upload operations for larger data sets.",
"fileNameColumn": "FILE NAME",
"statusColumn": "STATUS",
"uploadStatus": "{{numSucceeded}} created, {{numThrottled}} throttled, {{numFailed}} errors",
"uploadedFiles": "Uploaded files"
},
"copyNotebook": {
"copyFailedError": "Failed to copy {{name}} to {{destination}}",
"uploadFailedError": "Failed to upload {{name}}",
"location": "Location",
"locationAriaLabel": "Location",
"selectLocation": "Select a notebook location to copy",
"name": "Name"
},
"publishNotebook": {
"publishFailedError": "Failed to publish {{notebookName}} to gallery",
"publishDescription": "When published, this notebook will appear in the Azure Cosmos DB notebooks public gallery. Make sure you have removed any sensitive data or output before publishing.",
"publishPrompt": "Would you like to publish and share \"{{name}}\" to the gallery?",
"coverImage": "Cover image",
"coverImageUrl": "Cover image url",
"name": "Name",
"description": "Description",
"tags": "Tags",
"tagsPlaceholder": "Optional tag 1, Optional tag 2",
"preview": "Preview",
"urlType": "URL",
"customImage": "Custom Image",
"takeScreenshot": "Take Screenshot",
"useFirstDisplayOutput": "Use First Display Output",
"failedToCaptureOutput": "Failed to capture first output",
"outputDoesNotExist": "Output does not exist for any of the cells.",
"failedToConvertError": "Failed to convert {{fileName}} to base64 format",
"failedToUploadError": "Failed to upload {{fileName}}"
},
"changePartitionKey": {
"failedToStartError": "Failed to start data transfer job",
"suboptimalPartitionKeyError": "Warning: The system has detected that your collection may be using a suboptimal partition key",
"description": "When changing a containers partition key, you will need to create a destination container with the correct partition key. You may also select an existing destination container.",
"sourceContainerId": "Source {{collectionName}} id",
"destinationContainerId": "Destination {{collectionName}} id",
"collectionIdTooltip": "Unique identifier for the {{collectionName}} and used for id-based routing through REST and all SDKs.",
"collectionIdPlaceholder": "e.g., {{collectionName}}1",
"collectionIdAriaLabel": "{{collectionName}} id, Example {{collectionName}}1",
"existingContainers": "Existing Containers",
"partitionKeyWarning": "The destination container must not already exist. Data Explorer will create a new destination container for you."
},
"cassandraAddCollection": {
"keyspaceLabel": "Keyspace name",
"keyspaceTooltip": "Select an existing keyspace or enter a new keyspace id.",
"tableIdLabel": "Enter CQL command to create the table.",
"enterTableId": "Enter table Id",
"tableSchemaAriaLabel": "Table schema",
"provisionDedicatedThroughput": "Provision dedicated throughput for this table",
"provisionDedicatedThroughputTooltip": "You can optionally provision dedicated throughput for a table within a keyspace that has throughput provisioned. This dedicated throughput amount will not be shared with other tables in the keyspace and does not count towards the throughput you provisioned for the keyspace. This throughput amount will be billed in addition to the throughput amount you provisioned at the keyspace level."
},
"tables": {
"addProperty": "Add Property",
"addRow": "Add Row",
"addEntity": "Add Entity",
"back": "back",
"nullFieldsWarning": "Warning: Null fields will not be displayed for editing.",
"propertyEmptyError": "{{property}} cannot be empty. Please input a value for {{property}}",
"whitespaceError": "{{property}} cannot have whitespace. Please input a value for {{property}} without whitespace",
"propertyTypeEmptyError": "Property type cannot be empty. Please select a type from the dropdown for property {{property}}"
},
"tableQuerySelect": {
"selectColumns": "Selecteer de kolommen waarop u een query wilt uitvoeren.",
"availableColumns": "Available Columns"
},
"tableColumnSelection": {
"selectColumns": "Select which columns to display in your view of items in your container.",
"searchFields": "Search fields",
"reset": "Reset",
"partitionKeySuffix": " (partition key)"
},
"newVertex": {
"addProperty": "Add Property"
},
"addGlobalSecondaryIndex": {
"globalSecondaryIndexId": "Global secondary index container id",
"globalSecondaryIndexIdPlaceholder": "e.g., indexbyEmailId",
"projectionQuery": "Projection query",
"projectionQueryPlaceholder": "SELECT c.email, c.accountId FROM c",
"projectionQueryTooltip": "Learn more about defining global secondary indexes.",
"disabledTitle": "A global secondary index is already being created. Please wait for it to complete before creating another one."
},
"stringInput": {
"inputMismatchError": "Input {{input}} does not match the selected {{selectedId}}"
},
"panelInfo": {
"information": "Information",
"moreDetails": "More details"
}
}
}

View File

@@ -0,0 +1,727 @@
{
"common": {
"ok": "OK",
"cancel": "Anuluj",
"close": "Zamknij",
"save": "Zapisz",
"delete": "Usuń",
"update": "Aktualizuj",
"discard": "Odrzuć",
"execute": "Wykonaj",
"loading": "Ładowanie",
"loadingEllipsis": "Trwa ładowanie...",
"next": "Dalej",
"previous": "Wstecz",
"yes": "Tak",
"no": "Nie",
"result": "Wynik",
"learnMore": "Dowiedz się więcej",
"getStarted": "Wprowadzenie",
"retry": "Ponów próbę",
"apply": "Zastosuj",
"refresh": "Odśwież",
"copy": "Kopiuj",
"create": "Utwórz",
"confirm": "Potwierdź",
"open": "Otwarte",
"rename": "Zmień nazwę",
"download": "Pobierz",
"upload": "Przekaż",
"connect": "Połącz",
"remove": "Usuń",
"load": "Załaduj",
"publish": "Publikuj",
"browse": "Przeglądaj",
"increaseValueBy1": "Zwiększ wartość o 1",
"decreaseValueBy1": "Zmniejsz wartość o 1"
},
"splashScreen": {
"title": {
"default": "Azure Cosmos DB — Zapraszamy!",
"postgres": "Azure Cosmos DB for PostgreSQL — Zapraszamy!",
"vcoreMongo": "Witamy w usłudze Azure DocumentDB (ze zgodnością z bazą danych MongoDB)"
},
"subtitle": {
"default": "Globalnie rozproszona, wielomodelowa usługa bazy danych na dowolną skalę",
"getStarted": "Rozpocznij pracę z naszymi przykładowymi zestawami danych, dokumentacją i dodatkowymi narzędziami."
},
"quickStart": {
"title": "Uruchom przewodnik Szybki start",
"description": "Uruchom samouczek Szybki start, aby rozpocząć pracę z przykładowymi danymi"
},
"newCollection": {
"title": "Nowy element {{collectionName}}",
"description": "Utwórz nowy kontener na potrzeby magazynu i przepływności"
},
"samplesGallery": {
"title": "Galeria przykładów usługi Azure Cosmos DB",
"description": "Odkryj przykłady przedstawiające skalowalne, inteligentne wzorce aplikacji. Wypróbuj ją teraz, aby zobaczyć, jak szybko możesz przejść od koncepcji do kodu za pomocą usługi Cosmos DB"
},
"connectCard": {
"title": "Połącz",
"description": "Wolisz korzystać z własnych narzędzi? Znajdź parametr połączenia potrzebny do nawiązania połączenia",
"pgAdmin": {
"title": "Nawiąż połączenie za pomocą narzędzia pgAdmin",
"description": "Wolisz pgAdmin? Tutaj znajdziesz parametry połączenia"
},
"vsCode": {
"title": "Nawiązywanie połączenia z edytorem VS Code",
"description": "Wykonuj zapytania dotyczące klastrów MongoDB i DocumentDB oraz zarządzaj nimi w programie Visual Studio Code"
}
},
"shell": {
"postgres": {
"title": "Powłoka PostgreSQL",
"description": "Utwórz tabelę i pracuj z danymi za pomocą powłoki interfejsu PostgreSQL"
},
"vcoreMongo": {
"title": "Powłoka Mongo",
"description": "Utwórz kolekcję i pracuj z danymi przy użyciu interfejsu powłoki bazy danych MongoDB"
}
},
"teachingBubble": {
"newToPostgres": {
"headline": "Jesteś nowym użytkownikiem usługi Cosmos DB PGSQL?",
"body": "Witaj! Jeśli dopiero zaczynasz pracę z Cosmos DB PGSQL i potrzebujesz pomocy przy rozpoczynaniu pracy, tutaj znajdziesz przykładowe dane i zapytania."
},
"resetPassword": {
"headline": "Utwórz hasło",
"body": "Jeśli hasło nie zostało jeszcze zmienione, zmień je teraz."
},
"coachMark": {
"headline": "Rozpocznij od przykładu {{collectionName}}",
"body": "Zostanie wyświetlony przewodnik, aby utworzyć przykładowy kontener z przykładowymi danymi, a następnie udostępnimy Ci przewodnik po eksploratorze danych. Możesz również anulować uruchamianie tego przewodnika i eksplorować siebie"
}
},
"sections": {
"recents": "Ostatnie",
"clearRecents": "Wyczyść ostatnie",
"top3": "3 najważniejsze rzeczy, które musisz wiedzieć",
"learningResources": "Zasoby szkoleniowe",
"nextSteps": "Następne kroki",
"tipsAndLearnMore": "Porady i dowiedz się więcej",
"notebook": "Notes",
"needHelp": "Potrzebujesz pomocy?"
},
"top3Items": {
"sql": {
"advancedModeling": {
"title": "Zaawansowane wzorce modelowania",
"description": "Poznaj zaawansowane strategie optymalizowania bazy danych."
},
"partitioning": {
"title": "Najlepsze rozwiązania dotyczące partycjonowania",
"description": "Dowiedz się, jak stosować model danych i strategie partycjonowania."
},
"resourcePlanning": {
"title": "Planowanie wymagań dotyczących zasobów",
"description": "Poznaj różne opcje konfiguracji."
}
},
"mongo": {
"whatIsMongo": {
"title": "Co to jest interfejs API bazy danych MongoDB?",
"description": "Omówienie usługi Azure Cosmos DB dla bazy danych MongoDB i jej funkcji."
},
"features": {
"title": "Funkcje i składnia",
"description": "Odkryj zalety i funkcje"
},
"migrate": {
"title": "Migrowanie danych",
"description": "Kroki przed migracją na potrzeby przenoszenia danych"
}
},
"cassandra": {
"buildJavaApp": {
"title": "Utwórz aplikację Java",
"description": "Utwórz aplikację Java przy użyciu zestawu SDK."
},
"partitioning": {
"title": "Najlepsze rozwiązania dotyczące partycjonowania",
"description": "Dowiedz się, jak działa partycjonowanie."
},
"requestUnits": {
"title": "Jednostki żądania (jednostki RU)",
"description": "Informacje o opłatach za jednostki RU."
}
},
"gremlin": {
"dataModeling": {
"title": "Modelowanie danych",
"description": "Zalecenia dotyczące modelowania danych programu Graph"
},
"partitioning": {
"title": "najlepszymi rozwiązaniami dotyczącymi partycjonowania",
"description": "Dowiedz się, jak działa partycjonowanie"
},
"queryData": {
"title": "Wykonaj zapytanie dotyczące danych",
"description": "Wykonywanie zapytań o dane przy użyciu języka Gremlin"
}
},
"tables": {
"whatIsTable": {
"title": "Co to jest interfejs API tabel?",
"description": "Omówienie usługi Azure Cosmos DB for Table i jej funkcji"
},
"migrate": {
"title": "Migrowanie danych",
"description": "Dowiedz się, jak migrować dane"
},
"faq": {
"title": "Azure Cosmos DB for Table — często zadawane pytania",
"description": "Typowe pytania dotyczące usługi Azure Cosmos DB for Table"
}
}
},
"learningResources": {
"shortcuts": {
"title": "Skróty klawiaturowe w Eksploratorze danych",
"description": "Poznaj skróty klawiaturowe umożliwiające nawigowanie w Eksploratorze danych."
},
"liveTv": {
"title": "Poznaj podstawy",
"description": "Obejrzyj wprowadzenie do programu telewizyjnego na żywo w usłudze Azure Cosmos DB i obejrzyj wideo."
},
"sql": {
"sdk": {
"title": "Wprowadzenie do korzystania z zestawu SDK",
"description": "Dowiedz się więcej o zestawie SDK usługi Azure Cosmos DB."
},
"migrate": {
"title": "Migrowanie danych",
"description": "Migruj dane przy użyciu usług platformy Azure i rozwiązań typu open source."
}
},
"mongo": {
"nodejs": {
"title": "Tworzenie aplikacji za pomocą Node.js",
"description": "Utwórz aplikację Node.js."
},
"gettingStarted": {
"title": "Przewodnik Wprowadzenie",
"description": "Zapoznaj się z podstawowymi informacjami dotyczącymi rozpoczynania pracy."
}
},
"cassandra": {
"createContainer": {
"title": "Utwórz kontener",
"description": "Zapoznaj się z opcjami tworzenia kontenera."
},
"throughput": {
"title": "Zaaprowizuj przepływność",
"description": "Dowiedz się, jak skonfigurować przepływność."
}
},
"gremlin": {
"getStarted": {
"title": "Wprowadzenie ",
"description": "Twórz, wykonuj zapytania i przechodź przy użyciu konsoli Gremlin"
},
"importData": {
"title": "Importuj dane wykresu",
"description": "Dowiedz się więcej o zbiorczym pozyskiwaniu danych przy użyciu narzędzia BulkExecutor"
}
},
"tables": {
"dotnet": {
"title": "Utwórz aplikację platformy .NET",
"description": "Jak uzyskać dostęp do usługi Azure Cosmos DB for Table z poziomu aplikacji platformy .NET."
},
"java": {
"title": "Utwórz aplikację Java",
"description": "Utwórz aplikację usługi Azure Cosmos DB for Table przy użyciu zestawu Java SDK "
}
}
},
"nextStepItems": {
"postgres": {
"dataModeling": "Modelowanie danych",
"distributionColumn": "Jak wybrać kolumnę dystrybucji",
"buildApps": "Twórz aplikacje przy użyciu języka Python/Java/Django"
},
"vcoreMongo": {
"migrateData": "Migruj dane",
"vectorSearch": "Twórz aplikacje AI za pomocą funkcji wyszukiwania wektorowego",
"buildApps": "Twórz aplikacje za pomocą środowiska Nodejs"
}
},
"learnMoreItems": {
"postgres": {
"performanceTuning": "Dostrajanie wydajności",
"diagnosticQueries": "Przydatne zapytania diagnostyczne",
"sqlReference": "Rozproszona dokumentacja SQL"
},
"vcoreMongo": {
"vectorSearch": "Wyszukiwanie wektorowe",
"textIndexing": "Indeksowanie tekstu",
"troubleshoot": "Rozwiązywanie typowych problemów"
}
},
"fabric": {
"buildTitle": "Utwórz bazę danych",
"useTitle": "Wykonaj „diff” dla swojej bazy danych",
"newContainer": {
"title": "Nowy kontener",
"description": "Utwórz kontener docelowy do przechowywania danych"
},
"sampleData": {
"title": "Dane przykładowe",
"description": "Załaduj przykładowe dane w bazie danych"
},
"sampleVectorData": {
"title": "Przykładowe dane wektorowe",
"description": "Załaduj przykładowe dane wektorowe za pomocą polecenia text-embedding-ada-002"
},
"appDevelopment": {
"title": "Opracowywanie aplikacji",
"description": "Zacznij tutaj, aby używać zestawu SDK do kompilowania aplikacji"
},
"sampleGallery": {
"title": "Galeria przykładów",
"description": "Uzyskaj rzeczywiste, kompleksowe przykłady"
}
},
"sampleDataDialog": {
"title": "Dane przykładowe",
"startButton": "Start",
"createPrompt": "Utwórz kontener „{{containerName}}” i zaimportuj do niego przykładowe dane. Może to potrwać kilka minut.",
"creatingContainer": "Tworzenie kontenera „{{containerName}}”...",
"importingData": "Trwa importowanie danych do folderu „{{containerName}}”...",
"success": "Pomyślnie utworzono „{{containerName}}” z przykładowymi danymi.",
"errorContainerExists": "Kontener „{{containerName}}” w bazie danych „{{databaseName}}” już istnieje. Usuń go i spróbuj ponownie.",
"errorCreateContainer": "Nie można utworzyć kontenera: {{error}}",
"errorImportData": "Nie można zaimportować danych: {{error}}"
}
},
"contextMenu": {
"newContainer": "Nowy element {{containerName}}",
"restoreContainer": "Przywróć {{containerName}}",
"deleteDatabase": "Usuń {{databaseName}}",
"deleteContainer": "Usuń {{containerName}}",
"newSqlQuery": "Nowe zapytanie SQL",
"newQuery": "Nowe zapytanie",
"openMongoShell": "Otwórz powłokę Mongo",
"newShell": "Nowa powłoka",
"openCassandraShell": "Otwórz powłokę Cassandra",
"newStoredProcedure": "Nowa procedura składowana",
"newUdf": "Nowa funkcja UDF",
"newTrigger": "Nowy wyzwalacz",
"deleteStoredProcedure": "Usuń procedurę składowaną",
"deleteTrigger": "Usuń wyzwalacz",
"deleteUdf": "Usuń funkcję zdefiniowaną przez użytkownika"
},
"tabs": {
"documents": {
"newItem": "Nowy element",
"newDocument": "Nowy dokument",
"uploadItem": "Przekaż element",
"applyFilter": "Zastosuj filtr",
"unsavedChanges": "Niezapisane zmiany",
"unsavedChangesMessage": "Wszystkie niezapisane zmiany zostaną utracone. Czy chcesz kontynuować?",
"createDocumentFailed": "Tworzenie dokumentu nie powiodło się",
"updateDocumentFailed": "Aktualizacja dokumentu nie powiodła się",
"documentDeleted": "Dokument został pomyślnie usunięty.",
"deleteDocumentDialogTitle": "Usuń dokument",
"deleteDocumentsDialogTitle": "Usuń dokumenty",
"throttlingError": "Nie można usunąć niektórych dokumentów z powodu błędu ograniczenia szybkości. Spróbuj ponownie później. Aby temu zapobiec w przyszłości, rozważ zwiększenie przepustowości kontenera lub bazy danych.",
"deleteFailed": "Usuwanie dokumentów nie powiodło się ({{error}})",
"missingShardProperty": "W dokumencie brakuje właściwości fragmentu: {{partitionKeyProperty}}",
"refreshGridFailed": "Nie udało się odświeżyć siatki dokumentów",
"confirmDelete": "Czy na pewno chcesz usunąć {{documentName}}?",
"confirmDeleteTitle": "Potwierdź usunięcie",
"selectedItems": "zaznaczone elementy ({{count}})",
"selectedItem": "wybrany element",
"selectedDocuments": "wybrane dokumenty ({{count}})",
"selectedDocument": "wybrany dokument",
"deleteDocumentFailedLog": "Nie można usunąć dokumentu {{documentId}} z kodem stanu {{statusCode}}",
"deleteSuccessLog": "Pomyślnie usunięto dokumenty ({{count}})",
"deleteThrottledLog": "Nie można usunąć dokumentów ({{count}}) z powodu błędu „Żądanie zbyt duże” (429). Trwa ponawianie próby...",
"missingShardKeyLog": "Nie udało się zapisać nowego dokumentu: nie zdefiniowano klucza fragmentu dokumentu",
"filterTooltip": "Wpisz predykat zapytania lub wybierz go z listy.",
"loadMore": "Załaduj więcej",
"documentEditor": "Edytor dokumentów",
"savedFilters": "Zapisane filtry",
"defaultFilters": "Domyślne filtry",
"abort": "Przerwij",
"deletingDocuments": "Usuwanie dokumentów ({{count}})",
"deletedDocumentsSuccess": "Pomyślnie usunięto dokumenty ({{count}}).",
"deleteAborted": "Usuwanie dokumentów zostało przerwane.",
"failedToDeleteDocuments": "Nie można usunąć dokumentów ({{count}}).",
"requestTooLargeBase": "Niektóre żądania usunięcia nie powiodły się z powodu wyjątku „Żądanie za duże” (429)",
"retriedSuccessfully": "ale pomyślnie ponowiono próbę.",
"retryingNow": "Ponawianie próby teraz.",
"increaseThroughputTip": "Aby temu zapobiec w przyszłości, rozważ zwiększenie przepustowości kontenera lub bazy danych.",
"numberOfSelectedDocuments": "Liczba wybranych dokumentów: {{count}}",
"mongoFilterPlaceholder": "Wpisz predykat zapytania (np. {\"id\":\"foo\"}), wybierz go z listy rozwijanej lub pozostaw pusty, aby zapytać o wszystkie dokumenty.",
"sqlFilterPlaceholder": "Wpisz predykat zapytania (np. WHERE c.id=\"1\"), wybierz go z listy rozwijanej lub pozostaw pusty, aby zapytać o wszystkie dokumenty.",
"error": "Błąd",
"warning": "Ostrzeżenie"
},
"query": {
"executeQuery": "Wykonaj zapytanie",
"executeSelection": "Wykonaj zaznaczenie",
"saveQuery": "Zapisz zapytanie",
"downloadQuery": "Pobierz zapytanie",
"cancelQuery": "Anuluj zapytanie",
"openSavedQueries": "Otwórz zapisane zapytania",
"vertical": "W pionie",
"horizontal": "W poziomie",
"view": "Wyświetl",
"editingQuery": "Edytowanie zapytania"
},
"storedProcedure": {
"id": "Identyfikator procedury składowanej",
"idPlaceholder": "Wprowadź nowy identyfikator procedury składowanej",
"idAriaLabel": "Identyfikator procedury składowanej",
"body": "Treść procedury składowanej",
"bodyAriaLabel": "Treść procedury składowanej",
"successfulExecution": "Pomyślne wykonanie procedury składowanej",
"resultAriaLabel": "Wykonaj wynik procedury składowanej",
"logsAriaLabel": "Wykonywanie dzienników procedur składowanej",
"errors": "Błędy:",
"errorDetailsAriaLabel": "Link szczegółów błędu",
"moreDetails": "Więcej szczegółów",
"consoleLogTab": "console.log"
},
"trigger": {
"id": "Identyfikator wyzwalacza",
"idPlaceholder": "Wprowadź nowy identyfikator wyzwalacza",
"type": "Typ wyzwalacza",
"operation": "Operacja wyzwalacza",
"body": "Treść wyzwalacza",
"bodyAriaLabel": "Treść wyzwalacza",
"pre": "Przed operacją",
"post": "Opublikuj",
"all": "Wszystkie",
"operationCreate": "Utwórz",
"operationDelete": "Usuń",
"operationReplace": "Zamień"
},
"udf": {
"id": "Identyfikator funkcji zdefiniowanej przez użytkownika",
"idPlaceholder": "Wprowadź nowy identyfikator funkcji zdefiniowanej przez użytkownika",
"body": "Treść funkcji zdefiniowanej przez użytkownika",
"bodyAriaLabel": "Treść funkcji zdefiniowanej przez użytkownika"
},
"conflicts": {
"unsavedChanges": "Niezapisane zmiany",
"changesWillBeLost": "Zmiany zostaną utracone. Czy chcesz kontynuować?",
"resolveConflictFailed": "Rozwiązywanie konfliktu nie powiodło się",
"deleteConflictFailed": "Usuwanie konfliktu nie powiodło się",
"refreshGridFailed": "Nie udało się odświeżyć siatki dokumentów"
},
"mongoShell": {
"title": "Powłoka Mongo"
}
},
"panes": {
"deleteDatabase": {
"panelTitle": "Usuń {{databaseName}}",
"warningMessage": "Ostrzeżenie! Akcji, którą zamierzasz wykonać, nie można cofnąć. Kontynuowanie spowoduje trwałe usunięcie tego zasobu i wszystkich jego zasobów podrzędnych.",
"confirmPrompt": "Potwierdź, wpisując identyfikator {{databaseName}} (nazwa)",
"inputMismatch": "Nazwa wejściowa {{databaseName}} „{{input}}” nie pasuje do wybranej nazwy {{databaseName}} „{{selectedId}}”",
"feedbackTitle": "Pomóż nam ulepszać usługę Azure Cosmos DB!",
"feedbackReason": "Jaki jest powód usunięcia tego {{databaseName}}?"
},
"deleteCollection": {
"panelTitle": "Usuń {{collectionName}}",
"confirmPrompt": "Potwierdź, wpisując identyfikator {{collectionName}}",
"inputMismatch": "Identyfikator wejściowy {{input}} jest niezgodny z wybranym {{selectedId}}",
"feedbackTitle": "Pomóż nam ulepszać usługę Azure Cosmos DB!",
"feedbackReason": "Jaki jest powód usunięcia tego {{collectionName}}?"
},
"addDatabase": {
"databaseLabel": "Baza danych {{suffix}}",
"databaseIdLabel": "Identyfikator bazy danych",
"keyspaceIdLabel": "Identyfikator przestrzeni kluczy",
"databaseIdPlaceholder": "Wpisz nowy identyfikator {{databaseLabel}}",
"databaseTooltip": "{{databaseLabel}} to logiczny kontener co najmniej jednego {{collectionsLabel}}",
"shareThroughput": "Udostępnij przepływność w usłudze {{collectionsLabel}}",
"shareThroughputTooltip": "Aprowizowana przepływność na poziomie {{databaseLabel}} będzie współdzielona przez wszystkie {{collectionsLabel}} w {{databaseLabel}}.",
"greaterThanError": "Wprowadź wartość większą niż {{minValue}} dla przepływności rozwiązania Autopilot",
"acknowledgeSpendError": "Potwierdź szacowane wydatki {{period}}."
},
"addCollection": {
"createNew": "Utwórz nowy",
"useExisting": "Użyj istniejących",
"databaseTooltip": "Baza danych jest odpowiednikiem przestrzeni nazw. To jednostka zarządzania zestawem {{collectionName}}.",
"shareThroughput": "Udostępnij przepływność w usłudze {{collectionName}}",
"shareThroughputTooltip": "Przepływność skonfigurowana na poziomie bazy danych będzie współdzielona przez wszystkie {{collectionName}} w bazie danych.",
"collectionIdLabel": "identyfikator {{collectionName}}",
"collectionIdTooltip": "Identyfikator unikatowy {{collectionName}} używany do routingu opartego na identyfikatorach prowadzącego przez interfejs REST i wszystkie zestawy SDK.",
"collectionIdPlaceholder": "np. {{collectionName}}1",
"collectionIdAriaLabel": "Identyfikator {{collectionName}}, przykład {{collectionName}}1",
"existingDatabaseAriaLabel": "Wybierz istniejący identyfikator {{databaseName}}",
"existingDatabasePlaceholder": "Wybierz istniejący identyfikator {{databaseName}}",
"indexing": "Indeksowanie",
"turnOnIndexing": "Włącz indeksowanie",
"automatic": "Automatyczne",
"turnOffIndexing": "Wyłącz indeksowanie",
"off": "Wyłączone",
"sharding": "Fragmentacja",
"shardingTooltip": "Kolekcje podzielone na fragmenty rozdzielają dane na wiele zestawów replik (fragmentów), aby osiągnąć nieograniczoną skalowalność. Kolekcje fragmentowane wymagają wybrania klucza fragmentu (pola), który równomiernie rozłoży dane.",
"unsharded": "Bez fragmentów",
"unshardedLabel": "Bez fragmentów (limit 20 GB)",
"sharded": "Podzielony na fragmenty",
"addPartitionKey": "Dodaj hierarchiczny klucz partycji",
"hierarchicalPartitionKeyInfo": "Ta funkcja pozwala na partycjonowanie danych z użyciem do trzech poziomów kluczy, co poprawia dystrybucję danych. Wymaga zestawu .NET V3, Java V4 SDK lub wersji zapoznawczej JavaScript V3 SDK.",
"provisionDedicatedThroughput": "Przydziel dedykowaną przepływność dla tego elementu {{collectionName}}",
"provisionDedicatedThroughputTooltip": "Opcjonalnie można aprowizować dedykowaną przepływność dla {{collectionName}} w bazie danych z aprowizowaną przepływnością. Ta dedykowana przepływność nie zostanie udostępniona innym {{collectionNamePlural}} w bazie danych i nie będzie wliczona do przepływności aprowizowanej dla bazy danych. Ta kwota przepływności będzie rozliczana oprócz aprowizowanej przepływności na poziomie bazy danych.",
"uniqueKeysPlaceholderMongo": "Ścieżki rozdzielone przecinkami, np. firstName,address.zipCode",
"uniqueKeysPlaceholderSql": "Ścieżki rozdzielone przecinkami, np. /firstName,/address/zipCode",
"addUniqueKey": "Dodaj unikatowy klucz",
"enableAnalyticalStore": "Włącz magazyn analityczny",
"disableAnalyticalStore": "Wyłącz magazyn analityczny",
"on": "Włączone",
"analyticalStoreSynapseLinkRequired": "Usługa Azure Synapse Link jest wymagana do utworzenia magazynu analitycznego {{collectionName}}. Włącz usługę Synapse Link dla tego konta usługi Cosmos DB.",
"enable": "Włącz",
"containerVectorPolicy": "Zasady wektorów kontenera",
"containerFullTextSearchPolicy": "Zasady pełnotekstowego wyszukiwania kontenera",
"advanced": "Zaawansowane",
"mongoIndexingTooltip": "Pole _id jest domyślnie indeksowane. Utworzenie indeksu wieloznacznego dla wszystkich pól zoptymalizuje zapytania i jest zalecane podczas programowania.",
"createWildcardIndex": "Utwórz indeks symbolu wieloznacznego dla wszystkich pól",
"legacySdkCheckbox": "Moja aplikacja korzysta ze starszej wersji zestawu Cosmos .NET lub Java SDK (.NET V1 lub Java V2)",
"legacySdkInfo": "Aby zapewnić zgodność ze starszymi zestawami SDK, utworzony kontener będzie korzystał ze starszego schematu partycjonowania, który obsługuje wartości klucza partycji o rozmiarze do 101 bajtów. Jeśli ta opcja jest włączona, nie będzie można używać hierarchicznych kluczy partycji.",
"indexingOnInfo": "Wszystkie właściwości w dokumentach będą domyślnie indeksowane, co umożliwia elastyczne i wydajne zapytania.",
"indexingOffInfo": "Indeksowanie zostanie wyłączone. Zalecane, jeśli nie musisz uruchamiać zapytań lub wykonujesz tylko operacje na wartościach klucza.",
"indexingOffWarning": "Tworząc ten kontener z wyłączonym indeksowaniem, nie będziesz mógł wprowadzać zmian w polityce indeksowania. Zmiany indeksowania są dozwolone tylko w kontenerze z zasadami indeksowania.",
"acknowledgeSpendErrorMonthly": "Potwierdź szacowane miesięczne wydatki.",
"acknowledgeSpendErrorDaily": "Potwierdź szacowane dzienne wydatki.",
"unshardedMaxRuError": "Kolekcje bez fragmentów obsługują do 10 000 jednostek żądań",
"acknowledgeShareThroughputError": "Potwierdź szacowany koszt tej dedykowanej przepływności.",
"vectorPolicyError": "Napraw błędy w zasadach wektora kontenera",
"fullTextSearchPolicyError": "Napraw błędy w zasadach wyszukiwania pełnotekstowych kontenerów",
"addingSampleDataSet": "Dodawanie przykładowego zestawu danych"
},
"addCollectionUtility": {
"shardKeyTooltip": "Klucz fragmentu (pole) służy do dzielenia danych na wiele zestawów replik (fragmentów) w celu osiągnięcia nieograniczonej skalowalności. Ważne jest, aby wybrać pole, które równomiernie rozłoży dane.",
"partitionKeyTooltip": "{{partitionKeyName}} służy do automatycznego dystrybuowania danych między partycjami na potrzeby skalowalności. Wybierz właściwość w dokumencie JSON, która ma szeroki zakres wartości i równomiernie dystrybuuje wolumin żądania.",
"partitionKeyTooltipSqlSuffix": " W przypadku małych obciążeń z dużą ilością odczytu lub obciążeń z dużą ilością zapisu o dowolnym rozmiarze identyfikator jest często dobrym wyborem.",
"shardKeyLabel": "Klucz partycjonujący",
"partitionKeyLabel": "Klucz partycji",
"shardKeyPlaceholder": "np. identyfikator kategorii",
"partitionKeyPlaceholderDefault": "np. /address",
"partitionKeyPlaceholderFirst": "Wymagane — pierwszy klucz partycji, np. /TenantId",
"partitionKeyPlaceholderSecond": "drugi klucz partycji, np. /UserId",
"partitionKeyPlaceholderThird": "trzeci klucz partycji, np., /SessionId",
"partitionKeyPlaceholderGraph": "np. /address/zipCode",
"uniqueKeysTooltip": "Unikatowe klucze zapewniają deweloperom możliwość dodania warstwy integralności danych do bazy danych. Tworząc unikatową politykę kluczy podczas tworzenia kontenera, zapewniasz unikatowość jednej lub więcej wartości na klucz partycji.",
"uniqueKeysLabel": "Unikatowe klucze",
"analyticalStoreLabel": "Magazyn analityczny",
"analyticalStoreTooltip": "Włącz funkcję magazynu analitycznego, aby wykonywać analizy danych operacyjnych niemal w czasie rzeczywistym, bez wpływu na wydajność obciążeń transakcyjnych.",
"analyticalStoreDescription": "Włącz funkcję magazynu analitycznego, aby wykonywać analizy danych operacyjnych niemal w czasie rzeczywistym, bez wpływu na wydajność obciążeń transakcyjnych.",
"vectorPolicyTooltip": "Opisz właściwości w swoich danych, które zawierają wektory, aby można było je wykorzystać w zapytaniach podobieństwa."
},
"settings": {
"pageOptions": "Opcje strony",
"pageOptionsDescription": "Wybierz Niestandardowe, aby określić stałą liczbę wyników zapytania do wyświetlenia, lub Bez ograniczeń, aby pokazać dowolną liczbę wyników na stronie.",
"queryResultsPerPage": "Wyniki zapytania na stronę",
"queryResultsPerPageTooltip": "Wprowadź liczbę wyników zapytania, które powinny być wyświetlane na stronie.",
"customQueryItemsPerPage": "Niestandardowe elementy zapytania na stronę",
"custom": "Niestandardowe",
"unlimited": "Bez ograniczeń",
"entraIdRbac": "Włącz RBAC w Entra ID",
"entraIdRbacDescription": "Wybierz pozycję Automatycznie, aby automatycznie włączyć funkcję RBAC identyfikatora wpisu. Wartość true/false wymusza włączenie/wyłączenie RBAC usługi Entra ID.",
"true": "True",
"false": "False",
"regionSelection": "Wybór regionu",
"regionSelectionDescription": "Zmienia region, którego klient Cosmos używa do dostępu do konta.",
"selectRegion": "Wybierz region",
"selectRegionTooltip": "Zmienia punkt końcowy konta używany do wykonywania operacji klienta.",
"globalDefault": "Globalne (domyślne)",
"readWrite": "(Odczyt/zapis)",
"read": "(Odczyt)",
"queryTimeout": "Limit czasu zapytania",
"queryTimeoutDescription": "Gdy zapytanie osiągnie określony limit czasu, pojawi się okienko z opcją anulowania zapytania, chyba że włączono automatyczne anulowanie.",
"enableQueryTimeout": "Włącz limit czasu zapytania",
"queryTimeoutMs": "Limit czasu zapytania (ms)",
"automaticallyCancelQuery": "Automatycznie anuluj zapytanie po upływie limitu czasu",
"ruLimit": "Limit RU",
"ruLimitDescription": "Jeśli zapytanie przekroczy skonfigurowany limit jednostek RU, zapytanie zostanie przerwane.",
"enableRuLimit": "Włącz limit jednostek RU",
"ruLimitLabel": "Limit jednostek RU (RU)",
"defaultQueryResults": "Domyślny widok wyników zapytania",
"defaultQueryResultsDescription": "Wybierz widok domyślny, który ma być używany podczas wyświetlania wyników zapytania.",
"retrySettings": "Ustawienia ponawiania",
"retrySettingsDescription": "Zasady ponawiania związane z ograniczonymi żądaniami podczas zapytań w usłudze CosmosDB.",
"maxRetryAttempts": "Maksymalna liczba ponownych prób",
"maxRetryAttemptsTooltip": "Maksymalna liczba ponownych prób dla żądania. Wartość domyślna 9.",
"fixedRetryInterval": "Stały interwał ponawiania prób (ms)",
"fixedRetryIntervalTooltip": "Stały interwał ponawiania prób w milisekundach, który określa czas oczekiwania między kolejnymi próbami, ignorując wartość retryAfter zwróconą w odpowiedzi. Wartość domyślna to 0 milisekund.",
"maxWaitTime": "Maksymalny czas oczekiwania (s)",
"maxWaitTimeTooltip": "Maksymalny czas oczekiwania na żądanie podczas ponownych prób, podany w sekundach. Wartość domyślna to 30 sekund.",
"enableContainerPagination": "Włącz paginację kontenera",
"enableContainerPaginationDescription": "Załaduj 50 kontenerów jednocześnie. Obecnie kontenery nie są ściągane w kolejności alfanumerycznej.",
"enableCrossPartitionQuery": "Włącz zapytanie między partycjami",
"enableCrossPartitionQueryDescription": "Wyślij więcej niż jedno żądanie podczas wykonywania zapytania. Jeśli zapytanie nie ma zakresu wartości klucza pojedynczej partycji, konieczne jest więcej niż jedno żądanie.",
"maxDegreeOfParallelism": "Maksymalny stopień równoległości",
"maxDegreeOfParallelismDescription": "Pobiera lub ustawia liczbę równoczesnych operacji uruchamianych po stronie klienta podczas równoległego wykonywania zapytań. Dodatnia wartość właściwości ogranicza liczbę równoczesnych operacji do ustawionej wartości. Jeśli wartość jest mniejsza niż 0, system automatycznie decyduje, ile operacji równoczesnych uruchomić.",
"maxDegreeOfParallelismQuery": "Wykonaj zapytanie o maksymalny stopień równoległości.",
"priorityLevel": "Poziom priorytetu",
"priorityLevelDescription": "Ustawia poziom priorytetu dla żądań płaszczyzny danych z usługi Data Explorer w przypadku korzystania z wykonywania opartego na priorytecie. Jeśli wybrano „Brak”, Data Explorer nie określi poziomu priorytetu, a zostanie użyty domyślny poziom priorytetu po stronie serwera.",
"displayGremlinQueryResults": "Wyświetl wyniki zapytania Gremlin jako:",
"displayGremlinQueryResultsDescription": "Wybierz Graph, aby automatycznie wizualizować wyniki zapytania jako wykres lub JSON, aby wyświetlić wyniki w formacie JSON.",
"graph": "Graph",
"json": "JSON",
"graphAutoVisualization": "Automatyczna wizualizacja grafu",
"enableSampleDatabase": "Włącz przykładową bazę danych",
"enableSampleDatabaseDescription": "To przykładowa baza danych i kolekcja z syntetycznymi danymi produktów, które możesz wykorzystać do eksploracji za pomocą zapytań NoSQL. Baza ta pojawi się jako kolejna baza danych w interfejsie Data Explorer i jest tworzona oraz utrzymywana przez Microsoft bez żadnych kosztów dla Ciebie.",
"enableSampleDbAriaLabel": "Włącz przykładową bazę danych do eksploracji zapytań",
"guidRepresentation": "Reprezentacja identyfikatora GUID",
"guidRepresentationDescription": "Element GuidRepresentation w MongoDB określa sposób serializacji i deserializacji globalnych unikatowych identyfikatorów (GUID) podczas przechowywania w dokumentach BSON. Dotyczy to wszystkich operacji na dokumentach.",
"advancedSettings": "Ustawienia zaawansowane",
"ignorePartitionKey": "Ignoruj klucz partycji podczas aktualizacji dokumentu",
"ignorePartitionKeyTooltip": "Jeśli zaznaczone, wartość klucza partycji nie będzie używana do lokalizowania dokumentu podczas operacji aktualizacji. Używaj tego tylko, gdy aktualizacje dokumentu nie powiodły się z powodu nieprawidłowego klucza partycji.",
"clearHistory": "Wyczyść historię",
"clearHistoryConfirm": "Czy na pewno chcesz kontynuować?",
"clearHistoryDescription": "Ta akcja spowoduje wyczyszczenie wszystkich dostosowań dla tego konta w tej przeglądarce, w tym:",
"clearHistoryTabLayout": "Zresetuj dostosowany układ kart, w tym pozycje rozdzielacza",
"clearHistoryTableColumns": "Wymaż preferencje kolumn tabeli, w tym wszystkie kolumny niestandardowe",
"clearHistoryFilters": "Wyczyść historię filtrów",
"clearHistoryRegion": "Resetuj wybór regionu do globalnego",
"increaseValueBy1000": "Zwiększ wartość o 1000",
"decreaseValueBy1000": "Zmniejsz wartość o 1000",
"none": "Brak",
"low": "Niskie",
"high": "Wysokie",
"automatic": "Automatyczne",
"enhancedQueryControl": "Rozszerzona kontrolka zapytań",
"enableQueryControl": "Włącz kontrolkę zapytania",
"explorerVersion": "Wersja Eksploratora",
"accountId": "Identyfikator konta",
"sessionId": "Identyfikator sesji",
"popupsDisabledError": "Nie udało się ustanowić autoryzacji dla tego konta, ponieważ w przeglądarce są wyłączone wyskakujące okienka.\nWłącz wyskakujące okienka dla tej witryny i kliknij przycisk „Zaloguj się w Entra ID”",
"failedToAcquireTokenError": "Nie można automatycznie uzyskać tokenu autoryzacji. Kliknij przycisk „Zaloguj się dla Entra ID”, aby włączyć operacje RBAC Entra ID"
},
"saveQuery": {
"panelTitle": "Zapisz zapytanie",
"setupCostMessage": "Ze względów zgodności zapisujemy zapytania w kontenerze na Twoim koncie Azure Cosmos w osobnej bazie danych o nazwie „{{databaseName}}”. Aby kontynuować, musimy utworzyć kontener na Twoim koncie, a szacowany dodatkowy koszt to 0,77 USD dziennie.",
"completeSetup": "Ukończ instalację",
"noQueryNameError": "Nie określono nazwy zapytania",
"invalidQueryContentError": "Określono nieprawidłową zawartość zapytania",
"failedToSaveQueryError": "Nie można zapisać zapytania {{queryName}}",
"failedToSetupContainerError": "Nie można skonfigurować kontenera dla zapisanych zapytań",
"accountNotSetupError": "Nie udało się zapisać zapytania: konto nie jest skonfigurowane do zapisywania zapytań",
"name": "Nazwa"
},
"loadQuery": {
"noFileSpecifiedError": "Nie określono pliku",
"failedToLoadQueryError": "Nie można załadować zapytania",
"failedToLoadQueryFromFileError": "Nie można załadować zapytania z pliku {{fileName}}",
"selectFilesToOpen": "Wybierz dokument zapytania",
"browseFiles": "Przeglądaj"
},
"executeStoredProcedure": {
"enterInputParameters": "Wprowadź parametry wejściowe (jeśli są)",
"key": "Klucz",
"param": "Param",
"partitionKeyValue": "Wartość klucza partycji",
"value": "Wartość",
"addNewParam": "Dodaj nowy parametr",
"addParam": "Dodaj parametr",
"deleteParam": "Usuń parametr",
"invalidParamError": "Określono nieprawidłowy parametr: {{invalidParam}}",
"invalidParamConsoleError": "Określono nieprawidłowy parametr: {{invalidParam}} nie jest prawidłową wartością literału",
"stringType": "Ciąg",
"customType": "Niestandardowe"
},
"uploadItems": {
"noFilesSpecifiedError": "Nie określono plików. Wprowadź co najmniej jeden plik.",
"selectJsonFiles": "Wybierz pliki JSON",
"selectJsonFilesTooltip": "Wybierz jeden lub więcej plików JSON do przesłania. Każdy plik może zawierać pojedynczy dokument JSON lub tablicę dokumentów JSON. Łączny rozmiar wszystkich plików w pojedynczej operacji przesyłania musi być mniejszy niż 2 MB. Możesz wykonać wiele operacji przesyłania dla większych zestawów danych.",
"fileNameColumn": "NAZWA PLIKU",
"statusColumn": "STAN",
"uploadStatus": "Utworzono: {{numSucceeded}}, ograniczono: {{numThrottled}}, błędy: {{numFailed}}",
"uploadedFiles": "Przekazywane pliki"
},
"copyNotebook": {
"copyFailedError": "Nie można skopiować {{name}} do {{destination}}",
"uploadFailedError": "Nie można przekazać {{name}}",
"location": "Lokalizacja",
"locationAriaLabel": "Lokalizacja",
"selectLocation": "Wybierz lokalizację notesu do skopiowania",
"name": "Nazwa"
},
"publishNotebook": {
"publishFailedError": "Nie można opublikować {{notebookName}} w galerii",
"publishDescription": "Po opublikowaniu ten notes pojawi się w publicznej galerii notesów Azure Cosmos DB. Przed opublikowaniem upewnij się, że usunięto poufne dane lub dane wyjściowe.",
"publishPrompt": "Czy chcesz opublikować i udostępnić „{{name}}” w galerii?",
"coverImage": "Obraz okładki",
"coverImageUrl": "Adres URL obrazu tytułowego",
"name": "Nazwa",
"description": "Opis",
"tags": "Tagi",
"tagsPlaceholder": "Opcjonalny tag 1, opcjonalny tag 2",
"preview": "Podgląd",
"urlType": "Adres URL",
"customImage": "Obraz niestandardowy",
"takeScreenshot": "Zrób zrzut ekranu",
"useFirstDisplayOutput": "Użyj pierwszego wyświetlania danych wyjściowych",
"failedToCaptureOutput": "Nie można przechwycić pierwszych danych wyjściowych",
"outputDoesNotExist": "Dane wyjściowe nie istnieją dla żadnej komórki.",
"failedToConvertError": "Nie można przekonwertować {{fileName}} na format base64",
"failedToUploadError": "Nie można przekazać {{fileName}}"
},
"changePartitionKey": {
"failedToStartError": "Nie udało się uruchomić zadania transferu danych",
"suboptimalPartitionKeyError": "Ostrzeżenie: system wykrył, że kolekcja może używać nieoptymalnego klucza partycji",
"description": "Zmieniając klucz partycji kontenera, musisz utworzyć kontener docelowy z poprawnym kluczem partycji. Możesz też wybrać istniejący kontener docelowy.",
"sourceContainerId": "Identyfikator {{collectionName}} źródłowego",
"destinationContainerId": "Identyfikator {{collectionName}} docelowego",
"collectionIdTooltip": "Identyfikator unikatowy {{collectionName}} używany do routingu opartego na identyfikatorach prowadzącego przez interfejs REST i wszystkie zestawy SDK.",
"collectionIdPlaceholder": "np. {{collectionName}}1",
"collectionIdAriaLabel": "Identyfikator {{collectionName}}, przykład {{collectionName}}1",
"existingContainers": "Istniejące kontenery",
"partitionKeyWarning": "Kontener docelowy nie może już istnieć. Data Explorer utworzy dla Ciebie nowy kontener docelowy."
},
"cassandraAddCollection": {
"keyspaceLabel": "Nazwa przestrzeni kluczy",
"keyspaceTooltip": "Wybierz istniejącą przestrzeń kluczy lub wprowadź nowy identyfikator przestrzeni kluczy.",
"tableIdLabel": "Wprowadź polecenie CQL, aby utworzyć tabelę.",
"enterTableId": "Wprowadź identyfikator tabeli",
"tableSchemaAriaLabel": "Schemat tabeli",
"provisionDedicatedThroughput": "Aprowizowanie dedykowanej przepływności dla tej tabeli",
"provisionDedicatedThroughputTooltip": "Możesz opcjonalnie przydzielić dedykowaną przepustowość dla tabeli w przestrzeni kluczy, która ma już przydzieloną przepustowość. Ta dedykowana przepustowość nie będzie współdzielona z innymi tabelami w przestrzeni kluczy i nie będzie wliczana do przepustowości przydzielonej dla przestrzeni kluczy. Ta przepustowość będzie rozliczana dodatkowo do przepustowości przydzielonej na poziomie przestrzeni kluczy."
},
"tables": {
"addProperty": "Dodaj właściwość",
"addRow": "Dodaj wiersz",
"addEntity": "Dodaj jednostkę",
"back": "wstecz",
"nullFieldsWarning": "Ostrzeżenie: pola o wartości null nie będą wyświetlane do edycji.",
"propertyEmptyError": "Wartość {{property}} nie może być pusta. Wprowadź wartość dla {{property}}",
"whitespaceError": "{{property}} nie może zawierać białych znaków. Wprowadź wartość dla {{property}} bez białych znaków",
"propertyTypeEmptyError": "Typ właściwości nie może być pusty. Wybierz typ z listy rozwijanej dla właściwości {{property}}"
},
"tableQuerySelect": {
"selectColumns": "Wybierz kolumny, których ma dotyczyć zapytanie.",
"availableColumns": "Dostępne kolumny"
},
"tableColumnSelection": {
"selectColumns": "Wybierz kolumny do wyświetlenia w widoku elementów w kontenerze.",
"searchFields": "Pola wyszukiwania",
"reset": "Zresetuj",
"partitionKeySuffix": " (klucz partycji)"
},
"newVertex": {
"addProperty": "Dodaj właściwość"
},
"addGlobalSecondaryIndex": {
"globalSecondaryIndexId": "Identyfikator kontenera globalnego indeksu pomocniczego",
"globalSecondaryIndexIdPlaceholder": "np. indexbyEmailId",
"projectionQuery": "Zapytanie projekcji",
"projectionQueryPlaceholder": "SELECT c.email, c.accountId FROM c",
"projectionQueryTooltip": "Dowiedz się więcej o definiowaniu globalnych indeksów pomocniczych.",
"disabledTitle": "Globalny indeks pomocniczy jest już tworzony. Zaczekaj na ukończenie tej operacji przed utworzeniem kolejnej."
},
"stringInput": {
"inputMismatchError": "Dane wejściowe {{input}} nie pasują do wybranej {{selectedId}}"
},
"panelInfo": {
"information": "Informacje",
"moreDetails": "Więcej szczegółów"
}
}
}

Some files were not shown because too many files have changed in this diff Show More