From 69d8c641ef254f35aed3ab7bede66d35c03b824d Mon Sep 17 00:00:00 2001 From: Ugo Palatucci Date: Mon, 7 Apr 2025 13:48:57 +0200 Subject: [PATCH 1/2] Upload i18n translations scripts --- i18n-scripts/export-pos.sh | 13 ++ i18n-scripts/i18n-to-po.js | 112 ++++++++++++++++ i18n-scripts/languages.sh | 3 + i18n-scripts/memsource-download.sh | 59 +++++++++ i18n-scripts/memsource-upload.sh | 38 ++++++ i18n-scripts/po-to-i18n.js | 65 ++++++++++ package.json | 8 +- yarn.lock | 202 ++++++++++++++++++++++++++++- 8 files changed, 494 insertions(+), 6 deletions(-) create mode 100755 i18n-scripts/export-pos.sh create mode 100644 i18n-scripts/i18n-to-po.js create mode 100755 i18n-scripts/languages.sh create mode 100755 i18n-scripts/memsource-download.sh create mode 100755 i18n-scripts/memsource-upload.sh create mode 100644 i18n-scripts/po-to-i18n.js diff --git a/i18n-scripts/export-pos.sh b/i18n-scripts/export-pos.sh new file mode 100755 index 00000000..df64df18 --- /dev/null +++ b/i18n-scripts/export-pos.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +set -exuo pipefail + +source ./i18n-scripts/languages.sh + +for f in locales/en/* ; do + for i in "${LANGUAGES[@]}" + do + yarn i18n-to-po -f "$(basename "$f" .json)" -l "$i" + done +done + diff --git a/i18n-scripts/i18n-to-po.js b/i18n-scripts/i18n-to-po.js new file mode 100644 index 00000000..b5bf19de --- /dev/null +++ b/i18n-scripts/i18n-to-po.js @@ -0,0 +1,112 @@ +const fs = require('fs'); +const path = require('path'); +const { i18nextToPo } = require('i18next-conv'); +const minimist = require('minimist'); +const common = require('./common.js'); + +function save(target) { + return (result) => { + fs.writeFileSync(target, result); + }; +} + +function removeValues(i18nFile, filePath) { + const file = require(i18nFile); + + const updatedFile = {}; + + const keys = Object.keys(file); + + for (let i = 0; i < keys.length; i++) { + updatedFile[keys[i]] = ''; + } + + const tmpFile = fs.openSync(filePath, 'w'); + + fs.writeFileSync(tmpFile, JSON.stringify(updatedFile, null, 2)); +} + +function consolidateWithExistingTranslations(filePath, fileName, language, packageDir) { + const existingTranslationsPath= `./../locales/${language}/${fileName}.json`; + const englishFile = require(filePath); + const englishKeys = Object.keys(englishFile); + if (fs.existsSync(path.join(__dirname, existingTranslationsPath))) { + const existingTranslationsFile = require(path.join(__dirname, existingTranslationsPath)); + const existingKeys = Object.keys(existingTranslationsFile); + const matchingKeys = englishKeys.filter((k) => existingKeys.indexOf(k) > -1); + + for (let i = 0; i < matchingKeys.length; i++) { + englishFile[matchingKeys[i]] = existingTranslationsFile[matchingKeys[i]]; + } + + fs.writeFileSync(filePath, JSON.stringify(englishFile, null, 2)); + } +} + +function processFile(fileName, language) { + let tmpFile; + const i18nFile = path.join(__dirname, `./../locales/en/${fileName}.json`); + + try { + if (fs.existsSync(i18nFile)) { + fs.mkdirSync(path.join(__dirname, './../locales/tmp'), { recursive: true }); + + tmpFile = path.join(__dirname, `./../locales/tmp/${fileName}.json`); + + removeValues(i18nFile, tmpFile); + consolidateWithExistingTranslations(tmpFile, fileName, language); + + fs.mkdirSync(path.join(__dirname, `./../po-files/${language}`), { recursive: true }); + i18nextToPo(language, fs.readFileSync(tmpFile), { + language, + foldLength: 0, + ctxSeparator: '~', + }) + .then( + save( + path.join( + __dirname, + `./../po-files/${language}/public__${path.basename(fileName)}.po`, + ), + language, + ), + ) + .catch((e) => console.error(fileName, e)); + } + } catch (err) { + console.error(`Failed to processFile ${fileName}:`, err); + } + common.deleteFile(tmpFile); + console.log(`Processed ${fileName}`); +} + +const options = { + string: ['language', 'package', 'file'], + boolean: ['help'], + array: ['files'], + alias: { + h: 'help', + p: 'package', + f: 'files', + l: 'language', + }, + default: { + files: [], + }, +}; + +const args = minimist(process.argv.slice(2), options); + +if (args.help) { + console.log( + "-h: help\n-l: language (i.e. 'ja')\n\n-f: file name to convert (i.e. 'nav')", + ); +} else if (args.files && args.language) { + if (Array.isArray(args.files)) { + for (let i = 0; i < args.files.length; i++) { + processFile(args.files[i], args.language); + } + } else { + processFile(args.files, args.language); + } +} diff --git a/i18n-scripts/languages.sh b/i18n-scripts/languages.sh new file mode 100755 index 00000000..9d480871 --- /dev/null +++ b/i18n-scripts/languages.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +export LANGUAGES=( 'ja' 'zh-cn' 'ko' 'fr' 'es') diff --git a/i18n-scripts/memsource-download.sh b/i18n-scripts/memsource-download.sh new file mode 100755 index 00000000..15d3b380 --- /dev/null +++ b/i18n-scripts/memsource-download.sh @@ -0,0 +1,59 @@ +#!/usr/bin/env bash + +set -exuo pipefail + +source ./i18n-scripts/languages.sh + +while getopts p: flag +do + case "${flag}" in + p) PROJECT_ID=${OPTARG};; + *) echo "usage: $0 [-p]" >&2 + exit 1;; + esac +done + +echo "Checking if git workspace is clean" +GIT_STATUS="$(git status --short --untracked-files -- public/locales packages/**/locales)" +if [ -n "$GIT_STATUS" ]; then + echo "There are uncommitted files in public or package locales folders. Remove or commit the files, then run this script again." + git diff + exit 1 +fi + +echo "Downloading PO files from Project ID \"$PROJECT_ID\"" + +DOWNLOAD_PATH="$(mktemp -d)" || { echo "Failed to create temp folder"; exit 1; } + +# Memsource job listing is limited to 50 jobs per page +# We need to pull all the files down by page and stop when we reach a page with no data +for i in "${LANGUAGES[@]}" +do + COUNTER=0 + CURRENT_PAGE=( $(memsource job list --project-id "$PROJECT_ID" --target-lang "$i" -f value --page-number 0 -c uid) ) + until [ -z "$CURRENT_PAGE" ] + do + ((COUNTER++)) + echo Downloading page "$COUNTER" + memsource job download --project-id "$PROJECT_ID" --output-dir "$DOWNLOAD_PATH/$i" --job-id "${CURRENT_PAGE[@]}" + CURRENT_PAGE=$(memsource job list --project-id "$PROJECT_ID" --target-lang "$i" -f value --page-number "$COUNTER" -c uid | tr '\n' ' ') + done +done + +echo Importing downloaded PO files into OpenShift +for i in "${LANGUAGES[@]}" +do + # We don't treat zh-cn as a dialect in i18next right now, so we need to alter it to zh + if [ "$i" == 'zh-cn' ] + then + yarn po-to-i18n -d "$DOWNLOAD_PATH/$i" -l 'zh' + else + yarn po-to-i18n -d "$DOWNLOAD_PATH/$i" -l "$i" + fi +done + +echo Creating commit +git add locales +git commit -m "chore(i18n): update translations + +Adding latest translations from Memsource project https://cloud.memsource.com/web/project2/show/$PROJECT_ID" diff --git a/i18n-scripts/memsource-upload.sh b/i18n-scripts/memsource-upload.sh new file mode 100755 index 00000000..dc25577f --- /dev/null +++ b/i18n-scripts/memsource-upload.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash + +set -exuo pipefail + +source ./i18n-scripts/languages.sh + +while getopts v:s: flag +do + case "${flag}" in + v) VERSION=${OPTARG};; + s) SPRINT=${OPTARG};; + *) echo "usage: $0 [-v] [-s]" >&2 + exit 1;; + esac +done + +BRANCH=$(git branch --show-current) + + +echo "Creating project with title \"[OCP $VERSION] UI Localization networking-console-plugin - Sprint $SPRINT/Branch $BRANCH\"" + +PROJECT_INFO=$(memsource project create --name "[OCP $VERSION] UI Localization networking-console-plugin - Sprint $SPRINT/Branch $BRANCH" --template-id zBOwr4BxYwEq7xlJ37c1F3 -f json) +PROJECT_ID=$(echo "$PROJECT_INFO" | jq -r '.uid') + +echo "Exporting PO files" +yarn export-pos +echo "Exported all PO files" + +echo "Creating jobs for exported PO files" +for i in "${LANGUAGES[@]}" +do + memsource job create --filenames po-files/"$i"/*.po --target-langs "$i" --project-id "${PROJECT_ID}" +done + +echo "Uploaded PO files to Memsource" + +# Clean up PO file directory +rm -rf po-files diff --git a/i18n-scripts/po-to-i18n.js b/i18n-scripts/po-to-i18n.js new file mode 100644 index 00000000..2a0e2a8a --- /dev/null +++ b/i18n-scripts/po-to-i18n.js @@ -0,0 +1,65 @@ +const fs = require('fs'); +const path = require('path'); +const { gettextToI18next } = require('i18next-conv'); +const minimist = require('minimist'); + +function save(target) { + return (result) => { + fs.writeFileSync(target, JSON.stringify(JSON.parse(result), null, 2)); + }; +} + +function processFile(fileName, language) { + if (fileName.includes('.DS_Store')) { + return; + } + let newFilePath; + const [_, newFileName] = path.basename(fileName, '.po').split('__'); + + if (!fs.existsSync(path.join(__dirname, `../locales/${language}/`))) { + fs.mkdirSync(path.join(__dirname, `../locales/${language}/`), { recursive: true }); + newFilePath = path.join(__dirname, `../locales/${language}/${newFileName}.json`); + console.log(`Saving /locales/${language}/${newFileName}.json`); + } + gettextToI18next(language, fs.readFileSync(fileName)) + .then(save(newFilePath)) + .catch((e) => console.error(fileName, e)); +} + +function processDirectory(directory, language) { + if (fs.existsSync(directory)) { + (async () => { + try { + const files = await fs.promises.readdir(directory); + for (const file of files) { + const filePath = path.join(directory, file); + processFile(filePath, language); + } + } catch (e) { + console.error(`Failed to processDirectory ${directory}:`, e); + } + })(); + } else { + console.error('Directory does not exist.'); + } +} + +const options = { + string: ['language', 'directory'], + boolean: ['help'], + alias: { + h: 'help', + d: 'directory', + l: 'language', + }, +}; + +const args = minimist(process.argv.slice(2), options); + +if (args.help) { + console.log( + "-h: help\n-l: language (i.e. 'ja')\n-d: directory to convert files in (i.e. './new-pos')", + ); +} else if (args.directory && args.language) { + processDirectory(args.directory, args.language); +} diff --git a/package.json b/package.json index 6eb6675b..d51d42a9 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,12 @@ "test-cypress-headless": "cd integration-tests && node --max-old-space-size=4096 ../node_modules/.bin/cypress run --env openshift=true --browser ${BRIDGE_E2E_BROWSER_NAME:=electron}", "cypress-merge": "mochawesome-merge ./integration-tests/screenshots/cypress_report*.json > ./integration-tests/screenshots/cypress.json", "cypress-generate": "marge -o ./integration-tests/screenshots/ -f cypress-report -t 'OpenShift Console Plugin Template Cypress Test Results' -p 'OpenShift Cypress Plugin Template Test Results' --showPassed false --assetsDir ./integration-tests/screenshots/cypress/assets ./integration-tests/screenshots/cypress.json", - "cypress-postreport": "yarn cypress-merge && yarn cypress-generate" + "cypress-postreport": "yarn cypress-merge && yarn cypress-generate", + "memsource-upload": "./i18n-scripts/memsource-upload.sh", + "memsource-download": "./i18n-scripts/memsource-download.sh", + "export-pos": "./i18n-scripts/export-pos.sh", + "i18n-to-po": "node ./i18n-scripts/i18n-to-po.js", + "po-to-i18n": "node ./i18n-scripts/po-to-i18n.js" }, "dependencies": { "react-hook-form": "^7.51.1", @@ -65,6 +70,7 @@ "eslint-plugin-simple-import-sort": "^12.0.0", "file-loader": "^6.2.0", "fork-ts-checker-webpack-plugin": "^9.0.2", + "i18next-conv": "12.1.1", "i18next-parser": "^3.11.0", "js-yaml": "^4.1.0", "lodash": "^4.17.21", diff --git a/yarn.lock b/yarn.lock index 924b34c6..b8112a95 100644 --- a/yarn.lock +++ b/yarn.lock @@ -32,6 +32,11 @@ dependencies: regenerator-runtime "^0.14.0" +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + "@colors/colors@1.5.0": version "1.5.0" resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" @@ -158,6 +163,11 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== +"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + "@jridgewell/gen-mapping@^0.3.5": version "0.3.5" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" @@ -198,7 +208,7 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== @@ -615,6 +625,11 @@ dependencies: "@types/node" "*" +"@types/istanbul-lib-coverage@^2.0.1": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== + "@types/js-yaml@^4.0.9": version "4.0.9" resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-4.0.9.tgz#cd82382c4f902fed9691a2ed79ec68c5898af4c2" @@ -1354,6 +1369,11 @@ arraybuffer.prototype.slice@^1.0.3: is-array-buffer "^3.0.4" is-shared-array-buffer "^1.0.2" +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + asn1@~0.2.3: version "0.2.6" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" @@ -1578,6 +1598,24 @@ bytes@3.1.2: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== +c8@^7.11.0: + version "7.14.0" + resolved "https://registry.yarnpkg.com/c8/-/c8-7.14.0.tgz#f368184c73b125a80565e9ab2396ff0be4d732f3" + integrity sha512-i04rtkkcNcCf7zsQcSv/T9EbUn4RXQ6mropeMcjFOsQXQ0iGLAr/xT6TImQg4+U9hmNpN9XdvPkjUL1IzbgxJw== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@istanbuljs/schema" "^0.1.3" + find-up "^5.0.0" + foreground-child "^2.0.0" + istanbul-lib-coverage "^3.2.0" + istanbul-lib-report "^3.0.0" + istanbul-reports "^3.1.4" + rimraf "^3.0.2" + test-exclude "^6.0.0" + v8-to-istanbul "^9.0.0" + yargs "^16.2.0" + yargs-parser "^20.2.9" + cacache@^15.0.5: version "15.3.0" resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" @@ -1789,6 +1827,15 @@ cliui@^6.0.0: strip-ansi "^6.0.0" wrap-ansi "^6.2.0" +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + cliui@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" @@ -1887,6 +1934,11 @@ commander@^7.0.0, commander@~7.2.0: resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== +commander@^9.1.0: + version "9.5.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" + integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== + comment-json@4.x: version "4.2.3" resolved "https://registry.yarnpkg.com/comment-json/-/comment-json-4.2.3.tgz#50b487ebbf43abe44431f575ebda07d30d015365" @@ -1955,7 +2007,7 @@ content-disposition@0.5.4: dependencies: safe-buffer "5.2.1" -content-type@~1.0.4, content-type@~1.0.5: +content-type@1.0.5, content-type@^1.0.4, content-type@~1.0.4, content-type@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== @@ -1965,6 +2017,11 @@ convert-source-map@^1.5.0, convert-source-map@^1.7.0: resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" @@ -2495,6 +2552,13 @@ encodeurl@~2.0.0: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== +encoding@0.1.13, encoding@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" @@ -3157,6 +3221,14 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" +foreground-child@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53" + integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^3.0.2" + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -3388,6 +3460,25 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" +gettext-converter@^1.2.2: + version "1.3.0" + resolved "https://registry.yarnpkg.com/gettext-converter/-/gettext-converter-1.3.0.tgz#c01ee63f05469cc7b578bbda25c657fea01d7d8f" + integrity sha512-vXjx4vRBjw6rd3Zg73IMyNLZuPjs8/lE9gJZs270YJJI0t5vlCpdsyX5E0TmSd+KcRWzwPbwjwd6bnNpF72sFQ== + dependencies: + arrify "^2.0.1" + content-type "1.0.5" + encoding "0.1.13" + +gettext-parser@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/gettext-parser/-/gettext-parser-5.1.2.tgz#ebecc29a905334a48680a57b2d64da920f781cd4" + integrity sha512-TaCShmFIQDvic6Ao+LFvFSPyl/9sjua3zNHMfmjfzzEeK3NIPbBSbNdPihJ+vG476td+ylrVk0ZyjJaAy9CiwQ== + dependencies: + content-type "^1.0.4" + encoding "^0.1.13" + readable-stream "^3.6.0" + safe-buffer "^5.2.1" + glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" @@ -3632,6 +3723,11 @@ html-entities@^2.3.2: resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.5.2.tgz#201a3cf95d3a15be7099521620d19dfb4f65359f" integrity sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA== +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + html-parse-stringify@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz#dfc1017347ce9f77c8141a507f233040c59c55d2" @@ -3719,6 +3815,18 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== +i18next-conv@12.1.1: + version "12.1.1" + resolved "https://registry.yarnpkg.com/i18next-conv/-/i18next-conv-12.1.1.tgz#cda23ddda849083454aac857547b04a3605168f4" + integrity sha512-NYYVVGjB1/c/L+I4CG8Yu5xFYbn+FDQXbki3z8/CxLepkfnqw43VHaelllGpagv8xE6kXaYq1qKEF9EY6+EcOA== + dependencies: + c8 "^7.11.0" + colorette "^2.0.16" + commander "^9.1.0" + gettext-converter "^1.2.2" + gettext-parser "^5.1.2" + node-gettext "^3.0.0" + i18next-parser@^3.11.0: version "3.11.0" resolved "https://registry.yarnpkg.com/i18next-parser/-/i18next-parser-3.11.0.tgz#62ead424f63c6e5e40da26bca258a5d6fb08538e" @@ -3755,6 +3863,13 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + icss-utils@^5.0.0, icss-utils@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" @@ -4188,6 +4303,28 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== + +istanbul-lib-report@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^4.0.0" + supports-color "^7.1.0" + +istanbul-reports@^3.1.4: + version "3.1.7" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + iterator.prototype@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0" @@ -4412,6 +4549,11 @@ lodash-es@^4.17.21: resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== + lodash.isempty@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz#6f86cbedd8be4ec987be9aaf33c9684db1b31e7e" @@ -4486,6 +4628,13 @@ make-dir@^3.0.2: dependencies: semver "^6.0.0" +make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" + make-error@^1.1.1: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" @@ -4797,6 +4946,13 @@ node-forge@^1: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== +node-gettext@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/node-gettext/-/node-gettext-3.0.0.tgz#6b3a253309aa1e53164646c6c644fcddd0d45c58" + integrity sha512-/VRYibXmVoN6tnSAY2JWhNRhWYJ8Cd844jrZU/DwLVoI4vBI6ceYbd8i42sYZ9uOgDH3S7vslIKOWV/ZrT2YBA== + dependencies: + lodash.get "^4.4.2" + node-releases@^2.0.14: version "2.0.14" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" @@ -5510,7 +5666,7 @@ read-pkg@5.x: parse-json "^5.0.0" type-fest "^0.6.0" -readable-stream@3, readable-stream@^3.0.2, readable-stream@^3.0.6: +readable-stream@3, readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -5785,7 +5941,7 @@ safe-array-concat@^1.1.2: has-symbols "^1.0.3" isarray "^2.0.5" -safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -5804,7 +5960,7 @@ safe-regex-test@^1.0.3: es-errors "^1.3.0" is-regex "^1.1.4" -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -6411,6 +6567,15 @@ terser@^5.26.0: commander "^2.20.0" source-map-support "~0.5.20" +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -6835,6 +7000,15 @@ v8-compile-cache-lib@^3.0.1: resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== +v8-to-istanbul@^9.0.0: + version "9.3.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz#b9572abfa62bd556c16d75fdebc1a411d5ff3175" + integrity sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^2.0.0" + validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -7440,6 +7614,11 @@ yargs-parser@^18.1.2: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^20.2.2, yargs-parser@^20.2.9: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" @@ -7462,6 +7641,19 @@ yargs@^15.3.1: y18n "^4.0.0" yargs-parser "^18.1.2" +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + yargs@^17.2.1: version "17.7.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" From af573a9208d10797e33de4c02b7469a40d33e165 Mon Sep 17 00:00:00 2001 From: Ugo Palatucci Date: Tue, 15 Apr 2025 13:42:17 +0200 Subject: [PATCH 2/2] chore(i18n): update translations Adding latest translations from Memsource project https://cloud.memsource.com/web/project2/show/IaosADcpKfHjaZMAp21Ze6 chore(i18n): update translations Adding latest translations from Memsource project https://cloud.memsource.com/web/project2/show/IaosADcpKfHjaZMAp21Ze6 --- i18n-scripts/po-to-i18n.js | 6 +- i18next-parser.config.js | 28 +- .../es/plugin__networking-console-plugin.json | 340 ++++++++++++++++++ .../fr/plugin__networking-console-plugin.json | 340 ++++++++++++++++++ .../ja/plugin__networking-console-plugin.json | 339 +++++++++++++++++ .../ko/plugin__networking-console-plugin.json | 339 +++++++++++++++++ .../zh/plugin__networking-console-plugin.json | 339 +++++++++++++++++ 7 files changed, 1713 insertions(+), 18 deletions(-) create mode 100644 locales/es/plugin__networking-console-plugin.json create mode 100644 locales/fr/plugin__networking-console-plugin.json create mode 100644 locales/ja/plugin__networking-console-plugin.json create mode 100644 locales/ko/plugin__networking-console-plugin.json create mode 100644 locales/zh/plugin__networking-console-plugin.json diff --git a/i18n-scripts/po-to-i18n.js b/i18n-scripts/po-to-i18n.js index 2a0e2a8a..44a31e32 100644 --- a/i18n-scripts/po-to-i18n.js +++ b/i18n-scripts/po-to-i18n.js @@ -14,12 +14,10 @@ function processFile(fileName, language) { return; } let newFilePath; - const [_, newFileName] = path.basename(fileName, '.po').split('__'); - if (!fs.existsSync(path.join(__dirname, `../locales/${language}/`))) { fs.mkdirSync(path.join(__dirname, `../locales/${language}/`), { recursive: true }); - newFilePath = path.join(__dirname, `../locales/${language}/${newFileName}.json`); - console.log(`Saving /locales/${language}/${newFileName}.json`); + newFilePath = path.join(__dirname, `../locales/${language}/plugin__networking-console-plugin.json`); + console.log(`Saving /locales/${language}/plugin__networking-console-plugin.json`); } gettextToI18next(language, fs.readFileSync(fileName)) .then(save(newFilePath)) diff --git a/i18next-parser.config.js b/i18next-parser.config.js index bff28f3e..c98b0177 100644 --- a/i18next-parser.config.js +++ b/i18next-parser.config.js @@ -3,30 +3,30 @@ const { CustomJSONLexer } = require('./i18n-scripts/lexers'); // eslint-disable-next-line no-undef module.exports = { - sort: true, createOldCatalogs: false, - keySeparator: false, - locales: ['en'], - namespaceSeparator: '~', - reactNamespace: false, defaultNamespace: 'plugin__networking-console-plugin', - useKeysAsDefaultValue: true, - + keySeparator: false, // see below for more details lexers: { - hbs: ['HandlebarsLexer'], + default: ['JavascriptLexer'], handlebars: ['HandlebarsLexer'], + hbs: ['HandlebarsLexer'], htm: ['HTMLLexer'], - html: ['HTMLLexer'], - mjs: ['JavascriptLexer'], + html: ['HTMLLexer'], js: ['JavascriptLexer'], // if you're writing jsx inside .js files, change this to JsxLexer - ts: ['JavascriptLexer'], - jsx: ['JsxLexer'], - tsx: ['JsxLexer'], json: [CustomJSONLexer], + jsx: ['JsxLexer'], + mjs: ['JavascriptLexer'], + ts: ['JavascriptLexer'], - default: ['JavascriptLexer'], + tsx: ['JsxLexer'], }, + locales: ['en', 'es', 'fr', 'ja', 'ko', 'zh'], + namespaceSeparator: '~', + reactNamespace: false, + sort: true, + + useKeysAsDefaultValue: true, }; diff --git a/locales/es/plugin__networking-console-plugin.json b/locales/es/plugin__networking-console-plugin.json new file mode 100644 index 00000000..64c8dc8a --- /dev/null +++ b/locales/es/plugin__networking-console-plugin.json @@ -0,0 +1,340 @@ +{ + " See more details in: <3>": " See more details in: <3>", + " See more details in: <3>.": " See more details in: <3>.", + "(all nodes): ": "(all nodes): ", + "{{count}} annotation": "{{count}} annotation", + "{{count}} annotation_plural": "{{count}} annotation", + "{{kind}} details": "{{kind}} details", + "{{kind}} disabled": "{{kind}} disabled", + "{{numCores}} cores": "{{numCores}} cores", + "{{path}} found in resource, but is not supported in form.": "{{path}} found in resource, but is not supported in form.", + "{{path}} is missing.": "{{path}} is missing.", + "{{path}} should be an Array.": "{{path}} should be an Array.", + "{{path}} should not be empty.": "{{path}} should not be empty.", + "{{value}} at {{date}}": "{{value}} at {{date}}", + "<0>OpenShift Virtualization Operator or <3>SR-IOV Network Operator needs to be installed on the cluster, in order to pick the Network Type.": "<0>OpenShift Virtualization Operator or <3>SR-IOV Network Operator needs to be installed on the cluster, in order to pick the Network Type.", + "404: Page Not Found": "404: Page Not Found", + "A number between 0 and 255 that depicts relative weight compared with other targets.": "A number between 0 and 255 that depicts relative weight compared with other targets.", + "A unique name for the Route within the project": "A unique name for the Route within the project", + "Accessible outside the cluster": "Accessible outside the cluster", + "Accessible within the cluster only": "Accessible within the cluster only", + "Actions": "Actions", + "Add allowed destination": "Add allowed destination", + "Add allowed source": "Add allowed source", + "Add alternate Service": "Add alternate Service", + "Add egress rule": "Add egress rule", + "Add egress rules to be applied to your selected pods. Traffic is allowed to pods if it matches at least one rule.": "Add egress rules to be applied to your selected pods. Traffic is allowed to pods if it matches at least one rule.", + "Add exception": "Add exception", + "Add ingress rule": "Add ingress rule", + "Add ingress rules to be applied to your selected pods. Traffic is allowed from pods if it matches at least one rule.": "Add ingress rules to be applied to your selected pods. Traffic is allowed from pods if it matches at least one rule.", + "Add label": "Add label", + "Add namespace selector": "Add namespace selector", + "Add pod selector": "Add pod selector", + "Add port": "Add port", + "Add ports to restrict traffic through them. If no ports are provided, your policy will make all ports accessible to traffic.": "Add ports to restrict traffic through them. If no ports are provided, your policy will make all ports accessible to traffic.", + "All incoming traffic is denied to Pods in {{namespace}}": "All incoming traffic is denied to Pods in {{namespace}}", + "All outgoing traffic is allowed by default. Egress rules can be used to restrict outgoing traffic if the cluster network provider allows it. When using the OpenShift SDN cluster network provider, egress network policy is not supported.": "All outgoing traffic is allowed by default. Egress rules can be used to restrict outgoing traffic if the cluster network provider allows it. When using the OpenShift SDN cluster network provider, egress network policy is not supported.", + "All outgoing traffic is denied from Pods in {{namespace}}": "All outgoing traffic is denied from Pods in {{namespace}}", + "All pods within {{namespace}}": "All pods within {{namespace}}", + "Allow": "Allow", + "Allow peers by IP block": "Allow peers by IP block", + "Allow pods from inside the cluster": "Allow pods from inside the cluster", + "Allow pods from the same namespace": "Allow pods from the same namespace", + "Allow traffic from peers by IP block": "Allow traffic from peers by IP block", + "Allow traffic from pods in the same namespace": "Allow traffic from pods in the same namespace", + "Allow traffic from pods inside the cluster": "Allow traffic from pods inside the cluster", + "Allow traffic to peers by IP block": "Allow traffic to peers by IP block", + "Allow traffic to pods in the same namespace": "Allow traffic to pods in the same namespace", + "Allow traffic to pods inside the cluster": "Allow traffic to pods inside the cluster", + "Alternate Service target": "Alternate Service target", + "Alternate Service to route to.": "Alternate Service to route to.", + "Alternate Service weight": "Alternate Service weight", + "Annotations": "Annotations", + "Any namespace": "Any namespace", + "Any peer": "Any peer", + "Any pod": "Any pod", + "Any port": "Any port", + "Are you sure?": "Are you sure?", + "Assigns IP addresses from this subnet to Pods and VirtualMachines.": "Assigns IP addresses from this subnet to Pods and VirtualMachines.", + "Bridge mapping": "Bridge mapping", + "Bridge name": "Bridge name", + "CA certificate": "CA certificate", + "Can't preview pods": "Can't preview pods", + "Cancel": "Cancel", + "Certificate": "Certificate", + "Certificates": "Certificates", + "CIDR": "CIDR", + "Clear input value": "Clear input value", + "Click <1>Create {{kind}} to create your first {{kind}}": "Click <1>Create {{kind}} to create your first {{kind}}", + "Cluster administrator permissions are required to enable this feature.": "Cluster administrator permissions are required to enable this feature.", + "Cluster IP": "Cluster IP", + "Completed": "Completed", + "Conditions": "Conditions", + "Configure via:": "Configure via:", + "Confirm": "Confirm", + "Connection rate": "Connection rate", + "Copied": "Copied", + "Copied to clipboard": "Copied to clipboard", + "Copy to clipboard": "Copy to clipboard", + "CrashLoopBackOff": "CrashLoopBackOff", + "CrashLoopBackOff indicates that the application within the container is failing to start properly.": "CrashLoopBackOff indicates that the application within the container is failing to start properly.", + "Create": "Create", + "Create {{ kind }}": "Create {{ kind }}", + "Create {{kind}}": "Create {{kind}}", + "Create {{label}}": "Create {{label}}", + "Create by completing the form.": "Create by completing the form.", + "Create by manually entering YAML or JSON definitions, or by dragging and dropping a file into the editor.": "Create by manually entering YAML or JSON definitions, or by dragging and dropping a file into the editor.", + "Create Ingress": "Create Ingress", + "Create MultiNetworkPolicy": "Create MultiNetworkPolicy", + "Create NetworkArrachmentDefinition": "Create NetworkArrachmentDefinition", + "Create NetworkAttachmentDefinition": "Create NetworkAttachmentDefinition", + "Create NetworkPolicy": "Create NetworkPolicy", + "Create Route": "Create Route", + "Create Service": "Create Service", + "Created at": "Created at", + "Current selections": "Current selections", + "Custom route": "Custom route", + "Debug container {{name}}": "Debug container {{name}}", + "Delete": "Delete", + "Delete {{kind}}": "Delete {{kind}}", + "Delete Ingress": "Delete Ingress", + "Delete NetworkAttachmentDefinition": "Delete NetworkAttachmentDefinition", + "Delete Route": "Delete Route", + "Delete Service": "Delete Service", + "Deny all egress traffic": "Deny all egress traffic", + "Deny all ingress traffic": "Deny all ingress traffic", + "Description": "Description", + "Destination CA certificate": "Destination CA certificate", + "Destinations added to this rule will allow traffic from the pods defined above. Destinations in this list are combined using a logical OR operation.": "Destinations added to this rule will allow traffic from the pods defined above. Destinations in this list are combined using a logical OR operation.", + "Details": "Details", + "Do you need to set up custom DNS?": "Do you need to set up custom DNS?", + "Duplicate keys found in main pod selector": "Duplicate keys found in main pod selector", + "Duplicate keys found in peer namespace selector": "Duplicate keys found in peer namespace selector", + "Duplicate keys found in peer pod selector": "Duplicate keys found in peer pod selector", + "Edge": "Edge", + "Edit": "Edit", + "Edit {{kind}}": "Edit {{kind}}", + "Edit {{label}}": "Edit {{label}}", + "Edit annotations": "Edit annotations", + "Edit Ingress": "Edit Ingress", + "Edit labels": "Edit labels", + "Edit NetworkAttachmentDefinition": "Edit NetworkAttachmentDefinition", + "Edit Pod selector": "Edit Pod selector", + "Edit Route": "Edit Route", + "Edit Service": "Edit Service", + "Egress": "Egress", + "Egress network policy is not supported.": "Egress network policy is not supported.", + "Egress rule": "Egress rule", + "Egress rules": "Egress rules", + "Enable {{kind}}": "Enable {{kind}}", + "Error": "Error", + "Error details": "Error details", + "Example: 100": "Example: 100", + "Exceptions": "Exceptions", + "External IP": "External IP", + "External load balancer": "External load balancer", + "External service name": "External service name", + "Failed": "Failed", + "False": "False", + "Form view": "Form view", + "From": "From", + "From pods": "From pods", + "Hide": "Hide", + "Host": "Host", + "Hostname": "Hostname", + "Hosts": "Hosts", + "If no namespace selector is provided, pods from all namespaces will be eligible.": "If no namespace selector is provided, pods from all namespaces will be eligible.", + "If no pod selector is provided, the policy will apply to all pods in the namespace.": "If no pod selector is provided, the policy will apply to all pods in the namespace.", + "If no pod selector is provided, traffic from all pods in eligible namespaces will be allowed.": "If no pod selector is provided, traffic from all pods in eligible namespaces will be allowed.", + "If no pod selector is provided, traffic from all pods in this namespace will be allowed.": "If no pod selector is provided, traffic from all pods in this namespace will be allowed.", + "If no pod selector is provided, traffic to all pods in eligible namespaces will be allowed.": "If no pod selector is provided, traffic to all pods in eligible namespaces will be allowed.", + "If no pod selector is provided, traffic to all pods in this namespace will be allowed.": "If no pod selector is provided, traffic to all pods in this namespace will be allowed.", + "If this field is empty, traffic will be allowed from all external sources.": "If this field is empty, traffic will be allowed from all external sources.", + "If this field is empty, traffic will be allowed to all external sources.": "If this field is empty, traffic will be allowed to all external sources.", + "Ingress": "Ingress", + "Ingress details": "Ingress details", + "Ingress points of load balancer": "Ingress points of load balancer", + "Ingress rule": "Ingress rule", + "Ingress rules": "Ingress rules", + "Ingresses": "Ingresses", + "Input error: selectors must start and end by a letter or number, and can only contain -, _, / or . Offending value: {{offendingSelector}}": "Input error: selectors must start and end by a letter or number, and can only contain -, _, / or . Offending value: {{offendingSelector}}", + "Insecure traffic": "Insecure traffic", + "Invalid IP address or subnet format": "Invalid IP address or subnet format", + "Invalid subnet format": "Invalid subnet format", + "Invalid YAML cannot be persisted": "Invalid YAML cannot be persisted", + "IP address management": "IP address management", + "IP Addresses accepting traffic for service": "IP Addresses accepting traffic for service", + "IP block exceptions are not supported and would cause the entire IP block section to be ignored.": "IP block exceptions are not supported and would cause the entire IP block section to be ignored.", + "IP blocks": "IP blocks", + "Key": "Key", + "Labels": "Labels", + "Learn how to use NetworkAttachmentDefinitions": "Learn how to use NetworkAttachmentDefinitions", + "Learn more about {{ kind }}": "Learn more about {{ kind }}", + "List of pods": "List of pods", + "List of pods matching": "List of pods matching", + "Location": "Location", + "Location of the resource that backs the service": "Location of the resource that backs the service", + "MAC spoof check": "MAC spoof check", + "Message": "Message", + "Metrics": "Metrics", + "Missing installed operators": "Missing installed operators", + "More information:": "More information:", + "MTU": "MTU", + "multi-networkpolicies": "multi-networkpolicies", + "multi-networkpolicy": "multi-networkpolicy", + "MultiNetworkPolicies": "MultiNetworkPolicies", + "Name": "Name", + "Namespace": "Namespace", + "Namespace selector": "Namespace selector", + "Namespaces having all the supplied key/value pairs as labels will be selected.": "Namespaces having all the supplied key/value pairs as labels will be selected.", + "network": "network", + "Network Type": "Network Type", + "NetworkAttachmentDefinitions": "NetworkAttachmentDefinitions", + "NetworkPolicies": "NetworkPolicies", + "NetworkPolicies documentation": "NetworkPolicies documentation", + "networks": "networks", + "Networks are not project-bound. Using the same name creates a shared NAD.": "Networks are not project-bound. Using the same name creates a shared NAD.", + "No {{kind}} found": "No {{kind}} found", + "No {{label}} found": "No {{label}} found", + "No conditions found": "No conditions found", + "No datapoints found.": "No datapoints found.", + "No hosts": "No hosts", + "No labels": "No labels", + "No NetworkAttachmentDefinition found": "No NetworkAttachmentDefinition found", + "No owner": "No owner", + "No pods matching the provided labels in the current namespace": "No pods matching the provided labels in the current namespace", + "No results found for \"{{inputValue}}\"": "No results found for \"{{inputValue}}\"", + "No route status": "No route status", + "No selector": "No selector", + "Node port": "Node port", + "None": "None", + "Not available": "Not available", + "Not configured": "Not configured", + "Not found": "Not found", + "Not Receiving Traffic": "Not Receiving Traffic", + "NS selector": "NS selector", + "Owner": "Owner", + "Passthrough": "Passthrough", + "Path": "Path", + "Path that the router watches to route traffic to the service.": "Path that the router watches to route traffic to the service.", + "Path type": "Path type", + "Pending": "Pending", + "Percent": "Percent", + "Phase": "Phase", + "Physical network name. A bridge mapping must be configured on cluster nodes to map between physical network names and Open vSwitch bridges.": "Physical network name. A bridge mapping must be configured on cluster nodes to map between physical network names and Open vSwitch bridges.", + "Please <2>try again.": "Please <2>try again.", + "Pod crash loop back-off": "Pod crash loop back-off", + "Pod port or name": "Pod port or name", + "Pod selector": "Pod selector", + "Pod selector for": "Pod selector for", + "Pod unschedulable": "Pod unschedulable", + "Pods": "Pods", + "Pods accept all traffic by default. They can be isolated via NetworkPolicies which specify a whitelist of ingress rules. When a Pod is selected by a NetworkPolicy, it will reject all traffic not explicitly allowed via a NetworkPolicy.": "Pods accept all traffic by default. They can be isolated via NetworkPolicies which specify a whitelist of ingress rules. When a Pod is selected by a NetworkPolicy, it will reject all traffic not explicitly allowed via a NetworkPolicy.", + "Pods having all the supplied key/value pairs as labels will be selected.": "Pods having all the supplied key/value pairs as labels will be selected.", + "Policy for": "Policy for", + "Policy name": "Policy name", + "Policy type": "Policy type", + "Port": "Port", + "Ports": "Ports", + "Private key": "Private key", + "Protocol": "Protocol", + "Public hostname for the Route. If not specified, a hostname is generated.": "Public hostname for the Route. If not specified, a hostname is generated.", + "Re-encrypt": "Re-encrypt", + "Reason": "Reason", + "Receiving Traffic": "Receiving Traffic", + "Redirect": "Redirect", + "Refer to your cluster administrator to know which network provider is used.": "Refer to your cluster administrator to know which network provider is used.", + "Remove": "Remove", + "Remove all": "Remove all", + "Remove alternate Service": "Remove alternate Service", + "Remove exception": "Remove exception", + "Remove peer": "Remove peer", + "Remove port": "Remove port", + "Resource name": "Resource name", + "Restricted Access": "Restricted Access", + "Reveal": "Reveal", + "Route details": "Route details", + "Router canonical hostname": "Router canonical hostname", + "Router: {{routerName}}": "Router: {{routerName}}", + "Routes": "Routes", + "Routes can be secured using several TLS termination types for serving certificates.": "Routes can be secured using several TLS termination types for serving certificates.", + "Routing is a way to make your application publicly visible": "Routing is a way to make your application publicly visible", + "RT": "RT", + "Rules": "Rules", + "Running": "Running", + "S": "S", + "Save": "Save", + "Secure Route": "Secure Route", + "Security": "Security", + "Select a Service": "Select a Service", + "Select default ingress and egress deny rules": "Select default ingress and egress deny rules", + "Select insecure traffic type": "Select insecure traffic type", + "Select one or more NetworkAttachmentDefinitions": "Select one or more NetworkAttachmentDefinitions", + "Select resource name": "Select resource name", + "Select target port": "Select target port", + "Select termination type": "Select termination type", + "Service": "Service", + "Service address": "Service address", + "Service details": "Service details", + "Service port": "Service port", + "Service port mapping": "Service port mapping", + "Service routing": "Service routing", + "Service to route to.": "Service to route to.", + "Service weight": "Service weight", + "Services": "Services", + "Session affinity": "Session affinity", + "Show a preview of the <2>affected pods that this egress rule will apply to.": "Show a preview of the <2>affected pods that this egress rule will apply to.", + "Show a preview of the <2>affected pods that this ingress rule will apply to.": "Show a preview of the <2>affected pods that this ingress rule will apply to.", + "Show a preview of the <2>affected pods that this policy will apply to": "Show a preview of the <2>affected pods that this policy will apply to", + "Showing {{shown}} from {{total}} results": "Showing {{shown}} from {{total}} results", + "Sources added to this rule will allow traffic to the pods defined above. Sources in this list are combined using a logical OR operation.": "Sources added to this rule will allow traffic to the pods defined above. Sources in this list are combined using a logical OR operation.", + "Status": "Status", + "Subnet": "Subnet", + "Switch and delete": "Switch and delete", + "Switching to form view will delete any invalid YAML.": "Switching to form view will delete any invalid YAML.", + "Target pods": "Target pods", + "Target port": "Target port", + "Target port for traffic": "Target port for traffic", + "Tech preview": "Tech preview", + "Terminating": "Terminating", + "Termination type": "Termination type", + "These rules are handled by a routing layer (Ingress Controller) which is updated as the rules are modified. The Ingress controller implementation defines how headers and other metadata are forwarded or manipulated": "These rules are handled by a routing layer (Ingress Controller) which is updated as the rules are modified. The Ingress controller implementation defines how headers and other metadata are forwarded or manipulated", + "This action will remove all rules within the Egress section and cannot be undone.": "This action will remove all rules within the Egress section and cannot be undone.", + "This action will remove all rules within the Ingress section and cannot be undone.": "This action will remove all rules within the Ingress section and cannot be undone.", + "This NetworkPolicy cannot be displayed in form. Please switch to the YAML editor.": "This NetworkPolicy cannot be displayed in form. Please switch to the YAML editor.", + "This route splits traffic across multiple services.": "This route splits traffic across multiple services.", + "TLS certificate": "TLS certificate", + "TLS certificates for edge and re-encrypt termination. If not specified, the router's default certificate is used.": "TLS certificates for edge and re-encrypt termination. If not specified, the router's default certificate is used.", + "TLS is not enabled": "TLS is not enabled", + "TLS Settings": "TLS Settings", + "TLS termination": "TLS termination", + "To": "To", + "To ports": "To ports", + "To troubleshoot, view logs and events, then debug in terminal.": "To troubleshoot, view logs and events, then debug in terminal.", + "To use a custom route, you must update your DNS provider by creating a canonical name (CNAME) record. Your CNAME record should point to your custom domain <2>{{host}}, to the OpenShift canonical router hostname, <5>{{routerCanonicalHostname}}, as the alias.": "To use a custom route, you must update your DNS provider by creating a canonical name (CNAME) record. Your CNAME record should point to your custom domain <2>{{host}}, to the OpenShift canonical router hostname, <5>{{routerCanonicalHostname}}, as the alias.", + "total limit": "total limit", + "total requested": "total requested", + "Traffic": "Traffic", + "Traffic in": "Traffic in", + "Traffic out": "Traffic out", + "True": "True", + "Type": "Type", + "Unknown": "Unknown", + "unknown host": "unknown host", + "Updated": "Updated", + "Value": "Value", + "Value hidden": "Value hidden", + "View all {{total}} results": "View all {{total}} results", + "View events": "View events", + "View logs": "View logs", + "VLAN": "VLAN", + "VLAN tag number": "VLAN tag number", + "Weight": "Weight", + "When using the OpenShift SDN cluster network provider:": "When using the OpenShift SDN cluster network provider:", + "Wildcard policy": "Wildcard policy", + "with exceptions": "with exceptions", + "YAML": "YAML", + "YAML view": "YAML view", + "You don't have access to this section due to cluster policy.": "You don't have access to this section due to cluster policy.", + "You don't have permission to perform this action": "You don't have permission to perform this action" +} diff --git a/locales/fr/plugin__networking-console-plugin.json b/locales/fr/plugin__networking-console-plugin.json new file mode 100644 index 00000000..64c8dc8a --- /dev/null +++ b/locales/fr/plugin__networking-console-plugin.json @@ -0,0 +1,340 @@ +{ + " See more details in: <3>": " See more details in: <3>", + " See more details in: <3>.": " See more details in: <3>.", + "(all nodes): ": "(all nodes): ", + "{{count}} annotation": "{{count}} annotation", + "{{count}} annotation_plural": "{{count}} annotation", + "{{kind}} details": "{{kind}} details", + "{{kind}} disabled": "{{kind}} disabled", + "{{numCores}} cores": "{{numCores}} cores", + "{{path}} found in resource, but is not supported in form.": "{{path}} found in resource, but is not supported in form.", + "{{path}} is missing.": "{{path}} is missing.", + "{{path}} should be an Array.": "{{path}} should be an Array.", + "{{path}} should not be empty.": "{{path}} should not be empty.", + "{{value}} at {{date}}": "{{value}} at {{date}}", + "<0>OpenShift Virtualization Operator or <3>SR-IOV Network Operator needs to be installed on the cluster, in order to pick the Network Type.": "<0>OpenShift Virtualization Operator or <3>SR-IOV Network Operator needs to be installed on the cluster, in order to pick the Network Type.", + "404: Page Not Found": "404: Page Not Found", + "A number between 0 and 255 that depicts relative weight compared with other targets.": "A number between 0 and 255 that depicts relative weight compared with other targets.", + "A unique name for the Route within the project": "A unique name for the Route within the project", + "Accessible outside the cluster": "Accessible outside the cluster", + "Accessible within the cluster only": "Accessible within the cluster only", + "Actions": "Actions", + "Add allowed destination": "Add allowed destination", + "Add allowed source": "Add allowed source", + "Add alternate Service": "Add alternate Service", + "Add egress rule": "Add egress rule", + "Add egress rules to be applied to your selected pods. Traffic is allowed to pods if it matches at least one rule.": "Add egress rules to be applied to your selected pods. Traffic is allowed to pods if it matches at least one rule.", + "Add exception": "Add exception", + "Add ingress rule": "Add ingress rule", + "Add ingress rules to be applied to your selected pods. Traffic is allowed from pods if it matches at least one rule.": "Add ingress rules to be applied to your selected pods. Traffic is allowed from pods if it matches at least one rule.", + "Add label": "Add label", + "Add namespace selector": "Add namespace selector", + "Add pod selector": "Add pod selector", + "Add port": "Add port", + "Add ports to restrict traffic through them. If no ports are provided, your policy will make all ports accessible to traffic.": "Add ports to restrict traffic through them. If no ports are provided, your policy will make all ports accessible to traffic.", + "All incoming traffic is denied to Pods in {{namespace}}": "All incoming traffic is denied to Pods in {{namespace}}", + "All outgoing traffic is allowed by default. Egress rules can be used to restrict outgoing traffic if the cluster network provider allows it. When using the OpenShift SDN cluster network provider, egress network policy is not supported.": "All outgoing traffic is allowed by default. Egress rules can be used to restrict outgoing traffic if the cluster network provider allows it. When using the OpenShift SDN cluster network provider, egress network policy is not supported.", + "All outgoing traffic is denied from Pods in {{namespace}}": "All outgoing traffic is denied from Pods in {{namespace}}", + "All pods within {{namespace}}": "All pods within {{namespace}}", + "Allow": "Allow", + "Allow peers by IP block": "Allow peers by IP block", + "Allow pods from inside the cluster": "Allow pods from inside the cluster", + "Allow pods from the same namespace": "Allow pods from the same namespace", + "Allow traffic from peers by IP block": "Allow traffic from peers by IP block", + "Allow traffic from pods in the same namespace": "Allow traffic from pods in the same namespace", + "Allow traffic from pods inside the cluster": "Allow traffic from pods inside the cluster", + "Allow traffic to peers by IP block": "Allow traffic to peers by IP block", + "Allow traffic to pods in the same namespace": "Allow traffic to pods in the same namespace", + "Allow traffic to pods inside the cluster": "Allow traffic to pods inside the cluster", + "Alternate Service target": "Alternate Service target", + "Alternate Service to route to.": "Alternate Service to route to.", + "Alternate Service weight": "Alternate Service weight", + "Annotations": "Annotations", + "Any namespace": "Any namespace", + "Any peer": "Any peer", + "Any pod": "Any pod", + "Any port": "Any port", + "Are you sure?": "Are you sure?", + "Assigns IP addresses from this subnet to Pods and VirtualMachines.": "Assigns IP addresses from this subnet to Pods and VirtualMachines.", + "Bridge mapping": "Bridge mapping", + "Bridge name": "Bridge name", + "CA certificate": "CA certificate", + "Can't preview pods": "Can't preview pods", + "Cancel": "Cancel", + "Certificate": "Certificate", + "Certificates": "Certificates", + "CIDR": "CIDR", + "Clear input value": "Clear input value", + "Click <1>Create {{kind}} to create your first {{kind}}": "Click <1>Create {{kind}} to create your first {{kind}}", + "Cluster administrator permissions are required to enable this feature.": "Cluster administrator permissions are required to enable this feature.", + "Cluster IP": "Cluster IP", + "Completed": "Completed", + "Conditions": "Conditions", + "Configure via:": "Configure via:", + "Confirm": "Confirm", + "Connection rate": "Connection rate", + "Copied": "Copied", + "Copied to clipboard": "Copied to clipboard", + "Copy to clipboard": "Copy to clipboard", + "CrashLoopBackOff": "CrashLoopBackOff", + "CrashLoopBackOff indicates that the application within the container is failing to start properly.": "CrashLoopBackOff indicates that the application within the container is failing to start properly.", + "Create": "Create", + "Create {{ kind }}": "Create {{ kind }}", + "Create {{kind}}": "Create {{kind}}", + "Create {{label}}": "Create {{label}}", + "Create by completing the form.": "Create by completing the form.", + "Create by manually entering YAML or JSON definitions, or by dragging and dropping a file into the editor.": "Create by manually entering YAML or JSON definitions, or by dragging and dropping a file into the editor.", + "Create Ingress": "Create Ingress", + "Create MultiNetworkPolicy": "Create MultiNetworkPolicy", + "Create NetworkArrachmentDefinition": "Create NetworkArrachmentDefinition", + "Create NetworkAttachmentDefinition": "Create NetworkAttachmentDefinition", + "Create NetworkPolicy": "Create NetworkPolicy", + "Create Route": "Create Route", + "Create Service": "Create Service", + "Created at": "Created at", + "Current selections": "Current selections", + "Custom route": "Custom route", + "Debug container {{name}}": "Debug container {{name}}", + "Delete": "Delete", + "Delete {{kind}}": "Delete {{kind}}", + "Delete Ingress": "Delete Ingress", + "Delete NetworkAttachmentDefinition": "Delete NetworkAttachmentDefinition", + "Delete Route": "Delete Route", + "Delete Service": "Delete Service", + "Deny all egress traffic": "Deny all egress traffic", + "Deny all ingress traffic": "Deny all ingress traffic", + "Description": "Description", + "Destination CA certificate": "Destination CA certificate", + "Destinations added to this rule will allow traffic from the pods defined above. Destinations in this list are combined using a logical OR operation.": "Destinations added to this rule will allow traffic from the pods defined above. Destinations in this list are combined using a logical OR operation.", + "Details": "Details", + "Do you need to set up custom DNS?": "Do you need to set up custom DNS?", + "Duplicate keys found in main pod selector": "Duplicate keys found in main pod selector", + "Duplicate keys found in peer namespace selector": "Duplicate keys found in peer namespace selector", + "Duplicate keys found in peer pod selector": "Duplicate keys found in peer pod selector", + "Edge": "Edge", + "Edit": "Edit", + "Edit {{kind}}": "Edit {{kind}}", + "Edit {{label}}": "Edit {{label}}", + "Edit annotations": "Edit annotations", + "Edit Ingress": "Edit Ingress", + "Edit labels": "Edit labels", + "Edit NetworkAttachmentDefinition": "Edit NetworkAttachmentDefinition", + "Edit Pod selector": "Edit Pod selector", + "Edit Route": "Edit Route", + "Edit Service": "Edit Service", + "Egress": "Egress", + "Egress network policy is not supported.": "Egress network policy is not supported.", + "Egress rule": "Egress rule", + "Egress rules": "Egress rules", + "Enable {{kind}}": "Enable {{kind}}", + "Error": "Error", + "Error details": "Error details", + "Example: 100": "Example: 100", + "Exceptions": "Exceptions", + "External IP": "External IP", + "External load balancer": "External load balancer", + "External service name": "External service name", + "Failed": "Failed", + "False": "False", + "Form view": "Form view", + "From": "From", + "From pods": "From pods", + "Hide": "Hide", + "Host": "Host", + "Hostname": "Hostname", + "Hosts": "Hosts", + "If no namespace selector is provided, pods from all namespaces will be eligible.": "If no namespace selector is provided, pods from all namespaces will be eligible.", + "If no pod selector is provided, the policy will apply to all pods in the namespace.": "If no pod selector is provided, the policy will apply to all pods in the namespace.", + "If no pod selector is provided, traffic from all pods in eligible namespaces will be allowed.": "If no pod selector is provided, traffic from all pods in eligible namespaces will be allowed.", + "If no pod selector is provided, traffic from all pods in this namespace will be allowed.": "If no pod selector is provided, traffic from all pods in this namespace will be allowed.", + "If no pod selector is provided, traffic to all pods in eligible namespaces will be allowed.": "If no pod selector is provided, traffic to all pods in eligible namespaces will be allowed.", + "If no pod selector is provided, traffic to all pods in this namespace will be allowed.": "If no pod selector is provided, traffic to all pods in this namespace will be allowed.", + "If this field is empty, traffic will be allowed from all external sources.": "If this field is empty, traffic will be allowed from all external sources.", + "If this field is empty, traffic will be allowed to all external sources.": "If this field is empty, traffic will be allowed to all external sources.", + "Ingress": "Ingress", + "Ingress details": "Ingress details", + "Ingress points of load balancer": "Ingress points of load balancer", + "Ingress rule": "Ingress rule", + "Ingress rules": "Ingress rules", + "Ingresses": "Ingresses", + "Input error: selectors must start and end by a letter or number, and can only contain -, _, / or . Offending value: {{offendingSelector}}": "Input error: selectors must start and end by a letter or number, and can only contain -, _, / or . Offending value: {{offendingSelector}}", + "Insecure traffic": "Insecure traffic", + "Invalid IP address or subnet format": "Invalid IP address or subnet format", + "Invalid subnet format": "Invalid subnet format", + "Invalid YAML cannot be persisted": "Invalid YAML cannot be persisted", + "IP address management": "IP address management", + "IP Addresses accepting traffic for service": "IP Addresses accepting traffic for service", + "IP block exceptions are not supported and would cause the entire IP block section to be ignored.": "IP block exceptions are not supported and would cause the entire IP block section to be ignored.", + "IP blocks": "IP blocks", + "Key": "Key", + "Labels": "Labels", + "Learn how to use NetworkAttachmentDefinitions": "Learn how to use NetworkAttachmentDefinitions", + "Learn more about {{ kind }}": "Learn more about {{ kind }}", + "List of pods": "List of pods", + "List of pods matching": "List of pods matching", + "Location": "Location", + "Location of the resource that backs the service": "Location of the resource that backs the service", + "MAC spoof check": "MAC spoof check", + "Message": "Message", + "Metrics": "Metrics", + "Missing installed operators": "Missing installed operators", + "More information:": "More information:", + "MTU": "MTU", + "multi-networkpolicies": "multi-networkpolicies", + "multi-networkpolicy": "multi-networkpolicy", + "MultiNetworkPolicies": "MultiNetworkPolicies", + "Name": "Name", + "Namespace": "Namespace", + "Namespace selector": "Namespace selector", + "Namespaces having all the supplied key/value pairs as labels will be selected.": "Namespaces having all the supplied key/value pairs as labels will be selected.", + "network": "network", + "Network Type": "Network Type", + "NetworkAttachmentDefinitions": "NetworkAttachmentDefinitions", + "NetworkPolicies": "NetworkPolicies", + "NetworkPolicies documentation": "NetworkPolicies documentation", + "networks": "networks", + "Networks are not project-bound. Using the same name creates a shared NAD.": "Networks are not project-bound. Using the same name creates a shared NAD.", + "No {{kind}} found": "No {{kind}} found", + "No {{label}} found": "No {{label}} found", + "No conditions found": "No conditions found", + "No datapoints found.": "No datapoints found.", + "No hosts": "No hosts", + "No labels": "No labels", + "No NetworkAttachmentDefinition found": "No NetworkAttachmentDefinition found", + "No owner": "No owner", + "No pods matching the provided labels in the current namespace": "No pods matching the provided labels in the current namespace", + "No results found for \"{{inputValue}}\"": "No results found for \"{{inputValue}}\"", + "No route status": "No route status", + "No selector": "No selector", + "Node port": "Node port", + "None": "None", + "Not available": "Not available", + "Not configured": "Not configured", + "Not found": "Not found", + "Not Receiving Traffic": "Not Receiving Traffic", + "NS selector": "NS selector", + "Owner": "Owner", + "Passthrough": "Passthrough", + "Path": "Path", + "Path that the router watches to route traffic to the service.": "Path that the router watches to route traffic to the service.", + "Path type": "Path type", + "Pending": "Pending", + "Percent": "Percent", + "Phase": "Phase", + "Physical network name. A bridge mapping must be configured on cluster nodes to map between physical network names and Open vSwitch bridges.": "Physical network name. A bridge mapping must be configured on cluster nodes to map between physical network names and Open vSwitch bridges.", + "Please <2>try again.": "Please <2>try again.", + "Pod crash loop back-off": "Pod crash loop back-off", + "Pod port or name": "Pod port or name", + "Pod selector": "Pod selector", + "Pod selector for": "Pod selector for", + "Pod unschedulable": "Pod unschedulable", + "Pods": "Pods", + "Pods accept all traffic by default. They can be isolated via NetworkPolicies which specify a whitelist of ingress rules. When a Pod is selected by a NetworkPolicy, it will reject all traffic not explicitly allowed via a NetworkPolicy.": "Pods accept all traffic by default. They can be isolated via NetworkPolicies which specify a whitelist of ingress rules. When a Pod is selected by a NetworkPolicy, it will reject all traffic not explicitly allowed via a NetworkPolicy.", + "Pods having all the supplied key/value pairs as labels will be selected.": "Pods having all the supplied key/value pairs as labels will be selected.", + "Policy for": "Policy for", + "Policy name": "Policy name", + "Policy type": "Policy type", + "Port": "Port", + "Ports": "Ports", + "Private key": "Private key", + "Protocol": "Protocol", + "Public hostname for the Route. If not specified, a hostname is generated.": "Public hostname for the Route. If not specified, a hostname is generated.", + "Re-encrypt": "Re-encrypt", + "Reason": "Reason", + "Receiving Traffic": "Receiving Traffic", + "Redirect": "Redirect", + "Refer to your cluster administrator to know which network provider is used.": "Refer to your cluster administrator to know which network provider is used.", + "Remove": "Remove", + "Remove all": "Remove all", + "Remove alternate Service": "Remove alternate Service", + "Remove exception": "Remove exception", + "Remove peer": "Remove peer", + "Remove port": "Remove port", + "Resource name": "Resource name", + "Restricted Access": "Restricted Access", + "Reveal": "Reveal", + "Route details": "Route details", + "Router canonical hostname": "Router canonical hostname", + "Router: {{routerName}}": "Router: {{routerName}}", + "Routes": "Routes", + "Routes can be secured using several TLS termination types for serving certificates.": "Routes can be secured using several TLS termination types for serving certificates.", + "Routing is a way to make your application publicly visible": "Routing is a way to make your application publicly visible", + "RT": "RT", + "Rules": "Rules", + "Running": "Running", + "S": "S", + "Save": "Save", + "Secure Route": "Secure Route", + "Security": "Security", + "Select a Service": "Select a Service", + "Select default ingress and egress deny rules": "Select default ingress and egress deny rules", + "Select insecure traffic type": "Select insecure traffic type", + "Select one or more NetworkAttachmentDefinitions": "Select one or more NetworkAttachmentDefinitions", + "Select resource name": "Select resource name", + "Select target port": "Select target port", + "Select termination type": "Select termination type", + "Service": "Service", + "Service address": "Service address", + "Service details": "Service details", + "Service port": "Service port", + "Service port mapping": "Service port mapping", + "Service routing": "Service routing", + "Service to route to.": "Service to route to.", + "Service weight": "Service weight", + "Services": "Services", + "Session affinity": "Session affinity", + "Show a preview of the <2>affected pods that this egress rule will apply to.": "Show a preview of the <2>affected pods that this egress rule will apply to.", + "Show a preview of the <2>affected pods that this ingress rule will apply to.": "Show a preview of the <2>affected pods that this ingress rule will apply to.", + "Show a preview of the <2>affected pods that this policy will apply to": "Show a preview of the <2>affected pods that this policy will apply to", + "Showing {{shown}} from {{total}} results": "Showing {{shown}} from {{total}} results", + "Sources added to this rule will allow traffic to the pods defined above. Sources in this list are combined using a logical OR operation.": "Sources added to this rule will allow traffic to the pods defined above. Sources in this list are combined using a logical OR operation.", + "Status": "Status", + "Subnet": "Subnet", + "Switch and delete": "Switch and delete", + "Switching to form view will delete any invalid YAML.": "Switching to form view will delete any invalid YAML.", + "Target pods": "Target pods", + "Target port": "Target port", + "Target port for traffic": "Target port for traffic", + "Tech preview": "Tech preview", + "Terminating": "Terminating", + "Termination type": "Termination type", + "These rules are handled by a routing layer (Ingress Controller) which is updated as the rules are modified. The Ingress controller implementation defines how headers and other metadata are forwarded or manipulated": "These rules are handled by a routing layer (Ingress Controller) which is updated as the rules are modified. The Ingress controller implementation defines how headers and other metadata are forwarded or manipulated", + "This action will remove all rules within the Egress section and cannot be undone.": "This action will remove all rules within the Egress section and cannot be undone.", + "This action will remove all rules within the Ingress section and cannot be undone.": "This action will remove all rules within the Ingress section and cannot be undone.", + "This NetworkPolicy cannot be displayed in form. Please switch to the YAML editor.": "This NetworkPolicy cannot be displayed in form. Please switch to the YAML editor.", + "This route splits traffic across multiple services.": "This route splits traffic across multiple services.", + "TLS certificate": "TLS certificate", + "TLS certificates for edge and re-encrypt termination. If not specified, the router's default certificate is used.": "TLS certificates for edge and re-encrypt termination. If not specified, the router's default certificate is used.", + "TLS is not enabled": "TLS is not enabled", + "TLS Settings": "TLS Settings", + "TLS termination": "TLS termination", + "To": "To", + "To ports": "To ports", + "To troubleshoot, view logs and events, then debug in terminal.": "To troubleshoot, view logs and events, then debug in terminal.", + "To use a custom route, you must update your DNS provider by creating a canonical name (CNAME) record. Your CNAME record should point to your custom domain <2>{{host}}, to the OpenShift canonical router hostname, <5>{{routerCanonicalHostname}}, as the alias.": "To use a custom route, you must update your DNS provider by creating a canonical name (CNAME) record. Your CNAME record should point to your custom domain <2>{{host}}, to the OpenShift canonical router hostname, <5>{{routerCanonicalHostname}}, as the alias.", + "total limit": "total limit", + "total requested": "total requested", + "Traffic": "Traffic", + "Traffic in": "Traffic in", + "Traffic out": "Traffic out", + "True": "True", + "Type": "Type", + "Unknown": "Unknown", + "unknown host": "unknown host", + "Updated": "Updated", + "Value": "Value", + "Value hidden": "Value hidden", + "View all {{total}} results": "View all {{total}} results", + "View events": "View events", + "View logs": "View logs", + "VLAN": "VLAN", + "VLAN tag number": "VLAN tag number", + "Weight": "Weight", + "When using the OpenShift SDN cluster network provider:": "When using the OpenShift SDN cluster network provider:", + "Wildcard policy": "Wildcard policy", + "with exceptions": "with exceptions", + "YAML": "YAML", + "YAML view": "YAML view", + "You don't have access to this section due to cluster policy.": "You don't have access to this section due to cluster policy.", + "You don't have permission to perform this action": "You don't have permission to perform this action" +} diff --git a/locales/ja/plugin__networking-console-plugin.json b/locales/ja/plugin__networking-console-plugin.json new file mode 100644 index 00000000..8b472e06 --- /dev/null +++ b/locales/ja/plugin__networking-console-plugin.json @@ -0,0 +1,339 @@ +{ + " See more details in: <3>": " See more details in: <3>", + " See more details in: <3>.": " See more details in: <3>.", + "(all nodes): ": "(all nodes): ", + "{{count}} annotation": "{{count}} annotation", + "{{kind}} details": "{{kind}} details", + "{{kind}} disabled": "{{kind}} disabled", + "{{numCores}} cores": "{{numCores}} cores", + "{{path}} found in resource, but is not supported in form.": "{{path}} found in resource, but is not supported in form.", + "{{path}} is missing.": "{{path}} is missing.", + "{{path}} should be an Array.": "{{path}} should be an Array.", + "{{path}} should not be empty.": "{{path}} should not be empty.", + "{{value}} at {{date}}": "{{value}} at {{date}}", + "<0>OpenShift Virtualization Operator or <3>SR-IOV Network Operator needs to be installed on the cluster, in order to pick the Network Type.": "<0>OpenShift Virtualization Operator or <3>SR-IOV Network Operator needs to be installed on the cluster, in order to pick the Network Type.", + "404: Page Not Found": "404: Page Not Found", + "A number between 0 and 255 that depicts relative weight compared with other targets.": "A number between 0 and 255 that depicts relative weight compared with other targets.", + "A unique name for the Route within the project": "A unique name for the Route within the project", + "Accessible outside the cluster": "Accessible outside the cluster", + "Accessible within the cluster only": "Accessible within the cluster only", + "Actions": "Actions", + "Add allowed destination": "Add allowed destination", + "Add allowed source": "Add allowed source", + "Add alternate Service": "Add alternate Service", + "Add egress rule": "Add egress rule", + "Add egress rules to be applied to your selected pods. Traffic is allowed to pods if it matches at least one rule.": "Add egress rules to be applied to your selected pods. Traffic is allowed to pods if it matches at least one rule.", + "Add exception": "Add exception", + "Add ingress rule": "Add ingress rule", + "Add ingress rules to be applied to your selected pods. Traffic is allowed from pods if it matches at least one rule.": "Add ingress rules to be applied to your selected pods. Traffic is allowed from pods if it matches at least one rule.", + "Add label": "Add label", + "Add namespace selector": "Add namespace selector", + "Add pod selector": "Add pod selector", + "Add port": "Add port", + "Add ports to restrict traffic through them. If no ports are provided, your policy will make all ports accessible to traffic.": "Add ports to restrict traffic through them. If no ports are provided, your policy will make all ports accessible to traffic.", + "All incoming traffic is denied to Pods in {{namespace}}": "All incoming traffic is denied to Pods in {{namespace}}", + "All outgoing traffic is allowed by default. Egress rules can be used to restrict outgoing traffic if the cluster network provider allows it. When using the OpenShift SDN cluster network provider, egress network policy is not supported.": "All outgoing traffic is allowed by default. Egress rules can be used to restrict outgoing traffic if the cluster network provider allows it. When using the OpenShift SDN cluster network provider, egress network policy is not supported.", + "All outgoing traffic is denied from Pods in {{namespace}}": "All outgoing traffic is denied from Pods in {{namespace}}", + "All pods within {{namespace}}": "All pods within {{namespace}}", + "Allow": "Allow", + "Allow peers by IP block": "Allow peers by IP block", + "Allow pods from inside the cluster": "Allow pods from inside the cluster", + "Allow pods from the same namespace": "Allow pods from the same namespace", + "Allow traffic from peers by IP block": "Allow traffic from peers by IP block", + "Allow traffic from pods in the same namespace": "Allow traffic from pods in the same namespace", + "Allow traffic from pods inside the cluster": "Allow traffic from pods inside the cluster", + "Allow traffic to peers by IP block": "Allow traffic to peers by IP block", + "Allow traffic to pods in the same namespace": "Allow traffic to pods in the same namespace", + "Allow traffic to pods inside the cluster": "Allow traffic to pods inside the cluster", + "Alternate Service target": "Alternate Service target", + "Alternate Service to route to.": "Alternate Service to route to.", + "Alternate Service weight": "Alternate Service weight", + "Annotations": "Annotations", + "Any namespace": "Any namespace", + "Any peer": "Any peer", + "Any pod": "Any pod", + "Any port": "Any port", + "Are you sure?": "Are you sure?", + "Assigns IP addresses from this subnet to Pods and VirtualMachines.": "Assigns IP addresses from this subnet to Pods and VirtualMachines.", + "Bridge mapping": "Bridge mapping", + "Bridge name": "Bridge name", + "CA certificate": "CA certificate", + "Can't preview pods": "Can't preview pods", + "Cancel": "Cancel", + "Certificate": "Certificate", + "Certificates": "Certificates", + "CIDR": "CIDR", + "Clear input value": "Clear input value", + "Click <1>Create {{kind}} to create your first {{kind}}": "Click <1>Create {{kind}} to create your first {{kind}}", + "Cluster administrator permissions are required to enable this feature.": "Cluster administrator permissions are required to enable this feature.", + "Cluster IP": "Cluster IP", + "Completed": "Completed", + "Conditions": "Conditions", + "Configure via:": "Configure via:", + "Confirm": "Confirm", + "Connection rate": "Connection rate", + "Copied": "Copied", + "Copied to clipboard": "Copied to clipboard", + "Copy to clipboard": "Copy to clipboard", + "CrashLoopBackOff": "CrashLoopBackOff", + "CrashLoopBackOff indicates that the application within the container is failing to start properly.": "CrashLoopBackOff indicates that the application within the container is failing to start properly.", + "Create": "Create", + "Create {{ kind }}": "Create {{ kind }}", + "Create {{kind}}": "Create {{kind}}", + "Create {{label}}": "Create {{label}}", + "Create by completing the form.": "Create by completing the form.", + "Create by manually entering YAML or JSON definitions, or by dragging and dropping a file into the editor.": "Create by manually entering YAML or JSON definitions, or by dragging and dropping a file into the editor.", + "Create Ingress": "Create Ingress", + "Create MultiNetworkPolicy": "Create MultiNetworkPolicy", + "Create NetworkArrachmentDefinition": "Create NetworkArrachmentDefinition", + "Create NetworkAttachmentDefinition": "Create NetworkAttachmentDefinition", + "Create NetworkPolicy": "Create NetworkPolicy", + "Create Route": "Create Route", + "Create Service": "Create Service", + "Created at": "Created at", + "Current selections": "Current selections", + "Custom route": "Custom route", + "Debug container {{name}}": "Debug container {{name}}", + "Delete": "Delete", + "Delete {{kind}}": "Delete {{kind}}", + "Delete Ingress": "Delete Ingress", + "Delete NetworkAttachmentDefinition": "Delete NetworkAttachmentDefinition", + "Delete Route": "Delete Route", + "Delete Service": "Delete Service", + "Deny all egress traffic": "Deny all egress traffic", + "Deny all ingress traffic": "Deny all ingress traffic", + "Description": "Description", + "Destination CA certificate": "Destination CA certificate", + "Destinations added to this rule will allow traffic from the pods defined above. Destinations in this list are combined using a logical OR operation.": "Destinations added to this rule will allow traffic from the pods defined above. Destinations in this list are combined using a logical OR operation.", + "Details": "Details", + "Do you need to set up custom DNS?": "Do you need to set up custom DNS?", + "Duplicate keys found in main pod selector": "Duplicate keys found in main pod selector", + "Duplicate keys found in peer namespace selector": "Duplicate keys found in peer namespace selector", + "Duplicate keys found in peer pod selector": "Duplicate keys found in peer pod selector", + "Edge": "Edge", + "Edit": "Edit", + "Edit {{kind}}": "Edit {{kind}}", + "Edit {{label}}": "Edit {{label}}", + "Edit annotations": "Edit annotations", + "Edit Ingress": "Edit Ingress", + "Edit labels": "Edit labels", + "Edit NetworkAttachmentDefinition": "Edit NetworkAttachmentDefinition", + "Edit Pod selector": "Edit Pod selector", + "Edit Route": "Edit Route", + "Edit Service": "Edit Service", + "Egress": "Egress", + "Egress network policy is not supported.": "Egress network policy is not supported.", + "Egress rule": "Egress rule", + "Egress rules": "Egress rules", + "Enable {{kind}}": "Enable {{kind}}", + "Error": "Error", + "Error details": "Error details", + "Example: 100": "Example: 100", + "Exceptions": "Exceptions", + "External IP": "External IP", + "External load balancer": "External load balancer", + "External service name": "External service name", + "Failed": "Failed", + "False": "False", + "Form view": "Form view", + "From": "From", + "From pods": "From pods", + "Hide": "Hide", + "Host": "Host", + "Hostname": "Hostname", + "Hosts": "Hosts", + "If no namespace selector is provided, pods from all namespaces will be eligible.": "If no namespace selector is provided, pods from all namespaces will be eligible.", + "If no pod selector is provided, the policy will apply to all pods in the namespace.": "If no pod selector is provided, the policy will apply to all pods in the namespace.", + "If no pod selector is provided, traffic from all pods in eligible namespaces will be allowed.": "If no pod selector is provided, traffic from all pods in eligible namespaces will be allowed.", + "If no pod selector is provided, traffic from all pods in this namespace will be allowed.": "If no pod selector is provided, traffic from all pods in this namespace will be allowed.", + "If no pod selector is provided, traffic to all pods in eligible namespaces will be allowed.": "If no pod selector is provided, traffic to all pods in eligible namespaces will be allowed.", + "If no pod selector is provided, traffic to all pods in this namespace will be allowed.": "If no pod selector is provided, traffic to all pods in this namespace will be allowed.", + "If this field is empty, traffic will be allowed from all external sources.": "If this field is empty, traffic will be allowed from all external sources.", + "If this field is empty, traffic will be allowed to all external sources.": "If this field is empty, traffic will be allowed to all external sources.", + "Ingress": "Ingress", + "Ingress details": "Ingress details", + "Ingress points of load balancer": "Ingress points of load balancer", + "Ingress rule": "Ingress rule", + "Ingress rules": "Ingress rules", + "Ingresses": "Ingresses", + "Input error: selectors must start and end by a letter or number, and can only contain -, _, / or . Offending value: {{offendingSelector}}": "Input error: selectors must start and end by a letter or number, and can only contain -, _, / or . Offending value: {{offendingSelector}}", + "Insecure traffic": "Insecure traffic", + "Invalid IP address or subnet format": "Invalid IP address or subnet format", + "Invalid subnet format": "Invalid subnet format", + "Invalid YAML cannot be persisted": "Invalid YAML cannot be persisted", + "IP address management": "IP address management", + "IP Addresses accepting traffic for service": "IP Addresses accepting traffic for service", + "IP block exceptions are not supported and would cause the entire IP block section to be ignored.": "IP block exceptions are not supported and would cause the entire IP block section to be ignored.", + "IP blocks": "IP blocks", + "Key": "Key", + "Labels": "Labels", + "Learn how to use NetworkAttachmentDefinitions": "Learn how to use NetworkAttachmentDefinitions", + "Learn more about {{ kind }}": "Learn more about {{ kind }}", + "List of pods": "List of pods", + "List of pods matching": "List of pods matching", + "Location": "Location", + "Location of the resource that backs the service": "Location of the resource that backs the service", + "MAC spoof check": "MAC spoof check", + "Message": "Message", + "Metrics": "Metrics", + "Missing installed operators": "Missing installed operators", + "More information:": "More information:", + "MTU": "MTU", + "multi-networkpolicies": "multi-networkpolicies", + "multi-networkpolicy": "multi-networkpolicy", + "MultiNetworkPolicies": "MultiNetworkPolicies", + "Name": "Name", + "Namespace": "Namespace", + "Namespace selector": "Namespace selector", + "Namespaces having all the supplied key/value pairs as labels will be selected.": "Namespaces having all the supplied key/value pairs as labels will be selected.", + "network": "network", + "Network Type": "Network Type", + "NetworkAttachmentDefinitions": "NetworkAttachmentDefinitions", + "NetworkPolicies": "NetworkPolicies", + "NetworkPolicies documentation": "NetworkPolicies documentation", + "networks": "networks", + "Networks are not project-bound. Using the same name creates a shared NAD.": "Networks are not project-bound. Using the same name creates a shared NAD.", + "No {{kind}} found": "No {{kind}} found", + "No {{label}} found": "No {{label}} found", + "No conditions found": "No conditions found", + "No datapoints found.": "No datapoints found.", + "No hosts": "No hosts", + "No labels": "No labels", + "No NetworkAttachmentDefinition found": "No NetworkAttachmentDefinition found", + "No owner": "No owner", + "No pods matching the provided labels in the current namespace": "No pods matching the provided labels in the current namespace", + "No results found for \"{{inputValue}}\"": "No results found for \"{{inputValue}}\"", + "No route status": "No route status", + "No selector": "No selector", + "Node port": "Node port", + "None": "None", + "Not available": "Not available", + "Not configured": "Not configured", + "Not found": "Not found", + "Not Receiving Traffic": "Not Receiving Traffic", + "NS selector": "NS selector", + "Owner": "Owner", + "Passthrough": "Passthrough", + "Path": "Path", + "Path that the router watches to route traffic to the service.": "Path that the router watches to route traffic to the service.", + "Path type": "Path type", + "Pending": "Pending", + "Percent": "Percent", + "Phase": "Phase", + "Physical network name. A bridge mapping must be configured on cluster nodes to map between physical network names and Open vSwitch bridges.": "Physical network name. A bridge mapping must be configured on cluster nodes to map between physical network names and Open vSwitch bridges.", + "Please <2>try again.": "Please <2>try again.", + "Pod crash loop back-off": "Pod crash loop back-off", + "Pod port or name": "Pod port or name", + "Pod selector": "Pod selector", + "Pod selector for": "Pod selector for", + "Pod unschedulable": "Pod unschedulable", + "Pods": "Pods", + "Pods accept all traffic by default. They can be isolated via NetworkPolicies which specify a whitelist of ingress rules. When a Pod is selected by a NetworkPolicy, it will reject all traffic not explicitly allowed via a NetworkPolicy.": "Pods accept all traffic by default. They can be isolated via NetworkPolicies which specify a whitelist of ingress rules. When a Pod is selected by a NetworkPolicy, it will reject all traffic not explicitly allowed via a NetworkPolicy.", + "Pods having all the supplied key/value pairs as labels will be selected.": "Pods having all the supplied key/value pairs as labels will be selected.", + "Policy for": "Policy for", + "Policy name": "Policy name", + "Policy type": "Policy type", + "Port": "Port", + "Ports": "Ports", + "Private key": "Private key", + "Protocol": "Protocol", + "Public hostname for the Route. If not specified, a hostname is generated.": "Public hostname for the Route. If not specified, a hostname is generated.", + "Re-encrypt": "Re-encrypt", + "Reason": "Reason", + "Receiving Traffic": "Receiving Traffic", + "Redirect": "Redirect", + "Refer to your cluster administrator to know which network provider is used.": "Refer to your cluster administrator to know which network provider is used.", + "Remove": "Remove", + "Remove all": "Remove all", + "Remove alternate Service": "Remove alternate Service", + "Remove exception": "Remove exception", + "Remove peer": "Remove peer", + "Remove port": "Remove port", + "Resource name": "Resource name", + "Restricted Access": "Restricted Access", + "Reveal": "Reveal", + "Route details": "Route details", + "Router canonical hostname": "Router canonical hostname", + "Router: {{routerName}}": "Router: {{routerName}}", + "Routes": "Routes", + "Routes can be secured using several TLS termination types for serving certificates.": "Routes can be secured using several TLS termination types for serving certificates.", + "Routing is a way to make your application publicly visible": "Routing is a way to make your application publicly visible", + "RT": "RT", + "Rules": "Rules", + "Running": "Running", + "S": "S", + "Save": "Save", + "Secure Route": "Secure Route", + "Security": "Security", + "Select a Service": "Select a Service", + "Select default ingress and egress deny rules": "Select default ingress and egress deny rules", + "Select insecure traffic type": "Select insecure traffic type", + "Select one or more NetworkAttachmentDefinitions": "Select one or more NetworkAttachmentDefinitions", + "Select resource name": "Select resource name", + "Select target port": "Select target port", + "Select termination type": "Select termination type", + "Service": "Service", + "Service address": "Service address", + "Service details": "Service details", + "Service port": "Service port", + "Service port mapping": "Service port mapping", + "Service routing": "Service routing", + "Service to route to.": "Service to route to.", + "Service weight": "Service weight", + "Services": "Services", + "Session affinity": "Session affinity", + "Show a preview of the <2>affected pods that this egress rule will apply to.": "Show a preview of the <2>affected pods that this egress rule will apply to.", + "Show a preview of the <2>affected pods that this ingress rule will apply to.": "Show a preview of the <2>affected pods that this ingress rule will apply to.", + "Show a preview of the <2>affected pods that this policy will apply to": "Show a preview of the <2>affected pods that this policy will apply to", + "Showing {{shown}} from {{total}} results": "Showing {{shown}} from {{total}} results", + "Sources added to this rule will allow traffic to the pods defined above. Sources in this list are combined using a logical OR operation.": "Sources added to this rule will allow traffic to the pods defined above. Sources in this list are combined using a logical OR operation.", + "Status": "Status", + "Subnet": "Subnet", + "Switch and delete": "Switch and delete", + "Switching to form view will delete any invalid YAML.": "Switching to form view will delete any invalid YAML.", + "Target pods": "Target pods", + "Target port": "Target port", + "Target port for traffic": "Target port for traffic", + "Tech preview": "Tech preview", + "Terminating": "Terminating", + "Termination type": "Termination type", + "These rules are handled by a routing layer (Ingress Controller) which is updated as the rules are modified. The Ingress controller implementation defines how headers and other metadata are forwarded or manipulated": "These rules are handled by a routing layer (Ingress Controller) which is updated as the rules are modified. The Ingress controller implementation defines how headers and other metadata are forwarded or manipulated", + "This action will remove all rules within the Egress section and cannot be undone.": "This action will remove all rules within the Egress section and cannot be undone.", + "This action will remove all rules within the Ingress section and cannot be undone.": "This action will remove all rules within the Ingress section and cannot be undone.", + "This NetworkPolicy cannot be displayed in form. Please switch to the YAML editor.": "This NetworkPolicy cannot be displayed in form. Please switch to the YAML editor.", + "This route splits traffic across multiple services.": "This route splits traffic across multiple services.", + "TLS certificate": "TLS certificate", + "TLS certificates for edge and re-encrypt termination. If not specified, the router's default certificate is used.": "TLS certificates for edge and re-encrypt termination. If not specified, the router's default certificate is used.", + "TLS is not enabled": "TLS is not enabled", + "TLS Settings": "TLS Settings", + "TLS termination": "TLS termination", + "To": "To", + "To ports": "To ports", + "To troubleshoot, view logs and events, then debug in terminal.": "To troubleshoot, view logs and events, then debug in terminal.", + "To use a custom route, you must update your DNS provider by creating a canonical name (CNAME) record. Your CNAME record should point to your custom domain <2>{{host}}, to the OpenShift canonical router hostname, <5>{{routerCanonicalHostname}}, as the alias.": "To use a custom route, you must update your DNS provider by creating a canonical name (CNAME) record. Your CNAME record should point to your custom domain <2>{{host}}, to the OpenShift canonical router hostname, <5>{{routerCanonicalHostname}}, as the alias.", + "total limit": "total limit", + "total requested": "total requested", + "Traffic": "Traffic", + "Traffic in": "Traffic in", + "Traffic out": "Traffic out", + "True": "True", + "Type": "Type", + "Unknown": "Unknown", + "unknown host": "unknown host", + "Updated": "Updated", + "Value": "Value", + "Value hidden": "Value hidden", + "View all {{total}} results": "View all {{total}} results", + "View events": "View events", + "View logs": "View logs", + "VLAN": "VLAN", + "VLAN tag number": "VLAN tag number", + "Weight": "Weight", + "When using the OpenShift SDN cluster network provider:": "When using the OpenShift SDN cluster network provider:", + "Wildcard policy": "Wildcard policy", + "with exceptions": "with exceptions", + "YAML": "YAML", + "YAML view": "YAML view", + "You don't have access to this section due to cluster policy.": "You don't have access to this section due to cluster policy.", + "You don't have permission to perform this action": "You don't have permission to perform this action" +} diff --git a/locales/ko/plugin__networking-console-plugin.json b/locales/ko/plugin__networking-console-plugin.json new file mode 100644 index 00000000..8b472e06 --- /dev/null +++ b/locales/ko/plugin__networking-console-plugin.json @@ -0,0 +1,339 @@ +{ + " See more details in: <3>": " See more details in: <3>", + " See more details in: <3>.": " See more details in: <3>.", + "(all nodes): ": "(all nodes): ", + "{{count}} annotation": "{{count}} annotation", + "{{kind}} details": "{{kind}} details", + "{{kind}} disabled": "{{kind}} disabled", + "{{numCores}} cores": "{{numCores}} cores", + "{{path}} found in resource, but is not supported in form.": "{{path}} found in resource, but is not supported in form.", + "{{path}} is missing.": "{{path}} is missing.", + "{{path}} should be an Array.": "{{path}} should be an Array.", + "{{path}} should not be empty.": "{{path}} should not be empty.", + "{{value}} at {{date}}": "{{value}} at {{date}}", + "<0>OpenShift Virtualization Operator or <3>SR-IOV Network Operator needs to be installed on the cluster, in order to pick the Network Type.": "<0>OpenShift Virtualization Operator or <3>SR-IOV Network Operator needs to be installed on the cluster, in order to pick the Network Type.", + "404: Page Not Found": "404: Page Not Found", + "A number between 0 and 255 that depicts relative weight compared with other targets.": "A number between 0 and 255 that depicts relative weight compared with other targets.", + "A unique name for the Route within the project": "A unique name for the Route within the project", + "Accessible outside the cluster": "Accessible outside the cluster", + "Accessible within the cluster only": "Accessible within the cluster only", + "Actions": "Actions", + "Add allowed destination": "Add allowed destination", + "Add allowed source": "Add allowed source", + "Add alternate Service": "Add alternate Service", + "Add egress rule": "Add egress rule", + "Add egress rules to be applied to your selected pods. Traffic is allowed to pods if it matches at least one rule.": "Add egress rules to be applied to your selected pods. Traffic is allowed to pods if it matches at least one rule.", + "Add exception": "Add exception", + "Add ingress rule": "Add ingress rule", + "Add ingress rules to be applied to your selected pods. Traffic is allowed from pods if it matches at least one rule.": "Add ingress rules to be applied to your selected pods. Traffic is allowed from pods if it matches at least one rule.", + "Add label": "Add label", + "Add namespace selector": "Add namespace selector", + "Add pod selector": "Add pod selector", + "Add port": "Add port", + "Add ports to restrict traffic through them. If no ports are provided, your policy will make all ports accessible to traffic.": "Add ports to restrict traffic through them. If no ports are provided, your policy will make all ports accessible to traffic.", + "All incoming traffic is denied to Pods in {{namespace}}": "All incoming traffic is denied to Pods in {{namespace}}", + "All outgoing traffic is allowed by default. Egress rules can be used to restrict outgoing traffic if the cluster network provider allows it. When using the OpenShift SDN cluster network provider, egress network policy is not supported.": "All outgoing traffic is allowed by default. Egress rules can be used to restrict outgoing traffic if the cluster network provider allows it. When using the OpenShift SDN cluster network provider, egress network policy is not supported.", + "All outgoing traffic is denied from Pods in {{namespace}}": "All outgoing traffic is denied from Pods in {{namespace}}", + "All pods within {{namespace}}": "All pods within {{namespace}}", + "Allow": "Allow", + "Allow peers by IP block": "Allow peers by IP block", + "Allow pods from inside the cluster": "Allow pods from inside the cluster", + "Allow pods from the same namespace": "Allow pods from the same namespace", + "Allow traffic from peers by IP block": "Allow traffic from peers by IP block", + "Allow traffic from pods in the same namespace": "Allow traffic from pods in the same namespace", + "Allow traffic from pods inside the cluster": "Allow traffic from pods inside the cluster", + "Allow traffic to peers by IP block": "Allow traffic to peers by IP block", + "Allow traffic to pods in the same namespace": "Allow traffic to pods in the same namespace", + "Allow traffic to pods inside the cluster": "Allow traffic to pods inside the cluster", + "Alternate Service target": "Alternate Service target", + "Alternate Service to route to.": "Alternate Service to route to.", + "Alternate Service weight": "Alternate Service weight", + "Annotations": "Annotations", + "Any namespace": "Any namespace", + "Any peer": "Any peer", + "Any pod": "Any pod", + "Any port": "Any port", + "Are you sure?": "Are you sure?", + "Assigns IP addresses from this subnet to Pods and VirtualMachines.": "Assigns IP addresses from this subnet to Pods and VirtualMachines.", + "Bridge mapping": "Bridge mapping", + "Bridge name": "Bridge name", + "CA certificate": "CA certificate", + "Can't preview pods": "Can't preview pods", + "Cancel": "Cancel", + "Certificate": "Certificate", + "Certificates": "Certificates", + "CIDR": "CIDR", + "Clear input value": "Clear input value", + "Click <1>Create {{kind}} to create your first {{kind}}": "Click <1>Create {{kind}} to create your first {{kind}}", + "Cluster administrator permissions are required to enable this feature.": "Cluster administrator permissions are required to enable this feature.", + "Cluster IP": "Cluster IP", + "Completed": "Completed", + "Conditions": "Conditions", + "Configure via:": "Configure via:", + "Confirm": "Confirm", + "Connection rate": "Connection rate", + "Copied": "Copied", + "Copied to clipboard": "Copied to clipboard", + "Copy to clipboard": "Copy to clipboard", + "CrashLoopBackOff": "CrashLoopBackOff", + "CrashLoopBackOff indicates that the application within the container is failing to start properly.": "CrashLoopBackOff indicates that the application within the container is failing to start properly.", + "Create": "Create", + "Create {{ kind }}": "Create {{ kind }}", + "Create {{kind}}": "Create {{kind}}", + "Create {{label}}": "Create {{label}}", + "Create by completing the form.": "Create by completing the form.", + "Create by manually entering YAML or JSON definitions, or by dragging and dropping a file into the editor.": "Create by manually entering YAML or JSON definitions, or by dragging and dropping a file into the editor.", + "Create Ingress": "Create Ingress", + "Create MultiNetworkPolicy": "Create MultiNetworkPolicy", + "Create NetworkArrachmentDefinition": "Create NetworkArrachmentDefinition", + "Create NetworkAttachmentDefinition": "Create NetworkAttachmentDefinition", + "Create NetworkPolicy": "Create NetworkPolicy", + "Create Route": "Create Route", + "Create Service": "Create Service", + "Created at": "Created at", + "Current selections": "Current selections", + "Custom route": "Custom route", + "Debug container {{name}}": "Debug container {{name}}", + "Delete": "Delete", + "Delete {{kind}}": "Delete {{kind}}", + "Delete Ingress": "Delete Ingress", + "Delete NetworkAttachmentDefinition": "Delete NetworkAttachmentDefinition", + "Delete Route": "Delete Route", + "Delete Service": "Delete Service", + "Deny all egress traffic": "Deny all egress traffic", + "Deny all ingress traffic": "Deny all ingress traffic", + "Description": "Description", + "Destination CA certificate": "Destination CA certificate", + "Destinations added to this rule will allow traffic from the pods defined above. Destinations in this list are combined using a logical OR operation.": "Destinations added to this rule will allow traffic from the pods defined above. Destinations in this list are combined using a logical OR operation.", + "Details": "Details", + "Do you need to set up custom DNS?": "Do you need to set up custom DNS?", + "Duplicate keys found in main pod selector": "Duplicate keys found in main pod selector", + "Duplicate keys found in peer namespace selector": "Duplicate keys found in peer namespace selector", + "Duplicate keys found in peer pod selector": "Duplicate keys found in peer pod selector", + "Edge": "Edge", + "Edit": "Edit", + "Edit {{kind}}": "Edit {{kind}}", + "Edit {{label}}": "Edit {{label}}", + "Edit annotations": "Edit annotations", + "Edit Ingress": "Edit Ingress", + "Edit labels": "Edit labels", + "Edit NetworkAttachmentDefinition": "Edit NetworkAttachmentDefinition", + "Edit Pod selector": "Edit Pod selector", + "Edit Route": "Edit Route", + "Edit Service": "Edit Service", + "Egress": "Egress", + "Egress network policy is not supported.": "Egress network policy is not supported.", + "Egress rule": "Egress rule", + "Egress rules": "Egress rules", + "Enable {{kind}}": "Enable {{kind}}", + "Error": "Error", + "Error details": "Error details", + "Example: 100": "Example: 100", + "Exceptions": "Exceptions", + "External IP": "External IP", + "External load balancer": "External load balancer", + "External service name": "External service name", + "Failed": "Failed", + "False": "False", + "Form view": "Form view", + "From": "From", + "From pods": "From pods", + "Hide": "Hide", + "Host": "Host", + "Hostname": "Hostname", + "Hosts": "Hosts", + "If no namespace selector is provided, pods from all namespaces will be eligible.": "If no namespace selector is provided, pods from all namespaces will be eligible.", + "If no pod selector is provided, the policy will apply to all pods in the namespace.": "If no pod selector is provided, the policy will apply to all pods in the namespace.", + "If no pod selector is provided, traffic from all pods in eligible namespaces will be allowed.": "If no pod selector is provided, traffic from all pods in eligible namespaces will be allowed.", + "If no pod selector is provided, traffic from all pods in this namespace will be allowed.": "If no pod selector is provided, traffic from all pods in this namespace will be allowed.", + "If no pod selector is provided, traffic to all pods in eligible namespaces will be allowed.": "If no pod selector is provided, traffic to all pods in eligible namespaces will be allowed.", + "If no pod selector is provided, traffic to all pods in this namespace will be allowed.": "If no pod selector is provided, traffic to all pods in this namespace will be allowed.", + "If this field is empty, traffic will be allowed from all external sources.": "If this field is empty, traffic will be allowed from all external sources.", + "If this field is empty, traffic will be allowed to all external sources.": "If this field is empty, traffic will be allowed to all external sources.", + "Ingress": "Ingress", + "Ingress details": "Ingress details", + "Ingress points of load balancer": "Ingress points of load balancer", + "Ingress rule": "Ingress rule", + "Ingress rules": "Ingress rules", + "Ingresses": "Ingresses", + "Input error: selectors must start and end by a letter or number, and can only contain -, _, / or . Offending value: {{offendingSelector}}": "Input error: selectors must start and end by a letter or number, and can only contain -, _, / or . Offending value: {{offendingSelector}}", + "Insecure traffic": "Insecure traffic", + "Invalid IP address or subnet format": "Invalid IP address or subnet format", + "Invalid subnet format": "Invalid subnet format", + "Invalid YAML cannot be persisted": "Invalid YAML cannot be persisted", + "IP address management": "IP address management", + "IP Addresses accepting traffic for service": "IP Addresses accepting traffic for service", + "IP block exceptions are not supported and would cause the entire IP block section to be ignored.": "IP block exceptions are not supported and would cause the entire IP block section to be ignored.", + "IP blocks": "IP blocks", + "Key": "Key", + "Labels": "Labels", + "Learn how to use NetworkAttachmentDefinitions": "Learn how to use NetworkAttachmentDefinitions", + "Learn more about {{ kind }}": "Learn more about {{ kind }}", + "List of pods": "List of pods", + "List of pods matching": "List of pods matching", + "Location": "Location", + "Location of the resource that backs the service": "Location of the resource that backs the service", + "MAC spoof check": "MAC spoof check", + "Message": "Message", + "Metrics": "Metrics", + "Missing installed operators": "Missing installed operators", + "More information:": "More information:", + "MTU": "MTU", + "multi-networkpolicies": "multi-networkpolicies", + "multi-networkpolicy": "multi-networkpolicy", + "MultiNetworkPolicies": "MultiNetworkPolicies", + "Name": "Name", + "Namespace": "Namespace", + "Namespace selector": "Namespace selector", + "Namespaces having all the supplied key/value pairs as labels will be selected.": "Namespaces having all the supplied key/value pairs as labels will be selected.", + "network": "network", + "Network Type": "Network Type", + "NetworkAttachmentDefinitions": "NetworkAttachmentDefinitions", + "NetworkPolicies": "NetworkPolicies", + "NetworkPolicies documentation": "NetworkPolicies documentation", + "networks": "networks", + "Networks are not project-bound. Using the same name creates a shared NAD.": "Networks are not project-bound. Using the same name creates a shared NAD.", + "No {{kind}} found": "No {{kind}} found", + "No {{label}} found": "No {{label}} found", + "No conditions found": "No conditions found", + "No datapoints found.": "No datapoints found.", + "No hosts": "No hosts", + "No labels": "No labels", + "No NetworkAttachmentDefinition found": "No NetworkAttachmentDefinition found", + "No owner": "No owner", + "No pods matching the provided labels in the current namespace": "No pods matching the provided labels in the current namespace", + "No results found for \"{{inputValue}}\"": "No results found for \"{{inputValue}}\"", + "No route status": "No route status", + "No selector": "No selector", + "Node port": "Node port", + "None": "None", + "Not available": "Not available", + "Not configured": "Not configured", + "Not found": "Not found", + "Not Receiving Traffic": "Not Receiving Traffic", + "NS selector": "NS selector", + "Owner": "Owner", + "Passthrough": "Passthrough", + "Path": "Path", + "Path that the router watches to route traffic to the service.": "Path that the router watches to route traffic to the service.", + "Path type": "Path type", + "Pending": "Pending", + "Percent": "Percent", + "Phase": "Phase", + "Physical network name. A bridge mapping must be configured on cluster nodes to map between physical network names and Open vSwitch bridges.": "Physical network name. A bridge mapping must be configured on cluster nodes to map between physical network names and Open vSwitch bridges.", + "Please <2>try again.": "Please <2>try again.", + "Pod crash loop back-off": "Pod crash loop back-off", + "Pod port or name": "Pod port or name", + "Pod selector": "Pod selector", + "Pod selector for": "Pod selector for", + "Pod unschedulable": "Pod unschedulable", + "Pods": "Pods", + "Pods accept all traffic by default. They can be isolated via NetworkPolicies which specify a whitelist of ingress rules. When a Pod is selected by a NetworkPolicy, it will reject all traffic not explicitly allowed via a NetworkPolicy.": "Pods accept all traffic by default. They can be isolated via NetworkPolicies which specify a whitelist of ingress rules. When a Pod is selected by a NetworkPolicy, it will reject all traffic not explicitly allowed via a NetworkPolicy.", + "Pods having all the supplied key/value pairs as labels will be selected.": "Pods having all the supplied key/value pairs as labels will be selected.", + "Policy for": "Policy for", + "Policy name": "Policy name", + "Policy type": "Policy type", + "Port": "Port", + "Ports": "Ports", + "Private key": "Private key", + "Protocol": "Protocol", + "Public hostname for the Route. If not specified, a hostname is generated.": "Public hostname for the Route. If not specified, a hostname is generated.", + "Re-encrypt": "Re-encrypt", + "Reason": "Reason", + "Receiving Traffic": "Receiving Traffic", + "Redirect": "Redirect", + "Refer to your cluster administrator to know which network provider is used.": "Refer to your cluster administrator to know which network provider is used.", + "Remove": "Remove", + "Remove all": "Remove all", + "Remove alternate Service": "Remove alternate Service", + "Remove exception": "Remove exception", + "Remove peer": "Remove peer", + "Remove port": "Remove port", + "Resource name": "Resource name", + "Restricted Access": "Restricted Access", + "Reveal": "Reveal", + "Route details": "Route details", + "Router canonical hostname": "Router canonical hostname", + "Router: {{routerName}}": "Router: {{routerName}}", + "Routes": "Routes", + "Routes can be secured using several TLS termination types for serving certificates.": "Routes can be secured using several TLS termination types for serving certificates.", + "Routing is a way to make your application publicly visible": "Routing is a way to make your application publicly visible", + "RT": "RT", + "Rules": "Rules", + "Running": "Running", + "S": "S", + "Save": "Save", + "Secure Route": "Secure Route", + "Security": "Security", + "Select a Service": "Select a Service", + "Select default ingress and egress deny rules": "Select default ingress and egress deny rules", + "Select insecure traffic type": "Select insecure traffic type", + "Select one or more NetworkAttachmentDefinitions": "Select one or more NetworkAttachmentDefinitions", + "Select resource name": "Select resource name", + "Select target port": "Select target port", + "Select termination type": "Select termination type", + "Service": "Service", + "Service address": "Service address", + "Service details": "Service details", + "Service port": "Service port", + "Service port mapping": "Service port mapping", + "Service routing": "Service routing", + "Service to route to.": "Service to route to.", + "Service weight": "Service weight", + "Services": "Services", + "Session affinity": "Session affinity", + "Show a preview of the <2>affected pods that this egress rule will apply to.": "Show a preview of the <2>affected pods that this egress rule will apply to.", + "Show a preview of the <2>affected pods that this ingress rule will apply to.": "Show a preview of the <2>affected pods that this ingress rule will apply to.", + "Show a preview of the <2>affected pods that this policy will apply to": "Show a preview of the <2>affected pods that this policy will apply to", + "Showing {{shown}} from {{total}} results": "Showing {{shown}} from {{total}} results", + "Sources added to this rule will allow traffic to the pods defined above. Sources in this list are combined using a logical OR operation.": "Sources added to this rule will allow traffic to the pods defined above. Sources in this list are combined using a logical OR operation.", + "Status": "Status", + "Subnet": "Subnet", + "Switch and delete": "Switch and delete", + "Switching to form view will delete any invalid YAML.": "Switching to form view will delete any invalid YAML.", + "Target pods": "Target pods", + "Target port": "Target port", + "Target port for traffic": "Target port for traffic", + "Tech preview": "Tech preview", + "Terminating": "Terminating", + "Termination type": "Termination type", + "These rules are handled by a routing layer (Ingress Controller) which is updated as the rules are modified. The Ingress controller implementation defines how headers and other metadata are forwarded or manipulated": "These rules are handled by a routing layer (Ingress Controller) which is updated as the rules are modified. The Ingress controller implementation defines how headers and other metadata are forwarded or manipulated", + "This action will remove all rules within the Egress section and cannot be undone.": "This action will remove all rules within the Egress section and cannot be undone.", + "This action will remove all rules within the Ingress section and cannot be undone.": "This action will remove all rules within the Ingress section and cannot be undone.", + "This NetworkPolicy cannot be displayed in form. Please switch to the YAML editor.": "This NetworkPolicy cannot be displayed in form. Please switch to the YAML editor.", + "This route splits traffic across multiple services.": "This route splits traffic across multiple services.", + "TLS certificate": "TLS certificate", + "TLS certificates for edge and re-encrypt termination. If not specified, the router's default certificate is used.": "TLS certificates for edge and re-encrypt termination. If not specified, the router's default certificate is used.", + "TLS is not enabled": "TLS is not enabled", + "TLS Settings": "TLS Settings", + "TLS termination": "TLS termination", + "To": "To", + "To ports": "To ports", + "To troubleshoot, view logs and events, then debug in terminal.": "To troubleshoot, view logs and events, then debug in terminal.", + "To use a custom route, you must update your DNS provider by creating a canonical name (CNAME) record. Your CNAME record should point to your custom domain <2>{{host}}, to the OpenShift canonical router hostname, <5>{{routerCanonicalHostname}}, as the alias.": "To use a custom route, you must update your DNS provider by creating a canonical name (CNAME) record. Your CNAME record should point to your custom domain <2>{{host}}, to the OpenShift canonical router hostname, <5>{{routerCanonicalHostname}}, as the alias.", + "total limit": "total limit", + "total requested": "total requested", + "Traffic": "Traffic", + "Traffic in": "Traffic in", + "Traffic out": "Traffic out", + "True": "True", + "Type": "Type", + "Unknown": "Unknown", + "unknown host": "unknown host", + "Updated": "Updated", + "Value": "Value", + "Value hidden": "Value hidden", + "View all {{total}} results": "View all {{total}} results", + "View events": "View events", + "View logs": "View logs", + "VLAN": "VLAN", + "VLAN tag number": "VLAN tag number", + "Weight": "Weight", + "When using the OpenShift SDN cluster network provider:": "When using the OpenShift SDN cluster network provider:", + "Wildcard policy": "Wildcard policy", + "with exceptions": "with exceptions", + "YAML": "YAML", + "YAML view": "YAML view", + "You don't have access to this section due to cluster policy.": "You don't have access to this section due to cluster policy.", + "You don't have permission to perform this action": "You don't have permission to perform this action" +} diff --git a/locales/zh/plugin__networking-console-plugin.json b/locales/zh/plugin__networking-console-plugin.json new file mode 100644 index 00000000..8b472e06 --- /dev/null +++ b/locales/zh/plugin__networking-console-plugin.json @@ -0,0 +1,339 @@ +{ + " See more details in: <3>": " See more details in: <3>", + " See more details in: <3>.": " See more details in: <3>.", + "(all nodes): ": "(all nodes): ", + "{{count}} annotation": "{{count}} annotation", + "{{kind}} details": "{{kind}} details", + "{{kind}} disabled": "{{kind}} disabled", + "{{numCores}} cores": "{{numCores}} cores", + "{{path}} found in resource, but is not supported in form.": "{{path}} found in resource, but is not supported in form.", + "{{path}} is missing.": "{{path}} is missing.", + "{{path}} should be an Array.": "{{path}} should be an Array.", + "{{path}} should not be empty.": "{{path}} should not be empty.", + "{{value}} at {{date}}": "{{value}} at {{date}}", + "<0>OpenShift Virtualization Operator or <3>SR-IOV Network Operator needs to be installed on the cluster, in order to pick the Network Type.": "<0>OpenShift Virtualization Operator or <3>SR-IOV Network Operator needs to be installed on the cluster, in order to pick the Network Type.", + "404: Page Not Found": "404: Page Not Found", + "A number between 0 and 255 that depicts relative weight compared with other targets.": "A number between 0 and 255 that depicts relative weight compared with other targets.", + "A unique name for the Route within the project": "A unique name for the Route within the project", + "Accessible outside the cluster": "Accessible outside the cluster", + "Accessible within the cluster only": "Accessible within the cluster only", + "Actions": "Actions", + "Add allowed destination": "Add allowed destination", + "Add allowed source": "Add allowed source", + "Add alternate Service": "Add alternate Service", + "Add egress rule": "Add egress rule", + "Add egress rules to be applied to your selected pods. Traffic is allowed to pods if it matches at least one rule.": "Add egress rules to be applied to your selected pods. Traffic is allowed to pods if it matches at least one rule.", + "Add exception": "Add exception", + "Add ingress rule": "Add ingress rule", + "Add ingress rules to be applied to your selected pods. Traffic is allowed from pods if it matches at least one rule.": "Add ingress rules to be applied to your selected pods. Traffic is allowed from pods if it matches at least one rule.", + "Add label": "Add label", + "Add namespace selector": "Add namespace selector", + "Add pod selector": "Add pod selector", + "Add port": "Add port", + "Add ports to restrict traffic through them. If no ports are provided, your policy will make all ports accessible to traffic.": "Add ports to restrict traffic through them. If no ports are provided, your policy will make all ports accessible to traffic.", + "All incoming traffic is denied to Pods in {{namespace}}": "All incoming traffic is denied to Pods in {{namespace}}", + "All outgoing traffic is allowed by default. Egress rules can be used to restrict outgoing traffic if the cluster network provider allows it. When using the OpenShift SDN cluster network provider, egress network policy is not supported.": "All outgoing traffic is allowed by default. Egress rules can be used to restrict outgoing traffic if the cluster network provider allows it. When using the OpenShift SDN cluster network provider, egress network policy is not supported.", + "All outgoing traffic is denied from Pods in {{namespace}}": "All outgoing traffic is denied from Pods in {{namespace}}", + "All pods within {{namespace}}": "All pods within {{namespace}}", + "Allow": "Allow", + "Allow peers by IP block": "Allow peers by IP block", + "Allow pods from inside the cluster": "Allow pods from inside the cluster", + "Allow pods from the same namespace": "Allow pods from the same namespace", + "Allow traffic from peers by IP block": "Allow traffic from peers by IP block", + "Allow traffic from pods in the same namespace": "Allow traffic from pods in the same namespace", + "Allow traffic from pods inside the cluster": "Allow traffic from pods inside the cluster", + "Allow traffic to peers by IP block": "Allow traffic to peers by IP block", + "Allow traffic to pods in the same namespace": "Allow traffic to pods in the same namespace", + "Allow traffic to pods inside the cluster": "Allow traffic to pods inside the cluster", + "Alternate Service target": "Alternate Service target", + "Alternate Service to route to.": "Alternate Service to route to.", + "Alternate Service weight": "Alternate Service weight", + "Annotations": "Annotations", + "Any namespace": "Any namespace", + "Any peer": "Any peer", + "Any pod": "Any pod", + "Any port": "Any port", + "Are you sure?": "Are you sure?", + "Assigns IP addresses from this subnet to Pods and VirtualMachines.": "Assigns IP addresses from this subnet to Pods and VirtualMachines.", + "Bridge mapping": "Bridge mapping", + "Bridge name": "Bridge name", + "CA certificate": "CA certificate", + "Can't preview pods": "Can't preview pods", + "Cancel": "Cancel", + "Certificate": "Certificate", + "Certificates": "Certificates", + "CIDR": "CIDR", + "Clear input value": "Clear input value", + "Click <1>Create {{kind}} to create your first {{kind}}": "Click <1>Create {{kind}} to create your first {{kind}}", + "Cluster administrator permissions are required to enable this feature.": "Cluster administrator permissions are required to enable this feature.", + "Cluster IP": "Cluster IP", + "Completed": "Completed", + "Conditions": "Conditions", + "Configure via:": "Configure via:", + "Confirm": "Confirm", + "Connection rate": "Connection rate", + "Copied": "Copied", + "Copied to clipboard": "Copied to clipboard", + "Copy to clipboard": "Copy to clipboard", + "CrashLoopBackOff": "CrashLoopBackOff", + "CrashLoopBackOff indicates that the application within the container is failing to start properly.": "CrashLoopBackOff indicates that the application within the container is failing to start properly.", + "Create": "Create", + "Create {{ kind }}": "Create {{ kind }}", + "Create {{kind}}": "Create {{kind}}", + "Create {{label}}": "Create {{label}}", + "Create by completing the form.": "Create by completing the form.", + "Create by manually entering YAML or JSON definitions, or by dragging and dropping a file into the editor.": "Create by manually entering YAML or JSON definitions, or by dragging and dropping a file into the editor.", + "Create Ingress": "Create Ingress", + "Create MultiNetworkPolicy": "Create MultiNetworkPolicy", + "Create NetworkArrachmentDefinition": "Create NetworkArrachmentDefinition", + "Create NetworkAttachmentDefinition": "Create NetworkAttachmentDefinition", + "Create NetworkPolicy": "Create NetworkPolicy", + "Create Route": "Create Route", + "Create Service": "Create Service", + "Created at": "Created at", + "Current selections": "Current selections", + "Custom route": "Custom route", + "Debug container {{name}}": "Debug container {{name}}", + "Delete": "Delete", + "Delete {{kind}}": "Delete {{kind}}", + "Delete Ingress": "Delete Ingress", + "Delete NetworkAttachmentDefinition": "Delete NetworkAttachmentDefinition", + "Delete Route": "Delete Route", + "Delete Service": "Delete Service", + "Deny all egress traffic": "Deny all egress traffic", + "Deny all ingress traffic": "Deny all ingress traffic", + "Description": "Description", + "Destination CA certificate": "Destination CA certificate", + "Destinations added to this rule will allow traffic from the pods defined above. Destinations in this list are combined using a logical OR operation.": "Destinations added to this rule will allow traffic from the pods defined above. Destinations in this list are combined using a logical OR operation.", + "Details": "Details", + "Do you need to set up custom DNS?": "Do you need to set up custom DNS?", + "Duplicate keys found in main pod selector": "Duplicate keys found in main pod selector", + "Duplicate keys found in peer namespace selector": "Duplicate keys found in peer namespace selector", + "Duplicate keys found in peer pod selector": "Duplicate keys found in peer pod selector", + "Edge": "Edge", + "Edit": "Edit", + "Edit {{kind}}": "Edit {{kind}}", + "Edit {{label}}": "Edit {{label}}", + "Edit annotations": "Edit annotations", + "Edit Ingress": "Edit Ingress", + "Edit labels": "Edit labels", + "Edit NetworkAttachmentDefinition": "Edit NetworkAttachmentDefinition", + "Edit Pod selector": "Edit Pod selector", + "Edit Route": "Edit Route", + "Edit Service": "Edit Service", + "Egress": "Egress", + "Egress network policy is not supported.": "Egress network policy is not supported.", + "Egress rule": "Egress rule", + "Egress rules": "Egress rules", + "Enable {{kind}}": "Enable {{kind}}", + "Error": "Error", + "Error details": "Error details", + "Example: 100": "Example: 100", + "Exceptions": "Exceptions", + "External IP": "External IP", + "External load balancer": "External load balancer", + "External service name": "External service name", + "Failed": "Failed", + "False": "False", + "Form view": "Form view", + "From": "From", + "From pods": "From pods", + "Hide": "Hide", + "Host": "Host", + "Hostname": "Hostname", + "Hosts": "Hosts", + "If no namespace selector is provided, pods from all namespaces will be eligible.": "If no namespace selector is provided, pods from all namespaces will be eligible.", + "If no pod selector is provided, the policy will apply to all pods in the namespace.": "If no pod selector is provided, the policy will apply to all pods in the namespace.", + "If no pod selector is provided, traffic from all pods in eligible namespaces will be allowed.": "If no pod selector is provided, traffic from all pods in eligible namespaces will be allowed.", + "If no pod selector is provided, traffic from all pods in this namespace will be allowed.": "If no pod selector is provided, traffic from all pods in this namespace will be allowed.", + "If no pod selector is provided, traffic to all pods in eligible namespaces will be allowed.": "If no pod selector is provided, traffic to all pods in eligible namespaces will be allowed.", + "If no pod selector is provided, traffic to all pods in this namespace will be allowed.": "If no pod selector is provided, traffic to all pods in this namespace will be allowed.", + "If this field is empty, traffic will be allowed from all external sources.": "If this field is empty, traffic will be allowed from all external sources.", + "If this field is empty, traffic will be allowed to all external sources.": "If this field is empty, traffic will be allowed to all external sources.", + "Ingress": "Ingress", + "Ingress details": "Ingress details", + "Ingress points of load balancer": "Ingress points of load balancer", + "Ingress rule": "Ingress rule", + "Ingress rules": "Ingress rules", + "Ingresses": "Ingresses", + "Input error: selectors must start and end by a letter or number, and can only contain -, _, / or . Offending value: {{offendingSelector}}": "Input error: selectors must start and end by a letter or number, and can only contain -, _, / or . Offending value: {{offendingSelector}}", + "Insecure traffic": "Insecure traffic", + "Invalid IP address or subnet format": "Invalid IP address or subnet format", + "Invalid subnet format": "Invalid subnet format", + "Invalid YAML cannot be persisted": "Invalid YAML cannot be persisted", + "IP address management": "IP address management", + "IP Addresses accepting traffic for service": "IP Addresses accepting traffic for service", + "IP block exceptions are not supported and would cause the entire IP block section to be ignored.": "IP block exceptions are not supported and would cause the entire IP block section to be ignored.", + "IP blocks": "IP blocks", + "Key": "Key", + "Labels": "Labels", + "Learn how to use NetworkAttachmentDefinitions": "Learn how to use NetworkAttachmentDefinitions", + "Learn more about {{ kind }}": "Learn more about {{ kind }}", + "List of pods": "List of pods", + "List of pods matching": "List of pods matching", + "Location": "Location", + "Location of the resource that backs the service": "Location of the resource that backs the service", + "MAC spoof check": "MAC spoof check", + "Message": "Message", + "Metrics": "Metrics", + "Missing installed operators": "Missing installed operators", + "More information:": "More information:", + "MTU": "MTU", + "multi-networkpolicies": "multi-networkpolicies", + "multi-networkpolicy": "multi-networkpolicy", + "MultiNetworkPolicies": "MultiNetworkPolicies", + "Name": "Name", + "Namespace": "Namespace", + "Namespace selector": "Namespace selector", + "Namespaces having all the supplied key/value pairs as labels will be selected.": "Namespaces having all the supplied key/value pairs as labels will be selected.", + "network": "network", + "Network Type": "Network Type", + "NetworkAttachmentDefinitions": "NetworkAttachmentDefinitions", + "NetworkPolicies": "NetworkPolicies", + "NetworkPolicies documentation": "NetworkPolicies documentation", + "networks": "networks", + "Networks are not project-bound. Using the same name creates a shared NAD.": "Networks are not project-bound. Using the same name creates a shared NAD.", + "No {{kind}} found": "No {{kind}} found", + "No {{label}} found": "No {{label}} found", + "No conditions found": "No conditions found", + "No datapoints found.": "No datapoints found.", + "No hosts": "No hosts", + "No labels": "No labels", + "No NetworkAttachmentDefinition found": "No NetworkAttachmentDefinition found", + "No owner": "No owner", + "No pods matching the provided labels in the current namespace": "No pods matching the provided labels in the current namespace", + "No results found for \"{{inputValue}}\"": "No results found for \"{{inputValue}}\"", + "No route status": "No route status", + "No selector": "No selector", + "Node port": "Node port", + "None": "None", + "Not available": "Not available", + "Not configured": "Not configured", + "Not found": "Not found", + "Not Receiving Traffic": "Not Receiving Traffic", + "NS selector": "NS selector", + "Owner": "Owner", + "Passthrough": "Passthrough", + "Path": "Path", + "Path that the router watches to route traffic to the service.": "Path that the router watches to route traffic to the service.", + "Path type": "Path type", + "Pending": "Pending", + "Percent": "Percent", + "Phase": "Phase", + "Physical network name. A bridge mapping must be configured on cluster nodes to map between physical network names and Open vSwitch bridges.": "Physical network name. A bridge mapping must be configured on cluster nodes to map between physical network names and Open vSwitch bridges.", + "Please <2>try again.": "Please <2>try again.", + "Pod crash loop back-off": "Pod crash loop back-off", + "Pod port or name": "Pod port or name", + "Pod selector": "Pod selector", + "Pod selector for": "Pod selector for", + "Pod unschedulable": "Pod unschedulable", + "Pods": "Pods", + "Pods accept all traffic by default. They can be isolated via NetworkPolicies which specify a whitelist of ingress rules. When a Pod is selected by a NetworkPolicy, it will reject all traffic not explicitly allowed via a NetworkPolicy.": "Pods accept all traffic by default. They can be isolated via NetworkPolicies which specify a whitelist of ingress rules. When a Pod is selected by a NetworkPolicy, it will reject all traffic not explicitly allowed via a NetworkPolicy.", + "Pods having all the supplied key/value pairs as labels will be selected.": "Pods having all the supplied key/value pairs as labels will be selected.", + "Policy for": "Policy for", + "Policy name": "Policy name", + "Policy type": "Policy type", + "Port": "Port", + "Ports": "Ports", + "Private key": "Private key", + "Protocol": "Protocol", + "Public hostname for the Route. If not specified, a hostname is generated.": "Public hostname for the Route. If not specified, a hostname is generated.", + "Re-encrypt": "Re-encrypt", + "Reason": "Reason", + "Receiving Traffic": "Receiving Traffic", + "Redirect": "Redirect", + "Refer to your cluster administrator to know which network provider is used.": "Refer to your cluster administrator to know which network provider is used.", + "Remove": "Remove", + "Remove all": "Remove all", + "Remove alternate Service": "Remove alternate Service", + "Remove exception": "Remove exception", + "Remove peer": "Remove peer", + "Remove port": "Remove port", + "Resource name": "Resource name", + "Restricted Access": "Restricted Access", + "Reveal": "Reveal", + "Route details": "Route details", + "Router canonical hostname": "Router canonical hostname", + "Router: {{routerName}}": "Router: {{routerName}}", + "Routes": "Routes", + "Routes can be secured using several TLS termination types for serving certificates.": "Routes can be secured using several TLS termination types for serving certificates.", + "Routing is a way to make your application publicly visible": "Routing is a way to make your application publicly visible", + "RT": "RT", + "Rules": "Rules", + "Running": "Running", + "S": "S", + "Save": "Save", + "Secure Route": "Secure Route", + "Security": "Security", + "Select a Service": "Select a Service", + "Select default ingress and egress deny rules": "Select default ingress and egress deny rules", + "Select insecure traffic type": "Select insecure traffic type", + "Select one or more NetworkAttachmentDefinitions": "Select one or more NetworkAttachmentDefinitions", + "Select resource name": "Select resource name", + "Select target port": "Select target port", + "Select termination type": "Select termination type", + "Service": "Service", + "Service address": "Service address", + "Service details": "Service details", + "Service port": "Service port", + "Service port mapping": "Service port mapping", + "Service routing": "Service routing", + "Service to route to.": "Service to route to.", + "Service weight": "Service weight", + "Services": "Services", + "Session affinity": "Session affinity", + "Show a preview of the <2>affected pods that this egress rule will apply to.": "Show a preview of the <2>affected pods that this egress rule will apply to.", + "Show a preview of the <2>affected pods that this ingress rule will apply to.": "Show a preview of the <2>affected pods that this ingress rule will apply to.", + "Show a preview of the <2>affected pods that this policy will apply to": "Show a preview of the <2>affected pods that this policy will apply to", + "Showing {{shown}} from {{total}} results": "Showing {{shown}} from {{total}} results", + "Sources added to this rule will allow traffic to the pods defined above. Sources in this list are combined using a logical OR operation.": "Sources added to this rule will allow traffic to the pods defined above. Sources in this list are combined using a logical OR operation.", + "Status": "Status", + "Subnet": "Subnet", + "Switch and delete": "Switch and delete", + "Switching to form view will delete any invalid YAML.": "Switching to form view will delete any invalid YAML.", + "Target pods": "Target pods", + "Target port": "Target port", + "Target port for traffic": "Target port for traffic", + "Tech preview": "Tech preview", + "Terminating": "Terminating", + "Termination type": "Termination type", + "These rules are handled by a routing layer (Ingress Controller) which is updated as the rules are modified. The Ingress controller implementation defines how headers and other metadata are forwarded or manipulated": "These rules are handled by a routing layer (Ingress Controller) which is updated as the rules are modified. The Ingress controller implementation defines how headers and other metadata are forwarded or manipulated", + "This action will remove all rules within the Egress section and cannot be undone.": "This action will remove all rules within the Egress section and cannot be undone.", + "This action will remove all rules within the Ingress section and cannot be undone.": "This action will remove all rules within the Ingress section and cannot be undone.", + "This NetworkPolicy cannot be displayed in form. Please switch to the YAML editor.": "This NetworkPolicy cannot be displayed in form. Please switch to the YAML editor.", + "This route splits traffic across multiple services.": "This route splits traffic across multiple services.", + "TLS certificate": "TLS certificate", + "TLS certificates for edge and re-encrypt termination. If not specified, the router's default certificate is used.": "TLS certificates for edge and re-encrypt termination. If not specified, the router's default certificate is used.", + "TLS is not enabled": "TLS is not enabled", + "TLS Settings": "TLS Settings", + "TLS termination": "TLS termination", + "To": "To", + "To ports": "To ports", + "To troubleshoot, view logs and events, then debug in terminal.": "To troubleshoot, view logs and events, then debug in terminal.", + "To use a custom route, you must update your DNS provider by creating a canonical name (CNAME) record. Your CNAME record should point to your custom domain <2>{{host}}, to the OpenShift canonical router hostname, <5>{{routerCanonicalHostname}}, as the alias.": "To use a custom route, you must update your DNS provider by creating a canonical name (CNAME) record. Your CNAME record should point to your custom domain <2>{{host}}, to the OpenShift canonical router hostname, <5>{{routerCanonicalHostname}}, as the alias.", + "total limit": "total limit", + "total requested": "total requested", + "Traffic": "Traffic", + "Traffic in": "Traffic in", + "Traffic out": "Traffic out", + "True": "True", + "Type": "Type", + "Unknown": "Unknown", + "unknown host": "unknown host", + "Updated": "Updated", + "Value": "Value", + "Value hidden": "Value hidden", + "View all {{total}} results": "View all {{total}} results", + "View events": "View events", + "View logs": "View logs", + "VLAN": "VLAN", + "VLAN tag number": "VLAN tag number", + "Weight": "Weight", + "When using the OpenShift SDN cluster network provider:": "When using the OpenShift SDN cluster network provider:", + "Wildcard policy": "Wildcard policy", + "with exceptions": "with exceptions", + "YAML": "YAML", + "YAML view": "YAML view", + "You don't have access to this section due to cluster policy.": "You don't have access to this section due to cluster policy.", + "You don't have permission to perform this action": "You don't have permission to perform this action" +}