From 98bf0da8ff7a7433b6ebb5bf9f71e116b35fe9e1 Mon Sep 17 00:00:00 2001 From: Charles Zhao Date: Wed, 13 Sep 2023 16:12:43 +0800 Subject: [PATCH] fix(cli): translate command (#4459) * fix(cli): translate command * refactor(cli): add lint util method --- packages/cli/src/commands/connector/add.ts | 4 +- packages/cli/src/commands/connector/link.ts | 4 +- packages/cli/src/commands/connector/utils.ts | 75 ++------------ packages/cli/src/commands/install/index.ts | 14 +-- packages/cli/src/commands/install/utils.ts | 12 +-- packages/cli/src/commands/translate/create.ts | 3 +- .../cli/src/commands/translate/prompts.ts | 20 ++-- .../src/commands/translate/sync-keys/index.ts | 21 +--- .../src/commands/translate/sync-keys/utils.ts | 6 +- packages/cli/src/commands/translate/sync.ts | 10 +- packages/cli/src/commands/translate/utils.ts | 4 +- packages/cli/src/constants.ts | 5 + packages/cli/src/utils.ts | 97 ++++++++++++++++++- .../connector-azuread/src/constant.ts | 4 +- .../connector-facebook/src/constant.ts | 4 +- .../connector-google/src/constant.ts | 4 +- .../connector-kakao/src/constant.ts | 4 +- .../phrases-ui/src/locales/de/description.ts | 15 +-- .../src/locales/de/error/password-rejected.ts | 30 ++---- packages/phrases-ui/src/locales/de/list.ts | 7 +- .../phrases-ui/src/locales/es/description.ts | 15 +-- .../src/locales/es/error/password-rejected.ts | 30 ++---- packages/phrases-ui/src/locales/es/list.ts | 7 +- .../phrases-ui/src/locales/fr/description.ts | 15 +-- .../src/locales/fr/error/password-rejected.ts | 30 ++---- packages/phrases-ui/src/locales/fr/list.ts | 7 +- .../phrases-ui/src/locales/it/description.ts | 13 +-- .../src/locales/it/error/password-rejected.ts | 30 ++---- packages/phrases-ui/src/locales/it/list.ts | 7 +- .../phrases-ui/src/locales/ja/description.ts | 15 +-- .../src/locales/ja/error/password-rejected.ts | 30 ++---- packages/phrases-ui/src/locales/ja/list.ts | 11 +-- .../phrases-ui/src/locales/ko/description.ts | 15 +-- .../src/locales/ko/error/password-rejected.ts | 30 ++---- packages/phrases-ui/src/locales/ko/list.ts | 7 +- .../src/locales/pl-pl/description.ts | 15 +-- .../locales/pl-pl/error/password-rejected.ts | 30 ++---- packages/phrases-ui/src/locales/pl-pl/list.ts | 7 +- .../src/locales/pt-br/description.ts | 15 +-- .../locales/pt-br/error/password-rejected.ts | 30 ++---- packages/phrases-ui/src/locales/pt-br/list.ts | 7 +- .../src/locales/pt-pt/description.ts | 15 +-- .../locales/pt-pt/error/password-rejected.ts | 30 ++---- packages/phrases-ui/src/locales/pt-pt/list.ts | 7 +- .../phrases-ui/src/locales/ru/description.ts | 15 +-- .../src/locales/ru/error/password-rejected.ts | 30 ++---- packages/phrases-ui/src/locales/ru/list.ts | 7 +- .../src/locales/tr-tr/description.ts | 15 +-- .../locales/tr-tr/error/password-rejected.ts | 26 ++--- packages/phrases-ui/src/locales/tr-tr/list.ts | 7 +- .../src/locales/zh-cn/description.ts | 16 +-- .../locales/zh-cn/error/password-rejected.ts | 30 ++---- packages/phrases-ui/src/locales/zh-cn/list.ts | 9 +- .../src/locales/zh-hk/description.ts | 15 +-- .../locales/zh-hk/error/password-rejected.ts | 30 ++---- packages/phrases-ui/src/locales/zh-hk/list.ts | 9 +- .../src/locales/zh-tw/description.ts | 16 +-- .../locales/zh-tw/error/password-rejected.ts | 30 ++---- packages/phrases-ui/src/locales/zh-tw/list.ts | 9 +- .../phrases/src/locales/de/errors/password.ts | 4 +- .../locales/de/errors/sign-in-experiences.ts | 6 +- .../de/translation/admin-console/index.ts | 2 +- .../admin-console/sign-in-exp/index.ts | 3 +- .../sign-in-exp/password-policy.ts | 59 ++++------- .../sign-in-exp/sign-up-and-sign-in.ts | 9 +- .../de/translation/admin-console/upsell.ts | 87 ----------------- .../translation/admin-console/upsell/index.ts | 42 ++++++++ .../admin-console/upsell/paywall.ts | 50 ++++++++++ .../en/translation/admin-console/index.ts | 2 +- .../sign-in-exp/password-policy.ts | 2 +- .../en/translation/admin-console/upsell.ts | 87 ----------------- .../translation/admin-console/upsell/index.ts | 42 ++++++++ .../admin-console/upsell/paywall.ts | 50 ++++++++++ .../phrases/src/locales/es/errors/password.ts | 3 +- .../locales/es/errors/sign-in-experiences.ts | 6 +- .../es/translation/admin-console/index.ts | 2 +- .../admin-console/sign-in-exp/index.ts | 3 +- .../sign-in-exp/password-policy.ts | 59 ++++------- .../sign-in-exp/sign-up-and-sign-in.ts | 11 +-- .../es/translation/admin-console/upsell.ts | 87 ----------------- .../translation/admin-console/upsell/index.ts | 42 ++++++++ .../admin-console/upsell/paywall.ts | 50 ++++++++++ .../phrases/src/locales/fr/errors/password.ts | 3 +- .../locales/fr/errors/sign-in-experiences.ts | 6 +- .../fr/translation/admin-console/index.ts | 2 +- .../admin-console/sign-in-exp/index.ts | 7 +- .../sign-in-exp/password-policy.ts | 61 +++++------- .../sign-in-exp/sign-up-and-sign-in.ts | 39 ++++---- .../fr/translation/admin-console/upsell.ts | 87 ----------------- .../translation/admin-console/upsell/index.ts | 42 ++++++++ .../admin-console/upsell/paywall.ts | 50 ++++++++++ .../phrases/src/locales/it/errors/password.ts | 4 +- .../locales/it/errors/sign-in-experiences.ts | 6 +- .../it/translation/admin-console/index.ts | 2 +- .../admin-console/sign-in-exp/index.ts | 3 +- .../sign-in-exp/password-policy.ts | 59 ++++------- .../sign-in-exp/sign-up-and-sign-in.ts | 9 +- .../it/translation/admin-console/upsell.ts | 87 ----------------- .../translation/admin-console/upsell/index.ts | 42 ++++++++ .../admin-console/upsell/paywall.ts | 50 ++++++++++ .../phrases/src/locales/ja/errors/password.ts | 3 +- .../locales/ja/errors/sign-in-experiences.ts | 6 +- .../ja/translation/admin-console/index.ts | 2 +- .../admin-console/sign-in-exp/index.ts | 3 +- .../sign-in-exp/password-policy.ts | 58 ++++------- .../sign-in-exp/sign-up-and-sign-in.ts | 9 +- .../ja/translation/admin-console/upsell.ts | 87 ----------------- .../translation/admin-console/upsell/index.ts | 42 ++++++++ .../admin-console/upsell/paywall.ts | 50 ++++++++++ .../phrases/src/locales/ko/errors/password.ts | 3 +- .../locales/ko/errors/sign-in-experiences.ts | 6 +- .../ko/translation/admin-console/index.ts | 2 +- .../admin-console/sign-in-exp/index.ts | 5 +- .../sign-in-exp/password-policy.ts | 57 ++++------- .../sign-in-exp/sign-up-and-sign-in.ts | 9 +- .../ko/translation/admin-console/upsell.ts | 87 ----------------- .../translation/admin-console/upsell/index.ts | 42 ++++++++ .../admin-console/upsell/paywall.ts | 50 ++++++++++ .../src/locales/pl-pl/errors/password.ts | 3 +- .../pl-pl/errors/sign-in-experiences.ts | 6 +- .../pl-pl/translation/admin-console/index.ts | 2 +- .../admin-console/sign-in-exp/index.ts | 3 +- .../sign-in-exp/password-policy.ts | 60 ++++-------- .../sign-in-exp/sign-up-and-sign-in.ts | 9 +- .../pl-pl/translation/admin-console/upsell.ts | 87 ----------------- .../translation/admin-console/upsell/index.ts | 42 ++++++++ .../admin-console/upsell/paywall.ts | 50 ++++++++++ .../src/locales/pt-br/errors/password.ts | 3 +- .../pt-br/errors/sign-in-experiences.ts | 6 +- .../pt-br/translation/admin-console/index.ts | 2 +- .../admin-console/sign-in-exp/index.ts | 3 +- .../sign-in-exp/password-policy.ts | 60 +++++------- .../sign-in-exp/sign-up-and-sign-in.ts | 9 +- .../pt-br/translation/admin-console/upsell.ts | 87 ----------------- .../translation/admin-console/upsell/index.ts | 42 ++++++++ .../admin-console/upsell/paywall.ts | 50 ++++++++++ .../src/locales/pt-pt/errors/password.ts | 5 +- .../pt-pt/errors/sign-in-experiences.ts | 6 +- .../pt-pt/translation/admin-console/index.ts | 2 +- .../admin-console/sign-in-exp/index.ts | 3 +- .../sign-in-exp/password-policy.ts | 60 +++++------- .../sign-in-exp/sign-up-and-sign-in.ts | 9 +- .../pt-pt/translation/admin-console/upsell.ts | 87 ----------------- .../translation/admin-console/upsell/index.ts | 42 ++++++++ .../admin-console/upsell/paywall.ts | 50 ++++++++++ .../phrases/src/locales/ru/errors/password.ts | 3 +- .../locales/ru/errors/sign-in-experiences.ts | 6 +- .../ru/translation/admin-console/index.ts | 2 +- .../admin-console/sign-in-exp/index.ts | 3 +- .../sign-in-exp/password-policy.ts | 59 ++++------- .../sign-in-exp/sign-up-and-sign-in.ts | 9 +- .../ru/translation/admin-console/upsell.ts | 87 ----------------- .../translation/admin-console/upsell/index.ts | 42 ++++++++ .../admin-console/upsell/paywall.ts | 50 ++++++++++ .../src/locales/tr-tr/errors/password.ts | 3 +- .../tr-tr/errors/sign-in-experiences.ts | 10 +- .../tr-tr/translation/admin-console/index.ts | 2 +- .../admin-console/sign-in-exp/index.ts | 3 +- .../sign-in-exp/password-policy.ts | 58 ++++------- .../sign-in-exp/sign-up-and-sign-in.ts | 9 +- .../tr-tr/translation/admin-console/upsell.ts | 87 ----------------- .../translation/admin-console/upsell/index.ts | 42 ++++++++ .../admin-console/upsell/paywall.ts | 50 ++++++++++ .../src/locales/zh-cn/errors/password.ts | 3 +- .../zh-cn/errors/sign-in-experiences.ts | 6 +- .../zh-cn/translation/admin-console/index.ts | 2 +- .../admin-console/sign-in-exp/index.ts | 3 +- .../sign-in-exp/password-policy.ts | 59 ++++------- .../sign-in-exp/sign-up-and-sign-in.ts | 9 +- .../zh-cn/translation/admin-console/upsell.ts | 87 ----------------- .../translation/admin-console/upsell/index.ts | 42 ++++++++ .../admin-console/upsell/paywall.ts | 50 ++++++++++ .../src/locales/zh-hk/errors/password.ts | 3 +- .../zh-hk/errors/sign-in-experiences.ts | 18 ++-- .../zh-hk/translation/admin-console/index.ts | 2 +- .../admin-console/sign-in-exp/index.ts | 3 +- .../sign-in-exp/password-policy.ts | 59 ++++------- .../sign-in-exp/sign-up-and-sign-in.ts | 9 +- .../zh-hk/translation/admin-console/upsell.ts | 87 ----------------- .../translation/admin-console/upsell/index.ts | 42 ++++++++ .../admin-console/upsell/paywall.ts | 50 ++++++++++ .../src/locales/zh-tw/errors/password.ts | 3 +- .../zh-tw/errors/sign-in-experiences.ts | 6 +- .../zh-tw/translation/admin-console/index.ts | 2 +- .../admin-console/sign-in-exp/index.ts | 3 +- .../sign-in-exp/password-policy.ts | 60 ++++-------- .../sign-in-exp/sign-up-and-sign-in.ts | 9 +- .../zh-tw/translation/admin-console/upsell.ts | 87 ----------------- .../translation/admin-console/upsell/index.ts | 42 ++++++++ .../admin-console/upsell/paywall.ts | 50 ++++++++++ 190 files changed, 2215 insertions(+), 2707 deletions(-) delete mode 100644 packages/phrases/src/locales/de/translation/admin-console/upsell.ts create mode 100644 packages/phrases/src/locales/de/translation/admin-console/upsell/index.ts create mode 100644 packages/phrases/src/locales/de/translation/admin-console/upsell/paywall.ts delete mode 100644 packages/phrases/src/locales/en/translation/admin-console/upsell.ts create mode 100644 packages/phrases/src/locales/en/translation/admin-console/upsell/index.ts create mode 100644 packages/phrases/src/locales/en/translation/admin-console/upsell/paywall.ts delete mode 100644 packages/phrases/src/locales/es/translation/admin-console/upsell.ts create mode 100644 packages/phrases/src/locales/es/translation/admin-console/upsell/index.ts create mode 100644 packages/phrases/src/locales/es/translation/admin-console/upsell/paywall.ts delete mode 100644 packages/phrases/src/locales/fr/translation/admin-console/upsell.ts create mode 100644 packages/phrases/src/locales/fr/translation/admin-console/upsell/index.ts create mode 100644 packages/phrases/src/locales/fr/translation/admin-console/upsell/paywall.ts delete mode 100644 packages/phrases/src/locales/it/translation/admin-console/upsell.ts create mode 100644 packages/phrases/src/locales/it/translation/admin-console/upsell/index.ts create mode 100644 packages/phrases/src/locales/it/translation/admin-console/upsell/paywall.ts delete mode 100644 packages/phrases/src/locales/ja/translation/admin-console/upsell.ts create mode 100644 packages/phrases/src/locales/ja/translation/admin-console/upsell/index.ts create mode 100644 packages/phrases/src/locales/ja/translation/admin-console/upsell/paywall.ts delete mode 100644 packages/phrases/src/locales/ko/translation/admin-console/upsell.ts create mode 100644 packages/phrases/src/locales/ko/translation/admin-console/upsell/index.ts create mode 100644 packages/phrases/src/locales/ko/translation/admin-console/upsell/paywall.ts delete mode 100644 packages/phrases/src/locales/pl-pl/translation/admin-console/upsell.ts create mode 100644 packages/phrases/src/locales/pl-pl/translation/admin-console/upsell/index.ts create mode 100644 packages/phrases/src/locales/pl-pl/translation/admin-console/upsell/paywall.ts delete mode 100644 packages/phrases/src/locales/pt-br/translation/admin-console/upsell.ts create mode 100644 packages/phrases/src/locales/pt-br/translation/admin-console/upsell/index.ts create mode 100644 packages/phrases/src/locales/pt-br/translation/admin-console/upsell/paywall.ts delete mode 100644 packages/phrases/src/locales/pt-pt/translation/admin-console/upsell.ts create mode 100644 packages/phrases/src/locales/pt-pt/translation/admin-console/upsell/index.ts create mode 100644 packages/phrases/src/locales/pt-pt/translation/admin-console/upsell/paywall.ts delete mode 100644 packages/phrases/src/locales/ru/translation/admin-console/upsell.ts create mode 100644 packages/phrases/src/locales/ru/translation/admin-console/upsell/index.ts create mode 100644 packages/phrases/src/locales/ru/translation/admin-console/upsell/paywall.ts delete mode 100644 packages/phrases/src/locales/tr-tr/translation/admin-console/upsell.ts create mode 100644 packages/phrases/src/locales/tr-tr/translation/admin-console/upsell/index.ts create mode 100644 packages/phrases/src/locales/tr-tr/translation/admin-console/upsell/paywall.ts delete mode 100644 packages/phrases/src/locales/zh-cn/translation/admin-console/upsell.ts create mode 100644 packages/phrases/src/locales/zh-cn/translation/admin-console/upsell/index.ts create mode 100644 packages/phrases/src/locales/zh-cn/translation/admin-console/upsell/paywall.ts delete mode 100644 packages/phrases/src/locales/zh-hk/translation/admin-console/upsell.ts create mode 100644 packages/phrases/src/locales/zh-hk/translation/admin-console/upsell/index.ts create mode 100644 packages/phrases/src/locales/zh-hk/translation/admin-console/upsell/paywall.ts delete mode 100644 packages/phrases/src/locales/zh-tw/translation/admin-console/upsell.ts create mode 100644 packages/phrases/src/locales/zh-tw/translation/admin-console/upsell/index.ts create mode 100644 packages/phrases/src/locales/zh-tw/translation/admin-console/upsell/paywall.ts diff --git a/packages/cli/src/commands/connector/add.ts b/packages/cli/src/commands/connector/add.ts index c356661c9..f749c4255 100644 --- a/packages/cli/src/commands/connector/add.ts +++ b/packages/cli/src/commands/connector/add.ts @@ -1,8 +1,8 @@ import type { CommandModule } from 'yargs'; -import { consoleLog } from '../../utils.js'; +import { consoleLog, inquireInstancePath } from '../../utils.js'; -import { addConnectors, addOfficialConnectors, inquireInstancePath } from './utils.js'; +import { addConnectors, addOfficialConnectors } from './utils.js'; const add: CommandModule< { path?: string }, diff --git a/packages/cli/src/commands/connector/link.ts b/packages/cli/src/commands/connector/link.ts index 1447df04c..6a6eccb2e 100644 --- a/packages/cli/src/commands/connector/link.ts +++ b/packages/cli/src/commands/connector/link.ts @@ -3,9 +3,9 @@ import path from 'node:path'; import type { CommandModule } from 'yargs'; -import { consoleLog } from '../../utils.js'; +import { consoleLog, inquireInstancePath } from '../../utils.js'; -import { getConnectorDirectory, getLocalConnectorPackages, inquireInstancePath } from './utils.js'; +import { getConnectorDirectory, getLocalConnectorPackages } from './utils.js'; const link: CommandModule<{ path?: string }, { path?: string; cloud: boolean; mock: boolean }> = { command: ['link', 'ln'], diff --git a/packages/cli/src/commands/connector/utils.ts b/packages/cli/src/commands/connector/utils.ts index 84108ad03..9af26f69e 100644 --- a/packages/cli/src/commands/connector/utils.ts +++ b/packages/cli/src/commands/connector/utils.ts @@ -4,20 +4,22 @@ import fs from 'node:fs/promises'; import path from 'node:path'; import { promisify } from 'node:util'; -import { assert, conditionalArray, conditionalString, trySafe } from '@silverhand/essentials'; +import { conditionalArray, conditionalString, trySafe } from '@silverhand/essentials'; import chalk from 'chalk'; import { got } from 'got'; -import inquirer from 'inquirer'; import pLimit from 'p-limit'; import pRetry from 'p-retry'; import tar from 'tar'; import { z } from 'zod'; -import { connectorDirectory } from '../../constants.js'; -import { consoleLog, getConnectorPackagesFromDirectory, isTty, oraPromise } from '../../utils.js'; -import { defaultPath } from '../install/utils.js'; +import { connectorDirectory, coreDirectory } from '../../constants.js'; +import { + consoleLog, + getConnectorPackagesFromDirectory, + inquireInstancePath, + oraPromise, +} from '../../utils.js'; -const coreDirectory = 'packages/core'; const execPromise = promisify(exec); export const npmPackResultGuard = z .object({ @@ -27,67 +29,6 @@ export const npmPackResultGuard = z }) .array(); -const buildPathErrorMessage = (value: string) => - `The path ${chalk.green(value)} does not contain a Logto instance, please try another.`; - -const validatePath = async (value: string) => { - const corePackageJsonPath = path.resolve(path.join(value, coreDirectory, 'package.json')); - - if (!existsSync(corePackageJsonPath)) { - return buildPathErrorMessage(value); - } - - const packageJson = await fs.readFile(corePackageJsonPath, { encoding: 'utf8' }); - const packageName = await z - .object({ name: z.string() }) - .parseAsync(JSON.parse(packageJson)) - .then(({ name }) => name) - .catch(() => ''); - - if (packageName !== '@logto/core') { - return buildPathErrorMessage(value); - } - - return true; -}; - -export const inquireInstancePath = async (initialPath?: string) => { - const inquire = async () => { - if (!initialPath && (await validatePath('.')) === true) { - return path.resolve('.'); - } - - if (!isTty()) { - assert(initialPath, new Error('Path is missing')); - - return initialPath; - } - - const { instancePath } = await inquirer.prompt<{ instancePath: string }>( - { - name: 'instancePath', - message: 'Where is your Logto instance?', - type: 'input', - default: defaultPath, - filter: (value: string) => value.trim(), - validate: validatePath, - }, - { instancePath: initialPath } - ); - - return instancePath; - }; - - const instancePath = await inquire(); - const validated = await validatePath(instancePath); - - if (validated !== true) { - consoleLog.fatal(validated); - } - - return instancePath; -}; - const packagePrefix = 'connector-'; export const normalizePackageName = (name: string) => diff --git a/packages/cli/src/commands/install/index.ts b/packages/cli/src/commands/install/index.ts index 8afc4bb82..7f74a1bba 100644 --- a/packages/cli/src/commands/install/index.ts +++ b/packages/cli/src/commands/install/index.ts @@ -6,7 +6,7 @@ import { consoleLog } from '../../utils.js'; import { validateNodeVersion, - inquireInstancePath, + inquireInstallPath, validateDatabase, downloadRelease, seedDatabase, @@ -26,8 +26,8 @@ export type InstallArgs = { const installLogto = async ({ path, skipSeed, downloadUrl, cloud }: InstallArgs) => { validateNodeVersion(); - // Get instance path - const instancePath = await inquireInstancePath(path); + // Get install location path + const installPath = await inquireInstallPath(path); // Validate if user has a valid database await validateDatabase(); @@ -35,7 +35,7 @@ const installLogto = async ({ path, skipSeed, downloadUrl, cloud }: InstallArgs) // Download and decompress const tarPath = !downloadUrl || isUrl(downloadUrl) ? await downloadRelease(downloadUrl) : downloadUrl; - await decompress(instancePath, tarPath); + await decompress(installPath, tarPath); // Seed database if (skipSeed) { @@ -45,14 +45,14 @@ const installLogto = async ({ path, skipSeed, downloadUrl, cloud }: InstallArgs) )} command to seed database when ready.\n` ); } else { - await seedDatabase(instancePath, cloud); + await seedDatabase(installPath, cloud); } // Save to dot env - await createEnv(instancePath, await getDatabaseUrlFromConfig()); + await createEnv(installPath, await getDatabaseUrlFromConfig()); // Finale - logFinale(instancePath); + logFinale(installPath); }; const install: CommandModule< diff --git a/packages/cli/src/commands/install/utils.ts b/packages/cli/src/commands/install/utils.ts index e15b68851..b6bf3cf22 100644 --- a/packages/cli/src/commands/install/utils.ts +++ b/packages/cli/src/commands/install/utils.ts @@ -11,6 +11,7 @@ import inquirer from 'inquirer'; import * as semver from 'semver'; import tar from 'tar'; +import { defaultPath } from '../../constants.js'; import { createPoolAndDatabaseIfNeeded } from '../../database.js'; import { packageJson } from '../../package-json.js'; import { @@ -24,7 +25,6 @@ import { } from '../../utils.js'; import { seedByPool } from '../database/seed/index.js'; -export const defaultPath = path.join(os.homedir(), 'logto'); const pgRequired = new semver.SemVer('14.0.0'); export const validateNodeVersion = () => { @@ -50,7 +50,7 @@ const validatePath = (value: string) => ? `The path ${chalk.green(value)} already exists, please try another.` : true; -export const inquireInstancePath = async (initialPath?: string) => { +export const inquireInstallPath = async (initialPath?: string) => { if (!isTty()) { assert(initialPath, new Error('Path is missing')); @@ -178,14 +178,14 @@ export const seedDatabase = async (instancePath: string, cloud: boolean) => { } }; -export const createEnv = async (instancePath: string, databaseUrl: string) => { - const dotEnvPath = path.resolve(instancePath, '.env'); +export const createEnv = async (installPath: string, databaseUrl: string) => { + const dotEnvPath = path.resolve(installPath, '.env'); await fs.writeFile(dotEnvPath, `DB_URL=${databaseUrl}`, 'utf8'); consoleLog.info(`Saved database URL to ${chalk.blue(dotEnvPath)}`); }; -export const logFinale = (instancePath: string) => { - const startCommand = `cd ${instancePath} && npm start`; +export const logFinale = (installPath: string) => { + const startCommand = `cd ${installPath} && npm start`; consoleLog.info( `Use the command below to start Logto. Happy hacking!\n\n ${chalk.green(startCommand)}` ); diff --git a/packages/cli/src/commands/translate/create.ts b/packages/cli/src/commands/translate/create.ts index 968480ff6..b1ad370f1 100644 --- a/packages/cli/src/commands/translate/create.ts +++ b/packages/cli/src/commands/translate/create.ts @@ -3,8 +3,7 @@ import { isBuiltInLanguageTag as isPhrasesBuiltInLanguageTag } from '@logto/phra import { isBuiltInLanguageTag as isPhrasesUiBuiltInLanguageTag } from '@logto/phrases-ui'; import type { CommandModule } from 'yargs'; -import { consoleLog } from '../../utils.js'; -import { inquireInstancePath } from '../connector/utils.js'; +import { consoleLog, inquireInstancePath } from '../../utils.js'; import { createFullTranslation } from './utils.js'; diff --git a/packages/cli/src/commands/translate/prompts.ts b/packages/cli/src/commands/translate/prompts.ts index 5554bbb3d..d7537142f 100644 --- a/packages/cli/src/commands/translate/prompts.ts +++ b/packages/cli/src/commands/translate/prompts.ts @@ -7,9 +7,11 @@ type GetTranslationPromptProperties = { extraPrompt?: string; }; +export const untranslatedMark = '/** UNTRANSLATED */'; + /** * Note: - * The input token limit of GPT 3.5 is 2048, the following prompt tokens with sourceFileContent is about 1200. + * The input token limit of GPT 3.5 is 2048, the following prompt tokens with sourceFileContent is about 1600. * Remember to check the token limit before adding more prompt. * Tokens can be counted in https://platform.openai.com/tokenizer */ @@ -20,30 +22,32 @@ export const getTranslationPromptMessages = ({ }: GetTranslationPromptProperties) => [ { role: 'assistant', - content: `You are a translate assistant of a Typescript engineer, when you receive a code snippet that contains an object, translate and ONLY translate those values that are marked with comment "// UNTRANSLATED" into the language ${ + content: `You are a assistant translator and will receive a TypeScript object. Traverse and find object values with "${untranslatedMark}" annotation on the top, then translate these values to target locale "${ languages[targetLanguage] - }, remove the "// UNTRANSLATED" mark, keep all object keys original, output ts code only, the code format should be strictly consistent, and should not contain the given code snippet. ${conditionalString( + }". Remove the "${untranslatedMark}" annotations from output. Escape the single quotes (if any) in translated results by prepending a backslash. Keep the interpolation double curly brackets and their inner values intact. Make sure there is a space between the CJK and non-CJK characters. Prefer using "你" instead of "您" in Chinese. Do not include sample code snippet below in the final output. ${conditionalString( extraPrompt )} -Take Chinese as an example, if the input is: +Take translating to zh-CN as an example, if the input is: \`\`\`ts import others from './others.js'; const translation = { - hello: '你好', - world: 'world', // UNTRANSLATED + hello: 'Hello', + ${untranslatedMark} + world: 'world', others, }; export default translation; \`\`\` -the output should be: + +Then the output should be: \`\`\`ts import others from './others.js'; const translation = { - hello: '你好', + hello: 'Hello', world: '世界', others, }; diff --git a/packages/cli/src/commands/translate/sync-keys/index.ts b/packages/cli/src/commands/translate/sync-keys/index.ts index 63352ec85..5191ceda4 100644 --- a/packages/cli/src/commands/translate/sync-keys/index.ts +++ b/packages/cli/src/commands/translate/sync-keys/index.ts @@ -1,18 +1,13 @@ -import { execFile } from 'node:child_process'; import fs from 'node:fs'; import path from 'node:path'; -import { promisify } from 'node:util'; import { isLanguageTag } from '@logto/language-kit'; import ora from 'ora'; import { type CommandModule } from 'yargs'; -import { consoleLog } from '../../../utils.js'; -import { inquireInstancePath } from '../../connector/utils.js'; +import { consoleLog, inquireInstancePath, lintLocaleFiles } from '../../../utils.js'; -import { praseLocaleFiles, syncPhraseKeysAndFileStructure } from './utils.js'; - -const execPromise = promisify(execFile); +import { parseLocaleFiles, syncPhraseKeysAndFileStructure } from './utils.js'; const syncKeys: CommandModule< { path?: string }, @@ -77,7 +72,7 @@ const syncKeys: CommandModule< const phrasesPath = path.join(instancePath, 'packages', packageName); const localesPath = path.join(phrasesPath, 'src/locales'); const entrypoint = path.join(localesPath, baselineTag.toLowerCase(), 'index.ts'); - const baseline = praseLocaleFiles(entrypoint); + const baseline = parseLocaleFiles(entrypoint); const targetLocales = targetTag === 'all' ? fs.readdirSync(localesPath) : [targetTag.toLowerCase()]; @@ -99,15 +94,7 @@ const syncKeys: CommandModule< /* eslint-enable no-await-in-loop */ if (!skipLint) { - const spinner = ora({ - text: 'Running `eslint --fix` for locales', - }).start(); - await execPromise( - 'pnpm', - ['eslint', '--ext', '.ts', path.relative(phrasesPath, localesPath), '--fix'], - { cwd: phrasesPath } - ); - spinner.succeed('Ran `eslint --fix` for locales'); + void lintLocaleFiles(instancePath, packageName); } }, }; diff --git a/packages/cli/src/commands/translate/sync-keys/utils.ts b/packages/cli/src/commands/translate/sync-keys/utils.ts index 8ee581bc2..928fb49bd 100644 --- a/packages/cli/src/commands/translate/sync-keys/utils.ts +++ b/packages/cli/src/commands/translate/sync-keys/utils.ts @@ -63,7 +63,7 @@ type ParsedTuple = readonly [NestedPhraseObject, FileStructure]; * @returns A tuple of the nested object of phrases and the file structure * */ -export const praseLocaleFiles = (filePath: string): ParsedTuple => { +export const parseLocaleFiles = (filePath: string): ParsedTuple => { const content = readFileSync(filePath, 'utf8'); const ast = ts.createSourceFile(filePath, content, ts.ScriptTarget.Latest, true); const importIdentifierPath = new Map(); @@ -97,7 +97,7 @@ export const praseLocaleFiles = (filePath: string): ParsedTuple => { const resolvedPath = path.resolve(path.dirname(filePath), importPath); // Recursively parse the nested object from the imported file - const [phrases, structure] = praseLocaleFiles(resolvedPath); + const [phrases, structure] = parseLocaleFiles(resolvedPath); /* eslint-disable @silverhand/fp/no-mutation */ nestedObject[key] = phrases; @@ -329,7 +329,7 @@ export const syncPhraseKeysAndFileStructure = async ( ) => { const targetEntrypoint = path.join(targetDirectory, 'index.ts'); const isTargetLocaleExist = existsSync(targetEntrypoint); - const targetObject = isTargetLocaleExist ? praseLocaleFiles(targetEntrypoint)[0] : {}; + const targetObject = isTargetLocaleExist ? parseLocaleFiles(targetEntrypoint)[0] : {}; const backupDirectory = targetDirectory + '.bak'; if (isTargetLocaleExist) { diff --git a/packages/cli/src/commands/translate/sync.ts b/packages/cli/src/commands/translate/sync.ts index 81d617680..5037c4499 100644 --- a/packages/cli/src/commands/translate/sync.ts +++ b/packages/cli/src/commands/translate/sync.ts @@ -4,7 +4,7 @@ import { isBuiltInLanguageTag as isPhrasesUiBuiltInLanguageTag } from '@logto/ph import PQueue from 'p-queue'; import type { CommandModule } from 'yargs'; -import { inquireInstancePath } from '../connector/utils.js'; +import { inquireInstancePath, lintLocaleFiles } from '../../utils.js'; import { type TranslationOptions, baseLanguage, syncTranslation } from './utils.js'; @@ -27,8 +27,9 @@ const sync: CommandModule<{ path?: string }, { path?: string }> = { queue, } satisfies Partial; + /* eslint-disable no-await-in-loop */ if (isPhrasesBuiltInLanguageTag(languageTag)) { - void syncTranslation({ + await syncTranslation({ ...baseOptions, packageName: 'phrases', languageTag, @@ -36,15 +37,18 @@ const sync: CommandModule<{ path?: string }, { path?: string }> = { } if (isPhrasesUiBuiltInLanguageTag(languageTag)) { - void syncTranslation({ + await syncTranslation({ ...baseOptions, packageName: 'phrases-ui', languageTag, }); } + /* eslint-enable no-await-in-loop */ } await queue.onIdle(); + + void lintLocaleFiles(instancePath); }, }; diff --git a/packages/cli/src/commands/translate/utils.ts b/packages/cli/src/commands/translate/utils.ts index 147733bb0..40b9c88cf 100644 --- a/packages/cli/src/commands/translate/utils.ts +++ b/packages/cli/src/commands/translate/utils.ts @@ -10,11 +10,10 @@ import PQueue from 'p-queue'; import { consoleLog } from '../../utils.js'; import { createOpenaiApi, translate } from './openai.js'; +import { untranslatedMark } from './prompts.js'; export const baseLanguage = 'en' satisfies LanguageTag; -const untranslatedMark = '// UNTRANSLATED'; - export const readLocaleFiles = async (directory: string): Promise => { const entities = await fs.readdir(directory, { withFileTypes: true }); @@ -148,7 +147,6 @@ export const syncTranslation = async ({ api: openai, sourceFilePath: targetLocaleFile, targetLanguage: languageTag, - extraPrompt: `Object values without an "${untranslatedMark}" mark should be skipped and keep its original value. Remember to remove the "${untranslatedMark}" mark with the spaces before and after it in the output content.`, }); if (!result) { diff --git a/packages/cli/src/constants.ts b/packages/cli/src/constants.ts index a759ff0c4..863cf2acc 100644 --- a/packages/cli/src/constants.ts +++ b/packages/cli/src/constants.ts @@ -1 +1,6 @@ +import os from 'node:os'; +import path from 'node:path'; + +export const defaultPath = path.join(os.homedir(), 'logto'); +export const coreDirectory = 'packages/core'; export const connectorDirectory = 'connectors'; diff --git a/packages/cli/src/utils.ts b/packages/cli/src/utils.ts index 5e03e9e22..b0cacbc8d 100644 --- a/packages/cli/src/utils.ts +++ b/packages/cli/src/utils.ts @@ -1,12 +1,13 @@ -import { execSync } from 'node:child_process'; +import { execSync, execFile } from 'node:child_process'; import { createWriteStream, existsSync } from 'node:fs'; import { readdir, readFile } from 'node:fs/promises'; import { createRequire } from 'node:module'; import path from 'node:path'; +import { promisify } from 'node:util'; import { ConsoleLog } from '@logto/shared'; import type { Optional } from '@silverhand/essentials'; -import { conditionalString } from '@silverhand/essentials'; +import { assert, conditionalString } from '@silverhand/essentials'; import chalk from 'chalk'; import type { Progress } from 'got'; import { got } from 'got'; @@ -16,6 +17,8 @@ import type { Options } from 'ora'; import ora from 'ora'; import { z } from 'zod'; +import { coreDirectory, defaultPath } from './constants.js'; + export const safeExecSync = (command: string) => { try { return execSync(command, { encoding: 'utf8', stdio: 'pipe' }); @@ -170,6 +173,67 @@ export function findLastIndex( return -1; } +const buildPathErrorMessage = (value: string) => + `The path ${chalk.green(value)} does not contain a Logto instance. Please try another.`; + +const validatePath = async (value: string) => { + const corePackageJsonPath = path.resolve(path.join(value, coreDirectory, 'package.json')); + + if (!existsSync(corePackageJsonPath)) { + return buildPathErrorMessage(value); + } + + const packageJson = await readFile(corePackageJsonPath, { encoding: 'utf8' }); + const packageName = await z + .object({ name: z.string() }) + .parseAsync(JSON.parse(packageJson)) + .then(({ name }) => name) + .catch(() => ''); + + if (packageName !== '@logto/core') { + return buildPathErrorMessage(value); + } + + return true; +}; + +export const inquireInstancePath = async (initialPath?: string) => { + const inquire = async () => { + if (!initialPath && (await validatePath('.')) === true) { + return path.resolve('.'); + } + + if (!isTty()) { + assert(initialPath, new Error('Path is missing')); + + return initialPath; + } + + const { instancePath } = await inquirer.prompt<{ instancePath: string }>( + { + name: 'instancePath', + message: 'Where is your Logto instance?', + type: 'input', + default: defaultPath, + filter: (value: string) => value.trim(), + validate: validatePath, + }, + { instancePath: initialPath } + ); + + return instancePath; + }; + + const instancePath = await inquire(); + const validated = await validatePath(instancePath); + + if (validated !== true) { + consoleLog.fatal(validated); + } + + return instancePath; +}; + const getConnectorPackageName = async (directory: string) => { const filePath = path.join(directory, 'package.json'); @@ -204,3 +268,32 @@ export const getConnectorPackagesFromDirectory = async (directory: string) => { (packageInfo): packageInfo is ConnectorPackage => typeof packageInfo.name === 'string' ); }; + +const execPromise = promisify(execFile); + +export const lintLocaleFiles = async ( + /** Logto instance path */ + instancePath: string, + /** Target package name, ignore to lint both packages */ + packageName?: 'phrases' | 'phrases-ui' +) => { + const spinner = ora({ + text: 'Running `eslint --fix` for locales', + }).start(); + + const targetPackages = packageName ? [packageName] : ['phrases', 'phrases-ui']; + + await Promise.all( + targetPackages.map(async (packageName) => { + const phrasesPath = path.join(instancePath, 'packages', packageName); + const localesPath = path.join(phrasesPath, 'src/locales'); + await execPromise( + 'pnpm', + ['eslint', '--ext', '.ts', path.relative(phrasesPath, localesPath), '--fix'], + { cwd: phrasesPath } + ); + }) + ); + + spinner.succeed('Ran `eslint --fix` for locales'); +}; diff --git a/packages/connectors/connector-azuread/src/constant.ts b/packages/connectors/connector-azuread/src/constant.ts index ccec7fe29..9e38a31f0 100644 --- a/packages/connectors/connector-azuread/src/constant.ts +++ b/packages/connectors/connector-azuread/src/constant.ts @@ -19,8 +19,8 @@ export const defaultMetadata: ConnectorMetadata = { description: { en: 'Microsoft Azure Active Directory is a leading AD provider.', 'zh-CN': 'Microsoft Azure Active Directory 是领先的 AD 服务提供商。', - 'tr-TR': 'Microsoft Azure Active Directory en büyük AD servisidir.', // UNTRANSLATED - ko: 'Microsoft Azure Active Directory is the biggest AD provider.', // UNTRANSLATED + 'tr-TR': 'Microsoft Azure Active Directory en büyük AD servisidir.', + ko: 'Microsoft Azure Active Directory is the biggest AD provider.', }, readme: './README.md', formItems: [ diff --git a/packages/connectors/connector-facebook/src/constant.ts b/packages/connectors/connector-facebook/src/constant.ts index 70c132c8f..3784c4063 100644 --- a/packages/connectors/connector-facebook/src/constant.ts +++ b/packages/connectors/connector-facebook/src/constant.ts @@ -30,8 +30,8 @@ export const defaultMetadata: ConnectorMetadata = { description: { en: 'Facebook is a worldwide social media platform with billions of users.', 'zh-CN': 'Facebook 是有数十亿用户的社交平台。', - 'tr-TR': 'Facebook, en aktif kullanıcılara sahip dünya çapında bir sosyal medya platformudur.', // UNTRANSLATED - ko: '페이스북은 가장 활동적인 사용자를 가진 세계적인 소셜 미디어 플랫폼입니다.', // UNTRANSLATED + 'tr-TR': 'Facebook, en aktif kullanıcılara sahip dünya çapında bir sosyal medya platformudur.', + ko: '페이스북은 가장 활동적인 사용자를 가진 세계적인 소셜 미디어 플랫폼입니다.', }, readme: './README.md', formItems: [ diff --git a/packages/connectors/connector-google/src/constant.ts b/packages/connectors/connector-google/src/constant.ts index d73e92b55..9ff63ada2 100644 --- a/packages/connectors/connector-google/src/constant.ts +++ b/packages/connectors/connector-google/src/constant.ts @@ -21,8 +21,8 @@ export const defaultMetadata: ConnectorMetadata = { description: { en: 'Google is a principal search engine technology and email service provider.', 'zh-CN': 'Google 是全球性的搜索引擎和邮件服务提供商。', - 'tr-TR': 'Google, en büyük arama motoru teknolojisi ve e-posta servis sağlayıcısıdır.', // UNTRANSLATED - ko: 'Google은 가장 큰 검색 엔진 기술과 이메일 서비스 제공자입니다.', // UNTRANSLATED + 'tr-TR': 'Google, en büyük arama motoru teknolojisi ve e-posta servis sağlayıcısıdır.', + ko: 'Google은 가장 큰 검색 엔진 기술과 이메일 서비스 제공자입니다.', }, readme: './README.md', formItems: [ diff --git a/packages/connectors/connector-kakao/src/constant.ts b/packages/connectors/connector-kakao/src/constant.ts index ab07b388d..deb067c42 100644 --- a/packages/connectors/connector-kakao/src/constant.ts +++ b/packages/connectors/connector-kakao/src/constant.ts @@ -20,8 +20,8 @@ export const defaultMetadata: ConnectorMetadata = { description: { en: 'Kakao is a famous social network service provider in South Korea', 'zh-CN': 'Kakao 是韩国著名的社交网络服务提供商。', - 'tr-TR': 'Kakao is a famous social network service provider in South Korea', // UNTRANSLATED - ko: '카카오는 한국에서 가장 유명한 SNS 서비스 제공자 입니다.', // UNTRANSLATED + 'tr-TR': 'Kakao is a famous social network service provider in South Korea', + ko: '카카오는 한국에서 가장 유명한 SNS 서비스 제공자 입니다.', }, readme: './README.md', formItems: [ diff --git a/packages/phrases-ui/src/locales/de/description.ts b/packages/phrases-ui/src/locales/de/description.ts index 69d19e5f8..24062a0cf 100644 --- a/packages/phrases-ui/src/locales/de/description.ts +++ b/packages/phrases-ui/src/locales/de/description.ts @@ -62,18 +62,13 @@ const description = { no_region_code_found: 'Kein Regionencode gefunden', verify_email: 'Bestätige deine E-Mail-Adresse', verify_phone: 'Bestätige deine Telefonnummer', - /** UNTRANSLATED */ - password_requirements: 'Password {{items, list}}.', - /** UNTRANSLATED */ - 'password_requirement.length_one': 'requires a minimum of {{count}} character', - /** UNTRANSLATED */ - 'password_requirement.length_other': 'requires a minimum of {{count}} characters', - /** UNTRANSLATED */ + password_requirements: 'Passwort {{items, list}}.', + 'password_requirement.length_one': 'erfordert mindestens {{count}} Zeichen', + 'password_requirement.length_other': 'erfordert mindestens {{count}} Zeichen', 'password_requirement.character_types_one': - 'should contain at least {{count}} type of uppercase letters, lowercase letters, digits, and symbols', - /** UNTRANSLATED */ + 'sollte mindestens {{count}} Kategorie der folgenden Zeichenarten enthalten: Großbuchstaben, Kleinbuchstaben, Zahlen und Symbole', 'password_requirement.character_types_other': - 'should contain at least {{count}} types of uppercase letters, lowercase letters, digits, and symbols', + 'sollte mindestens {{count}} Kategorien der folgenden Zeichenarten enthalten: Großbuchstaben, Kleinbuchstaben, Zahlen und Symbole', }; export default Object.freeze(description); diff --git a/packages/phrases-ui/src/locales/de/error/password-rejected.ts b/packages/phrases-ui/src/locales/de/error/password-rejected.ts index 076cecd67..b2234df8d 100644 --- a/packages/phrases-ui/src/locales/de/error/password-rejected.ts +++ b/packages/phrases-ui/src/locales/de/error/password-rejected.ts @@ -1,24 +1,14 @@ const password_rejected = { - /** UNTRANSLATED */ - too_short: 'Minimum length is {{min}}.', - /** UNTRANSLATED */ - too_long: 'Maximum length is {{max}}.', - /** UNTRANSLATED */ - character_types: 'At least {{min}} types of characters are required.', - /** UNTRANSLATED */ - unsupported_characters: 'Unsupported character found.', - /** UNTRANSLATED */ - pwned: 'Avoid using simple passwords that are easy to guess.', - /** UNTRANSLATED */ - restricted_found: 'Avoid overusing {{list, list}}.', - /** UNTRANSLATED */ - 'restricted.repetition': 'repeated characters', - /** UNTRANSLATED */ - 'restricted.sequence': 'sequential characters', - /** UNTRANSLATED */ - 'restricted.user_info': 'your personal information', - /** UNTRANSLATED */ - 'restricted.words': 'product context', + too_short: 'Die minimale Länge beträgt {{min}}.', + too_long: 'Die maximale Länge beträgt {{max}}.', + character_types: 'Mindestens {{min}} Arten von Zeichen sind erforderlich.', + unsupported_characters: 'Nicht unterstütztes Zeichen gefunden.', + pwned: 'Verwenden Sie keine einfachen Passwörter, die leicht zu erraten sind.', + restricted_found: 'Vermeiden Sie übermäßigen Gebrauch von {{list, list}}.', + 'restricted.repetition': 'wiederholte Zeichen', + 'restricted.sequence': 'sequenzielle Zeichen', + 'restricted.user_info': 'Ihre persönlichen Informationen', + 'restricted.words': 'Produktkontext', }; export default Object.freeze(password_rejected); diff --git a/packages/phrases-ui/src/locales/de/list.ts b/packages/phrases-ui/src/locales/de/list.ts index c69ba2459..4b5dc6701 100644 --- a/packages/phrases-ui/src/locales/de/list.ts +++ b/packages/phrases-ui/src/locales/de/list.ts @@ -1,9 +1,6 @@ const list = { - /** UNTRANSLATED */ - or: 'or', - /** UNTRANSLATED */ - and: 'and', - /** UNTRANSLATED */ + or: 'oder', + and: 'und', separator: ',', }; diff --git a/packages/phrases-ui/src/locales/es/description.ts b/packages/phrases-ui/src/locales/es/description.ts index a4c92acc7..3425b357b 100644 --- a/packages/phrases-ui/src/locales/es/description.ts +++ b/packages/phrases-ui/src/locales/es/description.ts @@ -60,18 +60,13 @@ const description = { no_region_code_found: 'No se encontró código de región', verify_email: 'Verificar su correo electrónico', verify_phone: 'Verificar su número de teléfono', - /** UNTRANSLATED */ - password_requirements: 'Password {{items, list}}.', - /** UNTRANSLATED */ - 'password_requirement.length_one': 'requires a minimum of {{count}} character', - /** UNTRANSLATED */ - 'password_requirement.length_other': 'requires a minimum of {{count}} characters', - /** UNTRANSLATED */ + password_requirements: 'Contraseña {{items, lista}}.', + 'password_requirement.length_one': 'requiere un mínimo de {{count}} carácter', + 'password_requirement.length_other': 'requiere un mínimo de {{count}} caracteres', 'password_requirement.character_types_one': - 'should contain at least {{count}} type of uppercase letters, lowercase letters, digits, and symbols', - /** UNTRANSLATED */ + 'debe contener al menos {{count}} tipo de letras mayúsculas, letras minúsculas, dígitos y símbolos', 'password_requirement.character_types_other': - 'should contain at least {{count}} types of uppercase letters, lowercase letters, digits, and symbols', + 'debe contener al menos {{count}} tipos de letras mayúsculas, letras minúsculas, dígitos y símbolos', }; export default Object.freeze(description); diff --git a/packages/phrases-ui/src/locales/es/error/password-rejected.ts b/packages/phrases-ui/src/locales/es/error/password-rejected.ts index 076cecd67..138124752 100644 --- a/packages/phrases-ui/src/locales/es/error/password-rejected.ts +++ b/packages/phrases-ui/src/locales/es/error/password-rejected.ts @@ -1,24 +1,14 @@ const password_rejected = { - /** UNTRANSLATED */ - too_short: 'Minimum length is {{min}}.', - /** UNTRANSLATED */ - too_long: 'Maximum length is {{max}}.', - /** UNTRANSLATED */ - character_types: 'At least {{min}} types of characters are required.', - /** UNTRANSLATED */ - unsupported_characters: 'Unsupported character found.', - /** UNTRANSLATED */ - pwned: 'Avoid using simple passwords that are easy to guess.', - /** UNTRANSLATED */ - restricted_found: 'Avoid overusing {{list, list}}.', - /** UNTRANSLATED */ - 'restricted.repetition': 'repeated characters', - /** UNTRANSLATED */ - 'restricted.sequence': 'sequential characters', - /** UNTRANSLATED */ - 'restricted.user_info': 'your personal information', - /** UNTRANSLATED */ - 'restricted.words': 'product context', + too_short: 'La longitud mínima es {{min}}.', + too_long: 'La longitud máxima es {{max}}.', + character_types: 'Se necesitan al menos {{min}} tipos de caracteres.', + unsupported_characters: 'Se encontró un carácter no admitido.', + pwned: 'Evite usar contraseñas simples que sean fáciles de adivinar.', + restricted_found: 'Evite utilizar en exceso {{list, list}}.', + 'restricted.repetition': 'caracteres repetidos', + 'restricted.sequence': 'caracteres secuenciales', + 'restricted.user_info': 'su información personal', + 'restricted.words': 'contexto del producto', }; export default Object.freeze(password_rejected); diff --git a/packages/phrases-ui/src/locales/es/list.ts b/packages/phrases-ui/src/locales/es/list.ts index c69ba2459..8565a6691 100644 --- a/packages/phrases-ui/src/locales/es/list.ts +++ b/packages/phrases-ui/src/locales/es/list.ts @@ -1,9 +1,6 @@ const list = { - /** UNTRANSLATED */ - or: 'or', - /** UNTRANSLATED */ - and: 'and', - /** UNTRANSLATED */ + or: 'o', + and: 'y', separator: ',', }; diff --git a/packages/phrases-ui/src/locales/fr/description.ts b/packages/phrases-ui/src/locales/fr/description.ts index b0e36b20c..d67dc06ce 100644 --- a/packages/phrases-ui/src/locales/fr/description.ts +++ b/packages/phrases-ui/src/locales/fr/description.ts @@ -62,18 +62,13 @@ const description = { no_region_code_found: 'Aucun code de région trouvé', verify_email: 'Vérifiez votre e-mail', verify_phone: 'Vérifiez votre numéro de téléphone', - /** UNTRANSLATED */ - password_requirements: 'Password {{items, list}}.', - /** UNTRANSLATED */ - 'password_requirement.length_one': 'requires a minimum of {{count}} character', - /** UNTRANSLATED */ - 'password_requirement.length_other': 'requires a minimum of {{count}} characters', - /** UNTRANSLATED */ + password_requirements: 'Mot de passe {{items, list}}.', + 'password_requirement.length_one': 'doit contenir au minimum {{count}} caractère', + 'password_requirement.length_other': 'doit contenir au minimum {{count}} caractères', 'password_requirement.character_types_one': - 'should contain at least {{count}} type of uppercase letters, lowercase letters, digits, and symbols', - /** UNTRANSLATED */ + 'doit contenir au moins {{count}} type de lettres majuscules, lettres minuscules, chiffres et symboles', 'password_requirement.character_types_other': - 'should contain at least {{count}} types of uppercase letters, lowercase letters, digits, and symbols', + 'doit contenir au moins {{count}} types de lettres majuscules, lettres minuscules, chiffres et symboles', }; export default Object.freeze(description); diff --git a/packages/phrases-ui/src/locales/fr/error/password-rejected.ts b/packages/phrases-ui/src/locales/fr/error/password-rejected.ts index 076cecd67..cb48ca053 100644 --- a/packages/phrases-ui/src/locales/fr/error/password-rejected.ts +++ b/packages/phrases-ui/src/locales/fr/error/password-rejected.ts @@ -1,24 +1,14 @@ const password_rejected = { - /** UNTRANSLATED */ - too_short: 'Minimum length is {{min}}.', - /** UNTRANSLATED */ - too_long: 'Maximum length is {{max}}.', - /** UNTRANSLATED */ - character_types: 'At least {{min}} types of characters are required.', - /** UNTRANSLATED */ - unsupported_characters: 'Unsupported character found.', - /** UNTRANSLATED */ - pwned: 'Avoid using simple passwords that are easy to guess.', - /** UNTRANSLATED */ - restricted_found: 'Avoid overusing {{list, list}}.', - /** UNTRANSLATED */ - 'restricted.repetition': 'repeated characters', - /** UNTRANSLATED */ - 'restricted.sequence': 'sequential characters', - /** UNTRANSLATED */ - 'restricted.user_info': 'your personal information', - /** UNTRANSLATED */ - 'restricted.words': 'product context', + too_short: 'La longueur minimale est {{min}}.', + too_long: 'La longueur maximale est {{max}}.', + character_types: 'Au moins {{min}} types de caractères sont requis.', + unsupported_characters: 'Caractère non supporté trouvé.', + pwned: "Évitez d'utiliser des mots de passe simples faciles à deviner.", + restricted_found: "Évitez d'utiliser de manière excessive {{list, list}}.", + 'restricted.repetition': 'caractères répétés', + 'restricted.sequence': 'caractères séquentiels', + 'restricted.user_info': 'vos informations personnelles', + 'restricted.words': 'contexte produit', }; export default Object.freeze(password_rejected); diff --git a/packages/phrases-ui/src/locales/fr/list.ts b/packages/phrases-ui/src/locales/fr/list.ts index c69ba2459..a95b2410d 100644 --- a/packages/phrases-ui/src/locales/fr/list.ts +++ b/packages/phrases-ui/src/locales/fr/list.ts @@ -1,9 +1,6 @@ const list = { - /** UNTRANSLATED */ - or: 'or', - /** UNTRANSLATED */ - and: 'and', - /** UNTRANSLATED */ + or: 'ou', + and: 'et', separator: ',', }; diff --git a/packages/phrases-ui/src/locales/it/description.ts b/packages/phrases-ui/src/locales/it/description.ts index 6c6823305..6d99c16dc 100644 --- a/packages/phrases-ui/src/locales/it/description.ts +++ b/packages/phrases-ui/src/locales/it/description.ts @@ -58,18 +58,13 @@ const description = { no_region_code_found: 'Nessun codice di regione trovato', verify_email: 'Verifica la tua email', verify_phone: 'Verifica il tuo numero di telefono', - /** UNTRANSLATED */ password_requirements: 'Password {{items, list}}.', - /** UNTRANSLATED */ - 'password_requirement.length_one': 'requires a minimum of {{count}} character', - /** UNTRANSLATED */ - 'password_requirement.length_other': 'requires a minimum of {{count}} characters', - /** UNTRANSLATED */ + 'password_requirement.length_one': 'richiede almeno {{count}} carattere', + 'password_requirement.length_other': 'richiede almeno {{count}} caratteri', 'password_requirement.character_types_one': - 'should contain at least {{count}} type of uppercase letters, lowercase letters, digits, and symbols', - /** UNTRANSLATED */ + 'dovrebbe contenere almeno {{count}} tipo di lettere maiuscole, lettere minuscole, numeri e simboli', 'password_requirement.character_types_other': - 'should contain at least {{count}} types of uppercase letters, lowercase letters, digits, and symbols', + 'dovrebbe contenere almeno {{count}} tipi di lettere maiuscole, lettere minuscole, numeri e simboli', }; export default Object.freeze(description); diff --git a/packages/phrases-ui/src/locales/it/error/password-rejected.ts b/packages/phrases-ui/src/locales/it/error/password-rejected.ts index 076cecd67..fe9b4ae37 100644 --- a/packages/phrases-ui/src/locales/it/error/password-rejected.ts +++ b/packages/phrases-ui/src/locales/it/error/password-rejected.ts @@ -1,24 +1,14 @@ const password_rejected = { - /** UNTRANSLATED */ - too_short: 'Minimum length is {{min}}.', - /** UNTRANSLATED */ - too_long: 'Maximum length is {{max}}.', - /** UNTRANSLATED */ - character_types: 'At least {{min}} types of characters are required.', - /** UNTRANSLATED */ - unsupported_characters: 'Unsupported character found.', - /** UNTRANSLATED */ - pwned: 'Avoid using simple passwords that are easy to guess.', - /** UNTRANSLATED */ - restricted_found: 'Avoid overusing {{list, list}}.', - /** UNTRANSLATED */ - 'restricted.repetition': 'repeated characters', - /** UNTRANSLATED */ - 'restricted.sequence': 'sequential characters', - /** UNTRANSLATED */ - 'restricted.user_info': 'your personal information', - /** UNTRANSLATED */ - 'restricted.words': 'product context', + too_short: 'La lunghezza minima è {{min}}.', + too_long: 'La lunghezza massima è {{max}}.', + character_types: 'Sono richiesti almeno {{min}} tipi di caratteri.', + unsupported_characters: 'Carattere non supportato trovato.', + pwned: 'Evita di utilizzare password semplici facili da indovinare.', + restricted_found: 'Evita di utilizzare in eccesso {{list, list}}.', + 'restricted.repetition': 'caratteri ripetuti', + 'restricted.sequence': 'caratteri sequenziali', + 'restricted.user_info': 'le tue informazioni personali', + 'restricted.words': 'contesto del prodotto', }; export default Object.freeze(password_rejected); diff --git a/packages/phrases-ui/src/locales/it/list.ts b/packages/phrases-ui/src/locales/it/list.ts index c69ba2459..67907749a 100644 --- a/packages/phrases-ui/src/locales/it/list.ts +++ b/packages/phrases-ui/src/locales/it/list.ts @@ -1,9 +1,6 @@ const list = { - /** UNTRANSLATED */ - or: 'or', - /** UNTRANSLATED */ - and: 'and', - /** UNTRANSLATED */ + or: 'o', + and: 'e', separator: ',', }; diff --git a/packages/phrases-ui/src/locales/ja/description.ts b/packages/phrases-ui/src/locales/ja/description.ts index 669bf59f0..ce1d69fe0 100644 --- a/packages/phrases-ui/src/locales/ja/description.ts +++ b/packages/phrases-ui/src/locales/ja/description.ts @@ -60,18 +60,13 @@ const description = { no_region_code_found: '地域コードが見つかりません', verify_email: 'Eメールを確認する', verify_phone: '電話番号を確認する', - /** UNTRANSLATED */ - password_requirements: 'Password {{items, list}}.', - /** UNTRANSLATED */ - 'password_requirement.length_one': 'requires a minimum of {{count}} character', - /** UNTRANSLATED */ - 'password_requirement.length_other': 'requires a minimum of {{count}} characters', - /** UNTRANSLATED */ + password_requirements: 'パスワード {{items, list}}。', + 'password_requirement.length_one': '最低{{count}}文字', + 'password_requirement.length_other': '最低{{count}}文字', 'password_requirement.character_types_one': - 'should contain at least {{count}} type of uppercase letters, lowercase letters, digits, and symbols', - /** UNTRANSLATED */ + '大文字、小文字、数字、記号のうち{{count}}種類を含む必要があります', 'password_requirement.character_types_other': - 'should contain at least {{count}} types of uppercase letters, lowercase letters, digits, and symbols', + '大文字、小文字、数字、記号のうち{{count}}種類を含む必要があります', }; export default Object.freeze(description); diff --git a/packages/phrases-ui/src/locales/ja/error/password-rejected.ts b/packages/phrases-ui/src/locales/ja/error/password-rejected.ts index 076cecd67..a5cde5d77 100644 --- a/packages/phrases-ui/src/locales/ja/error/password-rejected.ts +++ b/packages/phrases-ui/src/locales/ja/error/password-rejected.ts @@ -1,24 +1,14 @@ const password_rejected = { - /** UNTRANSLATED */ - too_short: 'Minimum length is {{min}}.', - /** UNTRANSLATED */ - too_long: 'Maximum length is {{max}}.', - /** UNTRANSLATED */ - character_types: 'At least {{min}} types of characters are required.', - /** UNTRANSLATED */ - unsupported_characters: 'Unsupported character found.', - /** UNTRANSLATED */ - pwned: 'Avoid using simple passwords that are easy to guess.', - /** UNTRANSLATED */ - restricted_found: 'Avoid overusing {{list, list}}.', - /** UNTRANSLATED */ - 'restricted.repetition': 'repeated characters', - /** UNTRANSLATED */ - 'restricted.sequence': 'sequential characters', - /** UNTRANSLATED */ - 'restricted.user_info': 'your personal information', - /** UNTRANSLATED */ - 'restricted.words': 'product context', + too_short: '最小の長さは{{min}}です。', + too_long: '最大の長さは{{max}}です。', + character_types: '少なくとも{{min}}種類の文字が必要です。', + unsupported_characters: 'サポートされていない文字が見つかりました。', + pwned: '簡単に推測できる簡単なパスワードの使用を避けてください。', + restricted_found: '{{list, list}}の過度な使用を避けてください。', + 'restricted.repetition': '繰り返された文字', + 'restricted.sequence': '連続する文字', + 'restricted.user_info': '個人情報', + 'restricted.words': '製品のコンテキスト', }; export default Object.freeze(password_rejected); diff --git a/packages/phrases-ui/src/locales/ja/list.ts b/packages/phrases-ui/src/locales/ja/list.ts index c69ba2459..908bda133 100644 --- a/packages/phrases-ui/src/locales/ja/list.ts +++ b/packages/phrases-ui/src/locales/ja/list.ts @@ -1,10 +1,9 @@ const list = { - /** UNTRANSLATED */ - or: 'or', - /** UNTRANSLATED */ - and: 'and', - /** UNTRANSLATED */ + or: 'または', + and: 'そして', separator: ',', }; -export default Object.freeze(list); +Object.freeze(list); + +export default list; diff --git a/packages/phrases-ui/src/locales/ko/description.ts b/packages/phrases-ui/src/locales/ko/description.ts index b47400d70..fb7acea07 100644 --- a/packages/phrases-ui/src/locales/ko/description.ts +++ b/packages/phrases-ui/src/locales/ko/description.ts @@ -55,18 +55,13 @@ const description = { no_region_code_found: '지역 코드를 찾을 수 없습니다.', verify_email: '이메일 인증', verify_phone: '휴대전화번호 인증', - /** UNTRANSLATED */ - password_requirements: 'Password {{items, list}}.', - /** UNTRANSLATED */ - 'password_requirement.length_one': 'requires a minimum of {{count}} character', - /** UNTRANSLATED */ - 'password_requirement.length_other': 'requires a minimum of {{count}} characters', - /** UNTRANSLATED */ + password_requirements: '비밀번호는 {{items, list}}로 이루어져야 합니다.', + 'password_requirement.length_one': '최소 {{count}}자 이상이어야 함', + 'password_requirement.length_other': '최소 {{count}} 문자 이상이어야 함', 'password_requirement.character_types_one': - 'should contain at least {{count}} type of uppercase letters, lowercase letters, digits, and symbols', - /** UNTRANSLATED */ + '최소 {{count}}개의 대문자, 소문자, 숫자, 특수 기호를 포함해야 함', 'password_requirement.character_types_other': - 'should contain at least {{count}} types of uppercase letters, lowercase letters, digits, and symbols', + '최소 {{count}}개의 대문자, 소문자, 숫자, 특수 기호를 포함해야 함', }; export default Object.freeze(description); diff --git a/packages/phrases-ui/src/locales/ko/error/password-rejected.ts b/packages/phrases-ui/src/locales/ko/error/password-rejected.ts index 076cecd67..760f8b655 100644 --- a/packages/phrases-ui/src/locales/ko/error/password-rejected.ts +++ b/packages/phrases-ui/src/locales/ko/error/password-rejected.ts @@ -1,24 +1,14 @@ const password_rejected = { - /** UNTRANSLATED */ - too_short: 'Minimum length is {{min}}.', - /** UNTRANSLATED */ - too_long: 'Maximum length is {{max}}.', - /** UNTRANSLATED */ - character_types: 'At least {{min}} types of characters are required.', - /** UNTRANSLATED */ - unsupported_characters: 'Unsupported character found.', - /** UNTRANSLATED */ - pwned: 'Avoid using simple passwords that are easy to guess.', - /** UNTRANSLATED */ - restricted_found: 'Avoid overusing {{list, list}}.', - /** UNTRANSLATED */ - 'restricted.repetition': 'repeated characters', - /** UNTRANSLATED */ - 'restricted.sequence': 'sequential characters', - /** UNTRANSLATED */ - 'restricted.user_info': 'your personal information', - /** UNTRANSLATED */ - 'restricted.words': 'product context', + too_short: '최소 길이는 {{min}}입니다.', + too_long: '최대 길이는 {{max}}입니다.', + character_types: '최소 {{min}}개의 문자 유형이 필요합니다.', + unsupported_characters: '지원되지 않는 문자가 발견되었습니다.', + pwned: '추측하기 쉬운 간단한 암호 사용을 피하십시오.', + restricted_found: '{{list, list}}을(를) 과도하게 사용하지 마십시오.', + 'restricted.repetition': '반복된 문자', + 'restricted.sequence': '연속된 문자', + 'restricted.user_info': '개인 정보', + 'restricted.words': '품질 가능성', }; export default Object.freeze(password_rejected); diff --git a/packages/phrases-ui/src/locales/ko/list.ts b/packages/phrases-ui/src/locales/ko/list.ts index c69ba2459..5775f68c1 100644 --- a/packages/phrases-ui/src/locales/ko/list.ts +++ b/packages/phrases-ui/src/locales/ko/list.ts @@ -1,9 +1,6 @@ const list = { - /** UNTRANSLATED */ - or: 'or', - /** UNTRANSLATED */ - and: 'and', - /** UNTRANSLATED */ + or: '또는', + and: '및', separator: ',', }; diff --git a/packages/phrases-ui/src/locales/pl-pl/description.ts b/packages/phrases-ui/src/locales/pl-pl/description.ts index d35628e64..692362770 100644 --- a/packages/phrases-ui/src/locales/pl-pl/description.ts +++ b/packages/phrases-ui/src/locales/pl-pl/description.ts @@ -58,18 +58,13 @@ const description = { no_region_code_found: 'Nie znaleziono kodu regionu', verify_email: 'Potwierdź swój email', verify_phone: 'Potwierdź swój numer telefonu', - /** UNTRANSLATED */ - password_requirements: 'Password {{items, list}}.', - /** UNTRANSLATED */ - 'password_requirement.length_one': 'requires a minimum of {{count}} character', - /** UNTRANSLATED */ - 'password_requirement.length_other': 'requires a minimum of {{count}} characters', - /** UNTRANSLATED */ + password_requirements: 'Wymagania dotyczące hasła {{items, list}}.', + 'password_requirement.length_one': 'wymaga co najmniej {{count}} znaku', + 'password_requirement.length_other': 'wymaga co najmniej {{count}} znaków', 'password_requirement.character_types_one': - 'should contain at least {{count}} type of uppercase letters, lowercase letters, digits, and symbols', - /** UNTRANSLATED */ + 'powinno zawierać co najmniej {{count}} rodzaj liter wielkich, małych liter, cyfr i symboli', 'password_requirement.character_types_other': - 'should contain at least {{count}} types of uppercase letters, lowercase letters, digits, and symbols', + 'powinno zawierać co najmniej {{count}} rodzaje liter wielkich, małych liter, cyfr i symboli', }; export default Object.freeze(description); diff --git a/packages/phrases-ui/src/locales/pl-pl/error/password-rejected.ts b/packages/phrases-ui/src/locales/pl-pl/error/password-rejected.ts index 076cecd67..2704bb703 100644 --- a/packages/phrases-ui/src/locales/pl-pl/error/password-rejected.ts +++ b/packages/phrases-ui/src/locales/pl-pl/error/password-rejected.ts @@ -1,24 +1,14 @@ const password_rejected = { - /** UNTRANSLATED */ - too_short: 'Minimum length is {{min}}.', - /** UNTRANSLATED */ - too_long: 'Maximum length is {{max}}.', - /** UNTRANSLATED */ - character_types: 'At least {{min}} types of characters are required.', - /** UNTRANSLATED */ - unsupported_characters: 'Unsupported character found.', - /** UNTRANSLATED */ - pwned: 'Avoid using simple passwords that are easy to guess.', - /** UNTRANSLATED */ - restricted_found: 'Avoid overusing {{list, list}}.', - /** UNTRANSLATED */ - 'restricted.repetition': 'repeated characters', - /** UNTRANSLATED */ - 'restricted.sequence': 'sequential characters', - /** UNTRANSLATED */ - 'restricted.user_info': 'your personal information', - /** UNTRANSLATED */ - 'restricted.words': 'product context', + too_short: 'Minimalna długość to {{min}}.', + too_long: 'Maksymalna długość to {{max}}.', + character_types: 'Wymagane są przynajmniej {{min}} rodzaje znaków.', + unsupported_characters: 'Znaleziono niedozwolony znak.', + pwned: 'Unikaj używania prostych haseł, które są łatwe do odgadnięcia.', + restricted_found: 'Unikaj nadużywania {{list, list}}.', + 'restricted.repetition': 'powtarzających się znaków', + 'restricted.sequence': 'sekwencyjnych znaków', + 'restricted.user_info': 'twoich informacji osobistych', + 'restricted.words': 'kontekstu produktu', }; export default Object.freeze(password_rejected); diff --git a/packages/phrases-ui/src/locales/pl-pl/list.ts b/packages/phrases-ui/src/locales/pl-pl/list.ts index c69ba2459..3bf5f96e4 100644 --- a/packages/phrases-ui/src/locales/pl-pl/list.ts +++ b/packages/phrases-ui/src/locales/pl-pl/list.ts @@ -1,9 +1,6 @@ const list = { - /** UNTRANSLATED */ - or: 'or', - /** UNTRANSLATED */ - and: 'and', - /** UNTRANSLATED */ + or: 'lub', + and: 'i', separator: ',', }; diff --git a/packages/phrases-ui/src/locales/pt-br/description.ts b/packages/phrases-ui/src/locales/pt-br/description.ts index 472523097..0f056a50b 100644 --- a/packages/phrases-ui/src/locales/pt-br/description.ts +++ b/packages/phrases-ui/src/locales/pt-br/description.ts @@ -57,18 +57,13 @@ const description = { no_region_code_found: 'Não foi possível encontrar o código de região do seu telefone.', verify_email: 'Verificar e-mail', verify_phone: 'Verificar número de telefone', - /** UNTRANSLATED */ - password_requirements: 'Password {{items, list}}.', - /** UNTRANSLATED */ - 'password_requirement.length_one': 'requires a minimum of {{count}} character', - /** UNTRANSLATED */ - 'password_requirement.length_other': 'requires a minimum of {{count}} characters', - /** UNTRANSLATED */ + password_requirements: 'Senha {{items, list}}.', + 'password_requirement.length_one': 'requer no mínimo 1 caractere.', + 'password_requirement.length_other': 'requer no mínimo {{count}} caracteres.', 'password_requirement.character_types_one': - 'should contain at least {{count}} type of uppercase letters, lowercase letters, digits, and symbols', - /** UNTRANSLATED */ + 'deve conter pelo menos 1 tipo de letra maiúscula, letra minúscula, dígito e símbolo.', 'password_requirement.character_types_other': - 'should contain at least {{count}} types of uppercase letters, lowercase letters, digits, and symbols', + 'deve conter pelo menos {{count}} tipos de letra maiúscula, letra minúscula, dígito e símbolo.', }; export default Object.freeze(description); diff --git a/packages/phrases-ui/src/locales/pt-br/error/password-rejected.ts b/packages/phrases-ui/src/locales/pt-br/error/password-rejected.ts index 076cecd67..bab0893d6 100644 --- a/packages/phrases-ui/src/locales/pt-br/error/password-rejected.ts +++ b/packages/phrases-ui/src/locales/pt-br/error/password-rejected.ts @@ -1,24 +1,14 @@ const password_rejected = { - /** UNTRANSLATED */ - too_short: 'Minimum length is {{min}}.', - /** UNTRANSLATED */ - too_long: 'Maximum length is {{max}}.', - /** UNTRANSLATED */ - character_types: 'At least {{min}} types of characters are required.', - /** UNTRANSLATED */ - unsupported_characters: 'Unsupported character found.', - /** UNTRANSLATED */ - pwned: 'Avoid using simple passwords that are easy to guess.', - /** UNTRANSLATED */ - restricted_found: 'Avoid overusing {{list, list}}.', - /** UNTRANSLATED */ - 'restricted.repetition': 'repeated characters', - /** UNTRANSLATED */ - 'restricted.sequence': 'sequential characters', - /** UNTRANSLATED */ - 'restricted.user_info': 'your personal information', - /** UNTRANSLATED */ - 'restricted.words': 'product context', + too_short: 'O comprimento mínimo é {{min}}.', + too_long: 'O comprimento máximo é {{max}}.', + character_types: 'Pelo menos {{min}} tipos de caracteres são necessários.', + unsupported_characters: 'Caractere não suportado encontrado.', + pwned: 'Evite o uso de senhas simples que são fáceis de adivinhar.', + restricted_found: 'Evite usar em excesso {{list, list}}.', + 'restricted.repetition': 'caracteres repetidos', + 'restricted.sequence': 'caracteres sequenciais', + 'restricted.user_info': 'suas informações pessoais', + 'restricted.words': 'contexto do produto', }; export default Object.freeze(password_rejected); diff --git a/packages/phrases-ui/src/locales/pt-br/list.ts b/packages/phrases-ui/src/locales/pt-br/list.ts index c69ba2459..3bf5087a7 100644 --- a/packages/phrases-ui/src/locales/pt-br/list.ts +++ b/packages/phrases-ui/src/locales/pt-br/list.ts @@ -1,9 +1,6 @@ const list = { - /** UNTRANSLATED */ - or: 'or', - /** UNTRANSLATED */ - and: 'and', - /** UNTRANSLATED */ + or: 'ou', + and: 'e', separator: ',', }; diff --git a/packages/phrases-ui/src/locales/pt-pt/description.ts b/packages/phrases-ui/src/locales/pt-pt/description.ts index 1d3c6591c..a7f73d78c 100644 --- a/packages/phrases-ui/src/locales/pt-pt/description.ts +++ b/packages/phrases-ui/src/locales/pt-pt/description.ts @@ -57,18 +57,13 @@ const description = { no_region_code_found: 'Não foi possível encontrar o código de região do seu telefone.', verify_email: 'Verifique o seu email', verify_phone: 'Verifique o seu número de telefone', - /** UNTRANSLATED */ - password_requirements: 'Password {{items, list}}.', - /** UNTRANSLATED */ - 'password_requirement.length_one': 'requires a minimum of {{count}} character', - /** UNTRANSLATED */ - 'password_requirement.length_other': 'requires a minimum of {{count}} characters', - /** UNTRANSLATED */ + password_requirements: 'Requisitos de senha {{items, list}}.', + 'password_requirement.length_one': 'requer um mínimo de {{count}} caracter', + 'password_requirement.length_other': 'requer um mínimo de {{count}} caracteres', 'password_requirement.character_types_one': - 'should contain at least {{count}} type of uppercase letters, lowercase letters, digits, and symbols', - /** UNTRANSLATED */ + 'deve conter pelo menos {{count}} tipo de letras maiúsculas, letras minúsculas, dígitos e símbolos', 'password_requirement.character_types_other': - 'should contain at least {{count}} types of uppercase letters, lowercase letters, digits, and symbols', + 'deve conter pelo menos {{count}} tipos de letras maiúsculas, letras minúsculas, dígitos e símbolos', }; export default Object.freeze(description); diff --git a/packages/phrases-ui/src/locales/pt-pt/error/password-rejected.ts b/packages/phrases-ui/src/locales/pt-pt/error/password-rejected.ts index 076cecd67..403dbb18a 100644 --- a/packages/phrases-ui/src/locales/pt-pt/error/password-rejected.ts +++ b/packages/phrases-ui/src/locales/pt-pt/error/password-rejected.ts @@ -1,24 +1,14 @@ const password_rejected = { - /** UNTRANSLATED */ - too_short: 'Minimum length is {{min}}.', - /** UNTRANSLATED */ - too_long: 'Maximum length is {{max}}.', - /** UNTRANSLATED */ - character_types: 'At least {{min}} types of characters are required.', - /** UNTRANSLATED */ - unsupported_characters: 'Unsupported character found.', - /** UNTRANSLATED */ - pwned: 'Avoid using simple passwords that are easy to guess.', - /** UNTRANSLATED */ - restricted_found: 'Avoid overusing {{list, list}}.', - /** UNTRANSLATED */ - 'restricted.repetition': 'repeated characters', - /** UNTRANSLATED */ - 'restricted.sequence': 'sequential characters', - /** UNTRANSLATED */ - 'restricted.user_info': 'your personal information', - /** UNTRANSLATED */ - 'restricted.words': 'product context', + too_short: 'Mínimo de comprimento é {{min}}.', + too_long: 'Máximo de comprimento é {{max}}.', + character_types: 'São necessários pelo menos {{min}} tipos de caracteres.', + unsupported_characters: 'Caractere não suportado encontrado.', + pwned: 'Evite o uso de senhas simples que são fáceis de adivinhar.', + restricted_found: 'Evite o uso excessivo de {{list, list}}.', + 'restricted.repetition': 'caracteres repetidos', + 'restricted.sequence': 'caracteres sequenciais', + 'restricted.user_info': 'suas informações pessoais', + 'restricted.words': 'contexto do produto', }; export default Object.freeze(password_rejected); diff --git a/packages/phrases-ui/src/locales/pt-pt/list.ts b/packages/phrases-ui/src/locales/pt-pt/list.ts index c69ba2459..3bf5087a7 100644 --- a/packages/phrases-ui/src/locales/pt-pt/list.ts +++ b/packages/phrases-ui/src/locales/pt-pt/list.ts @@ -1,9 +1,6 @@ const list = { - /** UNTRANSLATED */ - or: 'or', - /** UNTRANSLATED */ - and: 'and', - /** UNTRANSLATED */ + or: 'ou', + and: 'e', separator: ',', }; diff --git a/packages/phrases-ui/src/locales/ru/description.ts b/packages/phrases-ui/src/locales/ru/description.ts index e5d40e7d7..758c10422 100644 --- a/packages/phrases-ui/src/locales/ru/description.ts +++ b/packages/phrases-ui/src/locales/ru/description.ts @@ -61,18 +61,13 @@ const description = { no_region_code_found: 'Не удалось определить код региона', verify_email: 'Подтвердите Ваш электронный адрес', verify_phone: 'Подтвердите свой номер телефона', - /** UNTRANSLATED */ - password_requirements: 'Password {{items, list}}.', - /** UNTRANSLATED */ - 'password_requirement.length_one': 'requires a minimum of {{count}} character', - /** UNTRANSLATED */ - 'password_requirement.length_other': 'requires a minimum of {{count}} characters', - /** UNTRANSLATED */ + password_requirements: 'Требования к паролю {{items, list}}.', + 'password_requirement.length_one': 'требуется минимум {{count}} символ', + 'password_requirement.length_other': 'требуется минимум {{count}} символов', 'password_requirement.character_types_one': - 'should contain at least {{count}} type of uppercase letters, lowercase letters, digits, and symbols', - /** UNTRANSLATED */ + 'должен содержать по крайней мере {{count}} тип прописных букв, строчных букв, цифр и символов', 'password_requirement.character_types_other': - 'should contain at least {{count}} types of uppercase letters, lowercase letters, digits, and symbols', + 'должен содержать по крайней мере {{count}} типа прописных букв, строчных букв, цифр и символов', }; export default Object.freeze(description); diff --git a/packages/phrases-ui/src/locales/ru/error/password-rejected.ts b/packages/phrases-ui/src/locales/ru/error/password-rejected.ts index 076cecd67..2c4f86c0b 100644 --- a/packages/phrases-ui/src/locales/ru/error/password-rejected.ts +++ b/packages/phrases-ui/src/locales/ru/error/password-rejected.ts @@ -1,24 +1,14 @@ const password_rejected = { - /** UNTRANSLATED */ - too_short: 'Minimum length is {{min}}.', - /** UNTRANSLATED */ - too_long: 'Maximum length is {{max}}.', - /** UNTRANSLATED */ - character_types: 'At least {{min}} types of characters are required.', - /** UNTRANSLATED */ - unsupported_characters: 'Unsupported character found.', - /** UNTRANSLATED */ - pwned: 'Avoid using simple passwords that are easy to guess.', - /** UNTRANSLATED */ - restricted_found: 'Avoid overusing {{list, list}}.', - /** UNTRANSLATED */ - 'restricted.repetition': 'repeated characters', - /** UNTRANSLATED */ - 'restricted.sequence': 'sequential characters', - /** UNTRANSLATED */ - 'restricted.user_info': 'your personal information', - /** UNTRANSLATED */ - 'restricted.words': 'product context', + too_short: 'Минимальная длина {{min}} символов.', + too_long: 'Максимальная длина {{max}} символов.', + character_types: 'Требуется как минимум {{min}} типов символов.', + unsupported_characters: 'Найден неподдерживаемый символ.', + pwned: 'Избегайте использования простых паролей, которые легко угадать.', + restricted_found: 'Избегайте чрезмерного использования {{list,list}}.', + 'restricted.repetition': 'повторяющиеся символы', + 'restricted.sequence': 'последовательные символы', + 'restricted.user_info': 'ваши личные данные', + 'restricted.words': 'контекст продукта', }; export default Object.freeze(password_rejected); diff --git a/packages/phrases-ui/src/locales/ru/list.ts b/packages/phrases-ui/src/locales/ru/list.ts index c69ba2459..d2fe933fb 100644 --- a/packages/phrases-ui/src/locales/ru/list.ts +++ b/packages/phrases-ui/src/locales/ru/list.ts @@ -1,9 +1,6 @@ const list = { - /** UNTRANSLATED */ - or: 'or', - /** UNTRANSLATED */ - and: 'and', - /** UNTRANSLATED */ + or: 'или', + and: 'и', separator: ',', }; diff --git a/packages/phrases-ui/src/locales/tr-tr/description.ts b/packages/phrases-ui/src/locales/tr-tr/description.ts index 9776a2900..79dfc7c56 100644 --- a/packages/phrases-ui/src/locales/tr-tr/description.ts +++ b/packages/phrases-ui/src/locales/tr-tr/description.ts @@ -58,18 +58,13 @@ const description = { no_region_code_found: 'Bölge kodu bulunamadı', verify_email: 'E-postanızın doğrulanması', verify_phone: 'Telefon numaranızın doğrulanması', - /** UNTRANSLATED */ - password_requirements: 'Password {{items, list}}.', - /** UNTRANSLATED */ - 'password_requirement.length_one': 'requires a minimum of {{count}} character', - /** UNTRANSLATED */ - 'password_requirement.length_other': 'requires a minimum of {{count}} characters', - /** UNTRANSLATED */ + password_requirements: 'Şifre {{items, list}}.', + 'password_requirement.length_one': 'en az {{count}} karakter gerektirir', + 'password_requirement.length_other': 'en az {{count}} karakter gerektirir', 'password_requirement.character_types_one': - 'should contain at least {{count}} type of uppercase letters, lowercase letters, digits, and symbols', - /** UNTRANSLATED */ + 'en az {{count}} tane büyük harf, küçük harf, rakam ve sembol içermelidir', 'password_requirement.character_types_other': - 'should contain at least {{count}} types of uppercase letters, lowercase letters, digits, and symbols', + 'en az {{count}} tane büyük harf, küçük harf, rakam ve sembol içermelidir', }; export default Object.freeze(description); diff --git a/packages/phrases-ui/src/locales/tr-tr/error/password-rejected.ts b/packages/phrases-ui/src/locales/tr-tr/error/password-rejected.ts index 076cecd67..5ed0cf713 100644 --- a/packages/phrases-ui/src/locales/tr-tr/error/password-rejected.ts +++ b/packages/phrases-ui/src/locales/tr-tr/error/password-rejected.ts @@ -1,24 +1,14 @@ const password_rejected = { - /** UNTRANSLATED */ too_short: 'Minimum length is {{min}}.', - /** UNTRANSLATED */ too_long: 'Maximum length is {{max}}.', - /** UNTRANSLATED */ - character_types: 'At least {{min}} types of characters are required.', - /** UNTRANSLATED */ - unsupported_characters: 'Unsupported character found.', - /** UNTRANSLATED */ - pwned: 'Avoid using simple passwords that are easy to guess.', - /** UNTRANSLATED */ - restricted_found: 'Avoid overusing {{list, list}}.', - /** UNTRANSLATED */ - 'restricted.repetition': 'repeated characters', - /** UNTRANSLATED */ - 'restricted.sequence': 'sequential characters', - /** UNTRANSLATED */ - 'restricted.user_info': 'your personal information', - /** UNTRANSLATED */ - 'restricted.words': 'product context', + character_types: 'En az {{min}} türde karakter gereklidir.', + unsupported_characters: 'Desteklenmeyen karakter bulundu.', + pwned: 'Kolayca tahmin edilebilen basit şifreleri kullanmaktan kaçının.', + restricted_found: '{{list, list}} fazla kullanımdan kaçının.', + 'restricted.repetition': 'tekrarlanan karakterler', + 'restricted.sequence': 'dizisel karakterler', + 'restricted.user_info': 'kişisel bilgileriniz', + 'restricted.words': 'ürünle ilgili terimler', }; export default Object.freeze(password_rejected); diff --git a/packages/phrases-ui/src/locales/tr-tr/list.ts b/packages/phrases-ui/src/locales/tr-tr/list.ts index c69ba2459..da635e37b 100644 --- a/packages/phrases-ui/src/locales/tr-tr/list.ts +++ b/packages/phrases-ui/src/locales/tr-tr/list.ts @@ -1,9 +1,6 @@ const list = { - /** UNTRANSLATED */ - or: 'or', - /** UNTRANSLATED */ - and: 'and', - /** UNTRANSLATED */ + or: 'veya', + and: 've', separator: ',', }; diff --git a/packages/phrases-ui/src/locales/zh-cn/description.ts b/packages/phrases-ui/src/locales/zh-cn/description.ts index 4f06131c3..d56e0e6b0 100644 --- a/packages/phrases-ui/src/locales/zh-cn/description.ts +++ b/packages/phrases-ui/src/locales/zh-cn/description.ts @@ -51,18 +51,12 @@ const description = { no_region_code_found: '没有找到区域码', verify_email: '验证你的邮箱', verify_phone: '验证你的手机号', - /** UNTRANSLATED */ - password_requirements: 'Password {{items, list}}.', - /** UNTRANSLATED */ - 'password_requirement.length_one': 'requires a minimum of {{count}} character', - /** UNTRANSLATED */ - 'password_requirement.length_other': 'requires a minimum of {{count}} characters', - /** UNTRANSLATED */ - 'password_requirement.character_types_one': - 'should contain at least {{count}} type of uppercase letters, lowercase letters, digits, and symbols', - /** UNTRANSLATED */ + password_requirements: '密码 {{items, list}}。', + 'password_requirement.length_one': '应至少有{{count}}个字符', + 'password_requirement.length_other': '应至少有{{count}}个字符', + 'password_requirement.character_types_one': '应包含至少{{count}}种大写字母、小写字母、数字和符号', 'password_requirement.character_types_other': - 'should contain at least {{count}} types of uppercase letters, lowercase letters, digits, and symbols', + '应包含至少{{count}}种大写字母、小写字母、数字和符号', }; export default Object.freeze(description); diff --git a/packages/phrases-ui/src/locales/zh-cn/error/password-rejected.ts b/packages/phrases-ui/src/locales/zh-cn/error/password-rejected.ts index 076cecd67..a08f83c1d 100644 --- a/packages/phrases-ui/src/locales/zh-cn/error/password-rejected.ts +++ b/packages/phrases-ui/src/locales/zh-cn/error/password-rejected.ts @@ -1,24 +1,14 @@ const password_rejected = { - /** UNTRANSLATED */ - too_short: 'Minimum length is {{min}}.', - /** UNTRANSLATED */ - too_long: 'Maximum length is {{max}}.', - /** UNTRANSLATED */ - character_types: 'At least {{min}} types of characters are required.', - /** UNTRANSLATED */ - unsupported_characters: 'Unsupported character found.', - /** UNTRANSLATED */ - pwned: 'Avoid using simple passwords that are easy to guess.', - /** UNTRANSLATED */ - restricted_found: 'Avoid overusing {{list, list}}.', - /** UNTRANSLATED */ - 'restricted.repetition': 'repeated characters', - /** UNTRANSLATED */ - 'restricted.sequence': 'sequential characters', - /** UNTRANSLATED */ - 'restricted.user_info': 'your personal information', - /** UNTRANSLATED */ - 'restricted.words': 'product context', + too_short: '最短长度为{{min}}。', + too_long: '最长长度为{{max}}。', + character_types: '需要至少{{min}}种字符类型。', + unsupported_characters: '发现不支持的字符。', + pwned: '避免使用容易被猜到的简单密码。', + restricted_found: '避免过度使用{{list, list}}。', + 'restricted.repetition': '重复字符', + 'restricted.sequence': '连续字符', + 'restricted.user_info': '您的个人信息', + 'restricted.words': '产品上下文', }; export default Object.freeze(password_rejected); diff --git a/packages/phrases-ui/src/locales/zh-cn/list.ts b/packages/phrases-ui/src/locales/zh-cn/list.ts index c69ba2459..fba3d8745 100644 --- a/packages/phrases-ui/src/locales/zh-cn/list.ts +++ b/packages/phrases-ui/src/locales/zh-cn/list.ts @@ -1,10 +1,7 @@ const list = { - /** UNTRANSLATED */ - or: 'or', - /** UNTRANSLATED */ - and: 'and', - /** UNTRANSLATED */ - separator: ',', + or: '或者', + and: '和', + separator: ',', }; export default Object.freeze(list); diff --git a/packages/phrases-ui/src/locales/zh-hk/description.ts b/packages/phrases-ui/src/locales/zh-hk/description.ts index 4dcbabe30..990b2b07f 100644 --- a/packages/phrases-ui/src/locales/zh-hk/description.ts +++ b/packages/phrases-ui/src/locales/zh-hk/description.ts @@ -51,18 +51,13 @@ const description = { no_region_code_found: '沒有找到區域碼', verify_email: '驗證你的郵箱', verify_phone: '驗證你的手機號', - /** UNTRANSLATED */ - password_requirements: 'Password {{items, list}}.', - /** UNTRANSLATED */ - 'password_requirement.length_one': 'requires a minimum of {{count}} character', - /** UNTRANSLATED */ - 'password_requirement.length_other': 'requires a minimum of {{count}} characters', - /** UNTRANSLATED */ + password_requirements: '要求密碼 {{items, list}}。', + 'password_requirement.length_one': '要求至少{{count}}個字符', + 'password_requirement.length_other': '要求至少{{count}}個字符', 'password_requirement.character_types_one': - 'should contain at least {{count}} type of uppercase letters, lowercase letters, digits, and symbols', - /** UNTRANSLATED */ + '要求包含至少{{count}}類型的大寫字母,小寫字母,數字和符號', 'password_requirement.character_types_other': - 'should contain at least {{count}} types of uppercase letters, lowercase letters, digits, and symbols', + '要求包含至少{{count}}類型的大寫字母,小寫字母,數字和符號', }; export default Object.freeze(description); diff --git a/packages/phrases-ui/src/locales/zh-hk/error/password-rejected.ts b/packages/phrases-ui/src/locales/zh-hk/error/password-rejected.ts index 076cecd67..7b1270e23 100644 --- a/packages/phrases-ui/src/locales/zh-hk/error/password-rejected.ts +++ b/packages/phrases-ui/src/locales/zh-hk/error/password-rejected.ts @@ -1,24 +1,14 @@ const password_rejected = { - /** UNTRANSLATED */ - too_short: 'Minimum length is {{min}}.', - /** UNTRANSLATED */ - too_long: 'Maximum length is {{max}}.', - /** UNTRANSLATED */ - character_types: 'At least {{min}} types of characters are required.', - /** UNTRANSLATED */ - unsupported_characters: 'Unsupported character found.', - /** UNTRANSLATED */ - pwned: 'Avoid using simple passwords that are easy to guess.', - /** UNTRANSLATED */ - restricted_found: 'Avoid overusing {{list, list}}.', - /** UNTRANSLATED */ - 'restricted.repetition': 'repeated characters', - /** UNTRANSLATED */ - 'restricted.sequence': 'sequential characters', - /** UNTRANSLATED */ - 'restricted.user_info': 'your personal information', - /** UNTRANSLATED */ - 'restricted.words': 'product context', + too_short: '最少長度為{{min}}。', + too_long: '最大長度為{{max}}。', + character_types: '至少需要{{min}}種類的字符。', + unsupported_characters: '發現不支援的字符。', + pwned: '避免使用容易猜測的簡單密碼。', + restricted_found: '避免過度使用{{list, list}}。', + 'restricted.repetition': '重複的字符', + 'restricted.sequence': '連續的字符', + 'restricted.user_info': '個人資訊', + 'restricted.words': '產品上下文', }; export default Object.freeze(password_rejected); diff --git a/packages/phrases-ui/src/locales/zh-hk/list.ts b/packages/phrases-ui/src/locales/zh-hk/list.ts index c69ba2459..3a7fbfd30 100644 --- a/packages/phrases-ui/src/locales/zh-hk/list.ts +++ b/packages/phrases-ui/src/locales/zh-hk/list.ts @@ -1,10 +1,7 @@ const list = { - /** UNTRANSLATED */ - or: 'or', - /** UNTRANSLATED */ - and: 'and', - /** UNTRANSLATED */ - separator: ',', + or: '或', + and: '和', + separator: ',', }; export default Object.freeze(list); diff --git a/packages/phrases-ui/src/locales/zh-tw/description.ts b/packages/phrases-ui/src/locales/zh-tw/description.ts index 9f352a069..57e6491dc 100644 --- a/packages/phrases-ui/src/locales/zh-tw/description.ts +++ b/packages/phrases-ui/src/locales/zh-tw/description.ts @@ -51,18 +51,12 @@ const description = { no_region_code_found: '沒有找到區域碼', verify_email: '驗證你的郵箱', verify_phone: '驗證你的手機號碼', - /** UNTRANSLATED */ - password_requirements: 'Password {{items, list}}.', - /** UNTRANSLATED */ - 'password_requirement.length_one': 'requires a minimum of {{count}} character', - /** UNTRANSLATED */ - 'password_requirement.length_other': 'requires a minimum of {{count}} characters', - /** UNTRANSLATED */ - 'password_requirement.character_types_one': - 'should contain at least {{count}} type of uppercase letters, lowercase letters, digits, and symbols', - /** UNTRANSLATED */ + password_requirements: '密碼{{items, list}}。', + 'password_requirement.length_one': '長度至少為{{count}}個字符', + 'password_requirement.length_other': '長度至少為{{count}}個字符', + 'password_requirement.character_types_one': '需包含{{count}}類型的大寫字母、小寫字母、數字和符號', 'password_requirement.character_types_other': - 'should contain at least {{count}} types of uppercase letters, lowercase letters, digits, and symbols', + '需包含{{count}}類型的大寫字母、小寫字母、數字和符號', }; export default Object.freeze(description); diff --git a/packages/phrases-ui/src/locales/zh-tw/error/password-rejected.ts b/packages/phrases-ui/src/locales/zh-tw/error/password-rejected.ts index 076cecd67..ac8fe35b4 100644 --- a/packages/phrases-ui/src/locales/zh-tw/error/password-rejected.ts +++ b/packages/phrases-ui/src/locales/zh-tw/error/password-rejected.ts @@ -1,24 +1,14 @@ const password_rejected = { - /** UNTRANSLATED */ - too_short: 'Minimum length is {{min}}.', - /** UNTRANSLATED */ - too_long: 'Maximum length is {{max}}.', - /** UNTRANSLATED */ - character_types: 'At least {{min}} types of characters are required.', - /** UNTRANSLATED */ - unsupported_characters: 'Unsupported character found.', - /** UNTRANSLATED */ - pwned: 'Avoid using simple passwords that are easy to guess.', - /** UNTRANSLATED */ - restricted_found: 'Avoid overusing {{list, list}}.', - /** UNTRANSLATED */ - 'restricted.repetition': 'repeated characters', - /** UNTRANSLATED */ - 'restricted.sequence': 'sequential characters', - /** UNTRANSLATED */ - 'restricted.user_info': 'your personal information', - /** UNTRANSLATED */ - 'restricted.words': 'product context', + too_short: '最少需要 {{min}} 位字元。', + too_long: '最多只能有 {{max}} 位字元。', + character_types: '至少需要 {{min}} 種不同的字元類型。', + unsupported_characters: '發現不支援的字元。', + pwned: '請避免使用容易被猜中的簡單密碼。', + restricted_found: '請避免過度使用 {{list, list}}。', + 'restricted.repetition': '連續重複的字元', + 'restricted.sequence': '連續的字元', + 'restricted.user_info': '個人資訊', + 'restricted.words': '使用產品相關的字詞', }; export default Object.freeze(password_rejected); diff --git a/packages/phrases-ui/src/locales/zh-tw/list.ts b/packages/phrases-ui/src/locales/zh-tw/list.ts index c69ba2459..3a7fbfd30 100644 --- a/packages/phrases-ui/src/locales/zh-tw/list.ts +++ b/packages/phrases-ui/src/locales/zh-tw/list.ts @@ -1,10 +1,7 @@ const list = { - /** UNTRANSLATED */ - or: 'or', - /** UNTRANSLATED */ - and: 'and', - /** UNTRANSLATED */ - separator: ',', + or: '或', + and: '和', + separator: ',', }; export default Object.freeze(list); diff --git a/packages/phrases/src/locales/de/errors/password.ts b/packages/phrases/src/locales/de/errors/password.ts index 999c7e524..84360b682 100644 --- a/packages/phrases/src/locales/de/errors/password.ts +++ b/packages/phrases/src/locales/de/errors/password.ts @@ -1,8 +1,8 @@ const password = { unsupported_encryption_method: 'Die Verschlüsselungsmethode {{name}} wird nicht unterstützt.', pepper_not_found: 'Password pepper not found. Please check your core envs.', - /** UNTRANSLATED */ - rejected: 'Password rejected. Please check if your password meets the requirements.', + rejected: + 'Das Passwort wurde abgelehnt. Bitte überprüfen Sie, ob Ihr Passwort den Anforderungen entspricht.', }; export default Object.freeze(password); diff --git a/packages/phrases/src/locales/de/errors/sign-in-experiences.ts b/packages/phrases/src/locales/de/errors/sign-in-experiences.ts index b46afad1b..05ea2ef48 100644 --- a/packages/phrases/src/locales/de/errors/sign-in-experiences.ts +++ b/packages/phrases/src/locales/de/errors/sign-in-experiences.ts @@ -19,10 +19,8 @@ const sign_in_experiences = { unsupported_default_language: 'Die Sprache - {{language}} wird momentan nicht unterstützt.', at_least_one_authentication_factor: 'Sie müssen mindestens einen Authentifizierungsfaktor auswählen.', - /** UNTRANSLATED */ - backup_code_cannot_be_enabled_alone: 'Backup code cannot be enabled alone.', - /** UNTRANSLATED */ - duplicated_mfa_factors: 'Duplicated MFA factors.', + backup_code_cannot_be_enabled_alone: 'Backup-Code kann nicht alleine aktiviert werden.', + duplicated_mfa_factors: 'Duplizierte MFA-Faktoren.', }; export default Object.freeze(sign_in_experiences); diff --git a/packages/phrases/src/locales/de/translation/admin-console/index.ts b/packages/phrases/src/locales/de/translation/admin-console/index.ts index 278ad6a90..6c96d3ebe 100644 --- a/packages/phrases/src/locales/de/translation/admin-console/index.ts +++ b/packages/phrases/src/locales/de/translation/admin-console/index.ts @@ -28,7 +28,7 @@ import tab_sections from './tab-sections.js'; import tabs from './tabs.js'; import tenants from './tenants.js'; import topbar from './topbar.js'; -import upsell from './upsell.js'; +import upsell from './upsell/index.js'; import user_details from './user-details.js'; import users from './users.js'; import webhook_details from './webhook-details.js'; diff --git a/packages/phrases/src/locales/de/translation/admin-console/sign-in-exp/index.ts b/packages/phrases/src/locales/de/translation/admin-console/sign-in-exp/index.ts index 5853d42d3..d2a2eb586 100644 --- a/packages/phrases/src/locales/de/translation/admin-console/sign-in-exp/index.ts +++ b/packages/phrases/src/locales/de/translation/admin-console/sign-in-exp/index.ts @@ -11,8 +11,7 @@ const sign_in_exp = { branding: 'Branding', sign_up_and_sign_in: 'Anmeldung und Registrierung', content: 'Inhalt', - /** UNTRANSLATED */ - password_policy: 'Password policy', + password_policy: 'Passwortrichtlinie', }, welcome: { title: 'Anmeldungs-Erlebnis anpassen', diff --git a/packages/phrases/src/locales/de/translation/admin-console/sign-in-exp/password-policy.ts b/packages/phrases/src/locales/de/translation/admin-console/sign-in-exp/password-policy.ts index f54c9f77b..1bed1dfb1 100644 --- a/packages/phrases/src/locales/de/translation/admin-console/sign-in-exp/password-policy.ts +++ b/packages/phrases/src/locales/de/translation/admin-console/sign-in-exp/password-policy.ts @@ -1,45 +1,28 @@ const password_policy = { - /** UNTRANSLATED */ - password_requirements: 'Password requirements', - /** UNTRANSLATED */ - minimum_length: 'Minimum length', - /** UNTRANSLATED */ - minimum_length_description: 'NIST suggests using at least 8 characters for web products.', - /** UNTRANSLATED */ - minimum_length_error: 'Minimum length must be between {{min}} and {{max}} (inclusive).', - /** UNTRANSLATED */ - minimum_required_char_types: 'Minimum required character types', - /** UNTRANSLATED */ + password_requirements: 'Passwortanforderungen', + minimum_length: 'Mindestlänge', + minimum_length_description: + 'NIST schlägt vor, mindestens 8 Zeichen für Webprodukte zu verwenden.', + minimum_length_error: 'Die Mindestlänge muss zwischen {{min}} und {{max}} (einschließlich) sein.', + minimum_required_char_types: 'Mindestanzahl erforderlicher Zeichentypen', minimum_required_char_types_description: - 'Character types: uppercase (A-Z), lowercase (a-z), numbers (0-9), and special symbols ({{symbols}}).', - /** UNTRANSLATED */ - password_rejection: 'Password rejection', - /** UNTRANSLATED */ - compromised_passwords: 'Reject compromised password', - /** UNTRANSLATED */ - breached_passwords: 'Breached passwords', - /** UNTRANSLATED */ - breached_passwords_description: 'Reject passwords previously found in breach databases.', - /** UNTRANSLATED */ - restricted_phrases: 'Restrict low-security phrases', - /** UNTRANSLATED */ + 'Zeichentypen: Großbuchstaben (A-Z), Kleinbuchstaben (a-z), Zahlen (0-9) und Sonderzeichen ({{symbols}}).', + password_rejection: 'Passwortablehnung', + compromised_passwords: 'Abgelehnte Passwörter', + breached_passwords: 'Verletzte Passwörter', + breached_passwords_description: + 'Ablehnung von zuvor in den Verletzungsdatenbanken gefundenen Passwörtern.', + restricted_phrases: 'Einschränkung niedrigsicherer Phrasen', restricted_phrases_tooltip: - 'Users cannot use passwords that are exactly the same as or made up of the listed phrases below. The addition of 3 or more non-consecutive characters is allowed to increase password complexity.', - /** UNTRANSLATED */ - repetitive_or_sequential_characters: 'Repetitive or sequential characters', - /** UNTRANSLATED */ - repetitive_or_sequential_characters_description: 'E.g., "AAAA", "1234", and "abcd".', - /** UNTRANSLATED */ - user_information: 'User information', - /** UNTRANSLATED */ - user_information_description: 'E.g., email address, phone number, username, etc.', - /** UNTRANSLATED */ - custom_words: 'Custom words', - /** UNTRANSLATED */ + 'Ihr Passwort sollte diese Phrasen vermeiden, es sei denn, Sie kombinieren sie mit 3 oder mehr zusätzlichen Zeichen.', + repetitive_or_sequential_characters: 'Wiederholte oder aufeinanderfolgende Zeichen', + repetitive_or_sequential_characters_description: 'Zum Beispiel "AAAA", "1234" und "abcd".', + user_information: 'Benutzerinformationen', + user_information_description: 'Zum Beispiel E-Mail-Adresse, Telefonnummer, Benutzername, etc.', + custom_words: 'Benutzerdefinierte Wörter', custom_words_description: - 'Personalize context-specific words, case-insensitive, and one per line.', - /** UNTRANSLATED */ - custom_words_placeholder: 'Your service name, company name, etc.', + 'Personalisierte kontextspezifische Wörter, Groß-/Kleinschreibung wird nicht beachtet, ein Wort pro Zeile.', + custom_words_placeholder: 'Name Ihres Dienstes, Firmenname, etc.', }; export default Object.freeze(password_policy); diff --git a/packages/phrases/src/locales/de/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts b/packages/phrases/src/locales/de/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts index 7e2a1bc40..863d75a0a 100644 --- a/packages/phrases/src/locales/de/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts +++ b/packages/phrases/src/locales/de/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts @@ -54,13 +54,10 @@ const sign_up_and_sign_in = { 'Dies ist unerlässlich, da Sie {{identifier}} als obligatorischen Identifier ausgewählt haben.', }, advanced_options: { - /** UNTRANSLATED */ - title: 'ADVANCED OPTIONS', - /** UNTRANSLATED */ - enable_user_registration: 'Enable user registration', - /** UNTRANSLATED */ + title: 'ERWEITERTE OPTIONEN', + enable_user_registration: 'Benutzerregistrierung aktivieren', enable_user_registration_description: - 'Enable or disallow user registration. Once disabled, users can still be added in the admin console but users can no longer establish accounts through the sign-in UI.', + 'Aktivieren oder deaktivieren Sie die Benutzerregistrierung. Sobald deaktiviert, können Benutzer immer noch über die Admin-Konsole hinzugefügt werden, aber Benutzer können keine Konten mehr über die Anmelde-Benutzeroberfläche einrichten.', }, }; diff --git a/packages/phrases/src/locales/de/translation/admin-console/upsell.ts b/packages/phrases/src/locales/de/translation/admin-console/upsell.ts deleted file mode 100644 index 72fadd9b8..000000000 --- a/packages/phrases/src/locales/de/translation/admin-console/upsell.ts +++ /dev/null @@ -1,87 +0,0 @@ -const upsell = { - pro_tag: 'PRO', - upgrade_plan: 'Upgrade-Plan', - compare_plans: 'Pläne vergleichen', - get_started: { - title: 'Starten Sie Ihre nahtlose Identitätsreise mit einem kostenlosen Plan!', - description: - 'Der kostenlose Plan eignet sich perfekt, um Logto in Ihren eigenen Projekten oder Tests auszuprobieren. Um die volle Leistungsfähigkeit von Logto für Ihr Team zu nutzen, können Sie ein Upgrade durchführen, um uneingeschränkten Zugriff auf Premium-Funktionen zu erhalten: unbegrenzte MAU-Nutzung, Maschine-zu-Maschine-Integration, RBAC-Verwaltung, Langzeit-Audit-Protokolle, usw. Alle Pläne anzeigen', - }, - create_tenant: { - title: 'Wählen Sie Ihren Tenant-Plan aus', - description: - 'Logto bietet wettbewerbsfähige Planoptionen mit innovativer und erschwinglicher Preisgestaltung, die für wachsende Unternehmen entwickelt wurden. Erfahren Sie mehr', - base_price: 'Grundpreis', - monthly_price: '{{value, number}}/Monat', - mau_unit_price: 'MAU-Einheitspreis', - view_all_features: 'Alle Funktionen anzeigen', - select_plan: ' auswählen', - free_tenants_limit: 'Bis zu {{count, number}} kostenlose Tenant', - free_tenants_limit_other: 'Bis zu {{count, number}} kostenlose Tenants', - most_popular: 'Am beliebtesten', - upgrade_success: 'Erfolgreich auf upgegradet', - }, - paywall: { - applications: - '{{count, number}} Anwendung von erreicht. Plan upgraden, um den Bedürfnissen Ihres Teams gerecht zu werden. Für Unterstützung können Sie uns gerne kontaktieren.', - applications_other: - '{{count, number}} Anwendungen von erreicht. Plan upgraden, um den Bedürfnissen Ihres Teams gerecht zu werden. Für Unterstützung können Sie uns gerne kontaktieren.', - machine_to_machine_feature: - 'Upgraden Sie auf einen kostenpflichtigen Tarif, um eine Maschinen-zu-Maschinen-Anwendung zu erstellen und Zugriff auf alle Premium-Funktionen zu erhalten. Für Unterstützung können Sie uns gerne kontaktieren.', - machine_to_machine: - '{{count, number}} Maschine-zu-Maschine-Anwendung von erreicht. Plan upgraden, um den Bedürfnissen Ihres Teams gerecht zu werden. Für Unterstützung können Sie uns gerne kontaktieren.', - machine_to_machine_other: - '{{count, number}} Maschine-zu-Maschine-Anwendungen von erreicht. Plan upgraden, um den Bedürfnissen Ihres Teams gerecht zu werden. Für Unterstützung können Sie uns gerne kontaktieren.', - resources: - 'Sie haben das Limit von {{count, number}} -API-Ressourcen erreicht. Upgraden Sie Ihren Plan, um den Anforderungen Ihres Teams gerecht zu werden. Kontaktieren Sie uns bei Bedarf.', - resources_other: - 'Sie haben das Limit von {{count, number}} -API-Ressourcen erreicht. Upgraden Sie Ihren Plan, um den Anforderungen Ihres Teams gerecht zu werden. Kontaktieren Sie uns bei Bedarf.', - scopes_per_resource: - 'Sie haben das Limit von {{count, number}} Berechtigungen pro API-Ressource von erreicht. Upgraden Sie jetzt, um zu erweitern. Kontaktieren Sie uns bei Bedarf.', - scopes_per_resource_other: - 'Sie haben das Limit von {{count, number}} Berechtigungen pro API-Ressource von erreicht. Upgraden Sie jetzt, um zu erweitern. Kontaktieren Sie uns bei Bedarf.', - custom_domain: - 'Schalten Sie die Funktion für individuelle Domains frei und profitieren Sie von einer Reihe von Premium-Vorteilen, indem Sie auf einen kostenpflichtigen Plan upgraden. Zögern Sie nicht, Kontaktieren Sie uns, wenn Sie Hilfe benötigen.', - social_connectors: - 'Sie haben das Limit von {{count, number}} -Sozialconnectoren erreicht. Upgraden Sie Ihren Plan, um zusätzliche Sozialconnectoren und die Möglichkeit zur Erstellung eigener Connectoren mit OIDC, OAuth 2.0 und SAML-Protokollen zu erhalten. Zögern Sie nicht, Kontaktieren Sie uns, wenn Sie Hilfe benötigen.', - social_connectors_other: - 'Sie haben das Limit von {{count, number}} -Sozialconnectoren erreicht. Upgraden Sie Ihren Plan, um zusätzliche Sozialconnectoren und die Möglichkeit zur Erstellung eigener Connectoren mit OIDC, OAuth 2.0 und SAML-Protokollen zu erhalten. Zögern Sie nicht, Kontaktieren Sie uns, wenn Sie Hilfe benötigen.', - standard_connectors_feature: - 'Upgraden Sie auf einen kostenpflichtigen Plan, um eigene Connectoren mit OIDC, OAuth 2.0 und SAML-Protokollen zu erstellen, sowie unbegrenzte Sozialconnectoren und alle Premium-Funktionen zu erhalten. Zögern Sie nicht, Kontaktieren Sie uns, wenn Sie Hilfe benötigen.', - standard_connectors: - 'Sie haben das Limit von {{count, number}} -Sozialconnectoren erreicht. Upgraden Sie Ihren Plan, um zusätzliche Sozialconnectoren und die Möglichkeit zur Erstellung eigener Connectoren mit OIDC, OAuth 2.0 und SAML-Protokollen zu erhalten. Zögern Sie nicht, Kontaktieren Sie uns, wenn Sie Hilfe benötigen.', - standard_connectors_other: - 'Sie haben das Limit von {{count, number}} -Sozialconnectoren erreicht. Upgraden Sie Ihren Plan, um zusätzliche Sozialconnectoren und die Möglichkeit zur Erstellung eigener Connectoren mit OIDC, OAuth 2.0 und SAML-Protokollen zu erhalten. Zögern Sie nicht, Kontaktieren Sie uns, wenn Sie Hilfe benötigen.', - standard_connectors_pro: - 'Sie haben das Limit von {{count, number}} -Standardconnectoren erreicht. Upgraden Sie auf den Enterprise-Plan, um zusätzliche Sozialconnectoren und die Möglichkeit zur Erstellung eigener Connectoren mit OIDC, OAuth 2.0 und SAML-Protokollen zu erhalten. Zögern Sie nicht, Kontaktieren Sie uns, wenn Sie Hilfe benötigen.', - standard_connectors_pro_other: - 'Sie haben das Limit von {{count, number}} -Standardconnectoren erreicht. Upgraden Sie auf den Enterprise-Plan, um zusätzliche Sozialconnectoren und die Möglichkeit zur Erstellung eigener Connectoren mit OIDC, OAuth 2.0 und SAML-Protokollen zu erhalten. Zögern Sie nicht, Kontaktieren Sie uns, wenn Sie Hilfe benötigen.', - roles: - 'Sie haben das Limit von {{count, number}} -Rollen erreicht. Upgraden Sie Ihren Plan, um zusätzliche Rollen und Berechtigungen hinzuzufügen. Zögern Sie nicht, Kontaktieren Sie uns, wenn Sie Hilfe benötigen.', - roles_other: - 'Sie haben das Limit von {{count, number}} -Rollen erreicht. Upgraden Sie Ihren Plan, um zusätzliche Rollen und Berechtigungen hinzuzufügen. Zögern Sie nicht, Kontaktieren Sie uns, wenn Sie Hilfe benötigen.', - scopes_per_role: - 'Sie haben das Limit von {{count, number}} Berechtigungen pro Rolle von erreicht. Upgraden Sie Ihren Plan, um zusätzliche Rollen und Berechtigungen hinzuzufügen. Bei Fragen stehen wir Ihnen gerne zur Verfügung. Kontaktieren Sie uns.', - scopes_per_role_other: - 'Sie haben das Limit von {{count, number}} Berechtigungen pro Rolle von erreicht. Upgraden Sie Ihren Plan, um zusätzliche Rollen und Berechtigungen hinzuzufügen. Bei Fragen stehen wir Ihnen gerne zur Verfügung. Kontaktieren Sie uns.', - hooks: - 'Sie haben das Limit von {{count, number}} -Webhooks erreicht. Upgraden Sie Ihren Plan, um mehr Webhooks zu erstellen. Zögern Sie nicht, Kontaktieren Sie uns, wenn Sie Hilfe benötigen.', - hooks_other: - 'Sie haben das Limit von {{count, number}} -Webhooks erreicht. Upgraden Sie Ihren Plan, um mehr Webhooks zu erstellen. Zögern Sie nicht, Kontaktieren Sie uns, wenn Sie Hilfe benötigen.', - }, - mau_exceeded_modal: { - title: 'MAU-Limit überschritten. Upgraden Sie Ihren Plan.', - notification: - 'Ihr aktueller MAU hat das Limit von überschritten. Bitte upgraden Sie umgehend auf den Premium-Plan, um die Aussetzung des Logto-Dienstes zu vermeiden.', - update_plan: 'Plan aktualisieren', - }, - payment_overdue_modal: { - title: 'Zahlungsrückstand für Rechnung', - notification: - 'Hoppla! Die Zahlung für die Rechnung des Mieters {{name}} ist fehlgeschlagen. Bitte zahlen Sie die Rechnung umgehend, um eine Sperrung des Logto-Dienstes zu vermeiden.', - unpaid_bills: 'Ausstehende Rechnungen', - update_payment: 'Zahlung aktualisieren', - }, -}; - -export default Object.freeze(upsell); diff --git a/packages/phrases/src/locales/de/translation/admin-console/upsell/index.ts b/packages/phrases/src/locales/de/translation/admin-console/upsell/index.ts new file mode 100644 index 000000000..616a01d34 --- /dev/null +++ b/packages/phrases/src/locales/de/translation/admin-console/upsell/index.ts @@ -0,0 +1,42 @@ +import paywall from './paywall.js'; + +const upsell = { + pro_tag: 'PRO', + upgrade_plan: 'Upgrade Plan', + compare_plans: 'Pläne vergleichen', + get_started: { + title: 'Starten Sie Ihre nahtlose Identitätsreise mit einem kostenlosen Plan!', + description: + 'Der kostenlose Plan eignet sich perfekt, um Logto in Ihren eigenen Projekten oder Tests auszuprobieren. Um die volle Leistungsfähigkeit von Logto für Ihr Team zu nutzen, können Sie ein Upgrade durchführen, um uneingeschränkten Zugriff auf Premium-Funktionen zu erhalten: unbegrenzte MAU-Nutzung, Maschine-zu-Maschine-Integration, RBAC-Verwaltung, Langzeit-Audit-Protokolle, usw. Alle Pläne anzeigen', + }, + create_tenant: { + title: 'Wählen Sie Ihren Tenant-Plan aus', + description: + 'Logto bietet wettbewerbsfähige Planoptionen mit innovativer und erschwinglicher Preisgestaltung, die für wachsende Unternehmen entwickelt wurden. Erfahren Sie mehr', + base_price: 'Grundpreis', + monthly_price: '{{value, number}}/Monat', + mau_unit_price: 'MAU-Einheitspreis', + view_all_features: 'Alle Funktionen anzeigen', + select_plan: ' auswählen', + free_tenants_limit: 'Bis zu {{count, number}} kostenlose Tenant', + free_tenants_limit_other: 'Bis zu {{count, number}} kostenlose Tenants', + most_popular: 'Am beliebtesten', + upgrade_success: 'Erfolgreich auf upgegradet', + }, + mau_exceeded_modal: { + title: 'MAU-Limit überschritten. Upgraden Sie Ihren Plan.', + notification: + 'Ihr aktueller MAU hat das Limit von überschritten. Bitte upgraden Sie umgehend auf den Premium-Plan, um die Aussetzung des Logto-Dienstes zu vermeiden.', + update_plan: 'Plan aktualisieren', + }, + payment_overdue_modal: { + title: 'Zahlungsrückstand für Rechnung', + notification: + 'Hoppla! Die Zahlung für die Rechnung des Mieters {{name}} ist fehlgeschlagen. Bitte zahlen Sie die Rechnung umgehend, um eine Sperrung des Logto-Dienstes zu vermeiden.', + unpaid_bills: 'Ausstehende Rechnungen', + update_payment: 'Zahlung aktualisieren', + }, + paywall, +}; + +export default Object.freeze(upsell); diff --git a/packages/phrases/src/locales/de/translation/admin-console/upsell/paywall.ts b/packages/phrases/src/locales/de/translation/admin-console/upsell/paywall.ts new file mode 100644 index 000000000..923a287fd --- /dev/null +++ b/packages/phrases/src/locales/de/translation/admin-console/upsell/paywall.ts @@ -0,0 +1,50 @@ +const paywall = { + applications: + '{{count, number}} Anwendung von erreicht. Plan upgraden, um den Bedürfnissen Ihres Teams gerecht zu werden. Für Unterstützung können Sie uns gerne kontaktieren.', + applications_other: + '{{count, number}} Anwendungen von erreicht. Plan upgraden, um den Bedürfnissen Ihres Teams gerecht zu werden. Für Unterstützung können Sie uns gerne kontaktieren.', + machine_to_machine_feature: + 'Upgraden Sie auf einen kostenpflichtigen Tarif, um eine Maschinen-zu-Maschinen-Anwendung zu erstellen und Zugriff auf alle Premium-Funktionen zu erhalten. Für Unterstützung können Sie uns gerne kontaktieren.', + machine_to_machine: + '{{count, number}} Maschine-zu-Maschine-Anwendung von erreicht. Plan upgraden, um den Bedürfnissen Ihres Teams gerecht zu werden. Für Unterstützung können Sie uns gerne kontaktieren.', + machine_to_machine_other: + '{{count, number}} Maschine-zu-Maschine-Anwendungen von erreicht. Plan upgraden, um den Bedürfnissen Ihres Teams gerecht zu werden. Für Unterstützung können Sie uns gerne kontaktieren.', + resources: + 'Sie haben das Limit von {{count, number}} -API-Ressourcen erreicht. Upgraden Sie Ihren Plan, um den Anforderungen Ihres Teams gerecht zu werden. Kontaktieren Sie uns bei Bedarf.', + resources_other: + 'Sie haben das Limit von {{count, number}} -API-Ressourcen erreicht. Upgraden Sie Ihren Plan, um den Anforderungen Ihres Teams gerecht zu werden. Kontaktieren Sie uns bei Bedarf.', + scopes_per_resource: + 'Sie haben das Limit von {{count, number}} Berechtigungen pro API-Ressource von erreicht. Upgraden Sie jetzt, um zu erweitern. Kontaktieren Sie uns bei Bedarf.', + scopes_per_resource_other: + 'Sie haben das Limit von {{count, number}} Berechtigungen pro API-Ressource von erreicht. Upgraden Sie jetzt, um zu erweitern. Kontaktieren Sie uns bei Bedarf.', + custom_domain: + 'Schalten Sie die Funktion für individuelle Domains frei und profitieren Sie von einer Reihe von Premium-Vorteilen, indem Sie auf einen kostenpflichtigen Plan upgraden. Zögern Sie nicht, Kontaktieren Sie uns, wenn Sie Hilfe benötigen.', + social_connectors: + 'Sie haben das Limit von {{count, number}} -Sozialconnectoren erreicht. Upgraden Sie Ihren Plan, um zusätzliche Sozialconnectoren und die Möglichkeit zur Erstellung eigener Connectoren mit OIDC, OAuth 2.0 und SAML-Protokollen zu erhalten. Zögern Sie nicht, Kontaktieren Sie uns, wenn Sie Hilfe benötigen.', + social_connectors_other: + 'Sie haben das Limit von {{count, number}} -Sozialconnectoren erreicht. Upgraden Sie Ihren Plan, um zusätzliche Sozialconnectoren und die Möglichkeit zur Erstellung eigener Connectoren mit OIDC, OAuth 2.0 und SAML-Protokollen zu erhalten. Zögern Sie nicht, Kontaktieren Sie uns, wenn Sie Hilfe benötigen.', + standard_connectors_feature: + 'Upgraden Sie auf einen kostenpflichtigen Plan, um eigene Connectoren mit OIDC, OAuth 2.0 und SAML-Protokollen zu erstellen, sowie unbegrenzte Sozialconnectoren und alle Premium-Funktionen zu erhalten. Zögern Sie nicht, Kontaktieren Sie uns, wenn Sie Hilfe benötigen.', + standard_connectors: + 'Sie haben das Limit von {{count, number}} -Sozialconnectoren erreicht. Upgraden Sie Ihren Plan, um zusätzliche Sozialconnectoren und die Möglichkeit zur Erstellung eigener Connectoren mit OIDC, OAuth 2.0 und SAML-Protokollen zu erhalten. Zögern Sie nicht, Kontaktieren Sie uns, wenn Sie Hilfe benötigen.', + standard_connectors_other: + 'Sie haben das Limit von {{count, number}} -Sozialconnectoren erreicht. Upgraden Sie Ihren Plan, um zusätzliche Sozialconnectoren und die Möglichkeit zur Erstellung eigener Connectoren mit OIDC, OAuth 2.0 und SAML-Protokollen zu erhalten. Zögern Sie nicht, Kontaktieren Sie uns, wenn Sie Hilfe benötigen.', + standard_connectors_pro: + 'Sie haben das Limit von {{count, number}} -Standardconnectoren erreicht. Upgraden Sie auf den Enterprise-Plan, um zusätzliche Sozialconnectoren und die Möglichkeit zur Erstellung eigener Connectoren mit OIDC, OAuth 2.0 und SAML-Protokollen zu erhalten. Zögern Sie nicht, Kontaktieren Sie uns, wenn Sie Hilfe benötigen.', + standard_connectors_pro_other: + 'Sie haben das Limit von {{count, number}} -Standardconnectoren erreicht. Upgraden Sie auf den Enterprise-Plan, um zusätzliche Sozialconnectoren und die Möglichkeit zur Erstellung eigener Connectoren mit OIDC, OAuth 2.0 und SAML-Protokollen zu erhalten. Zögern Sie nicht, Kontaktieren Sie uns, wenn Sie Hilfe benötigen.', + roles: + 'Sie haben das Limit von {{count, number}} -Rollen erreicht. Upgraden Sie Ihren Plan, um zusätzliche Rollen und Berechtigungen hinzuzufügen. Zögern Sie nicht, Kontaktieren Sie uns, wenn Sie Hilfe benötigen.', + roles_other: + 'Sie haben das Limit von {{count, number}} -Rollen erreicht. Upgraden Sie Ihren Plan, um zusätzliche Rollen und Berechtigungen hinzuzufügen. Zögern Sie nicht, Kontaktieren Sie uns, wenn Sie Hilfe benötigen.', + scopes_per_role: + 'Sie haben das Limit von {{count, number}} Berechtigungen pro Rolle von erreicht. Upgraden Sie Ihren Plan, um zusätzliche Rollen und Berechtigungen hinzuzufügen. Bei Fragen stehen wir Ihnen gerne zur Verfügung. Kontaktieren Sie uns.', + scopes_per_role_other: + 'Sie haben das Limit von {{count, number}} Berechtigungen pro Rolle von erreicht. Upgraden Sie Ihren Plan, um zusätzliche Rollen und Berechtigungen hinzuzufügen. Bei Fragen stehen wir Ihnen gerne zur Verfügung. Kontaktieren Sie uns.', + hooks: + 'Sie haben das Limit von {{count, number}} -Webhooks erreicht. Upgraden Sie Ihren Plan, um mehr Webhooks zu erstellen. Zögern Sie nicht, Kontaktieren Sie uns, wenn Sie Hilfe benötigen.', + hooks_other: + 'Sie haben das Limit von {{count, number}} -Webhooks erreicht. Upgraden Sie Ihren Plan, um mehr Webhooks zu erstellen. Zögern Sie nicht, Kontaktieren Sie uns, wenn Sie Hilfe benötigen.', +}; + +export default Object.freeze(paywall); diff --git a/packages/phrases/src/locales/en/translation/admin-console/index.ts b/packages/phrases/src/locales/en/translation/admin-console/index.ts index 6884f5746..7e6254dfa 100644 --- a/packages/phrases/src/locales/en/translation/admin-console/index.ts +++ b/packages/phrases/src/locales/en/translation/admin-console/index.ts @@ -28,7 +28,7 @@ import tab_sections from './tab-sections.js'; import tabs from './tabs.js'; import tenants from './tenants.js'; import topbar from './topbar.js'; -import upsell from './upsell.js'; +import upsell from './upsell/index.js'; import user_details from './user-details.js'; import users from './users.js'; import webhook_details from './webhook-details.js'; diff --git a/packages/phrases/src/locales/en/translation/admin-console/sign-in-exp/password-policy.ts b/packages/phrases/src/locales/en/translation/admin-console/sign-in-exp/password-policy.ts index d5ab2ca3f..8601d810a 100644 --- a/packages/phrases/src/locales/en/translation/admin-console/sign-in-exp/password-policy.ts +++ b/packages/phrases/src/locales/en/translation/admin-console/sign-in-exp/password-policy.ts @@ -12,7 +12,7 @@ const password_policy = { breached_passwords_description: 'Reject passwords previously found in breach databases.', restricted_phrases: 'Restrict low-security phrases', restricted_phrases_tooltip: - 'Users cannot use passwords that are exactly the same as or made up of the listed phrases below. The addition of 3 or more non-consecutive characters is allowed to increase password complexity.', + 'Your password should avoid these phrases unless you combine with 3 or more extra characters.', repetitive_or_sequential_characters: 'Repetitive or sequential characters', repetitive_or_sequential_characters_description: 'E.g., "AAAA", "1234", and "abcd".', user_information: 'User information', diff --git a/packages/phrases/src/locales/en/translation/admin-console/upsell.ts b/packages/phrases/src/locales/en/translation/admin-console/upsell.ts deleted file mode 100644 index e52eb7f9b..000000000 --- a/packages/phrases/src/locales/en/translation/admin-console/upsell.ts +++ /dev/null @@ -1,87 +0,0 @@ -const upsell = { - pro_tag: 'PRO', - upgrade_plan: 'Upgrade Plan', - compare_plans: 'Compare plans', - get_started: { - title: 'Begin your seamless identity journey with a free plan!', - description: - 'Free plan is perfect for trying out Logto on your side projects or trials. To fully leverage Logto’s capabilities for your team, upgrade to gain unlimited access to premium features: unlimited MAU usage, Machine-to-Machine integration, RBAC management, long-term audit logs, etc. View all plans', - }, - create_tenant: { - title: 'Select your tenant plan', - description: - 'Logto provides competitive plan options with innovative and affordable pricing designed for growing companies. Learn more', - base_price: 'Base price', - monthly_price: '{{value, number}}/mo', - mau_unit_price: 'MAU unit price', - view_all_features: 'View all features', - select_plan: 'Select ', - free_tenants_limit: 'Up to {{count, number}} free tenant', - free_tenants_limit_other: 'Up to {{count, number}} free tenants', - most_popular: 'Most popular', - upgrade_success: 'Successfully upgraded to ', - }, - paywall: { - applications: - '{{count, number}} application of limit reached. Upgrade plan to meet your team’s needs. For any assistance, feel free to contact us.', - applications_other: - '{{count, number}} applications of limit reached. Upgrade plan to meet your team’s needs. For any assistance, feel free to contact us.', - machine_to_machine_feature: - 'Upgrade to a paid plan to create machine-to-machine application, along with access to all the premium features. For any assistance, feel free to contact us.', - machine_to_machine: - '{{count, number}} machine-to-machine application of limit reached. Upgrade plan to meet your team’s needs. For any assistance, feel free to contact us.', - machine_to_machine_other: - '{{count, number}} machine-to-machine applications of limit reached. Upgrade plan to meet your team’s needs. For any assistance, feel free to contact us.', - resources: - '{{count, number}} API resource of limit reached. Upgrade plan to meet your team’s needs. Contact us for any assistant.', - resources_other: - '{{count, number}} API resources of limit reached. Upgrade plan to meet your team’s needs. Contact us for any assistant.', - scopes_per_resource: - '{{count, number}} permission per API resource of limit reached. Upgrade now to expand. Contact us for any assistant.', - scopes_per_resource_other: - '{{count, number}} permissions per API resource of limit reached. Upgrade now to expand. Contact us for any assistant.', - custom_domain: - 'Unlock custom domain functionality and a range of premium benefits by upgrading to a paid plan. Don’t hesitate to contact us if you need any assistance.', - social_connectors: - '{{count, number}} social connector of limit reached. To meet your team’s needs, upgrade plan for additional social connectors and the ability to create your own connectors using OIDC, OAuth 2.0, and SAML protocols. Feel free to contact us if you need any assistance.', - social_connectors_other: - '{{count, number}} social connectors of limit reached. To meet your team’s needs, upgrade plan for additional social connectors and the ability to create your own connectors using OIDC, OAuth 2.0, and SAML protocols. Feel free to contact us if you need any assistance.', - standard_connectors_feature: - 'Upgrade to a paid plan to create your own connectors using OIDC, OAuth 2.0, and SAML protocols, plus unlimited social connectors and all the premium features. Feel free to contact us if you need any assistance.', - standard_connectors: - '{{count, number}} social connector of limit reached. To meet your team’s needs, upgrade plan for additional social connectors and the ability to create your own connectors using OIDC, OAuth 2.0, and SAML protocols. Feel free to contact us if you need any assistance.', - standard_connectors_other: - '{{count, number}} social connectors of limit reached. To meet your team’s needs, upgrade plan for additional social connectors and the ability to create your own connectors using OIDC, OAuth 2.0, and SAML protocols. Feel free to contact us if you need any assistance.', - standard_connectors_pro: - '{{count, number}} standard connector of limit reached. To meet your team’s needs, upgrade to the Enterprise plan for additional social connectors and the ability to create your own connectors using OIDC, OAuth 2.0, and SAML protocols. Feel free to contact us if you need any assistance.', - standard_connectors_pro_other: - '{{count, number}} standard connectors of limit reached. To meet your team’s needs, upgrade to the Enterprise plan for additional social connectors and the ability to create your own connectors using OIDC, OAuth 2.0, and SAML protocols. Feel free to contact us if you need any assistance.', - roles: - '{{count, number}} role of limit reached. Upgrade plan to add additional roles and permissions. Feel free to contact us if you need any assistance.', - roles_other: - '{{count, number}} roles of limit reached. Upgrade plan to add additional roles and permissions. Feel free to contact us if you need any assistance.', - scopes_per_role: - '{{count, number}} permission per role of limit reached. Upgrade plan to add additional roles and permissions. For any assistance, feel free to contact us.', - scopes_per_role_other: - '{{count, number}} permissions per role of limit reached. Upgrade plan to add additional roles and permissions. For any assistance, feel free to contact us.', - hooks: - '{{count, number}} webhook of limit reached. Upgrade plan to create more webhooks. Feel free to contact us if you need any assistance.', - hooks_other: - '{{count, number}} webhooks of limit reached. Upgrade plan to create more webhooks. Feel free to contact us if you need any assistance.', - }, - mau_exceeded_modal: { - title: 'MAU has exceeded the limit. Upgrade your plan.', - notification: - 'Your current MAU has exceeded the limit of . Please upgrade your plan to premium promptly to avoid suspension of Logto service. ', - update_plan: 'Update Plan', - }, - payment_overdue_modal: { - title: 'Bill payment overdue', - notification: - 'Oops! Payment for tenant {{name}} bill failed. Please pay the bill promptly to avoid suspension of Logto service.', - unpaid_bills: 'Unpaid bills', - update_payment: 'Update Payment', - }, -}; - -export default Object.freeze(upsell); diff --git a/packages/phrases/src/locales/en/translation/admin-console/upsell/index.ts b/packages/phrases/src/locales/en/translation/admin-console/upsell/index.ts new file mode 100644 index 000000000..652458e20 --- /dev/null +++ b/packages/phrases/src/locales/en/translation/admin-console/upsell/index.ts @@ -0,0 +1,42 @@ +import paywall from './paywall.js'; + +const upsell = { + pro_tag: 'PRO', + upgrade_plan: 'Upgrade Plan', + compare_plans: 'Compare plans', + get_started: { + title: 'Begin your seamless identity journey with a free plan!', + description: + 'Free plan is perfect for trying out Logto on your side projects or trials. To fully leverage Logto’s capabilities for your team, upgrade to gain unlimited access to premium features: unlimited MAU usage, Machine-to-Machine integration, RBAC management, long-term audit logs, etc. View all plans', + }, + create_tenant: { + title: 'Select your tenant plan', + description: + 'Logto provides competitive plan options with innovative and affordable pricing designed for growing companies. Learn more', + base_price: 'Base price', + monthly_price: '{{value, number}}/mo', + mau_unit_price: 'MAU unit price', + view_all_features: 'View all features', + select_plan: 'Select ', + free_tenants_limit: 'Up to {{count, number}} free tenant', + free_tenants_limit_other: 'Up to {{count, number}} free tenants', + most_popular: 'Most popular', + upgrade_success: 'Successfully upgraded to ', + }, + mau_exceeded_modal: { + title: 'MAU has exceeded the limit. Upgrade your plan.', + notification: + 'Your current MAU has exceeded the limit of . Please upgrade your plan to premium promptly to avoid suspension of Logto service. ', + update_plan: 'Update Plan', + }, + payment_overdue_modal: { + title: 'Bill payment overdue', + notification: + 'Oops! Payment for tenant {{name}} bill failed. Please pay the bill promptly to avoid suspension of Logto service.', + unpaid_bills: 'Unpaid bills', + update_payment: 'Update Payment', + }, + paywall, +}; + +export default Object.freeze(upsell); diff --git a/packages/phrases/src/locales/en/translation/admin-console/upsell/paywall.ts b/packages/phrases/src/locales/en/translation/admin-console/upsell/paywall.ts new file mode 100644 index 000000000..3e5711b07 --- /dev/null +++ b/packages/phrases/src/locales/en/translation/admin-console/upsell/paywall.ts @@ -0,0 +1,50 @@ +const paywall = { + applications: + '{{count, number}} application of limit reached. Upgrade plan to meet your team’s needs. For any assistance, feel free to contact us.', + applications_other: + '{{count, number}} applications of limit reached. Upgrade plan to meet your team’s needs. For any assistance, feel free to contact us.', + machine_to_machine_feature: + 'Upgrade to a paid plan to create machine-to-machine application, along with access to all the premium features. For any assistance, feel free to contact us.', + machine_to_machine: + '{{count, number}} machine-to-machine application of limit reached. Upgrade plan to meet your team’s needs. For any assistance, feel free to contact us.', + machine_to_machine_other: + '{{count, number}} machine-to-machine applications of limit reached. Upgrade plan to meet your team’s needs. For any assistance, feel free to contact us.', + resources: + '{{count, number}} API resource of limit reached. Upgrade plan to meet your team’s needs. Contact us for any assistant.', + resources_other: + '{{count, number}} API resources of limit reached. Upgrade plan to meet your team’s needs. Contact us for any assistant.', + scopes_per_resource: + '{{count, number}} permission per API resource of limit reached. Upgrade now to expand. Contact us for any assistant.', + scopes_per_resource_other: + '{{count, number}} permissions per API resource of limit reached. Upgrade now to expand. Contact us for any assistant.', + custom_domain: + 'Unlock custom domain functionality and a range of premium benefits by upgrading to a paid plan. Don’t hesitate to contact us if you need any assistance.', + social_connectors: + '{{count, number}} social connector of limit reached. To meet your team’s needs, upgrade plan for additional social connectors and the ability to create your own connectors using OIDC, OAuth 2.0, and SAML protocols. Feel free to contact us if you need any assistance.', + social_connectors_other: + '{{count, number}} social connectors of limit reached. To meet your team’s needs, upgrade plan for additional social connectors and the ability to create your own connectors using OIDC, OAuth 2.0, and SAML protocols. Feel free to contact us if you need any assistance.', + standard_connectors_feature: + 'Upgrade to a paid plan to create your own connectors using OIDC, OAuth 2.0, and SAML protocols, plus unlimited social connectors and all the premium features. Feel free to contact us if you need any assistance.', + standard_connectors: + '{{count, number}} social connector of limit reached. To meet your team’s needs, upgrade plan for additional social connectors and the ability to create your own connectors using OIDC, OAuth 2.0, and SAML protocols. Feel free to contact us if you need any assistance.', + standard_connectors_other: + '{{count, number}} social connectors of limit reached. To meet your team’s needs, upgrade plan for additional social connectors and the ability to create your own connectors using OIDC, OAuth 2.0, and SAML protocols. Feel free to contact us if you need any assistance.', + standard_connectors_pro: + '{{count, number}} standard connector of limit reached. To meet your team’s needs, upgrade to the Enterprise plan for additional social connectors and the ability to create your own connectors using OIDC, OAuth 2.0, and SAML protocols. Feel free to contact us if you need any assistance.', + standard_connectors_pro_other: + '{{count, number}} standard connectors of limit reached. To meet your team’s needs, upgrade to the Enterprise plan for additional social connectors and the ability to create your own connectors using OIDC, OAuth 2.0, and SAML protocols. Feel free to contact us if you need any assistance.', + roles: + '{{count, number}} role of limit reached. Upgrade plan to add additional roles and permissions. Feel free to contact us if you need any assistance.', + roles_other: + '{{count, number}} roles of limit reached. Upgrade plan to add additional roles and permissions. Feel free to contact us if you need any assistance.', + scopes_per_role: + '{{count, number}} permission per role of limit reached. Upgrade plan to add additional roles and permissions. For any assistance, feel free to contact us.', + scopes_per_role_other: + '{{count, number}} permissions per role of limit reached. Upgrade plan to add additional roles and permissions. For any assistance, feel free to contact us.', + hooks: + '{{count, number}} webhook of limit reached. Upgrade plan to create more webhooks. Feel free to contact us if you need any assistance.', + hooks_other: + '{{count, number}} webhooks of limit reached. Upgrade plan to create more webhooks. Feel free to contact us if you need any assistance.', +}; + +export default Object.freeze(paywall); diff --git a/packages/phrases/src/locales/es/errors/password.ts b/packages/phrases/src/locales/es/errors/password.ts index 1edd3ffc9..3f4647896 100644 --- a/packages/phrases/src/locales/es/errors/password.ts +++ b/packages/phrases/src/locales/es/errors/password.ts @@ -1,8 +1,7 @@ const password = { unsupported_encryption_method: 'El método de encriptación {{name}} no es compatible.', pepper_not_found: 'No se encontró el password pepper. Por favor revisa tus variables de entorno.', - /** UNTRANSLATED */ - rejected: 'Password rejected. Please check if your password meets the requirements.', + rejected: 'Contraseña rechazada. Por favor verifica que tu contraseña cumpla con los requisitos.', }; export default Object.freeze(password); diff --git a/packages/phrases/src/locales/es/errors/sign-in-experiences.ts b/packages/phrases/src/locales/es/errors/sign-in-experiences.ts index 42cf0c9c3..f52d049bb 100644 --- a/packages/phrases/src/locales/es/errors/sign-in-experiences.ts +++ b/packages/phrases/src/locales/es/errors/sign-in-experiences.ts @@ -18,10 +18,8 @@ const sign_in_experiences = { 'La firma de código de verificación debe estar habilitada cuando no se requiere contraseña en el registro.', unsupported_default_language: 'Este lenguaje - {{language}} no es compatible en este momento.', at_least_one_authentication_factor: 'Debe seleccionar al menos un factor de autenticación.', - /** UNTRANSLATED */ - backup_code_cannot_be_enabled_alone: 'Backup code cannot be enabled alone.', - /** UNTRANSLATED */ - duplicated_mfa_factors: 'Duplicated MFA factors.', + backup_code_cannot_be_enabled_alone: 'El código de respaldo no se puede habilitar solo.', + duplicated_mfa_factors: 'Factores MFA duplicados.', }; export default Object.freeze(sign_in_experiences); diff --git a/packages/phrases/src/locales/es/translation/admin-console/index.ts b/packages/phrases/src/locales/es/translation/admin-console/index.ts index dc836b089..10953ddbf 100644 --- a/packages/phrases/src/locales/es/translation/admin-console/index.ts +++ b/packages/phrases/src/locales/es/translation/admin-console/index.ts @@ -28,7 +28,7 @@ import tab_sections from './tab-sections.js'; import tabs from './tabs.js'; import tenants from './tenants.js'; import topbar from './topbar.js'; -import upsell from './upsell.js'; +import upsell from './upsell/index.js'; import user_details from './user-details.js'; import users from './users.js'; import webhook_details from './webhook-details.js'; diff --git a/packages/phrases/src/locales/es/translation/admin-console/sign-in-exp/index.ts b/packages/phrases/src/locales/es/translation/admin-console/sign-in-exp/index.ts index 9bb922495..bc2d62ab0 100644 --- a/packages/phrases/src/locales/es/translation/admin-console/sign-in-exp/index.ts +++ b/packages/phrases/src/locales/es/translation/admin-console/sign-in-exp/index.ts @@ -11,8 +11,7 @@ const sign_in_exp = { branding: 'Branding', sign_up_and_sign_in: 'Registro e inicio de sesión', content: 'Contenido', - /** UNTRANSLATED */ - password_policy: 'Password policy', + password_policy: 'Política de contraseña', }, welcome: { title: 'Personalice la experiencia de inicio de sesión', diff --git a/packages/phrases/src/locales/es/translation/admin-console/sign-in-exp/password-policy.ts b/packages/phrases/src/locales/es/translation/admin-console/sign-in-exp/password-policy.ts index f54c9f77b..282b9f637 100644 --- a/packages/phrases/src/locales/es/translation/admin-console/sign-in-exp/password-policy.ts +++ b/packages/phrases/src/locales/es/translation/admin-console/sign-in-exp/password-policy.ts @@ -1,45 +1,28 @@ const password_policy = { - /** UNTRANSLATED */ - password_requirements: 'Password requirements', - /** UNTRANSLATED */ - minimum_length: 'Minimum length', - /** UNTRANSLATED */ - minimum_length_description: 'NIST suggests using at least 8 characters for web products.', - /** UNTRANSLATED */ - minimum_length_error: 'Minimum length must be between {{min}} and {{max}} (inclusive).', - /** UNTRANSLATED */ - minimum_required_char_types: 'Minimum required character types', - /** UNTRANSLATED */ + password_requirements: 'Requisitos de contraseña', + minimum_length: 'Longitud mínima', + minimum_length_description: 'NIST sugiere usar al menos 8 caracteres para productos web.', + minimum_length_error: 'La longitud mínima debe estar entre {{min}} y {{max}} (inclusive).', + minimum_required_char_types: 'Tipos de caracteres requeridos mínimos', minimum_required_char_types_description: - 'Character types: uppercase (A-Z), lowercase (a-z), numbers (0-9), and special symbols ({{symbols}}).', - /** UNTRANSLATED */ - password_rejection: 'Password rejection', - /** UNTRANSLATED */ - compromised_passwords: 'Reject compromised password', - /** UNTRANSLATED */ - breached_passwords: 'Breached passwords', - /** UNTRANSLATED */ - breached_passwords_description: 'Reject passwords previously found in breach databases.', - /** UNTRANSLATED */ - restricted_phrases: 'Restrict low-security phrases', - /** UNTRANSLATED */ + 'Tipos de caracteres: mayúsculas (A-Z), minúsculas (a-z), números (0-9) y símbolos especiales ({{symbols}}).', + password_rejection: 'Rechazo de contraseña', + compromised_passwords: 'Contraseñas comprometidas', + breached_passwords: 'Contraseñas vulneradas', + breached_passwords_description: + 'Rechazar contraseñas encontradas previamente en bases de datos de vulnerabilidad.', + restricted_phrases: 'Restringir frases de baja seguridad', restricted_phrases_tooltip: - 'Users cannot use passwords that are exactly the same as or made up of the listed phrases below. The addition of 3 or more non-consecutive characters is allowed to increase password complexity.', - /** UNTRANSLATED */ - repetitive_or_sequential_characters: 'Repetitive or sequential characters', - /** UNTRANSLATED */ - repetitive_or_sequential_characters_description: 'E.g., "AAAA", "1234", and "abcd".', - /** UNTRANSLATED */ - user_information: 'User information', - /** UNTRANSLATED */ - user_information_description: 'E.g., email address, phone number, username, etc.', - /** UNTRANSLATED */ - custom_words: 'Custom words', - /** UNTRANSLATED */ + 'Su contraseña debe evitar estas frases a menos que combine con 3 o más caracteres adicionales.', + repetitive_or_sequential_characters: 'Caracteres repetitivos o secuenciales', + repetitive_or_sequential_characters_description: 'Por ejemplo, "AAAA", "1234" y "abcd".', + user_information: 'Información de usuario', + user_information_description: + 'Por ejemplo, dirección de correo electrónico, número de teléfono, nombre de usuario, etc.', + custom_words: 'Palabras personalizadas', custom_words_description: - 'Personalize context-specific words, case-insensitive, and one per line.', - /** UNTRANSLATED */ - custom_words_placeholder: 'Your service name, company name, etc.', + 'Personaliza las palabras específicas del contexto, sin importar las mayúsculas y minúsculas, y una por línea.', + custom_words_placeholder: 'Nombre de su servicio, nombre de la empresa, etc.', }; export default Object.freeze(password_policy); diff --git a/packages/phrases/src/locales/es/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts b/packages/phrases/src/locales/es/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts index 72d2676fe..7e070bb6c 100644 --- a/packages/phrases/src/locales/es/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts +++ b/packages/phrases/src/locales/es/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts @@ -14,7 +14,7 @@ const sign_up_and_sign_in = { sign_up_authentication: 'Configuración de autenticación para el registro', authentication_description: 'Todas las acciones seleccionadas serán obligatorias para que los usuarios completen el proceso.', - set_a_password_option: 'Crea una contraseña', + set_a_password_option: 'Crear una contraseña', verify_at_sign_up_option: 'Verificar al registrarse', social_only_creation_description: '(Esto se aplica solo a la creación de cuentas mediante redes sociales)', @@ -57,13 +57,10 @@ const sign_up_and_sign_in = { 'Es esencial ya que has seleccionado {{identifier}} como identificador obligatorio.', }, advanced_options: { - /** UNTRANSLATED */ - title: 'ADVANCED OPTIONS', - /** UNTRANSLATED */ - enable_user_registration: 'Enable user registration', - /** UNTRANSLATED */ + title: 'OPCIONES AVANZADAS', + enable_user_registration: 'Habilitar registro de usuario', enable_user_registration_description: - 'Enable or disallow user registration. Once disabled, users can still be added in the admin console but users can no longer establish accounts through the sign-in UI.', + 'Habilitar o deshabilitar el registro de usuarios. Una vez deshabilitado, los usuarios aún se pueden agregar en la consola de administración, pero los usuarios ya no pueden establecer cuentas a través de la interfaz de inicio de sesión.', }, }; diff --git a/packages/phrases/src/locales/es/translation/admin-console/upsell.ts b/packages/phrases/src/locales/es/translation/admin-console/upsell.ts deleted file mode 100644 index 26ef5c454..000000000 --- a/packages/phrases/src/locales/es/translation/admin-console/upsell.ts +++ /dev/null @@ -1,87 +0,0 @@ -const upsell = { - pro_tag: 'PRO', - upgrade_plan: 'Plan de actualización', - compare_plans: 'Comparar planes', - get_started: { - title: '¡Comience su viaje de identidad sin problemas con un plan gratuito!', - description: - 'El plan gratuito es perfecto para probar Logto en sus proyectos personales o pruebas. Para aprovechar al máximo las capacidades de Logto para su equipo, actualice para obtener acceso ilimitado a las características premium: uso ilimitado de MAU, integración de Máquina a Máquina, gestión de RBAC, registros de auditoría a largo plazo, etc. Ver todos los planes', - }, - create_tenant: { - title: 'Selecciona tu plan de tenant', - description: - 'Logto ofrece opciones de planes competitivos con una innovadora y asequible estructura de precios diseñada para empresas en crecimiento. Más información', - base_price: 'Precio base', - monthly_price: '{{value, number}}/mes', - mau_unit_price: 'Precio unitario de MAU', - view_all_features: 'Ver todas las características', - select_plan: 'Seleccionar ', - free_tenants_limit: 'Hasta {{count, number}} tenant gratuito', - free_tenants_limit_other: 'Hasta {{count, number}} tenants gratuitos', - most_popular: 'Más popular', - upgrade_success: 'Actualización a realizada con éxito', - }, - paywall: { - applications: - 'Se ha alcanzado el límite de {{count, number}} aplicación de . Actualiza el plan para satisfacer las necesidades de tu equipo. Para cualquier ayuda, no dudes en contactarnos.', - applications_other: - 'Se ha alcanzado el límite de {{count, number}} aplicaciones de . Actualiza el plan para satisfacer las necesidades de tu equipo. Para cualquier ayuda, no dudes en contactarnos.', - machine_to_machine_feature: - 'Actualiza a un plan de pago para crear aplicaciones de máquina a máquina, junto con acceso a todas las funciones premium. Para cualquier ayuda, no dudes en contactarnos.', - machine_to_machine: - 'Se ha alcanzado el límite de {{count, number}} aplicación de máquina a máquina de . Actualiza el plan para satisfacer las necesidades de tu equipo. Para cualquier ayuda, no dudes en contactarnos.', - machine_to_machine_other: - 'Se ha alcanzado el límite de {{count, number}} aplicaciones de máquina a máquina de . Actualiza el plan para satisfacer las necesidades de tu equipo. Para cualquier ayuda, no dudes en contactarnos.', - resources: - 'Has alcanzado el límite de {{count, number}} recursos de API de . Actualiza el plan para satisfacer las necesidades de tu equipo. Contáctanos si necesitas asistencia.', - resources_other: - 'Has alcanzado el límite de {{count, number}} recursos de API de . Actualiza el plan para satisfacer las necesidades de tu equipo. Contáctanos si necesitas asistencia.', - scopes_per_resource: - 'Has alcanzado el límite de {{count, number}} permisos por recurso de API de . Actualiza ahora para expandirlo. Contáctanos si necesitas asistencia.', - scopes_per_resource_other: - 'Has alcanzado el límite de {{count, number}} permisos por recurso de API de . Actualiza ahora para expandirlo. Contáctanos si necesitas asistencia.', - custom_domain: - 'Desbloquea la funcionalidad de dominio personalizado y una variedad de beneficios premium al actualizar a un plan de pago. No dudes en contactarnos si necesitas ayuda.', - social_connectors: - 'Has alcanzado el límite de {{count, number}} conectores sociales de . Actualiza el plan para obtener conectores sociales adicionales y la capacidad de crear tus propios conectores usando los protocolos OIDC, OAuth 2.0 y SAML. Si necesitas ayuda, no dudes en contactarnos.', - social_connectors_other: - 'Has alcanzado el límite de {{count, number}} conectores sociales de . Actualiza el plan para obtener conectores sociales adicionales y la capacidad de crear tus propios conectores usando los protocolos OIDC, OAuth 2.0 y SAML. Si necesitas ayuda, no dudes en contactarnos.', - standard_connectors_feature: - 'Actualiza a un plan de pago para crear tus propios conectores usando los protocolos OIDC, OAuth 2.0 y SAML, además de obtener conectores sociales ilimitados y todas las funciones premium. Si necesitas ayuda, no dudes en contactarnos.', - standard_connectors: - 'Has alcanzado el límite de {{count, number}} conectores sociales de . Actualiza el plan para obtener conectores sociales adicionales y la capacidad de crear tus propios conectores usando los protocolos OIDC, OAuth 2.0 y SAML. Si necesitas ayuda, no dudes en contactarnos.', - standard_connectors_other: - 'Has alcanzado el límite de {{count, number}} conectores sociales de . Actualiza el plan para obtener conectores sociales adicionales y la capacidad de crear tus propios conectores usando los protocolos OIDC, OAuth 2.0 y SAML. Si necesitas ayuda, no dudes en contactarnos.', - standard_connectors_pro: - 'Has alcanzado el límite de {{count, number}} conectores estándar de . Actualiza al plan Enterprise para obtener conectores sociales adicionales y la capacidad de crear tus propios conectores usando los protocolos OIDC, OAuth 2.0 y SAML. Si necesitas ayuda, no dudes en contactarnos.', - standard_connectors_pro_other: - 'Has alcanzado el límite de {{count, number}} conectores estándar de . Actualiza al plan Enterprise para obtener conectores sociales adicionales y la capacidad de crear tus propios conectores usando los protocolos OIDC, OAuth 2.0 y SAML. Si necesitas ayuda, no dudes en contactarnos.', - roles: - 'Has alcanzado el límite de {{count, number}} roles de . Actualiza el plan para agregar roles y permisos adicionales. Si necesitas ayuda, no dudes en contactarnos.', - roles_other: - 'Has alcanzado el límite de {{count, number}} roles de . Actualiza el plan para agregar roles y permisos adicionales. Si necesitas ayuda, no dudes en contactarnos.', - scopes_per_role: - 'Has alcanzado el límite de {{count, number}} permisos por rol de . Actualiza el plan para agregar roles y permisos adicionales. Si necesitas ayuda, no dudes en contactarnos.', - scopes_per_role_other: - 'Has alcanzado el límite de {{count, number}} permisos por rol de . Actualiza el plan para agregar roles y permisos adicionales. Si necesitas ayuda, no dudes en contactarnos.', - hooks: - 'Has alcanzado el límite de {{count, number}} webhooks de . Actualiza el plan para crear más webhooks. Si necesitas ayuda, no dudes en contactarnos.', - hooks_other: - 'Has alcanzado el límite de {{count, number}} webhooks de . Actualiza el plan para crear más webhooks. Si necesitas ayuda, no dudes en contactarnos.', - }, - mau_exceeded_modal: { - title: 'Se ha superado el límite de MAU. Actualiza tu plan.', - notification: - 'Tu MAU actual ha superado el límite de . Por favor, actualiza tu plan a premium a tiempo para evitar la suspensión del servicio de Logto.', - update_plan: 'Actualizar plan', - }, - payment_overdue_modal: { - title: 'Factura con pagos atrasados', - notification: - '¡Ups! El pago de la factura del inquilino {{name}} ha fallado. Por favor, pague la factura a tiempo para evitar la suspensión del servicio de Logto.', - unpaid_bills: 'Facturas impagas', - update_payment: 'Actualizar pago', - }, -}; - -export default Object.freeze(upsell); diff --git a/packages/phrases/src/locales/es/translation/admin-console/upsell/index.ts b/packages/phrases/src/locales/es/translation/admin-console/upsell/index.ts new file mode 100644 index 000000000..4973724df --- /dev/null +++ b/packages/phrases/src/locales/es/translation/admin-console/upsell/index.ts @@ -0,0 +1,42 @@ +import paywall from './paywall.js'; + +const upsell = { + pro_tag: 'PRO', + upgrade_plan: 'Plan de actualización', + compare_plans: 'Comparar planes', + get_started: { + title: '¡Comience su viaje de identidad sin problemas con un plan gratuito!', + description: + 'El plan gratuito es perfecto para probar Logto en sus proyectos personales o pruebas. Para aprovechar al máximo las capacidades de Logto para su equipo, actualice para obtener acceso ilimitado a las características premium: uso ilimitado de MAU, integración de Máquina a Máquina, gestión de RBAC, registros de auditoría a largo plazo, etc. Ver todos los planes', + }, + create_tenant: { + title: 'Selecciona tu plan de tenant', + description: + 'Logto ofrece opciones de planes competitivos con una innovadora y asequible estructura de precios diseñada para empresas en crecimiento. Más información', + base_price: 'Precio base', + monthly_price: '{{value, number}}/mes', + mau_unit_price: 'Precio unitario de MAU', + view_all_features: 'Ver todas las características', + select_plan: 'Seleccionar ', + free_tenants_limit: 'Hasta {{count, number}} tenant gratuito', + free_tenants_limit_other: 'Hasta {{count, number}} tenants gratuitos', + most_popular: 'Más popular', + upgrade_success: 'Actualización a realizada con éxito', + }, + mau_exceeded_modal: { + title: 'Se ha superado el límite de MAU. Actualiza tu plan.', + notification: + 'Tu MAU actual ha superado el límite de . Por favor, actualiza tu plan a premium a tiempo para evitar la suspensión del servicio de Logto.', + update_plan: 'Actualizar plan', + }, + payment_overdue_modal: { + title: 'Factura con pagos atrasados', + notification: + '¡Ups! El pago de la factura del inquilino {{name}} ha fallado. Por favor, pague la factura a tiempo para evitar la suspensión del servicio de Logto.', + unpaid_bills: 'Facturas impagas', + update_payment: 'Actualizar pago', + }, + paywall, +}; + +export default Object.freeze(upsell); diff --git a/packages/phrases/src/locales/es/translation/admin-console/upsell/paywall.ts b/packages/phrases/src/locales/es/translation/admin-console/upsell/paywall.ts new file mode 100644 index 000000000..9222e123b --- /dev/null +++ b/packages/phrases/src/locales/es/translation/admin-console/upsell/paywall.ts @@ -0,0 +1,50 @@ +const paywall = { + applications: + 'Se ha alcanzado el límite de {{count, number}} aplicación de . Actualiza el plan para satisfacer las necesidades de tu equipo. Para cualquier ayuda, no dudes en contactarnos.', + applications_other: + 'Se ha alcanzado el límite de {{count, number}} aplicaciones de . Actualiza el plan para satisfacer las necesidades de tu equipo. Para cualquier ayuda, no dudes en contactarnos.', + machine_to_machine_feature: + 'Actualiza a un plan de pago para crear aplicaciones de máquina a máquina, junto con acceso a todas las funciones premium. Para cualquier ayuda, no dudes en contactarnos.', + machine_to_machine: + 'Se ha alcanzado el límite de {{count, number}} aplicación de máquina a máquina de . Actualiza el plan para satisfacer las necesidades de tu equipo. Para cualquier ayuda, no dudes en contactarnos.', + machine_to_machine_other: + 'Se ha alcanzado el límite de {{count, number}} aplicaciones de máquina a máquina de . Actualiza el plan para satisfacer las necesidades de tu equipo. Para cualquier ayuda, no dudes en contactarnos.', + resources: + 'Has alcanzado el límite de {{count, number}} recursos de API de . Actualiza el plan para satisfacer las necesidades de tu equipo. Contáctanos si necesitas asistencia.', + resources_other: + 'Has alcanzado el límite de {{count, number}} recursos de API de . Actualiza el plan para satisfacer las necesidades de tu equipo. Contáctanos si necesitas asistencia.', + scopes_per_resource: + 'Has alcanzado el límite de {{count, number}} permisos por recurso de API de . Actualiza ahora para expandirlo. Contáctanos si necesitas asistencia.', + scopes_per_resource_other: + 'Has alcanzado el límite de {{count, number}} permisos por recurso de API de . Actualiza ahora para expandirlo. Contáctanos si necesitas asistencia.', + custom_domain: + 'Desbloquea la funcionalidad de dominio personalizado y una variedad de beneficios premium al actualizar a un plan de pago. No dudes en contactarnos si necesitas ayuda.', + social_connectors: + 'Has alcanzado el límite de {{count, number}} conectores sociales de . Actualiza el plan para obtener conectores sociales adicionales y la capacidad de crear tus propios conectores usando los protocolos OIDC, OAuth 2.0 y SAML. Si necesitas ayuda, no dudes en contactarnos.', + social_connectors_other: + 'Has alcanzado el límite de {{count, number}} conectores sociales de . Actualiza el plan para obtener conectores sociales adicionales y la capacidad de crear tus propios conectores usando los protocolos OIDC, OAuth 2.0 y SAML. Si necesitas ayuda, no dudes en contactarnos.', + standard_connectors_feature: + 'Actualiza a un plan de pago para crear tus propios conectores usando los protocolos OIDC, OAuth 2.0 y SAML, además de obtener conectores sociales ilimitados y todas las funciones premium. Si necesitas ayuda, no dudes en contactarnos.', + standard_connectors: + 'Has alcanzado el límite de {{count, number}} conectores sociales de . Actualiza el plan para obtener conectores sociales adicionales y la capacidad de crear tus propios conectores usando los protocolos OIDC, OAuth 2.0 y SAML. Si necesitas ayuda, no dudes en contactarnos.', + standard_connectors_other: + 'Has alcanzado el límite de {{count, number}} conectores sociales de . Actualiza el plan para obtener conectores sociales adicionales y la capacidad de crear tus propios conectores usando los protocolos OIDC, OAuth 2.0 y SAML. Si necesitas ayuda, no dudes en contactarnos.', + standard_connectors_pro: + 'Has alcanzado el límite de {{count, number}} conectores estándar de . Actualiza al plan Enterprise para obtener conectores sociales adicionales y la capacidad de crear tus propios conectores usando los protocolos OIDC, OAuth 2.0 y SAML. Si necesitas ayuda, no dudes en contactarnos.', + standard_connectors_pro_other: + 'Has alcanzado el límite de {{count, number}} conectores estándar de . Actualiza al plan Enterprise para obtener conectores sociales adicionales y la capacidad de crear tus propios conectores usando los protocolos OIDC, OAuth 2.0 y SAML. Si necesitas ayuda, no dudes en contactarnos.', + roles: + 'Has alcanzado el límite de {{count, number}} roles de . Actualiza el plan para agregar roles y permisos adicionales. Si necesitas ayuda, no dudes en contactarnos.', + roles_other: + 'Has alcanzado el límite de {{count, number}} roles de . Actualiza el plan para agregar roles y permisos adicionales. Si necesitas ayuda, no dudes en contactarnos.', + scopes_per_role: + 'Has alcanzado el límite de {{count, number}} permisos por rol de . Actualiza el plan para agregar roles y permisos adicionales. Si necesitas ayuda, no dudes en contactarnos.', + scopes_per_role_other: + 'Has alcanzado el límite de {{count, number}} permisos por rol de . Actualiza el plan para agregar roles y permisos adicionales. Si necesitas ayuda, no dudes en contactarnos.', + hooks: + 'Has alcanzado el límite de {{count, number}} webhooks de . Actualiza el plan para crear más webhooks. Si necesitas ayuda, no dudes en contactarnos.', + hooks_other: + 'Has alcanzado el límite de {{count, number}} webhooks de . Actualiza el plan para crear más webhooks. Si necesitas ayuda, no dudes en contactarnos.', +}; + +export default Object.freeze(paywall); diff --git a/packages/phrases/src/locales/fr/errors/password.ts b/packages/phrases/src/locales/fr/errors/password.ts index e88a76e89..a8b851206 100644 --- a/packages/phrases/src/locales/fr/errors/password.ts +++ b/packages/phrases/src/locales/fr/errors/password.ts @@ -2,8 +2,7 @@ const password = { unsupported_encryption_method: "La méthode de cryptage {{name}} n'est pas prise en charge.", pepper_not_found: 'Mot de passe pepper non trouvé. Veuillez vérifier votre environnement de base.', - /** UNTRANSLATED */ - rejected: 'Password rejected. Please check if your password meets the requirements.', + rejected: 'Mot de passe rejeté. Veuillez vérifier si votre mot de passe répond aux exigences.', }; export default Object.freeze(password); diff --git a/packages/phrases/src/locales/fr/errors/sign-in-experiences.ts b/packages/phrases/src/locales/fr/errors/sign-in-experiences.ts index 6e9e0fac6..052b1f82f 100644 --- a/packages/phrases/src/locales/fr/errors/sign-in-experiences.ts +++ b/packages/phrases/src/locales/fr/errors/sign-in-experiences.ts @@ -20,10 +20,8 @@ const sign_in_experiences = { "Cette langue - {{language}} n'est pas prise en charge pour le moment.", at_least_one_authentication_factor: "Vous devez sélectionner au moins un facteur d'authentification.", - /** UNTRANSLATED */ - backup_code_cannot_be_enabled_alone: 'Backup code cannot be enabled alone.', - /** UNTRANSLATED */ - duplicated_mfa_factors: 'Duplicated MFA factors.', + backup_code_cannot_be_enabled_alone: 'Le code de sauvegarde ne peut être activé seul.', + duplicated_mfa_factors: 'Facteurs de MFA en double.', }; export default Object.freeze(sign_in_experiences); diff --git a/packages/phrases/src/locales/fr/translation/admin-console/index.ts b/packages/phrases/src/locales/fr/translation/admin-console/index.ts index 6884f5746..7e6254dfa 100644 --- a/packages/phrases/src/locales/fr/translation/admin-console/index.ts +++ b/packages/phrases/src/locales/fr/translation/admin-console/index.ts @@ -28,7 +28,7 @@ import tab_sections from './tab-sections.js'; import tabs from './tabs.js'; import tenants from './tenants.js'; import topbar from './topbar.js'; -import upsell from './upsell.js'; +import upsell from './upsell/index.js'; import user_details from './user-details.js'; import users from './users.js'; import webhook_details from './webhook-details.js'; diff --git a/packages/phrases/src/locales/fr/translation/admin-console/sign-in-exp/index.ts b/packages/phrases/src/locales/fr/translation/admin-console/sign-in-exp/index.ts index 5b217373e..5c5f04737 100644 --- a/packages/phrases/src/locales/fr/translation/admin-console/sign-in-exp/index.ts +++ b/packages/phrases/src/locales/fr/translation/admin-console/sign-in-exp/index.ts @@ -11,8 +11,7 @@ const sign_in_exp = { branding: 'Image de marque', sign_up_and_sign_in: 'Inscription et connexion', content: 'Contenu', - /** UNTRANSLATED */ - password_policy: 'Password policy', + password_policy: 'Politique de mot de passe', }, welcome: { title: "Personnaliser l'expérience de connexion", @@ -60,9 +59,9 @@ const sign_in_exp = { password_policy, setup_warning: { no_connector_sms: - 'Aucun connecteur SMS n\'a été configuré. Avant de terminer la configuration, les utilisateurs ne pourront pas se connecter avec cette méthode. {{link}} dans "Connectors"', + 'Aucun connecteur SMS n\'a été configuré. Avant de terminer la configuration, les utilisateurs ne pourront pas se connecter avec cette méthode. {{link}} dans "Connecteurs"', no_connector_email: - 'Aucun connecteur d\'email n\'a été configuré. Avant de terminer la configuration, les utilisateurs ne pourront pas se connecter avec cette méthode. {{link}}dans"Connectors"', + 'Aucun connecteur d\'email n\'a été configuré. Avant de terminer la configuration, les utilisateurs ne pourront pas se connecter avec cette méthode. {{link}} dans "Connecteurs"', no_connector_social: 'Vous n’avez pas encore configuré de connecteur social. Ajoutez d’abord des connecteurs pour appliquer des méthodes de connexion sociale. {{link}} dans "Connecteurs".', setup_link: 'Configurer', diff --git a/packages/phrases/src/locales/fr/translation/admin-console/sign-in-exp/password-policy.ts b/packages/phrases/src/locales/fr/translation/admin-console/sign-in-exp/password-policy.ts index f54c9f77b..a4b7fbcff 100644 --- a/packages/phrases/src/locales/fr/translation/admin-console/sign-in-exp/password-policy.ts +++ b/packages/phrases/src/locales/fr/translation/admin-console/sign-in-exp/password-policy.ts @@ -1,45 +1,30 @@ const password_policy = { - /** UNTRANSLATED */ - password_requirements: 'Password requirements', - /** UNTRANSLATED */ - minimum_length: 'Minimum length', - /** UNTRANSLATED */ - minimum_length_description: 'NIST suggests using at least 8 characters for web products.', - /** UNTRANSLATED */ - minimum_length_error: 'Minimum length must be between {{min}} and {{max}} (inclusive).', - /** UNTRANSLATED */ - minimum_required_char_types: 'Minimum required character types', - /** UNTRANSLATED */ + password_requirements: 'Exigences relatives au mot de passe', + minimum_length: 'Longueur minimale', + minimum_length_description: + "NIST suggère d'utiliser au moins 8 caractères pour les produits web.", + minimum_length_error: + 'La longueur minimale doit être comprise entre {{min}} et {{max}} (inclus).', + minimum_required_char_types: 'Nombre minimum de types de caractères requis', minimum_required_char_types_description: - 'Character types: uppercase (A-Z), lowercase (a-z), numbers (0-9), and special symbols ({{symbols}}).', - /** UNTRANSLATED */ - password_rejection: 'Password rejection', - /** UNTRANSLATED */ - compromised_passwords: 'Reject compromised password', - /** UNTRANSLATED */ - breached_passwords: 'Breached passwords', - /** UNTRANSLATED */ - breached_passwords_description: 'Reject passwords previously found in breach databases.', - /** UNTRANSLATED */ - restricted_phrases: 'Restrict low-security phrases', - /** UNTRANSLATED */ + 'Types de caractères : majuscules (A-Z), minuscules (a-z), chiffres (0-9) et symboles spéciaux ({{symbols}}).', + password_rejection: 'Rejet du mot de passe', + compromised_passwords: 'Mots de passe compromis', + breached_passwords: 'Mots de passe compromis', + breached_passwords_description: + 'Rejeter les mots de passe précédemment trouvés dans les bases de données de violation.', + restricted_phrases: 'Restreindre les phrases à faible sécurité', restricted_phrases_tooltip: - 'Users cannot use passwords that are exactly the same as or made up of the listed phrases below. The addition of 3 or more non-consecutive characters is allowed to increase password complexity.', - /** UNTRANSLATED */ - repetitive_or_sequential_characters: 'Repetitive or sequential characters', - /** UNTRANSLATED */ - repetitive_or_sequential_characters_description: 'E.g., "AAAA", "1234", and "abcd".', - /** UNTRANSLATED */ - user_information: 'User information', - /** UNTRANSLATED */ - user_information_description: 'E.g., email address, phone number, username, etc.', - /** UNTRANSLATED */ - custom_words: 'Custom words', - /** UNTRANSLATED */ + 'Votre mot de passe devrait éviter ces phrases à moins que vous ne les combiniez avec 3 caractères supplémentaires ou plus.', + repetitive_or_sequential_characters: 'Caractères répétitifs ou séquentiels', + repetitive_or_sequential_characters_description: 'Par exemple, "AAAA", "1234" et "abcd".', + user_information: 'Informations utilisateur', + user_information_description: + "Par exemple, adresse e-mail, numéro de téléphone, nom d'utilisateur, etc.", + custom_words: 'Mots personnalisés', custom_words_description: - 'Personalize context-specific words, case-insensitive, and one per line.', - /** UNTRANSLATED */ - custom_words_placeholder: 'Your service name, company name, etc.', + 'Personnalisez les mots spécifiques au contexte, sans distinction de casse, un par ligne.', + custom_words_placeholder: 'Nom de votre service, nom de votre entreprise, etc.', }; export default Object.freeze(password_policy); diff --git a/packages/phrases/src/locales/fr/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts b/packages/phrases/src/locales/fr/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts index 463fef254..d121a2210 100644 --- a/packages/phrases/src/locales/fr/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts +++ b/packages/phrases/src/locales/fr/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts @@ -8,62 +8,59 @@ const sign_up_and_sign_in = { or: 'ou', sign_up: { title: 'INSCRIPTION', - sign_up_identifier: 'Identificateur d’inscription', + sign_up_identifier: "Identificateur d'inscription", identifier_description: - 'L’identificateur d’inscription est nécessaire pour la création de compte et doit être inclus dans vote écran de connexion.', - sign_up_authentication: 'Paramètres d’authentification pour l’inscription', + "L'identificateur d'inscription est nécessaire pour la création de compte et doit être inclus dans vote écran de connexion.", + sign_up_authentication: "Paramètres d'authentification pour l'inscription", authentication_description: - 'Toutes les actions sélectionnées seront obligatoires pour que les utilisateurs terminent le processus d’inscription.', + "Toutes les actions sélectionnées seront obligatoires pour que les utilisateurs terminent le processus d'inscription.", set_a_password_option: 'Créer votre mot de passe', - verify_at_sign_up_option: 'Vérifier lors de l’inscription', + verify_at_sign_up_option: "Vérifier lors de l'inscription", social_only_creation_description: - '(Ceci s’applique à la création de compte uniquement via un réseau social)', + "(Ceci s'applique à la création de compte uniquement via un réseau social)", }, sign_in: { title: 'CONNEXION', sign_in_identifier_and_auth: - 'Identificateurs et paramètres d’authentification pour la connexion', + "Identificateurs et paramètres d'authentification pour la connexion", description: - 'Les utilisateurs peuvent se connecter en utilisant n’importe quelle option disponible. Ajustez la mise en page en faisant glisser et en déposant les options ci-dessous.', + "Les utilisateurs peuvent se connecter en utilisant n'importe quelle option disponible. Ajustez la mise en page en faisant glisser et en déposant les options ci-dessous.", add_sign_in_method: 'Ajouter une méthode de connexion', password_auth: 'Mot de passe', verification_code_auth: 'Code de vérification', auth_swap_tip: 'Echangez les options ci-dessous pour déterminer celle qui apparait en premier dans le processus.', - require_auth_factor: 'Vous devez sélectionner au moins un élément d’authentification.', + require_auth_factor: "Vous devez sélectionner au moins un élément d'authentification.", }, social_sign_in: { title: 'CONNEXION VIA RÉSEAU SOCIAL', social_sign_in: 'Connexion via réseau social', description: - 'Selon l’identificateur obligatoire que vous avez mis en place, votre utilisateur peut être invité à fournir un identificateur lors de l’inscription via un réseau social.', + "Selon l'identificateur obligatoire que vous avez mis en place, votre utilisateur peut être invité à fournir un identificateur lors de l'inscription via un réseau social.", add_social_connector: 'Ajouter un connecteur social', set_up_hint: { not_in_list: 'Pas dans la liste?', set_up_more: 'Configurer', - go_to: 'd’autres connecteurs sociaux maintenant.', + go_to: "d'autres connecteurs sociaux maintenant.", }, }, tip: { set_a_password: - 'Un ensemble unique de mot de passe pour votre nom d’utilisateur est essentiel.', + "Un ensemble unique de mot de passe pour votre nom d'utilisateur est essentiel.", verify_at_sign_up: - 'Nous ne prenons actuellement en charge que les adresses e-mail vérifiée. Votre base utilisateur peut contenir un grand nombre d’adresses e-mail de mauvaise qualité s’il n’y a pas de validation.', + "Nous ne prenons actuellement en charge que les adresses e-mail vérifiée. Votre base utilisateur peut contenir un grand nombre d'adresses e-mail de mauvaise qualité s'il n'y a pas de validation.", password_auth: - 'Ceci est essentiel car vous avez activé l’option de configuration d’un mot de passe au cours du processus d’inscription.', + "Ceci est essentiel car vous avez activé l'option de configuration d'un mot de passe au cours du processus d'inscription.", verification_code_auth: - 'Ceci est essentiel car vous avez uniquement activé l’option de fourniture d’un code de vérification lors de l’inscription. Vous pouvez décocher la case lorsque la configuration d’un mot de passe est autorisée lors du processus d’inscription.', + "Ceci est essentiel car vous avez uniquement activé l'option de fourniture d'un code de vérification lors de l'inscription. Vous pouvez décocher la case lorsque la configuration d'un mot de passe est autorisée lors du processus d'inscription.", delete_sign_in_method: 'Ceci est essentiel car vous avez sélectionné {{identifier}} comme identificateur requis.', }, advanced_options: { - /** UNTRANSLATED */ - title: 'ADVANCED OPTIONS', - /** UNTRANSLATED */ - enable_user_registration: 'Enable user registration', - /** UNTRANSLATED */ + title: 'OPTIONS AVANCÉES', + enable_user_registration: "Activer l'inscription des utilisateurs", enable_user_registration_description: - 'Enable or disallow user registration. Once disabled, users can still be added in the admin console but users can no longer establish accounts through the sign-in UI.', + "Activer ou interdire l'inscription des utilisateurs. Une fois désactivée, les utilisateurs peuvent toujours être ajoutés à la console d'administration mais ne peuvent plus créer de compte via l'interface de connexion.", }, }; diff --git a/packages/phrases/src/locales/fr/translation/admin-console/upsell.ts b/packages/phrases/src/locales/fr/translation/admin-console/upsell.ts deleted file mode 100644 index 4cd1a0d9d..000000000 --- a/packages/phrases/src/locales/fr/translation/admin-console/upsell.ts +++ /dev/null @@ -1,87 +0,0 @@ -const upsell = { - pro_tag: 'PRO', - upgrade_plan: 'Mettre à niveau le plan', - compare_plans: 'Comparer les plans', - get_started: { - title: "Commencez votre parcours d'identité fluide avec un plan gratuit!", - description: - "Le plan gratuit est parfait pour essayer Logto sur vos projets personnels ou vos essais. Pour tirer pleinement parti des fonctionnalités de Logto pour votre équipe, passez à un abonnement payant pour bénéficier d'un accès illimité aux fonctionnalités premium : utilisation illimitée des MAU, intégration machine à machine, gestion des RBAC, journaux d'audit à long terme, etc. Voir tous les plans", - }, - create_tenant: { - title: 'Sélectionnez votre plan pour le locataire', - description: - 'Logto propose des options de plan compétitives avec une tarification innovante et abordable conçue pour les entreprises en croissance. En savoir plus', - base_price: 'Prix de base', - monthly_price: '{{value, number}}/mois', - mau_unit_price: 'Prix unitaire MAU', - view_all_features: 'Voir toutes les fonctionnalités', - select_plan: 'Sélectionnez ', - free_tenants_limit: "Jusqu'à {{count, number}} locataire gratuit", - free_tenants_limit_other: "Jusqu'à {{count, number}} locataires gratuits", - most_popular: 'Le plus populaire', - upgrade_success: 'Passage réussi à ', - }, - paywall: { - applications: - "Limite de {{count, number}} application de atteinte. Mettez à niveau le plan pour répondre aux besoins de votre équipe. Pour toute assistance, n'hésitez pas à nous contacter.", - applications_other: - "Limite de {{count, number}} applications de atteinte. Mettez à niveau le plan pour répondre aux besoins de votre équipe. Pour toute assistance, n'hésitez pas à nous contacter.", - machine_to_machine_feature: - "Passez à un abonnement payant pour créer des applications de machine à machine, ainsi que pour accéder à toutes les fonctionnalités premium. Pour toute assistance, n'hésitez pas à nous contacter.", - machine_to_machine: - "Limite de {{count, number}} application de machine à machine de atteinte. Mettez à niveau le plan pour répondre aux besoins de votre équipe. Pour toute assistance, n'hésitez pas à nous contacter.", - machine_to_machine_other: - "Limite de {{count, number}} applications de machine à machine de atteinte. Mettez à niveau le plan pour répondre aux besoins de votre équipe. Pour toute assistance, n'hésitez pas à nous contacter.", - resources: - 'Vous avez atteint la limite de {{count, number}} ressource API de . Mettez à niveau votre plan pour répondre aux besoins de votre équipe. Contactez-nous pour toute assistance.', - resources_other: - 'Vous avez atteint la limite de {{count, number}} ressources API de . Mettez à niveau votre plan pour répondre aux besoins de votre équipe. Contactez-nous pour toute assistance.', - scopes_per_resource: - 'Vous avez atteint la limite de {{count, number}} permission par ressource API de . Mettez à niveau maintenant pour étendre. Contactez-nous pour toute assistance.', - scopes_per_resource_other: - 'Vous avez atteint la limite de {{count, number}} permissions par ressource API de . Mettez à niveau maintenant pour étendre. Contactez-nous pour toute assistance.', - custom_domain: - "Déverrouillez la fonctionnalité de domaine personnalisé et une gamme d'avantages premium en passant à un plan payant. N'hésitez pas à nous contacter si vous avez besoin d'aide.", - social_connectors: - "Vous avez atteint la limite de {{count, number}} connecteur social de . Pour répondre aux besoins de votre équipe, passez à un plan supérieur pour obtenir des connecteurs sociaux supplémentaires et la possibilité de créer vos propres connecteurs en utilisant les protocoles OIDC, OAuth 2.0 et SAML. N'hésitez pas à nous contacter si vous avez besoin d'aide.", - social_connectors_other: - "Vous avez atteint la limite de {{count, number}} connecteurs sociaux de . Pour répondre aux besoins de votre équipe, passez à un plan supérieur pour obtenir des connecteurs sociaux supplémentaires et la possibilité de créer vos propres connecteurs en utilisant les protocoles OIDC, OAuth 2.0 et SAML. N'hésitez pas à nous contacter si vous avez besoin d'aide.", - standard_connectors_feature: - "Mettez à niveau vers un plan payant pour créer vos propres connecteurs en utilisant les protocoles OIDC, OAuth 2.0 et SAML, ainsi qu'un accès illimité aux connecteurs sociaux et à toutes les fonctionnalités premium. N'hésitez pas à nous contacter si vous avez besoin d'aide.", - standard_connectors: - "Vous avez atteint la limite de {{count, number}} connecteur social de . Pour répondre aux besoins de votre équipe, passez à un plan supérieur pour obtenir des connecteurs sociaux supplémentaires et la possibilité de créer vos propres connecteurs en utilisant les protocoles OIDC, OAuth 2.0 et SAML. N'hésitez pas à nous contacter si vous avez besoin d'aide.", - standard_connectors_other: - "Vous avez atteint la limite de {{count, number}} connecteurs sociaux de . Pour répondre aux besoins de votre équipe, passez à un plan supérieur pour obtenir des connecteurs sociaux supplémentaires et la possibilité de créer vos propres connecteurs en utilisant les protocoles OIDC, OAuth 2.0 et SAML. N'hésitez pas à nous contacter si vous avez besoin d'aide.", - standard_connectors_pro: - "Vous avez atteint la limite de {{count, number}} connecteur standard de . Pour répondre aux besoins de votre équipe, passez au plan Entreprise pour obtenir des connecteurs sociaux supplémentaires et la possibilité de créer vos propres connecteurs en utilisant les protocoles OIDC, OAuth 2.0 et SAML. N'hésitez pas à nous contacter si vous avez besoin d'aide.", - standard_connectors_pro_other: - "Vous avez atteint la limite de {{count, number}} connecteurs standard de . Pour répondre aux besoins de votre équipe, passez au plan Entreprise pour obtenir des connecteurs sociaux supplémentaires et la possibilité de créer vos propres connecteurs en utilisant les protocoles OIDC, OAuth 2.0 et SAML. N'hésitez pas à nous contacter si vous avez besoin d'aide.", - roles: - "Vous avez atteint la limite de {{count, number}} rôle de . Mettez à niveau votre plan pour ajouter des rôles et des permissions supplémentaires. N'hésitez pas à nous contacter si vous avez besoin d'aide.", - roles_other: - "Vous avez atteint la limite de {{count, number}} rôles de . Mettez à niveau votre plan pour ajouter des rôles et des permissions supplémentaires. N'hésitez pas à nous contacter si vous avez besoin d'aide.", - scopes_per_role: - "Vous avez atteint la limite de {{count, number}} permission par rôle de . Mettez à niveau votre plan pour ajouter des rôles et des permissions supplémentaires. Pour toute assistance, n'hésitez pas à nous contacter.", - scopes_per_role_other: - "Vous avez atteint la limite de {{count, number}} permissions par rôle de . Mettez à niveau votre plan pour ajouter des rôles et des permissions supplémentaires. Pour toute assistance, n'hésitez pas à nous contacter.", - hooks: - "Vous avez atteint la limite de {{count, number}} webhook de . Mettez à niveau votre plan pour créer plus de webhooks. N'hésitez pas à nous contacter si vous avez besoin d'aide.", - hooks_other: - "Vous avez atteint la limite de {{count, number}} webhooks de . Mettez à niveau votre plan pour créer plus de webhooks. N'hésitez pas à nous contacter si vous avez besoin d'aide.", - }, - mau_exceeded_modal: { - title: 'La limite de MAU a été dépassée. Mettez à niveau votre plan.', - notification: - 'Votre MAU actuel a dépassé la limite de . Veuillez mettre à niveau votre plan pour passer à la version premium rapidement et éviter la suspension du service Logto.', - update_plan: 'Mettre à jour le plan', - }, - payment_overdue_modal: { - title: 'Paiement de facture en retard', - notification: - 'Oups ! Le paiement de la facture du locataire {{name}} a échoué. Veuillez payer la facture rapidement pour éviter la suspension du service Logto.', - unpaid_bills: 'Factures impayées', - update_payment: 'Mettre à jour le paiement', - }, -}; - -export default Object.freeze(upsell); diff --git a/packages/phrases/src/locales/fr/translation/admin-console/upsell/index.ts b/packages/phrases/src/locales/fr/translation/admin-console/upsell/index.ts new file mode 100644 index 000000000..8fce129ce --- /dev/null +++ b/packages/phrases/src/locales/fr/translation/admin-console/upsell/index.ts @@ -0,0 +1,42 @@ +import paywall from './paywall.js'; + +const upsell = { + pro_tag: 'PRO', + upgrade_plan: 'Mettre à niveau le plan', + compare_plans: 'Comparer les plans', + get_started: { + title: "Commencez votre parcours d'identité fluide avec un plan gratuit!", + description: + "Le plan gratuit est parfait pour essayer Logto sur vos projets personnels ou vos essais. Pour tirer pleinement parti des fonctionnalités de Logto pour votre équipe, passez à un abonnement payant pour bénéficier d'un accès illimité aux fonctionnalités premium : utilisation illimitée des MAU, intégration machine à machine, gestion des RBAC, journaux d'audit à long terme, etc. Voir tous les plans", + }, + create_tenant: { + title: 'Sélectionnez votre plan pour le locataire', + description: + 'Logto propose des options de plan compétitives avec une tarification innovante et abordable conçue pour les entreprises en croissance. En savoir plus', + base_price: 'Prix de base', + monthly_price: '{{value, number}}/mois', + mau_unit_price: 'Prix unitaire MAU', + view_all_features: 'Voir toutes les fonctionnalités', + select_plan: 'Sélectionnez ', + free_tenants_limit: "Jusqu'à {{count, number}} locataire gratuit", + free_tenants_limit_other: "Jusqu'à {{count, number}} locataires gratuits", + most_popular: 'Le plus populaire', + upgrade_success: 'Passage réussi à ', + }, + mau_exceeded_modal: { + title: 'La limite de MAU a été dépassée. Mettez à niveau votre plan.', + notification: + 'Votre MAU actuel a dépassé la limite de . Veuillez mettre à niveau votre plan pour passer à la version premium rapidement et éviter la suspension du service Logto.', + update_plan: 'Mettre à jour le plan', + }, + payment_overdue_modal: { + title: 'Paiement de facture en retard', + notification: + 'Oups ! Le paiement de la facture du locataire {{name}} a échoué. Veuillez payer la facture rapidement pour éviter la suspension du service Logto.', + unpaid_bills: 'Factures impayées', + update_payment: 'Mettre à jour le paiement', + }, + paywall, +}; + +export default Object.freeze(upsell); diff --git a/packages/phrases/src/locales/fr/translation/admin-console/upsell/paywall.ts b/packages/phrases/src/locales/fr/translation/admin-console/upsell/paywall.ts new file mode 100644 index 000000000..1dcee3b13 --- /dev/null +++ b/packages/phrases/src/locales/fr/translation/admin-console/upsell/paywall.ts @@ -0,0 +1,50 @@ +const paywall = { + applications: + "Limite de {{count, number}} application de atteinte. Mettez à niveau le plan pour répondre aux besoins de votre équipe. Pour toute assistance, n'hésitez pas à nous contacter.", + applications_other: + "Limite de {{count, number}} applications de atteinte. Mettez à niveau le plan pour répondre aux besoins de votre équipe. Pour toute assistance, n'hésitez pas à nous contacter.", + machine_to_machine_feature: + "Passez à un abonnement payant pour créer des applications de machine à machine, ainsi que pour accéder à toutes les fonctionnalités premium. Pour toute assistance, n'hésitez pas à nous contacter.", + machine_to_machine: + "Limite de {{count, number}} application de machine à machine de atteinte. Mettez à niveau le plan pour répondre aux besoins de votre équipe. Pour toute assistance, n'hésitez pas à nous contacter.", + machine_to_machine_other: + "Limite de {{count, number}} applications de machine à machine de atteinte. Mettez à niveau le plan pour répondre aux besoins de votre équipe. Pour toute assistance, n'hésitez pas à nous contacter.", + resources: + 'Vous avez atteint la limite de {{count, number}} ressource API de . Mettez à niveau votre plan pour répondre aux besoins de votre équipe. Contactez-nous pour toute assistance.', + resources_other: + 'Vous avez atteint la limite de {{count, number}} ressources API de . Mettez à niveau votre plan pour répondre aux besoins de votre équipe. Contactez-nous pour toute assistance.', + scopes_per_resource: + 'Vous avez atteint la limite de {{count, number}} permission par ressource API de . Mettez à niveau maintenant pour étendre. Contactez-nous pour toute assistance.', + scopes_per_resource_other: + 'Vous avez atteint la limite de {{count, number}} permissions par ressource API de . Mettez à niveau maintenant pour étendre. Contactez-nous pour toute assistance.', + custom_domain: + "Déverrouillez la fonctionnalité de domaine personnalisé et une gamme d'avantages premium en passant à un plan payant. N'hésitez pas à nous contacter si vous avez besoin d'aide.", + social_connectors: + "Vous avez atteint la limite de {{count, number}} connecteur social de . Pour répondre aux besoins de votre équipe, passez à un plan supérieur pour obtenir des connecteurs sociaux supplémentaires et la possibilité de créer vos propres connecteurs en utilisant les protocoles OIDC, OAuth 2.0 et SAML. N'hésitez pas à nous contacter si vous avez besoin d'aide.", + social_connectors_other: + "Vous avez atteint la limite de {{count, number}} connecteurs sociaux de . Pour répondre aux besoins de votre équipe, passez à un plan supérieur pour obtenir des connecteurs sociaux supplémentaires et la possibilité de créer vos propres connecteurs en utilisant les protocoles OIDC, OAuth 2.0 et SAML. N'hésitez pas à nous contacter si vous avez besoin d'aide.", + standard_connectors_feature: + "Mettez à niveau vers un plan payant pour créer vos propres connecteurs en utilisant les protocoles OIDC, OAuth 2.0 et SAML, ainsi qu'un accès illimité aux connecteurs sociaux et à toutes les fonctionnalités premium. N'hésitez pas à nous contacter si vous avez besoin d'aide.", + standard_connectors: + "Vous avez atteint la limite de {{count, number}} connecteur social de . Pour répondre aux besoins de votre équipe, passez à un plan supérieur pour obtenir des connecteurs sociaux supplémentaires et la possibilité de créer vos propres connecteurs en utilisant les protocoles OIDC, OAuth 2.0 et SAML. N'hésitez pas à nous contacter si vous avez besoin d'aide.", + standard_connectors_other: + "Vous avez atteint la limite de {{count, number}} connecteurs sociaux de . Pour répondre aux besoins de votre équipe, passez à un plan supérieur pour obtenir des connecteurs sociaux supplémentaires et la possibilité de créer vos propres connecteurs en utilisant les protocoles OIDC, OAuth 2.0 et SAML. N'hésitez pas à nous contacter si vous avez besoin d'aide.", + standard_connectors_pro: + "Vous avez atteint la limite de {{count, number}} connecteur standard de . Pour répondre aux besoins de votre équipe, passez au plan Entreprise pour obtenir des connecteurs sociaux supplémentaires et la possibilité de créer vos propres connecteurs en utilisant les protocoles OIDC, OAuth 2.0 et SAML. N'hésitez pas à nous contacter si vous avez besoin d'aide.", + standard_connectors_pro_other: + "Vous avez atteint la limite de {{count, number}} connecteurs standard de . Pour répondre aux besoins de votre équipe, passez au plan Entreprise pour obtenir des connecteurs sociaux supplémentaires et la possibilité de créer vos propres connecteurs en utilisant les protocoles OIDC, OAuth 2.0 et SAML. N'hésitez pas à nous contacter si vous avez besoin d'aide.", + roles: + "Vous avez atteint la limite de {{count, number}} rôle de . Mettez à niveau votre plan pour ajouter des rôles et des permissions supplémentaires. N'hésitez pas à nous contacter si vous avez besoin d'aide.", + roles_other: + "Vous avez atteint la limite de {{count, number}} rôles de . Mettez à niveau votre plan pour ajouter des rôles et des permissions supplémentaires. N'hésitez pas à nous contacter si vous avez besoin d'aide.", + scopes_per_role: + "Vous avez atteint la limite de {{count, number}} permission par rôle de . Mettez à niveau votre plan pour ajouter des rôles et des permissions supplémentaires. Pour toute assistance, n'hésitez pas à nous contacter.", + scopes_per_role_other: + "Vous avez atteint la limite de {{count, number}} permissions par rôle de . Mettez à niveau votre plan pour ajouter des rôles et des permissions supplémentaires. Pour toute assistance, n'hésitez pas à nous contacter.", + hooks: + "Vous avez atteint la limite de {{count, number}} webhook de . Mettez à niveau votre plan pour créer plus de webhooks. N'hésitez pas à nous contacter si vous avez besoin d'aide.", + hooks_other: + "Vous avez atteint la limite de {{count, number}} webhooks de . Mettez à niveau votre plan pour créer plus de webhooks. N'hésitez pas à nous contacter si vous avez besoin d'aide.", +}; + +export default Object.freeze(paywall); diff --git a/packages/phrases/src/locales/it/errors/password.ts b/packages/phrases/src/locales/it/errors/password.ts index 2418b11ee..5102755ff 100644 --- a/packages/phrases/src/locales/it/errors/password.ts +++ b/packages/phrases/src/locales/it/errors/password.ts @@ -1,8 +1,8 @@ const password = { unsupported_encryption_method: 'Il metodo di crittografia {{name}} non è supportato.', pepper_not_found: 'Pepper password non trovato. Per favore controlla le tue env di core.', - /** UNTRANSLATED */ - rejected: 'Password rejected. Please check if your password meets the requirements.', + rejected: + 'La password è stata rifiutata. Per favore verifica se la tua password soddisfa i requisiti.', }; export default Object.freeze(password); diff --git a/packages/phrases/src/locales/it/errors/sign-in-experiences.ts b/packages/phrases/src/locales/it/errors/sign-in-experiences.ts index f0f2bf1f4..b7c63faf4 100644 --- a/packages/phrases/src/locales/it/errors/sign-in-experiences.ts +++ b/packages/phrases/src/locales/it/errors/sign-in-experiences.ts @@ -18,10 +18,8 @@ const sign_in_experiences = { 'Il metodo di accesso con codice di verifica deve essere abilitato quando non è richiesta una password nella registrazione.', unsupported_default_language: 'Questa lingua - {{language}} non è supportata al momento.', at_least_one_authentication_factor: 'Devi selezionare almeno un fattore di autenticazione.', - /** UNTRANSLATED */ - backup_code_cannot_be_enabled_alone: 'Backup code cannot be enabled alone.', - /** UNTRANSLATED */ - duplicated_mfa_factors: 'Duplicated MFA factors.', + backup_code_cannot_be_enabled_alone: 'Il codice di backup non può essere abilitato da solo.', + duplicated_mfa_factors: 'Fattori MFA duplicati.', }; export default Object.freeze(sign_in_experiences); diff --git a/packages/phrases/src/locales/it/translation/admin-console/index.ts b/packages/phrases/src/locales/it/translation/admin-console/index.ts index 6884f5746..7e6254dfa 100644 --- a/packages/phrases/src/locales/it/translation/admin-console/index.ts +++ b/packages/phrases/src/locales/it/translation/admin-console/index.ts @@ -28,7 +28,7 @@ import tab_sections from './tab-sections.js'; import tabs from './tabs.js'; import tenants from './tenants.js'; import topbar from './topbar.js'; -import upsell from './upsell.js'; +import upsell from './upsell/index.js'; import user_details from './user-details.js'; import users from './users.js'; import webhook_details from './webhook-details.js'; diff --git a/packages/phrases/src/locales/it/translation/admin-console/sign-in-exp/index.ts b/packages/phrases/src/locales/it/translation/admin-console/sign-in-exp/index.ts index 9055cbd1e..2455713a2 100644 --- a/packages/phrases/src/locales/it/translation/admin-console/sign-in-exp/index.ts +++ b/packages/phrases/src/locales/it/translation/admin-console/sign-in-exp/index.ts @@ -11,8 +11,7 @@ const sign_in_exp = { branding: 'Marchio', sign_up_and_sign_in: 'Registrazione e accesso', content: 'Contenuto', - /** UNTRANSLATED */ - password_policy: 'Password policy', + password_policy: 'Politica sulla password', }, welcome: { title: "Personalizza l'esperienza di accesso", diff --git a/packages/phrases/src/locales/it/translation/admin-console/sign-in-exp/password-policy.ts b/packages/phrases/src/locales/it/translation/admin-console/sign-in-exp/password-policy.ts index f54c9f77b..6449bc7dd 100644 --- a/packages/phrases/src/locales/it/translation/admin-console/sign-in-exp/password-policy.ts +++ b/packages/phrases/src/locales/it/translation/admin-console/sign-in-exp/password-policy.ts @@ -1,45 +1,28 @@ const password_policy = { - /** UNTRANSLATED */ - password_requirements: 'Password requirements', - /** UNTRANSLATED */ - minimum_length: 'Minimum length', - /** UNTRANSLATED */ - minimum_length_description: 'NIST suggests using at least 8 characters for web products.', - /** UNTRANSLATED */ - minimum_length_error: 'Minimum length must be between {{min}} and {{max}} (inclusive).', - /** UNTRANSLATED */ - minimum_required_char_types: 'Minimum required character types', - /** UNTRANSLATED */ + password_requirements: 'Requisiti per la password', + minimum_length: 'Lunghezza minima', + minimum_length_description: 'NIST consiglia di utilizzare almeno 8 caratteri per i prodotti web.', + minimum_length_error: 'La lunghezza minima deve essere compresa tra {{min}} e {{max}} (inclusi).', + minimum_required_char_types: 'Tipi di caratteri minimi richiesti', minimum_required_char_types_description: - 'Character types: uppercase (A-Z), lowercase (a-z), numbers (0-9), and special symbols ({{symbols}}).', - /** UNTRANSLATED */ - password_rejection: 'Password rejection', - /** UNTRANSLATED */ - compromised_passwords: 'Reject compromised password', - /** UNTRANSLATED */ - breached_passwords: 'Breached passwords', - /** UNTRANSLATED */ - breached_passwords_description: 'Reject passwords previously found in breach databases.', - /** UNTRANSLATED */ - restricted_phrases: 'Restrict low-security phrases', - /** UNTRANSLATED */ + 'Tipi di caratteri: maiuscole (A-Z), minuscole (a-z), numeri (0-9) e simboli speciali ({{symbols}}).', + password_rejection: 'Rifiuto password', + compromised_passwords: 'Rifiuta password compromesse', + breached_passwords: 'Password violate', + breached_passwords_description: + 'Rifiuta password trovate in precedenza nei database delle violazioni.', + restricted_phrases: 'Limita frasi poco sicure', restricted_phrases_tooltip: - 'Users cannot use passwords that are exactly the same as or made up of the listed phrases below. The addition of 3 or more non-consecutive characters is allowed to increase password complexity.', - /** UNTRANSLATED */ - repetitive_or_sequential_characters: 'Repetitive or sequential characters', - /** UNTRANSLATED */ - repetitive_or_sequential_characters_description: 'E.g., "AAAA", "1234", and "abcd".', - /** UNTRANSLATED */ - user_information: 'User information', - /** UNTRANSLATED */ - user_information_description: 'E.g., email address, phone number, username, etc.', - /** UNTRANSLATED */ - custom_words: 'Custom words', - /** UNTRANSLATED */ + 'La tua password dovrebbe evitare queste frasi a meno che non le combiniate con 3 o più caratteri extra.', + repetitive_or_sequential_characters: 'Caratteri ripetitivi o sequenziali', + repetitive_or_sequential_characters_description: 'Ad esempio, "AAAA", "1234" e "abcd".', + user_information: 'Informazioni utente', + user_information_description: + 'Ad esempio, indirizzo email, numero di telefono, nome utente, ecc.', + custom_words: 'Parole personalizzate', custom_words_description: - 'Personalize context-specific words, case-insensitive, and one per line.', - /** UNTRANSLATED */ - custom_words_placeholder: 'Your service name, company name, etc.', + 'Personalizza parole specifiche del contesto, non case-sensitive, una per riga.', + custom_words_placeholder: "Nome del tuo servizio, nome dell'azienda, ecc.", }; export default Object.freeze(password_policy); diff --git a/packages/phrases/src/locales/it/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts b/packages/phrases/src/locales/it/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts index 32251d240..9758f9bc6 100644 --- a/packages/phrases/src/locales/it/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts +++ b/packages/phrases/src/locales/it/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts @@ -54,13 +54,10 @@ const sign_up_and_sign_in = { 'Questo è essenziale in quanto hai selezionato {{identifier}} come identificatore obbligatorio.', }, advanced_options: { - /** UNTRANSLATED */ - title: 'ADVANCED OPTIONS', - /** UNTRANSLATED */ - enable_user_registration: 'Enable user registration', - /** UNTRANSLATED */ + title: 'OPZIONI AVANZATE', + enable_user_registration: 'Abilita registrazione utente', enable_user_registration_description: - 'Enable or disallow user registration. Once disabled, users can still be added in the admin console but users can no longer establish accounts through the sign-in UI.', + "Abilita o disabilita la registrazione degli utenti. Una volta disabilitata, gli utenti possono comunque essere aggiunti nella console di amministrazione, ma gli utenti non possono più creare account tramite l'interfaccia di accesso.", }, }; diff --git a/packages/phrases/src/locales/it/translation/admin-console/upsell.ts b/packages/phrases/src/locales/it/translation/admin-console/upsell.ts deleted file mode 100644 index 9397eeb35..000000000 --- a/packages/phrases/src/locales/it/translation/admin-console/upsell.ts +++ /dev/null @@ -1,87 +0,0 @@ -const upsell = { - pro_tag: 'PRO', - upgrade_plan: 'Aggiorna piano', - compare_plans: 'Confronta i piani', - get_started: { - title: 'Inizia il tuo percorso di identità senza interruzioni con un piano gratuito!', - description: - "Il piano gratuito è perfetto per provare Logto nei tuoi progetti personali o test. Per sfruttare al massimo le capacità di Logto per il tuo team, esegui l'upgrade per ottenere l'accesso illimitato alle funzionalità premium: utilizzo illimitato di MAU, integrazione da macchina a macchina, gestione RBAC, registri di audit a lungo termine, ecc. Visualizza tutti i piani", - }, - create_tenant: { - title: 'Seleziona il piano del tenant', - description: - 'Logto offre opzioni competitive di piani con una struttura dei prezzi innovativa e conveniente progettata per le aziende in crescita. Scopri di più', - base_price: 'Prezzo base', - monthly_price: '{{value, number}}/mese', - mau_unit_price: 'Prezzo unitario MAU', - view_all_features: 'Visualizza tutte le funzionalità', - select_plan: 'Seleziona ', - free_tenants_limit: 'Fino a {{count, number}} tenant gratuito', - free_tenants_limit_other: 'Fino a {{count, number}} tenant gratuiti', - most_popular: 'Più popolare', - upgrade_success: 'Aggiornamento a effettuato con successo', - }, - paywall: { - applications: - 'Limite di {{count, number}} applicazione di raggiunto. Aggiorna il piano per soddisfare le esigenze del tuo team. Per qualsiasi assistenza, non esitare a contattarci.', - applications_other: - 'Limite di {{count, number}} applicazioni di raggiunto. Aggiorna il piano per soddisfare le esigenze del tuo team. Per qualsiasi assistenza, non esitare a contattarci.', - machine_to_machine_feature: - 'Aggiorna a un piano a pagamento per creare applicazioni machine-to-machine e accedere a tutte le funzionalità premium. Per qualsiasi assistenza, non esitare a contattarci.', - machine_to_machine: - 'Limite di {{count, number}} applicazione machine-to-machine di raggiunto. Aggiorna il piano per soddisfare le esigenze del tuo team. Per qualsiasi assistenza, non esitare a contattarci.', - machine_to_machine_other: - 'Limite di {{count, number}} applicazioni machine-to-machine di raggiunto. Aggiorna il piano per soddisfare le esigenze del tuo team. Per qualsiasi assistenza, non esitare a contattarci.', - resources: - 'Hai raggiunto il limite di {{count, number}} risorse API di . Aggiorna il piano per soddisfare le esigenze del tuo team. Contattaci per qualsiasi assistenza.', - resources_other: - 'Hai raggiunto il limite di {{count, number}} risorse API di . Aggiorna il piano per soddisfare le esigenze del tuo team. Contattaci per qualsiasi assistenza.', - scopes_per_resource: - 'Hai raggiunto il limite di {{count, number}} autorizzazioni per risorsa API di . Aggiorna ora per espanderlo. Contattaci per qualsiasi assistenza.', - scopes_per_resource_other: - 'Hai raggiunto il limite di {{count, number}} autorizzazioni per risorsa API di . Aggiorna ora per espanderlo. Contattaci per qualsiasi assistenza.', - custom_domain: - 'Sblocca la funzionalità di dominio personalizzato e una serie di vantaggi premium passando a un piano a pagamento. Non esitare a contattarci se hai bisogno di assistenza.', - social_connectors: - 'Hai raggiunto il limite di {{count, number}} connettori sociali di . Passa al piano per ottenere connettori sociali aggiuntivi e la possibilità di creare i tuoi connettori utilizzando i protocolli OIDC, OAuth 2.0 e SAML. Non esitare a contattarci se hai bisogno di assistenza.', - social_connectors_other: - 'Hai raggiunto il limite di {{count, number}} connettori sociali di . Passa al piano per ottenere connettori sociali aggiuntivi e la possibilità di creare i tuoi connettori utilizzando i protocolli OIDC, OAuth 2.0 e SAML. Non esitare a contattarci se hai bisogno di assistenza.', - standard_connectors_feature: - 'Aggiorna a un piano a pagamento per creare i tuoi connettori utilizzando i protocolli OIDC, OAuth 2.0 e SAML, oltre a ottenere connettori sociali illimitati e tutte le funzionalità premium. Non esitare a contattarci se hai bisogno di assistenza.', - standard_connectors: - 'Hai raggiunto il limite di {{count, number}} connettori sociali di . Passa al piano per ottenere connettori sociali aggiuntivi e la possibilità di creare i tuoi connettori utilizzando i protocolli OIDC, OAuth 2.0 e SAML. Non esitare a contattarci se hai bisogno di assistenza.', - standard_connectors_other: - 'Hai raggiunto il limite di {{count, number}} connettori sociali di . Passa al piano per ottenere connettori sociali aggiuntivi e la possibilità di creare i tuoi connettori utilizzando i protocolli OIDC, OAuth 2.0 e SAML. Non esitare a contattarci se hai bisogno di assistenza.', - standard_connectors_pro: - 'Hai raggiunto il limite di {{count, number}} connettori standard di . Passa al piano Enterprise per ottenere connettori sociali aggiuntivi e la possibilità di creare i tuoi connettori utilizzando i protocolli OIDC, OAuth 2.0 e SAML. Non esitare a contattarci se hai bisogno di assistenza.', - standard_connectors_pro_other: - 'Hai raggiunto il limite di {{count, number}} connettori standard di . Passa al piano Enterprise per ottenere connettori sociali aggiuntivi e la possibilità di creare i tuoi connettori utilizzando i protocolli OIDC, OAuth 2.0 e SAML. Non esitare a contattarci se hai bisogno di assistenza.', - roles: - 'Hai raggiunto il limite di {{count, number}} ruoli di . Aggiorna il piano per aggiungere ruoli e autorizzazioni aggiuntive. Non esitare a contattarci se hai bisogno di assistenza.', - roles_other: - 'Hai raggiunto il limite di {{count, number}} ruoli di . Aggiorna il piano per aggiungere ruoli e autorizzazioni aggiuntive. Non esitare a contattarci se hai bisogno di assistenza.', - scopes_per_role: - 'Hai raggiunto il limite di {{count, number}} autorizzazioni per ruolo di . Aggiorna il piano per aggiungere ruoli e autorizzazioni aggiuntive. Non esitare a contattarci se hai bisogno di assistenza.', - scopes_per_role_other: - 'Hai raggiunto il limite di {{count, number}} autorizzazioni per ruolo di . Aggiorna il piano per aggiungere ruoli e autorizzazioni aggiuntive. Non esitare a contattarci se hai bisogno di assistenza.', - hooks: - 'Hai raggiunto il limite di {{count, number}} webhook di . Aggiorna il piano per creare altri webhook. Non esitare a contattarci se hai bisogno di assistenza.', - hooks_other: - 'Hai raggiunto il limite di {{count, number}} webhook di . Aggiorna il piano per creare altri webhook. Non esitare a contattarci se hai bisogno di assistenza.', - }, - mau_exceeded_modal: { - title: 'MAU ha superato il limite. Aggiorna il tuo piano.', - notification: - 'Il tuo MAU attuale ha superato il limite di . Aggiorna al piano premium tempestivamente per evitare la sospensione del servizio Logto.', - update_plan: 'Aggiorna piano', - }, - payment_overdue_modal: { - title: 'Pagamento della fattura in ritardo', - notification: - "Oops! Il pagamento della fattura dell'affittuario {{name}} è fallito. Si prega di pagare tempestivamente la fattura per evitare la sospensione del servizio Logto.", - unpaid_bills: 'Fatture non pagate', - update_payment: 'Aggiorna pagamento', - }, -}; - -export default Object.freeze(upsell); diff --git a/packages/phrases/src/locales/it/translation/admin-console/upsell/index.ts b/packages/phrases/src/locales/it/translation/admin-console/upsell/index.ts new file mode 100644 index 000000000..39dff526b --- /dev/null +++ b/packages/phrases/src/locales/it/translation/admin-console/upsell/index.ts @@ -0,0 +1,42 @@ +import paywall from './paywall.js'; + +const upsell = { + pro_tag: 'PRO', + upgrade_plan: 'Aggiorna piano', + compare_plans: 'Confronta i piani', + get_started: { + title: 'Inizia il tuo percorso di identità senza interruzioni con un piano gratuito!', + description: + "Il piano gratuito è perfetto per provare Logto nei tuoi progetti personali o test. Per sfruttare al massimo le capacità di Logto per il tuo team, esegui l'upgrade per ottenere l'accesso illimitato alle funzionalità premium: utilizzo illimitato di MAU, integrazione da macchina a macchina, gestione RBAC, registri di audit a lungo termine, ecc. Visualizza tutti i piani", + }, + create_tenant: { + title: 'Seleziona il piano del tenant', + description: + 'Logto offre opzioni competitive di piani con una struttura dei prezzi innovativa e conveniente progettata per le aziende in crescita. Scopri di più', + base_price: 'Prezzo base', + monthly_price: '{{value, number}}/mese', + mau_unit_price: 'Prezzo unitario MAU', + view_all_features: 'Visualizza tutte le funzionalità', + select_plan: 'Seleziona ', + free_tenants_limit: 'Fino a {{count, number}} tenant gratuito', + free_tenants_limit_other: 'Fino a {{count, number}} tenant gratuiti', + most_popular: 'Più popolare', + upgrade_success: 'Aggiornamento a effettuato con successo', + }, + mau_exceeded_modal: { + title: 'MAU ha superato il limite. Aggiorna il tuo piano.', + notification: + 'Il tuo MAU attuale ha superato il limite di . Aggiorna al piano premium tempestivamente per evitare la sospensione del servizio Logto.', + update_plan: 'Aggiorna piano', + }, + payment_overdue_modal: { + title: 'Pagamento della fattura in ritardo', + notification: + "Oops! Il pagamento della fattura dell'affittuario {{name}} è fallito. Si prega di pagare tempestivamente la fattura per evitare la sospensione del servizio Logto.", + unpaid_bills: 'Fatture non pagate', + update_payment: 'Aggiorna pagamento', + }, + paywall, +}; + +export default Object.freeze(upsell); diff --git a/packages/phrases/src/locales/it/translation/admin-console/upsell/paywall.ts b/packages/phrases/src/locales/it/translation/admin-console/upsell/paywall.ts new file mode 100644 index 000000000..bd00ab0a0 --- /dev/null +++ b/packages/phrases/src/locales/it/translation/admin-console/upsell/paywall.ts @@ -0,0 +1,50 @@ +const paywall = { + applications: + 'Limite di {{count, number}} applicazione di raggiunto. Aggiorna il piano per soddisfare le esigenze del tuo team. Per qualsiasi assistenza, non esitare a contattarci.', + applications_other: + 'Limite di {{count, number}} applicazioni di raggiunto. Aggiorna il piano per soddisfare le esigenze del tuo team. Per qualsiasi assistenza, non esitare a contattarci.', + machine_to_machine_feature: + 'Aggiorna a un piano a pagamento per creare applicazioni machine-to-machine e accedere a tutte le funzionalità premium. Per qualsiasi assistenza, non esitare a contattarci.', + machine_to_machine: + 'Limite di {{count, number}} applicazione machine-to-machine di raggiunto. Aggiorna il piano per soddisfare le esigenze del tuo team. Per qualsiasi assistenza, non esitare a contattarci.', + machine_to_machine_other: + 'Limite di {{count, number}} applicazioni machine-to-machine di raggiunto. Aggiorna il piano per soddisfare le esigenze del tuo team. Per qualsiasi assistenza, non esitare a contattarci.', + resources: + 'Hai raggiunto il limite di {{count, number}} risorse API di . Aggiorna il piano per soddisfare le esigenze del tuo team. Contattaci per qualsiasi assistenza.', + resources_other: + 'Hai raggiunto il limite di {{count, number}} risorse API di . Aggiorna il piano per soddisfare le esigenze del tuo team. Contattaci per qualsiasi assistenza.', + scopes_per_resource: + 'Hai raggiunto il limite di {{count, number}} autorizzazioni per risorsa API di . Aggiorna ora per espanderlo. Contattaci per qualsiasi assistenza.', + scopes_per_resource_other: + 'Hai raggiunto il limite di {{count, number}} autorizzazioni per risorsa API di . Aggiorna ora per espanderlo. Contattaci per qualsiasi assistenza.', + custom_domain: + 'Sblocca la funzionalità di dominio personalizzato e una serie di vantaggi premium passando a un piano a pagamento. Non esitare a contattarci se hai bisogno di assistenza.', + social_connectors: + 'Hai raggiunto il limite di {{count, number}} connettori sociali di . Passa al piano per ottenere connettori sociali aggiuntivi e la possibilità di creare i tuoi connettori utilizzando i protocolli OIDC, OAuth 2.0 e SAML. Non esitare a contattarci se hai bisogno di assistenza.', + social_connectors_other: + 'Hai raggiunto il limite di {{count, number}} connettori sociali di . Passa al piano per ottenere connettori sociali aggiuntivi e la possibilità di creare i tuoi connettori utilizzando i protocolli OIDC, OAuth 2.0 e SAML. Non esitare a contattarci se hai bisogno di assistenza.', + standard_connectors_feature: + 'Aggiorna a un piano a pagamento per creare i tuoi connettori utilizzando i protocolli OIDC, OAuth 2.0 e SAML, oltre a ottenere connettori sociali illimitati e tutte le funzionalità premium. Non esitare a contattarci se hai bisogno di assistenza.', + standard_connectors: + 'Hai raggiunto il limite di {{count, number}} connettori sociali di . Passa al piano per ottenere connettori sociali aggiuntivi e la possibilità di creare i tuoi connettori utilizzando i protocolli OIDC, OAuth 2.0 e SAML. Non esitare a contattarci se hai bisogno di assistenza.', + standard_connectors_other: + 'Hai raggiunto il limite di {{count, number}} connettori sociali di . Passa al piano per ottenere connettori sociali aggiuntivi e la possibilità di creare i tuoi connettori utilizzando i protocolli OIDC, OAuth 2.0 e SAML. Non esitare a contattarci se hai bisogno di assistenza.', + standard_connectors_pro: + 'Hai raggiunto il limite di {{count, number}} connettori standard di . Passa al piano Enterprise per ottenere connettori sociali aggiuntivi e la possibilità di creare i tuoi connettori utilizzando i protocolli OIDC, OAuth 2.0 e SAML. Non esitare a contattarci se hai bisogno di assistenza.', + standard_connectors_pro_other: + 'Hai raggiunto il limite di {{count, number}} connettori standard di . Passa al piano Enterprise per ottenere connettori sociali aggiuntivi e la possibilità di creare i tuoi connettori utilizzando i protocolli OIDC, OAuth 2.0 e SAML. Non esitare a contattarci se hai bisogno di assistenza.', + roles: + 'Hai raggiunto il limite di {{count, number}} ruoli di . Aggiorna il piano per aggiungere ruoli e autorizzazioni aggiuntive. Non esitare a contattarci se hai bisogno di assistenza.', + roles_other: + 'Hai raggiunto il limite di {{count, number}} ruoli di . Aggiorna il piano per aggiungere ruoli e autorizzazioni aggiuntive. Non esitare a contattarci se hai bisogno di assistenza.', + scopes_per_role: + 'Hai raggiunto il limite di {{count, number}} autorizzazioni per ruolo di . Aggiorna il piano per aggiungere ruoli e autorizzazioni aggiuntive. Non esitare a contattarci se hai bisogno di assistenza.', + scopes_per_role_other: + 'Hai raggiunto il limite di {{count, number}} autorizzazioni per ruolo di . Aggiorna il piano per aggiungere ruoli e autorizzazioni aggiuntive. Non esitare a contattarci se hai bisogno di assistenza.', + hooks: + 'Hai raggiunto il limite di {{count, number}} webhook di . Aggiorna il piano per creare altri webhook. Non esitare a contattarci se hai bisogno di assistenza.', + hooks_other: + 'Hai raggiunto il limite di {{count, number}} webhook di . Aggiorna il piano per creare altri webhook. Non esitare a contattarci se hai bisogno di assistenza.', +}; + +export default Object.freeze(paywall); diff --git a/packages/phrases/src/locales/ja/errors/password.ts b/packages/phrases/src/locales/ja/errors/password.ts index 3b9a8385d..1050304c1 100644 --- a/packages/phrases/src/locales/ja/errors/password.ts +++ b/packages/phrases/src/locales/ja/errors/password.ts @@ -1,8 +1,7 @@ const password = { unsupported_encryption_method: '暗号化方式 {{name}} はサポートされていません。', pepper_not_found: 'パスワードペッパーが見つかりません。コアの環境を確認してください。', - /** UNTRANSLATED */ - rejected: 'Password rejected. Please check if your password meets the requirements.', + rejected: 'パスワードが拒否されました。パスワードが要件を満たしているか確認してください。', }; export default Object.freeze(password); diff --git a/packages/phrases/src/locales/ja/errors/sign-in-experiences.ts b/packages/phrases/src/locales/ja/errors/sign-in-experiences.ts index 5f6ea867b..ff704407f 100644 --- a/packages/phrases/src/locales/ja/errors/sign-in-experiences.ts +++ b/packages/phrases/src/locales/ja/errors/sign-in-experiences.ts @@ -18,10 +18,8 @@ const sign_in_experiences = { 'サインアップ時にパスワードが不要な場合、検証コードサインインを有効にする必要があります。', unsupported_default_language: 'この言語- {{language}} は、現時点ではサポートされていません。', at_least_one_authentication_factor: '認証ファクタを1つ以上選択する必要があります。', - /** UNTRANSLATED */ - backup_code_cannot_be_enabled_alone: 'Backup code cannot be enabled alone.', - /** UNTRANSLATED */ - duplicated_mfa_factors: 'Duplicated MFA factors.', + backup_code_cannot_be_enabled_alone: 'バックアップコードは単独で有効にできません。', + duplicated_mfa_factors: '重複したMFAファクタです。', }; export default Object.freeze(sign_in_experiences); diff --git a/packages/phrases/src/locales/ja/translation/admin-console/index.ts b/packages/phrases/src/locales/ja/translation/admin-console/index.ts index 6884f5746..7e6254dfa 100644 --- a/packages/phrases/src/locales/ja/translation/admin-console/index.ts +++ b/packages/phrases/src/locales/ja/translation/admin-console/index.ts @@ -28,7 +28,7 @@ import tab_sections from './tab-sections.js'; import tabs from './tabs.js'; import tenants from './tenants.js'; import topbar from './topbar.js'; -import upsell from './upsell.js'; +import upsell from './upsell/index.js'; import user_details from './user-details.js'; import users from './users.js'; import webhook_details from './webhook-details.js'; diff --git a/packages/phrases/src/locales/ja/translation/admin-console/sign-in-exp/index.ts b/packages/phrases/src/locales/ja/translation/admin-console/sign-in-exp/index.ts index 9a9292767..66a552775 100644 --- a/packages/phrases/src/locales/ja/translation/admin-console/sign-in-exp/index.ts +++ b/packages/phrases/src/locales/ja/translation/admin-console/sign-in-exp/index.ts @@ -10,8 +10,7 @@ const sign_in_exp = { branding: 'ブランディング', sign_up_and_sign_in: 'サインアップとサインイン', content: '内容', - /** UNTRANSLATED */ - password_policy: 'Password policy', + password_policy: 'パスワードポリシー', }, welcome: { title: 'サインインエクスペリエンスをカスタマイズ', diff --git a/packages/phrases/src/locales/ja/translation/admin-console/sign-in-exp/password-policy.ts b/packages/phrases/src/locales/ja/translation/admin-console/sign-in-exp/password-policy.ts index f54c9f77b..3eeb9f9a2 100644 --- a/packages/phrases/src/locales/ja/translation/admin-console/sign-in-exp/password-policy.ts +++ b/packages/phrases/src/locales/ja/translation/admin-console/sign-in-exp/password-policy.ts @@ -1,45 +1,27 @@ const password_policy = { - /** UNTRANSLATED */ - password_requirements: 'Password requirements', - /** UNTRANSLATED */ - minimum_length: 'Minimum length', - /** UNTRANSLATED */ - minimum_length_description: 'NIST suggests using at least 8 characters for web products.', - /** UNTRANSLATED */ - minimum_length_error: 'Minimum length must be between {{min}} and {{max}} (inclusive).', - /** UNTRANSLATED */ - minimum_required_char_types: 'Minimum required character types', - /** UNTRANSLATED */ + password_requirements: 'パスワードの要件', + minimum_length: '最小の長さ', + minimum_length_description: + 'NISTは、Web製品に対して少なくとも8文字を使用することを提案しています。', + minimum_length_error: '最小の長さは {{min}} から {{max}}(両方含む)の間でなければなりません。', + minimum_required_char_types: '必要な文字の種類の最小数', minimum_required_char_types_description: - 'Character types: uppercase (A-Z), lowercase (a-z), numbers (0-9), and special symbols ({{symbols}}).', - /** UNTRANSLATED */ - password_rejection: 'Password rejection', - /** UNTRANSLATED */ - compromised_passwords: 'Reject compromised password', - /** UNTRANSLATED */ - breached_passwords: 'Breached passwords', - /** UNTRANSLATED */ - breached_passwords_description: 'Reject passwords previously found in breach databases.', - /** UNTRANSLATED */ - restricted_phrases: 'Restrict low-security phrases', - /** UNTRANSLATED */ + '文字の種類:大文字(A-Z)、小文字(a-z)、数字(0-9)、特殊記号({{symbols}})。', + password_rejection: 'パスワードの拒否', + compromised_passwords: '危険なパスワードの拒否', + breached_passwords: '漏洩したパスワードの拒否', + breached_passwords_description: '以前に漏洩したデータベースで見つかったパスワードを拒否します。', + restricted_phrases: '低セキュリティフレーズの制限', restricted_phrases_tooltip: - 'Users cannot use passwords that are exactly the same as or made up of the listed phrases below. The addition of 3 or more non-consecutive characters is allowed to increase password complexity.', - /** UNTRANSLATED */ - repetitive_or_sequential_characters: 'Repetitive or sequential characters', - /** UNTRANSLATED */ - repetitive_or_sequential_characters_description: 'E.g., "AAAA", "1234", and "abcd".', - /** UNTRANSLATED */ - user_information: 'User information', - /** UNTRANSLATED */ - user_information_description: 'E.g., email address, phone number, username, etc.', - /** UNTRANSLATED */ - custom_words: 'Custom words', - /** UNTRANSLATED */ + 'パスワードにこれらのフレーズを使用しないでください。ただし、追加の文字を3文字以上組み合わせる場合は例外です。', + repetitive_or_sequential_characters: '繰り返しまたは連続する文字', + repetitive_or_sequential_characters_description: '「AAAA」、「1234」、「abcd」などです。', + user_information: 'ユーザー情報', + user_information_description: '例: メールアドレス、電話番号、ユーザー名など。', + custom_words: 'カスタムワード', custom_words_description: - 'Personalize context-specific words, case-insensitive, and one per line.', - /** UNTRANSLATED */ - custom_words_placeholder: 'Your service name, company name, etc.', + '特定の文脈に関連するワードを、大文字小文字を区別せずに、1つの行に1つずつ追加します。', + custom_words_placeholder: 'サービス名、会社名など', }; export default Object.freeze(password_policy); diff --git a/packages/phrases/src/locales/ja/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts b/packages/phrases/src/locales/ja/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts index 58774ce82..33f81deea 100644 --- a/packages/phrases/src/locales/ja/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts +++ b/packages/phrases/src/locales/ja/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts @@ -52,13 +52,10 @@ const sign_up_and_sign_in = { delete_sign_in_method: 'これは{{identifier}}を必須の識別子として選択した場合に必要です。', }, advanced_options: { - /** UNTRANSLATED */ - title: 'ADVANCED OPTIONS', - /** UNTRANSLATED */ - enable_user_registration: 'Enable user registration', - /** UNTRANSLATED */ + title: '高度なオプション', + enable_user_registration: 'ユーザー登録を有効にする', enable_user_registration_description: - 'Enable or disallow user registration. Once disabled, users can still be added in the admin console but users can no longer establish accounts through the sign-in UI.', + 'ユーザー登録を有効にするか無効にすることができます。無効にした場合、ユーザーは管理コンソールで追加することはできますが、サインイン画面を介してアカウントを作成することはできなくなります。', }, }; diff --git a/packages/phrases/src/locales/ja/translation/admin-console/upsell.ts b/packages/phrases/src/locales/ja/translation/admin-console/upsell.ts deleted file mode 100644 index a647c823a..000000000 --- a/packages/phrases/src/locales/ja/translation/admin-console/upsell.ts +++ /dev/null @@ -1,87 +0,0 @@ -const upsell = { - pro_tag: 'プロ', - upgrade_plan: 'プランをアップグレード', - compare_plans: 'プラン比較', - get_started: { - title: '無料プランでスムーズなアイデンティティの旅を始めましょう!', - description: - '無料プランは、サイドプロジェクトやトライアルでのLogtoの試用に最適です。チームにLogtoの機能を最大限に活用するには、アップグレードしてプレミアム機能への無制限アクセスを獲得してください:無制限のMAU利用、マシン間統合、RBAC管理、長期間の監査ログなど。すべてのプランを表示', - }, - create_tenant: { - title: 'テナントプランを選択', - description: - '成長中の企業向けに革新的かつ手頃な価格で設計された競争力のあるプランオプションを提供しています。詳細を見る', - base_price: '基本価格', - monthly_price: '{{value, number}}/mo', - mau_unit_price: 'MAU単価', - view_all_features: 'すべての機能を見る', - select_plan: 'を選択', - free_tenants_limit: '最大{{count, number}}テナント無料', - free_tenants_limit_other: '最大{{count, number}}テナント無料', - most_popular: '最も人気', - upgrade_success: 'にアップグレードしました', - }, - paywall: { - applications: - '{{count, number}}個のアプリケーション制限に達しました。チームのニーズに対応するため、プランをアップグレードしてください。サポートが必要な場合は、お気軽にお問い合わせください。', - applications_other: - '{{count, number}}個のアプリケーション制限に達しました。チームのニーズに対応するため、プランをアップグレードしてください。サポートが必要な場合は、お気軽にお問い合わせください。', - machine_to_machine_feature: - '有料プランにアップグレードして、マシン間アプリケーションを作成し、すべてのプレミアム機能にアクセスしてください。サポートが必要な場合は、お気軽にお問い合わせください。', - machine_to_machine: - '{{count, number}}個のマシン間アプリケーション制限に達しました。チームのニーズに対応するため、プランをアップグレードしてください。サポートが必要な場合は、お気軽にお問い合わせください。', - machine_to_machine_other: - '{{count, number}}個のマシン間アプリケーション制限に達しました。チームのニーズに対応するため、プランをアップグレードしてください。サポートが必要な場合は、お気軽にお問い合わせください。', - resources: - '{{count, number}}の APIリソース制限に達しました。チームのニーズに合わせてプランをアップグレードしてください。お問い合わせは何かお手伝いが必要な場合はお気軽にどうぞ。', - resources_other: - '{{count, number}}の APIリソース制限に達しました。チームのニーズに合わせてプランをアップグレードしてください。お問い合わせは何かお手伝いが必要な場合はお気軽にどうぞ。', - scopes_per_resource: - '{{count, number}}の APIリソースあたりの許可制限に達しました。拡張するには今すぐアップグレードしてください。お問い合わせは何かお手伝いが必要な場合はお気軽にどうぞ。', - scopes_per_resource_other: - '{{count, number}}の APIリソースあたりの許可制限に達しました。拡張するには今すぐアップグレードしてください。お問い合わせは何かお手伝いが必要な場合はお気軽にどうぞ。', - custom_domain: - 'カスタムドメインの機能を利用するには、有料プランにアップグレードしてください。お手伝いが必要な場合は、お問い合わせください。', - social_connectors: - '{{count, number}}のソーシャルコネクタ制限に達しました。チームのニーズに合わせて有料プランにアップグレードして、OIDC、OAuth 2.0、およびSAMLプロトコルを使用して独自のコネクタを作成できるようにしましょう。お問い合わせは何かお手伝いが必要な場合はお気軽にどうぞ。', - social_connectors_other: - '{{count, number}}のソーシャルコネクタ制限に達しました。チームのニーズに合わせて有料プランにアップグレードして、OIDC、OAuth 2.0、およびSAMLプロトコルを使用して独自のコネクタを作成できるようにしましょう。お問い合わせは何かお手伝いが必要な場合はお気軽にどうぞ。', - standard_connectors_feature: - 'OIDC、OAuth 2.0、およびSAMLプロトコルを使用して独自のコネクタを作成するには有料プランにアップグレードし、無制限のソーシャルコネクタとすべてのプレミアム機能にアクセスしましょう。お問い合わせは何かお手伝いが必要な場合はお気軽にどうぞ。', - standard_connectors: - '{{count, number}}のソーシャルコネクタ制限に達しました。チームのニーズに合わせて有料プランにアップグレードして、OIDC、OAuth 2.0、およびSAMLプロトコルを使用して独自のコネクタを作成できるようにしましょう。お問い合わせは何かお手伝いが必要な場合はお気軽にどうぞ。', - standard_connectors_other: - '{{count, number}}のソーシャルコネクタ制限に達しました。チームのニーズに合わせて有料プランにアップグレードして、OIDC、OAuth 2.0、およびSAMLプロトコルを使用して独自のコネクタを作成できるようにしましょう。お問い合わせは何かお手伝いが必要な場合はお気軽にどうぞ。', - standard_connectors_pro: - '{{count, number}}のスタンダードコネクタ制限に達しました。チームのニーズに合わせてエンタープライズプランにアップグレードして、OIDC、OAuth 2.0、およびSAMLプロトコルを使用して独自のコネクタを作成できるようにしましょう。お問い合わせは何かお手伝いが必要な場合はお気軽にどうぞ。', - standard_connectors_pro_other: - '{{count, number}}のスタンダードコネクタ制限に達しました。チームのニーズに合わせてエンタープライズプランにアップグレードして、OIDC、OAuth 2.0、およびSAMLプロトコルを使用して独自のコネクタを作成できるようにしましょう。お問い合わせは何かお手伝いが必要な場合はお気軽にどうぞ。', - roles: - '{{count, number}}のロール制限に達しました。追加のロールと権限を追加するにはプランをアップグレードしてください。お問い合わせは何かお手伝いが必要な場合はお気軽にどうぞ。', - roles_other: - '{{count, number}}のロール制限に達しました。追加のロールと権限を追加するにはプランをアップグレードしてください。お問い合わせは何かお手伝いが必要な場合はお気軽にどうぞ。', - scopes_per_role: - '{{count, number}}のロールあたりの許可制限に達しました。追加のロールと権限を追加するにはプランをアップグレードしてください。お問い合わせは何かお手伝いが必要な場合はお気軽にどうぞ。', - scopes_per_role_other: - '{{count, number}}のロールあたりの許可制限に達しました。追加のロールと権限を追加するにはプランをアップグレードしてください。お問い合わせは何かお手伝いが必要な場合はお気軽にどうぞ。', - hooks: - '{{count, number}}のウェブフック制限に達しました。追加のウェブフックを作成するにはプランをアップグレードしてください。お問い合わせは何かお手伝いが必要な場合はお気軽にどうぞ。', - hooks_other: - '{{count, number}}のウェブフック制限に達しました。追加のウェブフックを作成するにはプランをアップグレードしてください。お問い合わせは何かお手伝いが必要な場合はお気軽にどうぞ。', - }, - mau_exceeded_modal: { - title: 'MAUが制限を超えました。プランをアップグレードしてください。', - notification: - '現在のMAUがの制限を超えています。サービスの停止を回避するために、迅速にプレミアムプランにアップグレードしてください。', - update_plan: 'プランを更新', - }, - payment_overdue_modal: { - title: '請求書の支払いが期限切れです', - notification: - 'おっと!テナント{{name}}の請求書の支払いが失敗しました。Logtoサービスの停止を避けるために、すみやかに請求書をお支払いください。', - unpaid_bills: '未払いの請求書', - update_payment: '支払いを更新', - }, -}; - -export default Object.freeze(upsell); diff --git a/packages/phrases/src/locales/ja/translation/admin-console/upsell/index.ts b/packages/phrases/src/locales/ja/translation/admin-console/upsell/index.ts new file mode 100644 index 000000000..4371baabb --- /dev/null +++ b/packages/phrases/src/locales/ja/translation/admin-console/upsell/index.ts @@ -0,0 +1,42 @@ +import paywall from './paywall.js'; + +const upsell = { + pro_tag: 'プロ', + upgrade_plan: 'プランをアップグレード', + compare_plans: 'プラン比較', + get_started: { + title: '無料プランでスムーズなアイデンティティの旅を始めましょう!', + description: + '無料プランは、サイドプロジェクトやトライアルでのLogtoの試用に最適です。チームにLogtoの機能を最大限に活用するには、アップグレードしてプレミアム機能への無制限アクセスを獲得してください:無制限のMAU利用、マシン間統合、RBAC管理、長期間の監査ログなど。すべてのプランを表示', + }, + create_tenant: { + title: 'テナントプランを選択', + description: + '成長中の企業向けに革新的かつ手頃な価格で設計された競争力のあるプランオプションを提供しています。詳細を見る', + base_price: '基本価格', + monthly_price: '{{value, number}}/mo', + mau_unit_price: 'MAU単価', + view_all_features: 'すべての機能を見る', + select_plan: 'を選択', + free_tenants_limit: '最大{{count, number}}テナント無料', + free_tenants_limit_other: '最大{{count, number}}テナント無料', + most_popular: '最も人気', + upgrade_success: 'にアップグレードしました', + }, + mau_exceeded_modal: { + title: 'MAUが制限を超えました。プランをアップグレードしてください。', + notification: + '現在のMAUがの制限を超えています。サービスの停止を回避するために、迅速にプレミアムプランにアップグレードしてください。', + update_plan: 'プランを更新', + }, + payment_overdue_modal: { + title: '請求書の支払いが期限切れです', + notification: + 'おっと!テナント{{name}}の請求書の支払いが失敗しました。Logtoサービスの停止を避けるために、すみやかに請求書をお支払いください。', + unpaid_bills: '未払いの請求書', + update_payment: '支払いを更新', + }, + paywall, +}; + +export default Object.freeze(upsell); diff --git a/packages/phrases/src/locales/ja/translation/admin-console/upsell/paywall.ts b/packages/phrases/src/locales/ja/translation/admin-console/upsell/paywall.ts new file mode 100644 index 000000000..9d7e971bf --- /dev/null +++ b/packages/phrases/src/locales/ja/translation/admin-console/upsell/paywall.ts @@ -0,0 +1,50 @@ +const paywall = { + applications: + '{{count, number}}個のアプリケーション制限に達しました。チームのニーズに対応するため、プランをアップグレードしてください。サポートが必要な場合は、お気軽にお問い合わせください。', + applications_other: + '{{count, number}}個のアプリケーション制限に達しました。チームのニーズに対応するため、プランをアップグレードしてください。サポートが必要な場合は、お気軽にお問い合わせください。', + machine_to_machine_feature: + '有料プランにアップグレードして、マシン間アプリケーションを作成し、すべてのプレミアム機能にアクセスしてください。サポートが必要な場合は、お気軽にお問い合わせください。', + machine_to_machine: + '{{count, number}}個のマシン間アプリケーション制限に達しました。チームのニーズに対応するため、プランをアップグレードしてください。サポートが必要な場合は、お気軽にお問い合わせください。', + machine_to_machine_other: + '{{count, number}}個のマシン間アプリケーション制限に達しました。チームのニーズに対応するため、プランをアップグレードしてください。サポートが必要な場合は、お気軽にお問い合わせください。', + resources: + '{{count, number}}の APIリソース制限に達しました。チームのニーズに合わせてプランをアップグレードしてください。お問い合わせは何かお手伝いが必要な場合はお気軽にどうぞ。', + resources_other: + '{{count, number}}の APIリソース制限に達しました。チームのニーズに合わせてプランをアップグレードしてください。お問い合わせは何かお手伝いが必要な場合はお気軽にどうぞ。', + scopes_per_resource: + '{{count, number}}の APIリソースあたりの許可制限に達しました。拡張するには今すぐアップグレードしてください。お問い合わせは何かお手伝いが必要な場合はお気軽にどうぞ。', + scopes_per_resource_other: + '{{count, number}}の APIリソースあたりの許可制限に達しました。拡張するには今すぐアップグレードしてください。お問い合わせは何かお手伝いが必要な場合はお気軽にどうぞ。', + custom_domain: + 'カスタムドメインの機能を利用するには、有料プランにアップグレードしてください。お手伝いが必要な場合は、お問い合わせください。', + social_connectors: + '{{count, number}}のソーシャルコネクタ制限に達しました。チームのニーズに合わせて有料プランにアップグレードして、OIDC、OAuth 2.0、およびSAMLプロトコルを使用して独自のコネクタを作成できるようにしましょう。お問い合わせは何かお手伝いが必要な場合はお気軽にどうぞ。', + social_connectors_other: + '{{count, number}}のソーシャルコネクタ制限に達しました。チームのニーズに合わせて有料プランにアップグレードして、OIDC、OAuth 2.0、およびSAMLプロトコルを使用して独自のコネクタを作成できるようにしましょう。お問い合わせは何かお手伝いが必要な場合はお気軽にどうぞ。', + standard_connectors_feature: + 'OIDC、OAuth 2.0、およびSAMLプロトコルを使用して独自のコネクタを作成するには有料プランにアップグレードし、無制限のソーシャルコネクタとすべてのプレミアム機能にアクセスしましょう。お問い合わせは何かお手伝いが必要な場合はお気軽にどうぞ。', + standard_connectors: + '{{count, number}}のソーシャルコネクタ制限に達しました。チームのニーズに合わせて有料プランにアップグレードして、OIDC、OAuth 2.0、およびSAMLプロトコルを使用して独自のコネクタを作成できるようにしましょう。お問い合わせは何かお手伝いが必要な場合はお気軽にどうぞ。', + standard_connectors_other: + '{{count, number}}のソーシャルコネクタ制限に達しました。チームのニーズに合わせて有料プランにアップグレードして、OIDC、OAuth 2.0、およびSAMLプロトコルを使用して独自のコネクタを作成できるようにしましょう。お問い合わせは何かお手伝いが必要な場合はお気軽にどうぞ。', + standard_connectors_pro: + '{{count, number}}のスタンダードコネクタ制限に達しました。チームのニーズに合わせてエンタープライズプランにアップグレードして、OIDC、OAuth 2.0、およびSAMLプロトコルを使用して独自のコネクタを作成できるようにしましょう。お問い合わせは何かお手伝いが必要な場合はお気軽にどうぞ。', + standard_connectors_pro_other: + '{{count, number}}のスタンダードコネクタ制限に達しました。チームのニーズに合わせてエンタープライズプランにアップグレードして、OIDC、OAuth 2.0、およびSAMLプロトコルを使用して独自のコネクタを作成できるようにしましょう。お問い合わせは何かお手伝いが必要な場合はお気軽にどうぞ。', + roles: + '{{count, number}}のロール制限に達しました。追加のロールと権限を追加するにはプランをアップグレードしてください。お問い合わせは何かお手伝いが必要な場合はお気軽にどうぞ。', + roles_other: + '{{count, number}}のロール制限に達しました。追加のロールと権限を追加するにはプランをアップグレードしてください。お問い合わせは何かお手伝いが必要な場合はお気軽にどうぞ。', + scopes_per_role: + '{{count, number}}のロールあたりの許可制限に達しました。追加のロールと権限を追加するにはプランをアップグレードしてください。お問い合わせは何かお手伝いが必要な場合はお気軽にどうぞ。', + scopes_per_role_other: + '{{count, number}}のロールあたりの許可制限に達しました。追加のロールと権限を追加するにはプランをアップグレードしてください。お問い合わせは何かお手伝いが必要な場合はお気軽にどうぞ。', + hooks: + '{{count, number}}のウェブフック制限に達しました。追加のウェブフックを作成するにはプランをアップグレードしてください。お問い合わせは何かお手伝いが必要な場合はお気軽にどうぞ。', + hooks_other: + '{{count, number}}のウェブフック制限に達しました。追加のウェブフックを作成するにはプランをアップグレードしてください。お問い合わせは何かお手伝いが必要な場合はお気軽にどうぞ。', +}; + +export default Object.freeze(paywall); diff --git a/packages/phrases/src/locales/ko/errors/password.ts b/packages/phrases/src/locales/ko/errors/password.ts index 8640a9538..53de171c6 100644 --- a/packages/phrases/src/locales/ko/errors/password.ts +++ b/packages/phrases/src/locales/ko/errors/password.ts @@ -1,8 +1,7 @@ const password = { unsupported_encryption_method: '{{name}} 암호화 방법을 지원하지 않아요.', pepper_not_found: '비밀번호 Pepper를 찾을 수 없어요. Core 환경설정을 확인해 주세요.', - /** UNTRANSLATED */ - rejected: 'Password rejected. Please check if your password meets the requirements.', + rejected: '비밀번호가 거부되었습니다. 비밀번호가 요구 사항을 충족하는지 확인해 주세요.', }; export default Object.freeze(password); diff --git a/packages/phrases/src/locales/ko/errors/sign-in-experiences.ts b/packages/phrases/src/locales/ko/errors/sign-in-experiences.ts index 0a87e55fd..a86436a85 100644 --- a/packages/phrases/src/locales/ko/errors/sign-in-experiences.ts +++ b/packages/phrases/src/locales/ko/errors/sign-in-experiences.ts @@ -15,10 +15,8 @@ const sign_in_experiences = { '비밀번호를 설정할 필요가 없을 때는 인증 코드 로그인을 활성화해야 해요.', unsupported_default_language: '{{language}} 언어는 아직 지원하지 않아요.', at_least_one_authentication_factor: '최소한 하나의 인증 방법을 선택해야 해요.', - /** UNTRANSLATED */ - backup_code_cannot_be_enabled_alone: 'Backup code cannot be enabled alone.', - /** UNTRANSLATED */ - duplicated_mfa_factors: 'Duplicated MFA factors.', + backup_code_cannot_be_enabled_alone: '백업 코드는 단독으로 활성화할 수 없습니다.', + duplicated_mfa_factors: '중복된 MFA 인증 요소입니다.', }; export default Object.freeze(sign_in_experiences); diff --git a/packages/phrases/src/locales/ko/translation/admin-console/index.ts b/packages/phrases/src/locales/ko/translation/admin-console/index.ts index 2b9bb1730..820f1ace0 100644 --- a/packages/phrases/src/locales/ko/translation/admin-console/index.ts +++ b/packages/phrases/src/locales/ko/translation/admin-console/index.ts @@ -28,7 +28,7 @@ import tab_sections from './tab-sections.js'; import tabs from './tabs.js'; import tenants from './tenants.js'; import topbar from './topbar.js'; -import upsell from './upsell.js'; +import upsell from './upsell/index.js'; import user_details from './user-details.js'; import users from './users.js'; import webhook_details from './webhook-details.js'; diff --git a/packages/phrases/src/locales/ko/translation/admin-console/sign-in-exp/index.ts b/packages/phrases/src/locales/ko/translation/admin-console/sign-in-exp/index.ts index 7f9ae66f8..36a5ead6d 100644 --- a/packages/phrases/src/locales/ko/translation/admin-console/sign-in-exp/index.ts +++ b/packages/phrases/src/locales/ko/translation/admin-console/sign-in-exp/index.ts @@ -10,8 +10,7 @@ const sign_in_exp = { branding: '브랜딩', sign_up_and_sign_in: '회원가입/로그인', content: '내용', - /** UNTRANSLATED */ - password_policy: 'Password policy', + password_policy: '암호 정책', }, welcome: { title: '로그인 경험 사용자화', @@ -74,7 +73,7 @@ const sign_in_exp = { }, preview: { title: '로그인 화면 미리보기', - live_preview: 'Live Preview', + live_preview: '실시간 미리보기', live_preview_tip: '저장하여 변경 사항 미리보기', native: '네이티브', desktop_web: '데스크톱 웹', diff --git a/packages/phrases/src/locales/ko/translation/admin-console/sign-in-exp/password-policy.ts b/packages/phrases/src/locales/ko/translation/admin-console/sign-in-exp/password-policy.ts index f54c9f77b..fac57b830 100644 --- a/packages/phrases/src/locales/ko/translation/admin-console/sign-in-exp/password-policy.ts +++ b/packages/phrases/src/locales/ko/translation/admin-console/sign-in-exp/password-policy.ts @@ -1,45 +1,26 @@ const password_policy = { - /** UNTRANSLATED */ - password_requirements: 'Password requirements', - /** UNTRANSLATED */ - minimum_length: 'Minimum length', - /** UNTRANSLATED */ - minimum_length_description: 'NIST suggests using at least 8 characters for web products.', - /** UNTRANSLATED */ - minimum_length_error: 'Minimum length must be between {{min}} and {{max}} (inclusive).', - /** UNTRANSLATED */ - minimum_required_char_types: 'Minimum required character types', - /** UNTRANSLATED */ + password_requirements: '비밀번호 요구사항', + minimum_length: '최소 길이', + minimum_length_description: 'NIST는 최소 8자리를 권장합니다.', + minimum_length_error: '최소 길이는 {{min}} ~ {{max}}(포함) 사이여야 합니다.', + minimum_required_char_types: '최소 필요 문자 유형', minimum_required_char_types_description: - 'Character types: uppercase (A-Z), lowercase (a-z), numbers (0-9), and special symbols ({{symbols}}).', - /** UNTRANSLATED */ - password_rejection: 'Password rejection', - /** UNTRANSLATED */ - compromised_passwords: 'Reject compromised password', - /** UNTRANSLATED */ - breached_passwords: 'Breached passwords', - /** UNTRANSLATED */ - breached_passwords_description: 'Reject passwords previously found in breach databases.', - /** UNTRANSLATED */ - restricted_phrases: 'Restrict low-security phrases', - /** UNTRANSLATED */ + '문자 유형: 대문자(A-Z), 소문자(a-z), 숫자(0-9), 특수 기호({{symbols}}).', + password_rejection: '비밀번호 거부', + compromised_passwords: '위험한 비밀번호', + breached_passwords: '유출된 비밀번호', + breached_passwords_description: '이전에 유출된 비밀번호를 거부합니다.', + restricted_phrases: '보안속에 좋지 않은 구구절', restricted_phrases_tooltip: - 'Users cannot use passwords that are exactly the same as or made up of the listed phrases below. The addition of 3 or more non-consecutive characters is allowed to increase password complexity.', - /** UNTRANSLATED */ - repetitive_or_sequential_characters: 'Repetitive or sequential characters', - /** UNTRANSLATED */ - repetitive_or_sequential_characters_description: 'E.g., "AAAA", "1234", and "abcd".', - /** UNTRANSLATED */ - user_information: 'User information', - /** UNTRANSLATED */ - user_information_description: 'E.g., email address, phone number, username, etc.', - /** UNTRANSLATED */ - custom_words: 'Custom words', - /** UNTRANSLATED */ + '3글자 이상의 다른 글자와 함께 조합하지 않는 한 이러한 구문을 피하세요.', + repetitive_or_sequential_characters: '반복된 혹은 순차적인 문자', + repetitive_or_sequential_characters_description: '예: "AAAA", "1234", "abcd" 등.', + user_information: '사용자 정보', + user_information_description: '예: 이메일 주소, 전화 번호, 사용자 이름 등.', + custom_words: '사용자 정의 단어', custom_words_description: - 'Personalize context-specific words, case-insensitive, and one per line.', - /** UNTRANSLATED */ - custom_words_placeholder: 'Your service name, company name, etc.', + '컨텍스트에 따라 맞춤형 단어입니다. 대소문자를 구분하지 않으며, 한 줄에 하나씩 작성하세요.', + custom_words_placeholder: '서비스 이름, 회사 이름 등.', }; export default Object.freeze(password_policy); diff --git a/packages/phrases/src/locales/ko/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts b/packages/phrases/src/locales/ko/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts index b0512973a..743b6bb44 100644 --- a/packages/phrases/src/locales/ko/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts +++ b/packages/phrases/src/locales/ko/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts @@ -51,13 +51,10 @@ const sign_up_and_sign_in = { delete_sign_in_method: '{{identifier}}를 필수 ID로 설정했기 때문에 이 옵션은 필수예요.', }, advanced_options: { - /** UNTRANSLATED */ - title: 'ADVANCED OPTIONS', - /** UNTRANSLATED */ - enable_user_registration: 'Enable user registration', - /** UNTRANSLATED */ + title: '고급 옵션', + enable_user_registration: '사용자 등록 활성화', enable_user_registration_description: - 'Enable or disallow user registration. Once disabled, users can still be added in the admin console but users can no longer establish accounts through the sign-in UI.', + '사용자 등록을 활성화하거나 비활성화합니다. 비활성화된 경우 사용자는 관리 콘솔에서는 추가할 수 있지만 사용자는 더 이상 로그인 UI를 통해 계정을 설정할 수 없습니다.', }, }; diff --git a/packages/phrases/src/locales/ko/translation/admin-console/upsell.ts b/packages/phrases/src/locales/ko/translation/admin-console/upsell.ts deleted file mode 100644 index bed29b100..000000000 --- a/packages/phrases/src/locales/ko/translation/admin-console/upsell.ts +++ /dev/null @@ -1,87 +0,0 @@ -const upsell = { - pro_tag: 'PRO', - upgrade_plan: '플랜 업그레이드', - compare_plans: '플랜 비교', - get_started: { - title: '무료 플랜으로 원활한 신원 확인 여정을 시작하세요!', - description: - '무료 플랜은 사이드 프로젝트나 시험용으로 Logto를 시도하기에 완벽합니다. 팀에 Logto의 기능을 모두 활용하려면 업그레이드하여 프리미엄 기능에 무제한으로 접근하세요: 무제한 MAU 사용, 기기 간 통합, RBAC 관리, 장기간 감사 로그 등. 모든 플랜 보기', - }, - create_tenant: { - title: '테넌트 플랜 선택하기', - description: - 'Logto는 성장 중인 기업을 위해 혁신적이고 저렴한 가격으로 디자인된 경쟁력 있는 플랜 옵션을 제공합니다. 더 알아보기', - base_price: '기본 가격', - monthly_price: '{{value, number}}/월', - mau_unit_price: 'MAU 단가', - view_all_features: '모든 기능 보기', - select_plan: ' 선택', - free_tenants_limit: '최대 {{count, number}}개 무료 테넌트', - free_tenants_limit_other: '최대 {{count, number}}개 무료 테넌트', - most_popular: '가장 인기 있는 플랜', - upgrade_success: '으로 업그레이드 성공!', - }, - paywall: { - applications: - '의 {{count, number}}개 애플리케이션 제한에 도달했습니다. 팀의 요구를 충족하기 위해 플랜을 업그레이드하십시오. 도움이 필요하면 문의해 주시기 바랍니다.', - applications_other: - '의 {{count, number}}개 애플리케이션 제한에 도달했습니다. 팀의 요구를 충족하기 위해 플랜을 업그레이드하십시오. 도움이 필요하면 문의해 주시기 바랍니다.', - machine_to_machine_feature: - '유료 플랜으로 업그레이드하여 기계 간 애플리케이션을 생성하고 모든 프리미엄 기능에 액세스하세요. 도움이 필요하면 문의해 주시기 바랍니다.', - machine_to_machine: - '의 {{count, number}}개 기계 간 애플리케이션 제한에 도달했습니다. 팀의 요구를 충족하기 위해 플랜을 업그레이드하십시오. 도움이 필요하면 문의해 주시기 바랍니다.', - machine_to_machine_other: - '의 {{count, number}}개 기계 간 애플리케이션 제한에 도달했습니다. 팀의 요구를 충족하기 위해 플랜을 업그레이드하십시오. 도움이 필요하면 문의해 주시기 바랍니다.', - resources: - '의 {{count, number}}개 API 리소스 한도에 도달했습니다. 팀의 요구를 충족시키기 위해 플랜을 업그레이드하세요. 도움이 필요하면 문의하기로 연락 주세요.', - resources_other: - '의 {{count, number}}개 API 리소스 한도에 도달했습니다. 팀의 요구를 충족시키기 위해 플랜을 업그레이드하세요. 도움이 필요하면 문의하기로 연락 주세요.', - scopes_per_resource: - '의 {{count, number}}개 API 리소스 당 권한 한도에 도달했습니다. 확장을 위해 지금 업그레이드하세요. 도움이 필요하면 문의하기로 연락 주세요.', - scopes_per_resource_other: - '의 {{count, number}}개 API 리소스 당 권한 한도에 도달했습니다. 확장을 위해 지금 업그레이드하세요. 도움이 필요하면 문의하기로 연락 주세요.', - custom_domain: - '유료 플랜으로 업그레이드하여 사용자 정의 도메인 기능과 다양한 프리미엄 혜택을 해제하세요. 도움이 필요하면 문의하기로 연락 주세요.', - social_connectors: - '의 {{count, number}}개 소셜 커넥터 한도에 도달했습니다. 팀의 요구를 충족시키기 위해 플랜을 업그레이드하고 OIDC, OAuth 2.0, SAML 프로토콜을 사용하여 고유한 커넥터를 생성할 수 있도록 하세요. 도움이 필요하면 문의하기로 연락 주세요.', - social_connectors_other: - '의 {{count, number}}개 소셜 커넥터 한도에 도달했습니다. 팀의 요구를 충족시키기 위해 플랜을 업그레이드하고 OIDC, OAuth 2.0, SAML 프로토콜을 사용하여 고유한 커넥터를 생성할 수 있도록 하세요. 도움이 필요하면 문의하기로 연락 주세요.', - standard_connectors_feature: - '유료 플랜으로 업그레이드하여 OIDC, OAuth 2.0, SAML 프로토콜을 사용하여 고유한 커넥터를 생성할 수 있으며, 무제한 소셜 커넥터 및 모든 프리미엄 기능에 액세스할 수 있습니다. 도움이 필요하면 문의하기로 연락 주세요.', - standard_connectors: - '의 {{count, number}}개 소셜 커넥터 한도에 도달했습니다. 팀의 요구를 충족시키기 위해 플랜을 업그레이드하고 OIDC, OAuth 2.0, SAML 프로토콜을 사용하여 고유한 커넥터를 생성할 수 있도록 하세요. 도움이 필요하면 문의하기로 연락 주세요.', - standard_connectors_other: - '의 {{count, number}}개 소셜 커넥터 한도에 도달했습니다. 팀의 요구를 충족시키기 위해 플랜을 업그레이드하고 OIDC, OAuth 2.0, SAML 프로토콜을 사용하여 고유한 커넥터를 생성할 수 있도록 하세요. 도움이 필요하면 문의하기로 연락 주세요.', - standard_connectors_pro: - '의 {{count, number}}개 표준 커넥터 한도에 도달했습니다. 팀의 요구를 충족시키기 위해 엔터프라이즈 플랜으로 업그레이드하고 OIDC, OAuth 2.0, SAML 프로토콜을 사용하여 고유한 커넥터를 생성할 수 있도록 하세요. 도움이 필요하면 문의하기로 연락 주세요.', - standard_connectors_pro_other: - '의 {{count, number}}개 표준 커넥터 한도에 도달했습니다. 팀의 요구를 충족시키기 위해 엔터프라이즈 플랜으로 업그레이드하고 OIDC, OAuth 2.0, SAML 프로토콜을 사용하여 고유한 커넥터를 생성할 수 있도록 하세요. 도움이 필요하면 문의하기로 연락 주세요.', - roles: - '의 {{count, number}}개 역할 한도에 도달했습니다. 플랜을 업그레이드하여 추가 역할과 권한을 추가하세요. 도움이 필요하면 문의하기로 연락 주세요.', - roles_other: - '의 {{count, number}}개 역할 한도에 도달했습니다. 플랜을 업그레이드하여 추가 역할과 권한을 추가하세요. 도움이 필요하면 문의하기로 연락 주세요.', - scopes_per_role: - '의 {{count, number}}개 역할 당 권한 한도에 도달했습니다. 플랜을 업그레이드하여 추가 역할과 권한을 추가하세요. 도움이 필요하면 문의하기로 연락 주세요.', - scopes_per_role_other: - '의 {{count, number}}개 역할 당 권한 한도에 도달했습니다. 플랜을 업그레이드하여 추가 역할과 권한을 추가하세요. 도움이 필요하면 문의하기로 연락 주세요.', - hooks: - '의 {{count, number}}개 웹훅 한도에 도달했습니다. 더 많은 웹훅을 생성하려면 플랜을 업그레이드하세요. 도움이 필요하면 문의하기로 연락 주세요.', - hooks_other: - '의 {{count, number}}개 웹훅 한도에 도달했습니다. 더 많은 웹훅을 생성하려면 플랜을 업그레이드하세요. 도움이 필요하면 문의하기로 연락 주세요.', - }, - mau_exceeded_modal: { - title: 'MAU 한도를 초과했습니다. 플랜을 업그레이드하세요.', - notification: - '현재 MAU가 의 한도를 초과했습니다. 로그토 서비스 중단을 피하기 위해 프리미엄으로 플랜을 업그레이드하세요.', - update_plan: '플랜 업데이트', - }, - payment_overdue_modal: { - title: '청구서 지불 연체', - notification: - '이런! 테넌트 {{name}}의 청구서 결제에 실패했습니다. Logto 서비스 중단을 피하기 위해 즉시 청구서를 지불하십시오.', - unpaid_bills: '미납 청구서', - update_payment: '지불 업데이트', - }, -}; - -export default Object.freeze(upsell); diff --git a/packages/phrases/src/locales/ko/translation/admin-console/upsell/index.ts b/packages/phrases/src/locales/ko/translation/admin-console/upsell/index.ts new file mode 100644 index 000000000..4dcfad334 --- /dev/null +++ b/packages/phrases/src/locales/ko/translation/admin-console/upsell/index.ts @@ -0,0 +1,42 @@ +import paywall from './paywall.js'; + +const upsell = { + pro_tag: 'PRO', + upgrade_plan: '플랜 업그레이드', + compare_plans: '플랜 비교', + get_started: { + title: '무료 플랜으로 원활한 신원 확인 여정을 시작하세요!', + description: + '무료 플랜은 사이드 프로젝트나 시험용으로 Logto를 시도하기에 완벽합니다. 팀에 Logto의 기능을 모두 활용하려면 업그레이드하여 프리미엄 기능에 무제한으로 접근하세요: 무제한 MAU 사용, 기기 간 통합, RBAC 관리, 장기간 감사 로그 등. 모든 플랜 보기', + }, + create_tenant: { + title: '테넌트 플랜 선택하기', + description: + 'Logto는 성장 중인 기업을 위해 혁신적이고 저렴한 가격으로 디자인된 경쟁력 있는 플랜 옵션을 제공합니다. 더 알아보기', + base_price: '기본 가격', + monthly_price: '{{value, number}}/월', + mau_unit_price: 'MAU 단가', + view_all_features: '모든 기능 보기', + select_plan: ' 선택', + free_tenants_limit: '최대 {{count, number}}개 무료 테넌트', + free_tenants_limit_other: '최대 {{count, number}}개 무료 테넌트', + most_popular: '가장 인기 있는 플랜', + upgrade_success: '으로 업그레이드 성공!', + }, + mau_exceeded_modal: { + title: 'MAU 한도를 초과했습니다. 플랜을 업그레이드하세요.', + notification: + '현재 MAU가 의 한도를 초과했습니다. 로그토 서비스 중단을 피하기 위해 프리미엄으로 플랜을 업그레이드하세요.', + update_plan: '플랜 업데이트', + }, + payment_overdue_modal: { + title: '청구서 지불 연체', + notification: + '이런! 테넌트 {{name}}의 청구서 결제에 실패했습니다. Logto 서비스 중단을 피하기 위해 즉시 청구서를 지불하십시오.', + unpaid_bills: '미납 청구서', + update_payment: '지불 업데이트', + }, + paywall, +}; + +export default Object.freeze(upsell); diff --git a/packages/phrases/src/locales/ko/translation/admin-console/upsell/paywall.ts b/packages/phrases/src/locales/ko/translation/admin-console/upsell/paywall.ts new file mode 100644 index 000000000..b7af3fc3d --- /dev/null +++ b/packages/phrases/src/locales/ko/translation/admin-console/upsell/paywall.ts @@ -0,0 +1,50 @@ +const paywall = { + applications: + '의 {{count, number}}개 애플리케이션 제한에 도달했습니다. 팀의 요구를 충족하기 위해 플랜을 업그레이드하십시오. 도움이 필요하면 문의해 주시기 바랍니다.', + applications_other: + '의 {{count, number}}개 애플리케이션 제한에 도달했습니다. 팀의 요구를 충족하기 위해 플랜을 업그레이드하십시오. 도움이 필요하면 문의해 주시기 바랍니다.', + machine_to_machine_feature: + '유료 플랜으로 업그레이드하여 기계 간 애플리케이션을 생성하고 모든 프리미엄 기능에 액세스하세요. 도움이 필요하면 문의해 주시기 바랍니다.', + machine_to_machine: + '의 {{count, number}}개 기계 간 애플리케이션 제한에 도달했습니다. 팀의 요구를 충족하기 위해 플랜을 업그레이드하십시오. 도움이 필요하면 문의해 주시기 바랍니다.', + machine_to_machine_other: + '의 {{count, number}}개 기계 간 애플리케이션 제한에 도달했습니다. 팀의 요구를 충족하기 위해 플랜을 업그레이드하십시오. 도움이 필요하면 문의해 주시기 바랍니다.', + resources: + '의 {{count, number}}개 API 리소스 한도에 도달했습니다. 팀의 요구를 충족시키기 위해 플랜을 업그레이드하세요. 도움이 필요하면 문의하기로 연락 주세요.', + resources_other: + '의 {{count, number}}개 API 리소스 한도에 도달했습니다. 팀의 요구를 충족시키기 위해 플랜을 업그레이드하세요. 도움이 필요하면 문의하기로 연락 주세요.', + scopes_per_resource: + '의 {{count, number}}개 API 리소스 당 권한 한도에 도달했습니다. 확장을 위해 지금 업그레이드하세요. 도움이 필요하면 문의하기로 연락 주세요.', + scopes_per_resource_other: + '의 {{count, number}}개 API 리소스 당 권한 한도에 도달했습니다. 확장을 위해 지금 업그레이드하세요. 도움이 필요하면 문의하기로 연락 주세요.', + custom_domain: + '유료 플랜으로 업그레이드하여 사용자 정의 도메인 기능과 다양한 프리미엄 혜택을 해제하세요. 도움이 필요하면 문의하기로 연락 주세요.', + social_connectors: + '의 {{count, number}}개 소셜 커넥터 한도에 도달했습니다. 팀의 요구를 충족시키기 위해 플랜을 업그레이드하고 OIDC, OAuth 2.0, SAML 프로토콜을 사용하여 고유한 커넥터를 생성할 수 있도록 하세요. 도움이 필요하면 문의하기로 연락 주세요.', + social_connectors_other: + '의 {{count, number}}개 소셜 커넥터 한도에 도달했습니다. 팀의 요구를 충족시키기 위해 플랜을 업그레이드하고 OIDC, OAuth 2.0, SAML 프로토콜을 사용하여 고유한 커넥터를 생성할 수 있도록 하세요. 도움이 필요하면 문의하기로 연락 주세요.', + standard_connectors_feature: + '유료 플랜으로 업그레이드하여 OIDC, OAuth 2.0, SAML 프로토콜을 사용하여 고유한 커넥터를 생성할 수 있으며, 무제한 소셜 커넥터 및 모든 프리미엄 기능에 액세스할 수 있습니다. 도움이 필요하면 문의하기로 연락 주세요.', + standard_connectors: + '의 {{count, number}}개 소셜 커넥터 한도에 도달했습니다. 팀의 요구를 충족시키기 위해 플랜을 업그레이드하고 OIDC, OAuth 2.0, SAML 프로토콜을 사용하여 고유한 커넥터를 생성할 수 있도록 하세요. 도움이 필요하면 문의하기로 연락 주세요.', + standard_connectors_other: + '의 {{count, number}}개 소셜 커넥터 한도에 도달했습니다. 팀의 요구를 충족시키기 위해 플랜을 업그레이드하고 OIDC, OAuth 2.0, SAML 프로토콜을 사용하여 고유한 커넥터를 생성할 수 있도록 하세요. 도움이 필요하면 문의하기로 연락 주세요.', + standard_connectors_pro: + '의 {{count, number}}개 표준 커넥터 한도에 도달했습니다. 팀의 요구를 충족시키기 위해 엔터프라이즈 플랜으로 업그레이드하고 OIDC, OAuth 2.0, SAML 프로토콜을 사용하여 고유한 커넥터를 생성할 수 있도록 하세요. 도움이 필요하면 문의하기로 연락 주세요.', + standard_connectors_pro_other: + '의 {{count, number}}개 표준 커넥터 한도에 도달했습니다. 팀의 요구를 충족시키기 위해 엔터프라이즈 플랜으로 업그레이드하고 OIDC, OAuth 2.0, SAML 프로토콜을 사용하여 고유한 커넥터를 생성할 수 있도록 하세요. 도움이 필요하면 문의하기로 연락 주세요.', + roles: + '의 {{count, number}}개 역할 한도에 도달했습니다. 플랜을 업그레이드하여 추가 역할과 권한을 추가하세요. 도움이 필요하면 문의하기로 연락 주세요.', + roles_other: + '의 {{count, number}}개 역할 한도에 도달했습니다. 플랜을 업그레이드하여 추가 역할과 권한을 추가하세요. 도움이 필요하면 문의하기로 연락 주세요.', + scopes_per_role: + '의 {{count, number}}개 역할 당 권한 한도에 도달했습니다. 플랜을 업그레이드하여 추가 역할과 권한을 추가하세요. 도움이 필요하면 문의하기로 연락 주세요.', + scopes_per_role_other: + '의 {{count, number}}개 역할 당 권한 한도에 도달했습니다. 플랜을 업그레이드하여 추가 역할과 권한을 추가하세요. 도움이 필요하면 문의하기로 연락 주세요.', + hooks: + '의 {{count, number}}개 웹훅 한도에 도달했습니다. 더 많은 웹훅을 생성하려면 플랜을 업그레이드하세요. 도움이 필요하면 문의하기로 연락 주세요.', + hooks_other: + '의 {{count, number}}개 웹훅 한도에 도달했습니다. 더 많은 웹훅을 생성하려면 플랜을 업그레이드하세요. 도움이 필요하면 문의하기로 연락 주세요.', +}; + +export default Object.freeze(paywall); diff --git a/packages/phrases/src/locales/pl-pl/errors/password.ts b/packages/phrases/src/locales/pl-pl/errors/password.ts index 29a4cc8af..8d539aa4e 100644 --- a/packages/phrases/src/locales/pl-pl/errors/password.ts +++ b/packages/phrases/src/locales/pl-pl/errors/password.ts @@ -1,8 +1,7 @@ const password = { unsupported_encryption_method: 'Metoda szyfrowania {{name}} nie jest obsługiwana.', pepper_not_found: 'Nie znaleziono wartości pepper dla hasła. Sprawdź swoje zmienne środowiskowe.', - /** UNTRANSLATED */ - rejected: 'Password rejected. Please check if your password meets the requirements.', + rejected: 'Odrzucono hasło. Sprawdź, czy spełnia ono wymagania.', }; export default Object.freeze(password); diff --git a/packages/phrases/src/locales/pl-pl/errors/sign-in-experiences.ts b/packages/phrases/src/locales/pl-pl/errors/sign-in-experiences.ts index 60e77c7a4..735c3343d 100644 --- a/packages/phrases/src/locales/pl-pl/errors/sign-in-experiences.ts +++ b/packages/phrases/src/locales/pl-pl/errors/sign-in-experiences.ts @@ -17,10 +17,8 @@ const sign_in_experiences = { 'Logowanie za pomocą kodu weryfikacyjnego musi być włączone, gdy w rejestracji nie jest wymagane ustawienie hasła.', unsupported_default_language: 'Ten język - {{language}} nie jest obecnie obsługiwany.', at_least_one_authentication_factor: 'Musisz wybrać co najmniej jeden czynnik uwierzytelniający.', - /** UNTRANSLATED */ - backup_code_cannot_be_enabled_alone: 'Backup code cannot be enabled alone.', - /** UNTRANSLATED */ - duplicated_mfa_factors: 'Duplicated MFA factors.', + backup_code_cannot_be_enabled_alone: 'Kod zapasowy nie może być włączony samodzielnie.', + duplicated_mfa_factors: 'Powielone czynniki MFA.', }; export default Object.freeze(sign_in_experiences); diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/index.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/index.ts index 2b9bb1730..820f1ace0 100644 --- a/packages/phrases/src/locales/pl-pl/translation/admin-console/index.ts +++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/index.ts @@ -28,7 +28,7 @@ import tab_sections from './tab-sections.js'; import tabs from './tabs.js'; import tenants from './tenants.js'; import topbar from './topbar.js'; -import upsell from './upsell.js'; +import upsell from './upsell/index.js'; import user_details from './user-details.js'; import users from './users.js'; import webhook_details from './webhook-details.js'; diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/sign-in-exp/index.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/sign-in-exp/index.ts index f3f328f37..2b6cc10c3 100644 --- a/packages/phrases/src/locales/pl-pl/translation/admin-console/sign-in-exp/index.ts +++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/sign-in-exp/index.ts @@ -11,8 +11,7 @@ const sign_in_exp = { branding: 'Marka', sign_up_and_sign_in: 'Rejestracja i logowanie', content: 'Treść', - /** UNTRANSLATED */ - password_policy: 'Password policy', + password_policy: 'Polityka hasła', }, welcome: { title: 'Dostosuj swoje doświadczenie logowania', diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/sign-in-exp/password-policy.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/sign-in-exp/password-policy.ts index f54c9f77b..35ee96044 100644 --- a/packages/phrases/src/locales/pl-pl/translation/admin-console/sign-in-exp/password-policy.ts +++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/sign-in-exp/password-policy.ts @@ -1,45 +1,27 @@ const password_policy = { - /** UNTRANSLATED */ - password_requirements: 'Password requirements', - /** UNTRANSLATED */ - minimum_length: 'Minimum length', - /** UNTRANSLATED */ - minimum_length_description: 'NIST suggests using at least 8 characters for web products.', - /** UNTRANSLATED */ - minimum_length_error: 'Minimum length must be between {{min}} and {{max}} (inclusive).', - /** UNTRANSLATED */ - minimum_required_char_types: 'Minimum required character types', - /** UNTRANSLATED */ + password_requirements: 'Wymagania dotyczące hasła', + minimum_length: 'Minimalna długość', + minimum_length_description: + 'NIST sugeruje użycie co najmniej 8 znaków dla produktów internetowych.', + minimum_length_error: 'Minimalna długość musi wynosić od {{min}} do {{max}} (włącznie).', + minimum_required_char_types: 'Minimalna liczba wymaganych typów znaków', minimum_required_char_types_description: - 'Character types: uppercase (A-Z), lowercase (a-z), numbers (0-9), and special symbols ({{symbols}}).', - /** UNTRANSLATED */ - password_rejection: 'Password rejection', - /** UNTRANSLATED */ - compromised_passwords: 'Reject compromised password', - /** UNTRANSLATED */ - breached_passwords: 'Breached passwords', - /** UNTRANSLATED */ - breached_passwords_description: 'Reject passwords previously found in breach databases.', - /** UNTRANSLATED */ - restricted_phrases: 'Restrict low-security phrases', - /** UNTRANSLATED */ + 'Typy znaków: wielkie litery (A-Z), małe litery (a-z), cyfry (0-9) i znaki specjalne ({{symbols}}).', + password_rejection: 'Odrzucanie hasła', + compromised_passwords: 'Odrzucaj skompromitowane hasła', + breached_passwords: 'Odrzucaj naruszone hasła', + breached_passwords_description: + 'Odrzucaj hasła, które wcześniej zostały znalezione w bazach naruszeń.', + restricted_phrases: 'Ogranicz niskie zabezpieczenia', restricted_phrases_tooltip: - 'Users cannot use passwords that are exactly the same as or made up of the listed phrases below. The addition of 3 or more non-consecutive characters is allowed to increase password complexity.', - /** UNTRANSLATED */ - repetitive_or_sequential_characters: 'Repetitive or sequential characters', - /** UNTRANSLATED */ - repetitive_or_sequential_characters_description: 'E.g., "AAAA", "1234", and "abcd".', - /** UNTRANSLATED */ - user_information: 'User information', - /** UNTRANSLATED */ - user_information_description: 'E.g., email address, phone number, username, etc.', - /** UNTRANSLATED */ - custom_words: 'Custom words', - /** UNTRANSLATED */ - custom_words_description: - 'Personalize context-specific words, case-insensitive, and one per line.', - /** UNTRANSLATED */ - custom_words_placeholder: 'Your service name, company name, etc.', + 'Twoje hasło powinno omijać te frazy, chyba że zestawisz je z 3 lub więcej dodatkowymi znakami.', + repetitive_or_sequential_characters: 'Powtarzające się lub sekwencyjne znaki', + repetitive_or_sequential_characters_description: 'Na przykład "AAAA", "1234" i "abcd".', + user_information: 'Informacje użytkownika', + user_information_description: 'Na przykład adres e-mail, numer telefonu, nazwa użytkownika itp.', + custom_words: 'Niestandardowe słowa', + custom_words_description: 'Słowa kontekstowe, niezależne od wielkości liter, jeden na linię.', + custom_words_placeholder: 'Nazwa twojej usługi, nazwa firmy itp.', }; export default Object.freeze(password_policy); diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts index 772767362..281f4caca 100644 --- a/packages/phrases/src/locales/pl-pl/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts +++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts @@ -54,13 +54,10 @@ const sign_up_and_sign_in = { 'Jest to istotne, ponieważ wybrałeś {{identifier}} jako wymagany identyfikator.', }, advanced_options: { - /** UNTRANSLATED */ - title: 'ADVANCED OPTIONS', - /** UNTRANSLATED */ - enable_user_registration: 'Enable user registration', - /** UNTRANSLATED */ + title: 'USTAWIENIA ZAAWANSOWANE', + enable_user_registration: 'Włącz rejestrację użytkowników', enable_user_registration_description: - 'Enable or disallow user registration. Once disabled, users can still be added in the admin console but users can no longer establish accounts through the sign-in UI.', + 'Włącz lub wyłącz rejestrację użytkowników. Po wyłączeniu użytkownicy nadal mogą być dodawani w konsoli administratora, ale nie mogą już zakładać kont za pomocą interfejsu logowania.', }, }; diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/upsell.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/upsell.ts deleted file mode 100644 index 35e8305d1..000000000 --- a/packages/phrases/src/locales/pl-pl/translation/admin-console/upsell.ts +++ /dev/null @@ -1,87 +0,0 @@ -const upsell = { - pro_tag: 'PRO', - upgrade_plan: 'Ulepsz plan', - compare_plans: 'Porównaj plany', - get_started: { - title: 'Rozpocznij swój płynny proces identyfikacji dzięki darmowemu planowi!', - description: - 'Darmowy plan doskonale sprawdzi się do przetestowania Logto na twoich projektach czy testach. Aby w pełni wykorzystać możliwości Logto dla twojego zespołu, zaktualizuj plan i uzyskaj nieograniczony dostęp do funkcji premium: nielimitowanej liczby MAU, integracji maszynowej, zarządzania RBAC, długoterminowych dzienników audytu itd. Zobacz wszystkie plany', - }, - create_tenant: { - title: 'Wybierz swój plan najemcy', - description: - 'Logto oferuje konkurencyjne opcje planów z innowacyjnym i przystępnym cenowo modelu dla rozwijających się firm. Dowiedz się więcej', - base_price: 'Cena podstawowa', - monthly_price: '{{value, number}}/mies.', - mau_unit_price: 'Cena jednostkowa MAU', - view_all_features: 'Zobacz wszystkie funkcje', - select_plan: 'Wybierz ', - free_tenants_limit: 'Do {{count, number}} bezpłatnego najemcy', - free_tenants_limit_other: 'Do {{count, number}} bezpłatnych najemców', - most_popular: 'Najpopularniejszy', - upgrade_success: 'Pomyślnie ulepszono do ', - }, - paywall: { - applications: - 'Osiągnięto limit {{count, number}} aplikacji dla . Zaktualizuj plan, aby sprostać potrzebom zespołu. W razie potrzeby pomocy, proszę skontaktuj się z nami.', - applications_other: - 'Osiągnięto limit {{count, number}} aplikacji dla . Zaktualizuj plan, aby sprostać potrzebom zespołu. W razie potrzeby pomocy, proszę skontaktuj się z nami.', - machine_to_machine_feature: - 'Zaktualizuj plan na płatny, aby tworzyć aplikacje maszynowe i uzyskać dostęp do wszystkich funkcji premium. W razie potrzeby pomocy, proszę skontaktuj się z nami.', - machine_to_machine: - 'Osiągnięto limit {{count, number}} aplikacji maszynowych dla . Zaktualizuj plan, aby sprostać potrzebom zespołu. W razie potrzeby pomocy, proszę skontaktuj się z nami.', - machine_to_machine_other: - 'Osiągnięto limit {{count, number}} aplikacji maszynowych dla . Zaktualizuj plan, aby sprostać potrzebom zespołu. W razie potrzeby pomocy, proszę skontaktuj się z nami.', - resources: - 'Osiągnięto limit {{count, number}} zasobów API w planie . Ulepsz plan, aby sprostać potrzebom twojego zespołu. Skontaktuj się z nami tutaj, jeśli potrzebujesz pomocy.', - resources_other: - 'Osiągnięto limit {{count, number}} zasobów API w planie . Ulepsz plan, aby sprostać potrzebom twojego zespołu. Skontaktuj się z nami tutaj, jeśli potrzebujesz pomocy.', - scopes_per_resource: - 'Osiągnięto limit {{count, number}} uprawnień na zasób API w planie . Zaktualizuj plan, aby rozszerzyć. Skontaktuj się z nami tutaj, jeśli potrzebujesz pomocy.', - scopes_per_resource_other: - 'Osiągnięto limit {{count, number}} uprawnień na zasób API w planie . Zaktualizuj plan, aby rozszerzyć. Skontaktuj się z nami tutaj, jeśli potrzebujesz pomocy.', - custom_domain: - 'Odblokuj funkcję niestandardowego domeny i szereg korzyści premium, ulepszając do płatnego planu. Jeśli potrzebujesz pomocy, nie wahaj się skontaktować z nami.', - social_connectors: - 'Osiągnięto limit {{count, number}} konektorów społecznościowych w planie . Aby sprostać potrzebom twojego zespołu, ulepsz plan, aby uzyskać dodatkowe konektory społecznościowe oraz możliwość tworzenia własnych konektorów za pomocą protokołów OIDC, OAuth 2.0 i SAML. Jeśli potrzebujesz pomocy, nie wahaj się skontaktować z nami.', - social_connectors_other: - 'Osiągnięto limit {{count, number}} konektorów społecznościowych w planie . Aby sprostać potrzebom twojego zespołu, ulepsz plan, aby uzyskać dodatkowe konektory społecznościowe oraz możliwość tworzenia własnych konektorów za pomocą protokołów OIDC, OAuth 2.0 i SAML. Jeśli potrzebujesz pomocy, nie wahaj się skontaktować z nami.', - standard_connectors_feature: - 'Ulepsz do płatnego planu, aby tworzyć własne konektory za pomocą protokołów OIDC, OAuth 2.0 i SAML, oraz uzyskać nieograniczoną liczbę konektorów społecznościowych i wszystkie funkcje premium. Jeśli potrzebujesz pomocy, nie wahaj się skontaktować z nami.', - standard_connectors: - 'Osiągnięto limit {{count, number}} konektorów społecznościowych w planie . Aby sprostać potrzebom twojego zespołu, ulepsz plan, aby uzyskać dodatkowe konektory społecznościowe oraz możliwość tworzenia własnych konektorów za pomocą protokołów OIDC, OAuth 2.0 i SAML. Jeśli potrzebujesz pomocy, nie wahaj się skontaktować z nami.', - standard_connectors_other: - 'Osiągnięto limit {{count, number}} konektorów społecznościowych w planie . Aby sprostać potrzebom twojego zespołu, ulepsz plan, aby uzyskać dodatkowe konektory społecznościowe oraz możliwość tworzenia własnych konektorów za pomocą protokołów OIDC, OAuth 2.0 i SAML. Jeśli potrzebujesz pomocy, nie wahaj się skontaktować z nami.', - standard_connectors_pro: - 'Osiągnięto limit {{count, number}} standardowych konektorów w planie . Aby sprostać potrzebom twojego zespołu, ulepsz do planu Enterprise, aby uzyskać dodatkowe konektory społecznościowe oraz możliwość tworzenia własnych konektorów za pomocą protokołów OIDC, OAuth 2.0 i SAML. Jeśli potrzebujesz pomocy, nie wahaj się skontaktować z nami.', - standard_connectors_pro_other: - 'Osiągnięto limit {{count, number}} standardowych konektorów w planie . Aby sprostać potrzebom twojego zespołu, ulepsz do planu Enterprise, aby uzyskać dodatkowe konektory społecznościowe oraz możliwość tworzenia własnych konektorów za pomocą protokołów OIDC, OAuth 2.0 i SAML. Jeśli potrzebujesz pomocy, nie wahaj się skontaktować z nami.', - roles: - 'Osiągnięto limit {{count, number}} ról w planie . Ulepsz plan, aby dodać dodatkowe role i uprawnienia. Jeśli potrzebujesz pomocy, nie wahaj się skontaktować z nami.', - roles_other: - 'Osiągnięto limit {{count, number}} ról w planie . Ulepsz plan, aby dodać dodatkowe role i uprawnienia. Jeśli potrzebujesz pomocy, nie wahaj się skontaktować z nami.', - scopes_per_role: - 'Osiągnięto limit {{count, number}} uprawnień na rolę w planie . Ulepsz plan, aby dodać dodatkowe role i uprawnienia. W razie potrzeby, skontaktuj się z nami tutaj.', - scopes_per_role_other: - 'Osiągnięto limit {{count, number}} uprawnień na rolę w planie . Ulepsz plan, aby dodać dodatkowe role i uprawnienia. W razie potrzeby, skontaktuj się z nami tutaj.', - hooks: - 'Osiągnięto limit {{count, number}} webhooków w planie . Ulepsz plan, aby tworzyć więcej webhooków. Jeśli potrzebujesz pomocy, nie wahaj się skontaktować z nami.', - hooks_other: - 'Osiągnięto limit {{count, number}} webhooków w planie . Ulepsz plan, aby tworzyć więcej webhooków. Jeśli potrzebujesz pomocy, nie wahaj się skontaktować z nami.', - }, - mau_exceeded_modal: { - title: 'MAU przekroczyło limit. Ulepsz swój plan.', - notification: - 'Obecna liczba MAU przekroczyła limit planu . Proszę natychmiast zaktualizować swój plan na wersję premium, aby uniknąć zawieszenia usługi Logto.', - update_plan: 'Zaktualizuj plan', - }, - payment_overdue_modal: { - title: 'Opłata za fakturę zaległa', - notification: - 'Ups! Płatność za fakturę najemcy {{name}} nie powiodła się. Proszę zapłacić fakturę w odpowiednim terminie, aby uniknąć zawieszenia usługi Logto.', - unpaid_bills: 'Nieuregulowane faktury', - update_payment: 'Zaktualizuj płatność', - }, -}; - -export default Object.freeze(upsell); diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/upsell/index.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/upsell/index.ts new file mode 100644 index 000000000..1e7c8a8eb --- /dev/null +++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/upsell/index.ts @@ -0,0 +1,42 @@ +import paywall from './paywall.js'; + +const upsell = { + pro_tag: 'PRO', + upgrade_plan: 'Ulepsz plan', + compare_plans: 'Porównaj plany', + get_started: { + title: 'Rozpocznij swój płynny proces identyfikacji dzięki darmowemu planowi!', + description: + 'Darmowy plan doskonale sprawdzi się do przetestowania Logto na twoich projektach czy testach. Aby w pełni wykorzystać możliwości Logto dla twojego zespołu, zaktualizuj plan i uzyskaj nieograniczony dostęp do funkcji premium: nielimitowanej liczby MAU, integracji maszynowej, zarządzania RBAC, długoterminowych dzienników audytu itd. Zobacz wszystkie plany', + }, + create_tenant: { + title: 'Wybierz swój plan najemcy', + description: + 'Logto oferuje konkurencyjne opcje planów z innowacyjnym i przystępnym cenowo modelu dla rozwijających się firm. Dowiedz się więcej', + base_price: 'Cena podstawowa', + monthly_price: '{{value, number}}/mies.', + mau_unit_price: 'Cena jednostkowa MAU', + view_all_features: 'Zobacz wszystkie funkcje', + select_plan: 'Wybierz ', + free_tenants_limit: 'Do {{count, number}} bezpłatnego najemcy', + free_tenants_limit_other: 'Do {{count, number}} bezpłatnych najemców', + most_popular: 'Najpopularniejszy', + upgrade_success: 'Pomyślnie ulepszono do ', + }, + mau_exceeded_modal: { + title: 'MAU przekroczyło limit. Ulepsz swój plan.', + notification: + 'Obecna liczba MAU przekroczyła limit planu . Proszę natychmiast zaktualizować swój plan na wersję premium, aby uniknąć zawieszenia usługi Logto.', + update_plan: 'Zaktualizuj plan', + }, + payment_overdue_modal: { + title: 'Opłata za fakturę zaległa', + notification: + 'Ups! Płatność za fakturę najemcy {{name}} nie powiodła się. Proszę zapłacić fakturę w odpowiednim terminie, aby uniknąć zawieszenia usługi Logto.', + unpaid_bills: 'Nieuregulowane faktury', + update_payment: 'Zaktualizuj płatność', + }, + paywall, +}; + +export default Object.freeze(upsell); diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/upsell/paywall.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/upsell/paywall.ts new file mode 100644 index 000000000..b8899507a --- /dev/null +++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/upsell/paywall.ts @@ -0,0 +1,50 @@ +const paywall = { + applications: + 'Osiągnięto limit {{count, number}} aplikacji dla . Zaktualizuj plan, aby sprostać potrzebom zespołu. W razie potrzeby pomocy, proszę skontaktuj się z nami.', + applications_other: + 'Osiągnięto limit {{count, number}} aplikacji dla . Zaktualizuj plan, aby sprostać potrzebom zespołu. W razie potrzeby pomocy, proszę skontaktuj się z nami.', + machine_to_machine_feature: + 'Zaktualizuj plan na płatny, aby tworzyć aplikacje maszynowe i uzyskać dostęp do wszystkich funkcji premium. W razie potrzeby pomocy, proszę skontaktuj się z nami.', + machine_to_machine: + 'Osiągnięto limit {{count, number}} aplikacji maszynowych dla . Zaktualizuj plan, aby sprostać potrzebom zespołu. W razie potrzeby pomocy, proszę skontaktuj się z nami.', + machine_to_machine_other: + 'Osiągnięto limit {{count, number}} aplikacji maszynowych dla . Zaktualizuj plan, aby sprostać potrzebom zespołu. W razie potrzeby pomocy, proszę skontaktuj się z nami.', + resources: + 'Osiągnięto limit {{count, number}} zasobów API w planie . Ulepsz plan, aby sprostać potrzebom twojego zespołu. Skontaktuj się z nami tutaj, jeśli potrzebujesz pomocy.', + resources_other: + 'Osiągnięto limit {{count, number}} zasobów API w planie . Ulepsz plan, aby sprostać potrzebom twojego zespołu. Skontaktuj się z nami tutaj, jeśli potrzebujesz pomocy.', + scopes_per_resource: + 'Osiągnięto limit {{count, number}} uprawnień na zasób API w planie . Zaktualizuj plan, aby rozszerzyć. Skontaktuj się z nami tutaj, jeśli potrzebujesz pomocy.', + scopes_per_resource_other: + 'Osiągnięto limit {{count, number}} uprawnień na zasób API w planie . Zaktualizuj plan, aby rozszerzyć. Skontaktuj się z nami tutaj, jeśli potrzebujesz pomocy.', + custom_domain: + 'Odblokuj funkcję niestandardowego domeny i szereg korzyści premium, ulepszając do płatnego planu. Jeśli potrzebujesz pomocy, nie wahaj się skontaktować z nami.', + social_connectors: + 'Osiągnięto limit {{count, number}} konektorów społecznościowych w planie . Aby sprostać potrzebom twojego zespołu, ulepsz plan, aby uzyskać dodatkowe konektory społecznościowe oraz możliwość tworzenia własnych konektorów za pomocą protokołów OIDC, OAuth 2.0 i SAML. Jeśli potrzebujesz pomocy, nie wahaj się skontaktować z nami.', + social_connectors_other: + 'Osiągnięto limit {{count, number}} konektorów społecznościowych w planie . Aby sprostać potrzebom twojego zespołu, ulepsz plan, aby uzyskać dodatkowe konektory społecznościowe oraz możliwość tworzenia własnych konektorów za pomocą protokołów OIDC, OAuth 2.0 i SAML. Jeśli potrzebujesz pomocy, nie wahaj się skontaktować z nami.', + standard_connectors_feature: + 'Ulepsz do płatnego planu, aby tworzyć własne konektory za pomocą protokołów OIDC, OAuth 2.0 i SAML, oraz uzyskać nieograniczoną liczbę konektorów społecznościowych i wszystkie funkcje premium. Jeśli potrzebujesz pomocy, nie wahaj się skontaktować z nami.', + standard_connectors: + 'Osiągnięto limit {{count, number}} konektorów społecznościowych w planie . Aby sprostać potrzebom twojego zespołu, ulepsz plan, aby uzyskać dodatkowe konektory społecznościowe oraz możliwość tworzenia własnych konektorów za pomocą protokołów OIDC, OAuth 2.0 i SAML. Jeśli potrzebujesz pomocy, nie wahaj się skontaktować z nami.', + standard_connectors_other: + 'Osiągnięto limit {{count, number}} konektorów społecznościowych w planie . Aby sprostać potrzebom twojego zespołu, ulepsz plan, aby uzyskać dodatkowe konektory społecznościowe oraz możliwość tworzenia własnych konektorów za pomocą protokołów OIDC, OAuth 2.0 i SAML. Jeśli potrzebujesz pomocy, nie wahaj się skontaktować z nami.', + standard_connectors_pro: + 'Osiągnięto limit {{count, number}} standardowych konektorów w planie . Aby sprostać potrzebom twojego zespołu, ulepsz do planu Enterprise, aby uzyskać dodatkowe konektory społecznościowe oraz możliwość tworzenia własnych konektorów za pomocą protokołów OIDC, OAuth 2.0 i SAML. Jeśli potrzebujesz pomocy, nie wahaj się skontaktować z nami.', + standard_connectors_pro_other: + 'Osiągnięto limit {{count, number}} standardowych konektorów w planie . Aby sprostać potrzebom twojego zespołu, ulepsz do planu Enterprise, aby uzyskać dodatkowe konektory społecznościowe oraz możliwość tworzenia własnych konektorów za pomocą protokołów OIDC, OAuth 2.0 i SAML. Jeśli potrzebujesz pomocy, nie wahaj się skontaktować z nami.', + roles: + 'Osiągnięto limit {{count, number}} ról w planie . Ulepsz plan, aby dodać dodatkowe role i uprawnienia. Jeśli potrzebujesz pomocy, nie wahaj się skontaktować z nami.', + roles_other: + 'Osiągnięto limit {{count, number}} ról w planie . Ulepsz plan, aby dodać dodatkowe role i uprawnienia. Jeśli potrzebujesz pomocy, nie wahaj się skontaktować z nami.', + scopes_per_role: + 'Osiągnięto limit {{count, number}} uprawnień na rolę w planie . Ulepsz plan, aby dodać dodatkowe role i uprawnienia. W razie potrzeby, skontaktuj się z nami tutaj.', + scopes_per_role_other: + 'Osiągnięto limit {{count, number}} uprawnień na rolę w planie . Ulepsz plan, aby dodać dodatkowe role i uprawnienia. W razie potrzeby, skontaktuj się z nami tutaj.', + hooks: + 'Osiągnięto limit {{count, number}} webhooków w planie . Ulepsz plan, aby tworzyć więcej webhooków. Jeśli potrzebujesz pomocy, nie wahaj się skontaktować z nami.', + hooks_other: + 'Osiągnięto limit {{count, number}} webhooków w planie . Ulepsz plan, aby tworzyć więcej webhooków. Jeśli potrzebujesz pomocy, nie wahaj się skontaktować z nami.', +}; + +export default Object.freeze(paywall); diff --git a/packages/phrases/src/locales/pt-br/errors/password.ts b/packages/phrases/src/locales/pt-br/errors/password.ts index 9374bce49..4f5ec024a 100644 --- a/packages/phrases/src/locales/pt-br/errors/password.ts +++ b/packages/phrases/src/locales/pt-br/errors/password.ts @@ -1,8 +1,7 @@ const password = { unsupported_encryption_method: 'O método de criptografia {{name}} não é suportado.', pepper_not_found: 'Password pepper não encontrada. Por favor, verifique seus envs principais.', - /** UNTRANSLATED */ - rejected: 'Password rejected. Please check if your password meets the requirements.', + rejected: 'Senha rejeitada. Por favor, verifique se sua senha atende aos requisitos.', }; export default Object.freeze(password); diff --git a/packages/phrases/src/locales/pt-br/errors/sign-in-experiences.ts b/packages/phrases/src/locales/pt-br/errors/sign-in-experiences.ts index 04abc7d88..dc402a3f2 100644 --- a/packages/phrases/src/locales/pt-br/errors/sign-in-experiences.ts +++ b/packages/phrases/src/locales/pt-br/errors/sign-in-experiences.ts @@ -18,10 +18,8 @@ const sign_in_experiences = { 'O login do código de verificação deve ser ativado quando definir uma senha não é necessária na inscrição.', unsupported_default_language: 'Este idioma - {{language}} não é suportado no momento.', at_least_one_authentication_factor: 'Você deve selecionar pelo menos um fator de autenticação.', - /** UNTRANSLATED */ - backup_code_cannot_be_enabled_alone: 'Backup code cannot be enabled alone.', - /** UNTRANSLATED */ - duplicated_mfa_factors: 'Duplicated MFA factors.', + backup_code_cannot_be_enabled_alone: 'Código de backup não pode ser ativado sozinho.', + duplicated_mfa_factors: 'Fatores MFA duplicados.', }; export default Object.freeze(sign_in_experiences); diff --git a/packages/phrases/src/locales/pt-br/translation/admin-console/index.ts b/packages/phrases/src/locales/pt-br/translation/admin-console/index.ts index 29ccc6842..a2f289bb9 100644 --- a/packages/phrases/src/locales/pt-br/translation/admin-console/index.ts +++ b/packages/phrases/src/locales/pt-br/translation/admin-console/index.ts @@ -28,7 +28,7 @@ import tab_sections from './tab-sections.js'; import tabs from './tabs.js'; import tenants from './tenants.js'; import topbar from './topbar.js'; -import upsell from './upsell.js'; +import upsell from './upsell/index.js'; import user_details from './user-details.js'; import users from './users.js'; import webhook_details from './webhook-details.js'; diff --git a/packages/phrases/src/locales/pt-br/translation/admin-console/sign-in-exp/index.ts b/packages/phrases/src/locales/pt-br/translation/admin-console/sign-in-exp/index.ts index 9d8ee8613..8339feb3f 100644 --- a/packages/phrases/src/locales/pt-br/translation/admin-console/sign-in-exp/index.ts +++ b/packages/phrases/src/locales/pt-br/translation/admin-console/sign-in-exp/index.ts @@ -11,8 +11,7 @@ const sign_in_exp = { branding: 'Marca', sign_up_and_sign_in: 'Inscreva-se e faça login', content: 'Conteúdo', - /** UNTRANSLATED */ - password_policy: 'Password policy', + password_policy: 'Política de senhas', }, welcome: { title: 'Personalize a experiência de login', diff --git a/packages/phrases/src/locales/pt-br/translation/admin-console/sign-in-exp/password-policy.ts b/packages/phrases/src/locales/pt-br/translation/admin-console/sign-in-exp/password-policy.ts index f54c9f77b..f119fb196 100644 --- a/packages/phrases/src/locales/pt-br/translation/admin-console/sign-in-exp/password-policy.ts +++ b/packages/phrases/src/locales/pt-br/translation/admin-console/sign-in-exp/password-policy.ts @@ -1,45 +1,29 @@ const password_policy = { - /** UNTRANSLATED */ - password_requirements: 'Password requirements', - /** UNTRANSLATED */ - minimum_length: 'Minimum length', - /** UNTRANSLATED */ - minimum_length_description: 'NIST suggests using at least 8 characters for web products.', - /** UNTRANSLATED */ - minimum_length_error: 'Minimum length must be between {{min}} and {{max}} (inclusive).', - /** UNTRANSLATED */ - minimum_required_char_types: 'Minimum required character types', - /** UNTRANSLATED */ + password_requirements: 'Requisitos de senha', + minimum_length: 'Comprimento mínimo', + minimum_length_description: + 'O NIST sugere o uso de pelo menos 8 caracteres para produtos na web.', + minimum_length_error: 'O comprimento mínimo deve estar entre {{min}} e {{max}} (inclusive).', + minimum_required_char_types: 'Tipos de caracteres mínimos necessários', minimum_required_char_types_description: - 'Character types: uppercase (A-Z), lowercase (a-z), numbers (0-9), and special symbols ({{symbols}}).', - /** UNTRANSLATED */ - password_rejection: 'Password rejection', - /** UNTRANSLATED */ - compromised_passwords: 'Reject compromised password', - /** UNTRANSLATED */ - breached_passwords: 'Breached passwords', - /** UNTRANSLATED */ - breached_passwords_description: 'Reject passwords previously found in breach databases.', - /** UNTRANSLATED */ - restricted_phrases: 'Restrict low-security phrases', - /** UNTRANSLATED */ + 'Tipos de caracteres: maiúsculas (A-Z), minúsculas (a-z), números (0-9) e símbolos especiais ({{symbols}}).', + password_rejection: 'Rejeição de senha', + compromised_passwords: 'Senhas comprometidas', + breached_passwords: 'Senhas comprometidas', + breached_passwords_description: + 'Rejeitar senhas encontradas em bancos de dados de violações anteriores.', + restricted_phrases: 'Restringir frases de baixa segurança', restricted_phrases_tooltip: - 'Users cannot use passwords that are exactly the same as or made up of the listed phrases below. The addition of 3 or more non-consecutive characters is allowed to increase password complexity.', - /** UNTRANSLATED */ - repetitive_or_sequential_characters: 'Repetitive or sequential characters', - /** UNTRANSLATED */ - repetitive_or_sequential_characters_description: 'E.g., "AAAA", "1234", and "abcd".', - /** UNTRANSLATED */ - user_information: 'User information', - /** UNTRANSLATED */ - user_information_description: 'E.g., email address, phone number, username, etc.', - /** UNTRANSLATED */ - custom_words: 'Custom words', - /** UNTRANSLATED */ + 'Sua senha deve evitar essas frases, a menos que você combine com 3 ou mais caracteres extras.', + repetitive_or_sequential_characters: 'Caracteres repetitivos ou sequenciais', + repetitive_or_sequential_characters_description: 'Por exemplo, "AAAA", "1234" e "abcd".', + user_information: 'Informações do usuário', + user_information_description: + 'Por exemplo, endereço de e-mail, número de telefone, nome de usuário, etc.', + custom_words: 'Palavras personalizadas', custom_words_description: - 'Personalize context-specific words, case-insensitive, and one per line.', - /** UNTRANSLATED */ - custom_words_placeholder: 'Your service name, company name, etc.', + 'Personalize palavras específicas do contexto, sem diferenciação de maiúsculas e minúsculas, e uma por linha.', + custom_words_placeholder: 'Nome do seu serviço, nome da empresa, etc.', }; export default Object.freeze(password_policy); diff --git a/packages/phrases/src/locales/pt-br/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts b/packages/phrases/src/locales/pt-br/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts index 6ecd416e2..0b6f9fef7 100644 --- a/packages/phrases/src/locales/pt-br/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts +++ b/packages/phrases/src/locales/pt-br/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts @@ -53,13 +53,10 @@ const sign_up_and_sign_in = { 'Isso é essencial, pois você selecionou {{identifier}} como um identificador obrigatório.', }, advanced_options: { - /** UNTRANSLATED */ - title: 'ADVANCED OPTIONS', - /** UNTRANSLATED */ - enable_user_registration: 'Enable user registration', - /** UNTRANSLATED */ + title: 'OPÇÕES AVANÇADAS', + enable_user_registration: 'Habilitar registro de usuário', enable_user_registration_description: - 'Enable or disallow user registration. Once disabled, users can still be added in the admin console but users can no longer establish accounts through the sign-in UI.', + 'Habilitar ou desabilitar o registro de usuários. Depois de desabilitado, os usuários ainda podem ser adicionados no console de administração, mas os usuários não poderão mais criar contas através da interface de login.', }, }; diff --git a/packages/phrases/src/locales/pt-br/translation/admin-console/upsell.ts b/packages/phrases/src/locales/pt-br/translation/admin-console/upsell.ts deleted file mode 100644 index 2b0d14f9d..000000000 --- a/packages/phrases/src/locales/pt-br/translation/admin-console/upsell.ts +++ /dev/null @@ -1,87 +0,0 @@ -const upsell = { - pro_tag: 'PRO', - upgrade_plan: 'Atualizar plano', - compare_plans: 'Comparar planos', - get_started: { - title: 'Inicie sua jornada de identidade sem problemas com um plano gratuito!', - description: - 'O plano gratuito é perfeito para experimentar o Logto em seus projetos paralelos ou testes. Para aproveitar ao máximo as capacidades do Logto para sua equipe, faça um upgrade para obter acesso ilimitado aos recursos premium: uso ilimitado de MAU, integração Máquina-a-Máquina, gerenciamento de RBAC, logs de auditoria de longo prazo, etc. Ver todos os planos', - }, - create_tenant: { - title: 'Selecione o seu plano de inquilino', - description: - 'O Logto oferece opções competitivas de planos com preços inovadores e acessíveis, especialmente concebidos para empresas em crescimento. Saiba mais', - base_price: 'Preço base', - monthly_price: '{{value, number}}/mês', - mau_unit_price: 'Preço unitário do MAU', - view_all_features: 'Ver todas as funcionalidades', - select_plan: 'Selecionar ', - free_tenants_limit: 'Até {{count, number}} inquilino gratuito', - free_tenants_limit_other: 'Até {{count, number}} inquilinos gratuitos', - most_popular: 'Mais popular', - upgrade_success: 'Atualização para bem-sucedida', - }, - paywall: { - applications: - 'Limite de {{count, number}} aplicação do atingido. Atualize o plano para atender às necessidades da sua equipe. Para obter qualquer ajuda, sinta-se à vontade para entrar em contato conosco.', - applications_other: - 'Limite de {{count, number}} aplicações do atingido. Atualize o plano para atender às necessidades da sua equipe. Para obter qualquer ajuda, sinta-se à vontade para entrar em contato conosco.', - machine_to_machine_feature: - 'Faça upgrade para um plano pago para criar aplicativos de máquina para máquina, junto com acesso a todos os recursos premium. Para qualquer assistência, fique à vontade para entrar em contato conosco.', - machine_to_machine: - 'Limite de {{count, number}} aplicação de máquina para máquina do atingido. Atualize o plano para atender às necessidades da sua equipe. Para obter qualquer ajuda, sinta-se à vontade para entrar em contato conosco.', - machine_to_machine_other: - 'Limite de {{count, number}} aplicações de máquina para máquina do atingido. Atualize o plano para atender às necessidades da sua equipe. Para obter qualquer ajuda, sinta-se à vontade para entrar em contato conosco.', - resources: - 'Atingiu o limite de {{count, number}} recursos de API de . Atualize o plano para satisfazer as necessidades da sua equipa. Contacte-nos se precisar de assistência.', - resources_other: - 'Atingiu o limite de {{count, number}} recursos de API de . Atualize o plano para satisfazer as necessidades da sua equipa. Contacte-nos se precisar de assistência.', - scopes_per_resource: - 'Atingiu o limite de {{count, number}} permissões por recurso de API de . Atualize agora para expandir. Contacte-nos se precisar de assistência.', - scopes_per_resource_other: - 'Atingiu o limite de {{count, number}} permissões por recurso de API de . Atualize agora para expandir. Contacte-nos se precisar de assistência.', - custom_domain: - 'Desbloqueie a funcionalidade de domínio personalizado e uma série de benefícios premium ao atualizar para um plano pago. Não hesite em Contacte-nos se precisar de ajuda.', - social_connectors: - 'Atingiu o limite de {{count, number}} conectores sociais de . Atualize o plano para obter conectores sociais adicionais e a capacidade de criar os seus próprios conectores usando os protocolos OIDC, OAuth 2.0 e SAML. Não hesite em Contacte-nos se precisar de ajuda.', - social_connectors_other: - 'Atingiu o limite de {{count, number}} conectores sociais de . Atualize o plano para obter conectores sociais adicionais e a capacidade de criar os seus próprios conectores usando os protocolos OIDC, OAuth 2.0 e SAML. Não hesite em Contacte-nos se precisar de ajuda.', - standard_connectors_feature: - 'Atualize para um plano pago para criar os seus próprios conectores usando os protocolos OIDC, OAuth 2.0 e SAML, além de obter conectores sociais ilimitados e todas as funcionalidades premium. Não hesite em Contacte-nos se precisar de ajuda.', - standard_connectors: - 'Atingiu o limite de {{count, number}} conectores sociais de . Atualize o plano para obter conectores sociais adicionais e a capacidade de criar os seus próprios conectores usando os protocolos OIDC, OAuth 2.0 e SAML. Não hesite em Contacte-nos se precisar de ajuda.', - standard_connectors_other: - 'Atingiu o limite de {{count, number}} conectores sociais de . Atualize o plano para obter conectores sociais adicionais e a capacidade de criar os seus próprios conectores usando os protocolos OIDC, OAuth 2.0 e SAML. Não hesite em Contacte-nos se precisar de ajuda.', - standard_connectors_pro: - 'Atingiu o limite de {{count, number}} conectores padrão de . Atualize para o plano Empresarial para obter conectores sociais adicionais e a capacidade de criar os seus próprios conectores usando os protocolos OIDC, OAuth 2.0 e SAML. Não hesite em Contacte-nos se precisar de ajuda.', - standard_connectors_pro_other: - 'Atingiu o limite de {{count, number}} conectores padrão de . Atualize para o plano Empresarial para obter conectores sociais adicionais e a capacidade de criar os seus próprios conectores usando os protocolos OIDC, OAuth 2.0 e SAML. Não hesite em Contacte-nos se precisar de ajuda.', - roles: - 'Atingiu o limite de {{count, number}} funções de . Atualize o plano para adicionar funções e permissões adicionais. Não hesite em Contacte-nos se precisar de ajuda.', - roles_other: - 'Atingiu o limite de {{count, number}} funções de . Atualize o plano para adicionar funções e permissões adicionais. Não hesite em Contacte-nos se precisar de ajuda.', - scopes_per_role: - 'Atingiu o limite de {{count, number}} permissões por função de . Atualize o plano para adicionar funções e permissões adicionais. Não hesite em Contacte-nos se precisar de ajuda.', - scopes_per_role_other: - 'Atingiu o limite de {{count, number}} permissões por função de . Atualize o plano para adicionar funções e permissões adicionais. Não hesite em Contacte-nos se precisar de ajuda.', - hooks: - 'Atingiu o limite de {{count, number}} webhooks de . Atualize o plano para criar mais webhooks. Não hesite em Contacte-nos se precisar de ajuda.', - hooks_other: - 'Atingiu o limite de {{count, number}} webhooks de . Atualize o plano para criar mais webhooks. Não hesite em Contacte-nos se precisar de ajuda.', - }, - mau_exceeded_modal: { - title: 'MAU excedeu o limite. Atualize o seu plano.', - notification: - 'O seu MAU atual excedeu o limite de . Por favor, atualize para o plano premium a tempo para evitar a suspensão do serviço do Logto.', - update_plan: 'Atualizar plano', - }, - payment_overdue_modal: { - title: 'Pagamento da fatura em atraso', - notification: - 'Oops! O pagamento da fatura do inquilino {{name}} falhou. Por favor, pague a fatura prontamente para evitar a suspensão do serviço Logto.', - unpaid_bills: 'Faturas não pagas', - update_payment: 'Atualizar pagamento', - }, -}; - -export default Object.freeze(upsell); diff --git a/packages/phrases/src/locales/pt-br/translation/admin-console/upsell/index.ts b/packages/phrases/src/locales/pt-br/translation/admin-console/upsell/index.ts new file mode 100644 index 000000000..e6383f4d4 --- /dev/null +++ b/packages/phrases/src/locales/pt-br/translation/admin-console/upsell/index.ts @@ -0,0 +1,42 @@ +import paywall from './paywall.js'; + +const upsell = { + pro_tag: 'PRO', + upgrade_plan: 'Atualizar plano', + compare_plans: 'Comparar planos', + get_started: { + title: 'Inicie sua jornada de identidade sem problemas com um plano gratuito!', + description: + 'O plano gratuito é perfeito para experimentar o Logto em seus projetos paralelos ou testes. Para aproveitar ao máximo as capacidades do Logto para sua equipe, faça um upgrade para obter acesso ilimitado aos recursos premium: uso ilimitado de MAU, integração Máquina-a-Máquina, gerenciamento de RBAC, logs de auditoria de longo prazo, etc. Ver todos os planos', + }, + create_tenant: { + title: 'Selecione o seu plano de inquilino', + description: + 'O Logto oferece opções competitivas de planos com preços inovadores e acessíveis, especialmente concebidos para empresas em crescimento. Saiba mais', + base_price: 'Preço base', + monthly_price: '{{value, number}}/mês', + mau_unit_price: 'Preço unitário do MAU', + view_all_features: 'Ver todas as funcionalidades', + select_plan: 'Selecionar ', + free_tenants_limit: 'Até {{count, number}} inquilino gratuito', + free_tenants_limit_other: 'Até {{count, number}} inquilinos gratuitos', + most_popular: 'Mais popular', + upgrade_success: 'Atualização para bem-sucedida', + }, + mau_exceeded_modal: { + title: 'MAU excedeu o limite. Atualize o seu plano.', + notification: + 'O seu MAU atual excedeu o limite de . Por favor, atualize para o plano premium a tempo para evitar a suspensão do serviço do Logto.', + update_plan: 'Atualizar plano', + }, + payment_overdue_modal: { + title: 'Pagamento da fatura em atraso', + notification: + 'Oops! O pagamento da fatura do inquilino {{name}} falhou. Por favor, pague a fatura prontamente para evitar a suspensão do serviço Logto.', + unpaid_bills: 'Faturas não pagas', + update_payment: 'Atualizar pagamento', + }, + paywall, +}; + +export default Object.freeze(upsell); diff --git a/packages/phrases/src/locales/pt-br/translation/admin-console/upsell/paywall.ts b/packages/phrases/src/locales/pt-br/translation/admin-console/upsell/paywall.ts new file mode 100644 index 000000000..89d14a486 --- /dev/null +++ b/packages/phrases/src/locales/pt-br/translation/admin-console/upsell/paywall.ts @@ -0,0 +1,50 @@ +const paywall = { + applications: + 'Limite de {{count, number}} aplicação do atingido. Atualize o plano para atender às necessidades da sua equipe. Para obter qualquer ajuda, sinta-se à vontade para entrar em contato conosco.', + applications_other: + 'Limite de {{count, number}} aplicações do atingido. Atualize o plano para atender às necessidades da sua equipe. Para obter qualquer ajuda, sinta-se à vontade para entrar em contato conosco.', + machine_to_machine_feature: + 'Faça upgrade para um plano pago para criar aplicativos de máquina para máquina, junto com acesso a todos os recursos premium. Para qualquer assistência, fique à vontade para entrar em contato conosco.', + machine_to_machine: + 'Limite de {{count, number}} aplicação de máquina para máquina do atingido. Atualize o plano para atender às necessidades da sua equipe. Para obter qualquer ajuda, sinta-se à vontade para entrar em contato conosco.', + machine_to_machine_other: + 'Limite de {{count, number}} aplicações de máquina para máquina do atingido. Atualize o plano para atender às necessidades da sua equipe. Para obter qualquer ajuda, sinta-se à vontade para entrar em contato conosco.', + resources: + 'Atingiu o limite de {{count, number}} recursos de API de . Atualize o plano para satisfazer as necessidades da sua equipa. Contacte-nos se precisar de assistência.', + resources_other: + 'Atingiu o limite de {{count, number}} recursos de API de . Atualize o plano para satisfazer as necessidades da sua equipa. Contacte-nos se precisar de assistência.', + scopes_per_resource: + 'Atingiu o limite de {{count, number}} permissões por recurso de API de . Atualize agora para expandir. Contacte-nos se precisar de assistência.', + scopes_per_resource_other: + 'Atingiu o limite de {{count, number}} permissões por recurso de API de . Atualize agora para expandir. Contacte-nos se precisar de assistência.', + custom_domain: + 'Desbloqueie a funcionalidade de domínio personalizado e uma série de benefícios premium ao atualizar para um plano pago. Não hesite em Contacte-nos se precisar de ajuda.', + social_connectors: + 'Atingiu o limite de {{count, number}} conectores sociais de . Atualize o plano para obter conectores sociais adicionais e a capacidade de criar os seus próprios conectores usando os protocolos OIDC, OAuth 2.0 e SAML. Não hesite em Contacte-nos se precisar de ajuda.', + social_connectors_other: + 'Atingiu o limite de {{count, number}} conectores sociais de . Atualize o plano para obter conectores sociais adicionais e a capacidade de criar os seus próprios conectores usando os protocolos OIDC, OAuth 2.0 e SAML. Não hesite em Contacte-nos se precisar de ajuda.', + standard_connectors_feature: + 'Atualize para um plano pago para criar os seus próprios conectores usando os protocolos OIDC, OAuth 2.0 e SAML, além de obter conectores sociais ilimitados e todas as funcionalidades premium. Não hesite em Contacte-nos se precisar de ajuda.', + standard_connectors: + 'Atingiu o limite de {{count, number}} conectores sociais de . Atualize o plano para obter conectores sociais adicionais e a capacidade de criar os seus próprios conectores usando os protocolos OIDC, OAuth 2.0 e SAML. Não hesite em Contacte-nos se precisar de ajuda.', + standard_connectors_other: + 'Atingiu o limite de {{count, number}} conectores sociais de . Atualize o plano para obter conectores sociais adicionais e a capacidade de criar os seus próprios conectores usando os protocolos OIDC, OAuth 2.0 e SAML. Não hesite em Contacte-nos se precisar de ajuda.', + standard_connectors_pro: + 'Atingiu o limite de {{count, number}} conectores padrão de . Atualize para o plano Empresarial para obter conectores sociais adicionais e a capacidade de criar os seus próprios conectores usando os protocolos OIDC, OAuth 2.0 e SAML. Não hesite em Contacte-nos se precisar de ajuda.', + standard_connectors_pro_other: + 'Atingiu o limite de {{count, number}} conectores padrão de . Atualize para o plano Empresarial para obter conectores sociais adicionais e a capacidade de criar os seus próprios conectores usando os protocolos OIDC, OAuth 2.0 e SAML. Não hesite em Contacte-nos se precisar de ajuda.', + roles: + 'Atingiu o limite de {{count, number}} funções de . Atualize o plano para adicionar funções e permissões adicionais. Não hesite em Contacte-nos se precisar de ajuda.', + roles_other: + 'Atingiu o limite de {{count, number}} funções de . Atualize o plano para adicionar funções e permissões adicionais. Não hesite em Contacte-nos se precisar de ajuda.', + scopes_per_role: + 'Atingiu o limite de {{count, number}} permissões por função de . Atualize o plano para adicionar funções e permissões adicionais. Não hesite em Contacte-nos se precisar de ajuda.', + scopes_per_role_other: + 'Atingiu o limite de {{count, number}} permissões por função de . Atualize o plano para adicionar funções e permissões adicionais. Não hesite em Contacte-nos se precisar de ajuda.', + hooks: + 'Atingiu o limite de {{count, number}} webhooks de . Atualize o plano para criar mais webhooks. Não hesite em Contacte-nos se precisar de ajuda.', + hooks_other: + 'Atingiu o limite de {{count, number}} webhooks de . Atualize o plano para criar mais webhooks. Não hesite em Contacte-nos se precisar de ajuda.', +}; + +export default Object.freeze(paywall); diff --git a/packages/phrases/src/locales/pt-pt/errors/password.ts b/packages/phrases/src/locales/pt-pt/errors/password.ts index cc0230a3d..9c227be73 100644 --- a/packages/phrases/src/locales/pt-pt/errors/password.ts +++ b/packages/phrases/src/locales/pt-pt/errors/password.ts @@ -1,8 +1,7 @@ const password = { - unsupported_encryption_method: 'O método de enncriptação {{name}} não é suportado.', + unsupported_encryption_method: 'O método de encriptação {{name}} não é suportado.', pepper_not_found: 'pepper da Password não encontrada. Por favor, verifique os envs.', - /** UNTRANSLATED */ - rejected: 'Password rejected. Please check if your password meets the requirements.', + rejected: 'Senha rejeitada. Por favor, verifique se sua senha atende aos requisitos.', }; export default Object.freeze(password); diff --git a/packages/phrases/src/locales/pt-pt/errors/sign-in-experiences.ts b/packages/phrases/src/locales/pt-pt/errors/sign-in-experiences.ts index a72809d07..fd4d4c070 100644 --- a/packages/phrases/src/locales/pt-pt/errors/sign-in-experiences.ts +++ b/packages/phrases/src/locales/pt-pt/errors/sign-in-experiences.ts @@ -18,10 +18,8 @@ const sign_in_experiences = { 'O login com código de verificação deve ser habilitado quando não é requerido configurar uma senha na inscrição.', unsupported_default_language: 'Este idioma - {{language}} não é suportado no momento.', at_least_one_authentication_factor: 'Você deve selecionar pelo menos um fator de autenticação.', - /** UNTRANSLATED */ - backup_code_cannot_be_enabled_alone: 'Backup code cannot be enabled alone.', - /** UNTRANSLATED */ - duplicated_mfa_factors: 'Duplicated MFA factors.', + backup_code_cannot_be_enabled_alone: 'O código de backup não pode ser ativado sozinho.', + duplicated_mfa_factors: 'Fatores MFA duplicados.', }; export default Object.freeze(sign_in_experiences); diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/index.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/index.ts index 8aa363a57..477298624 100644 --- a/packages/phrases/src/locales/pt-pt/translation/admin-console/index.ts +++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/index.ts @@ -28,7 +28,7 @@ import tab_sections from './tab-sections.js'; import tabs from './tabs.js'; import tenants from './tenants.js'; import topbar from './topbar.js'; -import upsell from './upsell.js'; +import upsell from './upsell/index.js'; import user_details from './user-details.js'; import users from './users.js'; import webhook_details from './webhook-details.js'; diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/sign-in-exp/index.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/sign-in-exp/index.ts index b199a23dd..077b1054b 100644 --- a/packages/phrases/src/locales/pt-pt/translation/admin-console/sign-in-exp/index.ts +++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/sign-in-exp/index.ts @@ -11,8 +11,7 @@ const sign_in_exp = { branding: 'Marca', sign_up_and_sign_in: 'Registo e login', content: 'Conteúdo', - /** UNTRANSLATED */ - password_policy: 'Password policy', + password_policy: 'Política de senha', }, welcome: { title: 'Personalize a experiência de início de sessão', diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/sign-in-exp/password-policy.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/sign-in-exp/password-policy.ts index f54c9f77b..f8beaca72 100644 --- a/packages/phrases/src/locales/pt-pt/translation/admin-console/sign-in-exp/password-policy.ts +++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/sign-in-exp/password-policy.ts @@ -1,45 +1,29 @@ const password_policy = { - /** UNTRANSLATED */ - password_requirements: 'Password requirements', - /** UNTRANSLATED */ - minimum_length: 'Minimum length', - /** UNTRANSLATED */ - minimum_length_description: 'NIST suggests using at least 8 characters for web products.', - /** UNTRANSLATED */ - minimum_length_error: 'Minimum length must be between {{min}} and {{max}} (inclusive).', - /** UNTRANSLATED */ - minimum_required_char_types: 'Minimum required character types', - /** UNTRANSLATED */ + password_requirements: 'Requisitos de password', + minimum_length: 'Comprimento mínimo', + minimum_length_description: + 'O NIST sugere o uso de pelo menos 8 caracteres para produtos web.', + minimum_length_error: 'O comprimento mínimo deve estar entre {{min}} e {{max}} (inclusive).', + minimum_required_char_types: 'Tipos de caracteres mínimos necessários', minimum_required_char_types_description: - 'Character types: uppercase (A-Z), lowercase (a-z), numbers (0-9), and special symbols ({{symbols}}).', - /** UNTRANSLATED */ - password_rejection: 'Password rejection', - /** UNTRANSLATED */ - compromised_passwords: 'Reject compromised password', - /** UNTRANSLATED */ - breached_passwords: 'Breached passwords', - /** UNTRANSLATED */ - breached_passwords_description: 'Reject passwords previously found in breach databases.', - /** UNTRANSLATED */ - restricted_phrases: 'Restrict low-security phrases', - /** UNTRANSLATED */ + 'Tipos de caracteres: letras maiúsculas (A-Z), letras minúsculas (a-z), números (0-9) e símbolos especiais ({{symbols}}).', + password_rejection: 'Rejeição de password', + compromised_passwords: 'Passwords comprometidos', + breached_passwords: 'Passwords violados', + breached_passwords_description: + 'Recusar passwords encontradas anteriormente em bancos de dados de violação.', + restricted_phrases: 'Frases de baixa segurança restritas', restricted_phrases_tooltip: - 'Users cannot use passwords that are exactly the same as or made up of the listed phrases below. The addition of 3 or more non-consecutive characters is allowed to increase password complexity.', - /** UNTRANSLATED */ - repetitive_or_sequential_characters: 'Repetitive or sequential characters', - /** UNTRANSLATED */ - repetitive_or_sequential_characters_description: 'E.g., "AAAA", "1234", and "abcd".', - /** UNTRANSLATED */ - user_information: 'User information', - /** UNTRANSLATED */ - user_information_description: 'E.g., email address, phone number, username, etc.', - /** UNTRANSLATED */ - custom_words: 'Custom words', - /** UNTRANSLATED */ + 'Your password should avoid these phrases unless you combine with 3 or more extra characters.', + repetitive_or_sequential_characters: 'Caracteres repetitivos ou sequenciais', + repetitive_or_sequential_characters_description: 'Ex., "AAAA", "1234" e "abcd".', + user_information: 'Informações do utilizador', + user_information_description: + 'Ex., endereço de email, número de telefone, nome de utilizador, etc.', + custom_words: 'Palavras personalizadas', custom_words_description: - 'Personalize context-specific words, case-insensitive, and one per line.', - /** UNTRANSLATED */ - custom_words_placeholder: 'Your service name, company name, etc.', + 'Personalize palavras específicas do contexto, não diferenciando maiúsculas de minúsculas e uma por linha.', + custom_words_placeholder: 'Nome de seu serviço, nome da empresa, etc.', }; export default Object.freeze(password_policy); diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts index c2981ed48..262f815cc 100644 --- a/packages/phrases/src/locales/pt-pt/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts +++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts @@ -53,13 +53,10 @@ const sign_up_and_sign_in = { 'Isto é essencial uma vez que selecionou {{identifier}} como um identificador obrigatório.', }, advanced_options: { - /** UNTRANSLATED */ - title: 'ADVANCED OPTIONS', - /** UNTRANSLATED */ - enable_user_registration: 'Enable user registration', - /** UNTRANSLATED */ + title: 'OPÇÕES AVANÇADAS', + enable_user_registration: 'Ativar registo de utilizadores', enable_user_registration_description: - 'Enable or disallow user registration. Once disabled, users can still be added in the admin console but users can no longer establish accounts through the sign-in UI.', + 'Ativar ou desativar o registo de utilizadores. Uma vez desativado, os utilizadores ainda podem ser adicionados na consola de administração, mas os utilizadores não podem mais estabelecer contas através da interface de início de sessão.', }, }; diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/upsell.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/upsell.ts deleted file mode 100644 index 5ccdb6bb5..000000000 --- a/packages/phrases/src/locales/pt-pt/translation/admin-console/upsell.ts +++ /dev/null @@ -1,87 +0,0 @@ -const upsell = { - pro_tag: 'PRO', - upgrade_plan: 'Atualizar plano', - compare_plans: 'Comparar planos', - get_started: { - title: 'Inicie a sua jornada de identidade perfeita com um plano gratuito!', - description: - 'O plano gratuito é perfeito para experimentar o Logto nos seus projetos pessoais ou testes. Para aproveitar ao máximo as capacidades do Logto para a sua equipa, faça a atualização para obter acesso ilimitado às funcionalidades premium: utilização ilimitada de MAU, integração máquina a máquina, gestão RBAC, registos de auditoria a longo prazo, etc. Ver todos os planos', - }, - create_tenant: { - title: 'Selecione o seu plano de inquilino', - description: - 'O Logto oferece opções competitivas de planos com preços inovadores e acessíveis, especialmente concebidos para empresas em crescimento. Saiba mais', - base_price: 'Preço base', - monthly_price: '{{value, number}}/mês', - mau_unit_price: 'Preço unitário do MAU', - view_all_features: 'Ver todas as funcionalidades', - select_plan: 'Selecionar ', - free_tenants_limit: 'Até {{count, number}} inquilino gratuito', - free_tenants_limit_other: 'Até {{count, number}} inquilinos gratuitos', - most_popular: 'Mais popular', - upgrade_success: 'Atualização para bem-sucedida', - }, - paywall: { - applications: - 'Limite de {{count, number}} aplicação do atingido. Atualize o plano para atender às necessidades da sua equipe. Para obter qualquer ajuda, sinta-se à vontade para entrar em contato conosco.', - applications_other: - 'Limite de {{count, number}} aplicações do atingido. Atualize o plano para atender às necessidades da sua equipe. Para obter qualquer ajuda, sinta-se à vontade para entrar em contato conosco.', - machine_to_machine_feature: - 'Atualize para um plano pago para criar aplicação de máquina a máquina, juntamente com acesso a todos os recursos premium. Para qualquer assistência, fique à vontade para entrar em contato conosco.', - machine_to_machine: - 'Limite de {{count, number}} aplicação de máquina a máquina do atingido. Atualize o plano para atender às necessidades da sua equipe. Para obter qualquer ajuda, sinta-se à vontade para entrar em contato conosco.', - machine_to_machine_other: - 'Limite de {{count, number}} aplicações de máquina a máquina do atingido. Atualize o plano para atender às necessidades da sua equipe. Para obter qualquer ajuda, sinta-se à vontade para entrar em contato conosco.', - resources: - 'Atingiu o limite de {{count, number}} recursos de API de . Atualize o plano para satisfazer as necessidades da sua equipa. Contacte-nos se precisar de assistência.', - resources_other: - 'Atingiu o limite de {{count, number}} recursos de API de . Atualize o plano para satisfazer as necessidades da sua equipa. Contacte-nos se precisar de assistência.', - scopes_per_resource: - 'Atingiu o limite de {{count, number}} permissões por recurso de API de . Atualize agora para expandir. Contacte-nos se precisar de assistência.', - scopes_per_resource_other: - 'Atingiu o limite de {{count, number}} permissões por recurso de API de . Atualize agora para expandir. Contacte-nos se precisar de assistência.', - custom_domain: - 'Desbloqueie a funcionalidade de domínio personalizado e uma série de benefícios premium ao atualizar para um plano pago. Não hesite em Contacte-nos se precisar de ajuda.', - social_connectors: - 'Atingiu o limite de {{count, number}} conectores sociais de . Atualize o plano para obter conectores sociais adicionais e a capacidade de criar os seus próprios conectores usando os protocolos OIDC, OAuth 2.0 e SAML. Não hesite em Contacte-nos se precisar de ajuda.', - social_connectors_other: - 'Atingiu o limite de {{count, number}} conectores sociais de . Atualize o plano para obter conectores sociais adicionais e a capacidade de criar os seus próprios conectores usando os protocolos OIDC, OAuth 2.0 e SAML. Não hesite em Contacte-nos se precisar de ajuda.', - standard_connectors_feature: - 'Atualize para um plano pago para criar os seus próprios conectores usando os protocolos OIDC, OAuth 2.0 e SAML, além de obter conectores sociais ilimitados e todas as funcionalidades premium. Não hesite em Contacte-nos se precisar de ajuda.', - standard_connectors: - 'Atingiu o limite de {{count, number}} conectores sociais de . Atualize o plano para obter conectores sociais adicionais e a capacidade de criar os seus próprios conectores usando os protocolos OIDC, OAuth 2.0 e SAML. Não hesite em Contacte-nos se precisar de ajuda.', - standard_connectors_other: - 'Atingiu o limite de {{count, number}} conectores sociais de . Atualize o plano para obter conectores sociais adicionais e a capacidade de criar os seus próprios conectores usando os protocolos OIDC, OAuth 2.0 e SAML. Não hesite em Contacte-nos se precisar de ajuda.', - standard_connectors_pro: - 'Atingiu o limite de {{count, number}} conectores padrão de . Atualize para o plano Empresarial para obter conectores sociais adicionais e a capacidade de criar os seus próprios conectores usando os protocolos OIDC, OAuth 2.0 e SAML. Não hesite em Contacte-nos se precisar de ajuda.', - standard_connectors_pro_other: - 'Atingiu o limite de {{count, number}} conectores padrão de . Atualize para o plano Empresarial para obter conectores sociais adicionais e a capacidade de criar os seus próprios conectores usando os protocolos OIDC, OAuth 2.0 e SAML. Não hesite em Contacte-nos se precisar de ajuda.', - roles: - 'Atingiu o limite de {{count, number}} funções de . Atualize o plano para adicionar funções e permissões adicionais. Não hesite em Contacte-nos se precisar de ajuda.', - roles_other: - 'Atingiu o limite de {{count, number}} funções de . Atualize o plano para adicionar funções e permissões adicionais. Não hesite em Contacte-nos se precisar de ajuda.', - scopes_per_role: - 'Atingiu o limite de {{count, number}} permissões por função de . Atualize o plano para adicionar funções e permissões adicionais. Não hesite em Contacte-nos se precisar de ajuda.', - scopes_per_role_other: - 'Atingiu o limite de {{count, number}} permissões por função de . Atualize o plano para adicionar funções e permissões adicionais. Não hesite em Contacte-nos se precisar de ajuda.', - hooks: - 'Atingiu o limite de {{count, number}} webhooks de . Atualize o plano para criar mais webhooks. Não hesite em Contacte-nos se precisar de ajuda.', - hooks_other: - 'Atingiu o limite de {{count, number}} webhooks de . Atualize o plano para criar mais webhooks. Não hesite em Contacte-nos se precisar de ajuda.', - }, - mau_exceeded_modal: { - title: 'MAU excedeu o limite. Atualize o seu plano.', - notification: - 'O seu MAU atual excedeu o limite de . Por favor, atualize para o plano premium a tempo para evitar a suspensão do serviço do Logto.', - update_plan: 'Atualizar plano', - }, - payment_overdue_modal: { - title: 'Pagamento da fatura em atraso', - notification: - 'Oops! O pagamento da fatura do inquilino {{name}} falhou. Por favor, pague a fatura prontamente para evitar a suspensão do serviço Logto.', - unpaid_bills: 'Faturas não pagas', - update_payment: 'Atualizar pagamento', - }, -}; - -export default Object.freeze(upsell); diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/upsell/index.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/upsell/index.ts new file mode 100644 index 000000000..68c24da82 --- /dev/null +++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/upsell/index.ts @@ -0,0 +1,42 @@ +import paywall from './paywall.js'; + +const upsell = { + pro_tag: 'PRO', + upgrade_plan: 'Atualizar plano', + compare_plans: 'Comparar planos', + get_started: { + title: 'Inicie a sua jornada de identidade perfeita com um plano gratuito!', + description: + 'O plano gratuito é perfeito para experimentar o Logto nos seus projetos pessoais ou testes. Para aproveitar ao máximo as capacidades do Logto para a sua equipa, faça a atualização para obter acesso ilimitado às funcionalidades premium: utilização ilimitada de MAU, integração máquina a máquina, gestão RBAC, registos de auditoria a longo prazo, etc. Ver todos os planos', + }, + create_tenant: { + title: 'Selecione o seu plano de inquilino', + description: + 'O Logto oferece opções competitivas de planos com preços inovadores e acessíveis, especialmente concebidos para empresas em crescimento. Saiba mais', + base_price: 'Preço base', + monthly_price: '{{value, number}}/mês', + mau_unit_price: 'Preço unitário do MAU', + view_all_features: 'Ver todas as funcionalidades', + select_plan: 'Selecionar ', + free_tenants_limit: 'Até {{count, number}} inquilino gratuito', + free_tenants_limit_other: 'Até {{count, number}} inquilinos gratuitos', + most_popular: 'Mais popular', + upgrade_success: 'Atualização para bem-sucedida', + }, + mau_exceeded_modal: { + title: 'MAU excedeu o limite. Atualize o seu plano.', + notification: + 'O seu MAU atual excedeu o limite de . Por favor, atualize para o plano premium a tempo para evitar a suspensão do serviço do Logto.', + update_plan: 'Atualizar plano', + }, + payment_overdue_modal: { + title: 'Pagamento da fatura em atraso', + notification: + 'Oops! O pagamento da fatura do inquilino {{name}} falhou. Por favor, pague a fatura prontamente para evitar a suspensão do serviço Logto.', + unpaid_bills: 'Faturas não pagas', + update_payment: 'Atualizar pagamento', + }, + paywall, +}; + +export default Object.freeze(upsell); diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/upsell/paywall.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/upsell/paywall.ts new file mode 100644 index 000000000..fb9da83c1 --- /dev/null +++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/upsell/paywall.ts @@ -0,0 +1,50 @@ +const paywall = { + applications: + 'Limite de {{count, number}} aplicação do atingido. Atualize o plano para atender às necessidades da sua equipe. Para obter qualquer ajuda, sinta-se à vontade para entrar em contato conosco.', + applications_other: + 'Limite de {{count, number}} aplicações do atingido. Atualize o plano para atender às necessidades da sua equipe. Para obter qualquer ajuda, sinta-se à vontade para entrar em contato conosco.', + machine_to_machine_feature: + 'Atualize para um plano pago para criar aplicação de máquina a máquina, juntamente com acesso a todos os recursos premium. Para qualquer assistência, fique à vontade para entrar em contato conosco.', + machine_to_machine: + 'Limite de {{count, number}} aplicação de máquina a máquina do atingido. Atualize o plano para atender às necessidades da sua equipe. Para obter qualquer ajuda, sinta-se à vontade para entrar em contato conosco.', + machine_to_machine_other: + 'Limite de {{count, number}} aplicações de máquina a máquina do atingido. Atualize o plano para atender às necessidades da sua equipe. Para obter qualquer ajuda, sinta-se à vontade para entrar em contato conosco.', + resources: + 'Atingiu o limite de {{count, number}} recursos de API de . Atualize o plano para satisfazer as necessidades da sua equipa. Contacte-nos se precisar de assistência.', + resources_other: + 'Atingiu o limite de {{count, number}} recursos de API de . Atualize o plano para satisfazer as necessidades da sua equipa. Contacte-nos se precisar de assistência.', + scopes_per_resource: + 'Atingiu o limite de {{count, number}} permissões por recurso de API de . Atualize agora para expandir. Contacte-nos se precisar de assistência.', + scopes_per_resource_other: + 'Atingiu o limite de {{count, number}} permissões por recurso de API de . Atualize agora para expandir. Contacte-nos se precisar de assistência.', + custom_domain: + 'Desbloqueie a funcionalidade de domínio personalizado e uma série de benefícios premium ao atualizar para um plano pago. Não hesite em Contacte-nos se precisar de ajuda.', + social_connectors: + 'Atingiu o limite de {{count, number}} conectores sociais de . Atualize o plano para obter conectores sociais adicionais e a capacidade de criar os seus próprios conectores usando os protocolos OIDC, OAuth 2.0 e SAML. Não hesite em Contacte-nos se precisar de ajuda.', + social_connectors_other: + 'Atingiu o limite de {{count, number}} conectores sociais de . Atualize o plano para obter conectores sociais adicionais e a capacidade de criar os seus próprios conectores usando os protocolos OIDC, OAuth 2.0 e SAML. Não hesite em Contacte-nos se precisar de ajuda.', + standard_connectors_feature: + 'Atualize para um plano pago para criar os seus próprios conectores usando os protocolos OIDC, OAuth 2.0 e SAML, além de obter conectores sociais ilimitados e todas as funcionalidades premium. Não hesite em Contacte-nos se precisar de ajuda.', + standard_connectors: + 'Atingiu o limite de {{count, number}} conectores sociais de . Atualize o plano para obter conectores sociais adicionais e a capacidade de criar os seus próprios conectores usando os protocolos OIDC, OAuth 2.0 e SAML. Não hesite em Contacte-nos se precisar de ajuda.', + standard_connectors_other: + 'Atingiu o limite de {{count, number}} conectores sociais de . Atualize o plano para obter conectores sociais adicionais e a capacidade de criar os seus próprios conectores usando os protocolos OIDC, OAuth 2.0 e SAML. Não hesite em Contacte-nos se precisar de ajuda.', + standard_connectors_pro: + 'Atingiu o limite de {{count, number}} conectores padrão de . Atualize para o plano Empresarial para obter conectores sociais adicionais e a capacidade de criar os seus próprios conectores usando os protocolos OIDC, OAuth 2.0 e SAML. Não hesite em Contacte-nos se precisar de ajuda.', + standard_connectors_pro_other: + 'Atingiu o limite de {{count, number}} conectores padrão de . Atualize para o plano Empresarial para obter conectores sociais adicionais e a capacidade de criar os seus próprios conectores usando os protocolos OIDC, OAuth 2.0 e SAML. Não hesite em Contacte-nos se precisar de ajuda.', + roles: + 'Atingiu o limite de {{count, number}} funções de . Atualize o plano para adicionar funções e permissões adicionais. Não hesite em Contacte-nos se precisar de ajuda.', + roles_other: + 'Atingiu o limite de {{count, number}} funções de . Atualize o plano para adicionar funções e permissões adicionais. Não hesite em Contacte-nos se precisar de ajuda.', + scopes_per_role: + 'Atingiu o limite de {{count, number}} permissões por função de . Atualize o plano para adicionar funções e permissões adicionais. Não hesite em Contacte-nos se precisar de ajuda.', + scopes_per_role_other: + 'Atingiu o limite de {{count, number}} permissões por função de . Atualize o plano para adicionar funções e permissões adicionais. Não hesite em Contacte-nos se precisar de ajuda.', + hooks: + 'Atingiu o limite de {{count, number}} webhooks de . Atualize o plano para criar mais webhooks. Não hesite em Contacte-nos se precisar de ajuda.', + hooks_other: + 'Atingiu o limite de {{count, number}} webhooks de . Atualize o plano para criar mais webhooks. Não hesite em Contacte-nos se precisar de ajuda.', +}; + +export default Object.freeze(paywall); diff --git a/packages/phrases/src/locales/ru/errors/password.ts b/packages/phrases/src/locales/ru/errors/password.ts index 6230d7599..328a94fb0 100644 --- a/packages/phrases/src/locales/ru/errors/password.ts +++ b/packages/phrases/src/locales/ru/errors/password.ts @@ -1,8 +1,7 @@ const password = { unsupported_encryption_method: 'Метод шифрования {{name}} не поддерживается.', pepper_not_found: 'Не найден пепер пароля. Пожалуйста, проверьте ваши основные envs.', - /** UNTRANSLATED */ - rejected: 'Password rejected. Please check if your password meets the requirements.', + rejected: 'Пароль отклонен. Пожалуйста, проверьте, соответствует ли ваш пароль требованиям.', }; export default Object.freeze(password); diff --git a/packages/phrases/src/locales/ru/errors/sign-in-experiences.ts b/packages/phrases/src/locales/ru/errors/sign-in-experiences.ts index 4db169627..76a1e75ef 100644 --- a/packages/phrases/src/locales/ru/errors/sign-in-experiences.ts +++ b/packages/phrases/src/locales/ru/errors/sign-in-experiences.ts @@ -18,10 +18,8 @@ const sign_in_experiences = { 'Вход в систему по коду проверки должен быть включен, когда для создания учетной записи не требуется установка пароля.', unsupported_default_language: 'Этот язык - {{language}} не поддерживается в данный момент.', at_least_one_authentication_factor: 'Вы должны выбрать как минимум один фактор аутентификации.', - /** UNTRANSLATED */ - backup_code_cannot_be_enabled_alone: 'Backup code cannot be enabled alone.', - /** UNTRANSLATED */ - duplicated_mfa_factors: 'Duplicated MFA factors.', + backup_code_cannot_be_enabled_alone: 'Резервный код не может быть включен самостоятельно.', + duplicated_mfa_factors: 'Факторы MFA не должны повторяться.', }; export default Object.freeze(sign_in_experiences); diff --git a/packages/phrases/src/locales/ru/translation/admin-console/index.ts b/packages/phrases/src/locales/ru/translation/admin-console/index.ts index ce054104a..25140aeb9 100644 --- a/packages/phrases/src/locales/ru/translation/admin-console/index.ts +++ b/packages/phrases/src/locales/ru/translation/admin-console/index.ts @@ -28,7 +28,7 @@ import tab_sections from './tab-sections.js'; import tabs from './tabs.js'; import tenants from './tenants.js'; import topbar from './topbar.js'; -import upsell from './upsell.js'; +import upsell from './upsell/index.js'; import user_details from './user-details.js'; import users from './users.js'; import webhook_details from './webhook-details.js'; diff --git a/packages/phrases/src/locales/ru/translation/admin-console/sign-in-exp/index.ts b/packages/phrases/src/locales/ru/translation/admin-console/sign-in-exp/index.ts index 857ecc76d..ceabe82c8 100644 --- a/packages/phrases/src/locales/ru/translation/admin-console/sign-in-exp/index.ts +++ b/packages/phrases/src/locales/ru/translation/admin-console/sign-in-exp/index.ts @@ -11,8 +11,7 @@ const sign_in_exp = { branding: 'Брендирование', sign_up_and_sign_in: 'Регистрация и вход в систему', content: 'Содержание', - /** UNTRANSLATED */ - password_policy: 'Password policy', + password_policy: 'Политика пароля', }, welcome: { title: 'Настройка входа в систему', diff --git a/packages/phrases/src/locales/ru/translation/admin-console/sign-in-exp/password-policy.ts b/packages/phrases/src/locales/ru/translation/admin-console/sign-in-exp/password-policy.ts index f54c9f77b..153e1c26c 100644 --- a/packages/phrases/src/locales/ru/translation/admin-console/sign-in-exp/password-policy.ts +++ b/packages/phrases/src/locales/ru/translation/admin-console/sign-in-exp/password-policy.ts @@ -1,45 +1,28 @@ const password_policy = { - /** UNTRANSLATED */ - password_requirements: 'Password requirements', - /** UNTRANSLATED */ - minimum_length: 'Minimum length', - /** UNTRANSLATED */ - minimum_length_description: 'NIST suggests using at least 8 characters for web products.', - /** UNTRANSLATED */ - minimum_length_error: 'Minimum length must be between {{min}} and {{max}} (inclusive).', - /** UNTRANSLATED */ - minimum_required_char_types: 'Minimum required character types', - /** UNTRANSLATED */ + password_requirements: 'Требования к паролю', + minimum_length: 'Минимальная длина', + minimum_length_description: + 'NIST предлагает использовать не менее 8 символов для веб-продуктов.', + minimum_length_error: 'Минимальная длина должна быть от {{min}} до {{max}} (включительно).', + minimum_required_char_types: 'Минимальное количество типов символов', minimum_required_char_types_description: - 'Character types: uppercase (A-Z), lowercase (a-z), numbers (0-9), and special symbols ({{symbols}}).', - /** UNTRANSLATED */ - password_rejection: 'Password rejection', - /** UNTRANSLATED */ - compromised_passwords: 'Reject compromised password', - /** UNTRANSLATED */ - breached_passwords: 'Breached passwords', - /** UNTRANSLATED */ - breached_passwords_description: 'Reject passwords previously found in breach databases.', - /** UNTRANSLATED */ - restricted_phrases: 'Restrict low-security phrases', - /** UNTRANSLATED */ + 'Типы символов: прописные (A-Z), строчные (a-z), цифры (0-9) и специальные символы ({{symbols}}).', + password_rejection: 'Отклонение пароля', + compromised_passwords: 'Отклонить скомпрометированный пароль', + breached_passwords: 'Сломанные пароли', + breached_passwords_description: 'Отвергнуть пароли, найденные ранее в базах данных нарушений.', + restricted_phrases: 'Ограничение низкобезопасных фраз', restricted_phrases_tooltip: - 'Users cannot use passwords that are exactly the same as or made up of the listed phrases below. The addition of 3 or more non-consecutive characters is allowed to increase password complexity.', - /** UNTRANSLATED */ - repetitive_or_sequential_characters: 'Repetitive or sequential characters', - /** UNTRANSLATED */ - repetitive_or_sequential_characters_description: 'E.g., "AAAA", "1234", and "abcd".', - /** UNTRANSLATED */ - user_information: 'User information', - /** UNTRANSLATED */ - user_information_description: 'E.g., email address, phone number, username, etc.', - /** UNTRANSLATED */ - custom_words: 'Custom words', - /** UNTRANSLATED */ + 'Ваш пароль должен избегать эти фразы, если не сопровождаются еще 3 или более символами.', + repetitive_or_sequential_characters: 'Повторяющиеся или последовательные символы', + repetitive_or_sequential_characters_description: 'Например, "AAAA", "1234" и "abcd".', + user_information: 'Информация пользователя', + user_information_description: + 'Например, адрес электронной почты, номер телефона, имя пользователя и т.д.', + custom_words: 'Пользовательские слова', custom_words_description: - 'Personalize context-specific words, case-insensitive, and one per line.', - /** UNTRANSLATED */ - custom_words_placeholder: 'Your service name, company name, etc.', + 'Персонализируйте слова, специфичные для контекста, без учета регистра, одно на строку.', + custom_words_placeholder: 'Имя вашей службы, название компании и т. д.', }; export default Object.freeze(password_policy); diff --git a/packages/phrases/src/locales/ru/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts b/packages/phrases/src/locales/ru/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts index 213d32397..4d2b54050 100644 --- a/packages/phrases/src/locales/ru/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts +++ b/packages/phrases/src/locales/ru/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts @@ -54,13 +54,10 @@ const sign_up_and_sign_in = { 'Это необходимо, так как вы выбрали {{identifier}} в качестве обязательного идентификатора.', }, advanced_options: { - /** UNTRANSLATED */ - title: 'ADVANCED OPTIONS', - /** UNTRANSLATED */ - enable_user_registration: 'Enable user registration', - /** UNTRANSLATED */ + title: 'ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ', + enable_user_registration: 'Включить регистрацию пользователей', enable_user_registration_description: - 'Enable or disallow user registration. Once disabled, users can still be added in the admin console but users can no longer establish accounts through the sign-in UI.', + 'Включить или запретить регистрацию пользователей. После отключения пользователи все еще могут быть добавлены через консоль администратора, но пользователи больше не могут создавать учетные записи через пользовательский интерфейс регистрации.', }, }; diff --git a/packages/phrases/src/locales/ru/translation/admin-console/upsell.ts b/packages/phrases/src/locales/ru/translation/admin-console/upsell.ts deleted file mode 100644 index 847a0d5fe..000000000 --- a/packages/phrases/src/locales/ru/translation/admin-console/upsell.ts +++ /dev/null @@ -1,87 +0,0 @@ -const upsell = { - pro_tag: 'PRO', - upgrade_plan: 'Повысить план', - compare_plans: 'Сравнить планы', - get_started: { - title: 'Начните беспрепятственное путешествие по идентификации с бесплатным планом!', - description: - 'Бесплатный план отлично подходит для опробования Logto в ваших собственных проектах или испытаниях. Чтобы полностью использовать возможности Logto для вашей команды, выполните обновление, чтобы получить неограниченный доступ к премиум-функциям: неограниченное использование MAU, интеграция Машина-к-Машине, управление RBAC, долгосрочные журналы аудита и т.д. Посмотреть все планы', - }, - create_tenant: { - title: 'Выберите план арендатора', - description: - 'Logto предоставляет конкурентные варианты планов с инновационной и доступной ценой, специально разработанными для растущих компаний. Узнать больше', - base_price: 'Базовая цена', - monthly_price: '{{value, number}}/мес.', - mau_unit_price: 'Стоимость единицы MAU', - view_all_features: 'Просмотреть все функции', - select_plan: 'Выбрать ', - free_tenants_limit: 'До {{count, number}} бесплатного арендатора', - free_tenants_limit_other: 'До {{count, number}} бесплатных арендаторов', - most_popular: 'Самый популярный', - upgrade_success: 'Успешно повышен до ', - }, - paywall: { - applications: - 'Достигнут лимит {{count, number}} приложения(й) для . Обновите план, чтобы удовлетворить потребности вашей команды. При необходимости помощи, не стесняйтесь связаться с нами.', - applications_other: - 'Достигнут лимит {{count, number}} приложений для . Обновите план, чтобы удовлетворить потребности вашей команды. При необходимости помощи, не стесняйтесь связаться с нами.', - machine_to_machine_feature: - 'Перейдите на платный план, чтобы создать машинное приложение и получить доступ ко всем премиум-функциям. При необходимости помощи, не стесняйтесь связаться с нами.', - machine_to_machine: - 'Достигнут лимит {{count, number}} машинных приложений для . Обновите план, чтобы удовлетворить потребности вашей команды. При необходимости помощи, не стесняйтесь связаться с нами.', - machine_to_machine_other: - 'Достигнут лимит {{count, number}} машинных приложений для . Обновите план, чтобы удовлетворить потребности вашей команды. При необходимости помощи, не стесняйтесь связаться с нами.', - resources: - 'Достигнут лимит {{count, number}} ресурсов API в плане . Повысьте план, чтобы удовлетворить потребности вашей команды. Свяжитесь с нами для получения помощи.', - resources_other: - 'Достигнут лимит {{count, number}} ресурсов API в плане . Повысьте план, чтобы удовлетворить потребности вашей команды. Свяжитесь с нами для получения помощи.', - scopes_per_resource: - 'Достигнут лимит {{count, number}} разрешений на ресурс API в плане . Повысьте план, чтобы увеличить количество разрешений. Свяжитесь с нами для получения помощи.', - scopes_per_resource_other: - 'Достигнут лимит {{count, number}} разрешений на ресурс API в плане . Повысьте план, чтобы увеличить количество разрешений. Свяжитесь с нами для получения помощи.', - custom_domain: - 'Разблокируйте функциональность настраиваемого домена и ряд премиум-преимуществ, повысив до платного плана. Если вам нужна помощь, не стесняйтесь связаться с нами.', - social_connectors: - 'Достигнут лимит {{count, number}} социальных коннекторов в плане . Для удовлетворения потребностей вашей команды повысьте план, чтобы получить дополнительные социальные коннекторы и возможность создания собственных коннекторов с использованием протоколов OIDC, OAuth 2.0 и SAML. Если вам нужна помощь, не стесняйтесь связаться с нами.', - social_connectors_other: - 'Достигнут лимит {{count, number}} социальных коннекторов в плане . Для удовлетворения потребностей вашей команды повысьте план, чтобы получить дополнительные социальные коннекторы и возможность создания собственных коннекторов с использованием протоколов OIDC, OAuth 2.0 и SAML. Если вам нужна помощь, не стесняйтесь связаться с нами.', - standard_connectors_feature: - 'Повысьте до платного плана, чтобы создавать свои собственные коннекторы с использованием протоколов OIDC, OAuth 2.0 и SAML, а также получить неограниченное количество социальных коннекторов и все премиум-функции. Если вам нужна помощь, не стесняйтесь связаться с нами.', - standard_connectors: - 'Достигнут лимит {{count, number}} социальных коннекторов в плане . Для удовлетворения потребностей вашей команды повысьте план, чтобы получить дополнительные социальные коннекторы и возможность создания собственных коннекторов с использованием протоколов OIDC, OAuth 2.0 и SAML. Если вам нужна помощь, не стесняйтесь связаться с нами.', - standard_connectors_other: - 'Достигнут лимит {{count, number}} социальных коннекторов в плане . Для удовлетворения потребностей вашей команды повысьте план, чтобы получить дополнительные социальные коннекторы и возможность создания собственных коннекторов с использованием протоколов OIDC, OAuth 2.0 и SAML. Если вам нужна помощь, не стесняйтесь связаться с нами.', - standard_connectors_pro: - 'Достигнут лимит {{count, number}} стандартных коннекторов в плане . Для удовлетворения потребностей вашей команды повысьте план до Плана предприятия, чтобы получить дополнительные социальные коннекторы и возможность создания собственных коннекторов с использованием протоколов OIDC, OAuth 2.0 и SAML. Если вам нужна помощь, не стесняйтесь связаться с нами.', - standard_connectors_pro_other: - 'Достигнут лимит {{count, number}} стандартных коннекторов в плане . Для удовлетворения потребностей вашей команды повысьте план до Плана предприятия, чтобы получить дополнительные социальные коннекторы и возможность создания собственных коннекторов с использованием протоколов OIDC, OAuth 2.0 и SAML. Если вам нужна помощь, не стесняйтесь связаться с нами.', - roles: - 'Достигнут лимит {{count, number}} ролей в плане . Повысьте план, чтобы добавить дополнительные роли и разрешения. Если вам нужна помощь, не стесняйтесь связаться с нами.', - roles_other: - 'Достигнут лимит {{count, number}} ролей в плане . Повысьте план, чтобы добавить дополнительные роли и разрешения. Если вам нужна помощь, не стесняйтесь связаться с нами.', - scopes_per_role: - 'Достигнут лимит {{count, number}} разрешений на роль в плане . Повысьте план, чтобы добавить дополнительные роли и разрешения. Если вам нужна помощь, не стесняйтесь связаться с нами.', - scopes_per_role_other: - 'Достигнут лимит {{count, number}} разрешений на роль в плане . Повысьте план, чтобы добавить дополнительные роли и разрешения. Если вам нужна помощь, не стесняйтесь связаться с нами.', - hooks: - 'Достигнут лимит {{count, number}} вебхуков в плане . Повысьте план, чтобы создать больше вебхуков. Если вам нужна помощь, не стесняйтесь связаться с нами.', - hooks_other: - 'Достигнут лимит {{count, number}} вебхуков в плане . Повысьте план, чтобы создать больше вебхуков. Если вам нужна помощь, не стесняйтесь связаться с нами.', - }, - mau_exceeded_modal: { - title: 'Превышено количество активных пользователей (MAU). Повысьте свой план.', - notification: - 'Текущее количество активных пользователей (MAU) превысило лимит в плане . Пожалуйста, незамедлительно обновите свой план до премиум-версии, чтобы избежать приостановки сервиса Logto.', - update_plan: 'Обновить план', - }, - payment_overdue_modal: { - title: 'Просрочен платеж за счет', - notification: - 'Упс! Оплата счета арендатора {{name}} не удалась. Пожалуйста, оплатите счет немедленно, чтобы избежать приостановки сервиса Logto.', - unpaid_bills: 'Неоплаченные счета', - update_payment: 'Обновить платеж', - }, -}; - -export default Object.freeze(upsell); diff --git a/packages/phrases/src/locales/ru/translation/admin-console/upsell/index.ts b/packages/phrases/src/locales/ru/translation/admin-console/upsell/index.ts new file mode 100644 index 000000000..0f860a6ce --- /dev/null +++ b/packages/phrases/src/locales/ru/translation/admin-console/upsell/index.ts @@ -0,0 +1,42 @@ +import paywall from './paywall.js'; + +const upsell = { + pro_tag: 'PRO', + upgrade_plan: 'Повысить план', + compare_plans: 'Сравнить планы', + get_started: { + title: 'Начните беспрепятственное путешествие по идентификации с бесплатным планом!', + description: + 'Бесплатный план отлично подходит для опробования Logto в ваших собственных проектах или испытаниях. Чтобы полностью использовать возможности Logto для вашей команды, выполните обновление, чтобы получить неограниченный доступ к премиум-функциям: неограниченное использование MAU, интеграция Машина-к-Машине, управление RBAC, долгосрочные журналы аудита и т.д. Посмотреть все планы', + }, + create_tenant: { + title: 'Выберите план арендатора', + description: + 'Logto предоставляет конкурентные варианты планов с инновационной и доступной ценой, специально разработанными для растущих компаний. Узнать больше', + base_price: 'Базовая цена', + monthly_price: '{{value, number}}/мес.', + mau_unit_price: 'Стоимость единицы MAU', + view_all_features: 'Просмотреть все функции', + select_plan: 'Выбрать ', + free_tenants_limit: 'До {{count, number}} бесплатного арендатора', + free_tenants_limit_other: 'До {{count, number}} бесплатных арендаторов', + most_popular: 'Самый популярный', + upgrade_success: 'Успешно повышен до ', + }, + mau_exceeded_modal: { + title: 'Превышено количество активных пользователей (MAU). Повысьте свой план.', + notification: + 'Текущее количество активных пользователей (MAU) превысило лимит в плане . Пожалуйста, незамедлительно обновите свой план до премиум-версии, чтобы избежать приостановки сервиса Logto.', + update_plan: 'Обновить план', + }, + payment_overdue_modal: { + title: 'Просрочен платеж за счет', + notification: + 'Упс! Оплата счета арендатора {{name}} не удалась. Пожалуйста, оплатите счет немедленно, чтобы избежать приостановки сервиса Logto.', + unpaid_bills: 'Неоплаченные счета', + update_payment: 'Обновить платеж', + }, + paywall, +}; + +export default Object.freeze(upsell); diff --git a/packages/phrases/src/locales/ru/translation/admin-console/upsell/paywall.ts b/packages/phrases/src/locales/ru/translation/admin-console/upsell/paywall.ts new file mode 100644 index 000000000..f10bf4ac9 --- /dev/null +++ b/packages/phrases/src/locales/ru/translation/admin-console/upsell/paywall.ts @@ -0,0 +1,50 @@ +const paywall = { + applications: + 'Достигнут лимит {{count, number}} приложения(й) для . Обновите план, чтобы удовлетворить потребности вашей команды. При необходимости помощи, не стесняйтесь связаться с нами.', + applications_other: + 'Достигнут лимит {{count, number}} приложений для . Обновите план, чтобы удовлетворить потребности вашей команды. При необходимости помощи, не стесняйтесь связаться с нами.', + machine_to_machine_feature: + 'Перейдите на платный план, чтобы создать машинное приложение и получить доступ ко всем премиум-функциям. При необходимости помощи, не стесняйтесь связаться с нами.', + machine_to_machine: + 'Достигнут лимит {{count, number}} машинных приложений для . Обновите план, чтобы удовлетворить потребности вашей команды. При необходимости помощи, не стесняйтесь связаться с нами.', + machine_to_machine_other: + 'Достигнут лимит {{count, number}} машинных приложений для . Обновите план, чтобы удовлетворить потребности вашей команды. При необходимости помощи, не стесняйтесь связаться с нами.', + resources: + 'Достигнут лимит {{count, number}} ресурсов API в плане . Повысьте план, чтобы удовлетворить потребности вашей команды. Свяжитесь с нами для получения помощи.', + resources_other: + 'Достигнут лимит {{count, number}} ресурсов API в плане . Повысьте план, чтобы удовлетворить потребности вашей команды. Свяжитесь с нами для получения помощи.', + scopes_per_resource: + 'Достигнут лимит {{count, number}} разрешений на ресурс API в плане . Повысьте план, чтобы увеличить количество разрешений. Свяжитесь с нами для получения помощи.', + scopes_per_resource_other: + 'Достигнут лимит {{count, number}} разрешений на ресурс API в плане . Повысьте план, чтобы увеличить количество разрешений. Свяжитесь с нами для получения помощи.', + custom_domain: + 'Разблокируйте функциональность настраиваемого домена и ряд премиум-преимуществ, повысив до платного плана. Если вам нужна помощь, не стесняйтесь связаться с нами.', + social_connectors: + 'Достигнут лимит {{count, number}} социальных коннекторов в плане . Для удовлетворения потребностей вашей команды повысьте план, чтобы получить дополнительные социальные коннекторы и возможность создания собственных коннекторов с использованием протоколов OIDC, OAuth 2.0 и SAML. Если вам нужна помощь, не стесняйтесь связаться с нами.', + social_connectors_other: + 'Достигнут лимит {{count, number}} социальных коннекторов в плане . Для удовлетворения потребностей вашей команды повысьте план, чтобы получить дополнительные социальные коннекторы и возможность создания собственных коннекторов с использованием протоколов OIDC, OAuth 2.0 и SAML. Если вам нужна помощь, не стесняйтесь связаться с нами.', + standard_connectors_feature: + 'Повысьте до платного плана, чтобы создавать свои собственные коннекторы с использованием протоколов OIDC, OAuth 2.0 и SAML, а также получить неограниченное количество социальных коннекторов и все премиум-функции. Если вам нужна помощь, не стесняйтесь связаться с нами.', + standard_connectors: + 'Достигнут лимит {{count, number}} социальных коннекторов в плане . Для удовлетворения потребностей вашей команды повысьте план, чтобы получить дополнительные социальные коннекторы и возможность создания собственных коннекторов с использованием протоколов OIDC, OAuth 2.0 и SAML. Если вам нужна помощь, не стесняйтесь связаться с нами.', + standard_connectors_other: + 'Достигнут лимит {{count, number}} социальных коннекторов в плане . Для удовлетворения потребностей вашей команды повысьте план, чтобы получить дополнительные социальные коннекторы и возможность создания собственных коннекторов с использованием протоколов OIDC, OAuth 2.0 и SAML. Если вам нужна помощь, не стесняйтесь связаться с нами.', + standard_connectors_pro: + 'Достигнут лимит {{count, number}} стандартных коннекторов в плане . Для удовлетворения потребностей вашей команды повысьте план до Плана предприятия, чтобы получить дополнительные социальные коннекторы и возможность создания собственных коннекторов с использованием протоколов OIDC, OAuth 2.0 и SAML. Если вам нужна помощь, не стесняйтесь связаться с нами.', + standard_connectors_pro_other: + 'Достигнут лимит {{count, number}} стандартных коннекторов в плане . Для удовлетворения потребностей вашей команды повысьте план до Плана предприятия, чтобы получить дополнительные социальные коннекторы и возможность создания собственных коннекторов с использованием протоколов OIDC, OAuth 2.0 и SAML. Если вам нужна помощь, не стесняйтесь связаться с нами.', + roles: + 'Достигнут лимит {{count, number}} ролей в плане . Повысьте план, чтобы добавить дополнительные роли и разрешения. Если вам нужна помощь, не стесняйтесь связаться с нами.', + roles_other: + 'Достигнут лимит {{count, number}} ролей в плане . Повысьте план, чтобы добавить дополнительные роли и разрешения. Если вам нужна помощь, не стесняйтесь связаться с нами.', + scopes_per_role: + 'Достигнут лимит {{count, number}} разрешений на роль в плане . Повысьте план, чтобы добавить дополнительные роли и разрешения. Если вам нужна помощь, не стесняйтесь связаться с нами.', + scopes_per_role_other: + 'Достигнут лимит {{count, number}} разрешений на роль в плане . Повысьте план, чтобы добавить дополнительные роли и разрешения. Если вам нужна помощь, не стесняйтесь связаться с нами.', + hooks: + 'Достигнут лимит {{count, number}} вебхуков в плане . Повысьте план, чтобы создать больше вебхуков. Если вам нужна помощь, не стесняйтесь связаться с нами.', + hooks_other: + 'Достигнут лимит {{count, number}} вебхуков в плане . Повысьте план, чтобы создать больше вебхуков. Если вам нужна помощь, не стесняйтесь связаться с нами.', +}; + +export default Object.freeze(paywall); diff --git a/packages/phrases/src/locales/tr-tr/errors/password.ts b/packages/phrases/src/locales/tr-tr/errors/password.ts index adf26c608..c66475955 100644 --- a/packages/phrases/src/locales/tr-tr/errors/password.ts +++ b/packages/phrases/src/locales/tr-tr/errors/password.ts @@ -1,8 +1,7 @@ const password = { unsupported_encryption_method: '{{name}} şifreleme metodu desteklenmiyor.', pepper_not_found: 'Şifre pepperı bulunamadı. Lütfen core envs.i kontrol edin.', - /** UNTRANSLATED */ - rejected: 'Password rejected. Please check if your password meets the requirements.', + rejected: 'Şifre reddedildi. Lütfen şifrenizin gereksinimleri karşıladığından emin olun.', }; export default Object.freeze(password); diff --git a/packages/phrases/src/locales/tr-tr/errors/sign-in-experiences.ts b/packages/phrases/src/locales/tr-tr/errors/sign-in-experiences.ts index de629f688..c46dc992e 100644 --- a/packages/phrases/src/locales/tr-tr/errors/sign-in-experiences.ts +++ b/packages/phrases/src/locales/tr-tr/errors/sign-in-experiences.ts @@ -1,8 +1,8 @@ const sign_in_experiences = { empty_content_url_of_terms_of_use: - '"Kullanım Koşulları" İçerik URLi yok. Lütfen "Kullanım Koşulları" etkinse içerik URLi ekleyiniz.', + "Kullanım Koşulları İçerik URL'i yok. Lütfen Kullanım Koşulları etkinse içerik URL'i ekleyiniz.", empty_social_connectors: - 'Social connectors yok. Sosyal oturum açma yöntemi etkinleştirildiğinde lütfen etkin social connectorları ekleyiniz.', + 'Sosyal bağlayıcılar yok. Sosyal oturum açma yöntemi etkinleştirildiğinde lütfen etkin sosyal bağlayıcıları ekleyiniz.', enabled_connector_not_found: 'Etkin {{type}} bağlayıcı bulunamadı.', not_one_and_only_one_primary_sign_in_method: 'Yalnızca bir tane birincil oturum açma yöntemi olmalıdır. Lütfen inputu kontrol ediniz.', @@ -16,10 +16,8 @@ const sign_in_experiences = { 'Kayıtta şifre belirleme zorunlu olmadığında doğrulama koduyla oturum açma etkinleştirilmelidir.', unsupported_default_language: 'Bu dil - {{language}}, şu anda desteklenmemektedir.', at_least_one_authentication_factor: 'En az bir doğrulama faktörü seçmelisiniz.', - /** UNTRANSLATED */ - backup_code_cannot_be_enabled_alone: 'Backup code cannot be enabled alone.', - /** UNTRANSLATED */ - duplicated_mfa_factors: 'Duplicated MFA factors.', + backup_code_cannot_be_enabled_alone: 'Yedek kod yalnız başına etkinleştirilemez.', + duplicated_mfa_factors: 'Yinelenen MFA faktörleri.', }; export default Object.freeze(sign_in_experiences); diff --git a/packages/phrases/src/locales/tr-tr/translation/admin-console/index.ts b/packages/phrases/src/locales/tr-tr/translation/admin-console/index.ts index ce90f0a02..8de47f42d 100644 --- a/packages/phrases/src/locales/tr-tr/translation/admin-console/index.ts +++ b/packages/phrases/src/locales/tr-tr/translation/admin-console/index.ts @@ -28,7 +28,7 @@ import tab_sections from './tab-sections.js'; import tabs from './tabs.js'; import tenants from './tenants.js'; import topbar from './topbar.js'; -import upsell from './upsell.js'; +import upsell from './upsell/index.js'; import user_details from './user-details.js'; import users from './users.js'; import webhook_details from './webhook-details.js'; diff --git a/packages/phrases/src/locales/tr-tr/translation/admin-console/sign-in-exp/index.ts b/packages/phrases/src/locales/tr-tr/translation/admin-console/sign-in-exp/index.ts index 547bfbe74..0f0b8182d 100644 --- a/packages/phrases/src/locales/tr-tr/translation/admin-console/sign-in-exp/index.ts +++ b/packages/phrases/src/locales/tr-tr/translation/admin-console/sign-in-exp/index.ts @@ -11,8 +11,7 @@ const sign_in_exp = { branding: 'Markalaşma', sign_up_and_sign_in: 'Kaydol ve Oturum Aç', content: 'İçerik', - /** UNTRANSLATED */ - password_policy: 'Password policy', + password_policy: 'Şifre politikası', }, welcome: { title: 'Oturum açma deneyimini özelleştirin', diff --git a/packages/phrases/src/locales/tr-tr/translation/admin-console/sign-in-exp/password-policy.ts b/packages/phrases/src/locales/tr-tr/translation/admin-console/sign-in-exp/password-policy.ts index f54c9f77b..4ea2cb475 100644 --- a/packages/phrases/src/locales/tr-tr/translation/admin-console/sign-in-exp/password-policy.ts +++ b/packages/phrases/src/locales/tr-tr/translation/admin-console/sign-in-exp/password-policy.ts @@ -1,45 +1,27 @@ const password_policy = { - /** UNTRANSLATED */ - password_requirements: 'Password requirements', - /** UNTRANSLATED */ - minimum_length: 'Minimum length', - /** UNTRANSLATED */ - minimum_length_description: 'NIST suggests using at least 8 characters for web products.', - /** UNTRANSLATED */ - minimum_length_error: 'Minimum length must be between {{min}} and {{max}} (inclusive).', - /** UNTRANSLATED */ - minimum_required_char_types: 'Minimum required character types', - /** UNTRANSLATED */ + password_requirements: 'Parola gereksinimleri', + minimum_length: 'Minimum uzunluk', + minimum_length_description: + 'NIST önerilerine göre, web ürünleri için en az 8 karakter kullanın.', + minimum_length_error: 'Minimum uzunluk {{min}} ile {{max}} (dahil) arasında olmalıdır.', + minimum_required_char_types: 'Minimum gereken karakter tipleri', minimum_required_char_types_description: - 'Character types: uppercase (A-Z), lowercase (a-z), numbers (0-9), and special symbols ({{symbols}}).', - /** UNTRANSLATED */ - password_rejection: 'Password rejection', - /** UNTRANSLATED */ - compromised_passwords: 'Reject compromised password', - /** UNTRANSLATED */ - breached_passwords: 'Breached passwords', - /** UNTRANSLATED */ - breached_passwords_description: 'Reject passwords previously found in breach databases.', - /** UNTRANSLATED */ - restricted_phrases: 'Restrict low-security phrases', - /** UNTRANSLATED */ + 'Karakter tipleri: büyük harfler (A-Z), küçük harfler (a-z), sayılar (0-9) ve özel semboller ({{symbols}}).', + password_rejection: 'Parola reddi', + compromised_passwords: 'Etkilenen şifreleri reddet', + breached_passwords: 'Veri tabanında yer alan şifreleri reddet', + breached_passwords_description: 'Daha önceki ihlal veritabanlarında bulunan şifreleri reddet.', + restricted_phrases: 'Düşük güvenlikli ifadeleri kısıtla', restricted_phrases_tooltip: - 'Users cannot use passwords that are exactly the same as or made up of the listed phrases below. The addition of 3 or more non-consecutive characters is allowed to increase password complexity.', - /** UNTRANSLATED */ - repetitive_or_sequential_characters: 'Repetitive or sequential characters', - /** UNTRANSLATED */ - repetitive_or_sequential_characters_description: 'E.g., "AAAA", "1234", and "abcd".', - /** UNTRANSLATED */ - user_information: 'User information', - /** UNTRANSLATED */ - user_information_description: 'E.g., email address, phone number, username, etc.', - /** UNTRANSLATED */ - custom_words: 'Custom words', - /** UNTRANSLATED */ + 'Parolanız 3 ya da daha fazla karakterle birleştirilmediği sürece bu ifadelerden kaçınmalıdır.', + repetitive_or_sequential_characters: 'Tekrarlayan veya ardışık karakterler', + repetitive_or_sequential_characters_description: 'Örn., "AAAA", "1234" ve "abcd".', + user_information: 'Kullanıcı bilgisi', + user_information_description: 'Örn., e-posta adresi, telefon numarası, kullanıcı adı vb.', + custom_words: 'Özel kelimeler', custom_words_description: - 'Personalize context-specific words, case-insensitive, and one per line.', - /** UNTRANSLATED */ - custom_words_placeholder: 'Your service name, company name, etc.', + 'Bağlamla ilgili kelimeleri kişiselleştirin, küçük/büyük harf duyarsız ve satır başına bir kelime olacak şekilde.', + custom_words_placeholder: 'Servis adınız, şirket adınız, vb.', }; export default Object.freeze(password_policy); diff --git a/packages/phrases/src/locales/tr-tr/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts b/packages/phrases/src/locales/tr-tr/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts index 9821161ef..a2ff882cd 100644 --- a/packages/phrases/src/locales/tr-tr/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts +++ b/packages/phrases/src/locales/tr-tr/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts @@ -53,13 +53,10 @@ const sign_up_and_sign_in = { delete_sign_in_method: 'Bu, {{identifier}} gerekliliğini belirlediğiniz için önemlidir.', }, advanced_options: { - /** UNTRANSLATED */ - title: 'ADVANCED OPTIONS', - /** UNTRANSLATED */ - enable_user_registration: 'Enable user registration', - /** UNTRANSLATED */ + title: 'GELİŞMİŞ SEÇENEKLER', + enable_user_registration: 'Kullanıcı kaydını etkinleştir', enable_user_registration_description: - 'Enable or disallow user registration. Once disabled, users can still be added in the admin console but users can no longer establish accounts through the sign-in UI.', + 'Kullanıcı kaydını etkinleştir veya devre dışı bırak. Devre dışı bırakıldığında, kullanıcılar yönetici konsolunda hala eklenilebilir, ancak kullanıcılar artık oturum açma arayüzü üzerinden hesap oluşturamaz.', }, }; diff --git a/packages/phrases/src/locales/tr-tr/translation/admin-console/upsell.ts b/packages/phrases/src/locales/tr-tr/translation/admin-console/upsell.ts deleted file mode 100644 index e4a69efaf..000000000 --- a/packages/phrases/src/locales/tr-tr/translation/admin-console/upsell.ts +++ /dev/null @@ -1,87 +0,0 @@ -const upsell = { - pro_tag: 'PRO', - upgrade_plan: 'Planı Yükselt', - compare_plans: 'Planları Karşılaştır', - get_started: { - title: 'Ücretsiz bir planla sorunsuz kimlik yolculuğunuza başlayın!', - description: - "Ücretsiz plan, Logto'yu yan projelerinizde veya denemelerinizde denemek için mükemmeldir. Ekibiniz için Logto'nun yeteneklerini tam anlamıyla kullanmak için sınırsız erişim elde etmek için yükseltme yaparak premium özelliklere sahip olun: sınırsız MAU kullanımı, Makine-Makine entegrasyonu, RBAC yönetimi, uzun süreli denetim günlükleri vb. Tüm planları görüntüle", - }, - create_tenant: { - title: 'Kiracı planınızı seçin', - description: - 'Logto, büyüyen şirketler için tasarlanmış yenilikçi ve uygun fiyatlı fiyatlandırma seçenekleri sunar. Daha fazla bilgi edinin', - base_price: 'Temel Fiyat', - monthly_price: '{{value, number}}/ay', - mau_unit_price: 'MAU birim fiyatı', - view_all_features: 'Tüm özellikleri görüntüle', - select_plan: "'ı Seçin", - free_tenants_limit: 'En fazla {{count, number}} ücretsiz kiracı', - free_tenants_limit_other: 'En fazla {{count, number}} ücretsiz kiracı', - most_popular: 'En Popüler', - upgrade_success: "'a Başarıyla Yükseltildi", - }, - paywall: { - applications: - ' limitine ulaşılan {{count, number}} başvuru. Ekibinizin ihtiyaçlarını karşılamak için planı yükseltin. Yardım için lütfen bizimle iletişime geçin.', - applications_other: - ' limitine ulaşılan {{count, number}} başvurular. Ekibinizin ihtiyaçlarını karşılamak için planı yükseltin. Yardım için lütfen bizimle iletişime geçin.', - machine_to_machine_feature: - 'Makine-makine uygulaması oluşturmak ve tüm premium özelliklere erişim sağlamak için ücretli bir plana yükseltin. Yardım için lütfen bizimle iletişime geçin.', - machine_to_machine: - ' limitine ulaşılan {{count, number}} makine-makine başvurusu. Ekibinizin ihtiyaçlarını karşılamak için planı yükseltin. Yardım için lütfen bizimle iletişime geçin.', - machine_to_machine_other: - ' limitine ulaşılan {{count, number}} makine-makine başvuruları. Ekibinizin ihtiyaçlarını karşılamak için planı yükseltin. Yardım için lütfen bizimle iletişime geçin.', - resources: - '{{count, number}} API kaynağı sınırına ulaşıldı. Ekibinizin ihtiyaçlarını karşılamak için planı yükseltin. Yardıma ihtiyacınız olursa, iletişime geçin.', - resources_other: - '{{count, number}} API kaynağı sınırına ulaşıldı. Ekibinizin ihtiyaçlarını karşılamak için planı yükseltin. Yardıma ihtiyacınız olursa, iletişime geçin.', - scopes_per_resource: - '{{count, number}} API kaynağı başına izin sınırına ulaşıldı. Genişletmek için şimdi yükseltin. Yardıma ihtiyacınız olursa, iletişime geçin.', - scopes_per_resource_other: - '{{count, number}} API kaynağı başına izin sınırına ulaşıldı. Genişletmek için şimdi yükseltin. Yardıma ihtiyacınız olursa, iletişime geçin.', - custom_domain: - 'Özel etki alanı işlevselliğini açığa çıkarın ve ücretli bir plana geçerek bir dizi premium avantajdan yararlanın. Yardıma ihtiyacınız olursa, iletişime geçin.', - social_connectors: - '{{count, number}} sosyal bağlayıcı sınırına ulaşıldı. Ekibinizin ihtiyaçlarını karşılamak için planı yükseltin ve OIDC, OAuth 2.0 ve SAML protokolleri kullanarak kendi bağlayıcılarınızı oluşturma yeteneğine sahip olun. Yardıma ihtiyacınız olursa, iletişime geçin.', - social_connectors_other: - '{{count, number}} sosyal bağlayıcı sınırına ulaşıldı. Ekibinizin ihtiyaçlarını karşılamak için planı yükseltin ve OIDC, OAuth 2.0 ve SAML protokolleri kullanarak kendi bağlayıcılarınızı oluşturma yeteneğine sahip olun. Yardıma ihtiyacınız olursa, iletişime geçin.', - standard_connectors_feature: - 'OIDC, OAuth 2.0 ve SAML protokollerini kullanarak kendi bağlayıcılarınızı oluşturmak, sınırsız sosyal bağlayıcılar ve tüm premium özelliklere erişim sağlamak için ücretli bir plana geçin. Yardıma ihtiyacınız olursa, iletişime geçin.', - standard_connectors: - '{{count, number}} sosyal bağlayıcı sınırına ulaşıldı. Ekibinizin ihtiyaçlarını karşılamak için planı yükseltin ve OIDC, OAuth 2.0 ve SAML protokolleri kullanarak kendi bağlayıcılarınızı oluşturma yeteneğine sahip olun. Yardıma ihtiyacınız olursa, iletişime geçin.', - standard_connectors_other: - '{{count, number}} sosyal bağlayıcı sınırına ulaşıldı. Ekibinizin ihtiyaçlarını karşılamak için planı yükseltin ve OIDC, OAuth 2.0 ve SAML protokolleri kullanarak kendi bağlayıcılarınızı oluşturma yeteneğine sahip olun. Yardıma ihtiyacınız olursa, iletişime geçin.', - standard_connectors_pro: - '{{count, number}} standart bağlayıcı sınırına ulaşıldı. Ekibinizin ihtiyaçlarını karşılamak için Kurumsal plana yükseltin ve OIDC, OAuth 2.0 ve SAML protokolleri kullanarak kendi bağlayıcılarınızı oluşturma yeteneğine sahip olun. Yardıma ihtiyacınız olursa, iletişime geçin.', - standard_connectors_pro_other: - '{{count, number}} standart bağlayıcı sınırına ulaşıldı. Ekibinizin ihtiyaçlarını karşılamak için Kurumsal plana yükseltin ve OIDC, OAuth 2.0 ve SAML protokolleri kullanarak kendi bağlayıcılarınızı oluşturma yeteneğine sahip olun. Yardıma ihtiyacınız olursa, iletişime geçin.', - roles: - '{{count, number}} rol sınırına ulaşıldı. İlave roller ve izinler eklemek için planı yükseltin. Yardıma ihtiyacınız olursa, iletişime geçin.', - roles_other: - '{{count, number}} rol sınırına ulaşıldı. İlave roller ve izinler eklemek için planı yükseltin. Yardıma ihtiyacınız olursa, iletişime geçin.', - scopes_per_role: - '{{count, number}} rol başına izin sınırına ulaşıldı. İlave roller ve izinler eklemek için planı yükseltin. Yardıma ihtiyacınız olursa, iletişime geçin.', - scopes_per_role_other: - '{{count, number}} rol başına izin sınırına ulaşıldı. İlave roller ve izinler eklemek için planı yükseltin. Yardıma ihtiyacınız olursa, iletişime geçin.', - hooks: - '{{count, number}} webhook sınırına ulaşıldı. Daha fazla webhook oluşturmak için planı yükseltin. Yardıma ihtiyacınız olursa, iletişime geçin.', - hooks_other: - '{{count, number}} webhook sınırına ulaşıldı. Daha fazla webhook oluşturmak için planı yükseltin. Yardıma ihtiyacınız olursa, iletişime geçin.', - }, - mau_exceeded_modal: { - title: 'MAU sınırı aşıldı. Planınızı yükseltin.', - notification: - 'Mevcut MAU, sınırını aştı. Logto hizmetinin askıya alınmasını önlemek için premium plana hemen yükseltin.', - update_plan: 'Planı Güncelle', - }, - payment_overdue_modal: { - title: 'Fatura ödemesi gecikti', - notification: - 'Oops! Kiracı {{name}} faturasının ödemesi başarısız oldu. Logto hizmetinin askıya alınmaması için faturayı zamanında ödeyin.', - unpaid_bills: 'Ödenmemiş faturalar', - update_payment: 'Ödemeyi Güncelle', - }, -}; - -export default Object.freeze(upsell); diff --git a/packages/phrases/src/locales/tr-tr/translation/admin-console/upsell/index.ts b/packages/phrases/src/locales/tr-tr/translation/admin-console/upsell/index.ts new file mode 100644 index 000000000..b639b61cc --- /dev/null +++ b/packages/phrases/src/locales/tr-tr/translation/admin-console/upsell/index.ts @@ -0,0 +1,42 @@ +import paywall from './paywall.js'; + +const upsell = { + pro_tag: 'PRO', + upgrade_plan: 'Planı Yükselt', + compare_plans: 'Planları Karşılaştır', + get_started: { + title: 'Ücretsiz bir planla sorunsuz kimlik yolculuğunuza başlayın!', + description: + "Ücretsiz plan, Logto'yu yan projelerinizde veya denemelerinizde denemek için mükemmeldir. Ekibiniz için Logto'nun yeteneklerini tam anlamıyla kullanmak için sınırsız erişim elde etmek için yükseltme yaparak premium özelliklere sahip olun: sınırsız MAU kullanımı, Makine-Makine entegrasyonu, RBAC yönetimi, uzun süreli denetim günlükleri vb. Tüm planları görüntüle", + }, + create_tenant: { + title: 'Kiracı planınızı seçin', + description: + 'Logto, büyüyen şirketler için tasarlanmış yenilikçi ve uygun fiyatlı fiyatlandırma seçenekleri sunar. Daha fazla bilgi edinin', + base_price: 'Temel Fiyat', + monthly_price: '{{value, number}}/ay', + mau_unit_price: 'MAU birim fiyatı', + view_all_features: 'Tüm özellikleri görüntüle', + select_plan: "'ı Seçin", + free_tenants_limit: 'En fazla {{count, number}} ücretsiz kiracı', + free_tenants_limit_other: 'En fazla {{count, number}} ücretsiz kiracı', + most_popular: 'En Popüler', + upgrade_success: "'a Başarıyla Yükseltildi", + }, + mau_exceeded_modal: { + title: 'MAU sınırı aşıldı. Planınızı yükseltin.', + notification: + 'Mevcut MAU, sınırını aştı. Logto hizmetinin askıya alınmasını önlemek için premium plana hemen yükseltin.', + update_plan: 'Planı Güncelle', + }, + payment_overdue_modal: { + title: 'Fatura ödemesi gecikti', + notification: + 'Oops! Kiracı {{name}} faturasının ödemesi başarısız oldu. Logto hizmetinin askıya alınmaması için faturayı zamanında ödeyin.', + unpaid_bills: 'Ödenmemiş faturalar', + update_payment: 'Ödemeyi Güncelle', + }, + paywall, +}; + +export default Object.freeze(upsell); diff --git a/packages/phrases/src/locales/tr-tr/translation/admin-console/upsell/paywall.ts b/packages/phrases/src/locales/tr-tr/translation/admin-console/upsell/paywall.ts new file mode 100644 index 000000000..04444e0d5 --- /dev/null +++ b/packages/phrases/src/locales/tr-tr/translation/admin-console/upsell/paywall.ts @@ -0,0 +1,50 @@ +const paywall = { + applications: + ' limitine ulaşılan {{count, number}} başvuru. Ekibinizin ihtiyaçlarını karşılamak için planı yükseltin. Yardım için lütfen bizimle iletişime geçin.', + applications_other: + ' limitine ulaşılan {{count, number}} başvurular. Ekibinizin ihtiyaçlarını karşılamak için planı yükseltin. Yardım için lütfen bizimle iletişime geçin.', + machine_to_machine_feature: + 'Makine-makine uygulaması oluşturmak ve tüm premium özelliklere erişim sağlamak için ücretli bir plana yükseltin. Yardım için lütfen bizimle iletişime geçin.', + machine_to_machine: + ' limitine ulaşılan {{count, number}} makine-makine başvurusu. Ekibinizin ihtiyaçlarını karşılamak için planı yükseltin. Yardım için lütfen bizimle iletişime geçin.', + machine_to_machine_other: + ' limitine ulaşılan {{count, number}} makine-makine başvuruları. Ekibinizin ihtiyaçlarını karşılamak için planı yükseltin. Yardım için lütfen bizimle iletişime geçin.', + resources: + '{{count, number}} API kaynağı sınırına ulaşıldı. Ekibinizin ihtiyaçlarını karşılamak için planı yükseltin. Yardıma ihtiyacınız olursa, iletişime geçin.', + resources_other: + '{{count, number}} API kaynağı sınırına ulaşıldı. Ekibinizin ihtiyaçlarını karşılamak için planı yükseltin. Yardıma ihtiyacınız olursa, iletişime geçin.', + scopes_per_resource: + '{{count, number}} API kaynağı başına izin sınırına ulaşıldı. Genişletmek için şimdi yükseltin. Yardıma ihtiyacınız olursa, iletişime geçin.', + scopes_per_resource_other: + '{{count, number}} API kaynağı başına izin sınırına ulaşıldı. Genişletmek için şimdi yükseltin. Yardıma ihtiyacınız olursa, iletişime geçin.', + custom_domain: + 'Özel etki alanı işlevselliğini açığa çıkarın ve ücretli bir plana geçerek bir dizi premium avantajdan yararlanın. Yardıma ihtiyacınız olursa, iletişime geçin.', + social_connectors: + '{{count, number}} sosyal bağlayıcı sınırına ulaşıldı. Ekibinizin ihtiyaçlarını karşılamak için planı yükseltin ve OIDC, OAuth 2.0 ve SAML protokolleri kullanarak kendi bağlayıcılarınızı oluşturma yeteneğine sahip olun. Yardıma ihtiyacınız olursa, iletişime geçin.', + social_connectors_other: + '{{count, number}} sosyal bağlayıcı sınırına ulaşıldı. Ekibinizin ihtiyaçlarını karşılamak için planı yükseltin ve OIDC, OAuth 2.0 ve SAML protokolleri kullanarak kendi bağlayıcılarınızı oluşturma yeteneğine sahip olun. Yardıma ihtiyacınız olursa, iletişime geçin.', + standard_connectors_feature: + 'OIDC, OAuth 2.0 ve SAML protokollerini kullanarak kendi bağlayıcılarınızı oluşturmak, sınırsız sosyal bağlayıcılar ve tüm premium özelliklere erişim sağlamak için ücretli bir plana geçin. Yardıma ihtiyacınız olursa, iletişime geçin.', + standard_connectors: + '{{count, number}} sosyal bağlayıcı sınırına ulaşıldı. Ekibinizin ihtiyaçlarını karşılamak için planı yükseltin ve OIDC, OAuth 2.0 ve SAML protokolleri kullanarak kendi bağlayıcılarınızı oluşturma yeteneğine sahip olun. Yardıma ihtiyacınız olursa, iletişime geçin.', + standard_connectors_other: + '{{count, number}} sosyal bağlayıcı sınırına ulaşıldı. Ekibinizin ihtiyaçlarını karşılamak için planı yükseltin ve OIDC, OAuth 2.0 ve SAML protokolleri kullanarak kendi bağlayıcılarınızı oluşturma yeteneğine sahip olun. Yardıma ihtiyacınız olursa, iletişime geçin.', + standard_connectors_pro: + '{{count, number}} standart bağlayıcı sınırına ulaşıldı. Ekibinizin ihtiyaçlarını karşılamak için Kurumsal plana yükseltin ve OIDC, OAuth 2.0 ve SAML protokolleri kullanarak kendi bağlayıcılarınızı oluşturma yeteneğine sahip olun. Yardıma ihtiyacınız olursa, iletişime geçin.', + standard_connectors_pro_other: + '{{count, number}} standart bağlayıcı sınırına ulaşıldı. Ekibinizin ihtiyaçlarını karşılamak için Kurumsal plana yükseltin ve OIDC, OAuth 2.0 ve SAML protokolleri kullanarak kendi bağlayıcılarınızı oluşturma yeteneğine sahip olun. Yardıma ihtiyacınız olursa, iletişime geçin.', + roles: + '{{count, number}} rol sınırına ulaşıldı. İlave roller ve izinler eklemek için planı yükseltin. Yardıma ihtiyacınız olursa, iletişime geçin.', + roles_other: + '{{count, number}} rol sınırına ulaşıldı. İlave roller ve izinler eklemek için planı yükseltin. Yardıma ihtiyacınız olursa, iletişime geçin.', + scopes_per_role: + '{{count, number}} rol başına izin sınırına ulaşıldı. İlave roller ve izinler eklemek için planı yükseltin. Yardıma ihtiyacınız olursa, iletişime geçin.', + scopes_per_role_other: + '{{count, number}} rol başına izin sınırına ulaşıldı. İlave roller ve izinler eklemek için planı yükseltin. Yardıma ihtiyacınız olursa, iletişime geçin.', + hooks: + '{{count, number}} webhook sınırına ulaşıldı. Daha fazla webhook oluşturmak için planı yükseltin. Yardıma ihtiyacınız olursa, iletişime geçin.', + hooks_other: + '{{count, number}} webhook sınırına ulaşıldı. Daha fazla webhook oluşturmak için planı yükseltin. Yardıma ihtiyacınız olursa, iletişime geçin.', +}; + +export default Object.freeze(paywall); diff --git a/packages/phrases/src/locales/zh-cn/errors/password.ts b/packages/phrases/src/locales/zh-cn/errors/password.ts index f3c63dbbd..2a62f996b 100644 --- a/packages/phrases/src/locales/zh-cn/errors/password.ts +++ b/packages/phrases/src/locales/zh-cn/errors/password.ts @@ -1,8 +1,7 @@ const password = { unsupported_encryption_method: '不支持的加密方法 {{name}}', pepper_not_found: '密码 pepper 未找到。请检查 core 的环境变量。', - /** UNTRANSLATED */ - rejected: 'Password rejected. Please check if your password meets the requirements.', + rejected: '密码被拒绝。请检查密码是否符合要求。', }; export default Object.freeze(password); diff --git a/packages/phrases/src/locales/zh-cn/errors/sign-in-experiences.ts b/packages/phrases/src/locales/zh-cn/errors/sign-in-experiences.ts index d926067a2..ab1bc5f87 100644 --- a/packages/phrases/src/locales/zh-cn/errors/sign-in-experiences.ts +++ b/packages/phrases/src/locales/zh-cn/errors/sign-in-experiences.ts @@ -10,10 +10,8 @@ const sign_in_experiences = { code_sign_in_must_be_enabled: '必须在注册中不要求设置密码时启用验证码登录。', unsupported_default_language: '{{language}} 无法选择为默认语言。', at_least_one_authentication_factor: '至少要选择一个登录要素', - /** UNTRANSLATED */ - backup_code_cannot_be_enabled_alone: 'Backup code cannot be enabled alone.', - /** UNTRANSLATED */ - duplicated_mfa_factors: 'Duplicated MFA factors.', + backup_code_cannot_be_enabled_alone: '无法仅启用备份代码。', + duplicated_mfa_factors: '重复的 MFA 要素。', }; export default Object.freeze(sign_in_experiences); diff --git a/packages/phrases/src/locales/zh-cn/translation/admin-console/index.ts b/packages/phrases/src/locales/zh-cn/translation/admin-console/index.ts index 1a78db3a6..fe1eb1ecc 100644 --- a/packages/phrases/src/locales/zh-cn/translation/admin-console/index.ts +++ b/packages/phrases/src/locales/zh-cn/translation/admin-console/index.ts @@ -28,7 +28,7 @@ import tab_sections from './tab-sections.js'; import tabs from './tabs.js'; import tenants from './tenants.js'; import topbar from './topbar.js'; -import upsell from './upsell.js'; +import upsell from './upsell/index.js'; import user_details from './user-details.js'; import users from './users.js'; import webhook_details from './webhook-details.js'; diff --git a/packages/phrases/src/locales/zh-cn/translation/admin-console/sign-in-exp/index.ts b/packages/phrases/src/locales/zh-cn/translation/admin-console/sign-in-exp/index.ts index e390c9da0..4e970e79e 100644 --- a/packages/phrases/src/locales/zh-cn/translation/admin-console/sign-in-exp/index.ts +++ b/packages/phrases/src/locales/zh-cn/translation/admin-console/sign-in-exp/index.ts @@ -10,8 +10,7 @@ const sign_in_exp = { branding: '品牌', sign_up_and_sign_in: '注册与登录', content: '内容', - /** UNTRANSLATED */ - password_policy: 'Password policy', + password_policy: '密码策略', }, welcome: { title: '自定义登录体验', diff --git a/packages/phrases/src/locales/zh-cn/translation/admin-console/sign-in-exp/password-policy.ts b/packages/phrases/src/locales/zh-cn/translation/admin-console/sign-in-exp/password-policy.ts index f54c9f77b..a6ddec2b4 100644 --- a/packages/phrases/src/locales/zh-cn/translation/admin-console/sign-in-exp/password-policy.ts +++ b/packages/phrases/src/locales/zh-cn/translation/admin-console/sign-in-exp/password-policy.ts @@ -1,45 +1,24 @@ const password_policy = { - /** UNTRANSLATED */ - password_requirements: 'Password requirements', - /** UNTRANSLATED */ - minimum_length: 'Minimum length', - /** UNTRANSLATED */ - minimum_length_description: 'NIST suggests using at least 8 characters for web products.', - /** UNTRANSLATED */ - minimum_length_error: 'Minimum length must be between {{min}} and {{max}} (inclusive).', - /** UNTRANSLATED */ - minimum_required_char_types: 'Minimum required character types', - /** UNTRANSLATED */ + password_requirements: '密码要求', + minimum_length: '最小长度', + minimum_length_description: 'NIST 建议在 Web 产品中使用至少 8 个字符。', + minimum_length_error: '最小长度必须在 {{min}} 和 {{max}} 之间(包括 {{min}} 和 {{max}})。', + minimum_required_char_types: '最小要求字符类型', minimum_required_char_types_description: - 'Character types: uppercase (A-Z), lowercase (a-z), numbers (0-9), and special symbols ({{symbols}}).', - /** UNTRANSLATED */ - password_rejection: 'Password rejection', - /** UNTRANSLATED */ - compromised_passwords: 'Reject compromised password', - /** UNTRANSLATED */ - breached_passwords: 'Breached passwords', - /** UNTRANSLATED */ - breached_passwords_description: 'Reject passwords previously found in breach databases.', - /** UNTRANSLATED */ - restricted_phrases: 'Restrict low-security phrases', - /** UNTRANSLATED */ - restricted_phrases_tooltip: - 'Users cannot use passwords that are exactly the same as or made up of the listed phrases below. The addition of 3 or more non-consecutive characters is allowed to increase password complexity.', - /** UNTRANSLATED */ - repetitive_or_sequential_characters: 'Repetitive or sequential characters', - /** UNTRANSLATED */ - repetitive_or_sequential_characters_description: 'E.g., "AAAA", "1234", and "abcd".', - /** UNTRANSLATED */ - user_information: 'User information', - /** UNTRANSLATED */ - user_information_description: 'E.g., email address, phone number, username, etc.', - /** UNTRANSLATED */ - custom_words: 'Custom words', - /** UNTRANSLATED */ - custom_words_description: - 'Personalize context-specific words, case-insensitive, and one per line.', - /** UNTRANSLATED */ - custom_words_placeholder: 'Your service name, company name, etc.', + '字符类型:大写字母(A-Z),小写字母(a-z),数字(0-9)以及特殊字符({{symbols}})。', + password_rejection: '密码拒绝', + compromised_passwords: '拒绝已泄露的密码', + breached_passwords: '泄露的密码', + breached_passwords_description: '拒绝之前在泄露数据库中发现的密码。', + restricted_phrases: '限制低安全性短语', + restricted_phrases_tooltip: '密码应避免使用这些短语,除非结合 3 个或更多额外字符。', + repetitive_or_sequential_characters: '重复或连续字符', + repetitive_or_sequential_characters_description: '例如,“AAAA”、“1234”和“abcd”。', + user_information: '用户信息', + user_information_description: '例如,电子邮件地址,电话号码,用户名等。', + custom_words: '自定义词汇', + custom_words_description: '个性化上下文相关的词汇,不区分大小写,每行一个。', + custom_words_placeholder: '您的服务名称,公司名称等。', }; export default Object.freeze(password_policy); diff --git a/packages/phrases/src/locales/zh-cn/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts b/packages/phrases/src/locales/zh-cn/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts index fc3dd268d..c9b9ca83e 100644 --- a/packages/phrases/src/locales/zh-cn/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts +++ b/packages/phrases/src/locales/zh-cn/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts @@ -48,13 +48,10 @@ const sign_up_and_sign_in = { '因注册设置里你启用了{{identifier}}标识。这些信息在用户登录时,属于必选项。', }, advanced_options: { - /** UNTRANSLATED */ - title: 'ADVANCED OPTIONS', - /** UNTRANSLATED */ - enable_user_registration: 'Enable user registration', - /** UNTRANSLATED */ + title: '高级选项', + enable_user_registration: '启用用户注册', enable_user_registration_description: - 'Enable or disallow user registration. Once disabled, users can still be added in the admin console but users can no longer establish accounts through the sign-in UI.', + '启用或禁用用户注册。禁用后,管理员仍然可以添加用户,但用户无法通过登录界面建立账户。', }, }; diff --git a/packages/phrases/src/locales/zh-cn/translation/admin-console/upsell.ts b/packages/phrases/src/locales/zh-cn/translation/admin-console/upsell.ts deleted file mode 100644 index d50eb94e7..000000000 --- a/packages/phrases/src/locales/zh-cn/translation/admin-console/upsell.ts +++ /dev/null @@ -1,87 +0,0 @@ -const upsell = { - pro_tag: 'PRO', - upgrade_plan: '升级计划', - compare_plans: '比较计划', - get_started: { - title: '通过免费计划开始您无缝的身份之旅!', - description: - '免费计划非常适合在您的边项目或试用中尝试Logto。为了充分利用Logto团队的功能,升级并获得对高级功能的无限访问:无限MAU使用、机器对机器集成、RBAC管理、长期审计日志等。 查看所有计划', - }, - create_tenant: { - title: '选择您的租户计划', - description: - 'Logto 提供创新且经济实惠的定价计划,旨在为不断发展的公司提供竞争优势。 了解更多', - base_price: '基础价格', - monthly_price: '每月 {{value, number}}', - mau_unit_price: 'MAU 单价', - view_all_features: '查看所有功能', - select_plan: '选择', - free_tenants_limit: '最多{{count, number}}个免费租户', - free_tenants_limit_other: '最多{{count, number}}个免费租户', - most_popular: '最受欢迎', - upgrade_success: '成功升级至', - }, - paywall: { - applications: - '已达到 的{{count, number}}个应用限制。升级计划以满足团队需求。如需帮助,请随时联系我们。', - applications_other: - '已达到 的{{count, number}}个应用限制。升级计划以满足团队需求。如需帮助,请随时联系我们。', - machine_to_machine_feature: - '升级到付费计划以创建机器对机器应用,并获得所有高级功能的访问权限。如需帮助,请随时联系我们。', - machine_to_machine: - '已达到 的{{count, number}}个机器对机器应用限制。升级计划以满足团队需求。如需帮助,请随时联系我们。', - machine_to_machine_other: - '已达到 的{{count, number}}个机器对机器应用限制。升级计划以满足团队需求。如需帮助,请随时联系我们。', - resources: - '已达到的{{count, number}}个 API 资源限制。升级计划以满足您团队的需求。联系我们寻求帮助。', - resources_other: - '已达到的{{count, number}}个 API 资源限制。升级计划以满足您团队的需求。联系我们寻求帮助。', - scopes_per_resource: - '已达到的{{count, number}}个 API 资源每个权限限制。立即升级以扩展。如需任何帮助,请联系我们。', - scopes_per_resource_other: - '已达到的{{count, number}}个 API 资源每个权限限制。立即升级以扩展。如需任何帮助,请联系我们。', - custom_domain: - '通过升级到付费计划解锁自定义域功能和一系列高级福利。如需任何帮助,请联系我们。', - social_connectors: - '已达到的{{count, number}}个社交连接器限制。为满足您团队的需求,请升级计划以获取额外的社交连接器,并可以使用 OIDC、OAuth 2.0 和 SAML 协议创建您自己的连接器。如需任何帮助,请联系我们。', - social_connectors_other: - '已达到的{{count, number}}个社交连接器限制。为满足您团队的需求,请升级计划以获取额外的社交连接器,并可以使用 OIDC、OAuth 2.0 和 SAML 协议创建您自己的连接器。如需任何帮助,请联系我们。', - standard_connectors_feature: - '升级到付费计划以使用 OIDC、OAuth 2.0 和 SAML 协议创建您自己的连接器,并获得无限社交连接器和所有高级功能。如需任何帮助,请联系我们。', - standard_connectors: - '已达到的{{count, number}}个社交连接器限制。为满足您团队的需求,请升级计划以获取额外的社交连接器,并可以使用 OIDC、OAuth 2.0 和 SAML 协议创建您自己的连接器。如需任何帮助,请联系我们。', - standard_connectors_other: - '已达到的{{count, number}}个社交连接器限制。为满足您团队的需求,请升级计划以获取额外的社交连接器,并可以使用 OIDC、OAuth 2.0 和 SAML 协议创建您自己的连接器。如需任何帮助,请联系我们。', - standard_connectors_pro: - '已达到的{{count, number}}个标准连接器限制。为满足您团队的需求,请升级至企业版计划以获取额外的社交连接器,并可以使用 OIDC、OAuth 2.0 和 SAML 协议创建您自己的连接器。如需任何帮助,请联系我们。', - standard_connectors_pro_other: - '已达到的{{count, number}}个标准连接器限制。为满足您团队的需求,请升级至企业版计划以获取额外的社交连接器,并可以使用 OIDC、OAuth 2.0 和 SAML 协议创建您自己的连接器。如需任何帮助,请联系我们。', - roles: - '已达到的{{count, number}}个角色限制。升级计划以添加额外的角色和权限。如需任何帮助,请联系我们。', - roles_other: - '已达到的{{count, number}}个角色限制。升级计划以添加额外的角色和权限。如需任何帮助,请联系我们。', - scopes_per_role: - '已达到的{{count, number}}个角色每个权限限制。升级计划以添加额外的角色和权限。如需任何帮助,请联系我们。', - scopes_per_role_other: - '已达到的{{count, number}}个角色每个权限限制。升级计划以添加额外的角色和权限。如需任何帮助,请联系我们。', - hooks: - '已达到的{{count, number}}个 Webhook 限制。升级计划以创建更多 Webhook。如需任何帮助,请联系我们。', - hooks_other: - '已达到的{{count, number}}个 Webhook 限制。升级计划以创建更多 Webhook。如需任何帮助,请联系我们。', - }, - mau_exceeded_modal: { - title: 'MAU 超过限制,请升级您的计划。', - notification: - '您当前的 MAU 已超过的限制。请立即升级到高级计划,以避免 Logto 服务的暂停。', - update_plan: '更新计划', - }, - payment_overdue_modal: { - title: '账单逾期未付', - notification: - '糟糕!租户{{name}}的账单支付失败。请尽快支付账单,以避免Logto服务中止。', - unpaid_bills: '未付账单', - update_payment: '更新支付', - }, -}; - -export default Object.freeze(upsell); diff --git a/packages/phrases/src/locales/zh-cn/translation/admin-console/upsell/index.ts b/packages/phrases/src/locales/zh-cn/translation/admin-console/upsell/index.ts new file mode 100644 index 000000000..139501e93 --- /dev/null +++ b/packages/phrases/src/locales/zh-cn/translation/admin-console/upsell/index.ts @@ -0,0 +1,42 @@ +import paywall from './paywall.js'; + +const upsell = { + pro_tag: 'PRO', + upgrade_plan: '升级计划', + compare_plans: '比较计划', + get_started: { + title: '通过免费计划开始您无缝的身份之旅!', + description: + '免费计划非常适合在您的边项目或试用中尝试Logto。为了充分利用Logto团队的功能,升级并获得对高级功能的无限访问:无限MAU使用、机器对机器集成、RBAC管理、长期审计日志等。 查看所有计划', + }, + create_tenant: { + title: '选择您的租户计划', + description: + 'Logto 提供创新且经济实惠的定价计划,旨在为不断发展的公司提供竞争优势。 了解更多', + base_price: '基础价格', + monthly_price: '每月 {{value, number}}', + mau_unit_price: 'MAU 单价', + view_all_features: '查看所有功能', + select_plan: '选择', + free_tenants_limit: '最多{{count, number}}个免费租户', + free_tenants_limit_other: '最多{{count, number}}个免费租户', + most_popular: '最受欢迎', + upgrade_success: '成功升级至', + }, + mau_exceeded_modal: { + title: 'MAU 超过限制,请升级您的计划。', + notification: + '您当前的 MAU 已超过的限制。请立即升级到高级计划,以避免 Logto 服务的暂停。', + update_plan: '更新计划', + }, + payment_overdue_modal: { + title: '账单逾期未付', + notification: + '糟糕!租户{{name}}的账单支付失败。请尽快支付账单,以避免Logto服务中止。', + unpaid_bills: '未付账单', + update_payment: '更新支付', + }, + paywall, +}; + +export default Object.freeze(upsell); diff --git a/packages/phrases/src/locales/zh-cn/translation/admin-console/upsell/paywall.ts b/packages/phrases/src/locales/zh-cn/translation/admin-console/upsell/paywall.ts new file mode 100644 index 000000000..7ee3c7dd8 --- /dev/null +++ b/packages/phrases/src/locales/zh-cn/translation/admin-console/upsell/paywall.ts @@ -0,0 +1,50 @@ +const paywall = { + applications: + '已达到 的{{count, number}}个应用限制。升级计划以满足团队需求。如需帮助,请随时联系我们。', + applications_other: + '已达到 的{{count, number}}个应用限制。升级计划以满足团队需求。如需帮助,请随时联系我们。', + machine_to_machine_feature: + '升级到付费计划以创建机器对机器应用,并获得所有高级功能的访问权限。如需帮助,请随时联系我们。', + machine_to_machine: + '已达到 的{{count, number}}个机器对机器应用限制。升级计划以满足团队需求。如需帮助,请随时联系我们。', + machine_to_machine_other: + '已达到 的{{count, number}}个机器对机器应用限制。升级计划以满足团队需求。如需帮助,请随时联系我们。', + resources: + '已达到的{{count, number}}个 API 资源限制。升级计划以满足您团队的需求。联系我们寻求帮助。', + resources_other: + '已达到的{{count, number}}个 API 资源限制。升级计划以满足您团队的需求。联系我们寻求帮助。', + scopes_per_resource: + '已达到的{{count, number}}个 API 资源每个权限限制。立即升级以扩展。如需任何帮助,请联系我们。', + scopes_per_resource_other: + '已达到的{{count, number}}个 API 资源每个权限限制。立即升级以扩展。如需任何帮助,请联系我们。', + custom_domain: + '通过升级到付费计划解锁自定义域功能和一系列高级福利。如需任何帮助,请联系我们。', + social_connectors: + '已达到的{{count, number}}个社交连接器限制。为满足您团队的需求,请升级计划以获取额外的社交连接器,并可以使用 OIDC、OAuth 2.0 和 SAML 协议创建您自己的连接器。如需任何帮助,请联系我们。', + social_connectors_other: + '已达到的{{count, number}}个社交连接器限制。为满足您团队的需求,请升级计划以获取额外的社交连接器,并可以使用 OIDC、OAuth 2.0 和 SAML 协议创建您自己的连接器。如需任何帮助,请联系我们。', + standard_connectors_feature: + '升级到付费计划以使用 OIDC、OAuth 2.0 和 SAML 协议创建您自己的连接器,并获得无限社交连接器和所有高级功能。如需任何帮助,请联系我们。', + standard_connectors: + '已达到的{{count, number}}个社交连接器限制。为满足您团队的需求,请升级计划以获取额外的社交连接器,并可以使用 OIDC、OAuth 2.0 和 SAML 协议创建您自己的连接器。如需任何帮助,请联系我们。', + standard_connectors_other: + '已达到的{{count, number}}个社交连接器限制。为满足您团队的需求,请升级计划以获取额外的社交连接器,并可以使用 OIDC、OAuth 2.0 和 SAML 协议创建您自己的连接器。如需任何帮助,请联系我们。', + standard_connectors_pro: + '已达到的{{count, number}}个标准连接器限制。为满足您团队的需求,请升级至企业版计划以获取额外的社交连接器,并可以使用 OIDC、OAuth 2.0 和 SAML 协议创建您自己的连接器。如需任何帮助,请联系我们。', + standard_connectors_pro_other: + '已达到的{{count, number}}个标准连接器限制。为满足您团队的需求,请升级至企业版计划以获取额外的社交连接器,并可以使用 OIDC、OAuth 2.0 和 SAML 协议创建您自己的连接器。如需任何帮助,请联系我们。', + roles: + '已达到的{{count, number}}个角色限制。升级计划以添加额外的角色和权限。如需任何帮助,请联系我们。', + roles_other: + '已达到的{{count, number}}个角色限制。升级计划以添加额外的角色和权限。如需任何帮助,请联系我们。', + scopes_per_role: + '已达到的{{count, number}}个角色每个权限限制。升级计划以添加额外的角色和权限。如需任何帮助,请联系我们。', + scopes_per_role_other: + '已达到的{{count, number}}个角色每个权限限制。升级计划以添加额外的角色和权限。如需任何帮助,请联系我们。', + hooks: + '已达到的{{count, number}}个 Webhook 限制。升级计划以创建更多 Webhook。如需任何帮助,请联系我们。', + hooks_other: + '已达到的{{count, number}}个 Webhook 限制。升级计划以创建更多 Webhook。如需任何帮助,请联系我们。', +}; + +export default Object.freeze(paywall); diff --git a/packages/phrases/src/locales/zh-hk/errors/password.ts b/packages/phrases/src/locales/zh-hk/errors/password.ts index 9b55a84d1..bb11fd38e 100644 --- a/packages/phrases/src/locales/zh-hk/errors/password.ts +++ b/packages/phrases/src/locales/zh-hk/errors/password.ts @@ -1,8 +1,7 @@ const password = { unsupported_encryption_method: '不支持的加密方法 {{name}}', pepper_not_found: '密碼 pepper 未找到。請檢查 core 的環境變量。', - /** UNTRANSLATED */ - rejected: 'Password rejected. Please check if your password meets the requirements.', + rejected: '密碼被拒絕。請檢查您的密碼是否符合要求。', }; export default Object.freeze(password); diff --git a/packages/phrases/src/locales/zh-hk/errors/sign-in-experiences.ts b/packages/phrases/src/locales/zh-hk/errors/sign-in-experiences.ts index 96741b3a6..3c5b3903a 100644 --- a/packages/phrases/src/locales/zh-hk/errors/sign-in-experiences.ts +++ b/packages/phrases/src/locales/zh-hk/errors/sign-in-experiences.ts @@ -1,19 +1,17 @@ const sign_in_experiences = { - empty_content_url_of_terms_of_use: '你啟用咗「使用條款」,請加入使用條款 URL。', - empty_social_connectors: '你啟用咗社交登錄嘅方式。請至少揀一個社交連接器。', - enabled_connector_not_found: '未搵到咗已啟用嘅 {{type}} 連接器', + empty_content_url_of_terms_of_use: '你啟用了「使用條款」,請加入使用條款 URL。', + empty_social_connectors: '你啟用了社交登錄的方式。請至少選擇一個社交連接器。', + enabled_connector_not_found: '未找到已啟用的 {{type}} 連接器', not_one_and_only_one_primary_sign_in_method: - '主要嘅登錄方式一定要有並且只有一個,請檢查你嘅輸入。', + '主要的登錄方式一定要有且只能有一個,請檢查你的輸入。', username_requires_password: '必須為用戶名註冊標識符啟用設置密碼。', passwordless_requires_verify: '必須為電郵/電話註冊標識符啟用驗證。', miss_sign_up_identifier_in_sign_in: '登錄方法一定要包含註冊標識符。', - password_sign_in_must_be_enabled: '必須喺註冊中要求設置密碼時啟用密碼登錄。', - code_sign_in_must_be_enabled: '必須喺註冊中唔要求設置密碼時啟用驗證碼登錄。', - unsupported_default_language: '{{language}} 無法選擇做默認語言。', - at_least_one_authentication_factor: '至少要揀一個登錄要素', - /** UNTRANSLATED */ + password_sign_in_must_be_enabled: '必須在註冊中要求設置密碼時啟用密碼登錄。', + code_sign_in_must_be_enabled: '必須在註冊中不要求設置密碼時啟用驗證碼登錄。', + unsupported_default_language: '{{language}} 無法選擇作為默認語言。', + at_least_one_authentication_factor: '至少要選擇一個登錄要素', backup_code_cannot_be_enabled_alone: 'Backup code cannot be enabled alone.', - /** UNTRANSLATED */ duplicated_mfa_factors: 'Duplicated MFA factors.', }; diff --git a/packages/phrases/src/locales/zh-hk/translation/admin-console/index.ts b/packages/phrases/src/locales/zh-hk/translation/admin-console/index.ts index 9ef581c33..502e5919c 100644 --- a/packages/phrases/src/locales/zh-hk/translation/admin-console/index.ts +++ b/packages/phrases/src/locales/zh-hk/translation/admin-console/index.ts @@ -28,7 +28,7 @@ import tab_sections from './tab-sections.js'; import tabs from './tabs.js'; import tenants from './tenants.js'; import topbar from './topbar.js'; -import upsell from './upsell.js'; +import upsell from './upsell/index.js'; import user_details from './user-details.js'; import users from './users.js'; import webhook_details from './webhook-details.js'; diff --git a/packages/phrases/src/locales/zh-hk/translation/admin-console/sign-in-exp/index.ts b/packages/phrases/src/locales/zh-hk/translation/admin-console/sign-in-exp/index.ts index 6efaba52c..9788ff06a 100644 --- a/packages/phrases/src/locales/zh-hk/translation/admin-console/sign-in-exp/index.ts +++ b/packages/phrases/src/locales/zh-hk/translation/admin-console/sign-in-exp/index.ts @@ -10,8 +10,7 @@ const sign_in_exp = { branding: '品牌', sign_up_and_sign_in: '註冊與登錄', content: '內容', - /** UNTRANSLATED */ - password_policy: 'Password policy', + password_policy: '密碼政策', }, welcome: { title: '自定義登錄體驗', diff --git a/packages/phrases/src/locales/zh-hk/translation/admin-console/sign-in-exp/password-policy.ts b/packages/phrases/src/locales/zh-hk/translation/admin-console/sign-in-exp/password-policy.ts index f54c9f77b..a44d682fb 100644 --- a/packages/phrases/src/locales/zh-hk/translation/admin-console/sign-in-exp/password-policy.ts +++ b/packages/phrases/src/locales/zh-hk/translation/admin-console/sign-in-exp/password-policy.ts @@ -1,45 +1,24 @@ const password_policy = { - /** UNTRANSLATED */ - password_requirements: 'Password requirements', - /** UNTRANSLATED */ - minimum_length: 'Minimum length', - /** UNTRANSLATED */ - minimum_length_description: 'NIST suggests using at least 8 characters for web products.', - /** UNTRANSLATED */ - minimum_length_error: 'Minimum length must be between {{min}} and {{max}} (inclusive).', - /** UNTRANSLATED */ - minimum_required_char_types: 'Minimum required character types', - /** UNTRANSLATED */ + password_requirements: '密碼要求', + minimum_length: '最小長度', + minimum_length_description: 'NIST 建議在 Web 產品中使用至少 8 個字符。', + minimum_length_error: '最小長度必須介於{{min}}和{{max}}之間(包括{{min}}和{{max}})。', + minimum_required_char_types: '最小所需字符類型', minimum_required_char_types_description: - 'Character types: uppercase (A-Z), lowercase (a-z), numbers (0-9), and special symbols ({{symbols}}).', - /** UNTRANSLATED */ - password_rejection: 'Password rejection', - /** UNTRANSLATED */ - compromised_passwords: 'Reject compromised password', - /** UNTRANSLATED */ - breached_passwords: 'Breached passwords', - /** UNTRANSLATED */ - breached_passwords_description: 'Reject passwords previously found in breach databases.', - /** UNTRANSLATED */ - restricted_phrases: 'Restrict low-security phrases', - /** UNTRANSLATED */ - restricted_phrases_tooltip: - 'Users cannot use passwords that are exactly the same as or made up of the listed phrases below. The addition of 3 or more non-consecutive characters is allowed to increase password complexity.', - /** UNTRANSLATED */ - repetitive_or_sequential_characters: 'Repetitive or sequential characters', - /** UNTRANSLATED */ - repetitive_or_sequential_characters_description: 'E.g., "AAAA", "1234", and "abcd".', - /** UNTRANSLATED */ - user_information: 'User information', - /** UNTRANSLATED */ - user_information_description: 'E.g., email address, phone number, username, etc.', - /** UNTRANSLATED */ - custom_words: 'Custom words', - /** UNTRANSLATED */ - custom_words_description: - 'Personalize context-specific words, case-insensitive, and one per line.', - /** UNTRANSLATED */ - custom_words_placeholder: 'Your service name, company name, etc.', + '字符類型:大寫字母(A-Z)、小寫字母(a-z)、數字(0-9)和特殊符號({{symbols}})。', + password_rejection: '密碼拒絕設置', + compromised_passwords: '拒絕被破解的密碼', + breached_passwords: '洩露的密碼', + breached_passwords_description: '拒絕之前在洩露數據庫中出現的密碼。', + restricted_phrases: '限制低安全性短語', + restricted_phrases_tooltip: '密碼應該避免使用這些短語,除非結合至少 3 個或更多的額外字符。', + repetitive_or_sequential_characters: '重複或連續字符', + repetitive_or_sequential_characters_description: '例如:"AAAA"、"1234"和"abcd"。', + user_information: '用戶信息', + user_information_description: '例如:郵件地址、電話號碼、用戶名等等。', + custom_words: '自定義詞彙', + custom_words_description: '個性化上下文特定的詞彙,不區分大小寫,每行一個詞。', + custom_words_placeholder: '您的服務名稱、公司名稱等等。', }; export default Object.freeze(password_policy); diff --git a/packages/phrases/src/locales/zh-hk/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts b/packages/phrases/src/locales/zh-hk/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts index 5cebc7e3b..6788b8394 100644 --- a/packages/phrases/src/locales/zh-hk/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts +++ b/packages/phrases/src/locales/zh-hk/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts @@ -48,13 +48,10 @@ const sign_up_and_sign_in = { '因註冊設置裏你啟用了{{identifier}}標識。這些信息在用戶登錄時,屬於必選項。', }, advanced_options: { - /** UNTRANSLATED */ - title: 'ADVANCED OPTIONS', - /** UNTRANSLATED */ - enable_user_registration: 'Enable user registration', - /** UNTRANSLATED */ + title: '進階選項', + enable_user_registration: '啟用用戶註冊', enable_user_registration_description: - 'Enable or disallow user registration. Once disabled, users can still be added in the admin console but users can no longer establish accounts through the sign-in UI.', + '啟用或禁止用戶註冊。禁用後,管理控制台仍然可以添加用戶,但用戶無法通過登錄界面建立帳戶。', }, }; diff --git a/packages/phrases/src/locales/zh-hk/translation/admin-console/upsell.ts b/packages/phrases/src/locales/zh-hk/translation/admin-console/upsell.ts deleted file mode 100644 index bba4d50b3..000000000 --- a/packages/phrases/src/locales/zh-hk/translation/admin-console/upsell.ts +++ /dev/null @@ -1,87 +0,0 @@ -const upsell = { - pro_tag: 'PRO', - upgrade_plan: '升級計劃', - compare_plans: '比較計劃', - get_started: { - title: '通過免費計劃開始您無縫的身份之旅!', - description: - '免費計劃非常適合在您的邊项目或試用中嘗試Logto。為了充分利用Logto團隊的功能,升級並獲得對高級功能的無限訪問:無限MAU使用、機器對機器集成、RBAC管理、長期審計日志等。 查看所有計劃', - }, - create_tenant: { - title: '選擇您的租戶計劃', - description: - 'Logto 提供創新且經濟實惠的定價計劃,旨在為不斷發展的公司提供競爭優勢。 了解更多', - base_price: '基礎價格', - monthly_price: '每月 {{value, number}}', - mau_unit_price: 'MAU 單價', - view_all_features: '查看所有功能', - select_plan: '選擇', - free_tenants_limit: '最多{{count, number}}個免費租戶', - free_tenants_limit_other: '最多{{count, number}}個免費租戶', - most_popular: '最受歡迎', - upgrade_success: '成功升級至', - }, - paywall: { - applications: - '已達到 的{{count, number}}個應用程式限制。升級計劃以滿足團隊需求。如需任何協助,歡迎聯絡我們。', - applications_other: - '已達到 的{{count, number}}個應用程式限制。升級計劃以滿足團隊需求。如需任何協助,歡迎聯絡我們。', - machine_to_machine_feature: - '升級到付費計劃以創建機器對機器應用,並獲得所有高級功能的訪問權限。如需協助,歡迎聯絡我們。', - machine_to_machine: - '已達到 的{{count, number}}個機器對機器應用程式限制。升級計劃以滿足團隊需求。如需任何協助,歡迎聯絡我們。', - machine_to_machine_other: - '已達到 的{{count, number}}個機器對機器應用程式限制。升級計劃以滿足團隊需求。如需任何協助,歡迎聯絡我們。', - resources: - '已達到的{{count, number}}個 API 資源限制。升級計劃以滿足您團隊的需求。聯繫我們尋求幫助。', - resources_other: - '已達到的{{count, number}}個 API 資源限制。升級計劃以滿足您團隊的需求。聯繫我們尋求幫助。', - scopes_per_resource: - '已達到的{{count, number}}個 API 資源每個權限限制。立即升級以擴展。如需任何幫助,請聯繫我們。', - scopes_per_resource_other: - '已達到的{{count, number}}個 API 資源每個權限限制。立即升級以擴展。如需任何幫助,請聯繫我們。', - custom_domain: - '通過升級到付費計劃解鎖自定義域功能和一系列高級福利。如需任何幫助,請聯繫我們。', - social_connectors: - '已達到的{{count, number}}個社交連接器限制。為滿足您團隊的需求,請升級計劃以獲取額外的社交連接器,並可以使用 OIDC、OAuth 2.0 和 SAML 協議創建您自己的連接器。如需任何幫助,請聯繫我們。', - social_connectors_other: - '已達到的{{count, number}}個社交連接器限制。為滿足您團隊的需求,請升級計劃以獲取額外的社交連接器,並可以使用 OIDC、OAuth 2.0 和 SAML 協議創建您自己的連接器。如需任何幫助,請聯繫我們。', - standard_connectors_feature: - '升級到付費計劃以使用 OIDC、OAuth 2.0 和 SAML 協議創建您自己的連接器,並獲得無限社交連接器和所有高級功能。如需任何幫助,請聯繫我們。', - standard_connectors: - '已達到的{{count, number}}個社交連接器限制。為滿足您團隊的需求,請升級計劃以獲取額外的社交連接器,並可以使用 OIDC、OAuth 2.0 和 SAML 協議創建您自己的連接器。如需任何幫助,請聯繫我們。', - standard_connectors_other: - '已達到的{{count, number}}個社交連接器限制。為滿足您團隊的需求,請升級計劃以獲取額外的社交連接器,並可以使用 OIDC、OAuth 2.0 和 SAML 協議創建您自己的連接器。如需任何幫助,請聯繫我們。', - standard_connectors_pro: - '已達到的{{count, number}}個標準連接器限制。為滿足您團隊的需求,請升級至企業版計劃以獲取額外的社交連接器,並可以使用 OIDC、OAuth 2.0 和 SAML 協議創建您自己的連接器。如需任何幫助,請聯繫我們。', - standard_connectors_pro_other: - '已達到的{{count, number}}個標準連接器限制。為滿足您團隊的需求,請升級至企業版計劃以獲取額外的社交連接器,並可以使用 OIDC、OAuth 2.0 和 SAML 協議創建您自己的連接器。如需任何幫助,請聯繫我們。', - roles: - '已達到的{{count, number}}個角色限制。升級計劃以添加額外的角色和權限。如需任何幫助,請聯繫我們。', - roles_other: - '已達到的{{count, number}}個角色限制。升級計劃以添加額外的角色和權限。如需任何幫助,請聯繫我們。', - scopes_per_role: - '已達到的{{count, number}}個角色每個權限限制。升級計劃以添加額外的角色和權限。如需任何幫助,請聯繫我們。', - scopes_per_role_other: - '已達到的{{count, number}}個角色每個權限限制。升級計劃以添加額外的角色和權限。如需任何幫助,請聯繫我們。', - hooks: - '已達到的{{count, number}}個 Webhook 限制。升級計劃以創建更多 Webhook。如需任何幫助,請聯繫我們。', - hooks_other: - '已達到的{{count, number}}個 Webhook 限制。升級計劃以創建更多 Webhook。如需任何幫助,請聯繫我們。', - }, - mau_exceeded_modal: { - title: 'MAU 超過限制,請升級您的計劃。', - notification: - '您當前的 MAU 已超過的限制。請立即升級到高級計劃,以避免 Logto 服務的暫停。', - update_plan: '更新計劃', - }, - payment_overdue_modal: { - title: '賬單逾期未付', - notification: - '糟糕!租戶{{name}}的賬單支付失敗。請儘快支付賬單,以避免Logto服務中止。', - unpaid_bills: '未付賬單', - update_payment: '更新支付', - }, -}; - -export default Object.freeze(upsell); diff --git a/packages/phrases/src/locales/zh-hk/translation/admin-console/upsell/index.ts b/packages/phrases/src/locales/zh-hk/translation/admin-console/upsell/index.ts new file mode 100644 index 000000000..bf1740edf --- /dev/null +++ b/packages/phrases/src/locales/zh-hk/translation/admin-console/upsell/index.ts @@ -0,0 +1,42 @@ +import paywall from './paywall.js'; + +const upsell = { + pro_tag: 'PRO', + upgrade_plan: '升級計劃', + compare_plans: '比較計劃', + get_started: { + title: '通過免費計劃開始您無縫的身份之旅!', + description: + '免費計劃非常適合在您的邊项目或試用中嘗試Logto。為了充分利用Logto團隊的功能,升級並獲得對高級功能的無限訪問:無限MAU使用、機器對機器集成、RBAC管理、長期審計日志等。 查看所有計劃', + }, + create_tenant: { + title: '選擇您的租戶計劃', + description: + 'Logto 提供創新且經濟實惠的定價計劃,旨在為不斷發展的公司提供競爭優勢。 了解更多', + base_price: '基礎價格', + monthly_price: '每月 {{value, number}}', + mau_unit_price: 'MAU 單價', + view_all_features: '查看所有功能', + select_plan: '選擇', + free_tenants_limit: '最多{{count, number}}個免費租戶', + free_tenants_limit_other: '最多{{count, number}}個免費租戶', + most_popular: '最受歡迎', + upgrade_success: '成功升級至', + }, + mau_exceeded_modal: { + title: 'MAU 超過限制,請升級您的計劃。', + notification: + '您當前的 MAU 已超過的限制。請立即升級到高級計劃,以避免 Logto 服務的暫停。', + update_plan: '更新計劃', + }, + payment_overdue_modal: { + title: '賬單逾期未付', + notification: + '糟糕!租戶{{name}}的賬單支付失敗。請儘快支付賬單,以避免Logto服務中止。', + unpaid_bills: '未付賬單', + update_payment: '更新支付', + }, + paywall, +}; + +export default Object.freeze(upsell); diff --git a/packages/phrases/src/locales/zh-hk/translation/admin-console/upsell/paywall.ts b/packages/phrases/src/locales/zh-hk/translation/admin-console/upsell/paywall.ts new file mode 100644 index 000000000..af6dc390e --- /dev/null +++ b/packages/phrases/src/locales/zh-hk/translation/admin-console/upsell/paywall.ts @@ -0,0 +1,50 @@ +const paywall = { + applications: + '已達到 的{{count, number}}個應用程式限制。升級計劃以滿足團隊需求。如需任何協助,歡迎聯絡我們。', + applications_other: + '已達到 的{{count, number}}個應用程式限制。升級計劃以滿足團隊需求。如需任何協助,歡迎聯絡我們。', + machine_to_machine_feature: + '升級到付費計劃以創建機器對機器應用,並獲得所有高級功能的訪問權限。如需協助,歡迎聯絡我們。', + machine_to_machine: + '已達到 的{{count, number}}個機器對機器應用程式限制。升級計劃以滿足團隊需求。如需任何協助,歡迎聯絡我們。', + machine_to_machine_other: + '已達到 的{{count, number}}個機器對機器應用程式限制。升級計劃以滿足團隊需求。如需任何協助,歡迎聯絡我們。', + resources: + '已達到的{{count, number}}個 API 資源限制。升級計劃以滿足您團隊的需求。聯繫我們尋求幫助。', + resources_other: + '已達到的{{count, number}}個 API 資源限制。升級計劃以滿足您團隊的需求。聯繫我們尋求幫助。', + scopes_per_resource: + '已達到的{{count, number}}個 API 資源每個權限限制。立即升級以擴展。如需任何幫助,請聯繫我們。', + scopes_per_resource_other: + '已達到的{{count, number}}個 API 資源每個權限限制。立即升級以擴展。如需任何幫助,請聯繫我們。', + custom_domain: + '通過升級到付費計劃解鎖自定義域功能和一系列高級福利。如需任何幫助,請聯繫我們。', + social_connectors: + '已達到的{{count, number}}個社交連接器限制。為滿足您團隊的需求,請升級計劃以獲取額外的社交連接器,並可以使用 OIDC、OAuth 2.0 和 SAML 協議創建您自己的連接器。如需任何幫助,請聯繫我們。', + social_connectors_other: + '已達到的{{count, number}}個社交連接器限制。為滿足您團隊的需求,請升級計劃以獲取額外的社交連接器,並可以使用 OIDC、OAuth 2.0 和 SAML 協議創建您自己的連接器。如需任何幫助,請聯繫我們。', + standard_connectors_feature: + '升級到付費計劃以使用 OIDC、OAuth 2.0 和 SAML 協議創建您自己的連接器,並獲得無限社交連接器和所有高級功能。如需任何幫助,請聯繫我們。', + standard_connectors: + '已達到的{{count, number}}個社交連接器限制。為滿足您團隊的需求,請升級計劃以獲取額外的社交連接器,並可以使用 OIDC、OAuth 2.0 和 SAML 協議創建您自己的連接器。如需任何幫助,請聯繫我們。', + standard_connectors_other: + '已達到的{{count, number}}個社交連接器限制。為滿足您團隊的需求,請升級計劃以獲取額外的社交連接器,並可以使用 OIDC、OAuth 2.0 和 SAML 協議創建您自己的連接器。如需任何幫助,請聯繫我們。', + standard_connectors_pro: + '已達到的{{count, number}}個標準連接器限制。為滿足您團隊的需求,請升級至企業版計劃以獲取額外的社交連接器,並可以使用 OIDC、OAuth 2.0 和 SAML 協議創建您自己的連接器。如需任何幫助,請聯繫我們。', + standard_connectors_pro_other: + '已達到的{{count, number}}個標準連接器限制。為滿足您團隊的需求,請升級至企業版計劃以獲取額外的社交連接器,並可以使用 OIDC、OAuth 2.0 和 SAML 協議創建您自己的連接器。如需任何幫助,請聯繫我們。', + roles: + '已達到的{{count, number}}個角色限制。升級計劃以添加額外的角色和權限。如需任何幫助,請聯繫我們。', + roles_other: + '已達到的{{count, number}}個角色限制。升級計劃以添加額外的角色和權限。如需任何幫助,請聯繫我們。', + scopes_per_role: + '已達到的{{count, number}}個角色每個權限限制。升級計劃以添加額外的角色和權限。如需任何幫助,請聯繫我們。', + scopes_per_role_other: + '已達到的{{count, number}}個角色每個權限限制。升級計劃以添加額外的角色和權限。如需任何幫助,請聯繫我們。', + hooks: + '已達到的{{count, number}}個 Webhook 限制。升級計劃以創建更多 Webhook。如需任何幫助,請聯繫我們。', + hooks_other: + '已達到的{{count, number}}個 Webhook 限制。升級計劃以創建更多 Webhook。如需任何幫助,請聯繫我們。', +}; + +export default Object.freeze(paywall); diff --git a/packages/phrases/src/locales/zh-tw/errors/password.ts b/packages/phrases/src/locales/zh-tw/errors/password.ts index 6e105bc52..e2205cc3c 100644 --- a/packages/phrases/src/locales/zh-tw/errors/password.ts +++ b/packages/phrases/src/locales/zh-tw/errors/password.ts @@ -1,8 +1,7 @@ const password = { unsupported_encryption_method: '不支持的加密方法 {{name}}', pepper_not_found: '密碼 pepper 未找到。請檢查 core 的環境變數。', - /** UNTRANSLATED */ - rejected: 'Password rejected. Please check if your password meets the requirements.', + rejected: '密碼被拒絕。請檢查密碼是否符合要求。', }; export default Object.freeze(password); diff --git a/packages/phrases/src/locales/zh-tw/errors/sign-in-experiences.ts b/packages/phrases/src/locales/zh-tw/errors/sign-in-experiences.ts index 05295e947..f9e56c626 100644 --- a/packages/phrases/src/locales/zh-tw/errors/sign-in-experiences.ts +++ b/packages/phrases/src/locales/zh-tw/errors/sign-in-experiences.ts @@ -10,10 +10,8 @@ const sign_in_experiences = { code_sign_in_must_be_enabled: '必須在註冊中不要求設置密碼時啟用驗證碼登錄。', unsupported_default_language: '{{language}} 無法選擇為默認語言。', at_least_one_authentication_factor: '至少要選擇一個登錄要素', - /** UNTRANSLATED */ - backup_code_cannot_be_enabled_alone: 'Backup code cannot be enabled alone.', - /** UNTRANSLATED */ - duplicated_mfa_factors: 'Duplicated MFA factors.', + backup_code_cannot_be_enabled_alone: '備份碼不能單獨啟用。', + duplicated_mfa_factors: '重複的MFA要素。', }; export default Object.freeze(sign_in_experiences); diff --git a/packages/phrases/src/locales/zh-tw/translation/admin-console/index.ts b/packages/phrases/src/locales/zh-tw/translation/admin-console/index.ts index 9ef581c33..502e5919c 100644 --- a/packages/phrases/src/locales/zh-tw/translation/admin-console/index.ts +++ b/packages/phrases/src/locales/zh-tw/translation/admin-console/index.ts @@ -28,7 +28,7 @@ import tab_sections from './tab-sections.js'; import tabs from './tabs.js'; import tenants from './tenants.js'; import topbar from './topbar.js'; -import upsell from './upsell.js'; +import upsell from './upsell/index.js'; import user_details from './user-details.js'; import users from './users.js'; import webhook_details from './webhook-details.js'; diff --git a/packages/phrases/src/locales/zh-tw/translation/admin-console/sign-in-exp/index.ts b/packages/phrases/src/locales/zh-tw/translation/admin-console/sign-in-exp/index.ts index 46c18c598..aec872f51 100644 --- a/packages/phrases/src/locales/zh-tw/translation/admin-console/sign-in-exp/index.ts +++ b/packages/phrases/src/locales/zh-tw/translation/admin-console/sign-in-exp/index.ts @@ -10,8 +10,7 @@ const sign_in_exp = { branding: '品牌', sign_up_and_sign_in: '註冊與登錄', content: '內容', - /** UNTRANSLATED */ - password_policy: 'Password policy', + password_policy: '密碼規則', }, welcome: { title: '自定義登錄體驗', diff --git a/packages/phrases/src/locales/zh-tw/translation/admin-console/sign-in-exp/password-policy.ts b/packages/phrases/src/locales/zh-tw/translation/admin-console/sign-in-exp/password-policy.ts index f54c9f77b..00420817a 100644 --- a/packages/phrases/src/locales/zh-tw/translation/admin-console/sign-in-exp/password-policy.ts +++ b/packages/phrases/src/locales/zh-tw/translation/admin-console/sign-in-exp/password-policy.ts @@ -1,45 +1,25 @@ const password_policy = { - /** UNTRANSLATED */ - password_requirements: 'Password requirements', - /** UNTRANSLATED */ - minimum_length: 'Minimum length', - /** UNTRANSLATED */ - minimum_length_description: 'NIST suggests using at least 8 characters for web products.', - /** UNTRANSLATED */ - minimum_length_error: 'Minimum length must be between {{min}} and {{max}} (inclusive).', - /** UNTRANSLATED */ - minimum_required_char_types: 'Minimum required character types', - /** UNTRANSLATED */ + password_requirements: '密碼需求', + minimum_length: '最小長度', + minimum_length_description: + '美國國家標準與技術研究所 (NIST) 建議網路產品需至少使用 8 個字元。', + minimum_length_error: '最小長度必須介於 {{min}} 到 {{max}}(包括)之間。', + minimum_required_char_types: '最低需要的字元類型', minimum_required_char_types_description: - 'Character types: uppercase (A-Z), lowercase (a-z), numbers (0-9), and special symbols ({{symbols}}).', - /** UNTRANSLATED */ - password_rejection: 'Password rejection', - /** UNTRANSLATED */ - compromised_passwords: 'Reject compromised password', - /** UNTRANSLATED */ - breached_passwords: 'Breached passwords', - /** UNTRANSLATED */ - breached_passwords_description: 'Reject passwords previously found in breach databases.', - /** UNTRANSLATED */ - restricted_phrases: 'Restrict low-security phrases', - /** UNTRANSLATED */ - restricted_phrases_tooltip: - 'Users cannot use passwords that are exactly the same as or made up of the listed phrases below. The addition of 3 or more non-consecutive characters is allowed to increase password complexity.', - /** UNTRANSLATED */ - repetitive_or_sequential_characters: 'Repetitive or sequential characters', - /** UNTRANSLATED */ - repetitive_or_sequential_characters_description: 'E.g., "AAAA", "1234", and "abcd".', - /** UNTRANSLATED */ - user_information: 'User information', - /** UNTRANSLATED */ - user_information_description: 'E.g., email address, phone number, username, etc.', - /** UNTRANSLATED */ - custom_words: 'Custom words', - /** UNTRANSLATED */ - custom_words_description: - 'Personalize context-specific words, case-insensitive, and one per line.', - /** UNTRANSLATED */ - custom_words_placeholder: 'Your service name, company name, etc.', + '字元類型:大寫字母(A-Z)、小寫字母(a-z)、數字(0-9)和特殊符號({{symbols}})。', + password_rejection: '拒絕密碼', + compromised_passwords: '拒絕已破解的密碼', + breached_passwords: '遭破解的密碼', + breached_passwords_description: '拒絕之前在密碼洩漏資料庫中找到的密碼。', + restricted_phrases: '限制低安全性片語', + restricted_phrases_tooltip: '除非您結合 3 個或更多的額外字元,否則密碼應避免使用這些片語。', + repetitive_or_sequential_characters: '重複或連續字元', + repetitive_or_sequential_characters_description: '例如:“AAAA”,“1234”,和“abcd”。', + user_information: '用戶資訊', + user_information_description: '例如,電子郵件地址,電話號碼,用戶名等。', + custom_words: '自訂字詞', + custom_words_description: '個性化上下文相關的字詞,不區分大小寫,每行一個。', + custom_words_placeholder: '您的服務名稱,公司名稱等。', }; export default Object.freeze(password_policy); diff --git a/packages/phrases/src/locales/zh-tw/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts b/packages/phrases/src/locales/zh-tw/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts index 9b9561f15..72dcf9ccf 100644 --- a/packages/phrases/src/locales/zh-tw/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts +++ b/packages/phrases/src/locales/zh-tw/translation/admin-console/sign-in-exp/sign-up-and-sign-in.ts @@ -47,13 +47,10 @@ const sign_up_and_sign_in = { delete_sign_in_method: '因註冊設置啟用了{{identifier}}標誌。在使用者登入時,這些資訊是必填的。', }, advanced_options: { - /** UNTRANSLATED */ - title: 'ADVANCED OPTIONS', - /** UNTRANSLATED */ - enable_user_registration: 'Enable user registration', - /** UNTRANSLATED */ + title: '進階選項', + enable_user_registration: '啟用使用者註冊', enable_user_registration_description: - 'Enable or disallow user registration. Once disabled, users can still be added in the admin console but users can no longer establish accounts through the sign-in UI.', + '啟用或禁止使用者註冊。禁用後,管理員仍然可以新增使用者,但無法透過登入界面建立帳戶。', }, }; diff --git a/packages/phrases/src/locales/zh-tw/translation/admin-console/upsell.ts b/packages/phrases/src/locales/zh-tw/translation/admin-console/upsell.ts deleted file mode 100644 index bba4d50b3..000000000 --- a/packages/phrases/src/locales/zh-tw/translation/admin-console/upsell.ts +++ /dev/null @@ -1,87 +0,0 @@ -const upsell = { - pro_tag: 'PRO', - upgrade_plan: '升級計劃', - compare_plans: '比較計劃', - get_started: { - title: '通過免費計劃開始您無縫的身份之旅!', - description: - '免費計劃非常適合在您的邊项目或試用中嘗試Logto。為了充分利用Logto團隊的功能,升級並獲得對高級功能的無限訪問:無限MAU使用、機器對機器集成、RBAC管理、長期審計日志等。 查看所有計劃', - }, - create_tenant: { - title: '選擇您的租戶計劃', - description: - 'Logto 提供創新且經濟實惠的定價計劃,旨在為不斷發展的公司提供競爭優勢。 了解更多', - base_price: '基礎價格', - monthly_price: '每月 {{value, number}}', - mau_unit_price: 'MAU 單價', - view_all_features: '查看所有功能', - select_plan: '選擇', - free_tenants_limit: '最多{{count, number}}個免費租戶', - free_tenants_limit_other: '最多{{count, number}}個免費租戶', - most_popular: '最受歡迎', - upgrade_success: '成功升級至', - }, - paywall: { - applications: - '已達到 的{{count, number}}個應用程式限制。升級計劃以滿足團隊需求。如需任何協助,歡迎聯絡我們。', - applications_other: - '已達到 的{{count, number}}個應用程式限制。升級計劃以滿足團隊需求。如需任何協助,歡迎聯絡我們。', - machine_to_machine_feature: - '升級到付費計劃以創建機器對機器應用,並獲得所有高級功能的訪問權限。如需協助,歡迎聯絡我們。', - machine_to_machine: - '已達到 的{{count, number}}個機器對機器應用程式限制。升級計劃以滿足團隊需求。如需任何協助,歡迎聯絡我們。', - machine_to_machine_other: - '已達到 的{{count, number}}個機器對機器應用程式限制。升級計劃以滿足團隊需求。如需任何協助,歡迎聯絡我們。', - resources: - '已達到的{{count, number}}個 API 資源限制。升級計劃以滿足您團隊的需求。聯繫我們尋求幫助。', - resources_other: - '已達到的{{count, number}}個 API 資源限制。升級計劃以滿足您團隊的需求。聯繫我們尋求幫助。', - scopes_per_resource: - '已達到的{{count, number}}個 API 資源每個權限限制。立即升級以擴展。如需任何幫助,請聯繫我們。', - scopes_per_resource_other: - '已達到的{{count, number}}個 API 資源每個權限限制。立即升級以擴展。如需任何幫助,請聯繫我們。', - custom_domain: - '通過升級到付費計劃解鎖自定義域功能和一系列高級福利。如需任何幫助,請聯繫我們。', - social_connectors: - '已達到的{{count, number}}個社交連接器限制。為滿足您團隊的需求,請升級計劃以獲取額外的社交連接器,並可以使用 OIDC、OAuth 2.0 和 SAML 協議創建您自己的連接器。如需任何幫助,請聯繫我們。', - social_connectors_other: - '已達到的{{count, number}}個社交連接器限制。為滿足您團隊的需求,請升級計劃以獲取額外的社交連接器,並可以使用 OIDC、OAuth 2.0 和 SAML 協議創建您自己的連接器。如需任何幫助,請聯繫我們。', - standard_connectors_feature: - '升級到付費計劃以使用 OIDC、OAuth 2.0 和 SAML 協議創建您自己的連接器,並獲得無限社交連接器和所有高級功能。如需任何幫助,請聯繫我們。', - standard_connectors: - '已達到的{{count, number}}個社交連接器限制。為滿足您團隊的需求,請升級計劃以獲取額外的社交連接器,並可以使用 OIDC、OAuth 2.0 和 SAML 協議創建您自己的連接器。如需任何幫助,請聯繫我們。', - standard_connectors_other: - '已達到的{{count, number}}個社交連接器限制。為滿足您團隊的需求,請升級計劃以獲取額外的社交連接器,並可以使用 OIDC、OAuth 2.0 和 SAML 協議創建您自己的連接器。如需任何幫助,請聯繫我們。', - standard_connectors_pro: - '已達到的{{count, number}}個標準連接器限制。為滿足您團隊的需求,請升級至企業版計劃以獲取額外的社交連接器,並可以使用 OIDC、OAuth 2.0 和 SAML 協議創建您自己的連接器。如需任何幫助,請聯繫我們。', - standard_connectors_pro_other: - '已達到的{{count, number}}個標準連接器限制。為滿足您團隊的需求,請升級至企業版計劃以獲取額外的社交連接器,並可以使用 OIDC、OAuth 2.0 和 SAML 協議創建您自己的連接器。如需任何幫助,請聯繫我們。', - roles: - '已達到的{{count, number}}個角色限制。升級計劃以添加額外的角色和權限。如需任何幫助,請聯繫我們。', - roles_other: - '已達到的{{count, number}}個角色限制。升級計劃以添加額外的角色和權限。如需任何幫助,請聯繫我們。', - scopes_per_role: - '已達到的{{count, number}}個角色每個權限限制。升級計劃以添加額外的角色和權限。如需任何幫助,請聯繫我們。', - scopes_per_role_other: - '已達到的{{count, number}}個角色每個權限限制。升級計劃以添加額外的角色和權限。如需任何幫助,請聯繫我們。', - hooks: - '已達到的{{count, number}}個 Webhook 限制。升級計劃以創建更多 Webhook。如需任何幫助,請聯繫我們。', - hooks_other: - '已達到的{{count, number}}個 Webhook 限制。升級計劃以創建更多 Webhook。如需任何幫助,請聯繫我們。', - }, - mau_exceeded_modal: { - title: 'MAU 超過限制,請升級您的計劃。', - notification: - '您當前的 MAU 已超過的限制。請立即升級到高級計劃,以避免 Logto 服務的暫停。', - update_plan: '更新計劃', - }, - payment_overdue_modal: { - title: '賬單逾期未付', - notification: - '糟糕!租戶{{name}}的賬單支付失敗。請儘快支付賬單,以避免Logto服務中止。', - unpaid_bills: '未付賬單', - update_payment: '更新支付', - }, -}; - -export default Object.freeze(upsell); diff --git a/packages/phrases/src/locales/zh-tw/translation/admin-console/upsell/index.ts b/packages/phrases/src/locales/zh-tw/translation/admin-console/upsell/index.ts new file mode 100644 index 000000000..bf1740edf --- /dev/null +++ b/packages/phrases/src/locales/zh-tw/translation/admin-console/upsell/index.ts @@ -0,0 +1,42 @@ +import paywall from './paywall.js'; + +const upsell = { + pro_tag: 'PRO', + upgrade_plan: '升級計劃', + compare_plans: '比較計劃', + get_started: { + title: '通過免費計劃開始您無縫的身份之旅!', + description: + '免費計劃非常適合在您的邊项目或試用中嘗試Logto。為了充分利用Logto團隊的功能,升級並獲得對高級功能的無限訪問:無限MAU使用、機器對機器集成、RBAC管理、長期審計日志等。 查看所有計劃', + }, + create_tenant: { + title: '選擇您的租戶計劃', + description: + 'Logto 提供創新且經濟實惠的定價計劃,旨在為不斷發展的公司提供競爭優勢。 了解更多', + base_price: '基礎價格', + monthly_price: '每月 {{value, number}}', + mau_unit_price: 'MAU 單價', + view_all_features: '查看所有功能', + select_plan: '選擇', + free_tenants_limit: '最多{{count, number}}個免費租戶', + free_tenants_limit_other: '最多{{count, number}}個免費租戶', + most_popular: '最受歡迎', + upgrade_success: '成功升級至', + }, + mau_exceeded_modal: { + title: 'MAU 超過限制,請升級您的計劃。', + notification: + '您當前的 MAU 已超過的限制。請立即升級到高級計劃,以避免 Logto 服務的暫停。', + update_plan: '更新計劃', + }, + payment_overdue_modal: { + title: '賬單逾期未付', + notification: + '糟糕!租戶{{name}}的賬單支付失敗。請儘快支付賬單,以避免Logto服務中止。', + unpaid_bills: '未付賬單', + update_payment: '更新支付', + }, + paywall, +}; + +export default Object.freeze(upsell); diff --git a/packages/phrases/src/locales/zh-tw/translation/admin-console/upsell/paywall.ts b/packages/phrases/src/locales/zh-tw/translation/admin-console/upsell/paywall.ts new file mode 100644 index 000000000..af6dc390e --- /dev/null +++ b/packages/phrases/src/locales/zh-tw/translation/admin-console/upsell/paywall.ts @@ -0,0 +1,50 @@ +const paywall = { + applications: + '已達到 的{{count, number}}個應用程式限制。升級計劃以滿足團隊需求。如需任何協助,歡迎聯絡我們。', + applications_other: + '已達到 的{{count, number}}個應用程式限制。升級計劃以滿足團隊需求。如需任何協助,歡迎聯絡我們。', + machine_to_machine_feature: + '升級到付費計劃以創建機器對機器應用,並獲得所有高級功能的訪問權限。如需協助,歡迎聯絡我們。', + machine_to_machine: + '已達到 的{{count, number}}個機器對機器應用程式限制。升級計劃以滿足團隊需求。如需任何協助,歡迎聯絡我們。', + machine_to_machine_other: + '已達到 的{{count, number}}個機器對機器應用程式限制。升級計劃以滿足團隊需求。如需任何協助,歡迎聯絡我們。', + resources: + '已達到的{{count, number}}個 API 資源限制。升級計劃以滿足您團隊的需求。聯繫我們尋求幫助。', + resources_other: + '已達到的{{count, number}}個 API 資源限制。升級計劃以滿足您團隊的需求。聯繫我們尋求幫助。', + scopes_per_resource: + '已達到的{{count, number}}個 API 資源每個權限限制。立即升級以擴展。如需任何幫助,請聯繫我們。', + scopes_per_resource_other: + '已達到的{{count, number}}個 API 資源每個權限限制。立即升級以擴展。如需任何幫助,請聯繫我們。', + custom_domain: + '通過升級到付費計劃解鎖自定義域功能和一系列高級福利。如需任何幫助,請聯繫我們。', + social_connectors: + '已達到的{{count, number}}個社交連接器限制。為滿足您團隊的需求,請升級計劃以獲取額外的社交連接器,並可以使用 OIDC、OAuth 2.0 和 SAML 協議創建您自己的連接器。如需任何幫助,請聯繫我們。', + social_connectors_other: + '已達到的{{count, number}}個社交連接器限制。為滿足您團隊的需求,請升級計劃以獲取額外的社交連接器,並可以使用 OIDC、OAuth 2.0 和 SAML 協議創建您自己的連接器。如需任何幫助,請聯繫我們。', + standard_connectors_feature: + '升級到付費計劃以使用 OIDC、OAuth 2.0 和 SAML 協議創建您自己的連接器,並獲得無限社交連接器和所有高級功能。如需任何幫助,請聯繫我們。', + standard_connectors: + '已達到的{{count, number}}個社交連接器限制。為滿足您團隊的需求,請升級計劃以獲取額外的社交連接器,並可以使用 OIDC、OAuth 2.0 和 SAML 協議創建您自己的連接器。如需任何幫助,請聯繫我們。', + standard_connectors_other: + '已達到的{{count, number}}個社交連接器限制。為滿足您團隊的需求,請升級計劃以獲取額外的社交連接器,並可以使用 OIDC、OAuth 2.0 和 SAML 協議創建您自己的連接器。如需任何幫助,請聯繫我們。', + standard_connectors_pro: + '已達到的{{count, number}}個標準連接器限制。為滿足您團隊的需求,請升級至企業版計劃以獲取額外的社交連接器,並可以使用 OIDC、OAuth 2.0 和 SAML 協議創建您自己的連接器。如需任何幫助,請聯繫我們。', + standard_connectors_pro_other: + '已達到的{{count, number}}個標準連接器限制。為滿足您團隊的需求,請升級至企業版計劃以獲取額外的社交連接器,並可以使用 OIDC、OAuth 2.0 和 SAML 協議創建您自己的連接器。如需任何幫助,請聯繫我們。', + roles: + '已達到的{{count, number}}個角色限制。升級計劃以添加額外的角色和權限。如需任何幫助,請聯繫我們。', + roles_other: + '已達到的{{count, number}}個角色限制。升級計劃以添加額外的角色和權限。如需任何幫助,請聯繫我們。', + scopes_per_role: + '已達到的{{count, number}}個角色每個權限限制。升級計劃以添加額外的角色和權限。如需任何幫助,請聯繫我們。', + scopes_per_role_other: + '已達到的{{count, number}}個角色每個權限限制。升級計劃以添加額外的角色和權限。如需任何幫助,請聯繫我們。', + hooks: + '已達到的{{count, number}}個 Webhook 限制。升級計劃以創建更多 Webhook。如需任何幫助,請聯繫我們。', + hooks_other: + '已達到的{{count, number}}個 Webhook 限制。升級計劃以創建更多 Webhook。如需任何幫助,請聯繫我們。', +}; + +export default Object.freeze(paywall);