diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index c90ea45a14..b026e111e5 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,41 +1,33 @@ # Order matters. The last matching pattern takes precedence. -### Core ### -/packages/payload/src/uploads/ @denolfe -/packages/payload/src/admin/ @jmikrut @jacobsfletch @JarrodMFlesch +### Package Exports ### +/**/exports/ @denolfe @jmikrut ### Adapters ### -/packages/db-*/ @denolfe @jmikrut @DanRibbens -/packages/richtext-*/ @denolfe @jmikrut @DanRibbens @AlessioGr +/packages/richtext-*/ @AlessioGr ### Plugins ### -/packages/plugin-*/ @denolfe @jmikrut @DanRibbens /packages/plugin-cloud*/ @denolfe -/packages/plugin-form-builder/ @jacobsfletch -/packages/plugin-live-preview*/ @jacobsfletch -/packages/plugin-nested-docs/ @jacobsfletch -/packages/plugin-redirects/ @jacobsfletch -/packages/plugin-search/ @jacobsfletch -/packages/plugin-sentry/ @JessChowdhury -/packages/plugin-seo/ @jacobsfletch -/packages/plugin-stripe/ @jacobsfletch - -### Examples ### -/examples/ @jacobsfletch -/examples/testing/ @JarrodMFlesch -/examples/email/ @JessChowdhury -/examples/whitelabel/ @JessChowdhury ### Templates ### /templates/ @jacobsfletch @denolfe ### Misc ### /packages/create-payload-app/ @denolfe -/packages/eslint-config-payload/ @denolfe -/packages/payload-admin-bar/ @jacobsfletch +/packages/eslint-*/ @denolfe + +### Build Files ### +/**/package.json @denolfe + +/tsconfig.json @denolfe +/**/tsconfig*.json @denolfe + +/jest.config.js @denolfe +/**/jest.config.js @denolfe ### Root ### /package.json @denolfe /scripts/ @denolfe +/.husky/ @denolfe +/.vscode/ @denolfe /.github/ @denolfe -/.github/CODEOWNERS @denolfe diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 2e4297d0a1..9069bf150e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -4,12 +4,15 @@ on: pull_request: types: [opened, reopened, synchronize] push: - branches: ['main', 'alpha'] + branches: ['main', 'beta'] concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true +env: + NODE_VERSION: 18.20.2 + jobs: changes: runs-on: ubuntu-latest @@ -19,6 +22,10 @@ jobs: needs_build: ${{ steps.filter.outputs.needs_build }} templates: ${{ steps.filter.outputs.templates }} steps: + # https://github.com/actions/virtual-environments/issues/1187 + - name: tune linux network + run: sudo ethtool -K eth0 tx off rx off + - uses: actions/checkout@v4 with: fetch-depth: 25 @@ -49,10 +56,14 @@ jobs: with: fetch-depth: 25 - - name: Use Node.js 18 + # https://github.com/actions/virtual-environments/issues/1187 + - name: tune linux network + run: sudo ethtool -K eth0 tx off rx off + + - name: Setup Node@${{ env.NODE_VERSION }} uses: actions/setup-node@v4 with: - node-version: 18 + node-version: ${{ env.NODE_VERSION }} - name: Install pnpm uses: pnpm/action-setup@v3 @@ -88,13 +99,16 @@ jobs: tests-unit: runs-on: ubuntu-latest needs: build - if: false # Disable until tests are updated for 3.0 steps: - - name: Use Node.js 18 + # https://github.com/actions/virtual-environments/issues/1187 + - name: tune linux network + run: sudo ethtool -K eth0 tx off rx off + + - name: Setup Node@${{ env.NODE_VERSION }} uses: actions/setup-node@v4 with: - node-version: 18 + node-version: ${{ env.NODE_VERSION }} - name: Install pnpm uses: pnpm/action-setup@v3 @@ -136,10 +150,14 @@ jobs: AWS_REGION: us-east-1 steps: - - name: Use Node.js 18 + # https://github.com/actions/virtual-environments/issues/1187 + - name: tune linux network + run: sudo ethtool -K eth0 tx off rx off + + - name: Setup Node@${{ env.NODE_VERSION }} uses: actions/setup-node@v4 with: - node-version: 18 + node-version: ${{ env.NODE_VERSION }} - name: Install pnpm uses: pnpm/action-setup@v3 @@ -221,8 +239,11 @@ jobs: - email - field-error-states - fields-relationship - # - fields - - fields/lexical + - fields + - fields__collections__Blocks + - fields__collections__Array + - fields__collections__Relationship + - fields__collections__Lexical - live-preview - localization - plugin-form-builder @@ -232,10 +253,14 @@ jobs: - uploads steps: - - name: Use Node.js 18 + # https://github.com/actions/virtual-environments/issues/1187 + - name: tune linux network + run: sudo ethtool -K eth0 tx off rx off + + - name: Setup Node@${{ env.NODE_VERSION }} uses: actions/setup-node@v4 with: - node-version: 18 + node-version: ${{ env.NODE_VERSION }} - name: Install pnpm uses: pnpm/action-setup@v3 @@ -269,10 +294,14 @@ jobs: needs: build steps: - - name: Use Node.js 18 + # https://github.com/actions/virtual-environments/issues/1187 + - name: tune linux network + run: sudo ethtool -K eth0 tx off rx off + + - name: Setup Node@${{ env.NODE_VERSION }} uses: actions/setup-node@v4 with: - node-version: 18 + node-version: ${{ env.NODE_VERSION }} - name: Install pnpm uses: pnpm/action-setup@v3 @@ -306,11 +335,14 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 25 + # https://github.com/actions/virtual-environments/issues/1187 + - name: tune linux network + run: sudo ethtool -K eth0 tx off rx off - - name: Use Node.js 18 + - name: Setup Node@${{ env.NODE_VERSION }} uses: actions/setup-node@v4 with: - node-version: 18 + node-version: ${{ env.NODE_VERSION }} - name: Start MongoDB uses: supercharge/mongodb-github-action@1.10.0 diff --git a/.node-version b/.node-version index 60495ee0aa..fb3e6603b5 100644 --- a/.node-version +++ b/.node-version @@ -1 +1 @@ -v18.19.1 +v18.20.2 diff --git a/.nvmrc b/.nvmrc index 60495ee0aa..fb3e6603b5 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v18.19.1 +v18.20.2 diff --git a/.vscode/launch.json b/.vscode/launch.json index 34e2968ddc..6532427795 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -41,6 +41,13 @@ "request": "launch", "type": "node-terminal" }, + { + "command": "node --no-deprecation test/dev.js auth", + "cwd": "${workspaceFolder}", + "name": "Run Dev Auth", + "request": "launch", + "type": "node-terminal" + }, { "command": "pnpm run dev plugin-cloud-storage", "cwd": "${workspaceFolder}", @@ -69,36 +76,26 @@ } }, { - "command": "pnpm run dev versions", + "command": "node --no-deprecation test/dev.js versions", "cwd": "${workspaceFolder}", "name": "Run Dev Versions", "request": "launch", "type": "node-terminal" }, { - "command": "pnpm run dev localization", + "command": "node --no-deprecation test/dev.js localization", "cwd": "${workspaceFolder}", "name": "Run Dev Localization", "request": "launch", "type": "node-terminal" }, { - "command": "pnpm run dev uploads", + "command": "node --no-deprecation test/dev.js uploads", "cwd": "${workspaceFolder}", "name": "Run Dev Uploads", "request": "launch", "type": "node-terminal" }, - { - "command": "PAYLOAD_BUNDLER=vite pnpm run dev fields", - "cwd": "${workspaceFolder}", - "name": "Run Dev Fields (Vite)", - "request": "launch", - "type": "node-terminal", - "env": { - "NODE_ENV": "production" - } - }, { "command": "pnpm run test:int live-preview", "cwd": "${workspaceFolder}", diff --git a/app/(payload)/admin/[[...segments]]/not-found.tsx b/app/(payload)/admin/[[...segments]]/not-found.tsx index 8b7a445fe7..e7723f49a0 100644 --- a/app/(payload)/admin/[[...segments]]/not-found.tsx +++ b/app/(payload)/admin/[[...segments]]/not-found.tsx @@ -3,7 +3,7 @@ import type { Metadata } from 'next' import config from '@payload-config' /* DO NOT MODIFY IT BECAUSE IT COULD BE REWRITTEN AT ANY TIME. */ -import { NotFoundPage, generatePageMetadata } from '@payloadcms/next/views/NotFound/index.js' +import { NotFoundPage, generatePageMetadata } from '@payloadcms/next/views' type Args = { params: { @@ -14,8 +14,8 @@ type Args = { } } -export const generateMetadata = ({ params }: Args): Promise => - generatePageMetadata({ config, params }) +export const generateMetadata = ({ params, searchParams }: Args): Promise => + generatePageMetadata({ config, params, searchParams }) const NotFound = ({ params, searchParams }: Args) => NotFoundPage({ config, params, searchParams }) diff --git a/app/(payload)/admin/[[...segments]]/page.tsx b/app/(payload)/admin/[[...segments]]/page.tsx index ee9bd415c3..61be15c883 100644 --- a/app/(payload)/admin/[[...segments]]/page.tsx +++ b/app/(payload)/admin/[[...segments]]/page.tsx @@ -3,7 +3,7 @@ import type { Metadata } from 'next' import config from '@payload-config' /* DO NOT MODIFY IT BECAUSE IT COULD BE REWRITTEN AT ANY TIME. */ -import { RootPage, generatePageMetadata } from '@payloadcms/next/views/Root/index.js' +import { RootPage, generatePageMetadata } from '@payloadcms/next/views' type Args = { params: { diff --git a/app/(payload)/api/[...slug]/route.ts b/app/(payload)/api/[...slug]/route.ts index eacae29614..282e1ad32f 100644 --- a/app/(payload)/api/[...slug]/route.ts +++ b/app/(payload)/api/[...slug]/route.ts @@ -1,7 +1,7 @@ /* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */ /* DO NOT MODIFY it because it could be re-written at any time. */ import config from '@payload-config' -import { REST_DELETE, REST_GET, REST_PATCH, REST_POST } from '@payloadcms/next/routes/index.js' +import { REST_DELETE, REST_GET, REST_PATCH, REST_POST } from '@payloadcms/next/routes' export const GET = REST_GET(config) export const POST = REST_POST(config) diff --git a/app/(payload)/api/graphql-playground/route.ts b/app/(payload)/api/graphql-playground/route.ts index 7832c8ba92..7b7f279983 100644 --- a/app/(payload)/api/graphql-playground/route.ts +++ b/app/(payload)/api/graphql-playground/route.ts @@ -1,6 +1,6 @@ /* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */ /* DO NOT MODIFY it because it could be re-written at any time. */ import config from '@payload-config' -import { GRAPHQL_PLAYGROUND_GET } from '@payloadcms/next/routes/index.js' +import { GRAPHQL_PLAYGROUND_GET } from '@payloadcms/next/routes' export const GET = GRAPHQL_PLAYGROUND_GET(config) diff --git a/app/(payload)/api/graphql/route.ts b/app/(payload)/api/graphql/route.ts index 4caee1b7cb..c2723e439f 100644 --- a/app/(payload)/api/graphql/route.ts +++ b/app/(payload)/api/graphql/route.ts @@ -1,6 +1,6 @@ /* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */ /* DO NOT MODIFY it because it could be re-written at any time. */ import config from '@payload-config' -import { GRAPHQL_POST } from '@payloadcms/next/routes/index.js' +import { GRAPHQL_POST } from '@payloadcms/next/routes' export const POST = GRAPHQL_POST(config) diff --git a/app/(payload)/layout.tsx b/app/(payload)/layout.tsx index 88fedb4042..78db7265e1 100644 --- a/app/(payload)/layout.tsx +++ b/app/(payload)/layout.tsx @@ -1,6 +1,6 @@ /* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */ import configPromise from '@payload-config' -import { RootLayout } from '@payloadcms/next/layouts/Root/index.js' +import { RootLayout } from '@payloadcms/next/layouts' /* DO NOT MODIFY IT BECAUSE IT COULD BE REWRITTEN AT ANY TIME. */ import React from 'react' diff --git a/docs/rich-text/lexical.mdx b/docs/rich-text/lexical.mdx index 4a4367ab80..cc026a6753 100644 --- a/docs/rich-text/lexical.mdx +++ b/docs/rich-text/lexical.mdx @@ -138,7 +138,7 @@ import { CallToAction } from '../blocks/CallToAction' Here's an overview of all the included features: | Feature Name | Included by default | Description | -| ------------------------------ | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +|--------------------------------|---------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | **`BoldTextFeature`** | Yes | Handles the bold text format | | **`ItalicTextFeature`** | Yes | Handles the italic text format | | **`UnderlineTextFeature`** | Yes | Handles the underline text format | @@ -157,7 +157,8 @@ Here's an overview of all the included features: | **`RelationshipFeature`** | Yes | Allows you to create block-level (not inline) relationships to other documents | | **`BlockQuoteFeature`** | Yes | Allows you to create block-level quotes | | **`UploadFeature`** | Yes | Allows you to create block-level upload nodes - this supports all kinds of uploads, not just images | -| **`BlocksFeature`** | No | Allows you to use Payload's [Blocks Field](/docs/fields/blocks) directly inside your editor. In the feature props, you can specify the allowed blocks - just like in the Blocks field. | +| **`HorizontalRuleFeature`** | Yes | Horizontal rules / separators. Basically displays an
element | +| **`BlocksFeature`** | No | Allows you to use Payload's [Blocks Field](/docs/fields/blocks) directly inside your editor. In the feature props, you can specify the allowed blocks - just like in the Blocks field. | | **`TreeViewFeature`** | No | Adds a debug box under the editor, which allows you to see the current editor state live, the dom, as well as time travel. Very useful for debugging | ## Creating your own, custom Feature @@ -234,6 +235,19 @@ This method employs `convertLexicalToHTML` from `@payloadcms/richtext-lexical`, Because every `Feature` is able to provide html converters, and because the `htmlFeature` can modify those or provide their own, we need to consolidate them with the default html Converters using the `consolidateHTMLConverters` function. +#### CSS + +Payload's lexical HTML converter does not generate CSS for you, but it does add classes to the generated HTML. You can use these classes to style the HTML in your frontend. + +Here is some "base" CSS you can use to ensure that nested lists render correctly: + +```css +/* Base CSS for Lexical HTML */ +.nestedListItem, .list-check { + list-style-type: none; +} +``` + #### Creating your own HTML Converter HTML Converters are typed as `HTMLConverter`, which contains the node type it should handle, and a function that accepts the serialized node from the lexical editor, and outputs the HTML string. Here's the HTML Converter of the Upload node as an example: diff --git a/docs/upload/overview.mdx b/docs/upload/overview.mdx index 5f01049269..aaaadcaa87 100644 --- a/docs/upload/overview.mdx +++ b/docs/upload/overview.mdx @@ -40,21 +40,22 @@ Every Payload Collection can opt-in to supporting Uploads by specifying the `upl ### Collection Upload Options -| Option | Description | -| --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **`staticURL`** \* | The URL path to use to access your uploads. Relative path like `/media` will be served by payload. Full path like `https://example.com/media` needs to be served by another web server. | -| **`staticDir`** \* | The folder directory to use to store media in. Can be either an absolute path or relative to the directory that contains your config. | -| **`adminThumbnail`** | Set the way that the Admin panel will display thumbnails for this Collection. [More](#admin-thumbnails) | -| **`crop`** | Set to `false` to disable the cropping tool in the Admin panel. Crop is enabled by default. [More](#crop-and-focal-point-selector) | -| **`disableLocalStorage`** | Completely disable uploading files to disk locally. [More](#disabling-local-upload-storage) | -| **`focalPoint`** | Set to `false` to disable the focal point selection tool in the Admin panel. The focal point selector is only available when `imageSizes` or `resizeOptions` are defined. [More](#crop-and-focal-point-selector) | -| **`formatOptions`** | An object with `format` and `options` that are used with the Sharp image library to format the upload file. [More](https://sharp.pixelplumbing.com/api-output#toformat) | -| **`handlers`** | Array of Express request handlers to execute before the built-in Payload static middleware executes. | -| **`imageSizes`** | If specified, image uploads will be automatically resized in accordance to these image sizes. [More](#image-sizes) | -| **`mimeTypes`** | Restrict mimeTypes in the file picker. Array of valid mimetypes or mimetype wildcards [More](#mimetypes) | -| **`staticOptions`** | Set options for `express.static` to use while serving your static files. [More](http://expressjs.com/en/resources/middleware/serve-static.html) | -| **`resizeOptions`** | An object passed to the the Sharp image library to resize the uploaded file. [More](https://sharp.pixelplumbing.com/api-resize) | -| **`filesRequiredOnCreate`** | Mandate file data on creation, default is true. | +| Option | Description | +| ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **`staticURL`** \* | The URL path to use to access your uploads. Relative path like `/media` will be served by payload. Full path like `https://example.com/media` needs to be served by another web server. | +| **`staticDir`** \* | The folder directory to use to store media in. Can be either an absolute path or relative to the directory that contains your config. | +| **`adminThumbnail`** | Set the way that the Admin panel will display thumbnails for this Collection. [More](#admin-thumbnails) | +| **`crop`** | Set to `false` to disable the cropping tool in the Admin panel. Crop is enabled by default. [More](#crop-and-focal-point-selector) | +| **`disableLocalStorage`** | Completely disable uploading files to disk locally. [More](#disabling-local-upload-storage) | +| **`externalFileHeaderFilter`** | Accepts existing headers and can filter/modify them. | +| **`focalPoint`** | Set to `false` to disable the focal point selection tool in the Admin panel. The focal point selector is only available when `imageSizes` or `resizeOptions` are defined. [More](#crop-and-focal-point-selector) | +| **`formatOptions`** | An object with `format` and `options` that are used with the Sharp image library to format the upload file. [More](https://sharp.pixelplumbing.com/api-output#toformat) | +| **`handlers`** | Array of Express request handlers to execute before the built-in Payload static middleware executes. | +| **`imageSizes`** | If specified, image uploads will be automatically resized in accordance to these image sizes. [More](#image-sizes) | +| **`mimeTypes`** | Restrict mimeTypes in the file picker. Array of valid mimetypes or mimetype wildcards [More](#mimetypes) | +| **`staticOptions`** | Set options for `express.static` to use while serving your static files. [More](http://expressjs.com/en/resources/middleware/serve-static.html) | +| **`resizeOptions`** | An object passed to the the Sharp image library to resize the uploaded file. [More](https://sharp.pixelplumbing.com/api-resize) | +| **`filesRequiredOnCreate`** | Mandate file data on creation, default is true. | _An asterisk denotes that a property above is required._ diff --git a/emptyModule.js b/emptyModule.js deleted file mode 100644 index b1c6ea436a..0000000000 --- a/emptyModule.js +++ /dev/null @@ -1 +0,0 @@ -export default {} diff --git a/package.json b/package.json index ec204bc31c..510c4e580c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "payload-monorepo", - "version": "3.0.0-alpha.59", + "version": "3.0.0-beta.11", "private": true, "type": "module", "workspaces:": [ @@ -127,7 +127,7 @@ "lint-staged": "^14.0.1", "minimist": "1.2.8", "mongodb-memory-server": "^9.0", - "next": "14.2.0-canary.22", + "next": "^14.2.0-canary.23", "node-mocks-http": "^1.14.1", "nodemon": "3.0.3", "open": "^10.1.0", @@ -163,7 +163,7 @@ "react": "18.2.0" }, "engines": { - "node": ">=18.17.0", + "node": ">=18.20.2", "pnpm": ">=8" }, "lint-staged": { diff --git a/packages/create-payload-app/package.json b/packages/create-payload-app/package.json index a56cff25f7..de73baf743 100644 --- a/packages/create-payload-app/package.json +++ b/packages/create-payload-app/package.json @@ -1,6 +1,6 @@ { "name": "create-payload-app", - "version": "3.0.0-alpha.59", + "version": "3.0.0-beta.11", "license": "MIT", "type": "module", "homepage": "https://payloadcms.com", @@ -35,7 +35,7 @@ "comment-json": "^4.2.3", "degit": "^2.8.4", "detect-package-manager": "^3.0.1", - "esprima": "^4.0.1", + "esprima-next": "^6.0.3", "execa": "^5.0.0", "figures": "^6.1.0", "fs-extra": "^9.0.1", diff --git a/packages/create-payload-app/src/lib/init-next.ts b/packages/create-payload-app/src/lib/init-next.ts index b8374ef745..996eaee3ce 100644 --- a/packages/create-payload-app/src/lib/init-next.ts +++ b/packages/create-payload-app/src/lib/init-next.ts @@ -4,6 +4,7 @@ import * as p from '@clack/prompts' import { parse, stringify } from 'comment-json' import execa from 'execa' import fs from 'fs' +import fse from 'fs-extra' import globby from 'globby' import path from 'path' import { promisify } from 'util' @@ -31,6 +32,8 @@ type InitNextArgs = Pick & { useDistFiles?: boolean } +type NextConfigType = 'cjs' | 'esm' + type InitNextResult = | { isSrcDir: boolean @@ -45,11 +48,22 @@ export async function initNext(args: InitNextArgs): Promise { const nextAppDetails = args.nextAppDetails || (await getNextAppDetails(projectDir)) - const { hasTopLevelLayout, isSrcDir, nextAppDir } = - nextAppDetails || (await getNextAppDetails(projectDir)) + if (!nextAppDetails.nextAppDir) { + warning(`Could not find app directory in ${projectDir}, creating...`) + const createdAppDir = path.resolve(projectDir, nextAppDetails.isSrcDir ? 'src/app' : 'app') + fse.mkdirSync(createdAppDir, { recursive: true }) + nextAppDetails.nextAppDir = createdAppDir + } - if (!nextAppDir) { - return { isSrcDir, reason: `Could not find app directory in ${projectDir}`, success: false } + const { hasTopLevelLayout, isSrcDir, nextAppDir, nextConfigType } = nextAppDetails + + if (!nextConfigType) { + return { + isSrcDir, + nextAppDir, + reason: `Could not determine Next Config type in ${projectDir}. Possibly try renaming next.config.js to next.config.cjs or next.config.mjs.`, + success: false, + } } if (hasTopLevelLayout) { @@ -69,6 +83,7 @@ export async function initNext(args: InitNextArgs): Promise { const configurationResult = installAndConfigurePayload({ ...args, nextAppDetails, + nextConfigType, useDistFiles: true, // Requires running 'pnpm pack-template-files' in cpa }) @@ -96,12 +111,23 @@ export async function initNext(args: InitNextArgs): Promise { async function addPayloadConfigToTsConfig(projectDir: string, isSrcDir: boolean) { const tsConfigPath = path.resolve(projectDir, 'tsconfig.json') + + // Check if tsconfig.json exists + if (!fs.existsSync(tsConfigPath)) { + warning(`Could not find tsconfig.json to add @payload-config path.`) + return + } const userTsConfigContent = await readFile(tsConfigPath, { encoding: 'utf8', }) const userTsConfig = parse(userTsConfigContent) as { compilerOptions?: CompilerOptions } + + const hasBaseUrl = + userTsConfig?.compilerOptions?.baseUrl && userTsConfig?.compilerOptions?.baseUrl !== '.' + const baseUrl = hasBaseUrl ? userTsConfig?.compilerOptions?.baseUrl : './' + if (!userTsConfig.compilerOptions && !('extends' in userTsConfig)) { userTsConfig.compilerOptions = {} } @@ -112,20 +138,25 @@ async function addPayloadConfigToTsConfig(projectDir: string, isSrcDir: boolean) ) { userTsConfig.compilerOptions.paths = { ...(userTsConfig.compilerOptions.paths || {}), - '@payload-config': [`./${isSrcDir ? 'src/' : ''}payload.config.ts`], + '@payload-config': [`${baseUrl}${isSrcDir ? 'src/' : ''}payload.config.ts`], } await writeFile(tsConfigPath, stringify(userTsConfig, null, 2), { encoding: 'utf8' }) } } function installAndConfigurePayload( - args: InitNextArgs & { nextAppDetails: NextAppDetails; useDistFiles?: boolean }, + args: InitNextArgs & { + nextAppDetails: NextAppDetails + nextConfigType: NextConfigType + useDistFiles?: boolean + }, ): | { payloadConfigPath: string; success: true } | { payloadConfigPath?: string; reason: string; success: false } { const { '--debug': debug, nextAppDetails: { isSrcDir, nextAppDir, nextConfigPath } = {}, + nextConfigType, projectDir, useDistFiles, } = args @@ -172,6 +203,7 @@ function installAndConfigurePayload( logDebug(`nextAppDir: ${nextAppDir}`) logDebug(`projectDir: ${projectDir}`) logDebug(`nextConfigPath: ${nextConfigPath}`) + logDebug(`payloadConfigPath: ${path.resolve(projectDir, 'payload.config.ts')}`) logDebug( `isSrcDir: ${isSrcDir}. source: ${templateSrcDir}. dest: ${path.dirname(nextConfigPath)}`, @@ -181,7 +213,7 @@ function installAndConfigurePayload( copyRecursiveSync(templateSrcDir, path.dirname(nextConfigPath), debug) // Wrap next.config.js with withPayload - wrapNextConfig({ nextConfigPath }) + wrapNextConfig({ nextConfigPath, nextConfigType }) return { payloadConfigPath: path.resolve(nextAppDir, '../payload.config.ts'), @@ -191,10 +223,10 @@ function installAndConfigurePayload( async function installDeps(projectDir: string, packageManager: PackageManager, dbType: DbType) { const packagesToInstall = ['payload', '@payloadcms/next', '@payloadcms/richtext-lexical'].map( - (pkg) => `${pkg}@alpha`, + (pkg) => `${pkg}@beta`, ) - packagesToInstall.push(`@payloadcms/db-${dbType}@alpha`) + packagesToInstall.push(`@payloadcms/db-${dbType}@beta`) let exitCode = 0 switch (packageManager) { @@ -226,6 +258,7 @@ type NextAppDetails = { isSrcDir: boolean nextAppDir?: string nextConfigPath?: string + nextConfigType?: NextConfigType } export async function getNextAppDetails(projectDir: string): Promise { @@ -246,6 +279,7 @@ export async function getNextAppDetails(projectDir: string): Promise { + if (nextConfigPath.endsWith('.mjs')) { + return 'esm' + } + if (nextConfigPath.endsWith('.cjs')) { + return 'cjs' + } + + const packageObj = await fse.readJson(path.resolve(projectDir, 'package.json')) + const packageJsonType = packageObj.type + if (packageJsonType === 'module') { + return 'esm' + } + if (packageJsonType === 'commonjs') { + return 'cjs' + } + + return 'cjs' } diff --git a/packages/create-payload-app/src/lib/packages.ts b/packages/create-payload-app/src/lib/packages.ts index 29f9a11226..f3fff3a506 100644 --- a/packages/create-payload-app/src/lib/packages.ts +++ b/packages/create-payload-app/src/lib/packages.ts @@ -10,14 +10,18 @@ const mongodbReplacement: DbAdapterReplacement = { importReplacement: "import { mongooseAdapter } from '@payloadcms/db-mongodb'", packageName: '@payloadcms/db-mongodb', // Replacement between `// database-adapter-config-start` and `// database-adapter-config-end` - configReplacement: [' db: mongooseAdapter({', ' url: process.env.DATABASE_URI,', ' }),'], + configReplacement: [ + ' db: mongooseAdapter({', + " url: process.env.DATABASE_URI || '',", + ' }),', + ], } const postgresReplacement: DbAdapterReplacement = { configReplacement: [ ' db: postgresAdapter({', ' pool: {', - ' connectionString: process.env.DATABASE_URI,', + " connectionString: process.env.DATABASE_URI || '',", ' },', ' }),', ], diff --git a/packages/create-payload-app/src/lib/select-db.ts b/packages/create-payload-app/src/lib/select-db.ts index 9b1d3a1a7b..17b3df917d 100644 --- a/packages/create-payload-app/src/lib/select-db.ts +++ b/packages/create-payload-app/src/lib/select-db.ts @@ -16,7 +16,7 @@ const dbChoiceRecord: Record = { value: 'mongodb', }, postgres: { - dbConnectionPrefix: 'postgres://127.0.0.1:5432/', + dbConnectionPrefix: 'postgres://postgres:@127.0.0.1:5432/', title: 'PostgreSQL (beta)', value: 'postgres', }, diff --git a/packages/create-payload-app/src/lib/templates.ts b/packages/create-payload-app/src/lib/templates.ts index 5ab635de39..b2aa6756d1 100644 --- a/packages/create-payload-app/src/lib/templates.ts +++ b/packages/create-payload-app/src/lib/templates.ts @@ -18,43 +18,46 @@ export function getValidTemplates(): ProjectTemplate[] { name: 'blank-3.0', type: 'starter', description: 'Blank 3.0 Template', - url: 'https://github.com/payloadcms/payload/templates/blank-3.0', - }, - { - name: 'blank', - type: 'starter', - description: 'Blank Template', - url: 'https://github.com/payloadcms/payload/templates/blank', - }, - { - name: 'website', - type: 'starter', - description: 'Website Template', - url: 'https://github.com/payloadcms/payload/templates/website', - }, - { - name: 'ecommerce', - type: 'starter', - description: 'E-commerce Template', - url: 'https://github.com/payloadcms/payload/templates/ecommerce', + url: 'https://github.com/payloadcms/payload/templates/blank-3.0#beta', }, + + // Remove these until they have been updated for 3.0 + + // { + // name: 'blank', + // type: 'starter', + // description: 'Blank Template', + // url: 'https://github.com/payloadcms/payload/templates/blank', + // }, + // { + // name: 'website', + // type: 'starter', + // description: 'Website Template', + // url: 'https://github.com/payloadcms/payload/templates/website', + // }, + // { + // name: 'ecommerce', + // type: 'starter', + // description: 'E-commerce Template', + // url: 'https://github.com/payloadcms/payload/templates/ecommerce', + // }, { name: 'plugin', type: 'plugin', description: 'Template for creating a Payload plugin', - url: 'https://github.com/payloadcms/payload-plugin-template', - }, - { - name: 'payload-demo', - type: 'starter', - description: 'Payload demo site at https://demo.payloadcms.com', - url: 'https://github.com/payloadcms/public-demo', - }, - { - name: 'payload-website', - type: 'starter', - description: 'Payload website CMS at https://payloadcms.com', - url: 'https://github.com/payloadcms/website-cms', + url: 'https://github.com/payloadcms/payload-plugin-template#beta', }, + // { + // name: 'payload-demo', + // type: 'starter', + // description: 'Payload demo site at https://demo.payloadcms.com', + // url: 'https://github.com/payloadcms/public-demo', + // }, + // { + // name: 'payload-website', + // type: 'starter', + // description: 'Payload website CMS at https://payloadcms.com', + // url: 'https://github.com/payloadcms/website-cms', + // }, ] } diff --git a/packages/create-payload-app/src/lib/wrap-next-config.spec.ts b/packages/create-payload-app/src/lib/wrap-next-config.spec.ts index be41216f0f..1099336232 100644 --- a/packages/create-payload-app/src/lib/wrap-next-config.spec.ts +++ b/packages/create-payload-app/src/lib/wrap-next-config.spec.ts @@ -1,61 +1,159 @@ -import { parseAndModifyConfigContent, withPayloadImportStatement } from './wrap-next-config.js' +import { parseAndModifyConfigContent, withPayloadStatement } from './wrap-next-config.js' import * as p from '@clack/prompts' -const defaultNextConfig = `/** @type {import('next').NextConfig} */ +const esmConfigs = { + defaultNextConfig: `/** @type {import('next').NextConfig} */ const nextConfig = {}; - export default nextConfig; -` - -const nextConfigWithFunc = `const nextConfig = { - // Your Next.js config here -} - -export default someFunc(nextConfig) -` -const nextConfigWithFuncMultiline = `const nextConfig = { - // Your Next.js config here -} - +`, + nextConfigWithFunc: `const nextConfig = {}; +export default someFunc(nextConfig); +`, + nextConfigWithFuncMultiline: `const nextConfig = {};; export default someFunc( nextConfig -) -` - -const nextConfigExportNamedDefault = `const nextConfig = { - // Your Next.js config here +); +`, + nextConfigExportNamedDefault: `const nextConfig = {}; +const wrapped = someFunc(asdf); +export { wrapped as default }; +`, + nextConfigWithSpread: `const nextConfig = { + ...someConfig, +}; +export default nextConfig; +`, +} + +const cjsConfigs = { + defaultNextConfig: ` + /** @type {import('next').NextConfig} */ +const nextConfig = {}; +module.exports = nextConfig; +`, + anonConfig: `module.exports = {};`, + nextConfigWithFunc: `const nextConfig = {}; +module.exports = someFunc(nextConfig); +`, + nextConfigWithFuncMultiline: `const nextConfig = {}; +module.exports = someFunc( + nextConfig +); +`, + nextConfigExportNamedDefault: `const nextConfig = {}; +const wrapped = someFunc(asdf); +module.exports = wrapped; +`, + nextConfigWithSpread: `const nextConfig = { ...someConfig }; +module.exports = nextConfig; +`, } -const wrapped = someFunc(asdf) -export { wrapped as default } -` describe('parseAndInsertWithPayload', () => { - it('should parse the default next config', () => { - const { modifiedConfigContent } = parseAndModifyConfigContent(defaultNextConfig) - expect(modifiedConfigContent).toContain(withPayloadImportStatement) - expect(modifiedConfigContent).toContain('withPayload(nextConfig)') - }) - it('should parse the config with a function', () => { - const { modifiedConfigContent } = parseAndModifyConfigContent(nextConfigWithFunc) - expect(modifiedConfigContent).toContain('withPayload(someFunc(nextConfig))') + describe('esm', () => { + const configType = 'esm' + const importStatement = withPayloadStatement[configType] + it('should parse the default next config', () => { + const { modifiedConfigContent } = parseAndModifyConfigContent( + esmConfigs.defaultNextConfig, + configType, + ) + expect(modifiedConfigContent).toContain(importStatement) + expect(modifiedConfigContent).toContain('withPayload(nextConfig)') + }) + it('should parse the config with a function', () => { + const { modifiedConfigContent } = parseAndModifyConfigContent( + esmConfigs.nextConfigWithFunc, + configType, + ) + expect(modifiedConfigContent).toContain('withPayload(someFunc(nextConfig))') + }) + + it('should parse the config with a function on a new line', () => { + const { modifiedConfigContent } = parseAndModifyConfigContent( + esmConfigs.nextConfigWithFuncMultiline, + configType, + ) + expect(modifiedConfigContent).toContain(importStatement) + expect(modifiedConfigContent).toMatch(/withPayload\(someFunc\(\n nextConfig\n\)\)/) + }) + + it('should parse the config with a spread', () => { + const { modifiedConfigContent } = parseAndModifyConfigContent( + esmConfigs.nextConfigWithSpread, + configType, + ) + expect(modifiedConfigContent).toContain(importStatement) + expect(modifiedConfigContent).toContain('withPayload(nextConfig)') + }) + + // Unsupported: export { wrapped as default } + it('should give warning with a named export as default', () => { + const warnLogSpy = jest.spyOn(p.log, 'warn').mockImplementation(() => {}) + + const { modifiedConfigContent, success } = parseAndModifyConfigContent( + esmConfigs.nextConfigExportNamedDefault, + configType, + ) + expect(modifiedConfigContent).toContain(importStatement) + expect(success).toBe(false) + + expect(warnLogSpy).toHaveBeenCalledWith( + expect.stringContaining('Could not automatically wrap'), + ) + }) }) - it('should parse the config with a function on a new line', () => { - const { modifiedConfigContent } = parseAndModifyConfigContent(nextConfigWithFuncMultiline) - expect(modifiedConfigContent).toContain(withPayloadImportStatement) - expect(modifiedConfigContent).toMatch(/withPayload\(someFunc\(\n nextConfig\n\)\)/) - }) + describe('cjs', () => { + const configType = 'cjs' + const requireStatement = withPayloadStatement[configType] + it('should parse the default next config', () => { + const { modifiedConfigContent } = parseAndModifyConfigContent( + cjsConfigs.defaultNextConfig, + configType, + ) + expect(modifiedConfigContent).toContain(requireStatement) + expect(modifiedConfigContent).toContain('withPayload(nextConfig)') + }) + it('should parse anonymous default config', () => { + const { modifiedConfigContent } = parseAndModifyConfigContent( + cjsConfigs.anonConfig, + configType, + ) + expect(modifiedConfigContent).toContain(requireStatement) + expect(modifiedConfigContent).toContain('withPayload({})') + }) + it('should parse the config with a function', () => { + const { modifiedConfigContent } = parseAndModifyConfigContent( + cjsConfigs.nextConfigWithFunc, + configType, + ) + expect(modifiedConfigContent).toContain('withPayload(someFunc(nextConfig))') + }) + it('should parse the config with a function on a new line', () => { + const { modifiedConfigContent } = parseAndModifyConfigContent( + cjsConfigs.nextConfigWithFuncMultiline, + configType, + ) + expect(modifiedConfigContent).toContain(requireStatement) + expect(modifiedConfigContent).toMatch(/withPayload\(someFunc\(\n nextConfig\n\)\)/) + }) + it('should parse the config with a named export as default', () => { + const { modifiedConfigContent } = parseAndModifyConfigContent( + cjsConfigs.nextConfigExportNamedDefault, + configType, + ) + expect(modifiedConfigContent).toContain(requireStatement) + expect(modifiedConfigContent).toContain('withPayload(wrapped)') + }) - // Unsupported: export { wrapped as default } - it('should give warning with a named export as default', () => { - const warnLogSpy = jest.spyOn(p.log, 'warn').mockImplementation(() => {}) - - const { modifiedConfigContent, success } = parseAndModifyConfigContent( - nextConfigExportNamedDefault, - ) - expect(modifiedConfigContent).toContain(withPayloadImportStatement) - expect(success).toBe(false) - - expect(warnLogSpy).toHaveBeenCalledWith(expect.stringContaining('Could not automatically wrap')) + it('should parse the config with a spread', () => { + const { modifiedConfigContent } = parseAndModifyConfigContent( + cjsConfigs.nextConfigWithSpread, + configType, + ) + expect(modifiedConfigContent).toContain(requireStatement) + expect(modifiedConfigContent).toContain('withPayload(nextConfig)') + }) }) }) diff --git a/packages/create-payload-app/src/lib/wrap-next-config.ts b/packages/create-payload-app/src/lib/wrap-next-config.ts index 93722e0c37..f19d4eedb4 100644 --- a/packages/create-payload-app/src/lib/wrap-next-config.ts +++ b/packages/create-payload-app/src/lib/wrap-next-config.ts @@ -1,16 +1,29 @@ +import type { Program } from 'esprima-next' + import chalk from 'chalk' -import { parseModule } from 'esprima' +import { Syntax, parseModule } from 'esprima-next' import fs from 'fs' import { warning } from '../utils/log.js' import { log } from '../utils/log.js' -export const withPayloadImportStatement = `import { withPayload } from '@payloadcms/next'\n` +export const withPayloadStatement = { + cjs: `const { withPayload } = require('@payloadcms/next/withPayload')\n`, + esm: `import { withPayload } from '@payloadcms/next/withPayload'\n`, +} -export const wrapNextConfig = (args: { nextConfigPath: string }) => { - const { nextConfigPath } = args +type NextConfigType = 'cjs' | 'esm' + +export const wrapNextConfig = (args: { + nextConfigPath: string + nextConfigType: NextConfigType +}) => { + const { nextConfigPath, nextConfigType: configType } = args const configContent = fs.readFileSync(nextConfigPath, 'utf8') - const { modifiedConfigContent: newConfig, success } = parseAndModifyConfigContent(configContent) + const { modifiedConfigContent: newConfig, success } = parseAndModifyConfigContent( + configContent, + configType, + ) if (!success) { return @@ -22,72 +35,121 @@ export const wrapNextConfig = (args: { nextConfigPath: string }) => { /** * Parses config content with AST and wraps it with withPayload function */ -export function parseAndModifyConfigContent(content: string): { - modifiedConfigContent: string - success: boolean -} { - content = withPayloadImportStatement + content - const ast = parseModule(content, { loc: true }) - const exportDefaultDeclaration = ast.body.find((p) => p.type === 'ExportDefaultDeclaration') as - | Directive - | undefined +export function parseAndModifyConfigContent( + content: string, + configType: NextConfigType, +): { modifiedConfigContent: string; success: boolean } { + content = withPayloadStatement[configType] + content - const exportNamedDeclaration = ast.body.find((p) => p.type === 'ExportNamedDeclaration') as - | ExportNamedDeclaration - | undefined - - if (!exportDefaultDeclaration && !exportNamedDeclaration) { - throw new Error('Could not find ExportDefaultDeclaration in next.config.js') - } - - if (exportDefaultDeclaration && exportDefaultDeclaration.declaration?.loc) { - const modifiedConfigContent = insertBeforeAndAfter( - content, - exportDefaultDeclaration.declaration.loc, - ) - return { modifiedConfigContent, success: true } - } else if (exportNamedDeclaration) { - const exportSpecifier = exportNamedDeclaration.specifiers.find( - (s) => - s.type === 'ExportSpecifier' && - s.exported?.name === 'default' && - s.local?.type === 'Identifier' && - s.local?.name, - ) - - if (exportSpecifier) { - warning('Could not automatically wrap next.config.js with withPayload.') - warning('Automatic wrapping of named exports as default not supported yet.') - - warnUserWrapNotSuccessful() - return { - modifiedConfigContent: content, - success: false, - } + let ast: Program | undefined + try { + ast = parseModule(content, { loc: true }) + } catch (error: unknown) { + if (error instanceof Error) { + warning(`Unable to parse Next config. Error: ${error.message} `) + warnUserWrapNotSuccessful(configType) + } + return { + modifiedConfigContent: content, + success: false, } } - warning('Could not automatically wrap next.config.js with withPayload.') - warnUserWrapNotSuccessful() + if (configType === 'esm') { + const exportDefaultDeclaration = ast.body.find( + (p) => p.type === Syntax.ExportDefaultDeclaration, + ) as Directive | undefined + + const exportNamedDeclaration = ast.body.find( + (p) => p.type === Syntax.ExportNamedDeclaration, + ) as ExportNamedDeclaration | undefined + + if (!exportDefaultDeclaration && !exportNamedDeclaration) { + throw new Error('Could not find ExportDefaultDeclaration in next.config.js') + } + + if (exportDefaultDeclaration && exportDefaultDeclaration.declaration?.loc) { + const modifiedConfigContent = insertBeforeAndAfter( + content, + exportDefaultDeclaration.declaration.loc, + ) + return { modifiedConfigContent, success: true } + } else if (exportNamedDeclaration) { + const exportSpecifier = exportNamedDeclaration.specifiers.find( + (s) => + s.type === 'ExportSpecifier' && + s.exported?.name === 'default' && + s.local?.type === 'Identifier' && + s.local?.name, + ) + + if (exportSpecifier) { + warning('Could not automatically wrap next.config.js with withPayload.') + warning('Automatic wrapping of named exports as default not supported yet.') + + warnUserWrapNotSuccessful(configType) + return { + modifiedConfigContent: content, + success: false, + } + } + } + + warning('Could not automatically wrap Next config with withPayload.') + warnUserWrapNotSuccessful(configType) + return { + modifiedConfigContent: content, + success: false, + } + } else if (configType === 'cjs') { + // Find `module.exports = X` + const moduleExports = ast.body.find( + (p) => + p.type === Syntax.ExpressionStatement && + p.expression?.type === Syntax.AssignmentExpression && + p.expression.left?.type === Syntax.MemberExpression && + p.expression.left.object?.type === Syntax.Identifier && + p.expression.left.object.name === 'module' && + p.expression.left.property?.type === Syntax.Identifier && + p.expression.left.property.name === 'exports', + // eslint-disable-next-line @typescript-eslint/no-explicit-any + ) as any + + if (moduleExports && moduleExports.expression.right?.loc) { + const modifiedConfigContent = insertBeforeAndAfter( + content, + moduleExports.expression.right.loc, + ) + return { modifiedConfigContent, success: true } + } + + return { + modifiedConfigContent: content, + success: false, + } + } + + warning('Could not automatically wrap Next config with withPayload.') + warnUserWrapNotSuccessful(configType) return { modifiedConfigContent: content, success: false, } } -function warnUserWrapNotSuccessful() { +function warnUserWrapNotSuccessful(configType: NextConfigType) { // Output directions for user to update next.config.js const withPayloadMessage = ` ${chalk.bold(`Please manually wrap your existing next.config.js with the withPayload function. Here is an example:`)} - import withPayload from '@payloadcms/next/withPayload' + ${withPayloadStatement[configType]} const nextConfig = { // Your Next.js config here } - export default withPayload(nextConfig) + ${configType === 'esm' ? 'export default withPayload(nextConfig)' : 'module.exports = withPayload(nextConfig)'} ` diff --git a/packages/create-payload-app/src/lib/write-env-file.ts b/packages/create-payload-app/src/lib/write-env-file.ts index 04c10455eb..36bcc41429 100644 --- a/packages/create-payload-app/src/lib/write-env-file.ts +++ b/packages/create-payload-app/src/lib/write-env-file.ts @@ -20,32 +20,41 @@ export async function writeEnvFile(args: { return } + const envOutputPath = path.join(projectDir, '.env') + try { - if (template?.type === 'starter' && fs.existsSync(path.join(projectDir, '.env.example'))) { - // Parse .env file into key/value pairs - const envFile = await fs.readFile(path.join(projectDir, '.env.example'), 'utf8') - const envWithValues: string[] = envFile - .split('\n') - .filter((e) => e) - .map((line) => { - if (line.startsWith('#') || !line.includes('=')) return line + if (fs.existsSync(envOutputPath)) { + if (template?.type === 'starter') { + // Parse .env file into key/value pairs + const envFile = await fs.readFile(path.join(projectDir, '.env.example'), 'utf8') + const envWithValues: string[] = envFile + .split('\n') + .filter((e) => e) + .map((line) => { + if (line.startsWith('#') || !line.includes('=')) return line - const split = line.split('=') - const key = split[0] - let value = split[1] + const split = line.split('=') + const key = split[0] + let value = split[1] - if (key === 'MONGODB_URI' || key === 'MONGO_URL' || key === 'DATABASE_URI') { - value = databaseUri - } - if (key === 'PAYLOAD_SECRET' || key === 'PAYLOAD_SECRET_KEY') { - value = payloadSecret - } + if (key === 'MONGODB_URI' || key === 'MONGO_URL' || key === 'DATABASE_URI') { + value = databaseUri + } + if (key === 'PAYLOAD_SECRET' || key === 'PAYLOAD_SECRET_KEY') { + value = payloadSecret + } - return `${key}=${value}` - }) + return `${key}=${value}` + }) - // Write new .env file - await fs.writeFile(path.join(projectDir, '.env'), envWithValues.join('\n')) + // Write new .env file + await fs.writeFile(envOutputPath, envWithValues.join('\n')) + } else { + const existingEnv = await fs.readFile(envOutputPath, 'utf8') + const newEnv = + existingEnv + `\nDATABASE_URI=${databaseUri}\nPAYLOAD_SECRET=${payloadSecret}\n` + await fs.writeFile(envOutputPath, newEnv) + } } else { const content = `DATABASE_URI=${databaseUri}\nPAYLOAD_SECRET=${payloadSecret}` await fs.outputFile(`${projectDir}/.env`, content) diff --git a/packages/create-payload-app/src/utils/messages.ts b/packages/create-payload-app/src/utils/messages.ts index 3d5caa9765..79dc5552b0 100644 --- a/packages/create-payload-app/src/utils/messages.ts +++ b/packages/create-payload-app/src/utils/messages.ts @@ -21,6 +21,12 @@ export function helpMessage(): void { console.log(chalk` {bold USAGE} + {dim Inside of an existing Next.js project} + + {dim $} {bold npx create-payload-app} + + {dim Create a new project from scratch} + {dim $} {bold npx create-payload-app} {dim $} {bold npx create-payload-app} my-project {dim $} {bold npx create-payload-app} -n my-project -t template-name @@ -80,7 +86,7 @@ export function successfulNextInit(): string { } export function moveMessage(args: { nextAppDir: string; projectDir: string }): string { - const relativePath = path.relative(process.cwd(), args.nextAppDir) + const relativeAppDir = path.relative(process.cwd(), args.nextAppDir) return ` ${header('Next Steps:')} @@ -88,7 +94,10 @@ Payload does not support a top-level layout.tsx file in the app directory. ${chalk.bold('To continue:')} -Move all files from ./${relativePath} to a named directory such as ./${relativePath}/${chalk.bold('(app)')} +- Create a new directory in ./${relativeAppDir} such as ./${relativeAppDir}/${chalk.bold('(app)')} +- Move all files from ./${relativeAppDir} into that directory + +It is recommended to do this from your IDE if your app has existing file references. Once moved, rerun the create-payload-app command again. ` diff --git a/packages/db-mongodb/package.json b/packages/db-mongodb/package.json index 6de410c56d..140d5d95d2 100644 --- a/packages/db-mongodb/package.json +++ b/packages/db-mongodb/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/db-mongodb", - "version": "3.0.0-alpha.59", + "version": "3.0.0-beta.11", "description": "The officially supported MongoDB database adapter for Payload", "repository": { "type": "git", diff --git a/packages/db-mongodb/src/init.ts b/packages/db-mongodb/src/init.ts index 3aad0f4ab2..facae23cb4 100644 --- a/packages/db-mongodb/src/init.ts +++ b/packages/db-mongodb/src/init.ts @@ -28,6 +28,7 @@ export const init: Init = function init(this: MongooseAdapter) { const versionSchema = buildSchema(this.payload.config, versionCollectionFields, { disableUnique: true, draftsEnabled: true, + indexSortableFields: this.payload.config.indexSortableFields, options: { minimize: false, timestamps: false, @@ -56,12 +57,6 @@ export const init: Init = function init(this: MongooseAdapter) { this.autoPluralization === true ? undefined : collection.slug, ) as CollectionModel this.collections[collection.slug] = model - - // TS expect error only needed until we launch 2.0.0 - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - this.payload.collections[collection.slug] = { - config: collection, - } }) const model = buildGlobalModel(this.payload.config) diff --git a/packages/db-mongodb/src/queries/buildSearchParams.ts b/packages/db-mongodb/src/queries/buildSearchParams.ts index 538d749497..9bf73a87c9 100644 --- a/packages/db-mongodb/src/queries/buildSearchParams.ts +++ b/packages/db-mongodb/src/queries/buildSearchParams.ts @@ -59,17 +59,12 @@ export async function buildSearchParam({ let hasCustomID = false if (sanitizedPath === '_id') { - const customIDfield = payload.collections[collectionSlug]?.config.fields.find( - (field) => fieldAffectsData(field) && field.name === 'id', - ) + const customIDFieldType = payload.collections[collectionSlug]?.customIDType let idFieldType: 'number' | 'text' = 'text' - if (customIDfield) { - if (customIDfield?.type === 'text' || customIDfield?.type === 'number') { - idFieldType = customIDfield.type - } - + if (customIDFieldType) { + idFieldType = customIDFieldType hasCustomID = true } @@ -213,18 +208,11 @@ export async function buildSearchParam({ } else { ;(Array.isArray(field.relationTo) ? field.relationTo : [field.relationTo]).forEach( (relationTo) => { - const isRelatedToCustomNumberID = payload.collections[ - relationTo - ]?.config?.fields.find((relatedField) => { - return ( - fieldAffectsData(relatedField) && - relatedField.name === 'id' && - relatedField.type === 'number' - ) - }) + const isRelatedToCustomNumberID = + payload.collections[relationTo]?.customIDType === 'number' if (isRelatedToCustomNumberID) { - if (isRelatedToCustomNumberID.type === 'number') hasNumberIDRelation = true + hasNumberIDRelation = true } }, ) diff --git a/packages/db-mongodb/src/queries/getLocalizedSortProperty.spec.ts b/packages/db-mongodb/src/queries/getLocalizedSortProperty.spec.ts index 55310ca3a3..bc1153fa74 100644 --- a/packages/db-mongodb/src/queries/getLocalizedSortProperty.spec.ts +++ b/packages/db-mongodb/src/queries/getLocalizedSortProperty.spec.ts @@ -1,18 +1,20 @@ -import { sanitizeConfig } from 'payload/config' +import { SanitizedConfig, sanitizeConfig } from 'payload/config' import { Config } from 'payload/config' import { getLocalizedSortProperty } from './getLocalizedSortProperty.js' -const config = { +const config = sanitizeConfig({ localization: { locales: ['en', 'es'], + defaultLocale: 'en', + fallback: true, }, -} as Config +} as Config) as SanitizedConfig describe('get localized sort property', () => { it('passes through a non-localized sort property', () => { const result = getLocalizedSortProperty({ segments: ['title'], - config: sanitizeConfig(config), + config, fields: [ { name: 'title', @@ -28,7 +30,7 @@ describe('get localized sort property', () => { it('properly localizes an un-localized sort property', () => { const result = getLocalizedSortProperty({ segments: ['title'], - config: sanitizeConfig(config), + config, fields: [ { name: 'title', @@ -45,7 +47,7 @@ describe('get localized sort property', () => { it('keeps specifically asked-for localized sort properties', () => { const result = getLocalizedSortProperty({ segments: ['title', 'es'], - config: sanitizeConfig(config), + config, fields: [ { name: 'title', @@ -62,7 +64,7 @@ describe('get localized sort property', () => { it('properly localizes nested sort properties', () => { const result = getLocalizedSortProperty({ segments: ['group', 'title'], - config: sanitizeConfig(config), + config, fields: [ { name: 'group', @@ -85,7 +87,7 @@ describe('get localized sort property', () => { it('keeps requested locale with nested sort properties', () => { const result = getLocalizedSortProperty({ segments: ['group', 'title', 'es'], - config: sanitizeConfig(config), + config, fields: [ { name: 'group', @@ -108,7 +110,7 @@ describe('get localized sort property', () => { it('properly localizes field within row', () => { const result = getLocalizedSortProperty({ segments: ['title'], - config: sanitizeConfig(config), + config, fields: [ { type: 'row', @@ -130,7 +132,7 @@ describe('get localized sort property', () => { it('properly localizes field within named tab', () => { const result = getLocalizedSortProperty({ segments: ['tab', 'title'], - config: sanitizeConfig(config), + config, fields: [ { type: 'tabs', @@ -157,7 +159,7 @@ describe('get localized sort property', () => { it('properly localizes field within unnamed tab', () => { const result = getLocalizedSortProperty({ segments: ['title'], - config: sanitizeConfig(config), + config, fields: [ { type: 'tabs', diff --git a/packages/db-mongodb/src/queries/sanitizeQueryValue.ts b/packages/db-mongodb/src/queries/sanitizeQueryValue.ts index fc7c1ff027..5912254ffe 100644 --- a/packages/db-mongodb/src/queries/sanitizeQueryValue.ts +++ b/packages/db-mongodb/src/queries/sanitizeQueryValue.ts @@ -142,7 +142,10 @@ export const sanitizeQueryValue = ({ if (path !== '_id' || (path === '_id' && hasCustomID && field.type === 'text')) { if (operator === 'contains') { - formattedValue = { $options: 'i', $regex: formattedValue } + formattedValue = { + $options: 'i', + $regex: formattedValue.replace(/[\\^$*+?.()|[\]{}]/g, '\\$&'), + } } } diff --git a/packages/db-postgres/package.json b/packages/db-postgres/package.json index c72f29b6cb..67c677edd4 100644 --- a/packages/db-postgres/package.json +++ b/packages/db-postgres/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/db-postgres", - "version": "3.0.0-alpha.59", + "version": "3.0.0-beta.11", "description": "The officially supported Postgres database adapter for Payload", "repository": { "type": "git", diff --git a/packages/db-postgres/src/find/findMany.ts b/packages/db-postgres/src/find/findMany.ts index e93e8ac18d..0eaa79bd79 100644 --- a/packages/db-postgres/src/find/findMany.ts +++ b/packages/db-postgres/src/find/findMany.ts @@ -120,7 +120,7 @@ export const findMany = async function find({ const findPromise = db.query[tableName].findMany(findManyArgs) - if (pagination !== false && (orderedIDs ? orderedIDs?.length >= limit : true)) { + if (pagination !== false && (orderedIDs ? orderedIDs?.length <= limit : true)) { const selectCountMethods: ChainedMethods = [] joinAliases.forEach(({ condition, table }) => { diff --git a/packages/db-postgres/src/index.ts b/packages/db-postgres/src/index.ts index 42785c2ce8..a4740e1e49 100644 --- a/packages/db-postgres/src/index.ts +++ b/packages/db-postgres/src/index.ts @@ -43,9 +43,11 @@ export type { MigrateDownArgs, MigrateUpArgs } from './types.js' export { sql } from 'drizzle-orm' export function postgresAdapter(args: Args): DatabaseAdapterObj { + const postgresIDType = args.idType || 'serial' + const payloadIDType = postgresIDType ? 'number' : 'text' + function adapter({ payload }: { payload: Payload }) { const migrationDir = findMigrationDir(args.migrationDir) - const idType = args.idType || 'serial' return createDatabaseAdapter({ name: 'postgres', @@ -55,7 +57,7 @@ export function postgresAdapter(args: Args): DatabaseAdapterObj drizzle: undefined, enums: {}, fieldConstraints: {}, - idType, + idType: postgresIDType, localesSuffix: args.localesSuffix || '_locales', logger: args.logger, pgSchema: undefined, @@ -79,10 +81,7 @@ export function postgresAdapter(args: Args): DatabaseAdapterObj createGlobalVersion, createMigration, createVersion, - /** - * This represents how a default ID is treated in Payload as were a field type - */ - defaultIDType: idType === 'serial' ? 'number' : 'text', + defaultIDType: payloadIDType, deleteMany, deleteOne, deleteVersions, @@ -111,7 +110,7 @@ export function postgresAdapter(args: Args): DatabaseAdapterObj } return { - defaultIDType: 'number', + defaultIDType: payloadIDType, init: adapter, } } diff --git a/packages/db-postgres/src/queries/getTableColumnFromPath.ts b/packages/db-postgres/src/queries/getTableColumnFromPath.ts index 9aa39672d0..1133f167f4 100644 --- a/packages/db-postgres/src/queries/getTableColumnFromPath.ts +++ b/packages/db-postgres/src/queries/getTableColumnFromPath.ts @@ -225,6 +225,85 @@ export const getTableColumnFromPath = ({ }) } + case 'select': { + if (field.hasMany) { + newTableName = getTableName({ + adapter, + config: field, + parentTableName: `${tableName}_${tableNameSuffix}`, + prefix: `${tableName}_${tableNameSuffix}`, + }) + + if (locale && field.localized && adapter.payload.config.localization) { + joins[newTableName] = and( + eq(adapter.tables[tableName].id, adapter.tables[newTableName].parent), + eq(adapter.tables[newTableName]._locale, locale), + ) + if (locale !== 'all') { + constraints.push({ + columnName: '_locale', + table: adapter.tables[newTableName], + value: locale, + }) + } + } else { + joins[newTableName] = eq( + adapter.tables[tableName].id, + adapter.tables[newTableName].parent, + ) + } + + return { + columnName: 'value', + constraints, + field, + table: adapter.tables[newTableName], + } + } + break + } + + case 'text': + case 'number': { + if (field.hasMany) { + let tableType = 'texts' + let columnName = 'text' + if (field.type === 'number') { + tableType = 'numbers' + columnName = 'number' + } + newTableName = `${tableName}_${tableType}` + const joinConstraints = [ + eq(adapter.tables[tableName].id, adapter.tables[newTableName].parent), + eq(adapter.tables[newTableName].path, `${constraintPath}${field.name}`), + ] + + if (locale && field.localized && adapter.payload.config.localization) { + joins[newTableName] = and( + ...joinConstraints, + eq(adapter.tables[newTableName]._locale, locale), + ) + if (locale !== 'all') { + constraints.push({ + columnName: 'locale', + table: adapter.tables[newTableName], + value: locale, + }) + } + } else { + joins[newTableName] = and(...joinConstraints) + } + + return { + columnName, + constraints, + field, + table: adapter.tables[newTableName], + } + } + break + } + case 'array': { newTableName = getTableName({ adapter, @@ -485,43 +564,41 @@ export const getTableColumnFromPath = ({ value, }) } + } - default: { - if (fieldAffectsData(field)) { - if (field.localized && adapter.payload.config.localization) { - // If localized, we go to localized table and set aliasTable to undefined - // so it is not picked up below to be used as targetTable - newTableName = `${tableName}${adapter.localesSuffix}` + if (fieldAffectsData(field)) { + if (field.localized && adapter.payload.config.localization) { + // If localized, we go to localized table and set aliasTable to undefined + // so it is not picked up below to be used as targetTable + newTableName = `${tableName}${adapter.localesSuffix}` - const parentTable = aliasTable || adapter.tables[tableName] + const parentTable = aliasTable || adapter.tables[tableName] - joins[newTableName] = eq(parentTable.id, adapter.tables[newTableName]._parentID) + joins[newTableName] = eq(parentTable.id, adapter.tables[newTableName]._parentID) - aliasTable = undefined + aliasTable = undefined - if (locale !== 'all') { - constraints.push({ - columnName: '_locale', - table: adapter.tables[newTableName], - value: locale, - }) - } - } - - const targetTable = aliasTable || adapter.tables[newTableName] - - selectFields[`${newTableName}.${columnPrefix}${field.name}`] = - targetTable[`${columnPrefix}${field.name}`] - - return { - columnName: `${columnPrefix}${field.name}`, - constraints, - field, - pathSegments, - table: targetTable, - } + if (locale !== 'all') { + constraints.push({ + columnName: '_locale', + table: adapter.tables[newTableName], + value: locale, + }) } } + + const targetTable = aliasTable || adapter.tables[newTableName] + + selectFields[`${newTableName}.${columnPrefix}${field.name}`] = + targetTable[`${columnPrefix}${field.name}`] + + return { + columnName: `${columnPrefix}${field.name}`, + constraints, + field, + pathSegments, + table: targetTable, + } } } diff --git a/packages/db-postgres/src/schema/build.ts b/packages/db-postgres/src/schema/build.ts index e6b846790f..bfa8421fd1 100644 --- a/packages/db-postgres/src/schema/build.ts +++ b/packages/db-postgres/src/schema/build.ts @@ -66,13 +66,6 @@ export const buildTable = ({ const columns: Record = baseColumns const indexes: Record IndexBuilder> = {} - let hasLocalizedField = false - let hasLocalizedRelationshipField = false - let hasManyTextField: 'index' | boolean = false - let hasManyNumberField: 'index' | boolean = false - let hasLocalizedManyTextField = false - let hasLocalizedManyNumberField = false - const localesColumns: Record = {} const localesIndexes: Record IndexBuilder> = {} let localesTable: GenericTable | PgTableWithColumns @@ -89,7 +82,7 @@ export const buildTable = ({ const idColType: IDType = setColumnID({ adapter, columns, fields }) - ;({ + const { hasLocalizedField, hasLocalizedManyNumberField, hasLocalizedManyTextField, @@ -116,7 +109,7 @@ export const buildTable = ({ rootTableIDColType: rootTableIDColType || idColType, rootTableName, versions, - })) + }) if (timestamps) { columns.createdAt = timestamp('created_at', { @@ -298,11 +291,12 @@ export const buildTable = ({ throwValidationError: true, }) let colType = adapter.idType === 'uuid' ? 'uuid' : 'integer' - const relatedCollectionCustomID = relationshipConfig.fields.find( - (field) => fieldAffectsData(field) && field.name === 'id', - ) - if (relatedCollectionCustomID?.type === 'number') colType = 'numeric' - if (relatedCollectionCustomID?.type === 'text') colType = 'varchar' + + const relatedCollectionCustomIDType = + adapter.payload.collections[relationshipConfig.slug]?.customIDType + + if (relatedCollectionCustomIDType === 'number') colType = 'numeric' + if (relatedCollectionCustomIDType === 'text') colType = 'varchar' relationshipColumns[`${relationTo}ID`] = parentIDColumnMap[colType]( `${formattedRelationTo}_id`, diff --git a/packages/db-postgres/src/schema/traverseFields.ts b/packages/db-postgres/src/schema/traverseFields.ts index a25872e626..a7b1cadbda 100644 --- a/packages/db-postgres/src/schema/traverseFields.ts +++ b/packages/db-postgres/src/schema/traverseFields.ts @@ -493,6 +493,7 @@ export const traverseFields = ({ localized: field.localized, rootTableName, table: adapter.tables[blockTableName], + tableLocales: adapter.tables[`${blockTableName}${adapter.localesSuffix}`], }) } adapter.blockTableNames[`${rootTableName}.${toSnakeCase(block.slug)}`] = blockTableName diff --git a/packages/db-postgres/src/schema/validateExistingBlockIsIdentical.ts b/packages/db-postgres/src/schema/validateExistingBlockIsIdentical.ts index 1320957ecd..96219adad8 100644 --- a/packages/db-postgres/src/schema/validateExistingBlockIsIdentical.ts +++ b/packages/db-postgres/src/schema/validateExistingBlockIsIdentical.ts @@ -10,9 +10,13 @@ type Args = { localized: boolean rootTableName: string table: GenericTable + tableLocales?: GenericTable } -const getFlattenedFieldNames = (fields: Field[], prefix: string = ''): string[] => { +const getFlattenedFieldNames = ( + fields: Field[], + prefix: string = '', +): { localized?: boolean; name: string }[] => { return fields.reduce((fieldsToUse, field) => { let fieldPrefix = prefix @@ -44,7 +48,13 @@ const getFlattenedFieldNames = (fields: Field[], prefix: string = ''): string[] } if (fieldAffectsData(field)) { - return [...fieldsToUse, `${fieldPrefix?.replace('.', '_') || ''}${field.name}`] + return [ + ...fieldsToUse, + { + name: `${fieldPrefix?.replace('.', '_') || ''}${field.name}`, + localized: field.localized, + }, + ] } return fieldsToUse @@ -56,22 +66,26 @@ export const validateExistingBlockIsIdentical = ({ localized, rootTableName, table, + tableLocales, }: Args): void => { const fieldNames = getFlattenedFieldNames(block.fields) const missingField = // ensure every field from the config is in the matching table - fieldNames.find((name) => Object.keys(table).indexOf(name) === -1) || + fieldNames.find(({ name, localized }) => { + const fieldTable = localized && tableLocales ? tableLocales : table + return Object.keys(fieldTable).indexOf(name) === -1 + }) || // ensure every table column is matched for every field from the config Object.keys(table).find((fieldName) => { if (!['_locale', '_order', '_parentID', '_path', '_uuid'].includes(fieldName)) { - return fieldNames.indexOf(fieldName) === -1 + return fieldNames.findIndex((field) => field.name) === -1 } }) if (missingField) { throw new InvalidConfiguration( - `The table ${rootTableName} has multiple blocks with slug ${block.slug}, but the schemas do not match. One block includes the field ${missingField}, while the other block does not.`, + `The table ${rootTableName} has multiple blocks with slug ${block.slug}, but the schemas do not match. One block includes the field ${typeof missingField === 'string' ? missingField : missingField.name}, while the other block does not.`, ) } diff --git a/packages/graphql/package.json b/packages/graphql/package.json index f7993cad45..43e2011ff0 100644 --- a/packages/graphql/package.json +++ b/packages/graphql/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/graphql", - "version": "3.0.0-alpha.59", + "version": "3.0.0-beta.11", "main": "./src/index.ts", "types": "./src/index.d.ts", "type": "module", diff --git a/packages/live-preview-react/package.json b/packages/live-preview-react/package.json index cfc1e73042..59eaded6b4 100644 --- a/packages/live-preview-react/package.json +++ b/packages/live-preview-react/package.json @@ -39,7 +39,13 @@ } }, "publishConfig": { - "exports": null, + "exports": { + ".": { + "import": "./dist/index.js", + "require": "./dist/index.js", + "types": "./dist/index.d.ts" + } + }, "main": "./dist/index.js", "registry": "https://registry.npmjs.org/", "types": "./dist/index.d.ts" diff --git a/packages/live-preview/package.json b/packages/live-preview/package.json index 2e8f72af15..fc6e7bd94e 100644 --- a/packages/live-preview/package.json +++ b/packages/live-preview/package.json @@ -32,7 +32,13 @@ } }, "publishConfig": { - "exports": null, + "exports": { + ".": { + "import": "./dist/index.js", + "require": "./dist/index.js", + "types": "./dist/index.d.ts" + } + }, "main": "./dist/index.js", "registry": "https://registry.npmjs.org/", "types": "./dist/index.d.ts" diff --git a/packages/next/.swcrc-cjs b/packages/next/.swcrc-cjs new file mode 100644 index 0000000000..8148972038 --- /dev/null +++ b/packages/next/.swcrc-cjs @@ -0,0 +1,15 @@ +{ + "$schema": "https://json.schemastore.org/swcrc", + "sourceMaps": true, + "jsc": { + "target": "esnext", + "parser": { + "syntax": "typescript", + "tsx": true, + "dts": true + } + }, + "module": { + "type": "commonjs" + } +} diff --git a/packages/next/package.json b/packages/next/package.json index 7f0f168d3b..5d496efd8d 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/next", - "version": "3.0.0-alpha.59", + "version": "3.0.0-beta.11", "main": "./src/index.js", "types": "./src/index.js", "type": "module", @@ -11,7 +11,8 @@ "directory": "packages/next" }, "scripts": { - "build": "pnpm copyfiles && pnpm build:swc && pnpm build:types && pnpm build:webpack && rm dist/prod/index.js", + "build:cjs": "swc ./src/withPayload.js -o ./dist/cjs/withPayload.cjs --config-file .swcrc-cjs", + "build": "pnpm copyfiles && pnpm build:swc && pnpm build:cjs && pnpm build:types && pnpm build:webpack && rm dist/prod/index.js", "build:swc": "swc ./src -d ./dist --config-file .swcrc", "build:types": "tsc --emitDeclarationOnly --outDir dist", "build:webpack": "webpack --config webpack.config.js", @@ -27,6 +28,10 @@ "require": "./src/index.js", "types": "./src/index.js" }, + "./withPayload": { + "import": "./src/withPayload.js", + "require": "./src/withPayload.js" + }, "./*": { "import": "./src/exports/*.ts", "require": "./src/exports/*.ts", @@ -72,7 +77,7 @@ }, "peerDependencies": { "http-status": "1.6.2", - "next": "14.2.0-canary.23", + "next": "^14.2.0-canary.23", "payload": "workspace:*" }, "publishConfig": { @@ -84,9 +89,9 @@ "require": "./dist/prod/styles.css", "default": "./dist/prod/styles.css" }, - ".": { - "import": "./dist/index.js", - "require": "./dist/index.js" + "./withPayload": { + "import": "./dist/withPayload.js", + "require": "./dist/cjs/withPayload.cjs" }, "./*": { "import": "./dist/exports/*.js", @@ -97,7 +102,7 @@ "registry": "https://registry.npmjs.org/" }, "engines": { - "node": ">=18.17.0" + "node": ">=18.20.2" }, "files": [ "dist" diff --git a/packages/next/src/exports/utilities.ts b/packages/next/src/exports/utilities.ts index 4d71645a14..506e94daf6 100644 --- a/packages/next/src/exports/utilities.ts +++ b/packages/next/src/exports/utilities.ts @@ -1,2 +1,3 @@ -export { getNextI18n } from '../utilities/getNextI18n.js' +export { traverseFields } from '../utilities/buildFieldSchemaMap/traverseFields.js' +export { getNextRequestI18n } from '../utilities/getNextRequestI18n.js' export { getPayloadHMR } from '../utilities/getPayloadHMR.js' diff --git a/packages/next/src/layouts/Root/index.tsx b/packages/next/src/layouts/Root/index.tsx index c79de86755..08b116bcc2 100644 --- a/packages/next/src/layouts/Root/index.tsx +++ b/packages/next/src/layouts/Root/index.tsx @@ -1,16 +1,18 @@ +import type { AcceptedLanguages } from '@payloadcms/translations' import type { SanitizedConfig } from 'payload/types' -import { translations } from '@payloadcms/translations/client' +import { rtlLanguages } from '@payloadcms/translations' +import { initI18n } from '@payloadcms/translations' import { RootProvider } from '@payloadcms/ui/providers/Root' import '@payloadcms/ui/scss/app.scss' import { buildComponentMap } from '@payloadcms/ui/utilities/buildComponentMap' import { headers as getHeaders, cookies as nextCookies } from 'next/headers.js' import { parseCookies } from 'payload/auth' import { createClientConfig } from 'payload/config' -import { deepMerge } from 'payload/utilities' import React from 'react' import 'react-toastify/dist/ReactToastify.css' +import { getPayloadHMR } from '../../utilities/getPayloadHMR.js' import { getRequestLanguage } from '../../utilities/getRequestLanguage.js' import { DefaultEditView } from '../../views/Edit/Default/index.js' import { DefaultListView } from '../../views/List/Default/index.js' @@ -20,7 +22,15 @@ export const metadata = { title: 'Next.js', } -const rtlLanguages = ['ar', 'fa', 'ha', 'ku', 'ur', 'ps', 'dv', 'ks', 'khw', 'he', 'yi'] +import { Merriweather } from 'next/font/google' + +const merriweather = Merriweather({ + display: 'swap', + style: ['normal', 'italic'], + subsets: ['latin'], + variable: '--font-serif', + weight: ['400', '900'], +}) export const RootLayout = async ({ children, @@ -30,26 +40,37 @@ export const RootLayout = async ({ config: Promise }) => { const config = await configPromise - const clientConfig = await createClientConfig(config) const headers = getHeaders() const cookies = parseCookies(headers) - const lang = - getRequestLanguage({ - config, - cookies, - headers, - }) ?? clientConfig.i18n.fallbackLanguage + const languageCode = getRequestLanguage({ + config, + cookies, + headers, + }) - const dir = rtlLanguages.includes(lang) ? 'RTL' : 'LTR' + const payload = await getPayloadHMR({ config }) + const i18n = await initI18n({ config: config.i18n, context: 'client', language: languageCode }) + const clientConfig = await createClientConfig({ config, t: i18n.t }) - const mergedTranslations = deepMerge(translations, clientConfig.i18n.translations) + const dir = (rtlLanguages as unknown as AcceptedLanguages[]).includes(languageCode) + ? 'RTL' + : 'LTR' - const languageOptions = Object.entries(translations || {}).map(([language, translations]) => ({ - label: translations.general.thisLanguage, - value: language, - })) + const languageOptions = Object.entries(config.i18n.supportedLanguages || {}).reduce( + (acc, [language, languageConfig]) => { + if (Object.keys(config.i18n.supportedLanguages).includes(language)) { + acc.push({ + label: languageConfig.translations.general.thisLanguage, + value: language, + }) + } + + return acc + }, + [], + ) // eslint-disable-next-line @typescript-eslint/require-await async function switchLanguageServerAction(lang: string): Promise { @@ -66,20 +87,23 @@ export const RootLayout = async ({ DefaultListView, children, config, + i18n, + payload, }) return ( - + {wrappedChildren} diff --git a/packages/next/src/next-fileupload/handlers.ts b/packages/next/src/next-fileupload/handlers.ts index 0904d784fa..7a4860d9b1 100644 --- a/packages/next/src/next-fileupload/handlers.ts +++ b/packages/next/src/next-fileupload/handlers.ts @@ -77,7 +77,7 @@ export const tempFileHandler: Handler = (options, fieldname, filename) => { } export const memHandler: Handler = (options, fieldname, filename) => { - const buffers = [] + const buffers: Buffer[] = [] const hash = crypto.createHash('md5') let fileSize = 0 let completed = false diff --git a/packages/next/src/next-fileupload/isEligibleRequest.ts b/packages/next/src/next-fileupload/isEligibleRequest.ts index b7722366c5..3632008e6f 100644 --- a/packages/next/src/next-fileupload/isEligibleRequest.ts +++ b/packages/next/src/next-fileupload/isEligibleRequest.ts @@ -1,4 +1,5 @@ -const ACCEPTABLE_CONTENT_TYPE = /^multipart\/['"()+-_]+(?:; ?['"()+-_]*)+$/i +// eslint-disable-next-line regexp/no-super-linear-backtracking, regexp/no-obscure-range +const ACCEPTABLE_CONTENT_TYPE = /multipart\/['"()+-_]+(?:; ?['"()+-_]*)+$/i const UNACCEPTABLE_METHODS = new Set(['GET', 'HEAD', 'DELETE', 'OPTIONS', 'CONNECT', 'TRACE']) const hasBody = (req: Request): boolean => { diff --git a/packages/next/src/next-fileupload/processMultipart.ts b/packages/next/src/next-fileupload/processMultipart.ts index 1722b4e13c..c7fe71fee5 100644 --- a/packages/next/src/next-fileupload/processMultipart.ts +++ b/packages/next/src/next-fileupload/processMultipart.ts @@ -1,4 +1,5 @@ import Busboy from 'busboy' +import httpStatus from 'http-status' import { APIError } from 'payload/errors' import type { NextFileUploadOptions, NextFileUploadResponse } from './index.js' @@ -17,6 +18,17 @@ type ProcessMultipart = (args: { }) => Promise export const processMultipart: ProcessMultipart = async ({ options, request }) => { let parsingRequest = true + + let fileCount = 0 + let filesCompleted = 0 + let allFilesHaveResolved: (value?: unknown) => void + let failedResolvingFiles: (err: Error) => void + + const allFilesComplete = new Promise((res, rej) => { + allFilesHaveResolved = res + failedResolvingFiles = rej + }) + const result: NextFileUploadResponse = { fields: undefined, files: undefined, @@ -36,6 +48,7 @@ export const processMultipart: ProcessMultipart = async ({ options, request }) = // Build req.files fields busboy.on('file', (field, file, info) => { + fileCount += 1 // Parse file name(cutting huge names, decoding, etc..). const { encoding, filename: name, mimeType: mime } = info const filename = parseFileName(options, name) @@ -73,7 +86,9 @@ export const processMultipart: ProcessMultipart = async ({ options, request }) = debugLog(options, `Aborting upload because of size limit ${field}->${filename}.`) cleanup() parsingRequest = false - throw new APIError(options.responseOnLimit, 413, { size: getFileSize() }) + throw new APIError(options.responseOnLimit, httpStatus.REQUEST_ENTITY_TOO_LARGE, { + size: getFileSize(), + }) } }) @@ -95,6 +110,8 @@ export const processMultipart: ProcessMultipart = async ({ options, request }) = return debugLog(options, `Don't add file instance if original name and size are empty`) } + filesCompleted += 1 + result.files = buildFields( result.files, field, @@ -117,19 +134,25 @@ export const processMultipart: ProcessMultipart = async ({ options, request }) = request[waitFlushProperty] = [] } request[waitFlushProperty].push(writePromise) + + if (filesCompleted === fileCount) { + allFilesHaveResolved() + } }) file.on('error', (err) => { uploadTimer.clear() debugLog(options, `File Error: ${err.message}`) cleanup() + failedResolvingFiles(err) }) + // Start upload process. debugLog(options, `New upload started ${field}->${filename}, bytes:${getFileSize()}`) uploadTimer.set() }) - busboy.on('finish', () => { + busboy.on('finish', async () => { debugLog(options, `Busboy finished parsing request.`) if (options.parseNested) { result.fields = processNested(result.fields) @@ -137,20 +160,27 @@ export const processMultipart: ProcessMultipart = async ({ options, request }) = } if (request[waitFlushProperty]) { - Promise.all(request[waitFlushProperty]).then(() => { - delete request[waitFlushProperty] - }) + try { + await Promise.all(request[waitFlushProperty]).then(() => { + delete request[waitFlushProperty] + }) + } catch (err) { + debugLog(options, `Error waiting for file write promises: ${err}`) + } } + + return result }) busboy.on('error', (err) => { debugLog(options, `Busboy error`) parsingRequest = false - throw new APIError('Busboy error parsing multipart request', 500) + throw new APIError('Busboy error parsing multipart request', httpStatus.BAD_REQUEST) }) const reader = request.body.getReader() + // Start parsing request while (parsingRequest) { const { done, value } = await reader.read() @@ -163,5 +193,7 @@ export const processMultipart: ProcessMultipart = async ({ options, request }) = } } + if (fileCount !== 0) await allFilesComplete + return result } diff --git a/packages/next/src/next-fileupload/utilities.ts b/packages/next/src/next-fileupload/utilities.ts index 52627dd6a8..7d2e652860 100644 --- a/packages/next/src/next-fileupload/utilities.ts +++ b/packages/next/src/next-fileupload/utilities.ts @@ -19,7 +19,7 @@ let tempCounter = 0 export const debugLog = (options: NextFileUploadOptions, msg: string) => { const opts = options || {} if (!opts.debug) return false - console.log(`Express-file-upload: ${msg}`) // eslint-disable-line + console.log(`Next-file-upload: ${msg}`) // eslint-disable-line return true } @@ -287,8 +287,9 @@ export const parseFileName: ParseFileName = (opts, fileName) => { ? opts.safeFileNames : SAFE_FILE_NAME_REGEX // Parse file name extension. - let { name, extension } = parseFileNameExtension(opts.preserveExtension, parsedName) - if (extension.length) extension = '.' + extension.replace(nameRegex, '') + const parsedFileName = parseFileNameExtension(opts.preserveExtension, parsedName) + if (parsedFileName.extension.length) + parsedFileName.extension = '.' + parsedFileName.extension.replace(nameRegex, '') - return name.replace(nameRegex, '').concat(extension) + return parsedFileName.name.replace(nameRegex, '').concat(parsedFileName.extension) } diff --git a/packages/next/src/routes/rest/auth/logout.ts b/packages/next/src/routes/rest/auth/logout.ts index e68589a340..0f9168daf8 100644 --- a/packages/next/src/routes/rest/auth/logout.ts +++ b/packages/next/src/routes/rest/auth/logout.ts @@ -5,7 +5,7 @@ import { logoutOperation } from 'payload/operations' import type { CollectionRouteHandler } from '../types.js' export const logout: CollectionRouteHandler = async ({ collection, req }) => { - const result = logoutOperation({ + const result = await logoutOperation({ collection, req, }) diff --git a/packages/next/src/routes/rest/auth/registerFirstUser.ts b/packages/next/src/routes/rest/auth/registerFirstUser.ts index 88352e7a7e..44c2076044 100644 --- a/packages/next/src/routes/rest/auth/registerFirstUser.ts +++ b/packages/next/src/routes/rest/auth/registerFirstUser.ts @@ -1,5 +1,6 @@ import httpStatus from 'http-status' import { generatePayloadCookie } from 'payload/auth' +import { ValidationError } from 'payload/errors' import { registerFirstUserOperation } from 'payload/operations' import type { CollectionRouteHandler } from '../types.js' @@ -7,6 +8,15 @@ import type { CollectionRouteHandler } from '../types.js' export const registerFirstUser: CollectionRouteHandler = async ({ collection, req }) => { const data = req.data + if (data?.password !== data['confirm-password']) { + throw new ValidationError([ + { + field: 'confirm-password', + message: req.t('Password and confirm password fields do not match.'), + }, + ]) + } + const result = await registerFirstUserOperation({ collection, data: { diff --git a/packages/next/src/routes/rest/buildFormState.ts b/packages/next/src/routes/rest/buildFormState.ts index 345e3da570..10ef286db2 100644 --- a/packages/next/src/routes/rest/buildFormState.ts +++ b/packages/next/src/routes/rest/buildFormState.ts @@ -1,11 +1,5 @@ import type { BuildFormStateArgs } from '@payloadcms/ui/forms/buildStateFromSchema' -import type { - DocumentPreferences, - Field, - PayloadRequest, - SanitizedConfig, - TypeWithID, -} from 'payload/types' +import type { DocumentPreferences, Field, PayloadRequest, TypeWithID } from 'payload/types' import { buildStateFromSchema } from '@payloadcms/ui/forms/buildStateFromSchema' import { reduceFieldsToValues } from '@payloadcms/ui/utilities/reduceFieldsToValues' @@ -22,12 +16,12 @@ if (!cached) { cached = global._payload_fieldSchemaMap = null } -export const getFieldSchemaMap = (config: SanitizedConfig): FieldSchemaMap => { +export const getFieldSchemaMap = (req: PayloadRequest): FieldSchemaMap => { if (cached && process.env.NODE_ENV !== 'development') { return cached } - cached = buildFieldSchemaMap(config) + cached = buildFieldSchemaMap(req) return cached } @@ -65,7 +59,7 @@ export const buildFormState = async ({ req }: { req: PayloadRequest }) => { }) } - const fieldSchemaMap = getFieldSchemaMap(req.payload.config) + const fieldSchemaMap = getFieldSchemaMap(req) const id = collectionSlug ? reqData.id : undefined const schemaPathSegments = schemaPath.split('.') @@ -162,7 +156,7 @@ export const buildFormState = async ({ req }: { req: PayloadRequest }) => { }) } - if (globalSlug) { + if (globalSlug && schemaPath === globalSlug) { resolvedData = await req.payload.findGlobal({ slug: globalSlug, depth: 0, @@ -193,6 +187,16 @@ export const buildFormState = async ({ req }: { req: PayloadRequest }) => { req, }) + // Maintain form state of file + if ( + collectionSlug && + req.payload.collections[collectionSlug]?.config?.upload && + formState && + formState.file + ) { + result.file = formState.file + } + return Response.json(result, { status: httpStatus.OK, }) diff --git a/packages/next/src/routes/rest/collections/deleteByID.ts b/packages/next/src/routes/rest/collections/deleteByID.ts index cb9ef65515..55646e7074 100644 --- a/packages/next/src/routes/rest/collections/deleteByID.ts +++ b/packages/next/src/routes/rest/collections/deleteByID.ts @@ -4,9 +4,22 @@ import { isNumber } from 'payload/utilities' import type { CollectionRouteHandlerWithID } from '../types.js' -export const deleteByID: CollectionRouteHandlerWithID = async ({ id, collection, req }) => { +import { sanitizeCollectionID } from '../utilities/sanitizeCollectionID.js' + +export const deleteByID: CollectionRouteHandlerWithID = async ({ + id: incomingID, + collection, + req, +}) => { const { searchParams } = req const depth = searchParams.get('depth') + + const id = sanitizeCollectionID({ + id: incomingID, + collectionSlug: collection.config.slug, + payload: req.payload, + }) + const doc = await deleteByIDOperation({ id, collection, diff --git a/packages/next/src/routes/rest/collections/duplicate.ts b/packages/next/src/routes/rest/collections/duplicate.ts index 622da78bbc..b488653f2d 100644 --- a/packages/next/src/routes/rest/collections/duplicate.ts +++ b/packages/next/src/routes/rest/collections/duplicate.ts @@ -5,12 +5,24 @@ import { isNumber } from 'payload/utilities' import type { CollectionRouteHandlerWithID } from '../types.js' -export const duplicate: CollectionRouteHandlerWithID = async ({ id, collection, req }) => { +import { sanitizeCollectionID } from '../utilities/sanitizeCollectionID.js' + +export const duplicate: CollectionRouteHandlerWithID = async ({ + id: incomingID, + collection, + req, +}) => { const { searchParams } = req const depth = searchParams.get('depth') // draft defaults to true, unless explicitly set requested as false to prevent the newly duplicated document from being published const draft = searchParams.get('draft') !== 'false' + const id = sanitizeCollectionID({ + id: incomingID, + collectionSlug: collection.config.slug, + payload: req.payload, + }) + const doc = await duplicateOperation({ id, collection, diff --git a/packages/next/src/routes/rest/collections/findByID.ts b/packages/next/src/routes/rest/collections/findByID.ts index 545d8eccc8..5ec704b8d4 100644 --- a/packages/next/src/routes/rest/collections/findByID.ts +++ b/packages/next/src/routes/rest/collections/findByID.ts @@ -4,10 +4,22 @@ import { isNumber } from 'payload/utilities' import type { CollectionRouteHandlerWithID } from '../types.js' -export const findByID: CollectionRouteHandlerWithID = async ({ id, collection, req }) => { +import { sanitizeCollectionID } from '../utilities/sanitizeCollectionID.js' + +export const findByID: CollectionRouteHandlerWithID = async ({ + id: incomingID, + collection, + req, +}) => { const { searchParams } = req const depth = searchParams.get('depth') + const id = sanitizeCollectionID({ + id: incomingID, + collectionSlug: collection.config.slug, + payload: req.payload, + }) + const result = await findByIDOperation({ id, collection, diff --git a/packages/next/src/routes/rest/collections/findVersionByID.ts b/packages/next/src/routes/rest/collections/findVersionByID.ts index f85ca76c94..b3b1bd24fc 100644 --- a/packages/next/src/routes/rest/collections/findVersionByID.ts +++ b/packages/next/src/routes/rest/collections/findVersionByID.ts @@ -4,10 +4,22 @@ import { isNumber } from 'payload/utilities' import type { CollectionRouteHandlerWithID } from '../types.js' -export const findVersionByID: CollectionRouteHandlerWithID = async ({ id, collection, req }) => { +import { sanitizeCollectionID } from '../utilities/sanitizeCollectionID.js' + +export const findVersionByID: CollectionRouteHandlerWithID = async ({ + id: incomingID, + collection, + req, +}) => { const { searchParams } = req const depth = searchParams.get('depth') + const id = sanitizeCollectionID({ + id: incomingID, + collectionSlug: collection.config.slug, + payload: req.payload, + }) + const result = await findVersionByIDOperation({ id, collection, diff --git a/packages/next/src/routes/rest/collections/preview.ts b/packages/next/src/routes/rest/collections/preview.ts index a54e9e9242..5c99258d68 100644 --- a/packages/next/src/routes/rest/collections/preview.ts +++ b/packages/next/src/routes/rest/collections/preview.ts @@ -1,4 +1,5 @@ import httpStatus from 'http-status' +import { extractJWT } from 'payload/auth' import { findByIDOperation } from 'payload/operations' import { isNumber } from 'payload/utilities' @@ -24,15 +25,19 @@ export const preview: CollectionRouteHandlerWithID = async ({ id, collection, re (config) => config.slug === collection.config.slug, )?.admin?.preview + const token = extractJWT(req) + if (typeof generatePreviewURL === 'function') { try { previewURL = await generatePreviewURL(result, { locale: req.locale, - token: req.user?.token, + req, + token, }) } catch (err) { - routeError({ + return routeError({ collection, + config: req.payload.config, err, req, }) diff --git a/packages/next/src/routes/rest/collections/restoreVersion.ts b/packages/next/src/routes/rest/collections/restoreVersion.ts index 9224691861..66c1278eb3 100644 --- a/packages/next/src/routes/rest/collections/restoreVersion.ts +++ b/packages/next/src/routes/rest/collections/restoreVersion.ts @@ -4,10 +4,22 @@ import { isNumber } from 'payload/utilities' import type { CollectionRouteHandlerWithID } from '../types.js' -export const restoreVersion: CollectionRouteHandlerWithID = async ({ id, collection, req }) => { +import { sanitizeCollectionID } from '../utilities/sanitizeCollectionID.js' + +export const restoreVersion: CollectionRouteHandlerWithID = async ({ + id: incomingID, + collection, + req, +}) => { const { searchParams } = req const depth = searchParams.get('depth') + const id = sanitizeCollectionID({ + id: incomingID, + collectionSlug: collection.config.slug, + payload: req.payload, + }) + const result = await restoreVersionOperation({ id, collection, diff --git a/packages/next/src/routes/rest/collections/updateByID.ts b/packages/next/src/routes/rest/collections/updateByID.ts index af42d1ca94..d10205a46c 100644 --- a/packages/next/src/routes/rest/collections/updateByID.ts +++ b/packages/next/src/routes/rest/collections/updateByID.ts @@ -4,12 +4,24 @@ import { isNumber } from 'payload/utilities' import type { CollectionRouteHandlerWithID } from '../types.js' -export const updateByID: CollectionRouteHandlerWithID = async ({ id, collection, req }) => { +import { sanitizeCollectionID } from '../utilities/sanitizeCollectionID.js' + +export const updateByID: CollectionRouteHandlerWithID = async ({ + id: incomingID, + collection, + req, +}) => { const { searchParams } = req const depth = searchParams.get('depth') const autosave = searchParams.get('autosave') === 'true' const draft = searchParams.get('draft') === 'true' + const id = sanitizeCollectionID({ + id: incomingID, + collectionSlug: collection.config.slug, + payload: req.payload, + }) + const doc = await updateByIDOperation({ id, autosave, diff --git a/packages/next/src/routes/rest/files/getFile.ts b/packages/next/src/routes/rest/files/getFile.ts index 6d564a02b9..d99ac5477c 100644 --- a/packages/next/src/routes/rest/files/getFile.ts +++ b/packages/next/src/routes/rest/files/getFile.ts @@ -66,6 +66,7 @@ export const getFile = async ({ collection, filename, req }: Args): Promise { (config) => config.slug === globalConfig.slug, )?.admin?.preview + const token = extractJWT(req) + if (typeof generatePreviewURL === 'function') { try { previewURL = await generatePreviewURL(result, { locale: req.locale, - token: req.user?.token, + req, + token, }) } catch (err) { - routeError({ + return routeError({ + config: req.payload.config, err, req, }) diff --git a/packages/next/src/routes/rest/index.ts b/packages/next/src/routes/rest/index.ts index 323812ee2b..e9962c5def 100644 --- a/packages/next/src/routes/rest/index.ts +++ b/packages/next/src/routes/rest/index.ts @@ -303,6 +303,7 @@ export const GET = } catch (error) { return routeError({ collection, + config, err: error, req, }) @@ -445,6 +446,7 @@ export const POST = } catch (error) { return routeError({ collection, + config, err: error, req, }) @@ -514,6 +516,7 @@ export const DELETE = } catch (error) { return routeError({ collection, + config, err: error, req, }) @@ -583,6 +586,7 @@ export const PATCH = } catch (error) { return routeError({ collection, + config, err: error, req, }) diff --git a/packages/next/src/routes/rest/routeError.ts b/packages/next/src/routes/rest/routeError.ts index 9ab56800ce..d362fc4e84 100644 --- a/packages/next/src/routes/rest/routeError.ts +++ b/packages/next/src/routes/rest/routeError.ts @@ -1,7 +1,9 @@ -import type { Collection, PayloadRequest } from 'payload/types' +import type { Collection, PayloadRequest, SanitizedConfig } from 'payload/types' import httpStatus from 'http-status' -import { APIError, ValidationError } from 'payload/errors' +import { APIError } from 'payload/errors' + +import { getPayloadHMR } from '../../utilities/getPayloadHMR.js' export type ErrorResponse = { data?: any; errors: unknown[]; stack?: string } @@ -66,26 +68,33 @@ const formatErrors = (incoming: { [key: string]: unknown } | APIError): ErrorRes } } -export const routeError = ({ +export const routeError = async ({ collection, + config: configArg, err, req, }: { collection?: Collection + config: Promise | SanitizedConfig err: APIError req: PayloadRequest }) => { - if (!req?.payload) { - return Response.json( - { - message: err.message, - stack: err.stack, - }, - { status: httpStatus.INTERNAL_SERVER_ERROR }, - ) + let payload = req?.payload + + if (!payload) { + try { + payload = await getPayloadHMR({ config: configArg }) + } catch (e) { + return Response.json( + { + message: 'There was an error initializing Payload', + }, + { status: httpStatus.INTERNAL_SERVER_ERROR }, + ) + } } - const { config, logger } = req.payload + const { config, logger } = payload let response = formatErrors(err) diff --git a/packages/next/src/routes/rest/utilities/sanitizeCollectionID.ts b/packages/next/src/routes/rest/utilities/sanitizeCollectionID.ts new file mode 100644 index 0000000000..98165dcd15 --- /dev/null +++ b/packages/next/src/routes/rest/utilities/sanitizeCollectionID.ts @@ -0,0 +1,23 @@ +import type { Payload } from 'payload/types' + +type Args = { + collectionSlug: string + id: string + payload: Payload +} + +export const sanitizeCollectionID = ({ id, collectionSlug, payload }: Args): number | string => { + let sanitizedID: number | string = id + const collection = payload.collections[collectionSlug] + + // If default db ID type is a number, we should sanitize + let shouldSanitize = Boolean(payload.db.defaultIDType === 'number') + + // UNLESS the customIDType for this collection is text.... then we leave it + if (shouldSanitize && collection.customIDType === 'text') shouldSanitize = false + + // If we still should sanitize, parse float + if (shouldSanitize) sanitizedID = parseFloat(sanitizedID) + + return sanitizedID +} diff --git a/packages/next/src/scss/app.scss b/packages/next/src/scss/app.scss index 308370552b..c87413e4fb 100644 --- a/packages/next/src/scss/app.scss +++ b/packages/next/src/scss/app.scss @@ -1,4 +1,3 @@ -@import './fonts.scss'; @import './styles.scss'; @import './toastify.scss'; @import './colors.scss'; @@ -20,9 +19,9 @@ --theme-overlay: rgba(5, 5, 5, 0.5); --theme-baseline: #{$baseline-px}; --theme-baseline-body-size: #{$baseline-body-size}; - --font-body: 'Suisse Intl', system-ui; + --font-body: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, + sans-serif; --font-mono: monospace; - --font-serif: 'Merriweather', serif; --style-radius-s: #{$style-radius-s}; --style-radius-m: #{$style-radius-m}; diff --git a/packages/next/src/scss/fonts.scss b/packages/next/src/scss/fonts.scss deleted file mode 100644 index f40a8b722e..0000000000 --- a/packages/next/src/scss/fonts.scss +++ /dev/null @@ -1,75 +0,0 @@ -@font-face { - font-family: 'Suisse Intl'; - src: - url('../assets/fonts/SuisseIntl.woff2') format('woff2'), - url('../assets/fonts/SuisseIntl.woff') format('woff'); - font-weight: normal; - font-style: normal; -} - -@font-face { - font-family: 'Suisse Intl'; - src: - url('../assets/fonts/SuisseIntl-Medium.woff2') format('woff2'), - url('../assets/fonts/SuisseIntl-Medium.woff') format('woff'); - font-weight: 500; - font-style: normal; -} - -@font-face { - font-family: 'Suisse Intl'; - src: - url('../assets/fonts/SuisseIntl-SemiBold.woff2') format('woff2'), - url('../assets/fonts/SuisseIntl-SemiBold.woff') format('woff'); - font-weight: 600; - font-style: normal; -} - -@font-face { - font-family: 'Suisse Intl'; - src: - url('../assets/fonts/SuisseIntl-Bold.woff2') format('woff2'), - url('../assets/fonts/SuisseIntl-Bold.woff') format('woff'); - font-weight: bold; - font-style: normal; -} - -@font-face { - font-family: 'Merriweather'; - font-style: normal; - font-weight: 400; - src: - local(''), - url('../assets/fonts/merriweather-v30-latin-regular.woff2') format('woff2'), - url('../assets/fonts/merriweather-v30-latin-regular.woff') format('woff'); -} - -@font-face { - font-family: 'Merriweather'; - font-style: italic; - font-weight: 400; - src: - local(''), - url('../assets/fonts/merriweather-v30-latin-italic.woff2') format('woff2'), - url('../assets/fonts/merriweather-v30-latin-italic.woff') format('woff'); -} - -@font-face { - font-family: 'Merriweather'; - font-style: normal; - font-weight: 900; - src: - local(''), - url('../assets/fonts/merriweather-v30-latin-900.woff2') format('woff2'), - url('../assets/fonts/merriweather-v30-latin-900.woff') format('woff'); -} - -@font-face { - font-family: 'Merriweather'; - font-style: italic; - font-weight: 900; - src: - local(''), - url('../assets/fonts/merriweather-v30-latin-900italic.woff2') format('woff2'), - url('../assets/fonts/merriweather-v30-latin-900italic.woff') format('woff'); -} diff --git a/packages/next/src/scss/vars.scss b/packages/next/src/scss/vars.scss index ce16a434b7..00c7d34f8a 100644 --- a/packages/next/src/scss/vars.scss +++ b/packages/next/src/scss/vars.scss @@ -21,13 +21,6 @@ $baseline: math.div($baseline-px, $baseline-body-size) + rem; @return (math.div($baseline-px, $baseline-body-size) * $multiplier) + rem; } -////////////////////////////// -// FONTS (DEPRECATED. DO NOT USE. PREFER CSS VARIABLES) -////////////////////////////// - -$font-body: 'Suisse Intl' !default; -$font-mono: monospace !default; - ////////////////////////////// // COLORS (DEPRECATED. DO NOT USE. PREFER CSS VARIABLES) ////////////////////////////// diff --git a/packages/next/src/utilities/buildFieldSchemaMap/index.ts b/packages/next/src/utilities/buildFieldSchemaMap/index.ts index 76859df3fd..d539688db4 100644 --- a/packages/next/src/utilities/buildFieldSchemaMap/index.ts +++ b/packages/next/src/utilities/buildFieldSchemaMap/index.ts @@ -1,10 +1,13 @@ -import type { SanitizedConfig } from 'payload/types' +import type { PayloadRequest } from 'payload/types' import type { FieldSchemaMap } from './types.js' import { traverseFields } from './traverseFields.js' -export const buildFieldSchemaMap = (config: SanitizedConfig): FieldSchemaMap => { +export const buildFieldSchemaMap = ({ + i18n, + payload: { config }, +}: PayloadRequest): FieldSchemaMap => { const result: FieldSchemaMap = new Map() const validRelationships = config.collections.map((c) => c.slug) || [] @@ -13,6 +16,7 @@ export const buildFieldSchemaMap = (config: SanitizedConfig): FieldSchemaMap => traverseFields({ config, fields: collection.fields, + i18n, schemaMap: result, schemaPath: collection.slug, validRelationships, @@ -23,6 +27,7 @@ export const buildFieldSchemaMap = (config: SanitizedConfig): FieldSchemaMap => traverseFields({ config, fields: global.fields, + i18n, schemaMap: result, schemaPath: global.slug, validRelationships, diff --git a/packages/next/src/utilities/buildFieldSchemaMap/traverseFields.ts b/packages/next/src/utilities/buildFieldSchemaMap/traverseFields.ts index 2cb94dfb56..b32cb69f30 100644 --- a/packages/next/src/utilities/buildFieldSchemaMap/traverseFields.ts +++ b/packages/next/src/utilities/buildFieldSchemaMap/traverseFields.ts @@ -1,3 +1,4 @@ +import type { I18n } from '@payloadcms/translations' import type { Field, SanitizedConfig } from 'payload/types' import { tabHasName } from 'payload/types' @@ -7,6 +8,7 @@ import type { FieldSchemaMap } from './types.js' type Args = { config: SanitizedConfig fields: Field[] + i18n: I18n schemaMap: FieldSchemaMap schemaPath: string validRelationships: string[] @@ -15,6 +17,7 @@ type Args = { export const traverseFields = ({ config, fields, + i18n, schemaMap, schemaPath, validRelationships, @@ -28,6 +31,7 @@ export const traverseFields = ({ traverseFields({ config, fields: field.fields, + i18n, schemaMap, schemaPath: `${schemaPath}.${field.name}`, validRelationships, @@ -39,6 +43,7 @@ export const traverseFields = ({ traverseFields({ config, fields: field.fields, + i18n, schemaMap, schemaPath, validRelationships, @@ -54,6 +59,7 @@ export const traverseFields = ({ traverseFields({ config, fields: block.fields, + i18n, schemaMap, schemaPath: blockSchemaPath, validRelationships, @@ -65,6 +71,7 @@ export const traverseFields = ({ if (typeof field.editor.generateSchemaMap === 'function') { field.editor.generateSchemaMap({ config, + i18n, schemaMap, schemaPath: `${schemaPath}.${field.name}`, }) @@ -83,6 +90,7 @@ export const traverseFields = ({ traverseFields({ config, fields: tab.fields, + i18n, schemaMap, schemaPath: tabSchemaPath, validRelationships, diff --git a/packages/next/src/utilities/createPayloadRequest.ts b/packages/next/src/utilities/createPayloadRequest.ts index 1d171d1a57..72ec72bfcd 100644 --- a/packages/next/src/utilities/createPayloadRequest.ts +++ b/packages/next/src/utilities/createPayloadRequest.ts @@ -6,7 +6,6 @@ import type { } from 'payload/types' import { initI18n } from '@payloadcms/translations' -import { translations } from '@payloadcms/translations/api' import { executeAuthStrategies } from 'payload/auth' import { parseCookies } from 'payload/auth' import { getDataLoader } from 'payload/utilities' @@ -72,11 +71,10 @@ export const createPayloadRequest = async ({ headers: request.headers, }) - const i18n = initI18n({ + const i18n = await initI18n({ config: config.i18n, context: 'api', language, - translations, }) const customRequest: CustomPayloadRequest = { diff --git a/packages/next/src/utilities/getDataAndFile.ts b/packages/next/src/utilities/getDataAndFile.ts index 181cd7e990..e81a1daadb 100644 --- a/packages/next/src/utilities/getDataAndFile.ts +++ b/packages/next/src/utilities/getDataAndFile.ts @@ -1,5 +1,7 @@ import type { Collection, CustomPayloadRequest, SanitizedConfig } from 'payload/types' +import type { NextFileUploadOptions } from '../next-fileupload/index.js' + import { nextFileUpload } from '../next-fileupload/index.js' type GetDataAndFile = (args: { @@ -10,64 +12,53 @@ type GetDataAndFile = (args: { data: Record file: CustomPayloadRequest['file'] }> -export const getDataAndFile: GetDataAndFile = async ({ collection, config, request }) => { +export const getDataAndFile: GetDataAndFile = async ({ + collection, + config, + request: incomingRequest, +}) => { let data: Record = undefined let file: CustomPayloadRequest['file'] = undefined - if (['PATCH', 'POST', 'PUT'].includes(request.method.toUpperCase()) && request.body) { + if ( + ['PATCH', 'POST', 'PUT'].includes(incomingRequest.method.toUpperCase()) && + incomingRequest.body + ) { + const request = new Request(incomingRequest) const [contentType] = (request.headers.get('Content-Type') || '').split(';') if (contentType === 'application/json') { - data = await request.json() - } else if (contentType === 'multipart/form-data') { - // possible upload request - if (collection?.config?.upload) { - // load file in memory - if (!config.upload?.useTempFiles) { - const formData = await request.formData() - const formFile = formData.get('file') - - if (formFile instanceof Blob) { - const bytes = await formFile.arrayBuffer() - const buffer = Buffer.from(bytes) - - file = { - name: formFile.name, - data: buffer, - mimetype: formFile.type, - size: formFile.size, - } - } - - const payloadData = formData.get('_payload') - - if (typeof payloadData === 'string') { - data = JSON.parse(payloadData) - } - } else { - // store temp file on disk - const { error, fields, files } = await nextFileUpload({ - options: config.upload as any, - request, - }) - - if (error) { - throw new Error(error.message) - } - - if (files?.file) file = files.file - - if (fields?._payload && typeof fields._payload === 'string') { - data = JSON.parse(fields._payload) - } + const bodyByteSize = parseInt(request.headers.get('Content-Length') || '0', 10) + const upperByteLimit = + typeof config.upload?.limits?.fieldSize === 'number' + ? config.upload.limits.fields + : undefined + if (bodyByteSize <= upperByteLimit || upperByteLimit === undefined) { + try { + data = await request.json() + } catch (error) { + data = {} } } else { - // non upload request - const formData = await request.formData() - const payloadData = formData.get('_payload') + throw new Error('Request body size exceeds the limit') + } + } else { + if (request.headers.has('Content-Length') && request.headers.get('Content-Length') !== '0') { + const { error, fields, files } = await nextFileUpload({ + options: config.upload as NextFileUploadOptions, + request, + }) - if (typeof payloadData === 'string') { - data = JSON.parse(payloadData) + if (error) { + throw new Error(error.message) + } + + if (collection?.config?.upload && files?.file) { + file = files.file + } + + if (fields?._payload && typeof fields._payload === 'string') { + data = JSON.parse(fields._payload) } } } diff --git a/packages/next/src/utilities/getNextI18n.ts b/packages/next/src/utilities/getNextI18n.ts deleted file mode 100644 index 25a7d2a523..0000000000 --- a/packages/next/src/utilities/getNextI18n.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type { I18n } from '@payloadcms/translations' -import type { SanitizedConfig } from 'payload/types' - -import { initI18n } from '@payloadcms/translations' -import { translations } from '@payloadcms/translations/client' -import { cookies, headers } from 'next/headers.js' - -import { getRequestLanguage } from './getRequestLanguage.js' - -export const getNextI18n = ({ - config, - language, -}: { - config: SanitizedConfig - language?: string -}): I18n => - initI18n({ - config: config.i18n, - context: 'client', - language: language || getRequestLanguage({ config, cookies: cookies(), headers: headers() }), - translations, - }) diff --git a/packages/next/src/utilities/getNextRequestI18n.ts b/packages/next/src/utilities/getNextRequestI18n.ts new file mode 100644 index 0000000000..79b7a7d97b --- /dev/null +++ b/packages/next/src/utilities/getNextRequestI18n.ts @@ -0,0 +1,19 @@ +import type { I18n } from '@payloadcms/translations' +import type { SanitizedConfig } from 'payload/types' + +import { initI18n } from '@payloadcms/translations' +import { cookies, headers } from 'next/headers.js' + +import { getRequestLanguage } from './getRequestLanguage.js' + +/** + * In the context of NextJS, this function initializes the i18n object for the current request. + * + * It must be called on the server side, and within the lifecycle of a request since it relies on the request headers and cookies. + */ +export const getNextRequestI18n = async ({ config }: { config: SanitizedConfig }): Promise => + initI18n({ + config: config.i18n, + context: 'client', + language: getRequestLanguage({ config, cookies: cookies(), headers: headers() }), + }) diff --git a/packages/next/src/utilities/getPayloadHMR.ts b/packages/next/src/utilities/getPayloadHMR.ts index d6ef9a35d9..dc00b54338 100644 --- a/packages/next/src/utilities/getPayloadHMR.ts +++ b/packages/next/src/utilities/getPayloadHMR.ts @@ -35,7 +35,10 @@ export const getPayloadHMR = async (options: InitOptions): Promise => { cached.payload.config = config cached.payload.collections = config.collections.reduce((collections, collection) => { - collections[collection.slug] = { config: collection } + collections[collection.slug] = { + config: collection, + customIDType: cached.payload.collections[collection.slug]?.customIDType, + } return collections }, {}) diff --git a/packages/next/src/utilities/getRequestLanguage.ts b/packages/next/src/utilities/getRequestLanguage.ts index 6c6c77c70c..7b4a45891c 100644 --- a/packages/next/src/utilities/getRequestLanguage.ts +++ b/packages/next/src/utilities/getRequestLanguage.ts @@ -1,12 +1,13 @@ +import type { AcceptedLanguages } from '@payloadcms/translations' import type { ReadonlyRequestCookies } from 'next/dist/server/web/spec-extension/adapters/request-cookies.js' import type { SanitizedConfig } from 'payload/config' -import { matchLanguage } from '@payloadcms/translations' +import { extractHeaderLanguage } from '@payloadcms/translations' type GetRequestLanguageArgs = { config: SanitizedConfig cookies: Map | ReadonlyRequestCookies - defaultLanguage?: string + defaultLanguage?: AcceptedLanguages headers: Request['headers'] } @@ -15,14 +16,23 @@ export const getRequestLanguage = ({ cookies, defaultLanguage = 'en', headers, -}: GetRequestLanguageArgs): string => { - const acceptLanguage = headers.get('Accept-Language') - const cookieLanguage = cookies.get(`${config.cookiePrefix || 'payload'}-lng`) +}: GetRequestLanguageArgs): AcceptedLanguages => { + const langCookie = cookies.get(`${config.cookiePrefix || 'payload'}-lng`) + const languageFromCookie = typeof langCookie === 'string' ? langCookie : langCookie?.value + const languageFromHeader = headers.get('Accept-Language') + ? extractHeaderLanguage(headers.get('Accept-Language')) + : undefined + const fallbackLang = config?.i18n?.fallbackLanguage || defaultLanguage - const reqLanguage = - (typeof cookieLanguage === 'string' ? cookieLanguage : cookieLanguage?.value) || - acceptLanguage || - defaultLanguage + const supportedLanguageKeys = Object.keys(config?.i18n?.supportedLanguages || {}) - return matchLanguage(reqLanguage) + if (languageFromCookie && supportedLanguageKeys.includes(languageFromCookie)) { + return languageFromCookie as AcceptedLanguages + } + + if (languageFromHeader && supportedLanguageKeys.includes(languageFromHeader)) { + return languageFromHeader + } + + return supportedLanguageKeys.includes(fallbackLang) ? (fallbackLang as AcceptedLanguages) : 'en' } diff --git a/packages/next/src/utilities/initPage.ts b/packages/next/src/utilities/initPage.ts index 1704570209..561675a281 100644 --- a/packages/next/src/utilities/initPage.ts +++ b/packages/next/src/utilities/initPage.ts @@ -8,7 +8,6 @@ import type { } from 'payload/types' import { initI18n } from '@payloadcms/translations' -import { translations } from '@payloadcms/translations/client' import { findLocaleFromCode } from '@payloadcms/ui/utilities/findLocaleFromCode' import { headers as getHeaders } from 'next/headers.js' import { notFound, redirect } from 'next/navigation.js' @@ -26,6 +25,8 @@ type Args = { searchParams: { [key: string]: string | string[] | undefined } } +const authRoutes = ['/login', '/logout', '/create-first-user', '/forgot', '/reset', '/verify'] + export const initPage = async ({ config: configPromise, redirectUnauthenticatedUser = false, @@ -45,14 +46,13 @@ export const initPage = async ({ const cookies = parseCookies(headers) const language = getRequestLanguage({ config: payload.config, cookies, headers }) - const i18n = initI18n({ + const i18n = await initI18n({ config: payload.config.i18n, context: 'client', language, - translations, }) - const req = createLocalReq( + const req = await createLocalReq( { fallbackLocale: null, locale: locale.code, @@ -81,13 +81,19 @@ export const initPage = async ({ .filter(Boolean), } - const routeSegments = route.replace(payload.config.routes.admin, '').split('/').filter(Boolean) + const { + routes: { admin: adminRoute }, + } = payload.config + + const routeSegments = route.replace(adminRoute, '').split('/').filter(Boolean) const [entityType, entitySlug, createOrID] = routeSegments const collectionSlug = entityType === 'collections' ? entitySlug : undefined const globalSlug = entityType === 'globals' ? entitySlug : undefined const docID = collectionSlug && createOrID !== 'create' ? createOrID : undefined - if (redirectUnauthenticatedUser && !user && route !== '/login') { + const isAuthRoute = authRoutes.some((r) => r === route.replace(adminRoute, '')) + + if (redirectUnauthenticatedUser && !user && !isAuthRoute) { if (searchParams && 'redirect' in searchParams) delete searchParams.redirect const stringifiedSearchParams = Object.keys(searchParams ?? {}).length @@ -97,6 +103,10 @@ export const initPage = async ({ redirect(`${routes.admin}/login?redirect=${route + stringifiedSearchParams}`) } + if (!permissions.canAccessAdmin && !isAuthRoute) { + notFound() + } + let collectionConfig: SanitizedCollectionConfig let globalConfig: SanitizedGlobalConfig diff --git a/packages/next/src/views/API/index.client.tsx b/packages/next/src/views/API/index.client.tsx index 6cf91c1c15..4578bddceb 100644 --- a/packages/next/src/views/API/index.client.tsx +++ b/packages/next/src/views/API/index.client.tsx @@ -18,7 +18,7 @@ import qs from 'qs' import * as React from 'react' import { toast } from 'react-toastify' -import { SetStepNav } from '../Edit/Default/SetStepNav/index.js' +import { SetDocumentStepNav } from '../Edit/Default/SetDocumentStepNav/index.js' import { RenderJSON } from './RenderJSON/index.js' import './index.scss' @@ -113,7 +113,7 @@ export const APIViewClient: React.FC = () => { className={[baseClass, fullscreen && `${baseClass}--fullscreen`].filter(Boolean).join(' ')} right={false} > - = async ({ initPageRe const { req, req: { + i18n, + payload, payload: { config, config: { @@ -48,10 +52,35 @@ export const CreateFirstUserView: React.FC = async ({ initPageRe }, ] + const WithServerSideProps: WithServerSidePropsType = ({ Component, ...rest }) => { + return + } + const createFirstUserFieldMap = mapFields({ + WithServerSideProps, config, fieldSchema: fields, + i18n, parentPath: userSlug, + }).map((field) => { + // Transform field types for the password and confirm-password fields + if (field.name === 'password') { + const type: keyof FieldTypes = 'password' + + return { + ...field, + type, + } + } + if (field.name === 'confirm-password') { + const type: keyof FieldTypes = 'confirmPassword' + + return { + ...field, + type, + } + } + return field }) const formState = await buildStateFromSchema({ diff --git a/packages/next/src/views/Document/getMetaBySegment.tsx b/packages/next/src/views/Document/getMetaBySegment.tsx index dde140b5f8..34fa17f494 100644 --- a/packages/next/src/views/Document/getMetaBySegment.tsx +++ b/packages/next/src/views/Document/getMetaBySegment.tsx @@ -3,7 +3,7 @@ import type { SanitizedCollectionConfig, SanitizedGlobalConfig } from 'payload/t import type { GenerateViewMetadata } from '../Root/index.js' -import { getNextI18n } from '../../utilities/getNextI18n.js' +import { getNextRequestI18n } from '../../utilities/getNextRequestI18n.js' import { generateMetadata as apiMeta } from '../API/meta.js' import { generateMetadata as editMeta } from '../Edit/meta.js' import { generateMetadata as livePreviewMeta } from '../LivePreview/meta.js' @@ -89,7 +89,7 @@ export const getMetaBySegment: GenerateEditViewMetadata = async ({ } } - const i18n = await getNextI18n({ + const i18n = await getNextRequestI18n({ config, }) diff --git a/packages/next/src/views/Edit/Default/SetStepNav/index.tsx b/packages/next/src/views/Edit/Default/SetDocumentStepNav/index.tsx similarity index 80% rename from packages/next/src/views/Edit/Default/SetStepNav/index.tsx rename to packages/next/src/views/Edit/Default/SetDocumentStepNav/index.tsx index 107b9fa4e8..ed00d67dfb 100644 --- a/packages/next/src/views/Edit/Default/SetStepNav/index.tsx +++ b/packages/next/src/views/Edit/Default/SetDocumentStepNav/index.tsx @@ -7,10 +7,11 @@ import { useStepNav } from '@payloadcms/ui/elements/StepNav' import { useConfig } from '@payloadcms/ui/providers/Config' import { useDocumentInfo } from '@payloadcms/ui/providers/DocumentInfo' import { useEditDepth } from '@payloadcms/ui/providers/EditDepth' +import { useEntityVisibility } from '@payloadcms/ui/providers/EntityVisibility' import { useTranslation } from '@payloadcms/ui/providers/Translation' import { useEffect } from 'react' -export const SetStepNav: React.FC<{ +export const SetDocumentStepNav: React.FC<{ collectionSlug?: SanitizedCollectionConfig['slug'] globalLabel?: SanitizedGlobalConfig['label'] globalSlug?: SanitizedGlobalConfig['slug'] @@ -24,6 +25,8 @@ export const SetStepNav: React.FC<{ const view: string | undefined = props?.view || undefined const { isEditing, title } = useDocumentInfo() + const { isEntityVisible } = useEntityVisibility() + const isVisible = isEntityVisible({ collectionSlug, globalSlug }) const { setStepNav } = useStepNav() @@ -41,13 +44,13 @@ export const SetStepNav: React.FC<{ if (collectionSlug) { nav.push({ label: getTranslation(pluralLabel, i18n), - url: `${admin}/collections/${collectionSlug}`, + url: isVisible ? `${admin}/collections/${collectionSlug}` : undefined, }) if (isEditing) { nav.push({ label: (useAsTitle && useAsTitle !== 'id' && title) || `${id}`, - url: `${admin}/collections/${collectionSlug}/${id}`, + url: isVisible ? `${admin}/collections/${collectionSlug}/${id}` : undefined, }) } else { nav.push({ @@ -57,7 +60,7 @@ export const SetStepNav: React.FC<{ } else if (globalSlug) { nav.push({ label: title, - url: `${admin}/globals/${globalSlug}`, + url: isVisible ? `${admin}/globals/${globalSlug}` : undefined, }) } @@ -82,6 +85,7 @@ export const SetStepNav: React.FC<{ globalSlug, view, drawerDepth, + isVisible, ]) return null diff --git a/packages/next/src/views/Edit/Default/index.tsx b/packages/next/src/views/Edit/Default/index.tsx index 081b5c1459..4bb5ada620 100644 --- a/packages/next/src/views/Edit/Default/index.tsx +++ b/packages/next/src/views/Edit/Default/index.tsx @@ -22,8 +22,8 @@ import React, { Fragment, useCallback } from 'react' import { LeaveWithoutSaving } from '../../../elements/LeaveWithoutSaving/index.js' // import { getTranslation } from '@payloadcms/translations' import { Auth } from './Auth/index.js' +import { SetDocumentStepNav } from './SetDocumentStepNav/index.js' import { SetDocumentTitle } from './SetDocumentTitle/index.js' -import { SetStepNav } from './SetStepNav/index.js' import './index.scss' const baseClass = 'collection-edit' @@ -202,7 +202,7 @@ export const DefaultEditView: React.FC = () => { /> {BeforeDocument} {preventLeaveWithoutSaving && } - { + const config = useConfig() + + const { + admin: { user: userSlug }, + routes: { api }, + } = config + + const { t } = useTranslation() + const [hasSubmitted, setHasSubmitted] = useState(false) + + const handleResponse = (res) => { + res.json().then( + () => { + setHasSubmitted(true) + }, + () => { + toast.error(t('authentication:emailNotValid')) + }, + ) + } + + const initialState: FormState = { + email: { + initialValue: '', + valid: true, + value: undefined, + }, + } + + if (hasSubmitted) { + return ( + +

{t('authentication:emailSent')}

+

{t('authentication:checkYourEmailForPasswordReset')}

+
+ ) + } + + return ( +
+

{t('authentication:forgotPassword')}

+

{t('authentication:forgotPasswordEmailInstructions')}

+ + email(value, { + name: 'email', + type: 'email', + data: {}, + req: { t } as PayloadRequest, + required: true, + siblingData: {}, + }) + } + /> + {t('general:submit')} + + ) +} diff --git a/packages/next/src/views/ForgotPassword/index.tsx b/packages/next/src/views/ForgotPassword/index.tsx index 87e58ba3d8..3234a5c889 100644 --- a/packages/next/src/views/ForgotPassword/index.tsx +++ b/packages/next/src/views/ForgotPassword/index.tsx @@ -2,12 +2,11 @@ import type { AdminViewProps } from 'payload/types' import { Button } from '@payloadcms/ui/elements/Button' import { Translation } from '@payloadcms/ui/elements/Translation' -import { Email } from '@payloadcms/ui/fields/Email' -import { Form } from '@payloadcms/ui/forms/Form' -import { FormSubmit } from '@payloadcms/ui/forms/Submit' import LinkImport from 'next/link.js' import React, { Fragment } from 'react' +import { ForgotPasswordForm } from './ForgotPasswordForm/index.js' + export { generateForgotPasswordMetadata } from './meta.js' const Link = (LinkImport.default || LinkImport) as unknown as typeof LinkImport.default @@ -23,22 +22,9 @@ export const ForgotPasswordView: React.FC = ({ initPageResult }) } = initPageResult const { - admin: { user: userSlug }, - routes: { admin, api }, - serverURL, + routes: { admin }, } = config - // const handleResponse = (res) => { - // res.json().then( - // () => { - // setHasSubmitted(true) - // }, - // () => { - // toast.error(i18n.t('authentication:emailNotValid')) - // }, - // ) - // } - if (user) { return ( @@ -60,34 +46,9 @@ export const ForgotPasswordView: React.FC = ({ initPageResult }) ) } - // if (hasSubmitted) { - // return ( - // - //

{i18n.t('authentication:emailSent')}

- //

{i18n.t('authentication:checkYourEmailForPasswordReset')}

- //
- // ) - // } - return ( -
-

{i18n.t('authentication:forgotPassword')}

-

{i18n.t('authentication:forgotPasswordEmailInstructions')}

- - {i18n.t('general:submit')} - + {i18n.t('authentication:backToLogin')}
) diff --git a/packages/next/src/views/List/index.tsx b/packages/next/src/views/List/index.tsx index 40b24989cf..52110577e1 100644 --- a/packages/next/src/views/List/index.tsx +++ b/packages/next/src/views/List/index.tsx @@ -78,7 +78,7 @@ export const ListView: React.FC = async ({ initPageResult, searc CustomListView = CustomList.Component } - const page = isNumber(query?.page) ? query.page : 0 + const page = isNumber(query?.page) ? Number(query.page) : 0 const whereQuery = mergeListSearchAndWhere({ collectionConfig, query: { @@ -87,7 +87,7 @@ export const ListView: React.FC = async ({ initPageResult, searc }, }) const limit = isNumber(query?.limit) - ? query.limit + ? Number(query.limit) : listPreferences?.limit || collectionConfig.admin.pagination.defaultLimit const sort = query?.sort && typeof query.sort === 'string' @@ -117,7 +117,10 @@ export const ListView: React.FC = async ({ initPageResult, searc = ({ (globalConfig && !(globalConfig.versions?.drafts && globalConfig.versions?.drafts?.autosave))) && !disableLeaveWithoutSaving && } -
- - + + email(value, { + name: 'email', + type: 'email', + data: {}, + req: { t } as PayloadRequest, + required: true, + siblingData: {}, + }) + } + /> + + password(value, { + name: 'password', + type: 'text', + data: {}, + req: { + payload: { + config, + }, + t, + } as PayloadRequest, + required: true, + siblingData: {}, + }) + } + />
{t('authentication:forgotPasswordQuestion')} {t('authentication:login')} diff --git a/packages/next/src/views/NotFound/index.tsx b/packages/next/src/views/NotFound/index.tsx index bc3f57b819..db51474294 100644 --- a/packages/next/src/views/NotFound/index.tsx +++ b/packages/next/src/views/NotFound/index.tsx @@ -6,8 +6,8 @@ import { HydrateClientUser } from '@payloadcms/ui/elements/HydrateClientUser' import { DefaultTemplate } from '@payloadcms/ui/templates/Default' import React, { Fragment } from 'react' +import { getNextRequestI18n } from '../../utilities/getNextRequestI18n.js' import { initPage } from '../../utilities/initPage.js' -import { getNextI18n } from '.././../utilities/getNextI18n.js' import { NotFoundClient } from './index.client.js' export const generatePageMetadata = async ({ @@ -19,7 +19,7 @@ export const generatePageMetadata = async ({ }): Promise => { const config = await configPromise - const i18n = getNextI18n({ + const i18n = await getNextRequestI18n({ config, }) diff --git a/packages/next/src/views/Root/meta.ts b/packages/next/src/views/Root/meta.ts index 0edcfd5319..496afe871a 100644 --- a/packages/next/src/views/Root/meta.ts +++ b/packages/next/src/views/Root/meta.ts @@ -1,7 +1,7 @@ import type { Metadata } from 'next' import type { SanitizedConfig } from 'payload/types' -import { getNextI18n } from '../../utilities/getNextI18n.js' +import { getNextRequestI18n } from '../../utilities/getNextRequestI18n.js' import { generateAccountMetadata } from '../Account/index.js' import { generateCreateFirstUserMetadata } from '../CreateFirstUser/index.js' import { generateDashboardMetadata } from '../Dashboard/index.js' @@ -49,7 +49,7 @@ export const generatePageMetadata = async ({ config: configPromise, params }: Ar const isGlobal = segmentOne === 'globals' const isCollection = segmentOne === 'collections' - const i18n = getNextI18n({ + const i18n = await getNextRequestI18n({ config, }) diff --git a/packages/next/src/views/Version/Default/SetStepNav.tsx b/packages/next/src/views/Version/Default/SetStepNav.tsx index 0feecc3cce..a94a686a35 100644 --- a/packages/next/src/views/Version/Default/SetStepNav.tsx +++ b/packages/next/src/views/Version/Default/SetStepNav.tsx @@ -85,7 +85,9 @@ export const SetStepNav: React.FC<{ url: `${adminRoute}/collections/${collectionSlug}/${id}/versions`, }, { - label: doc?.createdAt ? formatDate(doc.createdAt, dateFormat, i18n?.language) : '', + label: doc?.createdAt + ? formatDate({ date: doc.createdAt, i18n, pattern: dateFormat }) + : '', }, ] } @@ -101,7 +103,9 @@ export const SetStepNav: React.FC<{ url: `${adminRoute}/globals/${globalConfig.slug}/versions`, }, { - label: doc?.createdAt ? formatDate(doc.createdAt, dateFormat, i18n?.language) : '', + label: doc?.createdAt + ? formatDate({ date: doc.createdAt, i18n, pattern: dateFormat }) + : '', }, ] } diff --git a/packages/next/src/views/Version/Default/index.tsx b/packages/next/src/views/Version/Default/index.tsx index 1c40869dad..e6b0042eac 100644 --- a/packages/next/src/views/Version/Default/index.tsx +++ b/packages/next/src/views/Version/Default/index.tsx @@ -61,7 +61,7 @@ export const DefaultVersionView: React.FC = ({ } = config const formattedCreatedAt = doc?.createdAt - ? formatDate(doc.createdAt, dateFormat, i18n.language) + ? formatDate({ date: doc.createdAt, i18n, pattern: dateFormat }) : '' const originalDocFetchURL = `${serverURL}${apiRoute}/${globalSlug ? 'globals/' : ''}${ diff --git a/packages/next/src/views/Version/SelectComparison/index.tsx b/packages/next/src/views/Version/SelectComparison/index.tsx index a19ccced33..1e332b3313 100644 --- a/packages/next/src/views/Version/SelectComparison/index.tsx +++ b/packages/next/src/views/Version/SelectComparison/index.tsx @@ -88,7 +88,7 @@ export const SelectComparison: React.FC = (props) => { setOptions((existingOptions) => [ ...existingOptions, ...data.docs.map((doc) => ({ - label: formatDate(doc.updatedAt, dateFormat, i18n.language), + label: formatDate({ date: doc.updatedAt, i18n, pattern: dateFormat }), value: doc.id, })), ]) diff --git a/packages/next/src/views/Version/meta.ts b/packages/next/src/views/Version/meta.ts index 941d6dc6ae..9190847be7 100644 --- a/packages/next/src/views/Version/meta.ts +++ b/packages/next/src/views/Version/meta.ts @@ -22,7 +22,7 @@ export const generateMetadata: GenerateEditViewMetadata = async ({ const doc: any = {} // TODO: figure this out const formattedCreatedAt = doc?.createdAt - ? formatDate(doc.createdAt, config?.admin?.dateFormat, i18n?.language) + ? formatDate({ date: doc.createdAt, i18n, pattern: config?.admin?.dateFormat }) : '' if (collectionConfig) { diff --git a/packages/next/src/views/Versions/cells/CreatedAt/index.tsx b/packages/next/src/views/Versions/cells/CreatedAt/index.tsx index 48c52e2ee4..be21534582 100644 --- a/packages/next/src/views/Versions/cells/CreatedAt/index.tsx +++ b/packages/next/src/views/Versions/cells/CreatedAt/index.tsx @@ -38,7 +38,8 @@ export const CreatedAtCell: React.FC = ({ return ( - {cellData && formatDate(cellData as Date | number | string, dateFormat, i18n.language)} + {cellData && + formatDate({ date: cellData as Date | number | string, i18n, pattern: dateFormat })} ) } diff --git a/packages/next/src/views/Versions/index.tsx b/packages/next/src/views/Versions/index.tsx index e5ea9a7f49..794cf3a655 100644 --- a/packages/next/src/views/Versions/index.tsx +++ b/packages/next/src/views/Versions/index.tsx @@ -7,7 +7,7 @@ import { notFound } from 'next/navigation.js' import { isNumber } from 'payload/utilities' import React from 'react' -import { SetStepNav } from '../Edit/Default/SetStepNav/index.js' +import { SetDocumentStepNav } from '../Edit/Default/SetDocumentStepNav/index.js' import { buildVersionColumns } from './buildColumns.js' import { VersionsViewClient } from './index.client.js' import './index.scss' @@ -100,8 +100,8 @@ export const VersionsView: EditViewComponent = async (props) => { return ( - { +/** + * @param {import('next').NextConfig} nextConfig + * + * @returns {import('next').NextConfig} + * */ +export const withPayload = (nextConfig = {}) => { return { ...nextConfig, experimental: { diff --git a/packages/next/tsconfig.cjs.json b/packages/next/tsconfig.cjs.json new file mode 100644 index 0000000000..9d16e08ea6 --- /dev/null +++ b/packages/next/tsconfig.cjs.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "module": "CommonJS", + "composite": true, // Required for references to work + "noEmit": false /* Do not emit outputs. */, + "emitDeclarationOnly": true, + "outDir": "./dist/cjs" /* Specify an output folder for all emitted files. */, + "rootDir": "./src" /* Specify the root folder within your source files. */, + "sourceMap": true + }, + "include": ["src/withPayload.js" /* Include the withPayload.js file in the build */] +} diff --git a/packages/payload/.gitignore b/packages/payload/.gitignore deleted file mode 100644 index ffc0797a2d..0000000000 --- a/packages/payload/.gitignore +++ /dev/null @@ -1,26 +0,0 @@ -/fields/ -/components/ -/auth.d.ts -/auth.js -/components.d.ts -/components.js -/config.d.ts -/config.js -/database.d.ts -/database.js -/errors.d.ts -/errors.js -/graphql.d.ts -/graphql.js -/types.d.ts -/types.js -/utilities.d.ts -/utilities.js -/versions.d.ts -/versions.js -/operations.js -/operations.d.ts -/node.js -/node.d.ts -/uploads.js -/uploads.d.ts diff --git a/packages/payload/package.json b/packages/payload/package.json index 9d761f23f8..1a738dd54c 100644 --- a/packages/payload/package.json +++ b/packages/payload/package.json @@ -1,6 +1,6 @@ { "name": "payload", - "version": "3.0.0-alpha.59", + "version": "3.0.0-beta.11", "description": "Node, React and MongoDB Headless CMS and Application Framework", "license": "MIT", "main": "./src/index.ts", @@ -22,7 +22,7 @@ } }, "scripts": { - "build": "pnpm copyfiles && pnpm build:swc && pnpm build:types && tsx ../../scripts/exportPointerFiles.ts ../packages/payload dist/exports", + "build": "pnpm copyfiles && pnpm build:swc && pnpm build:types", "build:swc": "swc ./src -d ./dist --config-file .swcrc", "build:types": "tsc --emitDeclarationOnly --outDir dist", "build:watch": "nodemon --watch 'src/**' --ext 'ts,tsx' --exec \"pnpm build:tsc\"", @@ -52,6 +52,7 @@ "find-up": "4.1.0", "get-tsconfig": "^4.7.2", "http-status": "1.6.2", + "image-size": "^1.1.1", "joi": "^17.12.1", "json-schema-to-typescript": "11.0.3", "jsonwebtoken": "9.0.1", @@ -62,10 +63,18 @@ "pino": "8.15.0", "pino-pretty": "10.2.0", "pluralize": "8.0.0", - "probe-image-size": "^7.2.3", "sanitize-filename": "1.6.3", "scheduler": "0.23.0", - "scmp": "2.1.0" + "scmp": "2.1.0", + "uuid": "^9.0.1" + }, + "peerDependencies": { + "@swc/core": "^1.4.13" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + } }, "devDependencies": { "@monaco-editor/react": "4.5.1", @@ -113,7 +122,7 @@ "ts-essentials": "7.0.3" }, "engines": { - "node": ">=18.17.0" + "node": ">=18.20.2" }, "files": [ "bin.js", diff --git a/packages/payload/schema.graphql b/packages/payload/schema.graphql deleted file mode 100644 index 8dc3f178eb..0000000000 --- a/packages/payload/schema.graphql +++ /dev/null @@ -1,1712 +0,0 @@ -type Query { - Post(id: String!, draft: Boolean): Post - Posts(where: Post_where, draft: Boolean, page: Int, limit: Int, sort: String): Posts - docAccessPost(id: String!): postsDocAccess - Media(id: String!, draft: Boolean): Media - allMedia(where: Media_where, draft: Boolean, page: Int, limit: Int, sort: String): allMedia - docAccessMedia(id: String!): mediaDocAccess - User(id: String!, draft: Boolean): User - Users(where: User_where, draft: Boolean, page: Int, limit: Int, sort: String): Users - docAccessUser(id: String!): usersDocAccess - meUser: usersMe - initializedUser: Boolean - Menu(draft: Boolean): Menu - docAccessMenu: menuDocAccess - Preference(key: String): Preference - Access: Access -} - -type Post { - id: String - text: String - associatedMedia(where: Post_AssociatedMedia_where): Media - updatedAt: DateTime - createdAt: DateTime -} - -type Media { - id: String - updatedAt: DateTime - createdAt: DateTime - url: String - filename: String - mimeType: String - filesize: Float - width: Float - height: Float -} - -""" -A date-time string at UTC, such as 2007-12-03T10:15:30Z, compliant with the `date-time` format outlined in section 5.6 of the RFC 3339 profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar. -""" -scalar DateTime - -input Post_AssociatedMedia_where { - updatedAt: Post_AssociatedMedia_updatedAt_operator - createdAt: Post_AssociatedMedia_createdAt_operator - url: Post_AssociatedMedia_url_operator - filename: Post_AssociatedMedia_filename_operator - mimeType: Post_AssociatedMedia_mimeType_operator - filesize: Post_AssociatedMedia_filesize_operator - width: Post_AssociatedMedia_width_operator - height: Post_AssociatedMedia_height_operator - id: Post_AssociatedMedia_id_operator - OR: [Post_AssociatedMedia_where_or] - AND: [Post_AssociatedMedia_where_and] -} - -input Post_AssociatedMedia_updatedAt_operator { - equals: DateTime - not_equals: DateTime - greater_than_equal: DateTime - greater_than: DateTime - less_than_equal: DateTime - less_than: DateTime - like: DateTime - exists: Boolean -} - -input Post_AssociatedMedia_createdAt_operator { - equals: DateTime - not_equals: DateTime - greater_than_equal: DateTime - greater_than: DateTime - less_than_equal: DateTime - less_than: DateTime - like: DateTime - exists: Boolean -} - -input Post_AssociatedMedia_url_operator { - equals: String - not_equals: String - like: String - contains: String - in: [String] - not_in: [[String]] - all: [[[String]]] - exists: Boolean -} - -input Post_AssociatedMedia_filename_operator { - equals: String - not_equals: String - like: String - contains: String - in: [String] - not_in: [[String]] - all: [[[String]]] - exists: Boolean -} - -input Post_AssociatedMedia_mimeType_operator { - equals: String - not_equals: String - like: String - contains: String - in: [String] - not_in: [[String]] - all: [[[String]]] - exists: Boolean -} - -input Post_AssociatedMedia_filesize_operator { - equals: Float - not_equals: Float - greater_than_equal: Float - greater_than: Float - less_than_equal: Float - less_than: Float - exists: Boolean -} - -input Post_AssociatedMedia_width_operator { - equals: Float - not_equals: Float - greater_than_equal: Float - greater_than: Float - less_than_equal: Float - less_than: Float - exists: Boolean -} - -input Post_AssociatedMedia_height_operator { - equals: Float - not_equals: Float - greater_than_equal: Float - greater_than: Float - less_than_equal: Float - less_than: Float - exists: Boolean -} - -input Post_AssociatedMedia_id_operator { - equals: String - not_equals: String - like: String - contains: String - in: [String] - not_in: [[String]] - all: [[[String]]] - exists: Boolean -} - -input Post_AssociatedMedia_where_or { - updatedAt: Post_AssociatedMedia_updatedAt_operator - createdAt: Post_AssociatedMedia_createdAt_operator - url: Post_AssociatedMedia_url_operator - filename: Post_AssociatedMedia_filename_operator - mimeType: Post_AssociatedMedia_mimeType_operator - filesize: Post_AssociatedMedia_filesize_operator - width: Post_AssociatedMedia_width_operator - height: Post_AssociatedMedia_height_operator - id: Post_AssociatedMedia_id_operator -} - -input Post_AssociatedMedia_where_and { - updatedAt: Post_AssociatedMedia_updatedAt_operator - createdAt: Post_AssociatedMedia_createdAt_operator - url: Post_AssociatedMedia_url_operator - filename: Post_AssociatedMedia_filename_operator - mimeType: Post_AssociatedMedia_mimeType_operator - filesize: Post_AssociatedMedia_filesize_operator - width: Post_AssociatedMedia_width_operator - height: Post_AssociatedMedia_height_operator - id: Post_AssociatedMedia_id_operator -} - -type Posts { - docs: [Post] - totalDocs: Int - offset: Int - limit: Int - totalPages: Int - page: Int - pagingCounter: Int - hasPrevPage: Boolean - hasNextPage: Boolean - prevPage: Int - nextPage: Int -} - -input Post_where { - text: Post_text_operator - associatedMedia: Post_associatedMedia_operator - updatedAt: Post_updatedAt_operator - createdAt: Post_createdAt_operator - id: Post_id_operator - OR: [Post_where_or] - AND: [Post_where_and] -} - -input Post_text_operator { - equals: String - not_equals: String - like: String - contains: String - in: [String] - not_in: [[String]] - all: [[[String]]] - exists: Boolean -} - -input Post_associatedMedia_operator { - equals: String - not_equals: String - exists: Boolean -} - -input Post_updatedAt_operator { - equals: DateTime - not_equals: DateTime - greater_than_equal: DateTime - greater_than: DateTime - less_than_equal: DateTime - less_than: DateTime - like: DateTime - exists: Boolean -} - -input Post_createdAt_operator { - equals: DateTime - not_equals: DateTime - greater_than_equal: DateTime - greater_than: DateTime - less_than_equal: DateTime - less_than: DateTime - like: DateTime - exists: Boolean -} - -input Post_id_operator { - equals: String - not_equals: String - like: String - contains: String - in: [String] - not_in: [[String]] - all: [[[String]]] - exists: Boolean -} - -input Post_where_or { - text: Post_text_operator - associatedMedia: Post_associatedMedia_operator - updatedAt: Post_updatedAt_operator - createdAt: Post_createdAt_operator - id: Post_id_operator -} - -input Post_where_and { - text: Post_text_operator - associatedMedia: Post_associatedMedia_operator - updatedAt: Post_updatedAt_operator - createdAt: Post_createdAt_operator - id: Post_id_operator -} - -type postsDocAccess { - fields: PostsDocAccessFields - create: PostsCreateDocAccess - read: PostsReadDocAccess - update: PostsUpdateDocAccess - delete: PostsDeleteDocAccess -} - -type PostsDocAccessFields { - text: PostsDocAccessFields_text - associatedMedia: PostsDocAccessFields_associatedMedia - updatedAt: PostsDocAccessFields_updatedAt - createdAt: PostsDocAccessFields_createdAt -} - -type PostsDocAccessFields_text { - create: PostsDocAccessFields_text_Create - read: PostsDocAccessFields_text_Read - update: PostsDocAccessFields_text_Update - delete: PostsDocAccessFields_text_Delete -} - -type PostsDocAccessFields_text_Create { - permission: Boolean! -} - -type PostsDocAccessFields_text_Read { - permission: Boolean! -} - -type PostsDocAccessFields_text_Update { - permission: Boolean! -} - -type PostsDocAccessFields_text_Delete { - permission: Boolean! -} - -type PostsDocAccessFields_associatedMedia { - create: PostsDocAccessFields_associatedMedia_Create - read: PostsDocAccessFields_associatedMedia_Read - update: PostsDocAccessFields_associatedMedia_Update - delete: PostsDocAccessFields_associatedMedia_Delete -} - -type PostsDocAccessFields_associatedMedia_Create { - permission: Boolean! -} - -type PostsDocAccessFields_associatedMedia_Read { - permission: Boolean! -} - -type PostsDocAccessFields_associatedMedia_Update { - permission: Boolean! -} - -type PostsDocAccessFields_associatedMedia_Delete { - permission: Boolean! -} - -type PostsDocAccessFields_updatedAt { - create: PostsDocAccessFields_updatedAt_Create - read: PostsDocAccessFields_updatedAt_Read - update: PostsDocAccessFields_updatedAt_Update - delete: PostsDocAccessFields_updatedAt_Delete -} - -type PostsDocAccessFields_updatedAt_Create { - permission: Boolean! -} - -type PostsDocAccessFields_updatedAt_Read { - permission: Boolean! -} - -type PostsDocAccessFields_updatedAt_Update { - permission: Boolean! -} - -type PostsDocAccessFields_updatedAt_Delete { - permission: Boolean! -} - -type PostsDocAccessFields_createdAt { - create: PostsDocAccessFields_createdAt_Create - read: PostsDocAccessFields_createdAt_Read - update: PostsDocAccessFields_createdAt_Update - delete: PostsDocAccessFields_createdAt_Delete -} - -type PostsDocAccessFields_createdAt_Create { - permission: Boolean! -} - -type PostsDocAccessFields_createdAt_Read { - permission: Boolean! -} - -type PostsDocAccessFields_createdAt_Update { - permission: Boolean! -} - -type PostsDocAccessFields_createdAt_Delete { - permission: Boolean! -} - -type PostsCreateDocAccess { - permission: Boolean! - where: JSONObject -} - -""" -The `JSONObject` scalar type represents JSON objects as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf). -""" -scalar JSONObject - -type PostsReadDocAccess { - permission: Boolean! - where: JSONObject -} - -type PostsUpdateDocAccess { - permission: Boolean! - where: JSONObject -} - -type PostsDeleteDocAccess { - permission: Boolean! - where: JSONObject -} - -type allMedia { - docs: [Media] - totalDocs: Int - offset: Int - limit: Int - totalPages: Int - page: Int - pagingCounter: Int - hasPrevPage: Boolean - hasNextPage: Boolean - prevPage: Int - nextPage: Int -} - -input Media_where { - updatedAt: Media_updatedAt_operator - createdAt: Media_createdAt_operator - url: Media_url_operator - filename: Media_filename_operator - mimeType: Media_mimeType_operator - filesize: Media_filesize_operator - width: Media_width_operator - height: Media_height_operator - id: Media_id_operator - OR: [Media_where_or] - AND: [Media_where_and] -} - -input Media_updatedAt_operator { - equals: DateTime - not_equals: DateTime - greater_than_equal: DateTime - greater_than: DateTime - less_than_equal: DateTime - less_than: DateTime - like: DateTime - exists: Boolean -} - -input Media_createdAt_operator { - equals: DateTime - not_equals: DateTime - greater_than_equal: DateTime - greater_than: DateTime - less_than_equal: DateTime - less_than: DateTime - like: DateTime - exists: Boolean -} - -input Media_url_operator { - equals: String - not_equals: String - like: String - contains: String - in: [String] - not_in: [[String]] - all: [[[String]]] - exists: Boolean -} - -input Media_filename_operator { - equals: String - not_equals: String - like: String - contains: String - in: [String] - not_in: [[String]] - all: [[[String]]] - exists: Boolean -} - -input Media_mimeType_operator { - equals: String - not_equals: String - like: String - contains: String - in: [String] - not_in: [[String]] - all: [[[String]]] - exists: Boolean -} - -input Media_filesize_operator { - equals: Float - not_equals: Float - greater_than_equal: Float - greater_than: Float - less_than_equal: Float - less_than: Float - exists: Boolean -} - -input Media_width_operator { - equals: Float - not_equals: Float - greater_than_equal: Float - greater_than: Float - less_than_equal: Float - less_than: Float - exists: Boolean -} - -input Media_height_operator { - equals: Float - not_equals: Float - greater_than_equal: Float - greater_than: Float - less_than_equal: Float - less_than: Float - exists: Boolean -} - -input Media_id_operator { - equals: String - not_equals: String - like: String - contains: String - in: [String] - not_in: [[String]] - all: [[[String]]] - exists: Boolean -} - -input Media_where_or { - updatedAt: Media_updatedAt_operator - createdAt: Media_createdAt_operator - url: Media_url_operator - filename: Media_filename_operator - mimeType: Media_mimeType_operator - filesize: Media_filesize_operator - width: Media_width_operator - height: Media_height_operator - id: Media_id_operator -} - -input Media_where_and { - updatedAt: Media_updatedAt_operator - createdAt: Media_createdAt_operator - url: Media_url_operator - filename: Media_filename_operator - mimeType: Media_mimeType_operator - filesize: Media_filesize_operator - width: Media_width_operator - height: Media_height_operator - id: Media_id_operator -} - -type mediaDocAccess { - fields: MediaDocAccessFields - create: MediaCreateDocAccess - read: MediaReadDocAccess - update: MediaUpdateDocAccess - delete: MediaDeleteDocAccess -} - -type MediaDocAccessFields { - updatedAt: MediaDocAccessFields_updatedAt - createdAt: MediaDocAccessFields_createdAt - url: MediaDocAccessFields_url - filename: MediaDocAccessFields_filename - mimeType: MediaDocAccessFields_mimeType - filesize: MediaDocAccessFields_filesize - width: MediaDocAccessFields_width - height: MediaDocAccessFields_height -} - -type MediaDocAccessFields_updatedAt { - create: MediaDocAccessFields_updatedAt_Create - read: MediaDocAccessFields_updatedAt_Read - update: MediaDocAccessFields_updatedAt_Update - delete: MediaDocAccessFields_updatedAt_Delete -} - -type MediaDocAccessFields_updatedAt_Create { - permission: Boolean! -} - -type MediaDocAccessFields_updatedAt_Read { - permission: Boolean! -} - -type MediaDocAccessFields_updatedAt_Update { - permission: Boolean! -} - -type MediaDocAccessFields_updatedAt_Delete { - permission: Boolean! -} - -type MediaDocAccessFields_createdAt { - create: MediaDocAccessFields_createdAt_Create - read: MediaDocAccessFields_createdAt_Read - update: MediaDocAccessFields_createdAt_Update - delete: MediaDocAccessFields_createdAt_Delete -} - -type MediaDocAccessFields_createdAt_Create { - permission: Boolean! -} - -type MediaDocAccessFields_createdAt_Read { - permission: Boolean! -} - -type MediaDocAccessFields_createdAt_Update { - permission: Boolean! -} - -type MediaDocAccessFields_createdAt_Delete { - permission: Boolean! -} - -type MediaDocAccessFields_url { - create: MediaDocAccessFields_url_Create - read: MediaDocAccessFields_url_Read - update: MediaDocAccessFields_url_Update - delete: MediaDocAccessFields_url_Delete -} - -type MediaDocAccessFields_url_Create { - permission: Boolean! -} - -type MediaDocAccessFields_url_Read { - permission: Boolean! -} - -type MediaDocAccessFields_url_Update { - permission: Boolean! -} - -type MediaDocAccessFields_url_Delete { - permission: Boolean! -} - -type MediaDocAccessFields_filename { - create: MediaDocAccessFields_filename_Create - read: MediaDocAccessFields_filename_Read - update: MediaDocAccessFields_filename_Update - delete: MediaDocAccessFields_filename_Delete -} - -type MediaDocAccessFields_filename_Create { - permission: Boolean! -} - -type MediaDocAccessFields_filename_Read { - permission: Boolean! -} - -type MediaDocAccessFields_filename_Update { - permission: Boolean! -} - -type MediaDocAccessFields_filename_Delete { - permission: Boolean! -} - -type MediaDocAccessFields_mimeType { - create: MediaDocAccessFields_mimeType_Create - read: MediaDocAccessFields_mimeType_Read - update: MediaDocAccessFields_mimeType_Update - delete: MediaDocAccessFields_mimeType_Delete -} - -type MediaDocAccessFields_mimeType_Create { - permission: Boolean! -} - -type MediaDocAccessFields_mimeType_Read { - permission: Boolean! -} - -type MediaDocAccessFields_mimeType_Update { - permission: Boolean! -} - -type MediaDocAccessFields_mimeType_Delete { - permission: Boolean! -} - -type MediaDocAccessFields_filesize { - create: MediaDocAccessFields_filesize_Create - read: MediaDocAccessFields_filesize_Read - update: MediaDocAccessFields_filesize_Update - delete: MediaDocAccessFields_filesize_Delete -} - -type MediaDocAccessFields_filesize_Create { - permission: Boolean! -} - -type MediaDocAccessFields_filesize_Read { - permission: Boolean! -} - -type MediaDocAccessFields_filesize_Update { - permission: Boolean! -} - -type MediaDocAccessFields_filesize_Delete { - permission: Boolean! -} - -type MediaDocAccessFields_width { - create: MediaDocAccessFields_width_Create - read: MediaDocAccessFields_width_Read - update: MediaDocAccessFields_width_Update - delete: MediaDocAccessFields_width_Delete -} - -type MediaDocAccessFields_width_Create { - permission: Boolean! -} - -type MediaDocAccessFields_width_Read { - permission: Boolean! -} - -type MediaDocAccessFields_width_Update { - permission: Boolean! -} - -type MediaDocAccessFields_width_Delete { - permission: Boolean! -} - -type MediaDocAccessFields_height { - create: MediaDocAccessFields_height_Create - read: MediaDocAccessFields_height_Read - update: MediaDocAccessFields_height_Update - delete: MediaDocAccessFields_height_Delete -} - -type MediaDocAccessFields_height_Create { - permission: Boolean! -} - -type MediaDocAccessFields_height_Read { - permission: Boolean! -} - -type MediaDocAccessFields_height_Update { - permission: Boolean! -} - -type MediaDocAccessFields_height_Delete { - permission: Boolean! -} - -type MediaCreateDocAccess { - permission: Boolean! - where: JSONObject -} - -type MediaReadDocAccess { - permission: Boolean! - where: JSONObject -} - -type MediaUpdateDocAccess { - permission: Boolean! - where: JSONObject -} - -type MediaDeleteDocAccess { - permission: Boolean! - where: JSONObject -} - -type User { - id: String - updatedAt: DateTime - createdAt: DateTime - email: EmailAddress - resetPasswordToken: String - resetPasswordExpiration: DateTime - loginAttempts: Float - lockUntil: DateTime - password: String! -} - -""" -A field whose value conforms to the standard internet email address format as specified in HTML Spec: https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address. -""" -scalar EmailAddress - @specifiedBy(url: "https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address") - -type Users { - docs: [User] - totalDocs: Int - offset: Int - limit: Int - totalPages: Int - page: Int - pagingCounter: Int - hasPrevPage: Boolean - hasNextPage: Boolean - prevPage: Int - nextPage: Int -} - -input User_where { - updatedAt: User_updatedAt_operator - createdAt: User_createdAt_operator - email: User_email_operator - id: User_id_operator - OR: [User_where_or] - AND: [User_where_and] -} - -input User_updatedAt_operator { - equals: DateTime - not_equals: DateTime - greater_than_equal: DateTime - greater_than: DateTime - less_than_equal: DateTime - less_than: DateTime - like: DateTime - exists: Boolean -} - -input User_createdAt_operator { - equals: DateTime - not_equals: DateTime - greater_than_equal: DateTime - greater_than: DateTime - less_than_equal: DateTime - less_than: DateTime - like: DateTime - exists: Boolean -} - -input User_email_operator { - equals: EmailAddress - not_equals: EmailAddress - like: EmailAddress - contains: EmailAddress - in: [EmailAddress] - not_in: [[EmailAddress]] - all: [[[EmailAddress]]] - exists: Boolean -} - -input User_id_operator { - equals: String - not_equals: String - like: String - contains: String - in: [String] - not_in: [[String]] - all: [[[String]]] - exists: Boolean -} - -input User_where_or { - updatedAt: User_updatedAt_operator - createdAt: User_createdAt_operator - email: User_email_operator - id: User_id_operator -} - -input User_where_and { - updatedAt: User_updatedAt_operator - createdAt: User_createdAt_operator - email: User_email_operator - id: User_id_operator -} - -type usersDocAccess { - fields: UsersDocAccessFields - create: UsersCreateDocAccess - read: UsersReadDocAccess - update: UsersUpdateDocAccess - delete: UsersDeleteDocAccess - unlock: UsersUnlockDocAccess -} - -type UsersDocAccessFields { - updatedAt: UsersDocAccessFields_updatedAt - createdAt: UsersDocAccessFields_createdAt - email: UsersDocAccessFields_email - password: UsersDocAccessFields_password -} - -type UsersDocAccessFields_updatedAt { - create: UsersDocAccessFields_updatedAt_Create - read: UsersDocAccessFields_updatedAt_Read - update: UsersDocAccessFields_updatedAt_Update - delete: UsersDocAccessFields_updatedAt_Delete -} - -type UsersDocAccessFields_updatedAt_Create { - permission: Boolean! -} - -type UsersDocAccessFields_updatedAt_Read { - permission: Boolean! -} - -type UsersDocAccessFields_updatedAt_Update { - permission: Boolean! -} - -type UsersDocAccessFields_updatedAt_Delete { - permission: Boolean! -} - -type UsersDocAccessFields_createdAt { - create: UsersDocAccessFields_createdAt_Create - read: UsersDocAccessFields_createdAt_Read - update: UsersDocAccessFields_createdAt_Update - delete: UsersDocAccessFields_createdAt_Delete -} - -type UsersDocAccessFields_createdAt_Create { - permission: Boolean! -} - -type UsersDocAccessFields_createdAt_Read { - permission: Boolean! -} - -type UsersDocAccessFields_createdAt_Update { - permission: Boolean! -} - -type UsersDocAccessFields_createdAt_Delete { - permission: Boolean! -} - -type UsersDocAccessFields_email { - create: UsersDocAccessFields_email_Create - read: UsersDocAccessFields_email_Read - update: UsersDocAccessFields_email_Update - delete: UsersDocAccessFields_email_Delete -} - -type UsersDocAccessFields_email_Create { - permission: Boolean! -} - -type UsersDocAccessFields_email_Read { - permission: Boolean! -} - -type UsersDocAccessFields_email_Update { - permission: Boolean! -} - -type UsersDocAccessFields_email_Delete { - permission: Boolean! -} - -type UsersDocAccessFields_password { - create: UsersDocAccessFields_password_Create - read: UsersDocAccessFields_password_Read - update: UsersDocAccessFields_password_Update - delete: UsersDocAccessFields_password_Delete -} - -type UsersDocAccessFields_password_Create { - permission: Boolean! -} - -type UsersDocAccessFields_password_Read { - permission: Boolean! -} - -type UsersDocAccessFields_password_Update { - permission: Boolean! -} - -type UsersDocAccessFields_password_Delete { - permission: Boolean! -} - -type UsersCreateDocAccess { - permission: Boolean! - where: JSONObject -} - -type UsersReadDocAccess { - permission: Boolean! - where: JSONObject -} - -type UsersUpdateDocAccess { - permission: Boolean! - where: JSONObject -} - -type UsersDeleteDocAccess { - permission: Boolean! - where: JSONObject -} - -type UsersUnlockDocAccess { - permission: Boolean! - where: JSONObject -} - -type usersMe { - token: String - user: User - exp: Int - collection: String -} - -type Menu { - globalText: String -} - -type menuDocAccess { - fields: MenuDocAccessFields - read: MenuReadDocAccess - update: MenuUpdateDocAccess -} - -type MenuDocAccessFields { - globalText: MenuDocAccessFields_globalText -} - -type MenuDocAccessFields_globalText { - create: MenuDocAccessFields_globalText_Create - read: MenuDocAccessFields_globalText_Read - update: MenuDocAccessFields_globalText_Update - delete: MenuDocAccessFields_globalText_Delete -} - -type MenuDocAccessFields_globalText_Create { - permission: Boolean! -} - -type MenuDocAccessFields_globalText_Read { - permission: Boolean! -} - -type MenuDocAccessFields_globalText_Update { - permission: Boolean! -} - -type MenuDocAccessFields_globalText_Delete { - permission: Boolean! -} - -type MenuReadDocAccess { - permission: Boolean! - where: JSONObject -} - -type MenuUpdateDocAccess { - permission: Boolean! - where: JSONObject -} - -type Preference { - key: String! - value: JSON - createdAt: DateTime! - updatedAt: DateTime! -} - -""" -The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf). -""" -scalar JSON - -type Access { - canAccessAdmin: Boolean! - posts: postsAccess - media: mediaAccess - users: usersAccess - menu: menuAccess -} - -type postsAccess { - fields: PostsFields - create: PostsCreateAccess - read: PostsReadAccess - update: PostsUpdateAccess - delete: PostsDeleteAccess -} - -type PostsFields { - text: PostsFields_text - associatedMedia: PostsFields_associatedMedia - updatedAt: PostsFields_updatedAt - createdAt: PostsFields_createdAt -} - -type PostsFields_text { - create: PostsFields_text_Create - read: PostsFields_text_Read - update: PostsFields_text_Update - delete: PostsFields_text_Delete -} - -type PostsFields_text_Create { - permission: Boolean! -} - -type PostsFields_text_Read { - permission: Boolean! -} - -type PostsFields_text_Update { - permission: Boolean! -} - -type PostsFields_text_Delete { - permission: Boolean! -} - -type PostsFields_associatedMedia { - create: PostsFields_associatedMedia_Create - read: PostsFields_associatedMedia_Read - update: PostsFields_associatedMedia_Update - delete: PostsFields_associatedMedia_Delete -} - -type PostsFields_associatedMedia_Create { - permission: Boolean! -} - -type PostsFields_associatedMedia_Read { - permission: Boolean! -} - -type PostsFields_associatedMedia_Update { - permission: Boolean! -} - -type PostsFields_associatedMedia_Delete { - permission: Boolean! -} - -type PostsFields_updatedAt { - create: PostsFields_updatedAt_Create - read: PostsFields_updatedAt_Read - update: PostsFields_updatedAt_Update - delete: PostsFields_updatedAt_Delete -} - -type PostsFields_updatedAt_Create { - permission: Boolean! -} - -type PostsFields_updatedAt_Read { - permission: Boolean! -} - -type PostsFields_updatedAt_Update { - permission: Boolean! -} - -type PostsFields_updatedAt_Delete { - permission: Boolean! -} - -type PostsFields_createdAt { - create: PostsFields_createdAt_Create - read: PostsFields_createdAt_Read - update: PostsFields_createdAt_Update - delete: PostsFields_createdAt_Delete -} - -type PostsFields_createdAt_Create { - permission: Boolean! -} - -type PostsFields_createdAt_Read { - permission: Boolean! -} - -type PostsFields_createdAt_Update { - permission: Boolean! -} - -type PostsFields_createdAt_Delete { - permission: Boolean! -} - -type PostsCreateAccess { - permission: Boolean! - where: JSONObject -} - -type PostsReadAccess { - permission: Boolean! - where: JSONObject -} - -type PostsUpdateAccess { - permission: Boolean! - where: JSONObject -} - -type PostsDeleteAccess { - permission: Boolean! - where: JSONObject -} - -type mediaAccess { - fields: MediaFields - create: MediaCreateAccess - read: MediaReadAccess - update: MediaUpdateAccess - delete: MediaDeleteAccess -} - -type MediaFields { - updatedAt: MediaFields_updatedAt - createdAt: MediaFields_createdAt - url: MediaFields_url - filename: MediaFields_filename - mimeType: MediaFields_mimeType - filesize: MediaFields_filesize - width: MediaFields_width - height: MediaFields_height -} - -type MediaFields_updatedAt { - create: MediaFields_updatedAt_Create - read: MediaFields_updatedAt_Read - update: MediaFields_updatedAt_Update - delete: MediaFields_updatedAt_Delete -} - -type MediaFields_updatedAt_Create { - permission: Boolean! -} - -type MediaFields_updatedAt_Read { - permission: Boolean! -} - -type MediaFields_updatedAt_Update { - permission: Boolean! -} - -type MediaFields_updatedAt_Delete { - permission: Boolean! -} - -type MediaFields_createdAt { - create: MediaFields_createdAt_Create - read: MediaFields_createdAt_Read - update: MediaFields_createdAt_Update - delete: MediaFields_createdAt_Delete -} - -type MediaFields_createdAt_Create { - permission: Boolean! -} - -type MediaFields_createdAt_Read { - permission: Boolean! -} - -type MediaFields_createdAt_Update { - permission: Boolean! -} - -type MediaFields_createdAt_Delete { - permission: Boolean! -} - -type MediaFields_url { - create: MediaFields_url_Create - read: MediaFields_url_Read - update: MediaFields_url_Update - delete: MediaFields_url_Delete -} - -type MediaFields_url_Create { - permission: Boolean! -} - -type MediaFields_url_Read { - permission: Boolean! -} - -type MediaFields_url_Update { - permission: Boolean! -} - -type MediaFields_url_Delete { - permission: Boolean! -} - -type MediaFields_filename { - create: MediaFields_filename_Create - read: MediaFields_filename_Read - update: MediaFields_filename_Update - delete: MediaFields_filename_Delete -} - -type MediaFields_filename_Create { - permission: Boolean! -} - -type MediaFields_filename_Read { - permission: Boolean! -} - -type MediaFields_filename_Update { - permission: Boolean! -} - -type MediaFields_filename_Delete { - permission: Boolean! -} - -type MediaFields_mimeType { - create: MediaFields_mimeType_Create - read: MediaFields_mimeType_Read - update: MediaFields_mimeType_Update - delete: MediaFields_mimeType_Delete -} - -type MediaFields_mimeType_Create { - permission: Boolean! -} - -type MediaFields_mimeType_Read { - permission: Boolean! -} - -type MediaFields_mimeType_Update { - permission: Boolean! -} - -type MediaFields_mimeType_Delete { - permission: Boolean! -} - -type MediaFields_filesize { - create: MediaFields_filesize_Create - read: MediaFields_filesize_Read - update: MediaFields_filesize_Update - delete: MediaFields_filesize_Delete -} - -type MediaFields_filesize_Create { - permission: Boolean! -} - -type MediaFields_filesize_Read { - permission: Boolean! -} - -type MediaFields_filesize_Update { - permission: Boolean! -} - -type MediaFields_filesize_Delete { - permission: Boolean! -} - -type MediaFields_width { - create: MediaFields_width_Create - read: MediaFields_width_Read - update: MediaFields_width_Update - delete: MediaFields_width_Delete -} - -type MediaFields_width_Create { - permission: Boolean! -} - -type MediaFields_width_Read { - permission: Boolean! -} - -type MediaFields_width_Update { - permission: Boolean! -} - -type MediaFields_width_Delete { - permission: Boolean! -} - -type MediaFields_height { - create: MediaFields_height_Create - read: MediaFields_height_Read - update: MediaFields_height_Update - delete: MediaFields_height_Delete -} - -type MediaFields_height_Create { - permission: Boolean! -} - -type MediaFields_height_Read { - permission: Boolean! -} - -type MediaFields_height_Update { - permission: Boolean! -} - -type MediaFields_height_Delete { - permission: Boolean! -} - -type MediaCreateAccess { - permission: Boolean! - where: JSONObject -} - -type MediaReadAccess { - permission: Boolean! - where: JSONObject -} - -type MediaUpdateAccess { - permission: Boolean! - where: JSONObject -} - -type MediaDeleteAccess { - permission: Boolean! - where: JSONObject -} - -type usersAccess { - fields: UsersFields - create: UsersCreateAccess - read: UsersReadAccess - update: UsersUpdateAccess - delete: UsersDeleteAccess - unlock: UsersUnlockAccess -} - -type UsersFields { - updatedAt: UsersFields_updatedAt - createdAt: UsersFields_createdAt - email: UsersFields_email - password: UsersFields_password -} - -type UsersFields_updatedAt { - create: UsersFields_updatedAt_Create - read: UsersFields_updatedAt_Read - update: UsersFields_updatedAt_Update - delete: UsersFields_updatedAt_Delete -} - -type UsersFields_updatedAt_Create { - permission: Boolean! -} - -type UsersFields_updatedAt_Read { - permission: Boolean! -} - -type UsersFields_updatedAt_Update { - permission: Boolean! -} - -type UsersFields_updatedAt_Delete { - permission: Boolean! -} - -type UsersFields_createdAt { - create: UsersFields_createdAt_Create - read: UsersFields_createdAt_Read - update: UsersFields_createdAt_Update - delete: UsersFields_createdAt_Delete -} - -type UsersFields_createdAt_Create { - permission: Boolean! -} - -type UsersFields_createdAt_Read { - permission: Boolean! -} - -type UsersFields_createdAt_Update { - permission: Boolean! -} - -type UsersFields_createdAt_Delete { - permission: Boolean! -} - -type UsersFields_email { - create: UsersFields_email_Create - read: UsersFields_email_Read - update: UsersFields_email_Update - delete: UsersFields_email_Delete -} - -type UsersFields_email_Create { - permission: Boolean! -} - -type UsersFields_email_Read { - permission: Boolean! -} - -type UsersFields_email_Update { - permission: Boolean! -} - -type UsersFields_email_Delete { - permission: Boolean! -} - -type UsersFields_password { - create: UsersFields_password_Create - read: UsersFields_password_Read - update: UsersFields_password_Update - delete: UsersFields_password_Delete -} - -type UsersFields_password_Create { - permission: Boolean! -} - -type UsersFields_password_Read { - permission: Boolean! -} - -type UsersFields_password_Update { - permission: Boolean! -} - -type UsersFields_password_Delete { - permission: Boolean! -} - -type UsersCreateAccess { - permission: Boolean! - where: JSONObject -} - -type UsersReadAccess { - permission: Boolean! - where: JSONObject -} - -type UsersUpdateAccess { - permission: Boolean! - where: JSONObject -} - -type UsersDeleteAccess { - permission: Boolean! - where: JSONObject -} - -type UsersUnlockAccess { - permission: Boolean! - where: JSONObject -} - -type menuAccess { - fields: MenuFields - read: MenuReadAccess - update: MenuUpdateAccess -} - -type MenuFields { - globalText: MenuFields_globalText -} - -type MenuFields_globalText { - create: MenuFields_globalText_Create - read: MenuFields_globalText_Read - update: MenuFields_globalText_Update - delete: MenuFields_globalText_Delete -} - -type MenuFields_globalText_Create { - permission: Boolean! -} - -type MenuFields_globalText_Read { - permission: Boolean! -} - -type MenuFields_globalText_Update { - permission: Boolean! -} - -type MenuFields_globalText_Delete { - permission: Boolean! -} - -type MenuReadAccess { - permission: Boolean! - where: JSONObject -} - -type MenuUpdateAccess { - permission: Boolean! - where: JSONObject -} - -type Mutation { - createPost(data: mutationPostInput!, draft: Boolean): Post - updatePost(id: String!, data: mutationPostUpdateInput!, draft: Boolean, autosave: Boolean): Post - deletePost(id: String!): Post - createMedia(data: mutationMediaInput!, draft: Boolean): Media - updateMedia( - id: String! - data: mutationMediaUpdateInput! - draft: Boolean - autosave: Boolean - ): Media - deleteMedia(id: String!): Media - createUser(data: mutationUserInput!, draft: Boolean): User - updateUser(id: String!, data: mutationUserUpdateInput!, draft: Boolean, autosave: Boolean): User - deleteUser(id: String!): User - refreshTokenUser(token: String): usersRefreshedUser - logoutUser: String - unlockUser(email: String!): Boolean! - loginUser(email: String, password: String): usersLoginResult - forgotPasswordUser(email: String!, disableEmail: Boolean, expiration: Int): Boolean! - resetPasswordUser(token: String, password: String): usersResetPassword - verifyEmailUser(token: String): Boolean - updateMenu(data: mutationMenuInput!, draft: Boolean): Menu - updatePreference(key: String!, value: JSON): Preference - deletePreference(key: String!): Preference -} - -input mutationPostInput { - text: String - associatedMedia: String - updatedAt: String - createdAt: String -} - -input mutationPostUpdateInput { - text: String - associatedMedia: String - updatedAt: String - createdAt: String -} - -input mutationMediaInput { - updatedAt: String - createdAt: String - url: String - filename: String - mimeType: String - filesize: Float - width: Float - height: Float -} - -input mutationMediaUpdateInput { - updatedAt: String - createdAt: String - url: String - filename: String - mimeType: String - filesize: Float - width: Float - height: Float -} - -input mutationUserInput { - updatedAt: String - createdAt: String - email: String - resetPasswordToken: String - resetPasswordExpiration: String - loginAttempts: Float - lockUntil: String - password: String! -} - -input mutationUserUpdateInput { - updatedAt: String - createdAt: String - email: String - resetPasswordToken: String - resetPasswordExpiration: String - loginAttempts: Float - lockUntil: String - password: String -} - -type usersRefreshedUser { - user: usersJWT - refreshedToken: String - exp: Int -} - -type usersJWT { - email: EmailAddress! - collection: String! -} - -type usersLoginResult { - token: String - user: User - exp: Int -} - -type usersResetPassword { - token: String - user: User -} - -input mutationMenuInput { - globalText: String -} diff --git a/packages/payload/scss.scss b/packages/payload/scss.scss deleted file mode 100644 index c306807834..0000000000 --- a/packages/payload/scss.scss +++ /dev/null @@ -1,6 +0,0 @@ -@import './dist/admin/scss/vars'; -@import './dist/admin/scss/z-index'; -@import './dist/admin/scss/type'; -@import './dist/admin/scss/queries'; -@import './dist/admin/scss/resets'; -@import './dist/admin/scss/svg'; diff --git a/packages/payload/src/admin/RichText.ts b/packages/payload/src/admin/RichText.ts index 54c3f83b0b..6f67ae8b92 100644 --- a/packages/payload/src/admin/RichText.ts +++ b/packages/payload/src/admin/RichText.ts @@ -1,8 +1,10 @@ +import type { I18n } from '@payloadcms/translations' import type { JSONSchema4 } from 'json-schema' import type { SanitizedConfig } from '../config/types.js' import type { Field, RichTextField, Validate } from '../fields/config/types.js' import type { PayloadRequest, RequestContext } from '../types/index.js' +import type { WithServerSideProps } from './elements/WithServerSideProps.js' export type RichTextFieldProps< Value extends object, @@ -27,11 +29,14 @@ type RichTextAdapterBase< siblingDoc: Record }) => Promise | null generateComponentMap: (args: { + WithServerSideProps: WithServerSideProps config: SanitizedConfig + i18n: I18n schemaPath: string }) => Map generateSchemaMap?: (args: { config: SanitizedConfig + i18n: I18n schemaMap: Map schemaPath: string }) => Map diff --git a/packages/payload/src/admin/elements/PreviewButton.ts b/packages/payload/src/admin/elements/PreviewButton.ts index 3763db6848..dad525625b 100644 --- a/packages/payload/src/admin/elements/PreviewButton.ts +++ b/packages/payload/src/admin/elements/PreviewButton.ts @@ -1 +1,3 @@ -export type CustomPreviewButton = React.ComponentType +import type { CustomComponent } from '../../config/types.js' + +export type CustomPreviewButton = CustomComponent diff --git a/packages/payload/src/admin/elements/PublishButton.ts b/packages/payload/src/admin/elements/PublishButton.ts index 40fb78c03f..8fabd59c2f 100644 --- a/packages/payload/src/admin/elements/PublishButton.ts +++ b/packages/payload/src/admin/elements/PublishButton.ts @@ -1 +1,3 @@ -export type CustomPublishButton = React.ComponentType +import type { CustomComponent } from '../../config/types.js' + +export type CustomPublishButton = CustomComponent diff --git a/packages/payload/src/admin/elements/SaveButton.ts b/packages/payload/src/admin/elements/SaveButton.ts index 81b232cffc..917775cc66 100644 --- a/packages/payload/src/admin/elements/SaveButton.ts +++ b/packages/payload/src/admin/elements/SaveButton.ts @@ -1 +1,3 @@ -export type CustomSaveButton = React.ComponentType +import type { CustomComponent } from '../../config/types.js' + +export type CustomSaveButton = CustomComponent diff --git a/packages/payload/src/admin/elements/SaveDraftButton.ts b/packages/payload/src/admin/elements/SaveDraftButton.ts index 6e7c04b996..ff2f410ae8 100644 --- a/packages/payload/src/admin/elements/SaveDraftButton.ts +++ b/packages/payload/src/admin/elements/SaveDraftButton.ts @@ -1 +1,3 @@ -export type CustomSaveDraftButton = React.ComponentType +import type { CustomComponent } from '../../config/types.js' + +export type CustomSaveDraftButton = CustomComponent diff --git a/packages/payload/src/admin/elements/WithServerSideProps.ts b/packages/payload/src/admin/elements/WithServerSideProps.ts new file mode 100644 index 0000000000..2cd3149ed6 --- /dev/null +++ b/packages/payload/src/admin/elements/WithServerSideProps.ts @@ -0,0 +1,4 @@ +export type WithServerSideProps = (args: { + [key: string]: any + Component: React.ComponentType +}) => React.ReactNode diff --git a/packages/payload/src/admin/forms/FieldDescription.ts b/packages/payload/src/admin/forms/FieldDescription.ts index acbbbb7b35..7974559dfd 100644 --- a/packages/payload/src/admin/forms/FieldDescription.ts +++ b/packages/payload/src/admin/forms/FieldDescription.ts @@ -1,8 +1,11 @@ import type React from 'react' -export type DescriptionFunction = () => string +import type { CustomComponent, LabelFunction } from '../../config/types.js' +import type { Payload } from '../../index.js' -export type DescriptionComponent = React.ComponentType +export type DescriptionFunction = LabelFunction + +export type DescriptionComponent = CustomComponent export type Description = | DescriptionComponent @@ -15,4 +18,5 @@ export type FieldDescriptionProps = { className?: string description?: Record | string marginPlacement?: 'bottom' | 'top' + payload?: Payload } diff --git a/packages/payload/src/admin/forms/Label.ts b/packages/payload/src/admin/forms/Label.ts index 1c5e39bae0..0a725d7c5f 100644 --- a/packages/payload/src/admin/forms/Label.ts +++ b/packages/payload/src/admin/forms/Label.ts @@ -1,8 +1,10 @@ +import type { LabelFunction } from '../../config/types.js' + export type LabelProps = { CustomLabel?: React.ReactNode as?: 'label' | 'span' htmlFor?: string - label?: Record | false | string + label?: LabelFunction | Record | false | string required?: boolean unstyled?: boolean } diff --git a/packages/payload/src/admin/forms/RowLabel.ts b/packages/payload/src/admin/forms/RowLabel.ts index 6a7dc0533a..d75d7b0a78 100644 --- a/packages/payload/src/admin/forms/RowLabel.ts +++ b/packages/payload/src/admin/forms/RowLabel.ts @@ -1,3 +1,5 @@ -export type RowLabelComponent = React.ComponentType +import type { CustomComponent } from '../../config/types.js' + +export type RowLabelComponent = CustomComponent export type RowLabel = Record | RowLabelComponent | string diff --git a/packages/payload/src/admin/types.ts b/packages/payload/src/admin/types.ts index cf85d435a7..efd4ddb7b5 100644 --- a/packages/payload/src/admin/types.ts +++ b/packages/payload/src/admin/types.ts @@ -13,6 +13,7 @@ export type { DocumentTabConfig, DocumentTabProps, } from './elements/Tab.js' +export type { WithServerSideProps } from './elements/WithServerSideProps.js' export type { ErrorProps } from './forms/Error.js' export type { Description, diff --git a/packages/payload/src/admin/views/types.ts b/packages/payload/src/admin/views/types.ts index f0cd4b41d0..9405f7e370 100644 --- a/packages/payload/src/admin/views/types.ts +++ b/packages/payload/src/admin/views/types.ts @@ -1,4 +1,4 @@ -import type { Translations } from '@payloadcms/translations' +import type { SupportedLanguages } from '@payloadcms/translations' import type { Permissions } from '../../auth/index.js' import type { SanitizedCollectionConfig } from '../../collections/config/types.js' @@ -43,7 +43,7 @@ export type InitPageResult = { locale: Locale permissions: Permissions req: PayloadRequest - translations: Translations + translations: SupportedLanguages visibleEntities: VisibleEntities } diff --git a/packages/payload/src/auth/baseFields/apiKey.ts b/packages/payload/src/auth/baseFields/apiKey.ts index efea8c3d40..0840a2c2eb 100644 --- a/packages/payload/src/auth/baseFields/apiKey.ts +++ b/packages/payload/src/auth/baseFields/apiKey.ts @@ -2,15 +2,12 @@ import crypto from 'crypto' import type { Field, FieldHook } from '../../fields/config/types.js' -import { extractTranslations } from '../../translations/extractTranslations.js' - -const labels = extractTranslations(['authentication:enableAPIKey', 'authentication:apiKey']) - const encryptKey: FieldHook = ({ req, value }) => value ? req.payload.encrypt(value as string) : null const decryptKey: FieldHook = ({ req, value }) => value ? req.payload.decrypt(value as string) : undefined +// eslint-disable-next-line no-restricted-exports export default [ { name: 'enableAPIKey', @@ -21,7 +18,7 @@ export default [ }, }, defaultValue: false, - label: labels['authentication:enableAPIKey'], + label: ({ t }) => t('authentication:enableAPIKey'), }, { name: 'apiKey', @@ -35,7 +32,7 @@ export default [ afterRead: [decryptKey], beforeChange: [encryptKey], }, - label: labels['authentication:apiKey'], + label: ({ t }) => t('authentication:apiKey'), }, { name: 'apiKeyIndex', diff --git a/packages/payload/src/auth/baseFields/auth.ts b/packages/payload/src/auth/baseFields/auth.ts index 8933034f97..6018779b0c 100644 --- a/packages/payload/src/auth/baseFields/auth.ts +++ b/packages/payload/src/auth/baseFields/auth.ts @@ -1,9 +1,6 @@ import type { Field } from '../../fields/config/types.js' import { email } from '../../fields/validations.js' -import { extractTranslations } from '../../translations/extractTranslations.js' - -const labels = extractTranslations(['general:email']) const baseAuthFields: Field[] = [ { @@ -14,7 +11,7 @@ const baseAuthFields: Field[] = [ Field: () => null, }, }, - label: labels['general:email'], + label: ({ t }) => t('general:email'), required: true, unique: true, validate: email, diff --git a/packages/payload/src/auth/baseFields/verification.ts b/packages/payload/src/auth/baseFields/verification.ts index 7a2610f9c2..7c9719849a 100644 --- a/packages/payload/src/auth/baseFields/verification.ts +++ b/packages/payload/src/auth/baseFields/verification.ts @@ -1,9 +1,5 @@ import type { Field, FieldHook } from '../../fields/config/types.js' -import { extractTranslations } from '../../translations/extractTranslations.js' - -const labels = extractTranslations(['authentication:verified']) - const autoRemoveVerificationToken: FieldHook = ({ data, operation, originalDoc, value }) => { // If a user manually sets `_verified` to true, // and it was `false`, set _verificationToken to `null`. @@ -33,7 +29,7 @@ export default [ Field: () => null, }, }, - label: labels['authentication:verified'], + label: ({ t }) => t('authentication:verified'), }, { name: '_verificationToken', diff --git a/packages/payload/src/auth/cookies.ts b/packages/payload/src/auth/cookies.ts index 5d2adc3029..31d6f24c09 100644 --- a/packages/payload/src/auth/cookies.ts +++ b/packages/payload/src/auth/cookies.ts @@ -1,5 +1,6 @@ import type { Payload } from '../index.js' import type { SanitizedCollectionConfig } from './../collections/config/types.js' + type CookieOptions = { domain?: string expires?: Date @@ -7,53 +8,108 @@ type CookieOptions = { maxAge?: number name: string path?: string + returnCookieAsObject: boolean sameSite?: 'Lax' | 'None' | 'Strict' secure?: boolean value?: string } -export const generateCookies = (cookies: CookieOptions[]): string => { - return cookies.map((options) => generateCookie(options)).join('; ') +type CookieObject = { + domain?: string + expires?: string + httpOnly?: boolean + maxAge?: number + name: string + path?: string + sameSite?: 'Lax' | 'None' | 'Strict' + secure?: boolean + value: string } -export const generateCookie = (args: CookieOptions): string => { - const { name, domain, expires, httpOnly, maxAge, path, sameSite, secure: secureArg, value } = args +export const generateCookie = ( + args: CookieOptions, +): ReturnCookieAsObject extends true ? CookieObject : string => { + const { + name, + domain, + expires, + httpOnly, + maxAge, + path, + returnCookieAsObject, + sameSite, + secure: secureArg, + value, + } = args let cookieString = `${name}=${value || ''}` + const cookieObject: CookieObject = { + name, + value, + } const secure = secureArg || sameSite === 'None' if (expires) { - cookieString += `; Expires=${expires.toUTCString()}` + if (returnCookieAsObject) { + cookieObject.expires = expires.toUTCString() + } else { + cookieString += `; Expires=${expires.toUTCString()}` + } } if (maxAge) { - cookieString += `; Max-Age=${maxAge}` + if (returnCookieAsObject) { + cookieObject.maxAge = maxAge + } else { + cookieString += `; Max-Age=${maxAge.toString()}` + } } if (domain) { - cookieString += `; Domain=${domain}` + if (returnCookieAsObject) { + cookieObject.domain = domain + } else { + cookieString += `; Domain=${domain}` + } } if (path) { - cookieString += `; Path=${path}` + if (returnCookieAsObject) { + cookieObject.path = path + } else { + cookieString += `; Path=${path}` + } } if (secure) { - cookieString += '; Secure' + if (returnCookieAsObject) { + cookieObject.secure = secure + } else { + cookieString += `; Secure=${secure}` + } } if (httpOnly) { - cookieString += '; HttpOnly' + if (returnCookieAsObject) { + cookieObject.httpOnly = httpOnly + } else { + cookieString += `; HttpOnly=${httpOnly}` + } } if (sameSite) { - cookieString += `; SameSite=${sameSite}` + if (returnCookieAsObject) { + cookieObject.sameSite = sameSite + } else { + cookieString += `; SameSite=${sameSite}` + } } - return cookieString + return (returnCookieAsObject ? cookieObject : cookieString) as ReturnCookieAsObject extends true + ? CookieObject + : string } - type GetCookieExpirationArgs = { /* The number of seconds until the cookie expires @@ -72,14 +128,17 @@ type GeneratePayloadCookieArgs = { collectionConfig: SanitizedCollectionConfig /* An instance of payload */ payload: Payload + /* The returnAs value */ + returnCookieAsObject?: boolean /* The token to be stored in the cookie */ token: string } -export const generatePayloadCookie = ({ +export const generatePayloadCookie = ({ collectionConfig, payload, + returnCookieAsObject = false, token, -}: GeneratePayloadCookieArgs): string => { +}: T): T['returnCookieAsObject'] extends true ? CookieObject : string => { const sameSite = typeof collectionConfig.auth.cookies.sameSite === 'string' ? collectionConfig.auth.cookies.sameSite @@ -87,22 +146,24 @@ export const generatePayloadCookie = ({ ? 'Strict' : undefined - return generateCookie({ + return generateCookie({ name: `${payload.config.cookiePrefix}-token`, domain: collectionConfig.auth.cookies.domain ?? undefined, expires: getCookieExpiration({ seconds: collectionConfig.auth.tokenExpiration }), httpOnly: true, path: '/', + returnCookieAsObject, sameSite, secure: collectionConfig.auth.cookies.secure, value: token, }) } -export const generateExpiredPayloadCookie = ({ +export const generateExpiredPayloadCookie = >({ collectionConfig, payload, -}: Omit): string => { + returnCookieAsObject = false, +}: T): T['returnCookieAsObject'] extends true ? CookieObject : string => { const sameSite = typeof collectionConfig.auth.cookies.sameSite === 'string' ? collectionConfig.auth.cookies.sameSite @@ -112,12 +173,13 @@ export const generateExpiredPayloadCookie = ({ const expires = new Date(Date.now() - 1000) - return generateCookie({ + return generateCookie({ name: `${payload.config.cookiePrefix}-token`, domain: collectionConfig.auth.cookies.domain ?? undefined, expires, httpOnly: true, path: '/', + returnCookieAsObject, sameSite, secure: collectionConfig.auth.cookies.secure, }) diff --git a/packages/payload/src/auth/defaultUser.ts b/packages/payload/src/auth/defaultUser.ts index 807dc2f2f2..beed302a2f 100644 --- a/packages/payload/src/auth/defaultUser.ts +++ b/packages/payload/src/auth/defaultUser.ts @@ -1,9 +1,5 @@ import type { CollectionConfig } from '../collections/config/types.js' -import { extractTranslations } from '../translations/extractTranslations.js' - -const labels = extractTranslations(['general:user', 'general:users']) - export const defaultUserCollection: CollectionConfig = { slug: 'users', admin: { @@ -14,7 +10,7 @@ export const defaultUserCollection: CollectionConfig = { }, fields: [], labels: { - plural: labels['general:users'], - singular: labels['general:user'], + plural: ({ t }) => t('general:users'), + singular: ({ t }) => t('general:user'), }, } diff --git a/packages/payload/src/auth/executeAuthStrategies.ts b/packages/payload/src/auth/executeAuthStrategies.ts index 4d292313fb..83b68316ad 100644 --- a/packages/payload/src/auth/executeAuthStrategies.ts +++ b/packages/payload/src/auth/executeAuthStrategies.ts @@ -1,8 +1,9 @@ +import type { GeneratedTypes } from '../index.js' import type { AuthStrategyFunctionArgs, User } from './index.js' export const executeAuthStrategies = async ( args: AuthStrategyFunctionArgs, -): Promise => { +): Promise => { return args.payload.authStrategies.reduce(async (accumulatorPromise, strategy) => { const authUser = await accumulatorPromise if (!authUser) { diff --git a/packages/payload/src/auth/getFieldsToSign.ts b/packages/payload/src/auth/getFieldsToSign.ts index 0058b5fe9b..a9fa9646f0 100644 --- a/packages/payload/src/auth/getFieldsToSign.ts +++ b/packages/payload/src/auth/getFieldsToSign.ts @@ -1,7 +1,7 @@ /* eslint-disable no-param-reassign */ import type { CollectionConfig } from '../collections/config/types.js' import type { Field, TabAsField } from '../fields/config/types.js' -import type { User } from './index.js' +import type { PayloadRequest } from '../types/index.js' import { fieldAffectsData, tabHasName } from '../fields/config/types.js' @@ -105,7 +105,7 @@ const traverseFields = ({ export const getFieldsToSign = (args: { collectionConfig: CollectionConfig email: string - user: User + user: PayloadRequest['user'] }): Record => { const { collectionConfig, email, user } = args diff --git a/packages/payload/src/auth/operations/auth.ts b/packages/payload/src/auth/operations/auth.ts index 1627a01be6..4c71b006ff 100644 --- a/packages/payload/src/auth/operations/auth.ts +++ b/packages/payload/src/auth/operations/auth.ts @@ -1,3 +1,4 @@ +import type { GeneratedTypes } from '../../index.js' import type { PayloadRequest } from '../../types/index.js' import type { Permissions, User } from '../types.js' @@ -10,16 +11,16 @@ import { getAccessResults } from '../getAccessResults.js' export type AuthArgs = { headers: Request['headers'] - req: Omit + req?: Omit } export type AuthResult = { cookies: Map permissions: Permissions - user: User | null + user: GeneratedTypes['user'] | null } -export const auth = async (args: AuthArgs): Promise => { +export const auth = async (args: Required): Promise => { const { headers } = args const req = args.req as PayloadRequest const { payload } = req diff --git a/packages/payload/src/auth/operations/local/auth.ts b/packages/payload/src/auth/operations/local/auth.ts index 05ddc439f5..b221d550f0 100644 --- a/packages/payload/src/auth/operations/local/auth.ts +++ b/packages/payload/src/auth/operations/local/auth.ts @@ -10,6 +10,6 @@ export const auth = async (payload: Payload, options: AuthArgs): Promise) => Promise const locatedConfig = getTsconfig() const tsconfig = locatedConfig.config.compilerOptions as unknown as ts.CompilerOptions +// Ensure baseUrl is set in order to support paths +if (!tsconfig.baseUrl) { + tsconfig.baseUrl = '.' +} + // Don't resolve d.ts files, because we aren't type-checking tsconfig.noDtsResolution = true tsconfig.module = ts.ModuleKind.ESNext @@ -78,7 +83,6 @@ export const resolve: ResolveFn = async (specifier, context, nextResolve) => { // and keep going let nextResult: ResolveResult - // First, try to if (!isTS) { try { nextResult = await nextResolve(specifier, context, nextResolve) diff --git a/packages/payload/src/collections/config/client.ts b/packages/payload/src/collections/config/client.ts index af27774dfd..c7831a59cd 100644 --- a/packages/payload/src/collections/config/client.ts +++ b/packages/payload/src/collections/config/client.ts @@ -23,14 +23,22 @@ export type ClientCollectionConfig = Omit< fields: ClientFieldConfig[] } +import type { TFunction } from '@payloadcms/translations' + import type { ClientFieldConfig } from '../../fields/config/client.js' import type { SanitizedCollectionConfig } from './types.js' import { createClientFieldConfigs } from '../../fields/config/client.js' -export const createClientCollectionConfig = (collection: SanitizedCollectionConfig) => { +export const createClientCollectionConfig = ({ + collection, + t, +}: { + collection: SanitizedCollectionConfig + t: TFunction +}) => { const sanitized = { ...collection } - sanitized.fields = createClientFieldConfigs(sanitized.fields) + sanitized.fields = createClientFieldConfigs({ fields: sanitized.fields, t }) const serverOnlyCollectionProperties: Partial[] = [ 'hooks', @@ -51,6 +59,7 @@ export const createClientCollectionConfig = (collection: SanitizedCollectionConf sanitized.upload = { ...sanitized.upload } delete sanitized.upload.handlers delete sanitized.upload.adminThumbnail + delete sanitized.upload.externalFileHeaderFilter } if ('auth' in sanitized && typeof sanitized.auth === 'object') { @@ -60,6 +69,14 @@ export const createClientCollectionConfig = (collection: SanitizedCollectionConf delete sanitized.auth.verify } + if (sanitized.labels) { + Object.entries(sanitized.labels).forEach(([labelType, collectionLabel]) => { + if (typeof collectionLabel === 'function') { + sanitized.labels[labelType] = collectionLabel({ t }) + } + }) + } + if ('admin' in sanitized) { sanitized.admin = { ...sanitized.admin } @@ -85,7 +102,11 @@ export const createClientCollectionConfig = (collection: SanitizedCollectionConf return sanitized } -export const createClientCollectionConfigs = ( - collections: SanitizedCollectionConfig[], -): ClientCollectionConfig[] => - collections.map((collection) => createClientCollectionConfig(collection)) +export const createClientCollectionConfigs = ({ + collections, + t, +}: { + collections: SanitizedCollectionConfig[] + t: TFunction +}): ClientCollectionConfig[] => + collections.map((collection) => createClientCollectionConfig({ collection, t })) diff --git a/packages/payload/src/collections/config/sanitize.ts b/packages/payload/src/collections/config/sanitize.ts index abb87a9b28..601c0feb88 100644 --- a/packages/payload/src/collections/config/sanitize.ts +++ b/packages/payload/src/collections/config/sanitize.ts @@ -11,15 +11,12 @@ import TimestampsRequired from '../../errors/TimestampsRequired.js' import { sanitizeFields } from '../../fields/config/sanitize.js' import { fieldAffectsData } from '../../fields/config/types.js' import mergeBaseFields from '../../fields/mergeBaseFields.js' -import { extractTranslations } from '../../translations/extractTranslations.js' import { getBaseUploadFields } from '../../uploads/getBaseFields.js' import { formatLabels } from '../../utilities/formatLabels.js' import { isPlainObject } from '../../utilities/isPlainObject.js' import baseVersionFields from '../../versions/baseFields.js' import { authDefaults, defaults } from './defaults.js' -const translations = extractTranslations(['general:createdAt', 'general:updatedAt']) - const sanitizeCollection = ( config: Config, collection: CollectionConfig, @@ -51,7 +48,7 @@ const sanitizeCollection = ( disableBulkEdit: true, hidden: true, }, - label: translations['general:updatedAt'], + label: ({ t }) => t('general:updatedAt'), }) } if (!hasCreatedAt) { @@ -64,7 +61,7 @@ const sanitizeCollection = ( // The default sort for list view is createdAt. Thus, enabling indexing by default, is a major performance improvement, especially for large or a large amount of collections. type: 'date', index: true, - label: translations['general:createdAt'], + label: ({ t }) => t('general:createdAt'), }) } } diff --git a/packages/payload/src/collections/config/schema.ts b/packages/payload/src/collections/config/schema.ts index 871753cf55..45e2590017 100644 --- a/packages/payload/src/collections/config/schema.ts +++ b/packages/payload/src/collections/config/schema.ts @@ -140,10 +140,10 @@ const collectionSchema = joi.object().keys({ labels: joi.object({ plural: joi .alternatives() - .try(joi.string(), joi.object().pattern(joi.string(), [joi.string()])), + .try(joi.func(), joi.string(), joi.object().pattern(joi.string(), [joi.string()])), singular: joi .alternatives() - .try(joi.string(), joi.object().pattern(joi.string(), [joi.string()])), + .try(joi.func(), joi.string(), joi.object().pattern(joi.string(), [joi.string()])), }), timestamps: joi.boolean(), typescript: joi.object().keys({ @@ -154,6 +154,7 @@ const collectionSchema = joi.object().keys({ adminThumbnail: joi.alternatives().try(joi.string(), componentSchema), crop: joi.bool(), disableLocalStorage: joi.bool(), + externalFileHeaderFilter: joi.func(), filesRequiredOnCreate: joi.bool(), focalPoint: joi.bool(), formatOptions: joi.object().keys({ diff --git a/packages/payload/src/collections/config/types.ts b/packages/payload/src/collections/config/types.ts index 81141181ba..769c04091b 100644 --- a/packages/payload/src/collections/config/types.ts +++ b/packages/payload/src/collections/config/types.ts @@ -10,10 +10,12 @@ import type { import type { Auth, ClientUser, IncomingAuthType } from '../../auth/types.js' import type { Access, + CustomComponent, EditConfig, Endpoint, EntityDescription, GeneratePreviewURL, + LabelFunction, LivePreviewConfig, } from '../../config/types.js' import type { Field } from '../../fields/config/types.js' @@ -200,10 +202,10 @@ export type CollectionAdminOptions = { * Custom admin components */ components?: { - AfterList?: React.ComponentType[] - AfterListTable?: React.ComponentType[] - BeforeList?: React.ComponentType[] - BeforeListTable?: React.ComponentType[] + AfterList?: CustomComponent[] + AfterListTable?: CustomComponent[] + BeforeList?: CustomComponent[] + BeforeListTable?: CustomComponent[] /** * Components within the edit view */ @@ -238,7 +240,7 @@ export type CollectionAdminOptions = { List?: | { Component?: React.ComponentType - actions?: React.ComponentType[] + actions?: CustomComponent[] } | React.ComponentType } @@ -360,8 +362,8 @@ export type CollectionConfig = { * Label configuration */ labels?: { - plural?: Record | string - singular?: Record | string + plural?: LabelFunction | Record | string + singular?: LabelFunction | Record | string } slug: string /** @@ -407,6 +409,7 @@ export interface SanitizedCollectionConfig export type Collection = { config: SanitizedCollectionConfig + customIDType?: 'number' | 'text' graphQL?: { JWT: GraphQLObjectType mutationInputType: GraphQLNonNull diff --git a/packages/payload/src/collections/dataloader.ts b/packages/payload/src/collections/dataloader.ts index e7081d609b..1686ef2e6e 100644 --- a/packages/payload/src/collections/dataloader.ts +++ b/packages/payload/src/collections/dataloader.ts @@ -5,8 +5,6 @@ import DataLoader from 'dataloader' import type { PayloadRequest } from '../types/index.js' import type { TypeWithID } from './config/types.js' -import { fieldAffectsData } from '../fields/config/types.js' -import { getIDType } from '../utilities/getIDType.js' import { isValidID } from '../utilities/isValidID.js' // Payload uses `dataloader` to solve the classic GraphQL N+1 problem. @@ -71,15 +69,13 @@ const batchAndLoadDocs = const batchKey = JSON.stringify(batchKeyArray) - const idField = payload.collections?.[collection].config.fields.find( - (field) => fieldAffectsData(field) && field.name === 'id', - ) + const idType = payload.collections?.[collection].customIDType || payload.db.defaultIDType let sanitizedID: number | string = id - if (idField?.type === 'number') sanitizedID = parseFloat(id) + if (idType === 'number') sanitizedID = parseFloat(id) - if (isValidID(sanitizedID, getIDType(idField, payload?.db?.defaultIDType))) { + if (isValidID(sanitizedID, idType)) { return { ...batches, [batchKey]: [...(batches[batchKey] || []), sanitizedID], diff --git a/packages/payload/src/collections/operations/create.ts b/packages/payload/src/collections/operations/create.ts index 1cd90fc00a..fd67ed628c 100644 --- a/packages/payload/src/collections/operations/create.ts +++ b/packages/payload/src/collections/operations/create.ts @@ -22,7 +22,6 @@ import { generateFileData } from '../../uploads/generateFileData.js' import { unlinkTempFiles } from '../../uploads/unlinkTempFiles.js' import { uploadFiles } from '../../uploads/uploadFiles.js' import { commitTransaction } from '../../utilities/commitTransaction.js' -import flattenFields from '../../utilities/flattenTopLevelFields.js' import { initTransaction } from '../../utilities/initTransaction.js' import { killTransaction } from '../../utilities/killTransaction.js' import sanitizeInternalFields from '../../utilities/sanitizeInternalFields.js' @@ -106,11 +105,8 @@ export const createOperation = async field.name === 'id') > -1 - if (hasIdField) { + if (payload.collections[collectionConfig.slug].customIDType) { data = { _id: data.id, ...data, diff --git a/packages/payload/src/collections/operations/local/create.ts b/packages/payload/src/collections/operations/local/create.ts index aa553cd6ef..68d4a07c9c 100644 --- a/packages/payload/src/collections/operations/local/create.ts +++ b/packages/payload/src/collections/operations/local/create.ts @@ -23,10 +23,10 @@ export type Options = { depth?: number disableVerificationEmail?: boolean draft?: boolean - fallbackLocale?: string + fallbackLocale?: GeneratedTypes['locale'] file?: File filePath?: string - locale?: string + locale?: GeneratedTypes['locale'] overrideAccess?: boolean overwriteExistingFiles?: boolean req?: PayloadRequest @@ -34,6 +34,7 @@ export type Options = { user?: Document } +// eslint-disable-next-line no-restricted-exports export default async function createLocal( payload: Payload, options: Options, @@ -58,7 +59,7 @@ export default async function createLocal({ diff --git a/packages/payload/src/collections/operations/local/delete.ts b/packages/payload/src/collections/operations/local/delete.ts index d9e558b9a8..64505b2a1d 100644 --- a/packages/payload/src/collections/operations/local/delete.ts +++ b/packages/payload/src/collections/operations/local/delete.ts @@ -16,8 +16,8 @@ export type BaseOptions = { */ context?: RequestContext depth?: number - fallbackLocale?: string - locale?: string + fallbackLocale?: GeneratedTypes['locale'] + locale?: GeneratedTypes['locale'] overrideAccess?: boolean req?: PayloadRequest showHiddenFields?: boolean diff --git a/packages/payload/src/collections/operations/local/duplicate.ts b/packages/payload/src/collections/operations/local/duplicate.ts index d2a491ff1f..c267b73c4d 100644 --- a/packages/payload/src/collections/operations/local/duplicate.ts +++ b/packages/payload/src/collections/operations/local/duplicate.ts @@ -14,9 +14,9 @@ export type Options = { context?: RequestContext depth?: number draft?: boolean - fallbackLocale?: string + fallbackLocale?: GeneratedTypes['locale'] id: number | string - locale?: string + locale?: GeneratedTypes['locale'] overrideAccess?: boolean req?: PayloadRequest showHiddenFields?: boolean @@ -50,7 +50,7 @@ export async function duplicate({ id, diff --git a/packages/payload/src/collections/operations/local/find.ts b/packages/payload/src/collections/operations/local/find.ts index b667c0c579..287610d651 100644 --- a/packages/payload/src/collections/operations/local/find.ts +++ b/packages/payload/src/collections/operations/local/find.ts @@ -16,9 +16,9 @@ export type Options = { depth?: number disableErrors?: boolean draft?: boolean - fallbackLocale?: string + fallbackLocale?: GeneratedTypes['locale'] limit?: number - locale?: string + locale?: 'all' | GeneratedTypes['locale'] overrideAccess?: boolean page?: number pagination?: boolean diff --git a/packages/payload/src/collections/operations/local/findByID.ts b/packages/payload/src/collections/operations/local/findByID.ts index 5b2af8f6c4..ac09f75a43 100644 --- a/packages/payload/src/collections/operations/local/findByID.ts +++ b/packages/payload/src/collections/operations/local/findByID.ts @@ -15,9 +15,9 @@ export type Options = { depth?: number disableErrors?: boolean draft?: boolean - fallbackLocale?: string + fallbackLocale?: GeneratedTypes['locale'] id: number | string - locale?: string + locale?: 'all' | GeneratedTypes['locale'] overrideAccess?: boolean req?: PayloadRequest showHiddenFields?: boolean diff --git a/packages/payload/src/collections/operations/local/findVersionByID.ts b/packages/payload/src/collections/operations/local/findVersionByID.ts index 625dc0ec14..200e3ac993 100644 --- a/packages/payload/src/collections/operations/local/findVersionByID.ts +++ b/packages/payload/src/collections/operations/local/findVersionByID.ts @@ -15,9 +15,9 @@ export type Options = { depth?: number disableErrors?: boolean draft?: boolean - fallbackLocale?: string + fallbackLocale?: GeneratedTypes['locale'] id: string - locale?: string + locale?: 'all' | GeneratedTypes['locale'] overrideAccess?: boolean req?: PayloadRequest showHiddenFields?: boolean diff --git a/packages/payload/src/collections/operations/local/findVersions.ts b/packages/payload/src/collections/operations/local/findVersions.ts index 0d41f85dcf..da6fb63946 100644 --- a/packages/payload/src/collections/operations/local/findVersions.ts +++ b/packages/payload/src/collections/operations/local/findVersions.ts @@ -15,9 +15,9 @@ export type Options = { context?: RequestContext depth?: number draft?: boolean - fallbackLocale?: string + fallbackLocale?: GeneratedTypes['locale'] limit?: number - locale?: string + locale?: 'all' | GeneratedTypes['locale'] overrideAccess?: boolean page?: number req?: PayloadRequest diff --git a/packages/payload/src/collections/operations/local/restoreVersion.ts b/packages/payload/src/collections/operations/local/restoreVersion.ts index 8959b6659b..d1cdefa5e5 100644 --- a/packages/payload/src/collections/operations/local/restoreVersion.ts +++ b/packages/payload/src/collections/operations/local/restoreVersion.ts @@ -13,9 +13,9 @@ export type Options = { context?: RequestContext depth?: number draft?: boolean - fallbackLocale?: string + fallbackLocale?: GeneratedTypes['locale'] id: string - locale?: string + locale?: GeneratedTypes['locale'] overrideAccess?: boolean req?: PayloadRequest showHiddenFields?: boolean diff --git a/packages/payload/src/collections/operations/local/update.ts b/packages/payload/src/collections/operations/local/update.ts index dd9a5b1309..1f1248bedc 100644 --- a/packages/payload/src/collections/operations/local/update.ts +++ b/packages/payload/src/collections/operations/local/update.ts @@ -21,10 +21,10 @@ export type BaseOptions = { data: DeepPartial depth?: number draft?: boolean - fallbackLocale?: string + fallbackLocale?: GeneratedTypes['locale'] file?: File filePath?: string - locale?: string + locale?: GeneratedTypes['locale'] overrideAccess?: boolean overwriteExistingFiles?: boolean req?: PayloadRequest diff --git a/packages/payload/src/config/client.ts b/packages/payload/src/config/client.ts index dad2ffd5e2..9e89b72398 100644 --- a/packages/payload/src/config/client.ts +++ b/packages/payload/src/config/client.ts @@ -1,3 +1,5 @@ +import type { TFunction } from '@payloadcms/translations' + import type { ClientCollectionConfig } from '../collections/config/client.js' import type { SanitizedCollectionConfig } from '../collections/config/types.js' import type { ClientGlobalConfig } from '../globals/config/client.js' @@ -41,10 +43,14 @@ export type ClientConfig = Omit< globals: ClientGlobalConfig[] } -export const createClientConfig = async ( - configPromise: Promise | SanitizedConfig, -): Promise => { - const config = await configPromise +export const createClientConfig = async ({ + config, + t, +}: { + config: SanitizedConfig + t: TFunction + // eslint-disable-next-line @typescript-eslint/require-await +}): Promise => { const clientConfig: ClientConfig = { ...config } const serverOnlyConfigProperties: Partial[] = [ @@ -95,11 +101,15 @@ export const createClientConfig = async ( } } - clientConfig.collections = createClientCollectionConfigs( - clientConfig.collections as SanitizedCollectionConfig[], - ) + clientConfig.collections = createClientCollectionConfigs({ + collections: clientConfig.collections as SanitizedCollectionConfig[], + t, + }) - clientConfig.globals = createClientGlobalConfigs(clientConfig.globals as SanitizedGlobalConfig[]) + clientConfig.globals = createClientGlobalConfigs({ + globals: clientConfig.globals as SanitizedGlobalConfig[], + t, + }) return clientConfig } diff --git a/packages/payload/src/config/find.ts b/packages/payload/src/config/find.ts index 26ab846fb3..2ff9a16f90 100644 --- a/packages/payload/src/config/find.ts +++ b/packages/payload/src/config/find.ts @@ -7,11 +7,18 @@ import path from 'path' * If no tsconfig.json file is found, returns the current working directory. * @returns An object containing the source and output paths. */ -const getTSConfigPaths = (): { outPath: string; srcPath: string } => { +const getTSConfigPaths = (): { + configPath?: string + outPath?: string + rootPath?: string + srcPath?: string +} => { const tsConfigPath = findUp.sync('tsconfig.json') if (!tsConfigPath) { - return { outPath: process.cwd(), srcPath: process.cwd() } + return { + rootPath: process.cwd(), + } } try { @@ -23,13 +30,25 @@ const getTSConfigPaths = (): { outPath: string; srcPath: string } => { const tsConfig = JSON.parse(rawTsConfig) - const srcPath = tsConfig.compilerOptions?.rootDir || process.cwd() - const outPath = tsConfig.compilerOptions?.outDir || process.cwd() - - return { outPath, srcPath } + const rootPath = process.cwd() + const srcPath = tsConfig.compilerOptions?.rootDir || path.resolve(process.cwd(), 'src') + const outPath = tsConfig.compilerOptions?.outDir || path.resolve(process.cwd(), 'dist') + const tsConfigDir = path.dirname(tsConfigPath) + let configPath = tsConfig.compilerOptions?.paths?.['@payload-config']?.[0] + if (configPath) { + configPath = path.resolve(tsConfigDir, configPath) + } + return { + configPath, + outPath, + rootPath, + srcPath, + } } catch (error) { console.error(`Error parsing tsconfig.json: ${error}`) // Do not throw the error, as we can still continue with the other config path finding methods - return { outPath: process.cwd(), srcPath: process.cwd() } + return { + rootPath: process.cwd(), + } } } @@ -49,12 +68,17 @@ export const findConfig = (): string => { return path.resolve(process.cwd(), process.env.PAYLOAD_CONFIG_PATH) } - const { outPath, srcPath } = getTSConfigPaths() + const { configPath, outPath, rootPath, srcPath } = getTSConfigPaths() - const searchPaths = process.env.NODE_ENV === 'production' ? [outPath, srcPath] : [srcPath] + const searchPaths = + process.env.NODE_ENV === 'production' + ? [configPath, outPath, srcPath, rootPath] + : [configPath, srcPath, rootPath] // eslint-disable-next-line no-restricted-syntax for (const searchPath of searchPaths) { + if (!searchPath) continue + const configPath = findUp.sync( (dir) => { const tsPath = path.join(dir, 'payload.config.ts') diff --git a/packages/payload/src/config/sanitize.ts b/packages/payload/src/config/sanitize.ts index 36dc1e912d..6e17c0da80 100644 --- a/packages/payload/src/config/sanitize.ts +++ b/packages/payload/src/config/sanitize.ts @@ -1,4 +1,4 @@ -import { translations } from '@payloadcms/translations/api' +import { en } from '@payloadcms/translations/languages/en' import merge from 'deepmerge' import type { @@ -87,8 +87,10 @@ export const sanitizeConfig = (incomingConfig: Config): SanitizedConfig => { config.i18n = { fallbackLanguage: 'en', - supportedLanguages: Object.keys(translations), - translations, + supportedLanguages: { + en, + }, + translations: {}, ...(incomingConfig?.i18n ?? {}), } diff --git a/packages/payload/src/config/types.ts b/packages/payload/src/config/types.ts index b072f9c754..99510b3e13 100644 --- a/packages/payload/src/config/types.ts +++ b/packages/payload/src/config/types.ts @@ -1,4 +1,4 @@ -import type { I18nOptions } from '@payloadcms/translations' +import type { I18nOptions, TFunction } from '@payloadcms/translations' import type { Options as ExpressFileUploadOptions } from 'express-fileupload' import type GraphQL from 'graphql' import type { Transporter } from 'nodemailer' @@ -76,7 +76,8 @@ export type ServerOnlyLivePreviewProperties = keyof Pick[] + actions?: CustomComponent[] } /** @@ -291,6 +292,14 @@ export type EditViewConfig = */ export type EditView = EditViewComponent | EditViewConfig +export type ServerProps = { + payload: Payload +} + +export const serverProps: (keyof ServerProps)[] = ['payload'] + +export type CustomComponent = React.ComponentType + export type Locale = { /** * value of supported locale @@ -363,6 +372,8 @@ export type LocalizationConfig = Prettify< LocalizationConfigWithLabels | LocalizationConfigWithNoLabels > +export type LabelFunction = ({ t }: { t: TFunction }) => string + export type SharpDependency = ( input?: | ArrayBuffer @@ -418,46 +429,46 @@ export type Config = { /** * Replace the navigation with a custom component */ - Nav?: React.ComponentType + Nav?: CustomComponent /** * Add custom components to the top right of the Admin Panel */ - actions?: React.ComponentType[] + actions?: CustomComponent[] /** * Add custom components after the collection overview */ - afterDashboard?: React.ComponentType[] + afterDashboard?: CustomComponent[] /** * Add custom components after the email/password field */ - afterLogin?: React.ComponentType[] + afterLogin?: CustomComponent[] /** * Add custom components after the navigation links */ - afterNavLinks?: React.ComponentType[] + afterNavLinks?: CustomComponent[] /** * Add custom components before the collection overview */ - beforeDashboard?: React.ComponentType[] + beforeDashboard?: CustomComponent[] /** * Add custom components before the email/password field */ - beforeLogin?: React.ComponentType[] + beforeLogin?: CustomComponent[] /** * Add custom components before the navigation links */ - beforeNavLinks?: React.ComponentType[] + beforeNavLinks?: CustomComponent[] /** Replace graphical components */ graphics?: { /** Replace the icon in the navigation */ - Icon?: React.ComponentType + Icon?: CustomComponent /** Replace the logo on the login page */ - Logo?: React.ComponentType + Logo?: CustomComponent } /** Replace logout related components */ logout?: { /** Replace the logout button */ - Button?: React.ComponentType + Button?: CustomComponent } /** * Wrap the admin dashboard in custom context providers @@ -671,11 +682,12 @@ export type Config = { export type SanitizedConfig = Omit< DeepRequired, - 'collections' | 'endpoint' | 'globals' | 'localization' + 'collections' | 'endpoint' | 'globals' | 'i18n' | 'localization' > & { collections: SanitizedCollectionConfig[] endpoints: Endpoint[] globals: SanitizedGlobalConfig[] + i18n: Required localization: SanitizedLocalizationConfig | false paths: { config: string @@ -713,7 +725,7 @@ export type EditConfig = ) | EditViewComponent -export type EntityDescriptionComponent = React.ComponentType +export type EntityDescriptionComponent = CustomComponent export type EntityDescriptionFunction = () => string diff --git a/packages/payload/src/errors/AuthenticationError.ts b/packages/payload/src/errors/AuthenticationError.ts index 06daf39ddf..806385c5df 100644 --- a/packages/payload/src/errors/AuthenticationError.ts +++ b/packages/payload/src/errors/AuthenticationError.ts @@ -1,6 +1,6 @@ import type { TFunction } from '@payloadcms/translations' -import { translations } from '@payloadcms/translations/api' +import { en } from '@payloadcms/translations/languages/en' import httpStatus from 'http-status' import APIError from './APIError.js' @@ -8,7 +8,7 @@ import APIError from './APIError.js' class AuthenticationError extends APIError { constructor(t?: TFunction) { super( - t ? t('error:emailOrPasswordIncorrect') : translations.en.error.emailOrPasswordIncorrect, + t ? t('error:emailOrPasswordIncorrect') : en.translations.error.emailOrPasswordIncorrect, httpStatus.UNAUTHORIZED, ) } diff --git a/packages/payload/src/errors/ErrorDeletingFile.ts b/packages/payload/src/errors/ErrorDeletingFile.ts index 99bb991ce6..af67abb938 100644 --- a/packages/payload/src/errors/ErrorDeletingFile.ts +++ b/packages/payload/src/errors/ErrorDeletingFile.ts @@ -1,6 +1,6 @@ import type { TFunction } from '@payloadcms/translations' -import { translations } from '@payloadcms/translations/api' +import { en } from '@payloadcms/translations/languages/en' import httpStatus from 'http-status' import APIError from './APIError.js' @@ -8,7 +8,7 @@ import APIError from './APIError.js' class ErrorDeletingFile extends APIError { constructor(t?: TFunction) { super( - t ? t('error:deletingFile') : translations.en.error.deletingFile, + t ? t('error:deletingFile') : en.translations.error.deletingFile, httpStatus.INTERNAL_SERVER_ERROR, ) } diff --git a/packages/payload/src/errors/FileUploadError.ts b/packages/payload/src/errors/FileUploadError.ts index ba2ec88bee..cb26e0d679 100644 --- a/packages/payload/src/errors/FileUploadError.ts +++ b/packages/payload/src/errors/FileUploadError.ts @@ -1,6 +1,6 @@ import type { TFunction } from '@payloadcms/translations' -import { translations } from '@payloadcms/translations/api' +import { en } from '@payloadcms/translations/languages/en' import httpStatus from 'http-status' import APIError from './APIError.js' @@ -8,7 +8,7 @@ import APIError from './APIError.js' class FileUploadError extends APIError { constructor(t?: TFunction) { super( - t ? t('error:problemUploadingFile') : translations.en.error.problemUploadingFile, + t ? t('error:problemUploadingFile') : en.translations.error.problemUploadingFile, httpStatus.BAD_REQUEST, ) } diff --git a/packages/payload/src/errors/Forbidden.ts b/packages/payload/src/errors/Forbidden.ts index b27024fe92..3c855fef87 100644 --- a/packages/payload/src/errors/Forbidden.ts +++ b/packages/payload/src/errors/Forbidden.ts @@ -1,6 +1,6 @@ import type { TFunction } from '@payloadcms/translations' -import { translations } from '@payloadcms/translations/api' +import { en } from '@payloadcms/translations/languages/en' import httpStatus from 'http-status' import APIError from './APIError.js' @@ -8,7 +8,7 @@ import APIError from './APIError.js' class Forbidden extends APIError { constructor(t?: TFunction) { super( - t ? t('error:notAllowedToPerformAction') : translations.en.error.notAllowedToPerformAction, + t ? t('error:notAllowedToPerformAction') : en.translations.error.notAllowedToPerformAction, httpStatus.FORBIDDEN, ) } diff --git a/packages/payload/src/errors/LockedAuth.ts b/packages/payload/src/errors/LockedAuth.ts index cbdfc06394..a72461c3a9 100644 --- a/packages/payload/src/errors/LockedAuth.ts +++ b/packages/payload/src/errors/LockedAuth.ts @@ -1,13 +1,13 @@ import type { TFunction } from '@payloadcms/translations' -import { translations } from '@payloadcms/translations/api' +import { en } from '@payloadcms/translations/languages/en' import httpStatus from 'http-status' import APIError from './APIError.js' class LockedAuth extends APIError { constructor(t?: TFunction) { - super(t ? t('error:userLocked') : translations.en.error.userLocked, httpStatus.UNAUTHORIZED) + super(t ? t('error:userLocked') : en.translations.error.userLocked, httpStatus.UNAUTHORIZED) } } diff --git a/packages/payload/src/errors/MissingFile.ts b/packages/payload/src/errors/MissingFile.ts index c5b0fc4224..4d864b99c6 100644 --- a/packages/payload/src/errors/MissingFile.ts +++ b/packages/payload/src/errors/MissingFile.ts @@ -1,6 +1,6 @@ import type { TFunction } from '@payloadcms/translations' -import { translations } from '@payloadcms/translations/api' +import { en } from '@payloadcms/translations/languages/en' import httpStatus from 'http-status' import APIError from './APIError.js' @@ -8,7 +8,7 @@ import APIError from './APIError.js' class MissingFile extends APIError { constructor(t?: TFunction) { super( - t ? t('error:noFilesUploaded') : translations.en.error.noFilesUploaded, + t ? t('error:noFilesUploaded') : en.translations.error.noFilesUploaded, httpStatus.BAD_REQUEST, ) } diff --git a/packages/payload/src/errors/NotFound.ts b/packages/payload/src/errors/NotFound.ts index df54dd9b9a..06372e3da3 100644 --- a/packages/payload/src/errors/NotFound.ts +++ b/packages/payload/src/errors/NotFound.ts @@ -1,13 +1,13 @@ import type { TFunction } from '@payloadcms/translations' -import { translations } from '@payloadcms/translations/api' +import { en } from '@payloadcms/translations/languages/en' import httpStatus from 'http-status' import APIError from './APIError.js' class NotFound extends APIError { constructor(t?: TFunction) { - super(t ? t('general:notFound') : translations.en.general.notFound, httpStatus.NOT_FOUND) + super(t ? t('general:notFound') : en.translations.general.notFound, httpStatus.NOT_FOUND) } } diff --git a/packages/payload/src/errors/UnathorizedError.ts b/packages/payload/src/errors/UnathorizedError.ts index 02c862a2b0..0e4e5bf38c 100644 --- a/packages/payload/src/errors/UnathorizedError.ts +++ b/packages/payload/src/errors/UnathorizedError.ts @@ -1,13 +1,13 @@ import type { TFunction } from '@payloadcms/translations' -import { translations } from '@payloadcms/translations/api' +import { en } from '@payloadcms/translations/languages/en' import httpStatus from 'http-status' import APIError from './APIError.js' class UnauthorizedError extends APIError { constructor(t?: TFunction) { - super(t ? t('error:unauthorized') : translations.en.error.unauthorized, httpStatus.UNAUTHORIZED) + super(t ? t('error:unauthorized') : en.translations.error.unauthorized, httpStatus.UNAUTHORIZED) } } diff --git a/packages/payload/src/errors/ValidationError.ts b/packages/payload/src/errors/ValidationError.ts index 30d33c45ef..55403b1cdd 100644 --- a/packages/payload/src/errors/ValidationError.ts +++ b/packages/payload/src/errors/ValidationError.ts @@ -1,6 +1,6 @@ import type { TFunction } from '@payloadcms/translations' -import { translations } from '@payloadcms/translations/api' +import { en } from '@payloadcms/translations/languages/en' import httpStatus from 'http-status' import APIError from './APIError.js' @@ -10,8 +10,8 @@ class ValidationError extends APIError<{ field: string; message: string }[]> { const message = t ? t('error:followingFieldsInvalid', { count: results.length }) : results.length === 1 - ? translations.en.error.followingFieldsInvalid_one - : translations.en.error.followingFieldsInvalid_other + ? en.translations.error.followingFieldsInvalid_one + : en.translations.error.followingFieldsInvalid_other super(`${message} ${results.map((f) => f.field).join(', ')}`, httpStatus.BAD_REQUEST, results) } diff --git a/packages/payload/src/exports/auth.ts b/packages/payload/src/exports/auth.ts index 9838eac56a..936016a2d2 100644 --- a/packages/payload/src/exports/auth.ts +++ b/packages/payload/src/exports/auth.ts @@ -2,6 +2,7 @@ export * from '../auth/index.js' export { default as executeAccess } from '../auth/executeAccess.js' export { executeAuthStrategies } from '../auth/executeAuthStrategies.js' export { getAccessResults } from '../auth/getAccessResults.js' +export { getFieldsToSign } from '../auth/getFieldsToSign.js' export type { AuthStrategyFunction, diff --git a/packages/payload/src/exports/i18n/ar.ts b/packages/payload/src/exports/i18n/ar.ts new file mode 100644 index 0000000000..897e9d2e31 --- /dev/null +++ b/packages/payload/src/exports/i18n/ar.ts @@ -0,0 +1 @@ +export { ar } from '@payloadcms/translations/languages/ar' diff --git a/packages/payload/src/exports/i18n/az.ts b/packages/payload/src/exports/i18n/az.ts new file mode 100644 index 0000000000..7859c0aa5b --- /dev/null +++ b/packages/payload/src/exports/i18n/az.ts @@ -0,0 +1 @@ +export { az } from '@payloadcms/translations/languages/az' diff --git a/packages/payload/src/exports/i18n/bg.ts b/packages/payload/src/exports/i18n/bg.ts new file mode 100644 index 0000000000..082a1fb522 --- /dev/null +++ b/packages/payload/src/exports/i18n/bg.ts @@ -0,0 +1 @@ +export { bg } from '@payloadcms/translations/languages/bg' diff --git a/packages/payload/src/exports/i18n/cs.ts b/packages/payload/src/exports/i18n/cs.ts new file mode 100644 index 0000000000..20bbd9ecc0 --- /dev/null +++ b/packages/payload/src/exports/i18n/cs.ts @@ -0,0 +1 @@ +export { cs } from '@payloadcms/translations/languages/cs' diff --git a/packages/payload/src/exports/i18n/de.ts b/packages/payload/src/exports/i18n/de.ts new file mode 100644 index 0000000000..c128b18773 --- /dev/null +++ b/packages/payload/src/exports/i18n/de.ts @@ -0,0 +1 @@ +export { de } from '@payloadcms/translations/languages/de' diff --git a/packages/payload/src/exports/i18n/en.ts b/packages/payload/src/exports/i18n/en.ts new file mode 100644 index 0000000000..e30aafa16d --- /dev/null +++ b/packages/payload/src/exports/i18n/en.ts @@ -0,0 +1 @@ +export { en } from '@payloadcms/translations/languages/en' diff --git a/packages/payload/src/exports/i18n/es.ts b/packages/payload/src/exports/i18n/es.ts new file mode 100644 index 0000000000..ac6ea9ed89 --- /dev/null +++ b/packages/payload/src/exports/i18n/es.ts @@ -0,0 +1 @@ +export { es } from '@payloadcms/translations/languages/es' diff --git a/packages/payload/src/exports/i18n/fa.ts b/packages/payload/src/exports/i18n/fa.ts new file mode 100644 index 0000000000..7acff2adba --- /dev/null +++ b/packages/payload/src/exports/i18n/fa.ts @@ -0,0 +1 @@ +export { fa } from '@payloadcms/translations/languages/fa' diff --git a/packages/payload/src/exports/i18n/fr.ts b/packages/payload/src/exports/i18n/fr.ts new file mode 100644 index 0000000000..65de019fd8 --- /dev/null +++ b/packages/payload/src/exports/i18n/fr.ts @@ -0,0 +1 @@ +export { fr } from '@payloadcms/translations/languages/fr' diff --git a/packages/payload/src/exports/i18n/hr.ts b/packages/payload/src/exports/i18n/hr.ts new file mode 100644 index 0000000000..c4b712841e --- /dev/null +++ b/packages/payload/src/exports/i18n/hr.ts @@ -0,0 +1 @@ +export { hr } from '@payloadcms/translations/languages/hr' diff --git a/packages/payload/src/exports/i18n/hu.ts b/packages/payload/src/exports/i18n/hu.ts new file mode 100644 index 0000000000..7fad4df042 --- /dev/null +++ b/packages/payload/src/exports/i18n/hu.ts @@ -0,0 +1 @@ +export { hu } from '@payloadcms/translations/languages/hu' diff --git a/packages/payload/src/exports/i18n/it.ts b/packages/payload/src/exports/i18n/it.ts new file mode 100644 index 0000000000..36bbb80de0 --- /dev/null +++ b/packages/payload/src/exports/i18n/it.ts @@ -0,0 +1 @@ +export { it } from '@payloadcms/translations/languages/it' diff --git a/packages/payload/src/exports/i18n/ja.ts b/packages/payload/src/exports/i18n/ja.ts new file mode 100644 index 0000000000..ef65a7567c --- /dev/null +++ b/packages/payload/src/exports/i18n/ja.ts @@ -0,0 +1 @@ +export { ja } from '@payloadcms/translations/languages/ja' diff --git a/packages/payload/src/exports/i18n/ko.ts b/packages/payload/src/exports/i18n/ko.ts new file mode 100644 index 0000000000..e080561e0a --- /dev/null +++ b/packages/payload/src/exports/i18n/ko.ts @@ -0,0 +1 @@ +export { ko } from '@payloadcms/translations/languages/ko' diff --git a/packages/payload/src/exports/i18n/my.ts b/packages/payload/src/exports/i18n/my.ts new file mode 100644 index 0000000000..c040b71aa4 --- /dev/null +++ b/packages/payload/src/exports/i18n/my.ts @@ -0,0 +1 @@ +export { my } from '@payloadcms/translations/languages/my' diff --git a/packages/payload/src/exports/i18n/nb.ts b/packages/payload/src/exports/i18n/nb.ts new file mode 100644 index 0000000000..e4ea01536d --- /dev/null +++ b/packages/payload/src/exports/i18n/nb.ts @@ -0,0 +1 @@ +export { nb } from '@payloadcms/translations/languages/nb' diff --git a/packages/payload/src/exports/i18n/nl.ts b/packages/payload/src/exports/i18n/nl.ts new file mode 100644 index 0000000000..432a6d74c7 --- /dev/null +++ b/packages/payload/src/exports/i18n/nl.ts @@ -0,0 +1 @@ +export { nl } from '@payloadcms/translations/languages/nl' diff --git a/packages/payload/src/exports/i18n/pl.ts b/packages/payload/src/exports/i18n/pl.ts new file mode 100644 index 0000000000..1b722ff673 --- /dev/null +++ b/packages/payload/src/exports/i18n/pl.ts @@ -0,0 +1 @@ +export { pl } from '@payloadcms/translations/languages/pl' diff --git a/packages/payload/src/exports/i18n/pt.ts b/packages/payload/src/exports/i18n/pt.ts new file mode 100644 index 0000000000..533ff4fd65 --- /dev/null +++ b/packages/payload/src/exports/i18n/pt.ts @@ -0,0 +1 @@ +export { pt } from '@payloadcms/translations/languages/pt' diff --git a/packages/payload/src/exports/i18n/ro.ts b/packages/payload/src/exports/i18n/ro.ts new file mode 100644 index 0000000000..1280ecec14 --- /dev/null +++ b/packages/payload/src/exports/i18n/ro.ts @@ -0,0 +1 @@ +export { ro } from '@payloadcms/translations/languages/ro' diff --git a/packages/payload/src/exports/i18n/rs.ts b/packages/payload/src/exports/i18n/rs.ts new file mode 100644 index 0000000000..193c1cfa9b --- /dev/null +++ b/packages/payload/src/exports/i18n/rs.ts @@ -0,0 +1 @@ +export { rs } from '@payloadcms/translations/languages/rs' diff --git a/packages/payload/src/exports/i18n/rsLatin.ts b/packages/payload/src/exports/i18n/rsLatin.ts new file mode 100644 index 0000000000..e03c7ed9bb --- /dev/null +++ b/packages/payload/src/exports/i18n/rsLatin.ts @@ -0,0 +1 @@ +export { rsLatin } from '@payloadcms/translations/languages/rsLatin' diff --git a/packages/payload/src/exports/i18n/ru.ts b/packages/payload/src/exports/i18n/ru.ts new file mode 100644 index 0000000000..8795e813b0 --- /dev/null +++ b/packages/payload/src/exports/i18n/ru.ts @@ -0,0 +1 @@ +export { ru } from '@payloadcms/translations/languages/ru' diff --git a/packages/payload/src/exports/i18n/sv.ts b/packages/payload/src/exports/i18n/sv.ts new file mode 100644 index 0000000000..4d83844598 --- /dev/null +++ b/packages/payload/src/exports/i18n/sv.ts @@ -0,0 +1 @@ +export { sv } from '@payloadcms/translations/languages/sv' diff --git a/packages/payload/src/exports/i18n/th.ts b/packages/payload/src/exports/i18n/th.ts new file mode 100644 index 0000000000..1dced32a22 --- /dev/null +++ b/packages/payload/src/exports/i18n/th.ts @@ -0,0 +1 @@ +export { th } from '@payloadcms/translations/languages/th' diff --git a/packages/payload/src/exports/i18n/tr.ts b/packages/payload/src/exports/i18n/tr.ts new file mode 100644 index 0000000000..f711e422b2 --- /dev/null +++ b/packages/payload/src/exports/i18n/tr.ts @@ -0,0 +1 @@ +export { tr } from '@payloadcms/translations/languages/tr' diff --git a/packages/payload/src/exports/i18n/uk.ts b/packages/payload/src/exports/i18n/uk.ts new file mode 100644 index 0000000000..a1d6832f2d --- /dev/null +++ b/packages/payload/src/exports/i18n/uk.ts @@ -0,0 +1 @@ +export { uk } from '@payloadcms/translations/languages/uk' diff --git a/packages/payload/src/exports/i18n/vi.ts b/packages/payload/src/exports/i18n/vi.ts new file mode 100644 index 0000000000..0e97a52283 --- /dev/null +++ b/packages/payload/src/exports/i18n/vi.ts @@ -0,0 +1 @@ +export { vi } from '@payloadcms/translations/languages/vi' diff --git a/packages/payload/src/exports/i18n/zh.ts b/packages/payload/src/exports/i18n/zh.ts new file mode 100644 index 0000000000..248182a460 --- /dev/null +++ b/packages/payload/src/exports/i18n/zh.ts @@ -0,0 +1 @@ +export { zh } from '@payloadcms/translations/languages/zh' diff --git a/packages/payload/src/exports/i18n/zhTw.ts b/packages/payload/src/exports/i18n/zhTw.ts new file mode 100644 index 0000000000..acb2ecc668 --- /dev/null +++ b/packages/payload/src/exports/i18n/zhTw.ts @@ -0,0 +1 @@ +export { zhTw } from '@payloadcms/translations/languages/zhTw' diff --git a/packages/payload/src/exports/node.ts b/packages/payload/src/exports/node.ts index 3ffa8dea3a..86fc1dd30b 100644 --- a/packages/payload/src/exports/node.ts +++ b/packages/payload/src/exports/node.ts @@ -1 +1,6 @@ +/** + * WARNING: This file contains exports that can only be safely used on the server. + */ + +export { generateTypes } from '../bin/generateTypes.js' export { importConfig, importWithoutClientFiles } from '../utilities/importWithoutClientFiles.js' diff --git a/packages/payload/src/exports/utilities.ts b/packages/payload/src/exports/utilities.ts index 792998dec9..aab9b6145c 100644 --- a/packages/payload/src/exports/utilities.ts +++ b/packages/payload/src/exports/utilities.ts @@ -1,8 +1,11 @@ +/** + * WARNING: This file contains exports that can only be safely used on the front-end + */ + export { getDataLoader } from '../collections/dataloader.js' export { default as getDefaultValue } from '../fields/getDefaultValue.js' export { promise as afterReadPromise } from '../fields/hooks/afterRead/promise.js' export { traverseFields as afterReadTraverseFields } from '../fields/hooks/afterRead/traverseFields.js' -export { extractTranslations } from '../translations/extractTranslations.js' export { formatFilesize } from '../uploads/formatFilesize.js' @@ -26,7 +29,6 @@ export { default as flattenTopLevelFields } from '../utilities/flattenTopLevelFi export { formatLabels, formatNames, toWords } from '../utilities/formatLabels.js' export { getCollectionIDFieldTypes } from '../utilities/getCollectionIDFieldTypes.js' -export { getIDType } from '../utilities/getIDType.js' export { getObjectDotNotation } from '../utilities/getObjectDotNotation.js' export { default as getUniqueListBy } from '../utilities/getUniqueListBy.js' @@ -35,7 +37,12 @@ export { isEntityHidden } from '../utilities/isEntityHidden.js' export { isNumber } from '../utilities/isNumber.js' export { isPlainObject } from '../utilities/isPlainObject.js' -export { isPlainFunction, isReactComponent } from '../utilities/isReactComponent.js' +export { + isPlainFunction, + isReactClientComponent, + isReactComponent, + isReactServerComponent, +} from '../utilities/isReactComponent.js' export { isValidID } from '../utilities/isValidID.js' export { default as isolateObjectProperty } from '../utilities/isolateObjectProperty.js' diff --git a/packages/payload/src/fields/baseFields/baseBlockFields.ts b/packages/payload/src/fields/baseFields/baseBlockFields.ts index 2e52967a58..34faab1daa 100644 --- a/packages/payload/src/fields/baseFields/baseBlockFields.ts +++ b/packages/payload/src/fields/baseFields/baseBlockFields.ts @@ -1,8 +1,8 @@ -import type { FieldWithRichTextRequiredEditor } from '../config/types.js' +import type { Field } from '../config/types.js' import { baseIDField } from './baseIDField.js' -export const baseBlockFields: FieldWithRichTextRequiredEditor[] = [ +export const baseBlockFields: Field[] = [ baseIDField, { name: 'blockName', diff --git a/packages/payload/src/fields/config/client.ts b/packages/payload/src/fields/config/client.ts index 5c6af598f2..0904fbe00e 100644 --- a/packages/payload/src/fields/config/client.ts +++ b/packages/payload/src/fields/config/client.ts @@ -1,3 +1,5 @@ +import type { TFunction } from '@payloadcms/translations' + import type { Field, FieldBase } from '../../fields/config/types.js' export type ClientFieldConfig = Omit @@ -13,8 +15,14 @@ export type ServerOnlyFieldAdminProperties = keyof Pick< 'components' | 'condition' | 'description' > -export const createClientFieldConfig = (f: Field) => { - const field = { ...f } +export const createClientFieldConfig = ({ + field: incomingField, + t, +}: { + field: Field + t: TFunction +}) => { + const field = { ...incomingField } const serverOnlyFieldProperties: Partial[] = [ 'hooks', @@ -37,21 +45,34 @@ export const createClientFieldConfig = (f: Field) => { } }) + if ('options' in field && Array.isArray(field.options)) { + field.options = field.options.map((option) => { + if (typeof option === 'object' && typeof option.label === 'function') { + return { + label: option.label({ t }), + value: option.value, + } + } + + return option + }) + } + if ('fields' in field) { - field.fields = createClientFieldConfigs(field.fields) + field.fields = createClientFieldConfigs({ fields: field.fields, t }) } if ('blocks' in field) { field.blocks = field.blocks.map((block) => { const sanitized = { ...block } - sanitized.fields = createClientFieldConfigs(sanitized.fields) + sanitized.fields = createClientFieldConfigs({ fields: sanitized.fields, t }) return sanitized }) } if ('tabs' in field) { // @ts-expect-error - field.tabs = field.tabs.map((tab) => createClientFieldConfig(tab)) + field.tabs = field.tabs.map((tab) => createClientFieldConfig({ field: tab, t })) } if ('admin' in field) { @@ -73,5 +94,10 @@ export const createClientFieldConfig = (f: Field) => { return field } -export const createClientFieldConfigs = (fields: Field[]): Field[] => - fields.map(createClientFieldConfig) +export const createClientFieldConfigs = ({ + fields, + t, +}: { + fields: Field[] + t: TFunction +}): Field[] => fields.map((field) => createClientFieldConfig({ field, t })) diff --git a/packages/payload/src/fields/config/sanitize.spec.ts b/packages/payload/src/fields/config/sanitize.spec.ts index 8c55515609..fa52e16a8d 100644 --- a/packages/payload/src/fields/config/sanitize.spec.ts +++ b/packages/payload/src/fields/config/sanitize.spec.ts @@ -14,7 +14,10 @@ import type { BaseDatabaseAdapter } from '../../database/types.js' const dummyConfig: Config = { collections: [], - db: () => ({}) as BaseDatabaseAdapter, + db: { + defaultIDType: 'text', + init: () => ({}) as BaseDatabaseAdapter['init'], + } as BaseDatabaseAdapter, } describe('sanitizeFields', () => { diff --git a/packages/payload/src/fields/config/schema.ts b/packages/payload/src/fields/config/schema.ts index 2381b8f1f3..cf9fe52253 100644 --- a/packages/payload/src/fields/config/schema.ts +++ b/packages/payload/src/fields/config/schema.ts @@ -52,7 +52,12 @@ export const baseField = joi index: joi.boolean().default(false), label: joi .alternatives() - .try(joi.object().pattern(joi.string(), [joi.string()]), joi.string(), joi.valid(false)), + .try( + joi.func(), + joi.object().pattern(joi.string(), [joi.string()]), + joi.string(), + joi.valid(false), + ), localized: joi.boolean().default(false), required: joi.boolean().default(false), saveToJWT: joi.alternatives().try(joi.boolean(), joi.string()).default(false), @@ -216,7 +221,7 @@ export const select = baseField.keys({ joi.object({ label: joi .alternatives() - .try(joi.string(), joi.object().pattern(joi.string(), [joi.string()])), + .try(joi.func(), joi.string(), joi.object().pattern(joi.string(), [joi.string()])), value: joi.string().required().allow(''), }), ), @@ -245,7 +250,7 @@ export const radio = baseField.keys({ joi.object({ label: joi .alternatives() - .try(joi.string(), joi.object().pattern(joi.string(), [joi.string()])) + .try(joi.func(), joi.string(), joi.object().pattern(joi.string(), [joi.string()])) .required(), value: joi.string().required().allow(''), }), diff --git a/packages/payload/src/fields/config/types.ts b/packages/payload/src/fields/config/types.ts index 94ad02aaac..9ca94350b0 100644 --- a/packages/payload/src/fields/config/types.ts +++ b/packages/payload/src/fields/config/types.ts @@ -17,6 +17,7 @@ import type { } from '../../admin/types.js' import type { User } from '../../auth/index.js' import type { SanitizedCollectionConfig, TypeWithID } from '../../collections/config/types.js' +import type { CustomComponent, LabelFunction } from '../../config/types.js' import type { DBIdentifierName } from '../../database/types.js' import type { SanitizedGlobalConfig } from '../../globals/config/types.js' import type { Operation, PayloadRequest, RequestContext, Where } from '../../types/index.js' @@ -80,7 +81,7 @@ export type FieldAccess = (args: { export type Condition = ( data: Partial, siblingData: Partial

, - { user }: { user: User }, + { user }: { user: PayloadRequest['user'] }, ) => boolean export type FilterOptionsProps = { @@ -103,7 +104,7 @@ export type FilterOptionsProps = { /** * An object containing the currently authenticated user. */ - user: Partial + user: Partial } export type FilterOptions = @@ -114,8 +115,8 @@ export type FilterOptions = type Admin = { className?: string components?: { - Cell?: React.ComponentType - Field?: React.ComponentType + Cell?: CustomComponent + Field?: CustomComponent Filter?: React.ComponentType } /** @@ -134,8 +135,8 @@ type Admin = { } export type Labels = { - plural: Record | string - singular: Record | string + plural: LabelFunction | Record | string + singular: LabelFunction | Record | string } export type BaseValidateOptions = { @@ -165,7 +166,7 @@ export type Validate< export type ClientValidate = Omit export type OptionObject = { - label: Record | string + label: LabelFunction | Record | string value: string } @@ -193,7 +194,7 @@ export interface FieldBase { beforeValidate?: FieldHook[] } index?: boolean - label?: Record | false | string + label?: LabelFunction | Record | false | string localized?: boolean name: string required?: boolean @@ -207,10 +208,10 @@ export type NumberField = FieldBase & { /** Set this property to a string that will be used for browser autocomplete. */ autoComplete?: string components?: { - Error?: React.ComponentType - Label?: React.ComponentType - afterInput?: React.ComponentType[] - beforeInput?: React.ComponentType[] + Error?: CustomComponent + Label?: CustomComponent + afterInput?: CustomComponent[] + beforeInput?: CustomComponent[] } /** Set this property to define a placeholder string for the field. */ placeholder?: Record | string @@ -245,10 +246,10 @@ export type TextField = FieldBase & { admin?: Admin & { autoComplete?: string components?: { - Error?: React.ComponentType - Label?: React.ComponentType - afterInput?: React.ComponentType[] - beforeInput?: React.ComponentType[] + Error?: CustomComponent + Label?: CustomComponent + afterInput?: CustomComponent[] + beforeInput?: CustomComponent[] } placeholder?: Record | string rtl?: boolean @@ -279,10 +280,10 @@ export type EmailField = FieldBase & { admin?: Admin & { autoComplete?: string components?: { - Error?: React.ComponentType - Label?: React.ComponentType - afterInput?: React.ComponentType[] - beforeInput?: React.ComponentType[] + Error?: CustomComponent + Label?: CustomComponent + afterInput?: CustomComponent[] + beforeInput?: CustomComponent[] } placeholder?: Record | string } @@ -292,10 +293,10 @@ export type EmailField = FieldBase & { export type TextareaField = FieldBase & { admin?: Admin & { components?: { - Error?: React.ComponentType - Label?: React.ComponentType - afterInput?: React.ComponentType[] - beforeInput?: React.ComponentType[] + Error?: CustomComponent + Label?: CustomComponent + afterInput?: CustomComponent[] + beforeInput?: CustomComponent[] } placeholder?: Record | string rows?: number @@ -309,10 +310,10 @@ export type TextareaField = FieldBase & { export type CheckboxField = FieldBase & { admin?: Admin & { components?: { - Error?: React.ComponentType - Label?: React.ComponentType - afterInput?: React.ComponentType[] - beforeInput?: React.ComponentType[] + Error?: CustomComponent + Label?: CustomComponent + afterInput?: CustomComponent[] + beforeInput?: CustomComponent[] } } type: 'checkbox' @@ -321,10 +322,10 @@ export type CheckboxField = FieldBase & { export type DateField = FieldBase & { admin?: Admin & { components?: { - Error?: React.ComponentType - Label?: React.ComponentType - afterInput?: React.ComponentType[] - beforeInput?: React.ComponentType[] + Error?: CustomComponent + Label?: CustomComponent + afterInput?: CustomComponent[] + beforeInput?: CustomComponent[] } date?: ConditionalDateProps placeholder?: Record | string @@ -394,6 +395,7 @@ export type UnnamedTab = Omit & { | { [selectedLanguage: string]: string } + | LabelFunction | string localized?: never } @@ -414,8 +416,8 @@ export type TabAsField = Tab & { export type UIField = { admin: { components?: { - Cell?: React.ComponentType - Field: React.ComponentType + Cell?: CustomComponent + Field: CustomComponent Filter?: React.ComponentType } condition?: Condition @@ -433,8 +435,8 @@ export type UIField = { export type UploadField = FieldBase & { admin?: { components?: { - Error?: React.ComponentType - Label?: React.ComponentType + Error?: CustomComponent + Label?: CustomComponent } } filterOptions?: FilterOptions @@ -445,8 +447,8 @@ export type UploadField = FieldBase & { type CodeAdmin = Admin & { components?: { - Error?: React.ComponentType - Label?: React.ComponentType + Error?: CustomComponent + Label?: CustomComponent } editorOptions?: EditorProps['options'] language?: string @@ -461,8 +463,8 @@ export type CodeField = Omit & { type JSONAdmin = Admin & { components?: { - Error?: React.ComponentType - Label?: React.ComponentType + Error?: CustomComponent + Label?: CustomComponent } editorOptions?: EditorProps['options'] } @@ -475,8 +477,8 @@ export type JSONField = Omit & { export type SelectField = FieldBase & { admin?: Admin & { components?: { - Error?: React.ComponentType - Label?: React.ComponentType + Error?: CustomComponent + Label?: CustomComponent } isClearable?: boolean isSortable?: boolean @@ -531,8 +533,8 @@ type SharedRelationshipProperties = FieldBase & { type RelationshipAdmin = Admin & { allowCreate?: boolean components?: { - Error?: React.ComponentType - Label?: React.ComponentType + Error?: CustomComponent + Label?: CustomComponent } isSortable?: boolean } @@ -572,8 +574,8 @@ export type RichTextField< > = FieldBase & { admin?: Admin & { components?: { - Error?: React.ComponentType - Label?: React.ComponentType + Error?: CustomComponent + Label?: CustomComponent } } editor?: RichTextAdapter @@ -616,8 +618,8 @@ export type ArrayField = FieldBase & { export type RadioField = FieldBase & { admin?: Admin & { components?: { - Error?: React.ComponentType - Label?: React.ComponentType + Error?: CustomComponent + Label?: CustomComponent } layout?: 'horizontal' | 'vertical' } diff --git a/packages/payload/src/fields/getDefaultValue.ts b/packages/payload/src/fields/getDefaultValue.ts index db255d707c..c33c6e07c5 100644 --- a/packages/payload/src/fields/getDefaultValue.ts +++ b/packages/payload/src/fields/getDefaultValue.ts @@ -1,11 +1,12 @@ import type { User } from '../auth/index.js' +import type { PayloadRequest } from '../types/index.js' import { deepCopyObject } from '../utilities/deepCopyObject.js' type Args = { defaultValue: unknown locale: string | undefined - user: User + user: PayloadRequest['user'] value?: unknown } diff --git a/packages/payload/src/fields/setDefaultBeforeDuplicate.ts b/packages/payload/src/fields/setDefaultBeforeDuplicate.ts index fcf1fa56fe..a94a116ec9 100644 --- a/packages/payload/src/fields/setDefaultBeforeDuplicate.ts +++ b/packages/payload/src/fields/setDefaultBeforeDuplicate.ts @@ -1,16 +1,12 @@ // default beforeDuplicate hook for required and unique fields import type { FieldAffectingData, FieldHook } from './config/types.js' -import { extractTranslations } from '../translations/extractTranslations.js' - -const copyTranslations = extractTranslations(['general:copy']) - const unique: FieldHook = ({ value }) => (typeof value === 'string' ? `${value} - Copy` : undefined) const localizedUnique: FieldHook = ({ req, value }) => - value ? `${value} - ${copyTranslations?.[req.locale]?.['general:copy'] ?? 'Copy'}` : undefined + value ? `${value} - ${req?.t('general:copy') ?? 'Copy'}` : undefined const uniqueRequired: FieldHook = ({ value }) => `${value} - Copy` const localizedUniqueRequired: FieldHook = ({ req, value }) => - `${value} - ${copyTranslations?.[req.locale]?.['general:copy'] ?? 'Copy'}` + `${value} - ${req?.t('general:copy') ?? 'Copy'}` export const setDefaultBeforeDuplicate = (field: FieldAffectingData) => { if ( diff --git a/packages/payload/src/fields/validations.spec.ts b/packages/payload/src/fields/validations.spec.ts index a43194f593..b555e01010 100644 --- a/packages/payload/src/fields/validations.spec.ts +++ b/packages/payload/src/fields/validations.spec.ts @@ -12,7 +12,12 @@ let options: ValidateOptions = { t, context: {}, payload: { - config: {}, + config: { + db: { + defaultIDType: 'text', + init: () => null, + }, + }, }, }, } diff --git a/packages/payload/src/fields/validations.ts b/packages/payload/src/fields/validations.ts index 7d24f2e63c..80dbdd6f8d 100644 --- a/packages/payload/src/fields/validations.ts +++ b/packages/payload/src/fields/validations.ts @@ -21,10 +21,8 @@ import type { Validate, } from './config/types.js' -import { getIDType } from '../utilities/getIDType.js' import { isNumber } from '../utilities/isNumber.js' import { isValidID } from '../utilities/isValidID.js' -import { fieldAffectsData } from './config/types.js' export const text: Validate = ( value, @@ -425,13 +423,11 @@ export const upload: Validate = ( } if (typeof value !== 'undefined' && value !== null) { - const idField = options?.req?.payload?.config?.collections - ?.find((collection) => collection.slug === options.relationTo) - ?.fields?.find((field) => fieldAffectsData(field) && field.name === 'id') + const idType = + options?.req?.payload?.collections[options.relationTo]?.customIDType || + options?.req?.payload?.db?.defaultIDType - const type = getIDType(idField, options?.req?.payload?.db?.defaultIDType) - - if (!isValidID(value, type)) { + if (!isValidID(value, idType)) { return options.req?.t('validation:validUploadID') } } @@ -449,11 +445,7 @@ export const relationship: Validate< maxRows, minRows, relationTo, - req: { - payload, - payload: { config }, - t, - }, + req: { payload, t }, required, } = options @@ -502,13 +494,10 @@ export const relationship: Validate< if (requestedID === null) return false - const idField = config?.collections - ?.find((collection) => collection.slug === collectionSlug) - ?.fields?.find((field) => fieldAffectsData(field) && field.name === 'id') + const idType = + payload.collections[collectionSlug]?.customIDType || payload?.db?.defaultIDType || 'text' - const type = getIDType(idField, payload?.db?.defaultIDType) - - return !isValidID(requestedID, type) + return !isValidID(requestedID, idType) }) if (invalidRelationships.length > 0) { diff --git a/packages/payload/src/globals/config/client.ts b/packages/payload/src/globals/config/client.ts index 7d0c1210ff..23fc17a99e 100644 --- a/packages/payload/src/globals/config/client.ts +++ b/packages/payload/src/globals/config/client.ts @@ -1,3 +1,5 @@ +import type { TFunction } from '@payloadcms/translations' + import type { LivePreviewConfig, SanitizedConfig, @@ -30,11 +32,15 @@ export type ClientGlobalConfig = Omit< fields: ClientFieldConfig[] } -export const createClientGlobalConfig = ( - global: SanitizedConfig['globals'][0], -): ClientGlobalConfig => { +export const createClientGlobalConfig = ({ + global, + t, +}: { + global: SanitizedConfig['globals'][0] + t: TFunction +}): ClientGlobalConfig => { const sanitized = { ...global } - sanitized.fields = createClientFieldConfigs(sanitized.fields) + sanitized.fields = createClientFieldConfigs({ fields: sanitized.fields, t }) const serverOnlyProperties: Partial[] = [ 'hooks', @@ -73,6 +79,10 @@ export const createClientGlobalConfig = ( return sanitized } -export const createClientGlobalConfigs = ( - globals: SanitizedConfig['globals'], -): ClientGlobalConfig[] => globals.map((global) => createClientGlobalConfig(global)) +export const createClientGlobalConfigs = ({ + globals, + t, +}: { + globals: SanitizedConfig['globals'] + t: TFunction +}): ClientGlobalConfig[] => globals.map((global) => createClientGlobalConfig({ global, t })) diff --git a/packages/payload/src/globals/config/sanitize.ts b/packages/payload/src/globals/config/sanitize.ts index 0972ad89d6..463e971d80 100644 --- a/packages/payload/src/globals/config/sanitize.ts +++ b/packages/payload/src/globals/config/sanitize.ts @@ -1,5 +1,3 @@ -import { extractTranslations } from 'payload/utilities' - import type { Config } from '../../config/types.js' import type { SanitizedGlobalConfig } from './types.js' @@ -10,8 +8,6 @@ import mergeBaseFields from '../../fields/mergeBaseFields.js' import { toWords } from '../../utilities/formatLabels.js' import baseVersionFields from '../../versions/baseFields.js' -const translations = extractTranslations(['general:createdAt', 'general:updatedAt']) - const sanitizeGlobals = (config: Config): SanitizedGlobalConfig[] => { const { collections, globals } = config @@ -80,7 +76,7 @@ const sanitizeGlobals = (config: Config): SanitizedGlobalConfig[] => { disableBulkEdit: true, hidden: true, }, - label: translations['general:updatedAt'], + label: ({ t }) => t('general:updatedAt'), }) } if (!hasCreatedAt) { @@ -91,7 +87,7 @@ const sanitizeGlobals = (config: Config): SanitizedGlobalConfig[] => { disableBulkEdit: true, hidden: true, }, - label: translations['general:createdAt'], + label: ({ t }) => t('general:createdAt'), }) } diff --git a/packages/payload/src/globals/config/schema.ts b/packages/payload/src/globals/config/schema.ts index b58554f7fe..da9bda9e05 100644 --- a/packages/payload/src/globals/config/schema.ts +++ b/packages/payload/src/globals/config/schema.ts @@ -65,7 +65,9 @@ const globalSchema = joi beforeRead: joi.array().items(joi.func()), beforeValidate: joi.array().items(joi.func()), }), - label: joi.alternatives().try(joi.string(), joi.object().pattern(joi.string(), [joi.string()])), + label: joi + .alternatives() + .try(joi.func(), joi.string(), joi.object().pattern(joi.string(), [joi.string()])), typescript: joi.object().keys({ interface: joi.string(), }), diff --git a/packages/payload/src/globals/config/types.ts b/packages/payload/src/globals/config/types.ts index 3587c27c43..7466cf53cb 100644 --- a/packages/payload/src/globals/config/types.ts +++ b/packages/payload/src/globals/config/types.ts @@ -117,7 +117,7 @@ export type GlobalAdminOptions = { /** * Exclude the global from the admin nav and routes */ - hidden?: ((args: { user: User }) => boolean) | boolean + hidden?: ((args: { user: PayloadRequest['user'] }) => boolean) | boolean /** * Hide the API URL within the Edit view */ diff --git a/packages/payload/src/globals/operations/findOne.ts b/packages/payload/src/globals/operations/findOne.ts index 8bfb2e9376..c18b6ab345 100644 --- a/packages/payload/src/globals/operations/findOne.ts +++ b/packages/payload/src/globals/operations/findOne.ts @@ -1,4 +1,5 @@ import type { AccessResult } from '../../config/types.js' +import type { GeneratedTypes } from '../../index.js' import type { PayloadRequest, Where } from '../../types/index.js' import type { SanitizedGlobalConfig } from '../config/types.js' @@ -13,7 +14,6 @@ type Args = { depth?: number draft?: boolean globalConfig: SanitizedGlobalConfig - locale?: string overrideAccess?: boolean req: PayloadRequest showHiddenFields?: boolean diff --git a/packages/payload/src/globals/operations/local/findOne.ts b/packages/payload/src/globals/operations/local/findOne.ts index 40f251cfa4..9c86d5cad2 100644 --- a/packages/payload/src/globals/operations/local/findOne.ts +++ b/packages/payload/src/globals/operations/local/findOne.ts @@ -9,8 +9,8 @@ export type Options = { context?: RequestContext depth?: number draft?: boolean - fallbackLocale?: string - locale?: string + fallbackLocale?: GeneratedTypes['locale'] + locale?: 'all' | GeneratedTypes['locale'] overrideAccess?: boolean req?: PayloadRequest showHiddenFields?: boolean diff --git a/packages/payload/src/globals/operations/local/findVersionByID.ts b/packages/payload/src/globals/operations/local/findVersionByID.ts index f4eb5c43a7..5944e2de15 100644 --- a/packages/payload/src/globals/operations/local/findVersionByID.ts +++ b/packages/payload/src/globals/operations/local/findVersionByID.ts @@ -10,9 +10,9 @@ export type Options = { context?: RequestContext depth?: number disableErrors?: boolean - fallbackLocale?: string + fallbackLocale?: GeneratedTypes['locale'] id: string - locale?: string + locale?: 'all' | GeneratedTypes['locale'] overrideAccess?: boolean req?: PayloadRequest showHiddenFields?: boolean @@ -20,6 +20,7 @@ export type Options = { user?: Document } +// eslint-disable-next-line no-restricted-exports export default async function findVersionByIDLocal( payload: Payload, options: Options, diff --git a/packages/payload/src/globals/operations/local/findVersions.ts b/packages/payload/src/globals/operations/local/findVersions.ts index 8acea2465f..30dbdbdc5a 100644 --- a/packages/payload/src/globals/operations/local/findVersions.ts +++ b/packages/payload/src/globals/operations/local/findVersions.ts @@ -10,9 +10,9 @@ import { findVersionsOperation } from '../findVersions.js' export type Options = { context?: RequestContext depth?: number - fallbackLocale?: string + fallbackLocale?: GeneratedTypes['locale'] limit?: number - locale?: string + locale?: 'all' | GeneratedTypes['locale'] overrideAccess?: boolean page?: number req?: PayloadRequest diff --git a/packages/payload/src/globals/operations/local/restoreVersion.ts b/packages/payload/src/globals/operations/local/restoreVersion.ts index bea32490ee..29d933065e 100644 --- a/packages/payload/src/globals/operations/local/restoreVersion.ts +++ b/packages/payload/src/globals/operations/local/restoreVersion.ts @@ -8,9 +8,9 @@ import { restoreVersionOperation } from '../restoreVersion.js' export type Options = { context?: RequestContext depth?: number - fallbackLocale?: string + fallbackLocale?: GeneratedTypes['locale'] id: string - locale?: string + locale?: GeneratedTypes['locale'] overrideAccess?: boolean req?: PayloadRequest showHiddenFields?: boolean diff --git a/packages/payload/src/globals/operations/local/update.ts b/packages/payload/src/globals/operations/local/update.ts index 243ebd6eda..0cc8df0a20 100644 --- a/packages/payload/src/globals/operations/local/update.ts +++ b/packages/payload/src/globals/operations/local/update.ts @@ -12,8 +12,8 @@ export type Options = { data: DeepPartial> depth?: number draft?: boolean - fallbackLocale?: string - locale?: string + fallbackLocale?: GeneratedTypes['locale'] + locale?: GeneratedTypes['locale'] overrideAccess?: boolean req?: PayloadRequest showHiddenFields?: boolean diff --git a/packages/payload/src/index.ts b/packages/payload/src/index.ts index ddc62d82cb..eb62456a60 100644 --- a/packages/payload/src/index.ts +++ b/packages/payload/src/index.ts @@ -52,7 +52,9 @@ import { validateSchema } from './config/validate.js' import buildEmail from './email/build.js' import { defaults as emailDefaults } from './email/defaults.js' import sendEmail from './email/sendEmail.js' +import { fieldAffectsData } from './exports/types.js' import localGlobalOperations from './globals/operations/local/index.js' +import flattenFields from './utilities/flattenTopLevelFields.js' import Logger from './utilities/logger.js' import { serverInit as serverInitTelemetry } from './utilities/telemetry/events/serverInit.js' @@ -340,8 +342,17 @@ export class BasePayload { } this.config.collections.forEach((collection) => { + const customID = flattenFields(collection.fields).find( + (field) => fieldAffectsData(field) && field.name === 'id', + ) + + let customIDType + + if (customID?.type === 'number' || customID?.type === 'text') customIDType = customID.type + this.collections[collection.slug] = { config: collection, + customIDType, } }) @@ -473,6 +484,8 @@ type GeneratedTypes = { globals: { [slug: number | string | symbol]: GlobalTypeWithID & Record } + locale: null | string + user: TypeWithID & Record & { collection: string } } type Payload = BasePayload diff --git a/packages/payload/src/preferences/types.ts b/packages/payload/src/preferences/types.ts index c09febda3c..b1819b961e 100644 --- a/packages/payload/src/preferences/types.ts +++ b/packages/payload/src/preferences/types.ts @@ -5,7 +5,7 @@ export type PreferenceRequest = { key: string overrideAccess?: boolean req: PayloadRequest - user: User + user: PayloadRequest['user'] } export type PreferenceUpdateRequest = PreferenceRequest & { value: unknown } diff --git a/packages/payload/src/translations/extractTranslations.ts b/packages/payload/src/translations/extractTranslations.ts deleted file mode 100644 index 41ef64d5cc..0000000000 --- a/packages/payload/src/translations/extractTranslations.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { translations } from '@payloadcms/translations/api' - -export const extractTranslations = (keys: string[]): Record> => { - const result = {} - keys.forEach((key) => { - result[key] = {} - }) - Object.entries(translations).forEach(([language, resource]) => { - keys.forEach((key) => { - const [section, target] = key.split(':') - if (resource?.[section]?.[target]) { - result[key][language] = resource[section][target] - } else { - // console.error(`Missing translation for ${key} in ${language}`) - } - }) - }) - return result -} diff --git a/packages/payload/src/translations/getLocalI18n.ts b/packages/payload/src/translations/getLocalI18n.ts index 9a7e753c02..9397797751 100644 --- a/packages/payload/src/translations/getLocalI18n.ts +++ b/packages/payload/src/translations/getLocalI18n.ts @@ -1,18 +1,18 @@ +import type { AcceptedLanguages } from '@payloadcms/translations' + import { initI18n } from '@payloadcms/translations' -import { translations } from '@payloadcms/translations/api' import type { SanitizedConfig } from '../config/types.js' -export const getLocalI18n = ({ +export const getLocalI18n = async ({ config, language = 'en', }: { config: SanitizedConfig - language?: string + language?: AcceptedLanguages }) => initI18n({ config: config.i18n, context: 'api', language, - translations, }) diff --git a/packages/payload/src/types/index.ts b/packages/payload/src/types/index.ts index 940918381e..f7d66ebd44 100644 --- a/packages/payload/src/types/index.ts +++ b/packages/payload/src/types/index.ts @@ -4,6 +4,7 @@ import type DataLoader from 'dataloader' import type { User } from '../auth/types.js' import type { TypeWithID, TypeWithTimestamps } from '../collections/config/types.js' import type payload from '../index.js' +import type { GeneratedTypes } from '../index.js' import type { validOperators } from './constants.js' export type { Payload as Payload } from '../index.js' @@ -20,7 +21,7 @@ export type UploadEdits = { } } -export type CustomPayloadRequest = { +export type CustomPayloadRequest = { context: RequestContext /** Data from the request body */ data?: Record @@ -41,7 +42,7 @@ export type CustomPayloadRequest = { * The requested locale if specified * Only available for localized collections */ - locale?: string + locale?: GeneratedTypes['locale'] /** * The payload object */ @@ -73,12 +74,12 @@ export type CustomPayloadRequest = { */ transactionIDPromise?: Promise /** The signed in user */ - user: (U & User) | null + user: (U & GeneratedTypes['user']) | null } & Pick< URL, 'hash' | 'host' | 'href' | 'origin' | 'pathname' | 'port' | 'protocol' | 'search' | 'searchParams' > -export type PayloadRequest = Partial & +export type PayloadRequest = Partial & Required> & CustomPayloadRequest export interface RequestContext { diff --git a/packages/payload/src/uploads/generateFileData.ts b/packages/payload/src/uploads/generateFileData.ts index cfd52d9c10..e629440495 100644 --- a/packages/payload/src/uploads/generateFileData.ts +++ b/packages/payload/src/uploads/generateFileData.ts @@ -70,7 +70,11 @@ export const generateFileData = async ({ file = response overwriteExistingFiles = true } else if (filename && url) { - file = await getExternalFile({ data: data as FileData, req }) + file = await getExternalFile({ + data: data as FileData, + req, + uploadConfig: collectionConfig.upload, + }) overwriteExistingFiles = true } } catch (err) { @@ -133,7 +137,7 @@ export const generateFileData = async ({ } if (fileSupportsResize || isImage(file.mimetype)) { - dimensions = getImageSize(file) + dimensions = await getImageSize(file) fileData.width = dimensions.width fileData.height = dimensions.height } diff --git a/packages/payload/src/uploads/getBaseFields.ts b/packages/payload/src/uploads/getBaseFields.ts index 51b1a5ea9f..a9a1507eb4 100644 --- a/packages/payload/src/uploads/getBaseFields.ts +++ b/packages/payload/src/uploads/getBaseFields.ts @@ -3,17 +3,8 @@ import type { Config } from '../config/types.js' import type { Field } from '../fields/config/types.js' import type { UploadConfig } from './types.js' -import { extractTranslations } from '../translations/extractTranslations.js' import { mimeTypeValidator } from './mimeTypeValidator.js' -const labels = extractTranslations([ - 'upload:width', - 'upload:height', - 'upload:fileSize', - 'upload:fileName', - 'upload:sizes', -]) - type GenerateURLArgs = { collectionSlug: string config: Config @@ -87,7 +78,7 @@ export const getBaseUploadFields = ({ collection, config }: Options): Field[] => hidden: true, readOnly: true, }, - label: labels['upload:width'], + label: ({ t }) => t('upload:width'), } const height: Field = { @@ -97,7 +88,7 @@ export const getBaseUploadFields = ({ collection, config }: Options): Field[] => hidden: true, readOnly: true, }, - label: labels['upload:height'], + label: ({ t }) => t('upload:height'), } const filesize: Field = { @@ -107,7 +98,7 @@ export const getBaseUploadFields = ({ collection, config }: Options): Field[] => hidden: true, readOnly: true, }, - label: labels['upload:fileSize'], + label: ({ t }) => t('upload:fileSize'), } const filename: Field = { @@ -119,7 +110,7 @@ export const getBaseUploadFields = ({ collection, config }: Options): Field[] => readOnly: true, }, index: true, - label: labels['upload:fileName'], + label: ({ t }) => t('upload:fileName'), unique: true, } @@ -201,7 +192,7 @@ export const getBaseUploadFields = ({ collection, config }: Options): Field[] => ], label: size.name, })), - label: labels['upload:Sizes'], + label: ({ t }) => t('upload:Sizes'), }, ]) } diff --git a/packages/payload/src/uploads/getExternalFile.ts b/packages/payload/src/uploads/getExternalFile.ts index 4ddbedf557..892ad83935 100644 --- a/packages/payload/src/uploads/getExternalFile.ts +++ b/packages/payload/src/uploads/getExternalFile.ts @@ -1,24 +1,29 @@ import type { PayloadRequest } from '../types/index.ts' -import type { File, FileData } from './types.js' +import type { File, FileData, UploadConfig } from './types.js' import { APIError } from '../errors/index.js' type Args = { data: FileData req: PayloadRequest + uploadConfig: UploadConfig } -export const getExternalFile = async ({ data, req }: Args): Promise => { +export const getExternalFile = async ({ data, req, uploadConfig }: Args): Promise => { const baseUrl = req.origin || `${req.protocol}://${req.host}` const { filename, url } = data if (typeof url === 'string') { const fileURL = `${baseUrl}${url}` + const headers = uploadConfig.externalFileHeaderFilter + ? uploadConfig.externalFileHeaderFilter(Object.fromEntries(new Headers(req.headers))) + : { + cookie: req.headers['cookie'], + } + const res = await fetch(fileURL, { credentials: 'include', - headers: { - ...req.headers, - }, + headers, method: 'GET', }) diff --git a/packages/payload/src/uploads/getImageSize.ts b/packages/payload/src/uploads/getImageSize.ts index 82450e3030..2313f54689 100644 --- a/packages/payload/src/uploads/getImageSize.ts +++ b/packages/payload/src/uploads/getImageSize.ts @@ -1,14 +1,32 @@ import fs from 'fs' -import probeImageSize from 'probe-image-size' +import sizeOfImport from 'image-size' +import { promisify } from 'util' import type { PayloadRequest } from '../types/index.js' import type { ProbedImageSize } from './types.js' -export function getImageSize(file: PayloadRequest['file']): ProbedImageSize { +import { temporaryFileTask } from './tempFile.js' + +const { imageSize } = sizeOfImport +const imageSizePromise = promisify(imageSize) + +export async function getImageSize(file: PayloadRequest['file']): Promise { if (file.tempFilePath) { - const data = fs.readFileSync(file.tempFilePath) - return probeImageSize.sync(data) + return imageSizePromise(file.tempFilePath) } - return probeImageSize.sync(file.data) + // Tiff file do not support buffers or streams, so we must write to file first + // then retrieve dimensions. https://github.com/image-size/image-size/issues/103 + if (file.mimetype === 'image/tiff') { + const dimensions = await temporaryFileTask( + async (filepath: string) => { + fs.writeFileSync(filepath, file.data) + return imageSizePromise(filepath) + }, + { extension: 'tiff' }, + ) + return dimensions + } + + return imageSize(file.data) } diff --git a/packages/payload/src/uploads/tempFile.ts b/packages/payload/src/uploads/tempFile.ts new file mode 100644 index 0000000000..dd393fd311 --- /dev/null +++ b/packages/payload/src/uploads/tempFile.ts @@ -0,0 +1,50 @@ +import { promises as fsPromises } from 'fs' +import os from 'node:os' +import path from 'node:path' +import { v4 as uuid } from 'uuid' + +async function runTask(temporaryPath: string, callback) { + try { + return await callback(temporaryPath) + } finally { + await fsPromises.rm(temporaryPath, { force: true, maxRetries: 2, recursive: true }) + } +} + +type Options = { + extension?: string + name?: string +} + +export const temporaryFileTask = async (callback, options: Options = {}) => { + const filePath = await temporaryFile(options) + return runTask(filePath, callback) +} + +async function temporaryFile(options: Options) { + if (options.name) { + if (options.extension !== undefined && options.extension !== null) { + throw new Error('The `name` and `extension` options are mutually exclusive') + } + + return path.join(await temporaryDirectory(), options.name) + } + + return ( + (await getPath()) + + (options.extension === undefined || options.extension === null + ? '' + : '.' + options.extension.replace(/^\./, '')) + ) +} + +async function temporaryDirectory({ prefix = '' } = {}) { + const directory = await getPath(prefix) + await fsPromises.mkdir(directory) + return directory +} + +async function getPath(prefix = ''): Promise { + const temporaryDirectory = await fsPromises.realpath(os.tmpdir()) + return path.join(temporaryDirectory, prefix + uuid()) +} diff --git a/packages/payload/src/uploads/types.ts b/packages/payload/src/uploads/types.ts index 97dfa0c008..12062db406 100644 --- a/packages/payload/src/uploads/types.ts +++ b/packages/payload/src/uploads/types.ts @@ -78,6 +78,12 @@ export type UploadConfig = { adminThumbnail?: GetAdminThumbnail | string crop?: boolean disableLocalStorage?: boolean + /** + * Accepts existing headers and can filter/modify them. + * + * Useful for adding custom headers to fetch from external providers. + */ + externalFileHeaderFilter?: (headers: Record) => Record filesRequiredOnCreate?: boolean focalPoint?: boolean /** Options for original upload file only. For sizes, set each formatOptions individually. */ diff --git a/packages/payload/src/utilities/configToJSONSchema.ts b/packages/payload/src/utilities/configToJSONSchema.ts index e4133a9cd3..81c52ed5d1 100644 --- a/packages/payload/src/utilities/configToJSONSchema.ts +++ b/packages/payload/src/utilities/configToJSONSchema.ts @@ -67,6 +67,49 @@ function generateEntitySchemas( } } +function generateLocaleEntitySchemas(localization: SanitizedConfig['localization']): JSONSchema4 { + if (localization && 'locales' in localization && localization?.locales) { + const localesFromConfig = localization?.locales + + const locales = [...localesFromConfig].map((locale) => { + return locale.code + }, []) + + return { + type: 'string', + enum: locales, + } + } + + return { + type: 'null', + } +} + +function generateAuthEntitySchemas(entities: SanitizedCollectionConfig[]): JSONSchema4 { + const properties: JSONSchema4[] = [...entities] + .filter(({ auth }) => Boolean(auth)) + .map(({ slug }) => { + return { + allOf: [ + { $ref: `#/definitions/${slug}` }, + { + type: 'object', + additionalProperties: false, + properties: { + collection: { type: 'string', enum: [slug] }, + }, + required: ['collection'], + }, + ], + } + }, {}) + + return { + oneOf: properties, + } +} + /** * Returns a JSON Schema Type with 'null' added if the field is not required. */ @@ -553,8 +596,10 @@ export function configToJSONSchema( properties: { collections: generateEntitySchemas(config.collections || []), globals: generateEntitySchemas(config.globals || []), + locale: generateLocaleEntitySchemas(config.localization), + user: generateAuthEntitySchemas(config.collections), }, - required: ['collections', 'globals'], + required: ['user', 'locale', 'collections', 'globals'], title: 'Config', } } diff --git a/packages/payload/src/utilities/createLocalReq.ts b/packages/payload/src/utilities/createLocalReq.ts index 7b0bfb1eca..31689b0121 100644 --- a/packages/payload/src/utilities/createLocalReq.ts +++ b/packages/payload/src/utilities/createLocalReq.ts @@ -63,12 +63,12 @@ type CreateLocalReq = ( user?: User }, payload: Payload, -) => PayloadRequest -export const createLocalReq: CreateLocalReq = ( +) => Promise +export const createLocalReq: CreateLocalReq = async ( { context, fallbackLocale, locale: localeArg, req = {} as PayloadRequest, user }, payload, ) => { - const i18n = req?.i18n || getLocalI18n({ config: payload.config }) + const i18n = req?.i18n || (await getLocalI18n({ config: payload.config })) if (payload.config?.localization) { const locale = localeArg === '*' ? 'all' : localeArg diff --git a/packages/payload/src/utilities/getIDType.ts b/packages/payload/src/utilities/getIDType.ts deleted file mode 100644 index 355e56b6c6..0000000000 --- a/packages/payload/src/utilities/getIDType.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { BaseDatabaseAdapter } from '../database/types.js' -import type { Field } from '../fields/config/types.js' - -export const getIDType = ( - idField: Field | null, - defaultIDType: BaseDatabaseAdapter['defaultIDType'] | null, -): 'ObjectID' | 'number' | 'text' => { - if (idField) { - return idField.type === 'number' ? 'number' : 'text' - } - return defaultIDType || 'ObjectID' -} diff --git a/packages/payload/src/utilities/isEntityHidden.ts b/packages/payload/src/utilities/isEntityHidden.ts index 1a0d636aaf..72ec9078ed 100644 --- a/packages/payload/src/utilities/isEntityHidden.ts +++ b/packages/payload/src/utilities/isEntityHidden.ts @@ -1,14 +1,13 @@ -import type { User } from 'payload/auth' - import type { SanitizedCollectionConfig } from '../collections/config/types.js' import type { SanitizedGlobalConfig } from '../globals/config/types.js' +import type { PayloadRequest } from '../types/index.js' export const isEntityHidden = ({ hidden, user, }: { hidden: SanitizedCollectionConfig['admin']['hidden'] | SanitizedGlobalConfig['admin']['hidden'] - user: User + user: PayloadRequest['user'] }) => { return typeof hidden === 'function' ? hidden({ user }) : hidden === true } diff --git a/packages/payload/src/utilities/isReactComponent.ts b/packages/payload/src/utilities/isReactComponent.ts index ddba16ce64..3910f1c4a4 100644 --- a/packages/payload/src/utilities/isReactComponent.ts +++ b/packages/payload/src/utilities/isReactComponent.ts @@ -4,14 +4,23 @@ import { isValidElement } from 'react' import { isPlainObject } from './isPlainObject.js' +export function isReactServerComponent( + component: React.ComponentType | any, +): component is T { + return typeof component === 'function' && isValidElement(component) +} + +export function isReactClientComponent( + component: React.ComponentType | any, +): component is T { + // Do this to test for client components (`use client` directive) bc they import as empty objects + return typeof component === 'object' && !isPlainObject(component) +} + export function isReactComponent( component: React.ComponentType | any, ): component is T { - return ( - (typeof component === 'function' && isValidElement(component)) || - // Do this to test for client components (`use client` directive) bc they import as empty objects - (typeof component === 'object' && !isPlainObject(component)) - ) + return isReactServerComponent(component) || isReactClientComponent(component) } export function isPlainFunction(fn: any): fn is T { diff --git a/packages/payload/src/utilities/telemetry/events/adminInit.ts b/packages/payload/src/utilities/telemetry/events/adminInit.ts index cbf6290997..a9b0f8c376 100644 --- a/packages/payload/src/utilities/telemetry/events/adminInit.ts +++ b/packages/payload/src/utilities/telemetry/events/adminInit.ts @@ -1,5 +1,6 @@ import type { User } from '../../../auth/types.js' import type { Payload } from '../../../index.js' +import type { PayloadRequest } from '../../../types/index.js' import { sendEvent } from '../index.js' import { oneWayHash } from '../oneWayHash.js' @@ -13,7 +14,7 @@ export type AdminInitEvent = { type Args = { headers: Request['headers'] payload: Payload - user: User | null + user: PayloadRequest['user'] } export const adminInit = ({ headers, payload, user }: Args): void => { const host = headers.get('host') diff --git a/packages/payload/src/versions/baseFields.ts b/packages/payload/src/versions/baseFields.ts index b84309b445..f57d909fca 100644 --- a/packages/payload/src/versions/baseFields.ts +++ b/packages/payload/src/versions/baseFields.ts @@ -1,16 +1,12 @@ import type { Field } from '../fields/config/types.js' -import { extractTranslations } from '../translations/extractTranslations.js' - -const labels = extractTranslations(['version:draft', 'version:published', 'version:status']) - export const statuses = [ { - label: labels['version:draft'], + label: ({ t }) => t('version:draft'), value: 'draft', }, { - label: labels['version:published'], + label: ({ t }) => t('version:published'), value: 'published', }, ] @@ -26,7 +22,7 @@ const baseVersionFields: Field[] = [ disableBulkEdit: true, }, defaultValue: 'draft', - label: labels['version:status'], + label: ({ t }) => t('version:status'), options: statuses, }, ] diff --git a/packages/payload/src/versions/saveVersion.ts b/packages/payload/src/versions/saveVersion.ts index b9b01875e3..cae3e58657 100644 --- a/packages/payload/src/versions/saveVersion.ts +++ b/packages/payload/src/versions/saveVersion.ts @@ -154,7 +154,7 @@ export const saveVersion = async ({ createdVersion.updatedAt = result.updatedAt createdVersion = sanitizeInternalFields(createdVersion) - createdVersion.id = id + createdVersion.id = result.parent return createdVersion } diff --git a/packages/payload/templates.ts b/packages/payload/templates.ts deleted file mode 100644 index ebec62ba4e..0000000000 --- a/packages/payload/templates.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { Minimal } from '../templates/Minimal' -export { Default } from '../templates/Default' diff --git a/packages/plugin-cloud-storage/.gitignore b/packages/plugin-cloud-storage/.gitignore index d3be98a69d..11274bcd07 100644 --- a/packages/plugin-cloud-storage/.gitignore +++ b/packages/plugin-cloud-storage/.gitignore @@ -1,10 +1,3 @@ -azure.d.ts -azure.js -gcs.d.ts -gcs.js -s3.d.ts -s3.js - dev/tmp dev/yarn.lock diff --git a/packages/plugin-cloud-storage/README.md b/packages/plugin-cloud-storage/README.md index 8764f9e5c5..839bbe27a0 100644 --- a/packages/plugin-cloud-storage/README.md +++ b/packages/plugin-cloud-storage/README.md @@ -63,6 +63,7 @@ This plugin supports the following adapters: - [Azure Blob Storage](#azure-blob-storage-adapter) - [AWS S3-style Storage](#s3-adapter) - [Google Cloud Storage](#gcs-adapter) +- [Vercel Blob Storage](#vercel-blob-adapter) However, you can create your own adapter for any third-party service you would like to use. @@ -176,6 +177,20 @@ const adapter = gcsAdapter({ // Now you can pass this adapter to the plugin ``` +### Vercel Blob Adapter + +To use the Vercel Blob adapter, you need to have `@vercel/blob` installed in your project dependencies. + +```ts +import { vercelBlobAdapter } from '@payloadcms/plugin-cloud-storage/vercelBlob' + +const adapter = vercelBlobAdapter({ + token: process.env.BLOB_READ_WRITE_TOKEN || '', +}) +``` + +Credit to @JarvisPrestidge for the original implementation of this plugin. + ### Payload Access Control Payload ships with access control that runs _even on statically served files_. The same `read` access control property on your `upload`-enabled collections is used, and it allows you to restrict who can request your uploaded files. diff --git a/packages/plugin-cloud-storage/package.json b/packages/plugin-cloud-storage/package.json index 5be7e024a4..97a08812be 100644 --- a/packages/plugin-cloud-storage/package.json +++ b/packages/plugin-cloud-storage/package.json @@ -1,7 +1,7 @@ { "name": "@payloadcms/plugin-cloud-storage", "description": "The official cloud storage plugin for Payload CMS", - "version": "3.0.0-alpha.59", + "version": "3.0.0-beta.11", "main": "./src/index.ts", "types": "./src/index.ts", "type": "module", @@ -13,7 +13,7 @@ "directory": "packages/plugin-cloud-storage" }, "scripts": { - "build": "pnpm build:swc && pnpm build:types && tsx ../../scripts/exportPointerFiles.ts ../packages/plugin-cloud-storage dist/exports", + "build": "pnpm build:swc && pnpm build:types", "build:swc": "swc ./src -d ./dist --config-file .swcrc", "build:types": "tsc --emitDeclarationOnly --outDir dist", "clean": "rimraf {dist,*.tsbuildinfo}", @@ -26,6 +26,7 @@ "@azure/abort-controller": "^1.0.0", "@azure/storage-blob": "^12.11.0", "@google-cloud/storage": "^7.7.0", + "@vercel/blob": "^0.22.3", "payload": "workspace:*" }, "peerDependenciesMeta": { @@ -43,6 +44,9 @@ }, "@google-cloud/storage": { "optional": true + }, + "@vercel/blob": { + "optional": true } }, "files": [ @@ -56,6 +60,7 @@ "@azure/storage-blob": "^12.11.0", "@google-cloud/storage": "^7.7.0", "@types/find-node-modules": "^2.1.2", + "@vercel/blob": "^0.22.3", "payload": "workspace:*" }, "dependencies": { diff --git a/packages/plugin-cloud-storage/src/adapters/vercelBlob/generateURL.ts b/packages/plugin-cloud-storage/src/adapters/vercelBlob/generateURL.ts new file mode 100644 index 0000000000..fcd3ae98f0 --- /dev/null +++ b/packages/plugin-cloud-storage/src/adapters/vercelBlob/generateURL.ts @@ -0,0 +1,14 @@ +import type { GenerateURL } from '@payloadcms/plugin-cloud-storage/types' + +import path from 'path' + +type GenerateUrlArgs = { + baseUrl: string + prefix?: string +} + +export const getGenerateUrl = ({ baseUrl }: GenerateUrlArgs): GenerateURL => { + return ({ filename, prefix = '' }) => { + return `${baseUrl}/${path.posix.join(prefix, filename)}` + } +} diff --git a/packages/plugin-cloud-storage/src/adapters/vercelBlob/handleDelete.ts b/packages/plugin-cloud-storage/src/adapters/vercelBlob/handleDelete.ts new file mode 100644 index 0000000000..2fbc4bcf4c --- /dev/null +++ b/packages/plugin-cloud-storage/src/adapters/vercelBlob/handleDelete.ts @@ -0,0 +1,19 @@ +import type { HandleDelete } from '@payloadcms/plugin-cloud-storage/types' + +import { del } from '@vercel/blob' +import path from 'path' + +type HandleDeleteArgs = { + baseUrl: string + prefix?: string + token: string +} + +export const getHandleDelete = ({ baseUrl, token }: HandleDeleteArgs): HandleDelete => { + return async ({ doc: { prefix = '' }, filename }) => { + const fileUrl = `${baseUrl}/${path.posix.join(prefix, filename)}` + const deletedBlob = await del(fileUrl, { token }) + + return deletedBlob + } +} diff --git a/packages/plugin-cloud-storage/src/adapters/vercelBlob/handleUpload.ts b/packages/plugin-cloud-storage/src/adapters/vercelBlob/handleUpload.ts new file mode 100644 index 0000000000..9d127f4174 --- /dev/null +++ b/packages/plugin-cloud-storage/src/adapters/vercelBlob/handleUpload.ts @@ -0,0 +1,40 @@ +import type { HandleUpload } from '@payloadcms/plugin-cloud-storage/types' + +import { put } from '@vercel/blob' +import path from 'path' + +import type { VercelBlobAdapterUploadOptions } from './index.js' + +type HandleUploadArgs = VercelBlobAdapterUploadOptions & { + baseUrl: string + prefix?: string + token: string +} + +export const getHandleUpload = ({ + access = 'public', + addRandomSuffix, + baseUrl, + cacheControlMaxAge, + prefix = '', + token, +}: HandleUploadArgs): HandleUpload => { + return async ({ data, file: { buffer, filename, mimeType } }) => { + const fileKey = path.posix.join(data.prefix || prefix, filename) + + const result = await put(fileKey, buffer, { + access, + addRandomSuffix, + cacheControlMaxAge, + contentType: mimeType, + token, + }) + + // Get filename with suffix from returned url + if (addRandomSuffix) { + data.filename = result.url.replace(`${baseUrl}/`, '') + } + + return data + } +} diff --git a/packages/plugin-cloud-storage/src/adapters/vercelBlob/index.ts b/packages/plugin-cloud-storage/src/adapters/vercelBlob/index.ts new file mode 100644 index 0000000000..4b662775dd --- /dev/null +++ b/packages/plugin-cloud-storage/src/adapters/vercelBlob/index.ts @@ -0,0 +1,82 @@ +import type { Adapter, GeneratedAdapter } from '@payloadcms/plugin-cloud-storage/types' + +import { getGenerateUrl } from './generateURL.js' +import { getHandleDelete } from './handleDelete.js' +import { getHandleUpload } from './handleUpload.js' +import { getStaticHandler } from './staticHandler.js' + +export interface VercelBlobAdapterArgs { + options?: VercelBlobAdapterUploadOptions + + /** + * Vercel Blob storage read/write token + * + * Usually process.env.BLOB_READ_WRITE_TOKEN set by Vercel + */ + token: string +} + +export interface VercelBlobAdapterUploadOptions { + /** + * Access control level + * + * @default 'public' + */ + access?: 'public' + /** + * Add a random suffix to the uploaded file name + * + * @default false + */ + addRandomSuffix?: boolean + /** + * Cache-Control max-age in seconds + * + * @default 31536000 (1 year) + */ + cacheControlMaxAge?: number +} + +const defaultUploadOptions: VercelBlobAdapterUploadOptions = { + access: 'public', + addRandomSuffix: false, + cacheControlMaxAge: 60 * 60 * 24 * 365, // 1 year +} + +export const vercelBlobAdapter = + ({ options = {}, token }: VercelBlobAdapterArgs): Adapter => + ({ collection, prefix }): GeneratedAdapter => { + if (!token) { + throw new Error('The token argument is required for the Vercel Blob adapter.') + } + + // Parse storeId from token + const storeId = token.match(/^vercel_blob_rw_([a-z\d]+)_[a-z\d]+$/i)?.[1].toLowerCase() + + if (!storeId) { + throw new Error( + 'Invalid token format for Vercel Blob adapter. Should be vercel_blob_rw__.', + ) + } + + const { access, addRandomSuffix, cacheControlMaxAge } = { + ...defaultUploadOptions, + ...options, + } + + const baseUrl = `https://${storeId}.${access}.blob.vercel-storage.com` + + return { + generateURL: getGenerateUrl({ baseUrl, prefix }), + handleDelete: getHandleDelete({ baseUrl, prefix, token }), + handleUpload: getHandleUpload({ + access, + addRandomSuffix, + baseUrl, + cacheControlMaxAge, + prefix, + token, + }), + staticHandler: getStaticHandler({ baseUrl, token }, collection), + } + } diff --git a/packages/plugin-cloud-storage/src/adapters/vercelBlob/staticHandler.ts b/packages/plugin-cloud-storage/src/adapters/vercelBlob/staticHandler.ts new file mode 100644 index 0000000000..48037a5dce --- /dev/null +++ b/packages/plugin-cloud-storage/src/adapters/vercelBlob/staticHandler.ts @@ -0,0 +1,52 @@ +import type { StaticHandler } from '@payloadcms/plugin-cloud-storage/types' +import type { CollectionConfig, PayloadRequest, UploadConfig } from 'payload/types' + +import { head } from '@vercel/blob' +import path from 'path' + +import { getFilePrefix } from '../../utilities/getFilePrefix.js' + +type StaticHandlerArgs = { + baseUrl: string + token: string +} + +export const getStaticHandler = ( + { baseUrl, token }: StaticHandlerArgs, + collection: CollectionConfig, +): StaticHandler => { + return async (req, { params: { filename } }) => { + try { + const prefix = await getFilePrefix({ collection, req }) + + const fileUrl = `${baseUrl}/${path.posix.join(prefix, filename)}` + + const blobMetadata = await head(fileUrl, { token }) + if (!blobMetadata) { + return new Response(null, { status: 404, statusText: 'Not Found' }) + } + + const { contentDisposition, contentType, size } = blobMetadata + const response = await fetch(fileUrl) + const blob = await response.blob() + + if (!blob) { + return new Response(null, { status: 204, statusText: 'No Content' }) + } + + const bodyBuffer = await blob.arrayBuffer() + + return new Response(bodyBuffer, { + headers: new Headers({ + 'Content-Disposition': contentDisposition, + 'Content-Length': String(size), + 'Content-Type': contentType, + }), + status: 200, + }) + } catch (err: unknown) { + req.payload.logger.error({ err, msg: 'Unexpected error in staticHandler' }) + return new Response('Internal Server Error', { status: 500 }) + } + } +} diff --git a/packages/plugin-cloud-storage/src/exports/utilities.ts b/packages/plugin-cloud-storage/src/exports/utilities.ts new file mode 100644 index 0000000000..e36f9b33ec --- /dev/null +++ b/packages/plugin-cloud-storage/src/exports/utilities.ts @@ -0,0 +1 @@ +export { getFilePrefix } from '../utilities/getFilePrefix.js' diff --git a/packages/plugin-cloud-storage/src/exports/vercelBlob.ts b/packages/plugin-cloud-storage/src/exports/vercelBlob.ts new file mode 100644 index 0000000000..d48c179903 --- /dev/null +++ b/packages/plugin-cloud-storage/src/exports/vercelBlob.ts @@ -0,0 +1 @@ +export { vercelBlobAdapter } from '../adapters/vercelBlob/index.js' diff --git a/packages/plugin-cloud/package.json b/packages/plugin-cloud/package.json index e6c9eb2eca..0e6a722a94 100644 --- a/packages/plugin-cloud/package.json +++ b/packages/plugin-cloud/package.json @@ -1,7 +1,7 @@ { "name": "@payloadcms/plugin-cloud", "description": "The official Payload Cloud plugin", - "version": "3.0.0-alpha.59", + "version": "3.0.0-beta.11", "main": "./src/index.ts", "types": "./src/index.ts", "license": "MIT", diff --git a/packages/plugin-form-builder/package.json b/packages/plugin-form-builder/package.json index a0971ea42c..efb81fe925 100644 --- a/packages/plugin-form-builder/package.json +++ b/packages/plugin-form-builder/package.json @@ -1,7 +1,7 @@ { "name": "@payloadcms/plugin-form-builder", "description": "Form builder plugin for Payload CMS", - "version": "3.0.0-alpha.59", + "version": "3.0.0-beta.11", "homepage:": "https://payloadcms.com", "repository": { "type": "git", diff --git a/packages/plugin-nested-docs/package.json b/packages/plugin-nested-docs/package.json index 160835a94d..d427337313 100644 --- a/packages/plugin-nested-docs/package.json +++ b/packages/plugin-nested-docs/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-nested-docs", - "version": "3.0.0-alpha.59", + "version": "3.0.0-beta.11", "description": "The official Nested Docs plugin for Payload", "repository": { "type": "git", diff --git a/packages/plugin-nested-docs/src/fields/breadcrumbs.ts b/packages/plugin-nested-docs/src/fields/breadcrumbs.ts index 7eaadf38c5..262a21a76e 100644 --- a/packages/plugin-nested-docs/src/fields/breadcrumbs.ts +++ b/packages/plugin-nested-docs/src/fields/breadcrumbs.ts @@ -45,5 +45,3 @@ export const createBreadcrumbsField = ( ...(overrides?.fields || []), ], }) - -export default createBreadcrumbsField diff --git a/packages/plugin-nested-docs/src/fields/parent.ts b/packages/plugin-nested-docs/src/fields/parent.ts index 87086819e7..67b6d09b95 100644 --- a/packages/plugin-nested-docs/src/fields/parent.ts +++ b/packages/plugin-nested-docs/src/fields/parent.ts @@ -20,5 +20,3 @@ export const createParentField = ( relationTo, ...(overrides || {}), }) - -export default createParentField diff --git a/packages/plugin-nested-docs/src/fields/parentFilterOptions.ts b/packages/plugin-nested-docs/src/fields/parentFilterOptions.ts index e1c532e0d4..13ddc51efc 100644 --- a/packages/plugin-nested-docs/src/fields/parentFilterOptions.ts +++ b/packages/plugin-nested-docs/src/fields/parentFilterOptions.ts @@ -12,5 +12,3 @@ export const parentFilterOptions: (breadcrumbsFieldSlug?: string) => FilterOptio return null } - -export default parentFilterOptions diff --git a/packages/plugin-nested-docs/src/hooks/resaveChildren.ts b/packages/plugin-nested-docs/src/hooks/resaveChildren.ts index cc282951a7..4361f8e818 100644 --- a/packages/plugin-nested-docs/src/hooks/resaveChildren.ts +++ b/packages/plugin-nested-docs/src/hooks/resaveChildren.ts @@ -2,7 +2,7 @@ import type { CollectionAfterChangeHook, CollectionConfig, PayloadRequest } from import type { PluginConfig } from '../types.js' -import populateBreadcrumbs from '../utilities/populateBreadcrumbs.js' +import { populateBreadcrumbs } from '../utilities/populateBreadcrumbs.js' type ResaveArgs = { collection: CollectionConfig @@ -65,7 +65,7 @@ const resave = async ({ collection, doc, draft, pluginConfig, req }: ResaveArgs) } } -const resaveChildren = +export const resaveChildren = (pluginConfig: PluginConfig, collection: CollectionConfig): CollectionAfterChangeHook => async ({ doc, req }) => { await resave({ @@ -88,4 +88,3 @@ const resaveChildren = return undefined } -export default resaveChildren diff --git a/packages/plugin-nested-docs/src/hooks/resaveSelfAfterCreate.ts b/packages/plugin-nested-docs/src/hooks/resaveSelfAfterCreate.ts index 0e968a1ace..b07308a5e8 100644 --- a/packages/plugin-nested-docs/src/hooks/resaveSelfAfterCreate.ts +++ b/packages/plugin-nested-docs/src/hooks/resaveSelfAfterCreate.ts @@ -5,7 +5,7 @@ import type { PluginConfig } from '../types.js' // This hook automatically re-saves a document after it is created // so that we can build its breadcrumbs with the newly created document's ID. -const resaveSelfAfterCreate = +export const resaveSelfAfterCreate = (pluginConfig: PluginConfig, collection: CollectionConfig): CollectionAfterChangeHook => async ({ doc, operation, req }) => { const { locale, payload } = req @@ -52,5 +52,3 @@ const resaveSelfAfterCreate = return undefined } - -export default resaveSelfAfterCreate diff --git a/packages/plugin-nested-docs/src/index.ts b/packages/plugin-nested-docs/src/index.ts index e7521a29dd..4a8954d55d 100644 --- a/packages/plugin-nested-docs/src/index.ts +++ b/packages/plugin-nested-docs/src/index.ts @@ -3,14 +3,16 @@ import type { SingleRelationshipField } from 'payload/types' import type { PluginConfig } from './types.js' -import createBreadcrumbsField from './fields/breadcrumbs.js' -import createParentField from './fields/parent.js' -import parentFilterOptions from './fields/parentFilterOptions.js' -import resaveChildren from './hooks/resaveChildren.js' -import resaveSelfAfterCreate from './hooks/resaveSelfAfterCreate.js' -import populateBreadcrumbs from './utilities/populateBreadcrumbs.js' +import { createBreadcrumbsField } from './fields/breadcrumbs.js' +import { createParentField } from './fields/parent.js' +import { parentFilterOptions } from './fields/parentFilterOptions.js' +import { resaveChildren } from './hooks/resaveChildren.js' +import { resaveSelfAfterCreate } from './hooks/resaveSelfAfterCreate.js' +import { populateBreadcrumbs } from './utilities/populateBreadcrumbs.js' -const nestedDocs = +export { createBreadcrumbsField, createParentField } + +export const nestedDocs = (pluginConfig: PluginConfig): Plugin => (config) => ({ ...config, @@ -67,5 +69,3 @@ const nestedDocs = return collection }), }) - -export default nestedDocs diff --git a/packages/plugin-nested-docs/src/utilities/formatBreadcrumb.ts b/packages/plugin-nested-docs/src/utilities/formatBreadcrumb.ts index ab4ad23462..51d157c55b 100644 --- a/packages/plugin-nested-docs/src/utilities/formatBreadcrumb.ts +++ b/packages/plugin-nested-docs/src/utilities/formatBreadcrumb.ts @@ -2,7 +2,7 @@ import type { CollectionConfig } from 'payload/types' import type { Breadcrumb, PluginConfig } from '../types.js' -const formatBreadcrumb = ( +export const formatBreadcrumb = ( pluginConfig: PluginConfig, collection: CollectionConfig, docs: Array>, @@ -29,5 +29,3 @@ const formatBreadcrumb = ( url, } } - -export default formatBreadcrumb diff --git a/packages/plugin-nested-docs/src/utilities/getParents.ts b/packages/plugin-nested-docs/src/utilities/getParents.ts index 963ca548bb..3d2ce58b15 100644 --- a/packages/plugin-nested-docs/src/utilities/getParents.ts +++ b/packages/plugin-nested-docs/src/utilities/getParents.ts @@ -2,7 +2,7 @@ import type { CollectionConfig } from 'payload/types' import type { PluginConfig } from '../types.js' -const getParents = async ( +export const getParents = async ( req: any, pluginConfig: PluginConfig, collection: CollectionConfig, @@ -44,5 +44,3 @@ const getParents = async ( return docs } - -export default getParents diff --git a/packages/plugin-nested-docs/src/utilities/populateBreadcrumbs.ts b/packages/plugin-nested-docs/src/utilities/populateBreadcrumbs.ts index c7742b32ac..453eb5c6f8 100644 --- a/packages/plugin-nested-docs/src/utilities/populateBreadcrumbs.ts +++ b/packages/plugin-nested-docs/src/utilities/populateBreadcrumbs.ts @@ -2,10 +2,10 @@ import type { CollectionConfig } from 'payload/types' import type { PluginConfig } from '../types.js' -import formatBreadcrumb from './formatBreadcrumb.js' -import getParents from './getParents.js' +import { formatBreadcrumb } from './formatBreadcrumb.js' +import { getParents } from './getParents.js' -const populateBreadcrumbs = async ( +export const populateBreadcrumbs = async ( req: any, pluginConfig: PluginConfig, collection: CollectionConfig, @@ -40,5 +40,3 @@ const populateBreadcrumbs = async ( [pluginConfig?.breadcrumbsFieldSlug || 'breadcrumbs']: breadcrumbs, } } - -export default populateBreadcrumbs diff --git a/packages/plugin-redirects/package.json b/packages/plugin-redirects/package.json index 905931424a..6cfd9556de 100644 --- a/packages/plugin-redirects/package.json +++ b/packages/plugin-redirects/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-redirects", - "version": "3.0.0-alpha.59", + "version": "3.0.0-beta.11", "homepage:": "https://payloadcms.com", "repository": { "type": "git", diff --git a/packages/plugin-search/package.json b/packages/plugin-search/package.json index eaf1ed5295..ac9dd96cbf 100644 --- a/packages/plugin-search/package.json +++ b/packages/plugin-search/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-search", - "version": "3.0.0-alpha.59", + "version": "3.0.0-beta.11", "homepage:": "https://payloadcms.com", "repository": { "type": "git", @@ -52,7 +52,13 @@ } }, "publishConfig": { - "exports": null, + "exports": { + ".": { + "import": "./dist/index.js", + "require": "./dist/index.js", + "types": "./dist/index.d.ts" + } + }, "main": "./dist/index.js", "registry": "https://registry.npmjs.org/", "types": "./dist/index.d.ts" diff --git a/packages/plugin-sentry/src/plugin.spec.ts b/packages/plugin-sentry/src/plugin.spec.ts index 1cb3056ffa..83318dacce 100644 --- a/packages/plugin-sentry/src/plugin.spec.ts +++ b/packages/plugin-sentry/src/plugin.spec.ts @@ -34,13 +34,11 @@ describe('plugin', () => { }) function assertPluginRan(config: Config) { - expect(config.admin?.webpack).toBeDefined() expect(config.hooks?.afterError).toBeDefined() expect(config.onInit).toBeDefined() } function assertPluginDidNotRun(config: Config) { - expect(config.admin?.webpack).toBeDefined() expect(config.hooks?.afterError).toBeUndefined() expect(config.onInit).toBeUndefined() } diff --git a/packages/plugin-seo/package.json b/packages/plugin-seo/package.json index cbadbca0a1..650fe58160 100644 --- a/packages/plugin-seo/package.json +++ b/packages/plugin-seo/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/plugin-seo", - "version": "3.0.0-alpha.59", + "version": "3.0.0-beta.11", "homepage:": "https://payloadcms.com", "repository": { "type": "git", @@ -54,7 +54,13 @@ } }, "publishConfig": { - "exports": null, + "exports": { + ".": { + "import": "./dist/index.js", + "require": "./dist/index.js", + "types": "./dist/index.d.ts" + } + }, "main": "./dist/index.js", "registry": "https://registry.npmjs.org/", "types": "./dist/index.d.ts" diff --git a/packages/plugin-seo/src/fields/MetaDescription.tsx b/packages/plugin-seo/src/fields/MetaDescription.tsx index 6bf01c5b7d..54ba05e33d 100644 --- a/packages/plugin-seo/src/fields/MetaDescription.tsx +++ b/packages/plugin-seo/src/fields/MetaDescription.tsx @@ -76,18 +76,7 @@ export const MetaDescription: React.FC = (props) => { }} >

- {CustomLabel !== undefined ? CustomLabel : } - {required && ( - - * - - )} - + {hasGenerateDescriptionFn && (   —   diff --git a/packages/plugin-seo/src/fields/MetaImage.tsx b/packages/plugin-seo/src/fields/MetaImage.tsx index cd6e54d8fa..9be4a6c4d6 100644 --- a/packages/plugin-seo/src/fields/MetaImage.tsx +++ b/packages/plugin-seo/src/fields/MetaImage.tsx @@ -77,17 +77,7 @@ export const MetaImage: React.FC = (props) => { }} >
- {CustomLabel !== undefined ? CustomLabel : } - {required && ( - - * - - )} + {hasGenerateImageFn && (   —   diff --git a/packages/plugin-seo/src/fields/MetaTitle.tsx b/packages/plugin-seo/src/fields/MetaTitle.tsx index 6b2ad68d38..4d8e1b36bd 100644 --- a/packages/plugin-seo/src/fields/MetaTitle.tsx +++ b/packages/plugin-seo/src/fields/MetaTitle.tsx @@ -77,17 +77,7 @@ export const MetaTitle: React.FC = (props) => { }} >
- {CustomLabel !== undefined ? CustomLabel : } - {required && ( - - * - - )} + {hasGenerateTitleFn && (   —   diff --git a/packages/plugin-seo/src/fields/index.scss b/packages/plugin-seo/src/fields/index.scss index 2780c812b7..27f37aea7d 100644 --- a/packages/plugin-seo/src/fields/index.scss +++ b/packages/plugin-seo/src/fields/index.scss @@ -1,5 +1,5 @@ .plugin-seo__field { .field-label { - display: inline; + display: inline!important; } } diff --git a/packages/plugin-seo/src/index.tsx b/packages/plugin-seo/src/index.tsx index 16e5de9aab..f0417bc2b9 100644 --- a/packages/plugin-seo/src/index.tsx +++ b/packages/plugin-seo/src/index.tsx @@ -45,7 +45,7 @@ const seo = Field: (props) => ( ), }, @@ -62,7 +62,7 @@ const seo = ), @@ -82,7 +82,7 @@ const seo = Field: (props) => ( ), }, @@ -105,7 +105,7 @@ const seo = Field: (props) => ( ), }, @@ -194,11 +194,12 @@ const seo = return collection }) || [], endpoints: [ + ...(config.endpoints ?? []), { handler: async (req) => { const args: Parameters[0] = req.data as unknown as Parameters[0] - const result = await pluginConfig.generateTitle(args) + const result = pluginConfig.generateTitle ? await pluginConfig.generateTitle(args) : '' return new Response(JSON.stringify({ result }), { status: 200 }) }, method: 'post', @@ -208,7 +209,9 @@ const seo = handler: async (req) => { const args: Parameters[0] = req.data as unknown as Parameters[0] - const result = await pluginConfig.generateDescription(args) + const result = pluginConfig.generateDescription + ? await pluginConfig.generateDescription(args) + : '' return new Response(JSON.stringify({ result }), { status: 200 }) }, method: 'post', @@ -218,7 +221,7 @@ const seo = handler: async (req) => { const args: Parameters[0] = req.data as unknown as Parameters[0] - const result = await pluginConfig.generateURL(args) + const result = pluginConfig.generateURL ? await pluginConfig.generateURL(args) : '' return new Response(JSON.stringify({ result }), { status: 200 }) }, method: 'post', @@ -228,7 +231,7 @@ const seo = handler: async (req) => { const args: Parameters[0] = req.data as unknown as Parameters[0] - const result = await pluginConfig.generateImage(args) + const result = pluginConfig.generateImage ? await pluginConfig.generateImage(args) : '' return new Response(result, { status: 200 }) }, method: 'post', diff --git a/packages/plugin-seo/src/translations/index.ts b/packages/plugin-seo/src/translations/index.ts index 95d807d373..09cc85aae6 100644 --- a/packages/plugin-seo/src/translations/index.ts +++ b/packages/plugin-seo/src/translations/index.ts @@ -149,4 +149,29 @@ export const translations = { tooShort: 'Zbyt krótkie', }, }, + uk: { + $schema: './translation-schema.json', + 'plugin-seo': { + almostThere: 'Ще трошки', + autoGenerate: 'Згенерувати', + bestPractices: 'найкращі практики', + characterCount: '{{current}}/{{minLength}}-{{maxLength}} символів, ', + charactersLeftOver: 'залишилось {{characters}} символів', + charactersToGo: ' на {{characters}} символів коротше', + charactersTooMany: 'на {{characters}} символів довше', + checksPassing: '{{current}}/{{max}} перевірок пройдено', + good: 'Чудово', + imageAutoGenerationTip: 'Автоматична генерація використає зображення з головного блоку', + lengthTipDescription: + 'Має бути від {{minLength}} до {{maxLength}} символів. Щоб дізнатися, як писати якісні метаописи — перегляньте ', + lengthTipTitle: + 'Має бути від {{minLength}} до {{maxLength}} символів. Щоб дізнатися, як писати якісні метазаголовки — перегляньте ', + noImage: 'Немає зображення', + preview: 'Попередній перегляд', + previewDescription: + 'Реальне відображення може відрізнятися в залежності від вмісту та релевантності пошуку.', + tooLong: 'Задовгий', + tooShort: 'Закороткий', + }, + }, } diff --git a/packages/plugin-seo/src/translations/uk.json b/packages/plugin-seo/src/translations/uk.json new file mode 100644 index 0000000000..14a818c544 --- /dev/null +++ b/packages/plugin-seo/src/translations/uk.json @@ -0,0 +1,22 @@ +{ + "$schema": "./translation-schema.json", + "plugin-seo": { + "almostThere": "Ще трошки", + "autoGenerate": "Згенерувати", + "bestPractices": "найкращі практики", + "characterCount": "{{current}}/{{minLength}}-{{maxLength}} символів, ", + "charactersLeftOver": "залишилось {{characters}} символів", + "charactersToGo": " на {{characters}} символів коротше", + "charactersTooMany": "на {{characters}} символів довше", + "checksPassing": "{{current}}/{{max}} перевірок пройдено", + "good": "Чудово", + "imageAutoGenerationTip": "Автоматична генерація використає зображення з головного блоку", + "lengthTipDescription": "Має бути від {{minLength}} до {{maxLength}} символів. Щоб дізнатися, як писати якісні метаописи — перегляньте ", + "lengthTipTitle": "Має бути від {{minLength}} до {{maxLength}} символів. Щоб дізнатися, як писати якісні метазаголовки — перегляньте ", + "noImage": "Немає зображення", + "preview": "Попередній перегляд", + "previewDescription": "Реальне відображення може відрізнятися в залежності від вмісту та релевантності пошуку.", + "tooLong": "Задовгий", + "tooShort": "Закороткий" + } +} diff --git a/packages/richtext-lexical/.gitignore b/packages/richtext-lexical/.gitignore deleted file mode 100644 index 6b2c68f46d..0000000000 --- a/packages/richtext-lexical/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -/utilities.d.ts -/utilities.js -/components.d.ts -/components.js diff --git a/packages/richtext-lexical/package.json b/packages/richtext-lexical/package.json index 0294df53e1..26e44b1931 100644 --- a/packages/richtext-lexical/package.json +++ b/packages/richtext-lexical/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/richtext-lexical", - "version": "3.0.0-alpha.59", + "version": "3.0.0-beta.11", "description": "The officially supported Lexical richtext adapter for Payload", "repository": { "type": "git", @@ -14,7 +14,7 @@ "types": "./src/index.ts", "type": "module", "scripts": { - "build": "pnpm copyfiles && pnpm build:swc && pnpm build:types && tsx ../../scripts/exportPointerFiles.ts ../packages/richtext-lexical dist/exports", + "build": "pnpm copyfiles && pnpm build:swc && pnpm build:types", "build:swc": "swc ./src -d ./dist --config-file .swcrc", "build:types": "tsc --emitDeclarationOnly --outDir dist", "build:clean": "find . \\( -type d \\( -name build -o -name dist -o -name .cache \\) -o -type f -name tsconfig.tsbuildinfo \\) -exec rm -rf {} + && pnpm build", @@ -81,9 +81,9 @@ "types": "./dist/index.d.ts" }, "./*": { - "import": "./src/exports/*.ts", - "require": "./src/exports/*.ts", - "types": "./src/exports/*.ts" + "import": "./dist/exports/*.js", + "require": "./dist/exports/*.js", + "types": "./dist/exports/*.d.ts" } }, "main": "./dist/index.js", @@ -91,7 +91,7 @@ "types": "./dist/index.d.ts" }, "engines": { - "node": ">=18.17.0" + "node": ">=18.20.2" }, "files": [ "dist", diff --git a/packages/richtext-lexical/src/field/features/blocks/component/index.tsx b/packages/richtext-lexical/src/field/features/blocks/component/index.tsx index 2a753d1889..3bdb403d7b 100644 --- a/packages/richtext-lexical/src/field/features/blocks/component/index.tsx +++ b/packages/richtext-lexical/src/field/features/blocks/component/index.tsx @@ -154,7 +154,9 @@ export const BlockComponent: React.FC = (props) => { reducedBlock, blockFieldWrapperName, onChange, - ]) + schemaFieldsPath, + path, + ]) // Adding formData to the dependencies here might break it return
{formContent}
} diff --git a/packages/richtext-lexical/src/field/features/blocks/feature.server.ts b/packages/richtext-lexical/src/field/features/blocks/feature.server.ts index 24b7bc7c44..9a278bd4eb 100644 --- a/packages/richtext-lexical/src/field/features/blocks/feature.server.ts +++ b/packages/richtext-lexical/src/field/features/blocks/feature.server.ts @@ -1,5 +1,6 @@ import type { Block, BlockField, Field, FieldWithRichTextRequiredEditor } from 'payload/types' +import { traverseFields } from '@payloadcms/next/utilities' import { baseBlockFields, sanitizeFields } from 'payload/config' import { fieldsToJSONSchema, formatLabels } from 'payload/utilities' @@ -12,12 +13,12 @@ import { BlockNode } from './nodes/BlocksNode.js' import { blockPopulationPromiseHOC } from './populationPromise.js' import { blockValidationHOC } from './validate.js' +export type LexicalBlock = Omit & { + fields: FieldWithRichTextRequiredEditor[] +} + export type BlocksFeatureProps = { - blocks: Array< - Omit & { - fields: FieldWithRichTextRequiredEditor[] - } - > + blocks: LexicalBlock[] } export const BlocksFeature: FeatureProviderProviderServer< @@ -32,7 +33,8 @@ export const BlocksFeature: FeatureProviderProviderServer< return { ...blockCopy, - fields: blockCopy.fields.concat(baseBlockFields), + // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion + fields: blockCopy.fields.concat(baseBlockFields as FieldWithRichTextRequiredEditor[]), labels: !blockCopy.labels ? formatLabels(blockCopy.slug) : blockCopy.labels, } }) @@ -59,43 +61,26 @@ export const BlocksFeature: FeatureProviderProviderServer< return { ClientComponent: BlocksFeatureClientComponent, clientFeatureProps: clientProps, - generateSchemaMap: ({ config, props, schemaMap: schemaMapFromProps, schemaPath }) => { - const schemaMap: { - [key: string]: Field[] - } = {} + generateSchemaMap: ({ config, i18n, props }) => { + const validRelationships = config.collections.map((c) => c.slug) || [] /** - * Add sub-fields to the schemaMap. E.g. if you have an array field as part of the block and it runs addRow, it will request these - * sub-fields from the component map. Thus we need to put them in the component map here. + * Add sub-fields to the schemaMap. E.g. if you have an array field as part of the block, and it runs addRow, it will request these + * sub-fields from the component map. Thus, we need to put them in the component map here. */ - const handleFields = (parentPath: string, fields: Field[]) => { - for (const field of fields) { - if ('name' in field && 'fields' in field) { - schemaMap[parentPath + '.' + field.name] = field.fields - handleFields(parentPath + '.' + field.name, field.fields) - } - if ('blocks' in field) { - for (const block of field.blocks) { - schemaMap[parentPath + '.' + field.name + '.' + block.slug] = block.fields || [] - handleFields(parentPath + '.' + field.name + '.' + block.slug, block.fields) - } - } - if ('tabs' in field) { - for (const tab of field.tabs) { - if ('name' in tab) { - schemaMap[parentPath + '.' + tab.name] = tab.fields || [] - handleFields(parentPath + '.' + tab.name, tab.fields) - } else { - handleFields(parentPath, tab.fields) - } - } - } - } - } + const schemaMap = new Map() for (const block of props.blocks) { - schemaMap[block.slug] = block.fields || [] - handleFields(block.slug, block.fields) + schemaMap.set(block.slug, block.fields || []) + + traverseFields({ + config, + fields: block.fields, + i18n, + schemaMap, + schemaPath: block.slug, + validRelationships, + }) } return schemaMap diff --git a/packages/richtext-lexical/src/field/features/converters/html/converter/index.ts b/packages/richtext-lexical/src/field/features/converters/html/converter/index.ts index d239cc4a2e..eba92092e9 100644 --- a/packages/richtext-lexical/src/field/features/converters/html/converter/index.ts +++ b/packages/richtext-lexical/src/field/features/converters/html/converter/index.ts @@ -47,19 +47,30 @@ export async function convertLexicalNodesToHTML({ const converterForNode = converters.find((converter) => converter.nodeTypes.includes(node.type), ) - if (!converterForNode) { - if (unknownConverter) { - return unknownConverter.converter({ childIndex: i, converters, node, parent, payload }) + try { + if (!converterForNode) { + if (unknownConverter) { + return await unknownConverter.converter({ + childIndex: i, + converters, + node, + parent, + payload, + }) + } + return 'unknown node' } - return 'unknown node' + return await converterForNode.converter({ + childIndex: i, + converters, + node, + parent, + payload, + }) + } catch (error) { + console.error('Error converting lexical node to HTML:', error, 'node:', node) + return '' } - return converterForNode.converter({ - childIndex: i, - converters, - node, - parent, - payload, - }) }), ) diff --git a/packages/richtext-lexical/src/field/features/converters/html/field/index.ts b/packages/richtext-lexical/src/field/features/converters/html/field/index.ts index ad3d97cc22..4b23699090 100644 --- a/packages/richtext-lexical/src/field/features/converters/html/field/index.ts +++ b/packages/richtext-lexical/src/field/features/converters/html/field/index.ts @@ -1,5 +1,5 @@ import type { SerializedEditorState } from 'lexical' -import type { Field, RichTextField, TextField } from 'payload/types' +import type { Field, RichTextField } from 'payload/types' import type { AdapterProps, LexicalRichTextAdapter } from '../../../../../types.js' import type { SanitizedServerEditorConfig } from '../../../../lexical/config/types.js' @@ -10,6 +10,12 @@ import { defaultHTMLConverters } from '../converter/defaultConverters.js' import { convertLexicalToHTML } from '../converter/index.js' type Props = { + /** + * Whether the lexicalHTML field should be hidden in the admin panel + * + * @default true + */ + hidden?: boolean name: string } @@ -53,13 +59,16 @@ export const lexicalHTML: ( **/ lexicalFieldName: string, props: Props, -) => TextField = (lexicalFieldName, props) => { - const { name = 'lexicalHTML' } = props +) => Field = (lexicalFieldName, props) => { + const { name = 'lexicalHTML', hidden = true } = props return { name, - type: 'text', + type: 'code', admin: { - hidden: true, + editorOptions: { + language: 'html', + }, + hidden, }, hooks: { afterRead: [ diff --git a/packages/richtext-lexical/src/field/features/horizontalrule/component/index.tsx b/packages/richtext-lexical/src/field/features/horizontalrule/component/index.tsx new file mode 100644 index 0000000000..df70dd203a --- /dev/null +++ b/packages/richtext-lexical/src/field/features/horizontalrule/component/index.tsx @@ -0,0 +1,80 @@ +'use client' + +import type { NodeKey } from 'lexical' + +import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js' +import { useLexicalNodeSelection } from '@lexical/react/useLexicalNodeSelection.js' +import lexicalUtilsImport from '@lexical/utils' +const { mergeRegister } = lexicalUtilsImport + +import lexicalImport from 'lexical' +const { + $getNodeByKey, + $getSelection, + $isNodeSelection, + CLICK_COMMAND, + COMMAND_PRIORITY_LOW, + KEY_BACKSPACE_COMMAND, + KEY_DELETE_COMMAND, +} = lexicalImport +import { useCallback, useEffect } from 'react' + +import { $isHorizontalRuleNode } from '../nodes/HorizontalRuleNode.js' + +/** + * React component rendered in the lexical editor, WITHIN the hr element created by createDOM of the HorizontalRuleNode. + * + * @param nodeKey every node has a unique key (this key is not saved to the database and thus may differ between sessions). It's useful for working with the CURRENT lexical editor state + */ +export function HorizontalRuleComponent({ nodeKey }: { nodeKey: NodeKey }) { + const [editor] = useLexicalComposerContext() + const [isSelected, setSelected, clearSelection] = useLexicalNodeSelection(nodeKey) + + const onDelete = useCallback( + (event: KeyboardEvent) => { + if (isSelected && $isNodeSelection($getSelection())) { + event.preventDefault() + const node = $getNodeByKey(nodeKey) + if ($isHorizontalRuleNode(node)) { + node.remove() + return true + } + } + return false + }, + [isSelected, nodeKey], + ) + + useEffect(() => { + return mergeRegister( + editor.registerCommand( + CLICK_COMMAND, + (event: MouseEvent) => { + const hrElem = editor.getElementByKey(nodeKey) + + if (event.target === hrElem) { + if (!event.shiftKey) { + clearSelection() + } + setSelected(!isSelected) + return true + } + + return false + }, + COMMAND_PRIORITY_LOW, + ), + editor.registerCommand(KEY_DELETE_COMMAND, onDelete, COMMAND_PRIORITY_LOW), + editor.registerCommand(KEY_BACKSPACE_COMMAND, onDelete, COMMAND_PRIORITY_LOW), + ) + }, [clearSelection, editor, isSelected, nodeKey, onDelete, setSelected]) + + useEffect(() => { + const hrElem = editor.getElementByKey(nodeKey) + if (hrElem !== null) { + hrElem.className = isSelected ? 'selected' : '' + } + }, [editor, isSelected, nodeKey]) + + return null +} diff --git a/packages/richtext-lexical/src/field/features/horizontalrule/feature.client.tsx b/packages/richtext-lexical/src/field/features/horizontalrule/feature.client.tsx new file mode 100644 index 0000000000..fcc51f23bd --- /dev/null +++ b/packages/richtext-lexical/src/field/features/horizontalrule/feature.client.tsx @@ -0,0 +1,49 @@ +'use client' + +import type { FeatureProviderProviderClient } from '../types.js' + +import { SlashMenuOption } from '../../lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.js' +import { HorizontalRuleIcon } from '../../lexical/ui/icons/HorizontalRule/index.js' +import { createClientComponent } from '../createClientComponent.js' +import { MarkdownTransformer } from './markdownTransformer.js' +import { HorizontalRuleNode, INSERT_HORIZONTAL_RULE_COMMAND } from './nodes/HorizontalRuleNode.js' +import { HorizontalRulePlugin } from './plugin/index.js' + +const HorizontalRuleFeatureClient: FeatureProviderProviderClient = (props) => { + return { + clientFeatureProps: props, + feature: () => ({ + clientFeatureProps: props, + markdownTransformers: [MarkdownTransformer], + nodes: [HorizontalRuleNode], + plugins: [ + { + Component: HorizontalRulePlugin, + position: 'normal', + }, + ], + slashMenu: { + options: [ + { + displayName: 'Basic', + key: 'basic', + options: [ + new SlashMenuOption(`horizontalrule`, { + Icon: HorizontalRuleIcon, + displayName: `Horizontal Rule`, + keywords: ['hr', 'horizontal rule', 'line', 'separator'], + onSelect: ({ editor }) => { + editor.dispatchCommand(INSERT_HORIZONTAL_RULE_COMMAND, undefined) + }, + }), + ], + }, + ], + }, + }), + } +} + +export const HorizontalRuleFeatureClientComponent = createClientComponent( + HorizontalRuleFeatureClient, +) diff --git a/packages/richtext-lexical/src/field/features/horizontalrule/feature.server.ts b/packages/richtext-lexical/src/field/features/horizontalrule/feature.server.ts new file mode 100644 index 0000000000..ce24ba2936 --- /dev/null +++ b/packages/richtext-lexical/src/field/features/horizontalrule/feature.server.ts @@ -0,0 +1,37 @@ +import type { HTMLConverter } from '../converters/html/converter/types.js' +import type { FeatureProviderProviderServer } from '../types.js' +import type { SerializedHorizontalRuleNode } from './nodes/HorizontalRuleNode.js' + +import { HorizontalRuleFeatureClientComponent } from './feature.client.js' +import { MarkdownTransformer } from './markdownTransformer.js' +import { HorizontalRuleNode } from './nodes/HorizontalRuleNode.js' + +export const HorizontalRuleFeature: FeatureProviderProviderServer = ( + props, +) => { + return { + feature: () => { + return { + ClientComponent: HorizontalRuleFeatureClientComponent, + clientFeatureProps: null, + markdownTransformers: [MarkdownTransformer], + nodes: [ + { + converters: { + html: { + converter: () => { + return `
` + }, + nodeTypes: [HorizontalRuleNode.getType()], + } as HTMLConverter, + }, + node: HorizontalRuleNode, + }, + ], + serverFeatureProps: props, + } + }, + key: 'horizontalrule', + serverFeatureProps: props, + } +} diff --git a/packages/richtext-lexical/src/field/features/horizontalrule/markdownTransformer.ts b/packages/richtext-lexical/src/field/features/horizontalrule/markdownTransformer.ts new file mode 100644 index 0000000000..dfc94ddc15 --- /dev/null +++ b/packages/richtext-lexical/src/field/features/horizontalrule/markdownTransformer.ts @@ -0,0 +1,26 @@ +import type { ElementTransformer } from '@lexical/markdown' + +import { + $createHorizontalRuleNode, + $isHorizontalRuleNode, + HorizontalRuleNode, +} from './nodes/HorizontalRuleNode.js' + +export const MarkdownTransformer: ElementTransformer = { + type: 'element', + dependencies: [HorizontalRuleNode], + export: (node, exportChildren) => { + if (!$isHorizontalRuleNode(node)) { + return null + } + return '---' + }, + // match --- + regExp: /^---\s*$/, + replace: (parentNode) => { + const node = $createHorizontalRuleNode() + if (node) { + parentNode.replace(node) + } + }, +} diff --git a/packages/richtext-lexical/src/field/features/horizontalrule/nodes/HorizontalRuleNode.tsx b/packages/richtext-lexical/src/field/features/horizontalrule/nodes/HorizontalRuleNode.tsx new file mode 100644 index 0000000000..8d336a0473 --- /dev/null +++ b/packages/richtext-lexical/src/field/features/horizontalrule/nodes/HorizontalRuleNode.tsx @@ -0,0 +1,123 @@ +import type { + DOMConversionMap, + DOMConversionOutput, + DOMExportOutput, + LexicalCommand, + LexicalNode, + SerializedLexicalNode, +} from 'lexical' + +import lexicalImport from 'lexical' +const { $applyNodeReplacement, DecoratorNode, createCommand } = lexicalImport +import * as React from 'react' + +const HorizontalRuleComponent = React.lazy(() => + import('../component/index.js').then((module) => ({ + default: module.HorizontalRuleComponent, + })), +) + +/** + * Serialized representation of a horizontal rule node. Serialized = converted to JSON. This is what is stored in the database / in the lexical editor state. + */ +export type SerializedHorizontalRuleNode = SerializedLexicalNode + +export const INSERT_HORIZONTAL_RULE_COMMAND: LexicalCommand = createCommand( + 'INSERT_HORIZONTAL_RULE_COMMAND', +) + +/** + * This node is a DecoratorNode. DecoratorNodes allow you to render React components in the editor. + * + * They need both createDom and decorate functions. createDom => outside of the html. decorate => React Component inside of the html. + * + * If we used DecoratorBlockNode instead, we would only need a decorate method + */ +export class HorizontalRuleNode extends DecoratorNode { + static clone(node: HorizontalRuleNode): HorizontalRuleNode { + return new HorizontalRuleNode(node.__key) + } + + static getType(): string { + return 'horizontalrule' + } + + /** + * Defines what happens if you copy an hr element from another page and paste it into the lexical editor + * + * This also determines the behavior of lexical's internal HTML -> Lexical converter + */ + static importDOM(): DOMConversionMap | null { + return { + hr: () => ({ + conversion: convertHorizontalRuleElement, + priority: 0, + }), + } + } + + /** + * The data for this node is stored serialized as JSON. This is the "load function" of that node: it takes the saved data and converts it into a node. + */ + static importJSON(serializedNode: SerializedHorizontalRuleNode): HorizontalRuleNode { + return $createHorizontalRuleNode() + } + + /** + * Determines how the hr element is rendered in the lexical editor. This is only the "initial" / "outer" HTML element. + */ + createDOM(): HTMLElement { + return document.createElement('hr') + } + + /** + * Allows you to render a React component within whatever createDOM returns. + */ + decorate(): React.ReactElement { + return + } + + /** + * Opposite of importDOM, this function defines what happens when you copy an hr element from the lexical editor and paste it into another page. + * + * This also determines the behavior of lexical's internal Lexical -> HTML converter + */ + exportDOM(): DOMExportOutput { + return { element: document.createElement('hr') } + } + /** + * Opposite of importJSON. This determines what data is saved in the database / in the lexical editor state. + */ + exportJSON(): SerializedLexicalNode { + return { + type: 'horizontalrule', + version: 1, + } + } + + getTextContent(): string { + return '\n' + } + + isInline(): false { + return false + } + + updateDOM(): boolean { + return false + } +} + +function convertHorizontalRuleElement(): DOMConversionOutput { + return { node: $createHorizontalRuleNode() } +} + +export function $createHorizontalRuleNode(): HorizontalRuleNode { + return $applyNodeReplacement(new HorizontalRuleNode()) +} + +export function $isHorizontalRuleNode( + node: LexicalNode | null | undefined, +): node is HorizontalRuleNode { + return node instanceof HorizontalRuleNode +} diff --git a/packages/richtext-lexical/src/field/features/horizontalrule/plugin/index.scss b/packages/richtext-lexical/src/field/features/horizontalrule/plugin/index.scss new file mode 100644 index 0000000000..5b683225cc --- /dev/null +++ b/packages/richtext-lexical/src/field/features/horizontalrule/plugin/index.scss @@ -0,0 +1,20 @@ +@import '../../../../scss/styles.scss'; + +hr { + padding: 2px 2px; + border: none; + margin: 1rem 0; + cursor: pointer; +} + +hr:after { + content: ''; + display: block; + height: 2px; + background-color: var(--theme-elevation-250); +} + +hr.selected { + outline: 2px solid var(--theme-success-500); + user-select: none; +} diff --git a/packages/richtext-lexical/src/field/features/horizontalrule/plugin/index.tsx b/packages/richtext-lexical/src/field/features/horizontalrule/plugin/index.tsx new file mode 100644 index 0000000000..98fe12beee --- /dev/null +++ b/packages/richtext-lexical/src/field/features/horizontalrule/plugin/index.tsx @@ -0,0 +1,48 @@ +'use client' + +import lexicalComposerContextImport from '@lexical/react/LexicalComposerContext.js' +const { useLexicalComposerContext } = lexicalComposerContextImport +import lexicalUtilsImport from '@lexical/utils' +const { $insertNodeToNearestRoot } = lexicalUtilsImport + +import lexicalImport from 'lexical' +const { $getSelection, $isRangeSelection, COMMAND_PRIORITY_EDITOR } = lexicalImport +import { useEffect } from 'react' + +import { + $createHorizontalRuleNode, + INSERT_HORIZONTAL_RULE_COMMAND, +} from '../nodes/HorizontalRuleNode.js' +import './index.scss' + +/** + * Registers the INSERT_HORIZONTAL_RULE_COMMAND lexical command and defines the behavior for when it is called. + */ +export function HorizontalRulePlugin(): null { + const [editor] = useLexicalComposerContext() + + useEffect(() => { + return editor.registerCommand( + INSERT_HORIZONTAL_RULE_COMMAND, + (type) => { + const selection = $getSelection() + + if (!$isRangeSelection(selection)) { + return false + } + + const focusNode = selection.focus.getNode() + + if (focusNode !== null) { + const horizontalRuleNode = $createHorizontalRuleNode() + $insertNodeToNearestRoot(horizontalRuleNode) + } + + return true + }, + COMMAND_PRIORITY_EDITOR, + ) + }, [editor]) + + return null +} diff --git a/packages/richtext-lexical/src/field/features/link/drawer/baseFields.ts b/packages/richtext-lexical/src/field/features/link/drawer/baseFields.ts index 2d2a10929f..3aa8ae89fd 100644 --- a/packages/richtext-lexical/src/field/features/link/drawer/baseFields.ts +++ b/packages/richtext-lexical/src/field/features/link/drawer/baseFields.ts @@ -2,21 +2,8 @@ import type { User } from 'payload/auth' import type { Config } from 'payload/config' import type { Field, RadioField, TextField } from 'payload/types' -import { extractTranslations } from 'payload/utilities' - import { validateUrl } from '../../../lexical/utils/url.js' -const translations = extractTranslations([ - 'fields:textToDisplay', - 'fields:linkType', - 'fields:chooseBetweenCustomTextOrDocument', - 'fields:customURL', - 'fields:internalLink', - 'fields:enterURL', - 'fields:chooseDocumentToLink', - 'fields:openInNewTab', -]) - export const getBaseFields = ( config: Config, enabledCollections: false | string[], @@ -49,7 +36,7 @@ export const getBaseFields = ( { name: 'text', type: 'text', - label: translations['fields:textToDisplay'], + label: ({ t }) => t('fields:textToDisplay'), required: true, }, { @@ -68,13 +55,13 @@ export const getBaseFields = ( name: 'linkType', type: 'radio', admin: { - description: translations['fields:chooseBetweenCustomTextOrDocument'], + description: ({ t }) => t('fields:chooseBetweenCustomTextOrDocument'), }, defaultValue: 'custom', - label: translations['fields:linkType'], + label: ({ t }) => t('fields:linkType'), options: [ { - label: translations['fields:customURL'], + label: ({ t }) => t('fields:customURL'), value: 'custom', }, ], @@ -83,7 +70,7 @@ export const getBaseFields = ( { name: 'url', type: 'text', - label: translations['fields:enterURL'], + label: ({ t }) => t('fields:enterURL'), required: true, validate: (value: string) => { if (value && !validateUrl(value)) { @@ -98,7 +85,7 @@ export const getBaseFields = ( // Only display internal link-specific fields / options / conditions if there are enabled relations if (enabledRelations?.length) { ;(baseFields[1].fields[0] as RadioField).options.push({ - label: translations['fields:internalLink'], + label: ({ t }) => t('fields:internalLink'), value: 'internal', }) ;(baseFields[1].fields[1] as TextField).admin = { @@ -123,7 +110,7 @@ export const getBaseFields = ( } } : null, - label: translations['fields:chooseDocumentToLink'], + label: ({ t }) => t('fields:chooseDocumentToLink'), relationTo: enabledRelations, required: true, }) @@ -132,7 +119,7 @@ export const getBaseFields = ( baseFields[1].fields.push({ name: 'newTab', type: 'checkbox', - label: translations['fields:openInNewTab'], + label: ({ t }) => t('fields:openInNewTab'), }) return baseFields as Field[] diff --git a/packages/richtext-lexical/src/field/features/link/drawer/index.tsx b/packages/richtext-lexical/src/field/features/link/drawer/index.tsx index 20a651cfcf..11efc18552 100644 --- a/packages/richtext-lexical/src/field/features/link/drawer/index.tsx +++ b/packages/richtext-lexical/src/field/features/link/drawer/index.tsx @@ -87,9 +87,9 @@ export const LinkDrawer: React.FC = ({ drawerSlug, handleModalSubmit, sta {t('general:submit')} diff --git a/packages/richtext-lexical/src/field/features/link/feature.server.ts b/packages/richtext-lexical/src/field/features/link/feature.server.ts index 91ec370e3d..42acc66c6c 100644 --- a/packages/richtext-lexical/src/field/features/link/feature.server.ts +++ b/packages/richtext-lexical/src/field/features/link/feature.server.ts @@ -1,9 +1,8 @@ import type { I18n } from '@payloadcms/translations' import type { SanitizedConfig } from 'payload/config' -import type { FieldWithRichTextRequiredEditor } from 'payload/types' +import type { Field, FieldWithRichTextRequiredEditor } from 'payload/types' -import { initI18n } from '@payloadcms/translations' -import { translations } from '@payloadcms/translations/client' +import { traverseFields } from '@payloadcms/next/utilities' import type { HTMLConverter } from '../converters/html/converter/types.js' import type { FeatureProviderProviderServer } from '../types.js' @@ -67,18 +66,34 @@ export const LinkFeature: FeatureProviderProviderServer { - const i18n = initI18n({ config: config.i18n, context: 'client', translations }) - - return { - fields: transformExtraFields( - props.fields, - config, - i18n, - props.enabledCollections, - props.disabledCollections, - ), + generateSchemaMap: ({ config, i18n, props }) => { + if (!props?.fields || !Array.isArray(props.fields) || props.fields.length === 0) { + return null } + const schemaMap = new Map() + + const validRelationships = config.collections.map((c) => c.slug) || [] + + const transformedFields = transformExtraFields( + props.fields, + config, + i18n, + props.enabledCollections, + props.disabledCollections, + ) + + schemaMap.set('fields', transformedFields) + + traverseFields({ + config, + fields: transformedFields, + i18n, + schemaMap, + schemaPath: 'fields', + validRelationships, + }) + + return schemaMap }, nodes: [ { diff --git a/packages/richtext-lexical/src/field/features/link/nodes/LinkNode.ts b/packages/richtext-lexical/src/field/features/link/nodes/LinkNode.ts index 7ba74f1846..5846d8aa96 100644 --- a/packages/richtext-lexical/src/field/features/link/nodes/LinkNode.ts +++ b/packages/richtext-lexical/src/field/features/link/nodes/LinkNode.ts @@ -246,10 +246,10 @@ export const TOGGLE_LINK_COMMAND: LexicalCommand = export function toggleLink(payload: LinkPayload): void { const selection = $getSelection() - if (!$isRangeSelection(selection)) { + if (!$isRangeSelection(selection) && !payload.selectedNodes.length) { return } - const nodes = selection.extract() + const nodes = $isRangeSelection(selection) ? selection.extract() : payload.selectedNodes if (payload === null) { // Remove LinkNodes diff --git a/packages/richtext-lexical/src/field/features/link/plugins/floatingLinkEditor/LinkEditor/index.tsx b/packages/richtext-lexical/src/field/features/link/plugins/floatingLinkEditor/LinkEditor/index.tsx index 2ec17c9179..16179480c0 100644 --- a/packages/richtext-lexical/src/field/features/link/plugins/floatingLinkEditor/LinkEditor/index.tsx +++ b/packages/richtext-lexical/src/field/features/link/plugins/floatingLinkEditor/LinkEditor/index.tsx @@ -8,6 +8,8 @@ const { useLexicalComposerContext } = lexicalComposerContextImport import lexicalUtilsImport from '@lexical/utils' const { $findMatchingParent, mergeRegister } = lexicalUtilsImport +import type { LexicalNode } from 'lexical' + import { getTranslation } from '@payloadcms/translations' import lexicalImport from 'lexical' const { @@ -57,6 +59,8 @@ export function LinkEditor({ anchorElem }: { anchorElem: HTMLElement }): React.R const { closeModal, toggleModal } = useModal() const editDepth = useEditDepth() const [isLink, setIsLink] = useState(false) + const [selectedNodes, setSelectedNodes] = useState([]) + const [isAutoLink, setIsAutoLink] = useState(false) const drawerSlug = formatDrawerSlug({ @@ -78,6 +82,7 @@ export function LinkEditor({ anchorElem }: { anchorElem: HTMLElement }): React.R setIsAutoLink(false) setLinkUrl('') setLinkLabel('') + setSelectedNodes([]) return } @@ -115,6 +120,8 @@ export function LinkEditor({ anchorElem }: { anchorElem: HTMLElement }): React.R setStateData(data) setIsLink(true) + setSelectedNodes(selection ? selection?.getNodes() : []) + if ($isAutoLinkNode(linkParent)) { setIsAutoLink(true) } else { @@ -291,18 +298,26 @@ export function LinkEditor({ anchorElem }: { anchorElem: HTMLElement }): React.R const newLinkPayload: LinkPayload = data as LinkPayload + newLinkPayload.selectedNodes = selectedNodes + // See: https://github.com/facebook/lexical/pull/5536. This updates autolink nodes to link nodes whenever a change was made (which is good!). editor.update(() => { const selection = $getSelection() + let linkParent = null if ($isRangeSelection(selection)) { - const parent = getSelectedNode(selection).getParent() - if ($isAutoLinkNode(parent)) { - const linkNode = $createLinkNode({ - fields: newLinkPayload.fields, - }) - parent.replace(linkNode, true) + linkParent = getSelectedNode(selection).getParent() + } else { + if (selectedNodes.length) { + linkParent = selectedNodes[0].getParent() } } + + if (linkParent && $isAutoLinkNode(linkParent)) { + const linkNode = $createLinkNode({ + fields: newLinkPayload.fields, + }) + linkParent.replace(linkNode, true) + } }) // Needs to happen AFTER a potential auto link => link node conversion, as otherwise, the updated text to display may be lost due to diff --git a/packages/richtext-lexical/src/field/features/link/plugins/floatingLinkEditor/types.ts b/packages/richtext-lexical/src/field/features/link/plugins/floatingLinkEditor/types.ts index 2c9d2a3bee..30e103f97d 100644 --- a/packages/richtext-lexical/src/field/features/link/plugins/floatingLinkEditor/types.ts +++ b/packages/richtext-lexical/src/field/features/link/plugins/floatingLinkEditor/types.ts @@ -1,3 +1,5 @@ +import type { LexicalNode } from 'lexical' + import type { LinkFields } from '../../nodes/types.js' /** @@ -6,6 +8,7 @@ import type { LinkFields } from '../../nodes/types.js' */ export type LinkPayload = { fields: LinkFields + selectedNodes?: LexicalNode[] /** * The text content of the link node - will be displayed in the drawer */ diff --git a/packages/richtext-lexical/src/field/features/link/plugins/floatingLinkEditor/utilities.ts b/packages/richtext-lexical/src/field/features/link/plugins/floatingLinkEditor/utilities.ts index f10426527f..67d5bffafa 100644 --- a/packages/richtext-lexical/src/field/features/link/plugins/floatingLinkEditor/utilities.ts +++ b/packages/richtext-lexical/src/field/features/link/plugins/floatingLinkEditor/utilities.ts @@ -7,6 +7,7 @@ import { getBaseFields } from '../../drawer/baseFields.js' /** * This function is run to enrich the basefields which every link has with potential, custom user-added fields. */ +// eslint-disable-next-line @typescript-eslint/require-await export function transformExtraFields( customFieldSchema: | ((args: { config: SanitizedConfig; defaultFields: Field[]; i18n: I18n }) => Field[]) diff --git a/packages/richtext-lexical/src/field/features/lists/htmlConverter.ts b/packages/richtext-lexical/src/field/features/lists/htmlConverter.ts index 490b57b5a9..8e197c09c0 100644 --- a/packages/richtext-lexical/src/field/features/lists/htmlConverter.ts +++ b/packages/richtext-lexical/src/field/features/lists/htmlConverter.ts @@ -1,6 +1,7 @@ import type { SerializedListItemNode, SerializedListNode } from '@lexical/list' import lexicalListImport from '@lexical/list' +import { v4 as uuidv4 } from 'uuid' const { ListItemNode, ListNode } = lexicalListImport import type { HTMLConverter } from '../converters/html/converter/types.js' @@ -19,13 +20,15 @@ export const ListHTMLConverter: HTMLConverter = { payload, }) - return `<${node?.tag} class="${node?.listType}">${childrenText}` + return `<${node?.tag} class="list-${node?.listType}">${childrenText}` }, nodeTypes: [ListNode.getType()], } export const ListItemHTMLConverter: HTMLConverter = { converter: async ({ converters, node, parent, payload }) => { + const hasSubLists = node.children.some((child) => child.type === 'list') + const childrenText = await convertLexicalNodesToHTML({ converters, lexicalNodes: node.children, @@ -37,19 +40,30 @@ export const ListItemHTMLConverter: HTMLConverter = { }) if ('listType' in parent && parent?.listType === 'check') { + const uuid = uuidv4() + return `` } else { - return `
  • ${childrenText}
  • ` + return `
  • ${childrenText}
  • ` } }, nodeTypes: [ListItemNode.getType()], diff --git a/packages/richtext-lexical/src/field/features/relationship/utils/EnabledRelationshipsCondition.tsx b/packages/richtext-lexical/src/field/features/relationship/utils/EnabledRelationshipsCondition.tsx index f3d1c72531..8bcf4639c2 100644 --- a/packages/richtext-lexical/src/field/features/relationship/utils/EnabledRelationshipsCondition.tsx +++ b/packages/richtext-lexical/src/field/features/relationship/utils/EnabledRelationshipsCondition.tsx @@ -19,7 +19,7 @@ type FilteredCollectionsT = ( const filterRichTextCollections: FilteredCollectionsT = (collections, options) => { return collections.filter(({ slug, admin: { enableRichTextRelationship }, upload }) => { - if (options.visibleEntities.collections.includes(slug)) { + if (!options.visibleEntities.collections.includes(slug)) { return false } diff --git a/packages/richtext-lexical/src/field/features/types.ts b/packages/richtext-lexical/src/field/features/types.ts index f55c6140a4..5a25b64c03 100644 --- a/packages/richtext-lexical/src/field/features/types.ts +++ b/packages/richtext-lexical/src/field/features/types.ts @@ -1,4 +1,5 @@ import type { Transformer } from '@lexical/markdown' +import type { I18n } from '@payloadcms/translations' import type { JSONSchema4 } from 'json-schema' import type { Klass, LexicalEditor, LexicalNode, SerializedEditorState } from 'lexical' import type { SerializedLexicalNode } from 'lexical' @@ -178,6 +179,7 @@ export type ServerFeature = { clientFeatureProps?: ClientFeatureProps generateComponentMap?: (args: { config: SanitizedConfig + i18n: I18n props: ServerProps schemaPath: string }) => { @@ -185,12 +187,11 @@ export type ServerFeature = { } generateSchemaMap?: (args: { config: SanitizedConfig + i18n: I18n props: ServerProps schemaMap: Map schemaPath: string - }) => { - [key: string]: Field[] - } + }) => Map | null generatedTypes?: { modifyOutputSchema: ({ collectionIDFieldTypes, diff --git a/packages/richtext-lexical/src/field/features/upload/component/ExtraFieldsDrawer/index.tsx b/packages/richtext-lexical/src/field/features/upload/component/ExtraFieldsDrawer/index.tsx index cc9752e5eb..194d619f8b 100644 --- a/packages/richtext-lexical/src/field/features/upload/component/ExtraFieldsDrawer/index.tsx +++ b/packages/richtext-lexical/src/field/features/upload/component/ExtraFieldsDrawer/index.tsx @@ -140,9 +140,9 @@ export const ExtraFieldsUploadDrawer: React.FC< {t('fields:saveChanges')} diff --git a/packages/richtext-lexical/src/field/features/upload/component/index.tsx b/packages/richtext-lexical/src/field/features/upload/component/index.tsx index c3f05c0c83..0d373045ed 100644 --- a/packages/richtext-lexical/src/field/features/upload/component/index.tsx +++ b/packages/richtext-lexical/src/field/features/upload/component/index.tsx @@ -173,11 +173,13 @@ const Component: React.FC = (props) => {
    {value?.id && } - + {hasExtraFields ? ( + + ) : null}
    ) } diff --git a/packages/richtext-lexical/src/field/features/upload/feature.server.ts b/packages/richtext-lexical/src/field/features/upload/feature.server.ts index b6fbaab83a..cc9f484d46 100644 --- a/packages/richtext-lexical/src/field/features/upload/feature.server.ts +++ b/packages/richtext-lexical/src/field/features/upload/feature.server.ts @@ -1,5 +1,7 @@ import type { Field, FieldWithRichTextRequiredEditor, Payload } from 'payload/types' +import { traverseFields } from '@payloadcms/next/utilities' + import type { HTMLConverter } from '../converters/html/converter/types.js' import type { FeatureProviderProviderServer } from '../types.js' import type { UploadFeaturePropsClient } from './feature.client.js' @@ -46,18 +48,27 @@ export const UploadFeature: FeatureProviderProviderServer< return { ClientComponent: UploadFeatureClientComponent, clientFeatureProps: clientProps, - generateSchemaMap: ({ props }) => { - if (!props?.collections) return {} + generateSchemaMap: ({ config, i18n, props }) => { + if (!props?.collections) return null - const map: { - [key: string]: Field[] - } = {} + const schemaMap = new Map() + const validRelationships = config.collections.map((c) => c.slug) || [] for (const collection in props.collections) { - map[collection] = props.collections[collection].fields + if (props.collections[collection].fields?.length) { + schemaMap.set(collection, props.collections[collection].fields) + traverseFields({ + config, + fields: props.collections[collection].fields, + i18n, + schemaMap, + schemaPath: collection, + validRelationships, + }) + } } - return map + return schemaMap }, nodes: [ { @@ -65,10 +76,22 @@ export const UploadFeature: FeatureProviderProviderServer< html: { converter: async ({ node, payload }) => { if (payload) { - const uploadDocument: any = await payload.findByID({ - id: node.value.id, - collection: node.relationTo, - }) + let uploadDocument: any + try { + uploadDocument = await payload.findByID({ + id: node.value.id, + collection: node.relationTo, + }) + } catch (ignored) { + // eslint-disable-next-line no-console + console.error( + 'Lexical upload node HTML converter: error fetching upload file', + ignored, + 'Node:', + node, + ) + return `` + } const url: string = getAbsoluteURL(uploadDocument?.url as string, payload) diff --git a/packages/richtext-lexical/src/field/features/upload/validate.ts b/packages/richtext-lexical/src/field/features/upload/validate.ts index 1672ec6de2..e7979f4dab 100644 --- a/packages/richtext-lexical/src/field/features/upload/validate.ts +++ b/packages/richtext-lexical/src/field/features/upload/validate.ts @@ -1,5 +1,4 @@ -import { fieldAffectsData } from 'payload/types' -import { getIDType, isValidID } from 'payload/utilities' +import { isValidID } from 'payload/utilities' import type { NodeValidation } from '../types.js' import type { SerializedUploadNode } from './nodes/UploadNode.js' @@ -11,21 +10,14 @@ export const uploadValidation = (): NodeValidation => { node, validation: { options: { - req: { - payload: { config, db }, - t, - }, + req: { payload, t }, }, }, }) => { if (!CAN_USE_DOM) { - const idField = config.collections - .find(({ slug }) => slug === node.relationTo) - .fields.find((field) => fieldAffectsData(field) && field.name === 'id') + const idType = payload.collections[node.relationTo].customIDType || payload.db.defaultIDType - const type = getIDType(idField, db?.defaultIDType) - - if (!isValidID(node.value?.id, type)) { + if (!isValidID(node.value?.id, idType)) { return t('validation:validUploadID') } } diff --git a/packages/richtext-lexical/src/field/lexical/config/server/default.ts b/packages/richtext-lexical/src/field/lexical/config/server/default.ts index 688a254005..15052ff33a 100644 --- a/packages/richtext-lexical/src/field/lexical/config/server/default.ts +++ b/packages/richtext-lexical/src/field/lexical/config/server/default.ts @@ -13,6 +13,7 @@ import { SubscriptFeature } from '../../../features/format/subscript/feature.ser import { SuperscriptFeature } from '../../../features/format/superscript/feature.server.js' import { UnderlineFeature } from '../../../features/format/underline/feature.server.js' import { HeadingFeature } from '../../../features/heading/feature.server.js' +import { HorizontalRuleFeature } from '../../../features/horizontalrule/feature.server.js' import { IndentFeature } from '../../../features/indent/feature.server.js' import { LinkFeature } from '../../../features/link/feature.server.js' import { CheckListFeature } from '../../../features/lists/checklist/feature.server.js' @@ -48,6 +49,7 @@ export const defaultEditorFeatures: FeatureProviderServer[] = RelationshipFeature(), BlockQuoteFeature(), UploadFeature(), + HorizontalRuleFeature(), ] export const defaultEditorConfig: ServerEditorConfig = { diff --git a/packages/richtext-lexical/src/field/lexical/plugins/handles/AddBlockHandlePlugin/index.tsx b/packages/richtext-lexical/src/field/lexical/plugins/handles/AddBlockHandlePlugin/index.tsx index 9c758c99fd..8e9770bcd3 100644 --- a/packages/richtext-lexical/src/field/lexical/plugins/handles/AddBlockHandlePlugin/index.tsx +++ b/packages/richtext-lexical/src/field/lexical/plugins/handles/AddBlockHandlePlugin/index.tsx @@ -174,7 +174,9 @@ function useAddBlockHandle( pageX < left - horizontalBuffer || pageX > right + horizontalBuffer ) { - setHoveredElement(null) + if (hoveredElement !== null) { + setHoveredElement(null) + } return } @@ -198,10 +200,12 @@ function useAddBlockHandle( if (!_emptyBlockElem) { return } - setHoveredElement({ - elem: _emptyBlockElem, - node: blockNode, - }) + if (hoveredElement?.node !== blockNode || hoveredElement?.elem !== _emptyBlockElem) { + setHoveredElement({ + elem: _emptyBlockElem, + node: blockNode, + }) + } } // Since the draggableBlockElem is outside the actual editor, we need to listen to the document @@ -212,7 +216,7 @@ function useAddBlockHandle( return () => { document?.removeEventListener('mousemove', onDocumentMouseMove) } - }, [scrollerElem, anchorElem, editor]) + }, [scrollerElem, anchorElem, editor, hoveredElement]) useEffect(() => { if (menuRef.current && hoveredElement?.node) { diff --git a/packages/richtext-lexical/src/field/lexical/plugins/handles/DraggableBlockPlugin/index.tsx b/packages/richtext-lexical/src/field/lexical/plugins/handles/DraggableBlockPlugin/index.tsx index f1ac8fbc8b..5bfef8f827 100644 --- a/packages/richtext-lexical/src/field/lexical/plugins/handles/DraggableBlockPlugin/index.tsx +++ b/packages/richtext-lexical/src/field/lexical/plugins/handles/DraggableBlockPlugin/index.tsx @@ -159,7 +159,9 @@ function useDraggableBlockMenu( return } - setDraggableBlockElem(_draggableBlockElem) + if (draggableBlockElem !== _draggableBlockElem) { + setDraggableBlockElem(_draggableBlockElem) + } } // Since the draggableBlockElem is outside the actual editor, we need to listen to the document @@ -170,7 +172,7 @@ function useDraggableBlockMenu( return () => { document?.removeEventListener('mousemove', onDocumentMouseMove) } - }, [scrollerElem, anchorElem, editor, calculateDistanceFromScrollerElem]) + }, [scrollerElem, anchorElem, editor, calculateDistanceFromScrollerElem, draggableBlockElem]) useEffect(() => { if (menuRef.current) { @@ -324,7 +326,9 @@ function useDraggableBlockMenu( } else { targetNode.insertBefore(draggedNode) }*/ - setDraggableBlockElem(null) + if (draggableBlockElem !== null) { + setDraggableBlockElem(null) + } }) return true diff --git a/packages/richtext-lexical/src/field/lexical/plugins/handles/utils/doesLineHeightAffectElement.ts b/packages/richtext-lexical/src/field/lexical/plugins/handles/utils/doesLineHeightAffectElement.ts new file mode 100644 index 0000000000..60f45b69db --- /dev/null +++ b/packages/richtext-lexical/src/field/lexical/plugins/handles/utils/doesLineHeightAffectElement.ts @@ -0,0 +1,48 @@ +const replacedElements = [ + 'IMG', + 'INPUT', + 'TEXTAREA', + 'SELECT', + 'BUTTON', + 'VIDEO', + 'OBJECT', + 'EMBED', + 'IFRAME', + 'HR', +] + +/** + * From ChatGPT, only that verified it works for HR elements. + * + * HTML Elements can have CSS lineHeight applied to them, but it doesn't always affect the visual layout. + * This function checks if the line-height property has an effect on the element's layout. + * @param htmlElem + */ +export function doesLineHeightAffectElement(htmlElem: HTMLElement) { + if (!htmlElem) return false + + // Check for replaced elements, elements that typically don't support line-height adjustments, + // and elements without visible content + + if ( + replacedElements.includes(htmlElem.tagName) || + htmlElem.offsetHeight === 0 || + htmlElem.offsetWidth === 0 + ) { + return false + } + + // Check for specific CSS properties that negate line-height's visual effects + const style = window.getComputedStyle(htmlElem) + if ( + style.display === 'table-cell' || + style.position === 'absolute' || + style.visibility === 'hidden' || + style.opacity === '0' + ) { + return false + } + + // This is a basic check, and there can be more complex scenarios where line-height doesn't have an effect. + return true +} diff --git a/packages/richtext-lexical/src/field/lexical/plugins/handles/utils/setHandlePosition.ts b/packages/richtext-lexical/src/field/lexical/plugins/handles/utils/setHandlePosition.ts index 3650bfef08..2616d6c603 100644 --- a/packages/richtext-lexical/src/field/lexical/plugins/handles/utils/setHandlePosition.ts +++ b/packages/richtext-lexical/src/field/lexical/plugins/handles/utils/setHandlePosition.ts @@ -1,27 +1,41 @@ +import { doesLineHeightAffectElement } from './doesLineHeightAffectElement.js' + export function setHandlePosition( targetElem: HTMLElement | null, - floatingElem: HTMLElement, + handleElem: HTMLElement, anchorElem: HTMLElement, leftOffset: number = 0, // SPACE ) { if (!targetElem) { - floatingElem.style.opacity = '0' - floatingElem.style.transform = 'translate(-10000px, -10000px)' + handleElem.style.opacity = '0' + handleElem.style.transform = 'translate(-10000px, -10000px)' return } const targetRect = targetElem.getBoundingClientRect() const targetStyle = window.getComputedStyle(targetElem) - const floatingElemRect = floatingElem.getBoundingClientRect() + const floatingElemRect = handleElem.getBoundingClientRect() const anchorElementRect = anchorElem.getBoundingClientRect() - const top = - targetRect.top + - (parseInt(targetStyle.lineHeight, 10) - floatingElemRect.height) / 2 - - anchorElementRect.top + let top: number + + const shouldDisplayHandleInCenter = targetRect.height < 60 + + if (!shouldDisplayHandleInCenter) { + // No need to let line height affect the re-positioning of the floating element if line height has no + // visual effect on the element. Otherwise, the floating element will be positioned incorrectly. + const actualLineHeight = doesLineHeightAffectElement(targetElem) + ? parseInt(targetStyle.lineHeight, 10) + : 0 + + top = targetRect.top + (actualLineHeight - floatingElemRect.height) / 2 - anchorElementRect.top + } else { + top = + targetRect.top - floatingElemRect.height / 2 - anchorElementRect.top + targetRect.height / 2 + } const left = leftOffset - floatingElem.style.opacity = '1' - floatingElem.style.transform = `translate(${left}px, ${top}px)` + handleElem.style.opacity = '1' + handleElem.style.transform = `translate(${left}px, ${top}px)` } diff --git a/packages/richtext-lexical/src/field/lexical/theme/EditorTheme.scss b/packages/richtext-lexical/src/field/lexical/theme/EditorTheme.scss index dca9cb358b..f6e4cbb8c4 100644 --- a/packages/richtext-lexical/src/field/lexical/theme/EditorTheme.scss +++ b/packages/richtext-lexical/src/field/lexical/theme/EditorTheme.scss @@ -331,6 +331,10 @@ list-style-position: inside; } + &__ul ul { + margin: 0; + } + &__listItem { margin: 0 0px 0.4em 16px; } diff --git a/packages/richtext-lexical/src/field/lexical/ui/icons/HorizontalRule/index.tsx b/packages/richtext-lexical/src/field/lexical/ui/icons/HorizontalRule/index.tsx new file mode 100644 index 0000000000..efde2454d3 --- /dev/null +++ b/packages/richtext-lexical/src/field/lexical/ui/icons/HorizontalRule/index.tsx @@ -0,0 +1,16 @@ +import React from 'react' + +export const HorizontalRuleIcon: React.FC = () => ( + +) diff --git a/packages/richtext-lexical/src/generateComponentMap.tsx b/packages/richtext-lexical/src/generateComponentMap.tsx index 542cff7e43..8a0bb518a4 100644 --- a/packages/richtext-lexical/src/generateComponentMap.tsx +++ b/packages/richtext-lexical/src/generateComponentMap.tsx @@ -13,7 +13,7 @@ export const getGenerateComponentMap = (args: { resolvedFeatureMap: ResolvedServerFeatureMap }): RichTextAdapter['generateComponentMap'] => - ({ config, schemaPath }) => { + ({ WithServerSideProps, config, i18n, schemaPath }) => { const validRelationships = config.collections.map((c) => c.slug) || [] const componentMap = new Map() @@ -39,6 +39,7 @@ export const getGenerateComponentMap = ) { const components = resolvedFeature.generateComponentMap({ config, + i18n, props: resolvedFeature.serverFeatureProps, schemaPath, }) @@ -49,7 +50,8 @@ export const getGenerateComponentMap = if (Component) { componentMap.set( `feature.${featureKey}.components.${componentKey}`, - - ({ config, schemaMap, schemaPath }) => { + ({ config, i18n, schemaMap, schemaPath }) => { const validRelationships = config.collections.map((c) => c.slug) || [] for (const [featureKey, resolvedFeature] of args.resolvedFeatureMap.entries()) { @@ -20,22 +20,23 @@ export const getGenerateSchemaMap = } const schemas = resolvedFeature.generateSchemaMap({ config, + i18n, props: resolvedFeature.serverFeatureProps, schemaMap, schemaPath, }) - for (const schemaKey in schemas) { - const fields = schemas[schemaKey] + if (schemas) { + for (const [schemaKey, fields] of schemas.entries()) { + const sanitizedFields = sanitizeFields({ + config, + fields: cloneDeep(fields), + requireFieldLevelRichTextEditor: true, + validRelationships, + }) - const sanitizedFields = sanitizeFields({ - config, - fields: cloneDeep(fields), - requireFieldLevelRichTextEditor: true, - validRelationships, - }) - - schemaMap.set(`${schemaPath}.feature.${featureKey}.${schemaKey}`, sanitizedFields) + schemaMap.set(`${schemaPath}.feature.${featureKey}.${schemaKey}`, sanitizedFields) + } } } diff --git a/packages/richtext-lexical/src/index.ts b/packages/richtext-lexical/src/index.ts index a5dd3fe601..ff683312db 100644 --- a/packages/richtext-lexical/src/index.ts +++ b/packages/richtext-lexical/src/index.ts @@ -212,7 +212,11 @@ export function lexicalEditor(props?: LexicalEditorProps): LexicalRichTextAdapte export { AlignFeature } from './field/features/align/feature.server.js' export { BlockQuoteFeature } from './field/features/blockquote/feature.server.js' -export { BlocksFeature, type BlocksFeatureProps } from './field/features/blocks/feature.server.js' +export { + BlocksFeature, + type BlocksFeatureProps, + type LexicalBlock, +} from './field/features/blocks/feature.server.js' export { $createBlockNode, $isBlockNode, diff --git a/packages/richtext-lexical/src/scss/app.scss b/packages/richtext-lexical/src/scss/app.scss index 690f201c5c..d2424f66e0 100644 --- a/packages/richtext-lexical/src/scss/app.scss +++ b/packages/richtext-lexical/src/scss/app.scss @@ -1,4 +1,3 @@ -@import 'fonts'; @import 'styles'; @import './toastify.scss'; @import './colors.scss'; @@ -20,9 +19,9 @@ --theme-overlay: rgba(5, 5, 5, 0.5); --theme-baseline: #{$baseline-px}; --theme-baseline-body-size: #{$baseline-body-size}; - --font-body: 'Suisse Intl', system-ui; + --font-body: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, + sans-serif; --font-mono: monospace; - --font-serif: 'Merriweather', serif; --style-radius-s: #{$style-radius-s}; --style-radius-m: #{$style-radius-m}; diff --git a/packages/richtext-lexical/src/scss/fonts.scss b/packages/richtext-lexical/src/scss/fonts.scss deleted file mode 100644 index f40a8b722e..0000000000 --- a/packages/richtext-lexical/src/scss/fonts.scss +++ /dev/null @@ -1,75 +0,0 @@ -@font-face { - font-family: 'Suisse Intl'; - src: - url('../assets/fonts/SuisseIntl.woff2') format('woff2'), - url('../assets/fonts/SuisseIntl.woff') format('woff'); - font-weight: normal; - font-style: normal; -} - -@font-face { - font-family: 'Suisse Intl'; - src: - url('../assets/fonts/SuisseIntl-Medium.woff2') format('woff2'), - url('../assets/fonts/SuisseIntl-Medium.woff') format('woff'); - font-weight: 500; - font-style: normal; -} - -@font-face { - font-family: 'Suisse Intl'; - src: - url('../assets/fonts/SuisseIntl-SemiBold.woff2') format('woff2'), - url('../assets/fonts/SuisseIntl-SemiBold.woff') format('woff'); - font-weight: 600; - font-style: normal; -} - -@font-face { - font-family: 'Suisse Intl'; - src: - url('../assets/fonts/SuisseIntl-Bold.woff2') format('woff2'), - url('../assets/fonts/SuisseIntl-Bold.woff') format('woff'); - font-weight: bold; - font-style: normal; -} - -@font-face { - font-family: 'Merriweather'; - font-style: normal; - font-weight: 400; - src: - local(''), - url('../assets/fonts/merriweather-v30-latin-regular.woff2') format('woff2'), - url('../assets/fonts/merriweather-v30-latin-regular.woff') format('woff'); -} - -@font-face { - font-family: 'Merriweather'; - font-style: italic; - font-weight: 400; - src: - local(''), - url('../assets/fonts/merriweather-v30-latin-italic.woff2') format('woff2'), - url('../assets/fonts/merriweather-v30-latin-italic.woff') format('woff'); -} - -@font-face { - font-family: 'Merriweather'; - font-style: normal; - font-weight: 900; - src: - local(''), - url('../assets/fonts/merriweather-v30-latin-900.woff2') format('woff2'), - url('../assets/fonts/merriweather-v30-latin-900.woff') format('woff'); -} - -@font-face { - font-family: 'Merriweather'; - font-style: italic; - font-weight: 900; - src: - local(''), - url('../assets/fonts/merriweather-v30-latin-900italic.woff2') format('woff2'), - url('../assets/fonts/merriweather-v30-latin-900italic.woff') format('woff'); -} diff --git a/packages/richtext-lexical/src/scss/vars.scss b/packages/richtext-lexical/src/scss/vars.scss index ce16a434b7..00c7d34f8a 100644 --- a/packages/richtext-lexical/src/scss/vars.scss +++ b/packages/richtext-lexical/src/scss/vars.scss @@ -21,13 +21,6 @@ $baseline: math.div($baseline-px, $baseline-body-size) + rem; @return (math.div($baseline-px, $baseline-body-size) * $multiplier) + rem; } -////////////////////////////// -// FONTS (DEPRECATED. DO NOT USE. PREFER CSS VARIABLES) -////////////////////////////// - -$font-body: 'Suisse Intl' !default; -$font-mono: monospace !default; - ////////////////////////////// // COLORS (DEPRECATED. DO NOT USE. PREFER CSS VARIABLES) ////////////////////////////// diff --git a/packages/richtext-slate/package.json b/packages/richtext-slate/package.json index ad507b8ff0..fd63bb59a8 100644 --- a/packages/richtext-slate/package.json +++ b/packages/richtext-slate/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/richtext-slate", - "version": "3.0.0-alpha.59", + "version": "3.0.0-beta.11", "description": "The officially supported Slate richtext adapter for Payload", "repository": { "type": "git", @@ -50,13 +50,19 @@ } }, "publishConfig": { - "exports": null, + "exports": { + ".": { + "import": "./dist/index.js", + "require": "./dist/index.js", + "types": "./dist/index.d.ts" + } + }, "main": "./dist/index.js", "registry": "https://registry.npmjs.org/", "types": "./dist/index.d.ts" }, "engines": { - "node": ">=18.17.0" + "node": ">=18.20.2" }, "files": [ "dist" diff --git a/packages/richtext-slate/src/field/elements/link/LinkDrawer/baseFields.ts b/packages/richtext-slate/src/field/elements/link/LinkDrawer/baseFields.ts index 6dd9a6d634..95b71395f5 100644 --- a/packages/richtext-slate/src/field/elements/link/LinkDrawer/baseFields.ts +++ b/packages/richtext-slate/src/field/elements/link/LinkDrawer/baseFields.ts @@ -2,41 +2,28 @@ import type { User } from 'payload/auth' import type { Config } from 'payload/config' import type { Field } from 'payload/types' -import { extractTranslations } from 'payload/utilities' - -const translations = extractTranslations([ - 'fields:textToDisplay', - 'fields:linkType', - 'fields:chooseBetweenCustomTextOrDocument', - 'fields:customURL', - 'fields:internalLink', - 'fields:enterURL', - 'fields:chooseDocumentToLink', - 'fields:openInNewTab', -]) - export const getBaseFields = (config: Config): Field[] => [ { name: 'text', type: 'text', - label: translations['fields:textToDisplay'], + label: ({ t }) => t('fields:textToDisplay'), required: true, }, { name: 'linkType', type: 'radio', admin: { - description: translations['fields:chooseBetweenCustomTextOrDocument'], + description: ({ t }) => t('fields:chooseBetweenCustomTextOrDocument'), }, defaultValue: 'custom', - label: translations['fields:linkType'], + label: ({ t }) => t('fields:linkType'), options: [ { - label: translations['fields:customURL'], + label: ({ t }) => t('fields:customURL'), value: 'custom', }, { - label: translations['fields:internalLink'], + label: ({ t }) => t('fields:internalLink'), value: 'internal', }, ], @@ -48,7 +35,7 @@ export const getBaseFields = (config: Config): Field[] => [ admin: { condition: ({ linkType }) => linkType !== 'internal', }, - label: translations['fields:enterURL'], + label: ({ t }) => t('fields:enterURL'), required: true, }, { @@ -66,7 +53,7 @@ export const getBaseFields = (config: Config): Field[] => [ return false } }, - label: translations['fields:chooseDocumentToLink'], + label: ({ t }) => t('fields:chooseDocumentToLink'), relationTo: config.collections .filter(({ admin: { enableRichTextLink, hidden } }) => { if (typeof hidden !== 'function' && hidden) { @@ -80,6 +67,6 @@ export const getBaseFields = (config: Config): Field[] => [ { name: 'newTab', type: 'checkbox', - label: translations['fields:openInNewTab'], + label: ({ t }) => t('fields:openInNewTab'), }, ] diff --git a/packages/richtext-slate/src/generateComponentMap.tsx b/packages/richtext-slate/src/generateComponentMap.tsx index 55f396e3b5..dd6813dcc6 100644 --- a/packages/richtext-slate/src/generateComponentMap.tsx +++ b/packages/richtext-slate/src/generateComponentMap.tsx @@ -1,7 +1,5 @@ import type { RichTextAdapter } from 'payload/types' -import { initI18n } from '@payloadcms/translations' -import { translations } from '@payloadcms/translations/client' import { mapFields } from '@payloadcms/ui/utilities/buildComponentMap' import { sanitizeFields } from 'payload/config' import React from 'react' @@ -16,10 +14,9 @@ import { defaultLeaves as leafTypes } from './field/leaves/index.js' export const getGenerateComponentMap = (args: AdapterArguments): RichTextAdapter['generateComponentMap'] => - ({ config }) => { + ({ WithServerSideProps, config, i18n }) => { const componentMap = new Map() - const i18n = initI18n({ config: config.i18n, context: 'client', translations }) const validRelationships = config.collections.map((c) => c.slug) || [] ;(args?.admin?.leaves || Object.values(leafTypes)).forEach((leaf) => { @@ -76,8 +73,10 @@ export const getGenerateComponentMap = }) const mappedFields = mapFields({ + WithServerSideProps, config, fieldSchema: linkFields, + i18n, readOnly: false, }) @@ -106,8 +105,10 @@ export const getGenerateComponentMap = }) const mappedFields = mapFields({ + WithServerSideProps, config, fieldSchema: uploadFields, + i18n, readOnly: false, }) diff --git a/packages/richtext-slate/src/generateSchemaMap.ts b/packages/richtext-slate/src/generateSchemaMap.ts index 6875b0b609..b04bba1034 100644 --- a/packages/richtext-slate/src/generateSchemaMap.ts +++ b/packages/richtext-slate/src/generateSchemaMap.ts @@ -1,7 +1,5 @@ import type { RichTextAdapter } from 'payload/types' -import { initI18n } from '@payloadcms/translations' -import { translations } from '@payloadcms/translations/client' import { sanitizeFields } from 'payload/config' import type { AdapterArguments, RichTextCustomElement } from './types.js' @@ -13,8 +11,7 @@ import { uploadFieldsSchemaPath } from './field/elements/upload/shared.js' export const getGenerateSchemaMap = (args: AdapterArguments): RichTextAdapter['generateSchemaMap'] => - ({ config, schemaMap, schemaPath }) => { - const i18n = initI18n({ config: config.i18n, context: 'client', translations }) + ({ config, i18n, schemaMap, schemaPath }) => { const validRelationships = config.collections.map((c) => c.slug) || [] ;(args?.admin?.elements || Object.values(elementTypes)).forEach((el) => { diff --git a/packages/richtext-slate/src/scss/app.scss b/packages/richtext-slate/src/scss/app.scss index 690f201c5c..d2424f66e0 100644 --- a/packages/richtext-slate/src/scss/app.scss +++ b/packages/richtext-slate/src/scss/app.scss @@ -1,4 +1,3 @@ -@import 'fonts'; @import 'styles'; @import './toastify.scss'; @import './colors.scss'; @@ -20,9 +19,9 @@ --theme-overlay: rgba(5, 5, 5, 0.5); --theme-baseline: #{$baseline-px}; --theme-baseline-body-size: #{$baseline-body-size}; - --font-body: 'Suisse Intl', system-ui; + --font-body: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, + sans-serif; --font-mono: monospace; - --font-serif: 'Merriweather', serif; --style-radius-s: #{$style-radius-s}; --style-radius-m: #{$style-radius-m}; diff --git a/packages/richtext-slate/src/scss/fonts.scss b/packages/richtext-slate/src/scss/fonts.scss deleted file mode 100644 index f40a8b722e..0000000000 --- a/packages/richtext-slate/src/scss/fonts.scss +++ /dev/null @@ -1,75 +0,0 @@ -@font-face { - font-family: 'Suisse Intl'; - src: - url('../assets/fonts/SuisseIntl.woff2') format('woff2'), - url('../assets/fonts/SuisseIntl.woff') format('woff'); - font-weight: normal; - font-style: normal; -} - -@font-face { - font-family: 'Suisse Intl'; - src: - url('../assets/fonts/SuisseIntl-Medium.woff2') format('woff2'), - url('../assets/fonts/SuisseIntl-Medium.woff') format('woff'); - font-weight: 500; - font-style: normal; -} - -@font-face { - font-family: 'Suisse Intl'; - src: - url('../assets/fonts/SuisseIntl-SemiBold.woff2') format('woff2'), - url('../assets/fonts/SuisseIntl-SemiBold.woff') format('woff'); - font-weight: 600; - font-style: normal; -} - -@font-face { - font-family: 'Suisse Intl'; - src: - url('../assets/fonts/SuisseIntl-Bold.woff2') format('woff2'), - url('../assets/fonts/SuisseIntl-Bold.woff') format('woff'); - font-weight: bold; - font-style: normal; -} - -@font-face { - font-family: 'Merriweather'; - font-style: normal; - font-weight: 400; - src: - local(''), - url('../assets/fonts/merriweather-v30-latin-regular.woff2') format('woff2'), - url('../assets/fonts/merriweather-v30-latin-regular.woff') format('woff'); -} - -@font-face { - font-family: 'Merriweather'; - font-style: italic; - font-weight: 400; - src: - local(''), - url('../assets/fonts/merriweather-v30-latin-italic.woff2') format('woff2'), - url('../assets/fonts/merriweather-v30-latin-italic.woff') format('woff'); -} - -@font-face { - font-family: 'Merriweather'; - font-style: normal; - font-weight: 900; - src: - local(''), - url('../assets/fonts/merriweather-v30-latin-900.woff2') format('woff2'), - url('../assets/fonts/merriweather-v30-latin-900.woff') format('woff'); -} - -@font-face { - font-family: 'Merriweather'; - font-style: italic; - font-weight: 900; - src: - local(''), - url('../assets/fonts/merriweather-v30-latin-900italic.woff2') format('woff2'), - url('../assets/fonts/merriweather-v30-latin-900italic.woff') format('woff'); -} diff --git a/packages/richtext-slate/src/scss/vars.scss b/packages/richtext-slate/src/scss/vars.scss index ce16a434b7..00c7d34f8a 100644 --- a/packages/richtext-slate/src/scss/vars.scss +++ b/packages/richtext-slate/src/scss/vars.scss @@ -21,13 +21,6 @@ $baseline: math.div($baseline-px, $baseline-body-size) + rem; @return (math.div($baseline-px, $baseline-body-size) * $multiplier) + rem; } -////////////////////////////// -// FONTS (DEPRECATED. DO NOT USE. PREFER CSS VARIABLES) -////////////////////////////// - -$font-body: 'Suisse Intl' !default; -$font-mono: monospace !default; - ////////////////////////////// // COLORS (DEPRECATED. DO NOT USE. PREFER CSS VARIABLES) ////////////////////////////// diff --git a/packages/translations/README.md b/packages/translations/README.md index 5f069af5fd..a6904beb5d 100644 --- a/packages/translations/README.md +++ b/packages/translations/README.md @@ -1,14 +1,13 @@ # Payload Translations -These are the translations for Payload. Translations are used on both the server and the client. The admin panel uses translations to display text to the user in their selected language. The server uses translations when sending API responses. +The home of Payloads API and Admin Panel translations. ## How to contribute #### Updating a translation -1. Open the language file you wish to edit located within the `src/all` folder -2. Update the translation value -3. Run one of the following: +1. Update the translation value +2. Run one of the following: ```sh yarn build // or @@ -19,9 +18,8 @@ These are the translations for Payload. Translations are used on both the server #### Adding a new translation -1. Add the new translation key/value pair for all languages located in the `src/all` folder -2. Open the `writeTranslationFiles.ts` file and add the key to either `clientTranslationKeys` or `serverTranslationKeys` depending on where the translation will be used. -3. Run one of the following: +1. Add the new translation key/value pair for **all** languages located in the `/packages/translations/src/languages` folder +2. Run one of the following: ```sh yarn build // or @@ -32,10 +30,9 @@ These are the translations for Payload. Translations are used on both the server #### Adding a new language -1. Create a new JSON file in the `src/all` folder with the language code as the file name (e.g. `en.json` for English) -2. Translate all of the keys in the new file -3. Open the `src/index.ts` file and import your json file and then export it inside the `translations` object -4. Run one of the following: +1. Create a new TS file in the `/packages/translations/src/languages` folder, use the language code as the file name (e.g. `/packages/translations/src/languages/en.ts` for English) +2. Copy all translations from an existing language file and update all of the translations to match your new language +3. Run one of the following: ```sh yarn build // or @@ -43,3 +40,123 @@ These are the translations for Payload. Translations are used on both the server // or pnpm build ``` +4. Import and export your new language file from within `/packages/translations/src/exports/all.ts` +5. Re-export the file from within `/packages/payload/src/exports/i18n/[your-new-language].ts` + +Here is a full list of language keys. Note that these are not all implemented, but if you would like to contribute and add a new language, you can use this list as a reference: + +| Language Code | Language Name | +| -------------- | ------------------------------------------ | +| af | Afrikaans | +| am | Amharic | +| ar-sa | Arabic (Saudi Arabia) | +| as | Assamese | +| az-Latn | Azerbaijani (Latin) | +| be | Belarusian | +| bg | Bulgarian | +| bn-BD | Bangla (Bangladesh) | +| bn-IN | Bangla (India) | +| bs | Bosnian (Latin) | +| ca | Catalan Spanish | +| ca-ES-valencia | Valencian | +| cs | Czech | +| cy | Welsh | +| da | Danish | +| de | German (Germany) | +| el | Greek | +| en-GB | English (United Kingdom) | +| en-US | English (United States) | +| es | Spanish (Spain) | +| es-ES | Spanish (Spain) | +| es-US | Spanish (United States) | +| es-MX | Spanish (Mexico) | +| et | Estonian | +| eu | Basque | +| fa | Persian | +| fi | Finnish | +| fil-Latn | Filipino | +| fr | French (France) | +| fr-FR | French (France) | +| fr-CA | French (Canada) | +| ga | Irish | +| gd-Latn | Scottish Gaelic | +| gl | Galician | +| gu | Gujarati | +| ha-Latn | Hausa (Latin) | +| he | Hebrew | +| hi | Hindi | +| hr | Croatian | +| hu | Hungarian | +| hy | Armenian | +| id | Indonesian | +| ig-Latn | Igbo | +| is | Icelandic | +| it | Italian (Italy) | +| it-it | Italian (Italy) | +| ja | Japanese | +| ka | Georgian | +| kk | Kazakh | +| km | Khmer | +| kn | Kannada | +| ko | Korean | +| kok | Konkani | +| ku-Arab | Central Kurdish | +| ky-Cyrl | Kyrgyz | +| lb | Luxembourgish | +| lt | Lithuanian | +| lv | Latvian | +| mi-Latn | Maori | +| mk | Macedonian | +| ml | Malayalam | +| mn-Cyrl | Mongolian (Cyrillic) | +| mr | Marathi | +| ms | Malay (Malaysia) | +| mt | Maltese | +| nb | Norwegian (Bokmål) | +| ne | Nepali (Nepal) | +| nl | Dutch (Netherlands) | +| nl-BE | Dutch (Netherlands) | +| nn | Norwegian (Nynorsk) | +| nso | Sesotho sa Leboa | +| or | Odia | +| pa | Punjabi (Gurmukhi) | +| pa-Arab | Punjabi (Arabic) | +| pl | Polish | +| prs-Arab | Dari | +| pt-BR | Portuguese (Brazil) | +| pt-PT | Portuguese (Portugal) | +| qut-Latn | K’iche’ | +| quz | Quechua (Peru) | +| ro | Romanian (Romania) | +| ru | Russian | +| rw | Kinyarwanda | +| sd-Arab | Sindhi (Arabic) | +| si | Sinhala | +| sk | Slovak | +| sl | Slovenian | +| sq | Albanian | +| sr-Cyrl-BA | Serbian (Cyrillic, Bosnia and Herzegovina) | +| sr-Cyrl-RS | Serbian (Cyrillic, Serbia) | +| sr-Latn-RS | Serbian (Latin, Serbia) | +| sv | Swedish (Sweden) | +| sw | Kiswahili | +| ta | Tamil | +| te | Telugu | +| tg-Cyrl | Tajik (Cyrillic) | +| th | Thai | +| ti | Tigrinya | +| tk-Latn | Turkmen (Latin) | +| tn | Setswana | +| tr | Turkish | +| tt-Cyrl | Tatar (Cyrillic) | +| ug-Arab | Uyghur | +| uk | Ukrainian | +| ur | Urdu | +| uz-Latn | Uzbek (Latin) | +| vi | Vietnamese | +| wo | Wolof | +| xh | isiXhosa | +| yo-Latn | Yoruba | +| zh-Hans | Chinese (Simplified) | +| zh-Hant | Chinese (Traditional) | +| zu | isiZulu | diff --git a/packages/translations/package.json b/packages/translations/package.json index ec569d6fd8..d6c1f89cb9 100644 --- a/packages/translations/package.json +++ b/packages/translations/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/translations", - "version": "3.0.0-alpha.59", + "version": "3.0.0-beta.11", "main": "./src/exports/index.ts", "types": "./src/types.ts", "type": "module", @@ -12,9 +12,8 @@ }, "scripts": { "build:types": "tsc --outDir dist", - "build": "pnpm writeFiles && pnpm build:types", + "build": "pnpm build:types", "clean": "rimraf {dist,*.tsbuildinfo}", - "writeFiles": "npx tsx ./writeTranslationFiles.ts", "prepublishOnly": "pnpm clean && pnpm turbo build" }, "exports": { @@ -22,13 +21,13 @@ "import": "./src/exports/index.ts", "require": "./src/exports/index.ts" }, - "./api": { - "import": "./src/_generatedFiles_/api/index.ts", - "require": "./src/_generatedFiles_/api/index.ts" + "./*": { + "import": "./src/exports/*.ts", + "require": "./src/exports/*.ts" }, - "./client": { - "import": "./src/_generatedFiles_/client/index.ts", - "require": "./src/_generatedFiles_/client/index.ts" + "./languages/*": { + "import": "./src/languages/*.ts", + "require": "./src/languages/*.ts" } }, "publishConfig": { @@ -41,15 +40,15 @@ "require": "./dist/exports/index.js", "types": "./dist/exports/*.d.ts" }, - "./api": { - "import": "./dist/_generatedFiles_/api/index.js", - "require": "./dist/_generatedFiles_/api/index.js", - "types": "./dist/_generatedFiles_/exports/*.d.ts" + "./*": { + "import": "./dist/exports/*.js", + "require": "./dist/exports/*.js", + "types": "./dist/exports/*.d.ts" }, - "./client": { - "import": "./dist/_generatedFiles_/client/index.js", - "require": "./dist/_generatedFiles_/client/index.js", - "types": "./dist/_generatedFiles_/exports/*.d.ts" + "./languages/*": { + "import": "./dist/languages/*.js", + "require": "./dist/languages/*.js", + "types": "./dist/languages/*.d.ts" } } }, @@ -57,6 +56,7 @@ "@payloadcms/eslint-config": "workspace:*", "@swc/core": "^1.3.102", "@types/react": "18.2.74", + "date-fns": "3.3.1", "typescript": "5.4.4" }, "files": [ diff --git a/packages/translations/src/_generatedFiles_/api/ar.js b/packages/translations/src/_generatedFiles_/api/ar.js deleted file mode 100644 index 36a30b0435..0000000000 --- a/packages/translations/src/_generatedFiles_/api/ar.js +++ /dev/null @@ -1,94 +0,0 @@ -export default { - authentication: { - account: 'الحساب', - apiKey: 'مفتاح API', - enableAPIKey: 'تفعيل مفتاح API', - loggedInChangePassword: - 'لتغيير كلمة المرور الخاصّة بك ، انتقل إلى <0>حسابك وقم بتعديل كلمة المرور هناك.', - newAccountCreated: - 'تمّ إنشاء حساب جديد لتتمكّن من الوصول إلى {{serverURL}} الرّجاء النّقر فوق الرّابط التّالي أو لصق عنوان URL أدناه في متصفّحّك لتأكيد بريدك الإلكتروني : {{verificationURL}}
    بعد التّحقّق من بريدك الإلكتروني ، ستتمكّن من تسجيل الدّخول بنجاح.', - resetYourPassword: 'إعادة تعيين كلمة المرور الخاصّة بك', - verified: 'تمّ التحقّق', - verifyYourEmail: 'قم بتأكيد بريدك الألكتروني', - youAreReceivingResetPassword: - 'أنت تتلقّى هذا البريد الالكتروني لأنّك (أو لأنّ شخص آخر) طلبت إعادة تعيين كلمة المرور لحسابك. الرّجاء النّقر فوق الرّابط التّالي ، أو لصق هذا الرّابط في متصفّحك لإكمال العمليّة:', - youDidNotRequestPassword: - 'إن لم تطلب هذا ، يرجى تجاهل هذا البريد الإلكتروني وستبقى كلمة مرورك ذاتها بدون تغيير.', - }, - error: { - deletingFile: 'حدث خطأ أثناء حذف الملف.', - emailOrPasswordIncorrect: 'البريد الإلكتروني أو كلمة المرور المقدمة غير صحيحة.', - followingFieldsInvalid_one: 'الحقل التالي غير صالح:', - followingFieldsInvalid_other: 'الحقول التالية غير صالحة:', - noFilesUploaded: 'لم يتمّ رفع أيّة ملفّات.', - notAllowedToPerformAction: 'لا يسمح لك القيام بهذه العمليّة.', - problemUploadingFile: 'حدث خطأ اثناء رفع الملفّ.', - unableToDeleteCount: 'يتعذّر حذف {{count}} من {{total}} {{label}}.', - unableToUpdateCount: 'يتعذّر تحديث {{count}} من {{total}} {{label}}.', - unauthorized: 'غير مصرّح لك ، عليك أن تقوم بتسجيل الدّخول لتتمكّن من تقديم هذا الطّلب.', - userLocked: 'تمّ قفل هذا المستخدم نظرًا لوجود عدد كبير من محاولات تسجيل الدّخول الغير ناجحة.', - valueMustBeUnique: 'على القيمة أن تكون فريدة', - }, - fields: { - chooseBetweenCustomTextOrDocument: 'اختر بين إدخال عنوان URL نصّي مخصّص أو الرّبط بمستند آخر.', - chooseDocumentToLink: 'اختر مستندًا للربط', - customURL: 'URL مخصّص', - enterURL: 'ادخل عنوان URL', - internalLink: 'رابط داخلي', - linkType: 'نوع الرّابط', - openInNewTab: 'الفتح في علامة تبويب جديدة', - textToDisplay: 'النصّ الذي تريد إظهاره', - }, - general: { - copy: 'نسخ', - createdAt: 'تمّ الإنشاء في', - deletedCountSuccessfully: 'تمّ حذف {{count}} {{label}} بنجاح.', - deletedSuccessfully: 'تمّ الحذف بنجاح.', - email: 'البريد الإلكتروني', - notFound: 'غير موجود', - row: 'سطر', - rows: 'أسطُر', - successfullyCreated: '{{label}} تم إنشاؤها بنجاح.', - successfullyDuplicated: '{{label}} تم استنساخها بنجاح.', - thisLanguage: 'العربية', - updatedAt: 'تم التحديث في', - updatedCountSuccessfully: 'تم تحديث {{count}} {{label}} بنجاح.', - updatedSuccessfully: 'تم التحديث بنجاح.', - user: 'المستخدم', - users: 'المستخدمين', - value: 'القيمة', - }, - upload: { - fileName: 'اسم الملفّ', - fileSize: 'حجم الملفّ', - height: 'الطّول', - sizes: 'الاحجام', - width: 'العرض', - }, - validation: { - emailAddress: 'يرجى إدخال عنوان بريد إلكتروني صحيح.', - enterNumber: 'يرجى إدخال رقم صحيح.', - greaterThanMax: '{{value}} أكبر من الحد الأقصى المسموح به {{label}} الذي يبلغ {{max}}.', - invalidInput: 'هذا الحقل لديه إدخال غير صالح.', - invalidSelection: 'هذا الحقل لديه اختيار غير صالح.', - invalidSelections: 'هذا الحقل لديه الاختيارات الغير صالحة التالية:', - lessThanMin: '{{value}} أقل من الحد الأدنى المسموح به {{label}} الذي يبلغ {{min}}.', - longerThanMin: 'يجب أن يكون هذا القيمة أطول من الحد الأدنى للطول الذي هو {{minLength}} أحرف.', - notValidDate: '"{{value}}" ليس تاريخا صالحا.', - required: 'هذا الحقل مطلوب.', - requiresAtLeast: 'هذا الحقل يتطلب على الأقل {{count}} {{label}}.', - requiresNoMoreThan: 'هذا الحقل يتطلب عدم تجاوز {{count}} {{label}}.', - requiresTwoNumbers: 'هذا الحقل يتطلب رقمين.', - shorterThanMax: 'يجب أن تكون هذه القيمة أقصر من الحد الأقصى للطول الذي هو {{maxLength}} أحرف.', - trueOrFalse: 'يمكن أن يكون هذا الحقل مساويًا فقط للقيمتين صحيح أو خطأ.', - validUploadID: 'هذا الحقل ليس معرّف تحميل صالح.', - }, - version: { - autosavedSuccessfully: 'تمّ الحفظ التّلقائي بنجاح.', - draft: 'مسودّة', - draftSavedSuccessfully: 'تمّ حفظ المسودّة بنجاح.', - published: 'تمّ النّشر', - restoredSuccessfully: 'تمّت الاستعادة بنحاح.', - status: 'الحالة', - }, -} diff --git a/packages/translations/src/_generatedFiles_/api/az.js b/packages/translations/src/_generatedFiles_/api/az.js deleted file mode 100644 index 5f6d454bee..0000000000 --- a/packages/translations/src/_generatedFiles_/api/az.js +++ /dev/null @@ -1,96 +0,0 @@ -export default { - authentication: { - account: 'Hesab', - apiKey: 'API Açarı', - enableAPIKey: 'API açarını aktivləşdir', - loggedInChangePassword: - 'Parolu dəyişdirmək üçün hesabınıza get və orada şifrənizi redaktə edin.', - newAccountCreated: - 'Sizin üçün yeni hesab yaradıldı. Zəhmət olmasa, e-poçtunuzu doğrulamaq üçün aşağıdakı linke klikləyin: {{verificationURL}}. E-poçtunuzu doğruladıqdan sonra uğurla daxil ola bilərsiniz.', - resetYourPassword: 'Şifrənizi sıfırlayın', - verified: 'Doğrulanmış', - verifyYourEmail: 'E-poçtunuzu doğrulayın', - youAreReceivingResetPassword: - 'Siz (və ya başqası) hesabınız üçün parolun sıfırlanmasını tələb etdiyiniz üçün bunu alırsınız. Prosesi tamamlamaq üçün zəhmət olmasa aşağıdakı linkə klikləyin:', - youDidNotRequestPassword: - 'Əgər siz bunu tələb etməmisinizsə, lütfən, bu e-poçtu nəzərə almayın və şifrəniz dəyişilməz qalacaq.', - }, - error: { - deletingFile: 'Faylın silinməsində xəta baş verdi.', - emailOrPasswordIncorrect: 'Təqdim olunan e-poçt və ya şifrə yanlışdır.', - followingFieldsInvalid_many: 'Aşağıdakı sahələr yanlışdır:', - followingFieldsInvalid_one: 'Aşağıdakı sahə yanlışdır:', - followingFieldsInvalid_other: 'Aşağıdaki sahələr yanlışdır:', - noFilesUploaded: 'Heç bir fayl yüklənilməyib.', - notAllowedToPerformAction: 'Bu əməliyyatı icra etməyə icazəniz yoxdur.', - problemUploadingFile: 'Faylın yüklənməsi zamanı problem yarandı.', - unableToDeleteCount: '{{count}} dən {{total}} {{label}} silinə bilmir.', - unableToUpdateCount: '{{count}} dən {{total}} {{label}} yenilənə bilmir.', - unauthorized: 'İcazəniz yoxdur, bu tələbi yerinə yetirmək üçün daxil olmalısınız.', - userLocked: 'Bu istifadəçi çoxsaylı uğursuz giriş cəhdləri səbəbindən kilidlənib.', - valueMustBeUnique: 'Dəyər təkrar olmamalıdır', - }, - fields: { - chooseBetweenCustomTextOrDocument: - "Xüsusi mətn URL'si daxil etmək və ya başqa bir sənədə keçid yaratmaq arasında seçim edin.", - chooseDocumentToLink: 'Keçid yaratmaq üçün sənəd seçin', - customURL: 'Xüsusi URL', - enterURL: 'URL daxil edin', - internalLink: 'Daxili Keçid', - linkType: 'Keçid Növü', - openInNewTab: 'Yeni sekmede aç', - textToDisplay: 'Göstəriləcək mətn', - }, - general: { - copy: 'Kopyala', - createdAt: 'Yaradıldığı tarix', - deletedCountSuccessfully: '{{count}} {{label}} uğurla silindi.', - deletedSuccessfully: 'Uğurla silindi.', - email: 'Elektron poçt', - notFound: 'Tapılmadı', - row: 'Sətir', - rows: 'Sətirlər', - successfullyCreated: '{{label}} uğurla yaradıldı.', - successfullyDuplicated: '{{label}} uğurla dublikatlandı.', - thisLanguage: 'Azərbaycan dili', - updatedAt: 'Yeniləndiyi tarix', - updatedCountSuccessfully: '{{count}} {{label}} uğurla yeniləndi.', - updatedSuccessfully: 'Uğurla yeniləndi.', - user: 'İstifadəçi', - users: 'İstifadəçilər', - value: 'Dəyər', - }, - upload: { - fileName: 'Faylın Adı', - fileSize: 'Faylım Ölçüsü', - height: 'Hündürlük', - sizes: 'Ölçülər', - width: 'En', - }, - validation: { - emailAddress: 'Xahiş edirik doğru elektron poçt ünvanını daxil edin.', - enterNumber: 'Xahiş edirik doğru nömrəni daxil edin.', - greaterThanMax: '{{value}} icazə verilən maksimal {{label}} olan {{max}}-dən böyükdür.', - invalidInput: 'Bu sahə yanlış daxil edilmişdir.', - invalidSelection: 'Bu sahədə yanlış seçim edilmişdir.', - invalidSelections: 'Bu sahədə aşağıdakı yanlış seçimlər edilmişdir:', - lessThanMin: '{{value}} icazə verilən minimal {{label}} olan {{min}}-dən kiçikdir.', - longerThanMin: 'Bu dəyər {{minLength}} simvoldan uzun olmalıdır.', - notValidDate: '"{{value}}" doğru tarix deyil.', - required: 'Bu sahə mütləq doldurulmalıdır.', - requiresAtLeast: 'Bu sahə ən azı {{count}} {{label}} tələb edir.', - requiresNoMoreThan: 'Bu sahə {{count}} {{label}}-dan çox olmamalıdır.', - requiresTwoNumbers: 'Bu sahə iki nömrə tələb edir.', - shorterThanMax: 'Bu dəyər {{maxLength}} simvoldan qısa olmalıdır.', - trueOrFalse: 'Bu sahə yalnız doğru və ya yanlış ola bilər.', - validUploadID: 'Bu sahə doğru yükləmə ID-si deyil.', - }, - version: { - autosavedSuccessfully: 'Uğurla avtomatik olaraq yadda saxlandı.', - draft: 'Qaralama', - draftSavedSuccessfully: 'Qaralama uğurla yadda saxlandı.', - published: 'Dərc edilmiş', - restoredSuccessfully: 'Uğurla bərpa edildi.', - status: 'Status', - }, -} diff --git a/packages/translations/src/_generatedFiles_/api/bg.js b/packages/translations/src/_generatedFiles_/api/bg.js deleted file mode 100644 index b1d5a645a3..0000000000 --- a/packages/translations/src/_generatedFiles_/api/bg.js +++ /dev/null @@ -1,97 +0,0 @@ -export default { - authentication: { - account: 'Профил', - apiKey: 'API ключ', - enableAPIKey: 'Активирай API ключ', - loggedInChangePassword: - 'За да промениш паролата си, отиди в своя <0>профил и я промени оттам.', - newAccountCreated: - 'Току-що беше създаден нов профил за достъп до {{serverURL}} Моля, въведи връзката в браузъра си, за да потвърдиш имейла си: {{verificationURL}}
    След като потвърдиш имейла си, ще можеш да влезеш успешно.', - resetYourPassword: 'Възстанови паролата си', - verified: 'Потвърден', - verifyYourEmail: 'Потвърди имейла си', - youAreReceivingResetPassword: - 'Получаваш това, защото ти (или някой друг) е заявил възстановяване на паролата. Натисни връзката или постави това в браузъра си, за да довършиш процеса:', - youDidNotRequestPassword: - 'Ако не си заявил това, игнорирай този имейл и паролата ти ще остане непроменена.', - }, - error: { - deletingFile: 'Имаше грешка при изтриването на файла.', - emailOrPasswordIncorrect: 'Имейлът или паролата не са правилни.', - followingFieldsInvalid_one: 'Следното поле е некоректно:', - followingFieldsInvalid_other: 'Следните полета са некоректни:', - noFilesUploaded: 'Никакви файлове не бяха качени.', - notAllowedToPerformAction: 'Нямаш право да извършиш това действие.', - problemUploadingFile: 'Имаше проблем при качването на файла.', - unableToDeleteCount: 'Не беше възможно да се изтрият {{count}} от {{total}} {{label}}.', - unableToUpdateCount: 'Не беше възможно да се обновят {{count}} от {{total}} {{label}}.', - unauthorized: 'Неавторизиран, трябва да влезеш, за да извършиш тази заявка.', - userLocked: 'Този потребител има прекалено много невалидни опити за влизане и е заключен.', - valueMustBeUnique: 'Стойността трябва да е уникална', - }, - fields: { - chooseBetweenCustomTextOrDocument: - 'Избери между това да въведеш текстова връзка или да свържеш с друг документ.', - chooseDocumentToLink: 'Избери документ, с който да свържеш', - customURL: 'Връзка', - enterURL: 'Въведи връзка', - internalLink: 'Вътрешна връзка', - linkType: 'Тип на връзката', - openInNewTab: 'Отвори в нов раздел', - textToDisplay: 'Текст към дисплей', - }, - general: { - copy: 'Копирай', - createdAt: 'Създаден на', - deletedCountSuccessfully: 'Изтрити {{count}} {{label}} успешно.', - deletedSuccessfully: 'Изтрито успешно.', - email: 'Имейл', - notFound: 'Няма открит', - row: 'ред', - rows: 'Редове', - successfullyCreated: '{{label}} успешно създаден.', - successfullyDuplicated: '{{label}} успешно дупликиран.', - thisLanguage: 'Български', - updatedAt: 'Обновен на', - updatedCountSuccessfully: 'Обновени {{count}} {{label}} успешно.', - updatedSuccessfully: 'Обновен успешно.', - user: 'Потребител', - users: 'Потребители', - value: 'Стойност', - }, - upload: { - fileName: 'Име на файла', - fileSize: 'Големина на файла', - height: 'Височина', - sizes: 'Големини', - width: 'Ширина', - }, - validation: { - emailAddress: 'Моля, въведи валиден имейл адрес.', - enterNumber: 'Моля, въведи валиден номер.', - greaterThanMax: '{{value}} е по-голямо от максимално допустимото {{label}} от {{max}}.', - invalidInput: 'Това поле има невалиден вход.', - invalidSelection: 'Това поле има невалидна селекция.', - invalidSelections: 'Това поле има следните невалидни селекции:', - lessThanMin: '{{value}} е по-малко от минимално допустимото {{label}} от {{min}}.', - longerThanMin: - 'Тази стойност трябва да е по-голяма от минималната стойност от {{minLength}} символа.', - notValidDate: '"{{value}}" не е валидна дата.', - required: 'Това поле е задължително.', - requiresAtLeast: 'Това поле изисква поне {{count}} {{label}}.', - requiresNoMoreThan: 'Това поле изисква не повече от {{count}} {{label}}.', - requiresTwoNumbers: 'Това поле изисква 2 числа.', - shorterThanMax: - 'Тази стойност трябва да е по-малка от максималната стойност от {{maxLength}} символа.', - trueOrFalse: 'Това поле може да бъде само "true" или "false".', - validUploadID: 'Това поле не е валиден идентификатор на качването.', - }, - version: { - autosavedSuccessfully: 'Успешно автоматично запазване.', - draft: 'Чернова', - draftSavedSuccessfully: 'Чернова запазена успешно.', - published: 'Публикувано', - restoredSuccessfully: 'Успешно възстановяване.', - status: 'Статус', - }, -} diff --git a/packages/translations/src/_generatedFiles_/api/cs.js b/packages/translations/src/_generatedFiles_/api/cs.js deleted file mode 100644 index 2bc80c146c..0000000000 --- a/packages/translations/src/_generatedFiles_/api/cs.js +++ /dev/null @@ -1,94 +0,0 @@ -export default { - authentication: { - account: 'Účet', - apiKey: 'Klíč API', - enableAPIKey: 'Povolit klíč API', - loggedInChangePassword: 'Pro změnu hesla přejděte do svého <0>účtu a zde si heslo upravte.', - newAccountCreated: - 'Pro přístup k {{serverURL}} byl pro vás vytvořen nový účet. Klepněte na následující odkaz nebo zkopírujte URL do svého prohlížeče pro ověření vašeho emailu: {{verificationURL}}
    Po ověření vašeho emailu se budete moci úspěšně přihlásit.', - resetYourPassword: 'Resetujte své heslo', - verified: 'Ověřeno', - verifyYourEmail: 'Ověřte svůj email', - youAreReceivingResetPassword: - 'Tento email obdržíte, protože jste (nebo někdo jiný) požádali o resetování hesla pro váš účet.', - youDidNotRequestPassword: - 'Pokud jste o to nepožádali, ignorujte prosím tento e-mail a vaše heslo zůstane nezměněno.', - }, - error: { - deletingFile: 'Při mazání souboru došlo k chybě.', - emailOrPasswordIncorrect: 'Zadaný email nebo heslo není správné.', - followingFieldsInvalid_one: 'Následující pole je neplatné:', - followingFieldsInvalid_other: 'Následující pole jsou neplatná:', - noFilesUploaded: 'Nebyly nahrány žádné soubory.', - notAllowedToPerformAction: 'Nemáte povolení provádět tuto akci.', - problemUploadingFile: 'Při nahrávání souboru došlo k chybě.', - unableToDeleteCount: 'Nelze smazat {{count}} z {{total}} {{label}}', - unableToUpdateCount: 'Nelze aktualizovat {{count}} z {{total}} {{label}}.', - unauthorized: 'Neautorizováno, pro zadání tohoto požadavku musíte být přihlášeni.', - userLocked: 'Tento uživatel je uzamčen kvůli příliš mnoha neúspěšným pokusům o přihlášení.', - valueMustBeUnique: 'Hodnota musí být jedinečná', - }, - fields: { - chooseBetweenCustomTextOrDocument: - 'Zvolte mezi vložením vlastního textového URL nebo odkazováním na jiný dokument.', - chooseDocumentToLink: 'Vyberte dokument, na který se chcete odkázat', - customURL: 'Vlastní URL', - enterURL: 'Zadejte URL', - internalLink: 'Interní odkaz', - linkType: 'Typ odkazu', - openInNewTab: 'Otevřít v nové záložce', - textToDisplay: 'Text k zobrazení', - }, - general: { - copy: 'Kopírovat', - createdAt: 'Vytvořeno v', - deletedCountSuccessfully: 'Úspěšně smazáno {{count}} {{label}}.', - deletedSuccessfully: 'Úspěšně odstraněno.', - email: 'E-mail', - notFound: 'Nenalezeno', - row: 'Řádek', - rows: 'Řádky', - successfullyCreated: '{{label}} úspěšně vytvořeno.', - successfullyDuplicated: '{{label}} úspěšně duplikováno.', - thisLanguage: 'Čeština', - updatedAt: 'Aktualizováno v', - updatedCountSuccessfully: 'Úspěšně aktualizováno {{count}} {{label}}.', - updatedSuccessfully: 'Úspěšně aktualizováno.', - user: 'Uživatel', - users: 'Uživatelé', - value: 'Hodnota', - }, - upload: { - fileName: 'Název souboru', - fileSize: 'Velikost souboru', - height: 'Výška', - sizes: 'Velikosti', - width: 'Šířka', - }, - validation: { - emailAddress: 'Zadejte prosím platnou e-mailovou adresu.', - enterNumber: 'Zadejte prosím platné číslo.', - greaterThanMax: '{{value}} je vyšší než maximálně povolená {{label}} {{max}}.', - invalidInput: 'Toto pole má neplatný vstup.', - invalidSelection: 'Toto pole má neplatný výběr.', - invalidSelections: 'Toto pole má následující neplatné výběry:', - lessThanMin: '{{value}} je nižší než minimálně povolená {{label}} {{min}}.', - longerThanMin: 'Tato hodnota musí být delší než minimální délka {{minLength}} znaků.', - notValidDate: '"{{value}}" není platné datum.', - required: 'Toto pole je povinné.', - requiresAtLeast: 'Toto pole vyžaduje alespoň {{count}} {{label}}.', - requiresNoMoreThan: 'Toto pole vyžaduje ne více než {{count}} {{label}}.', - requiresTwoNumbers: 'Toto pole vyžaduje dvě čísla.', - shorterThanMax: 'Tato hodnota musí být kratší než maximální délka {{maxLength}} znaků.', - trueOrFalse: 'Toto pole může být rovno pouze true nebo false.', - validUploadID: 'Toto pole není platné ID pro odeslání.', - }, - version: { - autosavedSuccessfully: 'Úspěšně uloženo automaticky.', - draft: 'Koncept', - draftSavedSuccessfully: 'Koncept úspěšně uložen.', - published: 'Publikováno', - restoredSuccessfully: 'Úspěšně obnoveno.', - status: 'Stav', - }, -} diff --git a/packages/translations/src/_generatedFiles_/api/de.js b/packages/translations/src/_generatedFiles_/api/de.js deleted file mode 100644 index ac3d18c973..0000000000 --- a/packages/translations/src/_generatedFiles_/api/de.js +++ /dev/null @@ -1,96 +0,0 @@ -export default { - authentication: { - account: 'Konto', - apiKey: 'API-Key', - enableAPIKey: 'API-Key aktivieren', - loggedInChangePassword: - 'Um dein Passwort zu ändern, gehe in dein <0>Konto und ändere dort dein Passwort.', - newAccountCreated: - 'Ein neues Konto wurde gerade für dich auf {{serverURL}} erstellt. Bitte klicke auf den folgenden Link oder kopiere die URL in deinen Browser um deine E-Mail-Adresse zu verifizieren: {{verificationURL}}
    Nachdem du deine E-Mail-Adresse verifiziert hast, kannst du dich erfolgreich anmelden.', - resetYourPassword: 'Dein Passwort zurücksetzen', - verified: 'Verifiziert', - verifyYourEmail: 'Deine E-Mail-Adresse verifizieren', - youAreReceivingResetPassword: - 'Du erhältst diese Nachricht, weil du (oder jemand anderes) das Zurücksetzen deines Passworts für dein Benutzerkonto angefordert hat. Bitte klicke auf den folgenden Link, oder kopiere die URL in deinen Browser den Prozess abzuschließen:', - youDidNotRequestPassword: - 'Solltest du dies nicht angefordert haben, ignoriere diese E-Mail und dein Passwort bleibt unverändert.', - }, - error: { - deletingFile: 'Beim Löschen der Datei ist ein Fehler aufgetreten.', - emailOrPasswordIncorrect: 'Die E-Mail-Adresse oder das Passwort sind nicht korrekt.', - followingFieldsInvalid_one: 'Das folgende Feld ist nicht korrekt:', - followingFieldsInvalid_other: 'Die folgenden Felder sind nicht korrekt:', - noFilesUploaded: 'Es wurden keine Dateien hochgeladen.', - notAllowedToPerformAction: 'Du hast keine Berechtigung, diese Aktion auszuführen.', - problemUploadingFile: 'Es gab ein Problem während des Hochladens der Datei.', - unableToDeleteCount: '{{count}} von {{total}} {{label}} konnte nicht gelöscht werden.', - unableToUpdateCount: '{{count}} von {{total}} {{label}} konnte nicht aktualisiert werden.', - unauthorized: 'Nicht autorisiert - du musst angemeldet sein, um diese Anfrage zu stellen.', - userLocked: - 'Dieser Benutzer ist auf Grund zu vieler unerfolgreicher Anmelde-Versuche gesperrt.', - valueMustBeUnique: 'Wert muss einzigartig sein', - }, - fields: { - chooseBetweenCustomTextOrDocument: - 'Wähle zwischen einer eigenen Text-URL oder verlinke zu einem anderen Dokument.', - chooseDocumentToLink: 'Wähle ein Dokument zum Verlinken', - customURL: 'Eigene URL', - enterURL: 'URL eingeben', - internalLink: 'Interner Link', - linkType: 'Linktyp', - openInNewTab: 'Öffne im neuen Tab', - textToDisplay: 'Angezeigter Text', - }, - general: { - copy: 'Kopieren', - createdAt: 'Erstellt am', - deletedCountSuccessfully: '{{count}} {{label}} erfolgreich gelöscht.', - deletedSuccessfully: 'Erfolgreich gelöscht.', - email: 'E-Mail', - notFound: 'Nicht gefunden', - row: 'Zeile', - rows: 'Zeilen', - successfullyCreated: '{{label}} erfolgreich erstellt.', - successfullyDuplicated: '{{label}} wurde erfolgreich dupliziert.', - thisLanguage: 'Deutsch', - updatedAt: 'Aktualisiert am', - updatedCountSuccessfully: '{{count}} {{label}} erfolgreich aktualisiert.', - updatedSuccessfully: 'Erfolgreich aktualisiert.', - user: 'Benutzer', - users: 'Benutzer', - value: 'Wert', - }, - upload: { - fileName: 'Dateiname', - fileSize: 'Dateigröße', - height: 'Höhe', - sizes: 'Größen', - width: 'Breite', - }, - validation: { - emailAddress: 'Bitte gib eine korrekte E-Mail-Adresse an.', - enterNumber: 'Bitte gib eine gültige Nummer an,', - greaterThanMax: '{{value}} ist größer als der maximal erlaubte {{label}} von {{max}}.', - invalidInput: 'Dieses Feld hat einen inkorrekten Wert.', - invalidSelection: 'Dieses Feld hat eine inkorrekte Auswahl.', - invalidSelections: "'Dieses Feld enthält die folgenden inkorrekten Auswahlen:'", - lessThanMin: '{{value}} ist kleiner als der minimal erlaubte {{label}} von {{min}}.', - longerThanMin: 'Dieser Wert muss länger als die minimale Länge von {{minLength}} Zeichen sein.', - notValidDate: '"{{value}}" ist kein gültiges Datum.', - required: 'Pflichtfeld', - requiresAtLeast: 'Dieses Feld muss mindestens {{count}} {{label}} enthalten.', - requiresNoMoreThan: 'Dieses Feld kann nicht mehr als {{count}} {{label}} enthalten.', - requiresTwoNumbers: 'Dieses Feld muss zwei Nummern enthalten.', - shorterThanMax: 'Dieser Wert muss kürzer als die maximale Länge von {{maxLength}} sein.', - trueOrFalse: 'Dieses Feld kann nur wahr oder falsch sein.', - validUploadID: "'Dieses Feld enthält keine valide Upload-ID.'", - }, - version: { - autosavedSuccessfully: 'Erfolgreich automatisch gespeichert.', - draft: 'Entwurf', - draftSavedSuccessfully: 'Entwurf erfolgreich gespeichert.', - published: 'Veröffentlicht', - restoredSuccessfully: 'Erfolgreich wiederhergestellt.', - status: 'Status', - }, -} diff --git a/packages/translations/src/_generatedFiles_/api/en.js b/packages/translations/src/_generatedFiles_/api/en.js deleted file mode 100644 index 27242b8e9f..0000000000 --- a/packages/translations/src/_generatedFiles_/api/en.js +++ /dev/null @@ -1,95 +0,0 @@ -export default { - authentication: { - account: 'Account', - apiKey: 'API Key', - enableAPIKey: 'Enable API Key', - loggedInChangePassword: - 'To change your password, go to your <0>account and edit your password there.', - newAccountCreated: - 'A new account has just been created for you to access {{serverURL}} Please click on the following link or paste the URL below into your browser to verify your email: {{verificationURL}}
    After verifying your email, you will be able to log in successfully.', - resetYourPassword: 'Reset Your Password', - verified: 'Verified', - verifyYourEmail: 'Verify your email', - youAreReceivingResetPassword: - 'You are receiving this because you (or someone else) have requested the reset of the password for your account. Please click on the following link, or paste this into your browser to complete the process:', - youDidNotRequestPassword: - 'If you did not request this, please ignore this email and your password will remain unchanged.', - }, - error: { - deletingFile: 'There was an error deleting file.', - emailOrPasswordIncorrect: 'The email or password provided is incorrect.', - followingFieldsInvalid_one: 'The following field is invalid:', - followingFieldsInvalid_other: 'The following fields are invalid:', - noFilesUploaded: 'No files were uploaded.', - notAllowedToPerformAction: 'You are not allowed to perform this action.', - problemUploadingFile: 'There was a problem while uploading the file.', - unableToDeleteCount: 'Unable to delete {{count}} out of {{total}} {{label}}.', - unableToUpdateCount: 'Unable to update {{count}} out of {{total}} {{label}}.', - unauthorized: 'Unauthorized, you must be logged in to make this request.', - userLocked: 'This user is locked due to having too many failed login attempts.', - valueMustBeUnique: 'Value must be unique', - }, - fields: { - chooseBetweenCustomTextOrDocument: - 'Choose between entering a custom text URL or linking to another document.', - chooseDocumentToLink: 'Choose a document to link to', - customURL: 'Custom URL', - enterURL: 'Enter a URL', - internalLink: 'Internal Link', - linkType: 'Link Type', - openInNewTab: 'Open in new tab', - textToDisplay: 'Text to display', - }, - general: { - copy: 'Copy', - createdAt: 'Created At', - deletedCountSuccessfully: 'Deleted {{count}} {{label}} successfully.', - deletedSuccessfully: 'Deleted successfully.', - email: 'Email', - notFound: 'Not Found', - row: 'Row', - rows: 'Rows', - successfullyCreated: '{{label}} successfully created.', - successfullyDuplicated: '{{label}} successfully duplicated.', - thisLanguage: 'English', - updatedAt: 'Updated At', - updatedCountSuccessfully: 'Updated {{count}} {{label}} successfully.', - updatedSuccessfully: 'Updated successfully.', - user: 'User', - users: 'Users', - value: 'Value', - }, - upload: { - fileName: 'File Name', - fileSize: 'File Size', - height: 'Height', - sizes: 'Sizes', - width: 'Width', - }, - validation: { - emailAddress: 'Please enter a valid email address.', - enterNumber: 'Please enter a valid number.', - greaterThanMax: '{{value}} is greater than the max allowed {{label}} of {{max}}.', - invalidInput: 'This field has an invalid input.', - invalidSelection: 'This field has an invalid selection.', - invalidSelections: 'This field has the following invalid selections:', - lessThanMin: '{{value}} is less than the min allowed {{label}} of {{min}}.', - longerThanMin: 'This value must be longer than the minimum length of {{minLength}} characters.', - notValidDate: '"{{value}}" is not a valid date.', - required: 'This field is required.', - requiresAtLeast: 'This field requires at least {{count}} {{label}}.', - requiresNoMoreThan: 'This field requires no more than {{count}} {{label}}.', - requiresTwoNumbers: 'This field requires two numbers.', - shorterThanMax: 'This value must be shorter than the max length of {{maxLength}} characters.', - trueOrFalse: 'This field can only be equal to true or false.', - validUploadID: 'This field is not a valid upload ID.', - }, - version: { - autosavedSuccessfully: 'Autosaved successfully.', - draft: 'Draft', - draftSavedSuccessfully: 'Draft saved successfully.', - published: 'Published', - restoredSuccessfully: 'Restored Successfully.', - status: 'Status', - }, -} diff --git a/packages/translations/src/_generatedFiles_/api/es.js b/packages/translations/src/_generatedFiles_/api/es.js deleted file mode 100644 index add3a1b0b6..0000000000 --- a/packages/translations/src/_generatedFiles_/api/es.js +++ /dev/null @@ -1,96 +0,0 @@ -export default { - authentication: { - account: 'Cuenta', - apiKey: 'Clave API', - enableAPIKey: 'Habilitar Clave API', - loggedInChangePassword: - 'Para cambiar tu contraseña, entra a <0>tu cuenta y edita la contraseña desde ahí.', - newAccountCreated: - 'Se ha creado una nueva cuenta para que puedas acceder a {{serverURL}}. Por favor, haz click o copia el siguiente enlace a tu navegador para verificar tu correo: {{verificationURL}}.
    Una vez hayas verificado tu correo, podrás iniciar sesión.', - resetYourPassword: 'Restablecer tu Contraseña', - verified: 'Verificado', - verifyYourEmail: 'Verifica tu correo', - youAreReceivingResetPassword: - 'Estás recibiendo esto porque tú (o alguien más) ha solicitado restablecer la contraseña de tu cuenta. Por favor haz click en el siguiente enlace o pégalo en tu navegador para completar el proceso:', - youDidNotRequestPassword: - 'Si tú no solicitaste esto, por favor ignora este correo y tu contraseña no se cambiará.', - }, - error: { - deletingFile: 'Ocurrió un error al eliminar el archivo.', - emailOrPasswordIncorrect: 'El correo o la contraseña introducida es incorrecta.', - followingFieldsInvalid_one: 'El siguiente campo es inválido:', - followingFieldsInvalid_other: 'Los siguientes campos son inválidos:', - noFilesUploaded: 'No se subieron archivos.', - notAllowedToPerformAction: 'No tienes permiso para realizar esta acción.', - problemUploadingFile: 'Ocurrió un problema al subir el archivo.', - unableToDeleteCount: 'No se pudo eliminar {{count}} de {{total}} {{label}}.', - unableToUpdateCount: 'No se puede actualizar {{count}} de {{total}} {{label}}.', - unauthorized: 'No autorizado, debes iniciar sesión para realizar esta solicitud.', - userLocked: - 'Este usuario ha sido bloqueado debido a que tiene muchos intentos fallidos para iniciar sesión.', - valueMustBeUnique: 'El valor debe ser único', - }, - fields: { - chooseBetweenCustomTextOrDocument: - 'Elige entre ingresar una URL personalizada o enlazar a otro documento.', - chooseDocumentToLink: 'Elige un documento a enlazar', - customURL: 'URL Personalizado', - enterURL: 'Ingresar URL', - internalLink: 'Enlace Interno', - linkType: 'Tipo de enlace', - openInNewTab: 'Abrir en nueva pestaña', - textToDisplay: 'Texto a mostrar', - }, - general: { - copy: 'Copiar', - createdAt: 'Fecha de creación', - deletedCountSuccessfully: 'Se eliminó {{count}} {{label}} con éxito.', - deletedSuccessfully: 'Borrado exitosamente.', - email: 'Correo electrónico', - notFound: 'No encontrado', - row: 'Fila', - rows: 'Filas', - successfullyCreated: '{{label}} creado correctamente.', - successfullyDuplicated: '{{label}} duplicado correctamente.', - thisLanguage: 'Español', - updatedAt: 'Fecha de modificado', - updatedCountSuccessfully: '{{count}} {{label}} actualizado con éxito.', - updatedSuccessfully: 'Actualizado con éxito.', - user: 'Usuario', - users: 'Usuarios', - value: 'Valor', - }, - upload: { - fileName: 'Nombre del archivo', - fileSize: 'Tamaño del archivo', - height: 'Alto', - sizes: 'Tamaños', - width: 'Ancho', - }, - validation: { - emailAddress: 'Por favor introduce un correo electrónico válido.', - enterNumber: 'Por favor introduce un número válido.', - greaterThanMax: '{{value}} es mayor que el {{label}} máximo permitido de {{max}}.', - invalidInput: 'La información en este campo es inválida.', - invalidSelection: 'La selección en este campo es inválida.', - invalidSelections: 'Este campo tiene las siguientes selecciones inválidas:', - lessThanMin: '{{value}} es menor que el {{label}} mínimo permitido de {{min}}.', - longerThanMin: 'Este dato debe ser más largo que el mínimo de {{minLength}} caracteres.', - notValidDate: '"{{value}}" es una fecha inválida.', - required: 'Este campo es obligatorio.', - requiresAtLeast: 'Este campo require al menos {{count}} {{label}}.', - requiresNoMoreThan: 'Este campo require no más de {{count}} {{label}}', - requiresTwoNumbers: 'Este campo requiere dos números.', - shorterThanMax: 'Este dato debe ser más corto que el máximo de {{maxLength}} caracteres.', - trueOrFalse: 'Este campo solamente puede ser verdadero o falso.', - validUploadID: "'Este campo no es una ID de subida válida.'", - }, - version: { - autosavedSuccessfully: 'Guardado automáticamente con éxito.', - draft: 'Borrador', - draftSavedSuccessfully: 'Borrador guardado con éxito.', - published: 'Publicado', - restoredSuccessfully: 'Restaurado éxito.', - status: 'Estado', - }, -} diff --git a/packages/translations/src/_generatedFiles_/api/fa.js b/packages/translations/src/_generatedFiles_/api/fa.js deleted file mode 100644 index 1046c40ed7..0000000000 --- a/packages/translations/src/_generatedFiles_/api/fa.js +++ /dev/null @@ -1,95 +0,0 @@ -export default { - authentication: { - account: 'نمایه', - apiKey: 'کلید اِی‌پی‌آی', - enableAPIKey: 'فعال‌سازی کلید اِی‌پی‌آی', - loggedInChangePassword: - 'برای تغییر گذرواژه، به <0>نمایه بروید تا گذرواژه خود را ویرایش کنید.', - newAccountCreated: - 'یک نمایه کاربری تازه برای دسترسی شما ساخته شده است {{serverURL}} لطفاً روی پیوند زیر کلیک کنید یا آدرس زیر را در مرورگر خود قرار دهید تا رایانامه خود را تأیید کنید: {{verificationURL}}
    پس از تایید رایانامه خود، می توانید وارد سیستم شوید.', - resetYourPassword: 'گذرواژه خود را بازنشانی کنید', - verified: 'تأیید شده', - verifyYourEmail: 'رایانامه خود را تأیید کنید', - youAreReceivingResetPassword: - 'درخواست بازنشانی گذرواژه نمایه توسط شما یا فرد دیگری فرستاده شده است، اگر این درخواست از سمت شما بوده روی پیوند مقابل کلیک کنید یا در مرورگر وب خود پیوند را کپی کنید تا مراحل بازنشانی گذرواژه تکمیل شود، در غیر این صورت جای نگرانی نیست این پیام را نادیده بگیرید:', - youDidNotRequestPassword: - 'اگر شما این درخواست را ندادید، لطفاً این رایانامه را نادیده بگیرید و گذرواژه شما تغییری نخواهد کرد.', - }, - error: { - deletingFile: 'هنگام حذف فایل خطایی روی داد.', - emailOrPasswordIncorrect: 'رایانامه یا گذرواژه ارائه شده نادرست است.', - followingFieldsInvalid_one: 'کادر زیر نامعتبر است:', - followingFieldsInvalid_other: 'کادرهای زیر نامعتبر هستند:', - noFilesUploaded: 'هیچ رسانه‌ای بارگذاری نشده.', - notAllowedToPerformAction: 'این عملیات برای شما مجاز نیست.', - problemUploadingFile: 'هنگام بارگذاری سند خطایی رخ داد.', - unableToDeleteCount: 'نمی‌توان {{count}} از {{total}} {{label}} را حذف کرد.', - unableToUpdateCount: 'امکان به روز رسانی {{count}} خارج از {{total}} {{label}} وجود ندارد.', - unauthorized: 'درخواست نامعتبر، جهت فرستادن این درخواست باید وارد شوید.', - userLocked: 'این کاربر به دلیل تلاش های زیاد برای ورود ناموفق قفل شده است.', - valueMustBeUnique: 'مقدار باید منحصر به فرد باشد', - }, - fields: { - chooseBetweenCustomTextOrDocument: - 'بین یک نشانی وب یا پیوند دادن به سندی دیگری یکی را انتخاب کنید.', - chooseDocumentToLink: 'یک سند را برای پیوند دادن برگزینید', - customURL: 'URL سفارشی', - enterURL: 'یک نشانی وب وارد کنید', - internalLink: 'پیوند درونی', - linkType: 'نوع پیوند', - openInNewTab: 'بازکردن درزبانه تازه', - textToDisplay: 'متن برای نمایش', - }, - general: { - copy: 'رونوشت', - createdAt: 'ساخته شده در', - deletedCountSuccessfully: 'تعداد {{count}} {{label}} با موفقیت پاک گردید.', - deletedSuccessfully: 'با موفقیت حذف شد.', - email: 'رایانامه', - notFound: 'یافت نشد', - row: 'ردیف', - rows: 'ردیف‌ها', - successfullyCreated: '{{label}} با موفقیت ساخته شد.', - successfullyDuplicated: '{{label}} با موفقیت رونوشت شد.', - thisLanguage: 'فارسی', - updatedAt: 'بروز شده در', - updatedCountSuccessfully: 'تعداد {{count}} با عنوان {{label}} با موفقیت بروزرسانی شدند.', - updatedSuccessfully: 'با موفقیت به‌روز شد.', - user: 'کاربر', - users: 'کاربران', - value: 'مقدار', - }, - upload: { - fileName: 'نام رسانه', - fileSize: 'حجم رسانه', - height: 'ارتفاع', - sizes: 'اندازه‌ها', - width: 'پهنا', - }, - validation: { - emailAddress: 'لطفاً یک نشانی رایانامه معتبر وارد کنید.', - enterNumber: 'لطفاً یک شماره درست وارد کنید.', - greaterThanMax: '{{value}} بیشتر از حداکثر مجاز برای {{label}} است که {{max}} است.', - invalidInput: 'این کادر دارای ورودی نامعتبر است.', - invalidSelection: 'این کادر دارای یک انتخاب نامعتبر است.', - invalidSelections: 'این کادر دارای انتخاب‌های نامعتبر زیر است:', - lessThanMin: '{{value}} کمتر از حداقل مجاز برای {{label}} است که {{min}} است.', - longerThanMin: 'ورودی باید بیش از حداقل {{minLength}} واژه باشد.', - notValidDate: '"{{value}}" یک تاریخ معتبر نیست.', - required: 'این کادر اجباری است.', - requiresAtLeast: 'این رشته حداقل نیازمند {{count}} {{label}}.', - requiresNoMoreThan: 'این رشته به بیش از {{count}} {{label}} نیاز دارد.', - requiresTwoNumbers: 'این کادر به دو عدد نیاز دارد.', - shorterThanMax: 'ورودی باید کمتر از {{maxLength}} واژه باشد.', - trueOrFalse: 'این کادر فقط می تواند به صورت true یا false باشد.', - validUploadID: 'این فیلد یک شناسه بارگذاری معتبر نیست.', - }, - version: { - autosavedSuccessfully: 'با موفقیت ذخیره خودکار شد.', - draft: 'پیش‌نویس', - draftSavedSuccessfully: 'پیش‌نویس با موفقیت ذخیره شد.', - published: 'انتشار یافته', - restoredSuccessfully: 'با موفقیت بازیابی شد.', - status: 'وضعیت', - }, -} diff --git a/packages/translations/src/_generatedFiles_/api/fr.js b/packages/translations/src/_generatedFiles_/api/fr.js deleted file mode 100644 index 9de9be4d7a..0000000000 --- a/packages/translations/src/_generatedFiles_/api/fr.js +++ /dev/null @@ -1,98 +0,0 @@ -export default { - authentication: { - account: 'Compte', - apiKey: 'Clé API', - enableAPIKey: 'Activer la clé API', - loggedInChangePassword: - 'Pour changer votre mot de passe, rendez-vous sur votre <0>compte puis modifiez-y votre mot de passe.', - newAccountCreated: - 'Un nouveau compte vient d\'être créé pour vous permettre d\'accéder {{serverURL}}. Veuillez cliquer sur le lien suivant ou collez l\'URL ci-dessous dans votre navigateur pour vérifier votre adresse e-mail: {{verificationURL}}
    . Après avoir vérifié votre adresse e-mail, vous pourrez vous connecter avec succès.', - resetYourPassword: 'Réinitialisez votre mot de passe', - verified: 'Vérifié', - verifyYourEmail: 'Vérifiez votre e-mail', - youAreReceivingResetPassword: - "Vous recevez ceci parce que vous (ou quelqu'un d'autre) avez demandé la réinitialisation du mot de passe de votre compte. Veuillez cliquer sur le lien suivant ou le coller dans votre navigateur pour terminer le processus :", - youDidNotRequestPassword: - "Si vous ne l'avez pas demandé, veuillez ignorer cet e-mail et votre mot de passe restera inchangé.", - }, - error: { - deletingFile: "Une erreur s'est produite lors de la suppression du fichier.", - emailOrPasswordIncorrect: "L'adresse e-mail ou le mot de passe fourni est incorrect.", - followingFieldsInvalid_one: "Le champ suivant n'est pas valide :", - followingFieldsInvalid_other: 'Les champs suivants ne sont pas valides :', - noFilesUploaded: "Aucun fichier n'a été téléversé.", - notAllowedToPerformAction: "Vous n'êtes pas autorisé à effectuer cette action.", - problemUploadingFile: 'Il y a eu un problème lors du téléversement du fichier.', - unableToDeleteCount: 'Impossible de supprimer {{count}} sur {{total}} {{label}}.', - unableToUpdateCount: 'Impossible de mettre à jour {{count}} sur {{total}} {{label}}.', - unauthorized: 'Non autorisé, vous devez être connecté pour effectuer cette demande.', - userLocked: - "Cet utilisateur est verrouillé en raison d'un trop grand nombre de tentatives de connexion infructueuses.", - valueMustBeUnique: 'La valeur doit être unique', - }, - fields: { - chooseBetweenCustomTextOrDocument: - 'Choisissez entre saisir une URL personnalisée ou créer un lien vers un autre document.', - chooseDocumentToLink: 'Choisissez un document vers lequel établir un lien', - customURL: 'URL personnalisée', - enterURL: 'Entrez une URL', - internalLink: 'Lien interne', - linkType: 'Type de lien', - openInNewTab: 'Ouvrir dans un nouvel onglet', - textToDisplay: 'Texte à afficher', - }, - general: { - copy: 'Copie', - createdAt: 'Créé(e) à', - deletedCountSuccessfully: '{{count}} {{label}} supprimé avec succès.', - deletedSuccessfully: 'Supprimé(e) avec succès.', - email: 'E-mail', - notFound: 'Pas trouvé', - row: 'Ligne', - rows: 'Lignes', - successfullyCreated: '{{label}} créé(e) avec succès.', - successfullyDuplicated: '{{label}} dupliqué(e) avec succès.', - thisLanguage: 'Français', - updatedAt: 'Modifié le', - updatedCountSuccessfully: '{{count}} {{label}} mis à jour avec succès.', - updatedSuccessfully: 'Mis à jour avec succés.', - user: 'Utilisateur', - users: 'Utilisateurs', - value: 'Valeur', - }, - upload: { - fileName: 'Nom du fichier', - fileSize: 'Taille du fichier', - height: 'Hauteur', - sizes: 'Tailles', - width: 'Largeur', - }, - validation: { - emailAddress: "S'il vous plaît, veuillez entrer une adresse e-mail valide.", - enterNumber: "S'il vous plait, veuillez entrer un nombre valide.", - greaterThanMax: '{{value}} est supérieur au max autorisé {{label}} de {{max}}.', - invalidInput: 'Ce champ a une entrée invalide.', - invalidSelection: 'Ce champ a une sélection invalide.', - invalidSelections: 'Ce champ contient des sélections invalides suivantes :', - lessThanMin: '{{value}} est inférieur au min autorisé {{label}} de {{min}}.', - longerThanMin: - 'Cette valeur doit être supérieure à la longueur minimale de {{minLength}} caractères.', - notValidDate: '"{{value}}" n\'est pas une date valide.', - required: 'Ce champ est requis.', - requiresAtLeast: 'Ce champ doit avoir au moins {{count}} {{label}}.', - requiresNoMoreThan: 'Ce champ ne doit pas avoir plus de {{count}} {{label}}.', - requiresTwoNumbers: 'Ce champ doit avoir deux chiffres.', - shorterThanMax: - 'Cette valeur doit être inférieure à la longueur maximale de {{maxLength}} caractères.', - trueOrFalse: "Ce champ ne peut être égal qu'à vrai ou faux.", - validUploadID: "Ce champ n'est pas un valide identifiant de fichier.", - }, - version: { - autosavedSuccessfully: 'Enregistrement automatique réussi.', - draft: 'Brouillon', - draftSavedSuccessfully: 'Brouillon enregistré avec succès.', - published: 'Publié', - restoredSuccessfully: 'Restauré(e) avec succès.', - status: 'Statut', - }, -} diff --git a/packages/translations/src/_generatedFiles_/api/hr.js b/packages/translations/src/_generatedFiles_/api/hr.js deleted file mode 100644 index bd28c0f8ce..0000000000 --- a/packages/translations/src/_generatedFiles_/api/hr.js +++ /dev/null @@ -1,95 +0,0 @@ -export default { - authentication: { - account: 'Račun', - apiKey: 'API ključ', - enableAPIKey: 'Omogući API ključ', - loggedInChangePassword: - 'Da biste promijenili lozinku, otvorite svoj <0>račun i promijenite lozinku tamo.', - newAccountCreated: - 'Novi račun je kreiran. Pristupite računu klikom na {{serverURL}}. Molim kliknite na sljedeći link ili zalijepite URL, koji se nalazi ispod, u preglednik da biste potvrdili svoj email: {{verificationURL}}
    Nakon što potvrdite email, moći ćete se prijaviti.', - resetYourPassword: 'Restartiraj svoju lozinku', - verified: 'Potvrđeno', - verifyYourEmail: 'Potvrdi svoj email', - youAreReceivingResetPassword: - 'Primili ste ovo jer ste Vi (ili netko drugi) zatražili promjenu lozinke za Vaš račun. Molim kliknite na poveznicu ili zalijepite ovo u svoje preglednik da biste završili proces:', - youDidNotRequestPassword: - 'Ako niste zatražili ovo, molim ignorirajte ovaj email i Vaša lozinka ostat će nepromijenjena.', - }, - error: { - deletingFile: 'Dogodila se pogreška pri brisanju datoteke.', - emailOrPasswordIncorrect: 'Email ili lozinka netočni.', - followingFieldsInvalid_one: ' Ovo polje je nevaljano:', - followingFieldsInvalid_other: 'Ova polja su nevaljana:', - noFilesUploaded: 'Nijedna datoteka nije učitana.', - notAllowedToPerformAction: 'Nemate dopuštenje izvršiti ovu radnju.', - problemUploadingFile: 'Pojavio se problem pri učitavanju datoteke.', - unableToDeleteCount: 'Nije moguće izbrisati {{count}} od {{total}} {{label}}.', - unableToUpdateCount: 'Nije moguće ažurirati {{count}} od {{total}} {{label}}.', - unauthorized: 'Neovlašten, morate biti prijavljeni da biste uputili ovaj zahtjev.', - userLocked: 'Ovaj korisnik je zaključan zbog previše neuspješnih pokušaja prijave.', - valueMustBeUnique: 'Vrijednost mora biti jedinstvena.', - }, - fields: { - chooseBetweenCustomTextOrDocument: - 'Izaberite između unošenja prilagođenog teksta URL ili poveznice na drugi dokument.', - chooseDocumentToLink: 'Odaberite dokument koji želite povezati.', - customURL: 'Prilagođeni URL', - enterURL: 'Unesi URL', - internalLink: 'Interna poveznika', - linkType: 'Tip poveznce', - openInNewTab: 'Otvori u novoj kartici.', - textToDisplay: 'Tekst za prikaz', - }, - general: { - copy: 'Kopiraj', - createdAt: 'Kreirano u', - deletedCountSuccessfully: 'Uspješno izbrisano {{count}} {{label}}.', - deletedSuccessfully: 'Uspješno obrisano.', - email: 'Email', - notFound: 'Nije pronađeno', - row: 'Red', - rows: 'Redovi', - successfullyCreated: '{{label}} uspješno kreirano.', - successfullyDuplicated: '{{label}} uspješno duplicirano.', - thisLanguage: 'Hrvatski', - updatedAt: 'Ažurirano u', - updatedCountSuccessfully: 'Uspješno ažurirano {{count}} {{label}}.', - updatedSuccessfully: 'Uspješno ažurirano.', - user: 'Korisnik', - users: 'Korisnici', - value: 'Attribute', - }, - upload: { - fileName: 'Ime datoteke', - fileSize: 'Veličina datoteke', - height: 'Visina', - sizes: 'Veličine', - width: 'Širina', - }, - validation: { - emailAddress: 'Molim unestie valjanu email adresu.', - enterNumber: 'Molim unesite valjani broj.', - greaterThanMax: '{{value}} exceeds the maximum allowable {{label}} limit of {{max}}.', - invalidInput: 'Ovo polje ima nevaljan unos.', - invalidSelection: 'Ovo polje ima nevaljan odabir.', - invalidSelections: 'Ovo polje ima sljedeće nevaljane odabire:', - lessThanMin: '{{value}} is below the minimum allowable {{label}} limit of {{min}}.', - longerThanMin: 'Ova vrijednost mora biti duža od minimalne dužine od {{minLength}} znakova', - notValidDate: '"{{value}}" nije valjan datum.', - required: 'Ovo polje je obvezno.', - requiresAtLeast: 'Ovo polje zahtjeva minimalno {{count}} {{label}}.', - requiresNoMoreThan: 'Ovo polje zahtjeva ne više od {{count}} {{label}}.', - requiresTwoNumbers: 'Ovo polje zahtjeva dva broja.', - shorterThanMax: 'Ova vrijednost mora biti kraća od maksimalne dužine od {{maxLength}} znakova', - trueOrFalse: 'Ovo polje može biti samo točno ili netočno', - validUploadID: 'Ovo polje nije valjani ID prijenosa.', - }, - version: { - autosavedSuccessfully: 'Automatsko spremanje uspješno.', - draft: 'Nacrt', - draftSavedSuccessfully: 'Nacrt uspješno spremljen.', - published: 'Objavljeno', - restoredSuccessfully: 'Uspješno vraćeno.', - status: 'Status', - }, -} diff --git a/packages/translations/src/_generatedFiles_/api/hu.js b/packages/translations/src/_generatedFiles_/api/hu.js deleted file mode 100644 index 2dda8d17a3..0000000000 --- a/packages/translations/src/_generatedFiles_/api/hu.js +++ /dev/null @@ -1,97 +0,0 @@ -export default { - authentication: { - account: 'Fiók', - apiKey: 'API-kulcs', - enableAPIKey: 'API-kulcs engedélyezése', - loggedInChangePassword: - 'Jelszavának megváltoztatásához lépjen be <0>fiókjába, és ott szerkessze jelszavát.', - newAccountCreated: - 'Létrehoztunk egy új fiókot, amellyel hozzáférhet a következőhöz {{serverURL}} Kérjük, kattintson a következő linkre, vagy illessze be az alábbi URL-t a böngészőbe az e-mail-cím ellenőrzéséhez : {{verificationURL}}
    Az e-mail-cím ellenőrzése után sikeresen be tud majd jelentkezni.', - resetYourPassword: 'Jelszó visszaállítása', - verified: 'Megerősítve', - verifyYourEmail: 'Erősítse meg az e-mail címét', - youAreReceivingResetPassword: - 'Ezt azért kapja, mert Ön (vagy valaki más) kérte fiókja jelszavának visszaállítását. A folyamat befejezéséhez kattintson a következő linkre, vagy illessze be böngészőjébe:', - youDidNotRequestPassword: - 'Ha nem Ön kérte ezt, kérjük, hagyja figyelmen kívül ezt az e-mailt, és jelszava változatlan marad.', - }, - error: { - deletingFile: 'Hiba történt a fájl törlésekor.', - emailOrPasswordIncorrect: 'A megadott e-mail-cím vagy jelszó helytelen.', - followingFieldsInvalid_one: 'A következő mező érvénytelen:', - followingFieldsInvalid_other: 'A következő mezők érvénytelenek:', - noFilesUploaded: 'Nem került fájl feltöltésre.', - notAllowedToPerformAction: 'Ezt a műveletet nem hajthatja végre.', - problemUploadingFile: 'Hiba történt a fájl feltöltése közben.', - unableToDeleteCount: 'Nem sikerült törölni {{count}}/{{total}} {{label}}.', - unableToUpdateCount: 'Nem sikerült frissíteni {{count}}/{{total}} {{label}}.', - unauthorized: 'Jogosulatlan, a kéréshez be kell jelentkeznie.', - userLocked: 'Ez a felhasználó túl sok sikertelen bejelentkezési kísérlet miatt zárolva van.', - valueMustBeUnique: 'Az értéknek egyedinek kell lennie', - }, - fields: { - chooseBetweenCustomTextOrDocument: - 'Válasszon egy egyéni szöveges URL-cím megadása vagy egy másik dokumentumra való hivatkozás között.', - chooseDocumentToLink: 'Válassza ki a dokumentumot, amelyre hivatkozni kíván', - customURL: 'Egyéni URL', - enterURL: 'Adjon meg egy URL-t', - internalLink: 'Belső link', - linkType: 'Link típusa', - openInNewTab: 'Megnyitás új lapon', - textToDisplay: 'Megjelenítendő szöveg', - }, - general: { - copy: 'Másolás', - createdAt: 'Létrehozva:', - deletedCountSuccessfully: '{{count}} {{label}} sikeresen törölve.', - deletedSuccessfully: 'Sikeresen törölve.', - email: 'E-mail', - notFound: 'Nem található', - row: 'Sor', - rows: 'Sorok', - successfullyCreated: '{{label}} sikeresen létrehozva.', - successfullyDuplicated: '{{label}} sikeresen duplikálódott.', - thisLanguage: 'Magyar', - updatedAt: 'Frissítve:', - updatedCountSuccessfully: '{{count}} {{label}} sikeresen frissítve.', - updatedSuccessfully: 'Sikeresen frissítve.', - user: 'Felhasználó', - users: 'Felhasználók', - value: 'Érték', - }, - upload: { - fileName: 'Fájlnév', - fileSize: 'Fájl mérete', - height: 'Magasság', - sizes: 'Méretek', - width: 'Szélesség', - }, - validation: { - emailAddress: 'Kérjük, adjon meg egy érvényes e-mail címet.', - enterNumber: 'Kérjük, adjon meg egy érvényes számot.', - greaterThanMax: '{{value}} nagyobb, mint a megengedett maximum {{label}} érték, ami {{max}}.', - invalidInput: 'Ez a mező érvénytelen értéket tartalmaz.', - invalidSelection: 'Ez a mező érvénytelen kijelöléssel rendelkezik.', - invalidSelections: 'Ez a mező a következő érvénytelen kijelöléseket tartalmazza:', - lessThanMin: '{{value}} kisebb, mint a megengedett minimum {{label}} érték, ami {{min}}.', - longerThanMin: - 'Ennek az értéknek hosszabbnak kell lennie, mint a minimális {{minLength}} karakter hosszúság.', - notValidDate: '" {{value}} " nem érvényes dátum.', - required: 'Ez a mező kötelező.', - requiresAtLeast: 'Ehhez a mezőhöz legalább {{count}} {{label}} szükséges.', - requiresNoMoreThan: 'Ehhez a mezőhöz legfeljebb {{count}} {{label}} szükséges.', - requiresTwoNumbers: 'Ehhez a mezőhöz két szám szükséges.', - shorterThanMax: - 'Ennek az értéknek rövidebbnek kell lennie, mint a maximálisan megengedett {{maxLength}} karakter.', - trueOrFalse: 'Ez a mező csak igaz vagy hamis lehet.', - validUploadID: 'Ez a mező nem érvényes feltöltési azonosító.', - }, - version: { - autosavedSuccessfully: 'Automatikus mentés sikeres.', - draft: 'Piszkozat', - draftSavedSuccessfully: 'A piszkozat sikeresen mentve.', - published: 'Közzétett', - restoredSuccessfully: 'Sikeresen visszaállítva.', - status: 'Állapot', - }, -} diff --git a/packages/translations/src/_generatedFiles_/api/index.ts b/packages/translations/src/_generatedFiles_/api/index.ts deleted file mode 100644 index d4d2421008..0000000000 --- a/packages/translations/src/_generatedFiles_/api/index.ts +++ /dev/null @@ -1,65 +0,0 @@ -import ar from './ar.js' -import az from './az.js' -import bg from './bg.js' -import cs from './cs.js' -import de from './de.js' -import en from './en.js' -import es from './es.js' -import fa from './fa.js' -import fr from './fr.js' -import hr from './hr.js' -import hu from './hu.js' -import it from './it.js' -import ja from './ja.js' -import ko from './ko.js' -import my from './my.js' -import nb from './nb.js' -import nl from './nl.js' -import pl from './pl.js' -import pt from './pt.js' -import ro from './ro.js' -import rs from './rs.js' -import rsLatin from './rs-latin.js' -import ru from './ru.js' -import sv from './sv.js' -import th from './th.js' -import tr from './tr.js' -import ua from './ua.js' -import vi from './vi.js' -import zh from './zh.js' -import zhTW from './zhTW.js' - -export const translations = { - ar, - az, - bg, - cs, - de, - en, - es, - fa, - fr, - hr, - hu, - it, - ja, - ko, - my, - nb, - nl, - pl, - pt, - ro, - rs, - 'rs-latin': rsLatin, - ru, - sv, - th, - tr, - ua, - vi, - zh, - zhTW, -} as { - [locale: string]: Record> -} diff --git a/packages/translations/src/_generatedFiles_/api/it.js b/packages/translations/src/_generatedFiles_/api/it.js deleted file mode 100644 index d754b77cd8..0000000000 --- a/packages/translations/src/_generatedFiles_/api/it.js +++ /dev/null @@ -1,97 +0,0 @@ -export default { - authentication: { - account: 'Account', - apiKey: 'Chiave API', - enableAPIKey: 'Abilita la Chiave API', - loggedInChangePassword: - 'Per cambiare la tua password, vai al tuo <0>account e modifica la tua password lì.', - newAccountCreated: - 'Un nuovo account è appena stato creato per te per accedere a {{serverURL}} Clicca sul seguente link o incolla l\'URL qui sotto nel browser per verificare la tua email: {{verificationURL}}
    Dopo aver verificato la tua email, sarai in grado di effettuare il log in con successo.', - resetYourPassword: 'Modifica la tua Password', - verified: 'Verificato', - verifyYourEmail: 'Verifica la tua email', - youAreReceivingResetPassword: - 'Ricevi questo messaggio perché tu (o qualcun altro) hai richiesto la modifica della password per il tuo account. Clicca sul seguente link o incollalo nel browser per completare il processo:', - youDidNotRequestPassword: - "Se non l'hai richiesto, ignora questa email e la tua password rimarrà invariata.", - }, - error: { - deletingFile: "Si è verificato un errore durante l'eleminazione del file.", - emailOrPasswordIncorrect: "L'email o la password fornita non è corretta.", - followingFieldsInvalid_one: 'Il seguente campo non è valido:', - followingFieldsInvalid_other: 'I seguenti campi non sono validi:', - noFilesUploaded: 'Nessun file è stato caricato.', - notAllowedToPerformAction: 'Non sei autorizzato a eseguire questa azione.', - problemUploadingFile: 'Si è verificato un problema durante il caricamento del file.', - unableToDeleteCount: 'Impossibile eliminare {{count}} su {{total}} {{label}}.', - unableToUpdateCount: 'Impossibile aggiornare {{count}} su {{total}} {{label}}.', - unauthorized: 'Non autorizzato, devi essere loggato per effettuare questa richiesta.', - userLocked: 'Questo utente è bloccato a causa di troppi tentativi di accesso non riusciti.', - valueMustBeUnique: 'Il valore deve essere univoco', - }, - fields: { - chooseBetweenCustomTextOrDocument: - "Scegli tra l'inserimento di un URL di testo personalizzato o il collegamento a un altro documento.", - chooseDocumentToLink: 'Scegli un documento a cui collegarti', - customURL: 'URL personalizzato', - enterURL: 'Inserisci un URL', - internalLink: 'Collegamento interno', - linkType: 'Tipo di collegamento', - openInNewTab: 'Apri in una nuova scheda', - textToDisplay: 'Testo da visualizzare', - }, - general: { - copy: 'Copia', - createdAt: 'Creato il', - deletedCountSuccessfully: '{{count}} {{label}} eliminato con successo.', - deletedSuccessfully: 'Eliminato con successo.', - email: 'Email', - notFound: 'Non Trovato', - row: 'Riga', - rows: 'Righe', - successfullyCreated: '{{label}} creato con successo.', - successfullyDuplicated: '{{label}} duplicato con successo.', - thisLanguage: 'Italiano', - updatedAt: 'Aggiornato il', - updatedCountSuccessfully: '{{count}} {{label}} aggiornato con successo.', - updatedSuccessfully: 'Aggiornato con successo.', - user: 'Utente', - users: 'Utenti', - value: 'Valore', - }, - upload: { - fileName: 'Nome File', - fileSize: 'Dimensione File', - height: 'Altezza', - sizes: 'Formati', - width: 'Larghezza', - }, - validation: { - emailAddress: 'Si prega di inserire un indirizzo email valido.', - enterNumber: 'Si prega di inserire un numero valido.', - greaterThanMax: '{{value}} è superiore al massimo consentito {{label}} di {{max}}.', - invalidInput: 'Questo campo ha un input non valido.', - invalidSelection: 'Questo campo ha una selezione non valida.', - invalidSelections: "'In questo campo sono presenti le seguenti selezioni non valide:'", - lessThanMin: '{{value}} è inferiore al minimo consentito {{label}} di {{min}}.', - longerThanMin: - 'Questo valore deve essere più lungo della lunghezza minima di {{minLength}} caratteri.', - notValidDate: '"{{value}}" non è una data valida.', - required: 'Questo campo è obbligatorio.', - requiresAtLeast: 'Questo campo richiede almeno {{count}} {{label}}.', - requiresNoMoreThan: 'Questo campo richiede non più di {{count}} {{label}}.', - requiresTwoNumbers: 'Questo campo richiede due numeri.', - shorterThanMax: - 'Questo valore deve essere inferiore alla lunghezza massima di {{maxLength}} caratteri.', - trueOrFalse: "Questo campo può essere solo uguale a 'true' o 'false'.", - validUploadID: "'Questo campo non è un ID di Upload valido.'", - }, - version: { - autosavedSuccessfully: 'Salvataggio automatico riuscito.', - draft: 'Bozza', - draftSavedSuccessfully: 'Bozza salvata con successo.', - published: 'Pubblicato', - restoredSuccessfully: 'Ripristinato con successo.', - status: 'Stato', - }, -} diff --git a/packages/translations/src/_generatedFiles_/api/ja.js b/packages/translations/src/_generatedFiles_/api/ja.js deleted file mode 100644 index c477b397a1..0000000000 --- a/packages/translations/src/_generatedFiles_/api/ja.js +++ /dev/null @@ -1,95 +0,0 @@ -export default { - authentication: { - account: 'アカウント', - apiKey: 'API Key', - enableAPIKey: 'API Keyを許可', - loggedInChangePassword: - 'パスワードを変更するには、<0>アカウントにアクセスしてパスワードを編集してください。', - newAccountCreated: - '{{serverURL}}にアクセスするための新しいアカウントが作成されました。以下のリンクをクリックするか、ブラウザに以下のURLを貼り付けて、メールアドレスの確認を行ってください。{{verificationURL}}
    メールアドレスの確認後に、正常にログインできるようになります。', - resetYourPassword: 'パスワードの再設定', - verified: '検証済み', - verifyYourEmail: 'メールアドレスの確認', - youAreReceivingResetPassword: - 'アカウントのパスワードリセットがリクエストされました。次のリンクをクリックする、または、ブラウザにリンクを貼り付けて、手続きを行ってください:', - youDidNotRequestPassword: - 'もし望まない場合は、このメールを無視してください。パスワードは変更されません。', - }, - error: { - deletingFile: 'ファイルの削除中にエラーが発生しました。', - emailOrPasswordIncorrect: 'メールアドレス、または、パスワードが正しくありません。', - followingFieldsInvalid_one: '次のフィールドは無効です:', - followingFieldsInvalid_other: '次のフィールドは無効です:', - noFilesUploaded: 'ファイルがアップロードされていません。', - notAllowedToPerformAction: 'このアクションは許可されていません。', - problemUploadingFile: 'ファイルのアップロード中に問題が発生しました。', - unableToDeleteCount: '{{total}} {{label}} から {{count}} を削除できません。', - unableToUpdateCount: '{{total}} {{label}} のうち {{count}} 個を更新できません。', - unauthorized: '認証されていません。このリクエストを行うにはログインが必要です。', - userLocked: 'このユーザーは、ログイン試行回数が多すぎるため、ロックされています。', - valueMustBeUnique: 'ユニークな値である必要があります。', - }, - fields: { - chooseBetweenCustomTextOrDocument: - 'カスタムテキストのURLを入力するか、他のドキュメントにリンクするかを選択してください。', - chooseDocumentToLink: 'リンクするドキュメントを選択してください。', - customURL: 'カスタムURL', - enterURL: 'URL を入力してください', - internalLink: '内部リンク', - linkType: 'リンクタイプ', - openInNewTab: '新しいタブで開く', - textToDisplay: '表示するテキスト', - }, - general: { - copy: 'コピー', - createdAt: '作成日', - deletedCountSuccessfully: '{{count}}つの{{label}}を正常に削除しました。', - deletedSuccessfully: '正常に削除されました。', - email: 'メールアドレス', - notFound: 'Not Found', - row: '列', - rows: '列', - successfullyCreated: '{{label}} が作成されました。', - successfullyDuplicated: '{{label}} が複製されました。', - thisLanguage: 'Japanese', - updatedAt: '更新日', - updatedCountSuccessfully: '{{count}}つの{{label}}を正常に更新しました。', - updatedSuccessfully: '更新成功。', - user: 'ユーザー', - users: 'ユーザー', - value: '値', - }, - upload: { - fileName: 'ファイル名', - fileSize: 'ファイル容量', - height: '高さ', - sizes: '容量', - width: '横幅', - }, - validation: { - emailAddress: '有効なメールアドレスを入力してください。', - enterNumber: '有効な数値を入力してください。', - greaterThanMax: '{{value}}は許容最大{{label}}の{{max}}を超えています。', - invalidInput: '無効な入力値です。', - invalidSelection: '無効な選択です。', - invalidSelections: '次の無効な選択があります: ', - lessThanMin: '{{value}}は許容最小{{label}}の{{min}}未満です。', - longerThanMin: '{{minLength}} 文字以上にする必要があります。', - notValidDate: '"{{value}}" は有効な日付ではありません。', - required: '必須フィールドです。', - requiresAtLeast: '少なくとも {{count}} {{label}} 以上が必要です。', - requiresNoMoreThan: '最大で {{count}} {{label}} 以下にする必要があります。', - requiresTwoNumbers: '2つの数値が必要です。', - shorterThanMax: '{{maxLength}} 文字以下にする必要があります。', - trueOrFalse: '"true" または "false" の値にする必要があります。', - validUploadID: '有効なアップロードIDではありません。', - }, - version: { - autosavedSuccessfully: '自動保存に成功しました。', - draft: 'ドラフト', - draftSavedSuccessfully: '下書きは正常に保存されました。', - published: '公開済み', - restoredSuccessfully: '正常に復元されました。', - status: 'ステータス', - }, -} diff --git a/packages/translations/src/_generatedFiles_/api/ko.js b/packages/translations/src/_generatedFiles_/api/ko.js deleted file mode 100644 index 06dac102d1..0000000000 --- a/packages/translations/src/_generatedFiles_/api/ko.js +++ /dev/null @@ -1,95 +0,0 @@ -export default { - authentication: { - account: '계정', - apiKey: 'API 키', - enableAPIKey: 'API 키 활성화', - loggedInChangePassword: - '비밀번호를 변경하려면 <0>계정 화면으로 이동하여 비밀번호를 편집하세요.', - newAccountCreated: - '{{serverURL}}에 접근할 수 있는 새로운 계정이 생성되었습니다. 다음 링크를 클릭하거나 브라우저에 URL을 붙여넣으세요: {{verificationURL}}
    이메일을 확인한 후에 로그인할 수 있습니다.', - resetYourPassword: '비밀번호 재설정', - verified: '확인됨', - verifyYourEmail: '이메일을 확인해주세요', - youAreReceivingResetPassword: - '당신(혹은 다른 사람)이 계정의 비밀번호 초기화를 요청했기 때문에 이 이메일을 받았습니다. 다음 링크를 클릭하거나 브라우저에 붙여넣어 비밀번호를 초기화하세요:', - youDidNotRequestPassword: - '비밀번호 초기화를 요청하지 않았다면 이 이메일을 무시하시고 비밀번호를 변경하지 마세요.', - }, - error: { - deletingFile: '파일을 삭제하는 중에 오류가 발생했습니다.', - emailOrPasswordIncorrect: '입력한 이메일 또는 비밀번호가 올바르지 않습니다.', - followingFieldsInvalid_one: '다음 입력란이 유효하지 않습니다:', - followingFieldsInvalid_other: '다음 입력란이 유효하지 않습니다:', - noFilesUploaded: '파일이 업로드되지 않았습니다.', - notAllowedToPerformAction: '이 작업을 수행할 권한이 없습니다.', - problemUploadingFile: '파일 업로드 중에 문제가 발생했습니다.', - unableToDeleteCount: '총 {{total}}개 중 {{count}}개의 {{label}}을(를) 삭제할 수 없습니다.', - unableToUpdateCount: '총 {{total}}개 중 {{count}}개의 {{label}}을(를) 업데이트할 수 없습니다.', - unauthorized: '권한 없음, 이 요청을 수행하려면 로그인해야 합니다.', - userLocked: '이 사용자는 로그인 실패 횟수가 너무 많아 잠겼습니다.', - valueMustBeUnique: '값은 고유해야 합니다.', - }, - fields: { - chooseBetweenCustomTextOrDocument: - '사용자 지정 텍스트 URL 또는 다른 문서에 링크 중 선택하세요.', - chooseDocumentToLink: '연결할 문서 선택', - customURL: '사용자 지정 URL', - enterURL: 'URL 입력', - internalLink: '내부 링크', - linkType: '링크 유형', - openInNewTab: '새 탭에서 열기', - textToDisplay: '표시할 텍스트', - }, - general: { - copy: '복사', - createdAt: '생성 일시', - deletedCountSuccessfully: '{{count}}개의 {{label}}를 삭제했습니다.', - deletedSuccessfully: '삭제되었습니다.', - email: '이메일', - notFound: '찾을 수 없음', - row: '행', - rows: '행', - successfullyCreated: '{{label}}이(가) 생성되었습니다.', - successfullyDuplicated: '{{label}}이(가) 복제되었습니다.', - thisLanguage: '한국어', - updatedAt: '업데이트 일시', - updatedCountSuccessfully: '{{count}}개의 {{label}}을(를) 업데이트했습니다.', - updatedSuccessfully: '성공적으로 업데이트되었습니다.', - user: '사용자', - users: '사용자', - value: '값', - }, - upload: { - fileName: '파일 이름', - fileSize: '파일 크기', - height: '높이', - sizes: '크기', - width: '너비', - }, - validation: { - emailAddress: '유효한 이메일 주소를 입력하세요.', - enterNumber: '유효한 숫자를 입력하세요.', - greaterThanMax: '{{value}}은(는) 최대 허용된 {{label}}인 {{max}}개보다 큽니다.', - invalidInput: '이 입력란에는 유효하지 않은 입력이 있습니다.', - invalidSelection: '이 입력란에는 유효하지 않은 선택이 있습니다.', - invalidSelections: '이 입력란에는 다음과 같은 유효하지 않은 선택 사항이 있습니다:', - lessThanMin: '{{value}}은(는) 최소 허용된 {{label}}인 {{min}}개보다 작습니다.', - longerThanMin: '이 값은 최소 길이인 {{minLength}}자보다 길어야 합니다.', - notValidDate: '"{{value}}"은(는) 유효한 날짜가 아닙니다.', - required: '이 입력란은 필수입니다.', - requiresAtLeast: '이 입력란운 최소한 {{count}} {{label}}이 필요합니다.', - requiresNoMoreThan: '이 입력란은 최대 {{count}} {{label}} 이하이어야 합니다.', - requiresTwoNumbers: '이 입력란은 두 개의 숫자가 필요합니다.', - shorterThanMax: '이 값은 최대 길이인 {{maxLength}}자보다 짧아야 합니다.', - trueOrFalse: '이 입력란은 true 또는 false만 가능합니다.', - validUploadID: '이 입력란은 유효한 업로드 ID가 아닙니다.', - }, - version: { - autosavedSuccessfully: '자동 저장이 완료되었습니다.', - draft: '초안', - draftSavedSuccessfully: '초안이 저장되었습니다.', - published: '게시됨', - restoredSuccessfully: '복원이 완료되었습니다.', - status: '상태', - }, -} diff --git a/packages/translations/src/_generatedFiles_/api/my.js b/packages/translations/src/_generatedFiles_/api/my.js deleted file mode 100644 index 24f2052b59..0000000000 --- a/packages/translations/src/_generatedFiles_/api/my.js +++ /dev/null @@ -1,98 +0,0 @@ -export default { - authentication: { - account: 'အကောင့်', - apiKey: 'API Key', - enableAPIKey: 'API Key ကိုဖွင့်ရန်', - loggedInChangePassword: - 'စကားဝှက် ပြောင်းလဲရန်အတွက် သင့် <0>အကောင့် သို့ဝင်ရောက်ပြီး ပြင်ဆင် သတ်မှတ်ပါ။', - newAccountCreated: - '{{serverURL}} သို့ဝင်ရောက်ရန် သင့်အီးမေးလ်ကို အတည်ပြုရန်အတွက် အကောင့်အသစ်တစ်ခုကို ယခုလေးတင် ဖန်တီးပြီးပါပြီ။ ကျေးဇူးပြု၍ အောက်ပါလင့်ခ်ကို နှိပ်ပါ သို့မဟုတ် သင့်အီးမေးလ်ကို အတည်ပြုရန် ဖော်ပြပါ လင့်ခ်ကို သင့်ဘရောက်ဆာထဲသို့ ကူးထည့်ပါ- {{verificationURL}}
    သင့်အီးမေးလ်ကို အတည်ပြုပြီးနောက်၊ သင်သည် အောင်မြင်စွာ လော့ဂ်အင်ဝင်နိုင်ပါမည်။', - resetYourPassword: 'သင့်စကားဝှက်ကို ပြန်လည်သတ်မှတ်ပါ။', - verified: 'စိစစ်ပြီး', - verifyYourEmail: 'သင့်အီးမေးလ်ကို အတည်ပြုပါ။', - youAreReceivingResetPassword: - 'သင့်အကောင့်အတွက် စကားဝှက်ကို ပြန်လည်သတ်မှတ်ရန် သင် (သို့မဟုတ် အခြားသူတစ်ဦးဦး) က တောင်းဆိုထားသောကြောင့်လက်ခံရရှိခြင်းဖြစ်သည်။ ကျေးဇူးပြု၍ အောက်ပါလင့်ခ်ကို နှိပ်ပါ (သို့မဟုတ်) ၎င်းကို သင့်ဘရောက်ဆာထဲသို့ ကူးထည့်ပါ။', - youDidNotRequestPassword: - 'ယခု လုပ်ဆောင်ချက်ကို သင်မတောင်းဆိုထားပါက ဤအီးမေးလ်ကို လျစ်လျူရှုထားခြင်းဖြင့် သင့်စကားဝှက်သည် ပြောင်းလဲမည်မဟုတ်ပါ။', - }, - error: { - deletingFile: 'ဖိုင်ကိုဖျက်ရာတွင် အမှားအယွင်းရှိနေသည်။', - emailOrPasswordIncorrect: 'ထည့်သွင်းထားသော အီးမေးလ် သို့မဟုတ် စကားဝှက်သည် မမှန်ပါ။', - followingFieldsInvalid_one: 'ထည့်သွင်းထားသော အချက်အလက်သည် မမှန်ကန်ပါ။', - followingFieldsInvalid_other: 'ထည့်သွင်းထားသော အချက်အလက်များသည် မမှန်ကန်ပါ။', - noFilesUploaded: 'ဖိုင်များကို အပ်လုဒ်လုပ်ထားခြင်းမရှိပါ။', - notAllowedToPerformAction: 'ဤလုပ်ဆောင်ချက်ကို လုပ်ဆောင်ရန် ခွင့်မပြုပါ။', - problemUploadingFile: 'ဖိုင်ကို အပ်လုဒ်တင်ရာတွင် ပြဿနာရှိနေသည်။', - unableToDeleteCount: '{{total}} {{label}} မှ {{count}} ကို ဖျက်၍မရပါ။', - unableToUpdateCount: '{{total}} {{label}} မှ {{count}} ကို အပ်ဒိတ်လုပ်၍မရပါ။', - unauthorized: 'အခွင့်မရှိပါ။ ဤတောင်းဆိုချက်ကို လုပ်ဆောင်နိုင်ရန် သင်သည် လော့ဂ်အင်ဝင်ရပါမည်။', - userLocked: - 'အကောင့်ထဲကို ဝင်ရန် အရမ်းအရမ်းကို ကြိုးပမ်းနေသောကြောင့် အကောင့်အား လော့ခ်ချလိုက်ပါသည်။', - valueMustBeUnique: 'value သည် အဓိပ္ပာယ်ရှိရပါမည်။', - }, - fields: { - chooseBetweenCustomTextOrDocument: - 'စိတ်ကြိုက်စာသား URL ကိုထည့်ခြင်း သို့မဟုတ် အခြားစာရွက်စာတမ်းတစ်ခုသို့ လင့်ခ်ချိတ်ခြင်းအကြား ရွေးချယ်ပါ။', - chooseDocumentToLink: 'ချိတ်ဆက်ရန် စာရွက်စာတမ်းကို ရွေးပါ။', - customURL: 'စိတ်ကြိုက် URL', - enterURL: 'URL တစ်ခုထည့်ပါ။', - internalLink: 'Internal Link', - linkType: 'လင့်အမျိုးအစား', - openInNewTab: 'တက်ဘ်အသစ်တွင် ဖွင့်ပါ။', - textToDisplay: 'ပြသရန် စာသား', - }, - general: { - copy: 'ကူးယူမည်။', - createdAt: 'ဖန်တီးခဲ့သည့်အချိန်', - deletedCountSuccessfully: '{{count}} {{label}} ကို အောင်မြင်စွာ ဖျက်လိုက်ပါပြီ။', - deletedSuccessfully: 'အောင်မြင်စွာ ဖျက်လိုက်ပါပြီ။', - email: 'အီးမေးလ်', - notFound: 'ဘာမှ မရှိတော့ဘူး။', - row: 'အတန်း', - rows: 'Rows', - successfullyCreated: '{{label}} အောင်မြင်စွာဖန်တီးခဲ့သည်။', - successfullyDuplicated: '{{label}} အောင်မြင်စွာ ပုံတူပွားခဲ့သည်။', - thisLanguage: 'မြန်မာစာ', - updatedAt: 'ပြင်ဆင်ခဲ့သည့်အချိန်', - updatedCountSuccessfully: '{{count}} {{label}} ကို အောင်မြင်စွာ အပ်ဒိတ်လုပ်ခဲ့သည်။', - updatedSuccessfully: 'အပ်ဒိတ်လုပ်ပြီးပါပြီ။', - user: 'အသုံးပြုသူ', - users: 'အသုံးပြုသူများ', - value: 'တန်ဖိုး', - }, - upload: { - fileName: 'ဖိုင် နာမည်', - fileSize: 'ဖိုင် အရွယ်အစား', - height: 'Height', - sizes: 'အရွယ်အစားများ', - width: 'အကျယ်', - }, - validation: { - emailAddress: 'မှန်ကန်သော အီးမေးလ်လိပ်စာကို ထည့်သွင်းပါ။', - enterNumber: 'မှန်ကန်သောနံပါတ်တစ်ခုထည့်ပါ။', - greaterThanMax: - '{{value}} သည် {{max}} ထက် ပိုမိုကြီးသည်။ ဤသည်ဖြင့် {{label}} အများဆုံးခွင့်ပြုထားသော တန်ဖိုးထက် ကြီးသည်။', - invalidInput: 'ဤအကွက်တွင် မမှန်ကန်သော ထည့်သွင်းမှုတစ်ခုရှိသည်။', - invalidSelection: 'ဤအကွက်တွင် မမှန်ကန်သော ရွေးချယ်မှုတစ်ခုရှိသည်။', - invalidSelections: 'ဤအကွက်တွင် အောက်ပါ မမှန်ကန်သော ရွေးချယ်မှုများ ရှိသည်', - lessThanMin: - '{{value}} သည် {{min}} ထက် ပိုမိုနိမ့်သည်။ ဤသည်ဖြင့် {{label}} အနည်းဆုံးခွင့်ပြုထားသော တန်ဖိုးထက် နိမ့်သည်။', - longerThanMin: 'ဤတန်ဖိုးသည် အနိမ့်ဆုံးအရှည် {{minLength}} စာလုံးထက် ပိုရှည်ရမည်။', - notValidDate: '"{{value}}" သည် တရားဝင်ရက်စွဲမဟုတ်ပါ။', - required: 'ဤအကွက်ကို လိုအပ်သည်။', - requiresAtLeast: 'ဤအကွက်သည် အနည်းဆုံး {{count}} {{label}} လိုအပ်သည်', - requiresNoMoreThan: 'ဤအကွက်တွင် {{count}} {{label}} ထက် မပိုရပါ။', - requiresTwoNumbers: 'ဤအကွက်သည် နံပါတ်နှစ်ခု လိုအပ်ပါသည်။', - shorterThanMax: 'ဤတန်ဖိုးသည် စာလုံး {{maxLength}} လုံး၏ အမြင့်ဆုံးအရှည်ထက် ပိုတိုရပါမည်။', - trueOrFalse: 'ဤအကွက်သည် တစ်ခုခုဖြစ်ရပါမည်။', - validUploadID: "'ဤအကွက်သည် မှန်ကန်သော အပ်လုဒ် ID မဟုတ်ပါ။'", - }, - version: { - autosavedSuccessfully: 'အလိုအလျောက် သိမ်းဆည်းပြီးပါပြီ။', - draft: 'မူကြမ်း', - draftSavedSuccessfully: 'မူကြမ်းကို အောင်မြင်စွာ သိမ်းဆည်းပြီးပါပြီ။', - published: 'တင်ပြီးပြီ။', - restoredSuccessfully: 'အောင်မြင်စွာ ပြန်လည်ရယူခဲ့သည်။', - status: 'အခြေအနေ', - }, -} diff --git a/packages/translations/src/_generatedFiles_/api/nb.js b/packages/translations/src/_generatedFiles_/api/nb.js deleted file mode 100644 index 5d2e2dc899..0000000000 --- a/packages/translations/src/_generatedFiles_/api/nb.js +++ /dev/null @@ -1,95 +0,0 @@ -export default { - authentication: { - account: 'Konto', - apiKey: 'API-nøkkel', - enableAPIKey: 'Aktiver API-nøkkel', - loggedInChangePassword: - 'For å endre passordet ditt, gå til <0>kontoen din og endre passordet der.', - newAccountCreated: - 'En ny konto har blitt opprettet for deg på {{serverURL}} Klikk på lenken nedenfor eller lim inn URLen i nettleseren din for å bekrefte e-postadressen din: {{verificationURL}}
    Etter at du har bekreftet e-postadressen din, kan du logge inn.', - resetYourPassword: 'Tilbakestill passordet ditt', - verified: 'Bekreftet', - verifyYourEmail: 'Bekreft e-postadressen din', - youAreReceivingResetPassword: - 'Du mottar denne e-posten fordi du (eller noen andre) har bedt om tilbakestilling av passordet til kontoen din. Klikk på lenken nedenfor, eller lim den inn i nettleseren din for å fullføre prosessen:', - youDidNotRequestPassword: - 'Hvis du ikke har bedt om dette, kan du ignorere denne e-posten, og passordet ditt vil forbli uendret.', - }, - error: { - deletingFile: 'Det oppstod en feil under sletting av filen.', - emailOrPasswordIncorrect: 'E-postadressen eller passordet er feil.', - followingFieldsInvalid_one: 'Følgende felt er ugyldig:', - followingFieldsInvalid_other: 'Følgende felter er ugyldige:', - noFilesUploaded: 'Ingen filer ble lastet opp.', - notAllowedToPerformAction: 'Du har ikke tillatelse til å utføre denne handlingen.', - problemUploadingFile: 'Det oppstod et problem under opplasting av filen.', - unableToDeleteCount: 'Kan ikke slette {{count}} av {{total}} {{label}}.', - unableToUpdateCount: 'Kan ikke oppdatere {{count}} av {{total}} {{label}}.', - unauthorized: 'Uautorisert, du må være innlogget for å gjøre denne forespørselen.', - userLocked: 'Denne brukeren er låst på grunn av for mange mislykkede innloggingsforsøk.', - valueMustBeUnique: 'Verdien må være unik', - }, - fields: { - chooseBetweenCustomTextOrDocument: - 'Velg mellom å skrive inn en egen tekst-URL eller å lenke til et annet dokument.', - chooseDocumentToLink: 'Velg et dokument å lenke til', - customURL: 'Egendefinert URL', - enterURL: 'Skriv inn en URL', - internalLink: 'Intern lenke', - linkType: 'Lenketype', - openInNewTab: 'Åpne i ny fane', - textToDisplay: 'Tekst som skal vises', - }, - general: { - copy: 'Kopiér', - createdAt: 'Opprettet', - deletedCountSuccessfully: 'Slettet {{count}} {{label}}.', - deletedSuccessfully: 'Slettet.', - email: 'E-post', - notFound: 'Ikke funnet', - row: 'Rad', - rows: 'Rader', - successfullyCreated: '{{label}} ble opprettet.', - successfullyDuplicated: '{{label}} ble duplisert.', - thisLanguage: 'Norsk', - updatedAt: 'Oppdatert', - updatedCountSuccessfully: 'Oppdaterte {{count}} {{label}} vellykket.', - updatedSuccessfully: 'Oppdatert.', - user: 'Bruker', - users: 'Brukere', - value: 'Verdi', - }, - upload: { - fileName: 'Filnavn', - fileSize: 'Filstørrelse', - height: 'Høyde', - sizes: 'Størrelser', - width: 'Bredde', - }, - validation: { - emailAddress: 'Vennligst skriv inn en gyldig e-postadresse.', - enterNumber: 'Vennligst skriv inn et gyldig tall.', - greaterThanMax: '{{value}} er større enn den tillatte maksimale {{label}} på {{max}}.', - invalidInput: 'Dette feltet har en ugyldig inndata.', - invalidSelection: 'Dette feltet har en ugyldig utvalg.', - invalidSelections: 'Dette feltet har følgende ugyldige utvalg:', - lessThanMin: '{{value}} er mindre enn den tillatte minimale {{label}} på {{min}}.', - longerThanMin: 'Denne verdien må være lengre enn minimumslengden på {{minLength}} tegn.', - notValidDate: '"{{value}}" er ikke en gyldig dato.', - required: 'Dette feltet er påkrevd.', - requiresAtLeast: 'Dette feltet krever minst {{count}} {{label}}.', - requiresNoMoreThan: 'Dette feltet krever maksimalt {{count}} {{label}}.', - requiresTwoNumbers: 'Dette feltet krever to tall.', - shorterThanMax: 'Denne verdien må være kortere enn maksimal lengde på {{maxLength}} tegn.', - trueOrFalse: 'Dette feltet kan bare være likt true eller false.', - validUploadID: 'Dette feltet er ikke en gyldig opplastings-ID.', - }, - version: { - autosavedSuccessfully: 'Lagret automatisk.', - draft: 'Utkast', - draftSavedSuccessfully: 'Utkast lagret.', - published: 'Publisert', - restoredSuccessfully: 'Gjenopprettet.', - status: 'Status', - }, -} diff --git a/packages/translations/src/_generatedFiles_/api/nl.js b/packages/translations/src/_generatedFiles_/api/nl.js deleted file mode 100644 index 76285c7606..0000000000 --- a/packages/translations/src/_generatedFiles_/api/nl.js +++ /dev/null @@ -1,95 +0,0 @@ -export default { - authentication: { - account: 'Account', - apiKey: 'API-sleutel', - enableAPIKey: 'Activeer API-sleutel', - loggedInChangePassword: - 'Om uw wachtwoord te wijzigen, gaat u naar <0>account en wijzigt u daar uw wachtwoord.', - newAccountCreated: - 'Er is zojuist een nieuw account voor u aangemaakt waarmee u toegang krijgt tot {{serverURL}}. Klik op de volgende link, of plak onderstaande URL in uw browser om uw e-mailadres te verifiëren: {{verificationURL}}
    Na de verificatie van uw e-mail kunt u succesvol inloggen.', - resetYourPassword: 'Reset uw wachtwoord', - verified: 'Geverifieerd', - verifyYourEmail: 'Verifieer uw e-mailadres', - youAreReceivingResetPassword: - 'U ontvangt dit omdat u (of iemand anders) het wachtwoord voor uw account opnieuw heeft aangevraagd. Klik op de volgende link, of plak deze in uw browser om het proces te voltooien:', - youDidNotRequestPassword: - 'Als u dit niet heeft aangevraagd, negeer dan deze e-mail en uw wachtwoord zal ongewijzigd blijven.', - }, - error: { - deletingFile: 'Er is een fout opgetreden bij het verwijderen van dit bestand.', - emailOrPasswordIncorrect: 'Het opgegeven e-mailadres of wachtwoord is onjuist.', - followingFieldsInvalid_one: 'Het volgende veld is ongeldig:', - followingFieldsInvalid_other: 'De volgende velden zijn ongeldig:', - noFilesUploaded: 'Er zijn geen bestanden geüpload.', - notAllowedToPerformAction: 'U mag deze actie niet uitvoeren.', - problemUploadingFile: 'Er was een probleem bij het uploaden van het bestand.', - unableToDeleteCount: 'Kan {{count}} van {{total}} {{label}} niet verwijderen.', - unableToUpdateCount: 'Kan {{count}} van {{total}} {{label}} niet updaten.', - unauthorized: 'Ongeautoriseerd, u moet ingelogd zijn om dit verzoek te doen.', - userLocked: 'Deze gebruiker is vergrendeld wegens te veel mislukte inlogpogingen.', - valueMustBeUnique: 'De waarde moet uniek zijn', - }, - fields: { - chooseBetweenCustomTextOrDocument: - 'Kies tussen het invoeren van een aangepaste tekst-URL of een koppeling naar een ander document.', - chooseDocumentToLink: 'Kies een document om naar te linken', - customURL: 'Eigen URL', - enterURL: 'Voer een URL in', - internalLink: 'Interne koppeling', - linkType: 'Koppelingstype', - openInNewTab: 'Openen in nieuw tabblad', - textToDisplay: 'Tekst om weer te geven', - }, - general: { - copy: 'Kopiëren', - createdAt: 'Aangemaakt op', - deletedCountSuccessfully: '{{count}} {{label}} succesvol verwijderd.', - deletedSuccessfully: 'Succesvol verwijderd.', - email: 'E-mail', - notFound: 'Niet gevonden', - row: 'Rij', - rows: 'Rijen', - successfullyCreated: '{{label}} succesvol aangemaakt.', - successfullyDuplicated: '{{label}} succesvol gedupliceerd.', - thisLanguage: 'Nederlands', - updatedAt: 'Aangepast op', - updatedCountSuccessfully: '{{count}} {{label}} succesvol bijgewerkt.', - updatedSuccessfully: 'Succesvol aangepast.', - user: 'Gebruiker', - users: 'Gebruikers', - value: 'Waarde', - }, - upload: { - fileName: 'Bestandsnaam', - fileSize: 'Bestandsgrootte', - height: 'Hoogte', - sizes: 'Groottes', - width: 'Breedte', - }, - validation: { - emailAddress: 'Voer een geldig e-mailadres in.', - enterNumber: 'Voer een geldig nummer in.', - greaterThanMax: '{{value}} is groter dan de maximaal toegestane {{label}} van {{max}}.', - invalidInput: 'Dit veld heeft een ongeldige invoer.', - invalidSelection: 'Dit veld heeft een ongeldige selectie.', - invalidSelections: 'Dit veld heeft de volgende ongeldige selecties:', - lessThanMin: '{{value}} is kleiner dan de minimaal toegestane {{label}} van {{min}}.', - longerThanMin: 'Deze waarde moet langer zijn dan de minimale lengte van {{minLength}} tekens.', - notValidDate: '"{{value}}" is geen geldige datum.', - required: 'Dit veld is verplicht.', - requiresAtLeast: 'Dit veld vereist minstens {{count}} {{label}}.', - requiresNoMoreThan: 'Dit veld vereist niet meer dan {{count}} {{label}}.', - requiresTwoNumbers: 'Dit veld vereist twee nummers.', - shorterThanMax: 'Dit veld moet korter zijn dan de maximale lengte van {{maxLength}} tekens.', - trueOrFalse: 'Dit veld kan alleen waar of onwaar zijn.', - validUploadID: 'Dit veld is geen geldige upload-ID.', - }, - version: { - autosavedSuccessfully: 'Succesvol automatisch bewaard.', - draft: 'Concept', - draftSavedSuccessfully: 'Concept succesvol bewaard.', - published: 'Gepubliceerd', - restoredSuccessfully: 'Herstelling succesvol.', - status: 'Status', - }, -} diff --git a/packages/translations/src/_generatedFiles_/api/pl.js b/packages/translations/src/_generatedFiles_/api/pl.js deleted file mode 100644 index 5f3572b906..0000000000 --- a/packages/translations/src/_generatedFiles_/api/pl.js +++ /dev/null @@ -1,95 +0,0 @@ -export default { - authentication: { - account: 'Konto', - apiKey: 'Klucz API', - enableAPIKey: 'Aktywuj klucz API', - loggedInChangePassword: - 'Aby zmienić hasło, przejdź do swojego <0>konta i tam edytuj swoje hasło.', - newAccountCreated: - 'Właśnie utworzono nowe konto, w celu uzyskania dostępu do {{serverURL}}. Kliknij poniższy link lub wklej go do przeglądarki, aby zweryfikować swój adres email: {{verificationURL}}.
    Po zweryfikowaniu adresu email będziesz mógł się pomyślnie zalogować.', - resetYourPassword: 'Zresetuj swoje hasło', - verified: 'Zweryfikowano', - verifyYourEmail: 'Zweryfikuj swój email', - youAreReceivingResetPassword: - 'Otrzymałeś tę wiadomość, ponieważ Ty (lub ktoś inny) poprosiłeś o zresetowanie hasła do Twojego konta. Kliknij poniższy link lub wklej go w przeglądarce, aby zakończyć proces:', - youDidNotRequestPassword: - 'Jeśli nie prosiłeś o zmianę hasła, zignoruj tę wiadomość, a Twoje hasło pozostanie niezmienione.', - }, - error: { - deletingFile: '', - emailOrPasswordIncorrect: 'Podany adres e-mail lub hasło jest nieprawidłowe.', - followingFieldsInvalid_one: 'To pole jest nieprawidłowe:', - followingFieldsInvalid_other: 'Następujące pola są nieprawidłowe:', - noFilesUploaded: 'Nie przesłano żadnych plików.', - notAllowedToPerformAction: 'Nie możesz wykonać tej akcji.', - problemUploadingFile: 'Wystąpił problem podczas przesyłania pliku.', - unableToDeleteCount: 'Nie można usunąć {{count}} z {{total}} {{label}}.', - unableToUpdateCount: 'Nie można zaktualizować {{count}} z {{total}} {{label}}.', - unauthorized: 'Brak dostępu, musisz być zalogowany.', - userLocked: 'Ten użytkownik został zablokowany z powodu zbyt wielu nieudanych prób logowania.', - valueMustBeUnique: 'Wartość musi być unikalna', - }, - fields: { - chooseBetweenCustomTextOrDocument: - 'Wybierz między wprowadzeniem niestandardowego tekstowego adresu URL a linkiem do innego dokumentu.', - chooseDocumentToLink: 'Wybierz dokument, do którego chcesz utworzyć łącze', - customURL: 'Niestandardowy adres URL', - enterURL: 'Wpisz adres URL', - internalLink: 'Link wewnętrzny', - linkType: 'Typ łącza', - openInNewTab: 'Otwórz w nowej karcie', - textToDisplay: 'Tekst do wyświetlenia', - }, - general: { - copy: 'Skopiuj', - createdAt: 'Data utworzenia', - deletedCountSuccessfully: 'Pomyślnie usunięto {{count}} {{label}}.', - deletedSuccessfully: 'Pomyślnie usunięto.', - email: 'Email', - notFound: 'Nie znaleziono', - row: 'Wiersz', - rows: 'Wiersze', - successfullyCreated: 'Pomyślnie utworzono {{label}}.', - successfullyDuplicated: 'Pomyślnie zduplikowano {{label}}', - thisLanguage: 'Polski', - updatedAt: 'Data edycji', - updatedCountSuccessfully: 'Pomyślnie zaktualizowano {{count}} {{label}}.', - updatedSuccessfully: 'Aktualizacja zakończona sukcesem.', - user: 'użytkownik', - users: 'użytkownicy', - value: 'Wartość', - }, - upload: { - fileName: 'Nazwa pliku', - fileSize: 'Rozmiar pliku', - height: 'Wysokość', - sizes: 'Rozmiary', - width: 'Szerokość', - }, - validation: { - emailAddress: 'Wprowadź poprawny adres email.', - enterNumber: 'Wprowadź poprawny numer telefonu.', - greaterThanMax: '{{value}} jest większe niż maksymalnie dozwolony {{label}} wynoszący {{max}}.', - invalidInput: 'To pole zawiera nieprawidłowe dane.', - invalidSelection: 'To pole ma nieprawidłowy wybór.', - invalidSelections: 'To pole zawiera następujące, nieprawidłowe wybory:', - lessThanMin: '{{value}} jest mniejsze niż minimalnie dozwolony {{label}} wynoszący {{min}}.', - longerThanMin: 'Ta wartość musi być dłuższa niż minimalna długość znaków: {{minLength}}.', - notValidDate: '"{{value}}" nie jest prawidłową datą.', - required: 'To pole jest wymagane.', - requiresAtLeast: 'To pole wymaga co najmniej {{count}} {{label}}.', - requiresNoMoreThan: 'To pole może posiadać co najmniej {{count}} {{label}}.', - requiresTwoNumbers: 'To pole wymaga dwóch liczb.', - shorterThanMax: 'Ta wartość musi być krótsza niż maksymalna długość znaków: {{maxLength}}.', - trueOrFalse: "To pole może mieć wartość tylko 'true' lub 'false'.", - validUploadID: 'To pole nie jest prawidłowym identyfikatorem przesyłania.', - }, - version: { - autosavedSuccessfully: 'Pomyślnie zapisano automatycznie.', - draft: 'Szkic', - draftSavedSuccessfully: 'Wersja robocza została pomyślnie zapisana.', - published: 'Opublikowano', - restoredSuccessfully: 'Przywrócono pomyślnie.', - status: 'Status', - }, -} diff --git a/packages/translations/src/_generatedFiles_/api/pt.js b/packages/translations/src/_generatedFiles_/api/pt.js deleted file mode 100644 index 2f14c8ca1f..0000000000 --- a/packages/translations/src/_generatedFiles_/api/pt.js +++ /dev/null @@ -1,95 +0,0 @@ -export default { - authentication: { - account: 'Conta', - apiKey: 'Chave da API', - enableAPIKey: 'Habilitar Chave API', - loggedInChangePassword: - 'Para mudar a sua senha, acesse a sua <0>conta e edite sua senha lá.', - newAccountCreated: - 'Uma nova conta acaba de ser criada para que você possa acessar {{serverURL}} Por favor, clique no link a seguir ou cole a URL abaixo no seu navegador para verificar seu email: {{verificationURL}}
    Após a verificação de email, você será capaz de fazer o login.', - resetYourPassword: 'Redefinir Sua Senha', - verified: 'Verificado', - verifyYourEmail: 'Verifique seu email', - youAreReceivingResetPassword: - 'Você está recebendo essa mensagem porque você (ou outra pessoa) requisitou a redefinição de senha da sua conta. Por favor, clique no link a seguir ou cole no seu navegador para completar o processo:', - youDidNotRequestPassword: - 'Se você não fez essa requisição, por favor ignore esse email e sua senha permanecerá igual.', - }, - error: { - deletingFile: 'Ocorreu um erro ao excluir o arquivo.', - emailOrPasswordIncorrect: 'O email ou senha fornecido está incorreto.', - followingFieldsInvalid_one: 'O campo a seguir está inválido:', - followingFieldsInvalid_other: 'Os campos a seguir estão inválidos:', - noFilesUploaded: 'Nenhum arquivo foi carregado.', - notAllowedToPerformAction: 'Você não tem permissão para realizar essa ação.', - problemUploadingFile: 'Ocorreu um problema ao carregar o arquivo.', - unableToDeleteCount: 'Não é possível excluir {{count}} de {{total}} {{label}}.', - unableToUpdateCount: 'Não foi possível atualizar {{count}} de {{total}} {{label}}.', - unauthorized: 'Não autorizado. Você deve estar logado para fazer essa requisição', - userLocked: 'Esse usuário está bloqueado devido a muitas tentativas de login malsucedidas.', - valueMustBeUnique: 'Valor deve ser único', - }, - fields: { - chooseBetweenCustomTextOrDocument: - 'Escolha entre inserir um URL de texto personalizado ou vincular a outro documento.', - chooseDocumentToLink: 'Escolha um documento para vincular', - customURL: 'URL personalizado', - enterURL: 'Insira um URL', - internalLink: 'Link Interno', - linkType: 'Tipo de link', - openInNewTab: 'Abrir em nova aba', - textToDisplay: 'Texto a ser exibido', - }, - general: { - copy: 'Copiar', - createdAt: 'Criado Em', - deletedCountSuccessfully: 'Excluído {{count}} {{label}} com sucesso.', - deletedSuccessfully: 'Apagado com sucesso.', - email: 'Email', - notFound: 'Não Encontrado', - row: 'Linha', - rows: 'Linhas', - successfullyCreated: '{{label}} criado com sucesso.', - successfullyDuplicated: '{{label}} duplicado com sucesso.', - thisLanguage: 'Português', - updatedAt: 'Atualizado Em', - updatedCountSuccessfully: 'Atualizado {{count}} {{label}} com sucesso.', - updatedSuccessfully: 'Atualizado com sucesso.', - user: 'usuário', - users: 'usuários', - value: 'Valor', - }, - upload: { - fileName: 'Nome do Arquivo', - fileSize: 'Tamanho do Arquivo', - height: 'Altura', - sizes: 'Tamanhos', - width: 'Largura', - }, - validation: { - emailAddress: 'Por favor, insira um endereço de email válido.', - enterNumber: 'Por favor, insira um número válido.', - greaterThanMax: '{{value}} é maior que o máximo permitido de {{label}} que é {{max}}.', - invalidInput: 'Esse campo tem um conteúdo inválido.', - invalidSelection: 'Esse campo tem uma seleção inválida.', - invalidSelections: "'Esse campo tem as seguintes seleções inválidas:'", - lessThanMin: '{{value}} é menor que o mínimo permitido de {{label}} que é {{min}}.', - longerThanMin: 'Esse valor deve ser maior do que o mínimo de {{minLength}} characters.', - notValidDate: '"{{value}}" não é uma data válida.', - required: 'Esse campo é obrigatório.', - requiresAtLeast: 'Esse campo requer no máximo {{count}} {{label}}.', - requiresNoMoreThan: 'Esse campo requer pelo menos {{count}} {{label}}.', - requiresTwoNumbers: 'Esse campo requer dois números.', - shorterThanMax: 'Esse valor deve ser menor do que o máximo de {{maxLength}} caracteres.', - trueOrFalse: 'Esse campo pode ser apenas verdadeiro (true) ou falso (false)', - validUploadID: "'Esse campo não é um ID de upload válido.'", - }, - version: { - autosavedSuccessfully: 'Salvamento automático com sucesso.', - draft: 'Rascunho', - draftSavedSuccessfully: 'Rascunho salvo com sucesso.', - published: 'Publicado', - restoredSuccessfully: 'Restaurado com sucesso.', - status: 'Status', - }, -} diff --git a/packages/translations/src/_generatedFiles_/api/ro.js b/packages/translations/src/_generatedFiles_/api/ro.js deleted file mode 100644 index 504831722f..0000000000 --- a/packages/translations/src/_generatedFiles_/api/ro.js +++ /dev/null @@ -1,100 +0,0 @@ -export default { - authentication: { - account: 'Cont', - apiKey: 'Cheia API', - enableAPIKey: 'Activați cheia API', - loggedInChangePassword: - 'Pentru a vă schimba parola, accesați <0>contul și editați-vă parola acolo.', - newAccountCreated: - 'A fost creat un nou cont pe care îl puteți accesa {{serverURL}} Vă rugăm să intrați pe următorul link sau să copiați URL-ul de mai jos în browserul dvs. pentru a vă verifica emailul: {{verificationURL}}
    După ce vă verificați adresa de email, vă veți putea autentifica cu succes.', - resetYourPassword: 'Resetați-vă parola', - verified: 'Verificat', - verifyYourEmail: 'Verifică-ți emailul', - youAreReceivingResetPassword: - 'Primiți acest mesaj deoarece dumneavoastră (sau altcineva) ați solicitat resetarea parolei pentru contul dumneavoastră. Vă rugăm să dați clic pe următorul link sau să îl copiați în browserul dvs. pentru a finaliza procesul:', - youDidNotRequestPassword: - 'Dacă nu ați solicitat acest lucru, vă rugăm să ignorați acest email și parola dvs. va rămâne neschimbată.', - }, - error: { - deletingFile: 'S-a produs o eroare la ștergerea fișierului.', - emailOrPasswordIncorrect: 'Adresa de e-mail sau parola este incorectă.', - followingFieldsInvalid_one: 'Următorul câmp nu este valid:', - followingFieldsInvalid_other: 'Următoarele câmpuri nu sunt valabile:', - noFilesUploaded: 'Nu a fost încărcat niciun fișier.', - notAllowedToPerformAction: 'Nu aveți voie să efectuați această acțiune.', - problemUploadingFile: 'A existat o problemă în timpul încărcării fișierului.', - unableToDeleteCount: 'Nu se poate șterge {{count}} din {{total}} {{label}}.', - unableToUpdateCount: 'Nu se poate șterge {{count}} din {{total}} {{label}}.', - unauthorized: 'neautorizat, trebuie să vă conectați pentru a face această cerere.', - userLocked: - 'Acest utilizator este blocat din cauza unui număr prea mare de încercări de autentificare eșuate.', - valueMustBeUnique: 'Valoarea trebuie să fie unică', - }, - fields: { - chooseBetweenCustomTextOrDocument: - 'Alegeți între a introduce un text URL personalizat sau a crea un link către un alt document.', - chooseDocumentToLink: 'Alegeți un document către care să creați un link', - customURL: 'URL personalizat', - enterURL: 'Introduceți un URL', - internalLink: 'Link intern', - linkType: 'Tip de link', - openInNewTab: 'Deschideți în tab nou', - textToDisplay: 'Text de afișat', - }, - general: { - copy: 'Copiați', - createdAt: 'Creat la', - deletedCountSuccessfully: 'Șterse cu succes {{count}} {{label}}.', - deletedSuccessfully: 'Șters cu succes.', - email: 'Email', - notFound: 'Nu a fost găsit', - row: 'Rând', - rows: 'Rânduri', - successfullyCreated: '{{label}} creat(ă) cu succes.', - successfullyDuplicated: '{{label}} duplicat(ă) cu succes.', - thisLanguage: 'Română', - updatedAt: 'Actualizat la', - updatedCountSuccessfully: 'Actualizate {{count}} {{label}} cu succes.', - updatedSuccessfully: 'Actualizat cu succes.', - user: 'Utilizator', - users: 'Utilizatori', - value: 'Valoare', - }, - upload: { - fileName: 'Numele fișierului', - fileSize: 'Dimensiunea fișierului', - height: 'Înălțime', - sizes: 'Dimensiuni', - width: 'Lățime', - }, - validation: { - emailAddress: 'Vă rugăm să introduceți o adresă de email validă.', - enterNumber: 'Vă rugăm să introduceți un număr valid.', - greaterThanMax: - '{{value}} este mai mare decât valoarea maximă permisă pentru {{label}} de {{max}}.', - invalidInput: 'Acest câmp are o intrare invalidă.', - invalidSelection: 'Acest câmp are o selecție invalidă.', - invalidSelections: 'Acest câmp are următoarele selecții invalide:', - lessThanMin: - '{{value}} este mai mic decât valoarea minimă permisă pentru {{label}} de {{min}}.', - longerThanMin: - 'Această valoare trebuie să fie mai mare decât lungimea minimă de {{minLength}} caractere.', - notValidDate: '"{{value}}" nu este o dată valabilă.', - required: 'Acest câmp este obligatoriu.', - requiresAtLeast: 'Acest domeniu necesită cel puțin {{count}} {{label}}.', - requiresNoMoreThan: 'Acest câmp nu necesită mai mult de {{count}} {{label}}.', - requiresTwoNumbers: 'Acest câmp necesită două numere.', - shorterThanMax: - 'Această valoare trebuie să fie mai scurtă decât lungimea maximă de {{maxLength}} caractere.', - trueOrFalse: 'Acest câmp poate fi doar egal cu true sau false.', - validUploadID: 'Acest câmp nu este un ID de încărcare valid.', - }, - version: { - autosavedSuccessfully: 'Autosalvare cu succes.', - draft: 'Proiect', - draftSavedSuccessfully: 'Proiect salvat cu succes.', - published: 'Publicat', - restoredSuccessfully: 'Restaurat cu succes.', - status: 'Status', - }, -} diff --git a/packages/translations/src/_generatedFiles_/api/rs-latin.js b/packages/translations/src/_generatedFiles_/api/rs-latin.js deleted file mode 100644 index 8826f13237..0000000000 --- a/packages/translations/src/_generatedFiles_/api/rs-latin.js +++ /dev/null @@ -1,95 +0,0 @@ -export default { - authentication: { - account: 'Nalog', - apiKey: 'API ključ', - enableAPIKey: 'Omogući API ključ', - loggedInChangePassword: - 'Da biste promenili lozinku, otvorite svoj <0>nalog i promenite lozinku.', - newAccountCreated: - 'Novi nalog je kreiran. Pristupite nalogu klikom na {{serverURL}}. Molimo Vas kliknite na sledeći link ili zalepite URL koji se nalazi ispod u pretraživač da biste potvrdili adresu e-pošte: {{verificationURL}}
    Nakon što potvrdite adresu e-pošte možete se ulogovati.', - resetYourPassword: 'Promeni svoju lozinku', - verified: 'Potvrđeno', - verifyYourEmail: 'Potvrdi svoju adresu e-pošte', - youAreReceivingResetPassword: - 'Primili ste ovo pošto ste Vi (ili neko u vaše ime) zatražili promenu lozinke naloga. Molimo Vas kliknite na link ili zalepite URL u svoj pretraživač da biste završili proces:', - youDidNotRequestPassword: - 'Ako niste zatražili promenu lozinke ignorišite ovu poruku i lozinka će ostati nepromenjena.', - }, - error: { - deletingFile: 'Dogodila se greška pri brisanju datoteke.', - emailOrPasswordIncorrect: 'Adresa e-pošte ili lozinka su neispravni.', - followingFieldsInvalid_one: 'Ovo polje je nevalidno:', - followingFieldsInvalid_other: 'Ova polja su nevalidna:', - noFilesUploaded: 'Nijedna datoteka nije učitana.', - notAllowedToPerformAction: 'Nemate dozvolu za izvršenje ove radnje.', - problemUploadingFile: 'Postoji problem pri učitavanju datoteke.', - unableToDeleteCount: 'Nije moguće izbrisati {{count}} od {{total}} {{label}}.', - unableToUpdateCount: 'Nije moguće ažurirati {{count}} od {{total}} {{label}}.', - unauthorized: 'Niste autorizovani da biste uputili ovaj zahtev.', - userLocked: 'Ovaj korisnik je zaključan zbog prevelikog broja neuspešnih pokušaja prijave.', - valueMustBeUnique: 'Vrednost mora biti jedinstvena.', - }, - fields: { - chooseBetweenCustomTextOrDocument: - 'Izaberite između unosa prilagođenog teksta URL ili linka na drugi dokument.', - chooseDocumentToLink: 'Odaberite dokument koji želite linkovati.', - customURL: 'Prilagođeni URL', - enterURL: 'Unesi URL', - internalLink: 'Interni link', - linkType: 'Tip linka', - openInNewTab: 'Otvori u novoj kartici.', - textToDisplay: 'Tekst za prikaz', - }, - general: { - copy: 'Kopiraj', - createdAt: 'Kreirano u', - deletedCountSuccessfully: 'Uspešno izbrisano {{count}} {{label}}.', - deletedSuccessfully: 'Uspešno izbrisano.', - email: 'E-pošta', - notFound: 'Nije pronađeno', - row: 'Red', - rows: 'Redovi', - successfullyCreated: '{{label}} uspešno kreirano.', - successfullyDuplicated: '{{label}} uspešno duplicirano.', - thisLanguage: 'Srpski (latinica)', - updatedAt: 'Ažurirano u', - updatedCountSuccessfully: 'Uspešno ažurirano {{count}} {{label}}.', - updatedSuccessfully: 'Uspešno ažurirano.', - user: 'Korisnik', - users: 'Korisnici', - value: 'Vrednost', - }, - upload: { - fileName: 'Ime datoteke', - fileSize: 'Veličina datoteke', - height: 'Visina', - sizes: 'Veličine', - width: 'Širina', - }, - validation: { - emailAddress: 'Molimo Vas unesite validnu email adresu.', - enterNumber: 'Molimo Vas unesite validan broj.', - greaterThanMax: '{{value}} prekoračuje maksimalan dozvoljeni {{label}} limit od {{max}}.', - invalidInput: 'Ovo polje sadrži nevalidan unos.', - invalidSelection: 'Ovo polje sadrži nevalidan odabir.', - invalidSelections: 'Ovo polje ima sledeće nevalidne odabire:', - lessThanMin: '{{value}} je ispod dozvoljenog minimuma za {{label}} (donji limit je {{min}}).', - longerThanMin: 'Ova vrednost mora biti duža od minimalne dužine od {{minLength}} karaktera', - notValidDate: '"{{value}}" nije validan datum.', - required: 'Ovo polje je obavezno.', - requiresAtLeast: 'Ovo polje zahteva minimalno {{count}} {{label}}.', - requiresNoMoreThan: 'Ovo polje zahteva ne više od {{count}} {{label}}.', - requiresTwoNumbers: 'Ovo polje zahteva dva broja.', - shorterThanMax: 'Ova vrednost mora biti kraća od maksimalne dužine od {{maxLength}} karaktera', - trueOrFalse: 'Ovo polje može biti samo tačno ili netačno', - validUploadID: 'Ovo polje ne sadrži validan ID prenosa.', - }, - version: { - autosavedSuccessfully: 'Automatsko čuvanje uspešno.', - draft: 'Nacrt', - draftSavedSuccessfully: 'Nacrt uspešno sačuvan.', - published: 'Objavljeno', - restoredSuccessfully: 'Uspešno vraćeno.', - status: 'Status', - }, -} diff --git a/packages/translations/src/_generatedFiles_/api/rs.js b/packages/translations/src/_generatedFiles_/api/rs.js deleted file mode 100644 index 54b2523769..0000000000 --- a/packages/translations/src/_generatedFiles_/api/rs.js +++ /dev/null @@ -1,95 +0,0 @@ -export default { - authentication: { - account: 'Налог', - apiKey: 'АПИ кључ', - enableAPIKey: 'Омогући API кључ', - loggedInChangePassword: - 'Да бисте променили лозинку, отворите свој <0>налог и промените лозинку.', - newAccountCreated: - 'Нови налог је креиран. Приступите налогу кликом на {{serverURL}}. Молимо Вас кликните на следећи линк или залепите адресу која се налази испод у претраживач да бисте потврдили адресу е-поште: {{verificationURL}}
    Након што потврдите адресу е-поште можете се улоговати.', - resetYourPassword: 'Промени своју лозинку', - verified: 'Потврђено', - verifyYourEmail: 'Потврди своју адресу е-поште', - youAreReceivingResetPassword: - 'Примили сте поруку пошто сте Ви (или неко у ваше име) затражили промену лозинке налога. Молимо Вас кликните на линк или залепите адресу у свој претраживач да бисте завршили процес:', - youDidNotRequestPassword: - 'Ако нисте затражили промену лозинке игноришите ову поруку и лозинка ће остати непромењена.', - }, - error: { - deletingFile: 'Догодила се грешка при брисању датотеке.', - emailOrPasswordIncorrect: 'Емаил или лозинка су неисправни.', - followingFieldsInvalid_one: 'Ово поље је невалидно:', - followingFieldsInvalid_other: 'Ова поља су невалидна:', - noFilesUploaded: 'Ниједна датотека није учитана.', - notAllowedToPerformAction: 'Немате дозволу за извршење ове радње.', - problemUploadingFile: 'Постоји проблем при учитавању датотеке.', - unableToDeleteCount: 'Није могуће избрисати {{count}} од {{total}} {{label}}.', - unableToUpdateCount: 'Није могуће ажурирати {{count}} од {{total}} {{label}}.', - unauthorized: 'Нисте ауторизовани да бисте упутили овај захтев.', - userLocked: 'Овај корисник је закључан због превеликог броја неуспешних покушаја пријаве.', - valueMustBeUnique: 'Вредност мора бити јединствена.', - }, - fields: { - chooseBetweenCustomTextOrDocument: - 'Изаберите између уноса прилагођеног текста адресе или линка на други документ.', - chooseDocumentToLink: 'Одаберите документ који желите линковати.', - customURL: 'Прилагођени линк', - enterURL: 'Унеси адресу', - internalLink: 'Интерни линк', - linkType: 'Тип линка', - openInNewTab: 'Отвори у новој картици.', - textToDisplay: 'Текст за приказ', - }, - general: { - copy: 'Копирај', - createdAt: 'Креирано у', - deletedCountSuccessfully: 'Успешно избрисано {{count}} {{label}}.', - deletedSuccessfully: 'Успешно избрисано.', - email: 'Е-пошта', - notFound: 'Није пронађено', - row: 'Ред', - rows: 'Редови', - successfullyCreated: '{{label}} успешно креирано.', - successfullyDuplicated: '{{label}} успешно дуплицирано.', - thisLanguage: 'Српски (ћирилица)', - updatedAt: 'Ажурирано у', - updatedCountSuccessfully: 'Успешно ажурирано {{count}} {{label}}.', - updatedSuccessfully: 'Успешно ажурирано.', - user: 'Корисник', - users: 'Корисници', - value: 'Вредност', - }, - upload: { - fileName: 'Име датотеке', - fileSize: 'Величина датотеке', - height: 'Висина', - sizes: 'Величине', - width: 'Ширина', - }, - validation: { - emailAddress: 'Молимо Вас унесите валидну емаил адресу.', - enterNumber: 'Молимо Вас унесите валидан број.', - greaterThanMax: '{{value}} прекорачује максималан дозвољени {{label}} лимит од {{max}}.', - invalidInput: 'Ово поље садржи невалидан унос.', - invalidSelection: 'Ово поље садржи невалидан одабир.', - invalidSelections: 'Ово поље има следеће невалидне одабире:', - lessThanMin: '{{value}} је испод дозвољеног минимума за {{label}} (доњи лимит је {{min}}).', - longerThanMin: 'Ова вредност мора бити дужа од минималне дужине од {{минЛенгтх}} карактера', - notValidDate: '"{{value}}" није валидан датум.', - required: 'Ово поље је обавезно.', - requiresAtLeast: 'Ово поље захтева минимално {{count}} {{label}}.', - requiresNoMoreThan: 'Ово поље захтева не више од {{count}} {{label}}.', - requiresTwoNumbers: 'Ово поље захтева два броја.', - shorterThanMax: 'Ова вредност мора бити краћа од максималне дужине од {{maxLength}} карактера', - trueOrFalse: 'Ово поље може бити само тачно или нетачно', - validUploadID: 'Ово поље не садржи валидан ИД преноса.', - }, - version: { - autosavedSuccessfully: 'Аутоматско чување успешно.', - draft: 'Нацрт', - draftSavedSuccessfully: 'Нацрт успешно сачуван.', - published: 'Објављено', - restoredSuccessfully: 'Успешно враћено.', - status: 'Статус', - }, -} diff --git a/packages/translations/src/_generatedFiles_/api/ru.js b/packages/translations/src/_generatedFiles_/api/ru.js deleted file mode 100644 index 5c682ebf17..0000000000 --- a/packages/translations/src/_generatedFiles_/api/ru.js +++ /dev/null @@ -1,96 +0,0 @@ -export default { - authentication: { - account: 'Аккаунт', - apiKey: 'API ключ', - enableAPIKey: 'Активировать API ключ', - loggedInChangePassword: - 'Чтобы изменить пароль, зайдите в свой <0>аккаунт и измените пароль там.', - newAccountCreated: - 'Новый аккаунт был создан для доступа к {{serverURL}} Пожалуйста, кликните по следующей ссылке или вставьте в адресную строку браузера чтобы подтвердить email: {{verificationURL}}
    После подтверждения вашего email, вы сможете успешно войти в систему.', - resetYourPassword: 'Сброс вашего пароля', - verified: 'Подтверждено', - verifyYourEmail: 'Подтвердить ваш email', - youAreReceivingResetPassword: - 'Вы получили это сообщение, потому что вы (или кто-то другой) запросили сброс пароля для вашей учетной записи. Пожалуйста, нажмите на следующую ссылку или вставьте ее в браузер, чтобы завершить процесс:', - youDidNotRequestPassword: - 'Если вы не запрашивали этого, пожалуйста, проигнорируйте это письмо, и ваш пароль останется неизменным.', - }, - error: { - deletingFile: 'Произошла ошибка при удалении файла.', - emailOrPasswordIncorrect: 'Указанный email или пароль неверен.', - followingFieldsInvalid_one: 'Следующее поле недействительно:', - followingFieldsInvalid_other: 'Следующие поля недействительны:', - noFilesUploaded: 'Не было загружено ни одного файла.', - notAllowedToPerformAction: 'У вас нет права на выполнение этого действия.', - problemUploadingFile: 'Возникла проблема при загрузке файла.', - unableToDeleteCount: 'Не удалось удалить {{count}} из {{total}} {{label}}.', - unableToUpdateCount: 'Не удалось обновить {{count}} из {{total}} {{label}}.', - unauthorized: 'Нет доступа, вы должны войти, чтобы сделать этот запрос.', - userLocked: - 'Этот пользователь заблокирован из-за слишком большого количества неудачных попыток входа.', - valueMustBeUnique: 'Значение должно быть уникальным', - }, - fields: { - chooseBetweenCustomTextOrDocument: - 'Выберите между вводом пользовательского текстового URL и ссылкой на другой документ.', - chooseDocumentToLink: 'Выберите документ для ссылки', - customURL: 'Пользовательский URL', - enterURL: 'Введите URL', - internalLink: 'Внутренняя ссылка', - linkType: 'Тип ссылки', - openInNewTab: 'Открывать в новой вкладке', - textToDisplay: 'Текст для отображения', - }, - general: { - copy: 'Скопировать', - createdAt: 'Дата создания', - deletedCountSuccessfully: 'Удалено {{count}} {{label}} успешно.', - deletedSuccessfully: 'Удален успешно.', - email: 'Email', - notFound: 'Не найдено', - row: 'Строка', - rows: 'Строки', - successfullyCreated: '{{label}} успешно создан.', - successfullyDuplicated: '{{label}} успешно продублирован.', - thisLanguage: 'Русский', - updatedAt: 'Дата правки', - updatedCountSuccessfully: 'Обновлено {{count}} {{label}} успешно.', - updatedSuccessfully: 'Успешно Обновлено.', - user: 'пользователь', - users: 'пользователи', - value: 'Значение', - }, - upload: { - fileName: 'Имя файла', - fileSize: 'Размер файла', - height: 'Высота', - sizes: 'Размеры', - width: 'Ширина', - }, - validation: { - emailAddress: 'Пожалуйста, введите корректный адрес email.', - enterNumber: 'Пожалуйста, введите корректный номер.', - greaterThanMax: '{{value}} больше максимально допустимого значения {{label}} {{max}}.', - invalidInput: 'Это поле имеет недопустимое значение.', - invalidSelection: 'В этом поле выбран недопустимый вариант.', - invalidSelections: "'Это поле содержит следующие неправильные варианты:'", - lessThanMin: '{{value}} меньше минимально допустимого значения {{label}} {{min}}.', - longerThanMin: 'Это значение должно быть больше минимальной длины символов: {{minLength}}.', - notValidDate: '"{{value}}" это не действительная дата.', - required: 'Это обязательное поле.', - requiresAtLeast: 'Это поле требует не менее {{count}} {{label}}', - requiresNoMoreThan: 'Это поле требует не более {{count}} {{label}}', - requiresTwoNumbers: 'В этом поле требуется два числа.', - shorterThanMax: 'Это значение должно быть короче максимальной длины символов {{maxLength}}.', - trueOrFalse: 'Это поле может быть равно только true или false.', - validUploadID: "'Это поле не является действительным ID загрузки.'", - }, - version: { - autosavedSuccessfully: 'Автосохранение успешно.', - draft: 'Черновик', - draftSavedSuccessfully: 'Черновик успешно сохранен.', - published: 'Опубликовано', - restoredSuccessfully: 'Восстановлен успешно.', - status: 'Статус', - }, -} diff --git a/packages/translations/src/_generatedFiles_/api/sv.js b/packages/translations/src/_generatedFiles_/api/sv.js deleted file mode 100644 index 44159c8da3..0000000000 --- a/packages/translations/src/_generatedFiles_/api/sv.js +++ /dev/null @@ -1,95 +0,0 @@ -export default { - authentication: { - account: 'Konto', - apiKey: 'API Nyckel', - enableAPIKey: 'Aktivera API nyckel', - loggedInChangePassword: - 'För att ändra ditt lösenord, gå till ditt <0>konto och redigera ditt lösenord där.', - newAccountCreated: - 'Ett nytt konto har precis skapats som du kan komma åt {{serverURL}} Klicka på följande länk eller klistra in webbadressen nedan i din webbläsare för att verifiera din e-post: {{verificationURL}}
    Efter att ha verifierat din e-post kommer du att kunna logga in framgångsrikt.', - resetYourPassword: 'Återställ Ditt Lösenord', - verified: 'Verifierad', - verifyYourEmail: 'Verifiera din epost', - youAreReceivingResetPassword: - 'Du får detta för att du (eller någon annan) har begärt återställning av lösenordet för ditt konto. Klicka på följande länk eller klistra in den i din webbläsare för att slutföra processen:', - youDidNotRequestPassword: - 'Om du inte begärde detta, ignorera detta e-postmeddelande och ditt lösenord kommer att förbli oförändrat.', - }, - error: { - deletingFile: 'Det gick inte att ta bort filen.', - emailOrPasswordIncorrect: 'E-postadressen eller lösenordet som angivits är felaktigt.', - followingFieldsInvalid_one: 'Följande fält är ogiltigt:', - followingFieldsInvalid_other: 'Följande fält är ogiltiga:', - noFilesUploaded: 'Inga filer laddades upp.', - notAllowedToPerformAction: 'Du får inte utföra denna åtgärd.', - problemUploadingFile: 'Det uppstod ett problem när filen laddades upp.', - unableToDeleteCount: 'Det gick inte att ta bort {{count}} av {{total}} {{label}}.', - unableToUpdateCount: 'Det gick inte att uppdatera {{count}} av {{total}} {{label}}.', - unauthorized: 'Obehörig, du måste vara inloggad för att göra denna begäran.', - userLocked: 'Den här användaren är låst på grund av för många misslyckade inloggningsförsök.', - valueMustBeUnique: 'Värdet måste vara unikt', - }, - fields: { - chooseBetweenCustomTextOrDocument: - 'Välj mellan att ange en anpassad text-URL eller länka till ett annat dokument.', - chooseDocumentToLink: 'Välj ett dokument att länka till', - customURL: 'Anpassad URL', - enterURL: 'Ange en URL', - internalLink: 'Intern länk', - linkType: 'Länktyp', - openInNewTab: 'Öppna i ny flik', - textToDisplay: 'Text att visa', - }, - general: { - copy: 'Kopiera', - createdAt: 'Skapad Vid', - deletedCountSuccessfully: 'Raderade {{count}} {{label}} framgångsrikt.', - deletedSuccessfully: 'Togs bort framgångsrikt.', - email: 'E-post', - notFound: 'Hittades inte', - row: 'Rad', - rows: 'Rader', - successfullyCreated: '{{label}} skapades framgångsrikt.', - successfullyDuplicated: '{{label}} duplicerades framgångsrikt.', - thisLanguage: 'Svenska', - updatedAt: 'Uppdaterades Vid', - updatedCountSuccessfully: 'Uppdaterade {{count}} {{label}} framgångsrikt.', - updatedSuccessfully: 'Uppdaterades framgångsrikt.', - user: 'Användare', - users: 'Användare', - value: 'Värde', - }, - upload: { - fileName: 'Filnamn', - fileSize: 'Filstorlek', - height: 'Höjd', - sizes: 'Storlekar', - width: 'Bredd', - }, - validation: { - emailAddress: 'Vänligen ange en giltig e-postadress.', - enterNumber: 'Vänligen skriv in ett giltigt nummer.', - greaterThanMax: '{{value}} är större än den maximalt tillåtna {{label}} av {{max}}.', - invalidInput: 'Det här fältet har en ogiltig inmatning.', - invalidSelection: 'Det här fältet har ett ogiltigt urval.', - invalidSelections: 'Det här fältet har följande ogiltiga val:', - lessThanMin: '{{value}} är mindre än den minst tillåtna {{label}} av {{min}}.', - longerThanMin: 'Detta värde måste vara längre än minimilängden på {{minLength}} tecken.', - notValidDate: '"{{value}}" är inte ett giltigt datum.', - required: 'Detta fält är obligatoriskt.', - requiresAtLeast: 'Detta fält kräver minst {{count}} {{label}}.', - requiresNoMoreThan: 'Detta fält kräver inte mer än {{count}} {{label}}.', - requiresTwoNumbers: 'Detta fält kräver två nummer.', - shorterThanMax: 'Detta värde måste vara kortare än maxlängden på {{maxLength}} tecken.', - trueOrFalse: 'Detta fält kan bara vara lika med sant eller falskt.', - validUploadID: 'Det här fältet är inte ett giltigt uppladdnings-ID', - }, - version: { - autosavedSuccessfully: 'Autosparades framgångsrikt.', - draft: 'Utkast', - draftSavedSuccessfully: 'Utkastet sparades framgångsrikt.', - published: 'Publicerad', - restoredSuccessfully: 'Återställd framgångsrikt.', - status: 'Status', - }, -} diff --git a/packages/translations/src/_generatedFiles_/api/th.js b/packages/translations/src/_generatedFiles_/api/th.js deleted file mode 100644 index 3c97a2944b..0000000000 --- a/packages/translations/src/_generatedFiles_/api/th.js +++ /dev/null @@ -1,93 +0,0 @@ -export default { - authentication: { - account: 'บัญชี', - apiKey: 'API Key', - enableAPIKey: 'เปิดใช้ API Key', - loggedInChangePassword: 'หากต้องการเปลี่ยนรหัสผ่าน กรุณาแก้ไขที่หน้า<0>บัญชีของคุณ', - newAccountCreated: - 'ระบบได้สร้างบัญชีผู้ใช้ให้คุณสำหรับเข้าใช้งาน {{serverURL}} เรียบร้อยแล้ว กรุณากดลิงก์ด้านล่างเพื่อยืนยันอีเมล หลังจากยืนยันอีเมลเสร็จสิ้น คุณจะสามารถเข้าใช้งานระบบได้', - resetYourPassword: 'รีเซ็ตรหัสผ่านของคุณ', - verified: 'ยืนยันบััญชีแล้ว', - verifyYourEmail: 'ยืนยันอีเมลของคุณ', - youAreReceivingResetPassword: - 'คุณได้รับอีเมลนี้เนื่องจากคุณ (หรือคนอื่น) ได้ร้องขอให้รีเซ็ตรหัสผ่านของบัญชีของคุณ กรุณากดลิงก์ด้านล่างเพื่อดำเนินการรีเซ็ตรหัสผ่านต่อ:', - youDidNotRequestPassword: - 'หากคุณไม่ได้ร้องขอให้มีการรีเซ็ตรหัสผ่าน คุณสามารถเพิกเฉยข้อความนี้ได้ โดยรหัสผ่านของคุณจะคงอยู่เช่นเดิม', - }, - error: { - deletingFile: 'เกิดปัญหาระหว่างการลบไฟล์', - emailOrPasswordIncorrect: 'อีเมลหรือรหัสผ่านไม่ถูกต้อง', - followingFieldsInvalid_one: 'ช่องต่อไปนี้ไม่ถูกต้อง:', - followingFieldsInvalid_other: 'ช่องต่อไปนี้ไม่ถูกต้อง:', - noFilesUploaded: 'ไม่มีไฟล์ถูกอัปโหลด', - notAllowedToPerformAction: 'คุณไม่ได้รับอนุญาตให้ดำเนินการสิ่งนี้', - problemUploadingFile: 'เกิดปัญหาระหว่างการอัปโหลดไฟล์', - unableToDeleteCount: 'ไม่สามารถลบ {{count}} จาก {{total}} {{label}}', - unableToUpdateCount: 'ไม่สามารถอัปเดต {{count}} จาก {{total}} {{label}}', - unauthorized: 'คุณไม่ได้รับอนุญาต กรุณาเข้าสู่ระบบเพื่อทำคำขอนี้', - userLocked: 'บัญชีนี้ถูกล็อกเนื่องจากมีการพยายามเข้าสู่ระบบมากเกินไป', - valueMustBeUnique: 'ค่าต้องไม่ซ้ำกับเอกสารอื่น', - }, - fields: { - chooseBetweenCustomTextOrDocument: 'เลือกระหว่างกำหนด URL เองหรือเชื่อมไปยังเอกสารอื่น', - chooseDocumentToLink: 'เลือกเอกสารที่จะเชื่อมโยง', - customURL: 'URL ที่กำหนดเอง', - enterURL: 'ระบุ URL', - internalLink: 'ลิงก์ภายใน', - linkType: 'ประเภทของลิงก์', - openInNewTab: 'เปิดในแท็บใหม่', - textToDisplay: 'ข้อความสำหรับแสดงผล', - }, - general: { - copy: 'คัดลอก', - createdAt: 'สร้างเมื่อ', - deletedCountSuccessfully: 'Deleted {{count}} {{label}} successfully.', - deletedSuccessfully: 'ลบสำเร็จ', - email: 'อีเมล', - notFound: 'ไม่พบ', - row: 'แถว', - rows: 'แถว', - successfullyCreated: 'สร้าง {{label}} สำเร็จ', - successfullyDuplicated: 'สำเนา {{label}} สำเร็จ', - thisLanguage: 'ไทย', - updatedAt: 'แก้ไขเมื่อ', - updatedCountSuccessfully: 'อัปเดต {{count}} {{label}} เรียบร้อยแล้ว', - updatedSuccessfully: 'แก้ไขสำเร็จ', - user: 'ผู้ใช้', - users: 'ผู้ใช้', - value: 'ค่า', - }, - upload: { - fileName: 'ชื่อไฟล์', - fileSize: 'ขนาดไฟล์', - height: 'ความสูง', - sizes: 'ขนาด', - width: 'ความกว้าง', - }, - validation: { - emailAddress: 'กรุณาระบุอีเมลที่ถูกต้อง', - enterNumber: 'กรุณาระบุตัวเลขที่ถูกต้อง', - greaterThanMax: '{{value}} มากกว่าค่าสูงสุดที่อนุญาตของ {{label}} ซึ่งคือ {{max}}.', - invalidInput: 'ข้อมูลไม่ถูกต้อง', - invalidSelection: 'ค่าที่เลือกไม่ถูกต้อง', - invalidSelections: 'ค่าที่เลือกไม่ถูกต้องดังนี้:', - lessThanMin: '{{value}} น้อยกว่าค่าต่ำสุดที่อนุญาตของ {{label}} ซึ่งคือ {{min}}.', - longerThanMin: 'ค่าต้องมีความยาวมากกว่า {{minLength}} ตัวอักษร', - notValidDate: 'วันที่ "{{value}}" ไม่ถูกต้อง', - required: 'จำเป็นต้องระบุค่า', - requiresAtLeast: 'ต้องมีอย่างน้อย {{count}} {{label}}', - requiresNoMoreThan: 'ห้ามมีเกิน {{count}} {{label}}', - requiresTwoNumbers: 'ต้องมีตัวเลข 2 ค่า', - shorterThanMax: 'ค่าต้องมีความยาวน้อยกว่า {{maxLength}} ตัวอักษร', - trueOrFalse: 'เป็นได้แค่ "ใช่" หรือ "ไม่ใช่"', - validUploadID: 'ไม่ใช่ ID ของการอัปโหลดที่ถูกต้อง', - }, - version: { - autosavedSuccessfully: 'บันทึกอัตโนมัติสำเร็จ', - draft: 'ฉบับร่าง', - draftSavedSuccessfully: 'บันทึกร่างสำเร็จ', - published: 'เผยแพร่แล้ว', - restoredSuccessfully: 'กู้คืนเวอร์ชันสำเร็จ', - status: 'สถานะ', - }, -} diff --git a/packages/translations/src/_generatedFiles_/api/tr.js b/packages/translations/src/_generatedFiles_/api/tr.js deleted file mode 100644 index d07b5a7c11..0000000000 --- a/packages/translations/src/_generatedFiles_/api/tr.js +++ /dev/null @@ -1,95 +0,0 @@ -export default { - authentication: { - account: 'Hesap', - apiKey: 'API Anahtarı', - enableAPIKey: 'Api anahtarını etkinleştir', - loggedInChangePassword: 'Parolanızı değiştirmek için <0>hesabınıza gidebilirsiniz.', - newAccountCreated: - '<0>{{serverURL}} sitesinde adınıza yeni bir hesap oluşturuldu. E-postanızı doğrulamak için bağlantıya tıklayabilirsiniz: <1>{{verificationURL}}
    E-postanızı doğruladıktan sonra siteye hesap bilgilerinizle giriş yapabilirsiniz.', - resetYourPassword: 'Parolanızı Sıfırlayın', - verified: 'Doğrulandı', - verifyYourEmail: 'E-postanızı doğrulayın', - youAreReceivingResetPassword: - 'Siz veya bir başkası hesabınızın parolasını sıfırlama isteğinde bulunduğu için bu e-postayı alıyorsunuz. İşlemi tamamlamak için lütfen aşağıdaki bağlantıya tıklayın veya bağlantı adresini tarayıcınızın adres yazma bölümüne kopyalayın.', - youDidNotRequestPassword: - 'Eğer bu işlemi siz gerçekleştirmediyseniz bu e-postayı görmezden gelebilirsiniz.', - }, - error: { - deletingFile: 'Dosya silinirken bir hatayla karşılaşıldı.', - emailOrPasswordIncorrect: 'Girilen e-posta veya parola hatalı', - followingFieldsInvalid_one: 'Lütfen geçersiz alanı düzeltin:', - followingFieldsInvalid_other: 'Lütfen geçersiz alanları düzeltin:', - noFilesUploaded: 'Yüklenen dosya yok', - notAllowedToPerformAction: 'Bu işlemi gerçekleştirmek için izniniz yok.', - problemUploadingFile: 'Dosya yüklenirken bir sorun oluştu.', - unableToDeleteCount: '{{total}} {{label}} içinden {{count}} silinemiyor.', - unableToUpdateCount: '{{total}} {{label}} içinden {{count}} güncellenemiyor.', - unauthorized: 'Bu işlemi gerçekleştirmek için lütfen giriş yapın.', - userLocked: - 'Hesabınız hatalı giriş denemeleri yüzünden geçici olarak kilitlendi. Lütfen daha sonra tekrar deneyin.', - valueMustBeUnique: 'Değer benzersiz olmalıdır', - }, - fields: { - chooseBetweenCustomTextOrDocument: - 'Choose between entering a custom text URL or linking to another document.', - chooseDocumentToLink: 'Bağlantı verilecek bir döküman seçin.', - customURL: 'Özel URL', - enterURL: 'Bir URL girin', - internalLink: 'İç bağlantı', - linkType: 'Bağlantı türü', - openInNewTab: 'Yeni sekmede aç', - textToDisplay: 'Görüntülenecek metin', - }, - general: { - copy: 'Kopyala', - createdAt: 'Oluşturma tarihi', - deletedCountSuccessfully: '{{count}} {{label}} başarıyla silindi.', - deletedSuccessfully: 'Başarıyla silindi.', - email: 'E-posta', - notFound: 'Bulunamadı', - row: 'Satır', - rows: 'Satır', - successfullyCreated: '{{label}} başarıyla oluşturuldu.', - successfullyDuplicated: '{{label}} başarıyla kopyalandı.', - thisLanguage: 'Türkçe', - updatedAt: 'Güncellenme tarihi', - updatedCountSuccessfully: '{{count}} {{label}} başarıyla güncellendi.', - updatedSuccessfully: 'Başarıyla güncellendi.', - user: 'kullanıcı', - users: 'kullanıcı', - value: 'Değer', - }, - upload: { - fileName: 'Dosya adı', - fileSize: 'Dosya boyutu', - height: 'Yükseklik', - sizes: 'Boyutlar', - width: 'Genişlik', - }, - validation: { - emailAddress: 'Lütfen geçerli bir e-posta adresi girin.', - enterNumber: 'Lütfen geçerli bir sayı girin.', - greaterThanMax: '{{value}} izin verilen maksimum {{label}} değerinden daha büyük.', - invalidInput: 'Bu alanda geçersiz bir giriş mevcut.', - invalidSelection: 'Bu alanda geçersiz bir seçim mevcut.', - invalidSelections: "'Bu alan şu geçersiz seçimlere sahip:'", - lessThanMin: '{{value}} izin verilen minimum {{label}} değerinden daha küçük.', - longerThanMin: 'Bu değer minimum {{minLength}} karakterden uzun olmalıdır.', - notValidDate: '"{{value}}" geçerli bir tarih değil.', - required: 'Bu alan gereklidir.', - requiresAtLeast: 'Bu alan en az {{count}} adet {{label}} gerektirmektedir.', - requiresNoMoreThan: 'Bu alana {{count}} adetten fazla {{label}} girilemez.', - requiresTwoNumbers: 'Bu alana en az iki rakam girilmesi zorunludur.', - shorterThanMax: 'Bu alan {{maxLength}} karakterden daha kısa olmalıdır.', - trueOrFalse: 'Bu alan yalnızca doğru ve yanlış olabilir.', - validUploadID: "'Bu alan geçerli bir karşıya yükleme ID'sine sahip değil.'", - }, - version: { - autosavedSuccessfully: 'Otomatik kaydetme başarılı', - draft: 'Taslak', - draftSavedSuccessfully: 'Taslak başarıyla kaydedildi.', - published: 'Yayınlandı', - restoredSuccessfully: 'Geri getirme başarılı.', - status: 'Durum', - }, -} diff --git a/packages/translations/src/_generatedFiles_/api/ua.js b/packages/translations/src/_generatedFiles_/api/ua.js deleted file mode 100644 index 95f623f21b..0000000000 --- a/packages/translations/src/_generatedFiles_/api/ua.js +++ /dev/null @@ -1,95 +0,0 @@ -export default { - authentication: { - account: 'Обліковий запис', - apiKey: 'API ключ', - enableAPIKey: 'Активувати API ключ', - loggedInChangePassword: - 'Щоб змінити ваш пароль, перейдіть до <0>облікового запису і змініть ваш пароль там.', - newAccountCreated: - 'Новий обліковий запис було створено, щоб отримати доступ до {{serverURL}}, будь ласка, натисніть на наступне посилання, або вставте посилання в адресну строку вашого браузера, щоб підтвердити вашу пошту: {{verificationURL}}
    Після Підтвердження вашої пошти, ви матимете змогу зайти в систему.', - resetYourPassword: 'Скинути ваш пароль', - verified: 'Підтверджено', - verifyYourEmail: 'Підтвердити пошту', - youAreReceivingResetPassword: - 'Ви отримали це повідомлення, бо ви (або хтось інший) створив запит на скидання пароля до вашого облікового запису. Будь ласка, натисніть на наступне посилання, або вставте посилання в адресний рядок вашого браузера, щоб завершити процес:', - youDidNotRequestPassword: - 'Якщо ви не сторювали запит на це, будь ласка, ігноруйте це повідомлення і пароль залишиться без змін', - }, - error: { - deletingFile: 'Виникла помилка під час видалення файлу', - emailOrPasswordIncorrect: 'Вказаний email або пароль не є вірними', - followingFieldsInvalid_one: 'Наступне поле не є вірним:', - followingFieldsInvalid_other: 'Наступні поля не є вірними', - noFilesUploaded: 'Не було загружено жодного файлу.', - notAllowedToPerformAction: 'Вам не дозволено виконувати цю дію.', - problemUploadingFile: 'Виникла помилка під час завантаження файлу.', - unableToDeleteCount: 'Не вдалося видалити {{count}} із {{total}} {{label}}.', - unableToUpdateCount: 'Не вдалося оновити {{count}} із {{total}} {{label}}.', - unauthorized: 'Немає доступу, ви повинні увійти, щоб виконати цей запит.', - userLocked: 'Цей користувач заблокований через велику кількість невдалих спроб входу.', - valueMustBeUnique: 'Значення має бути унікальним.', - }, - fields: { - chooseBetweenCustomTextOrDocument: - 'Виберіть між введенням власної текстової URL-адреси і посиланням на інший документ.', - chooseDocumentToLink: 'Виберіть документ, на який потрібно зробити посилання', - customURL: 'Власний URL', - enterURL: 'Введіть URL', - internalLink: 'Внутрішнє посилання', - linkType: 'Тип посилання', - openInNewTab: 'Відкривати в новій вкладці', - textToDisplay: 'Текст для відображення', - }, - general: { - copy: 'Скопіювати', - createdAt: 'Дата створення', - deletedCountSuccessfully: 'Успішно видалено {{count}} {{label}}.', - deletedSuccessfully: 'Успішно видалено.', - email: 'Email', - notFound: 'Не знайдено', - row: 'Рядок', - rows: 'Рядки', - successfullyCreated: '{{label}} успішно створено.', - successfullyDuplicated: '{{label}} успішно продубльовано.', - thisLanguage: 'Українська', - updatedAt: 'Змінено', - updatedCountSuccessfully: 'Успішно оновлено {{count}} {{label}}.', - updatedSuccessfully: 'Успішно відредаговано.', - user: 'Користувач', - users: 'Користувачі', - value: 'Значення', - }, - upload: { - fileName: 'Назва файлу', - fileSize: 'Розмір файлу', - height: 'Висота', - sizes: 'Розміри', - width: 'Ширина', - }, - validation: { - emailAddress: 'Будь ласка, введіть валідну email адресу.', - enterNumber: 'Будь ласка, введіть валідний номер.', - greaterThanMax: '{{value}} більше, ніж дозволено максимуму {{label}} в {{max}}.', - invalidInput: 'У цьому полі введено некоректне значення.', - invalidSelection: 'Це поле має некоректний вибір.', - invalidSelections: 'Це поле має наступні невірні варіанти вибору:', - lessThanMin: '{{value}} менше, ніж дозволено мінімуму {{label}} в {{min}}.', - longerThanMin: 'Це значення має бути більше, ніж мінімальна довжина {{minLength}} characters.', - notValidDate: '"{{value}}" - некоректна дата.', - required: "Це поле є обов'язковим.", - requiresAtLeast: 'Це поле потребує не менше {{count}} {{label}}.', - requiresNoMoreThan: 'Це поле потребує не більше {{count}} {{label}}.', - requiresTwoNumbers: 'У цьому полі потрібно ввести два числа.', - shorterThanMax: 'Це значення має бути меншим за максимальну довжину символів {{maxLength}}.', - trueOrFalse: 'Це поле може мати значення тільки true або false.', - validUploadID: 'Це поле не є дійсним ID завантаження.', - }, - version: { - autosavedSuccessfully: 'Автозбереження успішно виконано.', - draft: 'Чернетка', - draftSavedSuccessfully: 'Чернетка успішно збережена.', - published: 'Опубліковано', - restoredSuccessfully: 'Відновлено успішно.', - status: 'Статус', - }, -} diff --git a/packages/translations/src/_generatedFiles_/api/vi.js b/packages/translations/src/_generatedFiles_/api/vi.js deleted file mode 100644 index 8b475f659a..0000000000 --- a/packages/translations/src/_generatedFiles_/api/vi.js +++ /dev/null @@ -1,94 +0,0 @@ -export default { - authentication: { - account: 'Tài khoản', - apiKey: 'API Key', - enableAPIKey: 'Kích hoạt API Key', - loggedInChangePassword: 'Để đổi mật khẩu, hãy truy cập cài đặt <0>tài khoản.', - newAccountCreated: - 'Một tài khoản mới đã được tạo cho bạn. Tài khoản này được dùng để truy cập {{serverURL}} Hãy nhấp chuột hoặc sao chép đường dẫn sau vào trình duyệt của bạn để xác thực email: {{verificationURL}}
    Sau khi email được xác thực, bạn sẽ có thể đăng nhập.', - resetYourPassword: 'Tạo lại mật khẩu', - verified: 'Đã xác thực', - verifyYourEmail: 'Tiến hành xác thực email', - youAreReceivingResetPassword: - 'Bạn nhận được tin nhắn này vì bạn (hoặc một người nào khác) đã gửi yêu cầu thay đổi mật khẩu tài khoản của bạn. Xin hãy nhấp chuột vào đường dẫn sau, hoặc sao chép vào trình duyệt của bạn để hoàn tất quá trình:', - youDidNotRequestPassword: - 'Nếu bạn không phải là người yêu cầu thay đổi mật khẩu, xin hãy bỏ qua tin nhắn này và mật khẩu của bạn sẽ được giữ nguyên.', - }, - error: { - deletingFile: 'Lỗi - Đã xảy ra vấn đề khi xóa tệp này.', - emailOrPasswordIncorrect: 'Lỗi - Email hoặc mật khẩu không chính xác.', - followingFieldsInvalid_one: 'Lỗi - Field sau không hợp lệ:', - followingFieldsInvalid_other: 'Lỗi - Những fields sau không hợp lệ:', - noFilesUploaded: 'Lỗi - File chưa được tải lên.', - notAllowedToPerformAction: 'Lỗi - Bạn không có quyền thực hiện lệnh này.', - problemUploadingFile: 'Lỗi - Đã xảy ra vấn để khi tải lên file sau.', - unableToDeleteCount: 'Không thể xóa {{count}} trong số {{total}} {{label}}.', - unableToUpdateCount: 'Không thể cập nhật {{count}} trên {{total}} {{label}}.', - unauthorized: 'Lỗi - Bạn cần phải đăng nhập trước khi gửi request sau.', - userLocked: 'Lỗi- Tài khoản đã bị khóa do đăng nhập thất bại nhiều lần.', - valueMustBeUnique: 'Lỗi - Giá trị không được trùng lặp.', - }, - fields: { - chooseBetweenCustomTextOrDocument: - 'Chọn giữa nhập URL văn bản tùy chỉnh hoặc liên kết đến tài liệu khác.', - chooseDocumentToLink: 'Chọn một tài liệu để liên kết đến', - customURL: 'URL tùy chỉnh', - enterURL: 'Nhập một URL', - internalLink: 'Liên kết nội bộ', - linkType: 'Loại liên kết', - openInNewTab: 'Mở trong trang mới', - textToDisplay: 'Văn bản để hiển thị', - }, - general: { - copy: 'Sao chép', - createdAt: 'Ngày tạo', - deletedCountSuccessfully: 'Đã xóa thành công {{count}} {{label}}.', - deletedSuccessfully: 'Đã xoá thành công.', - email: 'Email', - notFound: 'Không tìm thấy', - row: 'Hàng', - rows: 'Những hàng', - successfullyCreated: '{{label}} đã được tạo thành công.', - successfullyDuplicated: '{{label}} đã được sao chép thành công.', - thisLanguage: 'Vietnamese (Tiếng Việt)', - updatedAt: 'Ngày cập nhật', - updatedCountSuccessfully: 'Đã cập nhật thành công {{count}} {{label}}.', - updatedSuccessfully: 'Cập nhật thành công.', - user: 'Người dùng', - users: 'Người dùng', - value: 'Giá trị', - }, - upload: { - fileName: 'Tên file', - fileSize: 'Dung lượng file', - height: 'Chiều cao', - sizes: 'Các độ phân giải', - width: 'Chiều rộng', - }, - validation: { - emailAddress: 'Địa chỉ email không hợp lệ.', - enterNumber: 'Vui lòng nhập số.', - greaterThanMax: '{{value}} lớn hơn giá trị tối đa cho phép của {{label}} là {{max}}.', - invalidInput: 'Dữ liệu nhập vào không hợp lệ.', - invalidSelection: 'Lựa chọn ở field này không hợp lệ.', - invalidSelections: "'Field này có những lựa chọn không hợp lệ sau:'", - lessThanMin: '{{value}} nhỏ hơn giá trị tối thiểu cho phép của {{label}} là {{min}}.', - longerThanMin: 'Giá trị này cần có độ dài tối thiểu {{minLength}} ký tự.', - notValidDate: '"{{value}}" không phải là một ngày (date) hợp lệ.', - required: 'Field này cần được diền.', - requiresAtLeast: 'Field này cần tối thiểu {{count}} {{label}}.', - requiresNoMoreThan: 'Field này không thể vượt quá {{count}} {{label}}.', - requiresTwoNumbers: 'Field này cần tối thiểu 2 chữ số.', - shorterThanMax: 'Giá trị phải ngắn hơn hoặc bằng {{maxLength}} ký tự.', - trueOrFalse: 'Field này chỉ có thể chứa giá trị true hoặc false.', - validUploadID: "'Field này không chứa ID tải lên hợp lệ.'", - }, - version: { - autosavedSuccessfully: 'Đã tự động lưu thành công.', - draft: 'Bản nháp', - draftSavedSuccessfully: 'Bản nháp đã được lưu thành công.', - published: 'Đã xuất bản', - restoredSuccessfully: 'Đã khôi phục thành công.', - status: 'Trạng thái', - }, -} diff --git a/packages/translations/src/_generatedFiles_/api/zh.js b/packages/translations/src/_generatedFiles_/api/zh.js deleted file mode 100644 index e04cdf853a..0000000000 --- a/packages/translations/src/_generatedFiles_/api/zh.js +++ /dev/null @@ -1,92 +0,0 @@ -export default { - authentication: { - account: '帐户', - apiKey: 'API密钥', - enableAPIKey: '启用API密钥', - loggedInChangePassword: '要更改您的密码,请到您的<0>帐户页面并在那里编辑您的密码。', - newAccountCreated: - '刚刚为您创建了一个可以访问 {{serverURL}} 的新帐户 请点击以下链接或在浏览器中粘贴以下网址,以验证您的电子邮件: {{verificationURL}}
    验证您的电子邮件后,您将能够成功登录。', - resetYourPassword: '重置您的密码', - verified: '已验证', - verifyYourEmail: '验证您的电子邮件', - youAreReceivingResetPassword: - '您收到此邮件是因为您(或其他人)已请求重置您帐户的密码。请点击以下链接,或将其粘贴到您的浏览器中以完成该过程:', - youDidNotRequestPassword: '如果您没有要求这样做,请忽略这封邮件,您的密码将保持不变。', - }, - error: { - deletingFile: '删除文件时出现了错误。', - emailOrPasswordIncorrect: '提供的电子邮件或密码不正确。', - followingFieldsInvalid_one: '下面的字段是无效的:', - followingFieldsInvalid_other: '以下字段是无效的:', - noFilesUploaded: '没有上传文件。', - notAllowedToPerformAction: '您不被允许执行此操作。', - problemUploadingFile: '上传文件时出现了问题。', - unableToDeleteCount: '无法从 {{total}} {{label}} 中删除 {{count}}。', - unableToUpdateCount: '无法更新 {{count}} 个,共 {{total}} 个 {{label}}。', - unauthorized: '未经授权,您必须登录才能提出这个请求。', - userLocked: '该用户由于有太多次失败的登录尝试而被锁定。', - valueMustBeUnique: '值必须是唯一的', - }, - fields: { - chooseBetweenCustomTextOrDocument: '选择输入一个自定义的文本URL或链接到另一个文档。', - chooseDocumentToLink: '选择一个要链接的文档', - customURL: '自定义URL', - enterURL: '输入一个URL', - internalLink: '内部链接', - linkType: '链接类型', - openInNewTab: '在新标签中打开', - textToDisplay: '要显示的文本', - }, - general: { - copy: '复制', - createdAt: '创建于', - deletedCountSuccessfully: '已成功删除 {{count}} {{label}}。', - deletedSuccessfully: '已成功删除。', - email: '电子邮件', - notFound: '未找到', - row: '行', - rows: '行', - successfullyCreated: '成功创建{{label}}', - successfullyDuplicated: '成功复制{{label}}', - thisLanguage: '中文 (简体)', - updatedAt: '更新于', - updatedCountSuccessfully: '已成功更新 {{count}} {{label}}。', - updatedSuccessfully: '更新成功。', - user: '用户', - users: '用户', - value: '值', - }, - upload: { - fileName: '文件名', - fileSize: '文件大小', - height: '高度', - sizes: '尺寸', - width: '宽度', - }, - validation: { - emailAddress: '请输入一个有效的电子邮件地址。', - enterNumber: '请输入一个有效的号码。', - greaterThanMax: '{{value}}超过了允许的最大{{label}},该最大值为{{max}}。', - invalidInput: '这个字段有一个无效的输入。', - invalidSelection: '这个字段有一个无效的选择。', - invalidSelections: '这个字段有以下无效的选择:', - lessThanMin: '{{value}}小于允许的最小{{label}},该最小值为{{min}}。', - longerThanMin: '该值必须大于{{minLength}}字符的最小长度', - notValidDate: '"{{value}}"不是一个有效的日期。', - required: '该字段为必填项目。', - requiresAtLeast: '该字段至少需要{{count}} {{label}}。', - requiresNoMoreThan: '该字段要求不超过{{count}} {{label}。', - requiresTwoNumbers: '该字段需要两个数字。', - shorterThanMax: '该值必须小于{{maxLength}}字符的最大长度', - trueOrFalse: '该字段只能等于真或伪。', - validUploadID: '该字段不是有效的上传ID。', - }, - version: { - autosavedSuccessfully: '自动保存成功。', - draft: '草稿', - draftSavedSuccessfully: '草稿成功保存。', - published: '已发布', - restoredSuccessfully: '恢复成功。', - status: '状态', - }, -} diff --git a/packages/translations/src/_generatedFiles_/api/zhTW.js b/packages/translations/src/_generatedFiles_/api/zhTW.js deleted file mode 100644 index 734613b768..0000000000 --- a/packages/translations/src/_generatedFiles_/api/zhTW.js +++ /dev/null @@ -1,92 +0,0 @@ -export default { - authentication: { - account: '帳戶', - apiKey: 'API金鑰', - enableAPIKey: '啟用API金鑰', - loggedInChangePassword: '要更改您的密碼,請前往您的<0>帳戶頁面並在那裡編輯您的密碼。', - newAccountCreated: - '剛剛為您建立了一個可以存取 {{serverURL}} 的新帳戶。請點擊以下連結或在瀏覽器中貼上以下網址以驗證您的電子郵件:{{verificationURL}}
    驗證您的電子郵件後,您將能夠成功登入。', - resetYourPassword: '重設您的密碼', - verified: '已驗證', - verifyYourEmail: '驗證您的電子郵件', - youAreReceivingResetPassword: - '您收到此郵件是因為您(或其他人)已請求重設您帳戶的密碼。請點擊以下連結,或將其貼上到您的瀏覽器中以完成該過程:', - youDidNotRequestPassword: '如果您沒有要求這樣做,請忽略這封郵件,您的密碼將保持不變。', - }, - error: { - deletingFile: '刪除文件時出現了錯誤。', - emailOrPasswordIncorrect: '提供的電子郵件或密碼不正確。', - followingFieldsInvalid_one: '下面的字串是無效的:', - followingFieldsInvalid_other: '以下字串是無效的:', - noFilesUploaded: '沒有上傳文件。', - notAllowedToPerformAction: '您不被允許執行此操作。', - problemUploadingFile: '上傳文件時出現了問題。', - unableToDeleteCount: '無法從 {{total}} 個中刪除 {{count}} 個 {{label}}。', - unableToUpdateCount: '無法從 {{total}} 個中更新 {{count}} 個 {{label}}。', - unauthorized: '未經授權,您必須登錄才能提出這個請求。', - userLocked: '該使用者由於有太多次失敗的登錄嘗試而被鎖定。', - valueMustBeUnique: '數值必須是唯一的', - }, - fields: { - chooseBetweenCustomTextOrDocument: '選擇自定義文件或連結到另一個文件。', - chooseDocumentToLink: '選擇要連結的文件', - customURL: '自定義連結', - enterURL: '輸入連結', - internalLink: '內部連結', - linkType: '連結類型', - openInNewTab: '在新標籤中打開', - textToDisplay: '要顯示的文字', - }, - general: { - copy: '複製', - createdAt: '建立於', - deletedCountSuccessfully: '已成功刪除 {{count}} 個 {{label}}。', - deletedSuccessfully: '已成功刪除。', - email: '電子郵件', - notFound: '未找到', - row: '行', - rows: '行', - successfullyCreated: '成功建立{{label}}', - successfullyDuplicated: '成功複製{{label}}', - thisLanguage: '中文 (繁體)', - updatedAt: '更新於', - updatedCountSuccessfully: '已成功更新 {{count}} 個 {{label}}。', - updatedSuccessfully: '更新成功。', - user: '使用者', - users: '使用者', - value: '值', - }, - upload: { - fileName: '檔案名稱', - fileSize: '檔案大小', - height: '高度', - sizes: '尺寸', - width: '寬度', - }, - validation: { - emailAddress: '請輸入一個有效的電子郵件地址。', - enterNumber: '請輸入一個有效的數字。', - greaterThanMax: '{{value}}超過了允許的最大{{label}},該最大值為{{max}}。', - invalidInput: '這個字串有一個無效的輸入。', - invalidSelection: '這個字串有一個無效的選擇。', - invalidSelections: '這個字串有以下無效的選擇:', - lessThanMin: '{{value}}小於允許的最小{{label}},該最小值為{{min}}。', - longerThanMin: '該值必須大於{{minLength}}字串的最小長度', - notValidDate: '"{{value}}"不是一個有效的日期。', - required: '該字串為必填項目。', - requiresAtLeast: '該字串至少需要 {{count}} 個 {{label}}。', - requiresNoMoreThan: '該字串要求不超過 {{count}} 個 {{label}。', - requiresTwoNumbers: '該字串需要兩個數字。', - shorterThanMax: '該值長度必須小於{{maxLength}}個字元', - trueOrFalse: '該字串只能等於是或否。', - validUploadID: '該字串不是有效的上傳ID。', - }, - version: { - autosavedSuccessfully: '自動儲存成功。', - draft: '草稿', - draftSavedSuccessfully: '草稿儲存成功。', - published: '已發佈', - restoredSuccessfully: '回復成功。', - status: '狀態', - }, -} diff --git a/packages/translations/src/_generatedFiles_/client/ar.js b/packages/translations/src/_generatedFiles_/client/ar.js deleted file mode 100644 index cbc47102ac..0000000000 --- a/packages/translations/src/_generatedFiles_/client/ar.js +++ /dev/null @@ -1,288 +0,0 @@ -export default { - authentication: { - account: 'الحساب', - accountOfCurrentUser: 'حساب المستخدم الحالي', - alreadyActivated: 'تمّ التّفعيل بالفعل', - alreadyLoggedIn: 'تمّ تسجيل الدّخول بالفعل', - backToLogin: 'العودة لتسجيل الدخول', - beginCreateFirstUser: 'للبدء, قم بإنشاء المستخدم الأوّل.', - changePassword: 'تغيير كلمة المرور', - confirmGeneration: 'تأكيد التّوليد', - confirmPassword: 'تأكيد كلمة المرور', - createFirstUser: 'إنشاء المستخدم الأوّل', - emailNotValid: 'البريد الإلكتروني غير صالح', - emailSent: 'تمّ ارسال البريد الإلكتروني', - enableAPIKey: 'تفعيل مفتاح API', - failedToUnlock: 'فشل فتح القفل', - forceUnlock: 'إجبار فتح القفل', - forgotPassword: 'نسيت كلمة المرور', - forgotPasswordEmailInstructions: - 'يرجى إدخال البريد الالكتروني أدناه. ستتلقّى رسالة بريد إلكتروني تحتوي على إرشادات حول كيفيّة إعادة تعيين كلمة المرور الخاصّة بك.', - forgotPasswordQuestion: 'هل نسيت كلمة المرور؟', - generate: 'توليد', - generateNewAPIKey: 'توليد مفتاح API جديد', - logBackIn: 'تسجيل الدّخول من جديد', - logOut: 'تسجيل الخروج', - loggedOutInactivity: 'لقد تمّ تسجيل الخروج بسبب عدم النّشاط.', - loggedOutSuccessfully: 'لقد تمّ تسجيل خروجك بنجاح.', - login: 'تسجيل الدخول', - logout: 'تسجيل الخروج', - logoutUser: 'تسجيل خروج المستخدم', - newAPIKeyGenerated: 'تمّ توليد مفتاح API جديد.', - newPassword: 'كلمة مرور جديدة', - resetPassword: 'إعادة تعيين كلمة المرور', - stayLoggedIn: 'ابق متّصلًا', - successfullyUnlocked: 'تمّ فتح القفل بنجاح', - unableToVerify: 'غير قادر على التحقق من', - verified: 'تمّ التحقّق', - verifiedSuccessfully: 'تمّ التحقّق بنجاح', - verify: 'قم بالتّحقّق', - verifyUser: 'قم بالتّحقّق من المستخدم', - youAreInactive: - 'لم تكن نشطًا منذ فترة قصيرة وسيتمّ تسجيل خروجك قريبًا تلقائيًا من أجل أمنك. هل ترغب في البقاء مسجّلا؟', - }, - error: { - autosaving: 'حدثت مشكلة أثناء حفظ هذا المستند تلقائيًا.', - correctInvalidFields: 'يرجى تصحيح الحقول غير الصالحة.', - deletingTitle: - 'حدث خطأ أثناء حذف {{title}}. يرجى التحقق من الاتصال الخاص بك والمحاولة مرة أخرى.', - loadingDocument: 'حدثت مشكلة أثناء تحميل المستند برقم التعريف {{id}}.', - noMatchedField: 'لم يتمّ العثور على حقل مطابق لـ "{{label}}"', - notAllowedToAccessPage: 'لا يسمح لك الوصول إلى هذه الصّفحة.', - previewing: 'حدث خطأ في اثناء معاينة هذا المستند.', - unableToDeleteCount: 'يتعذّر حذف {{count}} من {{total}} {{label}}.', - unableToUpdateCount: 'يتعذّر تحديث {{count}} من {{total}} {{label}}.', - unauthorized: 'غير مصرّح لك ، عليك أن تقوم بتسجيل الدّخول لتتمكّن من تقديم هذا الطّلب.', - unknown: 'حدث خطأ غير معروف.', - unspecific: 'حدث خطأ.', - }, - fields: { - addLabel: 'أضف {{label}}', - addLink: 'أضف رابط', - addNew: 'أضف جديد', - addNewLabel: 'أضف {{label}} جديد', - addRelationship: 'أضف علاقة', - addUpload: 'أضف تحميل', - block: 'وحدة محتوى', - blockType: 'نوع وحدة المحتوى', - blocks: 'وحدات المحتوى', - chooseFromExisting: 'اختر من القائمة', - collapseAll: 'طيّ الكلّ', - editLink: 'عدّل الرّابط', - editRelationship: 'عدّل العلاقة', - itemsAndMore: '{{items}} و {{count}} أخرى', - labelRelationship: '{{label}} علاقة', - latitude: 'خطّ العرض', - linkedTo: 'تمّ الرّبط ل <0>{{label}}', - longitude: 'خطّ الطّول', - passwordsDoNotMatch: 'كلمة المرور غير مطابقة.', - removeRelationship: 'حذف العلاقة', - removeUpload: 'حذف المحتوى المرفوع', - saveChanges: 'حفظ التّغييرات', - searchForBlock: 'ابحث عن وحدة محتوى', - selectFieldsToEdit: 'حدّد الحقول اللتي تريد تعديلها', - showAll: 'إظهار الكلّ', - swapRelationship: 'تبديل العلاقة', - swapUpload: 'تبديل المحتوى المرفوع', - toggleBlock: 'Toggle block', - uploadNewLabel: 'رفع {{label}} جديد', - }, - general: { - aboutToDelete: 'أنت على وشك حذف {{label}} <1>{{title}}. هل أنت متأكّد؟', - aboutToDeleteCount_many: 'أنت على وشك حذف {{count}} {{label}}', - aboutToDeleteCount_one: 'أنت على وشك حذف {{count}} {{label}}', - aboutToDeleteCount_other: 'أنت على وشك حذف {{count}} {{label}}', - addBelow: 'أضف في الاسفل', - addFilter: 'أضف فلتر', - adminTheme: 'شكل واجهة المستخدم', - and: 'و', - applyChanges: 'طبق التغييرات', - ascending: 'تصاعدي', - automatic: 'تلقائي', - backToDashboard: 'العودة للوحة التّحكّم', - cancel: 'إلغاء', - changesNotSaved: 'لم يتمّ حفظ التّغييرات. إن غادرت الآن ، ستفقد تغييراتك.', - close: 'إغلاق', - collapse: 'طيّ', - collections: 'المجموعات', - columnToSort: 'التّرتيب حسب العامود', - columns: 'الأعمدة', - confirm: 'تأكيد', - confirmDeletion: 'تأكيد الحذف', - confirmDuplication: 'تأكيد التّكرار', - copied: 'تمّ النّسخ', - copy: 'نسخ', - create: 'إنشاء', - createNew: 'أنشاء جديد', - createNewLabel: 'إنشاء {{label}} جديد', - created: 'تمّ الإنشاء', - creating: 'يتمّ الإنشاء', - creatingNewLabel: 'جاري إنشاء {{label}} جديد', - dark: 'غامق', - dashboard: 'لوحة التّحكّم', - delete: 'حذف', - deletedCountSuccessfully: 'تمّ حذف {{count}} {{label}} بنجاح.', - deleting: 'يتمّ الحذف...', - descending: 'تنازلي', - deselectAllRows: 'إلغاء تحديد جميع الصفوف', - duplicate: 'استنساخ', - duplicateWithoutSaving: 'استنساخ بدون حفظ التغييرات', - edit: 'تعديل', - editLabel: 'تعديل {{label}}', - editing: 'جاري التعديل', - editingLabel_many: 'تعديل {{count}} {{label}}', - editingLabel_one: 'تعديل {{count}} {{label}}', - editingLabel_other: 'تعديل {{count}} {{label}}', - email: 'البريد الإلكتروني', - emailAddress: 'عنوان البريد الإلكتروني', - enterAValue: 'أدخل قيمة', - error: 'خطأ', - errors: 'أخطاء', - fallbackToDefaultLocale: 'الرجوع إلى اللغة الافتراضية', - filterWhere: 'تصفية {{label}} حيث', - filters: 'عوامل التصفية', - globals: 'عامة', - language: 'اللغة', - lastModified: 'آخر تعديل', - leaveAnyway: 'المغادرة على أي حال', - leaveWithoutSaving: 'المغادرة بدون حفظ', - light: 'فاتح', - livePreview: 'معاينة مباشرة', - loading: 'يتمّ التّحميل', - locale: 'اللّغة', - menu: 'قائمة', - moveDown: 'التّحريك إلى الأسفل', - moveUp: 'التّحريك إلى الأعلى', - noFiltersSet: 'لم يتم تعيين أي عوامل تصفية', - noLabel: '<لا {{label}}>', - noOptions: 'لا خيارات', - noResults: - 'لا يوجد {{label}}. إما أن لا {{label}} موجودة حتى الآن أو لا تتطابق مع عوامل التصفية التي حددتها أعلاه.', - noValue: 'لا يوجد قيمة', - none: 'لا شيء', - notFound: 'غير موجود', - nothingFound: 'لم يتم العثور على شيء', - of: 'من', - open: 'فتح', - or: 'أو', - order: 'التّرتيب', - pageNotFound: 'الصّفحة غير موجودة', - password: 'كلمة المرور', - payloadSettings: 'الإعدادات', - perPage: 'لكلّ صفحة: {{limit}}', - remove: 'إزالة', - reset: 'إعادة تعيين', - row: 'سطر', - rows: 'أسطُر', - save: 'حفظ', - saving: 'جاري الحفظ...', - searchBy: 'البحث عن طريق {{label}}', - selectAll: 'تحديد كل {{count}} {{label}}', - selectAllRows: 'حدد جميع الصفوف', - selectValue: 'اختيار قيمة', - selectedCount: 'تم تحديد {{count}} {{label}}', - showAllLabel: 'عرض كل {{label}}', - sorryNotFound: 'عذرًا - لا يوجد شيء يتوافق مع طلبك.', - sort: 'ترتيب', - sortByLabelDirection: 'رتّب حسب {{label}} {{direction}}', - stayOnThisPage: 'البقاء على هذه الصفحة', - submissionSuccessful: 'تمت الإرسال بنجاح.', - submit: 'إرسال', - successfullyCreated: '{{label}} تم إنشاؤها بنجاح.', - thisLanguage: 'العربية', - titleDeleted: 'تم حذف {{label}} "{{title}}" بنجاح.', - unauthorized: 'غير مصرح به', - unsavedChangesDuplicate: 'لديك تغييرات لم يتم حفظها. هل تريد الاستمرار في الاستنساخ؟', - untitled: 'بدون عنوان', - updatedAt: 'تم التحديث في', - updatedCountSuccessfully: 'تم تحديث {{count}} {{label}} بنجاح.', - updatedSuccessfully: 'تم التحديث بنجاح.', - updating: 'جار التحديث', - welcome: 'مرحبًا', - }, - operators: { - contains: 'يحتوي', - equals: 'يساوي', - exists: 'موجود', - isGreaterThan: 'أكبر من', - isGreaterThanOrEqualTo: 'أكبر أو يساوي', - isIn: 'موجود في', - isLessThan: 'أصغر من', - isLessThanOrEqualTo: 'أصغر أو يساوي', - isLike: 'هو مثل', - isNotEqualTo: 'لا يساوي', - isNotIn: 'غير موجود في', - near: 'قريب من', - }, - upload: { - crop: 'محصول', - cropToolDescription: 'اسحب الزوايا المحددة للمنطقة، رسم منطقة جديدة أو قم بضبط القيم أدناه.', - dragAndDrop: 'قم بسحب وإسقاط ملفّ', - editImage: 'تعديل الصورة', - focalPoint: 'نقطة التركيز', - focalPointDescription: 'اسحب النقطة المركزية مباشرة على المعاينة أو قم بضبط القيم أدناه.', - height: 'الطّول', - previewSizes: 'أحجام المعاينة', - selectCollectionToBrowse: 'حدّد مجموعة لاستعراضها', - selectFile: 'اختر ملفّ', - setCropArea: 'حدد منطقة القص', - setFocalPoint: 'حدد النقطة البؤرية', - sizesFor: 'أحجام لـ {{label}}', - width: 'العرض', - }, - validation: { - fieldHasNo: 'هذا الحقل ليس لديه {{label}}', - limitReached: 'تم الوصول إلى الحد الأقصى، يمكن إضافة {{max}} عناصر فقط.', - required: 'هذا الحقل مطلوب.', - requiresAtLeast: 'هذا الحقل يتطلب على الأقل {{count}} {{label}}.', - }, - version: { - aboutToPublishSelection: 'أنت على وشك نشر كلّ {{label}} في التّحديد. هل أنت متأكّد؟', - aboutToRestore: - 'أنت على وشك استرجاع هذا المستند {{label}} إلى الحالة التّي كان عليها في {{versionDate}}.', - aboutToRestoreGlobal: - 'أنت على وشك استرجاع الاعداد العامّ {{label}} إلى الحالة التي كان عليها في {{versionDate}}.', - aboutToRevertToPublished: 'أنت على وشك إعادة هذا المستند إلى حالته المنشورة. هل أنت متأكّد؟', - aboutToUnpublish: 'أنت على وشك إلغاء نشر هذا المستند. هل أنت متأكّد؟', - aboutToUnpublishSelection: 'أنت على وشك إلغاء نشر كلّ {{label}} في التّحديد. هل أنت متأكّد؟', - autosave: 'حفظ تلقائي', - autosavedSuccessfully: 'تمّ الحفظ التّلقائي بنجاح.', - changed: 'تمّ التّغيير', - compareVersion: 'مقارنة النّسخة مع:', - confirmPublish: 'تأكيد النّشر', - confirmRevertToSaved: 'تأكيد الرّجوع للنسخة المنشورة', - confirmUnpublish: 'تأكيد إلغاء النّشر', - confirmVersionRestoration: 'تأكيد إستعادة النّسخة', - draft: 'مسودّة', - draftSavedSuccessfully: 'تمّ حفظ المسودّة بنجاح.', - lastSavedAgo: 'تم الحفظ آخر مرة قبل {{distance}}', - noFurtherVersionsFound: 'لم يتمّ العثور على نسخات أخرى', - noRowsFound: 'لم يتمّ العثور على {{label}}', - preview: 'معاينة', - problemRestoringVersion: 'حدث خطأ في استعادة هذه النّسخة', - publish: 'نشر', - publishChanges: 'نشر التّغييرات', - published: 'تمّ النّشر', - publishing: 'نشر', - restoreThisVersion: 'استعادة هذه النّسخة', - restoredSuccessfully: 'تمّت الاستعادة بنحاح.', - restoring: 'تتمّ الاستعادة...', - revertToPublished: 'الرّجوع للنسخة المنشورة', - saveDraft: 'حفظ المسودّة', - selectLocales: 'حدّد اللّغات المراد عرضها', - selectVersionToCompare: 'حدّد نسخة للمقارنة', - showLocales: 'اظهر اللّغات:', - status: 'الحالة', - type: 'النّوع', - unpublish: 'الغاء النّشر', - unpublishing: 'يتمّ الغاء النّشر...', - version: 'النّسخة', - versionCreatedOn: 'تمّ ﻹنشاء النّسخة في {{version}}:', - versionID: 'مُعرّف النّسخة', - versions: 'النُّسَخ', - viewingVersion: 'يتمّ استعراض نسخة ل {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: 'يتمّ استعراض نسخة للاعداد العامّ {{entityLabel}}', - viewingVersions: 'يتمّ استعراض النُّسَخ ل {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: 'يتمّ استعراض النُّسَخ للاعداد العامّ {{entityLabel}}', - }, -} diff --git a/packages/translations/src/_generatedFiles_/client/az.js b/packages/translations/src/_generatedFiles_/client/az.js deleted file mode 100644 index a8bd664318..0000000000 --- a/packages/translations/src/_generatedFiles_/client/az.js +++ /dev/null @@ -1,294 +0,0 @@ -export default { - authentication: { - account: 'Hesab', - accountOfCurrentUser: 'Cari istifadəçinin hesabı', - alreadyActivated: 'Artıq Aktivləşdirilib', - alreadyLoggedIn: 'Artıq daxil olunub', - backToLogin: 'Girişə qayıt', - beginCreateFirstUser: 'Başlamaq üçün ilk istifadəçinizi yaradın.', - changePassword: 'Parolu dəyişdir', - confirmGeneration: 'Generasiyani təsdiqlə', - confirmPassword: 'Şifrəni təsdiq et', - createFirstUser: 'İlk istifadəçini yaradın', - emailNotValid: 'Təqdim olunan e-poçt etibarlı deyil', - emailSent: 'E-poçt göndərildi', - enableAPIKey: 'API açarını aktivləşdir', - failedToUnlock: 'Kilidi açmaq alınmadı', - forceUnlock: 'Kilidi zorla aç', - forgotPassword: 'Şifrəni unutmusan', - forgotPasswordEmailInstructions: - 'Zəhmət olmasa, e-poçt ünvanınızı aşağıda daxil edin. Siz parolunuzu necə sıfırlamaq barədə təlimatları olan e-poçt mesajı alacaqsınız.', - forgotPasswordQuestion: 'Şifrəni unutmusan?', - generate: 'Yarad', - generateNewAPIKey: 'Yeni API açarı yarad', - logBackIn: 'Yenidən daxil ol', - logOut: 'Çıxış et', - loggedOutInactivity: 'Hərəkətsizlik səbəbindən sistemdən çıxmısınız.', - loggedOutSuccessfully: 'Siz uğurla çıxış etdiniz.', - login: 'Giriş', - logout: 'Çıxış', - logoutUser: 'Sistemdən çıxış', - newAPIKeyGenerated: 'Yeni API Açarı Yaradıldı.', - newPassword: 'Yeni şifrə', - resetPassword: 'Şifrəni sıfırla', - stayLoggedIn: 'Sistemdə qal', - successfullyUnlocked: 'Uğurla kilidi açıldı', - unableToVerify: 'Doğrulamaq mümkün deyil', - verified: 'Doğrulanmış', - verifiedSuccessfully: 'Uğurla doğrulandı', - verify: 'Doğrula', - verifyUser: 'İstifadəçini doğrula', - youAreInactive: - 'Siz bir müddətdir aktiv deyilsiniz və tezliklə öz təhlükəsizliyiniz üçün avtomatik olaraq sistemdən çıxacaqsınız. Daxil olmaq istərdinizmi?', - }, - error: { - autosaving: 'Bu sənədin avto yadda saxlanılması zamanı problem yarandı.', - correctInvalidFields: 'Zəhmət olmasa, yanlış sahələri düzəlt.', - deletingTitle: - '{{title}} silinərkən xəta baş verdi. Zəhmət olmasa, bağlantınızı yoxlayın və yenidən cəhd edin.', - loadingDocument: '{{id}} ID-li sənədin yüklənməsində problem baş verdi.', - noMatchedField: '"{{label}}" üçün uyğun sahə tapılmadı', - notAllowedToAccessPage: 'Bu səhifəyə girməyə icazəniz yoxdur.', - previewing: 'Bu sənədin ön baxışı zamanı problem yarandı.', - unableToDeleteCount: '{{count}} dən {{total}} {{label}} silinə bilmir.', - unableToUpdateCount: '{{count}} dən {{total}} {{label}} yenilənə bilmir.', - unauthorized: 'İcazəniz yoxdur, bu tələbi yerinə yetirmək üçün daxil olmalısınız.', - unknown: 'Naməlum bir xəta baş verdi.', - unspecific: 'Xəta baş verdi.', - }, - fields: { - addLabel: '{{label}} əlavə et', - addLink: 'Keçid əlavə et', - addNew: 'Yenisini əlavə et', - addNewLabel: 'Yeni {{label}} əlavə et', - addRelationship: 'Relationship əlavə et', - addUpload: 'Yükləmə əlavə et', - block: 'blok', - blockType: 'Blok Növü', - blocks: 'bloklar', - chooseFromExisting: 'Mövcuddan seçin', - collapseAll: 'Hamısını Bağla', - editLink: 'Keçidi redaktə et', - editRelationship: 'Relationship redaktə et', - itemsAndMore: '{{items}} və daha {{count}} nəfər', - labelRelationship: '{{label}} Relationship', - latitude: 'Enlik', - linkedTo: '<0>{{label}} ilə əlaqəli', - longitude: 'Uzunluq', - passwordsDoNotMatch: 'Şifrələr uyğun gəlmir.', - removeRelationship: 'Relationship sil', - removeUpload: 'Yükləməni sil', - saveChanges: 'Dəyişiklikləri saxla', - searchForBlock: 'Blok üçün axtarış', - selectFieldsToEdit: 'Redaktə ediləcək sahələri seçin', - showAll: 'Hamısını Göstər', - swapRelationship: 'Relationship dəyiş', - swapUpload: 'Yükləməni dəyiş', - toggleBlock: 'Bloku keç', - uploadNewLabel: 'Yeni {{label}} yüklə', - }, - general: { - aboutToDelete: 'Siz {{label}} <1>{{title}} silməyə hazırsınız. Eminsiniz?', - aboutToDeleteCount_many: 'Siz {{count}} {{label}} silməyə hazırsınız.', - aboutToDeleteCount_one: 'Siz {{count}} {{label}} silməyə hazırsınız.', - aboutToDeleteCount_other: 'Siz {{count}} {{label}} silməyə hazırsınız.', - addBelow: 'Aşağıya əlavə et', - addFilter: 'Filter əlavə et', - adminTheme: 'Admin Mövzusu', - and: 'Və', - applyChanges: 'Dəyişiklikləri Tətbiq Edin', - ascending: 'Artan', - automatic: 'Avtomatik', - backToDashboard: 'Panelə qayıdın', - cancel: 'Ləğv et', - changesNotSaved: - 'Dəyişiklikləriniz saxlanılmayıb. İndi çıxsanız, dəyişikliklərinizi itirəcəksiniz.', - close: 'Bağla', - collapse: 'Bağla', - collections: 'Kolleksiyalar', - columnToSort: 'Sıralamağa sütun', - columns: 'Sütunlar', - confirm: 'Təsdiqlə', - confirmDeletion: 'Silməni təsdiqlə', - confirmDuplication: 'Dublikasiyanı təsdiqlə', - copied: 'Kopyalandı', - copy: 'Kopyala', - create: 'Yarat', - createNew: 'Yeni yarat', - createNewLabel: 'Yeni {{label}} yarat', - created: 'Yaradıldı', - creating: 'Yaradılır', - creatingNewLabel: 'Yeni {{label}} yaradılır', - dark: 'Tünd', - dashboard: 'Panel', - delete: 'Sil', - deletedCountSuccessfully: '{{count}} {{label}} uğurla silindi.', - deleting: 'Silinir...', - descending: 'Azalan', - deselectAllRows: 'Bütün sıraları seçimi ləğv edin', - duplicate: 'Dublikat', - duplicateWithoutSaving: 'Dəyişiklikləri saxlamadan dublikatla', - edit: 'Redaktə et', - editLabel: '{{label}} redaktə et', - editing: 'Redaktə olunur', - editingLabel_many: '{{count}} {{label}} redaktə olunur', - editingLabel_one: '{{count}} {{label}} redaktə olunur', - editingLabel_other: '{{count}} {{label}} redaktə olunur', - email: 'Elektron poçt', - emailAddress: 'Elektron poçt ünvanı', - enterAValue: 'Bir dəyər daxil edin', - error: 'Xəta', - errors: 'Xətalar', - fallbackToDefaultLocale: 'Standart lokalə keçid', - filterWhere: '{{label}} filtrlə', - filters: 'Filtərlər', - globals: 'Qloballar', - language: 'Dil', - lastModified: 'Son dəyişdirildi', - leaveAnyway: 'Heç olmasa çıx', - leaveWithoutSaving: 'Saxlamadan çıx', - light: 'Açıq', - livePreview: 'Öncədən baxış', - loading: 'Yüklənir', - locale: 'Lokal', - menu: 'Menyu', - moveDown: 'Aşağı hərəkət et', - moveUp: 'Yuxarı hərəkət et', - noFiltersSet: 'Filter təyin edilməyib', - noLabel: '', - noOptions: 'Heç bir seçim yoxdur', - noResults: - 'Heç bir {{label}} tapılmadı. Ya hələ {{label}} yoxdur, ya da yuxarıda göstərdiyiniz filtrlərə uyğun gəlmir.', - noValue: 'Dəyər yoxdur', - none: 'Heç bir', - notFound: 'Tapılmadı', - nothingFound: 'Heç nə tapılmadı', - of: 'dən', - open: 'Aç', - or: 'Və ya', - order: 'Sıra', - pageNotFound: 'Səhifə tapılmadı', - password: 'Şifrə', - payloadSettings: 'Payload Parametrləri', - perPage: 'Hər səhifədə: {{limit}}', - remove: 'Sil', - reset: 'Yenidən başlat', - row: 'Sətir', - rows: 'Sətirlər', - save: 'Saxla', - saving: 'Saxlanılır...', - searchBy: '{{label}} ilə axtar', - selectAll: 'Bütün {{count}} {{label}} seç', - selectAllRows: 'Bütün sıraları seçin', - selectValue: 'Dəyər seçin', - selectedCount: '{{count}} {{label}} seçildi', - showAllLabel: 'Bütün {{label}}-ı göstər', - sorryNotFound: 'Üzr istəyirik - sizin tələbinizə uyğun heç nə yoxdur.', - sort: 'Sırala', - sortByLabelDirection: '{{label}} {{direction}} ilə sırala', - stayOnThisPage: 'Bu səhifədə qal', - submissionSuccessful: 'Təqdimat uğurlu oldu.', - submit: 'Təqdim et', - successfullyCreated: '{{label}} uğurla yaradıldı.', - thisLanguage: 'Azərbaycan dili', - titleDeleted: '{{label}} "{{title}}" uğurla silindi.', - unauthorized: 'İcazəsiz', - unsavedChangesDuplicate: - 'Saxlanılmamış dəyişiklikləriniz var. Dublikatla davam etmək istəyirsiniz?', - untitled: 'Başlıqsız', - updatedAt: 'Yeniləndiyi tarix', - updatedCountSuccessfully: '{{count}} {{label}} uğurla yeniləndi.', - updatedSuccessfully: 'Uğurla yeniləndi.', - updating: 'Yenilənir', - welcome: 'Xoş gəldiniz', - }, - operators: { - contains: 'daxilində', - equals: 'bərabərdir', - exists: 'mövcuddur', - isGreaterThan: 'dən böyük', - isGreaterThanOrEqualTo: 'böyük və ya bərabər', - isIn: 'daxildir', - isLessThan: 'dən kiçik', - isLessThanOrEqualTo: 'kiçik və ya bərabər', - isLike: 'kimi', - isNotEqualTo: 'bərabər deyil', - isNotIn: 'daxil deyil', - near: 'yaxın', - }, - upload: { - crop: 'Məhsul', - cropToolDescription: - 'Seçilmiş sahənin köşələrini sürükləyin, yeni bir sahə çəkin və ya aşağıdakı dəyərləri düzəltin.', - dragAndDrop: 'Faylı buraya sürükləyin və buraxın', - editImage: 'Şəkili Redaktə Et', - focalPoint: 'Mərkəzi Nöqtə', - focalPointDescription: - 'Fokus nöqtəsini birbaşa önizləməyə sürükləyin və ya aşağıdakı dəyərləri düzəltin.', - height: 'Hündürlük', - previewSizes: 'Öncədən baxış ölçüləri', - selectCollectionToBrowse: 'Gözdən keçirmək üçün bir Kolleksiya seçin', - selectFile: 'Fayl seçin', - setCropArea: 'Məhsul sahəsini təyin et', - setFocalPoint: 'Fokus nöqtəsi təyin et', - sizesFor: '{{label}} üçün ölçülər', - width: 'En', - }, - validation: { - fieldHasNo: 'Bu sahədə heç bir {{label}} yoxdur', - limitReached: 'Limitə çatdınız, yalnız {{max}} element əlavə edilə bilər.', - required: 'Bu sahə mütləq doldurulmalıdır.', - requiresAtLeast: 'Bu sahə ən azı {{count}} {{label}} tələb edir.', - }, - version: { - aboutToPublishSelection: 'Seçimdə olan bütün {{label}}-i dərc etməyə hazırsınız. Əminsiniz?', - aboutToRestore: - 'Bu {{label}} sənədini {{versionDate}} tarixindəki vəziyyətinə bərpa etmək üzrəsiniz.', - aboutToRestoreGlobal: - 'Qlobal {{label}}-i {{versionDate}} tarixindəki vəziyyətinə bərpa etmək üzrəsiniz.', - aboutToRevertToPublished: - 'Bu sənədin dəyişikliklərini dərc edilmiş vəziyyətinə qaytarmağa hazırsınız. Əminsiniz?', - aboutToUnpublish: 'Bu sənədi dərcdən çıxartmağa hazırsınız. Əminsiniz?', - aboutToUnpublishSelection: - 'Seçimdə olan bütün {{label}}-i dərcdən çıxartmağa hazırsınız. Əminsiniz?', - autosave: 'Avtomatik yadda saxlama', - autosavedSuccessfully: 'Uğurla avtomatik olaraq yadda saxlandı.', - changed: 'Dəyişdirildi', - compareVersion: 'Versiyanı müqayisə et:', - confirmPublish: 'Dərci təsdiq edin', - confirmRevertToSaved: 'Yadda saxlanana qayıtmağı təsdiq edin', - confirmUnpublish: 'Dərcdən çıxartmağı təsdiq edin', - confirmVersionRestoration: 'Versiyanın bərpasını təsdiq edin', - draft: 'Qaralama', - draftSavedSuccessfully: 'Qaralama uğurla yadda saxlandı.', - lastSavedAgo: '{{distance}} əvvəl son yadda saxlanıldı', - noFurtherVersionsFound: 'Başqa versiyalar tapılmadı', - noRowsFound: 'Heç bir {{label}} tapılmadı', - preview: 'Öncədən baxış', - problemRestoringVersion: 'Bu versiyanın bərpasında problem yaşandı', - publish: 'Dərc et', - publishChanges: 'Dəyişiklikləri dərc et', - published: 'Dərc edilmiş', - publishing: 'Nəşr', - restoreThisVersion: 'Bu versiyanı bərpa et', - restoredSuccessfully: 'Uğurla bərpa edildi.', - restoring: 'Bərpa olunur...', - revertToPublished: 'Dərc edilmişə qayıt', - saveDraft: 'Qaralamayı yadda saxla', - selectLocales: 'Göstərmək üçün lokalları seçin', - selectVersionToCompare: 'Müqayisə üçün bir versiya seçin', - showLocales: 'Lokalları göstər:', - status: 'Status', - type: 'Növ', - unpublish: 'Dərcdən çıxart', - unpublishing: 'Dərcdən çıxarılır...', - version: 'Versiya', - versionCreatedOn: '{{version}} tarixində yaradıldı:', - versionID: 'Versiyanın ID-si', - versions: 'Versiyalar', - viewingVersion: '{{entityLabel}} {{documentTitle}} üçün versiyanı göstərir', - viewingVersionGlobal: 'Qlobal {{entityLabel}} üçün versiyanı göstərir', - viewingVersions: '{{entityLabel}} {{documentTitle}} üçün versiyaları göstərir', - viewingVersionsGlobal: 'Qlobal {{entityLabel}} üçün versiyaları göstərir', - }, -} diff --git a/packages/translations/src/_generatedFiles_/client/bg.js b/packages/translations/src/_generatedFiles_/client/bg.js deleted file mode 100644 index 09a0318f46..0000000000 --- a/packages/translations/src/_generatedFiles_/client/bg.js +++ /dev/null @@ -1,291 +0,0 @@ -export default { - authentication: { - account: 'Профил', - accountOfCurrentUser: 'Профил на текущия потребител', - alreadyActivated: 'Вече активиран', - alreadyLoggedIn: 'Вече влязъл', - backToLogin: 'Обратно към влизане', - beginCreateFirstUser: 'За да започнеш, създай първия си потребител', - changePassword: 'Промяна на паролата', - confirmGeneration: 'Потвърди генерация', - confirmPassword: 'Потвърди парола', - createFirstUser: 'Създай първи потребител', - emailNotValid: 'Даденият имейл не е валиден', - emailSent: 'Имейлът е изпратен', - enableAPIKey: 'Активирай API ключ', - failedToUnlock: 'Неуспешно отключване', - forceUnlock: 'Принудително отключване', - forgotPassword: 'Забравена парола', - forgotPasswordEmailInstructions: - 'Моля, въведи имейла си по-долу. Ще получиш съобщение с насоки как да промениш паролата си.', - forgotPasswordQuestion: 'Забравена парола?', - generate: 'Генерирай', - generateNewAPIKey: 'Генерирай нов API ключ', - logBackIn: 'Влез обратно', - logOut: 'Изход', - loggedOutInactivity: 'Ти беше изкаран поради неактивност.', - loggedOutSuccessfully: 'Излезе успешно.', - login: 'Вход', - logout: 'Изход', - logoutUser: 'Изкарай потребител', - newAPIKeyGenerated: 'Нов API ключ генериран.', - newPassword: 'Нова парола', - resetPassword: 'Възстанови парола', - stayLoggedIn: 'Запомни ме', - successfullyUnlocked: 'Успешно отключен', - unableToVerify: 'Неуспешно потвърждение', - verified: 'Потвърден', - verifiedSuccessfully: 'Потвърден успешно', - verify: 'Потвърди', - verifyUser: 'Потвърди потребител', - youAreInactive: - 'Не си активен от известно време и ще бъдеш изкаран за собствената си сигурност. Би ли пожелал да останеш вписан?', - }, - error: { - autosaving: 'Имаше проблем в автоматичното запазване на този документ.', - correctInvalidFields: 'Моля, поправи некоректните полета.', - deletingTitle: - 'Имаше проблем при изтриването на {{title}}. Моля провери връзката си и опитай отново.', - loadingDocument: 'Имаше проблем при зареждането на документа с идентификатор {{id}}.', - noMatchedField: 'Поле не беше открито за "{{label}}"', - notAllowedToAccessPage: 'Нямаш право на достъп до тази страница.', - previewing: 'Имаше проблем при предварителното разглеждане на документа.', - unableToDeleteCount: 'Не беше възможно да се изтрият {{count}} от {{total}} {{label}}.', - unableToUpdateCount: 'Не беше възможно да се обновят {{count}} от {{total}} {{label}}.', - unauthorized: 'Неавторизиран, трябва да влезеш, за да извършиш тази заявка.', - unknown: 'Неизвестна грешка.', - unspecific: 'Грешка.', - }, - fields: { - addLabel: 'Добави {{label}}', - addLink: 'Добави нова връзка', - addNew: 'Добави нов', - addNewLabel: 'Добави нов {{label}}', - addRelationship: 'Добави отношение', - addUpload: 'Качи', - block: 'блок', - blockType: 'Тип блок', - blocks: 'блокове', - chooseFromExisting: 'Избери от съществуващите', - collapseAll: 'Свий всички', - editLink: 'Редактирай връзка', - editRelationship: 'Редактирай отношение', - itemsAndMore: '{{items}} и {{count}} повече', - labelRelationship: '{{label}} връзка', - latitude: 'Географска ширина', - linkedTo: 'Свързано с <0>{{label}}', - longitude: 'Географска дължина', - passwordsDoNotMatch: 'Паролите не са еднакви.', - removeRelationship: 'Премахни отношение', - removeUpload: 'Премахни качване', - saveChanges: 'Запази промените', - searchForBlock: 'Търси блок', - selectFieldsToEdit: 'Избери полета за редактиране', - showAll: 'Покажи всички', - swapRelationship: 'Смени отношение', - swapUpload: 'Смени качване', - toggleBlock: 'Превключи блок', - uploadNewLabel: 'Качи нов {{label}}', - }, - general: { - aboutToDelete: 'На път си да изтриеш {{label}} <1>{{title}}. Сигурен ли си?', - aboutToDeleteCount_many: 'На път си да изтриеш {{count}} {{label}}', - aboutToDeleteCount_one: 'На път си да изтриеш {{count}} {{label}}', - aboutToDeleteCount_other: 'На път си да изтриеш {{count}} {{label}}', - addBelow: 'Добави отдолу', - addFilter: 'Добави филтър', - adminTheme: 'Цветова тема', - and: 'И', - applyChanges: 'Приложи промените', - ascending: 'Възходящ', - automatic: 'Автоматична', - backToDashboard: 'Обратно към таблото', - cancel: 'Отмени', - changesNotSaved: 'Промените ти не са запазени. Ако напуснеш сега, ще ги загубиш.', - close: 'Затвори', - collapse: 'Свий', - collections: 'Колекции', - columnToSort: 'Колона за сортиране', - columns: 'Колони', - confirm: 'Потвърди', - confirmDeletion: 'Потвърди изтриване', - confirmDuplication: 'Потвърди дупликация', - copied: 'Копирано', - copy: 'Копирай', - create: 'Създай', - createNew: 'Създай нов', - createNewLabel: 'Създай нов {{label}}', - created: 'Създаден', - creating: 'Създава се', - creatingNewLabel: 'Създаване на нов {{label}}', - dark: 'Тъмна', - dashboard: 'Табло', - delete: 'Изтрий', - deletedCountSuccessfully: 'Изтрити {{count}} {{label}} успешно.', - deleting: 'Изтриване...', - descending: 'Низходящо', - deselectAllRows: 'Деселектирай всички редове', - duplicate: 'Дупликирай', - duplicateWithoutSaving: 'Дупликирай без да запазваш промените', - edit: 'Редактирай', - editLabel: 'Редактирай {{label}}', - editing: 'Редактиране', - editingLabel_many: 'Редактиране на {{count}} {{label}}', - editingLabel_one: 'Редактиране на {{count}} {{label}}', - editingLabel_other: 'Редактиране на {{count}} {{label}}', - email: 'Имейл', - emailAddress: 'Имейл адрес', - enterAValue: 'Въведи стойност', - error: 'Грешка', - errors: 'Грешки', - fallbackToDefaultLocale: 'Използвай локализация по подразбиране', - filterWhere: 'Филтрирай {{label}} където', - filters: 'Филтри', - globals: 'Глобални', - language: 'Език', - lastModified: 'Последно променено', - leaveAnyway: 'Напусни въпреки това', - leaveWithoutSaving: 'Напусни без да запазиш', - light: 'Светла', - livePreview: 'Предварителен преглед', - loading: 'Зарежда се', - locale: 'Локализация', - menu: 'Меню', - moveDown: 'Надолу', - moveUp: 'Нагоре', - noFiltersSet: 'Няма зададени филтри', - noLabel: '<Няма {{label}}>', - noOptions: 'Няма опции', - noResults: - '{{label}} не е открит. {{label}} не съществува или никой не отговаря на зададените филтри.', - noValue: 'Няма стойност', - none: 'Никакъв', - notFound: 'Няма открит', - nothingFound: 'Нищо не беше открито', - of: 'от', - open: 'Отвори', - or: 'Или', - order: 'Ред', - pageNotFound: 'Страницата не беше открита', - password: 'Парола', - payloadSettings: 'Настройки на Payload', - perPage: 'На страница: {{limit}}', - remove: 'Премахни', - reset: 'Нулиране', - row: 'ред', - rows: 'Редове', - save: 'Запази', - saving: 'Запазване...', - searchBy: 'Търси по {{label}}', - selectAll: 'Избери всички {{count}} {{label}}', - selectAllRows: 'Избери всички редове', - selectValue: 'Избери стойност', - selectedCount: '{{count}} {{label}} избрани', - showAllLabel: 'Покажи всички {{label}}', - sorryNotFound: 'Съжаляваме-няма нищо, което да отговаря на търсенето ти.', - sort: 'Сортирай', - sortByLabelDirection: 'Сортирай по {{label}} {{direction}}', - stayOnThisPage: 'Остани на тази страница', - submissionSuccessful: 'Успешно подаване.', - submit: 'Подай', - successfullyCreated: '{{label}} успешно създаден.', - thisLanguage: 'Български', - titleDeleted: '{{label}} "{{title}}" успешно изтрит.', - unauthorized: 'Неавторизиран', - unsavedChangesDuplicate: 'Имаш незапазени промени. Искаш ли да продължиш да дупликираш?', - untitled: 'Неозаглавен', - updatedAt: 'Обновен на', - updatedCountSuccessfully: 'Обновени {{count}} {{label}} успешно.', - updatedSuccessfully: 'Обновен успешно.', - updating: 'Обновява се', - welcome: 'Добре дошъл', - }, - operators: { - contains: 'съдържа', - equals: 'е равно на', - exists: 'съществува', - isGreaterThan: 'е по-голямо от', - isGreaterThanOrEqualTo: 'е по-голямо от или равно на', - isIn: 'е в', - isLessThan: 'е по-малко от', - isLessThanOrEqualTo: 'е по-малко от или равно на', - isLike: 'е като', - isNotEqualTo: 'не е равно на', - isNotIn: 'не е в', - near: 'близко', - }, - upload: { - crop: 'Изрязване', - cropToolDescription: - 'Плъзни ъглите на избраната област, избери нова област или коригирай стойностите по-долу.', - dragAndDrop: 'Дръпни и пусни файл', - editImage: 'Редактирай изображение', - focalPoint: 'Фокусна точка', - focalPointDescription: - 'Премести фокусната точка директно върху визуализацията или регулирай стойностите по-долу.', - height: 'Височина', - previewSizes: 'Преглед на размери', - selectCollectionToBrowse: 'Избери колекция, която да разгледаш', - selectFile: 'Избери файл', - setCropArea: 'Задай област за изрязване', - setFocalPoint: 'Задай фокусна точка', - sizesFor: 'Размери за {{label}}', - width: 'Ширина', - }, - validation: { - fieldHasNo: 'Това поле няма {{label}}', - limitReached: 'Достигнат е лимитът, могат да бъдат добавени само {{max}} елемента.', - required: 'Това поле е задължително.', - requiresAtLeast: 'Това поле изисква поне {{count}} {{label}}.', - }, - version: { - aboutToPublishSelection: 'На път си да публикуваш всички избрани {{label}}. Сигурен ли си?', - aboutToRestore: - 'На път си да възстановиш този {{label}} документ до състоянието му от {{versionDate}}.', - aboutToRestoreGlobal: - 'На път си да възстановиш глобалния докумнт {{label}} до състоянието му от {{versionDate}}.', - aboutToRevertToPublished: - 'На път си да възстановиш промените на този документ до публикуваното му състояние. Сигурен ли си?', - aboutToUnpublish: 'На път си да скриеш този документ. Сигурен ли си?', - aboutToUnpublishSelection: 'На път си да скриеш всички избрани {{label}}. Сигурен ли си?', - autosave: 'Автоматично запазване', - autosavedSuccessfully: 'Успешно автоматично запазване.', - changed: 'Променен', - compareVersion: 'Сравни версия с:', - confirmPublish: 'Потвърди публикуване', - confirmRevertToSaved: 'Потвърди възстановяване до запазен', - confirmUnpublish: 'Потвърди скриване', - confirmVersionRestoration: 'Потвърди възстановяване на версия', - draft: 'Чернова', - draftSavedSuccessfully: 'Чернова запазена успешно.', - lastSavedAgo: 'последно запазено преди {{distance}}', - noFurtherVersionsFound: 'Не са открити повече версии', - noRowsFound: 'Не е открит {{label}}', - preview: 'Предварителен преглед', - problemRestoringVersion: 'Имаше проблем при възстановяването на тази версия', - publish: 'Публикувай', - publishChanges: 'Публикувай промените', - published: 'Публикувано', - publishing: 'Публикуване', - restoreThisVersion: 'Възстанови тази версия', - restoredSuccessfully: 'Успешно възстановяване.', - restoring: 'Възстановяване...', - revertToPublished: 'Върни се до публикуваното', - saveDraft: 'Запази чернова', - selectLocales: 'Избери локализации за показване', - selectVersionToCompare: 'Избери версия за сравняване', - showLocales: 'Покажи преводи:', - status: 'Статус', - type: 'Тип', - unpublish: 'Скрий', - unpublishing: 'Скриване...', - version: 'Версия', - versionCreatedOn: '{{version}} създадена на:', - versionID: 'Идентификатор на версията', - versions: 'Версии', - viewingVersion: 'Гледане на версия за {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: 'Гледане на версия за глобалния документ {{entityLabel}}', - viewingVersions: 'Гледане на версии за {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: 'Гледане на версии за глобалния документ {{entityLabel}}', - }, -} diff --git a/packages/translations/src/_generatedFiles_/client/cs.js b/packages/translations/src/_generatedFiles_/client/cs.js deleted file mode 100644 index 56801026e4..0000000000 --- a/packages/translations/src/_generatedFiles_/client/cs.js +++ /dev/null @@ -1,291 +0,0 @@ -export default { - authentication: { - account: 'Účet', - accountOfCurrentUser: 'Účet současného uživatele', - alreadyActivated: 'Již aktivováno', - alreadyLoggedIn: 'Již přihlášen', - backToLogin: 'Zpět na přihlášení', - beginCreateFirstUser: 'Začněte vytvořením svého prvního uživatele.', - changePassword: 'Změnit heslo', - confirmGeneration: 'Potvrdit generaci', - confirmPassword: 'Potvrdit heslo', - createFirstUser: 'Vytvořit prvního uživatele', - emailNotValid: 'Zadaný email není platný', - emailSent: 'Email odeslán', - enableAPIKey: 'Povolit klíč API', - failedToUnlock: 'Nepodařilo se odemknout', - forceUnlock: 'Vynutit odemčení', - forgotPassword: 'Zapomněli jste heslo?', - forgotPasswordEmailInstructions: - 'Zadejte svůj email níže. Obdržíte email s instrukcemi, jak resetovat vaše heslo.', - forgotPasswordQuestion: 'Zapomněli jste heslo?', - generate: 'Generovat', - generateNewAPIKey: 'Generovat nový klíč API', - logBackIn: 'Znovu se přihlásit', - logOut: 'Odhlásit se', - loggedOutInactivity: 'Byli jste odhlášeni z důvodu neaktivity.', - loggedOutSuccessfully: 'Byli jste úspěšně odhlášeni.', - login: 'Přihlásit se', - logout: 'Odhlásit se', - logoutUser: 'Odhlásit uživatele', - newAPIKeyGenerated: 'Byl vygenerován nový klíč API.', - newPassword: 'Nové heslo', - resetPassword: 'Resetovat heslo', - stayLoggedIn: 'Zůstat přihlášen', - successfullyUnlocked: 'Úspěšně odemčeno', - unableToVerify: 'Nepodařilo se ověřit', - verified: 'Ověřeno', - verifiedSuccessfully: 'Úspěšně ověřeno', - verify: 'Ověřit', - verifyUser: 'Ověřit uživatele', - youAreInactive: - 'Nějakou dobu jste nebyli aktivní a brzy budete automaticky odhlášeni z bezpečnostních důvodů. Chcete zůstat přihlášen?', - }, - error: { - autosaving: 'Při automatickém ukládání tohoto dokumentu došlo k chybě.', - correctInvalidFields: 'Opravte neplatná pole.', - deletingTitle: - 'Při mazání {{title}} došlo k chybě. Zkontrolujte své připojení a zkuste to znovu.', - loadingDocument: 'Při načítání dokumentu s ID {{id}} došlo k chybě.', - noMatchedField: 'Pro "{{label}}" nebylo nalezeno žádné odpovídající pole', - notAllowedToAccessPage: 'Nemáte povolení přistupovat k této stránce.', - previewing: 'Při náhledu tohoto dokumentu došlo k chybě.', - unableToDeleteCount: 'Nelze smazat {{count}} z {{total}} {{label}}', - unableToUpdateCount: 'Nelze aktualizovat {{count}} z {{total}} {{label}}.', - unauthorized: 'Neautorizováno, pro zadání tohoto požadavku musíte být přihlášeni.', - unknown: 'Došlo k neznámé chybě.', - unspecific: 'Došlo k chybě.', - }, - fields: { - addLabel: 'Přidat {{label}}', - addLink: 'Přidat Odkaz', - addNew: 'Přidat nový', - addNewLabel: 'Přidat nový {{label}}', - addRelationship: 'Přidat vztah', - addUpload: 'Přidat nahrávání', - block: 'blok', - blockType: 'Typ bloku', - blocks: 'bloky', - chooseFromExisting: 'Vybrat z existujících', - collapseAll: 'Sbalit vše', - editLink: 'Upravit odkaz', - editRelationship: 'Upravit vztah', - itemsAndMore: '{{items}} a {{count}} dalších', - labelRelationship: 'Vztah {{label}}', - latitude: 'Zeměpisná šířka', - linkedTo: 'Odkaz na <0>{{label}}', - longitude: 'Zeměpisná délka', - passwordsDoNotMatch: 'Hesla se neshodují.', - removeRelationship: 'Odstranit vztah', - removeUpload: 'Odstranit nahrání', - saveChanges: 'Uložit změny', - searchForBlock: 'Hledat blok', - selectFieldsToEdit: 'Vyberte pole, která chcete upravit', - showAll: 'Zobrazit vše', - swapRelationship: 'Zaměnit vztah', - swapUpload: 'Vyměnit nahrání', - toggleBlock: 'Přepnout blok', - uploadNewLabel: 'Nahrát nový {{label}}', - }, - general: { - aboutToDelete: 'Chystáte se odstranit {{label}} <1>{{title}}. Jste si jisti?', - aboutToDeleteCount_many: 'Chystáte se smazat {{count}} {{label}}', - aboutToDeleteCount_one: 'Chystáte se smazat {{count}} {{label}}', - aboutToDeleteCount_other: 'Chystáte se smazat {{count}} {{label}}', - addBelow: 'Přidat pod', - addFilter: 'Přidat filtr', - adminTheme: 'Motiv administračního rozhraní', - and: 'A', - applyChanges: 'Použít změny', - ascending: 'Vzestupně', - automatic: 'Automatické', - backToDashboard: 'Zpět na nástěnku', - cancel: 'Zrušit', - changesNotSaved: 'Vaše změny nebyly uloženy. Pokud teď odejdete, ztratíte své změny.', - close: 'Zavřít', - collapse: 'Sbalit', - collections: 'Kolekce', - columnToSort: 'Sloupec k seřazení', - columns: 'Sloupce', - confirm: 'Potvrdit', - confirmDeletion: 'Potvrdit odstranění', - confirmDuplication: 'Potvrdit duplikaci', - copied: 'Zkopírováno', - copy: 'Kopírovat', - create: 'Vytvořit', - createNew: 'Vytvořit nové', - createNewLabel: 'Vytvořit nový {{label}}', - created: 'Vytvořeno', - creating: 'Vytváření', - creatingNewLabel: 'Vytváření nového {{label}}', - dark: 'Tmavé', - dashboard: 'Nástěnka', - delete: 'Odstranit', - deletedCountSuccessfully: 'Úspěšně smazáno {{count}} {{label}}.', - deleting: 'Odstraňování...', - descending: 'Sestupně', - deselectAllRows: 'Zrušte výběr všech řádků', - duplicate: 'Duplikovat', - duplicateWithoutSaving: 'Duplikovat bez uložení změn', - edit: 'Upravit', - editLabel: 'Upravit {{label}}', - editing: 'Úpravy', - editingLabel_many: 'Úprava {{count}} {{label}}', - editingLabel_one: 'Úprava {{count}} {{label}}', - editingLabel_other: 'Úprava {{count}} {{label}}', - email: 'E-mail', - emailAddress: 'E-mailová adresa', - enterAValue: 'Zadejte hodnotu', - error: 'Chyba', - errors: 'Chyby', - fallbackToDefaultLocale: 'Zpětné přepnutí do výchozího locale', - filterWhere: 'Filtrovat {{label}} kde', - filters: 'Filtry', - globals: 'Globální', - language: 'Jazyk', - lastModified: 'Naposledy změněno', - leaveAnyway: 'Přesto odejít', - leaveWithoutSaving: 'Odejít bez uložení', - light: 'Světlé', - livePreview: 'Náhled', - loading: 'Načítání', - locale: 'Místní verze', - menu: 'Jídelní lístek', - moveDown: 'Posunout dolů', - moveUp: 'Posunout nahoru', - noFiltersSet: 'Nenastaveny žádné filtry', - noLabel: '<Žádný {{label}}>', - noOptions: 'Žádné možnosti', - noResults: - 'Nebyly nalezeny žádné {{label}}. Buď ještě neexistují žádné {{label}}, nebo žádné nesplňují filtry, které jste zadali výše.', - noValue: 'Žádná hodnota', - none: 'Žádné', - notFound: 'Nenalezeno', - nothingFound: 'Nic nenalezeno', - of: 'z', - open: 'Otevřít', - or: 'Nebo', - order: 'Pořadí', - pageNotFound: 'Stránka nenalezena', - password: 'Heslo', - payloadSettings: 'Nastavení datového záběru', - perPage: 'Na stránku: {{limit}}', - remove: 'Odstranit', - reset: 'Resetovat', - row: 'Řádek', - rows: 'Řádky', - save: 'Uložit', - saving: 'Ukládání...', - searchBy: 'Vyhledat podle {{label}}', - selectAll: 'Vybrat vše {{count}} {{label}}', - selectAllRows: 'Vyberte všechny řádky', - selectValue: 'Vyberte hodnotu', - selectedCount: 'Vybráno {{count}} {{label}}', - showAllLabel: 'Zobrazit všechny {{label}}', - sorryNotFound: 'Je nám líto, ale neexistuje nic, co by odpovídalo vašemu požadavku.', - sort: 'Třídit', - sortByLabelDirection: 'Seřadit podle {{label}} {{direction}}', - stayOnThisPage: 'Zůstat na této stránce', - submissionSuccessful: 'Odeslání úspěšné.', - submit: 'Odeslat', - successfullyCreated: '{{label}} úspěšně vytvořeno.', - thisLanguage: 'Čeština', - titleDeleted: '{{label}} "{{title}}" úspěšně smazáno.', - unauthorized: 'Neoprávněný', - unsavedChangesDuplicate: 'Máte neuložené změny. Chtěli byste pokračovat v duplikování?', - untitled: 'Bez názvu', - updatedAt: 'Aktualizováno v', - updatedCountSuccessfully: 'Úspěšně aktualizováno {{count}} {{label}}.', - updatedSuccessfully: 'Úspěšně aktualizováno.', - updating: 'Aktualizace', - welcome: 'Vítejte', - }, - operators: { - contains: 'obsahuje', - equals: 'rovná se', - exists: 'existuje', - isGreaterThan: 'je větší než', - isGreaterThanOrEqualTo: 'je větší nebo rovno', - isIn: 'je v', - isLessThan: 'je menší než', - isLessThanOrEqualTo: 'je menší nebo rovno', - isLike: 'je jako', - isNotEqualTo: 'není rovno', - isNotIn: 'není in', - near: 'blízko', - }, - upload: { - crop: 'Plodina', - cropToolDescription: - 'Přetáhněte rohy vybrané oblasti, nakreslete novou oblast nebo upravte hodnoty níže.', - dragAndDrop: 'Přetáhněte soubor', - editImage: 'Upravit obrázek', - focalPoint: 'Středobod', - focalPointDescription: 'Přetáhněte bod zaměření přímo na náhled nebo upravte hodnoty níže.', - height: 'Výška', - previewSizes: 'Náhled velikostí', - selectCollectionToBrowse: 'Vyberte kolekci pro procházení', - selectFile: 'Vyberte soubor', - setCropArea: 'Nastavit oblast ořezu', - setFocalPoint: 'Nastavit ohnisko', - sizesFor: 'Velikosti pro {{label}}', - width: 'Šířka', - }, - validation: { - fieldHasNo: 'Toto pole nemá {{label}}', - limitReached: 'Dosáhnutý limit, mohou být přidány pouze {{max}} položky.', - required: 'Toto pole je povinné.', - requiresAtLeast: 'Toto pole vyžaduje alespoň {{count}} {{label}}.', - }, - version: { - aboutToPublishSelection: 'Chystáte se publikovat všechny {{label}} ve výběru. Jsi si jistá?', - aboutToRestore: - 'Chystáte se obnovit tento {{label}} dokument do stavu, v jakém byl {{versionDate}}.', - aboutToRestoreGlobal: - 'Chystáte se obnovit globální {{label}} do stavu, v jakém byl {{versionDate}}.', - aboutToRevertToPublished: - 'Chystáte se vrátit změny tohoto dokumentu do jeho publikovaného stavu. Jste si jisti?', - aboutToUnpublish: 'Chystáte se zrušit publikování tohoto dokumentu. Jste si jisti?', - aboutToUnpublishSelection: - 'Chystáte se zrušit publikování všech {{label}} ve výběru. Jsi si jistá?', - autosave: 'Automatické uložení', - autosavedSuccessfully: 'Úspěšně uloženo automaticky.', - changed: 'Změněno', - compareVersion: 'Porovnat verzi s:', - confirmPublish: 'Potvrďte publikování', - confirmRevertToSaved: 'Potvrdit vrácení k uloženému', - confirmUnpublish: 'Potvrdit zrušení publikování', - confirmVersionRestoration: 'Potvrdit obnovení verze', - draft: 'Koncept', - draftSavedSuccessfully: 'Koncept úspěšně uložen.', - lastSavedAgo: 'Naposledy uloženo před {{distance}}', - noFurtherVersionsFound: 'Nenalezeny další verze', - noRowsFound: 'Nenalezen {{label}}', - preview: 'Náhled', - problemRestoringVersion: 'Při obnovování této verze došlo k problému', - publish: 'Publikovat', - publishChanges: 'Publikovat změny', - published: 'Publikováno', - publishing: 'Publikování', - restoreThisVersion: 'Obnovit tuto verzi', - restoredSuccessfully: 'Úspěšně obnoveno.', - restoring: 'Obnovování...', - revertToPublished: 'Vrátit se k publikovanému', - saveDraft: 'Uložit koncept', - selectLocales: 'Vyberte místní verze pro zobrazení', - selectVersionToCompare: 'Vyberte verzi pro porovnání', - showLocales: 'Zobrazit místní verze:', - status: 'Stav', - type: 'Typ', - unpublish: 'Zrušit publikování', - unpublishing: 'Zrušuji publikování...', - version: 'Verze', - versionCreatedOn: '{{version}} vytvořena:', - versionID: 'ID verze', - versions: 'Verze', - viewingVersion: 'Zobrazuji verzi pro {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: 'Zobrazuji verzi pro globální {{entityLabel}}', - viewingVersions: 'Zobrazuji verze pro {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: 'Zobrazuji verze pro globální {{entityLabel}}', - }, -} diff --git a/packages/translations/src/_generatedFiles_/client/de.js b/packages/translations/src/_generatedFiles_/client/de.js deleted file mode 100644 index 82dc1bd6c0..0000000000 --- a/packages/translations/src/_generatedFiles_/client/de.js +++ /dev/null @@ -1,294 +0,0 @@ -export default { - authentication: { - account: 'Konto', - accountOfCurrentUser: 'Aktuelles Benutzerkonto', - alreadyActivated: 'Bereits aktiviert', - alreadyLoggedIn: 'Bereits angemeldet', - backToLogin: 'Zurück zur Anmeldung', - beginCreateFirstUser: 'Erstelle deinen ersten Benutzer um zu beginnen', - changePassword: 'Passwort ändern', - confirmGeneration: 'Generierung bestätigen', - confirmPassword: 'Passwort bestätigen', - createFirstUser: 'Ersten Benutzer erstellen', - emailNotValid: 'Die angegebene E-Mail-Adresse ist ungültig', - emailSent: 'E-Mail verschickt', - enableAPIKey: 'API-Key aktivieren', - failedToUnlock: 'Konnte nicht entsperren', - forceUnlock: 'Entsperrung erzwingen', - forgotPassword: 'Passwort vergessen', - forgotPasswordEmailInstructions: - 'Bitte gib deine E-Mail-Adresse an. Du wirst eine E-Mail mit Instruktionen zum Zurücksetzen deines Passworts erhalten.', - forgotPasswordQuestion: 'Passwort vergessen?', - generate: 'Generieren', - generateNewAPIKey: 'Neuen API-Key generieren', - logBackIn: 'Wieder anmelden', - logOut: 'Abmelden', - loggedOutInactivity: 'Du wurdest aufgrund von Inaktivität abgemeldet.', - loggedOutSuccessfully: 'Du wurdest erfolgreich abgemeldet.', - login: 'Anmelden', - logout: 'Abmelden', - logoutUser: 'Benutzerabmeldung', - newAPIKeyGenerated: 'Neuer API-Key wurde generiert', - newPassword: 'Neues Passwort', - resetPassword: 'Passwort zurücksetzen', - stayLoggedIn: 'Angemeldet bleiben', - successfullyUnlocked: 'Erfolgreich entsperrt', - unableToVerify: 'Konnte nicht verifiziert werden', - verified: 'Verifiziert', - verifiedSuccessfully: 'Erfolgreich verifiziert', - verify: 'Verifizieren', - verifyUser: 'Benutzer verifizieren', - youAreInactive: - 'Du warst seit einiger Zeit inaktiv und wirst in kurzer Zeit zu deiner eigenen Sicherheit abgemeldet. Möchtest du angemeldet bleiben?', - }, - error: { - autosaving: 'Es gab ein Problem während der automatischen Speicherung für dieses Dokument', - correctInvalidFields: 'Bitte ungültige Felder korrigieren.', - deletingTitle: - 'Es gab ein Problem während der Löschung von {{title}}. Bitte überprüfe deine Verbindung und versuche es erneut.', - loadingDocument: 'Es gab ein Problem, das Dokument mit der ID {{id}} zu laden.', - noMatchedField: 'Kein übereinstimmendes Feld für "{{label}}" gefunden', - notAllowedToAccessPage: 'Du hast keine Berechtigung, auf diese Seite zuzugreifen.', - previewing: 'Es gab ein Problem beim Vorschauen dieses Dokuments.', - unableToDeleteCount: '{{count}} von {{total}} {{label}} konnte nicht gelöscht werden.', - unableToUpdateCount: '{{count}} von {{total}} {{label}} konnte nicht aktualisiert werden.', - unauthorized: 'Nicht autorisiert - du musst angemeldet sein, um diese Anfrage zu stellen.', - unknown: 'Ein unbekannter Fehler ist aufgetreten.', - unspecific: 'Ein Fehler ist aufgetreten.', - }, - fields: { - addLabel: '{{label}} hinzufügen', - addLink: 'Link Hinzufügen', - addNew: 'Neu erstellen', - addNewLabel: '{{label}} erstellen', - addRelationship: 'Verknüpfung Hinzufügen', - addUpload: 'Hochladen Hinzufügen', - block: 'Block', - blockType: 'Block-Typ', - blocks: 'Blöcke', - chooseFromExisting: 'Aus vorhandenen auswählen', - collapseAll: 'Alle einklappen', - editLink: 'Bearbeite Link', - editRelationship: 'Beziehung Hinzufügen', - itemsAndMore: '{{items}} und {{count}} mehr', - labelRelationship: '{{label}} Verknüpfung', - latitude: 'Breitengrad', - linkedTo: 'Verweist auf <0>{{label}}', - longitude: 'Längengrad', - passwordsDoNotMatch: 'Passwörter stimmen nicht überein.', - removeRelationship: 'Beziehung Entfernen', - removeUpload: 'Hochgeladene Datei Löschen', - saveChanges: 'Änderungen speichern', - searchForBlock: 'Nach Block suchen', - selectFieldsToEdit: 'Wählen Sie die zu bearbeitenden Felder aus', - showAll: 'Alle anzeigen', - swapRelationship: 'Beziehung Tauschen', - swapUpload: 'Datei Austauschen', - toggleBlock: 'Block umschalten', - uploadNewLabel: '{{label}} neu hochladen', - }, - general: { - aboutToDelete: 'Du bist dabei {{label}} <1>{{title}} zu löschen. Bist du dir sicher?', - aboutToDeleteCount_many: 'Sie sind dabei, {{count}} {{label}} zu löschen', - aboutToDeleteCount_one: 'Sie sind dabei, {{count}} {{label}} zu löschen', - aboutToDeleteCount_other: 'Sie sind dabei, {{count}} {{label}} zu löschen', - addBelow: 'Darunter hinzufügen', - addFilter: 'Filter hinzufügen', - adminTheme: 'Admin-Farbthema', - and: 'Und', - applyChanges: 'Änderungen anwenden', - ascending: 'Aufsteigend', - automatic: 'Automatisch', - backToDashboard: 'Zurück zur Übersicht', - cancel: 'Abbrechen', - changesNotSaved: - 'Deine Änderungen wurden nicht gespeichert. Wenn du diese Seite verlässt, gehen deine Änderungen verloren.', - close: 'Schließen', - collapse: 'Einklappen', - collections: 'Sammlungen', - columnToSort: 'Spalten zum Sortieren', - columns: 'Spalten', - confirm: 'Bestätigen', - confirmDeletion: 'Löschen bestätigen', - confirmDuplication: 'Duplizieren bestätigen', - copied: 'Kopiert', - copy: 'Kopieren', - create: 'Erstellen', - createNew: 'Neu Erstellen', - createNewLabel: '{{label}} neu erstellen', - created: 'Erstellt', - creating: 'Erstelle', - creatingNewLabel: 'Erstelle {{label}}', - dark: 'Dunkel', - dashboard: 'Übersicht', - delete: 'Löschen', - deletedCountSuccessfully: '{{count}} {{label}} erfolgreich gelöscht.', - deleting: 'Lösche...', - descending: 'Absteigend', - deselectAllRows: 'Alle Zeilen abwählen', - duplicate: 'Duplizieren', - duplicateWithoutSaving: 'Dupliziere ohne Änderungen zu speichern', - edit: 'Bearbeiten', - editLabel: '{{label}} bearbeiten', - editing: 'Bearbeite', - editingLabel_many: 'Bearbeiten von {{count}} {{label}}', - editingLabel_one: 'Bearbeiten von {{count}} {{label}}', - editingLabel_other: 'Bearbeiten von {{count}} {{label}}', - email: 'E-Mail', - emailAddress: 'E-Mail-Adresse', - enterAValue: 'Gib einen Wert ein', - error: 'Fehler', - errors: 'Fehler', - fallbackToDefaultLocale: 'Rückgriff auf das Standardgebietsschema', - filterWhere: 'Filter {{label}} wo', - filters: 'Filter', - globals: 'Globale Dokumente', - language: 'Sprache', - lastModified: 'Zuletzt geändert', - leaveAnyway: 'Trotzdem verlassen', - leaveWithoutSaving: 'Ohne speichern verlassen', - light: 'Hell', - livePreview: 'Vorschau', - loading: 'Lädt', - locale: 'Sprachumgebung', - menu: 'Menü', - moveDown: 'Nach unten bewegen', - moveUp: 'Nach oben bewegen', - noFiltersSet: 'Keine Filter gesetzt', - noLabel: '', - noOptions: 'Keine Optionen', - noResults: - 'Keine {{label}} gefunden. Entweder es existieren keine {{label}} oder es gibt keine Übereinstimmung zu den von dir verwendeten Filtern.', - noValue: 'Kein Wert', - none: 'Kein', - notFound: 'Nicht gefunden', - nothingFound: 'Keine Ergebnisse', - of: 'von', - open: 'Öffnen', - or: 'oder', - order: 'Reihenfolge', - pageNotFound: 'Seite nicht gefunden', - password: 'Passwort', - payloadSettings: 'Payload Einstellungen', - perPage: 'Pro Seite: {{limit}}', - remove: 'Entfernen', - reset: 'Zurücksetzen', - row: 'Zeile', - rows: 'Zeilen', - save: 'Speichern', - saving: 'Speichert...', - searchBy: 'Suche nach {{label}}', - selectAll: 'Alle auswählen {{count}} {{label}}', - selectAllRows: 'Wählen Sie alle Zeilen aus', - selectValue: 'Wert auswählen', - selectedCount: '{{count}} {{label}} ausgewählt', - showAllLabel: 'Zeige alle {{label}}', - sorryNotFound: 'Entschuldige, es entspricht nichts deiner Anfrage', - sort: 'Sortieren', - sortByLabelDirection: 'Sortieren nach {{label}} {{direction}}', - stayOnThisPage: 'Auf dieser Seite bleiben', - submissionSuccessful: 'Einrichung erfolgreich.', - submit: 'Senden', - successfullyCreated: '{{label}} erfolgreich erstellt.', - thisLanguage: 'Deutsch', - titleDeleted: '{{label}} {{title}} wurde erfolgreich gelöscht.', - unauthorized: 'Nicht autorisiert', - unsavedChangesDuplicate: - 'Du hast ungespeicherte Änderungen, möchtest du mit dem Duplizieren fortfahren?', - untitled: 'ohne Titel', - updatedAt: 'Aktualisiert am', - updatedCountSuccessfully: '{{count}} {{label}} erfolgreich aktualisiert.', - updatedSuccessfully: 'Erfolgreich aktualisiert.', - updating: 'Aktualisierung', - welcome: 'Willkommen', - }, - operators: { - contains: 'enthält', - equals: 'gleich', - exists: 'existiert', - isGreaterThan: 'ist größer als', - isGreaterThanOrEqualTo: 'ist größer oder gleich', - isIn: 'ist drin', - isLessThan: 'ist kleiner als', - isLessThanOrEqualTo: 'ist kleiner oder gleich', - isLike: 'ist wie', - isNotEqualTo: 'ist nicht gleich', - isNotIn: 'ist nicht drin', - near: 'in der Nähe', - }, - upload: { - crop: 'Zuschneiden', - cropToolDescription: - 'Ziehen Sie die Ecken des ausgewählten Bereichs, zeichnen Sie einen neuen Bereich oder passen Sie die Werte unten an.', - dragAndDrop: 'Ziehen Sie eine Datei per Drag-and-Drop', - editImage: 'Bild bearbeiten', - focalPoint: 'Brennpunkt', - focalPointDescription: - 'Ziehen Sie den Fokuspunkt direkt auf die Vorschau oder passen Sie die Werte unten an.', - height: 'Höhe', - previewSizes: 'Vorschaugrößen', - selectCollectionToBrowse: 'Wähle eine Sammlung zum Durchsuchen aus', - selectFile: 'Datei auswählen', - setCropArea: 'Bereich zum Zuschneiden festlegen', - setFocalPoint: 'Fokuspunkt setzen', - sizesFor: 'Größen für {{label}}', - width: 'Breite', - }, - validation: { - fieldHasNo: 'Dieses Feld hat kein {{label}}', - limitReached: 'Limit erreicht, es können nur {{max}} Elemente hinzugefügt werden.', - required: 'Pflichtfeld', - requiresAtLeast: 'Dieses Feld muss mindestens {{count}} {{label}} enthalten.', - }, - version: { - aboutToPublishSelection: - 'Sie sind dabei, alle {{label}} in der Auswahl zu veröffentlichen. Bist du dir sicher?', - aboutToRestore: 'Du bist dabei, {{label}} auf den Stand vom {{versionDate}} zurücksetzen.', - aboutToRestoreGlobal: - 'Du bist dabei, das Globale Dokument {{label}} auf den Stand vom {{versionDate}} zurückzusetzen.', - aboutToRevertToPublished: - 'Du bist dabei, dieses Dokument auf den Stand des ersten Veröffentlichungsdatums zurückzusetzen - Bist du sicher?', - aboutToUnpublish: 'Du bist dabei dieses Dokument auf Entwurf zu setzen - bist du dir sicher?', - aboutToUnpublishSelection: - 'Sie sind dabei, die Veröffentlichung aller {{label}} in der Auswahl aufzuheben. Bist du dir sicher?', - autosave: 'Automatische Speicherung', - autosavedSuccessfully: 'Erfolgreich automatisch gespeichert.', - changed: 'Geändert', - compareVersion: 'Vergleiche Version zu:', - confirmPublish: 'Veröffentlichung bestätigen', - confirmRevertToSaved: 'Zurücksetzen auf die letzte Speicherung bestätigen', - confirmUnpublish: 'Setzen auf Entwurf bestätigen', - confirmVersionRestoration: ' Wiederherstellung der Version bestätigen', - draft: 'Entwurf', - draftSavedSuccessfully: 'Entwurf erfolgreich gespeichert.', - lastSavedAgo: 'Zuletzt vor {{distance}} gespeichert', - noFurtherVersionsFound: 'Keine weiteren Versionen vorhanden', - noRowsFound: 'Kein {{label}} gefunden', - preview: 'Vorschau', - problemRestoringVersion: 'Es gab ein Problem bei der Wiederherstellung dieser Version', - publish: 'Veröffentlichen', - publishChanges: 'Änderungen veröffentlichen', - published: 'Veröffentlicht', - publishing: 'Veröffentlichung', - restoreThisVersion: 'Diese Version wiederherstellen', - restoredSuccessfully: 'Erfolgreich wiederhergestellt.', - restoring: 'wiederherstellen...', - revertToPublished: 'Auf Veröffentlicht zurücksetzen', - saveDraft: 'Entwurf speichern', - selectLocales: 'Wähle anzuzeigende Sprachumgebungen', - selectVersionToCompare: 'Wähle Version zum Vergleich', - showLocales: 'Sprachumgebungen anzeigen:', - status: 'Status', - type: 'Typ', - unpublish: 'Auf Entwurf setzen', - unpublishing: 'Setze auf Entwurf...', - version: 'Version', - versionCreatedOn: '{{version}} erstellt am:', - versionID: 'Version ID', - versions: 'Versionen', - viewingVersion: 'Betrachte Version für {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: '`Betrachte Version für das Globale Dokument {{entityLabel}}', - viewingVersions: 'Betrachte Versionen für {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: '`Betrachte Versionen für das Globale Dokument {{entityLabel}}', - }, -} diff --git a/packages/translations/src/_generatedFiles_/client/en.js b/packages/translations/src/_generatedFiles_/client/en.js deleted file mode 100644 index c881762f05..0000000000 --- a/packages/translations/src/_generatedFiles_/client/en.js +++ /dev/null @@ -1,294 +0,0 @@ -export default { - authentication: { - account: 'Account', - accountOfCurrentUser: 'Account of current user', - alreadyActivated: 'Already Activated', - alreadyLoggedIn: 'Already logged in', - backToLogin: 'Back to login', - beginCreateFirstUser: 'To begin, create your first user.', - changePassword: 'Change Password', - confirmGeneration: 'Confirm Generation', - confirmPassword: 'Confirm Password', - createFirstUser: 'Create first user', - emailNotValid: 'The email provided is not valid', - emailSent: 'Email Sent', - enableAPIKey: 'Enable API Key', - failedToUnlock: 'Failed to unlock', - forceUnlock: 'Force Unlock', - forgotPassword: 'Forgot Password', - forgotPasswordEmailInstructions: - 'Please enter your email below. You will receive an email message with instructions on how to reset your password.', - forgotPasswordQuestion: 'Forgot password?', - generate: 'Generate', - generateNewAPIKey: 'Generate new API key', - logBackIn: 'Log back in', - logOut: 'Log out', - loggedOutInactivity: 'You have been logged out due to inactivity.', - loggedOutSuccessfully: 'You have been logged out successfully.', - login: 'Login', - logout: 'Logout', - logoutUser: 'Logout user', - newAPIKeyGenerated: 'New API Key Generated.', - newPassword: 'New Password', - resetPassword: 'Reset Password', - stayLoggedIn: 'Stay logged in', - successfullyUnlocked: 'Successfully unlocked', - unableToVerify: 'Unable to Verify', - verified: 'Verified', - verifiedSuccessfully: 'Verified Successfully', - verify: 'Verify', - verifyUser: 'Verify User', - youAreInactive: - "You haven't been active in a little while and will shortly be automatically logged out for your own security. Would you like to stay logged in?", - }, - error: { - autosaving: 'There was a problem while autosaving this document.', - correctInvalidFields: 'Please correct invalid fields.', - deletingTitle: - 'There was an error while deleting {{title}}. Please check your connection and try again.', - loadingDocument: 'There was a problem loading the document with ID of {{id}}.', - noMatchedField: 'No matched field found for "{{label}}"', - notAllowedToAccessPage: 'You are not allowed to access this page.', - previewing: 'There was a problem previewing this document.', - unableToDeleteCount: 'Unable to delete {{count}} out of {{total}} {{label}}.', - unableToUpdateCount: 'Unable to update {{count}} out of {{total}} {{label}}.', - unauthorized: 'Unauthorized, you must be logged in to make this request.', - unknown: 'An unknown error has occurred.', - unspecific: 'An error has occurred.', - }, - fields: { - addLabel: 'Add {{label}}', - addLink: 'Add Link', - addNew: 'Add new', - addNewLabel: 'Add new {{label}}', - addRelationship: 'Add Relationship', - addUpload: 'Add Upload', - block: 'block', - blockType: 'Block Type', - blocks: 'blocks', - chooseFromExisting: 'Choose from existing', - collapseAll: 'Collapse All', - editLink: 'Edit Link', - editRelationship: 'Edit Relationship', - itemsAndMore: '{{items}} and {{count}} more', - labelRelationship: '{{label}} Relationship', - latitude: 'Latitude', - linkedTo: 'Linked to <0>{{label}}', - longitude: 'Longitude', - passwordsDoNotMatch: 'Passwords do not match.', - removeRelationship: 'Remove Relationship', - removeUpload: 'Remove Upload', - saveChanges: 'Save changes', - searchForBlock: 'Search for a block', - selectFieldsToEdit: 'Select fields to edit', - showAll: 'Show All', - swapRelationship: 'Swap Relationship', - swapUpload: 'Swap Upload', - toggleBlock: 'Toggle block', - uploadNewLabel: 'Upload new {{label}}', - }, - general: { - aboutToDelete: 'You are about to delete the {{label}} <1>{{title}}. Are you sure?', - aboutToDeleteCount_many: 'You are about to delete {{count}} {{label}}', - aboutToDeleteCount_one: 'You are about to delete {{count}} {{label}}', - aboutToDeleteCount_other: 'You are about to delete {{count}} {{label}}', - addBelow: 'Add Below', - addFilter: 'Add Filter', - adminTheme: 'Admin Theme', - and: 'And', - applyChanges: 'Apply Changes', - ascending: 'Ascending', - automatic: 'Automatic', - backToDashboard: 'Back to Dashboard', - cancel: 'Cancel', - changesNotSaved: - 'Your changes have not been saved. If you leave now, you will lose your changes.', - close: 'Close', - collapse: 'Collapse', - collections: 'Collections', - columnToSort: 'Column to Sort', - columns: 'Columns', - confirm: 'Confirm', - confirmDeletion: 'Confirm deletion', - confirmDuplication: 'Confirm duplication', - copied: 'Copied', - copy: 'Copy', - create: 'Create', - createNew: 'Create New', - createNewLabel: 'Create new {{label}}', - created: 'Created', - creating: 'Creating', - creatingNewLabel: 'Creating new {{label}}', - dark: 'Dark', - dashboard: 'Dashboard', - delete: 'Delete', - deletedCountSuccessfully: 'Deleted {{count}} {{label}} successfully.', - deleting: 'Deleting...', - descending: 'Descending', - deselectAllRows: 'Deselect all rows', - duplicate: 'Duplicate', - duplicateWithoutSaving: 'Duplicate without saving changes', - edit: 'Edit', - editLabel: 'Edit {{label}}', - editing: 'Editing', - editingLabel_many: 'Editing {{count}} {{label}}', - editingLabel_one: 'Editing {{count}} {{label}}', - editingLabel_other: 'Editing {{count}} {{label}}', - email: 'Email', - emailAddress: 'Email Address', - enterAValue: 'Enter a value', - error: 'Error', - errors: 'Errors', - fallbackToDefaultLocale: 'Fallback to default locale', - filterWhere: 'Filter {{label}} where', - filters: 'Filters', - globals: 'Globals', - language: 'Language', - lastModified: 'Last Modified', - leaveAnyway: 'Leave anyway', - leaveWithoutSaving: 'Leave without saving', - light: 'Light', - livePreview: 'Live Preview', - loading: 'Loading', - locale: 'Locale', - menu: 'Menu', - moveDown: 'Move Down', - moveUp: 'Move Up', - noFiltersSet: 'No filters set', - noLabel: '', - noOptions: 'No options', - noResults: - "No {{label}} found. Either no {{label}} exist yet or none match the filters you've specified above.", - noValue: 'No value', - none: 'None', - notFound: 'Not Found', - nothingFound: 'Nothing found', - of: 'of', - open: 'Open', - or: 'Or', - order: 'Order', - pageNotFound: 'Page not found', - password: 'Password', - payloadSettings: 'Payload Settings', - perPage: 'Per Page: {{limit}}', - remove: 'Remove', - reset: 'Reset', - row: 'Row', - rows: 'Rows', - save: 'Save', - saving: 'Saving...', - searchBy: 'Search by {{label}}', - selectAll: 'Select all {{count}} {{label}}', - selectAllRows: 'Select all rows', - selectValue: 'Select a value', - selectedCount: '{{count}} {{label}} selected', - showAllLabel: 'Show all {{label}}', - sorryNotFound: 'Sorry—there is nothing to correspond with your request.', - sort: 'Sort', - sortByLabelDirection: 'Sort by {{label}} {{direction}}', - stayOnThisPage: 'Stay on this page', - submissionSuccessful: 'Submission Successful.', - submit: 'Submit', - successfullyCreated: '{{label}} successfully created.', - thisLanguage: 'English', - titleDeleted: '{{label}} "{{title}}" successfully deleted.', - unauthorized: 'Unauthorized', - unsavedChangesDuplicate: 'You have unsaved changes. Would you like to continue to duplicate?', - untitled: 'Untitled', - updatedAt: 'Updated At', - updatedCountSuccessfully: 'Updated {{count}} {{label}} successfully.', - updatedSuccessfully: 'Updated successfully.', - updating: 'Updating', - welcome: 'Welcome', - }, - operators: { - contains: 'contains', - equals: 'equals', - exists: 'exists', - isGreaterThan: 'is greater than', - isGreaterThanOrEqualTo: 'is greater than or equal to', - isIn: 'is in', - isLessThan: 'is less than', - isLessThanOrEqualTo: 'is less than or equal to', - isLike: 'is like', - isNotEqualTo: 'is not equal to', - isNotIn: 'is not in', - near: 'near', - }, - upload: { - crop: 'Crop', - cropToolDescription: - 'Drag the corners of the selected area, draw a new area or adjust the values below.', - dragAndDrop: 'Drag and drop a file', - editImage: 'Edit Image', - focalPoint: 'Focal Point', - focalPointDescription: - 'Drag the focal point directly on the preview or adjust the values below.', - height: 'Height', - previewSizes: 'Preview Sizes', - selectCollectionToBrowse: 'Select a Collection to Browse', - selectFile: 'Select a file', - setCropArea: 'Set crop area', - setFocalPoint: 'Set focal point', - sizesFor: 'Sizes for {{label}}', - width: 'Width', - }, - validation: { - fieldHasNo: 'This field has no {{label}}', - limitReached: 'Limit reached, only {{max}} items can be added.', - required: 'This field is required.', - requiresAtLeast: 'This field requires at least {{count}} {{label}}.', - }, - version: { - aboutToPublishSelection: - 'You are about to publish all {{label}} in the selection. Are you sure?', - aboutToRestore: - 'You are about to restore this {{label}} document to the state that it was in on {{versionDate}}.', - aboutToRestoreGlobal: - 'You are about to restore the global {{label}} to the state that it was in on {{versionDate}}.', - aboutToRevertToPublished: - "You are about to revert this document's changes to its published state. Are you sure?", - aboutToUnpublish: 'You are about to unpublish this document. Are you sure?', - aboutToUnpublishSelection: - 'You are about to unpublish all {{label}} in the selection. Are you sure?', - autosave: 'Autosave', - autosavedSuccessfully: 'Autosaved successfully.', - changed: 'Changed', - compareVersion: 'Compare version against:', - confirmPublish: 'Confirm publish', - confirmRevertToSaved: 'Confirm revert to saved', - confirmUnpublish: 'Confirm unpublish', - confirmVersionRestoration: 'Confirm version Restoration', - draft: 'Draft', - draftSavedSuccessfully: 'Draft saved successfully.', - lastSavedAgo: 'Last saved {{distance}} ago', - noFurtherVersionsFound: 'No further versions found', - noRowsFound: 'No {{label}} found', - preview: 'Preview', - problemRestoringVersion: 'There was a problem restoring this version', - publish: 'Publish', - publishChanges: 'Publish changes', - published: 'Published', - publishing: 'Publishing', - restoreThisVersion: 'Restore this version', - restoredSuccessfully: 'Restored Successfully.', - restoring: 'Restoring...', - revertToPublished: 'Revert to published', - saveDraft: 'Save Draft', - selectLocales: 'Select locales to display', - selectVersionToCompare: 'Select a version to compare', - showLocales: 'Show locales:', - status: 'Status', - type: 'Type', - unpublish: 'Unpublish', - unpublishing: 'Unpublishing...', - version: 'Version', - versionCreatedOn: '{{version}} created on:', - versionID: 'Version ID', - versions: 'Versions', - viewingVersion: 'Viewing version for the {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: 'Viewing version for the global {{entityLabel}}', - viewingVersions: 'Viewing versions for the {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: 'Viewing versions for the global {{entityLabel}}', - }, -} diff --git a/packages/translations/src/_generatedFiles_/client/es.js b/packages/translations/src/_generatedFiles_/client/es.js deleted file mode 100644 index 35988b659b..0000000000 --- a/packages/translations/src/_generatedFiles_/client/es.js +++ /dev/null @@ -1,294 +0,0 @@ -export default { - authentication: { - account: 'Cuenta', - accountOfCurrentUser: 'Cuenta del usuario actual', - alreadyActivated: 'Ya Activado', - alreadyLoggedIn: 'Sesión iniciada', - backToLogin: 'Regresar al inicio de sesión', - beginCreateFirstUser: 'Para empezar, crea tu primer usuario.', - changePassword: 'Cambiar contraseña', - confirmGeneration: 'Confirmar Generación', - confirmPassword: 'Confirmar Contraseña', - createFirstUser: 'Crear al primer usuario', - emailNotValid: 'El correo proporcionado es inválido', - emailSent: 'Correo Enviado', - enableAPIKey: 'Habilitar Clave API', - failedToUnlock: 'Desbloqueo Fallido', - forceUnlock: 'Forzar Desbloqueo', - forgotPassword: 'Olvidé mi contraseña', - forgotPasswordEmailInstructions: - 'Por favor introduce tu correo electrónico. Recibirás un mensaje con las instrucciones para restablecer tu contraseña.', - forgotPasswordQuestion: '¿Olvidaste tu contraseña?', - generate: 'Generar', - generateNewAPIKey: 'Generar Nueva Clave de API', - logBackIn: 'Volver a iniciar sesión', - logOut: 'Cerrar sesión', - loggedOutInactivity: 'Tú sesión se cerró debido a inactividad.', - loggedOutSuccessfully: 'Tú sesión se cerró correctamente.', - login: 'Iniciar sesión', - logout: 'Cerrar sesión', - logoutUser: 'Cerrar sesión de usuario', - newAPIKeyGenerated: 'Nueva Clave de API Generada.', - newPassword: 'Nueva Contraseña', - resetPassword: 'Restablecer Contraseña', - stayLoggedIn: 'Mantener sesión abierta', - successfullyUnlocked: 'Desbloqueado correctamente', - unableToVerify: 'No se pudo Verificar', - verified: 'Verificado', - verifiedSuccessfully: 'Verificación Correcta', - verify: 'Verificar', - verifyUser: 'Verificar Usuario', - youAreInactive: - 'Has estado inactivo por un tiempo y por tu seguridad se cerrará tu sesión automáticamente. ¿Deseas mantener tu sesión activa?', - }, - error: { - autosaving: 'Ocurrió un problema al autoguardar este documento.', - correctInvalidFields: 'Por favor corrige los campos inválidos.', - deletingTitle: - 'Ocurrió un error al eliminar {{title}}. Por favor revisa tu conexión y vuelve a intentarlo.', - loadingDocument: 'Ocurrió un problema al cargar el documento con la ID {{id}}.', - noMatchedField: 'No se encontró un campo para "{{label}}"', - notAllowedToAccessPage: 'No tienes permiso para acceder a esta página.', - previewing: 'Ocurrió un problema al previsualizar este documento.', - unableToDeleteCount: 'No se pudo eliminar {{count}} de {{total}} {{label}}.', - unableToUpdateCount: 'No se puede actualizar {{count}} de {{total}} {{label}}.', - unauthorized: 'No autorizado, debes iniciar sesión para realizar esta solicitud.', - unknown: 'Ocurrió un error desconocido.', - unspecific: 'Ocurrió un error.', - }, - fields: { - addLabel: 'Añadir {{label}}', - addLink: 'Añadir Enlace', - addNew: 'Añadir nuevo', - addNewLabel: 'Añadir {{label}}', - addRelationship: 'Añadir Relación', - addUpload: 'Añadir Carga', - block: 'bloque', - blockType: 'Tipo de bloque', - blocks: 'bloques', - chooseFromExisting: 'Elegir existente', - collapseAll: 'Colapsar todo', - editLink: 'Editar Enlace', - editRelationship: 'Editar Relación', - itemsAndMore: '{{items}} y {{count}} más', - labelRelationship: 'Relación de {{label}}', - latitude: 'Latitud', - linkedTo: 'Enlazado a <0>{{label}}', - longitude: 'Longitud', - passwordsDoNotMatch: 'Las contraseñas no coinciden.', - removeRelationship: 'Eliminar relación', - removeUpload: 'Quitar Carga', - saveChanges: 'Guardar cambios', - searchForBlock: 'Buscar bloque', - selectFieldsToEdit: 'Seleccionar campos para editar', - showAll: 'Mostrar Todo', - swapRelationship: 'Cambiar Relación', - swapUpload: 'Cambiar carga', - toggleBlock: 'Alternar bloque', - uploadNewLabel: 'Subir nuevo {{label}}', - }, - general: { - aboutToDelete: 'Estás por eliminar el {{label}} <1>{{title}}. ¿Estás seguro?', - aboutToDeleteCount_many: 'Está a punto de eliminar {{count}} {{label}}', - aboutToDeleteCount_one: 'Está a punto de eliminar {{count}} {{label}}', - aboutToDeleteCount_other: 'Está a punto de eliminar {{count}} {{label}}', - addBelow: 'Agrega abajo', - addFilter: 'Añadir filtro', - adminTheme: 'Tema del admin', - and: 'Y', - applyChanges: 'Aplicar Cambios', - ascending: 'Ascendente', - automatic: 'Automático', - backToDashboard: 'Volver al Tablero', - cancel: 'Cancelar', - changesNotSaved: - 'Tus cambios no han sido guardados. Si te sales ahora, se perderán tus cambios.', - close: 'Cerrar', - collapse: 'Colapsar', - collections: 'Colecciones', - columnToSort: 'Columna de ordenado', - columns: 'Columnas', - confirm: 'Confirmar', - confirmDeletion: 'Confirmar eliminación', - confirmDuplication: 'Confirmar duplicado', - copied: 'Copiado', - copy: 'Copiar', - create: 'Crear', - createNew: 'Crear nuevo', - createNewLabel: 'Crear nuevo {{label}}', - created: 'Creado', - creating: 'Creando', - creatingNewLabel: 'Creando nuevo {{label}}', - dark: 'Oscuro', - dashboard: 'Tablero', - delete: 'Eliminar', - deletedCountSuccessfully: 'Se eliminó {{count}} {{label}} con éxito.', - deleting: 'Eliminando...', - descending: 'Descendente', - deselectAllRows: 'Deselecciona todas las filas', - duplicate: 'Duplicar', - duplicateWithoutSaving: 'Duplicar sin guardar cambios', - edit: 'Editar', - editLabel: 'Editar {{label}}', - editing: 'Editando', - editingLabel_many: 'Edición de {{count}} {{label}}', - editingLabel_one: 'Editando {{count}} {{label}}', - editingLabel_other: 'Edición de {{count}} {{label}}', - email: 'Correo electrónico', - emailAddress: 'Dirección de Correo Electrónico', - enterAValue: 'Introduce un valor', - error: 'Error', - errors: 'Errores', - fallbackToDefaultLocale: 'Volver a la configuración regional por defecto', - filterWhere: 'Filtrar {{label}} donde', - filters: 'Filtros', - globals: 'Globales', - language: 'Idioma', - lastModified: 'Última modificación', - leaveAnyway: 'Salir de todos modos', - leaveWithoutSaving: 'Salir sin guardar', - light: 'Claro', - livePreview: 'Previsualizar', - loading: 'Cargando', - locale: 'Regional', - menu: 'Menú', - moveDown: 'Mover abajo', - moveUp: 'Mover arriba', - noFiltersSet: 'No hay filtros establecidos', - noLabel: '', - noOptions: 'Sin opciones', - noResults: - 'No encontramos {{label}}. Puede que no existan {{label}} todavía o no hay coincidencias con los filtros introducidos arriba.', - noValue: 'Sin valor', - none: 'Ninguna', - notFound: 'No encontrado', - nothingFound: 'No se encontró nada', - of: 'de', - open: 'Abrir', - or: 'O', - order: 'Orden', - pageNotFound: 'Página no encontrada', - password: 'Contraseña', - payloadSettings: 'Configuración de la carga', - perPage: 'Por página: {{limit}}', - remove: 'Remover', - reset: 'Reiniciar', - row: 'Fila', - rows: 'Filas', - save: 'Guardar', - saving: 'Guardando...', - searchBy: 'Buscar por {{label}}', - selectAll: 'Seleccionar todo {{count}} {{label}}', - selectAllRows: 'Selecciona todas las filas', - selectValue: 'Selecciona un valor', - selectedCount: '{{count}} {{label}} seleccionado', - showAllLabel: 'Muestra todas {{label}}', - sorryNotFound: 'Lo sentimos. No hay nada que corresponda con tu solicitud.', - sort: 'Ordenar', - sortByLabelDirection: 'Ordenar por {{label}} {{direction}}', - stayOnThisPage: 'Permanecer en esta página', - submissionSuccessful: 'Envío realizado correctamente.', - submit: 'Enviar', - successfullyCreated: '{{label}} creado correctamente.', - thisLanguage: 'Español', - titleDeleted: '{{label}} {{title}} eliminado correctamente.', - unauthorized: 'No autorizado', - unsavedChangesDuplicate: 'Tienes cambios sin guardar. ¿Deseas continuar para duplicar?', - untitled: 'Sin título', - updatedAt: 'Fecha de modificado', - updatedCountSuccessfully: '{{count}} {{label}} actualizado con éxito.', - updatedSuccessfully: 'Actualizado con éxito.', - updating: 'Actualizando', - welcome: 'Bienvenido', - }, - operators: { - contains: 'contiene', - equals: 'igual', - exists: 'existe', - isGreaterThan: 'es mayor que', - isGreaterThanOrEqualTo: 'es mayor o igual que', - isIn: 'está en', - isLessThan: 'es menor que', - isLessThanOrEqualTo: 'es menor o igual que', - isLike: 'es como', - isNotEqualTo: 'no es igual a', - isNotIn: 'no está en', - near: 'cerca', - }, - upload: { - crop: 'Cultivo', - cropToolDescription: - 'Arrastra las esquinas del área seleccionada, dibuja un nuevo área o ajusta los valores a continuación.', - dragAndDrop: 'Arrastra y suelta un archivo', - editImage: 'Editar imagen', - focalPoint: 'Punto Focal', - focalPointDescription: - 'Arrastra el punto focal directamente en la vista previa o ajusta los valores a continuación.', - height: 'Alto', - previewSizes: 'Tamaños de Vista Previa', - selectCollectionToBrowse: 'Selecciona una Colección', - selectFile: 'Selecciona un archivo', - setCropArea: 'Establecer área de cultivo', - setFocalPoint: 'Establecer punto focal', - sizesFor: 'Tamaños para {{label}}', - width: 'Ancho', - }, - validation: { - fieldHasNo: 'Este campo no tiene {{label}}', - limitReached: 'Se ha alcanzado el límite, solo se pueden agregar {{max}} elementos.', - required: 'Este campo es obligatorio.', - requiresAtLeast: 'Este campo require al menos {{count}} {{label}}.', - }, - version: { - aboutToPublishSelection: - 'Está a punto de publicar todas las {{etiquetas}} de la selección. ¿Está seguro?', - aboutToRestore: - 'Estás a punto de restaurar este documento de {{label}} al estado en el que estaba en la fecha {{versionDate}}.', - aboutToRestoreGlobal: - 'Estás a punto de restaurar el {{label}} global al estado en el que estaba en la fecha {{versionDate}}.', - aboutToRevertToPublished: - 'Estás a punto de revertir los cambios de este documento a su estado publicado. ¿Estás seguro?', - aboutToUnpublish: 'Estás a punto de despublicar este documento. ¿Estás seguro?', - aboutToUnpublishSelection: - 'Está a punto de anular la publicación de todos los {{label}} de la selección. ¿Está seguro?', - autosave: 'Autoguardar', - autosavedSuccessfully: 'Guardado automáticamente con éxito.', - changed: 'Modificado', - compareVersion: 'Comparar versión con:', - confirmPublish: 'Confirmar publicación', - confirmRevertToSaved: 'Confirmar revertir a guardado', - confirmUnpublish: 'Confirmar despublicado', - confirmVersionRestoration: 'Confirmar restauración de versión', - draft: 'Borrador', - draftSavedSuccessfully: 'Borrador guardado con éxito.', - lastSavedAgo: 'Guardado por última vez hace {{distance}}', - noFurtherVersionsFound: 'No se encontraron más versiones', - noRowsFound: 'No encontramos {{label}}', - preview: 'Previsualizar', - problemRestoringVersion: 'Ocurrió un problema al restaurar esta versión', - publish: 'Publicar', - publishChanges: 'Publicar cambios', - published: 'Publicado', - publishing: 'Publicación', - restoreThisVersion: 'Restaurar esta versión', - restoredSuccessfully: 'Restaurado éxito.', - restoring: 'Restaurando...', - revertToPublished: 'Revertir a publicado', - saveDraft: 'Guardar Borrador', - selectLocales: 'Selecciona idiomas a mostrar', - selectVersionToCompare: 'Selecciona versión a comparar', - showLocales: 'Mostrar idiomas:', - status: 'Estado', - type: 'Tipo', - unpublish: 'Despublicar', - unpublishing: 'Despublicando...', - version: 'Versión', - versionCreatedOn: '{{version}} creada el:', - versionID: 'ID de Versión', - versions: 'Versiones', - viewingVersion: 'Viendo versión para {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: 'Viendo versión para el global {{entityLabel}}', - viewingVersions: 'Viendo versiones para {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: 'Viendo versiones para el global {{entityLabel}}', - }, -} diff --git a/packages/translations/src/_generatedFiles_/client/fa.js b/packages/translations/src/_generatedFiles_/client/fa.js deleted file mode 100644 index 2010a79df5..0000000000 --- a/packages/translations/src/_generatedFiles_/client/fa.js +++ /dev/null @@ -1,291 +0,0 @@ -export default { - authentication: { - account: 'نمایه', - accountOfCurrentUser: 'نمایه کاربر فعلی', - alreadyActivated: 'قبلاً فعال شده است', - alreadyLoggedIn: 'قبلاً وارد شده‌اید', - backToLogin: 'بازگشت به برگه ورود', - beginCreateFirstUser: 'برای آغاز، نخستین کاربر خود را بسازید.', - changePassword: 'تغییر گذرواژه', - confirmGeneration: 'تأیید ساخت', - confirmPassword: 'تأیید گذرواژه', - createFirstUser: 'ایجاد کاربر نخست', - emailNotValid: 'رایانامه ارائه‌شده درست نیست', - emailSent: 'رایانامه فرستاده شد', - enableAPIKey: 'فعال‌سازی کلید اِی‌پی‌آی', - failedToUnlock: 'باز کردن قفل ناموفق بود', - forceUnlock: 'باز کردن قفل اجباری', - forgotPassword: 'بازیابی گذرواژه', - forgotPasswordEmailInstructions: - 'لطفا نام کاربری یا نشانی رایانامه خود را وارد نمایید. شما یک پیام با دستورالعمل راه‌اندازی مجدد گذرواژه خود دریافت خواهید کرد.', - forgotPasswordQuestion: 'بازیابی گذرواژه؟', - generate: 'ساخت', - generateNewAPIKey: 'ساخت کلید اِی‌پی‌آی تازه', - logBackIn: 'دوباره وارد شوید', - logOut: 'خروج', - loggedOutInactivity: 'شما به دلیل عدم فعالیت از سیستم خارج شده اید.', - loggedOutSuccessfully: 'شما با موفقیت از سیستم خارج شدید.', - login: 'وارد شدن', - logout: 'خروج', - logoutUser: 'خروج از کاربر', - newAPIKeyGenerated: 'کلید اِی‌پی‌آی تازه ساخته شد.', - newPassword: 'گذرواژه تازه', - resetPassword: 'بازنشانی گذرواژه', - stayLoggedIn: 'وارد سیستم بمانید', - successfullyUnlocked: 'با موفقیت باز شد', - unableToVerify: 'امکان تأیید نیست', - verified: 'تأیید شده', - verifiedSuccessfully: 'با موفقیت تأیید شد', - verify: 'تأیید', - verifyUser: 'تأیید کاربر', - youAreInactive: - 'مدتی است که فعال نبوده‌اید و به زودی جهت حفظ امنیت شما به صورت خودکار از سیستم خارج خواهید شد. ادامه می‌دهید؟', - }, - error: { - autosaving: 'هنگام ذخیره خودکار این سند خطایی رخ داد.', - correctInvalidFields: 'لطفا کادرهای نامعتبر را تصحیح کنید.', - deletingTitle: 'هنگام حذف {{title}} خطایی رخ داد. لطفاً وضعیت اتصال اینترنت خود را بررسی کنید.', - loadingDocument: 'مشکلی در بارگیری رسانه با شناسه {{id}} پیش آمد.', - noMatchedField: 'کادر منطبقی با"{{label}}" یافت نشد', - notAllowedToAccessPage: 'شما اجازه دسترسی به این برگه را ندارید.', - previewing: 'مشکلی در پیش‌نمایش این رسانه رخ داد.', - unableToDeleteCount: 'نمی‌توان {{count}} از {{total}} {{label}} را حذف کرد.', - unableToUpdateCount: 'امکان به روز رسانی {{count}} خارج از {{total}} {{label}} وجود ندارد.', - unauthorized: 'درخواست نامعتبر، جهت فرستادن این درخواست باید وارد شوید.', - unknown: 'یک خطای ناشناخته رخ داد.', - unspecific: 'خطایی رخ داد.', - }, - fields: { - addLabel: 'افزودن {{label}}', - addLink: 'افزودن پیوند', - addNew: 'افزودن', - addNewLabel: 'افزودن {{label}} تازه', - addRelationship: 'افزودن پیوستگی', - addUpload: 'افزودن بارگذار', - block: 'بلوک', - blockType: 'نوع بلوک', - blocks: 'بلوک‌ها', - chooseFromExisting: 'برگزیدن از بین ورودی‌ها', - collapseAll: 'بستن همه', - editLink: 'نگارش پیوند', - editRelationship: 'نگارش پیوستگی', - itemsAndMore: '{{items}} و {{count}} بیش‌تر', - labelRelationship: '{{label}} پیوستگی', - latitude: 'عرض جغرافیایی', - linkedTo: 'مرتبط با <0>{{label}}', - longitude: 'طول جغرافیایی', - passwordsDoNotMatch: 'گذرواژه‌های وارد شده مطابقت ندارند.', - removeRelationship: 'حذف پیوستگی', - removeUpload: 'حذف بارگذار', - saveChanges: 'ذخیره تغییرات', - searchForBlock: 'جست‌وجو برای بلوک', - selectFieldsToEdit: 'انتخاب کادرها برای نگارش', - showAll: 'نمایش کل', - swapRelationship: 'تبادل پیوستگی', - swapUpload: 'تبادل بارگذار', - toggleBlock: 'کارگذاری بلوک', - uploadNewLabel: 'بارگذاری تازه {{label}}', - }, - general: { - aboutToDelete: 'شما در حال پاک کردن {{label}} <1>{{title}} هستید. اطمینان دارید؟', - aboutToDeleteCount_many: 'شما در حال پاک کردن {{count}} تعداد {{label}} هستید', - aboutToDeleteCount_one: 'شما در حال پاک کردن {{count}} تعداد {{label}} هستید', - aboutToDeleteCount_other: 'شما در شرف حذف هستید {{count}} {{label}}', - addBelow: 'افزودن به زیر', - addFilter: 'افزودن علامت', - adminTheme: 'پوسته پیشخوان', - and: 'و', - applyChanges: 'اعمال تغییرات', - ascending: 'صعودی', - automatic: 'خودکار', - backToDashboard: 'بازگشت به پیشخوان', - cancel: 'لغو', - changesNotSaved: - 'تغییرات شما ذخیره نشده، اگر این برگه را ترک کنید. تمام تغییرات از دست خواهد رفت.', - close: 'بستن', - collapse: 'بستن', - collections: 'مجموعه‌ها', - columnToSort: 'ستون برای مرتب‌سازی', - columns: 'ستون‌ها', - confirm: 'تأیید', - confirmDeletion: 'تأئید عملیات حذف', - confirmDuplication: 'تأئید رونوشت', - copied: 'رونوشت شده', - copy: 'رونوشت', - create: 'ساختن', - createNew: 'ساختن تازه', - createNewLabel: 'ساختن {{label}} تازه', - created: 'ساخته شده', - creating: 'در حال ساخت', - creatingNewLabel: 'در حال ساختن {{label}} تازه', - dark: 'تاریک', - dashboard: 'پیشخوان', - delete: 'حذف', - deletedCountSuccessfully: 'تعداد {{count}} {{label}} با موفقیت پاک گردید.', - deleting: 'در حال حذف...', - descending: 'رو به پایین', - deselectAllRows: 'تمام سطرها را از انتخاب خارج کنید', - duplicate: 'تکراری', - duplicateWithoutSaving: 'رونوشت بدون ذخیره کردن تغییرات', - edit: 'نگارش', - editLabel: 'نگارش {{label}}', - editing: 'در حال نگارش', - editingLabel_many: 'در حال نگارش {{count}} از {{label}}', - editingLabel_one: 'در حال نگارش {{count}} از {{label}}', - editingLabel_other: 'در حال نگارش {{count}} از {{label}}', - email: 'رایانامه', - emailAddress: 'نشانی رایانامه', - enterAValue: 'یک مقدار وارد کنید', - error: 'خطا', - errors: 'خطاها', - fallbackToDefaultLocale: 'بازگردان پیشفرض زبان', - filterWhere: 'علامت گذاری کردن {{label}} جایی که', - filters: 'علامت‌گذاری‌ها', - globals: 'سراسری', - language: 'زبان', - lastModified: 'آخرین نگارش', - leaveAnyway: 'به هر حال ترک کن', - leaveWithoutSaving: 'ترک کردن بدون ذخیره', - light: 'روشن', - livePreview: 'پیش‌نمایش', - loading: 'در حال بارگذاری', - locale: 'زبان', - menu: 'منو', - moveDown: 'حرکت به پایین', - moveUp: 'حرکت به بالا', - noFiltersSet: 'هیچ علامت‌گذاری تنظیم نشده', - noLabel: '', - noOptions: 'بدون گزینه', - noResults: - 'هیچ {{label}} یافت نشد. {{label}} یا هنوز وجود ندارد یا هیچ کدام با علامت‌گذاری‌هایی که در بالا مشخص کرده اید مطابقت ندارد.', - noValue: 'بدون مقدار', - none: 'هیچ یک', - notFound: 'یافت نشد', - nothingFound: 'چیزی یافت نشد', - of: 'از', - open: 'باز کردن', - or: 'یا', - order: 'چیدمان', - pageNotFound: 'برگه یافت نشد', - password: 'گذرواژه', - payloadSettings: 'تنظیمات پی‌لود', - perPage: 'هر برگه: {{limit}}', - remove: 'برداشتن', - reset: 'بازنشانی', - row: 'ردیف', - rows: 'ردیف‌ها', - save: 'ذخیره', - saving: 'در حال ذخیره...', - searchBy: 'جستجو بر اساس {{label}}', - selectAll: 'انتخاب همه {{count}} {{label}}', - selectAllRows: 'انتخاب تمام سطرها', - selectValue: 'یک مقدار را انتخاب کنید', - selectedCount: '{{count}} {{label}} انتخاب شد', - showAllLabel: 'نمایش همه {{label}}', - sorryNotFound: 'متأسفانه چیزی برای مطابقت با درخواست شما وجود ندارد.', - sort: 'مرتب‌سازی', - sortByLabelDirection: 'مرتب کردن بر اساس {{label}} {{direction}}', - stayOnThisPage: 'ماندن در این برگه', - submissionSuccessful: 'با موفقیت ثبت شد.', - submit: 'فرستادن', - successfullyCreated: '{{label}} با موفقیت ساخته شد.', - thisLanguage: 'فارسی', - titleDeleted: '{{label}} "{{title}}" با موفقیت پاک شد.', - unauthorized: 'غیرمجاز', - unsavedChangesDuplicate: 'شما تغییرات ذخیره نشده دارید. مطمئنید میخواهید به رونوشت ادامه دهید؟', - untitled: 'بدون عنوان', - updatedAt: 'بروز شده در', - updatedCountSuccessfully: 'تعداد {{count}} با عنوان {{label}} با موفقیت بروزرسانی شدند.', - updatedSuccessfully: 'با موفقیت به‌روز شد.', - updating: 'در حال به‌روزرسانی', - welcome: 'خوش‌آمدید', - }, - operators: { - contains: 'شامل', - equals: 'برابر با', - exists: 'وجود دارد', - isGreaterThan: 'بزرگتر است از', - isGreaterThanOrEqualTo: 'بزرگتر یا مساوی است', - isIn: 'هست در', - isLessThan: 'کمتر است از', - isLessThanOrEqualTo: 'کمتر یا مساوی است', - isLike: 'مانند این است', - isNotEqualTo: 'برابر نیست', - isNotIn: 'در این نیست', - near: 'نزدیک', - }, - upload: { - crop: 'محصول', - cropToolDescription: - 'گوشه‌های منطقه انتخاب شده را بکشید، یک منطقه جدید رسم کنید یا مقادیر زیر را تنظیم کنید.', - dragAndDrop: 'یک سند را بکشید و رها کنید', - editImage: 'ویرایش تصویر', - focalPoint: 'نقطه متمرکز', - focalPointDescription: - 'نقطه کانونی را مستقیماً روی پیش نمایش بکشید یا مقادیر زیر را تنظیم کنید.', - height: 'ارتفاع', - previewSizes: 'اندازه های پیش نمایش', - selectCollectionToBrowse: 'یک مجموعه را برای مرور انتخاب کنید', - selectFile: 'برگزیدن رسانه', - setCropArea: 'تنظیم ناحیه برش', - setFocalPoint: 'تنظیم نقطه کانونی', - sizesFor: 'اندازه‌ها برای {{label}}', - width: 'پهنا', - }, - validation: { - fieldHasNo: 'این کادر شامل هیچ {{label}} نمی‌شود', - limitReached: 'محدودیت رسیده است، فقط {{max}} مورد می تواند اضافه شود.', - required: 'این کادر اجباری است.', - requiresAtLeast: 'این رشته حداقل نیازمند {{count}} {{label}}.', - }, - version: { - aboutToPublishSelection: - 'شما در حال انتشار همه {{label}} برگزیده هستید از این کار اطمینان دارید؟', - aboutToRestore: - 'شما در شرف بازیابی این هستید {{label}} سند به ایالتی که در آن بود {{versionDate}}.', - aboutToRestoreGlobal: 'شما در حال بازگردانی کلی {{label}} در این {{versionDate}} هستید.', - aboutToRevertToPublished: - 'شما در حال بازگردانی تغییرات این رسانه به وضعیت منتشر شده آن هستید. از این کار اطمینان دارید؟', - aboutToUnpublish: 'شما در حال لغو انتشار این سند هستید، آیا از این کار اطمینان دارید؟', - aboutToUnpublishSelection: 'شما در شرف لغو انتشار {{label}} برگزیده هستید. ایا اطمینان دارید؟', - autosave: 'ذخیره خودکار', - autosavedSuccessfully: 'با موفقیت ذخیره خودکار شد.', - changed: 'تغییر کرد', - compareVersion: 'مقایسه نگارش با:', - confirmPublish: 'تأیید انتشار', - confirmRevertToSaved: 'تأیید بازگردانی نگارش ذخیره شده', - confirmUnpublish: 'تأیید لغو انتشار', - confirmVersionRestoration: 'تأیید بازیابی نگارش', - draft: 'پیش‌نویس', - draftSavedSuccessfully: 'پیش‌نویس با موفقیت ذخیره شد.', - lastSavedAgo: 'آخرین بار {{distance}} پیش ذخیره شد', - noFurtherVersionsFound: 'نگارش دیگری یافت نشد', - noRowsFound: 'هیچ {{label}} یافت نشد', - preview: 'پیش‌نمایش', - problemRestoringVersion: 'مشکلی در بازیابی این نگارش وجود دارد', - publish: 'انتشار', - publishChanges: 'انتشار تغییرات', - published: 'انتشار یافته', - publishing: 'انتشار', - restoreThisVersion: 'این نگارش را بازیابی کنید', - restoredSuccessfully: 'با موفقیت بازیابی شد.', - restoring: 'در حال بازیابی...', - revertToPublished: 'بازگردانی به انتشار یافته', - saveDraft: 'ذخیره پیش‌نویس', - selectLocales: 'زبان‌ها را برای نمایش انتخاب کنید', - selectVersionToCompare: 'نگارشی را برای مقایسه انتخاب کنید', - showLocales: 'نمایش زبان‌ها:', - status: 'وضعیت', - type: 'تایپ کنید', - unpublish: 'لغو انتشار', - unpublishing: 'در حال لغو انتشار...', - version: 'نگارش', - versionCreatedOn: '{{version}} ساخته شده در:', - versionID: 'شناسه نگارش', - versions: 'نگارش‌ها', - viewingVersion: 'در حال مشاهده نگارش برای {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: 'در حال مشاهده نگارش‌های کلی {{entityLabel}}', - viewingVersions: 'مشاهده نگارش‌ها برای {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: 'مشاهده نگارش‌های کلی {{entityLabel}}', - }, -} diff --git a/packages/translations/src/_generatedFiles_/client/fr.js b/packages/translations/src/_generatedFiles_/client/fr.js deleted file mode 100644 index ce04cf7856..0000000000 --- a/packages/translations/src/_generatedFiles_/client/fr.js +++ /dev/null @@ -1,298 +0,0 @@ -export default { - authentication: { - account: 'Compte', - accountOfCurrentUser: "Compte de l'utilisateur actuel", - alreadyActivated: 'Déjà activé', - alreadyLoggedIn: 'Déjà connecté', - backToLogin: 'Retour à la connexion', - beginCreateFirstUser: 'Pour commencer, créez votre premier utilisateur.', - changePassword: 'Changer le mot de passe', - confirmGeneration: 'Confirmer la génération', - confirmPassword: 'Confirmez le mot de passe', - createFirstUser: 'Créer le premier utilisateur', - emailNotValid: "L'adresse e-mail fourni n'est pas valide", - emailSent: 'E-mail envoyé', - enableAPIKey: 'Activer la clé API', - failedToUnlock: 'Déverrouillage échoué', - forceUnlock: 'Forcer le déverrouillage', - forgotPassword: 'Mot de passe oublié', - forgotPasswordEmailInstructions: - 'Veuillez saisir votre e-mail ci-dessous. Vous recevrez un e-mail avec des instructions concernant comment réinitialiser votre mot de passe.', - forgotPasswordQuestion: 'Mot de passe oublié ?', - generate: 'Générer', - generateNewAPIKey: 'Générer une nouvelle clé API', - logBackIn: 'Se reconnecter', - logOut: 'Se déconnecter', - loggedOutInactivity: "Vous avez été déconnecté pour cause d'inactivité.", - loggedOutSuccessfully: 'Vous avez été déconnecté avec succès.', - login: 'Se connecter', - logout: 'Se déconnecter', - logoutUser: "Déconnecter l'utilisateur", - newAPIKeyGenerated: 'Nouvelle clé API générée.', - newPassword: 'Nouveau mot de passe', - resetPassword: 'Réinitialiser le mot de passe', - stayLoggedIn: 'Rester connecté', - successfullyUnlocked: 'Déverrouillé avec succès', - unableToVerify: 'Vérification échoué', - verified: 'Vérifié', - verifiedSuccessfully: 'Vérifié avec succès', - verify: 'Vérifier', - verifyUser: "Vérifier l'utilisateur", - youAreInactive: - "Vous n'avez pas été actif depuis un moment alors vous serez bientôt automatiquement déconnecté pour votre propre sécurité. Souhaitez-vous rester connecté ?", - }, - error: { - autosaving: "Un problème est survenu lors de l'enregistrement automatique de ce document.", - correctInvalidFields: 'Veuillez corriger les champs invalides.', - deletingTitle: - "Une erreur s'est produite lors de la suppression de {{title}}. Veuillez vérifier votre connexion puis réessayer.", - loadingDocument: - 'Un problème est survenu lors du chargement du document qui a pour identifiant {{id}}.', - noMatchedField: 'Aucun champ correspondant n\'a été trouvé pour "{{label}}"', - notAllowedToAccessPage: "Vous n'êtes pas autorisé à accéder à cette page.", - previewing: "Un problème est survenu lors de l'aperçu de ce document.", - unableToDeleteCount: 'Impossible de supprimer {{count}} sur {{total}} {{label}}.', - unableToUpdateCount: 'Impossible de mettre à jour {{count}} sur {{total}} {{label}}.', - unauthorized: 'Non autorisé, vous devez être connecté pour effectuer cette demande.', - unknown: "Une erreur inconnue s'est produite.", - unspecific: 'Une erreur est survenue.', - }, - fields: { - addLabel: 'Ajouter {{label}}', - addLink: 'Ajouter un Lien', - addNew: 'Ajouter nouveau ou nouvelle', - addNewLabel: 'Ajouter nouveau ou nouvelle {{label}}', - addRelationship: 'Ajouter une relation', - addUpload: 'Ajouter le téléchargement', - block: 'bloc', - blockType: 'Type de bloc', - blocks: 'blocs', - chooseFromExisting: 'Choisir parmi les existant(e)s', - collapseAll: 'Tout réduire', - editLink: 'Modifier le lien', - editRelationship: 'Modifier la relation', - itemsAndMore: '{{items}} et {{count}} de plus', - labelRelationship: 'Relation de ou du {{label}} ', - latitude: 'Latitude', - linkedTo: 'Lié à <0>{{label}}', - longitude: 'Longitude', - passwordsDoNotMatch: 'Les mots de passe ne correspondent pas.', - removeRelationship: 'Supprimer la relation', - removeUpload: 'Supprimer le Téléversement', - saveChanges: 'Sauvegarder les modifications', - searchForBlock: 'Rechercher un bloc', - selectFieldsToEdit: 'Sélectionnez les champs à modifier', - showAll: 'Afficher tout', - swapRelationship: 'Changer de relation', - swapUpload: 'Changer de Fichier', - toggleBlock: 'Bloc bascule', - uploadNewLabel: 'Téléverser un(e) nouveau ou nouvelle {{label}}', - }, - general: { - aboutToDelete: - 'Vous êtes sur le point de supprimer ce ou cette {{label}} <1>{{title}}. Êtes-vous sûr ?', - aboutToDeleteCount_many: 'Vous êtes sur le point de supprimer {{count}} {{label}}', - aboutToDeleteCount_one: 'Vous êtes sur le point de supprimer {{count}} {{label}}', - aboutToDeleteCount_other: 'Vous êtes sur le point de supprimer {{count}} {{label}}', - addBelow: 'Ajoutez ci-dessous', - addFilter: 'Ajouter un filtre', - adminTheme: "Thème d'administration", - and: 'Et', - applyChanges: 'Appliquer les modifications', - ascending: 'Ascendant', - automatic: 'Automatique', - backToDashboard: 'Retour au tableau de bord', - cancel: 'Annuler', - changesNotSaved: - "Vos modifications n'ont pas été enregistrées. Vous perdrez vos modifications si vous quittez maintenant.", - close: 'Fermer', - collapse: 'Réduire', - collections: 'Collections', - columnToSort: 'Colonne à trier', - columns: 'Colonnes', - confirm: 'Confirmer', - confirmDeletion: 'Confirmer la suppression', - confirmDuplication: 'Confirmer la duplication', - copied: 'Copié', - copy: 'Copie', - create: 'Créer', - createNew: 'Créer un(e) nouveau ou nouvelle', - createNewLabel: 'Créer un(e) nouveau ou nouvelle {{label}}', - created: 'Créé(e)', - creating: 'création en cours', - creatingNewLabel: "Création d'un(e) nouveau ou nouvelle {{label}}", - dark: 'Nuit', - dashboard: 'Tableau de bord', - delete: 'Supprimer', - deletedCountSuccessfully: '{{count}} {{label}} supprimé avec succès.', - deleting: 'Suppression en cours...', - descending: 'Descendant(e)', - deselectAllRows: 'Désélectionner toutes les lignes', - duplicate: 'Dupliquer', - duplicateWithoutSaving: 'Dupliquer sans enregistrer les modifications', - edit: 'Éditer', - editLabel: 'Modifier {{label}}', - editing: 'Modification en cours', - editingLabel_many: 'Modification des {{count}} {{label}}', - editingLabel_one: 'Modification de {{count}} {{label}}', - editingLabel_other: 'Modification des {{count}} {{label}}', - email: 'E-mail', - emailAddress: 'Adresse e-mail', - enterAValue: 'Entrez une valeur', - error: 'Erreur', - errors: 'Erreurs', - fallbackToDefaultLocale: 'Retour à la locale par défaut', - filterWhere: 'Filtrer {{label}} où', - filters: 'Filtres', - globals: 'Globals(es)', - language: 'Langue', - lastModified: 'Dernière modification', - leaveAnyway: 'Quitter quand même', - leaveWithoutSaving: 'Quitter sans sauvegarder', - light: 'Lumière ou Jour', - livePreview: 'Aperçu', - loading: 'Chargement en cours', - locale: 'Paramètres régionaux', - menu: 'Menu', - moveDown: 'Déplacer vers le bas', - moveUp: 'Déplacer vers le haut', - noFiltersSet: 'Aucun filtre défini', - noLabel: '', - noOptions: 'Aucune option', - noResults: - "Aucun(e) {{label}} trouvé(e). Soit aucun(e) {{label}} n'existe encore, soit aucun(e) ne correspond aux filtres que vous avez spécifiés ci-dessus", - noValue: 'Aucune valeur', - none: 'Aucun(e)', - notFound: 'Pas trouvé', - nothingFound: "Rien n'a été trouvé", - of: 'de', - open: 'Ouvrir', - or: 'ou', - order: 'Ordre', - pageNotFound: 'Page non trouvée', - password: 'Mot de passe', - payloadSettings: 'Paramètres de Payload', - perPage: 'Par Page: {{limit}}', - remove: 'Retirer', - reset: 'Réinitialiser', - row: 'Ligne', - rows: 'Lignes', - save: 'Sauvegarder', - saving: 'Sauvegarde en cours...', - searchBy: 'Rechercher par {{label}}', - selectAll: 'Tout sélectionner {{count}} {{label}}', - selectAllRows: 'Sélectionnez toutes les lignes', - selectValue: 'Sélectionnez une valeur', - selectedCount: '{{count}} {{label}} sélectionné', - showAllLabel: 'Afficher tous les {{label}}', - sorryNotFound: 'Désolé, rien ne correspond à votre demande.', - sort: 'Trier', - sortByLabelDirection: 'Trier par {{label}} {{direction}}', - stayOnThisPage: 'Rester sur cette page', - submissionSuccessful: 'Soumission réussie.', - submit: 'Soumettre', - successfullyCreated: '{{label}} créé(e) avec succès.', - thisLanguage: 'Français', - titleDeleted: '{{label}} "{{title}}" supprimé(e) avec succès.', - unauthorized: 'Non autorisé', - unsavedChangesDuplicate: - 'Vous avez des changements non enregistrés. Souhaitez-vous continuer la duplication ?', - untitled: 'Sans titre', - updatedAt: 'Modifié le', - updatedCountSuccessfully: '{{count}} {{label}} mis à jour avec succès.', - updatedSuccessfully: 'Mis à jour avec succés.', - updating: 'Mise à jour', - welcome: 'Bienvenu(e)', - }, - operators: { - contains: 'contient', - equals: 'est égal à', - exists: 'existe', - isGreaterThan: 'est supérieur à', - isGreaterThanOrEqualTo: 'est supérieur ou égal à', - isIn: 'est dans', - isLessThan: 'est inférieur à', - isLessThanOrEqualTo: 'est inférieur ou égal à', - isLike: 'est comme', - isNotEqualTo: "n'est pas égal à", - isNotIn: "n'est pas dans", - near: 'proche', - }, - upload: { - crop: 'Récolte', - cropToolDescription: - 'Faites glisser les coins de la zone sélectionnée, dessinez une nouvelle zone ou ajustez les valeurs ci-dessous.', - dragAndDrop: 'Glisser-déposer un fichier', - editImage: "Modifier l'image", - focalPoint: 'Point focal', - focalPointDescription: - "Faites glisser le point focal directement sur l'aperçu ou ajustez les valeurs ci-dessous.", - height: 'Hauteur', - previewSizes: "Tailles d'aperçu", - selectCollectionToBrowse: 'Sélectionnez une collection à parcourir', - selectFile: 'Sélectionnez un fichier', - setCropArea: 'Définir la zone de recadrage', - setFocalPoint: 'Définir le point focal', - sizesFor: 'Tailles pour {{label}}', - width: 'Largeur', - }, - validation: { - fieldHasNo: "Ce champ n'a pas de {{label}}", - limitReached: 'Limite atteinte, seulement {{max}} éléments peuvent être ajoutés.', - required: 'Ce champ est requis.', - requiresAtLeast: 'Ce champ doit avoir au moins {{count}} {{label}}.', - }, - version: { - aboutToPublishSelection: - 'Vous êtes sur le point de publier tous les {{label}} de la sélection. Es-tu sûr?', - aboutToRestore: - "Vous êtes sur le point de restaurer le document {{label}} à l'état où il se trouvait le {{versionDate}}.", - aboutToRestoreGlobal: - "Vous êtes sur le point de restaurer le ou la {{label}} global(e) à l'état où il ou elle se trouvait le {{versionDate}}.", - aboutToRevertToPublished: - 'Vous êtes sur le point de rétablir les modifications apportées à ce document à la version publiée. Êtes-vous sûr ?', - aboutToUnpublish: - "Vous êtes sur le point d'annuler la publication de ce document. Êtes-vous sûr ?", - aboutToUnpublishSelection: - 'Vous êtes sur le point de dépublier tous les {{label}} de la sélection. Es-tu sûr?', - autosave: 'Enregistrement automatique', - autosavedSuccessfully: 'Enregistrement automatique réussi.', - changed: 'Modifié', - compareVersion: 'Comparez cette version à :', - confirmPublish: 'Confirmer la publication', - confirmRevertToSaved: 'Confirmer la restauration', - confirmUnpublish: "Confirmer l'annulation", - confirmVersionRestoration: 'Confirmer la restauration de la version', - draft: 'Brouillon', - draftSavedSuccessfully: 'Brouillon enregistré avec succès.', - lastSavedAgo: 'Dernière sauvegarde il y a {{distance}}', - noFurtherVersionsFound: 'Aucune autre version trouvée', - noRowsFound: 'Aucun(e) {{label}} trouvé(e)', - preview: 'Aperçu', - problemRestoringVersion: 'Un problème est survenu lors de la restauration de cette version', - publish: 'Publier', - publishChanges: 'Publier les modifications', - published: 'Publié', - publishing: 'Publication', - restoreThisVersion: 'Restaurer cette version', - restoredSuccessfully: 'Restauré(e) avec succès.', - restoring: 'Restauration en cours...', - revertToPublished: 'Republier', - saveDraft: 'Enregistrer le brouillon', - selectLocales: 'Sélectionnez les paramètres régionaux à afficher', - selectVersionToCompare: 'Sélectionnez une version à comparer', - showLocales: 'Afficher les paramètres régionaux :', - status: 'Statut', - type: 'Type', - unpublish: 'Annuler la publication', - unpublishing: 'Annulation en cours...', - version: 'Version', - versionCreatedOn: '{{version}} créé(e) le :', - versionID: 'Identifiant de la version', - versions: 'Versions', - viewingVersion: 'Affichage de la version de ou du {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: 'Affichage de la version globale de ou du {{entityLabel}}', - viewingVersions: 'Affichage des versions de ou du {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: 'Affichage des versions globales de ou du {{entityLabel}}', - }, -} diff --git a/packages/translations/src/_generatedFiles_/client/hr.js b/packages/translations/src/_generatedFiles_/client/hr.js deleted file mode 100644 index a154999f6d..0000000000 --- a/packages/translations/src/_generatedFiles_/client/hr.js +++ /dev/null @@ -1,290 +0,0 @@ -export default { - authentication: { - account: 'Račun', - accountOfCurrentUser: 'Račun od trenutnog korisnika', - alreadyActivated: 'Već aktivirano', - alreadyLoggedIn: 'Već prijavljen', - backToLogin: 'Nazad na prijavu', - beginCreateFirstUser: 'Za početak, kreiraj svog prvog korisnika.', - changePassword: 'Promjeni lozinku', - confirmGeneration: 'Potvrdi kreiranje', - confirmPassword: 'Potvrdi lozinku', - createFirstUser: 'Kreiraj prvog korisnika', - emailNotValid: 'Email nije ispravan', - emailSent: 'Email poslan', - enableAPIKey: 'Omogući API ključ', - failedToUnlock: 'Neuspješno otključavanje.', - forceUnlock: 'Prisilno otključaj', - forgotPassword: 'Zaboravljena lozinka', - forgotPasswordEmailInstructions: - 'Molim unesite svoj email. Primit ćete poruku s uputama za ponovno postavljanje lozinke.', - forgotPasswordQuestion: 'Zaboravljena lozinka?', - generate: 'Generiraj', - generateNewAPIKey: 'Generiraj novi API ključ', - logBackIn: 'Ponovna prijava', - logOut: 'Odjava', - loggedOutInactivity: 'Odjavljeni se zbog neaktivnosti.', - loggedOutSuccessfully: 'Uspješno ste odjavljeni..', - login: 'Prijava', - logout: 'Odjava', - logoutUser: 'Odjava korisnika', - newAPIKeyGenerated: 'Novi API ključ generiran.', - newPassword: 'Nova lozinka', - resetPassword: 'Restartiranje lozinke', - stayLoggedIn: 'Ostani prijavljen', - successfullyUnlocked: 'Uspješno otključano', - unableToVerify: 'Nije moguće potvrditi', - verified: 'Potvrđeno', - verifiedSuccessfully: 'Uspješno potvrđeno', - verify: 'Potvrdi', - verifyUser: 'Potvrdi korisnika', - youAreInactive: - 'Neaktivni ste neko vrijeme i uskoro ćete biti automatski odjavljeni zbog vlastite sigurnosti. Želite li ostati prijavljeni?', - }, - error: { - autosaving: 'Nastao je problem pri automatskom spremanju ovog dokumenta.', - correctInvalidFields: 'Molim ispravite nevaljana polja.', - deletingTitle: - 'Dogodila se pogreška pri brisanju {{title}}. Molim provjerite svoju internetsku vezu i pokušajte ponovno.', - loadingDocument: 'Pojavio se problem pri učitavanju dokumenta čiji je ID {{id}}.', - noMatchedField: 'Nema podudarajućih polja za "{{label}}"', - notAllowedToAccessPage: 'Nemate dopuštenje pristupiti ovoj stranici.', - previewing: 'Pojavio se problem pri pregledavanju ovog dokumenta.', - unableToDeleteCount: 'Nije moguće izbrisati {{count}} od {{total}} {{label}}.', - unableToUpdateCount: 'Nije moguće ažurirati {{count}} od {{total}} {{label}}.', - unauthorized: 'Neovlašten, morate biti prijavljeni da biste uputili ovaj zahtjev.', - unknown: 'Došlo je do nepoznate pogreške.', - unspecific: 'Došlo je do pogreške.', - }, - fields: { - addLabel: 'Dodaj {{label}}', - addLink: 'Dodaj poveznicu', - addNew: 'Dodaj novi', - addNewLabel: 'Dodaj novi {{label}}', - addRelationship: 'Dodaj odnos', - addUpload: 'Dodaj učitavanje', - block: 'blokiranje', - blockType: 'Vrsta blokiranja', - blocks: 'blokiranja', - chooseFromExisting: 'Odaberite iz postojećih.', - collapseAll: 'Sažmi sve', - editLink: 'Uredi poveznicu', - editRelationship: 'Uredi odnos', - itemsAndMore: '{{items}} i {{count}} više', - labelRelationship: '{{label}} veza', - latitude: 'Zemljopisna širina', - linkedTo: 'Povezabi sa <0>{{label}}', - longitude: 'Zemljopisna dužina', - passwordsDoNotMatch: 'Lozinke nisu iste.', - removeRelationship: 'Ukloni vezu', - removeUpload: 'Ukloni prijenos', - saveChanges: 'Spremi promjene', - searchForBlock: 'Potraži blok', - selectFieldsToEdit: 'Odaberite polja za uređivanje', - showAll: 'Pokaži sve', - swapRelationship: 'Zamijeni vezu', - swapUpload: 'Zamijeni prijenos', - toggleBlock: 'Prebaci blok', - uploadNewLabel: 'Učitaj novi {{label}}', - }, - general: { - aboutToDelete: 'Izbrisat ćete {{label}} <1>{{title}}. Jeste li sigurni?', - aboutToDeleteCount_many: 'Upravo ćete izbrisati {{count}} {{label}}', - aboutToDeleteCount_one: 'Upravo ćete izbrisati {{count}} {{label}}', - aboutToDeleteCount_other: 'Upravo ćete izbrisati {{count}} {{label}}', - addBelow: 'Dodaj ispod', - addFilter: 'Dodaj filter', - adminTheme: 'Administratorska tema', - and: 'I', - applyChanges: 'Primijeni promjene', - ascending: 'Uzlazno', - automatic: 'Automatsko', - backToDashboard: 'Natrag na nadzornu ploču', - cancel: 'Otkaži', - changesNotSaved: 'Vaše promjene nisu spremljene. Ako izađete sada, izgubit ćete promjene.', - close: 'Zatvori', - collapse: 'Sažmi', - collections: 'Kolekcije', - columnToSort: 'Stupac za sortiranje', - columns: 'Stupci', - confirm: 'Potvrdi', - confirmDeletion: 'Potvrdi brisanje', - confirmDuplication: 'Potvrdi duplikaciju', - copied: 'Kopirano', - copy: 'Kopiraj', - create: 'Kreiraj', - createNew: 'Kreiraj novo', - createNewLabel: 'Kreiraj novo {{label}}', - created: 'Kreirano', - creating: 'Kreira se', - creatingNewLabel: 'Kreiranje novog {{label}}', - dark: 'Tamno', - dashboard: 'Nadzorna ploča', - delete: 'Obriši', - deletedCountSuccessfully: 'Uspješno izbrisano {{count}} {{label}}.', - deleting: 'Brisanje...', - descending: 'Silazno', - deselectAllRows: 'Odznači sve redove', - duplicate: 'Duplikat', - duplicateWithoutSaving: 'Dupliciraj bez spremanja promjena', - edit: 'Uredi', - editLabel: 'Uredi {{label}}', - editing: 'Uređivanje', - editingLabel_many: 'Uređivanje {{count}} {{label}}', - editingLabel_one: 'Uređivanje {{count}} {{label}}', - editingLabel_other: 'Uređivanje {{count}} {{label}}', - email: 'Email', - emailAddress: 'Email adresa', - enterAValue: 'Unesi vrijednost', - error: 'Greška', - errors: 'Greške', - fallbackToDefaultLocale: 'Vraćanje na zadani jezik', - filterWhere: 'Filter {{label}} gdje', - filters: 'Filteri', - globals: 'Globali', - language: 'Jezik', - lastModified: 'Zadnja promjena', - leaveAnyway: 'Svejedno napusti', - leaveWithoutSaving: 'Napusti bez spremanja', - light: 'Svijetlo', - livePreview: 'Pregled', - loading: 'Učitavanje', - locale: 'Jezik', - menu: 'Izbornik', - moveDown: 'Pomakni dolje', - moveUp: 'Pomakni gore', - noFiltersSet: 'Nema postavljenih filtera', - noLabel: '', - noOptions: 'Nema opcija', - noResults: - 'Nema pronađenih {{label}}. Ili {{label}} još uvijek ne postoji ili nijedan od odgovara postavljenim filterima.', - noValue: 'Bez vrijednosti', - none: 'Nijedan', - notFound: 'Nije pronađeno', - nothingFound: 'Ništa nije pronađeno', - of: 'Od', - open: 'Otvori', - or: 'Ili', - order: 'Poredak', - pageNotFound: 'Stranica nije pronađena', - password: 'Lozinka', - payloadSettings: 'Payload postavke', - perPage: 'Po stranici: {{limit}}', - remove: 'Ukloni', - reset: 'Ponovno postavi', - row: 'Red', - rows: 'Redovi', - save: 'Spremi', - saving: 'Spremanje...', - searchBy: 'Traži po {{label}}', - selectAll: 'Odaberite sve {{count}} {{label}}', - selectAllRows: 'Odaberite sve redove', - selectValue: 'Odaberi vrijednost', - selectedCount: '{{count}} {{label}} odabrano', - showAllLabel: 'Prikaži sve {{label}}', - sorryNotFound: 'Nažalost, ne postoji ništa što odgovara vašem zahtjevu.', - sort: 'Sortiraj', - sortByLabelDirection: 'Sortiraj prema {{label}} {{direction}}', - stayOnThisPage: 'Ostani na ovoj stranici', - submissionSuccessful: 'Uspješno slanje', - submit: 'Podnesi', - successfullyCreated: '{{label}} uspješno kreirano.', - thisLanguage: 'Hrvatski', - titleDeleted: '{{label}} "{{title}}" uspješno obrisano.', - unauthorized: 'Neovlašteno', - unsavedChangesDuplicate: 'Imate nespremljene promjene. Želite li nastaviti s dupliciranjem?', - untitled: 'Bez naslova', - updatedAt: 'Ažurirano u', - updatedCountSuccessfully: 'Uspješno ažurirano {{count}} {{label}}.', - updatedSuccessfully: 'Uspješno ažurirano.', - updating: 'Ažuriranje', - welcome: 'Dobrodošli', - }, - operators: { - contains: 'sadrži', - equals: 'jednako', - exists: 'postoji', - isGreaterThan: 'je veće od', - isGreaterThanOrEqualTo: 'je veće od ili jednako', - isIn: 'je u', - isLessThan: 'manje je od', - isLessThanOrEqualTo: 'manje je ili jednako', - isLike: 'je kao', - isNotEqualTo: 'nije jednako', - isNotIn: 'nije unutra', - near: 'blizu', - }, - upload: { - crop: 'Usjev', - cropToolDescription: - 'Povucite kutove odabranog područja, nacrtajte novo područje ili prilagodite vrijednosti ispod.', - dragAndDrop: 'Povucite i ispustite datoteku', - editImage: 'Uredi sliku', - focalPoint: 'Središnja točka', - focalPointDescription: - 'Povucite središnju točku izravno na pregledu ili prilagodite vrijednosti ispod.', - height: 'Visina', - previewSizes: 'Veličine pregleda', - selectCollectionToBrowse: 'Odaberite kolekciju za pregled', - selectFile: 'Odaberite datoteku', - setCropArea: 'Postavi područje usjeva', - setFocalPoint: 'Postavi fokusnu točku', - sizesFor: 'Veličine za {{label}}', - width: 'Širina', - }, - validation: { - fieldHasNo: 'Ovo polje nema {{label}}', - limitReached: 'Dosegnut je limit, može se dodati samo {{max}} stavki.', - required: 'Ovo polje je obvezno.', - requiresAtLeast: 'Ovo polje zahtjeva minimalno {{count}} {{label}}.', - }, - version: { - aboutToPublishSelection: 'Upravo ćete objaviti sve {{label}} u izboru. Jesi li siguran?', - aboutToRestore: 'Vratit ćete {{label}} dokument u stanje u kojem je bio {{versionDate}}', - aboutToRestoreGlobal: 'Vratit ćete globalni {{label}} u stanje u kojem je bio {{versionDate}}.', - aboutToRevertToPublished: - 'Vratit ćete promjene u dokumentu u objavljeno stanje. Jeste li sigurni? ', - aboutToUnpublish: 'Poništit ćete objavu ovog dokumenta. Jeste li sigurni?', - aboutToUnpublishSelection: - 'Upravo ćete poništiti objavu svih {{label}} u odabiru. Jesi li siguran?', - autosave: 'Automatsko spremanje', - autosavedSuccessfully: 'Automatsko spremanje uspješno.', - changed: 'Promijenjeno', - compareVersion: 'Usporedi verziju sa:', - confirmPublish: 'Potvrdi objavu', - confirmRevertToSaved: 'Potvrdite vraćanje na spremljeno', - confirmUnpublish: 'Potvrdite poništavanje objave', - confirmVersionRestoration: 'Potvrdite vraćanje verzije', - draft: 'Nacrt', - draftSavedSuccessfully: 'Nacrt uspješno spremljen.', - lastSavedAgo: 'Zadnji put spremljeno prije {{distance}', - noFurtherVersionsFound: 'Nisu pronađene daljnje verzije', - noRowsFound: '{{label}} nije pronađeno', - preview: 'Pregled', - problemRestoringVersion: 'Nastao je problem pri vraćanju ove verzije', - publish: 'Objaviti', - publishChanges: 'Objavi promjene', - published: 'Objavljeno', - publishing: 'Objavljivanje', - restoreThisVersion: 'Vrati ovu verziju', - restoredSuccessfully: 'Uspješno vraćeno.', - restoring: 'Vraćanje...', - revertToPublished: 'Vrati na objavljeno', - saveDraft: 'Sačuvaj nacrt', - selectLocales: 'Odaberite jezike', - selectVersionToCompare: 'Odaberite verziju za usporedbu', - showLocales: 'Prikaži jezike:', - status: 'Status', - type: 'Tip', - unpublish: 'Poništi objavu', - unpublishing: 'Poništavanje objave...', - version: 'Verzija', - versionCreatedOn: '{{version}} kreiranih:', - versionID: 'ID verzije', - versions: 'Verzije', - viewingVersion: 'Pregled verzije za {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: 'Pregled verzije za globalni {{entityLabel}}', - viewingVersions: 'Pregled verzija za {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: 'Pregled verzije za globalni {{entityLabel}}', - }, -} diff --git a/packages/translations/src/_generatedFiles_/client/hu.js b/packages/translations/src/_generatedFiles_/client/hu.js deleted file mode 100644 index c5784a2cd1..0000000000 --- a/packages/translations/src/_generatedFiles_/client/hu.js +++ /dev/null @@ -1,294 +0,0 @@ -export default { - authentication: { - account: 'Fiók', - accountOfCurrentUser: 'Az aktuális felhasználó fiókja', - alreadyActivated: 'Már aktiválva van', - alreadyLoggedIn: 'Már bejelentkezett', - backToLogin: 'Vissza a bejelentkezéshez', - beginCreateFirstUser: 'Kezdésként hozza létre az első felhasználót.', - changePassword: 'Jelszó módosítása', - confirmGeneration: 'Generálás megerősítése', - confirmPassword: 'Jelszó megerősítése', - createFirstUser: 'Első felhasználó létrehozása', - emailNotValid: 'A megadott e-mail cím érvénytelen', - emailSent: 'E-mail elküldve', - enableAPIKey: 'API-kulcs engedélyezése', - failedToUnlock: 'Nem sikerült feloldani', - forceUnlock: 'Kényszerített feloldás', - forgotPassword: 'Elfelejtett jelszó', - forgotPasswordEmailInstructions: - 'Kérjük, adja meg e-mail címét alább. Kapni fog egy e-mail üzenetet a jelszó visszaállításához szükséges utasításokkal.', - forgotPasswordQuestion: 'Elfelejtette jelszavát?', - generate: 'Generálás', - generateNewAPIKey: 'Új API-kulcs generálása', - logBackIn: 'Jelentkezzen be újra', - logOut: 'Kijelentkezés', - loggedOutInactivity: 'Inaktivitás miatt kijelentkeztünk.', - loggedOutSuccessfully: 'Sikeresen kijelentkezett.', - login: 'Bejelentkezés', - logout: 'Kijelentkezés', - logoutUser: 'Felhasználó kijelentkezése', - newAPIKeyGenerated: 'Új API-kulcs generálva.', - newPassword: 'Új jelszó', - resetPassword: 'Jelszó visszaállítása', - stayLoggedIn: 'Maradjon bejelentkezve', - successfullyUnlocked: 'Sikeresen feloldva', - unableToVerify: 'Sikertelen megerősítés', - verified: 'Megerősítve', - verifiedSuccessfully: 'Sikeresen megerősítve', - verify: 'Megerősítés', - verifyUser: 'Felhasználó megerősítése', - youAreInactive: - 'Már egy ideje nem volt aktív, és hamarosan automatikusan kijelentkeztetjük saját biztonsága érdekében. Szeretne bejelentkezve maradni?', - }, - error: { - autosaving: 'Hiba történt a dokumentum automatikus mentése közben.', - correctInvalidFields: 'Kérjük, javítsa ki az érvénytelen mezőket.', - deletingTitle: - 'Hiba történt a {{title}} törlése közben. Kérjük, ellenőrizze a kapcsolatot, és próbálja meg újra.', - loadingDocument: 'Hiba történt a {{id}} azonosítójú dokumentum betöltésekor.', - noMatchedField: 'Nem található egyező mező a következőhöz: "{{label}}"', - notAllowedToAccessPage: 'Ehhez az oldalhoz nem férhet hozzá.', - previewing: 'Hiba történt a dokumentum előnézetének megtekintése közben.', - unableToDeleteCount: 'Nem sikerült törölni {{count}}/{{total}} {{label}}.', - unableToUpdateCount: 'Nem sikerült frissíteni {{count}}/{{total}} {{label}}.', - unauthorized: 'Jogosulatlan, a kéréshez be kell jelentkeznie.', - unknown: 'Ismeretlen hiba történt.', - unspecific: 'Hiba történt.', - }, - fields: { - addLabel: '{{label}} hozzáadása', - addLink: 'Link hozzáadása', - addNew: 'Új hozzáadása', - addNewLabel: 'Új {{label}} hozzáadása', - addRelationship: 'Kapcsolat hozzáadása', - addUpload: 'Feltöltés hozzáadása', - block: 'blokk', - blockType: 'Blokk típusa', - blocks: 'blokkok', - chooseFromExisting: 'Válasszon a meglévők közül', - collapseAll: 'Mindet összecsuk', - editLink: 'Link szerkesztése', - editRelationship: 'Kapcsolat hozzáadása', - itemsAndMore: '{{items}} és további {{count}}', - labelRelationship: '{{label}} Kapcsolat', - latitude: 'Szélesség', - linkedTo: 'Kapcsolódik a <0>{{label}}', - longitude: 'Hosszúság', - passwordsDoNotMatch: 'A jelszavak nem egyeznek.', - removeRelationship: 'Kapcsolat eltávolítása', - removeUpload: 'Feltöltés eltávolítása', - saveChanges: 'Módosítások mentése', - searchForBlock: 'Blokk keresése', - selectFieldsToEdit: 'Válassza ki a szerkeszteni kívánt mezőket', - showAll: 'Az összes megjelenítése', - swapRelationship: 'Kapcsolat csere', - swapUpload: 'Feltöltés csere', - toggleBlock: 'Blokk kinyitása', - uploadNewLabel: 'Új {{label}} feltöltése', - }, - general: { - aboutToDelete: 'A {{label}} <1>{{title}} törlésére készül. Biztos benne?', - aboutToDeleteCount_many: 'Törölni készül {{count}} {{label}}', - aboutToDeleteCount_one: 'Törölni készül {{count}} {{label}}', - aboutToDeleteCount_other: 'Törölni készül {{count}} {{label}}', - addBelow: 'Hozzáadás lent', - addFilter: 'Szűrő hozzáadása', - adminTheme: 'Admin téma', - and: 'És', - applyChanges: 'Változtatások alkalmazása', - ascending: 'Növekvő', - automatic: 'Automatikus', - backToDashboard: 'Vissza az irányítópultra', - cancel: 'Mégsem', - changesNotSaved: - 'A módosítások nem lettek mentve. Ha most távozik, elveszíti a változtatásokat.', - close: 'Bezárás', - collapse: 'Összecsukás', - collections: 'Gyűjtemények', - columnToSort: 'Rendezendő oszlop', - columns: 'Oszlopok', - confirm: 'Megerősítés', - confirmDeletion: 'Törlés megerősítése', - confirmDuplication: 'Duplikáció megerősítése', - copied: 'Másolva', - copy: 'Másolás', - create: 'Létrehozás', - createNew: 'Új létrehozása', - createNewLabel: 'Új {{label}} létrehozása', - created: 'Létrehozva', - creating: 'Létrehozás', - creatingNewLabel: 'Új {{label}} létrehozása', - dark: 'Sötét', - dashboard: 'Irányítópult', - delete: 'Törlés', - deletedCountSuccessfully: '{{count}} {{label}} sikeresen törölve.', - deleting: 'Törlés...', - descending: 'Csökkenő', - deselectAllRows: 'Jelölje ki az összes sort', - duplicate: 'Duplikálás', - duplicateWithoutSaving: 'Duplikálás a módosítások mentése nélkül', - edit: 'Szerkesztés', - editLabel: '{{label}} szerkesztése', - editing: 'Szerkesztés', - editingLabel_many: '{{count}} {{label}} szerkesztése', - editingLabel_one: '{{count}} {{label}} szerkesztése', - editingLabel_other: '{{count}} {{label}} szerkesztése', - email: 'E-mail', - emailAddress: 'E-mail cím', - enterAValue: 'Adjon meg egy értéket', - error: 'Hiba', - errors: 'Hibák', - fallbackToDefaultLocale: 'Visszatérés az alapértelmezett nyelvhez', - filterWhere: 'Szűrő {{label}} ahol', - filters: 'Szűrők', - globals: 'Globálisok', - language: 'Nyelv', - lastModified: 'Utoljára módosítva', - leaveAnyway: 'Távozás mindenképp', - leaveWithoutSaving: 'Távozás mentés nélkül', - light: 'Világos', - livePreview: 'Előnézet', - loading: 'Betöltés', - locale: 'Nyelv', - menu: 'Menü', - moveDown: 'Mozgatás lefelé', - moveUp: 'Mozgatás felfelé', - noFiltersSet: 'Nincs beállítva szűrő', - noLabel: '', - noOptions: 'Nincs lehetőség', - noResults: - 'Nem találtunk {{label}}. Vagy még nem létezik {{label}}, vagy egyik sem felel meg a fent megadott szűrőknek.', - noValue: 'Nincs érték', - none: 'Semmi', - notFound: 'Nem található', - nothingFound: 'Nincs találat', - of: 'a', - open: 'Megnyitás', - or: 'Vagy', - order: 'Sorrend', - pageNotFound: 'Az oldal nem található', - password: 'Jelszó', - payloadSettings: 'Payload beállítások', - perPage: 'Oldalanként: {{limit}}', - remove: 'Törlés', - reset: 'Visszaállítás', - row: 'Sor', - rows: 'Sorok', - save: 'Mentés', - saving: 'Mentés...', - searchBy: 'Keresés a következő szerint: {{label}}', - selectAll: 'Az összes kijelölése: {{count}} {{label}}', - selectAllRows: 'Válassza ki az összes sort', - selectValue: 'Válasszon ki egy értéket', - selectedCount: '{{count}} {{label}} kiválasztva', - showAllLabel: 'Mutasd az összes {{címke}}', - sorryNotFound: 'Sajnáljuk – nincs semmi, ami megfelelne a kérésének.', - sort: 'Rendezés', - sortByLabelDirection: 'Rendezés {{label}} {{direction}} szerint', - stayOnThisPage: 'Maradjon ezen az oldalon', - submissionSuccessful: 'Beküldés sikeres.', - submit: 'Beküldés', - successfullyCreated: '{{label}} sikeresen létrehozva.', - thisLanguage: 'Magyar', - titleDeleted: '{{label}} "{{title}}" sikeresen törölve.', - unauthorized: 'Jogosulatlan', - unsavedChangesDuplicate: 'Nem mentett módosításai vannak. Szeretné folytatni a duplikációt?', - untitled: 'Névtelen', - updatedAt: 'Frissítve:', - updatedCountSuccessfully: '{{count}} {{label}} sikeresen frissítve.', - updatedSuccessfully: 'Sikeresen frissítve.', - updating: 'Frissítés', - welcome: 'Üdvözöljük', - }, - operators: { - contains: 'tartalmaz', - equals: 'egyenlő', - exists: 'létezik', - isGreaterThan: 'nagyobb, mint', - isGreaterThanOrEqualTo: 'nagyobb vagy egyenlő, mint', - isIn: 'benne van', - isLessThan: 'kisebb, mint', - isLessThanOrEqualTo: 'kisebb vagy egyenlő, mint', - isLike: 'olyan, mint', - isNotEqualTo: 'nem egyenlő', - isNotIn: 'nincs benne', - near: 'közel', - }, - upload: { - crop: 'Termés', - cropToolDescription: - 'Húzza a kijelölt terület sarkait, rajzoljon új területet, vagy igazítsa a lentebb található értékeket.', - dragAndDrop: 'Húzzon ide egy fájlt', - editImage: 'Kép szerkesztése', - focalPoint: 'Fókuszpont', - focalPointDescription: - 'Húzza az érdekes pontot közvetlenül az előnézetre, vagy állítsa be az alábbi értékeket.', - height: 'Magasság', - previewSizes: 'Előnézeti méretek', - selectCollectionToBrowse: 'Válassza ki a böngészni kívánt gyűjteményt', - selectFile: 'Válasszon ki egy fájlt', - setCropArea: 'Állítsa be a vágási területet', - setFocalPoint: 'Állítsa be a fókuszpontot', - sizesFor: 'Méretek a {{címke}} számára', - width: 'Szélesség', - }, - validation: { - fieldHasNo: 'Ennek a mezőnek nincs {{label}}', - limitReached: 'Elérte a korlátot, csak {{max}} elem adható hozzá.', - required: 'Ez a mező kötelező.', - requiresAtLeast: 'Ehhez a mezőhöz legalább {{count}} {{label}} szükséges.', - }, - version: { - aboutToPublishSelection: - 'Arra készül, hogy az összes {{label}} elemet közzétegye a kijelölésben. biztos vagy ebben?', - aboutToRestore: - 'Arra készül, hogy visszaállítsa ezt a {{label}} dokumentumot arra az állapotra, amelyben {{versionDate}} napon volt.', - aboutToRestoreGlobal: - 'Arra készül, hogy visszaállítsa a {{label}} arra az állapotra, amelyben {{versionDate}} napon volt.', - aboutToRevertToPublished: - 'Arra készül, hogy visszaállítsa a dokumentum módosításait a közzétett állapotába. Biztos benne?', - aboutToUnpublish: 'A dokumentum közzétételének visszavonására készül. Biztos benne?', - aboutToUnpublishSelection: - 'Arra készül, hogy visszavonja a kijelölésben szereplő összes {{label}} közzétételét. biztos vagy ebben?', - autosave: 'Automatikus mentés', - autosavedSuccessfully: 'Automatikus mentés sikeres.', - changed: 'Megváltozott', - compareVersion: 'Hasonlítsa össze a verziót a következőkkel:', - confirmPublish: 'A közzététel megerősítése', - confirmRevertToSaved: 'Erősítse meg a mentett verzióra való visszatérést', - confirmUnpublish: 'A közzététel visszavonásának megerősítése', - confirmVersionRestoration: 'Verzió-visszaállítás megerősítése', - draft: 'Piszkozat', - draftSavedSuccessfully: 'A piszkozat sikeresen mentve.', - lastSavedAgo: 'Utoljára mentve {{distance}} órája', - noFurtherVersionsFound: 'További verziók nem találhatók', - noRowsFound: 'Nem található {{label}}', - preview: 'Előnézet', - problemRestoringVersion: 'Hiba történt a verzió visszaállításakor', - publish: 'Közzététel', - publishChanges: 'Módosítások közzététele', - published: 'Közzétett', - publishing: 'Közzététel', - restoreThisVersion: 'A verzió visszaállítása', - restoredSuccessfully: 'Sikeresen visszaállítva.', - restoring: 'Visszaállítás...', - revertToPublished: 'Visszatérés a közzétetthez', - saveDraft: 'Piszkozat mentése', - selectLocales: 'Megjelenítendő nyelvek kiválasztása', - selectVersionToCompare: 'Válassza ki az összehasonlítani kívánt verziót', - showLocales: 'Nyelvek megjelenítése:', - status: 'Állapot', - type: 'Típus', - unpublish: 'Közzététel visszavonása', - unpublishing: 'Közzététel visszavonása...', - version: 'Verzió', - versionCreatedOn: '{{version}} létrehozva:', - versionID: 'Verzióazonosító', - versions: 'Verziók', - viewingVersion: 'A(z) {{entityLabel}} {{documentTitle}} verziójának megtekintése', - viewingVersionGlobal: 'A globális {{entityLabel}} verziójának megtekintése', - viewingVersions: 'A {{entityLabel}} {{documentTitle}} verzióinak megtekintése', - viewingVersionsGlobal: 'A globális {{entityLabel}} verzióinak megtekintése', - }, -} diff --git a/packages/translations/src/_generatedFiles_/client/index.ts b/packages/translations/src/_generatedFiles_/client/index.ts deleted file mode 100644 index d4d2421008..0000000000 --- a/packages/translations/src/_generatedFiles_/client/index.ts +++ /dev/null @@ -1,65 +0,0 @@ -import ar from './ar.js' -import az from './az.js' -import bg from './bg.js' -import cs from './cs.js' -import de from './de.js' -import en from './en.js' -import es from './es.js' -import fa from './fa.js' -import fr from './fr.js' -import hr from './hr.js' -import hu from './hu.js' -import it from './it.js' -import ja from './ja.js' -import ko from './ko.js' -import my from './my.js' -import nb from './nb.js' -import nl from './nl.js' -import pl from './pl.js' -import pt from './pt.js' -import ro from './ro.js' -import rs from './rs.js' -import rsLatin from './rs-latin.js' -import ru from './ru.js' -import sv from './sv.js' -import th from './th.js' -import tr from './tr.js' -import ua from './ua.js' -import vi from './vi.js' -import zh from './zh.js' -import zhTW from './zhTW.js' - -export const translations = { - ar, - az, - bg, - cs, - de, - en, - es, - fa, - fr, - hr, - hu, - it, - ja, - ko, - my, - nb, - nl, - pl, - pt, - ro, - rs, - 'rs-latin': rsLatin, - ru, - sv, - th, - tr, - ua, - vi, - zh, - zhTW, -} as { - [locale: string]: Record> -} diff --git a/packages/translations/src/_generatedFiles_/client/it.js b/packages/translations/src/_generatedFiles_/client/it.js deleted file mode 100644 index 8faded0309..0000000000 --- a/packages/translations/src/_generatedFiles_/client/it.js +++ /dev/null @@ -1,294 +0,0 @@ -export default { - authentication: { - account: 'Account', - accountOfCurrentUser: "Account dell'utente corrente", - alreadyActivated: 'Già Attivato', - alreadyLoggedIn: 'Sei già loggato', - backToLogin: 'Torna al login', - beginCreateFirstUser: 'Per iniziare, crea il tuo primo utente.', - changePassword: 'Cambia Password', - confirmGeneration: 'Conferma Generazione', - confirmPassword: 'Conferma Password', - createFirstUser: 'Crea il primo utente', - emailNotValid: "L'email fornita non è valida", - emailSent: 'Email Inviata', - enableAPIKey: 'Abilita la Chiave API', - failedToUnlock: 'Lo sblocco è fallito', - forceUnlock: 'Forza Sblocco', - forgotPassword: 'Cambia Password', - forgotPasswordEmailInstructions: - 'Inserisci la tua mail qui sotto. Riceverai un messaggio email con le istruzioni su come cambiare la tua password.', - forgotPasswordQuestion: 'Password dimenticata?', - generate: 'Genera', - generateNewAPIKey: 'Genera una nuova Chiave API', - logBackIn: 'Vai al Log in', - logOut: 'Log out', - loggedOutInactivity: 'Sei stato disconnesso automaticamente per inattività.', - loggedOutSuccessfully: 'Sei stato disconnesso con successo.', - login: 'Login', - logout: 'Logout', - logoutUser: 'Logout utente', - newAPIKeyGenerated: 'Nuova Chiave API Generata.', - newPassword: 'Nuova Password', - resetPassword: 'Modifica Password', - stayLoggedIn: 'Rimani connesso', - successfullyUnlocked: 'Sbloccato con successo', - unableToVerify: 'Impossibile verificare', - verified: 'Verificato', - verifiedSuccessfully: 'Verificato con successo', - verify: 'Verifica', - verifyUser: 'Verifica Utente', - youAreInactive: - "Non sei attivo da un po' di tempo e a breve verrai disconnesso automaticamente per la tua sicurezza. Vuoi rimanere connesso?", - }, - error: { - autosaving: - 'Si è verificato un problema durante il salvataggio automatico di questo documento.', - correctInvalidFields: 'Per favore correggi i campi non validi.', - deletingTitle: - "Si è verificato un errore durante l'eliminazione di {{title}}. Per favore controlla la tua connessione e riprova.", - loadingDocument: - 'Si è verificato un problema durante il caricamento del documento con ID {{id}}.', - noMatchedField: 'Nessun campo corrispondente trovato per "{{label}}"', - notAllowedToAccessPage: 'Non sei autorizzato ad accedere a questa pagina.', - previewing: "Si è verificato un problema durante l'anteprima di questo documento.", - unableToDeleteCount: 'Impossibile eliminare {{count}} su {{total}} {{label}}.', - unableToUpdateCount: 'Impossibile aggiornare {{count}} su {{total}} {{label}}.', - unauthorized: 'Non autorizzato, devi essere loggato per effettuare questa richiesta.', - unknown: 'Si è verificato un errore sconosciuto.', - unspecific: 'Si è verificato un errore.', - }, - fields: { - addLabel: 'Aggiungi {{label}}', - addLink: 'Aggiungi Collegamento', - addNew: 'Aggiungi nuovo', - addNewLabel: 'Aggiungi nuovo {{label}}', - addRelationship: 'Aggiungi Relazione', - addUpload: 'aggiungi Carica', - block: 'blocco', - blockType: 'Tipo di Blocco', - blocks: 'blocchi', - chooseFromExisting: 'Scegli tra esistente', - collapseAll: 'Comprimi tutto', - editLink: 'Modifica Collegamento', - editRelationship: 'Modifica Relazione', - itemsAndMore: '{{items}} e altri {{count}}', - labelRelationship: 'Relazione {{label}}', - latitude: 'Latitudine', - linkedTo: 'Collegato a <0>{{label}}', - longitude: 'Longitudine', - passwordsDoNotMatch: 'Le password non corrispondono.', - removeRelationship: 'Rimuovi Relazione', - removeUpload: 'Rimuovi Upload', - saveChanges: 'Salva modifiche', - searchForBlock: 'Cerca un blocco', - selectFieldsToEdit: 'Seleziona i campi da modificare', - showAll: 'Mostra tutto', - swapRelationship: 'Cambia Relationship', - swapUpload: 'Cambia Upload', - toggleBlock: 'Apri/chiudi blocco', - uploadNewLabel: 'Carica nuovo {{label}}', - }, - general: { - aboutToDelete: 'Stai per eliminare {{label}} <1>{{title}}. Sei sicuro?', - aboutToDeleteCount_many: 'Stai per eliminare {{count}} {{label}}', - aboutToDeleteCount_one: 'Stai per eliminare {{count}} {{label}}', - aboutToDeleteCount_other: 'Stai per eliminare {{count}} {{label}}', - addBelow: 'Aggiungi sotto', - addFilter: 'Aggiungi Filtro', - adminTheme: 'Tema Admin', - and: 'E', - applyChanges: 'Applica modifiche', - ascending: 'Ascendente', - automatic: 'Automatico', - backToDashboard: 'Torna alla Dashboard', - cancel: 'Cancella', - changesNotSaved: 'Le tue modifiche non sono state salvate. Se esci ora, verranno perse.', - close: 'Chiudere', - collapse: 'Comprimi', - collections: 'Collezioni', - columnToSort: 'Colonna da Ordinare', - columns: 'Colonne', - confirm: 'Conferma', - confirmDeletion: "Conferma l'eliminazione", - confirmDuplication: 'Conferma la duplicazione', - copied: 'Copiato', - copy: 'Copia', - create: 'Crea', - createNew: 'Crea Nuovo', - createNewLabel: 'Crea nuovo {{label}}', - created: 'Data di creazione', - creating: 'Crea nuovo', - creatingNewLabel: 'Creazione di un nuovo {{label}}', - dark: 'Scuro', - dashboard: 'Dashboard', - delete: 'Elimina', - deletedCountSuccessfully: '{{count}} {{label}} eliminato con successo.', - deleting: 'Sto eliminando...', - descending: 'Decrescente', - deselectAllRows: 'Deseleziona tutte le righe', - duplicate: 'Duplica', - duplicateWithoutSaving: 'Duplica senza salvare le modifiche', - edit: 'Modificare', - editLabel: 'Modifica {{label}}', - editing: 'Modifica', - editingLabel_many: 'Modificare {{count}} {{label}}', - editingLabel_one: 'Modifica {{count}} {{label}}', - editingLabel_other: 'Modificare {{count}} {{label}}', - email: 'Email', - emailAddress: 'Indirizzo Email', - enterAValue: 'Inserisci un valore', - error: 'Errore', - errors: 'Errori', - fallbackToDefaultLocale: 'Fallback al locale predefinito', - filterWhere: 'Filtra {{label}} se', - filters: 'Filtri', - globals: 'Globali', - language: 'Lingua', - lastModified: 'Ultima modifica', - leaveAnyway: 'Esci comunque', - leaveWithoutSaving: 'Esci senza salvare', - light: 'Chiaro', - livePreview: 'Anteprima dal vivo', - loading: 'Caricamento', - locale: 'Locale', - menu: 'Menù', - moveDown: 'Sposta sotto', - moveUp: 'Sposta sopra', - noFiltersSet: 'Nessun filtro impostato', - noLabel: '', - noOptions: 'Nessuna opzione', - noResults: - 'Nessun {{label}} trovato. Non esiste ancora nessun {{label}} oppure nessuno corrisponde ai filtri che hai specificato sopra.', - noValue: 'Nessun valore', - none: 'Nessuno', - notFound: 'Non Trovato', - nothingFound: 'Non è stato trovato nulla', - of: 'di', - open: 'Apri', - or: 'Oppure', - order: 'Ordine', - pageNotFound: 'Pagina non trovata', - password: 'Password', - payloadSettings: 'Impostazioni di Payload', - perPage: 'Per Pagina: {{limit}}', - remove: 'Rimuovi', - reset: 'Ripristina', - row: 'Riga', - rows: 'Righe', - save: 'Salva', - saving: 'Salvo...', - searchBy: 'Cerca per {{label}}', - selectAll: 'Seleziona tutto {{count}} {{label}}', - selectAllRows: 'Seleziona tutte le righe', - selectValue: 'Seleziona un valore', - selectedCount: '{{count}} {{label}} selezionato', - showAllLabel: 'Mostra tutti {{label}}', - sorryNotFound: "Siamo spiacenti, non c'è nulla che corrisponda alla tua richiesta.", - sort: 'Ordina', - sortByLabelDirection: 'Ordina per {{label}} {{direction}}', - stayOnThisPage: 'Rimani su questa pagina', - submissionSuccessful: 'Invio riuscito.', - submit: 'Invia', - successfullyCreated: '{{label}} creato con successo.', - thisLanguage: 'Italiano', - titleDeleted: '{{label}} {{title}} eliminato con successo.', - unauthorized: 'Non autorizzato', - unsavedChangesDuplicate: 'Sono presenti modifiche non salvate. Vuoi continuare a duplicare?', - untitled: 'Senza titolo', - updatedAt: 'Aggiornato il', - updatedCountSuccessfully: '{{count}} {{label}} aggiornato con successo.', - updatedSuccessfully: 'Aggiornato con successo.', - updating: 'Aggiornamento', - welcome: 'Benvenuto', - }, - operators: { - contains: 'contiene', - equals: 'uguale', - exists: 'esiste', - isGreaterThan: 'è maggiore di', - isGreaterThanOrEqualTo: 'è maggiore o uguale a', - isIn: 'è in', - isLessThan: 'è minore di', - isLessThanOrEqualTo: 'è minore o uguale a', - isLike: 'è come', - isNotEqualTo: 'non è uguale a', - isNotIn: 'non è in', - near: 'vicino', - }, - upload: { - crop: 'Raccolto', - cropToolDescription: - "Trascina gli angoli dell'area selezionata, disegna una nuova area o regola i valori qui sotto.", - dragAndDrop: 'Trascina e rilascia un file', - editImage: 'Modifica immagine', - focalPoint: 'Punto Focale', - focalPointDescription: - "Trascina il punto focale direttamente sull'anteprima o regola i valori sottostanti.", - height: 'Altezza', - previewSizes: 'Anteprime Dimensioni', - selectCollectionToBrowse: 'Seleziona una Collezione da Sfogliare', - selectFile: 'Seleziona un file', - setCropArea: 'Imposta area di ritaglio', - setFocalPoint: 'Imposta punto focale', - sizesFor: 'Dimensioni per {{label}}', - width: 'Larghezza', - }, - validation: { - fieldHasNo: 'Questo campo non ha {{label}}', - limitReached: 'Raggiunto il limite, possono essere aggiunti solo {{max}} elementi.', - required: 'Questo campo è obbligatorio.', - requiresAtLeast: 'Questo campo richiede almeno {{count}} {{label}}.', - }, - version: { - aboutToPublishSelection: 'Stai per pubblicare tutte le {{label}} nella selezione. Sei sicuro?', - aboutToRestore: - 'Stai per ripristinare questo documento {{label}} allo stato in cui si trovava il {{versionDate}}.', - aboutToRestoreGlobal: - 'Stai per ripristinare {{label}} allo stato in cui si trovava il {{versionDate}}.', - aboutToRevertToPublished: - 'Stai per ripristinare le modifiche di questo documento al suo stato pubblicato. Sei sicuro?', - aboutToUnpublish: 'Stai per annullare la pubblicazione di questo documento. Sei sicuro?', - aboutToUnpublishSelection: - 'Stai per annullare la pubblicazione di tutte le {{label}} nella selezione. Sei sicuro?', - autosave: 'Salvataggio automatico', - autosavedSuccessfully: 'Salvataggio automatico riuscito.', - changed: 'Modificato', - compareVersion: 'Confronta versione con:', - confirmPublish: 'Conferma la pubblicazione', - confirmRevertToSaved: 'Conferma il ripristino dei salvataggi', - confirmUnpublish: 'Conferma annullamento della pubblicazione', - confirmVersionRestoration: 'Conferma il ripristino della versione', - draft: 'Bozza', - draftSavedSuccessfully: 'Bozza salvata con successo.', - lastSavedAgo: 'Ultimo salvataggio {{distance}} fa', - noFurtherVersionsFound: 'Non sono state trovate ulteriori versioni', - noRowsFound: 'Nessun {{label}} trovato', - preview: 'Anteprima', - problemRestoringVersion: 'Si è verificato un problema durante il ripristino di questa versione', - publish: 'Pubblicare', - publishChanges: 'Pubblica modifiche', - published: 'Pubblicato', - publishing: 'Pubblicazione', - restoreThisVersion: 'Ripristina questa versione', - restoredSuccessfully: 'Ripristinato con successo.', - restoring: 'Ripristino...', - revertToPublished: 'Ritorna alla versione pubblicata', - saveDraft: 'Salva Bozza', - selectLocales: 'Seleziona le lingue da visualizzare', - selectVersionToCompare: 'Seleziona una versione da confrontare', - showLocales: 'Mostra localizzazioni:', - status: 'Stato', - type: 'Tipo', - unpublish: 'Annulla pubblicazione', - unpublishing: 'Annullamento pubblicazione...', - version: 'Versione', - versionCreatedOn: '{{version}} creata il:', - versionID: 'ID Versione', - versions: 'Versioni', - viewingVersion: 'Visualizzazione della versione per {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: '`Visualizzazione della versione per {{entityLabel}}', - viewingVersions: 'Visualizzazione delle versioni per {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: '`Visualizzazione delle versioni per {{entityLabel}}', - }, -} diff --git a/packages/translations/src/_generatedFiles_/client/ja.js b/packages/translations/src/_generatedFiles_/client/ja.js deleted file mode 100644 index 205e4466b7..0000000000 --- a/packages/translations/src/_generatedFiles_/client/ja.js +++ /dev/null @@ -1,291 +0,0 @@ -export default { - authentication: { - account: 'アカウント', - accountOfCurrentUser: '現在のユーザーアカウント', - alreadyActivated: 'すでに有効です', - alreadyLoggedIn: 'すでにログインしています', - backToLogin: 'ログイン画面へ戻る', - beginCreateFirstUser: 'まずは、最初のユーザーを作成します。', - changePassword: 'パスワードを変更', - confirmGeneration: '生成の確認', - confirmPassword: 'パスワードの確認', - createFirstUser: '最初のユーザーを作成', - emailNotValid: '入力されたメールアドレスは無効です。', - emailSent: 'Emailが送信されました。', - enableAPIKey: 'API Keyを許可', - failedToUnlock: 'ロックの解除に失敗しました。', - forceUnlock: '強制的にロックを解除', - forgotPassword: 'パスワード再設定', - forgotPasswordEmailInstructions: - 'アカウントのメールアドレスを以下に入力してください。パスワードの再設定方法が記載されたメールが届きます。', - forgotPasswordQuestion: 'パスワードをお忘れですか?', - generate: '生成', - generateNewAPIKey: '新しいAPI Keyを生成', - logBackIn: '改めてログイン', - logOut: 'ログアウト', - loggedOutInactivity: 'しばらく操作を行わなかったため、管理画面からログアウトしました。', - loggedOutSuccessfully: '管理画面からログアウトしました。', - login: 'ログイン', - logout: 'ログアウト', - logoutUser: 'ログアウトユーザー', - newAPIKeyGenerated: '新しいAPI Keyを生成しました。', - newPassword: '新しいパスワード', - resetPassword: 'パスワード再発行', - stayLoggedIn: 'ログイン状態を維持', - successfullyUnlocked: 'ロックの解除に成功しました。', - unableToVerify: '検証ができません', - verified: '検証済み', - verifiedSuccessfully: '検証が成功しました', - verify: '検証', - verifyUser: 'ユーザーの確認', - youAreInactive: - 'しばらく操作を行わなかったため、セキュリティのために自動的にログアウトします。ログイン状態を維持しますか?', - }, - error: { - autosaving: 'このデータを自動保存する際に問題が発生しました。', - correctInvalidFields: '無効なフィールドを修正してください。', - deletingTitle: - '{{title}} を削除する際にエラーが発生しました。接続を確認してからもう一度お試しください。', - loadingDocument: 'IDが {{id}} のデータを読み込む際に問題が発生しました。', - noMatchedField: '"{{label}}" に該当するフィールドがありません。', - notAllowedToAccessPage: 'この画面へのアクセスは許可されていません。', - previewing: 'このデータをプレビューする際に問題が発生しました。', - unableToDeleteCount: '{{total}} {{label}} から {{count}} を削除できません。', - unableToUpdateCount: '{{total}} {{label}} のうち {{count}} 個を更新できません。', - unauthorized: '認証されていません。このリクエストを行うにはログインが必要です。', - unknown: '不明なエラーが発生しました。', - unspecific: 'エラーが発生しました。', - }, - fields: { - addLabel: '{{label}} を追加', - addLink: 'リンクを追加', - addNew: '新規追加', - addNewLabel: '{{label}} を新規追加', - addRelationship: 'リレーションシップを追加', - addUpload: 'アップロードを追加', - block: 'ブロック', - blockType: 'ブロックタイプ', - blocks: 'ブロック', - chooseFromExisting: '既存から選択', - collapseAll: 'すべて閉じる', - editLink: 'リンクを編集', - editRelationship: 'リレーションシップを編集', - itemsAndMore: '{{items}} 他{{count}}件', - labelRelationship: '{{label}} リレーションシップ', - latitude: '緯度', - linkedTo: '<0>{{label}} にリンク', - longitude: '経度', - passwordsDoNotMatch: 'パスワードが一致しません', - removeRelationship: '関係を削除', - removeUpload: '削除', - saveChanges: '変更を保存', - searchForBlock: 'ブロックを検索', - selectFieldsToEdit: '編集するフィールドを選択', - showAll: 'すべて開く', - swapRelationship: 'スワップ関係', - swapUpload: '差し替え', - toggleBlock: 'ブロックを切り替え', - uploadNewLabel: '新規 {{label}} アップロード', - }, - general: { - aboutToDelete: '{{label}} <1>{{title}} を削除します。よろしいですか?', - aboutToDeleteCount_many: '{{label}}を{{count}}つ削除しようとしています', - aboutToDeleteCount_one: '{{label}}を{{count}}つ削除しようとしています', - aboutToDeleteCount_other: '{{label}}を{{count}}つ削除しようとしています', - addBelow: '下に追加', - addFilter: '絞り込みを追加', - adminTheme: '管理画面のテーマ', - and: 'かつ', - applyChanges: '変更を適用する', - ascending: '昇順', - automatic: '自動設定', - backToDashboard: 'ダッシュボードに戻る', - cancel: 'キャンセル', - changesNotSaved: '未保存の変更があります。このまま画面を離れると内容が失われます。', - close: '閉じる', - collapse: '閉じる', - collections: 'コレクション', - columnToSort: '並び替え対象の行', - columns: '行の表示', - confirm: '実行', - confirmDeletion: '削除の確認', - confirmDuplication: '複製の確認', - copied: 'コピーしました', - copy: 'コピー', - create: '作成', - createNew: '新規作成', - createNewLabel: '{{label}} を新規作成', - created: '作成', - creating: '作成中', - creatingNewLabel: '{{label}} を新規作成しています', - dark: 'ダークモード', - dashboard: 'ダッシュボード', - delete: '削除', - deletedCountSuccessfully: '{{count}}つの{{label}}を正常に削除しました。', - deleting: '削除しています...', - descending: '降順', - deselectAllRows: 'すべての行の選択を解除します', - duplicate: '複製', - duplicateWithoutSaving: '変更を保存せずに複製', - edit: '編集', - editLabel: '{{label}} を編集', - editing: '編集', - editingLabel_many: '{{count}}つの{{label}}を編集しています', - editingLabel_one: '{{count}}つの{{label}}を編集しています', - editingLabel_other: '{{count}}つの{{label}}を編集しています', - email: 'メールアドレス', - emailAddress: 'メールアドレス', - enterAValue: '値を入力', - error: 'エラー', - errors: 'エラー', - fallbackToDefaultLocale: 'デフォルトロケールへのフォールバック', - filterWhere: '{{label}} の絞り込み', - filters: '絞り込み', - globals: 'グローバル', - language: '言語', - lastModified: '最終更新', - leaveAnyway: 'すぐに画面を離れる', - leaveWithoutSaving: '内容が保存されていません', - light: 'ライトモード', - livePreview: 'プレビュー', - loading: 'ローディング中', - locale: 'ロケール', - menu: 'メニュー', - moveDown: '下へ移動', - moveUp: '上へ移動', - noFiltersSet: '絞り込みが未設定です。', - noLabel: '', - noOptions: '選択肢なし', - noResults: - '{{label}} データが見つかりませんでした。データが存在しない、または、絞り込みに一致するものがありません。', - noValue: '未設定', - none: 'なし', - notFound: 'Not Found', - nothingFound: 'Nothing found', - of: '/', - open: '開く', - or: 'または', - order: '表示順', - pageNotFound: 'ページが見つかりません', - password: 'パスワード', - payloadSettings: 'Payload 設定', - perPage: '表示件数: {{limit}}', - remove: '削除', - reset: 'リセット', - row: '列', - rows: '列', - save: '保存', - saving: '保存しています...', - searchBy: '{{label}} で検索', - selectAll: 'すべての{{count}}つの{{label}}を選択', - selectAllRows: 'すべての行を選択します', - selectValue: '値を選択', - selectedCount: '{{count}}つの{{label}}を選択中', - showAllLabel: 'すべての{{label}}を表示する', - sorryNotFound: '申し訳ありません。リクエストに対応する内容が見つかりませんでした。', - sort: '並び替え', - sortByLabelDirection: '{{label}}により並べ替え {{direction}}', - stayOnThisPage: 'この画面にとどまる', - submissionSuccessful: '送信が成功しました。', - submit: '送信', - successfullyCreated: '{{label}} が作成されました。', - thisLanguage: 'Japanese', - titleDeleted: '{{label}} "{{title}}" が削除されました。', - unauthorized: '未認証', - unsavedChangesDuplicate: '未保存の変更があります。複製を続けますか?', - untitled: 'Untitled', - updatedAt: '更新日', - updatedCountSuccessfully: '{{count}}つの{{label}}を正常に更新しました。', - updatedSuccessfully: '更新成功。', - updating: '更新中', - welcome: 'ようこそ', - }, - operators: { - contains: '含む', - equals: '等しい', - exists: '存在す', - isGreaterThan: 'より大きい', - isGreaterThanOrEqualTo: '以上', - isIn: 'あります', - isLessThan: 'より小さい', - isLessThanOrEqualTo: '以下', - isLike: 'のような', - isNotEqualTo: '等しくない', - isNotIn: '入っていません', - near: '近く', - }, - upload: { - crop: 'クロップ', - cropToolDescription: - '選択したエリアのコーナーをドラッグしたり、新たなエリアを描画したり、下記の値を調整してください。', - dragAndDrop: 'ファイルをドラッグ アンド ドロップする', - editImage: '画像を編集する', - focalPoint: '焦点', - focalPointDescription: 'プレビュー上で焦点を直接ドラッグするか、下の値を調整してください。', - height: '高さ', - previewSizes: 'プレビューサイズ', - selectCollectionToBrowse: '閲覧するコレクションを選択', - selectFile: 'ファイルを選択', - setCropArea: 'クロップエリアを設定する', - setFocalPoint: '焦点を設定する', - sizesFor: '{{label}}のサイズ', - width: '横幅', - }, - validation: { - fieldHasNo: '{{label}} が必要です。', - limitReached: '制限に達しました、{{max}}個以上のアイテムを追加することはできません。', - required: '必須フィールドです。', - requiresAtLeast: '少なくとも {{count}} {{label}} 以上が必要です。', - }, - version: { - aboutToPublishSelection: '選択中のすべての{{label}}を公開しようとしています。よろしいですか?', - aboutToRestore: - 'この {{label}} データを {{versionDate}} 時点のバージョンに復元しようとしています。', - aboutToRestoreGlobal: - 'グローバルな {{label}} データを {{versionDate}} 時点のバージョンに復元しようとしています。', - aboutToRevertToPublished: - 'このデータの変更を公開時の状態に戻そうとしています。よろしいですか?', - aboutToUnpublish: 'このデータを非公開にしようとしています。よろしいですか?', - aboutToUnpublishSelection: - '選択したすべての{{label}}の公開を取り消そうとしています。よろしいですか?', - autosave: '自動保存', - autosavedSuccessfully: '自動保存に成功しました。', - changed: '変更済み', - compareVersion: 'バージョンを比較:', - confirmPublish: '公開を確認する', - confirmRevertToSaved: '保存された状態に戻す確認', - confirmUnpublish: '非公開の確認', - confirmVersionRestoration: 'バージョン復元の確認', - draft: 'ドラフト', - draftSavedSuccessfully: '下書きは正常に保存されました。', - lastSavedAgo: '{{distance}}前に最後に保存されました', - noFurtherVersionsFound: 'その他のバージョンは見つかりませんでした。', - noRowsFound: '{{label}} は未設定です', - preview: 'プレビュー', - problemRestoringVersion: 'このバージョンの復元に問題がありました。', - publish: '公開する', - publishChanges: '変更内容を公開', - published: '公開済み', - publishing: '公開', - restoreThisVersion: 'このバージョンを復元', - restoredSuccessfully: '正常に復元されました。', - restoring: '復元しています...', - revertToPublished: '公開時の内容に戻す', - saveDraft: 'ドラフトを保存', - selectLocales: '表示するロケールを選択', - selectVersionToCompare: '比較するバージョンを選択', - showLocales: 'ロケールを表示:', - status: 'ステータス', - type: 'タイプ', - unpublish: '非公開', - unpublishing: '非公開中...', - version: 'バージョン', - versionCreatedOn: '{{version}} 作成日時:', - versionID: 'バージョンID', - versions: 'バージョン', - viewingVersion: '表示バージョン: {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: '表示バージョン: グローバルな {{entityLabel}}', - viewingVersions: '表示バージョン: {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: '表示バージョン: グローバルな {{entityLabel}}', - }, -} diff --git a/packages/translations/src/_generatedFiles_/client/ko.js b/packages/translations/src/_generatedFiles_/client/ko.js deleted file mode 100644 index 4a6635c390..0000000000 --- a/packages/translations/src/_generatedFiles_/client/ko.js +++ /dev/null @@ -1,288 +0,0 @@ -export default { - authentication: { - account: '계정', - accountOfCurrentUser: '현재 사용자의 계정', - alreadyActivated: '이미 활성화됨', - alreadyLoggedIn: '이미 로그인됨', - backToLogin: '로그인 화면으로 돌아가기', - beginCreateFirstUser: '시작하려면 첫 번째 사용자를 생성하세요.', - changePassword: '비밀번호 변경', - confirmGeneration: '생성 확인', - confirmPassword: '비밀번호 확인', - createFirstUser: '첫 번째 사용자 생성', - emailNotValid: '입력한 이메일은 유효하지 않습니다.', - emailSent: '이메일 전송됨', - enableAPIKey: 'API 키 활성화', - failedToUnlock: '잠금 해제 실패', - forceUnlock: '강제 잠금 해제', - forgotPassword: '비밀번호를 잊으셨나요?', - forgotPasswordEmailInstructions: - '아래에 이메일을 입력하세요. 비밀번호를 재설정하는 방법에 대한 안내가 포함된 이메일 메시지를 받게 될 것입니다.', - forgotPasswordQuestion: '비밀번호를 잊으셨나요?', - generate: '생성', - generateNewAPIKey: '새로운 API 키 생성', - logBackIn: '다시 로그인', - logOut: '로그아웃', - loggedOutInactivity: '보안을 위해 일정 시간 동안 활동하지 않아 로그아웃되었습니다.', - loggedOutSuccessfully: '로그아웃되었습니다.', - login: '로그인', - logout: '로그아웃', - logoutUser: '현재 사용자 로그아웃', - newAPIKeyGenerated: '새로운 API 키가 생성되었습니다.', - newPassword: '새로운 비밀번호', - resetPassword: '비밀번호 재설정', - stayLoggedIn: '로그인 상태 유지', - successfullyUnlocked: '잠금 해제 성공', - unableToVerify: '확인할 수 없음', - verified: '확인됨', - verifiedSuccessfully: '성공적으로 확인됨', - verify: '확인', - verifyUser: '현재 사용자 확인', - youAreInactive: - '잠시 활동하지 않았으며 보안을 위해 곧 자동 로그아웃됩니다. 로그인 상태를 유지하시겠습니까?', - }, - error: { - autosaving: '이 문서를 자동 저장하는 중에 문제가 발생했습니다.', - correctInvalidFields: '입력하신 내용을 확인해주세요.', - deletingTitle: - '{{title}} 삭제하는 중에 오류가 발생했습니다. 인터넷 연결을 확인하고 다시 시도하세요.', - loadingDocument: 'ID가 {{id}}인 문서를 불러오는 중에 문제가 발생했습니다.', - noMatchedField: '"{{label}}"에 대한 일치하는 입력란이 없습니다.', - notAllowedToAccessPage: '이 페이지에 접근할 권한이 없습니다.', - previewing: '이 문서를 미리보는 중에 문제가 발생했습니다.', - unableToDeleteCount: '총 {{total}}개 중 {{count}}개의 {{label}}을(를) 삭제할 수 없습니다.', - unableToUpdateCount: '총 {{total}}개 중 {{count}}개의 {{label}}을(를) 업데이트할 수 없습니다.', - unauthorized: '권한 없음, 이 요청을 수행하려면 로그인해야 합니다.', - unknown: '알 수 없는 오류가 발생했습니다.', - unspecific: '오류가 발생했습니다.', - }, - fields: { - addLabel: '{{label}} 추가', - addLink: '링크 추가', - addNew: '새로 추가', - addNewLabel: '새로운 {{label}} 추가', - addRelationship: '관계 추가', - addUpload: '업로드 추가', - block: '블록', - blockType: '블록 유형', - blocks: '블록', - chooseFromExisting: '기존 항목 중 선택', - collapseAll: '모두 접기', - editLink: '링크 수정', - editRelationship: '관계 수정', - itemsAndMore: '{{items}} 및 {{count}}개 더', - labelRelationship: '{{label}} 관계', - latitude: '위도', - linkedTo: '<0>{{label}}에 연결됨', - longitude: '경도', - passwordsDoNotMatch: '비밀번호가 일치하지 않습니다.', - removeRelationship: '관계 제거', - removeUpload: '제거', - saveChanges: '변경 사항 저장', - searchForBlock: '블록 검색', - selectFieldsToEdit: '수정할 입력란 선택', - showAll: '모두 표시', - swapRelationship: '관계 교체', - swapUpload: '업로드 교체', - toggleBlock: '블록 토글', - uploadNewLabel: '새로운 {{label}} 업로드', - }, - general: { - aboutToDelete: '{{label}} <1>{{title}}를 삭제하려고 합니다. 계속하시겠습니까?', - aboutToDeleteCount_many: '{{label}}를 {{count}}개 삭제하려고 합니다.', - aboutToDeleteCount_one: '{{label}}를 {{count}}개 삭제하려고 합니다.', - aboutToDeleteCount_other: '{{label}}를 {{count}}개 삭제하려고 합니다.', - addBelow: '아래에 추가', - addFilter: '필터 추가', - adminTheme: '관리자 테마', - and: '및', - applyChanges: '변경 사항 적용', - ascending: '오름차순', - automatic: '자동 설정', - backToDashboard: '대시보드로 돌아가기', - cancel: '취소', - changesNotSaved: '변경 사항이 저장되지 않았습니다. 지금 떠나면 변경 사항을 잃게 됩니다.', - close: '닫기', - collapse: '접기', - collections: '컬렉션', - columnToSort: '정렬할 열', - columns: '열', - confirm: '확인', - confirmDeletion: '삭제하시겠습니까?', - confirmDuplication: '복제하시겠습니까?', - copied: '복사됨', - copy: '복사', - create: '생성', - createNew: '새로 생성', - createNewLabel: '새로운 {{label}} 생성', - created: '생성됨', - creating: '생성 중', - creatingNewLabel: '{{label}} 생성 중', - dark: '다크', - dashboard: '대시보드', - delete: '삭제', - deletedCountSuccessfully: '{{count}}개의 {{label}}를 삭제했습니다.', - deleting: '삭제 중...', - descending: '내림차순', - deselectAllRows: '모든 행 선택 해제', - duplicate: '복제', - duplicateWithoutSaving: '변경 사항 저장 없이 복제', - edit: '수정', - editLabel: '{{label}} 수정', - editing: '수정 중', - editingLabel_many: '{{count}}개의 {{label}} 수정 중', - editingLabel_one: '{{count}}개의 {{label}} 수정 중', - editingLabel_other: '{{count}}개의 {{label}} 수정 중', - email: '이메일', - emailAddress: '이메일 주소', - enterAValue: '값을 입력하세요', - error: '오류', - errors: '오류', - fallbackToDefaultLocale: '기본 locale로 대체', - filterWhere: '{{label}} 필터링 조건', - filters: '필터', - globals: '글로벌', - language: '언어', - lastModified: '마지막 수정 일시', - leaveAnyway: '그래도 나가시겠습니까?', - leaveWithoutSaving: '저장하지 않고 나가기', - light: '라이트', - livePreview: '실시간 미리보기', - loading: '불러오는 중', - locale: 'locale', - menu: '메뉴', - moveDown: '아래로 이동', - moveUp: '위로 이동', - noFiltersSet: '설정된 필터 없음', - noLabel: '<{{label}} 없음>', - noOptions: '옵션 없음', - noResults: - '{{label}}를 찾을 수 없습니다. 아직 {{label}}이 없거나 설정한 필터와 일치하는 것이 없습니다.', - noValue: '값 없음', - none: '없음', - notFound: '찾을 수 없음', - nothingFound: '찾을 수 없습니다', - of: '의', - open: '열기', - or: '또는', - order: '순서', - pageNotFound: '페이지를 찾을 수 없음', - password: '비밀번호', - payloadSettings: 'Payload 설정', - perPage: '페이지당 개수: {{limit}}', - remove: '제거', - reset: '초기화', - row: '행', - rows: '행', - save: '저장', - saving: '저장 중...', - searchBy: '{{label}}로 검색', - selectAll: '{{count}}개 {{label}} 모두 선택', - selectAllRows: '모든 행 선택', - selectValue: '값 선택', - selectedCount: '{{count}}개의 {{label}} 선택됨', - showAllLabel: '{{label}} 모두 표시', - sorryNotFound: '죄송합니다. 요청과 일치하는 항목이 없습니다.', - sort: '정렬', - sortByLabelDirection: '{{label}} {{direction}}으로 정렬', - stayOnThisPage: '이 페이지에 머무르기', - submissionSuccessful: '제출이 완료되었습니다.', - submit: '제출', - successfullyCreated: '{{label}}이(가) 생성되었습니다.', - thisLanguage: '한국어', - titleDeleted: '{{label}} "{{title}}"을(를) 삭제했습니다.', - unauthorized: '권한 없음', - unsavedChangesDuplicate: '저장되지 않은 변경 사항이 있습니다. 복제를 계속하시겠습니까?', - untitled: '제목 없음', - updatedAt: '업데이트 일시', - updatedCountSuccessfully: '{{count}}개의 {{label}}을(를) 업데이트했습니다.', - updatedSuccessfully: '성공적으로 업데이트되었습니다.', - updating: '업데이트 중', - welcome: '환영합니다', - }, - operators: { - contains: '포함', - equals: '같음', - exists: '존재', - isGreaterThan: '보다 큼', - isGreaterThanOrEqualTo: '보다 크거나 같음', - isIn: '포함됨', - isLessThan: '보다 작음', - isLessThanOrEqualTo: '보다 작거나 같음', - isLike: '유사', - isNotEqualTo: '같지 않음', - isNotIn: '포함되지 않음', - near: '근처', - }, - upload: { - crop: '자르기', - cropToolDescription: - '선택한 영역의 모퉁이를 드래그하거나 새로운 영역을 그리거나 아래의 값을 조정하세요.', - dragAndDrop: '파일을 끌어다 놓으세요', - editImage: '이미지 수정', - focalPoint: '초점', - focalPointDescription: '미리보기에서 초점을 직접 드래그하거나 아래의 값을 조정하세요.', - height: '높이', - previewSizes: '미리보기 크기', - selectCollectionToBrowse: '찾을 컬렉션 선택', - selectFile: '파일 선택', - setCropArea: '자르기 영역 설정', - setFocalPoint: '초점 설정', - sizesFor: '{{label}} 크기', - width: '너비', - }, - validation: { - fieldHasNo: '이 입력란에는 {{label}}이(가) 없습니다.', - limitReached: '제한에 도달했습니다. {{max}}개 항목만 추가할 수 있습니다.', - required: '이 입력란은 필수입니다.', - requiresAtLeast: '이 입력란운 최소한 {{count}} {{label}}이 필요합니다.', - }, - version: { - aboutToPublishSelection: '선택한 {{label}}을(를) 게시하려고 합니다. 계속하시겠습니까?', - aboutToRestore: '이 {{label}} 문서를 {{versionDate}}기준 버전으로 복원하려고 합니다.', - aboutToRestoreGlobal: '글로벌 {{label}}을(를) {{versionDate}}기준 버전으로 복원하려고 합니다.', - aboutToRevertToPublished: - '이 문서의 변경 사항을 게시된 상태로 되돌리려고 합니다. 계속하시겠습니까?', - aboutToUnpublish: '이 문서를 게시 해제하려고 합니다. 계속하시겠습니까?', - aboutToUnpublishSelection: '선택한 {{label}}을(를) 게시 해제하려고 합니다. 계속하시겠습니까?', - autosave: '자동 저장', - autosavedSuccessfully: '자동 저장이 완료되었습니다.', - changed: '변경됨', - compareVersion: '비교할 버전 선택:', - confirmPublish: '게시하기', - confirmRevertToSaved: '저장된 상태로 되돌리기', - confirmUnpublish: '게시 해제하기', - confirmVersionRestoration: '버전 복원하기', - draft: '초안', - draftSavedSuccessfully: '초안이 저장되었습니다.', - lastSavedAgo: '마지막으로 저장한지 {{distance}} 전', - noFurtherVersionsFound: '더 이상의 버전을 찾을 수 없습니다.', - noRowsFound: '{{label}}을(를) 찾을 수 없음', - preview: '미리보기', - problemRestoringVersion: '이 버전을 복원하는 중 문제가 발생했습니다.', - publish: '게시', - publishChanges: '변경 사항 게시', - published: '게시됨', - publishing: '게시', - restoreThisVersion: '이 버전 복원', - restoredSuccessfully: '복원이 완료되었습니다.', - restoring: '복원 중...', - revertToPublished: '게시된 상태로 되돌리기', - saveDraft: '초안 저장', - selectLocales: '표시할 locale 선택', - selectVersionToCompare: '비교할 버전 선택', - showLocales: 'locale 표시:', - status: '상태', - type: '유형', - unpublish: '게시 해제', - unpublishing: '게시 해제 중...', - version: '버전', - versionCreatedOn: '{{version}} 생성 날짜:', - versionID: '버전 ID', - versions: '버전', - viewingVersion: '{{entityLabel}} {{documentTitle}}의 버전 보기', - viewingVersionGlobal: '글로벌 {{entityLabel}}의 버전 보기', - viewingVersions: '{{entityLabel}} {{documentTitle}}에 대한 버전 보기', - viewingVersionsGlobal: '글로벌 {{entityLabel}}에 대한 버전 보기', - }, -} diff --git a/packages/translations/src/_generatedFiles_/client/my.js b/packages/translations/src/_generatedFiles_/client/my.js deleted file mode 100644 index e0522b2ddb..0000000000 --- a/packages/translations/src/_generatedFiles_/client/my.js +++ /dev/null @@ -1,297 +0,0 @@ -export default { - authentication: { - account: 'အကောင့်', - accountOfCurrentUser: 'သင့် အကောင့်', - alreadyActivated: 'အတည်ပြုပြီး', - alreadyLoggedIn: 'ဝင်ရောက်ပြီးသား', - backToLogin: 'အကောင့်ထဲ ပြန်ဝင်မည်။', - beginCreateFirstUser: 'စတင်နိုင်ရန် ပထမဦးစွာ အသုံးပြုသူအား ဖန်တီးပါ။', - changePassword: 'စကားဝှက် ပြောင်းလဲမည်။', - confirmGeneration: 'Generation အတည်ပြု', - confirmPassword: 'စကားဝှက်အား ထပ်မံ ရိုက်ထည့်ပါ။', - createFirstUser: 'ပထမဆုံး အသုံးပြုသူကို ဖန်တီးပါ။', - emailNotValid: 'ထည့်သွင်းထားသော အီးမေလ်မှာ မှားယွင်းနေပါသည်။', - emailSent: 'မေးလ် ပို့ထားပါသည်။', - enableAPIKey: 'API Key ကိုဖွင့်ရန်', - failedToUnlock: 'လော့ခ်ဖွင့်၍မရပါ။', - forceUnlock: 'လော့ခ်ဖွင့်ရန်', - forgotPassword: 'စကားဝှက် မေ့နေပါသလား။', - forgotPasswordEmailInstructions: - 'ကျေးဇူးပြု၍ သင့်အီးမေးလ်ကို ထည့်သွင်းပါ။ သင့်စကားဝှက်ကို ပြန်လည်သတ်မှတ်နိုင်ရန် အီးမေးလ်စာတစ်စောင်ကို သင်လက်ခံရရှိမည်ဖြစ်သည်။', - forgotPasswordQuestion: 'စကားဝှက် မေ့နေပါသလား။', - generate: 'Generate', - generateNewAPIKey: 'API key အသစ်ဖန်တီးရန်', - logBackIn: 'အကောင့်ထဲ ပြန်ဝင်မည်။', - logOut: 'အကောင့်ထဲက ထွက်မည်။', - loggedOutInactivity: 'လုပ်ဆောင်ချက်မရှိခြင်းကြောင့် သင်သည် ထွက်လိုက်ပါသည်။', - loggedOutSuccessfully: 'သင်သည် အောင်မြင်စွာ ထွက်ပြီးပါပြီ။', - login: 'အကောင့်ထဲ ဝင်မည်။', - logout: 'အကောင့်မှ ထွက်မည်၊', - logoutUser: 'လော့ဂ်အောက် အသုံးပြုသူ', - newAPIKeyGenerated: 'New API Key Generated.', - newPassword: 'စကားဝှက် အသစ်', - resetPassword: 'စကားဝှက် ပြန်လည်သတ်မှတ်', - stayLoggedIn: 'အကောင့်ထဲ ဝင်ထားသည်။', - successfullyUnlocked: 'အောင်မြင်စွာသော့ဖွင့်ခဲ့သည်။', - unableToVerify: 'စိစစ်၍မရပါ။', - verified: 'စိစစ်ပြီး', - verifiedSuccessfully: 'အတည်ပြုပြီးပါပြီ။', - verify: 'စိစစ်ခြင်း', - verifyUser: 'အသုံးပြုသူ စီစစ်ခြင်း', - youAreInactive: - 'သင်သည် အချိန်အနည်းငယ်အတွင်း active မဖြစ်ပါက သင့်အကောင့် လုံခြုံရေးအတွက် မကြာမီ အလိုအလျောက် လော့ဂ်အောက်ဖြစ်ပါမည်။ အကောင့်ထဲ ဆက်နေလိုပါသလား။', - }, - error: { - autosaving: 'ဖိုင်ကို အလိုအလျောက်သိမ်းဆည်းရာတွင် ပြဿနာတစ်ခုရှိနေသည်။', - correctInvalidFields: 'ကျေးဇူးပြု၍ အချက်အလက်များကို ပြန်လည် စစ်ဆေးပါ။', - deletingTitle: - '{{title}} ကို ဖျက်ရာတွင် အမှားအယွင်းရှိခဲ့သည်။ သင့် အင်တာနက်လိုင်းအား စစ်ဆေးပြီး ထပ်မံကြို့စားကြည့်ပါ။', - loadingDocument: '{{id}} ID ဖြင့် ဖိုင်ကို ဖွင့်ရာတွင် ပြဿနာရှိနေသည်။', - noMatchedField: '"{{label}}" အတွက် ကိုက်ညီသောအပိုင်းကို ရှာမတွေ့ပါ။', - notAllowedToAccessPage: 'ဤစာမျက်နှာကို ဝင်ရောက်ခွင့်မပြုပါ။', - previewing: 'ဖိုင်ကို အစမ်းကြည့်ရန် ပြဿနာရှိနေသည်။', - unableToDeleteCount: '{{total}} {{label}} မှ {{count}} ကို ဖျက်၍မရပါ။', - unableToUpdateCount: '{{total}} {{label}} မှ {{count}} ကို အပ်ဒိတ်လုပ်၍မရပါ။', - unauthorized: 'အခွင့်မရှိပါ။ ဤတောင်းဆိုချက်ကို လုပ်ဆောင်နိုင်ရန် သင်သည် လော့ဂ်အင်ဝင်ရပါမည်။', - unknown: 'ဘာမှန်းမသိသော error တက်သွားပါသည်။', - unspecific: 'Error တက်နေပါသည်။', - }, - fields: { - addLabel: '{{label}} ထည့်သွင်းမည်။', - addLink: 'လင့်ခ်ထည့်ပါ။', - addNew: 'အသစ် ထည့်သွင်းမည်။', - addNewLabel: '{{label}} အားအသစ် ထည့်သွင်းမည်။', - addRelationship: 'Relationship အသစ်ထည့်သွင်းမည်။', - addUpload: 'Upload ထည့်ပါ။', - block: 'ဘလောက်', - blockType: 'ဘလောက် အမျိုးအစား', - blocks: 'ဘလောက်များ', - chooseFromExisting: 'ရှိပြီးသားထဲကပဲ ရွေးချယ်ပါ။', - collapseAll: 'အားလုံးကို ခေါက်သိမ်းပါ။', - editLink: 'လင့်ခ်ကို တည်းဖြတ်ပါ။', - editRelationship: 'ဆက်ဆံရေးကို တည်းဖြတ်ပါ။', - itemsAndMore: '{{items}} နှင့် နောက်ထပ် {{count}} ခု', - labelRelationship: '{{label}} Relationship', - latitude: 'vĩ độ', - linkedTo: '<0>{{label}} ချိတ်ဆက်ထားသည်။', - longitude: 'လောင်ဂျီကျု', - passwordsDoNotMatch: 'စကားဝှက်များနှင့် မကိုက်ညီပါ။', - removeRelationship: 'ဆက်ဆံရေးကို ဖယ်ရှားပါ။', - removeUpload: 'အပ်လုဒ်ကို ဖယ်ရှားပါ။', - saveChanges: 'သိမ်းဆည်းမည်။', - searchForBlock: 'ဘလောက်တစ်ခုရှာမည်။', - selectFieldsToEdit: 'တည်းဖြတ်ရန် အကွက်များကို ရွေးပါ။', - showAll: 'အကုန် ကြည့်မည်။', - swapRelationship: 'လဲလှယ်ဆက်ဆံရေး', - swapUpload: 'အပ်လုဒ်ဖလှယ်ပါ။', - toggleBlock: 'ဘလောက်ကို ပြောင်းပါ။', - uploadNewLabel: '{{label}} အသစ်တင်မည်။', - }, - general: { - aboutToDelete: - '{{label}} <1>{{title}} ကို ဖျက်ပါတော့မည်။ သေချာပြီလား။ ဖျက်ပြီးရင် ပြန်မရဘူးနော်။', - aboutToDeleteCount_many: 'သင်သည် {{count}} {{label}} ကို ဖျက်ပါတော့မည်။', - aboutToDeleteCount_one: 'သင်သည် {{count}} {{label}} ကို ဖျက်ပါတော့မည်။', - aboutToDeleteCount_other: 'သင်သည် {{count}} {{label}} ကို ဖျက်ပါတော့မည်။', - addBelow: 'အောက်တွင်ထည့်ပါ။', - addFilter: 'ဇကာထည့်ပါ။', - adminTheme: 'အက်ပ်ဒိုင်များစပ်စွာ', - and: 'နှင့်', - applyChanges: 'ပြောင်းလဲမှုများ အသုံးပြုပါ', - ascending: 'တက်နေသည်', - automatic: 'အော်တို', - backToDashboard: 'ပင်မစာမျက်နှာသို့ ပြန်သွားမည်။', - cancel: 'မလုပ်တော့ပါ။', - changesNotSaved: - 'သင်၏ပြောင်းလဲမှုများကို မသိမ်းဆည်းရသေးပါ။ ယခု စာမျက်နှာက ထွက်လိုက်ပါက သင်၏ပြောင်းလဲမှုများ အကုန် ဆုံးရှုံးသွားပါမည်။ အကုန်နော်။', - close: 'ပိတ်', - collapse: 'ခေါက်သိမ်းပါ။', - collections: 'စုစည်းမှူများ', - columnToSort: 'ကော်လံ စီရန်', - columns: 'ကော်လံများ', - confirm: 'သေချာပါပြီ။', - confirmDeletion: 'ဖျက်တော့မယ်နော်။', - confirmDuplication: 'ပုံတူပွားခြင်းကို အတည်ပြုပါ။', - copied: 'ကူးယူပြီးပြီ။', - copy: 'ကူးယူမည်။', - create: 'ဖန်တီးမည်။', - createNew: 'အသစ် ဖန်တီးမည်။', - createNewLabel: '{{label}} အသစ် ဖန်တီးမည်။', - created: 'ဖန်တီးခဲ့သည်။', - creating: 'ဖန်တီးနေသည်။', - creatingNewLabel: '{{label}} အသစ် ဖန်တီးနေသည်။', - dark: 'အမှောင်', - dashboard: 'ပင်မစာမျက်နှာ', - delete: 'ဖျက်မည်။', - deletedCountSuccessfully: '{{count}} {{label}} ကို အောင်မြင်စွာ ဖျက်လိုက်ပါပြီ။', - deleting: 'ဖျက်နေဆဲ ...', - descending: 'ဆင်းသက်လာသည်။', - deselectAllRows: 'အားလုံးကို မရွေးနိုင်ပါ', - duplicate: 'ပုံတူပွားမည်။', - duplicateWithoutSaving: 'သေချာပါပြီ။', - edit: 'တည်းဖြတ်ပါ။', - editLabel: '{{label}} ပြင်ဆင်မည်။', - editing: 'ပြင်ဆင်နေသည်။', - editingLabel_many: 'တည်းဖြတ်ခြင်း {{count}} {{label}}', - editingLabel_one: 'တည်းဖြတ်ခြင်း {{count}} {{label}}', - editingLabel_other: 'တည်းဖြတ်ခြင်း {{count}} {{label}}', - email: 'အီးမေးလ်', - emailAddress: 'အီးမေးလ် လိပ်စာ', - enterAValue: 'တန်ဖိုးတစ်ခုထည့်ပါ။', - error: 'အမှား', - errors: 'အမှားများ', - fallbackToDefaultLocale: 'မူရင်းဒေသသို့ ပြန်ပြောင်းပါ။', - filterWhere: 'နေရာတွင် စစ်ထုတ်ပါ။', - filters: 'စစ်ထုတ်မှုများ', - globals: 'Globals', - language: 'ဘာသာစကား', - lastModified: 'နောက်ဆုံးပြင်ဆင်ထားသည်။', - leaveAnyway: 'ဘာဖြစ်ဖြစ် ထွက်မည်။', - leaveWithoutSaving: 'မသိမ်းဘဲ ထွက်မည်။', - light: 'အလင်း', - livePreview: 'အစမ်းကြည့်ရန်', - loading: 'ဖွင့်နေသည်', - locale: 'ဒေသ', - menu: 'မီနူး', - moveDown: 'Move Down', - moveUp: 'Move Up', - noFiltersSet: 'စစ်ထုတ်မှုများ မသတ်မှတ်ထားပါ။', - noLabel: '<မရှိ {{label}}>', - noOptions: 'ရွေးချယ်မှုမရှိပါ', - noResults: - '{{label}} မတွေ့ပါ။ {{label}} မရှိသေးသည်ဖြစ်စေ အထက်တွင်ဖော်ပြထားသော စစ်ထုတ်မှုများနှင့် ကိုက်ညီမှုမရှိပါ။', - noValue: 'တန်ဖိုး မရှိပါ။', - none: 'တစ်ခုမှ', - notFound: 'ဘာမှ မရှိတော့ဘူး။', - nothingFound: 'ဘာမှလည်း မတွေ့ဘူး။', - of: '၏', - open: 'ဖွင့်မည်။', - or: 'သို့မဟုတ်', - order: 'အစဉ်လိုက်', - pageNotFound: 'ရောက်ရှိနေသော စာမျက်နှာသည် မရှိပါ။', - password: 'စကားဝှက်', - payloadSettings: 'ရွေးချယ်စရာများ', - perPage: 'စာမျက်နှာ အလိုက်: {{limit}}', - remove: 'ဖယ်ရှားမည်။', - reset: 'Tetapkan semula', - row: 'အတန်း', - rows: 'Rows', - save: 'သိမ်းဆည်းမည်။', - saving: 'သိမ်းနေဆဲ ...', - searchBy: 'ရှာဖွေပါ။', - selectAll: '{{count}} {{label}} အားလုံးကို ရွေးပါ', - selectAllRows: 'အားလုံးကိုရွေးချယ်ပါ', - selectValue: 'တစ်ခုခုကို ရွေးချယ်ပါ။', - selectedCount: '{{count}} {{label}} ကို ရွေးထားသည်။', - showAllLabel: 'Tunjukkan semua {{label}}', - sorryNotFound: 'ဝမ်းနည်းပါသည်။ သင်ရှာနေတဲ့ဟာ ဒီမှာမရှိပါ။', - sort: 'အစဉ်လိုက်', - sortByLabelDirection: 'အစဉ်အလိုက် စီမံခန့်ခွဲထားသည် {{label}} {{direction}}', - stayOnThisPage: 'ဒီမှာပဲ ဆက်နေမည်။', - submissionSuccessful: 'သိမ်းဆည်းမှု အောင်မြင်ပါသည်။', - submit: 'သိမ်းဆည်းမည်။', - successfullyCreated: '{{label}} အောင်မြင်စွာဖန်တီးခဲ့သည်။', - thisLanguage: 'မြန်မာစာ', - titleDeleted: '{{label}} {{title}} အောင်မြင်စွာ ဖျက်သိမ်းခဲ့သည်။', - unauthorized: 'အခွင့်မရှိပါ။', - unsavedChangesDuplicate: - 'သင့်တွင် မသိမ်းဆည်းရသေးသော ပြောင်းလဲမှုများ ရှိနေပါသည်။ ပုံတူပွားမှာ သေချာပြီလား။', - untitled: 'ခေါင်းစဥ်မဲ့', - updatedAt: 'ပြင်ဆင်ခဲ့သည့်အချိန်', - updatedCountSuccessfully: '{{count}} {{label}} ကို အောင်မြင်စွာ အပ်ဒိတ်လုပ်ခဲ့သည်။', - updatedSuccessfully: 'အပ်ဒိတ်လုပ်ပြီးပါပြီ။', - updating: 'ပြင်ဆင်ရန်', - welcome: 'ကြိုဆိုပါတယ်။', - }, - operators: { - contains: 'ပါဝင်သည်', - equals: 'ညီမျှ', - exists: 'တည်ရှိသည်', - isGreaterThan: 'ထက်ကြီးသည်', - isGreaterThanOrEqualTo: 'ထက်ကြီးသည် သို့မဟုတ် ညီမျှသည်', - isIn: 'ရှိ', - isLessThan: 'ထက်နည်းသည်', - isLessThanOrEqualTo: 'ထက်နည်းသည် သို့မဟုတ် ညီမျှသည်', - isLike: 'တူသည်', - isNotEqualTo: 'ညီမျှသည်', - isNotIn: 'မဝင်ပါ', - near: 'နီး', - }, - upload: { - crop: 'သုန်း', - cropToolDescription: - 'ရွေးထားသည့်ဧရိယာတွင်မွေးလျှက်မှုများကိုဆွဲပြီး, အသစ်တည်ပြီးသို့မဟုတ်အောက်ပါတ', - dragAndDrop: 'ဖိုင်တစ်ဖိုင်ကို ဆွဲချလိုက်ပါ။', - editImage: 'ပုံပြင်ပြောင်းရန်', - focalPoint: 'အကန့်အသတ်ချုပ်', - focalPointDescription: - 'ပြသနားရထားသည့်ပုံအားထိန်းသိမ်းရန် ဖိုကယ်ပိုင်းကို တိုက်ရိုက်ပွဲ့နိုင်သည် သို', - height: 'Height', - previewSizes: 'Saiz Pratonton', - selectCollectionToBrowse: 'စုစည်းမှု တစ်ခုခုကို ရွေးချယ်ပါ။', - selectFile: 'ဖိုင်ရွေးပါ။', - setCropArea: 'စပြန်းနယ်မြေထားပါ', - setFocalPoint: 'အစေခံဖောက်ရေစနစ်ကိုသတ်မှတ်ပါ', - sizesFor: '{{label}} အတွက် အရွယ်အစားများ', - width: 'အကျယ်', - }, - validation: { - fieldHasNo: 'ဤအကွက်တွင် {{label}} မရှိပါ။', - limitReached: - 'Had yang dibenarkan telah dicapai, hanya {{max}} item sahaja yang boleh ditambah.', - required: 'ဤအကွက်ကို လိုအပ်သည်။', - requiresAtLeast: 'ဤအကွက်သည် အနည်းဆုံး {{count}} {{label}} လိုအပ်သည်', - }, - version: { - aboutToPublishSelection: - 'သင်သည် ရွေးချယ်မှုတွင် {{label}} အားလုံးကို ထုတ်ဝေပါတော့မည်။ သေချာလား?', - aboutToRestore: - 'သင်သည် ဤ {{label}} စာရွက်စာတမ်းကို {{versionDate}} တွင် ပါရှိသည့် အခြေအနေသို့ ပြန်ယူတော့မည်။', - aboutToRestoreGlobal: - 'သင်သည် ဂလိုဘယ် {{label}} ကို {{versionDate}} တွင် ပါရှိသည့် အခြေအနေသို့ ပြန်လည်ရောက်ရှိတော့မည်ဖြစ်သည်။', - aboutToRevertToPublished: - 'သင်သည် အပြောင်းအလဲများကို အများဆိုင် အခြေအနေသို့ ပြန်ပြောင်းပါတော့မည်။ သေချာလား?', - aboutToUnpublish: 'အများဆိုင်မှ ပြန်ဖြုတ်တော့မည်။ သေချာလား', - aboutToUnpublishSelection: - 'သင်သည် ရွေးချယ်မှုတွင် {{label}} အားလုံးကို ထုတ်ဝေတော့မည် ဖြစ်သည်။ သေချာလား?', - autosave: 'အလိုအလျောက်သိမ်းဆည်းပါ။', - autosavedSuccessfully: 'အလိုအလျောက် သိမ်းဆည်းပြီးပါပြီ။', - changed: 'ပြောင်းခဲ့သည်။', - compareVersion: 'ဗားရှင်းနှင့် နှိုင်းယှဉ်ချက်:', - confirmPublish: 'ထုတ်ဝေအတည်ပြုပါ။', - confirmRevertToSaved: 'သိမ်းဆည်းပြီးကြောင်း အတည်ပြုပါ။', - confirmUnpublish: 'အများဆိုင်ကို ဖျက်ရန် အတည်ပြုပါ။', - confirmVersionRestoration: 'ဗားရှင်းပြန်လည် အသုံးပြုခြင်းကို အတည်ပြုပါ။', - draft: 'မူကြမ်း', - draftSavedSuccessfully: 'မူကြမ်းကို အောင်မြင်စွာ သိမ်းဆည်းပြီးပါပြီ။', - lastSavedAgo: 'နောက်ဆုံး သိမ်းချက် {{distance}} ကြာပြီး', - noFurtherVersionsFound: 'နောက်ထပ်ဗားရှင်းများ မတွေ့ပါ။', - noRowsFound: '{{label}} အားမတွေ့ပါ။', - preview: 'နမူနာပြရန်', - problemRestoringVersion: 'ဤဗားရှင်းကို ပြန်လည်ရယူရာတွင် ပြဿနာရှိနေသည်။', - publish: 'ထုတ်ဝေသည်။', - publishChanges: 'အပြောင်းအလဲများကို တင်ခဲ့သည်။', - published: 'တင်ပြီးပြီ။', - publishing: 'ထုတ်ဝေခြင်း', - restoreThisVersion: 'ဤဗားရှင်းကိုကို ပြန်ယူမည်။', - restoredSuccessfully: 'အောင်မြင်စွာ ပြန်လည်ရယူခဲ့သည်။', - restoring: 'ပြန်ယူနေဆဲ...', - revertToPublished: 'အများဆိုင်သို့ ပြန်ပြောင်းပါ။', - saveDraft: 'မှုကြမ်းကို သိမ်းဆည်းမည်။', - selectLocales: 'ပြသရန် ဒေသန္တရများကို ရွေးပါ။', - selectVersionToCompare: 'နှိုင်းယှဉ်ရန် ဗားရှင်းကို ရွေးပါ။', - showLocales: 'ဒေသန္တရများကိုပြပါ။:', - status: 'အခြေအနေ', - type: 'အမျိုးအစား', - unpublish: 'ပြန်ဖြုတ်မည်။', - unpublishing: 'ပြန်ဖြုတ်နေဆဲ ...', - version: 'ဗားရှင်း', - versionCreatedOn: '{{version}} အား ဖန်တီးခဲ့သည်။', - versionID: 'ဗားရှင်း ID', - versions: 'ဗားရှင်းများ', - viewingVersion: '{{entityLabel}} {{documentTitle}} အတွက် ဗားရှင်းကို ကြည့်ရှုနေသည်', - viewingVersionGlobal: '`ဂလိုဘယ်ဆိုင်ရာ {entityLabel}} အတွက် ဗားရှင်းကို ကြည့်ရှုနေသည်', - viewingVersions: '{{entityLabel}} {{documentTitle}} အတွက် ဗားရှင်းများကို ကြည့်ရှုခြင်း', - viewingVersionsGlobal: '`ဂလိုဘယ်ဆိုင်ရာ {{entityLabel}} အတွက် ဗားရှင်းများကို ကြည့်ရှုနေသည်', - }, -} diff --git a/packages/translations/src/_generatedFiles_/client/nb.js b/packages/translations/src/_generatedFiles_/client/nb.js deleted file mode 100644 index b7b71d5deb..0000000000 --- a/packages/translations/src/_generatedFiles_/client/nb.js +++ /dev/null @@ -1,294 +0,0 @@ -export default { - authentication: { - account: 'Konto', - accountOfCurrentUser: 'Konto til nåværende bruker', - alreadyActivated: 'Allerede aktivert', - alreadyLoggedIn: 'Allerede logget inn', - backToLogin: 'Tilbake til innlogging', - beginCreateFirstUser: 'Opprett din første bruker for å fortsette.', - changePassword: 'Endre passord', - confirmGeneration: 'Bekreft generering', - confirmPassword: 'Bekreft passord', - createFirstUser: 'Opprett første bruker', - emailNotValid: 'E-posten er ikke gyldig', - emailSent: 'E-post sendt', - enableAPIKey: 'Aktiver API-nøkkel', - failedToUnlock: 'Kunne ikke låse opp', - forceUnlock: 'Tving opplåsing', - forgotPassword: 'Glemt passord', - forgotPasswordEmailInstructions: - 'Skriv inn e-postadressen din nedenfor, og vi vil sende deg en e-post med instruksjoner om hvordan du tilbakestiller passordet ditt.', - forgotPasswordQuestion: 'Glemt passord?', - generate: 'Generer', - generateNewAPIKey: 'Generer ny API-nøkkel', - logBackIn: 'Logg inn igjen', - logOut: 'Logg ut', - loggedOutInactivity: 'Du har blitt logget ut på grunn av inaktivitet.', - loggedOutSuccessfully: 'Du har blitt logget ut.', - login: 'Logg inn', - logout: 'Logg ut', - logoutUser: 'Logg ut bruker', - newAPIKeyGenerated: 'Ny API-nøkkel generert.', - newPassword: 'Nytt passord', - resetPassword: 'Tilbakestill passord', - stayLoggedIn: 'Forbli logget inn', - successfullyUnlocked: 'Låst opp', - unableToVerify: 'Kunne ikke bekrefte', - verified: 'Bekreftet', - verifiedSuccessfully: 'Bekreftet', - verify: 'Bekreft', - verifyUser: 'Bekreft bruker', - youAreInactive: - 'Du har ikke vært aktiv i en stund, og vil snart bli logget ut automatisk for din egen sikkerhet. Vil du forbli innlogget?', - }, - error: { - autosaving: 'Det oppstod et problem under automatisk lagring av dokumentet.', - correctInvalidFields: 'Korriger ugyldige felt.', - deletingTitle: - 'Det oppstod en feil under sletting av {{title}}. Sjekk tilkoblingen og prøv igjen.', - loadingDocument: 'Det oppstod et problem under lasting av dokumentet med ID {{id}}.', - noMatchedField: 'Ingen matchende felt funnet for "{{label}}"', - notAllowedToAccessPage: 'Du har ikke tilgang til denne siden.', - previewing: 'Det oppstod et problem under forhåndsvisning av dokumentet.', - unableToDeleteCount: 'Kan ikke slette {{count}} av {{total}} {{label}}.', - unableToUpdateCount: 'Kan ikke oppdatere {{count}} av {{total}} {{label}}.', - unauthorized: 'Uautorisert, du må være innlogget for å gjøre denne forespørselen.', - unknown: 'En ukjent feil har oppstått.', - unspecific: 'En feil har oppstått.', - }, - fields: { - addLabel: 'Legg til {{label}}', - addLink: 'Legg til Lenke', - addNew: 'Legg til ny', - addNewLabel: 'Legg til ny {{label}}', - addRelationship: 'Legg til Relasjon', - addUpload: 'Legg til Opplasting', - block: 'blokk', - blockType: 'Blokktype', - blocks: 'blokker', - chooseFromExisting: 'Velg fra eksisterende', - collapseAll: 'Skjul alle', - editLink: 'Rediger lenke', - editRelationship: 'Rediger relasjon', - itemsAndMore: '{{items}} og {{count}} flere', - labelRelationship: '{{label}}-relasjon', - latitude: 'Breddegrad', - linkedTo: 'Lenket til <0>{{label}}', - longitude: 'Lengdegrad', - passwordsDoNotMatch: 'Passordene er ikke like.', - removeRelationship: 'Fjern Forhold', - removeUpload: 'Fjern Opplasting', - saveChanges: 'Lagre endringer', - searchForBlock: 'Søk etter en blokk', - selectFieldsToEdit: 'Velg felt som skal redigeres', - showAll: 'Vis alle', - swapRelationship: 'Bytte Forhold', - swapUpload: 'Bytt Opplasting', - toggleBlock: 'Veksle blokk', - uploadNewLabel: 'Last opp ny {{label}}', - }, - general: { - aboutToDelete: 'Du er i ferd med å slette {{label}} <1>{{title}}. Er du sikker?', - aboutToDeleteCount_many: 'Du er i ferd med å slette {{count}} {{label}}', - aboutToDeleteCount_one: 'Du er i ferd med å slette {{count}} {{label}}', - aboutToDeleteCount_other: 'Du er i ferd med å slette {{count}} {{label}}', - addBelow: 'Legg til under', - addFilter: 'Legg til filter', - adminTheme: 'Admin-tema', - and: 'Og', - applyChanges: 'Bruk endringer', - ascending: 'Stigende', - automatic: 'Automatisk', - backToDashboard: 'Tilbake til kontrollpanel', - cancel: 'Avbryt', - changesNotSaved: - 'Endringene dine er ikke lagret. Hvis du forlater nå, vil du miste endringene dine.', - close: 'Lukk', - collapse: 'Skjul', - collections: 'Samlinger', - columnToSort: 'Kolonne å sortere', - columns: 'Kolonner', - confirm: 'Bekreft', - confirmDeletion: 'Bekreft sletting', - confirmDuplication: 'Bekreft duplisering', - copied: 'Kopiert', - copy: 'Kopiér', - create: 'Opprett', - createNew: 'Opprett ny', - createNewLabel: 'Opprett ny {{label}}', - created: 'Opprettet', - creating: 'Oppretter', - creatingNewLabel: 'Oppretter ny {{label}}', - dark: 'Mørk', - dashboard: 'Kontrollpanel', - delete: 'Slett', - deletedCountSuccessfully: 'Slettet {{count}} {{label}}.', - deleting: 'Sletter...', - descending: 'Synkende', - deselectAllRows: 'Fjern markeringen fra alle rader', - duplicate: 'Dupliser', - duplicateWithoutSaving: 'Dupliser uten å lagre endringer', - edit: 'Redigere', - editLabel: 'Rediger {{label}}', - editing: 'Redigerer', - editingLabel_many: 'Redigerer {{count}} {{label}}', - editingLabel_one: 'Redigerer {{count}} {{label}}', - editingLabel_other: 'Redigerer {{count}} {{label}}', - email: 'E-post', - emailAddress: 'E-postadresse', - enterAValue: 'Skriv inn en verdi', - error: 'Feil', - errors: 'Feil', - fallbackToDefaultLocale: 'Tilbakestilling til standard lokalitet', - filterWhere: 'Filtrer {{label}} der', - filters: 'Filter', - globals: 'Globale variabler', - language: 'Språk', - lastModified: 'Sist endret', - leaveAnyway: 'Forlat likevel', - leaveWithoutSaving: 'Forlat uten å lagre', - light: 'Lys', - livePreview: 'Forhåndsvisning', - loading: 'Laster', - locale: 'Lokalitet', - menu: 'Meny', - moveDown: 'Flytt ned', - moveUp: 'Flytt opp', - noFiltersSet: 'Ingen filtre satt', - noLabel: '', - noOptions: 'Ingen alternativer', - noResults: - 'Ingen {{label}} funnet. Enten finnes det ingen {{label}} enda eller ingen matcher filterne du har spesifisert ovenfor.', - noValue: 'Ingen verdi', - none: 'Ingen', - notFound: 'Ikke funnet', - nothingFound: 'Ingenting funnet', - of: 'av', - open: 'Åpne', - or: 'Eller', - order: 'Rekkefølge', - pageNotFound: 'Siden ble ikke funnet', - password: 'Passord', - payloadSettings: 'Payload-innstillinger', - perPage: 'Per side: {{limit}}', - remove: 'Fjern', - reset: 'Tilbakestill', - row: 'Rad', - rows: 'Rader', - save: 'Lagre', - saving: 'Lagrer...', - searchBy: 'Søk etter {{label}}', - selectAll: 'Velg alle {{count}} {{label}}', - selectAllRows: 'Velg alle rader', - selectValue: 'Velg en verdi', - selectedCount: '{{count}} {{label}} valgt', - showAllLabel: 'Vis alle {{label}}', - sorryNotFound: 'Beklager, det er ingenting som samsvarer med forespørselen din.', - sort: 'Sortér', - sortByLabelDirection: 'Sorter etter {{label}} {{direction}}', - stayOnThisPage: 'Bli på denne siden', - submissionSuccessful: 'Innsending vellykket.', - submit: 'Send inn', - successfullyCreated: '{{label}} ble opprettet.', - thisLanguage: 'Norsk', - titleDeleted: '{{label}} "{{title}}" ble slettet.', - unauthorized: 'Ikke autorisert', - unsavedChangesDuplicate: 'Du har ulagrede endringer. Vil du fortsette å duplisere?', - untitled: 'Uten tittel', - updatedAt: 'Oppdatert', - updatedCountSuccessfully: 'Oppdaterte {{count}} {{label}} vellykket.', - updatedSuccessfully: 'Oppdatert.', - updating: 'Oppdatering', - welcome: 'Velkommen', - }, - operators: { - contains: 'contains', - equals: 'lik', - exists: 'eksisterer', - isGreaterThan: 'er større enn', - isGreaterThanOrEqualTo: 'er større enn eller lik', - isIn: 'er i', - isLessThan: 'er mindre enn', - isLessThanOrEqualTo: 'er mindre enn eller lik', - isLike: 'er som', - isNotEqualTo: 'er ikke lik', - isNotIn: 'er ikke med', - near: 'nær', - }, - upload: { - crop: 'Beskjær', - cropToolDescription: - 'Dra hjørnene av det valgte området, tegn et nytt område eller juster verdiene nedenfor.', - dragAndDrop: 'Dra og slipp en fil', - editImage: 'Rediger bilde', - focalPoint: 'Fokuspunkt', - focalPointDescription: - 'Dra fokuspunktet direkte på forhåndsvisningen eller juster verdiene nedenfor.', - height: 'Høyde', - previewSizes: 'Forhåndsvisningsstørrelser', - selectCollectionToBrowse: 'Velg en samling å bla i', - selectFile: 'Velg en fil', - setCropArea: 'Angi beskjæringsområde', - setFocalPoint: 'Angi fokuspunkt', - sizesFor: 'Størrelser for {{label}}', - width: 'Bredde', - }, - validation: { - fieldHasNo: 'Dette feltet har ingen {{label}}', - limitReached: 'Begrensning nådd, bare {{max}} elementer kan legges til.', - required: 'Dette feltet er påkrevd.', - requiresAtLeast: 'Dette feltet krever minst {{count}} {{label}}.', - }, - version: { - aboutToPublishSelection: - 'Du er i ferd med å publisere alle {{label}} i utvalget. Er du sikker?', - aboutToRestore: - 'Du er i ferd med å gjenopprette denne {{label}} dokumentet til tilstanden det var i på {{versionDate}}.', - aboutToRestoreGlobal: - 'Du er i ferd med å gjenopprette den globale variabelen {{label}} til tilstanden det var i på {{versionDate}}.', - aboutToRevertToPublished: - 'Du er i ferd med å tilbakestille endringene i dette dokumentet til den publiserte tilstanden. Er du sikker?', - aboutToUnpublish: 'Du er i ferd med å avpublisere dette dokumentet. Er du sikker?', - aboutToUnpublishSelection: - 'Du er i ferd med å oppheve publiseringen av alle {{label}} i utvalget. Er du sikker?', - autosave: 'Lagre automatisk', - autosavedSuccessfully: 'Lagret automatisk.', - changed: 'Endret', - compareVersion: 'Sammenlign versjon mot:', - confirmPublish: 'Bekreft publisering', - confirmRevertToSaved: 'Bekreft tilbakestilling til lagret', - confirmUnpublish: 'Bekreft avpublisering', - confirmVersionRestoration: 'Bekreft versjon-gjenoppretting', - draft: 'Utkast', - draftSavedSuccessfully: 'Utkast lagret.', - lastSavedAgo: 'Sist lagret {{distance}} siden', - noFurtherVersionsFound: 'Ingen flere versjoner funnet', - noRowsFound: 'Ingen {{label}} funnet', - preview: 'Forhåndsvisning', - problemRestoringVersion: 'Det oppstod et problem med gjenoppretting av denne versjonen', - publish: 'Publisere', - publishChanges: 'Publiser endringer', - published: 'Publisert', - publishing: 'Publisering', - restoreThisVersion: 'Gjenopprett denne versjonen', - restoredSuccessfully: 'Gjenopprettet.', - restoring: 'Gjenoppretter...', - revertToPublished: 'Tilbakestill til publisert', - saveDraft: 'Lagre utkast', - selectLocales: 'Velg språk å vise', - selectVersionToCompare: 'Velg en versjon å sammenligne', - showLocales: 'Vis språk:', - status: 'Status', - type: 'Type', - unpublish: 'Avpubliser', - unpublishing: 'Avpubliserer...', - version: 'Versjon', - versionCreatedOn: '{{version}} opprettet:', - versionID: 'Versjons-ID', - versions: 'Versjoner', - viewingVersion: 'Viser versjon for {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: 'Viser versjon for den globale variabelen {{entityLabel}}', - viewingVersions: 'Viser versjoner for {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: 'Viser versjoner for den globale variabelen {{entityLabel}}', - }, -} diff --git a/packages/translations/src/_generatedFiles_/client/nl.js b/packages/translations/src/_generatedFiles_/client/nl.js deleted file mode 100644 index 68cb075a13..0000000000 --- a/packages/translations/src/_generatedFiles_/client/nl.js +++ /dev/null @@ -1,296 +0,0 @@ -export default { - authentication: { - account: 'Account', - accountOfCurrentUser: 'Account van huidige gebruiker', - alreadyActivated: 'Al geactiveerd', - alreadyLoggedIn: 'Al ingelogd', - backToLogin: 'Terug naar inloggen', - beginCreateFirstUser: 'Om te beginnen maakt u uw eerste gebruiker aan.', - changePassword: 'Wachtwoord wijzigen', - confirmGeneration: 'Bevestigen', - confirmPassword: 'Wachtwoord bevestigen', - createFirstUser: 'Eerste gebruiker aanmaken', - emailNotValid: 'Het ingevoerde e-mailadres is niet geldig', - emailSent: 'E-mail verzonden', - enableAPIKey: 'Activeer API-sleutel', - failedToUnlock: 'Ontgrendeling mislukt', - forceUnlock: 'Forceer ontgrendeling', - forgotPassword: 'Wachtwoord vergeten', - forgotPasswordEmailInstructions: - 'Vul hieronder uw e-mailadres in. U ontvangt een e-mailbericht met instructies om uw wachtwoord opnieuw in te stellen.', - forgotPasswordQuestion: 'Wachtwoord vergeten?', - generate: 'Genereren', - generateNewAPIKey: 'Genereer nieuwe API-sleutel', - logBackIn: 'Opnieuw inloggen', - logOut: 'Uitloggen', - loggedOutInactivity: 'U bent uitgelogd wegens inactiviteit.', - loggedOutSuccessfully: 'U bent succesvol uitgelogd.', - login: 'Inloggen', - logout: 'Uitloggen', - logoutUser: 'Gebruiker uitloggen', - newAPIKeyGenerated: 'Nieuwe API-sleutel is gegenereerd.', - newPassword: 'Nieuw wachtwoord', - resetPassword: 'Wachtwoord herstellen', - stayLoggedIn: 'Ingelogd blijven', - successfullyUnlocked: 'Succesvol ontgrendeld', - unableToVerify: 'Verificatie niet mogelijk', - verified: 'Geverifieerd', - verifiedSuccessfully: 'Succesvol geverifieerd', - verify: 'Verifiëren', - verifyUser: 'Gebruiker verifiëren', - youAreInactive: - 'U bent al een tijdje niet meer actief geweest en wordt binnenkort voor uw eigen veiligheid automatisch uitgelogd. Wilt u ingelogd blijven?', - }, - error: { - autosaving: 'Er is een probleem opgetreden bij het automatisch bewaren van dit document.', - correctInvalidFields: 'Gelieve de ongeldige velden te corrigeren.', - deletingTitle: - 'Er is een fout opgetreden tijdens het verwijderen van {{title}}. Controleer uw verbinding en probeer het opnieuw.', - loadingDocument: 'Er was een probleem met het laden van het document met ID {{id}}.', - noMatchedField: 'Geen overeenkomend veld gevonden voor "{{label}}"', - notAllowedToAccessPage: 'U hebt geen toegang tot deze pagina.', - previewing: 'Er was een probleem met het voorvertonen van dit document.', - unableToDeleteCount: 'Kan {{count}} van {{total}} {{label}} niet verwijderen.', - unableToUpdateCount: 'Kan {{count}} van {{total}} {{label}} niet updaten.', - unauthorized: 'Ongeautoriseerd, u moet ingelogd zijn om dit verzoek te doen.', - unknown: 'Er is een onbekende fout opgetreden.', - unspecific: 'Er is een fout opgetreden.', - }, - fields: { - addLabel: 'Voeg {{label}} toe', - addLink: 'Voeg een link toe', - addNew: 'Nieuw(e)', - addNewLabel: 'Nieuw(e) {{label}} toevoegen', - addRelationship: 'Nieuwe Relatie', - addUpload: 'Upload Toevoegen', - block: 'blok', - blockType: 'Bloktype', - blocks: 'blokken', - chooseFromExisting: 'Kies uit bestaande', - collapseAll: 'Alles samenvouwen', - editLink: 'Link bewerken', - editRelationship: 'Relatie Relatie', - itemsAndMore: '{{items}} en {{count}} meer', - labelRelationship: '{{label}} relatie', - latitude: 'Breedtegraad', - linkedTo: 'Gekoppeld aan aan <0>{{label}}', - longitude: 'Lengtegraad', - passwordsDoNotMatch: 'Wachtwoorden komen niet overeen.', - removeRelationship: 'Relatie Verwijderen', - removeUpload: 'Verwijder Upload', - saveChanges: 'Bewaar aanpassingen', - searchForBlock: 'Zoeken naar een blok', - selectFieldsToEdit: 'Selecteer velden om te bewerken', - showAll: 'Alles tonen', - swapRelationship: 'Relatie Wisselen', - swapUpload: 'Upload Verwisselen', - toggleBlock: 'Blok togglen', - uploadNewLabel: 'Upload nieuw(e) {{label}}', - }, - general: { - aboutToDelete: - 'U staat op het punt om {{label}} <1>{{title}} te verwijderen. Weet u het zeker?', - aboutToDeleteCount_many: 'Je staat op het punt {{count}} {{label}} te verwijderen', - aboutToDeleteCount_one: 'Je staat op het punt {{count}} {{label}} te verwijderen', - aboutToDeleteCount_other: 'Je staat op het punt {{count}} {{label}} te verwijderen', - addBelow: 'Onderaan toevoegen', - addFilter: 'Filter toevoegen', - adminTheme: 'Adminthema', - and: 'En', - applyChanges: 'Breng wijzigingen aan', - ascending: 'Oplopend', - automatic: 'Automatisch', - backToDashboard: 'Terug naar dashboard', - cancel: 'Annuleren', - changesNotSaved: - 'Uw wijzigingen zijn niet bewaard. Als u weggaat zullen de wijzigingen verloren gaan.', - close: 'Dichtbij', - collapse: 'Samenvouwen', - collections: 'Collecties', - columnToSort: 'Kolom om te sorteren', - columns: 'Kolommen', - confirm: 'Bevestigen', - confirmDeletion: 'Bevestig verwijdering', - confirmDuplication: 'Bevestig duplicatie', - copied: 'Gekopieerd', - copy: 'Kopiëren', - create: 'Aanmaken', - createNew: 'Nieuw aanmaken', - createNewLabel: 'Nieuw(e) {{label}} aanmaken', - created: 'Aangemaakt', - creating: 'Aanmaken', - creatingNewLabel: 'Nieuw(e) {{label}} aanmaken', - dark: 'Donker', - dashboard: 'Dashboard', - delete: 'Verwijderen', - deletedCountSuccessfully: '{{count}} {{label}} succesvol verwijderd.', - deleting: 'Verwijderen...', - descending: 'Aflopend', - deselectAllRows: 'Deselecteer alle rijen', - duplicate: 'Dupliceren', - duplicateWithoutSaving: 'Dupliceren zonder wijzigingen te bewaren', - edit: 'Bewerk', - editLabel: 'Bewerk {{label}}', - editing: 'Bewerken', - editingLabel_many: 'Bewerken {{count}} {{label}}', - editingLabel_one: 'Bewerken {{count}} {{label}}', - editingLabel_other: 'Bewerken {{count}} {{label}}', - email: 'E-mail', - emailAddress: 'E-maildres', - enterAValue: 'Waarde invoeren', - error: 'Fout', - errors: 'Fouten', - fallbackToDefaultLocale: 'Terugval naar standaardtaal', - filterWhere: 'Filter {{label}} waar', - filters: 'Filters', - globals: 'Globalen', - language: 'Taal', - lastModified: 'Laatst gewijzigd', - leaveAnyway: 'Toch weggaan', - leaveWithoutSaving: 'Verlaten zonder op te slaan', - light: 'Licht', - livePreview: 'Voorbeeld', - loading: 'Laden', - locale: 'Taal', - menu: 'Menu', - moveDown: 'Verplaats naar beneden', - moveUp: 'Verplaats naar boven', - noFiltersSet: 'Geen filters ingesteld', - noLabel: 'Geen "{{label}}"', - noOptions: 'Geen opties', - noResults: - 'Geen {{label}} gevonden. Of er bestaat nog geen {{label}}, of niets komt overeen met de hierboven gespecifieerde filters.', - noValue: 'Geen waarde', - none: 'Niets', - notFound: 'Niet gevonden', - nothingFound: 'Niets gevonden', - of: 'van', - open: 'Open', - or: 'Of', - order: 'Volgorde', - pageNotFound: 'Pagina niet gevonden', - password: 'Wachtwoord', - payloadSettings: 'Payload Instellingen', - perPage: 'Per pagina: {{limit}}', - remove: 'Verwijderen', - reset: 'Resetten', - row: 'Rij', - rows: 'Rijen', - save: 'Bewaar', - saving: 'Bewaren...', - searchBy: 'Zoeken op {{label}}', - selectAll: 'Alles selecteren {{count}} {{label}}', - selectAllRows: 'Selecteer alle rijen', - selectValue: 'Selecteer een waarde', - selectedCount: '{{count}} {{label}} geselecteerd', - showAllLabel: 'Toon alle {{label}}', - sorryNotFound: 'Sorry, er is niets dat overeen komt met uw verzoek.', - sort: 'Sorteer', - sortByLabelDirection: 'Sorteer op {{label}} {{direction}}', - stayOnThisPage: 'Blijf op deze pagina', - submissionSuccessful: 'Indiening succesvol.', - submit: 'Indienen', - successfullyCreated: '{{label}} succesvol aangemaakt.', - thisLanguage: 'Nederlands', - titleDeleted: '{{label}} "{{title}}" succesvol verwijderd.', - unauthorized: 'Onbevoegd', - unsavedChangesDuplicate: 'U heeft onbewaarde wijzigingen. Wilt u doorgaan met dupliceren?', - untitled: 'Zonder titel', - updatedAt: 'Aangepast op', - updatedCountSuccessfully: '{{count}} {{label}} succesvol bijgewerkt.', - updatedSuccessfully: 'Succesvol aangepast.', - updating: 'Bijwerken', - welcome: 'Welkom', - }, - operators: { - contains: 'bevat', - equals: 'is gelijk aan', - exists: 'bestaat', - isGreaterThan: 'is groter dan', - isGreaterThanOrEqualTo: 'is groter dan of gelijk aan', - isIn: 'is binnen', - isLessThan: 'is kleiner dan', - isLessThanOrEqualTo: 'is kleiner dan of gelijk aan', - isLike: 'is als', - isNotEqualTo: 'is niet gelijk aan', - isNotIn: 'zit er niet in', - near: 'nabij', - }, - upload: { - crop: 'Bijsnijden', - cropToolDescription: - 'Sleep de hoeken van het geselecteerde gebied, teken een nieuw gebied of pas de waarden hieronder aan.', - dragAndDrop: 'Sleep een bestand', - editImage: 'Afbeelding bewerken', - focalPoint: 'Focuspunt', - focalPointDescription: - 'Sleep het focuspunt rechtstreeks op de voorvertoning of pas de waarden hieronder aan.', - height: 'Hoogte', - previewSizes: 'Voorbeeldgroottes', - selectCollectionToBrowse: 'Selecteer een collectie om door te bladeren', - selectFile: 'Selecteer een bestand', - setCropArea: 'Stel bijsnijdgebied in', - setFocalPoint: 'Stel het brandpunt in', - sizesFor: 'Maten voor {{label}}', - width: 'Breedte', - }, - validation: { - fieldHasNo: 'Dit veld heeft geen {{label}}', - limitReached: 'Limiet bereikt, er kunnen slechts {{max}} items worden toegevoegd.', - required: 'Dit veld is verplicht.', - requiresAtLeast: 'Dit veld vereist minstens {{count}} {{label}}.', - }, - version: { - aboutToPublishSelection: - 'Je staat op het punt om alle {{label}} in de selectie te publiceren. Weet je het zeker?', - aboutToRestore: - 'U staat op het punt dit {{label}} document te herstellen in de staat waarin het zich bevond op {{versionDate}}.', - aboutToRestoreGlobal: - 'U staat op het punt om de global {{label}} te herstellen in de staat waarin het zich bevond op {{versionDate}}.', - aboutToRevertToPublished: - 'U staat op het punt om de wijzigingen van dit document terug te draaien naar de gepubliceerde staat. Weet u het zeker?', - aboutToUnpublish: - 'U staat op het punt om de publicatie van dit document ongedaan te maken. Weet u het zeker?', - aboutToUnpublishSelection: - 'You are about to unpublish all {{label}} in the selection. Are you sure?', - autosave: 'Automatisch bewaren', - autosavedSuccessfully: 'Succesvol automatisch bewaard.', - changed: 'Gewijzigd', - compareVersion: 'Vergelijk versie met:', - confirmPublish: 'Bevestig publiceren', - confirmRevertToSaved: 'Bevestig terugdraaien naar bewaarde versie', - confirmUnpublish: 'Bevestig depubliceren', - confirmVersionRestoration: 'Bevestig te herstellen versie', - draft: 'Concept', - draftSavedSuccessfully: 'Concept succesvol bewaard.', - lastSavedAgo: 'Laatst opgeslagen {{distance}} geleden', - noFurtherVersionsFound: 'Geen verdere versies gevonden', - noRowsFound: 'Geen {{label}} gevonden', - preview: 'Voorbeeld', - problemRestoringVersion: 'Er was een probleem bij het herstellen van deze versie', - publish: 'Publiceren', - publishChanges: 'Publiceer wijzigingen', - published: 'Gepubliceerd', - publishing: 'Publicatie', - restoreThisVersion: 'Herstel deze versie', - restoredSuccessfully: 'Herstelling succesvol.', - restoring: 'Herstellen...', - revertToPublished: 'Terugdraaien naar gepubliceerde versie', - saveDraft: 'Bewaar concept', - selectLocales: 'Selecteer locales om weer te geven', - selectVersionToCompare: 'Selecteer een versie om te vergelijken', - showLocales: 'Toon locales:', - status: 'Status', - type: 'Type', - unpublish: 'Publicatie ongedaan maken', - unpublishing: 'Publicatie ongedaan maken...', - version: 'Versie', - versionCreatedOn: '{{version}} aangemaakt op:', - versionID: 'Versie-ID', - versions: 'Versies', - viewingVersion: 'Bekijk versie voor {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: 'Bekijk versie voor global {{entityLabel}}', - viewingVersions: 'Bekijk versies voor {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: '`Bekijk versies voor global {{entityLabel}}', - }, -} diff --git a/packages/translations/src/_generatedFiles_/client/pl.js b/packages/translations/src/_generatedFiles_/client/pl.js deleted file mode 100644 index 2803e81de4..0000000000 --- a/packages/translations/src/_generatedFiles_/client/pl.js +++ /dev/null @@ -1,293 +0,0 @@ -export default { - authentication: { - account: 'Konto', - accountOfCurrentUser: 'Konto bieżącego użytkownika', - alreadyActivated: 'Już aktywowano', - alreadyLoggedIn: 'Już zalogowano', - backToLogin: 'Powrót do logowania', - beginCreateFirstUser: 'Aby rozpocząć, utwórz pierwszego użytkownika', - changePassword: 'Zmień hasło', - confirmGeneration: 'Potwierdź wygenerowanie', - confirmPassword: 'Potwierdź hasło', - createFirstUser: 'Utwórz pierwszego użytkownika', - emailNotValid: 'Podany email jest nieprawidłowy', - emailSent: 'Wysłano email', - enableAPIKey: 'Aktywuj klucz API', - failedToUnlock: 'Nie udało się odblokować', - forceUnlock: 'Wymuś odblokowanie', - forgotPassword: 'Zresetuj hasło', - forgotPasswordEmailInstructions: - 'Proszę podaj swój email. Otrzymasz wiadomość z instrukcjami, jak zresetować hasło.', - forgotPasswordQuestion: 'Nie pamiętasz hasła?', - generate: 'Wygeneruj', - generateNewAPIKey: 'Wygeneruj nowy klucz API', - logBackIn: 'Zaloguj się ponownie', - logOut: 'Wyloguj', - loggedOutInactivity: 'Zostałeś wylogowany z powodu braku aktywności.', - loggedOutSuccessfully: 'Zostałeś pomyślnie wylogowany.', - login: 'Zaloguj', - logout: 'Wyloguj', - logoutUser: 'Wyloguj użytkownika', - newAPIKeyGenerated: 'Wygenerowano nowy klucz API.', - newPassword: 'Nowe hasło', - resetPassword: 'Zresetuj hasło', - stayLoggedIn: 'Pozostań zalogowany', - successfullyUnlocked: 'Pomyślnie odblokowano', - unableToVerify: 'Nie można zweryfikować', - verified: 'Zweryfikowano', - verifiedSuccessfully: 'Pomyślnie zweryfikowany', - verify: 'Zweryfikuj', - verifyUser: 'Zweryfikuj użytkownika', - youAreInactive: - 'Nie byłeś aktywny od dłuższego czasu i wkrótce zostaniesz automatycznie wylogowany dla własnego bezpieczeństwa. Czy chcesz pozostać zalogowany?', - }, - error: { - autosaving: 'Wystąpił problem podczas automatycznego zapisywania tego dokumentu.', - correctInvalidFields: 'Popraw nieprawidłowe pola.', - deletingTitle: - 'Wystąpił błąd podczas usuwania {{title}}. Proszę, sprawdź swoje połączenie i spróbuj ponownie.', - loadingDocument: 'Wystapił problem podczas ładowania dokumentu o ID {{id}}.', - noMatchedField: 'Nie znaleziono pasującego pola dla "{{label}}"', - notAllowedToAccessPage: 'Nie masz dostępu do tej strony.', - previewing: 'Wystąpił problem podczas podglądu tego dokumentu.', - unableToDeleteCount: 'Nie można usunąć {{count}} z {{total}} {{label}}.', - unableToUpdateCount: 'Nie można zaktualizować {{count}} z {{total}} {{label}}.', - unauthorized: 'Brak dostępu, musisz być zalogowany.', - unknown: 'Wystąpił nieznany błąd.', - unspecific: 'Wystąpił błąd', - }, - fields: { - addLabel: 'Dodaj {{label}}', - addLink: 'Dodaj Link', - addNew: 'Dodaj nowy', - addNewLabel: 'Dodaj nowy {{label}}', - addRelationship: 'Dodaj Relację', - addUpload: 'Dodaj ładowanie', - block: 'Blok', - blockType: 'Typ Bloku', - blocks: 'Bloki', - chooseFromExisting: 'Wybierz z istniejących', - collapseAll: 'Zwiń wszystko', - editLink: 'Edytuj Link', - editRelationship: 'Edytuj Relację', - itemsAndMore: '{{items}} i {{count}} więcej', - labelRelationship: 'Relacja {{label}}', - latitude: 'Szerokość', - linkedTo: 'Połączony z <0>{{label}}', - longitude: 'Długość geograficzna', - passwordsDoNotMatch: 'Hasła nie pasują', - removeRelationship: 'Usuń Relację', - removeUpload: 'Usuń Wrzucone', - saveChanges: 'Zapisz zmiany', - searchForBlock: 'Szukaj bloku', - selectFieldsToEdit: 'Wybierz pola do edycji', - showAll: 'Pokaż wszystkie', - swapRelationship: 'Zamiana Relacji', - swapUpload: 'Zamień Wrzucone', - toggleBlock: 'Przełącz blok', - uploadNewLabel: 'Wrzuć nowy {{label}}', - }, - general: { - aboutToDelete: 'Zamierzasz usunąć {{label}} <1>{{title}}. Jesteś pewien?', - aboutToDeleteCount_many: 'Zamierzasz usunąć {{count}} {{label}}', - aboutToDeleteCount_one: 'Zamierzasz usunąć {{count}} {{label}}', - aboutToDeleteCount_other: 'Zamierzasz usunąć {{count}} {{label}}', - addBelow: 'Dodaj poniżej', - addFilter: 'Dodaj filtr', - adminTheme: 'Motyw administratora', - and: 'i', - applyChanges: 'Zastosuj zmiany', - ascending: 'Rosnąco', - automatic: 'Automatyczny', - backToDashboard: 'Powrót do panelu', - cancel: 'Anuluj', - changesNotSaved: - 'Twoje zmiany nie zostały zapisane. Jeśli teraz wyjdziesz, stracisz swoje zmiany.', - close: 'Zamknij', - collapse: 'Zwiń', - collections: 'Kolekcje', - columnToSort: 'Kolumna sortowania', - columns: 'Kolumny', - confirm: 'Potwierdź', - confirmDeletion: 'Potwierdź usunięcie', - confirmDuplication: 'Potwierdź duplikację', - copied: 'Skopiowano', - copy: 'Skopiuj', - create: 'Stwórz', - createNew: 'Stwórz nowy', - createNewLabel: 'Stwórz nowy {{label}}', - created: 'Utworzono', - creating: 'Tworzenie', - creatingNewLabel: 'Tworzenie nowego {{label}}', - dark: 'Ciemny', - dashboard: 'Panel', - delete: 'Usuń', - deletedCountSuccessfully: 'Pomyślnie usunięto {{count}} {{label}}.', - deleting: 'Usuwanie...', - descending: 'Malejąco', - deselectAllRows: 'Odznacz wszystkie wiersze', - duplicate: 'Zduplikuj', - duplicateWithoutSaving: 'Zduplikuj bez zapisywania zmian', - edit: 'Edytuj', - editLabel: 'Edytuj {{label}}', - editing: 'Edycja', - editingLabel_many: 'Edytowanie {{count}} {{label}}', - editingLabel_one: 'Edytowanie {{count}} {{label}}', - editingLabel_other: 'Edytowanie {{count}} {{label}}', - email: 'Email', - emailAddress: 'Adres email', - enterAValue: 'Wpisz wartość', - error: 'Błąd', - errors: 'Błędy', - fallbackToDefaultLocale: 'Powrót do domyślnych ustawień regionalnych', - filterWhere: 'Filtruj gdzie', - filters: 'Filtry', - globals: 'Globalne', - language: 'Język', - lastModified: 'Ostatnio zmodyfikowany', - leaveAnyway: 'Wyjdź mimo to', - leaveWithoutSaving: 'Wyjdź bez zapisywania', - light: 'Jasny', - livePreview: 'Podgląd', - loading: 'Ładowanie', - locale: 'Ustawienia regionalne', - menu: 'Menu', - moveDown: 'Przesuń niżej', - moveUp: 'Przesuń wyżej', - noFiltersSet: 'Brak ustawionych filtrów', - noLabel: '', - noOptions: 'Brak opcji', - noResults: - 'Nie znaleziono {{label}}. Być może {{label}} jeszcze nie istnieje, albo żaden nie pasuje do filtrów określonych powyżej.', - noValue: 'Brak wartości', - none: 'Nic', - notFound: 'Nie znaleziono', - nothingFound: 'Nic nie znaleziono', - of: 'z', - open: 'Otwórz', - or: 'lub', - order: 'Kolejność', - pageNotFound: 'Strona nie znaleziona', - password: 'Hasło', - payloadSettings: 'Ustawienia Payload', - perPage: 'Na stronę: {{limit}}', - remove: 'Usuń', - reset: 'Zresetuj', - row: 'Wiersz', - rows: 'Wiersze', - save: 'Zapisz', - saving: 'Zapisywanie...', - searchBy: 'Szukaj według', - selectAll: 'Wybierz wszystkie {{count}} {{label}}', - selectAllRows: 'Wybierz wszystkie wiersze', - selectValue: 'Wybierz wartość', - selectedCount: 'Wybrano {{count}} {{label}}', - showAllLabel: 'Pokaż wszystkie {{label}}', - sorryNotFound: 'Przepraszamy — nie ma nic, co odpowiadałoby twojemu zapytaniu.', - sort: 'Sortuj', - sortByLabelDirection: 'Sortuj według {{label}} {{direction}}', - stayOnThisPage: 'Pozostań na stronie', - submissionSuccessful: 'Zgłoszenie zakończone powodzeniem.', - submit: 'Zatwierdź', - successfullyCreated: 'Pomyślnie utworzono {{label}}.', - thisLanguage: 'Polski', - titleDeleted: 'Pomyślnie usunięto {{label}} {{title}}', - unauthorized: 'Brak autoryzacji', - unsavedChangesDuplicate: 'Masz niezapisane zmiany. Czy chcesz kontynuować duplikowanie?', - untitled: 'Bez nazwy', - updatedAt: 'Data edycji', - updatedCountSuccessfully: 'Pomyślnie zaktualizowano {{count}} {{label}}.', - updatedSuccessfully: 'Aktualizacja zakończona sukcesem.', - updating: 'Aktualizacja', - welcome: 'Witaj', - }, - operators: { - contains: 'zawiera', - equals: 'równe', - exists: 'istnieje', - isGreaterThan: 'jest większy niż', - isGreaterThanOrEqualTo: 'jest większe lub równe', - isIn: 'jest w', - isLessThan: 'jest mniejsze niż', - isLessThanOrEqualTo: 'jest mniejsze lub równe', - isLike: 'jest jak', - isNotEqualTo: 'nie jest równe', - isNotIn: 'nie ma go w', - near: 'blisko', - }, - upload: { - crop: 'Przytnij', - cropToolDescription: - 'Przeciągnij narożniki wybranego obszaru, narysuj nowy obszar lub dostosuj poniższe wartości.', - dragAndDrop: 'Przeciągnij i upuść plik', - editImage: 'Edytuj obraz', - focalPoint: 'Punkt centralny', - focalPointDescription: - 'Przeciągnij punkt centralny bezpośrednio na podglądzie lub dostosuj wartości poniżej.', - height: 'Wysokość', - previewSizes: 'Rozmiary podglądu', - selectCollectionToBrowse: 'Wybierz kolekcję aby przejrzeć', - selectFile: 'Wybierz plik', - setCropArea: 'Ustaw obszar kadrowania', - setFocalPoint: 'Ustawić punkt ogniskowy', - sizesFor: 'Rozmiary dla {{label}}', - width: 'Szerokość', - }, - validation: { - fieldHasNo: 'To pole nie posiada {{label}}', - limitReached: 'Osiągnięto limit, można dodać tylko {{max}} elementów.', - required: 'To pole jest wymagane.', - requiresAtLeast: 'To pole wymaga co najmniej {{count}} {{label}}.', - }, - version: { - aboutToPublishSelection: - 'Za chwilę opublikujesz wszystkie {{label}} w zaznaczeniu. Jesteś pewny?', - aboutToRestore: - 'Zamierzasz przywrócić dokument {{label}} do stanu, w jakim znajdował się w dniu {{versionDate}}.', - aboutToRestoreGlobal: - 'Zamierzasz przywrócić globalny rekord {{label}} do stanu, w którym znajdował się w dniu {{versionDate}}.', - aboutToRevertToPublished: - 'Zamierzasz przywrócić zmiany w tym dokumencie do stanu opublikowanego. Jesteś pewien?', - aboutToUnpublish: 'Zamierzasz cofnąć publikację tego dokumentu. Jesteś pewien?', - aboutToUnpublishSelection: - 'Zamierzasz cofnąć publikację wszystkich {{label}} w zaznaczeniu. Jesteś pewny?', - autosave: 'Autozapis', - autosavedSuccessfully: 'Pomyślnie zapisano automatycznie.', - changed: 'Zmieniono', - compareVersion: 'Porównaj wersję z:', - confirmPublish: 'Potwierdź publikację', - confirmRevertToSaved: 'Potwierdź powrót do zapisanego', - confirmUnpublish: 'Potwierdź cofnięcie publikacji', - confirmVersionRestoration: 'Potwierdź przywrócenie wersji', - draft: 'Szkic', - draftSavedSuccessfully: 'Wersja robocza została pomyślnie zapisana.', - lastSavedAgo: 'Ostatnio zapisane {{distance}} temu', - noFurtherVersionsFound: 'Nie znaleziono dalszych wersji', - noRowsFound: 'Nie znaleziono {{label}}', - preview: 'Podgląd', - problemRestoringVersion: 'Wystąpił problem podczas przywracania tej wersji', - publish: 'Publikuj', - publishChanges: 'Opublikuj zmiany', - published: 'Opublikowano', - restoreThisVersion: 'Przywróć tę wersję', - restoredSuccessfully: 'Przywrócono pomyślnie.', - restoring: 'Przywracanie...', - revertToPublished: 'Przywróć do opublikowanego', - saveDraft: 'Zapisz szkic', - selectLocales: 'Wybierz ustawienia regionalne do wyświetlenia', - selectVersionToCompare: 'Wybierz wersję do porównania', - showLocales: 'Pokaż ustawienia regionalne:', - status: 'Status', - type: 'Typ', - unpublish: 'Cofnij publikację', - unpublishing: 'Cofanie publikacji...', - version: 'Wersja', - versionCreatedOn: 'Wersja {{version}} utworzona:', - versionID: 'ID wersji', - versions: 'Wersje', - viewingVersion: 'Przeglądanie wersji dla {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: 'Przeglądanie wersji dla globalnej kolekcji {{entityLabel}}', - viewingVersions: 'Przeglądanie wersji {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: 'Przeglądanie wersji dla globalnej kolekcji {{entityLabel}}', - }, -} diff --git a/packages/translations/src/_generatedFiles_/client/pt.js b/packages/translations/src/_generatedFiles_/client/pt.js deleted file mode 100644 index 410c18a14a..0000000000 --- a/packages/translations/src/_generatedFiles_/client/pt.js +++ /dev/null @@ -1,294 +0,0 @@ -export default { - authentication: { - account: 'Conta', - accountOfCurrentUser: 'Conta do usuário ativo', - alreadyActivated: 'Conta já ativada', - alreadyLoggedIn: 'Login já realizado', - backToLogin: 'Voltar para login', - beginCreateFirstUser: 'Para começar, crie seu primeiro usuário.', - changePassword: 'Mudar senha', - confirmGeneration: 'Confirmar Geração', - confirmPassword: 'Confirmar Senha', - createFirstUser: 'Criar primeiro usuário', - emailNotValid: 'O email fornecido não é válido', - emailSent: 'Email Enviado', - enableAPIKey: 'Habilitar Chave API', - failedToUnlock: 'Falha ao desbloquear', - forceUnlock: 'Forçar Desbloqueio', - forgotPassword: 'Esqueci a senha', - forgotPasswordEmailInstructions: - 'Por favor, preencha seu email abaixo. Você receberá um email com instruções para gerar uma nova senha', - forgotPasswordQuestion: 'Esqueceu a senha?', - generate: 'Gerar', - generateNewAPIKey: 'Gerar nova chave API', - logBackIn: 'Fazer login novamente', - logOut: 'Log out', - loggedOutInactivity: 'Você foi desconectado devido a inatividade.', - loggedOutSuccessfully: 'Log out efetuado com sucesso.', - login: 'Login', - logout: 'Logout', - logoutUser: 'Encerrar sessão', - newAPIKeyGenerated: 'Nova Chave API Gerada.', - newPassword: 'Nova Senha', - resetPassword: 'Redefinir Senha', - stayLoggedIn: 'Manter sessão ativa', - successfullyUnlocked: 'Desbloqueado com sucesso', - unableToVerify: 'Não foi possível verificar', - verified: 'Verificado', - verifiedSuccessfully: 'Verificado com Sucesso', - verify: 'Verificar', - verifyUser: 'Verificar Usuário', - youAreInactive: - 'Você não está ativo há algum tempo e sua sessão será automaticamente finalizada em breve, para sua própria segurança. Você gostaria de manter a sessão ativa?', - }, - error: { - autosaving: 'Ocorreu um problema ao salvar automaticamente esse documento.', - correctInvalidFields: 'Por favor, corrija os campos inválidos.', - deletingTitle: - 'Ocorreu um erro ao excluir {{title}}. Por favor, verifique sua conexão e tente novamente.', - loadingDocument: 'Ocorreu um problema ao carregar o documento com ID {{id}}.', - noMatchedField: 'Não foi encontrado nenhum campo correspondente a "{{label}}"', - notAllowedToAccessPage: 'Você não tem permissão para acessar essa página.', - previewing: 'Ocorreu um problema ao visualizar esse documento.', - unableToDeleteCount: 'Não é possível excluir {{count}} de {{total}} {{label}}.', - unableToUpdateCount: 'Não foi possível atualizar {{count}} de {{total}} {{label}}.', - unauthorized: 'Não autorizado. Você deve estar logado para fazer essa requisição', - unknown: 'Ocorreu um erro desconhecido.', - unspecific: 'Ocorreu um erro.', - }, - fields: { - addLabel: 'Adicionar {{label}}', - addLink: 'Adicionar Link', - addNew: 'Adicionar novo', - addNewLabel: 'Adicionar novo {{label}}', - addRelationship: 'Adicionar Relação', - addUpload: 'Adicionar Upload', - block: 'bloco', - blockType: 'Tipo de bloco', - blocks: 'blocos', - chooseFromExisting: 'Escolher entre os existentes', - collapseAll: 'Recolher todos', - editLink: 'Editar Link', - editRelationship: 'Editar Relacionamento', - itemsAndMore: '{{items}} e mais {{count}}', - labelRelationship: 'Relacionado a {{label}}', - latitude: 'Latitude', - linkedTo: 'Ligado a <0>{{label}}', - longitude: 'Longitude', - passwordsDoNotMatch: 'Senhas não coincidem.', - removeRelationship: 'Remover Relacionamento', - removeUpload: 'Remover Upload', - saveChanges: 'Salvar alterações', - searchForBlock: 'Procurar bloco', - selectFieldsToEdit: 'Selecione os campos para editar', - showAll: 'Mostrar Tudo', - swapRelationship: 'Relação de Troca', - swapUpload: 'Substituir Upload', - toggleBlock: 'Alternar bloco', - uploadNewLabel: 'Carregar novo(a) {{label}}', - }, - general: { - aboutToDelete: 'Você está prestes a excluir o/a {{label}} <1>{{title}}. Tem certeza?', - aboutToDeleteCount_many: 'Você está prestes a deletar {{count}} {{label}}', - aboutToDeleteCount_one: 'Você está prestes a deletar {{count}} {{label}}', - aboutToDeleteCount_other: 'Você está prestes a deletar {{count}} {{label}}', - addBelow: 'Adicionar abaixo', - addFilter: 'Adicionar Filtro', - adminTheme: 'Tema do Admin', - and: 'E', - applyChanges: 'Aplicar alterações', - ascending: 'Ascendente', - automatic: 'Automático', - backToDashboard: 'Voltar para Painel de Controle', - cancel: 'Cancelar', - changesNotSaved: - 'Suas alterações não foram salvas. Se você sair agora, essas alterações serão perdidas.', - close: 'Fechar', - collapse: 'Recolher', - collections: 'Coleções', - columnToSort: 'Coluna para Ordenar', - columns: 'Colunas', - confirm: 'Confirmar', - confirmDeletion: 'Confirmar exclusão', - confirmDuplication: 'Confirmar duplicação', - copied: 'Copiado', - copy: 'Copiar', - create: 'Criar', - createNew: 'Criar Novo', - createNewLabel: 'Criar novo(a) {{label}}', - created: 'Criado', - creating: 'Criando', - creatingNewLabel: 'Criando novo(a) {{label}}', - dark: 'Escuro', - dashboard: 'Painel de Controle', - delete: 'Excluir', - deletedCountSuccessfully: 'Excluído {{count}} {{label}} com sucesso.', - deleting: 'Excluindo...', - descending: 'Decrescente', - deselectAllRows: 'Desmarcar todas as linhas', - duplicate: 'Duplicar', - duplicateWithoutSaving: 'Duplicar sem salvar alterações', - edit: 'Editar', - editLabel: 'Editar {{label}}', - editing: 'Editando', - editingLabel_many: 'Editando {{count}} {{label}}', - editingLabel_one: 'Editando {{count}} {{label}}', - editingLabel_other: 'Editando {{count}} {{label}}', - email: 'Email', - emailAddress: 'Endereço de Email', - enterAValue: 'Insira um valor', - error: 'Erro', - errors: 'Erros', - fallbackToDefaultLocale: 'Recuo para o local padrão', - filterWhere: 'Filtrar {{label}} em que', - filters: 'Filtros', - globals: 'Globais', - language: 'Idioma', - lastModified: 'Última modificação', - leaveAnyway: 'Sair mesmo assim', - leaveWithoutSaving: 'Sair sem salvar', - light: 'Claro', - livePreview: 'Pré-visualização', - loading: 'Carregando', - locale: 'Local', - menu: 'Cardápio', - moveDown: 'Mover para Baixo', - moveUp: 'Mover para Cima', - noFiltersSet: 'Nenhum filtro definido', - noLabel: '', - noOptions: 'Sem opções', - noResults: - 'Nenhum {{label}} encontrado. Ou nenhum(a) {{label}} existe ainda, ou nenhum(a) corresponde aos filtros que você especificou acima.', - noValue: 'Nenhum valor', - none: 'Nenhum', - notFound: 'Não Encontrado', - nothingFound: 'Nada encontrado', - of: 'de', - open: 'Abrir', - or: 'Ou', - order: 'Ordem', - pageNotFound: 'Página não encontrada', - password: 'Senha', - payloadSettings: 'Configurações do Payload', - perPage: 'Itens por Página: {{limit}}', - remove: 'Remover', - reset: 'Redefinir', - row: 'Linha', - rows: 'Linhas', - save: 'Salvar', - saving: 'Salvando...', - searchBy: 'Buscar por {{label}}', - selectAll: 'Selecione tudo {{count}} {{label}}', - selectAllRows: 'Selecione todas as linhas', - selectValue: 'Selecione um valor', - selectedCount: '{{count}} {{label}} selecionado', - showAllLabel: 'Mostre todos {{label}}', - sorryNotFound: 'Desculpe—não há nada que corresponda à sua requisição.', - sort: 'Ordenar', - sortByLabelDirection: 'Ordenar por {{label}} {{direction}}', - stayOnThisPage: 'Permanecer nessa página', - submissionSuccessful: 'Envio bem-sucedido.', - submit: 'Enviar', - successfullyCreated: '{{label}} criado com sucesso.', - thisLanguage: 'Português', - titleDeleted: '{{label}} {{title}} excluído com sucesso.', - unauthorized: 'Não autorizado', - unsavedChangesDuplicate: 'Você tem mudanças não salvas. Você gostaria de continuar a duplicar?', - untitled: 'Sem título', - updatedAt: 'Atualizado Em', - updatedCountSuccessfully: 'Atualizado {{count}} {{label}} com sucesso.', - updatedSuccessfully: 'Atualizado com sucesso.', - updating: 'Atualizando', - welcome: 'Boas vindas', - }, - operators: { - contains: 'contém', - equals: 'igual', - exists: 'existe', - isGreaterThan: 'é maior que', - isGreaterThanOrEqualTo: 'é maior ou igual a', - isIn: 'está em', - isLessThan: 'é menor que', - isLessThanOrEqualTo: 'é menor ou igual a', - isLike: 'é como', - isNotEqualTo: 'não é igual a', - isNotIn: 'não está em', - near: 'perto', - }, - upload: { - crop: 'Cultura', - cropToolDescription: - 'Arraste as bordas da área selecionada, desenhe uma nova área ou ajuste os valores abaixo.', - dragAndDrop: 'Arraste e solte um arquivo', - editImage: 'Editar imagem', - focalPoint: 'Ponto Focal', - focalPointDescription: - 'Arraste o ponto focal diretamente na pré-visualização ou ajuste os valores abaixo.', - height: 'Altura', - previewSizes: 'Tamanhos de Pré-visualização', - selectCollectionToBrowse: 'Selecione uma Coleção para Navegar', - selectFile: 'Selecione um arquivo', - setCropArea: 'Definir área de corte', - setFocalPoint: 'Definir ponto focal', - sizesFor: 'Tamanhos para {{label}}', - width: 'Largura', - }, - validation: { - fieldHasNo: 'Esse campo não contém {{label}}', - limitReached: 'Limite atingido, apenas {{max}} itens podem ser adicionados.', - required: 'Esse campo é obrigatório.', - requiresAtLeast: 'Esse campo requer no máximo {{count}} {{label}}.', - }, - version: { - aboutToPublishSelection: - 'Você está prestes a publicar todos os {{label}} da seleção. Tem certeza?', - aboutToRestore: - 'Você está prestes a restaurar o documento {{label}} para o estado em que ele se encontrava em {{versionDate}}.', - aboutToRestoreGlobal: - 'Você está prestes a restaurar o Global {{label}} para o estado em que ele se encontrava em {{versionDate}}.', - aboutToRevertToPublished: - 'Você está prestes a reverter as alterações desse documento para seu estado de publicação. Tem certeza?', - aboutToUnpublish: 'Você está prestes a despublicar esse documento. Tem certeza?', - aboutToUnpublishSelection: - 'Você está prestes a cancelar a publicação de todos os {{label}} na seleção. Tem certeza?', - autosave: 'Salvamento automático', - autosavedSuccessfully: 'Salvamento automático com sucesso.', - changed: 'Alterado', - compareVersion: 'Comparar versão com:', - confirmPublish: 'Confirmar publicação', - confirmRevertToSaved: 'Confirmar a reversão para o salvo', - confirmUnpublish: 'Confirmar despublicação', - confirmVersionRestoration: 'Confirmar Restauração de versão', - draft: 'Rascunho', - draftSavedSuccessfully: 'Rascunho salvo com sucesso.', - lastSavedAgo: 'Última gravação há {{distance}}', - noFurtherVersionsFound: 'Nenhuma outra versão encontrada', - noRowsFound: 'Nenhum(a) {{label}} encontrado(a)', - preview: 'Pré-visualização', - problemRestoringVersion: 'Ocorreu um problema ao restaurar essa versão', - publish: 'Publicar', - publishChanges: 'Publicar alterações', - published: 'Publicado', - publishing: 'Publicação', - restoreThisVersion: 'Restaurar essa versão', - restoredSuccessfully: 'Restaurado com sucesso.', - restoring: 'Restaurando...', - revertToPublished: 'Reverter para publicado', - saveDraft: 'Salvar rascunho', - selectLocales: 'Selecione as localizações para exibir', - selectVersionToCompare: 'Selecione uma versão para comparar', - showLocales: 'Exibir localizações:', - status: 'Status', - type: 'Tipo', - unpublish: 'Despublicar', - unpublishing: 'Despublicando...', - version: 'Versão', - versionCreatedOn: '{{version}} criada em:', - versionID: 'ID da versão', - versions: 'Versões', - viewingVersion: 'Visualizando versão para o/a {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: '`Visualizando versão para o global {{entityLabel}}', - viewingVersions: 'Visualizando versões para o/a {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: '`Visualizando versões para o global {{entityLabel}}', - }, -} diff --git a/packages/translations/src/_generatedFiles_/client/ro.js b/packages/translations/src/_generatedFiles_/client/ro.js deleted file mode 100644 index 1cad047bb5..0000000000 --- a/packages/translations/src/_generatedFiles_/client/ro.js +++ /dev/null @@ -1,293 +0,0 @@ -export default { - authentication: { - account: 'Cont', - accountOfCurrentUser: 'Contul utilizatorului curent', - alreadyActivated: 'Deja activat', - alreadyLoggedIn: 'Deja autorizat', - backToLogin: 'Înapoi la login', - beginCreateFirstUser: 'Pentru a începe, creați primul utilizator.', - changePassword: 'Schimbați parola', - confirmGeneration: 'Confirmați generarea', - confirmPassword: 'Confirmați parola', - createFirstUser: 'Creați primul utilizator', - emailNotValid: 'Emailul furnizat nu este valid', - emailSent: 'Email trimis', - enableAPIKey: 'Activați cheia API', - failedToUnlock: 'Nu s-a reușit deblocarea', - forceUnlock: 'Forțați deblocarea', - forgotPassword: 'Am uitat parola', - forgotPasswordEmailInstructions: - 'Vă rugăm să introduceți emailul dumneavoastră mai jos. Veți primi un mesaj de email cu instrucțiuni despre cum să vă resetați parola.', - forgotPasswordQuestion: 'Ați uitat parola?', - generate: 'Generează', - generateNewAPIKey: 'Generează o nouă cheie API', - logBackIn: 'Autentificați-vă din nou', - logOut: 'Deconectează-te', - loggedOutInactivity: 'Ați fost deconectat din cauza inactivității.', - loggedOutSuccessfully: 'Ați fost deconectat cu succes.', - login: 'Autentificare', - logout: 'Ieșire', - logoutUser: 'Deconectați utilizatorul', - newAPIKeyGenerated: 'Cheie nouă API generată.', - newPassword: 'Parolă nouă', - resetPassword: 'Resetează parola', - stayLoggedIn: 'Rămâneți conectat', - successfullyUnlocked: 'Deblocat cu succes', - unableToVerify: 'Nu se poate verifica', - verified: 'Verificat', - verifiedSuccessfully: 'Verificat cu succes', - verify: 'Verifică', - verifyUser: 'Verifică utilizatorul', - youAreInactive: - 'Nu ați mai fost activ de ceva timp și în scurt timp veți fi deconectat automat pentru propria dvs. securitate. Doriți să rămâneți conectat(ă)?', - }, - error: { - autosaving: 'A existat o problemă în timpul salvării automate a acestui document.', - correctInvalidFields: 'Vă rugăm să corectați datele invalide.', - deletingTitle: - 'S-a produs o eroare în timpul ștergerii {{title}}. Vă rugăm să verificați conexiunea și să încercați din nou.', - loadingDocument: 'A existat o problemă la încărcarea documentului cu ID-ul de {{id}}.', - noMatchedField: 'Nu s-a găsit niciun câmp corespunzător pentru "{{label}}"', - notAllowedToAccessPage: 'Nu aveți voie să accesați această pagină.', - previewing: 'A existat o problemă la previzualizarea acestui document.', - unableToDeleteCount: 'Nu se poate șterge {{count}} din {{total}} {{label}}.', - unableToUpdateCount: 'Nu se poate șterge {{count}} din {{total}} {{label}}.', - unauthorized: 'neautorizat, trebuie să vă conectați pentru a face această cerere.', - unknown: 'S-a produs o eroare necunoscută.', - unspecific: 'S-a produs o eroare.', - }, - fields: { - addLabel: 'Adăugați {{label}}', - addLink: 'Adăugați un link', - addNew: 'Adăugați un nou', - addNewLabel: 'Adăugați un nou {{label}}', - addRelationship: 'Adăugați o relație', - addUpload: 'Adăugați un fișier', - block: 'bloc', - blockType: 'Tip de bloc', - blocks: 'Blocuri', - chooseFromExisting: 'Alegeți dintre cele existente', - collapseAll: 'Colapsează toate', - editLink: 'Editați Link-ul', - editRelationship: 'Editați relația', - itemsAndMore: '{{items}} şi {{count}} mai multe', - labelRelationship: 'Relația cu {{label}}', - latitude: 'Latitudine', - linkedTo: 'Legat de <0>{{label}}', - longitude: 'Longitudine', - passwordsDoNotMatch: 'Parolele nu corespund.', - removeRelationship: 'Eliminați relația', - removeUpload: 'Eliminați încărcarea', - saveChanges: 'Salvați modificările', - searchForBlock: 'Căutați un bloc', - selectFieldsToEdit: 'Selectați câmpurile de editat', - showAll: 'Afișați toate', - swapRelationship: 'Schimbați relația', - swapUpload: 'Schimbați Încărcarea', - toggleBlock: 'Toggle bloc', - uploadNewLabel: 'Încărcați un nou {{label}}', - }, - general: { - aboutToDelete: 'Sunteți pe cale să ștergeți {{label}} <1>{{title}}. Sunteți sigur?', - aboutToDeleteCount_many: 'Sunteți pe cale să ștergeți {{count}} {{label}}', - aboutToDeleteCount_one: 'Sunteți pe cale să ștergeți {{count}} {{label}}', - aboutToDeleteCount_other: 'Sunteți pe cale să ștergeți {{count}} {{label}}', - addBelow: 'Adaugă mai jos', - addFilter: 'Adaugă filtru', - adminTheme: 'Tema Admin', - and: 'Şi', - applyChanges: 'Aplicați modificările', - ascending: 'Ascendant', - automatic: 'Automat', - backToDashboard: 'Înapoi la panoul de bord', - cancel: 'Anulați', - changesNotSaved: - 'Modificările dvs. nu au fost salvate. Dacă plecați acum, vă veți pierde modificările.', - close: 'Închide', - collapse: 'Colaps', - collections: 'Colecții', - columnToSort: 'Coloana de sortat', - columns: 'Coloane', - confirm: 'Confirmați', - confirmDeletion: 'Confirmați ștergerea', - confirmDuplication: 'Confirmați duplicarea', - copied: 'Copiat', - copy: 'Copiați', - create: 'Creează', - createNew: 'Creați unul nou', - createNewLabel: 'Creați un nou {{label}}', - created: 'Creat', - creating: 'Creare', - creatingNewLabel: 'Crearea unui nou {{label}}', - dark: 'Dark', - dashboard: 'Panoul de bord', - delete: 'Șterge', - deletedCountSuccessfully: 'Șterse cu succes {{count}} {{label}}.', - deleting: 'Deleting...', - descending: 'Descendentă', - deselectAllRows: 'Deselectează toate rândurile', - duplicate: 'Duplicați', - duplicateWithoutSaving: 'Duplicați fără salvarea modificărilor', - edit: 'Editează', - editLabel: 'Editați {{label}}', - editing: 'Editare', - editingLabel_many: 'Editare {{count}} {{label}}', - editingLabel_one: 'Editare {{count}} {{label}}', - editingLabel_other: 'Editare {{count}} {{label}}', - email: 'Email', - emailAddress: 'Adresa de email', - enterAValue: 'Introduceți o valoare', - error: 'Eroare', - errors: 'Erori', - fallbackToDefaultLocale: 'Revenire la locația implicită', - filterWhere: 'Filtrează {{label}} unde', - filters: 'Filtre', - globals: 'Globale', - language: 'Limba', - lastModified: 'Ultima modificare', - leaveAnyway: 'Pleacă oricum', - leaveWithoutSaving: 'Plecare fără a salva', - light: 'Light', - livePreview: 'Previzualizare', - loading: 'Încărcare', - locale: 'Localitate', - menu: 'Meniu', - moveDown: 'Mutați în jos', - moveUp: 'Mutați în sus', - noFiltersSet: 'Nici un filtru setat', - noLabel: '', - noOptions: 'Fără opțiuni', - noResults: - 'Nici un {{label}} găsit. Fie nu există încă niciun {{label}}, fie niciunul nu se potrivește cu filtrele pe care le-ați specificat mai sus..', - noValue: 'Nici o valoare', - none: 'Nici unul', - notFound: 'Nu a fost găsit', - nothingFound: 'Nimic găsit', - of: 'de', - open: 'Deschide', - or: 'Sau', - order: 'ORdine', - pageNotFound: 'Pagina nu a fost găsită', - password: 'Parola', - payloadSettings: 'Setări de Payload', - perPage: 'Pe pagină: {{limit}}', - remove: 'Eliminați', - reset: 'Resetare', - row: 'Rând', - rows: 'Rânduri', - save: 'Salvează', - saving: 'Salvare...', - searchBy: 'Căutați după {{label}}', - selectAll: 'Selectați toate {{count}} {{label}}', - selectAllRows: 'Selectează toate rândurile', - selectValue: 'Selectați o valoare', - selectedCount: '{{count}} {{label}} selectate', - showAllLabel: 'Afișează toate {{eticheta}}', - sorryNotFound: 'Ne pare rău - nu există nimic care să corespundă cu cererea dvs.', - sort: 'Sortează', - sortByLabelDirection: 'Sortează după {{etichetă}} {{direcţie}}', - stayOnThisPage: 'Rămâneți pe această pagină', - submissionSuccessful: 'Trimitere cu succes.', - submit: 'Trimite', - successfullyCreated: '{{label}} creat(ă) cu succes.', - thisLanguage: 'Română', - titleDeleted: '{{label}} "{{title}}" șters cu succes.', - unauthorized: 'neautorizat(ă)', - unsavedChangesDuplicate: 'Aveți modificări nesalvate. Doriți să continuați să duplicați?', - untitled: 'Fără titlu', - updatedAt: 'Actualizat la', - updatedCountSuccessfully: 'Actualizate {{count}} {{label}} cu succes.', - updatedSuccessfully: 'Actualizat cu succes.', - updating: 'Actualizare', - welcome: 'Bine ați venit', - }, - operators: { - contains: 'conține', - equals: 'egal cu', - exists: 'există', - isGreaterThan: 'este mai mare decât', - isGreaterThanOrEqualTo: 'este mai mare sau egal cu', - isIn: 'este în', - isLessThan: 'este mai mic decât', - isLessThanOrEqualTo: 'este mai mic decât sau egal cu', - isLike: 'este ca', - isNotEqualTo: 'nu este egal cu', - isNotIn: 'nu este în', - near: 'în apropiere de', - }, - upload: { - crop: 'Cultură', - cropToolDescription: - 'Trageți colțurile zonei selectate, desenați o nouă zonă sau ajustați valorile de mai jos.', - dragAndDrop: 'Trageți și plasați un fișier', - editImage: 'Editează imaginea', - focalPoint: 'Punct central', - focalPointDescription: - 'Trageți punctul focal direct pe previzualizare sau ajustați valorile de mai jos.', - height: 'Înălțime', - previewSizes: 'Dimensiuni Previzualizare', - selectCollectionToBrowse: 'Selectați o colecție pentru navigare', - selectFile: 'Selectați un fișier', - setCropArea: 'Setați zona de decupare', - setFocalPoint: 'Setează punctul focal', - sizesFor: 'Mărimi pentru {{label}}', - width: 'Lățime', - }, - validation: { - fieldHasNo: 'Acest câmp nu are un {{label}}', - limitReached: 'Limita atinsă, doar {{max}} elemente pot fi adăugate.', - required: 'Acest câmp este obligatoriu.', - requiresAtLeast: 'Acest domeniu necesită cel puțin {{count}} {{label}}.', - }, - version: { - aboutToPublishSelection: - 'Sunteți pe cale să publicați toate {{label}} din selecție. Sunteți sigur?', - aboutToRestore: - 'Sunteți pe cale să readuceți acest document {{label}} în starea în care se afla la data de {{versionDate}}.', - aboutToRestoreGlobal: - 'Sunteți pe cale să readuceți {{label}} global în starea în care se afla la data de {{versionDate}}.', - aboutToRevertToPublished: - 'Sunteți pe cale să readuceți modificările aduse acestui document la starea sa publicată. Sunteți sigur?', - aboutToUnpublish: 'Sunteți pe cale să nepublicați acest document. Sunteți sigur?', - aboutToUnpublishSelection: - 'Sunteți pe punctul de a nepublica toate {{label}} din selecție. Sunteți sigur?', - autosave: 'Autosalvare', - autosavedSuccessfully: 'Autosalvare cu succes.', - changed: 'Schimbat', - compareVersion: 'Comparați versiunea cu:', - confirmPublish: 'Confirmați publicarea', - confirmRevertToSaved: 'Confirmați revenirea la starea salvată', - confirmUnpublish: 'Confirmați nepublicarea', - confirmVersionRestoration: 'Confirmați restaurarea versiunii', - draft: 'Proiect', - draftSavedSuccessfully: 'Proiect salvat cu succes.', - lastSavedAgo: 'Ultima salvare acum {{distance}}', - noFurtherVersionsFound: 'Nu s-au găsit alte versiuni', - noRowsFound: 'Nu s-a găsit niciun {{label}}', - preview: 'Previzualizare', - problemRestoringVersion: 'A existat o problemă la restaurarea acestei versiuni', - publish: 'Publicați', - publishChanges: 'Publicați modificările', - published: 'Publicat', - restoreThisVersion: 'Restaurați această versiune', - restoredSuccessfully: 'Restaurat cu succes.', - restoring: 'Restaurare...', - revertToPublished: 'Reveniți la publicat', - saveDraft: 'Salvați proiectul', - selectLocales: 'Selectați localitățile de afișat', - selectVersionToCompare: 'Selectați o versiune pentru a compara', - showLocales: 'Afișați localitățile:', - status: 'Status', - type: 'Tip', - unpublish: 'Dezpublicare', - unpublishing: 'Dezpublicare...', - version: 'Versiune', - versionCreatedOn: '{{version}} creată pe:', - versionID: 'ID-ul versiunii', - versions: 'Versiuni', - viewingVersion: 'Vizualizarea versiunii pentru {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: 'Vizualizarea versiunii pentru globala {{entityLabel}}', - viewingVersions: 'Vizualizarea versiunilor pentru {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: 'Vizualizarea versiunilor pentru globala {{entityLabel}}', - }, -} diff --git a/packages/translations/src/_generatedFiles_/client/rs-latin.js b/packages/translations/src/_generatedFiles_/client/rs-latin.js deleted file mode 100644 index d40a5682ab..0000000000 --- a/packages/translations/src/_generatedFiles_/client/rs-latin.js +++ /dev/null @@ -1,290 +0,0 @@ -export default { - authentication: { - account: 'Nalog', - accountOfCurrentUser: 'Nalog trenutnog korisnika', - alreadyActivated: 'Već aktivirano', - alreadyLoggedIn: 'Već prijavljen', - backToLogin: 'Nazad na prijavu', - beginCreateFirstUser: 'Na samom početku kreiraj svog prvog korisnika', - changePassword: 'Promeni lozinku', - confirmGeneration: 'Potvrdi kreiranje', - confirmPassword: 'Potvrdi lozinku', - createFirstUser: 'Kreiraj prvog korisnika', - emailNotValid: 'Adresa e-pošte nije validna', - emailSent: 'Poruka e-pošte prosleđena', - enableAPIKey: 'Omogući API ključ', - failedToUnlock: 'Neuspešno otključavanje.', - forceUnlock: 'Prinudno otključaj', - forgotPassword: 'Zaboravljena lozinka', - forgotPasswordEmailInstructions: - 'Molimo Vas da unesete svoj adresu e-pošte. Primićete poruku sa uputstvom za ponovno postavljanje lozinke.', - forgotPasswordQuestion: 'Zaboravljena lozinka?', - generate: 'Generiši', - generateNewAPIKey: 'Generiši novi API ključ', - logBackIn: 'Ponovna prijava', - logOut: 'Odjava', - loggedOutInactivity: 'Odjavljeni se zbog neaktivnosti.', - loggedOutSuccessfully: 'Uspešno ste odjavljeni', - login: 'Prijava', - logout: 'Odjava', - logoutUser: 'Odjava korisnika', - newAPIKeyGenerated: 'Novi API ključ generisan.', - newPassword: 'Nova lozinka', - resetPassword: 'Promena lozinke', - stayLoggedIn: 'Ostani prijavljen', - successfullyUnlocked: 'Uspešno otključano', - unableToVerify: 'Nije moguće potvrditi', - verified: 'Potvrđeno', - verifiedSuccessfully: 'Uspešno potvrđeno', - verify: 'Potvrdi', - verifyUser: 'Potvrdi korisnika', - youAreInactive: - 'Neaktivni ste već neko vreme i uskoro ćete biti automatski odjavljeni zbog sigurnosti. Da li želite ostati prijavljeni?', - }, - error: { - autosaving: 'Nastao je problem pri automatskom čuvanju ovog dokumenta.', - correctInvalidFields: 'Molimo ispravite nevalidna polja.', - deletingTitle: - 'Dogodila se greška pri brisanju {{title}}. Proverite internet konekciju i pokušajte ponovo.', - loadingDocument: 'Postoji problem pri učitavanju dokumenta čiji je ID {{id}}.', - noMatchedField: 'Nema podudarajućih polja za "{{label}}"', - notAllowedToAccessPage: 'Nemate dozvolu za pristup ovoj stranici.', - previewing: 'Postoji problem pri pregledu ovog dokumenta.', - unableToDeleteCount: 'Nije moguće izbrisati {{count}} od {{total}} {{label}}.', - unableToUpdateCount: 'Nije moguće ažurirati {{count}} od {{total}} {{label}}.', - unauthorized: 'Niste autorizovani da biste uputili ovaj zahtev.', - unknown: 'Došlo je do nepoznate greške.', - unspecific: 'Došlo je do greške.', - }, - fields: { - addLabel: 'Dodaj {{label}}', - addLink: 'Dodaj link', - addNew: 'Dodaj novi', - addNewLabel: 'Dodaj novi {{label}}', - addRelationship: 'Dodaj relaciju', - addUpload: 'Dodaj učitavanje', - block: 'blokiranje', - blockType: 'Vrsta blokiranja', - blocks: 'blokiranja', - chooseFromExisting: 'Odaberite iz postojećih.', - collapseAll: 'Skupi sve', - editLink: 'Izmeni link', - editRelationship: 'Izmeni odnos', - itemsAndMore: '{{items}} i {{count}} više', - labelRelationship: '{{label}} veza', - latitude: 'Geografska širina', - linkedTo: 'Povezani sa <0>{{label}}', - longitude: 'Geografska dužina', - passwordsDoNotMatch: 'Lozinke nisu iste.', - removeRelationship: 'Ukloni vezu', - removeUpload: 'Ukloni prenos', - saveChanges: 'Sačuvaj promene', - searchForBlock: 'Pretraži blok', - selectFieldsToEdit: 'Odaberite polja za promenu', - showAll: 'Pokaži sve', - swapRelationship: 'Zameni vezu', - swapUpload: 'Zameni prenos', - toggleBlock: 'Prebaci blok', - uploadNewLabel: 'Učitaj novi {{label}}', - }, - general: { - aboutToDelete: 'Izbrisaćete {{label}} <1>{{title}}. Da li ste sigurni?', - aboutToDeleteCount_many: 'Izbrisaćete {{count}} {{label}}', - aboutToDeleteCount_one: 'Izbrisaćete {{count}} {{label}}', - aboutToDeleteCount_other: 'Izbrisaćete {{count}} {{label}}', - addBelow: 'Dodaj ispod', - addFilter: 'Dodaj filter', - adminTheme: 'Administratorska tema', - and: 'I', - applyChanges: 'Primeni promene', - ascending: 'Uzlazno', - automatic: 'Automatsko', - backToDashboard: 'Nazad na kontrolni panel', - cancel: 'Otkaži', - changesNotSaved: 'Vaše promene nisu sačuvane. Ako izađete sada, izgubićete promene.', - close: 'Zatvori', - collapse: 'Skupi', - collections: 'Kolekcije', - columnToSort: 'Kolona za sortiranje', - columns: 'Kolone', - confirm: 'Potvrdi', - confirmDeletion: 'Potvrdi brisanje', - confirmDuplication: 'Potvrdi duplikaciju', - copied: 'Kopirano', - copy: 'Kopiraj', - create: 'Kreiraj', - createNew: 'Kreiraj novo', - createNewLabel: 'Kreiraj novo {{label}}', - created: 'Kreirano', - creating: 'Kreira se', - creatingNewLabel: 'Kreiranje novog {{label}}', - dark: 'Tamno', - dashboard: 'Kontrolni panel', - delete: 'Obriši', - deletedCountSuccessfully: 'Uspešno izbrisano {{count}} {{label}}.', - deleting: 'Brisanje...', - descending: 'Opadajuće', - deselectAllRows: 'Deselektujte sve redove', - duplicate: 'Duplikat', - duplicateWithoutSaving: 'Ponovi bez čuvanja promena', - edit: 'Uredi', - editLabel: 'Uredi {{label}}', - editing: 'Uređivanje', - editingLabel_many: 'Uređivanje {{count}} {{label}}', - editingLabel_one: 'Uređivanje {{count}} {{label}}', - editingLabel_other: 'Uređivanje {{count}} {{label}}', - email: 'E-pošta', - emailAddress: 'Аdresa e-pošte', - enterAValue: 'Unesi vrednost', - error: 'Greška', - errors: 'Greške', - fallbackToDefaultLocale: 'Vraćanje na zadati jezik', - filterWhere: 'Filter {{label}} gde', - filters: 'Filteri', - globals: 'Globali', - language: 'Jezik', - lastModified: 'Zadnja promena', - leaveAnyway: 'Svejedno napusti', - leaveWithoutSaving: 'Napusti bez čuvanja', - light: 'Svetlo', - livePreview: 'Pregled', - loading: 'Učitavanje', - locale: 'Jezik', - menu: 'Meni', - moveDown: 'Pomeri dole', - moveUp: 'Pomeri gore', - noFiltersSet: 'Nema postavljenih filtera', - noLabel: '', - noOptions: 'Nema opcija', - noResults: - 'Nema pronađenih {{label}}. Moguće da {{label}} još uvek ne postoji ili nema rezultata u skladu sa postavljenim filterima.', - noValue: 'Bez vrednosti', - none: 'Nijedan', - notFound: 'Nije pronađeno', - nothingFound: 'Ništa nije pronađeno', - of: 'Od', - open: 'Otvori', - or: 'Ili', - order: 'Redosled', - pageNotFound: 'Stranica nije pronađena', - password: 'Lozinka', - payloadSettings: 'Payload postavke', - perPage: 'Po stranici: {{limit}}', - remove: 'Ukloni', - reset: 'Ponovo postavi', - row: 'Red', - rows: 'Redovi', - save: 'Sačuvaj', - saving: 'Čuvanje u toku...', - searchBy: 'Traži po {{label}}', - selectAll: 'Odaberite sve {{count}} {{label}}', - selectAllRows: 'Odaberite sve redove', - selectValue: 'Odaberi vrednost', - selectedCount: '{{count}} {{label}} odabrano', - showAllLabel: 'Prikaži sve {{label}}', - sorryNotFound: 'Nažalost, ne postoji ništa što odgovara vašem zahtevu.', - sort: 'Sortiraj', - sortByLabelDirection: 'Sortiraj prema {{label}} {{direction}}', - stayOnThisPage: 'Ostani na ovoj stranici', - submissionSuccessful: 'Uspešno slanje', - submit: 'Potvrdi', - successfullyCreated: '{{label}} uspešno kreirano.', - thisLanguage: 'Srpski (latinica)', - titleDeleted: '{{label}} "{{title}}" uspešno obrisano.', - unauthorized: 'Niste autorizovani', - unsavedChangesDuplicate: 'Imate nesačuvane promene. Da li želite nastaviti sa dupliciranjem?', - untitled: 'Bez naslova', - updatedAt: 'Ažurirano u', - updatedCountSuccessfully: 'Uspešno ažurirano {{count}} {{label}}.', - updatedSuccessfully: 'Uspešno ažurirano.', - updating: 'Ažuriranje', - welcome: 'Dobrodošli', - }, - operators: { - contains: 'sadrži', - equals: 'jednako', - exists: 'postoji', - isGreaterThan: 'je veće od', - isGreaterThanOrEqualTo: 'je veće od ili jednako', - isIn: 'je u', - isLessThan: 'manje je od', - isLessThanOrEqualTo: 'manje je ili jednako', - isLike: 'je kao', - isNotEqualTo: 'nije jednako', - isNotIn: 'nije unutra', - near: 'blizu', - }, - upload: { - crop: 'Isecite sliku', - cropToolDescription: - 'Prevucite uglove izabranog područja, nacrtajte novo područje ili prilagodite vrednosti ispod.', - dragAndDrop: 'Prevucite i ispustite datoteku', - editImage: 'Uredi sliku', - focalPoint: 'Centralna tačka', - focalPointDescription: - 'Prevucite središnju tačku direktno na pregled ili prilagodite vrednosti ispod.', - height: 'Visina', - previewSizes: 'Veličine pregleda', - selectCollectionToBrowse: 'Odaberite kolekciju za pregled', - selectFile: 'Odaberite datoteku', - setCropArea: 'Postavite područje za isečenu sliku', - setFocalPoint: 'Postavite centralnu tačku', - sizesFor: 'Veličine za {{label}}', - width: 'Širina', - }, - validation: { - fieldHasNo: 'Ovo polje nema {{label}}', - limitReached: 'Dosegnut je limit, može se dodati samo {{max}} stavki.', - required: 'Ovo polje je obavezno.', - requiresAtLeast: 'Ovo polje zahteva minimalno {{count}} {{label}}.', - }, - version: { - aboutToPublishSelection: 'Upravo ćete objaviti sve {{label}} u izboru. Da li ste sigurni?', - aboutToRestore: 'Vratićete {{label}} dokument u stanje u kojem je bio {{versionDate}}', - aboutToRestoreGlobal: 'Vratićete globalni {{label}} u stanje u kojem je bio {{versionDate}}.', - aboutToRevertToPublished: - 'Vratićete promene u dokumentu u objavljeno stanje. Da li ste sigurni?', - aboutToUnpublish: 'Poništićete objavu ovog dokumenta. Da li ste sigurni?', - aboutToUnpublishSelection: - 'Upravo ćete poništiti objavu svih {{label}} u odabiru. Da li ste sigurni?', - autosave: 'Automatsko čuvanje', - autosavedSuccessfully: 'Automatsko čuvanje uspešno.', - changed: 'Promenjeno', - compareVersion: 'Uporedi verziju sa:', - confirmPublish: 'Potvrdi objavu', - confirmRevertToSaved: 'Potvrdite vraćanje na sačuvano', - confirmUnpublish: 'Potvrdite poništavanje objave', - confirmVersionRestoration: 'Potvrdite vraćanje verzije', - draft: 'Nacrt', - draftSavedSuccessfully: 'Nacrt uspešno sačuvan.', - lastSavedAgo: 'Zadnji put sačuvano pre {{distance}', - noFurtherVersionsFound: 'Nisu pronađene naredne verzije', - noRowsFound: '{{label}} nije pronađeno', - preview: 'Pregled', - problemRestoringVersion: 'Nastao je problem pri vraćanju ove verzije', - publish: 'Objaviti', - publishChanges: 'Objavljivanje', - published: 'Objavljeno', - publishing: 'Objavljivanje', - restoreThisVersion: 'Vrati ovu verziju', - restoredSuccessfully: 'Uspešno vraćeno.', - restoring: 'Vraćanje...', - revertToPublished: 'Vrati na objavljeno', - saveDraft: 'Sačuvaj nacrt', - selectLocales: 'Odaberite jezike', - selectVersionToCompare: 'Odaberite verziju za upoređivanje', - showLocales: 'Prikaži jezike:', - status: 'Status', - type: 'Tip', - unpublish: 'Poništi objavu', - unpublishing: 'Poništavanje objave...', - version: 'Verzija', - versionCreatedOn: '{{version}} kreiranih:', - versionID: 'ID verzije', - versions: 'Verzije', - viewingVersion: 'Pregled verzije za {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: 'Pregled verzije za globalni {{entityLabel}}', - viewingVersions: 'Pregled verzija za {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: 'Pregled verzije za globalni {{entityLabel}}', - }, -} diff --git a/packages/translations/src/_generatedFiles_/client/rs.js b/packages/translations/src/_generatedFiles_/client/rs.js deleted file mode 100644 index e019d13ec8..0000000000 --- a/packages/translations/src/_generatedFiles_/client/rs.js +++ /dev/null @@ -1,289 +0,0 @@ -export default { - authentication: { - account: 'Налог', - accountOfCurrentUser: 'Налог тренутног корисника', - alreadyActivated: 'Већ активирано', - alreadyLoggedIn: 'Већ пријављен', - backToLogin: 'Назад на пријаву', - beginCreateFirstUser: 'На самом почетку креирај свог првог корисника', - changePassword: 'Промени лозинку', - confirmGeneration: 'Потврди креирање', - confirmPassword: 'Потврди лозинку', - createFirstUser: 'Креирај првог корисника', - emailNotValid: 'Адреса е-поште није валидна', - emailSent: 'Порука е-поште прослеђена', - enableAPIKey: 'Омогући API кључ', - failedToUnlock: 'Неуспешно откључавање.', - forceUnlock: 'Принудно откључај', - forgotPassword: 'Заборављена лозинка', - forgotPasswordEmailInstructions: - 'Молимо Вас да унесете својy адресy е-поште. Примићете поруку са упутством за поновно постављање лозинке.', - forgotPasswordQuestion: 'Заборављена лозинка?', - generate: 'Генериши', - generateNewAPIKey: 'Генериши нови АПИ кључ', - logBackIn: 'Поновна пријава', - logOut: 'Одјава', - loggedOutInactivity: 'Одјављени се због неактивности.', - loggedOutSuccessfully: 'Успешно сте одјављени', - login: 'Пријава', - logout: 'Одјава', - logoutUser: 'Одјава корисника', - newAPIKeyGenerated: 'Нови АПИ кључ генерисан.', - newPassword: 'Нова лозинка', - resetPassword: 'Промена лозинке', - stayLoggedIn: 'Остани пријављен', - successfullyUnlocked: 'Успешно откључано', - unableToVerify: 'Није могуће потврдити', - verified: 'Потврђено', - verifiedSuccessfully: 'Успешно потврђено', - verify: 'Потврди', - verifyUser: 'Потврди корисника', - youAreInactive: - 'Неактивни сте већ неко време и ускоро ћете бити аутоматски одјављени због сигурности. Да ли желите остати пријављени?', - }, - error: { - autosaving: 'Настао је проблем при аутоматском чувању овог документа.', - correctInvalidFields: 'Молимо исправите невалидна поља.', - deletingTitle: - 'Догодила се грешка при брисању {{title}}. Проверите интернет конекцију и покушајте поново.', - loadingDocument: 'Постоји проблем при учитавању документа чији је ИД {{id}}.', - noMatchedField: 'Нема подударајућих поља за "{{label}}"', - notAllowedToAccessPage: 'Немате дозволу за приступ овој страници.', - previewing: 'Постоји проблем при прегледу овог документа.', - unableToDeleteCount: 'Није могуће избрисати {{count}} од {{total}} {{label}}.', - unableToUpdateCount: 'Није могуће ажурирати {{count}} од {{total}} {{label}}.', - unauthorized: 'Нисте ауторизовани да бисте упутили овај захтев.', - unknown: 'Дошло је до непознате грешке.', - unspecific: 'Дошло је до грешке.', - }, - fields: { - addLabel: 'Додај {{label}}', - addLink: 'Додај линк', - addNew: 'Додај нови', - addNewLabel: 'Додај нови {{label}}', - addRelationship: 'Додај релацију', - addUpload: 'Додај учитавање', - block: 'блокирање', - blockType: 'Врста блокирања', - blocks: 'блокирања', - chooseFromExisting: 'Одаберите из постојећих.', - collapseAll: 'Скупи све', - editLink: 'Измени линк', - editRelationship: 'Измени однос', - itemsAndMore: '{{items}} и {{count}} више', - labelRelationship: '{{label}} веза', - latitude: 'Географска ширина', - linkedTo: 'Повезани са <0>{{label}}', - longitude: 'Географска дужина', - passwordsDoNotMatch: 'Лозинке нису исте.', - removeRelationship: 'Уклони везу', - removeUpload: 'Уклони пренос', - saveChanges: 'Сачувај промене', - searchForBlock: 'Претражи блок', - selectFieldsToEdit: 'Одаберите поља за промену', - showAll: 'Покажи све', - swapRelationship: 'Замени везу', - swapUpload: 'Замени пренос', - toggleBlock: 'Пребаци блок', - uploadNewLabel: 'Учитај нови {{label}}', - }, - general: { - aboutToDelete: 'Избрисаћете {{label}} <1>{{title}}. Да ли сте сигурни?', - aboutToDeleteCount_many: 'Избрисаћете {{count}} {{label}}', - aboutToDeleteCount_one: 'Избрисаћете {{count}} {{label}}', - aboutToDeleteCount_other: 'Избрисаћете {{count}} {{label}}', - addBelow: 'Додај испод', - addFilter: 'Додај филтер', - adminTheme: 'Администраторска тема', - and: 'И', - applyChanges: 'Примени промене', - ascending: 'Узлазно', - automatic: 'Аутоматско', - backToDashboard: 'Назад на контролни панел', - cancel: 'Откажи', - changesNotSaved: 'Ваше промене нису сачуване. Ако изађете сада, изгубићете промене.', - close: 'Затвори', - collapse: 'Скупи', - collections: 'Колекције', - columnToSort: 'Колона за сортирање', - columns: 'Колоне', - confirm: 'Потврди', - confirmDeletion: 'Потврди брисање', - confirmDuplication: 'Потврди дупликацију', - copied: 'Копирано', - copy: 'Копирај', - create: 'Креирај', - createNew: 'Креирај ново', - createNewLabel: 'Креирај ново {{label}}', - created: 'Креирано', - creating: 'Креира се', - creatingNewLabel: 'Креирање новог {{label}}', - dark: 'Тамно', - dashboard: 'Контролни панел', - delete: 'Обриши', - deletedCountSuccessfully: 'Успешно избрисано {{count}} {{label}}.', - deleting: 'Брисање...', - descending: 'Опадајуће', - deselectAllRows: 'Деселектујте све редове', - duplicate: 'Дупликат', - duplicateWithoutSaving: 'Понови без чувања промена', - edit: 'Уреди', - editLabel: 'Уреди {{label}}', - editing: 'Уређивање', - editingLabel_many: 'Уређивање {{count}} {{label}}', - editingLabel_one: 'Уређивање {{count}} {{label}}', - editingLabel_other: 'Уређивање {{count}} {{label}}', - email: 'Е-пошта', - emailAddress: 'Адреса е-поште', - enterAValue: 'Унеси вредност', - error: 'Грешка', - errors: 'Грешке', - fallbackToDefaultLocale: 'Враћање на задати језик', - filterWhere: 'Филтер {{label}} где', - filters: 'Филтери', - globals: 'Глобали', - language: 'Језик', - lastModified: 'Задња промена', - leaveAnyway: 'Свеједно напусти', - leaveWithoutSaving: 'Напусти без чувања', - light: 'Светло', - livePreview: 'Преглед', - loading: 'Учитавање', - locale: 'Језик', - menu: 'Мени', - moveDown: 'Помери доле', - moveUp: 'Помери горе', - noFiltersSet: 'Нема постављених филтера', - noLabel: '<Нема {{label}}>', - noOptions: 'Нема опција', - noResults: - 'Нема пронађених {{label}}. Могуће да {{label}} још увек не постоји или нема резултата у складу са постављеним филтерима.', - noValue: 'Без вредности', - none: 'Ниједан', - notFound: 'Није пронађено', - nothingFound: 'Ништа није пронађено', - of: 'Од', - open: 'Отвори', - or: 'Или', - order: 'Редослед', - pageNotFound: 'Страница није пронађена', - password: 'Лозинка', - payloadSettings: 'Payload поставке', - perPage: 'По страници: {{limit}}', - remove: 'Уклони', - reset: 'Поново постави', - row: 'Ред', - rows: 'Редови', - save: 'Сачувај', - saving: 'Чување у току...', - searchBy: 'Тражи по {{label}}', - selectAll: 'Одаберите све {{count}} {{label}}', - selectAllRows: 'Одаберите све редове', - selectValue: 'Одабери вредност', - selectedCount: '{{count}} {{label}} одабрано', - showAllLabel: 'Прикажи све {{label}}', - sorryNotFound: 'Нажалост, не постоји ништа што одговара вашем захтеву.', - sort: 'Сортирај', - sortByLabelDirection: 'Сортирај према {{label}} {{дирецтион}}', - stayOnThisPage: 'Остани на овој страници', - submissionSuccessful: 'Успешно слање', - submit: 'Потврди', - successfullyCreated: '{{label}} успешно креирано.', - thisLanguage: 'Српски (ћирилица)', - titleDeleted: '{{label}} "{{title}}" успешно обрисано.', - unauthorized: 'Нисте ауторизовани', - unsavedChangesDuplicate: 'Имате несачуване промене. Да ли желите наставити са дуплицирањем?', - untitled: 'Без наслова', - updatedAt: 'Ажурирано у', - updatedCountSuccessfully: 'Успешно ажурирано {{count}} {{label}}.', - updatedSuccessfully: 'Успешно ажурирано.', - updating: 'Ажурирање', - welcome: 'Добродошли', - }, - operators: { - contains: 'садржи', - equals: 'једнако', - exists: 'постоји', - isGreaterThan: 'је веће од', - isGreaterThanOrEqualTo: 'је веће од или једнако', - isIn: 'је у', - isLessThan: 'мање је од', - isLessThanOrEqualTo: 'мање је или једнако', - isLike: 'је као', - isNotEqualTo: 'није једнако', - isNotIn: 'није у', - near: 'близу', - }, - upload: { - crop: 'Исеците слику', - cropToolDescription: - 'Превуците углове изабраног подручја, нацртајте ново подручје или прилагодите вредности испод.', - dragAndDrop: 'Превуците и испустите датотеку', - editImage: 'Уреди слику', - focalPoint: 'Централна тачка', - focalPointDescription: - 'Превуците средишњу тачку директно на преглед или прилагодите вредности испод.', - height: 'Висина', - previewSizes: 'Величине прегледа', - selectCollectionToBrowse: 'Одаберите колекцију за преглед', - selectFile: 'Одаберите датотеку', - setCropArea: 'Поставите подручје за исечену слику', - setFocalPoint: 'Поставите централну тачку', - sizesFor: 'Величине за {{label}}', - width: 'Ширина', - }, - validation: { - fieldHasNo: 'Ово поље нема {{label}}', - limitReached: 'Досегнут је лимит, може се додати само {{max}} ставки.', - required: 'Ово поље је обавезно.', - requiresAtLeast: 'Ово поље захтева минимално {{count}} {{label}}.', - }, - version: { - aboutToPublishSelection: 'Управо ћете објавити све {{label}} у избору. Да ли сте сигурни?', - aboutToRestore: 'Вратићете {{label}} документ у стање у којем је био {{versionDate}}', - aboutToRestoreGlobal: 'Вратићете глобални {{label}} у стање у којем је био {{versionDate}}.', - aboutToRevertToPublished: 'Вратићете промене у документу у објављено стање. Да ли сте сигурни?', - aboutToUnpublish: 'Поништићете објаву овог документа. Да ли сте сигурни?', - aboutToUnpublishSelection: - 'Управо ћете поништити објаву свих {{label}} у одабиру. Да ли сте сигурни?', - autosave: 'Аутоматско чување', - autosavedSuccessfully: 'Аутоматско чување успешно.', - changed: 'Промењено', - compareVersion: 'Упореди верзију са:', - confirmPublish: 'Потврди објаву', - confirmRevertToSaved: 'Потврдите враћање на сачувано', - confirmUnpublish: 'Потврдите поништавање објаве', - confirmVersionRestoration: 'Потврдите враћање верзије', - draft: 'Нацрт', - draftSavedSuccessfully: 'Нацрт успешно сачуван.', - lastSavedAgo: 'Задњи пут сачувано пре {{distance}', - noFurtherVersionsFound: 'Нису пронађене наредне верзије', - noRowsFound: '{{label}} није пронађено', - preview: 'Преглед', - problemRestoringVersion: 'Настао је проблем при враћању ове верзије', - publish: 'Објавити', - publishChanges: 'Објави промене', - published: 'Објављено', - publishing: 'Objavljivanje', - restoreThisVersion: 'Врати ову верзију', - restoredSuccessfully: 'Успешно враћено.', - restoring: 'Враћање...', - revertToPublished: 'Врати на објављено', - saveDraft: 'Сачувај нацрт', - selectLocales: 'Одаберите језике', - selectVersionToCompare: 'Одаберите верзију за упоређивање', - showLocales: 'Прикажи језике:', - status: 'Статус', - type: 'Тип', - unpublish: 'Поништи објаву', - unpublishing: 'Поништавање објаве...', - version: 'Верзија', - versionCreatedOn: '{{version}} креираних:', - versionID: 'Идентификатор верзије', - versions: 'Верзије', - viewingVersion: 'Преглед верзије за {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: 'Преглед верзије за глобални {{entityLabel}}', - viewingVersions: 'Преглед верзија за {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: 'Преглед верзије за глобални {{entityLabel}}', - }, -} diff --git a/packages/translations/src/_generatedFiles_/client/ru.js b/packages/translations/src/_generatedFiles_/client/ru.js deleted file mode 100644 index 9812504e52..0000000000 --- a/packages/translations/src/_generatedFiles_/client/ru.js +++ /dev/null @@ -1,294 +0,0 @@ -export default { - authentication: { - account: 'Аккаунт', - accountOfCurrentUser: 'Аккаунт текущего пользователя', - alreadyActivated: 'Уже активирован', - alreadyLoggedIn: 'Уже вошли в систему', - backToLogin: 'Вернуться к входу', - beginCreateFirstUser: 'Чтобы начать - создайте первого пользователя.', - changePassword: 'Сменить пароль', - confirmGeneration: 'Подтвердить генерацию', - confirmPassword: 'Подтверждение пароля', - createFirstUser: 'Создание первого пользователя', - emailNotValid: 'Указанный адрес электронной почты неверен', - emailSent: 'Email отправлен', - enableAPIKey: 'Активировать API ключ', - failedToUnlock: 'Не удалось разблокировать', - forceUnlock: 'Принудительная разблокировка', - forgotPassword: 'Забыли пароль', - forgotPasswordEmailInstructions: - 'Пожалуйста, введите ваш email. Вы получите письмо с инструкцией по восстановлению пароля.', - forgotPasswordQuestion: 'Забыли пароль?', - generate: 'Сгенерировать', - generateNewAPIKey: 'Сгенерировать новый API ключ', - logBackIn: 'Войти снова', - logOut: 'Выйти', - loggedOutInactivity: 'Вы вышли из системы из-за неактивности.', - loggedOutSuccessfully: 'Вы успешно вышли из системы.', - login: 'Войти', - logout: 'Выйти', - logoutUser: 'Вход из системы', - newAPIKeyGenerated: 'Новый API ключ сгенерирован.', - newPassword: 'Новый пароль', - resetPassword: 'Сброс пароля', - stayLoggedIn: 'Остаться в системе', - successfullyUnlocked: 'Успешно разблокирован', - unableToVerify: 'Невозможно подтвердить', - verified: 'Подтверждено', - verifiedSuccessfully: 'Успешно подтверждено', - verify: 'Подтвердить', - verifyUser: 'Подтвердить пользователя', - youAreInactive: - 'Вы не были активны в течение некоторого времени и скоро автоматически выйдете из системы в целях вашей безопасности. Вы хотите остаться в системе?', - }, - error: { - autosaving: 'При автосохранении этого документа возникла проблема.', - correctInvalidFields: 'Пожалуйста, исправьте неправильные поля.', - deletingTitle: - 'При удалении {{title}} произошла ошибка. Пожалуйста, проверьте соединение и повторите попытку.', - loadingDocument: 'Возникла проблема при загрузке документа с ID {{id}}.', - noMatchedField: 'Не найдено подходящего поля для "{{label}}"', - notAllowedToAccessPage: 'Вы не имеете права доступа к этой странице.', - previewing: 'При предварительном просмотре этого документа возникла проблема.', - unableToDeleteCount: 'Не удалось удалить {{count}} из {{total}} {{label}}.', - unableToUpdateCount: 'Не удалось обновить {{count}} из {{total}} {{label}}.', - unauthorized: 'Нет доступа, вы должны войти, чтобы сделать этот запрос.', - unknown: 'Произошла неизвестная ошибка.', - unspecific: 'Произошла ошибка.', - }, - fields: { - addLabel: 'Добавить {{label}}', - addLink: 'Добавить ссылку', - addNew: 'Добавить новый', - addNewLabel: 'Добавить {{label}}', - addRelationship: 'Добавить Отношения', - addUpload: 'Добавить загрузку', - block: 'Блок', - blockType: 'Тип Блока', - blocks: 'Блоки', - chooseFromExisting: 'Выбрать из существующих', - collapseAll: 'Свернуть все', - editLink: 'Редактировать ссылку', - editRelationship: 'Редактировать Отношения', - itemsAndMore: '{{items}} и ещё {{count}}', - labelRelationship: '{{label}} Отношения', - latitude: 'Широта', - linkedTo: 'Связано с <0>{{label}}', - longitude: 'Долгота', - passwordsDoNotMatch: 'Пароли не совпадают.', - removeRelationship: 'Удалить связь', - removeUpload: 'Удалить загруженное', - saveChanges: 'Сохранить изменения', - searchForBlock: 'Найти Блок', - selectFieldsToEdit: 'Выберите поля для редактирования', - showAll: 'Показать все', - swapRelationship: 'Поменять отношения', - swapUpload: 'Заменить загруженное', - toggleBlock: 'Переключить Блок', - uploadNewLabel: 'Загрузить новый {{label}}', - }, - general: { - aboutToDelete: 'Вы собираетесь удалить {{label}} <1>{{title}}. Вы уверены?', - aboutToDeleteCount_many: 'Вы собираетесь удалить {{count}} {{label}}', - aboutToDeleteCount_one: 'Вы собираетесь удалить {{count}} {{label}}', - aboutToDeleteCount_other: 'Вы собираетесь удалить {{count}} {{label}}', - addBelow: 'Добавить ниже', - addFilter: 'Добавить фильтр', - adminTheme: 'Тема Панели', - and: 'А также', - applyChanges: 'Применить изменения', - ascending: 'Восходящий', - automatic: 'Автоматически', - backToDashboard: 'Назад к Панели', - cancel: 'Отмена', - changesNotSaved: - 'Ваши изменения не были сохранены. Если вы сейчас уйдете, то потеряете свои изменения.', - close: 'Закрыть', - collapse: 'Свернуть', - collections: 'Коллекции', - columnToSort: 'Колонка для сортировки', - columns: 'Колонки', - confirm: 'Подтвердить', - confirmDeletion: 'Подтвердить удаление', - confirmDuplication: 'Подтвердить копирование', - copied: 'Скопировано', - copy: 'Скопировать', - create: 'Создать', - createNew: 'Создать', - createNewLabel: 'Создать новый {{label}}', - created: 'Создано', - creating: 'Создание', - creatingNewLabel: 'Создание нового {{label}}', - dark: 'Тёмная', - dashboard: 'Панель', - delete: 'Удалить', - deletedCountSuccessfully: 'Удалено {{count}} {{label}} успешно.', - deleting: 'Удаление...', - descending: 'Уменьшение', - deselectAllRows: 'Снять выделение со всех строк', - duplicate: 'Дублировать', - duplicateWithoutSaving: 'Дублирование без сохранения изменений', - edit: 'Редактировать', - editLabel: 'Редактировать {{label}}', - editing: 'Редактирование', - editingLabel_many: 'Редактирование {{count}} {{label}}', - editingLabel_one: 'Редактирование {{count}} {{label}}', - editingLabel_other: 'Редактирование {{count}} {{label}}', - email: 'Email', - emailAddress: 'Email', - enterAValue: 'Введите значение', - error: 'Ошибка', - errors: 'Ошибки', - fallbackToDefaultLocale: 'Возврат к локали по умолчанию', - filterWhere: 'Где фильтровать', - filters: 'Фильтры', - globals: 'Глобальные', - language: 'Язык', - lastModified: 'Последнее изменение', - leaveAnyway: 'Все равно уйти', - leaveWithoutSaving: 'Выход без сохранения', - light: 'Светлая', - livePreview: 'Предпросмотр', - loading: 'Загрузка', - locale: 'Локаль', - menu: 'Меню', - moveDown: 'Сдвинуть вниз', - moveUp: 'Сдвинуть вверх', - noFiltersSet: 'Фильтры не установлены', - noLabel: 'Без метки', - noOptions: 'Нет вариантов', - noResults: - 'Не найдено ни одной {{label}}. Либо {{label}} еще не существует, либо ни одна из них не соответствует фильтрам, которые вы указали выше.', - noValue: 'Нет значения', - none: 'Никто', - notFound: 'Не найдено', - nothingFound: 'Ничего не найдено', - of: 'из', - open: 'Открыть', - or: 'Или же', - order: 'Порядок', - pageNotFound: 'Страница не найдена', - password: 'Пароль', - payloadSettings: 'Настройки Payload', - perPage: 'На странице: {{limit}}', - remove: 'Удалить', - reset: 'Сброс', - row: 'Строка', - rows: 'Строки', - save: 'Сохранить', - saving: 'Сохранение...', - searchBy: 'Искать по', - selectAll: 'Выбрать все {{count}} {{label}}', - selectAllRows: 'Выбрать все строки', - selectValue: 'Выбрать значение', - selectedCount: '{{count}} {{label}} выбрано', - showAllLabel: 'Показать все {{label}}', - sorryNotFound: 'К сожалению, ничего подходящего под ваш запрос нет.', - sort: 'Сортировать', - sortByLabelDirection: 'Сортировать по {{label}} {{direction}}', - stayOnThisPage: 'Остаться на этой странице', - submissionSuccessful: 'Успешно отправлено.', - submit: 'Отправить', - successfullyCreated: '{{label}} успешно создан.', - thisLanguage: 'Русский', - titleDeleted: '{{label}} {{title}} успешно удалено.', - unauthorized: 'Нет доступа', - unsavedChangesDuplicate: - 'У вас есть несохраненные изменения. Вы хотите продолжить дублирование?', - untitled: 'Без названия', - updatedAt: 'Дата правки', - updatedCountSuccessfully: 'Обновлено {{count}} {{label}} успешно.', - updatedSuccessfully: 'Успешно Обновлено.', - updating: 'Обновление', - welcome: 'Добро пожаловать', - }, - operators: { - contains: 'содержит', - equals: 'равно', - exists: 'существует', - isGreaterThan: 'больше чем', - isGreaterThanOrEqualTo: 'больше или равно', - isIn: 'находится', - isLessThan: 'меньше чем', - isLessThanOrEqualTo: 'меньше или равно', - isLike: 'похоже', - isNotEqualTo: 'не равно', - isNotIn: 'нет в', - near: 'рядом', - }, - upload: { - crop: 'Обрезать', - cropToolDescription: - 'Перетащите углы выбранной области, нарисуйте новую область или отрегулируйте значения ниже.', - dragAndDrop: 'Перетащите файл', - editImage: 'Редактировать изображение', - focalPoint: 'Центральная точка', - focalPointDescription: - 'Перетащите фокусное расстояние прямо на предварительный просмотр или отрегулируйте значения ниже.', - height: 'Высота', - previewSizes: 'Предварительный просмотр размеров', - selectCollectionToBrowse: 'Выберите Коллекцию для просмотра', - selectFile: 'Выберите файл', - setCropArea: 'Установите область обрезки', - setFocalPoint: 'Установить фокусное расстояние', - sizesFor: 'Размеры для {{label}}', - width: 'Ширина', - }, - validation: { - fieldHasNo: 'У этого поля нет {{label}}', - limitReached: 'Достигнут лимит, можно добавить только {{max}} элементов.', - required: 'Это обязательное поле.', - requiresAtLeast: 'Это поле требует не менее {{count}} {{label}}', - }, - version: { - aboutToPublishSelection: 'Вы собираетесь опубликовать все {{label}} в выборе. Вы уверены?', - aboutToRestore: - 'Вы собираетесь восстановить этот документ {{label}} в состояние, в котором он находился {{versionDate}}.', - aboutToRestoreGlobal: - 'Вы собираетесь восстановить глобальную запись {{label}} в состояние, в котором она находилась {{versionDate}}.', - aboutToRevertToPublished: - 'Вы собираетесь вернуть изменения этого документа к его опубликованному состоянию. Вы уверены?', - aboutToUnpublish: 'Вы собираетесь отменить публикацию этого документа. Вы уверены?', - aboutToUnpublishSelection: - 'Вы собираетесь отменить публикацию всех выбранных {{label}}. Вы уверены?', - autosave: 'Автосохранение', - autosavedSuccessfully: 'Автосохранение успешно.', - changed: 'Изменено', - compareVersion: 'Сравнить версию с:', - confirmPublish: 'Подтвердить публикацию', - confirmRevertToSaved: 'Подтвердить возврат к сохраненному', - confirmUnpublish: 'Подтвердить отмену публикации', - confirmVersionRestoration: 'Подтвердить восстановление версии', - draft: 'Черновик', - draftSavedSuccessfully: 'Черновик успешно сохранен.', - lastSavedAgo: 'Последний раз сохранено {{distance}} назад', - noFurtherVersionsFound: 'Другие версии не найдены', - noRowsFound: 'Не найдено {{label}}', - preview: 'Предпросмотр', - problemRestoringVersion: 'Возникла проблема с восстановлением этой версии', - publish: 'Публиковать', - publishChanges: 'Опубликовать изменения', - published: 'Опубликовано', - publishing: 'Публикация', - restoreThisVersion: 'Восстановить эту версию', - restoredSuccessfully: 'Восстановлен успешно.', - restoring: 'Восстановление...', - revertToPublished: 'Вернуться к опубликованному', - saveDraft: 'Сохранить черновик', - selectLocales: 'Выберите локали для отображения', - selectVersionToCompare: 'Выбрать версию для сравнения', - showLocales: 'Показать локали:', - status: 'Статус', - type: 'Тип', - unpublish: 'Отменить публикацию', - unpublishing: 'Отмена публикации...', - version: 'Версия', - versionCreatedOn: '{{version}} создана:', - versionID: 'ID версии', - versions: 'Версии', - viewingVersion: 'Просмотр версии для {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: '`Просмотр версии для глобальной Коллекции {{entityLabel}}', - viewingVersions: 'Просмотр версий для {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: '`Просмотр версии для глобальной Коллекции {{entityLabel}}', - }, -} diff --git a/packages/translations/src/_generatedFiles_/client/sv.js b/packages/translations/src/_generatedFiles_/client/sv.js deleted file mode 100644 index e23e88ac0b..0000000000 --- a/packages/translations/src/_generatedFiles_/client/sv.js +++ /dev/null @@ -1,293 +0,0 @@ -export default { - authentication: { - account: 'Konto', - accountOfCurrentUser: 'Konto för nuvarande användare', - alreadyActivated: 'Redan aktiverad', - alreadyLoggedIn: 'Redan inloggad', - backToLogin: 'Tillbaka till inloggningen', - beginCreateFirstUser: 'För att börja, skapa din första användare.', - changePassword: 'Byt Lösenord', - confirmGeneration: 'Bekräfta Generering', - confirmPassword: 'Bekräfta Lösenord', - createFirstUser: 'Skapa första användaren', - emailNotValid: 'Angiven e-postadress är inte giltig', - emailSent: 'E-posten Skickad', - enableAPIKey: 'Aktivera API nyckel', - failedToUnlock: 'Det gick inte att låsa upp', - forceUnlock: 'Tvinga Upplåsning', - forgotPassword: 'Glömt Lösenord', - forgotPasswordEmailInstructions: - 'Vänligen ange din e-postadress nedan. Du kommer att få ett e-postmeddelande med instruktioner om hur du återställer ditt lösenord.', - forgotPasswordQuestion: 'Glömt lösenordet?', - generate: 'Generera', - generateNewAPIKey: 'Generera ny API nyckel', - logBackIn: 'Logga in igen', - logOut: 'Logga ut', - loggedOutInactivity: 'Du har blivit utloggad på grund av inaktivitet.', - loggedOutSuccessfully: 'Du har loggat ut framgångsrikt.', - login: 'Logga in', - logout: 'Logga ut', - logoutUser: 'Logga ut användare', - newAPIKeyGenerated: 'Ny API Nyckel Genererad.', - newPassword: 'Nytt Lösenord', - resetPassword: 'Återställ Lösenord', - stayLoggedIn: 'Stanna inloggad', - successfullyUnlocked: 'Låst upp framgångsrikt', - unableToVerify: 'Det går inte att Verifiera', - verified: 'Verifierad', - verifiedSuccessfully: 'Framgångsrikt Verifierad', - verify: 'Verifiera', - verifyUser: 'Verifiera Användare', - youAreInactive: - 'Du har inte varit aktiv på ett tag och kommer inom kort att automatiskt loggas ut för din egen säkerhet. Vill du forsätta att vara inloggad?', - }, - error: { - autosaving: 'Det uppstod ett problem när det här dokumentet skulle sparas automatiskt.', - correctInvalidFields: 'Vänligen korrigera ogiltiga fält.', - deletingTitle: - 'Det uppstod ett fel vid borttagningen av {{title}}. Vänligen kontrollera din anslutning och försök igen.', - loadingDocument: 'Det gick inte att läsa in dokumentet med ID {{id}}.', - noMatchedField: 'Inget matchande fält hittades för "{{label}}"', - notAllowedToAccessPage: 'Du får inte komma åt den här sidan.', - previewing: 'Det uppstod ett problem när det här dokumentet skulle förhandsgranskas.', - unableToDeleteCount: 'Det gick inte att ta bort {{count}} av {{total}} {{label}}.', - unableToUpdateCount: 'Det gick inte att uppdatera {{count}} av {{total}} {{label}}.', - unauthorized: 'Obehörig, du måste vara inloggad för att göra denna begäran.', - unknown: 'Ett okänt fel har uppstått.', - unspecific: 'Ett fel har uppstått.', - }, - fields: { - addLabel: 'Lägg till {{label}}', - addLink: 'Lägg till Länk', - addNew: 'Lägg till ny', - addNewLabel: 'Lägg till ny {{label}}', - addRelationship: 'Lägg till Relation', - addUpload: 'Lägg till Uppladdning', - block: 'block', - blockType: 'Block Typ', - blocks: 'block', - chooseFromExisting: 'Välj bland befintliga', - collapseAll: 'kollapsa Alla', - editLink: 'Redigera Länk', - editRelationship: 'Redigera Relation', - itemsAndMore: '{{items}} och {{count}} mer', - labelRelationship: '{{label}} Relation', - latitude: 'Latitud', - linkedTo: 'Länkad till <0>{{label}}', - longitude: 'Longitud', - passwordsDoNotMatch: 'Lösenorden matchar inte.', - removeRelationship: 'Ta Bort Relation', - removeUpload: 'Ta Bort Uppladdning', - saveChanges: 'Spara ändringar', - searchForBlock: 'Sök efter ett block', - selectFieldsToEdit: 'Välj fält att redigera', - showAll: 'Visa Alla', - swapRelationship: 'Byt Förhållande', - swapUpload: 'Byt Uppladdning', - toggleBlock: 'Växla block', - uploadNewLabel: 'Ladda upp ny {{label}}', - }, - general: { - aboutToDelete: 'Du är på väg att ta bort {{label}} <1>{{title}}. Är du säker?', - aboutToDeleteCount_many: 'Du är på väg att ta bort {{count}} {{label}}', - aboutToDeleteCount_one: 'Du är på väg att ta bort {{count}} {{label}}', - aboutToDeleteCount_other: 'Du är på väg att ta bort {{count}} {{label}}', - addBelow: 'Lägg Till Nedanför', - addFilter: 'Lägg Till Filter', - adminTheme: 'Admin Tema', - and: 'Och', - applyChanges: 'Verkställ ändringar', - ascending: 'Stigande', - automatic: 'Automatisk', - backToDashboard: 'Tillbaka till Manöverpanelen', - cancel: 'Avbryt', - changesNotSaved: - 'Dina ändringar har inte sparats. Om du lämnar nu kommer du att förlora dina ändringar.', - close: 'Stänga', - collapse: 'Kollapsa', - collections: 'Samlingar', - columnToSort: 'Kolumn att Sortera', - columns: 'Kolumner', - confirm: 'Bekräfta', - confirmDeletion: 'Bekräfta radering', - confirmDuplication: 'Bekräfta dubblering', - copied: 'Kopierad', - copy: 'Kopiera', - create: 'Skapa', - createNew: 'Skapa Ny', - createNewLabel: 'Skapa ny {{label}}', - created: 'Skapad', - creating: 'Skapar', - creatingNewLabel: 'Skapar ny {{label}}', - dark: 'Mörk', - dashboard: 'Manöverpanel', - delete: 'Ta bort', - deletedCountSuccessfully: 'Raderade {{count}} {{label}} framgångsrikt.', - deleting: 'Tar bort...', - descending: 'Fallande', - deselectAllRows: 'Avmarkera alla rader', - duplicate: 'Duplicera', - duplicateWithoutSaving: 'Duplicera utan att spara ändringar', - edit: 'Redigera', - editLabel: 'Redigera {{label}}', - editing: 'Redigerar', - editingLabel_many: 'Redigerar {{count}} {{label}}', - editingLabel_one: 'Redigerar {{count}} {{label}}', - editingLabel_other: 'Redigerar {{count}} {{label}}', - email: 'E-post', - emailAddress: 'E-postadress', - enterAValue: 'Ange ett värde', - error: 'Fel', - errors: 'Fel', - fallbackToDefaultLocale: 'Återgång till standardlokalspråk', - filterWhere: 'Filtrera {{label}} där', - filters: 'Filter', - globals: 'Globala', - language: 'Språk', - lastModified: 'Senast Ändrad', - leaveAnyway: 'Lämna ändå', - leaveWithoutSaving: 'Lämna utan att spara', - light: 'Ljus', - livePreview: 'Förhandsvisa', - loading: 'Läser in', - locale: 'Lokal', - menu: 'Meny', - moveDown: 'Flytta Ner', - moveUp: 'Flytta Upp', - noFiltersSet: 'Inga filter inställda', - noLabel: '', - noOptions: 'Inga alternativ', - noResults: - 'Inga {{label}} hittades. Antingen finns inga {{label}} ännu eller matchar ingen filtren du har angett ovan.', - noValue: 'Inget värde', - none: 'Ingen', - notFound: 'Hittades inte', - nothingFound: 'Inget hittades', - of: 'av', - open: 'Öppna', - or: 'Eller', - order: 'Ordning', - pageNotFound: 'Sidan hittas inte', - password: 'Lösenord', - payloadSettings: 'Payload Inställningar', - perPage: 'Per Sida: {{limit}}', - remove: 'Ta bort', - reset: 'Återställ', - row: 'Rad', - rows: 'Rader', - save: 'Spara', - saving: 'Sparar...', - searchBy: 'Sök efter {{label}}', - selectAll: 'Välj alla {{count}} {{label}}', - selectAllRows: 'Välj alla rader', - selectValue: 'Välj ett värde', - selectedCount: '{{count}} {{label}} har valts', - showAllLabel: 'Visa alla {{label}}', - sorryNotFound: 'Tyvärr–det finns inget som motsvarar din begäran.', - sort: 'Sortera', - sortByLabelDirection: 'Sortera efter {{label}} {{direction}}', - stayOnThisPage: 'Stanna på denna sida', - submissionSuccessful: 'Inlämningen Lyckades.', - submit: 'Lämna in', - successfullyCreated: '{{label}} skapades framgångsrikt.', - thisLanguage: 'Svenska', - titleDeleted: '{{label}} "{{title}}" togs bort framgångsrikt.', - unauthorized: 'Obehörig', - unsavedChangesDuplicate: 'Du har osparade ändringar. Vill du fortsätta att duplicera?', - untitled: 'Namnlös', - updatedAt: 'Uppdaterades Vid', - updatedCountSuccessfully: 'Uppdaterade {{count}} {{label}} framgångsrikt.', - updatedSuccessfully: 'Uppdaterades framgångsrikt.', - updating: 'Uppdatering', - welcome: 'Välkommen', - }, - operators: { - contains: 'innehåller', - equals: 'likar med', - exists: 'finns', - isGreaterThan: 'är större än', - isGreaterThanOrEqualTo: 'är större än eller lika med', - isIn: 'är med', - isLessThan: 'är mindre än', - isLessThanOrEqualTo: 'är mindre än eller lika med', - isLike: 'är som', - isNotEqualTo: 'är inte lika med', - isNotIn: 'är inte med', - near: 'nära', - }, - upload: { - crop: 'Skörd', - cropToolDescription: - 'Dra i hörnen på det valda området, rita ett nytt område eller justera värdena nedan.', - dragAndDrop: 'Dra och släpp en fil', - editImage: 'Redigera bild', - focalPoint: 'Fokuspunkt', - focalPointDescription: - 'Dra fokuspunkten direkt på förhandsgranskningen eller justera värdena nedan.', - height: 'Höjd', - previewSizes: 'Förhandsgranska Storlekar', - selectCollectionToBrowse: 'Välj en Samling att Bläddra i', - selectFile: 'Välj en fil', - setCropArea: 'Ange skärpområde', - setFocalPoint: 'Ställ in fokuspunkt', - sizesFor: 'Storlekar för {{label}}', - width: 'Bredd', - }, - validation: { - fieldHasNo: 'Detta fält har ingen {{label}}', - limitReached: 'Gränsen nådd, endast {{max}} objekt kan läggas till.', - required: 'Detta fält är obligatoriskt.', - requiresAtLeast: 'Detta fält kräver minst {{count}} {{label}}.', - }, - version: { - aboutToPublishSelection: 'Du är på väg att publicera alla {{label}} i urvalet. Är du säker?', - aboutToRestore: - 'Du är på väg att återställa detta {{label}} dokumentet till det tillståndet som det var den {{versionDate}}.', - aboutToRestoreGlobal: - 'Du är på väg att återställa det globala {{label}} till det tillståndet som det var den {{versionDate}}.', - aboutToRevertToPublished: - 'Du är på väg att återställa det här dokumentets ändringar till dess publicerade tillstånd. Är du säker?', - aboutToUnpublish: 'Du håller på att avpublicera detta dokumentet. Är du säker?', - aboutToUnpublishSelection: - 'Du är på väg att avpublicera alla {{label}} i urvalet. Är du säker?', - autosave: 'Automatisk sparning', - autosavedSuccessfully: 'Autosparades framgångsrikt.', - changed: 'Ändrad', - compareVersion: 'Jämför version med:', - confirmPublish: 'Bekräfta publicering', - confirmRevertToSaved: 'Bekräfta återgång till sparad', - confirmUnpublish: 'Bekräfta avpublicering', - confirmVersionRestoration: 'Bekräfta Versionsåterställning', - draft: 'Utkast', - draftSavedSuccessfully: 'Utkastet sparades framgångsrikt.', - lastSavedAgo: 'Senast sparad för {{distance}} sedan', - noFurtherVersionsFound: 'Inga fler versioner hittades', - noRowsFound: 'Inga {{label}} hittades', - preview: 'Förhandsvisa', - problemRestoringVersion: 'Det uppstod ett problem när den här versionen skulle återställas', - publish: 'Publicera', - publishChanges: 'Publicera ändringar', - published: 'Publicerad', - publishing: 'Publicering', - restoreThisVersion: 'Återställ den här versionen', - restoredSuccessfully: 'Återställd framgångsrikt.', - restoring: 'Återställer...', - revertToPublished: 'Återgå till publicerad', - saveDraft: 'Spara Utkast', - selectLocales: 'Välj språk att visa', - selectVersionToCompare: 'Välj en version att jämföra', - showLocales: 'Visa språk:', - status: 'Status', - type: 'Typ', - unpublish: 'Avpublicera', - unpublishing: 'Avpublicerar...', - version: 'Version', - versionCreatedOn: '{{version}} skapad den:', - versionID: 'Versions-ID', - versions: 'Versioner', - viewingVersion: 'Visar version för {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: 'Visa version för den globala {{entityLabel}}', - viewingVersions: 'Visar versioner för {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: 'Visa versioner för den globala {{entityLabel}}', - }, -} diff --git a/packages/translations/src/_generatedFiles_/client/th.js b/packages/translations/src/_generatedFiles_/client/th.js deleted file mode 100644 index a902bf4f74..0000000000 --- a/packages/translations/src/_generatedFiles_/client/th.js +++ /dev/null @@ -1,288 +0,0 @@ -export default { - authentication: { - account: 'บัญชี', - accountOfCurrentUser: 'บัญชีปัจจุบัน', - alreadyActivated: 'เปิดใช้งานแล้ว', - alreadyLoggedIn: 'ลงชื่อเข้าใช้แล้ว', - backToLogin: 'กลับไปหน้าเข้าสู่ระบบ', - beginCreateFirstUser: 'สร้างผู้ใช้แรกเพื่อเริ่มใช้งาน', - changePassword: 'เปลี่ยนรหัสผ่าน', - confirmGeneration: 'ยืนยันการสร้าง', - confirmPassword: 'ยืนยันรหัสผ่าน', - createFirstUser: 'สร้างผู้ใช้แรก', - emailNotValid: 'อีเมลไม่ถูกต้อง', - emailSent: 'ส่งอีเมลเรียบร้อยแล้ว', - enableAPIKey: 'เปิดใช้ API Key', - failedToUnlock: 'ไม่สามารถปลดล็อกได้', - forceUnlock: 'ปลดล็อกบัญชี', - forgotPassword: 'ลืมรหัสผ่าน', - forgotPasswordEmailInstructions: - 'กรุณาใส่อีเมลของคุณ ระบบจะส่งวิธีการเปลี่ยนรหัสผ่านไปให้คุณทางอีเมล', - forgotPasswordQuestion: 'ลืมรหัสผ่าน?', - generate: 'สร้าง', - generateNewAPIKey: 'สร้าง API Key', - logBackIn: 'เข้าสู่ระบบอีกครั้ง', - logOut: 'ออกจากระบบ', - loggedOutInactivity: 'คุณได้ออกจากระบบเนื่องจากไม่มีการใช้งาน', - loggedOutSuccessfully: 'ออกจากระบบเรียบร้อยแล้ว', - login: 'เข้าสู่ระบบ', - logout: 'ออกจากระบบ', - logoutUser: 'ออกจากระบบ', - newAPIKeyGenerated: 'สร้าง API Key ใหม่แล้ว', - newPassword: 'รหัสผ่านใหม่', - resetPassword: 'รีเซ็ตรหัสผ่าน', - stayLoggedIn: 'เข้าสู่ระบบต่อไป', - successfullyUnlocked: 'ปลดล็อกบัญชีสำเร็จ', - unableToVerify: 'ไม่สามารถยืนยันบัญชีได้', - verified: 'ยืนยันบััญชีแล้ว', - verifiedSuccessfully: 'ยืนยันบัญชีสำเร็จ', - verify: 'ยืนยันบัญชี', - verifyUser: 'ยืนยันบัญชี', - youAreInactive: - 'คุณกำลังจะถูกให้ออกจากระบบในเร็ว ๆ นี้เนื่องจากไม่มีการใช้งานระบบมาสักพักหนึ่ง คุณต้องการเข้าสู่ระบบต่อหรือไม่?', - }, - error: { - autosaving: 'เกิดปัญหาระหว่างการบันทึกเอกสารอัตโนมัติ', - correctInvalidFields: 'โปรดแก้ไขช่องที่ไม่ถูกต้อง', - deletingTitle: 'เกิดปัญหาระหว่างการลบ {{title}} โปรดตรวจสอบการเชื่อมต่อของคุณแล้วลองอีกครั้ง', - loadingDocument: 'เกิดปัญหาระหว่างการโหลดเอกสารที่มี ID {{id}}', - noMatchedField: 'ไม่พบช่อง "{{label}}"', - notAllowedToAccessPage: 'คุณไม่ได้รับอนุญาตให้เข้าถึงหน้านี้', - previewing: 'เกิดปัญหาระหว่างการแสดงตัวอย่างเอกสาร', - unableToDeleteCount: 'ไม่สามารถลบ {{count}} จาก {{total}} {{label}}', - unableToUpdateCount: 'ไม่สามารถอัปเดต {{count}} จาก {{total}} {{label}}', - unauthorized: 'คุณไม่ได้รับอนุญาต กรุณาเข้าสู่ระบบเพื่อทำคำขอนี้', - unknown: 'เกิดปัญหาบางอย่างที่ไม่ทราบสาเหตุ', - unspecific: 'เกิดปัญหาบางอย่าง', - }, - fields: { - addLabel: 'เพิ่ม {{label}}', - addLink: 'เพิ่มลิงค์', - addNew: 'เพิ่ม', - addNewLabel: 'เพิ่ม {{label}} ใหม่', - addRelationship: 'เพิ่มความสัมพันธ์', - addUpload: 'เพิ่มการอัปโหลด', - block: 'Block', - blockType: 'ประเภท Block', - blocks: 'Blocks', - chooseFromExisting: 'เลือกจากที่มีอยู่', - collapseAll: 'ยุบทั้งหมด', - editLink: 'แก้ไขลิงก์', - editRelationship: 'แก้ไขความสัมพันธ์', - itemsAndMore: '{{items}} และเพิ่มเติมอีก {{count}}', - labelRelationship: 'ความสัมพันธ์กับ {{label}}', - latitude: 'ละติจูด', - linkedTo: 'เชื่อมกับ <0>{{label}} สำเร็จ', - longitude: 'ลองติจูด', - passwordsDoNotMatch: 'รหัสผ่านไม่ตรงกัน', - removeRelationship: 'ลบความสัมพันธ์', - removeUpload: 'ลบอัปโหลด', - saveChanges: 'บันทึก', - searchForBlock: 'ค้นหา Block', - selectFieldsToEdit: 'เลือกช่องที่จะแก้ไข', - showAll: 'แสดงทั้งหมด', - swapRelationship: 'สลับความสัมพันธ์', - swapUpload: 'สลับอัปโหลด', - toggleBlock: 'เปิด/ปิด Block', - uploadNewLabel: 'อัปโหลด {{label}} ใหม่', - }, - general: { - aboutToDelete: 'คุณกำลังจะลบ {{label}} <1>{{title}} ต้องการดำเนินการต่อหรือไม่?', - aboutToDeleteCount_many: 'คุณกำลังจะลบ {{count}} {{label}}', - aboutToDeleteCount_one: 'คุณกำลังจะลบ {{count}} {{label}}', - aboutToDeleteCount_other: 'คุณกำลังจะลบ {{count}} {{label}}', - addBelow: 'เพิ่มด้านล่าง', - addFilter: 'เพิ่มการกรอง', - adminTheme: 'ธีมผู้ดูแลระบบ', - and: 'และ', - applyChanges: 'ใช้การเปลี่ยนแปลง', - ascending: 'น้อยไปมาก', - automatic: 'อัตโนมัติ', - backToDashboard: 'กลับไปหน้าแดชบอร์ด', - cancel: 'ยกเลิก', - changesNotSaved: 'การเปลี่ยนแปลงยังไม่ได้ถูกบันทึก ถ้าคุณออกตอนนี้ สิ่งที่แก้ไขไว้จะหายไป', - close: 'ปิด', - collapse: 'ยุบ', - collections: 'Collections', - columnToSort: 'คอลัมน์ที่ต้องการเรียง', - columns: 'คอลัมน์', - confirm: 'ยืนยัน', - confirmDeletion: 'ยืนยันการลบ', - confirmDuplication: 'ยืนยันการสำเนา', - copied: 'คัดลอกแล้ว', - copy: 'คัดลอก', - create: 'สร้าง', - createNew: 'สร้างใหม่', - createNewLabel: 'สร้าง {{label}} ใหม่', - created: 'ถูกสร้างเมื่อ', - creating: 'กำลังสร้าง', - creatingNewLabel: 'กำลังสร้าง {{label}} ใหม่', - dark: 'มืด', - dashboard: 'แดชบอร์ด', - delete: 'ลบ', - deletedCountSuccessfully: 'Deleted {{count}} {{label}} successfully.', - deleting: 'กำลังลบ...', - descending: 'มากไปน้อย', - deselectAllRows: 'ยกเลิกการเลือกทุกแถว', - duplicate: 'สำเนา', - duplicateWithoutSaving: 'สำเนาโดยไม่บันทึกการแก้ไข', - edit: 'แก้ไข', - editLabel: 'แก้ไข {{label}}', - editing: 'แก้ไข', - editingLabel_many: 'กำลังแก้ไข {{count}} {{label}}', - editingLabel_one: 'กำลังแก้ไข {{count}} {{label}}', - editingLabel_other: 'กำลังแก้ไข {{count}} {{label}}', - email: 'อีเมล', - emailAddress: 'อีเมล', - enterAValue: 'ระบุค่า', - error: 'ข้อผิดพลาด', - errors: 'ข้อผิดพลาด', - fallbackToDefaultLocale: 'สำรองไปยังตำแหน่งที่ตั้งเริ่มต้น', - filterWhere: 'กรอง {{label}} เฉพาะ', - filters: 'กรอง', - globals: 'Globals', - language: 'ภาษา', - lastModified: 'แก้ไขล่าสุดเมื่อ', - leaveAnyway: 'ออกจากหน้านี้', - leaveWithoutSaving: 'ออกโดยไม่บันทึก', - light: 'สว่าง', - livePreview: 'แสดงตัวอย่าง', - loading: 'กำลังโหลด', - locale: 'ตำแหน่งที่ตั้ง', - menu: 'เมนู', - moveDown: 'ขยับขึ้น', - moveUp: 'ขยับลง', - noFiltersSet: 'ไม่มีการกรอง', - noLabel: '<ไม่มี {{label}}>', - noOptions: 'ไม่มีตัวเลือก', - noResults: - 'ไม่พบ {{label}} เนื่องจากยังไม่มี {{label}} หรือไม่มี {{label}} ใดตรงกับการกรองด้านบน', - noValue: 'ไม่มีค่า', - none: 'ไม่มี', - notFound: 'ไม่พบ', - nothingFound: 'ไม่พบสิ่งใด', - of: 'จาก', - open: 'เปิด', - or: 'หรือ', - order: 'เรียงตาม', - pageNotFound: 'ไม่พบหน้าที่ต้องการ', - password: 'รหัสผ่าน', - payloadSettings: 'การตั้งค่า Payload', - perPage: 'จำนวนต่อหน้า: {{limit}}', - remove: 'ลบ', - reset: 'รีเซ็ต', - row: 'แถว', - rows: 'แถว', - save: 'บันทึก', - saving: 'กำลังบันทึก...', - searchBy: 'ค้นหาด้วย {{label}}', - selectAll: 'เลือกทั้งหมด {{count}} {{label}}', - selectAllRows: 'เลือกทุกแถว', - selectValue: 'เลือกค่า', - selectedCount: 'เลือก {{count}} {{label}} แล้ว', - showAllLabel: 'แสดง {{label}} ทั้งหมด', - sorryNotFound: 'ขออภัย ไม่สามารถทำตามคำขอของคุณได้', - sort: 'เรียง', - sortByLabelDirection: 'เรียงลำดับตาม {{label}} {{direction}}', - stayOnThisPage: 'อยู่หน้านี้ต่อ', - submissionSuccessful: 'ส่งสำเร็จ', - submit: 'ส่ง', - successfullyCreated: 'สร้าง {{label}} สำเร็จ', - thisLanguage: 'ไทย', - titleDeleted: 'ลบ {{label}} "{{title}}" สำเร็จ', - unauthorized: 'ไม่ได้รับอนุญาต', - unsavedChangesDuplicate: 'คุณมีการแก้ไขที่ยังไม่ถูกบันทึก คุณต้องการทำสำเนาต่อหรือไม่?', - untitled: 'ไม่มีชื่อ', - updatedAt: 'แก้ไขเมื่อ', - updatedCountSuccessfully: 'อัปเดต {{count}} {{label}} เรียบร้อยแล้ว', - updatedSuccessfully: 'แก้ไขสำเร็จ', - updating: 'กำลังอัปเดต', - welcome: 'ยินดีต้อนรับ', - }, - operators: { - contains: 'มี', - equals: 'เท่ากับ', - exists: 'มีอยู่', - isGreaterThan: 'มากกว่า', - isGreaterThanOrEqualTo: 'มากกว่าหรือเท่ากับ', - isIn: 'อยู่ใน', - isLessThan: 'น้อยกว่า', - isLessThanOrEqualTo: 'น้อยกว่าหรือเท่ากับ', - isLike: 'เหมือน', - isNotEqualTo: 'ไม่เท่ากับ', - isNotIn: 'ไม่ได้อยู่ใน', - near: 'ใกล้', - }, - upload: { - crop: 'พืชผล', - cropToolDescription: 'ลากมุมของพื้นที่ที่เลือก, วาดพื้นที่ใหม่หรือปรับค่าด้านล่าง', - dragAndDrop: 'ลากและวางไฟล์', - editImage: 'แก้ไขรูปภาพ', - focalPoint: 'จุดสนใจ', - focalPointDescription: 'ลากจุดโฟกัสตรงบนภาพตัวอย่างหรือปรับค่าที่อยู่ด้านล่าง', - height: 'ความสูง', - previewSizes: 'ขนาดตัวอย่าง', - selectCollectionToBrowse: 'เลือก Collection ที่ต้องการค้นหา', - selectFile: 'เลือกไฟล์', - setCropArea: 'ตั้งค่าพื้นที่การครอบตัด', - setFocalPoint: 'ตั้งจุดโฟกัส', - sizesFor: 'ขนาดสำหรับ {{label}}', - width: 'ความกว้าง', - }, - validation: { - fieldHasNo: 'ช่องนี้ไม่มี {{label}}', - limitReached: 'ถึงขีดจำกัดแล้ว, สามารถเพิ่มไอเทมได้เพียง {{max}} ไอเทมเท่านั้น', - required: 'จำเป็นต้องระบุค่า', - requiresAtLeast: 'ต้องมีอย่างน้อย {{count}} {{label}}', - }, - version: { - aboutToPublishSelection: 'คุณกำลังจะเผยแพร่ {{label}} ทั้งหมดในส่วนที่เลือก คุณแน่ใจไหม?', - aboutToRestore: - 'คุณกำลังจะคืนค่าเอกสาร {{label}} นี้กลับไปอยู่ในเวอร์ชันเมื่อวันที่ {{versionDate}}', - aboutToRestoreGlobal: - 'คุณกำลังจะคืนค่า global {{label}} กลับไปอยู่ในเวอร์ชันเมื่อวันที่ {{versionDate}}.', - aboutToRevertToPublished: - 'คุณกำลังจะย้อนการเปลี่ยนแปลงของเอกสารนี้ไปยังเวอร์ชันที่เผยแพร่อยู่ คุณต้องการดำเนินการต่อหรือไม่?', - aboutToUnpublish: 'คุณกำลังจะยกเลิกเผยแพร่เอกสารนี้ คุณต้องการดำเนินการต่อหรือไม่?', - aboutToUnpublishSelection: 'คุณกำลังจะเลิกเผยแพร่ {{label}} ทั้งหมดในส่วนที่เลือก คุณแน่ใจไหม?', - autosave: 'บันทึกอัตโนมัติ', - autosavedSuccessfully: 'บันทึกอัตโนมัติสำเร็จ', - changed: 'มีการแก้ไข', - compareVersion: 'เปรียบเทียบเวอร์ชันกับ:', - confirmPublish: 'ยืนยันการเผยแพร่', - confirmRevertToSaved: 'ยืนยันย้อนการแก้ไข', - confirmUnpublish: 'ยืนยันการยกเลิกการเผยแพร่', - confirmVersionRestoration: 'ยืนยันการกู้คืนเวอร์ชัน', - draft: 'ฉบับร่าง', - draftSavedSuccessfully: 'บันทึกร่างสำเร็จ', - lastSavedAgo: 'บันทึกครั้งล่าสุด {{distance}} ที่ผ่านมา', - noFurtherVersionsFound: 'ไม่พบเวอร์ชันอื่น ๆ', - noRowsFound: 'ไม่พบ {{label}}', - preview: 'ตัวอย่าง', - problemRestoringVersion: 'เกิดปัญหาระหว่างการกู้คืนเวอร์ชันนี้', - publish: 'เผยแพร่', - publishChanges: 'เผยแพร่การแก้ไข', - published: 'เผยแพร่แล้ว', - publishing: 'การเผยแพร่', - restoreThisVersion: 'กู้คืนเวอร์ชันนี้', - restoredSuccessfully: 'กู้คืนเวอร์ชันสำเร็จ', - restoring: 'กำลังกู้คืน...', - revertToPublished: 'ย้อนกลับไปเวอร์ชันที่เผยแพร่อยู่', - saveDraft: 'บันทึกร่าง', - selectLocales: 'เลือกภาษาที่ต้องการแสดง', - selectVersionToCompare: 'เลือกเวอร์ชันที่ต้องการเปรียบเทียบ', - showLocales: 'แสดงภาษา:', - status: 'สถานะ', - type: 'ประเภท', - unpublish: 'หยุดเผยแพร่', - unpublishing: 'กำลังหยุดการเผยแพร่...', - version: 'เวอร์ชัน', - versionCreatedOn: '{{version}} ถูกสร้างเมื่อ:', - versionID: 'ID ของเวอร์ชัน', - versions: 'เวอร์ชัน', - viewingVersion: 'กำลังดูเวอร์ชันของ {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: 'กำลังดูเวอร์ชันของ global {{entityLabel}}', - viewingVersions: 'กำลังดูเวอร์ชันของ {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: 'กำลังดูเวอร์ชันของ global {{entityLabel}}', - }, -} diff --git a/packages/translations/src/_generatedFiles_/client/tr.js b/packages/translations/src/_generatedFiles_/client/tr.js deleted file mode 100644 index a7c90d04de..0000000000 --- a/packages/translations/src/_generatedFiles_/client/tr.js +++ /dev/null @@ -1,293 +0,0 @@ -export default { - authentication: { - account: 'Hesap', - accountOfCurrentUser: 'Şu anki kullanıcının hesabı', - alreadyActivated: 'Hesap zaten etkinleştirildi', - alreadyLoggedIn: 'Hesaba zaten giriş yapıldı', - backToLogin: 'Giriş ekranına geri dön', - beginCreateFirstUser: 'Başlamak için ilk kullanıcı hesabını oluşturun.', - changePassword: 'Parolayı Değiştir', - confirmGeneration: 'Oluştumayı Onayla', - confirmPassword: 'Parolayı Onayla', - createFirstUser: 'İlk kullanıcı oluştur', - emailNotValid: 'Girilen e-posta geçersiz', - emailSent: 'E-posta gönderildi', - enableAPIKey: 'Api anahtarını etkinleştir', - failedToUnlock: 'Hesabı aktifleştirme başarısız oldu', - forceUnlock: 'Hesabı Etkinleştir', - forgotPassword: 'Parolamı Unuttum', - forgotPasswordEmailInstructions: - 'Lütfen e-posta adresinizi aşağıdaki alana girin. Parolanızı nasıl sıfırlayacağınızı gösteren bir e-posta adresi alacaksınız.', - forgotPasswordQuestion: 'Parolanızı mı unuttunuz?', - generate: 'Oluştur', - generateNewAPIKey: 'Yeni bir API anahtarı oluştur', - logBackIn: 'Tekrar giriş yapın', - logOut: 'Çıkış', - loggedOutInactivity: 'Uzun süre işlem yapmadığınız için oturumunuz kapatıldı.', - loggedOutSuccessfully: 'Başarıyla çıkış yaptınız.', - login: 'Giriş', - logout: 'Çıkış', - logoutUser: 'Kullanıcıyı çıkış yapmaya zorla', - newAPIKeyGenerated: 'Yeni API anahtarı oluşturuldu.', - newPassword: 'Yeni Parola', - resetPassword: 'Parolayı Sıfırla', - stayLoggedIn: 'Oturumu açık tut', - successfullyUnlocked: 'Hesabın kilidi başarıyla açıldı', - unableToVerify: 'Doğrulama başarısız', - verified: 'Doğrulandı', - verifiedSuccessfully: 'Hesap başarıyla doğrulandı', - verify: 'Doğrula', - verifyUser: 'Kullanıcıyı doğrula', - youAreInactive: - 'Bir süredir işlem yapmadığınız için yakında oturumunuz kapatılacak. Oturumunuzun açık kalmasını istiyor musunuz?', - }, - error: { - autosaving: 'Otomatik kaydetme başarısız oldu', - correctInvalidFields: 'Lütfen geçersiz alanları düzeltin.', - deletingTitle: - '{{title}} silinirken bir sorun yaşandı. Lütfen internet bağlantınızı kontrol edip tekrar deneyin.', - loadingDocument: "{{id}} ID'ye sahip döküman yüklenirken bir sorun oluştu.", - noMatchedField: '"{{label}}" ile eşleşen alan bulunamadı.', - notAllowedToAccessPage: 'Bu sayfaya erişim izniniz yok.', - previewing: 'Önizleme başarısız oldu', - unableToDeleteCount: '{{total}} {{label}} içinden {{count}} silinemiyor.', - unableToUpdateCount: '{{total}} {{label}} içinden {{count}} güncellenemiyor.', - unauthorized: 'Bu işlemi gerçekleştirmek için lütfen giriş yapın.', - unknown: 'Bilinmeyen bir hata oluştu.', - unspecific: 'Bir hata oluştu.', - }, - fields: { - addLabel: '{{label}} ekle', - addLink: 'Link Ekle', - addNew: 'Yeni', - addNewLabel: 'Yeni {{label}}', - addRelationship: 'İlişki Ekle', - addUpload: 'Yükleme Ekle', - block: 'blok', - blockType: 'Blok tipi', - blocks: 'blok', - chooseFromExisting: 'Varolanlardan seç', - collapseAll: 'Tümünü daralt', - editLink: 'Bağlantıyı Düzenle', - editRelationship: 'İlişkiyi Ekle', - itemsAndMore: '{{items}} and {{count}} more', - labelRelationship: '{{label}} Relationship', - latitude: 'Enlem', - linkedTo: '<0>label için bağlantı verildi', - longitude: 'Boylam', - passwordsDoNotMatch: 'Parolalar eşleşmiyor.', - removeRelationship: 'İlişkiyi Kaldır', - removeUpload: 'Dosyayı Sil', - saveChanges: 'Değişiklikleri kaydet', - searchForBlock: 'Blok ara', - selectFieldsToEdit: 'Düzenlenecek alanları seçin', - showAll: 'Tümünü göster', - swapRelationship: 'Takas Ilişkisi', - swapUpload: 'Karşıya Yüklemeyi Değiştir', - toggleBlock: 'Bloğu aç/kapat', - uploadNewLabel: 'Karşıya {{label}} yükle', - }, - general: { - aboutToDelete: - '<1>{{title}} {{label}} silinmek üzere. Silme işlemine devam etmek istiyor musunuz?', - aboutToDeleteCount_many: '{{count}} {{label}} silmek üzeresiniz', - aboutToDeleteCount_one: '{{count}} {{label}} silmek üzeresiniz', - aboutToDeleteCount_other: '{{count}} {{label}} silmek üzeresiniz', - addBelow: 'Altına ekle', - addFilter: 'Filtre ekle', - adminTheme: 'Admin arayüzü', - and: 've', - applyChanges: 'Değişiklikleri Uygula', - ascending: 'artan', - automatic: 'Otomatik', - backToDashboard: 'Anasayfaya geri dön', - cancel: 'İptal', - changesNotSaved: - 'Değişiklikleriniz henüz kaydedilmedi. Eğer bu sayfayı terk ederseniz değişiklikleri kaybedeceksiniz.', - close: 'Kapat', - collapse: 'Daralt', - collections: 'Koleksiyonlar', - columnToSort: 'Sıralanacak Sütunlar', - columns: 'Sütunlar', - confirm: 'Onayla', - confirmDeletion: 'Silmeyi onayla', - confirmDuplication: 'Çoğaltmayı onayla', - copied: 'Kopyalandı', - copy: 'Kopyala', - create: 'Oluştur', - createNew: 'Yeni oluştur', - createNewLabel: 'Yeni bir {{label}} oluştur', - created: 'Oluşturma tarihi', - creating: 'Oluşturuluyor', - creatingNewLabel: 'Yeni bir {{label}} oluşturuluyor', - dark: 'Karanlık', - dashboard: 'Anasayfa', - delete: 'Sil', - deletedCountSuccessfully: '{{count}} {{label}} başarıyla silindi.', - deleting: 'Siliniyor...', - descending: 'Azalan', - deselectAllRows: 'Tüm satırların seçimini kaldır', - duplicate: 'Çoğalt', - duplicateWithoutSaving: 'Ayarları kaydetmeden çoğalt', - edit: 'Düzenle', - editLabel: '{{label}} düzenle', - editing: 'Düzenleniyor', - editingLabel_many: '{{count}} {{label}} düzenleniyor', - editingLabel_one: '{{count}} {{label}} düzenleniyor', - editingLabel_other: '{{count}} {{label}} düzenleniyor', - email: 'E-posta', - emailAddress: 'E-posta adresi', - enterAValue: 'Değer girin', - error: 'Hata', - errors: 'Hatalar', - fallbackToDefaultLocale: 'Varsayılan yerel ayara geri dönme', - filterWhere: '{{label}} filtrele:', - filters: 'Filtreler', - globals: 'Globaller', - language: 'Dil', - lastModified: 'Son değiştirme', - leaveAnyway: 'Yine de ayrıl', - leaveWithoutSaving: 'Kaydetmeden ayrıl', - light: 'Aydınlık', - livePreview: 'Önizleme', - loading: 'Yükleniyor', - locale: 'Yerel ayar', - menu: 'Menü', - moveDown: 'Aşağı taşı', - moveUp: 'Yukarı taşı', - noFiltersSet: 'Tanımlı filtre yok', - noLabel: '<{{label}} yok>', - noOptions: 'Seçenek yok', - noResults: - '{{label}} bulunamadı. Henüz bir {{label}} eklenmemiş olabilir veya seçtiğiniz filtrelerle eşleşen bir sonuç bulunamamış olabilir.', - noValue: 'Değer yok', - none: 'Hiç', - notFound: 'Bulunamadı', - nothingFound: 'Hiçbir şey bulunamadı', - of: 'of', - open: 'Aç', - or: 'Or', - order: 'Order', - pageNotFound: 'Sayfa bulunamadı', - password: 'Parola', - payloadSettings: 'Ayarlar', - perPage: 'Sayfa başına: {{limit}}', - remove: 'Kaldır', - reset: 'Sıfırla', - row: 'Satır', - rows: 'Satır', - save: 'Kaydet', - saving: 'Kaydediliyor...', - searchBy: 'Şuna göre sırala: {{label}}', - selectAll: "Tüm {{count}} {{label}}'ı seçin", - selectAllRows: 'Tüm satırları seçin', - selectValue: 'Bir değer seçin', - selectedCount: '{{count}} {{label}} seçildi', - showAllLabel: 'Tüm {{label}} göster', - sorryNotFound: 'Üzgünüz, isteğinizle eşleşen bir sonuç bulunamadı.', - sort: 'Sırala', - sortByLabelDirection: '{{label}} göre sırala {{direction}}', - stayOnThisPage: 'Bu sayfada kal', - submissionSuccessful: 'Gönderme başarılı', - submit: 'Gönder', - successfullyCreated: '{{label}} başarıyla oluşturuldu.', - thisLanguage: 'Türkçe', - titleDeleted: '{{label}} {{title}} başarıyla silindi.', - unauthorized: 'Yetkisiz', - unsavedChangesDuplicate: - 'Kaydedilmemiş değişiklikler var. Çoğaltma işlemine devam etmek istiyor musunuz?', - untitled: 'Başlıksız', - updatedAt: 'Güncellenme tarihi', - updatedCountSuccessfully: '{{count}} {{label}} başarıyla güncellendi.', - updatedSuccessfully: 'Başarıyla güncellendi.', - updating: 'Güncelleniyor', - welcome: 'Hoşgeldiniz', - }, - operators: { - contains: 'içerir', - equals: 'eşittir', - exists: 'var', - isGreaterThan: 'şundan büyüktür', - isGreaterThanOrEqualTo: 'büyüktür veya eşittir', - isIn: 'içinde', - isLessThan: 'küçüktür', - isLessThanOrEqualTo: 'küçüktür veya eşittir', - isLike: 'gibidir', - isNotEqualTo: 'eşit değildir', - isNotIn: 'içinde değil', - near: 'yakın', - }, - upload: { - crop: 'Mahsulat', - cropToolDescription: - 'Seçilen alanın köşelerini sürükleyin, yeni bir alan çizin ya da aşağıdaki değerleri ayarlayın.', - dragAndDrop: 'Bir dosya sürükleyip bırakabilirsiniz', - editImage: 'Görüntüyü Düzenle', - focalPoint: 'Odak Noktası', - focalPointDescription: - 'Önizlemeye odak noktasını doğrudan sürükleyin veya aşağıdaki değerleri ayarlayın.', - height: 'Yükseklik', - previewSizes: 'Önizleme Boyutları', - selectCollectionToBrowse: 'Görüntülenecek bir koleksiyon seçin', - selectFile: 'Dosya seç', - setCropArea: 'Mahsul alanını ayarla', - setFocalPoint: 'Odak noktasını ayarla', - sizesFor: '{{label}} için boyutlar', - width: 'Genişlik', - }, - validation: { - fieldHasNo: 'Bu alanda {{label}} girili değil.', - limitReached: 'Sınır aşıldı, yalnızca {{max}} öğe eklenebilir.', - required: 'Bu alan gereklidir.', - requiresAtLeast: 'Bu alan en az {{count}} adet {{label}} gerektirmektedir.', - }, - version: { - aboutToPublishSelection: "Seçimdeki tüm {{label}}'i yayınlamak üzeresiniz. Emin misin?", - aboutToRestore: 'Döküman {{label}}, {{versionDate}} tarihindeki sürümüne geri döndürülecek.', - aboutToRestoreGlobal: - 'Global {{label}}, {{versionDate}} tarihindeki sürümüne geri döndürülecek.', - aboutToRevertToPublished: - 'Bu dökümanın değişikliklerini yayınladığı haline geri getirmek üzeresiniz. Devam etmek istiyor musunuz?', - aboutToUnpublish: 'Bu dökümanı yayından kaldırmak üzeresiniz. Devam etmek istiyor musunuz?', - aboutToUnpublishSelection: 'Seçimdeki tüm {{label}} yayınını kaldırmak üzeresiniz. Emin misin?', - autosave: 'Otomatik kaydet', - autosavedSuccessfully: 'Otomatik kaydetme başarılı', - changed: 'Değişiklik yapıldı', - compareVersion: 'Sürümü şununla karşılaştır:', - confirmPublish: 'Yayınlamayı onayla', - confirmRevertToSaved: 'Confirm revert to saved', - confirmUnpublish: 'Yayından kaldırmayı onayla', - confirmVersionRestoration: 'Sürümü Geri Getirmeyi Onayla', - draft: 'Taslak', - draftSavedSuccessfully: 'Taslak başarıyla kaydedildi.', - lastSavedAgo: 'Son kaydedildi {{distance}} önce', - noFurtherVersionsFound: 'Başka sürüm bulunamadı.', - noRowsFound: '{{label}} bulunamadı', - preview: 'Önizleme', - problemRestoringVersion: 'Bu sürüme geri döndürürken bir hatayla karşılaşıldı.', - publish: 'Yayınla', - publishChanges: 'Değişiklikleri yayınla', - published: 'Yayınlandı', - publishing: 'Yayınlama', - restoreThisVersion: 'Bu sürüme geri döndür', - restoredSuccessfully: 'Geri getirme başarılı.', - restoring: 'Geri döndürülüyor...', - revertToPublished: 'Yayınlanana geri döndür', - saveDraft: 'Taslağı kaydet', - selectLocales: 'Görüntülenecek yerel ayarları seçin', - selectVersionToCompare: 'Karşılaştırılacak bir sürüm seçin', - showLocales: 'Yerel ayarları göster:', - status: 'Durum', - type: 'Tür', - unpublish: 'Yayından Kaldır', - unpublishing: 'Yayından kaldırılıyor...', - version: 'Sürüm', - versionCreatedOn: '{{version}} oluşturma tarihi:', - versionID: 'Sürüm ID', - versions: 'Sürümler', - viewingVersion: '{{entityLabel}} {{documentTitle}} için sürümler gösteriliyor', - viewingVersionGlobal: '`Global {{entityLabel}} için sürümler gösteriliyor', - viewingVersions: '{{entityLabel}} {{documentTitle}} için sürümler gösteriliyor', - viewingVersionsGlobal: '`Global {{entityLabel}} için sürümler gösteriliyor', - }, -} diff --git a/packages/translations/src/_generatedFiles_/client/ua.js b/packages/translations/src/_generatedFiles_/client/ua.js deleted file mode 100644 index 21e0ba45e6..0000000000 --- a/packages/translations/src/_generatedFiles_/client/ua.js +++ /dev/null @@ -1,292 +0,0 @@ -export default { - authentication: { - account: 'Обліковий запис', - accountOfCurrentUser: 'Обліковий запис поточного користувача', - alreadyActivated: 'Вже активований', - alreadyLoggedIn: 'Вже увійшли в систему', - backToLogin: 'Повернутися до входу', - beginCreateFirstUser: 'Щоб розпочати - створість першого користувача', - changePassword: 'Змінити пароль', - confirmGeneration: 'Підтвердити генерацію', - confirmPassword: 'Підтвердження паролю', - createFirstUser: 'Створення першого користувача', - emailNotValid: 'Вказана адреса електронної пошти недійсна', - emailSent: 'Лист відправлено', - enableAPIKey: 'Активувати API ключ', - failedToUnlock: 'Не вдалось розблокувати', - forceUnlock: 'Примусове розблокування', - forgotPassword: 'Забули пароль', - forgotPasswordEmailInstructions: - 'Будь ласка, введіть вашу адресу електронної пошти нижче. Ви отримаєте повідомлення електронною поштою з інструкціями щодо скидання пароля.', - forgotPasswordQuestion: 'Забули пароль?', - generate: 'Згенерувати', - generateNewAPIKey: 'Згенерувати новий API ключ', - logBackIn: 'Увійти знову', - logOut: 'Вийти', - loggedOutInactivity: 'Ви вийшли з системи через бездіяльність.', - loggedOutSuccessfully: 'Ви успішно вийшли з системи.', - login: 'Увійти', - logout: 'Вийти', - logoutUser: 'Вийти з системи', - newAPIKeyGenerated: 'Новий API ключ згенеровано.', - newPassword: 'Новий пароль', - resetPassword: 'Скинути пароль', - stayLoggedIn: 'Залишатись в системі', - successfullyUnlocked: 'Успішно розблоковано', - unableToVerify: 'Неможливо підтвердити', - verified: 'Підтверджено', - verifiedSuccessfully: 'Успішно Підтверджено', - verify: 'Підтвердити', - verifyUser: 'Підтвердити користувача', - youAreInactive: - 'Ви були неактивні певний час і скоро, в цілях вашої безпеки, вас буде розлогінено. Чи бажаєте ви залишитись в системі?', - }, - error: { - autosaving: 'Виникла проблема під час автозбереження цього документа.', - correctInvalidFields: 'Будь ласка, виправте невірні поля.', - deletingTitle: - "Виникла помилка під час видалення {{title}}, Будь ласка, перевірте ваше з'єднання та спробуйте ще раз.", - loadingDocument: 'Виникла помилка під час завантаження документа з ID {{id}}.', - noMatchedField: 'Не знайдено відповідного поля для "{{label}}"', - notAllowedToAccessPage: 'Ви не маєте доступу до цієї сторінки.', - previewing: 'Виникла помилка під час попереднього перегляду цього документа.', - unableToDeleteCount: 'Не вдалося видалити {{count}} із {{total}} {{label}}.', - unableToUpdateCount: 'Не вдалося оновити {{count}} із {{total}} {{label}}.', - unauthorized: 'Немає доступу, ви повинні увійти, щоб виконати цей запит.', - unknown: 'Виникла невідома помилка.', - unspecific: 'Виникла помилка.', - }, - fields: { - addLabel: 'Додати {{label}}', - addLink: 'Додати посилання', - addNew: 'Додати новий', - addNewLabel: 'Створити {{label}}', - addRelationship: "Додати взаємозв'язок", - addUpload: 'Додати завантаження', - block: 'блок', - blockType: 'Тип блока', - blocks: 'блоки', - chooseFromExisting: 'Вибрати з існуючих', - collapseAll: 'Згорнути все', - editLink: 'Редагувати посилання', - editRelationship: "Редагувати взаємозв'язок", - itemsAndMore: '{{items}} і ще {{count}}', - labelRelationship: "{{label}} Зв'язок", - latitude: 'Широта', - linkedTo: "Зв'язано з <0>{{label}}", - longitude: 'Довгота', - passwordsDoNotMatch: 'Паролі не співпадають.', - removeRelationship: "Видалити зв'язок", - removeUpload: 'Видалити завантаження', - saveChanges: 'Зберегти зміни', - searchForBlock: 'Знайти блок', - selectFieldsToEdit: 'Виберіть поля для редагування', - showAll: 'Показати все', - swapRelationship: "Замінити зв'язок", - swapUpload: 'Замінити завантаження', - toggleBlock: 'Перемкнути блок', - uploadNewLabel: 'Завантажити новий {{label}}', - }, - general: { - aboutToDelete: 'Ви бажаєте видалити {{label}} <1>{{title}}. Ви впевнені?', - aboutToDeleteCount_many: 'Ви збираєтеся видалити {{count}} {{label}}', - aboutToDeleteCount_one: 'Ви збираєтеся видалити {{count}} {{label}}', - aboutToDeleteCount_other: 'Ви збираєтеся видалити {{count}} {{label}}', - addBelow: 'Додати нижче', - addFilter: 'Додати фільтр', - adminTheme: 'Тема адмінки', - and: 'і', - applyChanges: 'Застосувати зміни', - ascending: 'В порядку зростання', - automatic: 'Автоматично', - backToDashboard: 'Повернутись до головної сторінки', - cancel: 'Скасувати', - changesNotSaved: 'Ваши зміни не були збережені. Якщо ви вийдете зараз, то втратите свої зміни.', - close: 'Закрити', - collapse: 'Згорнути', - collections: 'Колекції', - columnToSort: 'Колонка для сортування', - columns: 'Колонки', - confirm: 'Підтвердити', - confirmDeletion: 'Підтвердити видалення', - confirmDuplication: 'Підтвердити копіювання', - copied: 'Скопійовано', - copy: 'Скопіювати', - create: 'Створити', - createNew: 'Створити', - createNewLabel: 'Створити новий {{label}}', - created: 'Створено', - creating: 'Створення', - creatingNewLabel: 'Створення нового {{label}}', - dark: 'Темна', - dashboard: 'Головна', - delete: 'Видалити', - deletedCountSuccessfully: 'Успішно видалено {{count}} {{label}}.', - deleting: 'Видалення...', - descending: 'В порядку спадання', - deselectAllRows: 'Скасувати вибір всіх рядків', - duplicate: 'Дублювати', - duplicateWithoutSaving: 'Дублювання без збереження змін', - edit: 'Редагувати', - editLabel: 'Редагувати {{label}}', - editing: 'Редагування', - editingLabel_many: 'Редагування {{count}} {{label}}', - editingLabel_one: 'Редагування {{count}} {{label}}', - editingLabel_other: 'Редагування {{count}} {{label}}', - email: 'Email', - emailAddress: 'Email адреса', - enterAValue: 'Введіть значення', - error: 'Помилка', - errors: 'Помилки', - fallbackToDefaultLocale: 'Відновлення локалі за замовчуванням', - filterWhere: 'Де фільтрувати {{label}}', - filters: 'Фільтри', - globals: 'Глобальні', - language: 'Мова', - lastModified: 'Останні зміни', - leaveAnyway: 'Все одно вийти', - leaveWithoutSaving: 'Вийти без збереження', - light: 'Світла', - livePreview: 'Попередній перегляд', - loading: 'Загрузка', - locale: 'Локаль', - menu: 'Меню', - moveDown: 'Перемістити нижче', - moveUp: 'Перемістити вище', - noFiltersSet: 'Відсусті фільтри', - noLabel: '<без {{label}}>', - noOptions: 'Немає варіантів', - noResults: - 'Жодного {{label}} не знайдено. Або {{label}} ще не існує, або жодна з них не відповідає фільтрам, які ви задали више.', - noValue: 'Немає значення', - none: 'Ніхто', - notFound: 'Не знайдено', - nothingFound: 'Нічого не знайдено', - of: 'з', - open: 'Відкрити', - or: 'або', - order: 'Порядок', - pageNotFound: 'Сторінка не знайдена', - password: 'Пароль', - payloadSettings: 'Налаштування Payload', - perPage: 'На сторінці: {{limit}}', - remove: 'Видалити', - reset: 'Скидання', - row: 'Рядок', - rows: 'Рядки', - save: 'Зберегти', - saving: 'Збереження...', - searchBy: 'Шукати по {{label}}', - selectAll: 'Вибрати всі {{count}} {{label}}', - selectAllRows: 'Вибрати всі рядки', - selectValue: 'Вибрати значення', - selectedCount: 'Вибрано {{count}} {{label}}', - showAllLabel: 'Показати всі {{label}}', - sorryNotFound: 'Вибачте - немає нічого, що відповідало б Вашому запиту.', - sort: 'Сортувати', - sortByLabelDirection: 'Сортувати за {{label}} {{direction}}', - stayOnThisPage: 'Залишитись на цій сторінці', - submissionSuccessful: 'Успішно відправлено.', - submit: 'Відправити', - successfullyCreated: '{{label}} успішно створено.', - thisLanguage: 'Українська', - titleDeleted: '{{label}} "{{title}}" успішно видалено.', - unauthorized: 'Немає доступу', - unsavedChangesDuplicate: 'Ви маєте не збережені зміни. Чи бажаєте ви продовжити дублювання?', - untitled: 'Без назви', - updatedAt: 'Змінено', - updatedCountSuccessfully: 'Успішно оновлено {{count}} {{label}}.', - updatedSuccessfully: 'Успішно відредаговано.', - updating: 'оновлення', - welcome: 'Вітаю', - }, - operators: { - contains: 'містить', - equals: 'дорівнює', - exists: 'існує', - isGreaterThan: 'більше ніж', - isGreaterThanOrEqualTo: 'більше або дорівнює', - isIn: 'є в', - isLessThan: 'менше ніж', - isLessThanOrEqualTo: 'менше або дорівнює', - isLike: 'схоже', - isNotEqualTo: 'не дорівнює', - isNotIn: 'не в', - near: 'поруч', - }, - upload: { - crop: 'Обрізати', - cropToolDescription: - 'Перетягніть кути обраної області, намалюйте нову область або скоригуйте значення нижче.', - dragAndDrop: 'Перемістіть файл', - editImage: 'Редагувати зображення', - focalPoint: 'Центральна точка', - focalPointDescription: - 'Перетягніть фокусний пункт безпосередньо на попередній перегляд або налаштуйте значення нижче.', - height: 'Висота', - previewSizes: 'Розміри попереднього перегляду', - selectCollectionToBrowse: 'Виберіть колекцію для перегляду', - selectFile: 'Виберіть файл', - setCropArea: 'Встановити область обрізки', - setFocalPoint: 'Встановити фокусний пункт', - sizesFor: 'Розміри для {{label}}', - width: 'Ширина', - }, - validation: { - fieldHasNo: 'В цього поля немає {{label}}', - limitReached: 'Досягнуто межі, можна додати лише {{max}} елементів.', - required: "Це поле є обов'язковим.", - requiresAtLeast: 'Це поле потребує не менше {{count}} {{label}}.', - }, - version: { - aboutToPublishSelection: 'Ви збираєтеся опублікувати всі {{label}} у добірці. Ти впевнений?', - aboutToRestore: - 'Ви збираєтесь відновити цей документ {{label}} до стану, в якому він знаходився {{versionDate}}.', - aboutToRestoreGlobal: - 'Ви збираєтесь відновити глобальний запис {{label}} до стану, в якому він знаходився {{versionDate}}.', - aboutToRevertToPublished: - 'Ви збираєтесь вернути зміни цього документа до його опублікованого стану. Ви впевнені?', - aboutToUnpublish: 'Ви збираєтесь відмінити публікацю цього документа. Ви впевнені?', - aboutToUnpublishSelection: - 'Ви збираєтеся скасувати публікацію всіх {{label}} у вибраному. Ти впевнений?', - autosave: 'Автозбереження', - autosavedSuccessfully: 'Автозбереження успішно виконано.', - changed: 'Змінено', - compareVersion: 'Порівняти версію з:', - confirmPublish: 'Підтвердити публікацію', - confirmRevertToSaved: 'Підтвердити повернення до збереженого', - confirmUnpublish: 'Підвтердити відміну публікації', - confirmVersionRestoration: 'Підтвердити відновлення версії', - draft: 'Чернетка', - draftSavedSuccessfully: 'Чернетка успішно збережена.', - lastSavedAgo: 'Останній раз збережено {{distance}} тому', - noFurtherVersionsFound: 'Інших версій не знайдено', - noRowsFound: 'Не знайдено {{label}}', - preview: 'Попередній перегляд', - problemRestoringVersion: 'Виникла проблема з відновленням цієї версії', - publish: 'Опублікувати', - publishChanges: 'Опублікувати зміни', - published: 'Опубліковано', - publishing: 'Публікація', - restoreThisVersion: 'Відновити цю версію', - restoredSuccessfully: 'Відновлено успішно.', - restoring: 'Відеовлення...', - revertToPublished: 'Відновити до опублікованого', - saveDraft: 'Зберегти чернетку', - selectLocales: 'Виберіть переклад для відображення', - selectVersionToCompare: 'Виберіть версію для порівняння', - showLocales: 'Показати переклади:', - status: 'Статус', - type: 'Тип', - unpublish: 'Відмінити публікацію', - unpublishing: 'Відміна публікації...', - version: 'Версія', - versionCreatedOn: '{{version}} створена:', - versionID: 'ID версії', - versions: 'Версії', - viewingVersion: 'Огляд версії для {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: 'Огляд версій для глобальної колекці {{entityLabel}}', - viewingVersions: 'Огляд версій для {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: 'Огляд версій для глобальної колекції {{entityLabel}}', - }, -} diff --git a/packages/translations/src/_generatedFiles_/client/vi.js b/packages/translations/src/_generatedFiles_/client/vi.js deleted file mode 100644 index d7217c473c..0000000000 --- a/packages/translations/src/_generatedFiles_/client/vi.js +++ /dev/null @@ -1,288 +0,0 @@ -export default { - authentication: { - account: 'Tài khoản', - accountOfCurrentUser: 'Tài khoản của người dùng hiện tại', - alreadyActivated: 'Đã được kích hoạt', - alreadyLoggedIn: 'Đã đăng nhập', - backToLogin: 'Quay lại đăng nhập.', - beginCreateFirstUser: 'Để bắt đầu, hãy tạo người dùng đầu tiên.', - changePassword: 'Đổi mật khẩu', - confirmGeneration: 'Xác nhận, tạo API Key', - confirmPassword: 'Xác nhận mật khẩu', - createFirstUser: 'Tạo người dùng đầu tiên', - emailNotValid: 'Email không chính xác', - emailSent: 'Email đã được gửi', - enableAPIKey: 'Kích hoạt API Key', - failedToUnlock: 'Mở khóa thất bại', - forceUnlock: 'Mở khóa tài khoản', - forgotPassword: 'Quên mật khẩu', - forgotPasswordEmailInstructions: 'Nhập email của bạn để nhận hướng dẫn tạo lại mật khẩu.', - forgotPasswordQuestion: 'Quên mật khẩu?', - generate: 'Tạo', - generateNewAPIKey: 'Tạo API Key mới', - logBackIn: 'Đăng nhập lại', - logOut: 'Đăng xuất', - loggedOutInactivity: 'Bạn đã tự động đăng xuất sau một khoản thời gian dài không thao tác.', - loggedOutSuccessfully: 'Đăng xuất thành công.', - login: 'Đăng nhập', - logout: 'Đăng xuất', - logoutUser: 'Đăng xuất người dùng', - newAPIKeyGenerated: 'API Key mới đã được tạo', - newPassword: 'Mật khẩu mới', - resetPassword: 'Tạo lại mật khẩu', - stayLoggedIn: 'Duy trì đăng nhập', - successfullyUnlocked: 'Mở khóa thành công', - unableToVerify: 'Không thể xác thực', - verified: 'Đã xác thực', - verifiedSuccessfully: 'Đã xác thực thành công', - verify: 'Tiến hành xác thực', - verifyUser: 'Tiến hành xác thực người dùng', - youAreInactive: - 'Bạn đã không thao tác trong một khoảng thời gian, và sẽ bị tự động đăng xuất vì lý do bảo mật. Bạn có muốn tiếp tục phiên đăng nhập.', - }, - error: { - autosaving: 'Lỗi - Đã xảy ra vấn đề khi tự động sao lưu bản tài liệu này.', - correctInvalidFields: 'Lỗi - Xin hãy sửa lại những fields không hợp lệ.', - deletingTitle: - 'Lỗi - Đã xảy ra vấn đề khi xóa {{title}}. Hãy kiểm tra kết nối mạng và thử lại.', - loadingDocument: 'Lỗi - Đã xảy ra vấn để khi tải bản tài liệu với ID {{id}}.', - noMatchedField: 'Lỗi - Không tìm thấy field trùng với "{{label}}".', - notAllowedToAccessPage: 'Lỗi - Bạn không có quyền truy cập trang này.', - previewing: 'Lỗi - Đã xảy ra vấn đề khi xem trước bản tài liệu này.', - unableToDeleteCount: 'Không thể xóa {{count}} trong số {{total}} {{label}}.', - unableToUpdateCount: 'Không thể cập nhật {{count}} trên {{total}} {{label}}.', - unauthorized: 'Lỗi - Bạn cần phải đăng nhập trước khi gửi request sau.', - unknown: 'Lỗi - Không xác định (unknown error).', - unspecific: 'Lỗi - Đã xảy ra (unspecific error).', - }, - fields: { - addLabel: 'Thêm: {{label}}', - addLink: 'Thêm liên kết', - addNew: 'Thêm mới', - addNewLabel: 'Thêm mới: {{label}}', - addRelationship: 'Thêm mối quan hệ (relationship)', - addUpload: 'Thêm tải lên (upload)', - block: 'block', - blockType: 'Block Type', - blocks: 'blocks', - chooseFromExisting: 'Chọn từ thư viện', - collapseAll: 'Ẩn toàn bộ', - editLink: 'Chỉnh sửa liên kết', - editRelationship: 'Chỉnh sửa mối quan hệ', - itemsAndMore: '{{items}} và {{count}} món nữa', - labelRelationship: 'Mối quan hệ của {{label}} (Relationship)', - latitude: 'Vĩ độ', - linkedTo: 'Được nối với <0>{{label}}', - longitude: 'Kinh độ', - passwordsDoNotMatch: 'Mật khẩu không trùng.', - removeRelationship: 'Xóa Mối quan hệ', - removeUpload: 'Xóa bản tải lên', - saveChanges: 'Luu thay đổi', - searchForBlock: 'Tìm block', - selectFieldsToEdit: 'Chọn các trường để chỉnh sửa', - showAll: 'Hiển thị toàn bộ', - swapRelationship: 'Đổi quan hệ', - swapUpload: 'Đổi bản tải lên', - toggleBlock: 'Bật/tắt block', - uploadNewLabel: 'Tải lên bản mới: {{label}}', - }, - general: { - aboutToDelete: 'Chuẩn bị xóa {{label}} <1>{{title}}. Bạn có muốn tiếp tục không?', - aboutToDeleteCount_many: 'Bạn sắp xóa {{count}} {{label}}', - aboutToDeleteCount_one: 'Bạn sắp xóa {{count}} {{label}}', - aboutToDeleteCount_other: 'Bạn sắp xóa {{count}} {{label}}', - addBelow: 'Thêm bên dưới', - addFilter: 'Thêm bộ lọc', - adminTheme: 'Giao diện bảng điều khiển', - and: 'Và', - applyChanges: 'Áp dụng Thay đổi', - ascending: 'Sắp xếp theo thứ tự tăng dần', - automatic: 'Tự động', - backToDashboard: 'Quay lại bảng điều khiển', - cancel: 'Hủy', - changesNotSaved: 'Thay đổi chưa được lưu lại. Bạn sẽ mất bản chỉnh sửa nếu thoát bây giờ.', - close: 'Gần', - collapse: 'Thu gọn', - collections: 'Collections', - columnToSort: 'Sắp xếp cột', - columns: 'Hiển thị cột', - confirm: 'Xác nhận', - confirmDeletion: 'Xác nhận xóa', - confirmDuplication: 'Xác nhận tạo bản sao', - copied: 'Đâ sao chép', - copy: 'Sao chép', - create: 'Tạo', - createNew: 'Tạo mới', - createNewLabel: 'Tạo mới {{label}}', - created: 'Đã tạo', - creating: 'Đang tạo', - creatingNewLabel: 'Đang tạo mới {{label}}', - dark: 'Nền tối', - dashboard: 'Bảng điều khiển', - delete: 'Xóa', - deletedCountSuccessfully: 'Đã xóa thành công {{count}} {{label}}.', - deleting: 'Đang xóa...', - descending: 'Xếp theo thứ tự giảm dần', - deselectAllRows: 'Bỏ chọn tất cả các hàng', - duplicate: 'Tạo bản sao', - duplicateWithoutSaving: 'Không lưu dữ liệu và tạo bản sao', - edit: 'Chỉnh sửa', - editLabel: 'Chỉnh sửa: {{label}}', - editing: 'Đang chỉnh sửa', - editingLabel_many: 'Đang chỉnh sửa {{count}} {{label}}', - editingLabel_one: 'Đang chỉnh sửa {{count}} {{label}}', - editingLabel_other: 'Đang chỉnh sửa {{count}} {{label}}', - email: 'Email', - emailAddress: 'Địa chỉ Email', - enterAValue: 'Nhập một giá trị', - error: 'Lỗi', - errors: 'Lỗi', - fallbackToDefaultLocale: 'Ngôn ngữ mặc định', - filterWhere: 'Lọc {{label}} với điều kiện:', - filters: 'Bộ lọc', - globals: 'Toàn thể (globals)', - language: 'Ngôn ngữ', - lastModified: 'Chỉnh sửa lần cuối vào lúc', - leaveAnyway: 'Tiếp tục thoát', - leaveWithoutSaving: 'Thay đổi chưa được lưu', - light: 'Nền sáng', - livePreview: 'Xem trước', - loading: 'Đang tải', - locale: 'Ngôn ngữ', - menu: 'Thực đơn', - moveDown: 'Di chuyển xuống', - moveUp: 'Di chuyển lên', - noFiltersSet: 'Không có bộ lọc nào được áp dụng', - noLabel: '', - noOptions: 'Không có lựa chọn', - noResults: - 'Danh sách rỗng: {{label}}. Có thể {{label}} chưa tồn tại hoặc không có dữ kiện trùng với bộ lọc hiện tại.', - noValue: 'Không có giá trị', - none: 'Không có', - notFound: 'Không tìm thấy', - nothingFound: 'Không tìm thấy', - of: 'trong số', - open: 'Mở', - or: 'hoặc', - order: 'Thứ tự', - pageNotFound: 'Không tìm thấy trang', - password: 'Mật khẩu', - payloadSettings: 'Cài đặt', - perPage: 'Hiển thị mỗi trang: {{limit}}', - remove: 'Loại bỏ', - reset: 'Đặt lại', - row: 'Hàng', - rows: 'Những hàng', - save: 'Luu', - saving: 'Đang lưu...', - searchBy: 'Tìm với {{label}}', - selectAll: 'Chọn tất cả {{count}} {{label}}', - selectAllRows: 'Chọn tất cả các hàng', - selectValue: 'Chọn một giá trị', - selectedCount: 'Đã chọn {{count}} {{label}}', - showAllLabel: 'Hiển thị tất cả {{label}}', - sorryNotFound: 'Xin lỗi, không có kết quả nào tương ứng với request của bạn.', - sort: 'Sắp xếp', - sortByLabelDirection: 'Sắp xếp theo {{label}} {{direction}}', - stayOnThisPage: 'Ở lại trang này', - submissionSuccessful: 'Gửi thành công.', - submit: 'Gửi', - successfullyCreated: '{{label}} đã được tạo thành công.', - thisLanguage: 'Vietnamese (Tiếng Việt)', - titleDeleted: '{{label}} {{title}} đã được xóa thành công.', - unauthorized: 'Không có quyền truy cập.', - unsavedChangesDuplicate: 'Bạn chưa lưu các thay đổi. Bạn có muốn tiếp tục tạo bản sao?', - untitled: 'Chưa có tiêu đề', - updatedAt: 'Ngày cập nhật', - updatedCountSuccessfully: 'Đã cập nhật thành công {{count}} {{label}}.', - updatedSuccessfully: 'Cập nhật thành công.', - updating: 'Đang cập nhật', - welcome: 'Xin chào', - }, - operators: { - contains: 'có chứa', - equals: 'bằng', - exists: 'tồn tại', - isGreaterThan: 'lớn hơn', - isGreaterThanOrEqualTo: 'lớn hơn hoặc bằng', - isIn: 'có trong', - isLessThan: 'nhỏ hơn', - isLessThanOrEqualTo: 'nhỏ hơn hoặc bằng', - isLike: 'gần giống', - isNotEqualTo: 'không bằng', - isNotIn: 'không có trong', - near: 'gần', - }, - upload: { - crop: 'Mùa vụ', - cropToolDescription: - 'Kéo các góc của khu vực đã chọn, vẽ một khu vực mới hoặc điều chỉnh các giá trị dưới đây.', - dragAndDrop: 'Kéo và thả một tập tin', - editImage: 'Chỉnh sửa hình ảnh', - focalPoint: 'Điểm trọng tâm', - focalPointDescription: - 'Kéo điểm tiêu cực trực tiếp trên trình xem trước hoặc điều chỉnh các giá trị bên dưới.', - height: 'Chiều cao', - previewSizes: 'Kích cỡ xem trước', - selectCollectionToBrowse: 'Chọn một Collection để tìm', - selectFile: 'Chọn một file', - setCropArea: 'Đặt khu vực cắt', - setFocalPoint: 'Đặt điểm tiêu điểm', - sizesFor: 'Kích thước cho {{label}}', - width: 'Chiều rộng', - }, - validation: { - fieldHasNo: 'Field này không có: {{label}}', - limitReached: 'Đã đạt giới hạn, chỉ có thể thêm {{max}} mục.', - required: 'Field này cần được diền.', - requiresAtLeast: 'Field này cần tối thiểu {{count}} {{label}}.', - }, - version: { - aboutToPublishSelection: 'Bạn có muốn xuất bản tất cả {{label}} không?', - aboutToRestore: 'Bạn chuẩn bị khôi phục lại {{label}} về phiên bản {{versionDate}}.', - aboutToRestoreGlobal: - 'Bạn chuẩn bị khôi phục lại bản toàn thể (global) của {{label}} về phiên bản {{versionDate}}.', - aboutToRevertToPublished: 'Bạn có muốn tái xuất bản bản nháp này không?', - aboutToUnpublish: 'Bạn có muốn ngưng xuất bản?', - aboutToUnpublishSelection: 'Bạn có muốn ngưng xuất bản tất cả {{label}} không?', - autosave: 'Tự động lưu dữ liệu', - autosavedSuccessfully: 'Đã tự động lưu thành công.', - changed: 'Đã thay đổi', - compareVersion: 'So sánh phiên bản này với:', - confirmPublish: 'Xác nhận xuất bản', - confirmRevertToSaved: 'Xác nhận, quay về trạng thái đã lưu', - confirmUnpublish: 'Xác nhận, ngưng xuất bản', - confirmVersionRestoration: 'Xác nhận, khôi phục về phiên bản trước', - draft: 'Bản nháp', - draftSavedSuccessfully: 'Bản nháp đã được lưu thành công.', - lastSavedAgo: 'Lần lưu cuối cùng {{distance}} trước đây', - noFurtherVersionsFound: 'Không tìm thấy phiên bản cũ hơn', - noRowsFound: 'Không tìm thấy: {{label}}', - preview: 'Bản xem trước', - problemRestoringVersion: 'Đã xảy ra vấn đề khi khôi phục phiên bản này', - publish: 'Công bố', - publishChanges: 'Xuất bản tài liệu', - published: 'Đã xuất bản', - publishing: 'Xuất bản', - restoreThisVersion: 'Khôi phục về phiên bản này', - restoredSuccessfully: 'Đã khôi phục thành công.', - restoring: 'Đang khôi phục...', - revertToPublished: 'Quay về trạng thái đã xuất bản', - saveDraft: 'Lưu bản nháp', - selectLocales: 'Chọn mã khu vực để hiện thị', - selectVersionToCompare: 'Chọn phiên bản để so sánh', - showLocales: 'Hiển thị mã khu vực:', - status: 'Trạng thái', - type: 'Loại', - unpublish: 'Ẩn tài liệu', - unpublishing: 'Đang ẩn tài liệu...', - version: 'Phiên bản', - versionCreatedOn: 'Phiên bản {{version}} được tạo vào lúc:', - versionID: 'ID của phiên bản', - versions: 'Danh sách phiên bản', - viewingVersion: 'Xem phiên bản của {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: '`Xem phiên bản toàn thể (global) của {{entityLabel}}', - viewingVersions: 'Xem những phiên bản của {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: '`Xem những phiên bản toàn thể (global) của {{entityLabel}}', - }, -} diff --git a/packages/translations/src/_generatedFiles_/client/zh.js b/packages/translations/src/_generatedFiles_/client/zh.js deleted file mode 100644 index b9651f5806..0000000000 --- a/packages/translations/src/_generatedFiles_/client/zh.js +++ /dev/null @@ -1,284 +0,0 @@ -export default { - authentication: { - account: '帐户', - accountOfCurrentUser: '当前用户的帐户', - alreadyActivated: '已经激活了', - alreadyLoggedIn: '已经登入了', - backToLogin: '回到登录页面', - beginCreateFirstUser: '首先,请创建您的第一个用户。', - changePassword: '更改密码', - confirmGeneration: '确认生成', - confirmPassword: '确认密码', - createFirstUser: '创建第一个用户', - emailNotValid: '所提供的电子邮件时无效的', - emailSent: '电子邮件已发送', - enableAPIKey: '启用API密钥', - failedToUnlock: '解锁失败', - forceUnlock: '强制解锁', - forgotPassword: '忘记密码', - forgotPasswordEmailInstructions: - '请在下方输入您的电子邮件。您将会收到一封有关如何重置密码说明的电子邮件。', - forgotPasswordQuestion: '忘记密码?', - generate: '生成', - generateNewAPIKey: '生成新的API密钥', - logBackIn: '重新登入', - logOut: '登出', - loggedOutInactivity: '您由于不活跃而被登出了。', - loggedOutSuccessfully: '您已成功登出。', - login: '登录', - logout: '登出', - logoutUser: '登出用户', - newAPIKeyGenerated: '新的API密钥已经生成。', - newPassword: '新的密码', - resetPassword: '重置密码', - stayLoggedIn: '保持登录状态', - successfullyUnlocked: '已成功解锁', - unableToVerify: '无法验证', - verified: '已验证', - verifiedSuccessfully: '成功验证', - verify: '验证', - verifyUser: '验证用户', - youAreInactive: - '您已经有一段时间没有活动了,为了您的安全,很快就会自动登出。您想保持登录状态吗?', - }, - error: { - autosaving: '自动保存该文件时出现了问题。', - correctInvalidFields: '请更正无效字段。', - deletingTitle: '删除{{title}}时出现了错误。请检查您的连接并重试。', - loadingDocument: '加载ID为{{id}}的文件时出现了问题。', - noMatchedField: '找不到与"{{label}}"匹配的字段', - notAllowedToAccessPage: '您无权访问此页面。', - previewing: '预览文件时出现了问题。', - unableToDeleteCount: '无法从 {{total}} {{label}} 中删除 {{count}}。', - unableToUpdateCount: '无法更新 {{count}} 个,共 {{total}} 个 {{label}}。', - unauthorized: '未经授权,您必须登录才能提出这个请求。', - unknown: '发生了一个未知的错误。', - unspecific: '发生了一个错误。', - }, - fields: { - addLabel: '添加{{label}}', - addLink: '添加链接', - addNew: '添加新的', - addNewLabel: '添加新的{{label}}', - addRelationship: '添加关系', - addUpload: '添加上传', - block: '区块', - blockType: '区块类型', - blocks: '区块', - chooseFromExisting: '从现有中选择', - collapseAll: '全部折叠', - editLink: '编辑链接', - editRelationship: '编辑关系', - itemsAndMore: '{{items}}和{{count}}更多', - labelRelationship: '{{label}}关系', - latitude: '纬度', - linkedTo: '链接到<0>{{label}}', - longitude: '经度', - passwordsDoNotMatch: '密码不匹配。', - removeRelationship: '移除关系', - removeUpload: '移除上传', - saveChanges: '保存更改', - searchForBlock: '搜索一个区块', - selectFieldsToEdit: '选择要编辑的字段', - showAll: '显示全部', - swapRelationship: '交换关系', - swapUpload: '交换上传', - toggleBlock: '切换块', - uploadNewLabel: '上传新的{{label}}', - }, - general: { - aboutToDelete: '您即将删除{{label}} <1>{{title}}。您确定要继续吗?', - aboutToDeleteCount_many: '您即将删除 {{count}} {{label}}', - aboutToDeleteCount_one: '您即将删除 {{count}} {{label}}', - aboutToDeleteCount_other: '您即将删除 {{count}} {{label}}', - addBelow: '添加到下面', - addFilter: '添加过滤器', - adminTheme: '管理页面主题', - and: '和', - applyChanges: '应用更改', - ascending: '升序', - automatic: '自动', - backToDashboard: '返回到仪表板', - cancel: '取消', - changesNotSaved: '您的更改尚未保存。您确定要离开吗?', - close: '关闭', - collapse: '折叠', - collections: '集合', - columnToSort: '要排序的列', - columns: '列', - confirm: '确认', - confirmDeletion: '确认删除', - confirmDuplication: '确认重复', - copied: '已复制', - copy: '复制', - create: '创建', - createNew: '创建新的', - createNewLabel: '创建新的{{label}}', - created: '已创建', - creating: '创建中', - creatingNewLabel: '正在创建新的{{label}}', - dark: '深色', - dashboard: '仪表板', - delete: '删除', - deletedCountSuccessfully: '已成功删除 {{count}} {{label}}。', - deleting: '删除中...', - descending: '降序', - deselectAllRows: '取消选择所有行', - duplicate: '重复', - duplicateWithoutSaving: '重复而不保存更改。', - edit: '编辑', - editLabel: '编辑{{label}}', - editing: '编辑中', - editingLabel_many: '编辑 {{count}} {{label}}', - editingLabel_one: '编辑 {{count}} {{label}}', - editingLabel_other: '编辑 {{count}} {{label}}', - email: '电子邮件', - emailAddress: '电子邮件地址', - enterAValue: '输入一个值', - error: '错误', - errors: '错误', - fallbackToDefaultLocale: '回退到默认语言环境', - filterWhere: '过滤{{label}}', - filters: '过滤器', - globals: '全局', - language: '语言', - lastModified: '最后修改', - leaveAnyway: '无论如何都要离开', - leaveWithoutSaving: '离开而不保存', - light: '亮色', - livePreview: '预览', - loading: '加载中...', - locale: '语言环境', - menu: '菜单', - moveDown: '向下移动', - moveUp: '向上移动', - noFiltersSet: '没有设置过滤器', - noLabel: '<没有{{label}}>', - noOptions: '没有选项', - noResults: '没有找到{{label}}。{{label}}并不存在或没有符合您上面所指定的过滤器。', - noValue: '没有值', - none: '无', - notFound: '未找到', - nothingFound: '没有找到任何东西', - of: '的', - open: '打开', - or: '或', - order: '排序', - pageNotFound: '未找到页面', - password: '密码', - payloadSettings: 'Payload设置', - perPage: '每一页: {{limit}}', - remove: '移除', - reset: '重置', - row: '行', - rows: '行', - save: '保存', - saving: '保存中...', - searchBy: '搜索{{label}}', - selectAll: '选择所有 {{count}} {{label}}', - selectAllRows: '选择所有行', - selectValue: '选择一个值', - selectedCount: '已选择 {{count}} {{label}}', - showAllLabel: '显示所有{{label}}', - sorryNotFound: '对不起,没有与您的请求相对应的东西。', - sort: '排序', - sortByLabelDirection: '按{{label}} {{direction}}排序', - stayOnThisPage: '停留在此页面', - submissionSuccessful: '提交成功。', - submit: '提交', - successfullyCreated: '成功创建{{label}}', - thisLanguage: '中文 (简体)', - titleDeleted: '{{label}} "{{title}}"已被成功删除。', - unauthorized: '未经授权', - unsavedChangesDuplicate: '您有未保存的修改。您确定要继续重复吗?', - untitled: '无标题', - updatedAt: '更新于', - updatedCountSuccessfully: '已成功更新 {{count}} {{label}}。', - updatedSuccessfully: '更新成功。', - updating: '更新中', - welcome: '欢迎', - }, - operators: { - contains: '包含', - equals: '等于', - exists: '存在', - isGreaterThan: '大于', - isGreaterThanOrEqualTo: '大于等于', - isIn: '在', - isLessThan: '小于', - isLessThanOrEqualTo: '小于或等于', - isLike: '就像', - isNotEqualTo: '不等于', - isNotIn: '不在', - near: '附近', - }, - upload: { - crop: '作物', - cropToolDescription: '拖动所选区域的角落,绘制一个新区域或调整以下的值。', - dragAndDrop: '拖放一个文件', - editImage: '编辑图像', - focalPoint: '焦点', - focalPointDescription: '直接在预览中拖动焦点或调整下面的值。', - height: '高度', - previewSizes: '预览尺寸', - selectCollectionToBrowse: '选择一个要浏览的集合', - selectFile: '选择一个文件', - setCropArea: '设置裁剪区域', - setFocalPoint: '设置焦点', - sizesFor: '{{label}}的尺寸', - width: '宽度', - }, - validation: { - fieldHasNo: '这个字段没有{{label}}', - limitReached: '已达限制,只能添加{{max}}个项目。', - required: '该字段为必填项目。', - requiresAtLeast: '该字段至少需要{{count}} {{label}}。', - }, - version: { - aboutToPublishSelection: '您即将发布所选内容中的所有 {{label}}。 你确定吗?', - aboutToRestore: '您将把这个{{label}}文档恢复到{{versionDate}}时的状态', - aboutToRestoreGlobal: '您要将全局的{{label}}恢复到{{versionDate}}时的状态', - aboutToRevertToPublished: '您将要把这个文档的内容还原到它的发布状态。您确定吗?', - aboutToUnpublish: '你即将取消发布这个文档。你确定吗?', - aboutToUnpublishSelection: '您即将取消发布所选内容中的所有 {{label}}。 你确定吗?', - autosave: '自动保存', - autosavedSuccessfully: '自动保存成功。', - changed: '已更改', - compareVersion: '对比版本:', - confirmPublish: '确认发布', - confirmRevertToSaved: '确认恢复到保存状态', - confirmUnpublish: '确认取消发布', - confirmVersionRestoration: '确认版本恢复', - draft: '草稿', - draftSavedSuccessfully: '草稿成功保存。', - lastSavedAgo: '上次保存{{distance}}之前', - noFurtherVersionsFound: '没有发现其他版本', - noRowsFound: '没有发现{{label}}', - preview: '预览', - problemRestoringVersion: '恢复这个版本时发生了问题', - publish: '发布', - publishChanges: '发布修改', - published: '已发布', - publishing: '发布', - restoreThisVersion: '恢复此版本', - restoredSuccessfully: '恢复成功。', - restoring: '恢复中...', - revertToPublished: '还原到已发布的版本', - saveDraft: '保存草稿', - selectLocales: '选择要显示的语言', - selectVersionToCompare: '选择要比较的版本', - showLocales: '显示语言:', - status: '状态', - type: '类型', - unpublish: '取消发布', - unpublishing: '取消发布中...', - version: '版本', - versionCreatedOn: '{{version}}创建于:', - versionID: '版本ID', - versions: '版本', - viewingVersion: '正在查看{{entityLabel}} {{documentTitle}}的版本', - viewingVersionGlobal: '正在查看全局{{entityLabel}}的版本', - viewingVersions: '正在查看{{entityLabel}} {{documentTitle}}的版本', - viewingVersionsGlobal: '正在查看全局{{entityLabel}}的版本', - }, -} diff --git a/packages/translations/src/_generatedFiles_/client/zhTW.js b/packages/translations/src/_generatedFiles_/client/zhTW.js deleted file mode 100644 index e7d890bdef..0000000000 --- a/packages/translations/src/_generatedFiles_/client/zhTW.js +++ /dev/null @@ -1,284 +0,0 @@ -export default { - authentication: { - account: '帳戶', - accountOfCurrentUser: '目前使用者的帳戶', - alreadyActivated: '已經啟用了', - alreadyLoggedIn: '已經登入了', - backToLogin: '返回登入頁面', - beginCreateFirstUser: '首先,請建立您的第一個使用者。', - changePassword: '更改密碼', - confirmGeneration: '確認生成', - confirmPassword: '確認密碼', - createFirstUser: '建立第一個使用者', - emailNotValid: '提供的電子郵件無效', - emailSent: '電子郵件已寄出', - enableAPIKey: '啟用API金鑰', - failedToUnlock: '解鎖失敗', - forceUnlock: '強制解鎖', - forgotPassword: '忘記密碼', - forgotPasswordEmailInstructions: - '請在下方輸入您的電子郵件。您將收到一封有關如何重設密碼的說明電子郵件。', - forgotPasswordQuestion: '忘記密碼?', - generate: '生成', - generateNewAPIKey: '生成新的API金鑰', - logBackIn: '重新登入', - logOut: '登出', - loggedOutInactivity: '您由於不活躍而被登出了。', - loggedOutSuccessfully: '您已成功登出。', - login: '登入', - logout: '登出', - logoutUser: '登出使用者', - newAPIKeyGenerated: '新的API金鑰已生成。', - newPassword: '新的密碼', - resetPassword: '重設密碼', - stayLoggedIn: '保持登入狀態', - successfullyUnlocked: '已成功解鎖', - unableToVerify: '無法驗證', - verified: '已驗證', - verifiedSuccessfully: '成功驗證', - verify: '驗證', - verifyUser: '驗證使用者', - youAreInactive: - '您已經有一段時間沒有活動了,為了您的安全,很快就會自動登出。您想保持登入狀態嗎?', - }, - error: { - autosaving: '自動儲存該文件時出現了問題。', - correctInvalidFields: '請更正無效區塊。', - deletingTitle: '刪除{{title}}時出現了錯誤。請檢查您的網路連線並重試。', - loadingDocument: '加載ID為{{id}}的文件時出現了問題。', - noMatchedField: '找不到與"{{label}}"匹配的字串', - notAllowedToAccessPage: '您沒有權限訪問此頁面。', - previewing: '預覽文件時出現了問題。', - unableToDeleteCount: '無法從 {{total}} 個中刪除 {{count}} 個 {{label}}。', - unableToUpdateCount: '無法從 {{total}} 個中更新 {{count}} 個 {{label}}。', - unauthorized: '未經授權,您必須登錄才能提出這個請求。', - unknown: '發生了一個未知的錯誤。', - unspecific: '發生了一個錯誤。', - }, - fields: { - addLabel: '新增{{label}}', - addLink: '新增連結', - addNew: '新增', - addNewLabel: '新增{{label}}', - addRelationship: '新增關聯', - addUpload: '上傳', - block: '區塊', - blockType: '區塊類型', - blocks: '區塊', - chooseFromExisting: '從現有的選擇', - collapseAll: '全部折疊', - editLink: '編輯連結', - editRelationship: '編輯關聯', - itemsAndMore: '{{items}} 個,還有 {{count}} 個', - labelRelationship: '{{label}}關聯', - latitude: '緯度', - linkedTo: '連結到<0>{{label}}', - longitude: '經度', - passwordsDoNotMatch: '密碼不匹配。', - removeRelationship: '移除關聯', - removeUpload: '移除上傳', - saveChanges: '儲存變更', - searchForBlock: '搜尋一個區塊', - selectFieldsToEdit: '選擇要編輯的字串', - showAll: '顯示全部', - swapRelationship: '替換關聯', - swapUpload: '替換上傳', - toggleBlock: '切換區塊', - uploadNewLabel: '上傳新的{{label}}', - }, - general: { - aboutToDelete: '您即將刪除{{label}} <1>{{title}}。您確定要繼續嗎?', - aboutToDeleteCount_many: '您即將刪除 {{count}} 個 {{label}}', - aboutToDeleteCount_one: '您即將刪除 {{count}} 個 {{label}}', - aboutToDeleteCount_other: '您即將刪除 {{count}} 個 {{label}}', - addBelow: '新增到下方', - addFilter: '新增過濾器', - adminTheme: '管理頁面主題', - and: '和', - applyChanges: '套用更改', - ascending: '升冪', - automatic: '自動', - backToDashboard: '返回到控制面板', - cancel: '取消', - changesNotSaved: '您還有尚未儲存的變更。您確定要離開嗎?', - close: '關閉', - collapse: '折疊', - collections: '集合', - columnToSort: '要排序的欄位', - columns: '欄位', - confirm: '確認', - confirmDeletion: '確認刪除', - confirmDuplication: '確認複製', - copied: '已複製', - copy: '複製', - create: '建立', - createNew: '建立新的', - createNewLabel: '建立新的{{label}}', - created: '已建立', - creating: '建立中', - creatingNewLabel: '正在建立新的{{label}}', - dark: '深色', - dashboard: '控制面板', - delete: '刪除', - deletedCountSuccessfully: '已成功刪除 {{count}} 個 {{label}}。', - deleting: '刪除中...', - descending: '降冪', - deselectAllRows: '取消選擇全部', - duplicate: '複製', - duplicateWithoutSaving: '複製而不儲存變更。', - edit: '編輯', - editLabel: '編輯{{label}}', - editing: '編輯中', - editingLabel_many: '編輯 {{count}} 個 {{label}}', - editingLabel_one: '編輯 {{count}} 個 {{label}}', - editingLabel_other: '編輯 {{count}} 個 {{label}}', - email: '電子郵件', - emailAddress: '電子郵件地址', - enterAValue: '輸入一個值', - error: '錯誤', - errors: '錯誤', - fallbackToDefaultLocale: '回到預設的語言', - filterWhere: '過濾{{label}}', - filters: '過濾器', - globals: '全域', - language: '語言', - lastModified: '最後修改', - leaveAnyway: '無論如何都要離開', - leaveWithoutSaving: '不儲存直接離開', - light: '亮色', - livePreview: '預覽', - loading: '載入中...', - locale: '語言環境', - menu: '菜單', - moveDown: '向下移動', - moveUp: '向上移動', - noFiltersSet: '沒有設定過濾器', - noLabel: '<沒有{{label}}>', - noOptions: '沒有選項', - noResults: '沒有找到{{label}}。{{label}}並不存在或沒有符合您上面所指定的過濾器。', - noValue: '沒有數值', - none: '無', - notFound: '未找到', - nothingFound: '沒有找到任何東西', - of: '的', - open: '打開', - or: '或', - order: '排序', - pageNotFound: '未找到頁面', - password: '密碼', - payloadSettings: 'Payload設定', - perPage: '每一頁: {{limit}} 個', - remove: '移除', - reset: '重設', - row: '行', - rows: '行', - save: '儲存', - saving: '儲存中...', - searchBy: '搜尋{{label}}', - selectAll: '選擇所有 {{count}} 個 {{label}}', - selectAllRows: '選擇所有行', - selectValue: '選擇一個值', - selectedCount: '已選擇 {{count}} 個 {{label}}', - showAllLabel: '顯示所有{{label}}', - sorryNotFound: '對不起,沒有找到您請求的東西。', - sort: '排序', - sortByLabelDirection: '按{{label}} {{direction}}排序', - stayOnThisPage: '停留在此頁面', - submissionSuccessful: '成功送出。', - submit: '送出', - successfullyCreated: '成功建立{{label}}', - thisLanguage: '中文 (繁體)', - titleDeleted: '{{label}} "{{title}}"已被成功刪除。', - unauthorized: '未經授權', - unsavedChangesDuplicate: '您有還沒儲存的修改,確定要繼續複製嗎?', - untitled: '無標題', - updatedAt: '更新於', - updatedCountSuccessfully: '已成功更新 {{count}} 個 {{label}}。', - updatedSuccessfully: '更新成功。', - updating: '更新中', - welcome: '歡迎', - }, - operators: { - contains: '包含', - equals: '等於', - exists: '存在', - isGreaterThan: '大於', - isGreaterThanOrEqualTo: '大於等於', - isIn: '在', - isLessThan: '小於', - isLessThanOrEqualTo: '小於或等於', - isLike: '就像', - isNotEqualTo: '不等於', - isNotIn: '不在', - near: '附近', - }, - upload: { - crop: '裁剪', - cropToolDescription: '拖動所選區域的角落,繪製一個新區域或調整以下的值。', - dragAndDrop: '拖放一個檔案', - editImage: '編輯圖像', - focalPoint: '焦點', - focalPointDescription: '直接在預覽中拖動焦點或調整下面的值。', - height: '高度', - previewSizes: '預覽尺寸', - selectCollectionToBrowse: '選擇一個要瀏覽的集合', - selectFile: '選擇一個文件', - setCropArea: '設置裁剪區域', - setFocalPoint: '設置焦點', - sizesFor: '{{label}}的尺寸', - width: '寬度', - }, - validation: { - fieldHasNo: '這個字串沒有{{label}}', - limitReached: '已達限制,只能添加{{max}}個項目。', - required: '該字串為必填項目。', - requiresAtLeast: '該字串至少需要 {{count}} 個 {{label}}。', - }, - version: { - aboutToPublishSelection: '您確定即將發佈所選的 {{label}} 嗎?', - aboutToRestore: '您將把這個文件{{label}}回復到{{versionDate}}時的狀態', - aboutToRestoreGlobal: '您要將痊域的{{label}}回復到{{versionDate}}時的狀態', - aboutToRevertToPublished: '您將要將這個文件的內容還原到它的發佈狀態。您確定嗎?', - aboutToUnpublish: '您即將取消發佈這個文件。您確定嗎?', - aboutToUnpublishSelection: '您即將取消發佈所選內容中的所有 {{label}}。您確定嗎?', - autosave: '自動儲存', - autosavedSuccessfully: '自動儲存成功。', - changed: '已更改', - compareVersion: '對比版本:', - confirmPublish: '確認發佈', - confirmRevertToSaved: '確認回復到儲存狀態', - confirmUnpublish: '確認取消發佈', - confirmVersionRestoration: '確認版本回復', - draft: '草稿', - draftSavedSuccessfully: '草稿儲存成功。', - lastSavedAgo: '上次儲存在{{distance}}之前', - noFurtherVersionsFound: '沒有發現其他版本', - noRowsFound: '沒有發現{{label}}', - preview: '預覽', - problemRestoringVersion: '回復這個版本時發生了問題', - publish: '發佈', - publishChanges: '發佈修改', - published: '已發佈', - publishing: '發布', - restoreThisVersion: '回復此版本', - restoredSuccessfully: '回復成功。', - restoring: '回復中...', - revertToPublished: '還原到已發佈的版本', - saveDraft: '儲存草稿', - selectLocales: '選擇要顯示的語言', - selectVersionToCompare: '選擇要比較的版本', - showLocales: '顯示語言:', - status: '狀態', - type: '類型', - unpublish: '取消發佈', - unpublishing: '取消發佈中...', - version: '版本', - versionCreatedOn: '版本 {{version}} 建立於:', - versionID: '版本ID', - versions: '版本', - viewingVersion: '正在查看{{entityLabel}} {{documentTitle}}的版本', - viewingVersionGlobal: '正在查看全域{{entityLabel}}的版本', - viewingVersions: '正在查看{{entityLabel}} {{documentTitle}}的版本', - viewingVersionsGlobal: '正在查看全域{{entityLabel}}的版本', - }, -} diff --git a/packages/translations/src/all/ar.ts b/packages/translations/src/all/ar.ts deleted file mode 100644 index 067e945cb9..0000000000 --- a/packages/translations/src/all/ar.ts +++ /dev/null @@ -1,384 +0,0 @@ -export default { - authentication: { - account: 'الحساب', - accountOfCurrentUser: 'حساب المستخدم الحالي', - alreadyActivated: 'تمّ التّفعيل بالفعل', - alreadyLoggedIn: 'تمّ تسجيل الدّخول بالفعل', - apiKey: 'مفتاح API', - backToLogin: 'العودة لتسجيل الدخول', - beginCreateFirstUser: 'للبدء, قم بإنشاء المستخدم الأوّل.', - changePassword: 'تغيير كلمة المرور', - checkYourEmailForPasswordReset: - 'تحقّق من بريدك الإلكتروني بحثًا عن رابط يسمح لك بإعادة تعيين كلمة المرور الخاصّة بك بشكل آمن.', - confirmGeneration: 'تأكيد التّوليد', - confirmPassword: 'تأكيد كلمة المرور', - createFirstUser: 'إنشاء المستخدم الأوّل', - emailNotValid: 'البريد الإلكتروني غير صالح', - emailSent: 'تمّ ارسال البريد الإلكتروني', - enableAPIKey: 'تفعيل مفتاح API', - failedToUnlock: 'فشل فتح القفل', - forceUnlock: 'إجبار فتح القفل', - forgotPassword: 'نسيت كلمة المرور', - forgotPasswordEmailInstructions: - 'يرجى إدخال البريد الالكتروني أدناه. ستتلقّى رسالة بريد إلكتروني تحتوي على إرشادات حول كيفيّة إعادة تعيين كلمة المرور الخاصّة بك.', - forgotPasswordQuestion: 'هل نسيت كلمة المرور؟', - generate: 'توليد', - generateNewAPIKey: 'توليد مفتاح API جديد', - generatingNewAPIKeyWillInvalidate: - 'سيؤدّي إنشاء مفتاح API جديد إلى <1> إبطال المفتاح السّابق. هل أنت متأكّد أنّك تريد المتابعة؟', - lockUntil: 'قفل حتى', - logBackIn: 'تسجيل الدّخول من جديد', - logOut: 'تسجيل الخروج', - loggedIn: 'لتسجيل الدّخول مع مستخدم آخر ، يجب عليك <0> تسجيل الخروج أوّلاً.', - loggedInChangePassword: - 'لتغيير كلمة المرور الخاصّة بك ، انتقل إلى <0>حسابك وقم بتعديل كلمة المرور هناك.', - loggedOutInactivity: 'لقد تمّ تسجيل الخروج بسبب عدم النّشاط.', - loggedOutSuccessfully: 'لقد تمّ تسجيل خروجك بنجاح.', - login: 'تسجيل الدخول', - loginAttempts: 'محاولات تسجيل الدخول', - loginUser: 'تسجيل دخول المستخدم', - loginWithAnotherUser: 'لتسجيل الدخول مع مستخدم آخر ، يجب عليك <0> تسجيل الخروج أوّلاً.', - logout: 'تسجيل الخروج', - logoutUser: 'تسجيل خروج المستخدم', - newAPIKeyGenerated: 'تمّ توليد مفتاح API جديد.', - newAccountCreated: - 'تمّ إنشاء حساب جديد لتتمكّن من الوصول إلى {{serverURL}} الرّجاء النّقر فوق الرّابط التّالي أو لصق عنوان URL أدناه في متصفّحّك لتأكيد بريدك الإلكتروني : {{verificationURL}}
    بعد التّحقّق من بريدك الإلكتروني ، ستتمكّن من تسجيل الدّخول بنجاح.', - newPassword: 'كلمة مرور جديدة', - resetPassword: 'إعادة تعيين كلمة المرور', - resetPasswordExpiration: 'انتهاء صلاحيّة إعادة تعيين كلمة المرور', - resetPasswordToken: 'رمز إعادة تعيين كلمة المرور', - resetYourPassword: 'إعادة تعيين كلمة المرور الخاصّة بك', - stayLoggedIn: 'ابق متّصلًا', - successfullyUnlocked: 'تمّ فتح القفل بنجاح', - unableToVerify: 'غير قادر على التحقق من', - verified: 'تمّ التحقّق', - verifiedSuccessfully: 'تمّ التحقّق بنجاح', - verify: 'قم بالتّحقّق', - verifyUser: 'قم بالتّحقّق من المستخدم', - verifyYourEmail: 'قم بتأكيد بريدك الألكتروني', - youAreInactive: - 'لم تكن نشطًا منذ فترة قصيرة وسيتمّ تسجيل خروجك قريبًا تلقائيًا من أجل أمنك. هل ترغب في البقاء مسجّلا؟', - youAreReceivingResetPassword: - 'أنت تتلقّى هذا البريد الالكتروني لأنّك (أو لأنّ شخص آخر) طلبت إعادة تعيين كلمة المرور لحسابك. الرّجاء النّقر فوق الرّابط التّالي ، أو لصق هذا الرّابط في متصفّحك لإكمال العمليّة:', - youDidNotRequestPassword: - 'إن لم تطلب هذا ، يرجى تجاهل هذا البريد الإلكتروني وستبقى كلمة مرورك ذاتها بدون تغيير.', - }, - error: { - accountAlreadyActivated: 'تم تفعيل هذا الحساب بالفعل.', - autosaving: 'حدثت مشكلة أثناء حفظ هذا المستند تلقائيًا.', - correctInvalidFields: 'يرجى تصحيح الحقول غير الصالحة.', - deletingFile: 'حدث خطأ أثناء حذف الملف.', - deletingTitle: - 'حدث خطأ أثناء حذف {{title}}. يرجى التحقق من الاتصال الخاص بك والمحاولة مرة أخرى.', - emailOrPasswordIncorrect: 'البريد الإلكتروني أو كلمة المرور المقدمة غير صحيحة.', - followingFieldsInvalid_one: 'الحقل التالي غير صالح:', - followingFieldsInvalid_other: 'الحقول التالية غير صالحة:', - incorrectCollection: 'مجموعة غير صحيحة', - invalidFileType: 'نوع ملف غير صالح', - invalidFileTypeValue: 'نوع ملف غير صالح: {{value}}', - loadingDocument: 'حدثت مشكلة أثناء تحميل المستند برقم التعريف {{id}}.', - missingEmail: 'البريد الإلكتروني مفقود.', - missingIDOfDocument: 'معرّف المستند المراد تحديثه مفقود.', - missingIDOfVersion: 'معرّف النسخة مفقود.', - missingRequiredData: 'توجد بيانات مطلوبة مفقودة.', - noFilesUploaded: 'لم يتمّ رفع أيّة ملفّات.', - noMatchedField: 'لم يتمّ العثور على حقل مطابق لـ "{{label}}"', - noUser: 'لا يوجد مستخدم', - notAllowedToAccessPage: 'لا يسمح لك الوصول إلى هذه الصّفحة.', - notAllowedToPerformAction: 'لا يسمح لك القيام بهذه العمليّة.', - notFound: 'لم يتمّ العثور على المورد المطلوب.', - previewing: 'حدث خطأ في اثناء معاينة هذا المستند.', - problemUploadingFile: 'حدث خطأ اثناء رفع الملفّ.', - tokenInvalidOrExpired: 'الرّمز إمّا غير صالح أو منتهي الصّلاحيّة.', - unPublishingDocument: 'حدث خطأ أثناء إلغاء نشر هذا المستند.', - unableToDeleteCount: 'يتعذّر حذف {{count}} من {{total}} {{label}}.', - unableToUpdateCount: 'يتعذّر تحديث {{count}} من {{total}} {{label}}.', - unauthorized: 'غير مصرّح لك ، عليك أن تقوم بتسجيل الدّخول لتتمكّن من تقديم هذا الطّلب.', - unknown: 'حدث خطأ غير معروف.', - unspecific: 'حدث خطأ.', - userLocked: 'تمّ قفل هذا المستخدم نظرًا لوجود عدد كبير من محاولات تسجيل الدّخول الغير ناجحة.', - valueMustBeUnique: 'على القيمة أن تكون فريدة', - verificationTokenInvalid: 'رمز التحقّق غير صالح.', - }, - fields: { - addLabel: 'أضف {{label}}', - addLink: 'أضف رابط', - addNew: 'أضف جديد', - addNewLabel: 'أضف {{label}} جديد', - addRelationship: 'أضف علاقة', - addUpload: 'أضف تحميل', - block: 'وحدة محتوى', - blockType: 'نوع وحدة المحتوى', - blocks: 'وحدات المحتوى', - chooseBetweenCustomTextOrDocument: 'اختر بين إدخال عنوان URL نصّي مخصّص أو الرّبط بمستند آخر.', - chooseDocumentToLink: 'اختر مستندًا للربط', - chooseFromExisting: 'اختر من القائمة', - chooseLabel: 'اختر {{label}}', - collapseAll: 'طيّ الكلّ', - customURL: 'URL مخصّص', - editLabelData: 'عدّل بيانات {{label}}', - editLink: 'عدّل الرّابط', - editRelationship: 'عدّل العلاقة', - enterURL: 'ادخل عنوان URL', - internalLink: 'رابط داخلي', - itemsAndMore: '{{items}} و {{count}} أخرى', - labelRelationship: '{{label}} علاقة', - latitude: 'خطّ العرض', - linkType: 'نوع الرّابط', - linkedTo: 'تمّ الرّبط ل <0>{{label}}', - longitude: 'خطّ الطّول', - newLabel: '{{label}} جديد', - openInNewTab: 'الفتح في علامة تبويب جديدة', - passwordsDoNotMatch: 'كلمة المرور غير مطابقة.', - relatedDocument: 'مستند مربوط', - relationTo: 'ربط ل', - removeRelationship: 'حذف العلاقة', - removeUpload: 'حذف المحتوى المرفوع', - saveChanges: 'حفظ التّغييرات', - searchForBlock: 'ابحث عن وحدة محتوى', - selectExistingLabel: 'اختيار {{label}} من القائمة', - selectFieldsToEdit: 'حدّد الحقول اللتي تريد تعديلها', - showAll: 'إظهار الكلّ', - swapRelationship: 'تبديل العلاقة', - swapUpload: 'تبديل المحتوى المرفوع', - textToDisplay: 'النصّ الذي تريد إظهاره', - toggleBlock: 'Toggle block', - uploadNewLabel: 'رفع {{label}} جديد', - }, - general: { - aboutToDelete: 'أنت على وشك حذف {{label}} <1>{{title}}. هل أنت متأكّد؟', - aboutToDeleteCount_many: 'أنت على وشك حذف {{count}} {{label}}', - aboutToDeleteCount_one: 'أنت على وشك حذف {{count}} {{label}}', - aboutToDeleteCount_other: 'أنت على وشك حذف {{count}} {{label}}', - addBelow: 'أضف في الاسفل', - addFilter: 'أضف فلتر', - adminTheme: 'شكل واجهة المستخدم', - and: 'و', - applyChanges: 'طبق التغييرات', - ascending: 'تصاعدي', - automatic: 'تلقائي', - backToDashboard: 'العودة للوحة التّحكّم', - cancel: 'إلغاء', - changesNotSaved: 'لم يتمّ حفظ التّغييرات. إن غادرت الآن ، ستفقد تغييراتك.', - close: 'إغلاق', - collapse: 'طيّ', - collections: 'المجموعات', - columnToSort: 'التّرتيب حسب العامود', - columns: 'الأعمدة', - confirm: 'تأكيد', - confirmDeletion: 'تأكيد الحذف', - confirmDuplication: 'تأكيد التّكرار', - copied: 'تمّ النّسخ', - copy: 'نسخ', - create: 'إنشاء', - createNew: 'أنشاء جديد', - createNewLabel: 'إنشاء {{label}} جديد', - created: 'تمّ الإنشاء', - createdAt: 'تمّ الإنشاء في', - creating: 'يتمّ الإنشاء', - creatingNewLabel: 'جاري إنشاء {{label}} جديد', - dark: 'غامق', - dashboard: 'لوحة التّحكّم', - delete: 'حذف', - deletedCountSuccessfully: 'تمّ حذف {{count}} {{label}} بنجاح.', - deletedSuccessfully: 'تمّ الحذف بنجاح.', - deleting: 'يتمّ الحذف...', - descending: 'تنازلي', - deselectAllRows: 'إلغاء تحديد جميع الصفوف', - duplicate: 'استنساخ', - duplicateWithoutSaving: 'استنساخ بدون حفظ التغييرات', - edit: 'تعديل', - editLabel: 'تعديل {{label}}', - editing: 'جاري التعديل', - editingLabel_many: 'تعديل {{count}} {{label}}', - editingLabel_one: 'تعديل {{count}} {{label}}', - editingLabel_other: 'تعديل {{count}} {{label}}', - email: 'البريد الإلكتروني', - emailAddress: 'عنوان البريد الإلكتروني', - enterAValue: 'أدخل قيمة', - error: 'خطأ', - errors: 'أخطاء', - fallbackToDefaultLocale: 'الرجوع إلى اللغة الافتراضية', - filter: 'تصفية', - filterWhere: 'تصفية {{label}} حيث', - filters: 'عوامل التصفية', - globals: 'عامة', - language: 'اللغة', - lastModified: 'آخر تعديل', - leaveAnyway: 'المغادرة على أي حال', - leaveWithoutSaving: 'المغادرة بدون حفظ', - light: 'فاتح', - livePreview: 'معاينة مباشرة', - loading: 'يتمّ التّحميل', - locale: 'اللّغة', - locales: 'اللّغات', - menu: 'قائمة', - moveDown: 'التّحريك إلى الأسفل', - moveUp: 'التّحريك إلى الأعلى', - newPassword: 'كلمة مرور جديدة', - noFiltersSet: 'لم يتم تعيين أي عوامل تصفية', - noLabel: '<لا {{label}}>', - noOptions: 'لا خيارات', - noResults: - 'لا يوجد {{label}}. إما أن لا {{label}} موجودة حتى الآن أو لا تتطابق مع عوامل التصفية التي حددتها أعلاه.', - noValue: 'لا يوجد قيمة', - none: 'لا شيء', - notFound: 'غير موجود', - nothingFound: 'لم يتم العثور على شيء', - of: 'من', - open: 'فتح', - or: 'أو', - order: 'التّرتيب', - pageNotFound: 'الصّفحة غير موجودة', - password: 'كلمة المرور', - payloadSettings: 'الإعدادات', - perPage: 'لكلّ صفحة: {{limit}}', - remove: 'إزالة', - reset: 'إعادة تعيين', - row: 'سطر', - rows: 'أسطُر', - save: 'حفظ', - saving: 'جاري الحفظ...', - searchBy: 'البحث عن طريق {{label}}', - selectAll: 'تحديد كل {{count}} {{label}}', - selectAllRows: 'حدد جميع الصفوف', - selectValue: 'اختيار قيمة', - selectedCount: 'تم تحديد {{count}} {{label}}', - showAllLabel: 'عرض كل {{label}}', - sorryNotFound: 'عذرًا - لا يوجد شيء يتوافق مع طلبك.', - sort: 'ترتيب', - sortByLabelDirection: 'رتّب حسب {{label}} {{direction}}', - stayOnThisPage: 'البقاء على هذه الصفحة', - submissionSuccessful: 'تمت الإرسال بنجاح.', - submit: 'إرسال', - successfullyCreated: '{{label}} تم إنشاؤها بنجاح.', - successfullyDuplicated: '{{label}} تم استنساخها بنجاح.', - thisLanguage: 'العربية', - titleDeleted: 'تم حذف {{label}} "{{title}}" بنجاح.', - unauthorized: 'غير مصرح به', - unsavedChangesDuplicate: 'لديك تغييرات لم يتم حفظها. هل تريد الاستمرار في الاستنساخ؟', - untitled: 'بدون عنوان', - updatedAt: 'تم التحديث في', - updatedCountSuccessfully: 'تم تحديث {{count}} {{label}} بنجاح.', - updatedSuccessfully: 'تم التحديث بنجاح.', - updating: 'جار التحديث', - uploading: 'جار الرفع', - user: 'المستخدم', - users: 'المستخدمين', - value: 'القيمة', - welcome: 'مرحبًا', - }, - operators: { - contains: 'يحتوي', - equals: 'يساوي', - exists: 'موجود', - isGreaterThan: 'أكبر من', - isGreaterThanOrEqualTo: 'أكبر أو يساوي', - isIn: 'موجود في', - isLessThan: 'أصغر من', - isLessThanOrEqualTo: 'أصغر أو يساوي', - isLike: 'هو مثل', - isNotEqualTo: 'لا يساوي', - isNotIn: 'غير موجود في', - near: 'قريب من', - }, - upload: { - crop: 'محصول', - cropToolDescription: 'اسحب الزوايا المحددة للمنطقة، رسم منطقة جديدة أو قم بضبط القيم أدناه.', - dragAndDrop: 'قم بسحب وإسقاط ملفّ', - dragAndDropHere: 'أو اسحب الملفّ وأفلته هنا', - editImage: 'تعديل الصورة', - fileName: 'اسم الملفّ', - fileSize: 'حجم الملفّ', - focalPoint: 'نقطة التركيز', - focalPointDescription: 'اسحب النقطة المركزية مباشرة على المعاينة أو قم بضبط القيم أدناه.', - height: 'الطّول', - lessInfo: 'معلومات أقلّ', - moreInfo: 'معلومات أكثر', - previewSizes: 'أحجام المعاينة', - selectCollectionToBrowse: 'حدّد مجموعة لاستعراضها', - selectFile: 'اختر ملفّ', - setCropArea: 'حدد منطقة القص', - setFocalPoint: 'حدد النقطة البؤرية', - sizes: 'الاحجام', - sizesFor: 'أحجام لـ {{label}}', - width: 'العرض', - }, - validation: { - emailAddress: 'يرجى إدخال عنوان بريد إلكتروني صحيح.', - enterNumber: 'يرجى إدخال رقم صحيح.', - fieldHasNo: 'هذا الحقل ليس لديه {{label}}', - greaterThanMax: '{{value}} أكبر من الحد الأقصى المسموح به {{label}} الذي يبلغ {{max}}.', - invalidInput: 'هذا الحقل لديه إدخال غير صالح.', - invalidSelection: 'هذا الحقل لديه اختيار غير صالح.', - invalidSelections: 'هذا الحقل لديه الاختيارات الغير صالحة التالية:', - lessThanMin: '{{value}} أقل من الحد الأدنى المسموح به {{label}} الذي يبلغ {{min}}.', - limitReached: 'تم الوصول إلى الحد الأقصى، يمكن إضافة {{max}} عناصر فقط.', - longerThanMin: 'يجب أن يكون هذا القيمة أطول من الحد الأدنى للطول الذي هو {{minLength}} أحرف.', - notValidDate: '"{{value}}" ليس تاريخا صالحا.', - required: 'هذا الحقل مطلوب.', - requiresAtLeast: 'هذا الحقل يتطلب على الأقل {{count}} {{label}}.', - requiresNoMoreThan: 'هذا الحقل يتطلب عدم تجاوز {{count}} {{label}}.', - requiresTwoNumbers: 'هذا الحقل يتطلب رقمين.', - shorterThanMax: 'يجب أن تكون هذه القيمة أقصر من الحد الأقصى للطول الذي هو {{maxLength}} أحرف.', - trueOrFalse: 'يمكن أن يكون هذا الحقل مساويًا فقط للقيمتين صحيح أو خطأ.', - validUploadID: 'هذا الحقل ليس معرّف تحميل صالح.', - }, - version: { - aboutToPublishSelection: 'أنت على وشك نشر كلّ {{label}} في التّحديد. هل أنت متأكّد؟', - aboutToRestore: - 'أنت على وشك استرجاع هذا المستند {{label}} إلى الحالة التّي كان عليها في {{versionDate}}.', - aboutToRestoreGlobal: - 'أنت على وشك استرجاع الاعداد العامّ {{label}} إلى الحالة التي كان عليها في {{versionDate}}.', - aboutToRevertToPublished: 'أنت على وشك إعادة هذا المستند إلى حالته المنشورة. هل أنت متأكّد؟', - aboutToUnpublish: 'أنت على وشك إلغاء نشر هذا المستند. هل أنت متأكّد؟', - aboutToUnpublishSelection: 'أنت على وشك إلغاء نشر كلّ {{label}} في التّحديد. هل أنت متأكّد؟', - autosave: 'حفظ تلقائي', - autosavedSuccessfully: 'تمّ الحفظ التّلقائي بنجاح.', - autosavedVersion: 'النّسخة المحفوظة تلقائياً', - changed: 'تمّ التّغيير', - compareVersion: 'مقارنة النّسخة مع:', - confirmPublish: 'تأكيد النّشر', - confirmRevertToSaved: 'تأكيد الرّجوع للنسخة المنشورة', - confirmUnpublish: 'تأكيد إلغاء النّشر', - confirmVersionRestoration: 'تأكيد إستعادة النّسخة', - currentDocumentStatus: 'المستند {{docStatus}} الحالي', - draft: 'مسودّة', - draftSavedSuccessfully: 'تمّ حفظ المسودّة بنجاح.', - lastSavedAgo: 'تم الحفظ آخر مرة قبل {{distance}}', - noFurtherVersionsFound: 'لم يتمّ العثور على نسخات أخرى', - noRowsFound: 'لم يتمّ العثور على {{label}}', - preview: 'معاينة', - problemRestoringVersion: 'حدث خطأ في استعادة هذه النّسخة', - publish: 'نشر', - publishChanges: 'نشر التّغييرات', - published: 'تمّ النّشر', - publishing: 'نشر', - restoreThisVersion: 'استعادة هذه النّسخة', - restoredSuccessfully: 'تمّت الاستعادة بنحاح.', - restoring: 'تتمّ الاستعادة...', - revertToPublished: 'الرّجوع للنسخة المنشورة', - reverting: 'يتمّ الاسترجاع...', - saveDraft: 'حفظ المسودّة', - selectLocales: 'حدّد اللّغات المراد عرضها', - selectVersionToCompare: 'حدّد نسخة للمقارنة', - showLocales: 'اظهر اللّغات:', - showingVersionsFor: 'يتمّ عرض النًّسخ ل:', - status: 'الحالة', - type: 'النّوع', - unpublish: 'الغاء النّشر', - unpublishing: 'يتمّ الغاء النّشر...', - version: 'النّسخة', - versionCount_many: 'تمّ العثور على {{count}} نُسخ', - versionCount_none: 'لم يتمّ العثور على أيّ من النّسخ', - versionCount_one: 'تمّ العثور على {{count}} من النّسخ', - versionCount_other: 'تمّ العثور على {{count}} نُسخ', - versionCreatedOn: 'تمّ ﻹنشاء النّسخة في {{version}}:', - versionID: 'مُعرّف النّسخة', - versions: 'النُّسَخ', - viewingVersion: 'يتمّ استعراض نسخة ل {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: 'يتمّ استعراض نسخة للاعداد العامّ {{entityLabel}}', - viewingVersions: 'يتمّ استعراض النُّسَخ ل {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: 'يتمّ استعراض النُّسَخ للاعداد العامّ {{entityLabel}}', - }, -} diff --git a/packages/translations/src/all/az.ts b/packages/translations/src/all/az.ts deleted file mode 100644 index 387a45b473..0000000000 --- a/packages/translations/src/all/az.ts +++ /dev/null @@ -1,392 +0,0 @@ -export default { - authentication: { - account: 'Hesab', - accountOfCurrentUser: 'Cari istifadəçinin hesabı', - alreadyActivated: 'Artıq Aktivləşdirilib', - alreadyLoggedIn: 'Artıq daxil olunub', - apiKey: 'API Açarı', - backToLogin: 'Girişə qayıt', - beginCreateFirstUser: 'Başlamaq üçün ilk istifadəçinizi yaradın.', - changePassword: 'Parolu dəyişdir', - checkYourEmailForPasswordReset: - 'Parolunuzu təhlükəsiz şəkildə sıfırlamağa imkan verəcək link üçün e-poçt ünvanınızı yoxlayın.', - confirmGeneration: 'Generasiyani təsdiqlə', - confirmPassword: 'Şifrəni təsdiq et', - createFirstUser: 'İlk istifadəçini yaradın', - emailNotValid: 'Təqdim olunan e-poçt etibarlı deyil', - emailSent: 'E-poçt göndərildi', - enableAPIKey: 'API açarını aktivləşdir', - failedToUnlock: 'Kilidi açmaq alınmadı', - forceUnlock: 'Kilidi zorla aç', - forgotPassword: 'Şifrəni unutmusan', - forgotPasswordEmailInstructions: - 'Zəhmət olmasa, e-poçt ünvanınızı aşağıda daxil edin. Siz parolunuzu necə sıfırlamaq barədə təlimatları olan e-poçt mesajı alacaqsınız.', - forgotPasswordQuestion: 'Şifrəni unutmusan?', - generate: 'Yarad', - generateNewAPIKey: 'Yeni API açarı yarad', - generatingNewAPIKeyWillInvalidate: - 'Yeni API açarının yaradılması əvvəlki açarı etibarsız edəcək. Davam etmək istədiyinizə əminsiniz?', - lockUntil: 'Klidklə', - logBackIn: 'Yenidən daxil ol', - logOut: 'Çıxış et', - loggedIn: 'Başqa istifadəçi ilə daxil olmaq üçün əvvəlcə çıxış etməlisiniz.', - loggedInChangePassword: - 'Parolu dəyişdirmək üçün hesabınıza get və orada şifrənizi redaktə edin.', - loggedOutInactivity: 'Hərəkətsizlik səbəbindən sistemdən çıxmısınız.', - loggedOutSuccessfully: 'Siz uğurla çıxış etdiniz.', - login: 'Giriş', - loginAttempts: 'Giriş cəhdləri', - loginUser: 'Giriş istifadəçisi', - loginWithAnotherUser: 'Başqa istifadəçi ilə daxil olmaq üçün əvvəlcə çıxış etməlisiniz.', - logout: 'Çıxış', - logoutUser: 'Sistemdən çıxış', - newAPIKeyGenerated: 'Yeni API Açarı Yaradıldı.', - newAccountCreated: - 'Sizin üçün yeni hesab yaradıldı. Zəhmət olmasa, e-poçtunuzu doğrulamaq üçün aşağıdakı linke klikləyin: {{verificationURL}}. E-poçtunuzu doğruladıqdan sonra uğurla daxil ola bilərsiniz.', - newPassword: 'Yeni şifrə', - resetPassword: 'Şifrəni sıfırla', - resetPasswordExpiration: 'Şifrənin müddətini sıfırla', - resetPasswordToken: 'Şifrə Tokenini Sıfırla', - resetYourPassword: 'Şifrənizi sıfırlayın', - stayLoggedIn: 'Sistemdə qal', - successfullyUnlocked: 'Uğurla kilidi açıldı', - unableToVerify: 'Doğrulamaq mümkün deyil', - verified: 'Doğrulanmış', - verifiedSuccessfully: 'Uğurla doğrulandı', - verify: 'Doğrula', - verifyUser: 'İstifadəçini doğrula', - verifyYourEmail: 'E-poçtunuzu doğrulayın', - youAreInactive: - 'Siz bir müddətdir aktiv deyilsiniz və tezliklə öz təhlükəsizliyiniz üçün avtomatik olaraq sistemdən çıxacaqsınız. Daxil olmaq istərdinizmi?', - youAreReceivingResetPassword: - 'Siz (və ya başqası) hesabınız üçün parolun sıfırlanmasını tələb etdiyiniz üçün bunu alırsınız. Prosesi tamamlamaq üçün zəhmət olmasa aşağıdakı linkə klikləyin:', - youDidNotRequestPassword: - 'Əgər siz bunu tələb etməmisinizsə, lütfən, bu e-poçtu nəzərə almayın və şifrəniz dəyişilməz qalacaq.', - }, - error: { - accountAlreadyActivated: 'Bu hesab artıq aktivləşdirilib.', - autosaving: 'Bu sənədin avto yadda saxlanılması zamanı problem yarandı.', - correctInvalidFields: 'Zəhmət olmasa, yanlış sahələri düzəlt.', - deletingFile: 'Faylın silinməsində xəta baş verdi.', - deletingTitle: - '{{title}} silinərkən xəta baş verdi. Zəhmət olmasa, bağlantınızı yoxlayın və yenidən cəhd edin.', - emailOrPasswordIncorrect: 'Təqdim olunan e-poçt və ya şifrə yanlışdır.', - followingFieldsInvalid_many: 'Aşağıdakı sahələr yanlışdır:', - followingFieldsInvalid_one: 'Aşağıdakı sahə yanlışdır:', - followingFieldsInvalid_other: 'Aşağıdaki sahələr yanlışdır:', - incorrectCollection: 'Yanlış Kolleksiya', - invalidFileType: 'Yanlış fayl növü', - invalidFileTypeValue: 'Yanlış fayl növü: {{value}}', - loadingDocument: '{{id}} ID-li sənədin yüklənməsində problem baş verdi.', - missingEmail: 'E-poçt adresi çatışmır.', - missingIDOfDocument: 'Yeniləmək üçün sənədin ID-si çatışmır.', - missingIDOfVersion: 'Versiyanın ID-si çatışmır.', - missingRequiredData: 'Tələb olunan məlumat çatışmır.', - noFilesUploaded: 'Heç bir fayl yüklənilməyib.', - noMatchedField: '"{{label}}" üçün uyğun sahə tapılmadı', - noUser: 'İstifadəçi Yoxdur', - notAllowedToAccessPage: 'Bu səhifəyə girməyə icazəniz yoxdur.', - notAllowedToPerformAction: 'Bu əməliyyatı icra etməyə icazəniz yoxdur.', - notFound: 'Tələb olunan resurs tapılmadı.', - previewing: 'Bu sənədin ön baxışı zamanı problem yarandı.', - problemUploadingFile: 'Faylın yüklənməsi zamanı problem yarandı.', - tokenInvalidOrExpired: 'Token ya yanlışdır və ya müddəti bitib.', - unPublishingDocument: 'Bu sənədin nəşrini ləğv etmək zamanı problem baş verdi.', - unableToDeleteCount: '{{count}} dən {{total}} {{label}} silinə bilmir.', - unableToUpdateCount: '{{count}} dən {{total}} {{label}} yenilənə bilmir.', - unauthorized: 'İcazəniz yoxdur, bu tələbi yerinə yetirmək üçün daxil olmalısınız.', - unknown: 'Naməlum bir xəta baş verdi.', - unspecific: 'Xəta baş verdi.', - userLocked: 'Bu istifadəçi çoxsaylı uğursuz giriş cəhdləri səbəbindən kilidlənib.', - valueMustBeUnique: 'Dəyər təkrar olmamalıdır', - verificationTokenInvalid: 'Doğrulama tokenı yanlışdır.', - }, - fields: { - addLabel: '{{label}} əlavə et', - addLink: 'Keçid əlavə et', - addNew: 'Yenisini əlavə et', - addNewLabel: 'Yeni {{label}} əlavə et', - addRelationship: 'Relationship əlavə et', - addUpload: 'Yükləmə əlavə et', - block: 'blok', - blockType: 'Blok Növü', - blocks: 'bloklar', - chooseBetweenCustomTextOrDocument: - "Xüsusi mətn URL'si daxil etmək və ya başqa bir sənədə keçid yaratmaq arasında seçim edin.", - chooseDocumentToLink: 'Keçid yaratmaq üçün sənəd seçin', - chooseFromExisting: 'Mövcuddan seçin', - chooseLabel: '{{label}} seçin', - collapseAll: 'Hamısını Bağla', - customURL: 'Xüsusi URL', - editLabelData: '{{label}} məlumatını redaktə et', - editLink: 'Keçidi redaktə et', - editRelationship: 'Relationship redaktə et', - enterURL: 'URL daxil edin', - internalLink: 'Daxili Keçid', - itemsAndMore: '{{items}} və daha {{count}} nəfər', - labelRelationship: '{{label}} Relationship', - latitude: 'Enlik', - linkType: 'Keçid Növü', - linkedTo: '<0>{{label}} ilə əlaqəli', - longitude: 'Uzunluq', - newLabel: 'Yeni {{label}}', - openInNewTab: 'Yeni sekmede aç', - passwordsDoNotMatch: 'Şifrələr uyğun gəlmir.', - relatedDocument: 'Əlaqəli Sənəd', - relationTo: 'Relationship', - removeRelationship: 'Relationship sil', - removeUpload: 'Yükləməni sil', - saveChanges: 'Dəyişiklikləri saxla', - searchForBlock: 'Blok üçün axtarış', - selectExistingLabel: 'Mövcud {{label}} seçin', - selectFieldsToEdit: 'Redaktə ediləcək sahələri seçin', - showAll: 'Hamısını Göstər', - swapRelationship: 'Relationship dəyiş', - swapUpload: 'Yükləməni dəyiş', - textToDisplay: 'Göstəriləcək mətn', - toggleBlock: 'Bloku keç', - uploadNewLabel: 'Yeni {{label}} yüklə', - }, - general: { - aboutToDelete: 'Siz {{label}} <1>{{title}} silməyə hazırsınız. Eminsiniz?', - aboutToDeleteCount_many: 'Siz {{count}} {{label}} silməyə hazırsınız.', - aboutToDeleteCount_one: 'Siz {{count}} {{label}} silməyə hazırsınız.', - aboutToDeleteCount_other: 'Siz {{count}} {{label}} silməyə hazırsınız.', - addBelow: 'Aşağıya əlavə et', - addFilter: 'Filter əlavə et', - adminTheme: 'Admin Mövzusu', - and: 'Və', - applyChanges: 'Dəyişiklikləri Tətbiq Edin', - ascending: 'Artan', - automatic: 'Avtomatik', - backToDashboard: 'Panelə qayıdın', - cancel: 'Ləğv et', - changesNotSaved: - 'Dəyişiklikləriniz saxlanılmayıb. İndi çıxsanız, dəyişikliklərinizi itirəcəksiniz.', - close: 'Bağla', - collapse: 'Bağla', - collections: 'Kolleksiyalar', - columnToSort: 'Sıralamağa sütun', - columns: 'Sütunlar', - confirm: 'Təsdiqlə', - confirmDeletion: 'Silməni təsdiqlə', - confirmDuplication: 'Dublikasiyanı təsdiqlə', - copied: 'Kopyalandı', - copy: 'Kopyala', - create: 'Yarat', - createNew: 'Yeni yarat', - createNewLabel: 'Yeni {{label}} yarat', - created: 'Yaradıldı', - createdAt: 'Yaradıldığı tarix', - creating: 'Yaradılır', - creatingNewLabel: 'Yeni {{label}} yaradılır', - dark: 'Tünd', - dashboard: 'Panel', - delete: 'Sil', - deletedCountSuccessfully: '{{count}} {{label}} uğurla silindi.', - deletedSuccessfully: 'Uğurla silindi.', - deleting: 'Silinir...', - descending: 'Azalan', - deselectAllRows: 'Bütün sıraları seçimi ləğv edin', - duplicate: 'Dublikat', - duplicateWithoutSaving: 'Dəyişiklikləri saxlamadan dublikatla', - edit: 'Redaktə et', - editLabel: '{{label}} redaktə et', - editing: 'Redaktə olunur', - editingLabel_many: '{{count}} {{label}} redaktə olunur', - editingLabel_one: '{{count}} {{label}} redaktə olunur', - editingLabel_other: '{{count}} {{label}} redaktə olunur', - email: 'Elektron poçt', - emailAddress: 'Elektron poçt ünvanı', - enterAValue: 'Bir dəyər daxil edin', - error: 'Xəta', - errors: 'Xətalar', - fallbackToDefaultLocale: 'Standart lokalə keçid', - filter: 'Filter', - filterWhere: '{{label}} filtrlə', - filters: 'Filtərlər', - globals: 'Qloballar', - language: 'Dil', - lastModified: 'Son dəyişdirildi', - leaveAnyway: 'Heç olmasa çıx', - leaveWithoutSaving: 'Saxlamadan çıx', - light: 'Açıq', - livePreview: 'Öncədən baxış', - loading: 'Yüklənir', - locale: 'Lokal', - locales: 'Dillər', - menu: 'Menyu', - moveDown: 'Aşağı hərəkət et', - moveUp: 'Yuxarı hərəkət et', - newPassword: 'Yeni şifrə', - noFiltersSet: 'Filter təyin edilməyib', - noLabel: '', - noOptions: 'Heç bir seçim yoxdur', - noResults: - 'Heç bir {{label}} tapılmadı. Ya hələ {{label}} yoxdur, ya da yuxarıda göstərdiyiniz filtrlərə uyğun gəlmir.', - noValue: 'Dəyər yoxdur', - none: 'Heç bir', - notFound: 'Tapılmadı', - nothingFound: 'Heç nə tapılmadı', - of: 'dən', - open: 'Aç', - or: 'Və ya', - order: 'Sıra', - pageNotFound: 'Səhifə tapılmadı', - password: 'Şifrə', - payloadSettings: 'Payload Parametrləri', - perPage: 'Hər səhifədə: {{limit}}', - remove: 'Sil', - reset: 'Yenidən başlat', - row: 'Sətir', - rows: 'Sətirlər', - save: 'Saxla', - saving: 'Saxlanılır...', - searchBy: '{{label}} ilə axtar', - selectAll: 'Bütün {{count}} {{label}} seç', - selectAllRows: 'Bütün sıraları seçin', - selectValue: 'Dəyər seçin', - selectedCount: '{{count}} {{label}} seçildi', - showAllLabel: 'Bütün {{label}}-ı göstər', - sorryNotFound: 'Üzr istəyirik - sizin tələbinizə uyğun heç nə yoxdur.', - sort: 'Sırala', - sortByLabelDirection: '{{label}} {{direction}} ilə sırala', - stayOnThisPage: 'Bu səhifədə qal', - submissionSuccessful: 'Təqdimat uğurlu oldu.', - submit: 'Təqdim et', - successfullyCreated: '{{label}} uğurla yaradıldı.', - successfullyDuplicated: '{{label}} uğurla dublikatlandı.', - thisLanguage: 'Azərbaycan dili', - titleDeleted: '{{label}} "{{title}}" uğurla silindi.', - unauthorized: 'İcazəsiz', - unsavedChangesDuplicate: - 'Saxlanılmamış dəyişiklikləriniz var. Dublikatla davam etmək istəyirsiniz?', - untitled: 'Başlıqsız', - updatedAt: 'Yeniləndiyi tarix', - updatedCountSuccessfully: '{{count}} {{label}} uğurla yeniləndi.', - updatedSuccessfully: 'Uğurla yeniləndi.', - updating: 'Yenilənir', - uploading: 'Yüklənir', - user: 'İstifadəçi', - users: 'İstifadəçilər', - value: 'Dəyər', - welcome: 'Xoş gəldiniz', - }, - operators: { - contains: 'daxilində', - equals: 'bərabərdir', - exists: 'mövcuddur', - isGreaterThan: 'dən böyük', - isGreaterThanOrEqualTo: 'böyük və ya bərabər', - isIn: 'daxildir', - isLessThan: 'dən kiçik', - isLessThanOrEqualTo: 'kiçik və ya bərabər', - isLike: 'kimi', - isNotEqualTo: 'bərabər deyil', - isNotIn: 'daxil deyil', - near: 'yaxın', - }, - upload: { - crop: 'Məhsul', - cropToolDescription: - 'Seçilmiş sahənin köşələrini sürükləyin, yeni bir sahə çəkin və ya aşağıdakı dəyərləri düzəltin.', - dragAndDrop: 'Faylı buraya sürükləyin və buraxın', - dragAndDropHere: 'və ya faylı buraya sürükləyin və buraxın', - editImage: 'Şəkili Redaktə Et', - fileName: 'Faylın Adı', - fileSize: 'Faylım Ölçüsü', - focalPoint: 'Mərkəzi Nöqtə', - focalPointDescription: - 'Fokus nöqtəsini birbaşa önizləməyə sürükləyin və ya aşağıdakı dəyərləri düzəltin.', - height: 'Hündürlük', - lessInfo: 'Daha az məlumat', - moreInfo: 'Daha çox məlumat', - previewSizes: 'Öncədən baxış ölçüləri', - selectCollectionToBrowse: 'Gözdən keçirmək üçün bir Kolleksiya seçin', - selectFile: 'Fayl seçin', - setCropArea: 'Məhsul sahəsini təyin et', - setFocalPoint: 'Fokus nöqtəsi təyin et', - sizes: 'Ölçülər', - sizesFor: '{{label}} üçün ölçülər', - width: 'En', - }, - validation: { - emailAddress: 'Xahiş edirik doğru elektron poçt ünvanını daxil edin.', - enterNumber: 'Xahiş edirik doğru nömrəni daxil edin.', - fieldHasNo: 'Bu sahədə heç bir {{label}} yoxdur', - greaterThanMax: '{{value}} icazə verilən maksimal {{label}} olan {{max}}-dən böyükdür.', - invalidInput: 'Bu sahə yanlış daxil edilmişdir.', - invalidSelection: 'Bu sahədə yanlış seçim edilmişdir.', - invalidSelections: 'Bu sahədə aşağıdakı yanlış seçimlər edilmişdir:', - lessThanMin: '{{value}} icazə verilən minimal {{label}} olan {{min}}-dən kiçikdir.', - limitReached: 'Limitə çatdınız, yalnız {{max}} element əlavə edilə bilər.', - longerThanMin: 'Bu dəyər {{minLength}} simvoldan uzun olmalıdır.', - notValidDate: '"{{value}}" doğru tarix deyil.', - required: 'Bu sahə mütləq doldurulmalıdır.', - requiresAtLeast: 'Bu sahə ən azı {{count}} {{label}} tələb edir.', - requiresNoMoreThan: 'Bu sahə {{count}} {{label}}-dan çox olmamalıdır.', - requiresTwoNumbers: 'Bu sahə iki nömrə tələb edir.', - shorterThanMax: 'Bu dəyər {{maxLength}} simvoldan qısa olmalıdır.', - trueOrFalse: 'Bu sahə yalnız doğru və ya yanlış ola bilər.', - validUploadID: 'Bu sahə doğru yükləmə ID-si deyil.', - }, - version: { - aboutToPublishSelection: 'Seçimdə olan bütün {{label}}-i dərc etməyə hazırsınız. Əminsiniz?', - aboutToRestore: - 'Bu {{label}} sənədini {{versionDate}} tarixindəki vəziyyətinə bərpa etmək üzrəsiniz.', - aboutToRestoreGlobal: - 'Qlobal {{label}}-i {{versionDate}} tarixindəki vəziyyətinə bərpa etmək üzrəsiniz.', - aboutToRevertToPublished: - 'Bu sənədin dəyişikliklərini dərc edilmiş vəziyyətinə qaytarmağa hazırsınız. Əminsiniz?', - aboutToUnpublish: 'Bu sənədi dərcdən çıxartmağa hazırsınız. Əminsiniz?', - aboutToUnpublishSelection: - 'Seçimdə olan bütün {{label}}-i dərcdən çıxartmağa hazırsınız. Əminsiniz?', - autosave: 'Avtomatik yadda saxlama', - autosavedSuccessfully: 'Uğurla avtomatik olaraq yadda saxlandı.', - autosavedVersion: 'Avtomatik yadda saxlanmış versiya', - changed: 'Dəyişdirildi', - compareVersion: 'Versiyanı müqayisə et:', - confirmPublish: 'Dərci təsdiq edin', - confirmRevertToSaved: 'Yadda saxlanana qayıtmağı təsdiq edin', - confirmUnpublish: 'Dərcdən çıxartmağı təsdiq edin', - confirmVersionRestoration: 'Versiyanın bərpasını təsdiq edin', - currentDocumentStatus: 'Cari {{docStatus}} sənədi', - draft: 'Qaralama', - draftSavedSuccessfully: 'Qaralama uğurla yadda saxlandı.', - lastSavedAgo: '{{distance}} əvvəl son yadda saxlanıldı', - noFurtherVersionsFound: 'Başqa versiyalar tapılmadı', - noRowsFound: 'Heç bir {{label}} tapılmadı', - preview: 'Öncədən baxış', - problemRestoringVersion: 'Bu versiyanın bərpasında problem yaşandı', - publish: 'Dərc et', - publishChanges: 'Dəyişiklikləri dərc et', - published: 'Dərc edilmiş', - publishing: 'Nəşr', - restoreThisVersion: 'Bu versiyanı bərpa et', - restoredSuccessfully: 'Uğurla bərpa edildi.', - restoring: 'Bərpa olunur...', - revertToPublished: 'Dərc edilmişə qayıt', - reverting: 'Qayıdılır...', - saveDraft: 'Qaralamayı yadda saxla', - selectLocales: 'Göstərmək üçün lokalları seçin', - selectVersionToCompare: 'Müqayisə üçün bir versiya seçin', - showLocales: 'Lokalları göstər:', - showingVersionsFor: 'Göstərilən versiyalar üçün:', - status: 'Status', - type: 'Növ', - unpublish: 'Dərcdən çıxart', - unpublishing: 'Dərcdən çıxarılır...', - version: 'Versiya', - versionCount_many: '{{count}} versiya tapıldı', - versionCount_none: 'Versiya tapılmadı', - versionCount_one: '{{count}} versiya tapıldı', - versionCount_other: '{{count}} versiya tapıldı', - versionCreatedOn: '{{version}} tarixində yaradıldı:', - versionID: 'Versiyanın ID-si', - versions: 'Versiyalar', - viewingVersion: '{{entityLabel}} {{documentTitle}} üçün versiyanı göstərir', - viewingVersionGlobal: 'Qlobal {{entityLabel}} üçün versiyanı göstərir', - viewingVersions: '{{entityLabel}} {{documentTitle}} üçün versiyaları göstərir', - viewingVersionsGlobal: 'Qlobal {{entityLabel}} üçün versiyaları göstərir', - }, -} diff --git a/packages/translations/src/all/bg.ts b/packages/translations/src/all/bg.ts deleted file mode 100644 index e386679e99..0000000000 --- a/packages/translations/src/all/bg.ts +++ /dev/null @@ -1,390 +0,0 @@ -export default { - authentication: { - account: 'Профил', - accountOfCurrentUser: 'Профил на текущия потребител', - alreadyActivated: 'Вече активиран', - alreadyLoggedIn: 'Вече влязъл', - apiKey: 'API ключ', - backToLogin: 'Обратно към влизане', - beginCreateFirstUser: 'За да започнеш, създай първия си потребител', - changePassword: 'Промяна на паролата', - checkYourEmailForPasswordReset: - 'Провери имейла си за връзка, която ще ти позволи да промениш паролата си', - confirmGeneration: 'Потвърди генерация', - confirmPassword: 'Потвърди парола', - createFirstUser: 'Създай първи потребител', - emailNotValid: 'Даденият имейл не е валиден', - emailSent: 'Имейлът е изпратен', - enableAPIKey: 'Активирай API ключ', - failedToUnlock: 'Неуспешно отключване', - forceUnlock: 'Принудително отключване', - forgotPassword: 'Забравена парола', - forgotPasswordEmailInstructions: - 'Моля, въведи имейла си по-долу. Ще получиш съобщение с насоки как да промениш паролата си.', - forgotPasswordQuestion: 'Забравена парола?', - generate: 'Генерирай', - generateNewAPIKey: 'Генерирай нов API ключ', - generatingNewAPIKeyWillInvalidate: - 'Генерирането на нов API ключ ще <1>инвалидира предишния. Сигурен ли си, че искаш да продължиш?', - lockUntil: 'Заключи до', - logBackIn: 'Влез обратно', - logOut: 'Изход', - loggedIn: 'За да влезеш с друг потребител, първо трябва да <0>излезеш.', - loggedInChangePassword: - 'За да промениш паролата си, отиди в своя <0>профил и я промени оттам.', - loggedOutInactivity: 'Ти беше изкаран поради неактивност.', - loggedOutSuccessfully: 'Излезе успешно.', - login: 'Вход', - loginAttempts: 'Опити за вход', - loginUser: 'Вкарай потребител', - loginWithAnotherUser: 'За да влезеш с друг потребител, първо трябва да <0>излезеш.', - logout: 'Изход', - logoutUser: 'Изкарай потребител', - newAPIKeyGenerated: 'Нов API ключ генериран.', - newAccountCreated: - 'Току-що беше създаден нов профил за достъп до {{serverURL}} Моля, въведи връзката в браузъра си, за да потвърдиш имейла си: {{verificationURL}}
    След като потвърдиш имейла си, ще можеш да влезеш успешно.', - newPassword: 'Нова парола', - resetPassword: 'Възстанови парола', - resetPasswordExpiration: 'Изтичане на възстановяването на парола', - resetPasswordToken: 'Ключ за възстановяване на парола', - resetYourPassword: 'Възстанови паролата си', - stayLoggedIn: 'Запомни ме', - successfullyUnlocked: 'Успешно отключен', - unableToVerify: 'Неуспешно потвърждение', - verified: 'Потвърден', - verifiedSuccessfully: 'Потвърден успешно', - verify: 'Потвърди', - verifyUser: 'Потвърди потребител', - verifyYourEmail: 'Потвърди имейла си', - youAreInactive: - 'Не си активен от известно време и ще бъдеш изкаран за собствената си сигурност. Би ли пожелал да останеш вписан?', - youAreReceivingResetPassword: - 'Получаваш това, защото ти (или някой друг) е заявил възстановяване на паролата. Натисни връзката или постави това в браузъра си, за да довършиш процеса:', - youDidNotRequestPassword: - 'Ако не си заявил това, игнорирай този имейл и паролата ти ще остане непроменена.', - }, - error: { - accountAlreadyActivated: 'Този профил вече е активиран.', - autosaving: 'Имаше проблем в автоматичното запазване на този документ.', - correctInvalidFields: 'Моля, поправи некоректните полета.', - deletingFile: 'Имаше грешка при изтриването на файла.', - deletingTitle: - 'Имаше проблем при изтриването на {{title}}. Моля провери връзката си и опитай отново.', - emailOrPasswordIncorrect: 'Имейлът или паролата не са правилни.', - followingFieldsInvalid_one: 'Следното поле е некоректно:', - followingFieldsInvalid_other: 'Следните полета са некоректни:', - incorrectCollection: 'Некоректно събиране', - invalidFileType: 'Невалиден тип на файл', - invalidFileTypeValue: 'Невалиден тип на файл: {{value}}', - loadingDocument: 'Имаше проблем при зареждането на документа с идентификатор {{id}}.', - missingEmail: 'Липсващ имейл.', - missingIDOfDocument: 'Липсващ идентификатор на документа за обновяване.', - missingIDOfVersion: 'Липсващ идентификатор на версия.', - missingRequiredData: 'Липсва задължителна информация.', - noFilesUploaded: 'Никакви файлове не бяха качени.', - noMatchedField: 'Поле не беше открито за "{{label}}"', - noUser: 'Липсващ потребител', - notAllowedToAccessPage: 'Нямаш право на достъп до тази страница.', - notAllowedToPerformAction: 'Нямаш право да извършиш това действие.', - notFound: 'Заявеният ресурс не беше намерен.', - previewing: 'Имаше проблем при предварителното разглеждане на документа.', - problemUploadingFile: 'Имаше проблем при качването на файла.', - tokenInvalidOrExpired: 'Ключът е невалиден или изтекъл.', - unPublishingDocument: 'Имаше проблем при скриването на този документ.', - unableToDeleteCount: 'Не беше възможно да се изтрият {{count}} от {{total}} {{label}}.', - unableToUpdateCount: 'Не беше възможно да се обновят {{count}} от {{total}} {{label}}.', - unauthorized: 'Неавторизиран, трябва да влезеш, за да извършиш тази заявка.', - unknown: 'Неизвестна грешка.', - unspecific: 'Грешка.', - userLocked: 'Този потребител има прекалено много невалидни опити за влизане и е заключен.', - valueMustBeUnique: 'Стойността трябва да е уникална', - verificationTokenInvalid: 'Ключът за верификация е невалиден.', - }, - fields: { - addLabel: 'Добави {{label}}', - addLink: 'Добави нова връзка', - addNew: 'Добави нов', - addNewLabel: 'Добави нов {{label}}', - addRelationship: 'Добави отношение', - addUpload: 'Качи', - block: 'блок', - blockType: 'Тип блок', - blocks: 'блокове', - chooseBetweenCustomTextOrDocument: - 'Избери между това да въведеш текстова връзка или да свържеш с друг документ.', - chooseDocumentToLink: 'Избери документ, с който да свържеш', - chooseFromExisting: 'Избери от съществуващите', - chooseLabel: 'Избери {{label}}', - collapseAll: 'Свий всички', - customURL: 'Връзка', - editLabelData: 'Редактирай информацията за {{label}}', - editLink: 'Редактирай връзка', - editRelationship: 'Редактирай отношение', - enterURL: 'Въведи връзка', - internalLink: 'Вътрешна връзка', - itemsAndMore: '{{items}} и {{count}} повече', - labelRelationship: '{{label}} връзка', - latitude: 'Географска ширина', - linkType: 'Тип на връзката', - linkedTo: 'Свързано с <0>{{label}}', - longitude: 'Географска дължина', - newLabel: 'Нов {{label}}', - openInNewTab: 'Отвори в нов раздел', - passwordsDoNotMatch: 'Паролите не са еднакви.', - relatedDocument: 'Свързан документ', - relationTo: 'Отношение с', - removeRelationship: 'Премахни отношение', - removeUpload: 'Премахни качване', - saveChanges: 'Запази промените', - searchForBlock: 'Търси блок', - selectExistingLabel: 'Избери съществуващ {{label}}', - selectFieldsToEdit: 'Избери полета за редактиране', - showAll: 'Покажи всички', - swapRelationship: 'Смени отношение', - swapUpload: 'Смени качване', - textToDisplay: 'Текст към дисплей', - toggleBlock: 'Превключи блок', - uploadNewLabel: 'Качи нов {{label}}', - }, - general: { - aboutToDelete: 'На път си да изтриеш {{label}} <1>{{title}}. Сигурен ли си?', - aboutToDeleteCount_many: 'На път си да изтриеш {{count}} {{label}}', - aboutToDeleteCount_one: 'На път си да изтриеш {{count}} {{label}}', - aboutToDeleteCount_other: 'На път си да изтриеш {{count}} {{label}}', - addBelow: 'Добави отдолу', - addFilter: 'Добави филтър', - adminTheme: 'Цветова тема', - and: 'И', - applyChanges: 'Приложи промените', - ascending: 'Възходящ', - automatic: 'Автоматична', - backToDashboard: 'Обратно към таблото', - cancel: 'Отмени', - changesNotSaved: 'Промените ти не са запазени. Ако напуснеш сега, ще ги загубиш.', - close: 'Затвори', - collapse: 'Свий', - collections: 'Колекции', - columnToSort: 'Колона за сортиране', - columns: 'Колони', - confirm: 'Потвърди', - confirmDeletion: 'Потвърди изтриване', - confirmDuplication: 'Потвърди дупликация', - copied: 'Копирано', - copy: 'Копирай', - create: 'Създай', - createNew: 'Създай нов', - createNewLabel: 'Създай нов {{label}}', - created: 'Създаден', - createdAt: 'Създаден на', - creating: 'Създава се', - creatingNewLabel: 'Създаване на нов {{label}}', - dark: 'Тъмна', - dashboard: 'Табло', - delete: 'Изтрий', - deletedCountSuccessfully: 'Изтрити {{count}} {{label}} успешно.', - deletedSuccessfully: 'Изтрито успешно.', - deleting: 'Изтриване...', - descending: 'Низходящо', - deselectAllRows: 'Деселектирай всички редове', - duplicate: 'Дупликирай', - duplicateWithoutSaving: 'Дупликирай без да запазваш промените', - edit: 'Редактирай', - editLabel: 'Редактирай {{label}}', - editing: 'Редактиране', - editingLabel_many: 'Редактиране на {{count}} {{label}}', - editingLabel_one: 'Редактиране на {{count}} {{label}}', - editingLabel_other: 'Редактиране на {{count}} {{label}}', - email: 'Имейл', - emailAddress: 'Имейл адрес', - enterAValue: 'Въведи стойност', - error: 'Грешка', - errors: 'Грешки', - fallbackToDefaultLocale: 'Използвай локализация по подразбиране', - filter: 'Филтрирай', - filterWhere: 'Филтрирай {{label}} където', - filters: 'Филтри', - globals: 'Глобални', - language: 'Език', - lastModified: 'Последно променено', - leaveAnyway: 'Напусни въпреки това', - leaveWithoutSaving: 'Напусни без да запазиш', - light: 'Светла', - livePreview: 'Предварителен преглед', - loading: 'Зарежда се', - locale: 'Локализация', - locales: 'Локализации', - menu: 'Меню', - moveDown: 'Надолу', - moveUp: 'Нагоре', - newPassword: 'Нова парола', - noFiltersSet: 'Няма зададени филтри', - noLabel: '<Няма {{label}}>', - noOptions: 'Няма опции', - noResults: - '{{label}} не е открит. {{label}} не съществува или никой не отговаря на зададените филтри.', - noValue: 'Няма стойност', - none: 'Никакъв', - notFound: 'Няма открит', - nothingFound: 'Нищо не беше открито', - of: 'от', - open: 'Отвори', - or: 'Или', - order: 'Ред', - pageNotFound: 'Страницата не беше открита', - password: 'Парола', - payloadSettings: 'Настройки на Payload', - perPage: 'На страница: {{limit}}', - remove: 'Премахни', - reset: 'Нулиране', - row: 'ред', - rows: 'Редове', - save: 'Запази', - saving: 'Запазване...', - searchBy: 'Търси по {{label}}', - selectAll: 'Избери всички {{count}} {{label}}', - selectAllRows: 'Избери всички редове', - selectValue: 'Избери стойност', - selectedCount: '{{count}} {{label}} избрани', - showAllLabel: 'Покажи всички {{label}}', - sorryNotFound: 'Съжаляваме-няма нищо, което да отговаря на търсенето ти.', - sort: 'Сортирай', - sortByLabelDirection: 'Сортирай по {{label}} {{direction}}', - stayOnThisPage: 'Остани на тази страница', - submissionSuccessful: 'Успешно подаване.', - submit: 'Подай', - successfullyCreated: '{{label}} успешно създаден.', - successfullyDuplicated: '{{label}} успешно дупликиран.', - thisLanguage: 'Български', - titleDeleted: '{{label}} "{{title}}" успешно изтрит.', - unauthorized: 'Неавторизиран', - unsavedChangesDuplicate: 'Имаш незапазени промени. Искаш ли да продължиш да дупликираш?', - untitled: 'Неозаглавен', - updatedAt: 'Обновен на', - updatedCountSuccessfully: 'Обновени {{count}} {{label}} успешно.', - updatedSuccessfully: 'Обновен успешно.', - updating: 'Обновява се', - uploading: 'Качва се', - user: 'Потребител', - users: 'Потребители', - value: 'Стойност', - welcome: 'Добре дошъл', - }, - operators: { - contains: 'съдържа', - equals: 'е равно на', - exists: 'съществува', - isGreaterThan: 'е по-голямо от', - isGreaterThanOrEqualTo: 'е по-голямо от или равно на', - isIn: 'е в', - isLessThan: 'е по-малко от', - isLessThanOrEqualTo: 'е по-малко от или равно на', - isLike: 'е като', - isNotEqualTo: 'не е равно на', - isNotIn: 'не е в', - near: 'близко', - }, - upload: { - crop: 'Изрязване', - cropToolDescription: - 'Плъзни ъглите на избраната област, избери нова област или коригирай стойностите по-долу.', - dragAndDrop: 'Дръпни и пусни файл', - dragAndDropHere: 'или дръпни и пусни файла тук', - editImage: 'Редактирай изображение', - fileName: 'Име на файла', - fileSize: 'Големина на файла', - focalPoint: 'Фокусна точка', - focalPointDescription: - 'Премести фокусната точка директно върху визуализацията или регулирай стойностите по-долу.', - height: 'Височина', - lessInfo: 'По-малко информация', - moreInfo: 'Повече информация', - previewSizes: 'Преглед на размери', - selectCollectionToBrowse: 'Избери колекция, която да разгледаш', - selectFile: 'Избери файл', - setCropArea: 'Задай област за изрязване', - setFocalPoint: 'Задай фокусна точка', - sizes: 'Големини', - sizesFor: 'Размери за {{label}}', - width: 'Ширина', - }, - validation: { - emailAddress: 'Моля, въведи валиден имейл адрес.', - enterNumber: 'Моля, въведи валиден номер.', - fieldHasNo: 'Това поле няма {{label}}', - greaterThanMax: '{{value}} е по-голямо от максимално допустимото {{label}} от {{max}}.', - invalidInput: 'Това поле има невалиден вход.', - invalidSelection: 'Това поле има невалидна селекция.', - invalidSelections: 'Това поле има следните невалидни селекции:', - lessThanMin: '{{value}} е по-малко от минимално допустимото {{label}} от {{min}}.', - limitReached: 'Достигнат е лимитът, могат да бъдат добавени само {{max}} елемента.', - longerThanMin: - 'Тази стойност трябва да е по-голяма от минималната стойност от {{minLength}} символа.', - notValidDate: '"{{value}}" не е валидна дата.', - required: 'Това поле е задължително.', - requiresAtLeast: 'Това поле изисква поне {{count}} {{label}}.', - requiresNoMoreThan: 'Това поле изисква не повече от {{count}} {{label}}.', - requiresTwoNumbers: 'Това поле изисква 2 числа.', - shorterThanMax: - 'Тази стойност трябва да е по-малка от максималната стойност от {{maxLength}} символа.', - trueOrFalse: 'Това поле може да бъде само "true" или "false".', - validUploadID: 'Това поле не е валиден идентификатор на качването.', - }, - version: { - aboutToPublishSelection: 'На път си да публикуваш всички избрани {{label}}. Сигурен ли си?', - aboutToRestore: - 'На път си да възстановиш този {{label}} документ до състоянието му от {{versionDate}}.', - aboutToRestoreGlobal: - 'На път си да възстановиш глобалния докумнт {{label}} до състоянието му от {{versionDate}}.', - aboutToRevertToPublished: - 'На път си да възстановиш промените на този документ до публикуваното му състояние. Сигурен ли си?', - aboutToUnpublish: 'На път си да скриеш този документ. Сигурен ли си?', - aboutToUnpublishSelection: 'На път си да скриеш всички избрани {{label}}. Сигурен ли си?', - autosave: 'Автоматично запазване', - autosavedSuccessfully: 'Успешно автоматично запазване.', - autosavedVersion: 'Автоматично запазена версия', - changed: 'Променен', - compareVersion: 'Сравни версия с:', - confirmPublish: 'Потвърди публикуване', - confirmRevertToSaved: 'Потвърди възстановяване до запазен', - confirmUnpublish: 'Потвърди скриване', - confirmVersionRestoration: 'Потвърди възстановяване на версия', - currentDocumentStatus: 'Сегашен статус на документа: {{docStatus}}', - draft: 'Чернова', - draftSavedSuccessfully: 'Чернова запазена успешно.', - lastSavedAgo: 'последно запазено преди {{distance}}', - noFurtherVersionsFound: 'Не са открити повече версии', - noRowsFound: 'Не е открит {{label}}', - preview: 'Предварителен преглед', - problemRestoringVersion: 'Имаше проблем при възстановяването на тази версия', - publish: 'Публикувай', - publishChanges: 'Публикувай промените', - published: 'Публикувано', - publishing: 'Публикуване', - restoreThisVersion: 'Възстанови тази версия', - restoredSuccessfully: 'Успешно възстановяване.', - restoring: 'Възстановяване...', - revertToPublished: 'Върни се до публикуваното', - reverting: 'Връщане..', - saveDraft: 'Запази чернова', - selectLocales: 'Избери локализации за показване', - selectVersionToCompare: 'Избери версия за сравняване', - showLocales: 'Покажи преводи:', - showingVersionsFor: 'Показване на версии за:', - status: 'Статус', - type: 'Тип', - unpublish: 'Скрий', - unpublishing: 'Скриване...', - version: 'Версия', - versionCount_many: '{{count}} открити версии', - versionCount_none: 'Няма открити версии', - versionCount_one: '{{count}} окрита версия', - versionCount_other: '{{count}} открити версии', - versionCreatedOn: '{{version}} създадена на:', - versionID: 'Идентификатор на версията', - versions: 'Версии', - viewingVersion: 'Гледане на версия за {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: 'Гледане на версия за глобалния документ {{entityLabel}}', - viewingVersions: 'Гледане на версии за {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: 'Гледане на версии за глобалния документ {{entityLabel}}', - }, -} diff --git a/packages/translations/src/all/cs.ts b/packages/translations/src/all/cs.ts deleted file mode 100644 index 81454aa2fc..0000000000 --- a/packages/translations/src/all/cs.ts +++ /dev/null @@ -1,388 +0,0 @@ -export default { - authentication: { - account: 'Účet', - accountOfCurrentUser: 'Účet současného uživatele', - alreadyActivated: 'Již aktivováno', - alreadyLoggedIn: 'Již přihlášen', - apiKey: 'Klíč API', - backToLogin: 'Zpět na přihlášení', - beginCreateFirstUser: 'Začněte vytvořením svého prvního uživatele.', - changePassword: 'Změnit heslo', - checkYourEmailForPasswordReset: - 'Zkontrolujte svůj email a najděte v něm odkaz, který vám umožní bezpečně resetovat vaše heslo.', - confirmGeneration: 'Potvrdit generaci', - confirmPassword: 'Potvrdit heslo', - createFirstUser: 'Vytvořit prvního uživatele', - emailNotValid: 'Zadaný email není platný', - emailSent: 'Email odeslán', - enableAPIKey: 'Povolit klíč API', - failedToUnlock: 'Nepodařilo se odemknout', - forceUnlock: 'Vynutit odemčení', - forgotPassword: 'Zapomněli jste heslo?', - forgotPasswordEmailInstructions: - 'Zadejte svůj email níže. Obdržíte email s instrukcemi, jak resetovat vaše heslo.', - forgotPasswordQuestion: 'Zapomněli jste heslo?', - generate: 'Generovat', - generateNewAPIKey: 'Generovat nový klíč API', - generatingNewAPIKeyWillInvalidate: - 'Vytvoření nového klíče API <1>zneplatní předchozí klíč. Opravdu chcete pokračovat?', - lockUntil: 'Uzamknout do', - logBackIn: 'Znovu se přihlásit', - logOut: 'Odhlásit se', - loggedIn: 'Abyste se mohli přihlásit s jiným uživatelem, nejdříve se <0>odhlaste.', - loggedInChangePassword: 'Pro změnu hesla přejděte do svého <0>účtu a zde si heslo upravte.', - loggedOutInactivity: 'Byli jste odhlášeni z důvodu neaktivity.', - loggedOutSuccessfully: 'Byli jste úspěšně odhlášeni.', - login: 'Přihlásit se', - loginAttempts: 'Pokusy o přihlášení', - loginUser: 'Přihlásit uživatele', - loginWithAnotherUser: - 'Abyste se mohli přihlásit s jiným uživatelem, nejdříve se <0>odhlaste.', - logout: 'Odhlásit se', - logoutUser: 'Odhlásit uživatele', - newAPIKeyGenerated: 'Byl vygenerován nový klíč API.', - newAccountCreated: - 'Pro přístup k {{serverURL}} byl pro vás vytvořen nový účet. Klepněte na následující odkaz nebo zkopírujte URL do svého prohlížeče pro ověření vašeho emailu: {{verificationURL}}
    Po ověření vašeho emailu se budete moci úspěšně přihlásit.', - newPassword: 'Nové heslo', - resetPassword: 'Resetovat heslo', - resetPasswordExpiration: 'Expirace resetování hesla', - resetPasswordToken: 'Token pro resetování hesla', - resetYourPassword: 'Resetujte své heslo', - stayLoggedIn: 'Zůstat přihlášen', - successfullyUnlocked: 'Úspěšně odemčeno', - unableToVerify: 'Nepodařilo se ověřit', - verified: 'Ověřeno', - verifiedSuccessfully: 'Úspěšně ověřeno', - verify: 'Ověřit', - verifyUser: 'Ověřit uživatele', - verifyYourEmail: 'Ověřte svůj email', - youAreInactive: - 'Nějakou dobu jste nebyli aktivní a brzy budete automaticky odhlášeni z bezpečnostních důvodů. Chcete zůstat přihlášen?', - youAreReceivingResetPassword: - 'Tento email obdržíte, protože jste (nebo někdo jiný) požádali o resetování hesla pro váš účet.', - youDidNotRequestPassword: - 'Pokud jste o to nepožádali, ignorujte prosím tento e-mail a vaše heslo zůstane nezměněno.', - }, - error: { - accountAlreadyActivated: 'Tento účet již byl aktivován.', - autosaving: 'Při automatickém ukládání tohoto dokumentu došlo k chybě.', - correctInvalidFields: 'Opravte neplatná pole.', - deletingFile: 'Při mazání souboru došlo k chybě.', - deletingTitle: - 'Při mazání {{title}} došlo k chybě. Zkontrolujte své připojení a zkuste to znovu.', - emailOrPasswordIncorrect: 'Zadaný email nebo heslo není správné.', - followingFieldsInvalid_one: 'Následující pole je neplatné:', - followingFieldsInvalid_other: 'Následující pole jsou neplatná:', - incorrectCollection: 'Nesprávná kolekce', - invalidFileType: 'Neplatný typ souboru', - invalidFileTypeValue: 'Neplatný typ souboru: {{value}}', - loadingDocument: 'Při načítání dokumentu s ID {{id}} došlo k chybě.', - missingEmail: 'Chybějící email.', - missingIDOfDocument: 'Chybějící ID dokumentu pro aktualizaci.', - missingIDOfVersion: 'Chybějící ID verze.', - missingRequiredData: 'Chybějící povinná data.', - noFilesUploaded: 'Nebyly nahrány žádné soubory.', - noMatchedField: 'Pro "{{label}}" nebylo nalezeno žádné odpovídající pole', - noUser: 'Žádný uživatel', - notAllowedToAccessPage: 'Nemáte povolení přistupovat k této stránce.', - notAllowedToPerformAction: 'Nemáte povolení provádět tuto akci.', - notFound: 'Požadovaný zdroj nebyl nalezen.', - previewing: 'Při náhledu tohoto dokumentu došlo k chybě.', - problemUploadingFile: 'Při nahrávání souboru došlo k chybě.', - tokenInvalidOrExpired: 'Token je neplatný nebo vypršel.', - unPublishingDocument: 'Při zrušení publikování tohoto dokumentu došlo k chybě.', - unableToDeleteCount: 'Nelze smazat {{count}} z {{total}} {{label}}', - unableToUpdateCount: 'Nelze aktualizovat {{count}} z {{total}} {{label}}.', - unauthorized: 'Neautorizováno, pro zadání tohoto požadavku musíte být přihlášeni.', - unknown: 'Došlo k neznámé chybě.', - unspecific: 'Došlo k chybě.', - userLocked: 'Tento uživatel je uzamčen kvůli příliš mnoha neúspěšným pokusům o přihlášení.', - valueMustBeUnique: 'Hodnota musí být jedinečná', - verificationTokenInvalid: 'Ověřovací token je neplatný.', - }, - fields: { - addLabel: 'Přidat {{label}}', - addLink: 'Přidat Odkaz', - addNew: 'Přidat nový', - addNewLabel: 'Přidat nový {{label}}', - addRelationship: 'Přidat vztah', - addUpload: 'Přidat nahrávání', - block: 'blok', - blockType: 'Typ bloku', - blocks: 'bloky', - chooseBetweenCustomTextOrDocument: - 'Zvolte mezi vložením vlastního textového URL nebo odkazováním na jiný dokument.', - chooseDocumentToLink: 'Vyberte dokument, na který se chcete odkázat', - chooseFromExisting: 'Vybrat z existujících', - chooseLabel: 'Vybrat {{label}}', - collapseAll: 'Sbalit vše', - customURL: 'Vlastní URL', - editLabelData: 'Upravit data {{label}}', - editLink: 'Upravit odkaz', - editRelationship: 'Upravit vztah', - enterURL: 'Zadejte URL', - internalLink: 'Interní odkaz', - itemsAndMore: '{{items}} a {{count}} dalších', - labelRelationship: 'Vztah {{label}}', - latitude: 'Zeměpisná šířka', - linkType: 'Typ odkazu', - linkedTo: 'Odkaz na <0>{{label}}', - longitude: 'Zeměpisná délka', - newLabel: 'Nový {{label}}', - openInNewTab: 'Otevřít v nové záložce', - passwordsDoNotMatch: 'Hesla se neshodují.', - relatedDocument: 'Související dokument', - relationTo: 'Vztah k', - removeRelationship: 'Odstranit vztah', - removeUpload: 'Odstranit nahrání', - saveChanges: 'Uložit změny', - searchForBlock: 'Hledat blok', - selectExistingLabel: 'Vybrat existující {{label}}', - selectFieldsToEdit: 'Vyberte pole, která chcete upravit', - showAll: 'Zobrazit vše', - swapRelationship: 'Zaměnit vztah', - swapUpload: 'Vyměnit nahrání', - textToDisplay: 'Text k zobrazení', - toggleBlock: 'Přepnout blok', - uploadNewLabel: 'Nahrát nový {{label}}', - }, - general: { - aboutToDelete: 'Chystáte se odstranit {{label}} <1>{{title}}. Jste si jisti?', - aboutToDeleteCount_many: 'Chystáte se smazat {{count}} {{label}}', - aboutToDeleteCount_one: 'Chystáte se smazat {{count}} {{label}}', - aboutToDeleteCount_other: 'Chystáte se smazat {{count}} {{label}}', - addBelow: 'Přidat pod', - addFilter: 'Přidat filtr', - adminTheme: 'Motiv administračního rozhraní', - and: 'A', - applyChanges: 'Použít změny', - ascending: 'Vzestupně', - automatic: 'Automatické', - backToDashboard: 'Zpět na nástěnku', - cancel: 'Zrušit', - changesNotSaved: 'Vaše změny nebyly uloženy. Pokud teď odejdete, ztratíte své změny.', - close: 'Zavřít', - collapse: 'Sbalit', - collections: 'Kolekce', - columnToSort: 'Sloupec k seřazení', - columns: 'Sloupce', - confirm: 'Potvrdit', - confirmDeletion: 'Potvrdit odstranění', - confirmDuplication: 'Potvrdit duplikaci', - copied: 'Zkopírováno', - copy: 'Kopírovat', - create: 'Vytvořit', - createNew: 'Vytvořit nové', - createNewLabel: 'Vytvořit nový {{label}}', - created: 'Vytvořeno', - createdAt: 'Vytvořeno v', - creating: 'Vytváření', - creatingNewLabel: 'Vytváření nového {{label}}', - dark: 'Tmavé', - dashboard: 'Nástěnka', - delete: 'Odstranit', - deletedCountSuccessfully: 'Úspěšně smazáno {{count}} {{label}}.', - deletedSuccessfully: 'Úspěšně odstraněno.', - deleting: 'Odstraňování...', - descending: 'Sestupně', - deselectAllRows: 'Zrušte výběr všech řádků', - duplicate: 'Duplikovat', - duplicateWithoutSaving: 'Duplikovat bez uložení změn', - edit: 'Upravit', - editLabel: 'Upravit {{label}}', - editing: 'Úpravy', - editingLabel_many: 'Úprava {{count}} {{label}}', - editingLabel_one: 'Úprava {{count}} {{label}}', - editingLabel_other: 'Úprava {{count}} {{label}}', - email: 'E-mail', - emailAddress: 'E-mailová adresa', - enterAValue: 'Zadejte hodnotu', - error: 'Chyba', - errors: 'Chyby', - fallbackToDefaultLocale: 'Zpětné přepnutí do výchozího locale', - filter: 'Filtr', - filterWhere: 'Filtrovat {{label}} kde', - filters: 'Filtry', - globals: 'Globální', - language: 'Jazyk', - lastModified: 'Naposledy změněno', - leaveAnyway: 'Přesto odejít', - leaveWithoutSaving: 'Odejít bez uložení', - light: 'Světlé', - livePreview: 'Náhled', - loading: 'Načítání', - locale: 'Místní verze', - locales: 'Lokality', - menu: 'Jídelní lístek', - moveDown: 'Posunout dolů', - moveUp: 'Posunout nahoru', - newPassword: 'Nové heslo', - noFiltersSet: 'Nenastaveny žádné filtry', - noLabel: '<Žádný {{label}}>', - noOptions: 'Žádné možnosti', - noResults: - 'Nebyly nalezeny žádné {{label}}. Buď ještě neexistují žádné {{label}}, nebo žádné nesplňují filtry, které jste zadali výše.', - noValue: 'Žádná hodnota', - none: 'Žádné', - notFound: 'Nenalezeno', - nothingFound: 'Nic nenalezeno', - of: 'z', - open: 'Otevřít', - or: 'Nebo', - order: 'Pořadí', - pageNotFound: 'Stránka nenalezena', - password: 'Heslo', - payloadSettings: 'Nastavení datového záběru', - perPage: 'Na stránku: {{limit}}', - remove: 'Odstranit', - reset: 'Resetovat', - row: 'Řádek', - rows: 'Řádky', - save: 'Uložit', - saving: 'Ukládání...', - searchBy: 'Vyhledat podle {{label}}', - selectAll: 'Vybrat vše {{count}} {{label}}', - selectAllRows: 'Vyberte všechny řádky', - selectValue: 'Vyberte hodnotu', - selectedCount: 'Vybráno {{count}} {{label}}', - showAllLabel: 'Zobrazit všechny {{label}}', - sorryNotFound: 'Je nám líto, ale neexistuje nic, co by odpovídalo vašemu požadavku.', - sort: 'Třídit', - sortByLabelDirection: 'Seřadit podle {{label}} {{direction}}', - stayOnThisPage: 'Zůstat na této stránce', - submissionSuccessful: 'Odeslání úspěšné.', - submit: 'Odeslat', - successfullyCreated: '{{label}} úspěšně vytvořeno.', - successfullyDuplicated: '{{label}} úspěšně duplikováno.', - thisLanguage: 'Čeština', - titleDeleted: '{{label}} "{{title}}" úspěšně smazáno.', - unauthorized: 'Neoprávněný', - unsavedChangesDuplicate: 'Máte neuložené změny. Chtěli byste pokračovat v duplikování?', - untitled: 'Bez názvu', - updatedAt: 'Aktualizováno v', - updatedCountSuccessfully: 'Úspěšně aktualizováno {{count}} {{label}}.', - updatedSuccessfully: 'Úspěšně aktualizováno.', - updating: 'Aktualizace', - uploading: 'Nahrávání', - user: 'Uživatel', - users: 'Uživatelé', - value: 'Hodnota', - welcome: 'Vítejte', - }, - operators: { - contains: 'obsahuje', - equals: 'rovná se', - exists: 'existuje', - isGreaterThan: 'je větší než', - isGreaterThanOrEqualTo: 'je větší nebo rovno', - isIn: 'je v', - isLessThan: 'je menší než', - isLessThanOrEqualTo: 'je menší nebo rovno', - isLike: 'je jako', - isNotEqualTo: 'není rovno', - isNotIn: 'není in', - near: 'blízko', - }, - upload: { - crop: 'Plodina', - cropToolDescription: - 'Přetáhněte rohy vybrané oblasti, nakreslete novou oblast nebo upravte hodnoty níže.', - dragAndDrop: 'Přetáhněte soubor', - dragAndDropHere: 'nebo sem přetáhněte soubor', - editImage: 'Upravit obrázek', - fileName: 'Název souboru', - fileSize: 'Velikost souboru', - focalPoint: 'Středobod', - focalPointDescription: 'Přetáhněte bod zaměření přímo na náhled nebo upravte hodnoty níže.', - height: 'Výška', - lessInfo: 'Méně informací', - moreInfo: 'Více informací', - previewSizes: 'Náhled velikostí', - selectCollectionToBrowse: 'Vyberte kolekci pro procházení', - selectFile: 'Vyberte soubor', - setCropArea: 'Nastavit oblast ořezu', - setFocalPoint: 'Nastavit ohnisko', - sizes: 'Velikosti', - sizesFor: 'Velikosti pro {{label}}', - width: 'Šířka', - }, - validation: { - emailAddress: 'Zadejte prosím platnou e-mailovou adresu.', - enterNumber: 'Zadejte prosím platné číslo.', - fieldHasNo: 'Toto pole nemá {{label}}', - greaterThanMax: '{{value}} je vyšší než maximálně povolená {{label}} {{max}}.', - invalidInput: 'Toto pole má neplatný vstup.', - invalidSelection: 'Toto pole má neplatný výběr.', - invalidSelections: 'Toto pole má následující neplatné výběry:', - lessThanMin: '{{value}} je nižší než minimálně povolená {{label}} {{min}}.', - limitReached: 'Dosáhnutý limit, mohou být přidány pouze {{max}} položky.', - longerThanMin: 'Tato hodnota musí být delší než minimální délka {{minLength}} znaků.', - notValidDate: '"{{value}}" není platné datum.', - required: 'Toto pole je povinné.', - requiresAtLeast: 'Toto pole vyžaduje alespoň {{count}} {{label}}.', - requiresNoMoreThan: 'Toto pole vyžaduje ne více než {{count}} {{label}}.', - requiresTwoNumbers: 'Toto pole vyžaduje dvě čísla.', - shorterThanMax: 'Tato hodnota musí být kratší než maximální délka {{maxLength}} znaků.', - trueOrFalse: 'Toto pole může být rovno pouze true nebo false.', - validUploadID: 'Toto pole není platné ID pro odeslání.', - }, - version: { - aboutToPublishSelection: 'Chystáte se publikovat všechny {{label}} ve výběru. Jsi si jistá?', - aboutToRestore: - 'Chystáte se obnovit tento {{label}} dokument do stavu, v jakém byl {{versionDate}}.', - aboutToRestoreGlobal: - 'Chystáte se obnovit globální {{label}} do stavu, v jakém byl {{versionDate}}.', - aboutToRevertToPublished: - 'Chystáte se vrátit změny tohoto dokumentu do jeho publikovaného stavu. Jste si jisti?', - aboutToUnpublish: 'Chystáte se zrušit publikování tohoto dokumentu. Jste si jisti?', - aboutToUnpublishSelection: - 'Chystáte se zrušit publikování všech {{label}} ve výběru. Jsi si jistá?', - autosave: 'Automatické uložení', - autosavedSuccessfully: 'Úspěšně uloženo automaticky.', - autosavedVersion: 'Verze automatického uložení', - changed: 'Změněno', - compareVersion: 'Porovnat verzi s:', - confirmPublish: 'Potvrďte publikování', - confirmRevertToSaved: 'Potvrdit vrácení k uloženému', - confirmUnpublish: 'Potvrdit zrušení publikování', - confirmVersionRestoration: 'Potvrdit obnovení verze', - currentDocumentStatus: 'Současný {{docStatus}} dokument', - draft: 'Koncept', - draftSavedSuccessfully: 'Koncept úspěšně uložen.', - lastSavedAgo: 'Naposledy uloženo před {{distance}}', - noFurtherVersionsFound: 'Nenalezeny další verze', - noRowsFound: 'Nenalezen {{label}}', - preview: 'Náhled', - problemRestoringVersion: 'Při obnovování této verze došlo k problému', - publish: 'Publikovat', - publishChanges: 'Publikovat změny', - published: 'Publikováno', - publishing: 'Publikování', - restoreThisVersion: 'Obnovit tuto verzi', - restoredSuccessfully: 'Úspěšně obnoveno.', - restoring: 'Obnovování...', - revertToPublished: 'Vrátit se k publikovanému', - reverting: 'Vracení...', - saveDraft: 'Uložit koncept', - selectLocales: 'Vyberte místní verze pro zobrazení', - selectVersionToCompare: 'Vyberte verzi pro porovnání', - showLocales: 'Zobrazit místní verze:', - showingVersionsFor: 'Zobrazují se verze pro:', - status: 'Stav', - type: 'Typ', - unpublish: 'Zrušit publikování', - unpublishing: 'Zrušuji publikování...', - version: 'Verze', - versionCount_many: '{{count}} verzí nalezeno', - versionCount_none: 'Žádné verze nenalezeny', - versionCount_one: '{{count}} verze nalezena', - versionCount_other: '{{count}} verzí nalezeno', - versionCreatedOn: '{{version}} vytvořena:', - versionID: 'ID verze', - versions: 'Verze', - viewingVersion: 'Zobrazuji verzi pro {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: 'Zobrazuji verzi pro globální {{entityLabel}}', - viewingVersions: 'Zobrazuji verze pro {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: 'Zobrazuji verze pro globální {{entityLabel}}', - }, -} diff --git a/packages/translations/src/all/de.ts b/packages/translations/src/all/de.ts deleted file mode 100644 index 3493dd7b36..0000000000 --- a/packages/translations/src/all/de.ts +++ /dev/null @@ -1,394 +0,0 @@ -export default { - authentication: { - account: 'Konto', - accountOfCurrentUser: 'Aktuelles Benutzerkonto', - alreadyActivated: 'Bereits aktiviert', - alreadyLoggedIn: 'Bereits angemeldet', - apiKey: 'API-Key', - backToLogin: 'Zurück zur Anmeldung', - beginCreateFirstUser: 'Erstelle deinen ersten Benutzer um zu beginnen', - changePassword: 'Passwort ändern', - checkYourEmailForPasswordReset: - 'Du solltest eine E-Mail mit einem Link zum sicheren Zurücksetzen deines Passworts erhalten haben.', - confirmGeneration: 'Generierung bestätigen', - confirmPassword: 'Passwort bestätigen', - createFirstUser: 'Ersten Benutzer erstellen', - emailNotValid: 'Die angegebene E-Mail-Adresse ist ungültig', - emailSent: 'E-Mail verschickt', - enableAPIKey: 'API-Key aktivieren', - failedToUnlock: 'Konnte nicht entsperren', - forceUnlock: 'Entsperrung erzwingen', - forgotPassword: 'Passwort vergessen', - forgotPasswordEmailInstructions: - 'Bitte gib deine E-Mail-Adresse an. Du wirst eine E-Mail mit Instruktionen zum Zurücksetzen deines Passworts erhalten.', - forgotPasswordQuestion: 'Passwort vergessen?', - generate: 'Generieren', - generateNewAPIKey: 'Neuen API-Key generieren', - generatingNewAPIKeyWillInvalidate: - 'Die Generierung eines neuen API-Keys wird den vorherigen Key <1>ungültig machen. Bist du sicher, dass du fortfahren möchtest?', - lockUntil: 'Sperre bis', - logBackIn: 'Wieder anmelden', - logOut: 'Abmelden', - loggedIn: - 'Um dich mit einem anderen Benutzer anzumelden, musst du dich zuerst <0>abmelden.', - loggedInChangePassword: - 'Um dein Passwort zu ändern, gehe in dein <0>Konto und ändere dort dein Passwort.', - loggedOutInactivity: 'Du wurdest aufgrund von Inaktivität abgemeldet.', - loggedOutSuccessfully: 'Du wurdest erfolgreich abgemeldet.', - login: 'Anmelden', - loginAttempts: 'Anmelde-Versuche', - loginUser: 'Benutzeranmeldung', - loginWithAnotherUser: - 'Um dich mit einem anderen Benutzer anzumelden, musst du dich zuerst <0>abmelden.', - logout: 'Abmelden', - logoutUser: 'Benutzerabmeldung', - newAPIKeyGenerated: 'Neuer API-Key wurde generiert', - newAccountCreated: - 'Ein neues Konto wurde gerade für dich auf {{serverURL}} erstellt. Bitte klicke auf den folgenden Link oder kopiere die URL in deinen Browser um deine E-Mail-Adresse zu verifizieren: {{verificationURL}}
    Nachdem du deine E-Mail-Adresse verifiziert hast, kannst du dich erfolgreich anmelden.', - newPassword: 'Neues Passwort', - resetPassword: 'Passwort zurücksetzen', - resetPasswordExpiration: 'Passwort-Ablauf zurücksetzen', - resetPasswordToken: 'Passwort-Token zurücksetzen', - resetYourPassword: 'Dein Passwort zurücksetzen', - stayLoggedIn: 'Angemeldet bleiben', - successfullyUnlocked: 'Erfolgreich entsperrt', - unableToVerify: 'Konnte nicht verifiziert werden', - verified: 'Verifiziert', - verifiedSuccessfully: 'Erfolgreich verifiziert', - verify: 'Verifizieren', - verifyUser: 'Benutzer verifizieren', - verifyYourEmail: 'Deine E-Mail-Adresse verifizieren', - youAreInactive: - 'Du warst seit einiger Zeit inaktiv und wirst in kurzer Zeit zu deiner eigenen Sicherheit abgemeldet. Möchtest du angemeldet bleiben?', - youAreReceivingResetPassword: - 'Du erhältst diese Nachricht, weil du (oder jemand anderes) das Zurücksetzen deines Passworts für dein Benutzerkonto angefordert hat. Bitte klicke auf den folgenden Link, oder kopiere die URL in deinen Browser den Prozess abzuschließen:', - youDidNotRequestPassword: - 'Solltest du dies nicht angefordert haben, ignoriere diese E-Mail und dein Passwort bleibt unverändert.', - }, - error: { - accountAlreadyActivated: 'Dieses Konto wurde bereits aktiviert', - autosaving: 'Es gab ein Problem während der automatischen Speicherung für dieses Dokument', - correctInvalidFields: 'Bitte ungültige Felder korrigieren.', - deletingFile: 'Beim Löschen der Datei ist ein Fehler aufgetreten.', - deletingTitle: - 'Es gab ein Problem während der Löschung von {{title}}. Bitte überprüfe deine Verbindung und versuche es erneut.', - emailOrPasswordIncorrect: 'Die E-Mail-Adresse oder das Passwort sind nicht korrekt.', - followingFieldsInvalid_one: 'Das folgende Feld ist nicht korrekt:', - followingFieldsInvalid_other: 'Die folgenden Felder sind nicht korrekt:', - incorrectCollection: 'Falsche Sammlung', - invalidFileType: 'Ungültiger Datei-Typ', - invalidFileTypeValue: 'Ungültiger Datei-Typ: {{value}}', - loadingDocument: 'Es gab ein Problem, das Dokument mit der ID {{id}} zu laden.', - missingEmail: 'E-Mail-Adresse fehlt.', - missingIDOfDocument: 'ID des zu speichernden Dokuments fehlt.', - missingIDOfVersion: 'ID der Version fehlt.', - missingRequiredData: 'Erforderliche Daten fehlen.', - noFilesUploaded: 'Es wurden keine Dateien hochgeladen.', - noMatchedField: 'Kein übereinstimmendes Feld für "{{label}}" gefunden', - noUser: 'Kein Benutzer', - notAllowedToAccessPage: 'Du hast keine Berechtigung, auf diese Seite zuzugreifen.', - notAllowedToPerformAction: 'Du hast keine Berechtigung, diese Aktion auszuführen.', - notFound: 'Die angeforderte Ressource wurde nicht gefunden.', - previewing: 'Es gab ein Problem beim Vorschauen dieses Dokuments.', - problemUploadingFile: 'Es gab ein Problem während des Hochladens der Datei.', - tokenInvalidOrExpired: 'Token ist entweder ungültig oder abgelaufen.', - unPublishingDocument: 'Es gab ein Problem, dieses Dokument auf Entwurf zu setzen.', - unableToDeleteCount: '{{count}} von {{total}} {{label}} konnte nicht gelöscht werden.', - unableToUpdateCount: '{{count}} von {{total}} {{label}} konnte nicht aktualisiert werden.', - unauthorized: 'Nicht autorisiert - du musst angemeldet sein, um diese Anfrage zu stellen.', - unknown: 'Ein unbekannter Fehler ist aufgetreten.', - unspecific: 'Ein Fehler ist aufgetreten.', - userLocked: - 'Dieser Benutzer ist auf Grund zu vieler unerfolgreicher Anmelde-Versuche gesperrt.', - valueMustBeUnique: 'Wert muss einzigartig sein', - verificationTokenInvalid: 'Verifizierungs-Token ist nicht korrekt.', - }, - fields: { - addLabel: '{{label}} hinzufügen', - addLink: 'Link Hinzufügen', - addNew: 'Neu erstellen', - addNewLabel: '{{label}} erstellen', - addRelationship: 'Verknüpfung Hinzufügen', - addUpload: 'Hochladen Hinzufügen', - block: 'Block', - blockType: 'Block-Typ', - blocks: 'Blöcke', - chooseBetweenCustomTextOrDocument: - 'Wähle zwischen einer eigenen Text-URL oder verlinke zu einem anderen Dokument.', - chooseDocumentToLink: 'Wähle ein Dokument zum Verlinken', - chooseFromExisting: 'Aus vorhandenen auswählen', - chooseLabel: '{{label}} auswählen', - collapseAll: 'Alle einklappen', - customURL: 'Eigene URL', - editLabelData: '{{label}} bearbeiten', - editLink: 'Bearbeite Link', - editRelationship: 'Beziehung Hinzufügen', - enterURL: 'URL eingeben', - internalLink: 'Interner Link', - itemsAndMore: '{{items}} und {{count}} mehr', - labelRelationship: '{{label}} Verknüpfung', - latitude: 'Breitengrad', - linkType: 'Linktyp', - linkedTo: 'Verweist auf <0>{{label}}', - longitude: 'Längengrad', - newLabel: '{{label}} erstellen', - openInNewTab: 'Öffne im neuen Tab', - passwordsDoNotMatch: 'Passwörter stimmen nicht überein.', - relatedDocument: 'Verknüpftes Dokument', - relationTo: 'Verknüpfung zu', - removeRelationship: 'Beziehung Entfernen', - removeUpload: 'Hochgeladene Datei Löschen', - saveChanges: 'Änderungen speichern', - searchForBlock: 'Nach Block suchen', - selectExistingLabel: '{{label}} auswählen (vorhandene)', - selectFieldsToEdit: 'Wählen Sie die zu bearbeitenden Felder aus', - showAll: 'Alle anzeigen', - swapRelationship: 'Beziehung Tauschen', - swapUpload: 'Datei Austauschen', - textToDisplay: 'Angezeigter Text', - toggleBlock: 'Block umschalten', - uploadNewLabel: '{{label}} neu hochladen', - }, - general: { - aboutToDelete: 'Du bist dabei {{label}} <1>{{title}} zu löschen. Bist du dir sicher?', - aboutToDeleteCount_many: 'Sie sind dabei, {{count}} {{label}} zu löschen', - aboutToDeleteCount_one: 'Sie sind dabei, {{count}} {{label}} zu löschen', - aboutToDeleteCount_other: 'Sie sind dabei, {{count}} {{label}} zu löschen', - addBelow: 'Darunter hinzufügen', - addFilter: 'Filter hinzufügen', - adminTheme: 'Admin-Farbthema', - and: 'Und', - applyChanges: 'Änderungen anwenden', - ascending: 'Aufsteigend', - automatic: 'Automatisch', - backToDashboard: 'Zurück zur Übersicht', - cancel: 'Abbrechen', - changesNotSaved: - 'Deine Änderungen wurden nicht gespeichert. Wenn du diese Seite verlässt, gehen deine Änderungen verloren.', - close: 'Schließen', - collapse: 'Einklappen', - collections: 'Sammlungen', - columnToSort: 'Spalten zum Sortieren', - columns: 'Spalten', - confirm: 'Bestätigen', - confirmDeletion: 'Löschen bestätigen', - confirmDuplication: 'Duplizieren bestätigen', - copied: 'Kopiert', - copy: 'Kopieren', - create: 'Erstellen', - createNew: 'Neu Erstellen', - createNewLabel: '{{label}} neu erstellen', - created: 'Erstellt', - createdAt: 'Erstellt am', - creating: 'Erstelle', - creatingNewLabel: 'Erstelle {{label}}', - dark: 'Dunkel', - dashboard: 'Übersicht', - delete: 'Löschen', - deletedCountSuccessfully: '{{count}} {{label}} erfolgreich gelöscht.', - deletedSuccessfully: 'Erfolgreich gelöscht.', - deleting: 'Lösche...', - descending: 'Absteigend', - deselectAllRows: 'Alle Zeilen abwählen', - duplicate: 'Duplizieren', - duplicateWithoutSaving: 'Dupliziere ohne Änderungen zu speichern', - edit: 'Bearbeiten', - editLabel: '{{label}} bearbeiten', - editing: 'Bearbeite', - editingLabel_many: 'Bearbeiten von {{count}} {{label}}', - editingLabel_one: 'Bearbeiten von {{count}} {{label}}', - editingLabel_other: 'Bearbeiten von {{count}} {{label}}', - email: 'E-Mail', - emailAddress: 'E-Mail-Adresse', - enterAValue: 'Gib einen Wert ein', - error: 'Fehler', - errors: 'Fehler', - fallbackToDefaultLocale: 'Rückgriff auf das Standardgebietsschema', - filter: 'Filter', - filterWhere: 'Filter {{label}} wo', - filters: 'Filter', - globals: 'Globale Dokumente', - language: 'Sprache', - lastModified: 'Zuletzt geändert', - leaveAnyway: 'Trotzdem verlassen', - leaveWithoutSaving: 'Ohne speichern verlassen', - light: 'Hell', - livePreview: 'Vorschau', - loading: 'Lädt', - locale: 'Sprachumgebung', - locales: 'Sprachumgebungen', - menu: 'Menü', - moveDown: 'Nach unten bewegen', - moveUp: 'Nach oben bewegen', - newPassword: 'Neues Passwort', - noFiltersSet: 'Keine Filter gesetzt', - noLabel: '', - noOptions: 'Keine Optionen', - noResults: - 'Keine {{label}} gefunden. Entweder es existieren keine {{label}} oder es gibt keine Übereinstimmung zu den von dir verwendeten Filtern.', - noValue: 'Kein Wert', - none: 'Kein', - notFound: 'Nicht gefunden', - nothingFound: 'Keine Ergebnisse', - of: 'von', - open: 'Öffnen', - or: 'oder', - order: 'Reihenfolge', - pageNotFound: 'Seite nicht gefunden', - password: 'Passwort', - payloadSettings: 'Payload Einstellungen', - perPage: 'Pro Seite: {{limit}}', - remove: 'Entfernen', - reset: 'Zurücksetzen', - row: 'Zeile', - rows: 'Zeilen', - save: 'Speichern', - saving: 'Speichert...', - searchBy: 'Suche nach {{label}}', - selectAll: 'Alle auswählen {{count}} {{label}}', - selectAllRows: 'Wählen Sie alle Zeilen aus', - selectValue: 'Wert auswählen', - selectedCount: '{{count}} {{label}} ausgewählt', - showAllLabel: 'Zeige alle {{label}}', - sorryNotFound: 'Entschuldige, es entspricht nichts deiner Anfrage', - sort: 'Sortieren', - sortByLabelDirection: 'Sortieren nach {{label}} {{direction}}', - stayOnThisPage: 'Auf dieser Seite bleiben', - submissionSuccessful: 'Einrichung erfolgreich.', - submit: 'Senden', - successfullyCreated: '{{label}} erfolgreich erstellt.', - successfullyDuplicated: '{{label}} wurde erfolgreich dupliziert.', - thisLanguage: 'Deutsch', - titleDeleted: '{{label}} {{title}} wurde erfolgreich gelöscht.', - unauthorized: 'Nicht autorisiert', - unsavedChangesDuplicate: - 'Du hast ungespeicherte Änderungen, möchtest du mit dem Duplizieren fortfahren?', - untitled: 'ohne Titel', - updatedAt: 'Aktualisiert am', - updatedCountSuccessfully: '{{count}} {{label}} erfolgreich aktualisiert.', - updatedSuccessfully: 'Erfolgreich aktualisiert.', - updating: 'Aktualisierung', - uploading: 'Hochladen', - user: 'Benutzer', - users: 'Benutzer', - value: 'Wert', - welcome: 'Willkommen', - }, - operators: { - contains: 'enthält', - equals: 'gleich', - exists: 'existiert', - isGreaterThan: 'ist größer als', - isGreaterThanOrEqualTo: 'ist größer oder gleich', - isIn: 'ist drin', - isLessThan: 'ist kleiner als', - isLessThanOrEqualTo: 'ist kleiner oder gleich', - isLike: 'ist wie', - isNotEqualTo: 'ist nicht gleich', - isNotIn: 'ist nicht drin', - near: 'in der Nähe', - }, - upload: { - crop: 'Zuschneiden', - cropToolDescription: - 'Ziehen Sie die Ecken des ausgewählten Bereichs, zeichnen Sie einen neuen Bereich oder passen Sie die Werte unten an.', - dragAndDrop: 'Ziehen Sie eine Datei per Drag-and-Drop', - dragAndDropHere: 'oder ziehe eine Datei hier', - editImage: 'Bild bearbeiten', - fileName: 'Dateiname', - fileSize: 'Dateigröße', - focalPoint: 'Brennpunkt', - focalPointDescription: - 'Ziehen Sie den Fokuspunkt direkt auf die Vorschau oder passen Sie die Werte unten an.', - height: 'Höhe', - lessInfo: 'Weniger Info', - moreInfo: 'Mehr Info', - previewSizes: 'Vorschaugrößen', - selectCollectionToBrowse: 'Wähle eine Sammlung zum Durchsuchen aus', - selectFile: 'Datei auswählen', - setCropArea: 'Bereich zum Zuschneiden festlegen', - setFocalPoint: 'Fokuspunkt setzen', - sizes: 'Größen', - sizesFor: 'Größen für {{label}}', - width: 'Breite', - }, - validation: { - emailAddress: 'Bitte gib eine korrekte E-Mail-Adresse an.', - enterNumber: 'Bitte gib eine gültige Nummer an,', - fieldHasNo: 'Dieses Feld hat kein {{label}}', - greaterThanMax: '{{value}} ist größer als der maximal erlaubte {{label}} von {{max}}.', - invalidInput: 'Dieses Feld hat einen inkorrekten Wert.', - invalidSelection: 'Dieses Feld hat eine inkorrekte Auswahl.', - invalidSelections: "'Dieses Feld enthält die folgenden inkorrekten Auswahlen:'", - lessThanMin: '{{value}} ist kleiner als der minimal erlaubte {{label}} von {{min}}.', - limitReached: 'Limit erreicht, es können nur {{max}} Elemente hinzugefügt werden.', - longerThanMin: 'Dieser Wert muss länger als die minimale Länge von {{minLength}} Zeichen sein.', - notValidDate: '"{{value}}" ist kein gültiges Datum.', - required: 'Pflichtfeld', - requiresAtLeast: 'Dieses Feld muss mindestens {{count}} {{label}} enthalten.', - requiresNoMoreThan: 'Dieses Feld kann nicht mehr als {{count}} {{label}} enthalten.', - requiresTwoNumbers: 'Dieses Feld muss zwei Nummern enthalten.', - shorterThanMax: 'Dieser Wert muss kürzer als die maximale Länge von {{maxLength}} sein.', - trueOrFalse: 'Dieses Feld kann nur wahr oder falsch sein.', - validUploadID: "'Dieses Feld enthält keine valide Upload-ID.'", - }, - version: { - aboutToPublishSelection: - 'Sie sind dabei, alle {{label}} in der Auswahl zu veröffentlichen. Bist du dir sicher?', - aboutToRestore: 'Du bist dabei, {{label}} auf den Stand vom {{versionDate}} zurücksetzen.', - aboutToRestoreGlobal: - 'Du bist dabei, das Globale Dokument {{label}} auf den Stand vom {{versionDate}} zurückzusetzen.', - aboutToRevertToPublished: - 'Du bist dabei, dieses Dokument auf den Stand des ersten Veröffentlichungsdatums zurückzusetzen - Bist du sicher?', - aboutToUnpublish: 'Du bist dabei dieses Dokument auf Entwurf zu setzen - bist du dir sicher?', - aboutToUnpublishSelection: - 'Sie sind dabei, die Veröffentlichung aller {{label}} in der Auswahl aufzuheben. Bist du dir sicher?', - autosave: 'Automatische Speicherung', - autosavedSuccessfully: 'Erfolgreich automatisch gespeichert.', - autosavedVersion: 'Automatisch gespeicherte Version', - changed: 'Geändert', - compareVersion: 'Vergleiche Version zu:', - confirmPublish: 'Veröffentlichung bestätigen', - confirmRevertToSaved: 'Zurücksetzen auf die letzte Speicherung bestätigen', - confirmUnpublish: 'Setzen auf Entwurf bestätigen', - confirmVersionRestoration: ' Wiederherstellung der Version bestätigen', - currentDocumentStatus: 'Aktueller Dokumentenstatus: {{docStatus}}', - draft: 'Entwurf', - draftSavedSuccessfully: 'Entwurf erfolgreich gespeichert.', - lastSavedAgo: 'Zuletzt vor {{distance}} gespeichert', - noFurtherVersionsFound: 'Keine weiteren Versionen vorhanden', - noRowsFound: 'Kein {{label}} gefunden', - preview: 'Vorschau', - problemRestoringVersion: 'Es gab ein Problem bei der Wiederherstellung dieser Version', - publish: 'Veröffentlichen', - publishChanges: 'Änderungen veröffentlichen', - published: 'Veröffentlicht', - publishing: 'Veröffentlichung', - restoreThisVersion: 'Diese Version wiederherstellen', - restoredSuccessfully: 'Erfolgreich wiederhergestellt.', - restoring: 'wiederherstellen...', - revertToPublished: 'Auf Veröffentlicht zurücksetzen', - reverting: 'zurücksetzen...', - saveDraft: 'Entwurf speichern', - selectLocales: 'Wähle anzuzeigende Sprachumgebungen', - selectVersionToCompare: 'Wähle Version zum Vergleich', - showLocales: 'Sprachumgebungen anzeigen:', - showingVersionsFor: 'Versionen anzeigen für:', - status: 'Status', - type: 'Typ', - unpublish: 'Auf Entwurf setzen', - unpublishing: 'Setze auf Entwurf...', - version: 'Version', - versionCount_many: '{{count}} Versionen gefunden', - versionCount_none: 'Keine Versionen gefunden', - versionCount_one: '{{count}} Version gefunden', - versionCount_other: '{{count}} Versionen gefunden', - versionCreatedOn: '{{version}} erstellt am:', - versionID: 'Version ID', - versions: 'Versionen', - viewingVersion: 'Betrachte Version für {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: '`Betrachte Version für das Globale Dokument {{entityLabel}}', - viewingVersions: 'Betrachte Versionen für {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: '`Betrachte Versionen für das Globale Dokument {{entityLabel}}', - }, -} diff --git a/packages/translations/src/all/en.ts b/packages/translations/src/all/en.ts deleted file mode 100644 index d2d674038b..0000000000 --- a/packages/translations/src/all/en.ts +++ /dev/null @@ -1,391 +0,0 @@ -export default { - authentication: { - account: 'Account', - accountOfCurrentUser: 'Account of current user', - alreadyActivated: 'Already Activated', - alreadyLoggedIn: 'Already logged in', - apiKey: 'API Key', - backToLogin: 'Back to login', - beginCreateFirstUser: 'To begin, create your first user.', - changePassword: 'Change Password', - checkYourEmailForPasswordReset: - 'Check your email for a link that will allow you to securely reset your password.', - confirmGeneration: 'Confirm Generation', - confirmPassword: 'Confirm Password', - createFirstUser: 'Create first user', - emailNotValid: 'The email provided is not valid', - emailSent: 'Email Sent', - enableAPIKey: 'Enable API Key', - failedToUnlock: 'Failed to unlock', - forceUnlock: 'Force Unlock', - forgotPassword: 'Forgot Password', - forgotPasswordEmailInstructions: - 'Please enter your email below. You will receive an email message with instructions on how to reset your password.', - forgotPasswordQuestion: 'Forgot password?', - generate: 'Generate', - generateNewAPIKey: 'Generate new API key', - generatingNewAPIKeyWillInvalidate: - 'Generating a new API key will <1>invalidate the previous key. Are you sure you wish to continue?', - lockUntil: 'Lock Until', - logBackIn: 'Log back in', - logOut: 'Log out', - loggedIn: 'To log in with another user, you should <0>log out first.', - loggedInChangePassword: - 'To change your password, go to your <0>account and edit your password there.', - loggedOutInactivity: 'You have been logged out due to inactivity.', - loggedOutSuccessfully: 'You have been logged out successfully.', - login: 'Login', - loginAttempts: 'Login Attempts', - loginUser: 'Login user', - loginWithAnotherUser: 'To log in with another user, you should <0>log out first.', - logout: 'Logout', - logoutUser: 'Logout user', - newAPIKeyGenerated: 'New API Key Generated.', - newAccountCreated: - 'A new account has just been created for you to access {{serverURL}} Please click on the following link or paste the URL below into your browser to verify your email: {{verificationURL}}
    After verifying your email, you will be able to log in successfully.', - newPassword: 'New Password', - resetPassword: 'Reset Password', - resetPasswordExpiration: 'Reset Password Expiration', - resetPasswordToken: 'Reset Password Token', - resetYourPassword: 'Reset Your Password', - stayLoggedIn: 'Stay logged in', - successfullyUnlocked: 'Successfully unlocked', - unableToVerify: 'Unable to Verify', - verified: 'Verified', - verifiedSuccessfully: 'Verified Successfully', - verify: 'Verify', - verifyUser: 'Verify User', - verifyYourEmail: 'Verify your email', - youAreInactive: - "You haven't been active in a little while and will shortly be automatically logged out for your own security. Would you like to stay logged in?", - youAreReceivingResetPassword: - 'You are receiving this because you (or someone else) have requested the reset of the password for your account. Please click on the following link, or paste this into your browser to complete the process:', - youDidNotRequestPassword: - 'If you did not request this, please ignore this email and your password will remain unchanged.', - }, - error: { - accountAlreadyActivated: 'This account has already been activated.', - autosaving: 'There was a problem while autosaving this document.', - correctInvalidFields: 'Please correct invalid fields.', - deletingFile: 'There was an error deleting file.', - deletingTitle: - 'There was an error while deleting {{title}}. Please check your connection and try again.', - emailOrPasswordIncorrect: 'The email or password provided is incorrect.', - followingFieldsInvalid_one: 'The following field is invalid:', - followingFieldsInvalid_other: 'The following fields are invalid:', - incorrectCollection: 'Incorrect Collection', - invalidFileType: 'Invalid file type', - invalidFileTypeValue: 'Invalid file type: {{value}}', - loadingDocument: 'There was a problem loading the document with ID of {{id}}.', - missingEmail: 'Missing email.', - missingIDOfDocument: 'Missing ID of document to update.', - missingIDOfVersion: 'Missing ID of version.', - missingRequiredData: 'Missing required data.', - noFilesUploaded: 'No files were uploaded.', - noMatchedField: 'No matched field found for "{{label}}"', - noUser: 'No User', - notAllowedToAccessPage: 'You are not allowed to access this page.', - notAllowedToPerformAction: 'You are not allowed to perform this action.', - notFound: 'The requested resource was not found.', - previewing: 'There was a problem previewing this document.', - problemUploadingFile: 'There was a problem while uploading the file.', - tokenInvalidOrExpired: 'Token is either invalid or has expired.', - unPublishingDocument: 'There was a problem while un-publishing this document.', - unableToDeleteCount: 'Unable to delete {{count}} out of {{total}} {{label}}.', - unableToUpdateCount: 'Unable to update {{count}} out of {{total}} {{label}}.', - unauthorized: 'Unauthorized, you must be logged in to make this request.', - unknown: 'An unknown error has occurred.', - unspecific: 'An error has occurred.', - userLocked: 'This user is locked due to having too many failed login attempts.', - valueMustBeUnique: 'Value must be unique', - verificationTokenInvalid: 'Verification token is invalid.', - }, - fields: { - addLabel: 'Add {{label}}', - addLink: 'Add Link', - addNew: 'Add new', - addNewLabel: 'Add new {{label}}', - addRelationship: 'Add Relationship', - addUpload: 'Add Upload', - block: 'block', - blockType: 'Block Type', - blocks: 'blocks', - chooseBetweenCustomTextOrDocument: - 'Choose between entering a custom text URL or linking to another document.', - chooseDocumentToLink: 'Choose a document to link to', - chooseFromExisting: 'Choose from existing', - chooseLabel: 'Choose {{label}}', - collapseAll: 'Collapse All', - customURL: 'Custom URL', - editLabelData: 'Edit {{label}} data', - editLink: 'Edit Link', - editRelationship: 'Edit Relationship', - enterURL: 'Enter a URL', - internalLink: 'Internal Link', - itemsAndMore: '{{items}} and {{count}} more', - labelRelationship: '{{label}} Relationship', - latitude: 'Latitude', - linkType: 'Link Type', - linkedTo: 'Linked to <0>{{label}}', - longitude: 'Longitude', - newLabel: 'New {{label}}', - openInNewTab: 'Open in new tab', - passwordsDoNotMatch: 'Passwords do not match.', - relatedDocument: 'Related Document', - relationTo: 'Relation To', - removeRelationship: 'Remove Relationship', - removeUpload: 'Remove Upload', - saveChanges: 'Save changes', - searchForBlock: 'Search for a block', - selectExistingLabel: 'Select existing {{label}}', - selectFieldsToEdit: 'Select fields to edit', - showAll: 'Show All', - swapRelationship: 'Swap Relationship', - swapUpload: 'Swap Upload', - textToDisplay: 'Text to display', - toggleBlock: 'Toggle block', - uploadNewLabel: 'Upload new {{label}}', - }, - general: { - aboutToDelete: 'You are about to delete the {{label}} <1>{{title}}. Are you sure?', - aboutToDeleteCount_many: 'You are about to delete {{count}} {{label}}', - aboutToDeleteCount_one: 'You are about to delete {{count}} {{label}}', - aboutToDeleteCount_other: 'You are about to delete {{count}} {{label}}', - addBelow: 'Add Below', - addFilter: 'Add Filter', - adminTheme: 'Admin Theme', - and: 'And', - applyChanges: 'Apply Changes', - ascending: 'Ascending', - automatic: 'Automatic', - backToDashboard: 'Back to Dashboard', - cancel: 'Cancel', - changesNotSaved: - 'Your changes have not been saved. If you leave now, you will lose your changes.', - close: 'Close', - collapse: 'Collapse', - collections: 'Collections', - columnToSort: 'Column to Sort', - columns: 'Columns', - confirm: 'Confirm', - confirmDeletion: 'Confirm deletion', - confirmDuplication: 'Confirm duplication', - copied: 'Copied', - copy: 'Copy', - create: 'Create', - createNew: 'Create New', - createNewLabel: 'Create new {{label}}', - creatingNewLabel: 'Creating new {{label}}', - created: 'Created', - createdAt: 'Created At', - creating: 'Creating', - dark: 'Dark', - dashboard: 'Dashboard', - delete: 'Delete', - deletedCountSuccessfully: 'Deleted {{count}} {{label}} successfully.', - deletedSuccessfully: 'Deleted successfully.', - deleting: 'Deleting...', - descending: 'Descending', - deselectAllRows: 'Deselect all rows', - duplicate: 'Duplicate', - duplicateWithoutSaving: 'Duplicate without saving changes', - edit: 'Edit', - editLabel: 'Edit {{label}}', - editing: 'Editing', - editingLabel_many: 'Editing {{count}} {{label}}', - editingLabel_one: 'Editing {{count}} {{label}}', - editingLabel_other: 'Editing {{count}} {{label}}', - email: 'Email', - emailAddress: 'Email Address', - enterAValue: 'Enter a value', - error: 'Error', - errors: 'Errors', - fallbackToDefaultLocale: 'Fallback to default locale', - filter: 'Filter', - filterWhere: 'Filter {{label}} where', - filters: 'Filters', - globals: 'Globals', - language: 'Language', - lastModified: 'Last Modified', - leaveAnyway: 'Leave anyway', - leaveWithoutSaving: 'Leave without saving', - light: 'Light', - livePreview: 'Live Preview', - loading: 'Loading', - locale: 'Locale', - locales: 'Locales', - menu: 'Menu', - moveDown: 'Move Down', - moveUp: 'Move Up', - newPassword: 'New Password', - noFiltersSet: 'No filters set', - noLabel: '', - noOptions: 'No options', - noResults: - "No {{label}} found. Either no {{label}} exist yet or none match the filters you've specified above.", - noValue: 'No value', - none: 'None', - notFound: 'Not Found', - nothingFound: 'Nothing found', - of: 'of', - or: 'Or', - open: 'Open', - order: 'Order', - pageNotFound: 'Page not found', - password: 'Password', - payloadSettings: 'Payload Settings', - perPage: 'Per Page: {{limit}}', - remove: 'Remove', - reset: 'Reset', - row: 'Row', - rows: 'Rows', - save: 'Save', - saving: 'Saving...', - searchBy: 'Search by {{label}}', - selectAll: 'Select all {{count}} {{label}}', - selectAllRows: 'Select all rows', - selectValue: 'Select a value', - selectedCount: '{{count}} {{label}} selected', - showAllLabel: 'Show all {{label}}', - sorryNotFound: 'Sorry—there is nothing to correspond with your request.', - sort: 'Sort', - sortByLabelDirection: 'Sort by {{label}} {{direction}}', - stayOnThisPage: 'Stay on this page', - submissionSuccessful: 'Submission Successful.', - submit: 'Submit', - successfullyCreated: '{{label}} successfully created.', - successfullyDuplicated: '{{label}} successfully duplicated.', - thisLanguage: 'English', - titleDeleted: '{{label}} "{{title}}" successfully deleted.', - unauthorized: 'Unauthorized', - unsavedChangesDuplicate: 'You have unsaved changes. Would you like to continue to duplicate?', - untitled: 'Untitled', - updatedAt: 'Updated At', - updatedCountSuccessfully: 'Updated {{count}} {{label}} successfully.', - updatedSuccessfully: 'Updated successfully.', - updating: 'Updating', - uploading: 'Uploading', - user: 'User', - users: 'Users', - value: 'Value', - welcome: 'Welcome', - }, - operators: { - contains: 'contains', - equals: 'equals', - exists: 'exists', - isGreaterThan: 'is greater than', - isGreaterThanOrEqualTo: 'is greater than or equal to', - isIn: 'is in', - isLessThan: 'is less than', - isLessThanOrEqualTo: 'is less than or equal to', - isLike: 'is like', - isNotEqualTo: 'is not equal to', - isNotIn: 'is not in', - near: 'near', - }, - upload: { - crop: 'Crop', - cropToolDescription: - 'Drag the corners of the selected area, draw a new area or adjust the values below.', - dragAndDrop: 'Drag and drop a file', - dragAndDropHere: 'or drag and drop a file here', - editImage: 'Edit Image', - focalPoint: 'Focal Point', - focalPointDescription: - 'Drag the focal point directly on the preview or adjust the values below.', - fileName: 'File Name', - fileSize: 'File Size', - height: 'Height', - lessInfo: 'Less info', - moreInfo: 'More info', - previewSizes: 'Preview Sizes', - selectCollectionToBrowse: 'Select a Collection to Browse', - selectFile: 'Select a file', - setCropArea: 'Set crop area', - setFocalPoint: 'Set focal point', - sizes: 'Sizes', - sizesFor: 'Sizes for {{label}}', - width: 'Width', - }, - validation: { - emailAddress: 'Please enter a valid email address.', - enterNumber: 'Please enter a valid number.', - fieldHasNo: 'This field has no {{label}}', - greaterThanMax: '{{value}} is greater than the max allowed {{label}} of {{max}}.', - invalidInput: 'This field has an invalid input.', - invalidSelection: 'This field has an invalid selection.', - invalidSelections: 'This field has the following invalid selections:', - lessThanMin: '{{value}} is less than the min allowed {{label}} of {{min}}.', - limitReached: 'Limit reached, only {{max}} items can be added.', - longerThanMin: 'This value must be longer than the minimum length of {{minLength}} characters.', - notValidDate: '"{{value}}" is not a valid date.', - required: 'This field is required.', - requiresAtLeast: 'This field requires at least {{count}} {{label}}.', - requiresNoMoreThan: 'This field requires no more than {{count}} {{label}}.', - requiresTwoNumbers: 'This field requires two numbers.', - shorterThanMax: 'This value must be shorter than the max length of {{maxLength}} characters.', - trueOrFalse: 'This field can only be equal to true or false.', - validUploadID: 'This field is not a valid upload ID.', - }, - version: { - aboutToPublishSelection: - 'You are about to publish all {{label}} in the selection. Are you sure?', - aboutToRestore: - 'You are about to restore this {{label}} document to the state that it was in on {{versionDate}}.', - aboutToRestoreGlobal: - 'You are about to restore the global {{label}} to the state that it was in on {{versionDate}}.', - aboutToRevertToPublished: - "You are about to revert this document's changes to its published state. Are you sure?", - aboutToUnpublish: 'You are about to unpublish this document. Are you sure?', - aboutToUnpublishSelection: - 'You are about to unpublish all {{label}} in the selection. Are you sure?', - autosave: 'Autosave', - autosavedSuccessfully: 'Autosaved successfully.', - autosavedVersion: 'Autosaved version', - changed: 'Changed', - compareVersion: 'Compare version against:', - confirmPublish: 'Confirm publish', - confirmRevertToSaved: 'Confirm revert to saved', - confirmUnpublish: 'Confirm unpublish', - confirmVersionRestoration: 'Confirm version Restoration', - currentDocumentStatus: 'Current {{docStatus}} document', - draft: 'Draft', - draftSavedSuccessfully: 'Draft saved successfully.', - lastSavedAgo: 'Last saved {{distance}} ago', - noFurtherVersionsFound: 'No further versions found', - noRowsFound: 'No {{label}} found', - preview: 'Preview', - problemRestoringVersion: 'There was a problem restoring this version', - publish: 'Publish', - publishChanges: 'Publish changes', - published: 'Published', - publishing: 'Publishing', - restoreThisVersion: 'Restore this version', - restoredSuccessfully: 'Restored Successfully.', - restoring: 'Restoring...', - revertToPublished: 'Revert to published', - reverting: 'Reverting...', - saveDraft: 'Save Draft', - selectLocales: 'Select locales to display', - selectVersionToCompare: 'Select a version to compare', - showLocales: 'Show locales:', - showingVersionsFor: 'Showing versions for:', - status: 'Status', - type: 'Type', - unpublish: 'Unpublish', - unpublishing: 'Unpublishing...', - version: 'Version', - versionCount_many: '{{count}} versions found', - versionCount_none: 'No versions found', - versionCount_one: '{{count}} version found', - versionCount_other: '{{count}} versions found', - versionCreatedOn: '{{version}} created on:', - versionID: 'Version ID', - versions: 'Versions', - viewingVersion: 'Viewing version for the {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: 'Viewing version for the global {{entityLabel}}', - viewingVersions: 'Viewing versions for the {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: 'Viewing versions for the global {{entityLabel}}', - }, -} diff --git a/packages/translations/src/all/es.ts b/packages/translations/src/all/es.ts deleted file mode 100644 index 4ca648b092..0000000000 --- a/packages/translations/src/all/es.ts +++ /dev/null @@ -1,392 +0,0 @@ -export default { - authentication: { - account: 'Cuenta', - accountOfCurrentUser: 'Cuenta del usuario actual', - alreadyActivated: 'Ya Activado', - alreadyLoggedIn: 'Sesión iniciada', - apiKey: 'Clave API', - backToLogin: 'Regresar al inicio de sesión', - beginCreateFirstUser: 'Para empezar, crea tu primer usuario.', - changePassword: 'Cambiar contraseña', - checkYourEmailForPasswordReset: - 'Revisa tu correo con el enlace para restablecer tu contraseña de forma segura.', - confirmGeneration: 'Confirmar Generación', - confirmPassword: 'Confirmar Contraseña', - createFirstUser: 'Crear al primer usuario', - emailNotValid: 'El correo proporcionado es inválido', - emailSent: 'Correo Enviado', - enableAPIKey: 'Habilitar Clave API', - failedToUnlock: 'Desbloqueo Fallido', - forceUnlock: 'Forzar Desbloqueo', - forgotPassword: 'Olvidé mi contraseña', - forgotPasswordEmailInstructions: - 'Por favor introduce tu correo electrónico. Recibirás un mensaje con las instrucciones para restablecer tu contraseña.', - forgotPasswordQuestion: '¿Olvidaste tu contraseña?', - generate: 'Generar', - generateNewAPIKey: 'Generar Nueva Clave de API', - generatingNewAPIKeyWillInvalidate: - 'Generar una nueva clave de API <1>invalidará la clave anterior. ¿Deseas continuar?', - lockUntil: 'Bloquear Hasta', - logBackIn: 'Volver a iniciar sesión', - logOut: 'Cerrar sesión', - loggedIn: 'Para iniciar sesión con otro usuario, primero <0>cierra tu sesión.', - loggedInChangePassword: - 'Para cambiar tu contraseña, entra a <0>tu cuenta y edita la contraseña desde ahí.', - loggedOutInactivity: 'Tú sesión se cerró debido a inactividad.', - loggedOutSuccessfully: 'Tú sesión se cerró correctamente.', - login: 'Iniciar sesión', - loginAttempts: 'Login Attempts', - loginUser: 'Iniciar sesión de usuario', - loginWithAnotherUser: 'Para iniciar sesión con otro usuario, primero <0>cierra tu sesión.', - logout: 'Cerrar sesión', - logoutUser: 'Cerrar sesión de usuario', - newAPIKeyGenerated: 'Nueva Clave de API Generada.', - newAccountCreated: - 'Se ha creado una nueva cuenta para que puedas acceder a {{serverURL}}. Por favor, haz click o copia el siguiente enlace a tu navegador para verificar tu correo: {{verificationURL}}.
    Una vez hayas verificado tu correo, podrás iniciar sesión.', - newPassword: 'Nueva Contraseña', - resetPassword: 'Restablecer Contraseña', - resetPasswordExpiration: 'Restablecer Caducidad de la Contraseña', - resetPasswordToken: 'Restablecer Token de la Contraseña', - resetYourPassword: 'Restablecer tu Contraseña', - stayLoggedIn: 'Mantener sesión abierta', - successfullyUnlocked: 'Desbloqueado correctamente', - unableToVerify: 'No se pudo Verificar', - verified: 'Verificado', - verifiedSuccessfully: 'Verificación Correcta', - verify: 'Verificar', - verifyUser: 'Verificar Usuario', - verifyYourEmail: 'Verifica tu correo', - youAreInactive: - 'Has estado inactivo por un tiempo y por tu seguridad se cerrará tu sesión automáticamente. ¿Deseas mantener tu sesión activa?', - youAreReceivingResetPassword: - 'Estás recibiendo esto porque tú (o alguien más) ha solicitado restablecer la contraseña de tu cuenta. Por favor haz click en el siguiente enlace o pégalo en tu navegador para completar el proceso:', - youDidNotRequestPassword: - 'Si tú no solicitaste esto, por favor ignora este correo y tu contraseña no se cambiará.', - }, - error: { - accountAlreadyActivated: 'Esta cuenta ya fue activada.', - autosaving: 'Ocurrió un problema al autoguardar este documento.', - correctInvalidFields: 'Por favor corrige los campos inválidos.', - deletingFile: 'Ocurrió un error al eliminar el archivo.', - deletingTitle: - 'Ocurrió un error al eliminar {{title}}. Por favor revisa tu conexión y vuelve a intentarlo.', - emailOrPasswordIncorrect: 'El correo o la contraseña introducida es incorrecta.', - followingFieldsInvalid_one: 'El siguiente campo es inválido:', - followingFieldsInvalid_other: 'Los siguientes campos son inválidos:', - incorrectCollection: 'Colección Incorrecta', - invalidFileType: 'Tipo de archivo inválido', - invalidFileTypeValue: 'Tipo de archivo inválido: {{value}}', - loadingDocument: 'Ocurrió un problema al cargar el documento con la ID {{id}}.', - missingEmail: 'Falta el correo.', - missingIDOfDocument: 'Falta la ID del documento a actualizar.', - missingIDOfVersion: 'Falta la ID de la versión.', - missingRequiredData: 'Falta la información obligatoria.', - noFilesUploaded: 'No se subieron archivos.', - noMatchedField: 'No se encontró un campo para "{{label}}"', - noUser: 'Sin usuario', - notAllowedToAccessPage: 'No tienes permiso para acceder a esta página.', - notAllowedToPerformAction: 'No tienes permiso para realizar esta acción.', - notFound: 'No se encontró el recurso solicitado.', - previewing: 'Ocurrió un problema al previsualizar este documento.', - problemUploadingFile: 'Ocurrió un problema al subir el archivo.', - tokenInvalidOrExpired: 'El token es inválido o ya expiró.', - unPublishingDocument: 'Ocurrió un error al despublicar este documento.', - unableToDeleteCount: 'No se pudo eliminar {{count}} de {{total}} {{label}}.', - unableToUpdateCount: 'No se puede actualizar {{count}} de {{total}} {{label}}.', - unauthorized: 'No autorizado, debes iniciar sesión para realizar esta solicitud.', - unknown: 'Ocurrió un error desconocido.', - unspecific: 'Ocurrió un error.', - userLocked: - 'Este usuario ha sido bloqueado debido a que tiene muchos intentos fallidos para iniciar sesión.', - valueMustBeUnique: 'El valor debe ser único', - verificationTokenInvalid: 'Token de verificación inválido.', - }, - fields: { - addLabel: 'Añadir {{label}}', - addLink: 'Añadir Enlace', - addNew: 'Añadir nuevo', - addNewLabel: 'Añadir {{label}}', - addRelationship: 'Añadir Relación', - addUpload: 'Añadir Carga', - block: 'bloque', - blockType: 'Tipo de bloque', - blocks: 'bloques', - chooseBetweenCustomTextOrDocument: - 'Elige entre ingresar una URL personalizada o enlazar a otro documento.', - chooseDocumentToLink: 'Elige un documento a enlazar', - chooseFromExisting: 'Elegir existente', - chooseLabel: 'Elegir {{label}}', - collapseAll: 'Colapsar todo', - customURL: 'URL Personalizado', - editLabelData: 'Editar información de {{label}}', - editLink: 'Editar Enlace', - editRelationship: 'Editar Relación', - enterURL: 'Ingresar URL', - internalLink: 'Enlace Interno', - itemsAndMore: '{{items}} y {{count}} más', - labelRelationship: 'Relación de {{label}}', - latitude: 'Latitud', - linkType: 'Tipo de enlace', - linkedTo: 'Enlazado a <0>{{label}}', - longitude: 'Longitud', - newLabel: 'Nuevo {{label}}', - openInNewTab: 'Abrir en nueva pestaña', - passwordsDoNotMatch: 'Las contraseñas no coinciden.', - relatedDocument: 'Documento Relacionado', - relationTo: 'Relación con', - removeRelationship: 'Eliminar relación', - removeUpload: 'Quitar Carga', - saveChanges: 'Guardar cambios', - searchForBlock: 'Buscar bloque', - selectExistingLabel: 'Seleccionar {{label}} existente', - selectFieldsToEdit: 'Seleccionar campos para editar', - showAll: 'Mostrar Todo', - swapRelationship: 'Cambiar Relación', - swapUpload: 'Cambiar carga', - textToDisplay: 'Texto a mostrar', - toggleBlock: 'Alternar bloque', - uploadNewLabel: 'Subir nuevo {{label}}', - }, - general: { - aboutToDelete: 'Estás por eliminar el {{label}} <1>{{title}}. ¿Estás seguro?', - aboutToDeleteCount_many: 'Está a punto de eliminar {{count}} {{label}}', - aboutToDeleteCount_one: 'Está a punto de eliminar {{count}} {{label}}', - aboutToDeleteCount_other: 'Está a punto de eliminar {{count}} {{label}}', - addBelow: 'Agrega abajo', - addFilter: 'Añadir filtro', - adminTheme: 'Tema del admin', - and: 'Y', - applyChanges: 'Aplicar Cambios', - ascending: 'Ascendente', - automatic: 'Automático', - backToDashboard: 'Volver al Tablero', - cancel: 'Cancelar', - changesNotSaved: - 'Tus cambios no han sido guardados. Si te sales ahora, se perderán tus cambios.', - close: 'Cerrar', - collapse: 'Colapsar', - collections: 'Colecciones', - columnToSort: 'Columna de ordenado', - columns: 'Columnas', - confirm: 'Confirmar', - confirmDeletion: 'Confirmar eliminación', - confirmDuplication: 'Confirmar duplicado', - copied: 'Copiado', - copy: 'Copiar', - create: 'Crear', - createNew: 'Crear nuevo', - createNewLabel: 'Crear nuevo {{label}}', - created: 'Creado', - createdAt: 'Fecha de creación', - creating: 'Creando', - creatingNewLabel: 'Creando nuevo {{label}}', - dark: 'Oscuro', - dashboard: 'Tablero', - delete: 'Eliminar', - deletedCountSuccessfully: 'Se eliminó {{count}} {{label}} con éxito.', - deletedSuccessfully: 'Borrado exitosamente.', - deleting: 'Eliminando...', - descending: 'Descendente', - deselectAllRows: 'Deselecciona todas las filas', - duplicate: 'Duplicar', - duplicateWithoutSaving: 'Duplicar sin guardar cambios', - edit: 'Editar', - editLabel: 'Editar {{label}}', - editing: 'Editando', - editingLabel_many: 'Edición de {{count}} {{label}}', - editingLabel_one: 'Editando {{count}} {{label}}', - editingLabel_other: 'Edición de {{count}} {{label}}', - email: 'Correo electrónico', - emailAddress: 'Dirección de Correo Electrónico', - enterAValue: 'Introduce un valor', - error: 'Error', - errors: 'Errores', - fallbackToDefaultLocale: 'Volver a la configuración regional por defecto', - filter: 'Filtro', - filterWhere: 'Filtrar {{label}} donde', - filters: 'Filtros', - globals: 'Globales', - language: 'Idioma', - lastModified: 'Última modificación', - leaveAnyway: 'Salir de todos modos', - leaveWithoutSaving: 'Salir sin guardar', - light: 'Claro', - livePreview: 'Previsualizar', - loading: 'Cargando', - locale: 'Regional', - locales: 'Locales', - menu: 'Menú', - moveDown: 'Mover abajo', - moveUp: 'Mover arriba', - newPassword: 'Nueva contraseña', - noFiltersSet: 'No hay filtros establecidos', - noLabel: '', - noOptions: 'Sin opciones', - noResults: - 'No encontramos {{label}}. Puede que no existan {{label}} todavía o no hay coincidencias con los filtros introducidos arriba.', - noValue: 'Sin valor', - none: 'Ninguna', - notFound: 'No encontrado', - nothingFound: 'No se encontró nada', - of: 'de', - open: 'Abrir', - or: 'O', - order: 'Orden', - pageNotFound: 'Página no encontrada', - password: 'Contraseña', - payloadSettings: 'Configuración de la carga', - perPage: 'Por página: {{limit}}', - remove: 'Remover', - reset: 'Reiniciar', - row: 'Fila', - rows: 'Filas', - save: 'Guardar', - saving: 'Guardando...', - searchBy: 'Buscar por {{label}}', - selectAll: 'Seleccionar todo {{count}} {{label}}', - selectAllRows: 'Selecciona todas las filas', - selectValue: 'Selecciona un valor', - selectedCount: '{{count}} {{label}} seleccionado', - showAllLabel: 'Muestra todas {{label}}', - sorryNotFound: 'Lo sentimos. No hay nada que corresponda con tu solicitud.', - sort: 'Ordenar', - sortByLabelDirection: 'Ordenar por {{label}} {{direction}}', - stayOnThisPage: 'Permanecer en esta página', - submissionSuccessful: 'Envío realizado correctamente.', - submit: 'Enviar', - successfullyCreated: '{{label}} creado correctamente.', - successfullyDuplicated: '{{label}} duplicado correctamente.', - thisLanguage: 'Español', - titleDeleted: '{{label}} {{title}} eliminado correctamente.', - unauthorized: 'No autorizado', - unsavedChangesDuplicate: 'Tienes cambios sin guardar. ¿Deseas continuar para duplicar?', - untitled: 'Sin título', - updatedAt: 'Fecha de modificado', - updatedCountSuccessfully: '{{count}} {{label}} actualizado con éxito.', - updatedSuccessfully: 'Actualizado con éxito.', - updating: 'Actualizando', - uploading: 'Subiendo', - user: 'Usuario', - users: 'Usuarios', - value: 'Valor', - welcome: 'Bienvenido', - }, - operators: { - contains: 'contiene', - equals: 'igual', - exists: 'existe', - isGreaterThan: 'es mayor que', - isGreaterThanOrEqualTo: 'es mayor o igual que', - isIn: 'está en', - isLessThan: 'es menor que', - isLessThanOrEqualTo: 'es menor o igual que', - isLike: 'es como', - isNotEqualTo: 'no es igual a', - isNotIn: 'no está en', - near: 'cerca', - }, - upload: { - crop: 'Cultivo', - cropToolDescription: - 'Arrastra las esquinas del área seleccionada, dibuja un nuevo área o ajusta los valores a continuación.', - dragAndDrop: 'Arrastra y suelta un archivo', - dragAndDropHere: 'o arrastra un archivo aquí', - editImage: 'Editar imagen', - fileName: 'Nombre del archivo', - fileSize: 'Tamaño del archivo', - focalPoint: 'Punto Focal', - focalPointDescription: - 'Arrastra el punto focal directamente en la vista previa o ajusta los valores a continuación.', - height: 'Alto', - lessInfo: 'Menos info', - moreInfo: 'Más info', - previewSizes: 'Tamaños de Vista Previa', - selectCollectionToBrowse: 'Selecciona una Colección', - selectFile: 'Selecciona un archivo', - setCropArea: 'Establecer área de cultivo', - setFocalPoint: 'Establecer punto focal', - sizes: 'Tamaños', - sizesFor: 'Tamaños para {{label}}', - width: 'Ancho', - }, - validation: { - emailAddress: 'Por favor introduce un correo electrónico válido.', - enterNumber: 'Por favor introduce un número válido.', - fieldHasNo: 'Este campo no tiene {{label}}', - greaterThanMax: '{{value}} es mayor que el {{label}} máximo permitido de {{max}}.', - invalidInput: 'La información en este campo es inválida.', - invalidSelection: 'La selección en este campo es inválida.', - invalidSelections: 'Este campo tiene las siguientes selecciones inválidas:', - lessThanMin: '{{value}} es menor que el {{label}} mínimo permitido de {{min}}.', - limitReached: 'Se ha alcanzado el límite, solo se pueden agregar {{max}} elementos.', - longerThanMin: 'Este dato debe ser más largo que el mínimo de {{minLength}} caracteres.', - notValidDate: '"{{value}}" es una fecha inválida.', - required: 'Este campo es obligatorio.', - requiresAtLeast: 'Este campo require al menos {{count}} {{label}}.', - requiresNoMoreThan: 'Este campo require no más de {{count}} {{label}}', - requiresTwoNumbers: 'Este campo requiere dos números.', - shorterThanMax: 'Este dato debe ser más corto que el máximo de {{maxLength}} caracteres.', - trueOrFalse: 'Este campo solamente puede ser verdadero o falso.', - validUploadID: "'Este campo no es una ID de subida válida.'", - }, - version: { - aboutToPublishSelection: - 'Está a punto de publicar todas las {{etiquetas}} de la selección. ¿Está seguro?', - aboutToRestore: - 'Estás a punto de restaurar este documento de {{label}} al estado en el que estaba en la fecha {{versionDate}}.', - aboutToRestoreGlobal: - 'Estás a punto de restaurar el {{label}} global al estado en el que estaba en la fecha {{versionDate}}.', - aboutToRevertToPublished: - 'Estás a punto de revertir los cambios de este documento a su estado publicado. ¿Estás seguro?', - aboutToUnpublish: 'Estás a punto de despublicar este documento. ¿Estás seguro?', - aboutToUnpublishSelection: - 'Está a punto de anular la publicación de todos los {{label}} de la selección. ¿Está seguro?', - autosave: 'Autoguardar', - autosavedSuccessfully: 'Guardado automáticamente con éxito.', - autosavedVersion: 'Versión Autoguardada', - changed: 'Modificado', - compareVersion: 'Comparar versión con:', - confirmPublish: 'Confirmar publicación', - confirmRevertToSaved: 'Confirmar revertir a guardado', - confirmUnpublish: 'Confirmar despublicado', - confirmVersionRestoration: 'Confirmar restauración de versión', - currentDocumentStatus: 'Documento {{docStatus}} actual', - draft: 'Borrador', - draftSavedSuccessfully: 'Borrador guardado con éxito.', - lastSavedAgo: 'Guardado por última vez hace {{distance}}', - noFurtherVersionsFound: 'No se encontraron más versiones', - noRowsFound: 'No encontramos {{label}}', - preview: 'Previsualizar', - problemRestoringVersion: 'Ocurrió un problema al restaurar esta versión', - publish: 'Publicar', - publishChanges: 'Publicar cambios', - published: 'Publicado', - publishing: 'Publicación', - restoreThisVersion: 'Restaurar esta versión', - restoredSuccessfully: 'Restaurado éxito.', - restoring: 'Restaurando...', - revertToPublished: 'Revertir a publicado', - reverting: 'Revirtiendo...', - saveDraft: 'Guardar Borrador', - selectLocales: 'Selecciona idiomas a mostrar', - selectVersionToCompare: 'Selecciona versión a comparar', - showLocales: 'Mostrar idiomas:', - showingVersionsFor: 'Mostrando versiones para:', - status: 'Estado', - type: 'Tipo', - unpublish: 'Despublicar', - unpublishing: 'Despublicando...', - version: 'Versión', - versionCount_many: '{{count}} versiones encontradas', - versionCount_none: 'No encontramos versiones', - versionCount_one: '{{count}} versión encontrada', - versionCount_other: '{{count}} versiones encontradas', - versionCreatedOn: '{{version}} creada el:', - versionID: 'ID de Versión', - versions: 'Versiones', - viewingVersion: 'Viendo versión para {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: 'Viendo versión para el global {{entityLabel}}', - viewingVersions: 'Viendo versiones para {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: 'Viendo versiones para el global {{entityLabel}}', - }, -} diff --git a/packages/translations/src/all/fa.ts b/packages/translations/src/all/fa.ts deleted file mode 100644 index 67771203c4..0000000000 --- a/packages/translations/src/all/fa.ts +++ /dev/null @@ -1,388 +0,0 @@ -export default { - authentication: { - account: 'نمایه', - accountOfCurrentUser: 'نمایه کاربر فعلی', - alreadyActivated: 'قبلاً فعال شده است', - alreadyLoggedIn: 'قبلاً وارد شده‌اید', - apiKey: 'کلید اِی‌پی‌آی', - backToLogin: 'بازگشت به برگه ورود', - beginCreateFirstUser: 'برای آغاز، نخستین کاربر خود را بسازید.', - changePassword: 'تغییر گذرواژه', - checkYourEmailForPasswordReset: - 'برای بازیابی ایمن گذرواژه خود، پیامی که به رایانامه شما فرستادیم و دارای پیوند بازنشانی گذرواژه است را بررسی نمایید.', - confirmGeneration: 'تأیید ساخت', - confirmPassword: 'تأیید گذرواژه', - createFirstUser: 'ایجاد کاربر نخست', - emailNotValid: 'رایانامه ارائه‌شده درست نیست', - emailSent: 'رایانامه فرستاده شد', - enableAPIKey: 'فعال‌سازی کلید اِی‌پی‌آی', - failedToUnlock: 'باز کردن قفل ناموفق بود', - forceUnlock: 'باز کردن قفل اجباری', - forgotPassword: 'بازیابی گذرواژه', - forgotPasswordEmailInstructions: - 'لطفا نام کاربری یا نشانی رایانامه خود را وارد نمایید. شما یک پیام با دستورالعمل راه‌اندازی مجدد گذرواژه خود دریافت خواهید کرد.', - forgotPasswordQuestion: 'بازیابی گذرواژه؟', - generate: 'ساخت', - generateNewAPIKey: 'ساخت کلید اِی‌پی‌آی تازه', - generatingNewAPIKeyWillInvalidate: - 'ساخت کلید اِی‌پی‌آی تازه انجام خواهد شد، اما کلیدهای پیشین را <1>باطلخواهد کرد، تمایل دارید ادامه دهید؟', - lockUntil: 'قفل تا', - logBackIn: 'دوباره وارد شوید', - logOut: 'خروج', - loggedIn: 'برای ورود با کاربر دیگر، باید اول <0>خارج شوید.', - loggedInChangePassword: - 'برای تغییر گذرواژه، به <0>نمایه بروید تا گذرواژه خود را ویرایش کنید.', - loggedOutInactivity: 'شما به دلیل عدم فعالیت از سیستم خارج شده اید.', - loggedOutSuccessfully: 'شما با موفقیت از سیستم خارج شدید.', - login: 'وارد شدن', - loginAttempts: 'تلاش برای ورود', - loginUser: 'ورود کاربر', - loginWithAnotherUser: 'برای ورود با کاربر دیگر، باید اول<0>خارج شوید.', - logout: 'خروج', - logoutUser: 'خروج از کاربر', - newAPIKeyGenerated: 'کلید اِی‌پی‌آی تازه ساخته شد.', - newAccountCreated: - 'یک نمایه کاربری تازه برای دسترسی شما ساخته شده است {{serverURL}} لطفاً روی پیوند زیر کلیک کنید یا آدرس زیر را در مرورگر خود قرار دهید تا رایانامه خود را تأیید کنید: {{verificationURL}}
    پس از تایید رایانامه خود، می توانید وارد سیستم شوید.', - newPassword: 'گذرواژه تازه', - resetPassword: 'بازنشانی گذرواژه', - resetPasswordExpiration: 'زمان انقضاء بازنشانی گذرواژه', - resetPasswordToken: 'ژتون بازیابی گذرواژه', - resetYourPassword: 'گذرواژه خود را بازنشانی کنید', - stayLoggedIn: 'وارد سیستم بمانید', - successfullyUnlocked: 'با موفقیت باز شد', - unableToVerify: 'امکان تأیید نیست', - verified: 'تأیید شده', - verifiedSuccessfully: 'با موفقیت تأیید شد', - verify: 'تأیید', - verifyUser: 'تأیید کاربر', - verifyYourEmail: 'رایانامه خود را تأیید کنید', - youAreInactive: - 'مدتی است که فعال نبوده‌اید و به زودی جهت حفظ امنیت شما به صورت خودکار از سیستم خارج خواهید شد. ادامه می‌دهید؟', - youAreReceivingResetPassword: - 'درخواست بازنشانی گذرواژه نمایه توسط شما یا فرد دیگری فرستاده شده است، اگر این درخواست از سمت شما بوده روی پیوند مقابل کلیک کنید یا در مرورگر وب خود پیوند را کپی کنید تا مراحل بازنشانی گذرواژه تکمیل شود، در غیر این صورت جای نگرانی نیست این پیام را نادیده بگیرید:', - youDidNotRequestPassword: - 'اگر شما این درخواست را ندادید، لطفاً این رایانامه را نادیده بگیرید و گذرواژه شما تغییری نخواهد کرد.', - }, - error: { - accountAlreadyActivated: 'این حساب قبلاً فعال شده است.', - autosaving: 'هنگام ذخیره خودکار این سند خطایی رخ داد.', - correctInvalidFields: 'لطفا کادرهای نامعتبر را تصحیح کنید.', - deletingFile: 'هنگام حذف فایل خطایی روی داد.', - deletingTitle: 'هنگام حذف {{title}} خطایی رخ داد. لطفاً وضعیت اتصال اینترنت خود را بررسی کنید.', - emailOrPasswordIncorrect: 'رایانامه یا گذرواژه ارائه شده نادرست است.', - followingFieldsInvalid_one: 'کادر زیر نامعتبر است:', - followingFieldsInvalid_other: 'کادرهای زیر نامعتبر هستند:', - incorrectCollection: 'مجموعه نادرست', - invalidFileType: 'نوع رسانه نامعتبر است', - invalidFileTypeValue: 'نوع رسانه نامعتبر: {{value}}', - loadingDocument: 'مشکلی در بارگیری رسانه با شناسه {{id}} پیش آمد.', - missingEmail: 'رایانامه وارد نشده.', - missingIDOfDocument: 'شناسه سند جهت بروزرسانی نامعتبر است.', - missingIDOfVersion: 'شناسه نگارش وارد نشده.', - missingRequiredData: 'داده های مورد نیاز وجود ندارد.', - noFilesUploaded: 'هیچ رسانه‌ای بارگذاری نشده.', - noMatchedField: 'کادر منطبقی با"{{label}}" یافت نشد', - noUser: 'بدون کاربر', - notAllowedToAccessPage: 'شما اجازه دسترسی به این برگه را ندارید.', - notAllowedToPerformAction: 'این عملیات برای شما مجاز نیست.', - notFound: 'منبع درخواست شده یافت نشد.', - previewing: 'مشکلی در پیش‌نمایش این رسانه رخ داد.', - problemUploadingFile: 'هنگام بارگذاری سند خطایی رخ داد.', - tokenInvalidOrExpired: 'ژتون شما نامعتبر یا منقضی شده است.', - unPublishingDocument: 'هنگام لغو انتشار این سند خطایی رخ داد.', - unableToDeleteCount: 'نمی‌توان {{count}} از {{total}} {{label}} را حذف کرد.', - unableToUpdateCount: 'امکان به روز رسانی {{count}} خارج از {{total}} {{label}} وجود ندارد.', - unauthorized: 'درخواست نامعتبر، جهت فرستادن این درخواست باید وارد شوید.', - unknown: 'یک خطای ناشناخته رخ داد.', - unspecific: 'خطایی رخ داد.', - userLocked: 'این کاربر به دلیل تلاش های زیاد برای ورود ناموفق قفل شده است.', - valueMustBeUnique: 'مقدار باید منحصر به فرد باشد', - verificationTokenInvalid: 'ژتون تأیید نامعتبر است.', - }, - fields: { - addLabel: 'افزودن {{label}}', - addLink: 'افزودن پیوند', - addNew: 'افزودن', - addNewLabel: 'افزودن {{label}} تازه', - addRelationship: 'افزودن پیوستگی', - addUpload: 'افزودن بارگذار', - block: 'بلوک', - blockType: 'نوع بلوک', - blocks: 'بلوک‌ها', - chooseBetweenCustomTextOrDocument: - 'بین یک نشانی وب یا پیوند دادن به سندی دیگری یکی را انتخاب کنید.', - chooseDocumentToLink: 'یک سند را برای پیوند دادن برگزینید', - chooseFromExisting: 'برگزیدن از بین ورودی‌ها', - chooseLabel: 'انتخاب {{label}}', - collapseAll: 'بستن همه', - customURL: 'URL سفارشی', - editLabelData: 'ویرایش {{label}} داده', - editLink: 'نگارش پیوند', - editRelationship: 'نگارش پیوستگی', - enterURL: 'یک نشانی وب وارد کنید', - internalLink: 'پیوند درونی', - itemsAndMore: '{{items}} و {{count}} بیش‌تر', - labelRelationship: '{{label}} پیوستگی', - latitude: 'عرض جغرافیایی', - linkType: 'نوع پیوند', - linkedTo: 'مرتبط با <0>{{label}}', - longitude: 'طول جغرافیایی', - newLabel: 'تازه {{label}}', - openInNewTab: 'بازکردن درزبانه تازه', - passwordsDoNotMatch: 'گذرواژه‌های وارد شده مطابقت ندارند.', - relatedDocument: 'اسناد مرتبط', - relationTo: 'پیوست به', - removeRelationship: 'حذف پیوستگی', - removeUpload: 'حذف بارگذار', - saveChanges: 'ذخیره تغییرات', - searchForBlock: 'جست‌وجو برای بلوک', - selectExistingLabel: 'انتخاب موارد {{label}}', - selectFieldsToEdit: 'انتخاب کادرها برای نگارش', - showAll: 'نمایش کل', - swapRelationship: 'تبادل پیوستگی', - swapUpload: 'تبادل بارگذار', - textToDisplay: 'متن برای نمایش', - toggleBlock: 'کارگذاری بلوک', - uploadNewLabel: 'بارگذاری تازه {{label}}', - }, - general: { - aboutToDelete: 'شما در حال پاک کردن {{label}} <1>{{title}} هستید. اطمینان دارید؟', - aboutToDeleteCount_many: 'شما در حال پاک کردن {{count}} تعداد {{label}} هستید', - aboutToDeleteCount_one: 'شما در حال پاک کردن {{count}} تعداد {{label}} هستید', - aboutToDeleteCount_other: 'شما در شرف حذف هستید {{count}} {{label}}', - addBelow: 'افزودن به زیر', - addFilter: 'افزودن علامت', - adminTheme: 'پوسته پیشخوان', - and: 'و', - applyChanges: 'اعمال تغییرات', - ascending: 'صعودی', - automatic: 'خودکار', - backToDashboard: 'بازگشت به پیشخوان', - cancel: 'لغو', - changesNotSaved: - 'تغییرات شما ذخیره نشده، اگر این برگه را ترک کنید. تمام تغییرات از دست خواهد رفت.', - close: 'بستن', - collapse: 'بستن', - collections: 'مجموعه‌ها', - columnToSort: 'ستون برای مرتب‌سازی', - columns: 'ستون‌ها', - confirm: 'تأیید', - confirmDeletion: 'تأئید عملیات حذف', - confirmDuplication: 'تأئید رونوشت', - copied: 'رونوشت شده', - copy: 'رونوشت', - create: 'ساختن', - createNew: 'ساختن تازه', - createNewLabel: 'ساختن {{label}} تازه', - created: 'ساخته شده', - createdAt: 'ساخته شده در', - creating: 'در حال ساخت', - creatingNewLabel: 'در حال ساختن {{label}} تازه', - dark: 'تاریک', - dashboard: 'پیشخوان', - delete: 'حذف', - deletedCountSuccessfully: 'تعداد {{count}} {{label}} با موفقیت پاک گردید.', - deletedSuccessfully: 'با موفقیت حذف شد.', - deleting: 'در حال حذف...', - descending: 'رو به پایین', - deselectAllRows: 'تمام سطرها را از انتخاب خارج کنید', - duplicate: 'تکراری', - duplicateWithoutSaving: 'رونوشت بدون ذخیره کردن تغییرات', - edit: 'نگارش', - editLabel: 'نگارش {{label}}', - editing: 'در حال نگارش', - editingLabel_many: 'در حال نگارش {{count}} از {{label}}', - editingLabel_one: 'در حال نگارش {{count}} از {{label}}', - editingLabel_other: 'در حال نگارش {{count}} از {{label}}', - email: 'رایانامه', - emailAddress: 'نشانی رایانامه', - enterAValue: 'یک مقدار وارد کنید', - error: 'خطا', - errors: 'خطاها', - fallbackToDefaultLocale: 'بازگردان پیشفرض زبان', - filter: 'علامت‌گذاری', - filterWhere: 'علامت گذاری کردن {{label}} جایی که', - filters: 'علامت‌گذاری‌ها', - globals: 'سراسری', - language: 'زبان', - lastModified: 'آخرین نگارش', - leaveAnyway: 'به هر حال ترک کن', - leaveWithoutSaving: 'ترک کردن بدون ذخیره', - light: 'روشن', - livePreview: 'پیش‌نمایش', - loading: 'در حال بارگذاری', - locale: 'زبان', - locales: 'زبان‌ها', - menu: 'منو', - moveDown: 'حرکت به پایین', - moveUp: 'حرکت به بالا', - newPassword: 'گذرواژه تازه', - noFiltersSet: 'هیچ علامت‌گذاری تنظیم نشده', - noLabel: '', - noOptions: 'بدون گزینه', - noResults: - 'هیچ {{label}} یافت نشد. {{label}} یا هنوز وجود ندارد یا هیچ کدام با علامت‌گذاری‌هایی که در بالا مشخص کرده اید مطابقت ندارد.', - noValue: 'بدون مقدار', - none: 'هیچ یک', - notFound: 'یافت نشد', - nothingFound: 'چیزی یافت نشد', - of: 'از', - open: 'باز کردن', - or: 'یا', - order: 'چیدمان', - pageNotFound: 'برگه یافت نشد', - password: 'گذرواژه', - payloadSettings: 'تنظیمات پی‌لود', - perPage: 'هر برگه: {{limit}}', - remove: 'برداشتن', - reset: 'بازنشانی', - row: 'ردیف', - rows: 'ردیف‌ها', - save: 'ذخیره', - saving: 'در حال ذخیره...', - searchBy: 'جستجو بر اساس {{label}}', - selectAll: 'انتخاب همه {{count}} {{label}}', - selectAllRows: 'انتخاب تمام سطرها', - selectValue: 'یک مقدار را انتخاب کنید', - selectedCount: '{{count}} {{label}} انتخاب شد', - showAllLabel: 'نمایش همه {{label}}', - sorryNotFound: 'متأسفانه چیزی برای مطابقت با درخواست شما وجود ندارد.', - sort: 'مرتب‌سازی', - sortByLabelDirection: 'مرتب کردن بر اساس {{label}} {{direction}}', - stayOnThisPage: 'ماندن در این برگه', - submissionSuccessful: 'با موفقیت ثبت شد.', - submit: 'فرستادن', - successfullyCreated: '{{label}} با موفقیت ساخته شد.', - successfullyDuplicated: '{{label}} با موفقیت رونوشت شد.', - thisLanguage: 'فارسی', - titleDeleted: '{{label}} "{{title}}" با موفقیت پاک شد.', - unauthorized: 'غیرمجاز', - unsavedChangesDuplicate: 'شما تغییرات ذخیره نشده دارید. مطمئنید میخواهید به رونوشت ادامه دهید؟', - untitled: 'بدون عنوان', - updatedAt: 'بروز شده در', - updatedCountSuccessfully: 'تعداد {{count}} با عنوان {{label}} با موفقیت بروزرسانی شدند.', - updatedSuccessfully: 'با موفقیت به‌روز شد.', - updating: 'در حال به‌روزرسانی', - uploading: 'در حال بارگذاری', - user: 'کاربر', - users: 'کاربران', - value: 'مقدار', - welcome: 'خوش‌آمدید', - }, - operators: { - contains: 'شامل', - equals: 'برابر با', - exists: 'وجود دارد', - isGreaterThan: 'بزرگتر است از', - isGreaterThanOrEqualTo: 'بزرگتر یا مساوی است', - isIn: 'هست در', - isLessThan: 'کمتر است از', - isLessThanOrEqualTo: 'کمتر یا مساوی است', - isLike: 'مانند این است', - isNotEqualTo: 'برابر نیست', - isNotIn: 'در این نیست', - near: 'نزدیک', - }, - upload: { - crop: 'محصول', - cropToolDescription: - 'گوشه‌های منطقه انتخاب شده را بکشید، یک منطقه جدید رسم کنید یا مقادیر زیر را تنظیم کنید.', - dragAndDrop: 'یک سند را بکشید و رها کنید', - dragAndDropHere: 'یا یک سند را به اینجا بکشید و رها کنید', - editImage: 'ویرایش تصویر', - fileName: 'نام رسانه', - fileSize: 'حجم رسانه', - focalPoint: 'نقطه متمرکز', - focalPointDescription: - 'نقطه کانونی را مستقیماً روی پیش نمایش بکشید یا مقادیر زیر را تنظیم کنید.', - height: 'ارتفاع', - lessInfo: 'اطلاعات کمتر', - moreInfo: 'اطلاعات بیشتر', - previewSizes: 'اندازه های پیش نمایش', - selectCollectionToBrowse: 'یک مجموعه را برای مرور انتخاب کنید', - selectFile: 'برگزیدن رسانه', - setCropArea: 'تنظیم ناحیه برش', - setFocalPoint: 'تنظیم نقطه کانونی', - sizes: 'اندازه‌ها', - sizesFor: 'اندازه‌ها برای {{label}}', - width: 'پهنا', - }, - validation: { - emailAddress: 'لطفاً یک نشانی رایانامه معتبر وارد کنید.', - enterNumber: 'لطفاً یک شماره درست وارد کنید.', - fieldHasNo: 'این کادر شامل هیچ {{label}} نمی‌شود', - greaterThanMax: '{{value}} بیشتر از حداکثر مجاز برای {{label}} است که {{max}} است.', - invalidInput: 'این کادر دارای ورودی نامعتبر است.', - invalidSelection: 'این کادر دارای یک انتخاب نامعتبر است.', - invalidSelections: 'این کادر دارای انتخاب‌های نامعتبر زیر است:', - lessThanMin: '{{value}} کمتر از حداقل مجاز برای {{label}} است که {{min}} است.', - limitReached: 'محدودیت رسیده است، فقط {{max}} مورد می تواند اضافه شود.', - longerThanMin: 'ورودی باید بیش از حداقل {{minLength}} واژه باشد.', - notValidDate: '"{{value}}" یک تاریخ معتبر نیست.', - required: 'این کادر اجباری است.', - requiresAtLeast: 'این رشته حداقل نیازمند {{count}} {{label}}.', - requiresNoMoreThan: 'این رشته به بیش از {{count}} {{label}} نیاز دارد.', - requiresTwoNumbers: 'این کادر به دو عدد نیاز دارد.', - shorterThanMax: 'ورودی باید کمتر از {{maxLength}} واژه باشد.', - trueOrFalse: 'این کادر فقط می تواند به صورت true یا false باشد.', - validUploadID: 'این فیلد یک شناسه بارگذاری معتبر نیست.', - }, - version: { - aboutToPublishSelection: - 'شما در حال انتشار همه {{label}} برگزیده هستید از این کار اطمینان دارید؟', - aboutToRestore: - 'شما در شرف بازیابی این هستید {{label}} سند به ایالتی که در آن بود {{versionDate}}.', - aboutToRestoreGlobal: 'شما در حال بازگردانی کلی {{label}} در این {{versionDate}} هستید.', - aboutToRevertToPublished: - 'شما در حال بازگردانی تغییرات این رسانه به وضعیت منتشر شده آن هستید. از این کار اطمینان دارید؟', - aboutToUnpublish: 'شما در حال لغو انتشار این سند هستید، آیا از این کار اطمینان دارید؟', - aboutToUnpublishSelection: 'شما در شرف لغو انتشار {{label}} برگزیده هستید. ایا اطمینان دارید؟', - autosave: 'ذخیره خودکار', - autosavedSuccessfully: 'با موفقیت ذخیره خودکار شد.', - autosavedVersion: 'نگارش ذخیره شده خودکار', - changed: 'تغییر کرد', - compareVersion: 'مقایسه نگارش با:', - confirmPublish: 'تأیید انتشار', - confirmRevertToSaved: 'تأیید بازگردانی نگارش ذخیره شده', - confirmUnpublish: 'تأیید لغو انتشار', - confirmVersionRestoration: 'تأیید بازیابی نگارش', - currentDocumentStatus: 'جاری {{docStatus}} سند', - draft: 'پیش‌نویس', - draftSavedSuccessfully: 'پیش‌نویس با موفقیت ذخیره شد.', - lastSavedAgo: 'آخرین بار {{distance}} پیش ذخیره شد', - noFurtherVersionsFound: 'نگارش دیگری یافت نشد', - noRowsFound: 'هیچ {{label}} یافت نشد', - preview: 'پیش‌نمایش', - problemRestoringVersion: 'مشکلی در بازیابی این نگارش وجود دارد', - publish: 'انتشار', - publishChanges: 'انتشار تغییرات', - published: 'انتشار یافته', - publishing: 'انتشار', - restoreThisVersion: 'این نگارش را بازیابی کنید', - restoredSuccessfully: 'با موفقیت بازیابی شد.', - restoring: 'در حال بازیابی...', - revertToPublished: 'بازگردانی به انتشار یافته', - reverting: 'در حال بازگردانی...', - saveDraft: 'ذخیره پیش‌نویس', - selectLocales: 'زبان‌ها را برای نمایش انتخاب کنید', - selectVersionToCompare: 'نگارشی را برای مقایسه انتخاب کنید', - showLocales: 'نمایش زبان‌ها:', - showingVersionsFor: 'نمایش نگارش‌ها برای:', - status: 'وضعیت', - type: 'تایپ کنید', - unpublish: 'لغو انتشار', - unpublishing: 'در حال لغو انتشار...', - version: 'نگارش', - versionCount_many: '{{count}} نگارش‌ یافت شد', - versionCount_none: 'هیچ نگارشی یافت نشد', - versionCount_one: '{{count}} نگارش یافت شد', - versionCount_other: '{{count}} نگارش یافت شد', - versionCreatedOn: '{{version}} ساخته شده در:', - versionID: 'شناسه نگارش', - versions: 'نگارش‌ها', - viewingVersion: 'در حال مشاهده نگارش برای {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: 'در حال مشاهده نگارش‌های کلی {{entityLabel}}', - viewingVersions: 'مشاهده نگارش‌ها برای {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: 'مشاهده نگارش‌های کلی {{entityLabel}}', - }, -} diff --git a/packages/translations/src/all/fr.ts b/packages/translations/src/all/fr.ts deleted file mode 100644 index 8e2c6fca23..0000000000 --- a/packages/translations/src/all/fr.ts +++ /dev/null @@ -1,401 +0,0 @@ -export default { - authentication: { - account: 'Compte', - accountOfCurrentUser: "Compte de l'utilisateur actuel", - alreadyActivated: 'Déjà activé', - alreadyLoggedIn: 'Déjà connecté', - apiKey: 'Clé API', - backToLogin: 'Retour à la connexion', - beginCreateFirstUser: 'Pour commencer, créez votre premier utilisateur.', - changePassword: 'Changer le mot de passe', - checkYourEmailForPasswordReset: - 'Vérifiez votre e-mail, nous vous avons envoyé un lien qui vous permettra de réinitialiser votre mot de passe en toute sécurité.', - confirmGeneration: 'Confirmer la génération', - confirmPassword: 'Confirmez le mot de passe', - createFirstUser: 'Créer le premier utilisateur', - emailNotValid: "L'adresse e-mail fourni n'est pas valide", - emailSent: 'E-mail envoyé', - enableAPIKey: 'Activer la clé API', - failedToUnlock: 'Déverrouillage échoué', - forceUnlock: 'Forcer le déverrouillage', - forgotPassword: 'Mot de passe oublié', - forgotPasswordEmailInstructions: - 'Veuillez saisir votre e-mail ci-dessous. Vous recevrez un e-mail avec des instructions concernant comment réinitialiser votre mot de passe.', - forgotPasswordQuestion: 'Mot de passe oublié ?', - generate: 'Générer', - generateNewAPIKey: 'Générer une nouvelle clé API', - generatingNewAPIKeyWillInvalidate: - "La génération d'une nouvelle clé API <1>invalidera la clé précédente. Êtes-vous sûr de vouloir continuer ?", - lockUntil: "Verrouiller jusqu'à", - logBackIn: 'Se reconnecter', - logOut: 'Se déconnecter', - loggedIn: - "Pour vous connecter en tant qu'un autre utilisateur, vous devez d'abord vous <0>déconnecter.", - loggedInChangePassword: - 'Pour changer votre mot de passe, rendez-vous sur votre <0>compte puis modifiez-y votre mot de passe.', - loggedOutInactivity: "Vous avez été déconnecté pour cause d'inactivité.", - loggedOutSuccessfully: 'Vous avez été déconnecté avec succès.', - login: 'Se connecter', - loginAttempts: 'Tentatives de connexion', - loginUser: "Connecter l'utilisateur", - loginWithAnotherUser: - "Pour vous connecter en tant qu'un autre utilisateur, vous devez d'abord vous <0>déconnecter.", - logout: 'Se déconnecter', - logoutUser: "Déconnecter l'utilisateur", - newAPIKeyGenerated: 'Nouvelle clé API générée.', - newAccountCreated: - 'Un nouveau compte vient d\'être créé pour vous permettre d\'accéder {{serverURL}}. Veuillez cliquer sur le lien suivant ou collez l\'URL ci-dessous dans votre navigateur pour vérifier votre adresse e-mail: {{verificationURL}}
    . Après avoir vérifié votre adresse e-mail, vous pourrez vous connecter avec succès.', - newPassword: 'Nouveau mot de passe', - resetPassword: 'Réinitialiser le mot de passe', - resetPasswordExpiration: "Réinitialiser l'expiration du mot de passe", - resetPasswordToken: 'Réinitialiser le jeton de mot de passe', - resetYourPassword: 'Réinitialisez votre mot de passe', - stayLoggedIn: 'Rester connecté', - successfullyUnlocked: 'Déverrouillé avec succès', - unableToVerify: 'Vérification échoué', - verified: 'Vérifié', - verifiedSuccessfully: 'Vérifié avec succès', - verify: 'Vérifier', - verifyUser: "Vérifier l'utilisateur", - verifyYourEmail: 'Vérifiez votre e-mail', - youAreInactive: - "Vous n'avez pas été actif depuis un moment alors vous serez bientôt automatiquement déconnecté pour votre propre sécurité. Souhaitez-vous rester connecté ?", - youAreReceivingResetPassword: - "Vous recevez ceci parce que vous (ou quelqu'un d'autre) avez demandé la réinitialisation du mot de passe de votre compte. Veuillez cliquer sur le lien suivant ou le coller dans votre navigateur pour terminer le processus :", - youDidNotRequestPassword: - "Si vous ne l'avez pas demandé, veuillez ignorer cet e-mail et votre mot de passe restera inchangé.", - }, - error: { - accountAlreadyActivated: 'Ce compte a déjà été activé.', - autosaving: "Un problème est survenu lors de l'enregistrement automatique de ce document.", - correctInvalidFields: 'Veuillez corriger les champs invalides.', - deletingFile: "Une erreur s'est produite lors de la suppression du fichier.", - deletingTitle: - "Une erreur s'est produite lors de la suppression de {{title}}. Veuillez vérifier votre connexion puis réessayer.", - emailOrPasswordIncorrect: "L'adresse e-mail ou le mot de passe fourni est incorrect.", - followingFieldsInvalid_one: "Le champ suivant n'est pas valide :", - followingFieldsInvalid_other: 'Les champs suivants ne sont pas valides :', - incorrectCollection: 'Collection incorrecte', - invalidFileType: 'Type de fichier invalide', - invalidFileTypeValue: 'Type de fichier invalide : {{value}}', - loadingDocument: - 'Un problème est survenu lors du chargement du document qui a pour identifiant {{id}}.', - missingEmail: 'E-mail manquant.', - missingIDOfDocument: "Il manque l'identifiant du document à mettre à jour.", - missingIDOfVersion: "Il manque l'identifiant de la version.", - missingRequiredData: 'Données requises manquantes.', - noFilesUploaded: "Aucun fichier n'a été téléversé.", - noMatchedField: 'Aucun champ correspondant n\'a été trouvé pour "{{label}}"', - noUser: 'Aucun utilisateur', - notAllowedToAccessPage: "Vous n'êtes pas autorisé à accéder à cette page.", - notAllowedToPerformAction: "Vous n'êtes pas autorisé à effectuer cette action.", - notFound: "La ressource demandée n'a pas été trouvée.", - previewing: "Un problème est survenu lors de l'aperçu de ce document.", - problemUploadingFile: 'Il y a eu un problème lors du téléversement du fichier.', - tokenInvalidOrExpired: "Le jeton n'est soit pas valide ou a expiré.", - unPublishingDocument: - "Un problème est survenu lors de l'annulation de la publication de ce document.", - unableToDeleteCount: 'Impossible de supprimer {{count}} sur {{total}} {{label}}.', - unableToUpdateCount: 'Impossible de mettre à jour {{count}} sur {{total}} {{label}}.', - unauthorized: 'Non autorisé, vous devez être connecté pour effectuer cette demande.', - unknown: "Une erreur inconnue s'est produite.", - unspecific: 'Une erreur est survenue.', - userLocked: - "Cet utilisateur est verrouillé en raison d'un trop grand nombre de tentatives de connexion infructueuses.", - valueMustBeUnique: 'La valeur doit être unique', - verificationTokenInvalid: "Le jeton de vérification n'est pas valide.", - }, - fields: { - addLabel: 'Ajouter {{label}}', - addLink: 'Ajouter un Lien', - addNew: 'Ajouter nouveau ou nouvelle', - addNewLabel: 'Ajouter nouveau ou nouvelle {{label}}', - addRelationship: 'Ajouter une relation', - addUpload: 'Ajouter le téléchargement', - block: 'bloc', - blockType: 'Type de bloc', - blocks: 'blocs', - chooseBetweenCustomTextOrDocument: - 'Choisissez entre saisir une URL personnalisée ou créer un lien vers un autre document.', - chooseDocumentToLink: 'Choisissez un document vers lequel établir un lien', - chooseFromExisting: 'Choisir parmi les existant(e)s', - chooseLabel: 'Choisir un(e) {{label}}', - collapseAll: 'Tout réduire', - customURL: 'URL personnalisée', - editLabelData: 'Modifier les données de ou du {{label}}', - editLink: 'Modifier le lien', - editRelationship: 'Modifier la relation', - enterURL: 'Entrez une URL', - internalLink: 'Lien interne', - itemsAndMore: '{{items}} et {{count}} de plus', - labelRelationship: 'Relation de ou du {{label}} ', - latitude: 'Latitude', - linkType: 'Type de lien', - linkedTo: 'Lié à <0>{{label}}', - longitude: 'Longitude', - newLabel: 'Nouveau ou nouvelle {{label}}', - openInNewTab: 'Ouvrir dans un nouvel onglet', - passwordsDoNotMatch: 'Les mots de passe ne correspondent pas.', - relatedDocument: 'Document connexe', - relationTo: 'Lié à', - removeRelationship: 'Supprimer la relation', - removeUpload: 'Supprimer le Téléversement', - saveChanges: 'Sauvegarder les modifications', - searchForBlock: 'Rechercher un bloc', - selectExistingLabel: 'Sélectionnez {{label}} existant', - selectFieldsToEdit: 'Sélectionnez les champs à modifier', - showAll: 'Afficher tout', - swapRelationship: 'Changer de relation', - swapUpload: 'Changer de Fichier', - textToDisplay: 'Texte à afficher', - toggleBlock: 'Bloc bascule', - uploadNewLabel: 'Téléverser un(e) nouveau ou nouvelle {{label}}', - }, - general: { - aboutToDelete: - 'Vous êtes sur le point de supprimer ce ou cette {{label}} <1>{{title}}. Êtes-vous sûr ?', - aboutToDeleteCount_many: 'Vous êtes sur le point de supprimer {{count}} {{label}}', - aboutToDeleteCount_one: 'Vous êtes sur le point de supprimer {{count}} {{label}}', - aboutToDeleteCount_other: 'Vous êtes sur le point de supprimer {{count}} {{label}}', - addBelow: 'Ajoutez ci-dessous', - addFilter: 'Ajouter un filtre', - adminTheme: "Thème d'administration", - and: 'Et', - applyChanges: 'Appliquer les modifications', - ascending: 'Ascendant', - automatic: 'Automatique', - backToDashboard: 'Retour au tableau de bord', - cancel: 'Annuler', - changesNotSaved: - "Vos modifications n'ont pas été enregistrées. Vous perdrez vos modifications si vous quittez maintenant.", - close: 'Fermer', - collapse: 'Réduire', - collections: 'Collections', - columnToSort: 'Colonne à trier', - columns: 'Colonnes', - confirm: 'Confirmer', - confirmDeletion: 'Confirmer la suppression', - confirmDuplication: 'Confirmer la duplication', - copied: 'Copié', - copy: 'Copie', - create: 'Créer', - createNew: 'Créer un(e) nouveau ou nouvelle', - createNewLabel: 'Créer un(e) nouveau ou nouvelle {{label}}', - created: 'Créé(e)', - createdAt: 'Créé(e) à', - creating: 'création en cours', - creatingNewLabel: "Création d'un(e) nouveau ou nouvelle {{label}}", - dark: 'Nuit', - dashboard: 'Tableau de bord', - delete: 'Supprimer', - deletedCountSuccessfully: '{{count}} {{label}} supprimé avec succès.', - deletedSuccessfully: 'Supprimé(e) avec succès.', - deleting: 'Suppression en cours...', - descending: 'Descendant(e)', - deselectAllRows: 'Désélectionner toutes les lignes', - duplicate: 'Dupliquer', - duplicateWithoutSaving: 'Dupliquer sans enregistrer les modifications', - edit: 'Éditer', - editLabel: 'Modifier {{label}}', - editing: 'Modification en cours', - editingLabel_many: 'Modification des {{count}} {{label}}', - editingLabel_one: 'Modification de {{count}} {{label}}', - editingLabel_other: 'Modification des {{count}} {{label}}', - email: 'E-mail', - emailAddress: 'Adresse e-mail', - enterAValue: 'Entrez une valeur', - error: 'Erreur', - errors: 'Erreurs', - fallbackToDefaultLocale: 'Retour à la locale par défaut', - filter: 'Filtrer', - filterWhere: 'Filtrer {{label}} où', - filters: 'Filtres', - globals: 'Globals(es)', - language: 'Langue', - lastModified: 'Dernière modification', - leaveAnyway: 'Quitter quand même', - leaveWithoutSaving: 'Quitter sans sauvegarder', - light: 'Lumière ou Jour', - livePreview: 'Aperçu', - loading: 'Chargement en cours', - locale: 'Paramètres régionaux', - locales: 'Paramètres régionaux', - menu: 'Menu', - moveDown: 'Déplacer vers le bas', - moveUp: 'Déplacer vers le haut', - newPassword: 'Nouveau mot de passe', - noFiltersSet: 'Aucun filtre défini', - noLabel: '', - noOptions: 'Aucune option', - noResults: - "Aucun(e) {{label}} trouvé(e). Soit aucun(e) {{label}} n'existe encore, soit aucun(e) ne correspond aux filtres que vous avez spécifiés ci-dessus", - noValue: 'Aucune valeur', - none: 'Aucun(e)', - notFound: 'Pas trouvé', - nothingFound: "Rien n'a été trouvé", - of: 'de', - open: 'Ouvrir', - or: 'ou', - order: 'Ordre', - pageNotFound: 'Page non trouvée', - password: 'Mot de passe', - payloadSettings: 'Paramètres de Payload', - perPage: 'Par Page: {{limit}}', - remove: 'Retirer', - reset: 'Réinitialiser', - row: 'Ligne', - rows: 'Lignes', - save: 'Sauvegarder', - saving: 'Sauvegarde en cours...', - searchBy: 'Rechercher par {{label}}', - selectAll: 'Tout sélectionner {{count}} {{label}}', - selectAllRows: 'Sélectionnez toutes les lignes', - selectValue: 'Sélectionnez une valeur', - selectedCount: '{{count}} {{label}} sélectionné', - showAllLabel: 'Afficher tous les {{label}}', - sorryNotFound: 'Désolé, rien ne correspond à votre demande.', - sort: 'Trier', - sortByLabelDirection: 'Trier par {{label}} {{direction}}', - stayOnThisPage: 'Rester sur cette page', - submissionSuccessful: 'Soumission réussie.', - submit: 'Soumettre', - successfullyCreated: '{{label}} créé(e) avec succès.', - successfullyDuplicated: '{{label}} dupliqué(e) avec succès.', - thisLanguage: 'Français', - titleDeleted: '{{label}} "{{title}}" supprimé(e) avec succès.', - unauthorized: 'Non autorisé', - unsavedChangesDuplicate: - 'Vous avez des changements non enregistrés. Souhaitez-vous continuer la duplication ?', - untitled: 'Sans titre', - updatedAt: 'Modifié le', - updatedCountSuccessfully: '{{count}} {{label}} mis à jour avec succès.', - updatedSuccessfully: 'Mis à jour avec succés.', - updating: 'Mise à jour', - uploading: 'Téléchargement', - user: 'Utilisateur', - users: 'Utilisateurs', - value: 'Valeur', - welcome: 'Bienvenu(e)', - }, - operators: { - contains: 'contient', - equals: 'est égal à', - exists: 'existe', - isGreaterThan: 'est supérieur à', - isGreaterThanOrEqualTo: 'est supérieur ou égal à', - isIn: 'est dans', - isLessThan: 'est inférieur à', - isLessThanOrEqualTo: 'est inférieur ou égal à', - isLike: 'est comme', - isNotEqualTo: "n'est pas égal à", - isNotIn: "n'est pas dans", - near: 'proche', - }, - upload: { - crop: 'Récolte', - cropToolDescription: - 'Faites glisser les coins de la zone sélectionnée, dessinez une nouvelle zone ou ajustez les valeurs ci-dessous.', - dragAndDrop: 'Glisser-déposer un fichier', - dragAndDropHere: 'ou glissez-déposez un fichier ici', - editImage: "Modifier l'image", - fileName: 'Nom du fichier', - fileSize: 'Taille du fichier', - focalPoint: 'Point focal', - focalPointDescription: - "Faites glisser le point focal directement sur l'aperçu ou ajustez les valeurs ci-dessous.", - height: 'Hauteur', - lessInfo: "Moins d'infos", - moreInfo: "Plus d'infos", - previewSizes: "Tailles d'aperçu", - selectCollectionToBrowse: 'Sélectionnez une collection à parcourir', - selectFile: 'Sélectionnez un fichier', - setCropArea: 'Définir la zone de recadrage', - setFocalPoint: 'Définir le point focal', - sizes: 'Tailles', - sizesFor: 'Tailles pour {{label}}', - width: 'Largeur', - }, - validation: { - emailAddress: "S'il vous plaît, veuillez entrer une adresse e-mail valide.", - enterNumber: "S'il vous plait, veuillez entrer un nombre valide.", - fieldHasNo: "Ce champ n'a pas de {{label}}", - greaterThanMax: '{{value}} est supérieur au max autorisé {{label}} de {{max}}.', - invalidInput: 'Ce champ a une entrée invalide.', - invalidSelection: 'Ce champ a une sélection invalide.', - invalidSelections: 'Ce champ contient des sélections invalides suivantes :', - lessThanMin: '{{value}} est inférieur au min autorisé {{label}} de {{min}}.', - limitReached: 'Limite atteinte, seulement {{max}} éléments peuvent être ajoutés.', - longerThanMin: - 'Cette valeur doit être supérieure à la longueur minimale de {{minLength}} caractères.', - notValidDate: '"{{value}}" n\'est pas une date valide.', - required: 'Ce champ est requis.', - requiresAtLeast: 'Ce champ doit avoir au moins {{count}} {{label}}.', - requiresNoMoreThan: 'Ce champ ne doit pas avoir plus de {{count}} {{label}}.', - requiresTwoNumbers: 'Ce champ doit avoir deux chiffres.', - shorterThanMax: - 'Cette valeur doit être inférieure à la longueur maximale de {{maxLength}} caractères.', - trueOrFalse: "Ce champ ne peut être égal qu'à vrai ou faux.", - validUploadID: "Ce champ n'est pas un valide identifiant de fichier.", - }, - version: { - aboutToPublishSelection: - 'Vous êtes sur le point de publier tous les {{label}} de la sélection. Es-tu sûr?', - aboutToRestore: - "Vous êtes sur le point de restaurer le document {{label}} à l'état où il se trouvait le {{versionDate}}.", - aboutToRestoreGlobal: - "Vous êtes sur le point de restaurer le ou la {{label}} global(e) à l'état où il ou elle se trouvait le {{versionDate}}.", - aboutToRevertToPublished: - 'Vous êtes sur le point de rétablir les modifications apportées à ce document à la version publiée. Êtes-vous sûr ?', - aboutToUnpublish: - "Vous êtes sur le point d'annuler la publication de ce document. Êtes-vous sûr ?", - aboutToUnpublishSelection: - 'Vous êtes sur le point de dépublier tous les {{label}} de la sélection. Es-tu sûr?', - autosave: 'Enregistrement automatique', - autosavedSuccessfully: 'Enregistrement automatique réussi.', - autosavedVersion: 'Version enregistrée automatiquement', - changed: 'Modifié', - compareVersion: 'Comparez cette version à :', - confirmPublish: 'Confirmer la publication', - confirmRevertToSaved: 'Confirmer la restauration', - confirmUnpublish: "Confirmer l'annulation", - confirmVersionRestoration: 'Confirmer la restauration de la version', - currentDocumentStatus: 'Document {{docStatus}} actuel', - draft: 'Brouillon', - draftSavedSuccessfully: 'Brouillon enregistré avec succès.', - lastSavedAgo: 'Dernière sauvegarde il y a {{distance}}', - noFurtherVersionsFound: 'Aucune autre version trouvée', - noRowsFound: 'Aucun(e) {{label}} trouvé(e)', - preview: 'Aperçu', - problemRestoringVersion: 'Un problème est survenu lors de la restauration de cette version', - publish: 'Publier', - publishChanges: 'Publier les modifications', - published: 'Publié', - publishing: 'Publication', - restoreThisVersion: 'Restaurer cette version', - restoredSuccessfully: 'Restauré(e) avec succès.', - restoring: 'Restauration en cours...', - revertToPublished: 'Republier', - reverting: 'Republication en cours...', - saveDraft: 'Enregistrer le brouillon', - selectLocales: 'Sélectionnez les paramètres régionaux à afficher', - selectVersionToCompare: 'Sélectionnez une version à comparer', - showLocales: 'Afficher les paramètres régionaux :', - showingVersionsFor: 'Affichage des versions pour :', - status: 'Statut', - type: 'Type', - unpublish: 'Annuler la publication', - unpublishing: 'Annulation en cours...', - version: 'Version', - versionCount_many: '{{count}} versions trouvées', - versionCount_none: 'Aucune version trouvée', - versionCount_one: '{{count}} version trouvée', - versionCount_other: '{{count}} versions trouvées', - versionCreatedOn: '{{version}} créé(e) le :', - versionID: 'Identifiant de la version', - versions: 'Versions', - viewingVersion: 'Affichage de la version de ou du {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: 'Affichage de la version globale de ou du {{entityLabel}}', - viewingVersions: 'Affichage des versions de ou du {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: 'Affichage des versions globales de ou du {{entityLabel}}', - }, -} diff --git a/packages/translations/src/all/hr.ts b/packages/translations/src/all/hr.ts deleted file mode 100644 index eee54265e7..0000000000 --- a/packages/translations/src/all/hr.ts +++ /dev/null @@ -1,388 +0,0 @@ -export default { - authentication: { - account: 'Račun', - accountOfCurrentUser: 'Račun od trenutnog korisnika', - alreadyActivated: 'Već aktivirano', - alreadyLoggedIn: 'Već prijavljen', - apiKey: 'API ključ', - backToLogin: 'Nazad na prijavu', - beginCreateFirstUser: 'Za početak, kreiraj svog prvog korisnika.', - changePassword: 'Promjeni lozinku', - checkYourEmailForPasswordReset: - 'Provjerite email s poveznicom koja će Vam omogućiti sigurnu promjenu lozinke.', - confirmGeneration: 'Potvrdi kreiranje', - confirmPassword: 'Potvrdi lozinku', - createFirstUser: 'Kreiraj prvog korisnika', - emailNotValid: 'Email nije ispravan', - emailSent: 'Email poslan', - enableAPIKey: 'Omogući API ključ', - failedToUnlock: 'Neuspješno otključavanje.', - forceUnlock: 'Prisilno otključaj', - forgotPassword: 'Zaboravljena lozinka', - forgotPasswordEmailInstructions: - 'Molim unesite svoj email. Primit ćete poruku s uputama za ponovno postavljanje lozinke.', - forgotPasswordQuestion: 'Zaboravljena lozinka?', - generate: 'Generiraj', - generateNewAPIKey: 'Generiraj novi API ključ', - generatingNewAPIKeyWillInvalidate: - 'Generiranje novog API ključa će <1>poništiti prethodni ključ. Jeste li sigurni da želite nastaviti?', - lockUntil: 'Zaključaj dok', - logBackIn: 'Ponovna prijava', - logOut: 'Odjava', - loggedIn: 'Za prijavu s drugim korisničkim računom potrebno je prvo <0>odjaviti se', - loggedInChangePassword: - 'Da biste promijenili lozinku, otvorite svoj <0>račun i promijenite lozinku tamo.', - loggedOutInactivity: 'Odjavljeni se zbog neaktivnosti.', - loggedOutSuccessfully: 'Uspješno ste odjavljeni..', - login: 'Prijava', - loginAttempts: 'Pokušaji prijave', - loginUser: 'Prijava korisnika', - loginWithAnotherUser: - 'Za prijavu s drugim korisničkim računom potrebno je prvo <0>odjaviti se', - logout: 'Odjava', - logoutUser: 'Odjava korisnika', - newAPIKeyGenerated: 'Novi API ključ generiran.', - newAccountCreated: - 'Novi račun je kreiran. Pristupite računu klikom na {{serverURL}}. Molim kliknite na sljedeći link ili zalijepite URL, koji se nalazi ispod, u preglednik da biste potvrdili svoj email: {{verificationURL}}
    Nakon što potvrdite email, moći ćete se prijaviti.', - newPassword: 'Nova lozinka', - resetPassword: 'Restartiranje lozinke', - resetPasswordExpiration: 'Restartiranje roka trajanja lozinke', - resetPasswordToken: 'Restartiranje lozinke tokena', - resetYourPassword: 'Restartiraj svoju lozinku', - stayLoggedIn: 'Ostani prijavljen', - successfullyUnlocked: 'Uspješno otključano', - unableToVerify: 'Nije moguće potvrditi', - verified: 'Potvrđeno', - verifiedSuccessfully: 'Uspješno potvrđeno', - verify: 'Potvrdi', - verifyUser: 'Potvrdi korisnika', - verifyYourEmail: 'Potvrdi svoj email', - youAreInactive: - 'Neaktivni ste neko vrijeme i uskoro ćete biti automatski odjavljeni zbog vlastite sigurnosti. Želite li ostati prijavljeni?', - youAreReceivingResetPassword: - 'Primili ste ovo jer ste Vi (ili netko drugi) zatražili promjenu lozinke za Vaš račun. Molim kliknite na poveznicu ili zalijepite ovo u svoje preglednik da biste završili proces:', - youDidNotRequestPassword: - 'Ako niste zatražili ovo, molim ignorirajte ovaj email i Vaša lozinka ostat će nepromijenjena.', - }, - error: { - accountAlreadyActivated: 'Ovaj račun je već aktiviran.', - autosaving: 'Nastao je problem pri automatskom spremanju ovog dokumenta.', - correctInvalidFields: 'Molim ispravite nevaljana polja.', - deletingFile: 'Dogodila se pogreška pri brisanju datoteke.', - deletingTitle: - 'Dogodila se pogreška pri brisanju {{title}}. Molim provjerite svoju internetsku vezu i pokušajte ponovno.', - emailOrPasswordIncorrect: 'Email ili lozinka netočni.', - followingFieldsInvalid_one: ' Ovo polje je nevaljano:', - followingFieldsInvalid_other: 'Ova polja su nevaljana:', - incorrectCollection: 'Nevaljana kolekcija', - invalidFileType: 'Nevaljan tip datoteke', - invalidFileTypeValue: 'Nevaljan tip datoteke: {{value}}', - loadingDocument: 'Pojavio se problem pri učitavanju dokumenta čiji je ID {{id}}.', - missingEmail: 'Nedostaje email.', - missingIDOfDocument: 'Nedostaje ID dokumenta da bi se ažurirao.', - missingIDOfVersion: 'Nedostaje ID verzije.', - missingRequiredData: 'Nedostaju obvezni podaci.', - noFilesUploaded: 'Nijedna datoteka nije učitana.', - noMatchedField: 'Nema podudarajućih polja za "{{label}}"', - noUser: 'Nema korisnika', - notAllowedToAccessPage: 'Nemate dopuštenje pristupiti ovoj stranici.', - notAllowedToPerformAction: 'Nemate dopuštenje izvršiti ovu radnju.', - notFound: 'Traženi resurs nije pronađen.', - previewing: 'Pojavio se problem pri pregledavanju ovog dokumenta.', - problemUploadingFile: 'Pojavio se problem pri učitavanju datoteke.', - tokenInvalidOrExpired: 'Token je nevaljan ili je istekao.', - unPublishingDocument: 'Pojavio se problem pri poništavanju objave ovog dokumenta.', - unableToDeleteCount: 'Nije moguće izbrisati {{count}} od {{total}} {{label}}.', - unableToUpdateCount: 'Nije moguće ažurirati {{count}} od {{total}} {{label}}.', - unauthorized: 'Neovlašten, morate biti prijavljeni da biste uputili ovaj zahtjev.', - unknown: 'Došlo je do nepoznate pogreške.', - unspecific: 'Došlo je do pogreške.', - userLocked: 'Ovaj korisnik je zaključan zbog previše neuspješnih pokušaja prijave.', - valueMustBeUnique: 'Vrijednost mora biti jedinstvena.', - verificationTokenInvalid: 'Verifikacijski token je nevaljan.', - }, - fields: { - addLabel: 'Dodaj {{label}}', - addLink: 'Dodaj poveznicu', - addNew: 'Dodaj novi', - addNewLabel: 'Dodaj novi {{label}}', - addRelationship: 'Dodaj odnos', - addUpload: 'Dodaj učitavanje', - block: 'blokiranje', - blockType: 'Vrsta blokiranja', - blocks: 'blokiranja', - chooseBetweenCustomTextOrDocument: - 'Izaberite između unošenja prilagođenog teksta URL ili poveznice na drugi dokument.', - chooseDocumentToLink: 'Odaberite dokument koji želite povezati.', - chooseFromExisting: 'Odaberite iz postojećih.', - chooseLabel: 'Odaberite {{label}}', - collapseAll: 'Sažmi sve', - customURL: 'Prilagođeni URL', - editLabelData: 'Uredi {{label}} podatke', - editLink: 'Uredi poveznicu', - editRelationship: 'Uredi odnos', - enterURL: 'Unesi URL', - internalLink: 'Interna poveznika', - itemsAndMore: '{{items}} i {{count}} više', - labelRelationship: '{{label}} veza', - latitude: 'Zemljopisna širina', - linkType: 'Tip poveznce', - linkedTo: 'Povezabi sa <0>{{label}}', - longitude: 'Zemljopisna dužina', - newLabel: 'Novo {{label}}', - openInNewTab: 'Otvori u novoj kartici.', - passwordsDoNotMatch: 'Lozinke nisu iste.', - relatedDocument: 'Povezani dokument', - relationTo: 'Veza sa', - removeRelationship: 'Ukloni vezu', - removeUpload: 'Ukloni prijenos', - saveChanges: 'Spremi promjene', - searchForBlock: 'Potraži blok', - selectExistingLabel: 'Odaberi postojeće{{label}}', - selectFieldsToEdit: 'Odaberite polja za uređivanje', - showAll: 'Pokaži sve', - swapRelationship: 'Zamijeni vezu', - swapUpload: 'Zamijeni prijenos', - textToDisplay: 'Tekst za prikaz', - toggleBlock: 'Prebaci blok', - uploadNewLabel: 'Učitaj novi {{label}}', - }, - general: { - aboutToDelete: 'Izbrisat ćete {{label}} <1>{{title}}. Jeste li sigurni?', - aboutToDeleteCount_many: 'Upravo ćete izbrisati {{count}} {{label}}', - aboutToDeleteCount_one: 'Upravo ćete izbrisati {{count}} {{label}}', - aboutToDeleteCount_other: 'Upravo ćete izbrisati {{count}} {{label}}', - addBelow: 'Dodaj ispod', - addFilter: 'Dodaj filter', - adminTheme: 'Administratorska tema', - and: 'I', - applyChanges: 'Primijeni promjene', - ascending: 'Uzlazno', - automatic: 'Automatsko', - backToDashboard: 'Natrag na nadzornu ploču', - cancel: 'Otkaži', - changesNotSaved: 'Vaše promjene nisu spremljene. Ako izađete sada, izgubit ćete promjene.', - close: 'Zatvori', - collapse: 'Sažmi', - collections: 'Kolekcije', - columnToSort: 'Stupac za sortiranje', - columns: 'Stupci', - confirm: 'Potvrdi', - confirmDeletion: 'Potvrdi brisanje', - confirmDuplication: 'Potvrdi duplikaciju', - copied: 'Kopirano', - copy: 'Kopiraj', - create: 'Kreiraj', - createNew: 'Kreiraj novo', - createNewLabel: 'Kreiraj novo {{label}}', - created: 'Kreirano', - createdAt: 'Kreirano u', - creating: 'Kreira se', - creatingNewLabel: 'Kreiranje novog {{label}}', - dark: 'Tamno', - dashboard: 'Nadzorna ploča', - delete: 'Obriši', - deletedCountSuccessfully: 'Uspješno izbrisano {{count}} {{label}}.', - deletedSuccessfully: 'Uspješno obrisano.', - deleting: 'Brisanje...', - descending: 'Silazno', - deselectAllRows: 'Odznači sve redove', - duplicate: 'Duplikat', - duplicateWithoutSaving: 'Dupliciraj bez spremanja promjena', - edit: 'Uredi', - editLabel: 'Uredi {{label}}', - editing: 'Uređivanje', - editingLabel_many: 'Uređivanje {{count}} {{label}}', - editingLabel_one: 'Uređivanje {{count}} {{label}}', - editingLabel_other: 'Uređivanje {{count}} {{label}}', - email: 'Email', - emailAddress: 'Email adresa', - enterAValue: 'Unesi vrijednost', - error: 'Greška', - errors: 'Greške', - fallbackToDefaultLocale: 'Vraćanje na zadani jezik', - filter: 'Filter', - filterWhere: 'Filter {{label}} gdje', - filters: 'Filteri', - globals: 'Globali', - language: 'Jezik', - lastModified: 'Zadnja promjena', - leaveAnyway: 'Svejedno napusti', - leaveWithoutSaving: 'Napusti bez spremanja', - light: 'Svijetlo', - livePreview: 'Pregled', - loading: 'Učitavanje', - locale: 'Jezik', - locales: 'Prijevodi', - menu: 'Izbornik', - moveDown: 'Pomakni dolje', - moveUp: 'Pomakni gore', - newPassword: 'Nova lozinka', - noFiltersSet: 'Nema postavljenih filtera', - noLabel: '', - noOptions: 'Nema opcija', - noResults: - 'Nema pronađenih {{label}}. Ili {{label}} još uvijek ne postoji ili nijedan od odgovara postavljenim filterima.', - noValue: 'Bez vrijednosti', - none: 'Nijedan', - notFound: 'Nije pronađeno', - nothingFound: 'Ništa nije pronađeno', - of: 'Od', - open: 'Otvori', - or: 'Ili', - order: 'Poredak', - pageNotFound: 'Stranica nije pronađena', - password: 'Lozinka', - payloadSettings: 'Payload postavke', - perPage: 'Po stranici: {{limit}}', - remove: 'Ukloni', - reset: 'Ponovno postavi', - row: 'Red', - rows: 'Redovi', - save: 'Spremi', - saving: 'Spremanje...', - searchBy: 'Traži po {{label}}', - selectAll: 'Odaberite sve {{count}} {{label}}', - selectAllRows: 'Odaberite sve redove', - selectValue: 'Odaberi vrijednost', - selectedCount: '{{count}} {{label}} odabrano', - showAllLabel: 'Prikaži sve {{label}}', - sorryNotFound: 'Nažalost, ne postoji ništa što odgovara vašem zahtjevu.', - sort: 'Sortiraj', - sortByLabelDirection: 'Sortiraj prema {{label}} {{direction}}', - stayOnThisPage: 'Ostani na ovoj stranici', - submissionSuccessful: 'Uspješno slanje', - submit: 'Podnesi', - successfullyCreated: '{{label}} uspješno kreirano.', - successfullyDuplicated: '{{label}} uspješno duplicirano.', - thisLanguage: 'Hrvatski', - titleDeleted: '{{label}} "{{title}}" uspješno obrisano.', - unauthorized: 'Neovlašteno', - unsavedChangesDuplicate: 'Imate nespremljene promjene. Želite li nastaviti s dupliciranjem?', - untitled: 'Bez naslova', - updatedAt: 'Ažurirano u', - updatedCountSuccessfully: 'Uspješno ažurirano {{count}} {{label}}.', - updatedSuccessfully: 'Uspješno ažurirano.', - updating: 'Ažuriranje', - uploading: 'Prijenos', - user: 'Korisnik', - users: 'Korisnici', - value: 'Attribute', - welcome: 'Dobrodošli', - }, - operators: { - contains: 'sadrži', - equals: 'jednako', - exists: 'postoji', - isGreaterThan: 'je veće od', - isGreaterThanOrEqualTo: 'je veće od ili jednako', - isIn: 'je u', - isLessThan: 'manje je od', - isLessThanOrEqualTo: 'manje je ili jednako', - isLike: 'je kao', - isNotEqualTo: 'nije jednako', - isNotIn: 'nije unutra', - near: 'blizu', - }, - upload: { - crop: 'Usjev', - cropToolDescription: - 'Povucite kutove odabranog područja, nacrtajte novo područje ili prilagodite vrijednosti ispod.', - dragAndDrop: 'Povucite i ispustite datoteku', - dragAndDropHere: 'ili povucite i ispustite datoteku ovdje', - editImage: 'Uredi sliku', - fileName: 'Ime datoteke', - fileSize: 'Veličina datoteke', - focalPoint: 'Središnja točka', - focalPointDescription: - 'Povucite središnju točku izravno na pregledu ili prilagodite vrijednosti ispod.', - height: 'Visina', - lessInfo: 'Manje informacija', - moreInfo: 'Više informacija', - previewSizes: 'Veličine pregleda', - selectCollectionToBrowse: 'Odaberite kolekciju za pregled', - selectFile: 'Odaberite datoteku', - setCropArea: 'Postavi područje usjeva', - setFocalPoint: 'Postavi fokusnu točku', - sizes: 'Veličine', - sizesFor: 'Veličine za {{label}}', - width: 'Širina', - }, - validation: { - emailAddress: 'Molim unestie valjanu email adresu.', - enterNumber: 'Molim unesite valjani broj.', - fieldHasNo: 'Ovo polje nema {{label}}', - greaterThanMax: '{{value}} exceeds the maximum allowable {{label}} limit of {{max}}.', - invalidInput: 'Ovo polje ima nevaljan unos.', - invalidSelection: 'Ovo polje ima nevaljan odabir.', - invalidSelections: 'Ovo polje ima sljedeće nevaljane odabire:', - lessThanMin: '{{value}} is below the minimum allowable {{label}} limit of {{min}}.', - limitReached: 'Dosegnut je limit, može se dodati samo {{max}} stavki.', - longerThanMin: 'Ova vrijednost mora biti duža od minimalne dužine od {{minLength}} znakova', - notValidDate: '"{{value}}" nije valjan datum.', - required: 'Ovo polje je obvezno.', - requiresAtLeast: 'Ovo polje zahtjeva minimalno {{count}} {{label}}.', - requiresNoMoreThan: 'Ovo polje zahtjeva ne više od {{count}} {{label}}.', - requiresTwoNumbers: 'Ovo polje zahtjeva dva broja.', - shorterThanMax: 'Ova vrijednost mora biti kraća od maksimalne dužine od {{maxLength}} znakova', - trueOrFalse: 'Ovo polje može biti samo točno ili netočno', - validUploadID: 'Ovo polje nije valjani ID prijenosa.', - }, - version: { - aboutToPublishSelection: 'Upravo ćete objaviti sve {{label}} u izboru. Jesi li siguran?', - aboutToRestore: 'Vratit ćete {{label}} dokument u stanje u kojem je bio {{versionDate}}', - aboutToRestoreGlobal: 'Vratit ćete globalni {{label}} u stanje u kojem je bio {{versionDate}}.', - aboutToRevertToPublished: - 'Vratit ćete promjene u dokumentu u objavljeno stanje. Jeste li sigurni? ', - aboutToUnpublish: 'Poništit ćete objavu ovog dokumenta. Jeste li sigurni?', - aboutToUnpublishSelection: - 'Upravo ćete poništiti objavu svih {{label}} u odabiru. Jesi li siguran?', - autosave: 'Automatsko spremanje', - autosavedSuccessfully: 'Automatsko spremanje uspješno.', - autosavedVersion: 'Verzija automatski spremljenog dokumenta', - changed: 'Promijenjeno', - compareVersion: 'Usporedi verziju sa:', - confirmPublish: 'Potvrdi objavu', - confirmRevertToSaved: 'Potvrdite vraćanje na spremljeno', - confirmUnpublish: 'Potvrdite poništavanje objave', - confirmVersionRestoration: 'Potvrdite vraćanje verzije', - currentDocumentStatus: 'Trenutni {{docStatus}} dokumenta', - draft: 'Nacrt', - draftSavedSuccessfully: 'Nacrt uspješno spremljen.', - lastSavedAgo: 'Zadnji put spremljeno prije {{distance}', - noFurtherVersionsFound: 'Nisu pronađene daljnje verzije', - noRowsFound: '{{label}} nije pronađeno', - preview: 'Pregled', - problemRestoringVersion: 'Nastao je problem pri vraćanju ove verzije', - publish: 'Objaviti', - publishChanges: 'Objavi promjene', - published: 'Objavljeno', - publishing: 'Objavljivanje', - restoreThisVersion: 'Vrati ovu verziju', - restoredSuccessfully: 'Uspješno vraćeno.', - restoring: 'Vraćanje...', - revertToPublished: 'Vrati na objavljeno', - reverting: 'Vraćanje...', - saveDraft: 'Sačuvaj nacrt', - selectLocales: 'Odaberite jezike', - selectVersionToCompare: 'Odaberite verziju za usporedbu', - showLocales: 'Prikaži jezike:', - showingVersionsFor: 'Pokazujem verzije za:', - status: 'Status', - type: 'Tip', - unpublish: 'Poništi objavu', - unpublishing: 'Poništavanje objave...', - version: 'Verzija', - versionCount_many: '{{count}} pronađenih verzija', - versionCount_none: 'Nema pronađenih verzija', - versionCount_one: '{{count}} pronađena verzija', - versionCount_other: '{{count}} pronađenih verzija', - versionCreatedOn: '{{version}} kreiranih:', - versionID: 'ID verzije', - versions: 'Verzije', - viewingVersion: 'Pregled verzije za {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: 'Pregled verzije za globalni {{entityLabel}}', - viewingVersions: 'Pregled verzija za {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: 'Pregled verzije za globalni {{entityLabel}}', - }, -} diff --git a/packages/translations/src/all/hu.ts b/packages/translations/src/all/hu.ts deleted file mode 100644 index 08bade90e8..0000000000 --- a/packages/translations/src/all/hu.ts +++ /dev/null @@ -1,395 +0,0 @@ -export default { - authentication: { - account: 'Fiók', - accountOfCurrentUser: 'Az aktuális felhasználó fiókja', - alreadyActivated: 'Már aktiválva van', - alreadyLoggedIn: 'Már bejelentkezett', - apiKey: 'API-kulcs', - backToLogin: 'Vissza a bejelentkezéshez', - beginCreateFirstUser: 'Kezdésként hozza létre az első felhasználót.', - changePassword: 'Jelszó módosítása', - checkYourEmailForPasswordReset: - 'Ellenőrizze az e-mailjét, a linkért, amellyel biztonságosan visszaállíthatja jelszavát.', - confirmGeneration: 'Generálás megerősítése', - confirmPassword: 'Jelszó megerősítése', - createFirstUser: 'Első felhasználó létrehozása', - emailNotValid: 'A megadott e-mail cím érvénytelen', - emailSent: 'E-mail elküldve', - enableAPIKey: 'API-kulcs engedélyezése', - failedToUnlock: 'Nem sikerült feloldani', - forceUnlock: 'Kényszerített feloldás', - forgotPassword: 'Elfelejtett jelszó', - forgotPasswordEmailInstructions: - 'Kérjük, adja meg e-mail címét alább. Kapni fog egy e-mail üzenetet a jelszó visszaállításához szükséges utasításokkal.', - forgotPasswordQuestion: 'Elfelejtette jelszavát?', - generate: 'Generálás', - generateNewAPIKey: 'Új API-kulcs generálása', - generatingNewAPIKeyWillInvalidate: - 'Az új API-kulcs generálása <1>érvényteleníti az előző kulcsot. Biztos, hogy folytatni szeretné?', - lockUntil: 'Zárolás eddig', - logBackIn: 'Jelentkezzen be újra', - logOut: 'Kijelentkezés', - loggedIn: - 'Ha egy másik felhasználóval szeretne bejelentkezni, először <0>ki kell jelentkeznie.', - loggedInChangePassword: - 'Jelszavának megváltoztatásához lépjen be <0>fiókjába, és ott szerkessze jelszavát.', - loggedOutInactivity: 'Inaktivitás miatt kijelentkeztünk.', - loggedOutSuccessfully: 'Sikeresen kijelentkezett.', - login: 'Bejelentkezés', - loginAttempts: 'Bejelentkezési kísérletek', - loginUser: 'Bejelentkezés felhasználó', - loginWithAnotherUser: - 'Ha egy másik felhasználóval szeretne bejelentkezni, először <0>ki kell jelentkeznie.', - logout: 'Kijelentkezés', - logoutUser: 'Felhasználó kijelentkezése', - newAPIKeyGenerated: 'Új API-kulcs generálva.', - newAccountCreated: - 'Létrehoztunk egy új fiókot, amellyel hozzáférhet a következőhöz {{serverURL}} Kérjük, kattintson a következő linkre, vagy illessze be az alábbi URL-t a böngészőbe az e-mail-cím ellenőrzéséhez : {{verificationURL}}
    Az e-mail-cím ellenőrzése után sikeresen be tud majd jelentkezni.', - newPassword: 'Új jelszó', - resetPassword: 'Jelszó visszaállítása', - resetPasswordExpiration: 'Jelszóvisszaállítás lejárata', - resetPasswordToken: 'Jelszóvisszaállító token', - resetYourPassword: 'Jelszó visszaállítása', - stayLoggedIn: 'Maradjon bejelentkezve', - successfullyUnlocked: 'Sikeresen feloldva', - unableToVerify: 'Sikertelen megerősítés', - verified: 'Megerősítve', - verifiedSuccessfully: 'Sikeresen megerősítve', - verify: 'Megerősítés', - verifyUser: 'Felhasználó megerősítése', - verifyYourEmail: 'Erősítse meg az e-mail címét', - youAreInactive: - 'Már egy ideje nem volt aktív, és hamarosan automatikusan kijelentkeztetjük saját biztonsága érdekében. Szeretne bejelentkezve maradni?', - youAreReceivingResetPassword: - 'Ezt azért kapja, mert Ön (vagy valaki más) kérte fiókja jelszavának visszaállítását. A folyamat befejezéséhez kattintson a következő linkre, vagy illessze be böngészőjébe:', - youDidNotRequestPassword: - 'Ha nem Ön kérte ezt, kérjük, hagyja figyelmen kívül ezt az e-mailt, és jelszava változatlan marad.', - }, - error: { - accountAlreadyActivated: 'Ez a fiók már aktiválva van.', - autosaving: 'Hiba történt a dokumentum automatikus mentése közben.', - correctInvalidFields: 'Kérjük, javítsa ki az érvénytelen mezőket.', - deletingFile: 'Hiba történt a fájl törlésekor.', - deletingTitle: - 'Hiba történt a {{title}} törlése közben. Kérjük, ellenőrizze a kapcsolatot, és próbálja meg újra.', - emailOrPasswordIncorrect: 'A megadott e-mail-cím vagy jelszó helytelen.', - followingFieldsInvalid_one: 'A következő mező érvénytelen:', - followingFieldsInvalid_other: 'A következő mezők érvénytelenek:', - incorrectCollection: 'Helytelen gyűjtemény', - invalidFileType: 'Érvénytelen fájltípus', - invalidFileTypeValue: 'Érvénytelen fájltípus: {{value}}', - loadingDocument: 'Hiba történt a {{id}} azonosítójú dokumentum betöltésekor.', - missingEmail: 'Hiányzó e-mail.', - missingIDOfDocument: 'Hiányzik a frissítendő dokumentum azonosítója.', - missingIDOfVersion: 'A verzió azonosítója hiányzik.', - missingRequiredData: 'Hiányoznak kötelező adatok.', - noFilesUploaded: 'Nem került fájl feltöltésre.', - noMatchedField: 'Nem található egyező mező a következőhöz: "{{label}}"', - noUser: 'Nincs felhasználó', - notAllowedToAccessPage: 'Ehhez az oldalhoz nem férhet hozzá.', - notAllowedToPerformAction: 'Ezt a műveletet nem hajthatja végre.', - notFound: 'A kért erőforrás nem található.', - previewing: 'Hiba történt a dokumentum előnézetének megtekintése közben.', - problemUploadingFile: 'Hiba történt a fájl feltöltése közben.', - tokenInvalidOrExpired: 'A token érvénytelen vagy lejárt.', - unPublishingDocument: 'Hiba történt a dokumentum közzétételének visszavonása közben.', - unableToDeleteCount: 'Nem sikerült törölni {{count}}/{{total}} {{label}}.', - unableToUpdateCount: 'Nem sikerült frissíteni {{count}}/{{total}} {{label}}.', - unauthorized: 'Jogosulatlan, a kéréshez be kell jelentkeznie.', - unknown: 'Ismeretlen hiba történt.', - unspecific: 'Hiba történt.', - userLocked: 'Ez a felhasználó túl sok sikertelen bejelentkezési kísérlet miatt zárolva van.', - valueMustBeUnique: 'Az értéknek egyedinek kell lennie', - verificationTokenInvalid: 'Az ellenőrző token érvénytelen.', - }, - fields: { - addLabel: '{{label}} hozzáadása', - addLink: 'Link hozzáadása', - addNew: 'Új hozzáadása', - addNewLabel: 'Új {{label}} hozzáadása', - addRelationship: 'Kapcsolat hozzáadása', - addUpload: 'Feltöltés hozzáadása', - block: 'blokk', - blockType: 'Blokk típusa', - blocks: 'blokkok', - chooseBetweenCustomTextOrDocument: - 'Válasszon egy egyéni szöveges URL-cím megadása vagy egy másik dokumentumra való hivatkozás között.', - chooseDocumentToLink: 'Válassza ki a dokumentumot, amelyre hivatkozni kíván', - chooseFromExisting: 'Válasszon a meglévők közül', - chooseLabel: 'Válassza ki a {{label}}', - collapseAll: 'Mindet összecsuk', - customURL: 'Egyéni URL', - editLabelData: '{{label}} adatok szerkesztése', - editLink: 'Link szerkesztése', - editRelationship: 'Kapcsolat hozzáadása', - enterURL: 'Adjon meg egy URL-t', - internalLink: 'Belső link', - itemsAndMore: '{{items}} és további {{count}}', - labelRelationship: '{{label}} Kapcsolat', - latitude: 'Szélesség', - linkType: 'Link típusa', - linkedTo: 'Kapcsolódik a <0>{{label}}', - longitude: 'Hosszúság', - newLabel: 'Új {{label}}', - openInNewTab: 'Megnyitás új lapon', - passwordsDoNotMatch: 'A jelszavak nem egyeznek.', - relatedDocument: 'Kapcsolódó dokumentum', - relationTo: 'Kapcsolat a következővel:', - removeRelationship: 'Kapcsolat eltávolítása', - removeUpload: 'Feltöltés eltávolítása', - saveChanges: 'Módosítások mentése', - searchForBlock: 'Blokk keresése', - selectExistingLabel: 'Meglévő {{label}} kiválasztása', - selectFieldsToEdit: 'Válassza ki a szerkeszteni kívánt mezőket', - showAll: 'Az összes megjelenítése', - swapRelationship: 'Kapcsolat csere', - swapUpload: 'Feltöltés csere', - textToDisplay: 'Megjelenítendő szöveg', - toggleBlock: 'Blokk kinyitása', - uploadNewLabel: 'Új {{label}} feltöltése', - }, - general: { - aboutToDelete: 'A {{label}} <1>{{title}} törlésére készül. Biztos benne?', - aboutToDeleteCount_many: 'Törölni készül {{count}} {{label}}', - aboutToDeleteCount_one: 'Törölni készül {{count}} {{label}}', - aboutToDeleteCount_other: 'Törölni készül {{count}} {{label}}', - addBelow: 'Hozzáadás lent', - addFilter: 'Szűrő hozzáadása', - adminTheme: 'Admin téma', - and: 'És', - applyChanges: 'Változtatások alkalmazása', - ascending: 'Növekvő', - automatic: 'Automatikus', - backToDashboard: 'Vissza az irányítópultra', - cancel: 'Mégsem', - changesNotSaved: - 'A módosítások nem lettek mentve. Ha most távozik, elveszíti a változtatásokat.', - close: 'Bezárás', - collapse: 'Összecsukás', - collections: 'Gyűjtemények', - columnToSort: 'Rendezendő oszlop', - columns: 'Oszlopok', - confirm: 'Megerősítés', - confirmDeletion: 'Törlés megerősítése', - confirmDuplication: 'Duplikáció megerősítése', - copied: 'Másolva', - copy: 'Másolás', - create: 'Létrehozás', - createNew: 'Új létrehozása', - createNewLabel: 'Új {{label}} létrehozása', - created: 'Létrehozva', - createdAt: 'Létrehozva:', - creating: 'Létrehozás', - creatingNewLabel: 'Új {{label}} létrehozása', - dark: 'Sötét', - dashboard: 'Irányítópult', - delete: 'Törlés', - deletedCountSuccessfully: '{{count}} {{label}} sikeresen törölve.', - deletedSuccessfully: 'Sikeresen törölve.', - deleting: 'Törlés...', - descending: 'Csökkenő', - deselectAllRows: 'Jelölje ki az összes sort', - duplicate: 'Duplikálás', - duplicateWithoutSaving: 'Duplikálás a módosítások mentése nélkül', - edit: 'Szerkesztés', - editLabel: '{{label}} szerkesztése', - editing: 'Szerkesztés', - editingLabel_many: '{{count}} {{label}} szerkesztése', - editingLabel_one: '{{count}} {{label}} szerkesztése', - editingLabel_other: '{{count}} {{label}} szerkesztése', - email: 'E-mail', - emailAddress: 'E-mail cím', - enterAValue: 'Adjon meg egy értéket', - error: 'Hiba', - errors: 'Hibák', - fallbackToDefaultLocale: 'Visszatérés az alapértelmezett nyelvhez', - filter: 'Szűrő', - filterWhere: 'Szűrő {{label}} ahol', - filters: 'Szűrők', - globals: 'Globálisok', - language: 'Nyelv', - lastModified: 'Utoljára módosítva', - leaveAnyway: 'Távozás mindenképp', - leaveWithoutSaving: 'Távozás mentés nélkül', - light: 'Világos', - livePreview: 'Előnézet', - loading: 'Betöltés', - locale: 'Nyelv', - locales: 'Nyelvek', - menu: 'Menü', - moveDown: 'Mozgatás lefelé', - moveUp: 'Mozgatás felfelé', - newPassword: 'Új jelszó', - noFiltersSet: 'Nincs beállítva szűrő', - noLabel: '', - noOptions: 'Nincs lehetőség', - noResults: - 'Nem találtunk {{label}}. Vagy még nem létezik {{label}}, vagy egyik sem felel meg a fent megadott szűrőknek.', - noValue: 'Nincs érték', - none: 'Semmi', - notFound: 'Nem található', - nothingFound: 'Nincs találat', - of: 'a', - open: 'Megnyitás', - or: 'Vagy', - order: 'Sorrend', - pageNotFound: 'Az oldal nem található', - password: 'Jelszó', - payloadSettings: 'Payload beállítások', - perPage: 'Oldalanként: {{limit}}', - remove: 'Törlés', - reset: 'Visszaállítás', - row: 'Sor', - rows: 'Sorok', - save: 'Mentés', - saving: 'Mentés...', - searchBy: 'Keresés a következő szerint: {{label}}', - selectAll: 'Az összes kijelölése: {{count}} {{label}}', - selectAllRows: 'Válassza ki az összes sort', - selectValue: 'Válasszon ki egy értéket', - selectedCount: '{{count}} {{label}} kiválasztva', - showAllLabel: 'Mutasd az összes {{címke}}', - sorryNotFound: 'Sajnáljuk – nincs semmi, ami megfelelne a kérésének.', - sort: 'Rendezés', - sortByLabelDirection: 'Rendezés {{label}} {{direction}} szerint', - stayOnThisPage: 'Maradjon ezen az oldalon', - submissionSuccessful: 'Beküldés sikeres.', - submit: 'Beküldés', - successfullyCreated: '{{label}} sikeresen létrehozva.', - successfullyDuplicated: '{{label}} sikeresen duplikálódott.', - thisLanguage: 'Magyar', - titleDeleted: '{{label}} "{{title}}" sikeresen törölve.', - unauthorized: 'Jogosulatlan', - unsavedChangesDuplicate: 'Nem mentett módosításai vannak. Szeretné folytatni a duplikációt?', - untitled: 'Névtelen', - updatedAt: 'Frissítve:', - updatedCountSuccessfully: '{{count}} {{label}} sikeresen frissítve.', - updatedSuccessfully: 'Sikeresen frissítve.', - updating: 'Frissítés', - uploading: 'Feltöltés', - user: 'Felhasználó', - users: 'Felhasználók', - value: 'Érték', - welcome: 'Üdvözöljük', - }, - operators: { - contains: 'tartalmaz', - equals: 'egyenlő', - exists: 'létezik', - isGreaterThan: 'nagyobb, mint', - isGreaterThanOrEqualTo: 'nagyobb vagy egyenlő, mint', - isIn: 'benne van', - isLessThan: 'kisebb, mint', - isLessThanOrEqualTo: 'kisebb vagy egyenlő, mint', - isLike: 'olyan, mint', - isNotEqualTo: 'nem egyenlő', - isNotIn: 'nincs benne', - near: 'közel', - }, - upload: { - crop: 'Termés', - cropToolDescription: - 'Húzza a kijelölt terület sarkait, rajzoljon új területet, vagy igazítsa a lentebb található értékeket.', - dragAndDrop: 'Húzzon ide egy fájlt', - dragAndDropHere: 'vagy húzzon ide egy fájlt', - editImage: 'Kép szerkesztése', - fileName: 'Fájlnév', - fileSize: 'Fájl mérete', - focalPoint: 'Fókuszpont', - focalPointDescription: - 'Húzza az érdekes pontot közvetlenül az előnézetre, vagy állítsa be az alábbi értékeket.', - height: 'Magasság', - lessInfo: 'Kevesebb információ', - moreInfo: 'További információ', - previewSizes: 'Előnézeti méretek', - selectCollectionToBrowse: 'Válassza ki a böngészni kívánt gyűjteményt', - selectFile: 'Válasszon ki egy fájlt', - setCropArea: 'Állítsa be a vágási területet', - setFocalPoint: 'Állítsa be a fókuszpontot', - sizes: 'Méretek', - sizesFor: 'Méretek a {{címke}} számára', - width: 'Szélesség', - }, - validation: { - emailAddress: 'Kérjük, adjon meg egy érvényes e-mail címet.', - enterNumber: 'Kérjük, adjon meg egy érvényes számot.', - fieldHasNo: 'Ennek a mezőnek nincs {{label}}', - greaterThanMax: '{{value}} nagyobb, mint a megengedett maximum {{label}} érték, ami {{max}}.', - invalidInput: 'Ez a mező érvénytelen értéket tartalmaz.', - invalidSelection: 'Ez a mező érvénytelen kijelöléssel rendelkezik.', - invalidSelections: 'Ez a mező a következő érvénytelen kijelöléseket tartalmazza:', - lessThanMin: '{{value}} kisebb, mint a megengedett minimum {{label}} érték, ami {{min}}.', - limitReached: 'Elérte a korlátot, csak {{max}} elem adható hozzá.', - longerThanMin: - 'Ennek az értéknek hosszabbnak kell lennie, mint a minimális {{minLength}} karakter hosszúság.', - notValidDate: '" {{value}} " nem érvényes dátum.', - required: 'Ez a mező kötelező.', - requiresAtLeast: 'Ehhez a mezőhöz legalább {{count}} {{label}} szükséges.', - requiresNoMoreThan: 'Ehhez a mezőhöz legfeljebb {{count}} {{label}} szükséges.', - requiresTwoNumbers: 'Ehhez a mezőhöz két szám szükséges.', - shorterThanMax: - 'Ennek az értéknek rövidebbnek kell lennie, mint a maximálisan megengedett {{maxLength}} karakter.', - trueOrFalse: 'Ez a mező csak igaz vagy hamis lehet.', - validUploadID: 'Ez a mező nem érvényes feltöltési azonosító.', - }, - version: { - aboutToPublishSelection: - 'Arra készül, hogy az összes {{label}} elemet közzétegye a kijelölésben. biztos vagy ebben?', - aboutToRestore: - 'Arra készül, hogy visszaállítsa ezt a {{label}} dokumentumot arra az állapotra, amelyben {{versionDate}} napon volt.', - aboutToRestoreGlobal: - 'Arra készül, hogy visszaállítsa a {{label}} arra az állapotra, amelyben {{versionDate}} napon volt.', - aboutToRevertToPublished: - 'Arra készül, hogy visszaállítsa a dokumentum módosításait a közzétett állapotába. Biztos benne?', - aboutToUnpublish: 'A dokumentum közzétételének visszavonására készül. Biztos benne?', - aboutToUnpublishSelection: - 'Arra készül, hogy visszavonja a kijelölésben szereplő összes {{label}} közzétételét. biztos vagy ebben?', - autosave: 'Automatikus mentés', - autosavedSuccessfully: 'Automatikus mentés sikeres.', - autosavedVersion: 'Automatikusan mentett verzió', - changed: 'Megváltozott', - compareVersion: 'Hasonlítsa össze a verziót a következőkkel:', - confirmPublish: 'A közzététel megerősítése', - confirmRevertToSaved: 'Erősítse meg a mentett verzióra való visszatérést', - confirmUnpublish: 'A közzététel visszavonásának megerősítése', - confirmVersionRestoration: 'Verzió-visszaállítás megerősítése', - currentDocumentStatus: 'Jelenlegi {{docStatus}} dokumentum', - draft: 'Piszkozat', - draftSavedSuccessfully: 'A piszkozat sikeresen mentve.', - lastSavedAgo: 'Utoljára mentve {{distance}} órája', - noFurtherVersionsFound: 'További verziók nem találhatók', - noRowsFound: 'Nem található {{label}}', - preview: 'Előnézet', - problemRestoringVersion: 'Hiba történt a verzió visszaállításakor', - publish: 'Közzététel', - publishChanges: 'Módosítások közzététele', - published: 'Közzétett', - publishing: 'Közzététel', - restoreThisVersion: 'A verzió visszaállítása', - restoredSuccessfully: 'Sikeresen visszaállítva.', - restoring: 'Visszaállítás...', - revertToPublished: 'Visszatérés a közzétetthez', - reverting: 'Visszaállítás...', - saveDraft: 'Piszkozat mentése', - selectLocales: 'Megjelenítendő nyelvek kiválasztása', - selectVersionToCompare: 'Válassza ki az összehasonlítani kívánt verziót', - showLocales: 'Nyelvek megjelenítése:', - showingVersionsFor: 'Verziók megjelenítése a következőkhöz:', - status: 'Állapot', - type: 'Típus', - unpublish: 'Közzététel visszavonása', - unpublishing: 'Közzététel visszavonása...', - version: 'Verzió', - versionCount_many: '{{count}} verzió található', - versionCount_none: 'Nem található verzió', - versionCount_one: '{{count}} verzió található', - versionCount_other: '{{count}} verzió található', - versionCreatedOn: '{{version}} létrehozva:', - versionID: 'Verzióazonosító', - versions: 'Verziók', - viewingVersion: 'A(z) {{entityLabel}} {{documentTitle}} verziójának megtekintése', - viewingVersionGlobal: 'A globális {{entityLabel}} verziójának megtekintése', - viewingVersions: 'A {{entityLabel}} {{documentTitle}} verzióinak megtekintése', - viewingVersionsGlobal: 'A globális {{entityLabel}} verzióinak megtekintése', - }, -} diff --git a/packages/translations/src/all/index.ts b/packages/translations/src/all/index.ts deleted file mode 100644 index d4d2421008..0000000000 --- a/packages/translations/src/all/index.ts +++ /dev/null @@ -1,65 +0,0 @@ -import ar from './ar.js' -import az from './az.js' -import bg from './bg.js' -import cs from './cs.js' -import de from './de.js' -import en from './en.js' -import es from './es.js' -import fa from './fa.js' -import fr from './fr.js' -import hr from './hr.js' -import hu from './hu.js' -import it from './it.js' -import ja from './ja.js' -import ko from './ko.js' -import my from './my.js' -import nb from './nb.js' -import nl from './nl.js' -import pl from './pl.js' -import pt from './pt.js' -import ro from './ro.js' -import rs from './rs.js' -import rsLatin from './rs-latin.js' -import ru from './ru.js' -import sv from './sv.js' -import th from './th.js' -import tr from './tr.js' -import ua from './ua.js' -import vi from './vi.js' -import zh from './zh.js' -import zhTW from './zhTW.js' - -export const translations = { - ar, - az, - bg, - cs, - de, - en, - es, - fa, - fr, - hr, - hu, - it, - ja, - ko, - my, - nb, - nl, - pl, - pt, - ro, - rs, - 'rs-latin': rsLatin, - ru, - sv, - th, - tr, - ua, - vi, - zh, - zhTW, -} as { - [locale: string]: Record> -} diff --git a/packages/translations/src/all/it.ts b/packages/translations/src/all/it.ts deleted file mode 100644 index 8fd883809c..0000000000 --- a/packages/translations/src/all/it.ts +++ /dev/null @@ -1,395 +0,0 @@ -export default { - authentication: { - account: 'Account', - accountOfCurrentUser: "Account dell'utente corrente", - alreadyActivated: 'Già Attivato', - alreadyLoggedIn: 'Sei già loggato', - apiKey: 'Chiave API', - backToLogin: 'Torna al login', - beginCreateFirstUser: 'Per iniziare, crea il tuo primo utente.', - changePassword: 'Cambia Password', - checkYourEmailForPasswordReset: - 'Controlla la tua email e clicca sul link che ti permetterà di cambiare in sicurezza la tua password.', - confirmGeneration: 'Conferma Generazione', - confirmPassword: 'Conferma Password', - createFirstUser: 'Crea il primo utente', - emailNotValid: "L'email fornita non è valida", - emailSent: 'Email Inviata', - enableAPIKey: 'Abilita la Chiave API', - failedToUnlock: 'Lo sblocco è fallito', - forceUnlock: 'Forza Sblocco', - forgotPassword: 'Cambia Password', - forgotPasswordEmailInstructions: - 'Inserisci la tua mail qui sotto. Riceverai un messaggio email con le istruzioni su come cambiare la tua password.', - forgotPasswordQuestion: 'Password dimenticata?', - generate: 'Genera', - generateNewAPIKey: 'Genera una nuova Chiave API', - generatingNewAPIKeyWillInvalidate: - 'Generando una nuova chiave API si <1>invaliderà la chiave precedente. Sei sicuro di voler continuare?', - lockUntil: 'Sblocca Fino', - logBackIn: 'Vai al Log in', - logOut: 'Log out', - loggedIn: 'Per accedere con un altro utente, devi prima <0>uscire.', - loggedInChangePassword: - 'Per cambiare la tua password, vai al tuo <0>account e modifica la tua password lì.', - loggedOutInactivity: 'Sei stato disconnesso automaticamente per inattività.', - loggedOutSuccessfully: 'Sei stato disconnesso con successo.', - login: 'Login', - loginAttempts: 'Tentativi di Login', - loginUser: 'Utente Login', - loginWithAnotherUser: 'Per accedere con un altro utente, devi prima <0>uscire.', - logout: 'Logout', - logoutUser: 'Logout utente', - newAPIKeyGenerated: 'Nuova Chiave API Generata.', - newAccountCreated: - 'Un nuovo account è appena stato creato per te per accedere a {{serverURL}} Clicca sul seguente link o incolla l\'URL qui sotto nel browser per verificare la tua email: {{verificationURL}}
    Dopo aver verificato la tua email, sarai in grado di effettuare il log in con successo.', - newPassword: 'Nuova Password', - resetPassword: 'Modifica Password', - resetPasswordExpiration: 'Reimposta Scadenza Password', - resetPasswordToken: 'Reimposta il Password Token', - resetYourPassword: 'Modifica la tua Password', - stayLoggedIn: 'Rimani connesso', - successfullyUnlocked: 'Sbloccato con successo', - unableToVerify: 'Impossibile verificare', - verified: 'Verificato', - verifiedSuccessfully: 'Verificato con successo', - verify: 'Verifica', - verifyUser: 'Verifica Utente', - verifyYourEmail: 'Verifica la tua email', - youAreInactive: - "Non sei attivo da un po' di tempo e a breve verrai disconnesso automaticamente per la tua sicurezza. Vuoi rimanere connesso?", - youAreReceivingResetPassword: - 'Ricevi questo messaggio perché tu (o qualcun altro) hai richiesto la modifica della password per il tuo account. Clicca sul seguente link o incollalo nel browser per completare il processo:', - youDidNotRequestPassword: - "Se non l'hai richiesto, ignora questa email e la tua password rimarrà invariata.", - }, - error: { - accountAlreadyActivated: 'Questo account è già stato attivato.', - autosaving: - 'Si è verificato un problema durante il salvataggio automatico di questo documento.', - correctInvalidFields: 'Per favore correggi i campi non validi.', - deletingFile: "Si è verificato un errore durante l'eleminazione del file.", - deletingTitle: - "Si è verificato un errore durante l'eliminazione di {{title}}. Per favore controlla la tua connessione e riprova.", - emailOrPasswordIncorrect: "L'email o la password fornita non è corretta.", - followingFieldsInvalid_one: 'Il seguente campo non è valido:', - followingFieldsInvalid_other: 'I seguenti campi non sono validi:', - incorrectCollection: 'Collezione non corretta', - invalidFileType: 'Tipo di file non valido', - invalidFileTypeValue: 'Tipo di file non valido: {{value}}', - loadingDocument: - 'Si è verificato un problema durante il caricamento del documento con ID {{id}}.', - missingEmail: 'Email mancante.', - missingIDOfDocument: 'ID del documento da aggiornare mancante.', - missingIDOfVersion: 'ID della versione mancante.', - missingRequiredData: 'Data mancante.', - noFilesUploaded: 'Nessun file è stato caricato.', - noMatchedField: 'Nessun campo corrispondente trovato per "{{label}}"', - noUser: 'Nessun Utente', - notAllowedToAccessPage: 'Non sei autorizzato ad accedere a questa pagina.', - notAllowedToPerformAction: 'Non sei autorizzato a eseguire questa azione.', - notFound: 'La risorsa richiesta non è stata trovata.', - previewing: "Si è verificato un problema durante l'anteprima di questo documento.", - problemUploadingFile: 'Si è verificato un problema durante il caricamento del file.', - tokenInvalidOrExpired: 'Il token non è valido o è scaduto.', - unPublishingDocument: - "Si è verificato un problema durante l'annullamento della pubblicazione di questo documento.", - unableToDeleteCount: 'Impossibile eliminare {{count}} su {{total}} {{label}}.', - unableToUpdateCount: 'Impossibile aggiornare {{count}} su {{total}} {{label}}.', - unauthorized: 'Non autorizzato, devi essere loggato per effettuare questa richiesta.', - unknown: 'Si è verificato un errore sconosciuto.', - unspecific: 'Si è verificato un errore.', - userLocked: 'Questo utente è bloccato a causa di troppi tentativi di accesso non riusciti.', - valueMustBeUnique: 'Il valore deve essere univoco', - verificationTokenInvalid: 'Il token di verifica non è valido.', - }, - fields: { - addLabel: 'Aggiungi {{label}}', - addLink: 'Aggiungi Collegamento', - addNew: 'Aggiungi nuovo', - addNewLabel: 'Aggiungi nuovo {{label}}', - addRelationship: 'Aggiungi Relazione', - addUpload: 'aggiungi Carica', - block: 'blocco', - blockType: 'Tipo di Blocco', - blocks: 'blocchi', - chooseBetweenCustomTextOrDocument: - "Scegli tra l'inserimento di un URL di testo personalizzato o il collegamento a un altro documento.", - chooseDocumentToLink: 'Scegli un documento a cui collegarti', - chooseFromExisting: 'Scegli tra esistente', - chooseLabel: 'Scegli {{label}}', - collapseAll: 'Comprimi tutto', - customURL: 'URL personalizzato', - editLabelData: 'Modifica i dati di {{label}}', - editLink: 'Modifica Collegamento', - editRelationship: 'Modifica Relazione', - enterURL: 'Inserisci un URL', - internalLink: 'Collegamento interno', - itemsAndMore: '{{items}} e altri {{count}}', - labelRelationship: 'Relazione {{label}}', - latitude: 'Latitudine', - linkType: 'Tipo di collegamento', - linkedTo: 'Collegato a <0>{{label}}', - longitude: 'Longitudine', - newLabel: 'Nuovo {{label}}', - openInNewTab: 'Apri in una nuova scheda', - passwordsDoNotMatch: 'Le password non corrispondono.', - relatedDocument: 'Documento Correlato', - relationTo: 'Correla a', - removeRelationship: 'Rimuovi Relazione', - removeUpload: 'Rimuovi Upload', - saveChanges: 'Salva modifiche', - searchForBlock: 'Cerca un blocco', - selectExistingLabel: 'Seleziona {{label}} esistente', - selectFieldsToEdit: 'Seleziona i campi da modificare', - showAll: 'Mostra tutto', - swapRelationship: 'Cambia Relationship', - swapUpload: 'Cambia Upload', - textToDisplay: 'Testo da visualizzare', - toggleBlock: 'Apri/chiudi blocco', - uploadNewLabel: 'Carica nuovo {{label}}', - }, - general: { - aboutToDelete: 'Stai per eliminare {{label}} <1>{{title}}. Sei sicuro?', - aboutToDeleteCount_many: 'Stai per eliminare {{count}} {{label}}', - aboutToDeleteCount_one: 'Stai per eliminare {{count}} {{label}}', - aboutToDeleteCount_other: 'Stai per eliminare {{count}} {{label}}', - addBelow: 'Aggiungi sotto', - addFilter: 'Aggiungi Filtro', - adminTheme: 'Tema Admin', - and: 'E', - applyChanges: 'Applica modifiche', - ascending: 'Ascendente', - automatic: 'Automatico', - backToDashboard: 'Torna alla Dashboard', - cancel: 'Cancella', - changesNotSaved: 'Le tue modifiche non sono state salvate. Se esci ora, verranno perse.', - close: 'Chiudere', - collapse: 'Comprimi', - collections: 'Collezioni', - columnToSort: 'Colonna da Ordinare', - columns: 'Colonne', - confirm: 'Conferma', - confirmDeletion: "Conferma l'eliminazione", - confirmDuplication: 'Conferma la duplicazione', - copied: 'Copiato', - copy: 'Copia', - create: 'Crea', - createNew: 'Crea Nuovo', - createNewLabel: 'Crea nuovo {{label}}', - created: 'Data di creazione', - createdAt: 'Creato il', - creating: 'Crea nuovo', - creatingNewLabel: 'Creazione di un nuovo {{label}}', - dark: 'Scuro', - dashboard: 'Dashboard', - delete: 'Elimina', - deletedCountSuccessfully: '{{count}} {{label}} eliminato con successo.', - deletedSuccessfully: 'Eliminato con successo.', - deleting: 'Sto eliminando...', - descending: 'Decrescente', - deselectAllRows: 'Deseleziona tutte le righe', - duplicate: 'Duplica', - duplicateWithoutSaving: 'Duplica senza salvare le modifiche', - edit: 'Modificare', - editLabel: 'Modifica {{label}}', - editing: 'Modifica', - editingLabel_many: 'Modificare {{count}} {{label}}', - editingLabel_one: 'Modifica {{count}} {{label}}', - editingLabel_other: 'Modificare {{count}} {{label}}', - email: 'Email', - emailAddress: 'Indirizzo Email', - enterAValue: 'Inserisci un valore', - error: 'Errore', - errors: 'Errori', - fallbackToDefaultLocale: 'Fallback al locale predefinito', - filter: 'Filtro', - filterWhere: 'Filtra {{label}} se', - filters: 'Filtri', - globals: 'Globali', - language: 'Lingua', - lastModified: 'Ultima modifica', - leaveAnyway: 'Esci comunque', - leaveWithoutSaving: 'Esci senza salvare', - light: 'Chiaro', - livePreview: 'Anteprima dal vivo', - loading: 'Caricamento', - locale: 'Locale', - locales: 'Localizzazioni', - menu: 'Menù', - moveDown: 'Sposta sotto', - moveUp: 'Sposta sopra', - newPassword: 'Nuova Password', - noFiltersSet: 'Nessun filtro impostato', - noLabel: '', - noOptions: 'Nessuna opzione', - noResults: - 'Nessun {{label}} trovato. Non esiste ancora nessun {{label}} oppure nessuno corrisponde ai filtri che hai specificato sopra.', - noValue: 'Nessun valore', - none: 'Nessuno', - notFound: 'Non Trovato', - nothingFound: 'Non è stato trovato nulla', - of: 'di', - open: 'Apri', - or: 'Oppure', - order: 'Ordine', - pageNotFound: 'Pagina non trovata', - password: 'Password', - payloadSettings: 'Impostazioni di Payload', - perPage: 'Per Pagina: {{limit}}', - preview: 'Anteprima', - remove: 'Rimuovi', - reset: 'Ripristina', - row: 'Riga', - rows: 'Righe', - save: 'Salva', - saving: 'Salvo...', - searchBy: 'Cerca per {{label}}', - selectAll: 'Seleziona tutto {{count}} {{label}}', - selectAllRows: 'Seleziona tutte le righe', - selectValue: 'Seleziona un valore', - selectedCount: '{{count}} {{label}} selezionato', - showAllLabel: 'Mostra tutti {{label}}', - sorryNotFound: "Siamo spiacenti, non c'è nulla che corrisponda alla tua richiesta.", - sort: 'Ordina', - sortByLabelDirection: 'Ordina per {{label}} {{direction}}', - stayOnThisPage: 'Rimani su questa pagina', - submissionSuccessful: 'Invio riuscito.', - submit: 'Invia', - successfullyCreated: '{{label}} creato con successo.', - successfullyDuplicated: '{{label}} duplicato con successo.', - thisLanguage: 'Italiano', - titleDeleted: '{{label}} {{title}} eliminato con successo.', - unauthorized: 'Non autorizzato', - unsavedChangesDuplicate: 'Sono presenti modifiche non salvate. Vuoi continuare a duplicare?', - untitled: 'Senza titolo', - updatedAt: 'Aggiornato il', - updatedCountSuccessfully: '{{count}} {{label}} aggiornato con successo.', - updatedSuccessfully: 'Aggiornato con successo.', - updating: 'Aggiornamento', - uploading: 'Caricamento', - user: 'Utente', - users: 'Utenti', - value: 'Valore', - welcome: 'Benvenuto', - }, - operators: { - contains: 'contiene', - equals: 'uguale', - exists: 'esiste', - isGreaterThan: 'è maggiore di', - isGreaterThanOrEqualTo: 'è maggiore o uguale a', - isIn: 'è in', - isLessThan: 'è minore di', - isLessThanOrEqualTo: 'è minore o uguale a', - isLike: 'è come', - isNotEqualTo: 'non è uguale a', - isNotIn: 'non è in', - near: 'vicino', - }, - upload: { - crop: 'Raccolto', - cropToolDescription: - "Trascina gli angoli dell'area selezionata, disegna una nuova area o regola i valori qui sotto.", - dragAndDrop: 'Trascina e rilascia un file', - dragAndDropHere: 'oppure trascina e rilascia un file qui', - editImage: 'Modifica immagine', - fileName: 'Nome File', - fileSize: 'Dimensione File', - focalPoint: 'Punto Focale', - focalPointDescription: - "Trascina il punto focale direttamente sull'anteprima o regola i valori sottostanti.", - height: 'Altezza', - lessInfo: 'Meno info', - moreInfo: 'Più info', - previewSizes: 'Anteprime Dimensioni', - selectCollectionToBrowse: 'Seleziona una Collezione da Sfogliare', - selectFile: 'Seleziona un file', - setCropArea: 'Imposta area di ritaglio', - setFocalPoint: 'Imposta punto focale', - sizes: 'Formati', - sizesFor: 'Dimensioni per {{label}}', - width: 'Larghezza', - }, - validation: { - emailAddress: 'Si prega di inserire un indirizzo email valido.', - enterNumber: 'Si prega di inserire un numero valido.', - fieldHasNo: 'Questo campo non ha {{label}}', - greaterThanMax: '{{value}} è superiore al massimo consentito {{label}} di {{max}}.', - invalidInput: 'Questo campo ha un input non valido.', - invalidSelection: 'Questo campo ha una selezione non valida.', - invalidSelections: "'In questo campo sono presenti le seguenti selezioni non valide:'", - lessThanMin: '{{value}} è inferiore al minimo consentito {{label}} di {{min}}.', - limitReached: 'Raggiunto il limite, possono essere aggiunti solo {{max}} elementi.', - longerThanMin: - 'Questo valore deve essere più lungo della lunghezza minima di {{minLength}} caratteri.', - notValidDate: '"{{value}}" non è una data valida.', - required: 'Questo campo è obbligatorio.', - requiresAtLeast: 'Questo campo richiede almeno {{count}} {{label}}.', - requiresNoMoreThan: 'Questo campo richiede non più di {{count}} {{label}}.', - requiresTwoNumbers: 'Questo campo richiede due numeri.', - shorterThanMax: - 'Questo valore deve essere inferiore alla lunghezza massima di {{maxLength}} caratteri.', - trueOrFalse: "Questo campo può essere solo uguale a 'true' o 'false'.", - validUploadID: "'Questo campo non è un ID di Upload valido.'", - }, - version: { - aboutToPublishSelection: 'Stai per pubblicare tutte le {{label}} nella selezione. Sei sicuro?', - aboutToRestore: - 'Stai per ripristinare questo documento {{label}} allo stato in cui si trovava il {{versionDate}}.', - aboutToRestoreGlobal: - 'Stai per ripristinare {{label}} allo stato in cui si trovava il {{versionDate}}.', - aboutToRevertToPublished: - 'Stai per ripristinare le modifiche di questo documento al suo stato pubblicato. Sei sicuro?', - aboutToUnpublish: 'Stai per annullare la pubblicazione di questo documento. Sei sicuro?', - aboutToUnpublishSelection: - 'Stai per annullare la pubblicazione di tutte le {{label}} nella selezione. Sei sicuro?', - autosave: 'Salvataggio automatico', - autosavedSuccessfully: 'Salvataggio automatico riuscito.', - autosavedVersion: 'Versione salvata automaticamente', - changed: 'Modificato', - compareVersion: 'Confronta versione con:', - confirmPublish: 'Conferma la pubblicazione', - confirmRevertToSaved: 'Conferma il ripristino dei salvataggi', - confirmUnpublish: 'Conferma annullamento della pubblicazione', - confirmVersionRestoration: 'Conferma il ripristino della versione', - currentDocumentStatus: 'Documento {{docStatus}} corrente', - draft: 'Bozza', - draftSavedSuccessfully: 'Bozza salvata con successo.', - lastSavedAgo: 'Ultimo salvataggio {{distance}} fa', - noFurtherVersionsFound: 'Non sono state trovate ulteriori versioni', - noRowsFound: 'Nessun {{label}} trovato', - preview: 'Anteprima', - problemRestoringVersion: 'Si è verificato un problema durante il ripristino di questa versione', - publish: 'Pubblicare', - publishChanges: 'Pubblica modifiche', - published: 'Pubblicato', - publishing: 'Pubblicazione', - restoreThisVersion: 'Ripristina questa versione', - restoredSuccessfully: 'Ripristinato con successo.', - restoring: 'Ripristino...', - revertToPublished: 'Ritorna alla versione pubblicata', - reverting: 'Ritorno...', - saveDraft: 'Salva Bozza', - selectLocales: 'Seleziona le lingue da visualizzare', - selectVersionToCompare: 'Seleziona una versione da confrontare', - showLocales: 'Mostra localizzazioni:', - showingVersionsFor: 'Mostra le versioni per:', - status: 'Stato', - type: 'Tipo', - unpublish: 'Annulla pubblicazione', - unpublishing: 'Annullamento pubblicazione...', - version: 'Versione', - versionCount_many: '{{count}} versioni trovate', - versionCount_none: 'Nessuna versione trovata', - versionCount_one: '{{count}} versione trovata', - versionCount_other: '{{count}} versioni trovate', - versionCreatedOn: '{{version}} creata il:', - versionID: 'ID Versione', - versions: 'Versioni', - viewingVersion: 'Visualizzazione della versione per {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: '`Visualizzazione della versione per {{entityLabel}}', - viewingVersions: 'Visualizzazione delle versioni per {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: '`Visualizzazione delle versioni per {{entityLabel}}', - }, -} diff --git a/packages/translations/src/all/ja.ts b/packages/translations/src/all/ja.ts deleted file mode 100644 index 864e6a3cd7..0000000000 --- a/packages/translations/src/all/ja.ts +++ /dev/null @@ -1,389 +0,0 @@ -export default { - authentication: { - account: 'アカウント', - accountOfCurrentUser: '現在のユーザーアカウント', - alreadyActivated: 'すでに有効です', - alreadyLoggedIn: 'すでにログインしています', - apiKey: 'API Key', - backToLogin: 'ログイン画面へ戻る', - beginCreateFirstUser: 'まずは、最初のユーザーを作成します。', - changePassword: 'パスワードを変更', - checkYourEmailForPasswordReset: - 'パスワードを安全に再設定するためのリンクがメールで送られてくるので、確認してください。', - confirmGeneration: '生成の確認', - confirmPassword: 'パスワードの確認', - createFirstUser: '最初のユーザーを作成', - emailNotValid: '入力されたメールアドレスは無効です。', - emailSent: 'Emailが送信されました。', - enableAPIKey: 'API Keyを許可', - failedToUnlock: 'ロックの解除に失敗しました。', - forceUnlock: '強制的にロックを解除', - forgotPassword: 'パスワード再設定', - forgotPasswordEmailInstructions: - 'アカウントのメールアドレスを以下に入力してください。パスワードの再設定方法が記載されたメールが届きます。', - forgotPasswordQuestion: 'パスワードをお忘れですか?', - generate: '生成', - generateNewAPIKey: '新しいAPI Keyを生成', - generatingNewAPIKeyWillInvalidate: - '新しいAPI Keyを生成すると、以前のAPI Keyは<1>無効になります。よろしいですか?', - lockUntil: 'ロック期限', - logBackIn: '改めてログイン', - logOut: 'ログアウト', - loggedIn: '他のユーザーでログインするには、まず<0>ログアウトする必要があります。', - loggedInChangePassword: - 'パスワードを変更するには、<0>アカウントにアクセスしてパスワードを編集してください。', - loggedOutInactivity: 'しばらく操作を行わなかったため、管理画面からログアウトしました。', - loggedOutSuccessfully: '管理画面からログアウトしました。', - login: 'ログイン', - loginAttempts: 'ログイン試行回数', - loginUser: 'ログインユーザー', - loginWithAnotherUser: - '他のユーザーでログインするには、まず<0>ログアウトする必要があります。', - logout: 'ログアウト', - logoutUser: 'ログアウトユーザー', - newAPIKeyGenerated: '新しいAPI Keyを生成しました。', - newAccountCreated: - '{{serverURL}}にアクセスするための新しいアカウントが作成されました。以下のリンクをクリックするか、ブラウザに以下のURLを貼り付けて、メールアドレスの確認を行ってください。{{verificationURL}}
    メールアドレスの確認後に、正常にログインできるようになります。', - newPassword: '新しいパスワード', - resetPassword: 'パスワード再発行', - resetPasswordExpiration: 'パスワードの有効期限をリセット', - resetPasswordToken: 'パスワードのトークンをリセット', - resetYourPassword: 'パスワードの再設定', - stayLoggedIn: 'ログイン状態を維持', - successfullyUnlocked: 'ロックの解除に成功しました。', - unableToVerify: '検証ができません', - verified: '検証済み', - verifiedSuccessfully: '検証が成功しました', - verify: '検証', - verifyUser: 'ユーザーの確認', - verifyYourEmail: 'メールアドレスの確認', - youAreInactive: - 'しばらく操作を行わなかったため、セキュリティのために自動的にログアウトします。ログイン状態を維持しますか?', - youAreReceivingResetPassword: - 'アカウントのパスワードリセットがリクエストされました。次のリンクをクリックする、または、ブラウザにリンクを貼り付けて、手続きを行ってください:', - youDidNotRequestPassword: - 'もし望まない場合は、このメールを無視してください。パスワードは変更されません。', - }, - error: { - accountAlreadyActivated: 'このアカウントはすでに有効です。', - autosaving: 'このデータを自動保存する際に問題が発生しました。', - correctInvalidFields: '無効なフィールドを修正してください。', - deletingFile: 'ファイルの削除中にエラーが発生しました。', - deletingTitle: - '{{title}} を削除する際にエラーが発生しました。接続を確認してからもう一度お試しください。', - emailOrPasswordIncorrect: 'メールアドレス、または、パスワードが正しくありません。', - followingFieldsInvalid_one: '次のフィールドは無効です:', - followingFieldsInvalid_other: '次のフィールドは無効です:', - incorrectCollection: '不正なコレクション', - invalidFileType: '無効なファイル形式', - invalidFileTypeValue: '無効なファイル形式: {{value}}', - loadingDocument: 'IDが {{id}} のデータを読み込む際に問題が発生しました。', - missingEmail: 'メールアドレスが不足しています。', - missingIDOfDocument: '更新するデータのIDが不足しています。', - missingIDOfVersion: 'バージョンIDが不足しています。', - missingRequiredData: '必須データが不足しています。', - noFilesUploaded: 'ファイルがアップロードされていません。', - noMatchedField: '"{{label}}" に該当するフィールドがありません。', - noUser: 'ユーザーなし', - notAllowedToAccessPage: 'この画面へのアクセスは許可されていません。', - notAllowedToPerformAction: 'このアクションは許可されていません。', - notFound: 'リクエストされたリソースは見つかりませんでした。', - previewing: 'このデータをプレビューする際に問題が発生しました。', - problemUploadingFile: 'ファイルのアップロード中に問題が発生しました。', - tokenInvalidOrExpired: 'トークンが無効、または、有効期限が切れています。', - unPublishingDocument: 'このデータを非公開する際に問題が発生しました。', - unableToDeleteCount: '{{total}} {{label}} から {{count}} を削除できません。', - unableToUpdateCount: '{{total}} {{label}} のうち {{count}} 個を更新できません。', - unauthorized: '認証されていません。このリクエストを行うにはログインが必要です。', - unknown: '不明なエラーが発生しました。', - unspecific: 'エラーが発生しました。', - userLocked: 'このユーザーは、ログイン試行回数が多すぎるため、ロックされています。', - valueMustBeUnique: 'ユニークな値である必要があります。', - verificationTokenInvalid: '認証トークンが無効です。', - }, - fields: { - addLabel: '{{label}} を追加', - addLink: 'リンクを追加', - addNew: '新規追加', - addNewLabel: '{{label}} を新規追加', - addRelationship: 'リレーションシップを追加', - addUpload: 'アップロードを追加', - block: 'ブロック', - blockType: 'ブロックタイプ', - blocks: 'ブロック', - chooseBetweenCustomTextOrDocument: - 'カスタムテキストのURLを入力するか、他のドキュメントにリンクするかを選択してください。', - chooseDocumentToLink: 'リンクするドキュメントを選択してください。', - chooseFromExisting: '既存から選択', - chooseLabel: '{{label}} を選択', - collapseAll: 'すべて閉じる', - customURL: 'カスタムURL', - editLabelData: '{{label}} データを編集', - editLink: 'リンクを編集', - editRelationship: 'リレーションシップを編集', - enterURL: 'URL を入力してください', - internalLink: '内部リンク', - itemsAndMore: '{{items}} 他{{count}}件', - labelRelationship: '{{label}} リレーションシップ', - latitude: '緯度', - linkType: 'リンクタイプ', - linkedTo: '<0>{{label}} にリンク', - longitude: '経度', - newLabel: '新規 {{label}}', - openInNewTab: '新しいタブで開く', - passwordsDoNotMatch: 'パスワードが一致しません', - relatedDocument: 'リレーションデータ', - relationTo: 'リレーション', - removeRelationship: '関係を削除', - removeUpload: '削除', - saveChanges: '変更を保存', - searchForBlock: 'ブロックを検索', - selectExistingLabel: '既存 {{label}} を選択', - selectFieldsToEdit: '編集するフィールドを選択', - showAll: 'すべて開く', - swapRelationship: 'スワップ関係', - swapUpload: '差し替え', - textToDisplay: '表示するテキスト', - toggleBlock: 'ブロックを切り替え', - uploadNewLabel: '新規 {{label}} アップロード', - }, - general: { - aboutToDelete: '{{label}} <1>{{title}} を削除します。よろしいですか?', - aboutToDeleteCount_many: '{{label}}を{{count}}つ削除しようとしています', - aboutToDeleteCount_one: '{{label}}を{{count}}つ削除しようとしています', - aboutToDeleteCount_other: '{{label}}を{{count}}つ削除しようとしています', - addBelow: '下に追加', - addFilter: '絞り込みを追加', - adminTheme: '管理画面のテーマ', - and: 'かつ', - applyChanges: '変更を適用する', - ascending: '昇順', - automatic: '自動設定', - backToDashboard: 'ダッシュボードに戻る', - cancel: 'キャンセル', - changesNotSaved: '未保存の変更があります。このまま画面を離れると内容が失われます。', - close: '閉じる', - collapse: '閉じる', - collections: 'コレクション', - columnToSort: '並び替え対象の行', - columns: '行の表示', - confirm: '実行', - confirmDeletion: '削除の確認', - confirmDuplication: '複製の確認', - copied: 'コピーしました', - copy: 'コピー', - create: '作成', - createNew: '新規作成', - createNewLabel: '{{label}} を新規作成', - created: '作成', - createdAt: '作成日', - creating: '作成中', - creatingNewLabel: '{{label}} を新規作成しています', - dark: 'ダークモード', - dashboard: 'ダッシュボード', - delete: '削除', - deletedCountSuccessfully: '{{count}}つの{{label}}を正常に削除しました。', - deletedSuccessfully: '正常に削除されました。', - deleting: '削除しています...', - descending: '降順', - deselectAllRows: 'すべての行の選択を解除します', - duplicate: '複製', - duplicateWithoutSaving: '変更を保存せずに複製', - edit: '編集', - editLabel: '{{label}} を編集', - editing: '編集', - editingLabel_many: '{{count}}つの{{label}}を編集しています', - editingLabel_one: '{{count}}つの{{label}}を編集しています', - editingLabel_other: '{{count}}つの{{label}}を編集しています', - email: 'メールアドレス', - emailAddress: 'メールアドレス', - enterAValue: '値を入力', - error: 'エラー', - errors: 'エラー', - fallbackToDefaultLocale: 'デフォルトロケールへのフォールバック', - filter: '絞り込み', - filterWhere: '{{label}} の絞り込み', - filters: '絞り込み', - globals: 'グローバル', - language: '言語', - lastModified: '最終更新', - leaveAnyway: 'すぐに画面を離れる', - leaveWithoutSaving: '内容が保存されていません', - light: 'ライトモード', - livePreview: 'プレビュー', - loading: 'ローディング中', - locale: 'ロケール', - locales: 'ロケール', - menu: 'メニュー', - moveDown: '下へ移動', - moveUp: '上へ移動', - newPassword: '新しいパスワード', - noFiltersSet: '絞り込みが未設定です。', - noLabel: '', - noOptions: '選択肢なし', - noResults: - '{{label}} データが見つかりませんでした。データが存在しない、または、絞り込みに一致するものがありません。', - noValue: '未設定', - none: 'なし', - notFound: 'Not Found', - nothingFound: 'Nothing found', - of: '/', - open: '開く', - or: 'または', - order: '表示順', - pageNotFound: 'ページが見つかりません', - password: 'パスワード', - payloadSettings: 'Payload 設定', - perPage: '表示件数: {{limit}}', - remove: '削除', - reset: 'リセット', - row: '列', - rows: '列', - save: '保存', - saving: '保存しています...', - searchBy: '{{label}} で検索', - selectAll: 'すべての{{count}}つの{{label}}を選択', - selectAllRows: 'すべての行を選択します', - selectValue: '値を選択', - selectedCount: '{{count}}つの{{label}}を選択中', - showAllLabel: 'すべての{{label}}を表示する', - sorryNotFound: '申し訳ありません。リクエストに対応する内容が見つかりませんでした。', - sort: '並び替え', - sortByLabelDirection: '{{label}}により並べ替え {{direction}}', - stayOnThisPage: 'この画面にとどまる', - submissionSuccessful: '送信が成功しました。', - submit: '送信', - successfullyCreated: '{{label}} が作成されました。', - successfullyDuplicated: '{{label}} が複製されました。', - thisLanguage: 'Japanese', - titleDeleted: '{{label}} "{{title}}" が削除されました。', - unauthorized: '未認証', - unsavedChangesDuplicate: '未保存の変更があります。複製を続けますか?', - untitled: 'Untitled', - updatedAt: '更新日', - updatedCountSuccessfully: '{{count}}つの{{label}}を正常に更新しました。', - updatedSuccessfully: '更新成功。', - updating: '更新中', - uploading: 'アップロード中', - user: 'ユーザー', - users: 'ユーザー', - value: '値', - welcome: 'ようこそ', - }, - operators: { - contains: '含む', - equals: '等しい', - exists: '存在す', - isGreaterThan: 'より大きい', - isGreaterThanOrEqualTo: '以上', - isIn: 'あります', - isLessThan: 'より小さい', - isLessThanOrEqualTo: '以下', - isLike: 'のような', - isNotEqualTo: '等しくない', - isNotIn: '入っていません', - near: '近く', - }, - upload: { - crop: 'クロップ', - cropToolDescription: - '選択したエリアのコーナーをドラッグしたり、新たなエリアを描画したり、下記の値を調整してください。', - dragAndDrop: 'ファイルをドラッグ アンド ドロップする', - dragAndDropHere: 'または、このエリアにファイルをドラッグ & ドロップ', - editImage: '画像を編集する', - fileName: 'ファイル名', - fileSize: 'ファイル容量', - focalPoint: '焦点', - focalPointDescription: 'プレビュー上で焦点を直接ドラッグするか、下の値を調整してください。', - height: '高さ', - lessInfo: '詳細を隠す', - moreInfo: '詳細を表示', - previewSizes: 'プレビューサイズ', - selectCollectionToBrowse: '閲覧するコレクションを選択', - selectFile: 'ファイルを選択', - setCropArea: 'クロップエリアを設定する', - setFocalPoint: '焦点を設定する', - sizes: '容量', - sizesFor: '{{label}}のサイズ', - width: '横幅', - }, - validation: { - emailAddress: '有効なメールアドレスを入力してください。', - enterNumber: '有効な数値を入力してください。', - fieldHasNo: '{{label}} が必要です。', - greaterThanMax: '{{value}}は許容最大{{label}}の{{max}}を超えています。', - invalidInput: '無効な入力値です。', - invalidSelection: '無効な選択です。', - invalidSelections: '次の無効な選択があります: ', - lessThanMin: '{{value}}は許容最小{{label}}の{{min}}未満です。', - limitReached: '制限に達しました、{{max}}個以上のアイテムを追加することはできません。', - longerThanMin: '{{minLength}} 文字以上にする必要があります。', - notValidDate: '"{{value}}" は有効な日付ではありません。', - required: '必須フィールドです。', - requiresAtLeast: '少なくとも {{count}} {{label}} 以上が必要です。', - requiresNoMoreThan: '最大で {{count}} {{label}} 以下にする必要があります。', - requiresTwoNumbers: '2つの数値が必要です。', - shorterThanMax: '{{maxLength}} 文字以下にする必要があります。', - trueOrFalse: '"true" または "false" の値にする必要があります。', - validUploadID: '有効なアップロードIDではありません。', - }, - version: { - aboutToPublishSelection: '選択中のすべての{{label}}を公開しようとしています。よろしいですか?', - aboutToRestore: - 'この {{label}} データを {{versionDate}} 時点のバージョンに復元しようとしています。', - aboutToRestoreGlobal: - 'グローバルな {{label}} データを {{versionDate}} 時点のバージョンに復元しようとしています。', - aboutToRevertToPublished: - 'このデータの変更を公開時の状態に戻そうとしています。よろしいですか?', - aboutToUnpublish: 'このデータを非公開にしようとしています。よろしいですか?', - aboutToUnpublishSelection: - '選択したすべての{{label}}の公開を取り消そうとしています。よろしいですか?', - autosave: '自動保存', - autosavedSuccessfully: '自動保存に成功しました。', - autosavedVersion: '自動保存されたバージョン', - changed: '変更済み', - compareVersion: 'バージョンを比較:', - confirmPublish: '公開を確認する', - confirmRevertToSaved: '保存された状態に戻す確認', - confirmUnpublish: '非公開の確認', - confirmVersionRestoration: 'バージョン復元の確認', - currentDocumentStatus: '現在の {{docStatus}} データ', - draft: 'ドラフト', - draftSavedSuccessfully: '下書きは正常に保存されました。', - lastSavedAgo: '{{distance}}前に最後に保存されました', - noFurtherVersionsFound: 'その他のバージョンは見つかりませんでした。', - noRowsFound: '{{label}} は未設定です', - preview: 'プレビュー', - problemRestoringVersion: 'このバージョンの復元に問題がありました。', - publish: '公開する', - publishChanges: '変更内容を公開', - published: '公開済み', - publishing: '公開', - restoreThisVersion: 'このバージョンを復元', - restoredSuccessfully: '正常に復元されました。', - restoring: '復元しています...', - revertToPublished: '公開時の内容に戻す', - reverting: '内容を戻しています...', - saveDraft: 'ドラフトを保存', - selectLocales: '表示するロケールを選択', - selectVersionToCompare: '比較するバージョンを選択', - showLocales: 'ロケールを表示:', - showingVersionsFor: '次のバージョンを表示します:', - status: 'ステータス', - type: 'タイプ', - unpublish: '非公開', - unpublishing: '非公開中...', - version: 'バージョン', - versionCount_many: '{{count}} バージョンがあります', - versionCount_none: 'バージョンがありません', - versionCount_one: '{{count}} バージョンがあります', - versionCount_other: '{{count}}バージョンが見つかりました', - versionCreatedOn: '{{version}} 作成日時:', - versionID: 'バージョンID', - versions: 'バージョン', - viewingVersion: '表示バージョン: {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: '表示バージョン: グローバルな {{entityLabel}}', - viewingVersions: '表示バージョン: {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: '表示バージョン: グローバルな {{entityLabel}}', - }, -} diff --git a/packages/translations/src/all/ko.ts b/packages/translations/src/all/ko.ts deleted file mode 100644 index 34da8c55ea..0000000000 --- a/packages/translations/src/all/ko.ts +++ /dev/null @@ -1,385 +0,0 @@ -export default { - authentication: { - account: '계정', - accountOfCurrentUser: '현재 사용자의 계정', - alreadyActivated: '이미 활성화됨', - alreadyLoggedIn: '이미 로그인됨', - apiKey: 'API 키', - backToLogin: '로그인 화면으로 돌아가기', - beginCreateFirstUser: '시작하려면 첫 번째 사용자를 생성하세요.', - changePassword: '비밀번호 변경', - checkYourEmailForPasswordReset: - '비밀번호 재설정을 안전하게 수행할 수 있는 링크가 포함된 이메일을 확인하세요.', - confirmGeneration: '생성 확인', - confirmPassword: '비밀번호 확인', - createFirstUser: '첫 번째 사용자 생성', - emailNotValid: '입력한 이메일은 유효하지 않습니다.', - emailSent: '이메일 전송됨', - enableAPIKey: 'API 키 활성화', - failedToUnlock: '잠금 해제 실패', - forceUnlock: '강제 잠금 해제', - forgotPassword: '비밀번호를 잊으셨나요?', - forgotPasswordEmailInstructions: - '아래에 이메일을 입력하세요. 비밀번호를 재설정하는 방법에 대한 안내가 포함된 이메일 메시지를 받게 될 것입니다.', - forgotPasswordQuestion: '비밀번호를 잊으셨나요?', - generate: '생성', - generateNewAPIKey: '새로운 API 키 생성', - generatingNewAPIKeyWillInvalidate: - '새로운 API 키를 생성하면 이전 키가 무효화됩니다. 계속하시겠습니까?', - lockUntil: '잠금 시간', - logBackIn: '다시 로그인', - logOut: '로그아웃', - loggedIn: '다른 사용자로 로그인하려면 먼저 <0>로그아웃해야 합니다.', - loggedInChangePassword: - '비밀번호를 변경하려면 <0>계정 화면으로 이동하여 비밀번호를 편집하세요.', - loggedOutInactivity: '보안을 위해 일정 시간 동안 활동하지 않아 로그아웃되었습니다.', - loggedOutSuccessfully: '로그아웃되었습니다.', - login: '로그인', - loginAttempts: '로그인 시도', - loginUser: '현재 사용자 로그인', - loginWithAnotherUser: '다른 사용자로 로그인하려면 먼저 <0>로그아웃해야 합니다.', - logout: '로그아웃', - logoutUser: '현재 사용자 로그아웃', - newAPIKeyGenerated: '새로운 API 키가 생성되었습니다.', - newAccountCreated: - '{{serverURL}}에 접근할 수 있는 새로운 계정이 생성되었습니다. 다음 링크를 클릭하거나 브라우저에 URL을 붙여넣으세요: {{verificationURL}}
    이메일을 확인한 후에 로그인할 수 있습니다.', - newPassword: '새로운 비밀번호', - resetPassword: '비밀번호 재설정', - resetPasswordExpiration: '비밀번호 재설정 만료', - resetPasswordToken: '비밀번호 재설정 토큰', - resetYourPassword: '비밀번호 재설정', - stayLoggedIn: '로그인 상태 유지', - successfullyUnlocked: '잠금 해제 성공', - unableToVerify: '확인할 수 없음', - verified: '확인됨', - verifiedSuccessfully: '성공적으로 확인됨', - verify: '확인', - verifyUser: '현재 사용자 확인', - verifyYourEmail: '이메일을 확인해주세요', - youAreInactive: - '잠시 활동하지 않았으며 보안을 위해 곧 자동 로그아웃됩니다. 로그인 상태를 유지하시겠습니까?', - youAreReceivingResetPassword: - '당신(혹은 다른 사람)이 계정의 비밀번호 초기화를 요청했기 때문에 이 이메일을 받았습니다. 다음 링크를 클릭하거나 브라우저에 붙여넣어 비밀번호를 초기화하세요:', - youDidNotRequestPassword: - '비밀번호 초기화를 요청하지 않았다면 이 이메일을 무시하시고 비밀번호를 변경하지 마세요.', - }, - error: { - accountAlreadyActivated: '이 계정은 이미 활성화되었습니다.', - autosaving: '이 문서를 자동 저장하는 중에 문제가 발생했습니다.', - correctInvalidFields: '입력하신 내용을 확인해주세요.', - deletingFile: '파일을 삭제하는 중에 오류가 발생했습니다.', - deletingTitle: - '{{title}} 삭제하는 중에 오류가 발생했습니다. 인터넷 연결을 확인하고 다시 시도하세요.', - emailOrPasswordIncorrect: '입력한 이메일 또는 비밀번호가 올바르지 않습니다.', - followingFieldsInvalid_one: '다음 입력란이 유효하지 않습니다:', - followingFieldsInvalid_other: '다음 입력란이 유효하지 않습니다:', - incorrectCollection: '잘못된 컬렉션', - invalidFileType: '잘못된 파일 형식', - invalidFileTypeValue: '잘못된 파일 형식: {{value}}', - loadingDocument: 'ID가 {{id}}인 문서를 불러오는 중에 문제가 발생했습니다.', - missingEmail: '이메일이 누락되었습니다.', - missingIDOfDocument: '업데이트할 문서의 ID가 누락되었습니다.', - missingIDOfVersion: '버전의 ID가 누락되었습니다.', - missingRequiredData: '필수 데이터가 누락되었습니다.', - noFilesUploaded: '파일이 업로드되지 않았습니다.', - noMatchedField: '"{{label}}"에 대한 일치하는 입력란이 없습니다.', - noUser: '사용자가 없습니다.', - notAllowedToAccessPage: '이 페이지에 접근할 권한이 없습니다.', - notAllowedToPerformAction: '이 작업을 수행할 권한이 없습니다.', - notFound: '요청한 리소스를 찾을 수 없습니다.', - previewing: '이 문서를 미리보는 중에 문제가 발생했습니다.', - problemUploadingFile: '파일 업로드 중에 문제가 발생했습니다.', - tokenInvalidOrExpired: '토큰이 유효하지 않거나 만료되었습니다.', - unPublishingDocument: '이 문서의 게시 취소 중에 문제가 발생했습니다.', - unableToDeleteCount: '총 {{total}}개 중 {{count}}개의 {{label}}을(를) 삭제할 수 없습니다.', - unableToUpdateCount: '총 {{total}}개 중 {{count}}개의 {{label}}을(를) 업데이트할 수 없습니다.', - unauthorized: '권한 없음, 이 요청을 수행하려면 로그인해야 합니다.', - unknown: '알 수 없는 오류가 발생했습니다.', - unspecific: '오류가 발생했습니다.', - userLocked: '이 사용자는 로그인 실패 횟수가 너무 많아 잠겼습니다.', - valueMustBeUnique: '값은 고유해야 합니다.', - verificationTokenInvalid: '확인 토큰이 유효하지 않습니다.', - }, - fields: { - addLabel: '{{label}} 추가', - addLink: '링크 추가', - addNew: '새로 추가', - addNewLabel: '새로운 {{label}} 추가', - addRelationship: '관계 추가', - addUpload: '업로드 추가', - block: '블록', - blockType: '블록 유형', - blocks: '블록', - chooseBetweenCustomTextOrDocument: - '사용자 지정 텍스트 URL 또는 다른 문서에 링크 중 선택하세요.', - chooseDocumentToLink: '연결할 문서 선택', - chooseFromExisting: '기존 항목 중 선택', - chooseLabel: '{{label}} 선택', - collapseAll: '모두 접기', - customURL: '사용자 지정 URL', - editLabelData: '{{label}} 데이터 수정', - editLink: '링크 수정', - editRelationship: '관계 수정', - enterURL: 'URL 입력', - internalLink: '내부 링크', - itemsAndMore: '{{items}} 및 {{count}}개 더', - labelRelationship: '{{label}} 관계', - latitude: '위도', - linkType: '링크 유형', - linkedTo: '<0>{{label}}에 연결됨', - longitude: '경도', - newLabel: '새로운 {{label}}', - openInNewTab: '새 탭에서 열기', - passwordsDoNotMatch: '비밀번호가 일치하지 않습니다.', - relatedDocument: '관련 문서', - relationTo: '관계', - removeRelationship: '관계 제거', - removeUpload: '제거', - saveChanges: '변경 사항 저장', - searchForBlock: '블록 검색', - selectExistingLabel: '기존 {{label}} 선택', - selectFieldsToEdit: '수정할 입력란 선택', - showAll: '모두 표시', - swapRelationship: '관계 교체', - swapUpload: '업로드 교체', - textToDisplay: '표시할 텍스트', - toggleBlock: '블록 토글', - uploadNewLabel: '새로운 {{label}} 업로드', - }, - general: { - aboutToDelete: '{{label}} <1>{{title}}를 삭제하려고 합니다. 계속하시겠습니까?', - aboutToDeleteCount_many: '{{label}}를 {{count}}개 삭제하려고 합니다.', - aboutToDeleteCount_one: '{{label}}를 {{count}}개 삭제하려고 합니다.', - aboutToDeleteCount_other: '{{label}}를 {{count}}개 삭제하려고 합니다.', - addBelow: '아래에 추가', - addFilter: '필터 추가', - adminTheme: '관리자 테마', - and: '및', - applyChanges: '변경 사항 적용', - ascending: '오름차순', - automatic: '자동 설정', - backToDashboard: '대시보드로 돌아가기', - cancel: '취소', - changesNotSaved: '변경 사항이 저장되지 않았습니다. 지금 떠나면 변경 사항을 잃게 됩니다.', - close: '닫기', - collapse: '접기', - collections: '컬렉션', - columnToSort: '정렬할 열', - columns: '열', - confirm: '확인', - confirmDeletion: '삭제하시겠습니까?', - confirmDuplication: '복제하시겠습니까?', - copied: '복사됨', - copy: '복사', - create: '생성', - createNew: '새로 생성', - createNewLabel: '새로운 {{label}} 생성', - creatingNewLabel: '{{label}} 생성 중', - created: '생성됨', - createdAt: '생성 일시', - creating: '생성 중', - dark: '다크', - dashboard: '대시보드', - delete: '삭제', - deletedCountSuccessfully: '{{count}}개의 {{label}}를 삭제했습니다.', - deletedSuccessfully: '삭제되었습니다.', - deleting: '삭제 중...', - descending: '내림차순', - deselectAllRows: '모든 행 선택 해제', - duplicate: '복제', - duplicateWithoutSaving: '변경 사항 저장 없이 복제', - edit: '수정', - editLabel: '{{label}} 수정', - editing: '수정 중', - editingLabel_many: '{{count}}개의 {{label}} 수정 중', - editingLabel_one: '{{count}}개의 {{label}} 수정 중', - editingLabel_other: '{{count}}개의 {{label}} 수정 중', - email: '이메일', - emailAddress: '이메일 주소', - enterAValue: '값을 입력하세요', - error: '오류', - errors: '오류', - fallbackToDefaultLocale: '기본 locale로 대체', - filter: '필터', - filterWhere: '{{label}} 필터링 조건', - filters: '필터', - globals: '글로벌', - language: '언어', - lastModified: '마지막 수정 일시', - leaveAnyway: '그래도 나가시겠습니까?', - leaveWithoutSaving: '저장하지 않고 나가기', - light: '라이트', - livePreview: '실시간 미리보기', - loading: '불러오는 중', - locale: 'locale', - locales: 'locale', - menu: '메뉴', - moveDown: '아래로 이동', - moveUp: '위로 이동', - newPassword: '새 비밀번호', - noFiltersSet: '설정된 필터 없음', - noLabel: '<{{label}} 없음>', - noOptions: '옵션 없음', - noResults: - '{{label}}를 찾을 수 없습니다. 아직 {{label}}이 없거나 설정한 필터와 일치하는 것이 없습니다.', - noValue: '값 없음', - none: '없음', - notFound: '찾을 수 없음', - nothingFound: '찾을 수 없습니다', - of: '의', - or: '또는', - open: '열기', - order: '순서', - pageNotFound: '페이지를 찾을 수 없음', - password: '비밀번호', - payloadSettings: 'Payload 설정', - perPage: '페이지당 개수: {{limit}}', - remove: '제거', - reset: '초기화', - row: '행', - rows: '행', - save: '저장', - saving: '저장 중...', - searchBy: '{{label}}로 검색', - selectAll: '{{count}}개 {{label}} 모두 선택', - selectAllRows: '모든 행 선택', - selectValue: '값 선택', - selectedCount: '{{count}}개의 {{label}} 선택됨', - showAllLabel: '{{label}} 모두 표시', - sorryNotFound: '죄송합니다. 요청과 일치하는 항목이 없습니다.', - sort: '정렬', - sortByLabelDirection: '{{label}} {{direction}}으로 정렬', - stayOnThisPage: '이 페이지에 머무르기', - submissionSuccessful: '제출이 완료되었습니다.', - submit: '제출', - successfullyCreated: '{{label}}이(가) 생성되었습니다.', - successfullyDuplicated: '{{label}}이(가) 복제되었습니다.', - thisLanguage: '한국어', - titleDeleted: '{{label}} "{{title}}"을(를) 삭제했습니다.', - unauthorized: '권한 없음', - unsavedChangesDuplicate: '저장되지 않은 변경 사항이 있습니다. 복제를 계속하시겠습니까?', - untitled: '제목 없음', - updatedAt: '업데이트 일시', - updatedCountSuccessfully: '{{count}}개의 {{label}}을(를) 업데이트했습니다.', - updatedSuccessfully: '성공적으로 업데이트되었습니다.', - updating: '업데이트 중', - uploading: '업로드 중', - user: '사용자', - users: '사용자', - value: '값', - welcome: '환영합니다', - }, - operators: { - contains: '포함', - equals: '같음', - exists: '존재', - isGreaterThan: '보다 큼', - isGreaterThanOrEqualTo: '보다 크거나 같음', - isIn: '포함됨', - isLessThan: '보다 작음', - isLessThanOrEqualTo: '보다 작거나 같음', - isLike: '유사', - isNotEqualTo: '같지 않음', - isNotIn: '포함되지 않음', - near: '근처', - }, - upload: { - crop: '자르기', - cropToolDescription: - '선택한 영역의 모퉁이를 드래그하거나 새로운 영역을 그리거나 아래의 값을 조정하세요.', - dragAndDrop: '파일을 끌어다 놓으세요', - dragAndDropHere: '또는 여기로 파일을 끌어다 놓으세요', - editImage: '이미지 수정', - focalPoint: '초점', - focalPointDescription: '미리보기에서 초점을 직접 드래그하거나 아래의 값을 조정하세요.', - fileName: '파일 이름', - fileSize: '파일 크기', - height: '높이', - lessInfo: '정보 숨기기', - moreInfo: '정보 더보기', - previewSizes: '미리보기 크기', - selectCollectionToBrowse: '찾을 컬렉션 선택', - selectFile: '파일 선택', - setCropArea: '자르기 영역 설정', - setFocalPoint: '초점 설정', - sizes: '크기', - sizesFor: '{{label}} 크기', - width: '너비', - }, - validation: { - emailAddress: '유효한 이메일 주소를 입력하세요.', - enterNumber: '유효한 숫자를 입력하세요.', - fieldHasNo: '이 입력란에는 {{label}}이(가) 없습니다.', - greaterThanMax: '{{value}}은(는) 최대 허용된 {{label}}인 {{max}}개보다 큽니다.', - invalidInput: '이 입력란에는 유효하지 않은 입력이 있습니다.', - invalidSelection: '이 입력란에는 유효하지 않은 선택이 있습니다.', - invalidSelections: '이 입력란에는 다음과 같은 유효하지 않은 선택 사항이 있습니다:', - lessThanMin: '{{value}}은(는) 최소 허용된 {{label}}인 {{min}}개보다 작습니다.', - limitReached: '제한에 도달했습니다. {{max}}개 항목만 추가할 수 있습니다.', - longerThanMin: '이 값은 최소 길이인 {{minLength}}자보다 길어야 합니다.', - notValidDate: '"{{value}}"은(는) 유효한 날짜가 아닙니다.', - required: '이 입력란은 필수입니다.', - requiresAtLeast: '이 입력란운 최소한 {{count}} {{label}}이 필요합니다.', - requiresNoMoreThan: '이 입력란은 최대 {{count}} {{label}} 이하이어야 합니다.', - requiresTwoNumbers: '이 입력란은 두 개의 숫자가 필요합니다.', - shorterThanMax: '이 값은 최대 길이인 {{maxLength}}자보다 짧아야 합니다.', - trueOrFalse: '이 입력란은 true 또는 false만 가능합니다.', - validUploadID: '이 입력란은 유효한 업로드 ID가 아닙니다.', - }, - version: { - aboutToPublishSelection: '선택한 {{label}}을(를) 게시하려고 합니다. 계속하시겠습니까?', - aboutToRestore: '이 {{label}} 문서를 {{versionDate}}기준 버전으로 복원하려고 합니다.', - aboutToRestoreGlobal: '글로벌 {{label}}을(를) {{versionDate}}기준 버전으로 복원하려고 합니다.', - aboutToRevertToPublished: - '이 문서의 변경 사항을 게시된 상태로 되돌리려고 합니다. 계속하시겠습니까?', - aboutToUnpublish: '이 문서를 게시 해제하려고 합니다. 계속하시겠습니까?', - aboutToUnpublishSelection: '선택한 {{label}}을(를) 게시 해제하려고 합니다. 계속하시겠습니까?', - autosave: '자동 저장', - autosavedSuccessfully: '자동 저장이 완료되었습니다.', - autosavedVersion: '자동 저장된 버전', - changed: '변경됨', - compareVersion: '비교할 버전 선택:', - confirmPublish: '게시하기', - confirmRevertToSaved: '저장된 상태로 되돌리기', - confirmUnpublish: '게시 해제하기', - confirmVersionRestoration: '버전 복원하기', - currentDocumentStatus: '현재 {{docStatus}} 문서', - draft: '초안', - draftSavedSuccessfully: '초안이 저장되었습니다.', - lastSavedAgo: '마지막으로 저장한지 {{distance}} 전', - noFurtherVersionsFound: '더 이상의 버전을 찾을 수 없습니다.', - noRowsFound: '{{label}}을(를) 찾을 수 없음', - preview: '미리보기', - problemRestoringVersion: '이 버전을 복원하는 중 문제가 발생했습니다.', - publish: '게시', - publishChanges: '변경 사항 게시', - published: '게시됨', - publishing: '게시', - restoreThisVersion: '이 버전 복원', - restoredSuccessfully: '복원이 완료되었습니다.', - restoring: '복원 중...', - revertToPublished: '게시된 상태로 되돌리기', - reverting: '되돌리는 중...', - saveDraft: '초안 저장', - selectLocales: '표시할 locale 선택', - selectVersionToCompare: '비교할 버전 선택', - showLocales: 'locale 표시:', - showingVersionsFor: '다음 버전 표시 중:', - status: '상태', - type: '유형', - unpublish: '게시 해제', - unpublishing: '게시 해제 중...', - version: '버전', - versionCount_many: '{{count}}개의 버전을 찾았습니다', - versionCount_none: '버전을 찾을 수 없습니다', - versionCount_one: '{{count}}개의 버전을 찾았습니다', - versionCount_other: '{{count}}개의 버전을 찾았습니다', - versionCreatedOn: '{{version}} 생성 날짜:', - versionID: '버전 ID', - versions: '버전', - viewingVersion: '{{entityLabel}} {{documentTitle}}의 버전 보기', - viewingVersionGlobal: '글로벌 {{entityLabel}}의 버전 보기', - viewingVersions: '{{entityLabel}} {{documentTitle}}에 대한 버전 보기', - viewingVersionsGlobal: '글로벌 {{entityLabel}}에 대한 버전 보기', - }, -} diff --git a/packages/translations/src/all/my.ts b/packages/translations/src/all/my.ts deleted file mode 100644 index fdfda978d2..0000000000 --- a/packages/translations/src/all/my.ts +++ /dev/null @@ -1,397 +0,0 @@ -export default { - authentication: { - account: 'အကောင့်', - accountOfCurrentUser: 'သင့် အကောင့်', - alreadyActivated: 'အတည်ပြုပြီး', - alreadyLoggedIn: 'ဝင်ရောက်ပြီးသား', - apiKey: 'API Key', - backToLogin: 'အကောင့်ထဲ ပြန်ဝင်မည်။', - beginCreateFirstUser: 'စတင်နိုင်ရန် ပထမဦးစွာ အသုံးပြုသူအား ဖန်တီးပါ။', - changePassword: 'စကားဝှက် ပြောင်းလဲမည်။', - checkYourEmailForPasswordReset: - 'သင့်စကားဝှက်ကို ပြန်လည်သတ်မှတ်နိုင်ရန်အတွက် မေးလ်ပို့ထားပါသည်။', - confirmGeneration: 'Generation အတည်ပြု', - confirmPassword: 'စကားဝှက်အား ထပ်မံ ရိုက်ထည့်ပါ။', - createFirstUser: 'ပထမဆုံး အသုံးပြုသူကို ဖန်တီးပါ။', - emailNotValid: 'ထည့်သွင်းထားသော အီးမေလ်မှာ မှားယွင်းနေပါသည်။', - emailSent: 'မေးလ် ပို့ထားပါသည်။', - enableAPIKey: 'API Key ကိုဖွင့်ရန်', - failedToUnlock: 'လော့ခ်ဖွင့်၍မရပါ။', - forceUnlock: 'လော့ခ်ဖွင့်ရန်', - forgotPassword: 'စကားဝှက် မေ့နေပါသလား။', - forgotPasswordEmailInstructions: - 'ကျေးဇူးပြု၍ သင့်အီးမေးလ်ကို ထည့်သွင်းပါ။ သင့်စကားဝှက်ကို ပြန်လည်သတ်မှတ်နိုင်ရန် အီးမေးလ်စာတစ်စောင်ကို သင်လက်ခံရရှိမည်ဖြစ်သည်။', - forgotPasswordQuestion: 'စကားဝှက် မေ့နေပါသလား။', - generate: 'Generate', - generateNewAPIKey: 'API key အသစ်ဖန်တီးရန်', - generatingNewAPIKeyWillInvalidate: - 'API ကီးအသစ်တစ်ခုကို ဖန်တီးခြင်းသည် ယခင်ကီးကို <1>တရားဝင်ခြင်းမရှိစေဘဲ ဖြစ်လိမ့်မည်။ ဆက်လုပ်မှာတာ သေချာပါသလား။', - lockUntil: 'Lock Until', - logBackIn: 'အကောင့်ထဲ ပြန်ဝင်မည်။', - logOut: 'အကောင့်ထဲက ထွက်မည်။', - loggedIn: 'အခြားအကောင့်နှင့် လော့ဂ်အင်ဝင်လိုပါက <0>လော့ဂ်အောက် ပြုလုပ်ပါ။', - loggedInChangePassword: - 'စကားဝှက် ပြောင်းလဲရန်အတွက် သင့် <0>အကောင့် သို့ဝင်ရောက်ပြီး ပြင်ဆင် သတ်မှတ်ပါ။', - loggedOutInactivity: 'လုပ်ဆောင်ချက်မရှိခြင်းကြောင့် သင်သည် ထွက်လိုက်ပါသည်။', - loggedOutSuccessfully: 'သင်သည် အောင်မြင်စွာ ထွက်ပြီးပါပြီ။', - login: 'အကောင့်ထဲ ဝင်မည်။', - loginAttempts: 'လော့ဂ်အင် လုပ်ဆောင်ချက်များ', - loginUser: 'လော့ဂ်အင် အသုံးပြုသူ', - loginWithAnotherUser: 'အခြားအကောင့်နှင့် လော့ဂ်အင်ဝင်လိုပါက <0>လော့ဂ်အောက် ပြုလုပ်ပါ။', - logout: 'အကောင့်မှ ထွက်မည်၊', - logoutUser: 'လော့ဂ်အောက် အသုံးပြုသူ', - newAPIKeyGenerated: 'New API Key Generated.', - newAccountCreated: - '{{serverURL}} သို့ဝင်ရောက်ရန် သင့်အီးမေးလ်ကို အတည်ပြုရန်အတွက် အကောင့်အသစ်တစ်ခုကို ယခုလေးတင် ဖန်တီးပြီးပါပြီ။ ကျေးဇူးပြု၍ အောက်ပါလင့်ခ်ကို နှိပ်ပါ သို့မဟုတ် သင့်အီးမေးလ်ကို အတည်ပြုရန် ဖော်ပြပါ လင့်ခ်ကို သင့်ဘရောက်ဆာထဲသို့ ကူးထည့်ပါ- {{verificationURL}}
    သင့်အီးမေးလ်ကို အတည်ပြုပြီးနောက်၊ သင်သည် အောင်မြင်စွာ လော့ဂ်အင်ဝင်နိုင်ပါမည်။', - newPassword: 'စကားဝှက် အသစ်', - resetPassword: 'စကားဝှက် ပြန်လည်သတ်မှတ်', - resetPasswordExpiration: 'စကားဝှက် ပြန်လည်သတ်မှတ်ရန် သတ်တမ်း', - resetPasswordToken: 'စကားဝှက် တိုကင်အား ပြန်လည်သတ်မှတ်', - resetYourPassword: 'သင့်စကားဝှက်ကို ပြန်လည်သတ်မှတ်ပါ။', - stayLoggedIn: 'အကောင့်ထဲ ဝင်ထားသည်။', - successfullyUnlocked: 'အောင်မြင်စွာသော့ဖွင့်ခဲ့သည်။', - unableToVerify: 'စိစစ်၍မရပါ။', - verified: 'စိစစ်ပြီး', - verifiedSuccessfully: 'အတည်ပြုပြီးပါပြီ။', - verify: 'စိစစ်ခြင်း', - verifyUser: 'အသုံးပြုသူ စီစစ်ခြင်း', - verifyYourEmail: 'သင့်အီးမေးလ်ကို အတည်ပြုပါ။', - youAreInactive: - 'သင်သည် အချိန်အနည်းငယ်အတွင်း active မဖြစ်ပါက သင့်အကောင့် လုံခြုံရေးအတွက် မကြာမီ အလိုအလျောက် လော့ဂ်အောက်ဖြစ်ပါမည်။ အကောင့်ထဲ ဆက်နေလိုပါသလား။', - youAreReceivingResetPassword: - 'သင့်အကောင့်အတွက် စကားဝှက်ကို ပြန်လည်သတ်မှတ်ရန် သင် (သို့မဟုတ် အခြားသူတစ်ဦးဦး) က တောင်းဆိုထားသောကြောင့်လက်ခံရရှိခြင်းဖြစ်သည်။ ကျေးဇူးပြု၍ အောက်ပါလင့်ခ်ကို နှိပ်ပါ (သို့မဟုတ်) ၎င်းကို သင့်ဘရောက်ဆာထဲသို့ ကူးထည့်ပါ။', - youDidNotRequestPassword: - 'ယခု လုပ်ဆောင်ချက်ကို သင်မတောင်းဆိုထားပါက ဤအီးမေးလ်ကို လျစ်လျူရှုထားခြင်းဖြင့် သင့်စကားဝှက်သည် ပြောင်းလဲမည်မဟုတ်ပါ။', - }, - error: { - accountAlreadyActivated: 'ဤအကောင့်ကို အသက်သွင်းပြီးဖြစ်သည်။', - autosaving: 'ဖိုင်ကို အလိုအလျောက်သိမ်းဆည်းရာတွင် ပြဿနာတစ်ခုရှိနေသည်။', - correctInvalidFields: 'ကျေးဇူးပြု၍ အချက်အလက်များကို ပြန်လည် စစ်ဆေးပါ။', - deletingFile: 'ဖိုင်ကိုဖျက်ရာတွင် အမှားအယွင်းရှိနေသည်။', - deletingTitle: - '{{title}} ကို ဖျက်ရာတွင် အမှားအယွင်းရှိခဲ့သည်။ သင့် အင်တာနက်လိုင်းအား စစ်ဆေးပြီး ထပ်မံကြို့စားကြည့်ပါ။', - emailOrPasswordIncorrect: 'ထည့်သွင်းထားသော အီးမေးလ် သို့မဟုတ် စကားဝှက်သည် မမှန်ပါ။', - followingFieldsInvalid_one: 'ထည့်သွင်းထားသော အချက်အလက်သည် မမှန်ကန်ပါ။', - followingFieldsInvalid_other: 'ထည့်သွင်းထားသော အချက်အလက်များသည် မမှန်ကန်ပါ။', - incorrectCollection: 'မှားယွင်းသော စုစည်းမှု', - invalidFileType: 'မမှန်ကန်သော ဖိုင်အမျိုးအစား', - invalidFileTypeValue: 'မမှန်ကန်သော ဖိုင်အမျိုးအစား: {{value}}', - loadingDocument: '{{id}} ID ဖြင့် ဖိုင်ကို ဖွင့်ရာတွင် ပြဿနာရှိနေသည်။', - missingEmail: 'အီးမေးလ်ပျောက်ဆုံး', - missingIDOfDocument: 'ပြင်ဆင်ရန် ဖိုင် ID ပျောက်နေပါသည်။', - missingIDOfVersion: 'ပျောက်ဆုံး ဗားရှင်း ID', - missingRequiredData: 'လိုအပ်သောဒေတာ ပျောက်ဆုံးနေပါသည်။', - noFilesUploaded: 'ဖိုင်များကို အပ်လုဒ်လုပ်ထားခြင်းမရှိပါ။', - noMatchedField: '"{{label}}" အတွက် ကိုက်ညီသောအပိုင်းကို ရှာမတွေ့ပါ။', - noUser: 'အသုံးပြုသူ မရှိပါ။', - notAllowedToAccessPage: 'ဤစာမျက်နှာကို ဝင်ရောက်ခွင့်မပြုပါ။', - notAllowedToPerformAction: 'ဤလုပ်ဆောင်ချက်ကို လုပ်ဆောင်ရန် ခွင့်မပြုပါ။', - notFound: 'တောင်းဆိုထားသော အရင်းအမြစ်ကို ရှာမတွေ့ပါ။', - previewing: 'ဖိုင်ကို အစမ်းကြည့်ရန် ပြဿနာရှိနေသည်။', - problemUploadingFile: 'ဖိုင်ကို အပ်လုဒ်တင်ရာတွင် ပြဿနာရှိနေသည်။', - tokenInvalidOrExpired: 'တိုကင်သည် မမှန်ကန်ပါ သို့မဟုတ် သက်တမ်းကုန်သွားပါပြီ။', - unPublishingDocument: 'ဖိုင်ကို ပြန်လည့် သိမ်းဆည်းခြင်းမှာ ပြဿနာရှိနေသည်။', - unableToDeleteCount: '{{total}} {{label}} မှ {{count}} ကို ဖျက်၍မရပါ။', - unableToUpdateCount: '{{total}} {{label}} မှ {{count}} ကို အပ်ဒိတ်လုပ်၍မရပါ။', - unauthorized: 'အခွင့်မရှိပါ။ ဤတောင်းဆိုချက်ကို လုပ်ဆောင်နိုင်ရန် သင်သည် လော့ဂ်အင်ဝင်ရပါမည်။', - unknown: 'ဘာမှန်းမသိသော error တက်သွားပါသည်။', - unspecific: 'Error တက်နေပါသည်။', - userLocked: - 'အကောင့်ထဲကို ဝင်ရန် အရမ်းအရမ်းကို ကြိုးပမ်းနေသောကြောင့် အကောင့်အား လော့ခ်ချလိုက်ပါသည်။', - valueMustBeUnique: 'value သည် အဓိပ္ပာယ်ရှိရပါမည်။', - verificationTokenInvalid: 'အတည်ပြုခြင်းတိုကင်သည် မမှန်ကန်ပါ။', - }, - fields: { - addLabel: '{{label}} ထည့်သွင်းမည်။', - addLink: 'လင့်ခ်ထည့်ပါ။', - addNew: 'အသစ် ထည့်သွင်းမည်။', - addNewLabel: '{{label}} အားအသစ် ထည့်သွင်းမည်။', - addRelationship: 'Relationship အသစ်ထည့်သွင်းမည်။', - addUpload: 'Upload ထည့်ပါ။', - block: 'ဘလောက်', - blockType: 'ဘလောက် အမျိုးအစား', - blocks: 'ဘလောက်များ', - chooseBetweenCustomTextOrDocument: - 'စိတ်ကြိုက်စာသား URL ကိုထည့်ခြင်း သို့မဟုတ် အခြားစာရွက်စာတမ်းတစ်ခုသို့ လင့်ခ်ချိတ်ခြင်းအကြား ရွေးချယ်ပါ။', - chooseDocumentToLink: 'ချိတ်ဆက်ရန် စာရွက်စာတမ်းကို ရွေးပါ။', - chooseFromExisting: 'ရှိပြီးသားထဲကပဲ ရွေးချယ်ပါ။', - chooseLabel: '{{label}} အားရွေးချယ်ပါ။', - collapseAll: 'အားလုံးကို ခေါက်သိမ်းပါ။', - customURL: 'စိတ်ကြိုက် URL', - editLabelData: 'ဒေတာ {{label}} ကို တည်းဖြတ်ပါ။', - editLink: 'လင့်ခ်ကို တည်းဖြတ်ပါ။', - editRelationship: 'ဆက်ဆံရေးကို တည်းဖြတ်ပါ။', - enterURL: 'URL တစ်ခုထည့်ပါ။', - internalLink: 'Internal Link', - itemsAndMore: '{{items}} နှင့် နောက်ထပ် {{count}} ခု', - labelRelationship: '{{label}} Relationship', - latitude: 'vĩ độ', - linkType: 'လင့်အမျိုးအစား', - linkedTo: '<0>{{label}} ချိတ်ဆက်ထားသည်။', - longitude: 'လောင်ဂျီကျု', - newLabel: '{{label}} အသစ်', - openInNewTab: 'တက်ဘ်အသစ်တွင် ဖွင့်ပါ။', - passwordsDoNotMatch: 'စကားဝှက်များနှင့် မကိုက်ညီပါ။', - relatedDocument: 'ဆက်စပ် ဖိုင်', - relationTo: 'ဆက်စပ်မှု', - removeRelationship: 'ဆက်ဆံရေးကို ဖယ်ရှားပါ။', - removeUpload: 'အပ်လုဒ်ကို ဖယ်ရှားပါ။', - saveChanges: 'သိမ်းဆည်းမည်။', - searchForBlock: 'ဘလောက်တစ်ခုရှာမည်။', - selectExistingLabel: 'ရှိပြီးသား {{label}} ကို ရွေးပါ', - selectFieldsToEdit: 'တည်းဖြတ်ရန် အကွက်များကို ရွေးပါ။', - showAll: 'အကုန် ကြည့်မည်။', - swapRelationship: 'လဲလှယ်ဆက်ဆံရေး', - swapUpload: 'အပ်လုဒ်ဖလှယ်ပါ။', - textToDisplay: 'ပြသရန် စာသား', - toggleBlock: 'ဘလောက်ကို ပြောင်းပါ။', - uploadNewLabel: '{{label}} အသစ်တင်မည်။', - }, - general: { - aboutToDelete: - '{{label}} <1>{{title}} ကို ဖျက်ပါတော့မည်။ သေချာပြီလား။ ဖျက်ပြီးရင် ပြန်မရဘူးနော်။', - aboutToDeleteCount_many: 'သင်သည် {{count}} {{label}} ကို ဖျက်ပါတော့မည်။', - aboutToDeleteCount_one: 'သင်သည် {{count}} {{label}} ကို ဖျက်ပါတော့မည်။', - aboutToDeleteCount_other: 'သင်သည် {{count}} {{label}} ကို ဖျက်ပါတော့မည်။', - addBelow: 'အောက်တွင်ထည့်ပါ။', - addFilter: 'ဇကာထည့်ပါ။', - adminTheme: 'အက်ပ်ဒိုင်များစပ်စွာ', - and: 'နှင့်', - applyChanges: 'ပြောင်းလဲမှုများ အသုံးပြုပါ', - ascending: 'တက်နေသည်', - automatic: 'အော်တို', - backToDashboard: 'ပင်မစာမျက်နှာသို့ ပြန်သွားမည်။', - cancel: 'မလုပ်တော့ပါ။', - changesNotSaved: - 'သင်၏ပြောင်းလဲမှုများကို မသိမ်းဆည်းရသေးပါ။ ယခု စာမျက်နှာက ထွက်လိုက်ပါက သင်၏ပြောင်းလဲမှုများ အကုန် ဆုံးရှုံးသွားပါမည်။ အကုန်နော်။', - close: 'ပိတ်', - collapse: 'ခေါက်သိမ်းပါ။', - collections: 'စုစည်းမှူများ', - columnToSort: 'ကော်လံ စီရန်', - columns: 'ကော်လံများ', - confirm: 'သေချာပါပြီ။', - confirmDeletion: 'ဖျက်တော့မယ်နော်။', - confirmDuplication: 'ပုံတူပွားခြင်းကို အတည်ပြုပါ။', - copied: 'ကူးယူပြီးပြီ။', - copy: 'ကူးယူမည်။', - create: 'ဖန်တီးမည်။', - createNew: 'အသစ် ဖန်တီးမည်။', - createNewLabel: '{{label}} အသစ် ဖန်တီးမည်။', - created: 'ဖန်တီးခဲ့သည်။', - createdAt: 'ဖန်တီးခဲ့သည့်အချိန်', - creating: 'ဖန်တီးနေသည်။', - creatingNewLabel: '{{label}} အသစ် ဖန်တီးနေသည်။', - dark: 'အမှောင်', - dashboard: 'ပင်မစာမျက်နှာ', - delete: 'ဖျက်မည်။', - deletedCountSuccessfully: '{{count}} {{label}} ကို အောင်မြင်စွာ ဖျက်လိုက်ပါပြီ။', - deletedSuccessfully: 'အောင်မြင်စွာ ဖျက်လိုက်ပါပြီ။', - deleting: 'ဖျက်နေဆဲ ...', - descending: 'ဆင်းသက်လာသည်။', - deselectAllRows: 'အားလုံးကို မရွေးနိုင်ပါ', - duplicate: 'ပုံတူပွားမည်။', - duplicateWithoutSaving: 'သေချာပါပြီ။', - edit: 'တည်းဖြတ်ပါ။', - editLabel: '{{label}} ပြင်ဆင်မည်။', - editing: 'ပြင်ဆင်နေသည်။', - editingLabel_many: 'တည်းဖြတ်ခြင်း {{count}} {{label}}', - editingLabel_one: 'တည်းဖြတ်ခြင်း {{count}} {{label}}', - editingLabel_other: 'တည်းဖြတ်ခြင်း {{count}} {{label}}', - email: 'အီးမေးလ်', - emailAddress: 'အီးမေးလ် လိပ်စာ', - enterAValue: 'တန်ဖိုးတစ်ခုထည့်ပါ။', - error: 'အမှား', - errors: 'အမှားများ', - fallbackToDefaultLocale: 'မူရင်းဒေသသို့ ပြန်ပြောင်းပါ။', - filter: 'ဇကာ', - filterWhere: 'နေရာတွင် စစ်ထုတ်ပါ။', - filters: 'စစ်ထုတ်မှုများ', - globals: 'Globals', - language: 'ဘာသာစကား', - lastModified: 'နောက်ဆုံးပြင်ဆင်ထားသည်။', - leaveAnyway: 'ဘာဖြစ်ဖြစ် ထွက်မည်။', - leaveWithoutSaving: 'မသိမ်းဘဲ ထွက်မည်။', - light: 'အလင်း', - livePreview: 'အစမ်းကြည့်ရန်', - loading: 'ဖွင့်နေသည်', - locale: 'ဒေသ', - locales: 'Locales', - menu: 'မီနူး', - moveDown: 'Move Down', - moveUp: 'Move Up', - newPassword: 'စကားဝှက် အသစ်', - noFiltersSet: 'စစ်ထုတ်မှုများ မသတ်မှတ်ထားပါ။', - noLabel: '<မရှိ {{label}}>', - noOptions: 'ရွေးချယ်မှုမရှိပါ', - noResults: - '{{label}} မတွေ့ပါ။ {{label}} မရှိသေးသည်ဖြစ်စေ အထက်တွင်ဖော်ပြထားသော စစ်ထုတ်မှုများနှင့် ကိုက်ညီမှုမရှိပါ။', - noValue: 'တန်ဖိုး မရှိပါ။', - none: 'တစ်ခုမှ', - notFound: 'ဘာမှ မရှိတော့ဘူး။', - nothingFound: 'ဘာမှလည်း မတွေ့ဘူး။', - of: '၏', - open: 'ဖွင့်မည်။', - or: 'သို့မဟုတ်', - order: 'အစဉ်လိုက်', - pageNotFound: 'ရောက်ရှိနေသော စာမျက်နှာသည် မရှိပါ။', - password: 'စကားဝှက်', - payloadSettings: 'ရွေးချယ်စရာများ', - perPage: 'စာမျက်နှာ အလိုက်: {{limit}}', - remove: 'ဖယ်ရှားမည်။', - reset: 'Tetapkan semula', - row: 'အတန်း', - rows: 'Rows', - save: 'သိမ်းဆည်းမည်။', - saving: 'သိမ်းနေဆဲ ...', - searchBy: 'ရှာဖွေပါ။', - selectAll: '{{count}} {{label}} အားလုံးကို ရွေးပါ', - selectAllRows: 'အားလုံးကိုရွေးချယ်ပါ', - selectValue: 'တစ်ခုခုကို ရွေးချယ်ပါ။', - selectedCount: '{{count}} {{label}} ကို ရွေးထားသည်။', - showAllLabel: 'Tunjukkan semua {{label}}', - sorryNotFound: 'ဝမ်းနည်းပါသည်။ သင်ရှာနေတဲ့ဟာ ဒီမှာမရှိပါ။', - sort: 'အစဉ်လိုက်', - sortByLabelDirection: 'အစဉ်အလိုက် စီမံခန့်ခွဲထားသည် {{label}} {{direction}}', - stayOnThisPage: 'ဒီမှာပဲ ဆက်နေမည်။', - submissionSuccessful: 'သိမ်းဆည်းမှု အောင်မြင်ပါသည်။', - submit: 'သိမ်းဆည်းမည်။', - successfullyCreated: '{{label}} အောင်မြင်စွာဖန်တီးခဲ့သည်။', - successfullyDuplicated: '{{label}} အောင်မြင်စွာ ပုံတူပွားခဲ့သည်။', - thisLanguage: 'မြန်မာစာ', - titleDeleted: '{{label}} {{title}} အောင်မြင်စွာ ဖျက်သိမ်းခဲ့သည်။', - unauthorized: 'အခွင့်မရှိပါ။', - unsavedChangesDuplicate: - 'သင့်တွင် မသိမ်းဆည်းရသေးသော ပြောင်းလဲမှုများ ရှိနေပါသည်။ ပုံတူပွားမှာ သေချာပြီလား။', - untitled: 'ခေါင်းစဥ်မဲ့', - updatedAt: 'ပြင်ဆင်ခဲ့သည့်အချိန်', - updatedCountSuccessfully: '{{count}} {{label}} ကို အောင်မြင်စွာ အပ်ဒိတ်လုပ်ခဲ့သည်။', - updatedSuccessfully: 'အပ်ဒိတ်လုပ်ပြီးပါပြီ။', - updating: 'ပြင်ဆင်ရန်', - uploading: 'တင်ပေးနေသည်', - user: 'အသုံးပြုသူ', - users: 'အသုံးပြုသူများ', - value: 'တန်ဖိုး', - welcome: 'ကြိုဆိုပါတယ်။', - }, - operators: { - contains: 'ပါဝင်သည်', - equals: 'ညီမျှ', - exists: 'တည်ရှိသည်', - isGreaterThan: 'ထက်ကြီးသည်', - isGreaterThanOrEqualTo: 'ထက်ကြီးသည် သို့မဟုတ် ညီမျှသည်', - isIn: 'ရှိ', - isLessThan: 'ထက်နည်းသည်', - isLessThanOrEqualTo: 'ထက်နည်းသည် သို့မဟုတ် ညီမျှသည်', - isLike: 'တူသည်', - isNotEqualTo: 'ညီမျှသည်', - isNotIn: 'မဝင်ပါ', - near: 'နီး', - }, - upload: { - crop: 'သုန်း', - cropToolDescription: - 'ရွေးထားသည့်ဧရိယာတွင်မွေးလျှက်မှုများကိုဆွဲပြီး, အသစ်တည်ပြီးသို့မဟုတ်အောက်ပါတ', - dragAndDrop: 'ဖိုင်တစ်ဖိုင်ကို ဆွဲချလိုက်ပါ။', - dragAndDropHere: 'သို့မဟုတ် ဖိုင်တစ်ခုကို ဤနေရာတွင် ဆွဲချပါ။', - editImage: 'ပုံပြင်ပြောင်းရန်', - fileName: 'ဖိုင် နာမည်', - fileSize: 'ဖိုင် အရွယ်အစား', - focalPoint: 'အကန့်အသတ်ချုပ်', - focalPointDescription: - 'ပြသနားရထားသည့်ပုံအားထိန်းသိမ်းရန် ဖိုကယ်ပိုင်းကို တိုက်ရိုက်ပွဲ့နိုင်သည် သို', - height: 'Height', - lessInfo: 'အချက်အလက်နည်းတယ်။', - moreInfo: 'အချက်အလက်', - previewSizes: 'Saiz Pratonton', - selectCollectionToBrowse: 'စုစည်းမှု တစ်ခုခုကို ရွေးချယ်ပါ။', - selectFile: 'ဖိုင်ရွေးပါ။', - setCropArea: 'စပြန်းနယ်မြေထားပါ', - setFocalPoint: 'အစေခံဖောက်ရေစနစ်ကိုသတ်မှတ်ပါ', - sizes: 'အရွယ်အစားများ', - sizesFor: '{{label}} အတွက် အရွယ်အစားများ', - width: 'အကျယ်', - }, - validation: { - emailAddress: 'မှန်ကန်သော အီးမေးလ်လိပ်စာကို ထည့်သွင်းပါ။', - enterNumber: 'မှန်ကန်သောနံပါတ်တစ်ခုထည့်ပါ။', - fieldHasNo: 'ဤအကွက်တွင် {{label}} မရှိပါ။', - greaterThanMax: - '{{value}} သည် {{max}} ထက် ပိုမိုကြီးသည်။ ဤသည်ဖြင့် {{label}} အများဆုံးခွင့်ပြုထားသော တန်ဖိုးထက် ကြီးသည်။', - invalidInput: 'ဤအကွက်တွင် မမှန်ကန်သော ထည့်သွင်းမှုတစ်ခုရှိသည်။', - invalidSelection: 'ဤအကွက်တွင် မမှန်ကန်သော ရွေးချယ်မှုတစ်ခုရှိသည်။', - invalidSelections: 'ဤအကွက်တွင် အောက်ပါ မမှန်ကန်သော ရွေးချယ်မှုများ ရှိသည်', - lessThanMin: - '{{value}} သည် {{min}} ထက် ပိုမိုနိမ့်သည်။ ဤသည်ဖြင့် {{label}} အနည်းဆုံးခွင့်ပြုထားသော တန်ဖိုးထက် နိမ့်သည်။', - limitReached: - 'Had yang dibenarkan telah dicapai, hanya {{max}} item sahaja yang boleh ditambah.', - longerThanMin: 'ဤတန်ဖိုးသည် အနိမ့်ဆုံးအရှည် {{minLength}} စာလုံးထက် ပိုရှည်ရမည်။', - notValidDate: '"{{value}}" သည် တရားဝင်ရက်စွဲမဟုတ်ပါ။', - required: 'ဤအကွက်ကို လိုအပ်သည်။', - requiresAtLeast: 'ဤအကွက်သည် အနည်းဆုံး {{count}} {{label}} လိုအပ်သည်', - requiresNoMoreThan: 'ဤအကွက်တွင် {{count}} {{label}} ထက် မပိုရပါ။', - requiresTwoNumbers: 'ဤအကွက်သည် နံပါတ်နှစ်ခု လိုအပ်ပါသည်။', - shorterThanMax: 'ဤတန်ဖိုးသည် စာလုံး {{maxLength}} လုံး၏ အမြင့်ဆုံးအရှည်ထက် ပိုတိုရပါမည်။', - trueOrFalse: 'ဤအကွက်သည် တစ်ခုခုဖြစ်ရပါမည်။', - validUploadID: "'ဤအကွက်သည် မှန်ကန်သော အပ်လုဒ် ID မဟုတ်ပါ။'", - }, - version: { - aboutToPublishSelection: - 'သင်သည် ရွေးချယ်မှုတွင် {{label}} အားလုံးကို ထုတ်ဝေပါတော့မည်။ သေချာလား?', - aboutToRestore: - 'သင်သည် ဤ {{label}} စာရွက်စာတမ်းကို {{versionDate}} တွင် ပါရှိသည့် အခြေအနေသို့ ပြန်ယူတော့မည်။', - aboutToRestoreGlobal: - 'သင်သည် ဂလိုဘယ် {{label}} ကို {{versionDate}} တွင် ပါရှိသည့် အခြေအနေသို့ ပြန်လည်ရောက်ရှိတော့မည်ဖြစ်သည်။', - aboutToRevertToPublished: - 'သင်သည် အပြောင်းအလဲများကို အများဆိုင် အခြေအနေသို့ ပြန်ပြောင်းပါတော့မည်။ သေချာလား?', - aboutToUnpublish: 'အများဆိုင်မှ ပြန်ဖြုတ်တော့မည်။ သေချာလား', - aboutToUnpublishSelection: - 'သင်သည် ရွေးချယ်မှုတွင် {{label}} အားလုံးကို ထုတ်ဝေတော့မည် ဖြစ်သည်။ သေချာလား?', - autosave: 'အလိုအလျောက်သိမ်းဆည်းပါ။', - autosavedSuccessfully: 'အလိုအလျောက် သိမ်းဆည်းပြီးပါပြီ။', - autosavedVersion: 'အော်တို ဗားရှင်း', - changed: 'ပြောင်းခဲ့သည်။', - compareVersion: 'ဗားရှင်းနှင့် နှိုင်းယှဉ်ချက်:', - confirmPublish: 'ထုတ်ဝေအတည်ပြုပါ။', - confirmRevertToSaved: 'သိမ်းဆည်းပြီးကြောင်း အတည်ပြုပါ။', - confirmUnpublish: 'အများဆိုင်ကို ဖျက်ရန် အတည်ပြုပါ။', - confirmVersionRestoration: 'ဗားရှင်းပြန်လည် အသုံးပြုခြင်းကို အတည်ပြုပါ။', - currentDocumentStatus: 'လက်ရှိ {{docStatus}} ဖိုင်', - draft: 'မူကြမ်း', - draftSavedSuccessfully: 'မူကြမ်းကို အောင်မြင်စွာ သိမ်းဆည်းပြီးပါပြီ။', - lastSavedAgo: 'နောက်ဆုံး သိမ်းချက် {{distance}} ကြာပြီး', - noFurtherVersionsFound: 'နောက်ထပ်ဗားရှင်းများ မတွေ့ပါ။', - noRowsFound: '{{label}} အားမတွေ့ပါ။', - preview: 'နမူနာပြရန်', - problemRestoringVersion: 'ဤဗားရှင်းကို ပြန်လည်ရယူရာတွင် ပြဿနာရှိနေသည်။', - publish: 'ထုတ်ဝေသည်။', - publishChanges: 'အပြောင်းအလဲများကို တင်ခဲ့သည်။', - published: 'တင်ပြီးပြီ။', - publishing: 'ထုတ်ဝေခြင်း', - restoreThisVersion: 'ဤဗားရှင်းကိုကို ပြန်ယူမည်။', - restoredSuccessfully: 'အောင်မြင်စွာ ပြန်လည်ရယူခဲ့သည်။', - restoring: 'ပြန်ယူနေဆဲ...', - revertToPublished: 'အများဆိုင်သို့ ပြန်ပြောင်းပါ။', - reverting: 'ပြန်ပြောင်းနေဆဲ...', - saveDraft: 'မှုကြမ်းကို သိမ်းဆည်းမည်။', - selectLocales: 'ပြသရန် ဒေသန္တရများကို ရွေးပါ။', - selectVersionToCompare: 'နှိုင်းယှဉ်ရန် ဗားရှင်းကို ရွေးပါ။', - showLocales: 'ဒေသန္တရများကိုပြပါ။:', - showingVersionsFor: 'အတွက် ဗားရှင်းများကို ပြသနေသည်-', - status: 'အခြေအနေ', - type: 'အမျိုးအစား', - unpublish: 'ပြန်ဖြုတ်မည်။', - unpublishing: 'ပြန်ဖြုတ်နေဆဲ ...', - version: 'ဗားရှင်း', - versionCount_many: '{{count}} ဗားရှင်းများကို တွေ့ပါသည်။', - versionCount_none: 'ဗားရှင်းရှာဖွေ့ပါ။', - versionCount_one: '{{count}} ဗားရှင်အား တွေ့ပါသည်။', - versionCount_other: 'ဗားရှင်း {{count}} ခု တွေ့ရှိပါသည်။', - versionCreatedOn: '{{version}} အား ဖန်တီးခဲ့သည်။', - versionID: 'ဗားရှင်း ID', - versions: 'ဗားရှင်းများ', - viewingVersion: '{{entityLabel}} {{documentTitle}} အတွက် ဗားရှင်းကို ကြည့်ရှုနေသည်', - viewingVersionGlobal: '`ဂလိုဘယ်ဆိုင်ရာ {entityLabel}} အတွက် ဗားရှင်းကို ကြည့်ရှုနေသည်', - viewingVersions: '{{entityLabel}} {{documentTitle}} အတွက် ဗားရှင်းများကို ကြည့်ရှုခြင်း', - viewingVersionsGlobal: '`ဂလိုဘယ်ဆိုင်ရာ {{entityLabel}} အတွက် ဗားရှင်းများကို ကြည့်ရှုနေသည်', - }, -} diff --git a/packages/translations/src/all/nb.ts b/packages/translations/src/all/nb.ts deleted file mode 100644 index 25a88bcd21..0000000000 --- a/packages/translations/src/all/nb.ts +++ /dev/null @@ -1,391 +0,0 @@ -export default { - authentication: { - account: 'Konto', - accountOfCurrentUser: 'Konto til nåværende bruker', - alreadyActivated: 'Allerede aktivert', - alreadyLoggedIn: 'Allerede logget inn', - apiKey: 'API-nøkkel', - backToLogin: 'Tilbake til innlogging', - beginCreateFirstUser: 'Opprett din første bruker for å fortsette.', - changePassword: 'Endre passord', - checkYourEmailForPasswordReset: - 'Sjekk e-posten din for en lenke som lar deg tilbakestille passordet ditt.', - confirmGeneration: 'Bekreft generering', - confirmPassword: 'Bekreft passord', - createFirstUser: 'Opprett første bruker', - emailNotValid: 'E-posten er ikke gyldig', - emailSent: 'E-post sendt', - enableAPIKey: 'Aktiver API-nøkkel', - failedToUnlock: 'Kunne ikke låse opp', - forceUnlock: 'Tving opplåsing', - forgotPassword: 'Glemt passord', - forgotPasswordEmailInstructions: - 'Skriv inn e-postadressen din nedenfor, og vi vil sende deg en e-post med instruksjoner om hvordan du tilbakestiller passordet ditt.', - forgotPasswordQuestion: 'Glemt passord?', - generate: 'Generer', - generateNewAPIKey: 'Generer ny API-nøkkel', - generatingNewAPIKeyWillInvalidate: - 'Å generere en ny API-nøkkel vil <1>ugyldiggjøre den forrige nøkkelen. Er du sikker på at du vil fortsette?', - lockUntil: 'Lås til', - logBackIn: 'Logg inn igjen', - logOut: 'Logg ut', - loggedIn: 'For å logge inn med en annen bruker, må du <0>logge ut først.', - loggedInChangePassword: - 'For å endre passordet ditt, gå til <0>kontoen din og endre passordet der.', - loggedOutInactivity: 'Du har blitt logget ut på grunn av inaktivitet.', - loggedOutSuccessfully: 'Du har blitt logget ut.', - login: 'Logg inn', - loginAttempts: 'Innloggingsforsøk', - loginUser: 'Logg inn bruker', - loginWithAnotherUser: 'For å logge inn med en annen bruker, må du <0>logge ut først.', - logout: 'Logg ut', - logoutUser: 'Logg ut bruker', - newAPIKeyGenerated: 'Ny API-nøkkel generert.', - newAccountCreated: - 'En ny konto har blitt opprettet for deg på {{serverURL}} Klikk på lenken nedenfor eller lim inn URLen i nettleseren din for å bekrefte e-postadressen din: {{verificationURL}}
    Etter at du har bekreftet e-postadressen din, kan du logge inn.', - newPassword: 'Nytt passord', - resetPassword: 'Tilbakestill passord', - resetPasswordExpiration: 'Tilbakestill passordets utløpsdato', - resetPasswordToken: 'Tilbakestill passordet-token', - resetYourPassword: 'Tilbakestill passordet ditt', - stayLoggedIn: 'Forbli logget inn', - successfullyUnlocked: 'Låst opp', - unableToVerify: 'Kunne ikke bekrefte', - verified: 'Bekreftet', - verifiedSuccessfully: 'Bekreftet', - verify: 'Bekreft', - verifyUser: 'Bekreft bruker', - verifyYourEmail: 'Bekreft e-postadressen din', - youAreInactive: - 'Du har ikke vært aktiv i en stund, og vil snart bli logget ut automatisk for din egen sikkerhet. Vil du forbli innlogget?', - youAreReceivingResetPassword: - 'Du mottar denne e-posten fordi du (eller noen andre) har bedt om tilbakestilling av passordet til kontoen din. Klikk på lenken nedenfor, eller lim den inn i nettleseren din for å fullføre prosessen:', - youDidNotRequestPassword: - 'Hvis du ikke har bedt om dette, kan du ignorere denne e-posten, og passordet ditt vil forbli uendret.', - }, - error: { - accountAlreadyActivated: 'Denne kontoen er allerede aktivert.', - autosaving: 'Det oppstod et problem under automatisk lagring av dokumentet.', - correctInvalidFields: 'Korriger ugyldige felt.', - deletingFile: 'Det oppstod en feil under sletting av filen.', - deletingTitle: - 'Det oppstod en feil under sletting av {{title}}. Sjekk tilkoblingen og prøv igjen.', - emailOrPasswordIncorrect: 'E-postadressen eller passordet er feil.', - followingFieldsInvalid_one: 'Følgende felt er ugyldig:', - followingFieldsInvalid_other: 'Følgende felter er ugyldige:', - incorrectCollection: 'Ugyldig samling', - invalidFileType: 'Ugyldig filtype', - invalidFileTypeValue: 'Ugyldig filtype: {{value}}', - loadingDocument: 'Det oppstod et problem under lasting av dokumentet med ID {{id}}.', - missingEmail: 'Mangler e-postadresse.', - missingIDOfDocument: 'Mangler ID for dokumentet som skal oppdateres.', - missingIDOfVersion: 'Mangler ID for versjonen.', - missingRequiredData: 'Mangler påkrevd data.', - noFilesUploaded: 'Ingen filer ble lastet opp.', - noMatchedField: 'Ingen matchende felt funnet for "{{label}}"', - noUser: 'Ingen bruker', - notAllowedToAccessPage: 'Du har ikke tilgang til denne siden.', - notAllowedToPerformAction: 'Du har ikke tillatelse til å utføre denne handlingen.', - notFound: 'Den forespurte ressursen ble ikke funnet.', - previewing: 'Det oppstod et problem under forhåndsvisning av dokumentet.', - problemUploadingFile: 'Det oppstod et problem under opplasting av filen.', - tokenInvalidOrExpired: 'Token er enten ugyldig eller har utløpt.', - unPublishingDocument: 'Det oppstod et problem under avpublisering av dokumentet.', - unableToDeleteCount: 'Kan ikke slette {{count}} av {{total}} {{label}}.', - unableToUpdateCount: 'Kan ikke oppdatere {{count}} av {{total}} {{label}}.', - unauthorized: 'Uautorisert, du må være innlogget for å gjøre denne forespørselen.', - unknown: 'En ukjent feil har oppstått.', - unspecific: 'En feil har oppstått.', - userLocked: 'Denne brukeren er låst på grunn av for mange mislykkede innloggingsforsøk.', - valueMustBeUnique: 'Verdien må være unik', - verificationTokenInvalid: 'Verifiseringskoden er ugyldig.', - }, - fields: { - addLabel: 'Legg til {{label}}', - addLink: 'Legg til Lenke', - addNew: 'Legg til ny', - addNewLabel: 'Legg til ny {{label}}', - addRelationship: 'Legg til Relasjon', - addUpload: 'Legg til Opplasting', - block: 'blokk', - blockType: 'Blokktype', - blocks: 'blokker', - chooseBetweenCustomTextOrDocument: - 'Velg mellom å skrive inn en egen tekst-URL eller å lenke til et annet dokument.', - chooseDocumentToLink: 'Velg et dokument å lenke til', - chooseFromExisting: 'Velg fra eksisterende', - chooseLabel: 'Velg {{label}}', - collapseAll: 'Skjul alle', - customURL: 'Egendefinert URL', - editLabelData: 'Rediger {{label}}-data', - editLink: 'Rediger lenke', - editRelationship: 'Rediger relasjon', - enterURL: 'Skriv inn en URL', - internalLink: 'Intern lenke', - itemsAndMore: '{{items}} og {{count}} flere', - labelRelationship: '{{label}}-relasjon', - latitude: 'Breddegrad', - linkType: 'Lenketype', - linkedTo: 'Lenket til <0>{{label}}', - longitude: 'Lengdegrad', - newLabel: 'Ny {{label}}', - openInNewTab: 'Åpne i ny fane', - passwordsDoNotMatch: 'Passordene er ikke like.', - relatedDocument: 'Relatert dokument', - relationTo: 'Relasjon til', - removeRelationship: 'Fjern Forhold', - removeUpload: 'Fjern Opplasting', - saveChanges: 'Lagre endringer', - searchForBlock: 'Søk etter en blokk', - selectExistingLabel: 'Velg eksisterende {{label}}', - selectFieldsToEdit: 'Velg felt som skal redigeres', - showAll: 'Vis alle', - swapRelationship: 'Bytte Forhold', - swapUpload: 'Bytt Opplasting', - textToDisplay: 'Tekst som skal vises', - toggleBlock: 'Veksle blokk', - uploadNewLabel: 'Last opp ny {{label}}', - }, - general: { - aboutToDelete: 'Du er i ferd med å slette {{label}} <1>{{title}}. Er du sikker?', - aboutToDeleteCount_many: 'Du er i ferd med å slette {{count}} {{label}}', - aboutToDeleteCount_one: 'Du er i ferd med å slette {{count}} {{label}}', - aboutToDeleteCount_other: 'Du er i ferd med å slette {{count}} {{label}}', - addBelow: 'Legg til under', - addFilter: 'Legg til filter', - adminTheme: 'Admin-tema', - and: 'Og', - applyChanges: 'Bruk endringer', - ascending: 'Stigende', - automatic: 'Automatisk', - backToDashboard: 'Tilbake til kontrollpanel', - cancel: 'Avbryt', - changesNotSaved: - 'Endringene dine er ikke lagret. Hvis du forlater nå, vil du miste endringene dine.', - close: 'Lukk', - collapse: 'Skjul', - collections: 'Samlinger', - columnToSort: 'Kolonne å sortere', - columns: 'Kolonner', - confirm: 'Bekreft', - confirmDeletion: 'Bekreft sletting', - confirmDuplication: 'Bekreft duplisering', - copied: 'Kopiert', - copy: 'Kopiér', - create: 'Opprett', - createNew: 'Opprett ny', - createNewLabel: 'Opprett ny {{label}}', - created: 'Opprettet', - createdAt: 'Opprettet', - creating: 'Oppretter', - creatingNewLabel: 'Oppretter ny {{label}}', - dark: 'Mørk', - dashboard: 'Kontrollpanel', - delete: 'Slett', - deletedCountSuccessfully: 'Slettet {{count}} {{label}}.', - deletedSuccessfully: 'Slettet.', - deleting: 'Sletter...', - descending: 'Synkende', - deselectAllRows: 'Fjern markeringen fra alle rader', - duplicate: 'Dupliser', - duplicateWithoutSaving: 'Dupliser uten å lagre endringer', - edit: 'Redigere', - editLabel: 'Rediger {{label}}', - editing: 'Redigerer', - editingLabel_many: 'Redigerer {{count}} {{label}}', - editingLabel_one: 'Redigerer {{count}} {{label}}', - editingLabel_other: 'Redigerer {{count}} {{label}}', - email: 'E-post', - emailAddress: 'E-postadresse', - enterAValue: 'Skriv inn en verdi', - error: 'Feil', - errors: 'Feil', - fallbackToDefaultLocale: 'Tilbakestilling til standard lokalitet', - filter: 'Filtrer', - filterWhere: 'Filtrer {{label}} der', - filters: 'Filter', - globals: 'Globale variabler', - language: 'Språk', - lastModified: 'Sist endret', - leaveAnyway: 'Forlat likevel', - leaveWithoutSaving: 'Forlat uten å lagre', - light: 'Lys', - livePreview: 'Forhåndsvisning', - loading: 'Laster', - locale: 'Lokalitet', - locales: 'Språk', - menu: 'Meny', - moveDown: 'Flytt ned', - moveUp: 'Flytt opp', - newPassword: 'Nytt passord', - noFiltersSet: 'Ingen filtre satt', - noLabel: '', - noOptions: 'Ingen alternativer', - noResults: - 'Ingen {{label}} funnet. Enten finnes det ingen {{label}} enda eller ingen matcher filterne du har spesifisert ovenfor.', - noValue: 'Ingen verdi', - none: 'Ingen', - notFound: 'Ikke funnet', - nothingFound: 'Ingenting funnet', - of: 'av', - open: 'Åpne', - or: 'Eller', - order: 'Rekkefølge', - pageNotFound: 'Siden ble ikke funnet', - password: 'Passord', - payloadSettings: 'Payload-innstillinger', - perPage: 'Per side: {{limit}}', - remove: 'Fjern', - reset: 'Tilbakestill', - row: 'Rad', - rows: 'Rader', - save: 'Lagre', - saving: 'Lagrer...', - searchBy: 'Søk etter {{label}}', - selectAll: 'Velg alle {{count}} {{label}}', - selectAllRows: 'Velg alle rader', - selectValue: 'Velg en verdi', - selectedCount: '{{count}} {{label}} valgt', - showAllLabel: 'Vis alle {{label}}', - sorryNotFound: 'Beklager, det er ingenting som samsvarer med forespørselen din.', - sort: 'Sortér', - sortByLabelDirection: 'Sorter etter {{label}} {{direction}}', - stayOnThisPage: 'Bli på denne siden', - submissionSuccessful: 'Innsending vellykket.', - submit: 'Send inn', - successfullyCreated: '{{label}} ble opprettet.', - successfullyDuplicated: '{{label}} ble duplisert.', - thisLanguage: 'Norsk', - titleDeleted: '{{label}} "{{title}}" ble slettet.', - unauthorized: 'Ikke autorisert', - unsavedChangesDuplicate: 'Du har ulagrede endringer. Vil du fortsette å duplisere?', - untitled: 'Uten tittel', - updatedAt: 'Oppdatert', - updatedCountSuccessfully: 'Oppdaterte {{count}} {{label}} vellykket.', - updatedSuccessfully: 'Oppdatert.', - updating: 'Oppdatering', - uploading: 'Opplasting', - user: 'Bruker', - users: 'Brukere', - value: 'Verdi', - welcome: 'Velkommen', - }, - operators: { - contains: 'contains', - equals: 'lik', - exists: 'eksisterer', - isGreaterThan: 'er større enn', - isGreaterThanOrEqualTo: 'er større enn eller lik', - isIn: 'er i', - isLessThan: 'er mindre enn', - isLessThanOrEqualTo: 'er mindre enn eller lik', - isLike: 'er som', - isNotEqualTo: 'er ikke lik', - isNotIn: 'er ikke med', - near: 'nær', - }, - upload: { - crop: 'Beskjær', - cropToolDescription: - 'Dra hjørnene av det valgte området, tegn et nytt område eller juster verdiene nedenfor.', - dragAndDrop: 'Dra og slipp en fil', - dragAndDropHere: 'eller dra og slipp en fil her', - editImage: 'Rediger bilde', - fileName: 'Filnavn', - fileSize: 'Filstørrelse', - focalPoint: 'Fokuspunkt', - focalPointDescription: - 'Dra fokuspunktet direkte på forhåndsvisningen eller juster verdiene nedenfor.', - height: 'Høyde', - lessInfo: 'Mindre info', - moreInfo: 'Mer info', - previewSizes: 'Forhåndsvisningsstørrelser', - selectCollectionToBrowse: 'Velg en samling å bla i', - selectFile: 'Velg en fil', - setCropArea: 'Angi beskjæringsområde', - setFocalPoint: 'Angi fokuspunkt', - sizes: 'Størrelser', - sizesFor: 'Størrelser for {{label}}', - width: 'Bredde', - }, - validation: { - emailAddress: 'Vennligst skriv inn en gyldig e-postadresse.', - enterNumber: 'Vennligst skriv inn et gyldig tall.', - fieldHasNo: 'Dette feltet har ingen {{label}}', - greaterThanMax: '{{value}} er større enn den tillatte maksimale {{label}} på {{max}}.', - invalidInput: 'Dette feltet har en ugyldig inndata.', - invalidSelection: 'Dette feltet har en ugyldig utvalg.', - invalidSelections: 'Dette feltet har følgende ugyldige utvalg:', - lessThanMin: '{{value}} er mindre enn den tillatte minimale {{label}} på {{min}}.', - limitReached: 'Begrensning nådd, bare {{max}} elementer kan legges til.', - longerThanMin: 'Denne verdien må være lengre enn minimumslengden på {{minLength}} tegn.', - notValidDate: '"{{value}}" er ikke en gyldig dato.', - required: 'Dette feltet er påkrevd.', - requiresAtLeast: 'Dette feltet krever minst {{count}} {{label}}.', - requiresNoMoreThan: 'Dette feltet krever maksimalt {{count}} {{label}}.', - requiresTwoNumbers: 'Dette feltet krever to tall.', - shorterThanMax: 'Denne verdien må være kortere enn maksimal lengde på {{maxLength}} tegn.', - trueOrFalse: 'Dette feltet kan bare være likt true eller false.', - validUploadID: 'Dette feltet er ikke en gyldig opplastings-ID.', - }, - version: { - aboutToPublishSelection: - 'Du er i ferd med å publisere alle {{label}} i utvalget. Er du sikker?', - aboutToRestore: - 'Du er i ferd med å gjenopprette denne {{label}} dokumentet til tilstanden det var i på {{versionDate}}.', - aboutToRestoreGlobal: - 'Du er i ferd med å gjenopprette den globale variabelen {{label}} til tilstanden det var i på {{versionDate}}.', - aboutToRevertToPublished: - 'Du er i ferd med å tilbakestille endringene i dette dokumentet til den publiserte tilstanden. Er du sikker?', - aboutToUnpublish: 'Du er i ferd med å avpublisere dette dokumentet. Er du sikker?', - aboutToUnpublishSelection: - 'Du er i ferd med å oppheve publiseringen av alle {{label}} i utvalget. Er du sikker?', - autosave: 'Lagre automatisk', - autosavedSuccessfully: 'Lagret automatisk.', - autosavedVersion: 'Automatisk lagret versjon', - changed: 'Endret', - compareVersion: 'Sammenlign versjon mot:', - confirmPublish: 'Bekreft publisering', - confirmRevertToSaved: 'Bekreft tilbakestilling til lagret', - confirmUnpublish: 'Bekreft avpublisering', - confirmVersionRestoration: 'Bekreft versjon-gjenoppretting', - currentDocumentStatus: 'Nåværende {{docStatus}} dokument', - draft: 'Utkast', - draftSavedSuccessfully: 'Utkast lagret.', - lastSavedAgo: 'Sist lagret {{distance}} siden', - noFurtherVersionsFound: 'Ingen flere versjoner funnet', - noRowsFound: 'Ingen {{label}} funnet', - preview: 'Forhåndsvisning', - problemRestoringVersion: 'Det oppstod et problem med gjenoppretting av denne versjonen', - publish: 'Publisere', - publishChanges: 'Publiser endringer', - published: 'Publisert', - publishing: 'Publisering', - restoreThisVersion: 'Gjenopprett denne versjonen', - restoredSuccessfully: 'Gjenopprettet.', - restoring: 'Gjenoppretter...', - revertToPublished: 'Tilbakestill til publisert', - reverting: 'Tilbakestiller...', - saveDraft: 'Lagre utkast', - selectLocales: 'Velg språk å vise', - selectVersionToCompare: 'Velg en versjon å sammenligne', - showLocales: 'Vis språk:', - showingVersionsFor: 'Viser versjoner for:', - status: 'Status', - type: 'Type', - unpublish: 'Avpubliser', - unpublishing: 'Avpubliserer...', - version: 'Versjon', - versionCount_many: '{{count}} versjoner funnet', - versionCount_none: 'Ingen versjoner funnet', - versionCount_one: '{{count}} versjon funnet', - versionCount_other: '{{count}} versjoner funnet', - versionCreatedOn: '{{version}} opprettet:', - versionID: 'Versjons-ID', - versions: 'Versjoner', - viewingVersion: 'Viser versjon for {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: 'Viser versjon for den globale variabelen {{entityLabel}}', - viewingVersions: 'Viser versjoner for {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: 'Viser versjoner for den globale variabelen {{entityLabel}}', - }, -} diff --git a/packages/translations/src/all/nl.ts b/packages/translations/src/all/nl.ts deleted file mode 100644 index 1fda37d7a9..0000000000 --- a/packages/translations/src/all/nl.ts +++ /dev/null @@ -1,394 +0,0 @@ -export default { - authentication: { - account: 'Account', - accountOfCurrentUser: 'Account van huidige gebruiker', - alreadyActivated: 'Al geactiveerd', - alreadyLoggedIn: 'Al ingelogd', - apiKey: 'API-sleutel', - backToLogin: 'Terug naar inloggen', - beginCreateFirstUser: 'Om te beginnen maakt u uw eerste gebruiker aan.', - changePassword: 'Wachtwoord wijzigen', - checkYourEmailForPasswordReset: - 'Controleer uw e-mail voor een link waarmee u uw wachtwoord veilig opnieuw kunt instellen.', - confirmGeneration: 'Bevestigen', - confirmPassword: 'Wachtwoord bevestigen', - createFirstUser: 'Eerste gebruiker aanmaken', - emailNotValid: 'Het ingevoerde e-mailadres is niet geldig', - emailSent: 'E-mail verzonden', - enableAPIKey: 'Activeer API-sleutel', - failedToUnlock: 'Ontgrendeling mislukt', - forceUnlock: 'Forceer ontgrendeling', - forgotPassword: 'Wachtwoord vergeten', - forgotPasswordEmailInstructions: - 'Vul hieronder uw e-mailadres in. U ontvangt een e-mailbericht met instructies om uw wachtwoord opnieuw in te stellen.', - forgotPasswordQuestion: 'Wachtwoord vergeten?', - generate: 'Genereren', - generateNewAPIKey: 'Genereer nieuwe API-sleutel', - generatingNewAPIKeyWillInvalidate: - 'Het genereren van een nieuwe API-sleutel maakt de vorige sleutel <1>ongeldig. Weet u zeker dat u wilt doorgaan?', - lockUntil: 'Vergrendel tot', - logBackIn: 'Opnieuw inloggen', - logOut: 'Uitloggen', - loggedIn: 'Om in te loggen met een andere gebruiker, moet u zich eerst <0>uitloggen.', - loggedInChangePassword: - 'Om uw wachtwoord te wijzigen, gaat u naar <0>account en wijzigt u daar uw wachtwoord.', - loggedOutInactivity: 'U bent uitgelogd wegens inactiviteit.', - loggedOutSuccessfully: 'U bent succesvol uitgelogd.', - login: 'Inloggen', - loginAttempts: 'Inlogpogingen', - loginUser: 'Gebruiker inloggen', - loginWithAnotherUser: - 'Om in te loggen met een andere gebruiker, moet u zich eerst <0>uitoggen.', - logout: 'Uitloggen', - logoutUser: 'Gebruiker uitloggen', - newAPIKeyGenerated: 'Nieuwe API-sleutel is gegenereerd.', - newAccountCreated: - 'Er is zojuist een nieuw account voor u aangemaakt waarmee u toegang krijgt tot {{serverURL}}. Klik op de volgende link, of plak onderstaande URL in uw browser om uw e-mailadres te verifiëren: {{verificationURL}}
    Na de verificatie van uw e-mail kunt u succesvol inloggen.', - newPassword: 'Nieuw wachtwoord', - resetPassword: 'Wachtwoord herstellen', - resetPasswordExpiration: 'Vervaltijd van wachtwoord herstellen', - resetPasswordToken: 'Token van wachtwoordreset', - resetYourPassword: 'Reset uw wachtwoord', - stayLoggedIn: 'Ingelogd blijven', - successfullyUnlocked: 'Succesvol ontgrendeld', - unableToVerify: 'Verificatie niet mogelijk', - verified: 'Geverifieerd', - verifiedSuccessfully: 'Succesvol geverifieerd', - verify: 'Verifiëren', - verifyUser: 'Gebruiker verifiëren', - verifyYourEmail: 'Verifieer uw e-mailadres', - youAreInactive: - 'U bent al een tijdje niet meer actief geweest en wordt binnenkort voor uw eigen veiligheid automatisch uitgelogd. Wilt u ingelogd blijven?', - youAreReceivingResetPassword: - 'U ontvangt dit omdat u (of iemand anders) het wachtwoord voor uw account opnieuw heeft aangevraagd. Klik op de volgende link, of plak deze in uw browser om het proces te voltooien:', - youDidNotRequestPassword: - 'Als u dit niet heeft aangevraagd, negeer dan deze e-mail en uw wachtwoord zal ongewijzigd blijven.', - }, - error: { - accountAlreadyActivated: 'Dit account is al geactiveerd.', - autosaving: 'Er is een probleem opgetreden bij het automatisch bewaren van dit document.', - correctInvalidFields: 'Gelieve de ongeldige velden te corrigeren.', - deletingFile: 'Er is een fout opgetreden bij het verwijderen van dit bestand.', - deletingTitle: - 'Er is een fout opgetreden tijdens het verwijderen van {{title}}. Controleer uw verbinding en probeer het opnieuw.', - emailOrPasswordIncorrect: 'Het opgegeven e-mailadres of wachtwoord is onjuist.', - followingFieldsInvalid_one: 'Het volgende veld is ongeldig:', - followingFieldsInvalid_other: 'De volgende velden zijn ongeldig:', - incorrectCollection: 'Ongeldige collectie', - invalidFileType: 'Ongeldig bestandstype', - invalidFileTypeValue: 'Ongeldig bestandstype: {{value}}', - loadingDocument: 'Er was een probleem met het laden van het document met ID {{id}}.', - missingEmail: 'E-mailadres ontbreekt.', - missingIDOfDocument: 'ID ontbreekt van het aan te passen document.', - missingIDOfVersion: 'ID van versie ontbreekt.', - missingRequiredData: 'Ontbrekende vereiste gegevens.', - noFilesUploaded: 'Er zijn geen bestanden geüpload.', - noMatchedField: 'Geen overeenkomend veld gevonden voor "{{label}}"', - noUser: 'Geen gebruiker', - notAllowedToAccessPage: 'U hebt geen toegang tot deze pagina.', - notAllowedToPerformAction: 'U mag deze actie niet uitvoeren.', - notFound: 'De gevraagde resource werd niet gevonden.', - previewing: 'Er was een probleem met het voorvertonen van dit document.', - problemUploadingFile: 'Er was een probleem bij het uploaden van het bestand.', - tokenInvalidOrExpired: 'Token is ongeldig of verlopen.', - unPublishingDocument: 'Er was een probleem met het depubliceren van dit document.', - unableToDeleteCount: 'Kan {{count}} van {{total}} {{label}} niet verwijderen.', - unableToUpdateCount: 'Kan {{count}} van {{total}} {{label}} niet updaten.', - unauthorized: 'Ongeautoriseerd, u moet ingelogd zijn om dit verzoek te doen.', - unknown: 'Er is een onbekende fout opgetreden.', - unspecific: 'Er is een fout opgetreden.', - userLocked: 'Deze gebruiker is vergrendeld wegens te veel mislukte inlogpogingen.', - valueMustBeUnique: 'De waarde moet uniek zijn', - verificationTokenInvalid: 'Verificatietoken is ongeldig.', - }, - fields: { - addLabel: 'Voeg {{label}} toe', - addLink: 'Voeg een link toe', - addNew: 'Nieuw(e)', - addNewLabel: 'Nieuw(e) {{label}} toevoegen', - addRelationship: 'Nieuwe Relatie', - addUpload: 'Upload Toevoegen', - block: 'blok', - blockType: 'Bloktype', - blocks: 'blokken', - chooseBetweenCustomTextOrDocument: - 'Kies tussen het invoeren van een aangepaste tekst-URL of een koppeling naar een ander document.', - chooseDocumentToLink: 'Kies een document om naar te linken', - chooseFromExisting: 'Kies uit bestaande', - chooseLabel: 'Kies {{label}}', - collapseAll: 'Alles samenvouwen', - customURL: 'Eigen URL', - editLabelData: 'Bewerk gegevens van {{label}}', - editLink: 'Link bewerken', - editRelationship: 'Relatie Relatie', - enterURL: 'Voer een URL in', - internalLink: 'Interne koppeling', - itemsAndMore: '{{items}} en {{count}} meer', - labelRelationship: '{{label}} relatie', - latitude: 'Breedtegraad', - linkType: 'Koppelingstype', - linkedTo: 'Gekoppeld aan aan <0>{{label}}', - longitude: 'Lengtegraad', - newLabel: 'Nieuw(e) {{label}}', - openInNewTab: 'Openen in nieuw tabblad', - passwordsDoNotMatch: 'Wachtwoorden komen niet overeen.', - relatedDocument: 'Gerelateerd document', - relationTo: 'Relatie tot', - removeRelationship: 'Relatie Verwijderen', - removeUpload: 'Verwijder Upload', - saveChanges: 'Bewaar aanpassingen', - searchForBlock: 'Zoeken naar een blok', - selectExistingLabel: 'Selecteer bestaand(e) {{label}}', - selectFieldsToEdit: 'Selecteer velden om te bewerken', - showAll: 'Alles tonen', - swapRelationship: 'Relatie Wisselen', - swapUpload: 'Upload Verwisselen', - textToDisplay: 'Tekst om weer te geven', - toggleBlock: 'Blok togglen', - uploadNewLabel: 'Upload nieuw(e) {{label}}', - }, - general: { - aboutToDelete: - 'U staat op het punt om {{label}} <1>{{title}} te verwijderen. Weet u het zeker?', - aboutToDeleteCount_many: 'Je staat op het punt {{count}} {{label}} te verwijderen', - aboutToDeleteCount_one: 'Je staat op het punt {{count}} {{label}} te verwijderen', - aboutToDeleteCount_other: 'Je staat op het punt {{count}} {{label}} te verwijderen', - addBelow: 'Onderaan toevoegen', - addFilter: 'Filter toevoegen', - adminTheme: 'Adminthema', - and: 'En', - applyChanges: 'Breng wijzigingen aan', - ascending: 'Oplopend', - automatic: 'Automatisch', - backToDashboard: 'Terug naar dashboard', - cancel: 'Annuleren', - changesNotSaved: - 'Uw wijzigingen zijn niet bewaard. Als u weggaat zullen de wijzigingen verloren gaan.', - close: 'Dichtbij', - collapse: 'Samenvouwen', - collections: 'Collecties', - columnToSort: 'Kolom om te sorteren', - columns: 'Kolommen', - confirm: 'Bevestigen', - confirmDeletion: 'Bevestig verwijdering', - confirmDuplication: 'Bevestig duplicatie', - copied: 'Gekopieerd', - copy: 'Kopiëren', - create: 'Aanmaken', - createNew: 'Nieuw aanmaken', - createNewLabel: 'Nieuw(e) {{label}} aanmaken', - created: 'Aangemaakt', - createdAt: 'Aangemaakt op', - creating: 'Aanmaken', - creatingNewLabel: 'Nieuw(e) {{label}} aanmaken', - dark: 'Donker', - dashboard: 'Dashboard', - delete: 'Verwijderen', - deletedCountSuccessfully: '{{count}} {{label}} succesvol verwijderd.', - deletedSuccessfully: 'Succesvol verwijderd.', - deleting: 'Verwijderen...', - descending: 'Aflopend', - deselectAllRows: 'Deselecteer alle rijen', - duplicate: 'Dupliceren', - duplicateWithoutSaving: 'Dupliceren zonder wijzigingen te bewaren', - edit: 'Bewerk', - editLabel: 'Bewerk {{label}}', - editing: 'Bewerken', - editingLabel_many: 'Bewerken {{count}} {{label}}', - editingLabel_one: 'Bewerken {{count}} {{label}}', - editingLabel_other: 'Bewerken {{count}} {{label}}', - email: 'E-mail', - emailAddress: 'E-maildres', - enterAValue: 'Waarde invoeren', - error: 'Fout', - errors: 'Fouten', - fallbackToDefaultLocale: 'Terugval naar standaardtaal', - filter: 'Filter', - filterWhere: 'Filter {{label}} waar', - filters: 'Filters', - globals: 'Globalen', - language: 'Taal', - lastModified: 'Laatst gewijzigd', - leaveAnyway: 'Toch weggaan', - leaveWithoutSaving: 'Verlaten zonder op te slaan', - light: 'Licht', - livePreview: 'Voorbeeld', - loading: 'Laden', - locale: 'Taal', - locales: 'Landinstellingen', - menu: 'Menu', - moveDown: 'Verplaats naar beneden', - moveUp: 'Verplaats naar boven', - newPassword: 'Nieuw wachtwoord', - noFiltersSet: 'Geen filters ingesteld', - noLabel: 'Geen "{{label}}"', - noOptions: 'Geen opties', - noResults: - 'Geen {{label}} gevonden. Of er bestaat nog geen {{label}}, of niets komt overeen met de hierboven gespecifieerde filters.', - noValue: 'Geen waarde', - none: 'Niets', - notFound: 'Niet gevonden', - nothingFound: 'Niets gevonden', - of: 'van', - open: 'Open', - or: 'Of', - order: 'Volgorde', - pageNotFound: 'Pagina niet gevonden', - password: 'Wachtwoord', - payloadSettings: 'Payload Instellingen', - perPage: 'Per pagina: {{limit}}', - remove: 'Verwijderen', - reset: 'Resetten', - row: 'Rij', - rows: 'Rijen', - save: 'Bewaar', - saving: 'Bewaren...', - searchBy: 'Zoeken op {{label}}', - selectAll: 'Alles selecteren {{count}} {{label}}', - selectAllRows: 'Selecteer alle rijen', - selectValue: 'Selecteer een waarde', - selectedCount: '{{count}} {{label}} geselecteerd', - showAllLabel: 'Toon alle {{label}}', - sorryNotFound: 'Sorry, er is niets dat overeen komt met uw verzoek.', - sort: 'Sorteer', - sortByLabelDirection: 'Sorteer op {{label}} {{direction}}', - stayOnThisPage: 'Blijf op deze pagina', - submissionSuccessful: 'Indiening succesvol.', - submit: 'Indienen', - successfullyCreated: '{{label}} succesvol aangemaakt.', - successfullyDuplicated: '{{label}} succesvol gedupliceerd.', - thisLanguage: 'Nederlands', - titleDeleted: '{{label}} "{{title}}" succesvol verwijderd.', - unauthorized: 'Onbevoegd', - unsavedChangesDuplicate: 'U heeft onbewaarde wijzigingen. Wilt u doorgaan met dupliceren?', - untitled: 'Zonder titel', - updatedAt: 'Aangepast op', - updatedCountSuccessfully: '{{count}} {{label}} succesvol bijgewerkt.', - updatedSuccessfully: 'Succesvol aangepast.', - updating: 'Bijwerken', - uploading: 'Uploaden', - user: 'Gebruiker', - users: 'Gebruikers', - value: 'Waarde', - welcome: 'Welkom', - }, - operators: { - contains: 'bevat', - equals: 'is gelijk aan', - exists: 'bestaat', - isGreaterThan: 'is groter dan', - isGreaterThanOrEqualTo: 'is groter dan of gelijk aan', - isIn: 'is binnen', - isLessThan: 'is kleiner dan', - isLessThanOrEqualTo: 'is kleiner dan of gelijk aan', - isLike: 'is als', - isNotEqualTo: 'is niet gelijk aan', - isNotIn: 'zit er niet in', - near: 'nabij', - }, - upload: { - crop: 'Bijsnijden', - cropToolDescription: - 'Sleep de hoeken van het geselecteerde gebied, teken een nieuw gebied of pas de waarden hieronder aan.', - dragAndDrop: 'Sleep een bestand', - dragAndDropHere: 'of sleep een bestand naar hier', - editImage: 'Afbeelding bewerken', - fileName: 'Bestandsnaam', - fileSize: 'Bestandsgrootte', - focalPoint: 'Focuspunt', - focalPointDescription: - 'Sleep het focuspunt rechtstreeks op de voorvertoning of pas de waarden hieronder aan.', - height: 'Hoogte', - lessInfo: 'Minder info', - moreInfo: 'Meer info', - previewSizes: 'Voorbeeldgroottes', - selectCollectionToBrowse: 'Selecteer een collectie om door te bladeren', - selectFile: 'Selecteer een bestand', - setCropArea: 'Stel bijsnijdgebied in', - setFocalPoint: 'Stel het brandpunt in', - sizes: 'Groottes', - sizesFor: 'Maten voor {{label}}', - width: 'Breedte', - }, - validation: { - emailAddress: 'Voer een geldig e-mailadres in.', - enterNumber: 'Voer een geldig nummer in.', - fieldHasNo: 'Dit veld heeft geen {{label}}', - greaterThanMax: '{{value}} is groter dan de maximaal toegestane {{label}} van {{max}}.', - invalidInput: 'Dit veld heeft een ongeldige invoer.', - invalidSelection: 'Dit veld heeft een ongeldige selectie.', - invalidSelections: 'Dit veld heeft de volgende ongeldige selecties:', - lessThanMin: '{{value}} is kleiner dan de minimaal toegestane {{label}} van {{min}}.', - limitReached: 'Limiet bereikt, er kunnen slechts {{max}} items worden toegevoegd.', - longerThanMin: 'Deze waarde moet langer zijn dan de minimale lengte van {{minLength}} tekens.', - notValidDate: '"{{value}}" is geen geldige datum.', - required: 'Dit veld is verplicht.', - requiresAtLeast: 'Dit veld vereist minstens {{count}} {{label}}.', - requiresNoMoreThan: 'Dit veld vereist niet meer dan {{count}} {{label}}.', - requiresTwoNumbers: 'Dit veld vereist twee nummers.', - shorterThanMax: 'Dit veld moet korter zijn dan de maximale lengte van {{maxLength}} tekens.', - trueOrFalse: 'Dit veld kan alleen waar of onwaar zijn.', - validUploadID: 'Dit veld is geen geldige upload-ID.', - }, - version: { - aboutToPublishSelection: - 'Je staat op het punt om alle {{label}} in de selectie te publiceren. Weet je het zeker?', - aboutToRestore: - 'U staat op het punt dit {{label}} document te herstellen in de staat waarin het zich bevond op {{versionDate}}.', - aboutToRestoreGlobal: - 'U staat op het punt om de global {{label}} te herstellen in de staat waarin het zich bevond op {{versionDate}}.', - aboutToRevertToPublished: - 'U staat op het punt om de wijzigingen van dit document terug te draaien naar de gepubliceerde staat. Weet u het zeker?', - aboutToUnpublish: - 'U staat op het punt om de publicatie van dit document ongedaan te maken. Weet u het zeker?', - aboutToUnpublishSelection: - 'You are about to unpublish all {{label}} in the selection. Are you sure?', - autosave: 'Automatisch bewaren', - autosavedSuccessfully: 'Succesvol automatisch bewaard.', - autosavedVersion: 'Automatisch bewaarde versie', - changed: 'Gewijzigd', - compareVersion: 'Vergelijk versie met:', - confirmPublish: 'Bevestig publiceren', - confirmRevertToSaved: 'Bevestig terugdraaien naar bewaarde versie', - confirmUnpublish: 'Bevestig depubliceren', - confirmVersionRestoration: 'Bevestig te herstellen versie', - currentDocumentStatus: 'Huidig {{docStatus}} document', - draft: 'Concept', - draftSavedSuccessfully: 'Concept succesvol bewaard.', - lastSavedAgo: 'Laatst opgeslagen {{distance}} geleden', - noFurtherVersionsFound: 'Geen verdere versies gevonden', - noRowsFound: 'Geen {{label}} gevonden', - preview: 'Voorbeeld', - problemRestoringVersion: 'Er was een probleem bij het herstellen van deze versie', - publish: 'Publiceren', - publishChanges: 'Publiceer wijzigingen', - published: 'Gepubliceerd', - publishing: 'Publicatie', - restoreThisVersion: 'Herstel deze versie', - restoredSuccessfully: 'Herstelling succesvol.', - restoring: 'Herstellen...', - revertToPublished: 'Terugdraaien naar gepubliceerde versie', - reverting: 'Terugdraaien...', - saveDraft: 'Bewaar concept', - selectLocales: 'Selecteer locales om weer te geven', - selectVersionToCompare: 'Selecteer een versie om te vergelijken', - showLocales: 'Toon locales:', - showingVersionsFor: 'Versies tonen voor:', - status: 'Status', - type: 'Type', - unpublish: 'Publicatie ongedaan maken', - unpublishing: 'Publicatie ongedaan maken...', - version: 'Versie', - versionCount_many: '{{count}} versies gevonden', - versionCount_none: 'Geen versies gevonden', - versionCount_one: '{{count}} versie gevonden', - versionCount_other: '{{count}} versies gevonden', - versionCreatedOn: '{{version}} aangemaakt op:', - versionID: 'Versie-ID', - versions: 'Versies', - viewingVersion: 'Bekijk versie voor {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: 'Bekijk versie voor global {{entityLabel}}', - viewingVersions: 'Bekijk versies voor {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: '`Bekijk versies voor global {{entityLabel}}', - }, -} diff --git a/packages/translations/src/all/pl.ts b/packages/translations/src/all/pl.ts deleted file mode 100644 index 8dd2ef1fd0..0000000000 --- a/packages/translations/src/all/pl.ts +++ /dev/null @@ -1,392 +0,0 @@ -export default { - authentication: { - account: 'Konto', - accountOfCurrentUser: 'Konto bieżącego użytkownika', - alreadyActivated: 'Już aktywowano', - alreadyLoggedIn: 'Już zalogowano', - apiKey: 'Klucz API', - backToLogin: 'Powrót do logowania', - beginCreateFirstUser: 'Aby rozpocząć, utwórz pierwszego użytkownika', - changePassword: 'Zmień hasło', - checkYourEmailForPasswordReset: - 'Sprawdź email, na który wysłano link, który pozwoli Ci bezpiecznie zresetować hasło.', - confirmGeneration: 'Potwierdź wygenerowanie', - confirmPassword: 'Potwierdź hasło', - createFirstUser: 'Utwórz pierwszego użytkownika', - emailNotValid: 'Podany email jest nieprawidłowy', - emailSent: 'Wysłano email', - enableAPIKey: 'Aktywuj klucz API', - failedToUnlock: 'Nie udało się odblokować', - forceUnlock: 'Wymuś odblokowanie', - forgotPassword: 'Zresetuj hasło', - forgotPasswordEmailInstructions: - 'Proszę podaj swój email. Otrzymasz wiadomość z instrukcjami, jak zresetować hasło.', - forgotPasswordQuestion: 'Nie pamiętasz hasła?', - generate: 'Wygeneruj', - generateNewAPIKey: 'Wygeneruj nowy klucz API', - generatingNewAPIKeyWillInvalidate: - 'Wygenerowanie nowego klucza API <1>unieważni poprzedni klucz. Czy na pewno chcesz kontynuować?', - lockUntil: 'Zablokuj do', - logBackIn: 'Zaloguj się ponownie', - logOut: 'Wyloguj', - loggedIn: 'Aby zalogować się na inne konto, najpierw się <0>wyloguj.', - loggedInChangePassword: - 'Aby zmienić hasło, przejdź do swojego <0>konta i tam edytuj swoje hasło.', - loggedOutInactivity: 'Zostałeś wylogowany z powodu braku aktywności.', - loggedOutSuccessfully: 'Zostałeś pomyślnie wylogowany.', - login: 'Zaloguj', - loginAttempts: 'Próby logowania', - loginUser: 'Zaloguj użytkownika', - loginWithAnotherUser: 'Aby zalogować się na inne konto, najpierw się <0>wyloguj.', - logout: 'Wyloguj', - logoutUser: 'Wyloguj użytkownika', - newAPIKeyGenerated: 'Wygenerowano nowy klucz API.', - newAccountCreated: - 'Właśnie utworzono nowe konto, w celu uzyskania dostępu do {{serverURL}}. Kliknij poniższy link lub wklej go do przeglądarki, aby zweryfikować swój adres email: {{verificationURL}}.
    Po zweryfikowaniu adresu email będziesz mógł się pomyślnie zalogować.', - newPassword: 'Nowe hasło', - resetPassword: 'Zresetuj hasło', - resetPasswordExpiration: 'Zresetuj czas wygaśnięcia hasła', - resetPasswordToken: 'Zresetuj token hasła', - resetYourPassword: 'Zresetuj swoje hasło', - stayLoggedIn: 'Pozostań zalogowany', - successfullyUnlocked: 'Pomyślnie odblokowano', - unableToVerify: 'Nie można zweryfikować', - verified: 'Zweryfikowano', - verifiedSuccessfully: 'Pomyślnie zweryfikowany', - verify: 'Zweryfikuj', - verifyUser: 'Zweryfikuj użytkownika', - verifyYourEmail: 'Zweryfikuj swój email', - youAreInactive: - 'Nie byłeś aktywny od dłuższego czasu i wkrótce zostaniesz automatycznie wylogowany dla własnego bezpieczeństwa. Czy chcesz pozostać zalogowany?', - youAreReceivingResetPassword: - 'Otrzymałeś tę wiadomość, ponieważ Ty (lub ktoś inny) poprosiłeś o zresetowanie hasła do Twojego konta. Kliknij poniższy link lub wklej go w przeglądarce, aby zakończyć proces:', - youDidNotRequestPassword: - 'Jeśli nie prosiłeś o zmianę hasła, zignoruj tę wiadomość, a Twoje hasło pozostanie niezmienione.', - }, - error: { - accountAlreadyActivated: 'To konto zostało już aktywowane.', - autosaving: 'Wystąpił problem podczas automatycznego zapisywania tego dokumentu.', - correctInvalidFields: 'Popraw nieprawidłowe pola.', - deletingFile: '', - deletingTitle: - 'Wystąpił błąd podczas usuwania {{title}}. Proszę, sprawdź swoje połączenie i spróbuj ponownie.', - emailOrPasswordIncorrect: 'Podany adres e-mail lub hasło jest nieprawidłowe.', - followingFieldsInvalid_one: 'To pole jest nieprawidłowe:', - followingFieldsInvalid_other: 'Następujące pola są nieprawidłowe:', - incorrectCollection: 'Nieprawidłowa kolekcja', - invalidFileType: 'Nieprawidłowy typ pliku', - invalidFileTypeValue: 'Nieprawidłowy typ pliku: {{value}}', - loadingDocument: 'Wystapił problem podczas ładowania dokumentu o ID {{id}}.', - missingEmail: 'Brak adresu email.', - missingIDOfDocument: 'Brak ID dokumentu do aktualizacji.', - missingIDOfVersion: 'Brak ID wersji', - missingRequiredData: 'Brak wymaganych danych.', - noFilesUploaded: 'Nie przesłano żadnych plików.', - noMatchedField: 'Nie znaleziono pasującego pola dla "{{label}}"', - noUser: 'Brak użytkownika', - notAllowedToAccessPage: 'Nie masz dostępu do tej strony.', - notAllowedToPerformAction: 'Nie możesz wykonać tej akcji.', - notFound: 'Żądany zasób nie został znaleziony.', - previewing: 'Wystąpił problem podczas podglądu tego dokumentu.', - problemUploadingFile: 'Wystąpił problem podczas przesyłania pliku.', - tokenInvalidOrExpired: 'Token jest nieprawidłowy lub wygasł.', - unPublishingDocument: 'Wystąpił problem podczas cofania publikacji tego dokumentu.', - unableToDeleteCount: 'Nie można usunąć {{count}} z {{total}} {{label}}.', - unableToUpdateCount: 'Nie można zaktualizować {{count}} z {{total}} {{label}}.', - unauthorized: 'Brak dostępu, musisz być zalogowany.', - unknown: 'Wystąpił nieznany błąd.', - unspecific: 'Wystąpił błąd', - userLocked: 'Ten użytkownik został zablokowany z powodu zbyt wielu nieudanych prób logowania.', - valueMustBeUnique: 'Wartość musi być unikalna', - verificationTokenInvalid: 'Token weryfikacyjny jest nieprawidłowy.', - }, - fields: { - addLabel: 'Dodaj {{label}}', - addLink: 'Dodaj Link', - addNew: 'Dodaj nowy', - addNewLabel: 'Dodaj nowy {{label}}', - addRelationship: 'Dodaj Relację', - addUpload: 'Dodaj ładowanie', - block: 'Blok', - blockType: 'Typ Bloku', - blocks: 'Bloki', - chooseBetweenCustomTextOrDocument: - 'Wybierz między wprowadzeniem niestandardowego tekstowego adresu URL a linkiem do innego dokumentu.', - chooseDocumentToLink: 'Wybierz dokument, do którego chcesz utworzyć łącze', - chooseFromExisting: 'Wybierz z istniejących', - chooseLabel: 'Wybierz {{label}}', - collapseAll: 'Zwiń wszystko', - customURL: 'Niestandardowy adres URL', - editLabelData: 'Edytuj dane {{label}}', - editLink: 'Edytuj Link', - editRelationship: 'Edytuj Relację', - enterURL: 'Wpisz adres URL', - internalLink: 'Link wewnętrzny', - itemsAndMore: '{{items}} i {{count}} więcej', - labelRelationship: 'Relacja {{label}}', - latitude: 'Szerokość', - linkType: 'Typ łącza', - linkedTo: 'Połączony z <0>{{label}}', - longitude: 'Długość geograficzna', - newLabel: 'Nowy {{label}}', - openInNewTab: 'Otwórz w nowej karcie', - passwordsDoNotMatch: 'Hasła nie pasują', - relatedDocument: 'Powiązany dokument', - relationTo: 'Powiązany z', - removeRelationship: 'Usuń Relację', - removeUpload: 'Usuń Wrzucone', - saveChanges: 'Zapisz zmiany', - searchForBlock: 'Szukaj bloku', - selectExistingLabel: 'Wybierz istniejący {{label}}', - selectFieldsToEdit: 'Wybierz pola do edycji', - showAll: 'Pokaż wszystkie', - swapRelationship: 'Zamiana Relacji', - swapUpload: 'Zamień Wrzucone', - textToDisplay: 'Tekst do wyświetlenia', - toggleBlock: 'Przełącz blok', - uploadNewLabel: 'Wrzuć nowy {{label}}', - }, - general: { - aboutToDelete: 'Zamierzasz usunąć {{label}} <1>{{title}}. Jesteś pewien?', - aboutToDeleteCount_many: 'Zamierzasz usunąć {{count}} {{label}}', - aboutToDeleteCount_one: 'Zamierzasz usunąć {{count}} {{label}}', - aboutToDeleteCount_other: 'Zamierzasz usunąć {{count}} {{label}}', - addBelow: 'Dodaj poniżej', - addFilter: 'Dodaj filtr', - adminTheme: 'Motyw administratora', - and: 'i', - applyChanges: 'Zastosuj zmiany', - ascending: 'Rosnąco', - automatic: 'Automatyczny', - backToDashboard: 'Powrót do panelu', - cancel: 'Anuluj', - changesNotSaved: - 'Twoje zmiany nie zostały zapisane. Jeśli teraz wyjdziesz, stracisz swoje zmiany.', - close: 'Zamknij', - collapse: 'Zwiń', - collection: 'Kolekcja', - collections: 'Kolekcje', - columnToSort: 'Kolumna sortowania', - columns: 'Kolumny', - confirm: 'Potwierdź', - confirmDeletion: 'Potwierdź usunięcie', - confirmDuplication: 'Potwierdź duplikację', - copied: 'Skopiowano', - copy: 'Skopiuj', - create: 'Stwórz', - createNew: 'Stwórz nowy', - createNewLabel: 'Stwórz nowy {{label}}', - created: 'Utworzono', - createdAt: 'Data utworzenia', - creating: 'Tworzenie', - creatingNewLabel: 'Tworzenie nowego {{label}}', - dark: 'Ciemny', - dashboard: 'Panel', - delete: 'Usuń', - deletedCountSuccessfully: 'Pomyślnie usunięto {{count}} {{label}}.', - deletedSuccessfully: 'Pomyślnie usunięto.', - deleting: 'Usuwanie...', - descending: 'Malejąco', - deselectAllRows: 'Odznacz wszystkie wiersze', - duplicate: 'Zduplikuj', - duplicateWithoutSaving: 'Zduplikuj bez zapisywania zmian', - edit: 'Edytuj', - editLabel: 'Edytuj {{label}}', - editing: 'Edycja', - editingLabel_many: 'Edytowanie {{count}} {{label}}', - editingLabel_one: 'Edytowanie {{count}} {{label}}', - editingLabel_other: 'Edytowanie {{count}} {{label}}', - email: 'Email', - emailAddress: 'Adres email', - enterAValue: 'Wpisz wartość', - error: 'Błąd', - errors: 'Błędy', - fallbackToDefaultLocale: 'Powrót do domyślnych ustawień regionalnych', - filter: 'Filtr', - filterWhere: 'Filtruj gdzie', - filters: 'Filtry', - globals: 'Globalne', - language: 'Język', - lastModified: 'Ostatnio zmodyfikowany', - leaveAnyway: 'Wyjdź mimo to', - leaveWithoutSaving: 'Wyjdź bez zapisywania', - light: 'Jasny', - livePreview: 'Podgląd', - loading: 'Ładowanie', - locale: 'Ustawienia regionalne', - locales: 'Ustawienia regionalne', - menu: 'Menu', - moveDown: 'Przesuń niżej', - moveUp: 'Przesuń wyżej', - newPassword: 'Nowe hasło', - noFiltersSet: 'Brak ustawionych filtrów', - noLabel: '', - noOptions: 'Brak opcji', - noResults: - 'Nie znaleziono {{label}}. Być może {{label}} jeszcze nie istnieje, albo żaden nie pasuje do filtrów określonych powyżej.', - noValue: 'Brak wartości', - none: 'Nic', - notFound: 'Nie znaleziono', - nothingFound: 'Nic nie znaleziono', - of: 'z', - open: 'Otwórz', - or: 'lub', - order: 'Kolejność', - pageNotFound: 'Strona nie znaleziona', - password: 'Hasło', - payloadSettings: 'Ustawienia Payload', - perPage: 'Na stronę: {{limit}}', - remove: 'Usuń', - reset: 'Zresetuj', - row: 'Wiersz', - rows: 'Wiersze', - save: 'Zapisz', - saving: 'Zapisywanie...', - searchBy: 'Szukaj według', - selectAll: 'Wybierz wszystkie {{count}} {{label}}', - selectAllRows: 'Wybierz wszystkie wiersze', - selectValue: 'Wybierz wartość', - selectedCount: 'Wybrano {{count}} {{label}}', - showAllLabel: 'Pokaż wszystkie {{label}}', - sorryNotFound: 'Przepraszamy — nie ma nic, co odpowiadałoby twojemu zapytaniu.', - sort: 'Sortuj', - sortByLabelDirection: 'Sortuj według {{label}} {{direction}}', - stayOnThisPage: 'Pozostań na stronie', - submissionSuccessful: 'Zgłoszenie zakończone powodzeniem.', - submit: 'Zatwierdź', - successfullyCreated: 'Pomyślnie utworzono {{label}}.', - successfullyDuplicated: 'Pomyślnie zduplikowano {{label}}', - thisLanguage: 'Polski', - titleDeleted: 'Pomyślnie usunięto {{label}} {{title}}', - unauthorized: 'Brak autoryzacji', - unsavedChangesDuplicate: 'Masz niezapisane zmiany. Czy chcesz kontynuować duplikowanie?', - untitled: 'Bez nazwy', - updatedAt: 'Data edycji', - updatedCountSuccessfully: 'Pomyślnie zaktualizowano {{count}} {{label}}.', - updatedSuccessfully: 'Aktualizacja zakończona sukcesem.', - updating: 'Aktualizacja', - uploading: 'Przesyłanie', - user: 'użytkownik', - users: 'użytkownicy', - value: 'Wartość', - welcome: 'Witaj', - }, - operators: { - contains: 'zawiera', - equals: 'równe', - exists: 'istnieje', - isGreaterThan: 'jest większy niż', - isGreaterThanOrEqualTo: 'jest większe lub równe', - isIn: 'jest w', - isLessThan: 'jest mniejsze niż', - isLessThanOrEqualTo: 'jest mniejsze lub równe', - isLike: 'jest jak', - isNotEqualTo: 'nie jest równe', - isNotIn: 'nie ma go w', - near: 'blisko', - }, - upload: { - crop: 'Przytnij', - cropToolDescription: - 'Przeciągnij narożniki wybranego obszaru, narysuj nowy obszar lub dostosuj poniższe wartości.', - dragAndDrop: 'Przeciągnij i upuść plik', - dragAndDropHere: 'lub złap i upuść plik tutaj', - editImage: 'Edytuj obraz', - fileName: 'Nazwa pliku', - fileSize: 'Rozmiar pliku', - focalPoint: 'Punkt centralny', - focalPointDescription: - 'Przeciągnij punkt centralny bezpośrednio na podglądzie lub dostosuj wartości poniżej.', - height: 'Wysokość', - lessInfo: 'Mniej informacji', - moreInfo: 'Więcej informacji', - previewSizes: 'Rozmiary podglądu', - selectCollectionToBrowse: 'Wybierz kolekcję aby przejrzeć', - selectFile: 'Wybierz plik', - setCropArea: 'Ustaw obszar kadrowania', - setFocalPoint: 'Ustawić punkt ogniskowy', - sizes: 'Rozmiary', - sizesFor: 'Rozmiary dla {{label}}', - width: 'Szerokość', - }, - validation: { - emailAddress: 'Wprowadź poprawny adres email.', - enterNumber: 'Wprowadź poprawny numer telefonu.', - fieldHasNo: 'To pole nie posiada {{label}}', - greaterThanMax: '{{value}} jest większe niż maksymalnie dozwolony {{label}} wynoszący {{max}}.', - invalidInput: 'To pole zawiera nieprawidłowe dane.', - invalidSelection: 'To pole ma nieprawidłowy wybór.', - invalidSelections: 'To pole zawiera następujące, nieprawidłowe wybory:', - lessThanMin: '{{value}} jest mniejsze niż minimalnie dozwolony {{label}} wynoszący {{min}}.', - limitReached: 'Osiągnięto limit, można dodać tylko {{max}} elementów.', - longerThanMin: 'Ta wartość musi być dłuższa niż minimalna długość znaków: {{minLength}}.', - notValidDate: '"{{value}}" nie jest prawidłową datą.', - required: 'To pole jest wymagane.', - requiresAtLeast: 'To pole wymaga co najmniej {{count}} {{label}}.', - requiresNoMoreThan: 'To pole może posiadać co najmniej {{count}} {{label}}.', - requiresTwoNumbers: 'To pole wymaga dwóch liczb.', - shorterThanMax: 'Ta wartość musi być krótsza niż maksymalna długość znaków: {{maxLength}}.', - trueOrFalse: "To pole może mieć wartość tylko 'true' lub 'false'.", - validUploadID: 'To pole nie jest prawidłowym identyfikatorem przesyłania.', - }, - version: { - aboutToPublishSelection: - 'Za chwilę opublikujesz wszystkie {{label}} w zaznaczeniu. Jesteś pewny?', - aboutToRestore: - 'Zamierzasz przywrócić dokument {{label}} do stanu, w jakim znajdował się w dniu {{versionDate}}.', - aboutToRestoreGlobal: - 'Zamierzasz przywrócić globalny rekord {{label}} do stanu, w którym znajdował się w dniu {{versionDate}}.', - aboutToRevertToPublished: - 'Zamierzasz przywrócić zmiany w tym dokumencie do stanu opublikowanego. Jesteś pewien?', - aboutToUnpublish: 'Zamierzasz cofnąć publikację tego dokumentu. Jesteś pewien?', - aboutToUnpublishSelection: - 'Zamierzasz cofnąć publikację wszystkich {{label}} w zaznaczeniu. Jesteś pewny?', - autosave: 'Autozapis', - autosavedSuccessfully: 'Pomyślnie zapisano automatycznie.', - autosavedVersion: 'Wersja zapisana automatycznie', - changed: 'Zmieniono', - compareVersion: 'Porównaj wersję z:', - confirmPublish: 'Potwierdź publikację', - confirmRevertToSaved: 'Potwierdź powrót do zapisanego', - confirmUnpublish: 'Potwierdź cofnięcie publikacji', - confirmVersionRestoration: 'Potwierdź przywrócenie wersji', - currentDocumentStatus: 'Bieżący status {{docStatus}} dokumentu', - draft: 'Szkic', - draftSavedSuccessfully: 'Wersja robocza została pomyślnie zapisana.', - lastSavedAgo: 'Ostatnio zapisane {{distance}} temu', - noFurtherVersionsFound: 'Nie znaleziono dalszych wersji', - noRowsFound: 'Nie znaleziono {{label}}', - preview: 'Podgląd', - problemRestoringVersion: 'Wystąpił problem podczas przywracania tej wersji', - publish: 'Publikuj', - publishChanges: 'Opublikuj zmiany', - published: 'Opublikowano', - publising: 'Publikacja', - restoreThisVersion: 'Przywróć tę wersję', - restoredSuccessfully: 'Przywrócono pomyślnie.', - restoring: 'Przywracanie...', - revertToPublished: 'Przywróć do opublikowanego', - reverting: 'Cofanie...', - saveDraft: 'Zapisz szkic', - selectLocales: 'Wybierz ustawienia regionalne do wyświetlenia', - selectVersionToCompare: 'Wybierz wersję do porównania', - showLocales: 'Pokaż ustawienia regionalne:', - showingVersionsFor: 'Wyświetlanie wersji dla:', - status: 'Status', - type: 'Typ', - unpublish: 'Cofnij publikację', - unpublishing: 'Cofanie publikacji...', - version: 'Wersja', - versionCount_many: 'Znalezionych wersji: {{count}}', - versionCount_none: 'Nie znaleziono wersji', - versionCount_one: 'Znaleziono {{count}} wersję', - versionCount_other: 'Znaleziono {{count}} wersji', - versionCreatedOn: 'Wersja {{version}} utworzona:', - versionID: 'ID wersji', - versions: 'Wersje', - viewingVersion: 'Przeglądanie wersji dla {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: 'Przeglądanie wersji dla globalnej kolekcji {{entityLabel}}', - viewingVersions: 'Przeglądanie wersji {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: 'Przeglądanie wersji dla globalnej kolekcji {{entityLabel}}', - }, -} diff --git a/packages/translations/src/all/pt.ts b/packages/translations/src/all/pt.ts deleted file mode 100644 index 115422a085..0000000000 --- a/packages/translations/src/all/pt.ts +++ /dev/null @@ -1,392 +0,0 @@ -export default { - authentication: { - account: 'Conta', - accountOfCurrentUser: 'Conta do usuário ativo', - alreadyActivated: 'Conta já ativada', - alreadyLoggedIn: 'Login já realizado', - apiKey: 'Chave da API', - backToLogin: 'Voltar para login', - beginCreateFirstUser: 'Para começar, crie seu primeiro usuário.', - changePassword: 'Mudar senha', - checkYourEmailForPasswordReset: - 'Verifique seu email para um link que permitirá que você redefina sua senha com segurança.', - confirmGeneration: 'Confirmar Geração', - confirmPassword: 'Confirmar Senha', - createFirstUser: 'Criar primeiro usuário', - emailNotValid: 'O email fornecido não é válido', - emailSent: 'Email Enviado', - enableAPIKey: 'Habilitar Chave API', - failedToUnlock: 'Falha ao desbloquear', - forceUnlock: 'Forçar Desbloqueio', - forgotPassword: 'Esqueci a senha', - forgotPasswordEmailInstructions: - 'Por favor, preencha seu email abaixo. Você receberá um email com instruções para gerar uma nova senha', - forgotPasswordQuestion: 'Esqueceu a senha?', - generate: 'Gerar', - generateNewAPIKey: 'Gerar nova chave API', - generatingNewAPIKeyWillInvalidate: - 'Gerar uma nova chave API <1>invalidará a chave anterior. Você tem certeza que deseja prosseguir?', - lockUntil: 'Bloquear Até', - logBackIn: 'Fazer login novamente', - logOut: 'Log out', - loggedIn: 'Para fazer login como outro usuário, você deve fazer o <0>log out antes.', - loggedInChangePassword: - 'Para mudar a sua senha, acesse a sua <0>conta e edite sua senha lá.', - loggedOutInactivity: 'Você foi desconectado devido a inatividade.', - loggedOutSuccessfully: 'Log out efetuado com sucesso.', - login: 'Login', - loginAttempts: 'Tentativas de Login', - loginUser: 'Iniciar sessão', - loginWithAnotherUser: - 'Para fazer login como outro usuário, você deve fazer o <0>log out antes.', - logout: 'Logout', - logoutUser: 'Encerrar sessão', - newAPIKeyGenerated: 'Nova Chave API Gerada.', - newAccountCreated: - 'Uma nova conta acaba de ser criada para que você possa acessar {{serverURL}} Por favor, clique no link a seguir ou cole a URL abaixo no seu navegador para verificar seu email: {{verificationURL}}
    Após a verificação de email, você será capaz de fazer o login.', - newPassword: 'Nova Senha', - resetPassword: 'Redefinir Senha', - resetPasswordExpiration: 'Tempo Limite para Redefinição de Senha', - resetPasswordToken: 'Token para Redefinição de Senha', - resetYourPassword: 'Redefinir Sua Senha', - stayLoggedIn: 'Manter sessão ativa', - successfullyUnlocked: 'Desbloqueado com sucesso', - unableToVerify: 'Não foi possível verificar', - verified: 'Verificado', - verifiedSuccessfully: 'Verificado com Sucesso', - verify: 'Verificar', - verifyUser: 'Verificar Usuário', - verifyYourEmail: 'Verifique seu email', - youAreInactive: - 'Você não está ativo há algum tempo e sua sessão será automaticamente finalizada em breve, para sua própria segurança. Você gostaria de manter a sessão ativa?', - youAreReceivingResetPassword: - 'Você está recebendo essa mensagem porque você (ou outra pessoa) requisitou a redefinição de senha da sua conta. Por favor, clique no link a seguir ou cole no seu navegador para completar o processo:', - youDidNotRequestPassword: - 'Se você não fez essa requisição, por favor ignore esse email e sua senha permanecerá igual.', - }, - error: { - accountAlreadyActivated: 'Essa conta já foi ativada.', - autosaving: 'Ocorreu um problema ao salvar automaticamente esse documento.', - correctInvalidFields: 'Por favor, corrija os campos inválidos.', - deletingFile: 'Ocorreu um erro ao excluir o arquivo.', - deletingTitle: - 'Ocorreu um erro ao excluir {{title}}. Por favor, verifique sua conexão e tente novamente.', - emailOrPasswordIncorrect: 'O email ou senha fornecido está incorreto.', - followingFieldsInvalid_one: 'O campo a seguir está inválido:', - followingFieldsInvalid_other: 'Os campos a seguir estão inválidos:', - incorrectCollection: 'Coleção Incorreta', - invalidFileType: 'Tipo de arquivo inválido', - invalidFileTypeValue: 'Tipo de arquivo inválido: {{value}}', - loadingDocument: 'Ocorreu um problema ao carregar o documento com ID {{id}}.', - missingEmail: 'Email ausente.', - missingIDOfDocument: 'ID do documento a ser atualizado ausente.', - missingIDOfVersion: 'ID da versão ausente.', - missingRequiredData: 'Dados requeridos ausentes.', - noFilesUploaded: 'Nenhum arquivo foi carregado.', - noMatchedField: 'Não foi encontrado nenhum campo correspondente a "{{label}}"', - noUser: 'Nenhum Usuário', - notAllowedToAccessPage: 'Você não tem permissão para acessar essa página.', - notAllowedToPerformAction: 'Você não tem permissão para realizar essa ação.', - notFound: 'O recurso requisitado não foi encontrado.', - previewing: 'Ocorreu um problema ao visualizar esse documento.', - problemUploadingFile: 'Ocorreu um problema ao carregar o arquivo.', - tokenInvalidOrExpired: 'Token expirado ou inválido.', - unPublishingDocument: 'Ocorreu um problema ao despublicar esse documento', - unableToDeleteCount: 'Não é possível excluir {{count}} de {{total}} {{label}}.', - unableToUpdateCount: 'Não foi possível atualizar {{count}} de {{total}} {{label}}.', - unauthorized: 'Não autorizado. Você deve estar logado para fazer essa requisição', - unknown: 'Ocorreu um erro desconhecido.', - unspecific: 'Ocorreu um erro.', - userLocked: 'Esse usuário está bloqueado devido a muitas tentativas de login malsucedidas.', - valueMustBeUnique: 'Valor deve ser único', - verificationTokenInvalid: 'Token de verificação inválido.', - }, - fields: { - addLabel: 'Adicionar {{label}}', - addLink: 'Adicionar Link', - addNew: 'Adicionar novo', - addNewLabel: 'Adicionar novo {{label}}', - addRelationship: 'Adicionar Relação', - addUpload: 'Adicionar Upload', - block: 'bloco', - blockType: 'Tipo de bloco', - blocks: 'blocos', - chooseBetweenCustomTextOrDocument: - 'Escolha entre inserir um URL de texto personalizado ou vincular a outro documento.', - chooseDocumentToLink: 'Escolha um documento para vincular', - chooseFromExisting: 'Escolher entre os existentes', - chooseLabel: 'Escolher {{label}}', - collapseAll: 'Recolher todos', - customURL: 'URL personalizado', - editLabelData: 'Editar dados de {{label}}', - editLink: 'Editar Link', - editRelationship: 'Editar Relacionamento', - enterURL: 'Insira um URL', - internalLink: 'Link Interno', - itemsAndMore: '{{items}} e mais {{count}}', - labelRelationship: 'Relacionado a {{label}}', - latitude: 'Latitude', - linkType: 'Tipo de link', - linkedTo: 'Ligado a <0>{{label}}', - longitude: 'Longitude', - newLabel: 'Novo(a) {{label}}', - openInNewTab: 'Abrir em nova aba', - passwordsDoNotMatch: 'Senhas não coincidem.', - relatedDocument: 'Documento Relacionado', - relationTo: 'Relacionado a', - removeRelationship: 'Remover Relacionamento', - removeUpload: 'Remover Upload', - saveChanges: 'Salvar alterações', - searchForBlock: 'Procurar bloco', - selectExistingLabel: 'Selecionar {{label}} existente', - selectFieldsToEdit: 'Selecione os campos para editar', - showAll: 'Mostrar Tudo', - swapRelationship: 'Relação de Troca', - swapUpload: 'Substituir Upload', - textToDisplay: 'Texto a ser exibido', - toggleBlock: 'Alternar bloco', - uploadNewLabel: 'Carregar novo(a) {{label}}', - }, - general: { - aboutToDelete: 'Você está prestes a excluir o/a {{label}} <1>{{title}}. Tem certeza?', - aboutToDeleteCount_many: 'Você está prestes a deletar {{count}} {{label}}', - aboutToDeleteCount_one: 'Você está prestes a deletar {{count}} {{label}}', - aboutToDeleteCount_other: 'Você está prestes a deletar {{count}} {{label}}', - addBelow: 'Adicionar abaixo', - addFilter: 'Adicionar Filtro', - adminTheme: 'Tema do Admin', - and: 'E', - applyChanges: 'Aplicar alterações', - ascending: 'Ascendente', - automatic: 'Automático', - backToDashboard: 'Voltar para Painel de Controle', - cancel: 'Cancelar', - changesNotSaved: - 'Suas alterações não foram salvas. Se você sair agora, essas alterações serão perdidas.', - close: 'Fechar', - collapse: 'Recolher', - collections: 'Coleções', - columnToSort: 'Coluna para Ordenar', - columns: 'Colunas', - confirm: 'Confirmar', - confirmDeletion: 'Confirmar exclusão', - confirmDuplication: 'Confirmar duplicação', - copied: 'Copiado', - copy: 'Copiar', - create: 'Criar', - createNew: 'Criar Novo', - createNewLabel: 'Criar novo(a) {{label}}', - created: 'Criado', - createdAt: 'Criado Em', - creating: 'Criando', - creatingNewLabel: 'Criando novo(a) {{label}}', - dark: 'Escuro', - dashboard: 'Painel de Controle', - delete: 'Excluir', - deletedCountSuccessfully: 'Excluído {{count}} {{label}} com sucesso.', - deletedSuccessfully: 'Apagado com sucesso.', - deleting: 'Excluindo...', - descending: 'Decrescente', - deselectAllRows: 'Desmarcar todas as linhas', - duplicate: 'Duplicar', - duplicateWithoutSaving: 'Duplicar sem salvar alterações', - edit: 'Editar', - editLabel: 'Editar {{label}}', - editing: 'Editando', - editingLabel_many: 'Editando {{count}} {{label}}', - editingLabel_one: 'Editando {{count}} {{label}}', - editingLabel_other: 'Editando {{count}} {{label}}', - email: 'Email', - emailAddress: 'Endereço de Email', - enterAValue: 'Insira um valor', - error: 'Erro', - errors: 'Erros', - fallbackToDefaultLocale: 'Recuo para o local padrão', - filter: 'Filtro', - filterWhere: 'Filtrar {{label}} em que', - filters: 'Filtros', - globals: 'Globais', - language: 'Idioma', - lastModified: 'Última modificação', - leaveAnyway: 'Sair mesmo assim', - leaveWithoutSaving: 'Sair sem salvar', - light: 'Claro', - livePreview: 'Pré-visualização', - loading: 'Carregando', - locale: 'Local', - locales: 'Localizações', - menu: 'Cardápio', - moveDown: 'Mover para Baixo', - moveUp: 'Mover para Cima', - newPassword: 'Nova Senha', - noFiltersSet: 'Nenhum filtro definido', - noLabel: '', - noOptions: 'Sem opções', - noResults: - 'Nenhum {{label}} encontrado. Ou nenhum(a) {{label}} existe ainda, ou nenhum(a) corresponde aos filtros que você especificou acima.', - noValue: 'Nenhum valor', - none: 'Nenhum', - notFound: 'Não Encontrado', - nothingFound: 'Nada encontrado', - of: 'de', - open: 'Abrir', - or: 'Ou', - order: 'Ordem', - pageNotFound: 'Página não encontrada', - password: 'Senha', - payloadSettings: 'Configurações do Payload', - perPage: 'Itens por Página: {{limit}}', - remove: 'Remover', - reset: 'Redefinir', - row: 'Linha', - rows: 'Linhas', - save: 'Salvar', - saving: 'Salvando...', - searchBy: 'Buscar por {{label}}', - selectAll: 'Selecione tudo {{count}} {{label}}', - selectAllRows: 'Selecione todas as linhas', - selectValue: 'Selecione um valor', - selectedCount: '{{count}} {{label}} selecionado', - showAllLabel: 'Mostre todos {{label}}', - sorryNotFound: 'Desculpe—não há nada que corresponda à sua requisição.', - sort: 'Ordenar', - sortByLabelDirection: 'Ordenar por {{label}} {{direction}}', - stayOnThisPage: 'Permanecer nessa página', - submissionSuccessful: 'Envio bem-sucedido.', - submit: 'Enviar', - successfullyCreated: '{{label}} criado com sucesso.', - successfullyDuplicated: '{{label}} duplicado com sucesso.', - thisLanguage: 'Português', - titleDeleted: '{{label}} {{title}} excluído com sucesso.', - unauthorized: 'Não autorizado', - unsavedChangesDuplicate: 'Você tem mudanças não salvas. Você gostaria de continuar a duplicar?', - untitled: 'Sem título', - updatedAt: 'Atualizado Em', - updatedCountSuccessfully: 'Atualizado {{count}} {{label}} com sucesso.', - updatedSuccessfully: 'Atualizado com sucesso.', - updating: 'Atualizando', - uploading: 'Fazendo upload', - user: 'usuário', - users: 'usuários', - value: 'Valor', - welcome: 'Boas vindas', - }, - operators: { - contains: 'contém', - equals: 'igual', - exists: 'existe', - isGreaterThan: 'é maior que', - isGreaterThanOrEqualTo: 'é maior ou igual a', - isIn: 'está em', - isLessThan: 'é menor que', - isLessThanOrEqualTo: 'é menor ou igual a', - isLike: 'é como', - isNotEqualTo: 'não é igual a', - isNotIn: 'não está em', - near: 'perto', - }, - upload: { - crop: 'Cultura', - cropToolDescription: - 'Arraste as bordas da área selecionada, desenhe uma nova área ou ajuste os valores abaixo.', - dragAndDrop: 'Arraste e solte um arquivo', - dragAndDropHere: 'ou arraste um arquivo aqui', - editImage: 'Editar imagem', - fileName: 'Nome do Arquivo', - fileSize: 'Tamanho do Arquivo', - focalPoint: 'Ponto Focal', - focalPointDescription: - 'Arraste o ponto focal diretamente na pré-visualização ou ajuste os valores abaixo.', - height: 'Altura', - lessInfo: 'Ver menos', - moreInfo: 'Ver mais', - previewSizes: 'Tamanhos de Pré-visualização', - selectCollectionToBrowse: 'Selecione uma Coleção para Navegar', - selectFile: 'Selecione um arquivo', - setCropArea: 'Definir área de corte', - setFocalPoint: 'Definir ponto focal', - sizes: 'Tamanhos', - sizesFor: 'Tamanhos para {{label}}', - width: 'Largura', - }, - validation: { - emailAddress: 'Por favor, insira um endereço de email válido.', - enterNumber: 'Por favor, insira um número válido.', - fieldHasNo: 'Esse campo não contém {{label}}', - greaterThanMax: '{{value}} é maior que o máximo permitido de {{label}} que é {{max}}.', - invalidInput: 'Esse campo tem um conteúdo inválido.', - invalidSelection: 'Esse campo tem uma seleção inválida.', - invalidSelections: "'Esse campo tem as seguintes seleções inválidas:'", - lessThanMin: '{{value}} é menor que o mínimo permitido de {{label}} que é {{min}}.', - limitReached: 'Limite atingido, apenas {{max}} itens podem ser adicionados.', - longerThanMin: 'Esse valor deve ser maior do que o mínimo de {{minLength}} characters.', - notValidDate: '"{{value}}" não é uma data válida.', - required: 'Esse campo é obrigatório.', - requiresAtLeast: 'Esse campo requer no máximo {{count}} {{label}}.', - requiresNoMoreThan: 'Esse campo requer pelo menos {{count}} {{label}}.', - requiresTwoNumbers: 'Esse campo requer dois números.', - shorterThanMax: 'Esse valor deve ser menor do que o máximo de {{maxLength}} caracteres.', - trueOrFalse: 'Esse campo pode ser apenas verdadeiro (true) ou falso (false)', - validUploadID: "'Esse campo não é um ID de upload válido.'", - }, - version: { - aboutToPublishSelection: - 'Você está prestes a publicar todos os {{label}} da seleção. Tem certeza?', - aboutToRestore: - 'Você está prestes a restaurar o documento {{label}} para o estado em que ele se encontrava em {{versionDate}}.', - aboutToRestoreGlobal: - 'Você está prestes a restaurar o Global {{label}} para o estado em que ele se encontrava em {{versionDate}}.', - aboutToRevertToPublished: - 'Você está prestes a reverter as alterações desse documento para seu estado de publicação. Tem certeza?', - aboutToUnpublish: 'Você está prestes a despublicar esse documento. Tem certeza?', - aboutToUnpublishSelection: - 'Você está prestes a cancelar a publicação de todos os {{label}} na seleção. Tem certeza?', - autosave: 'Salvamento automático', - autosavedSuccessfully: 'Salvamento automático com sucesso.', - autosavedVersion: 'Versão de salvamento automático', - changed: 'Alterado', - compareVersion: 'Comparar versão com:', - confirmPublish: 'Confirmar publicação', - confirmRevertToSaved: 'Confirmar a reversão para o salvo', - confirmUnpublish: 'Confirmar despublicação', - confirmVersionRestoration: 'Confirmar Restauração de versão', - currentDocumentStatus: 'Documento {{docStatus}} atual', - draft: 'Rascunho', - draftSavedSuccessfully: 'Rascunho salvo com sucesso.', - lastSavedAgo: 'Última gravação há {{distance}}', - noFurtherVersionsFound: 'Nenhuma outra versão encontrada', - noRowsFound: 'Nenhum(a) {{label}} encontrado(a)', - preview: 'Pré-visualização', - problemRestoringVersion: 'Ocorreu um problema ao restaurar essa versão', - publish: 'Publicar', - publishChanges: 'Publicar alterações', - published: 'Publicado', - publishing: 'Publicação', - restoreThisVersion: 'Restaurar essa versão', - restoredSuccessfully: 'Restaurado com sucesso.', - restoring: 'Restaurando...', - revertToPublished: 'Reverter para publicado', - reverting: 'Revertendo...', - saveDraft: 'Salvar rascunho', - selectLocales: 'Selecione as localizações para exibir', - selectVersionToCompare: 'Selecione uma versão para comparar', - showLocales: 'Exibir localizações:', - showingVersionsFor: 'Mostrando versões para:', - status: 'Status', - type: 'Tipo', - unpublish: 'Despublicar', - unpublishing: 'Despublicando...', - version: 'Versão', - versionCount_many: '{{count}} versões encontradas', - versionCount_none: 'Nenhuma versão encontrada', - versionCount_one: '{{count}} versão encontrada', - versionCount_other: '{{count}} versões encontradas', - versionCreatedOn: '{{version}} criada em:', - versionID: 'ID da versão', - versions: 'Versões', - viewingVersion: 'Visualizando versão para o/a {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: '`Visualizando versão para o global {{entityLabel}}', - viewingVersions: 'Visualizando versões para o/a {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: '`Visualizando versões para o global {{entityLabel}}', - }, -} diff --git a/packages/translations/src/all/ro.ts b/packages/translations/src/all/ro.ts deleted file mode 100644 index d4e7bd0d19..0000000000 --- a/packages/translations/src/all/ro.ts +++ /dev/null @@ -1,398 +0,0 @@ -export default { - authentication: { - account: 'Cont', - accountOfCurrentUser: 'Contul utilizatorului curent', - alreadyActivated: 'Deja activat', - alreadyLoggedIn: 'Deja autorizat', - apiKey: 'Cheia API', - backToLogin: 'Înapoi la login', - beginCreateFirstUser: 'Pentru a începe, creați primul utilizator.', - changePassword: 'Schimbați parola', - checkYourEmailForPasswordReset: - 'Verificați emailul pentru un link care vă va permite să vă resetați parola în siguranță.', - confirmGeneration: 'Confirmați generarea', - confirmPassword: 'Confirmați parola', - createFirstUser: 'Creați primul utilizator', - emailNotValid: 'Emailul furnizat nu este valid', - emailSent: 'Email trimis', - enableAPIKey: 'Activați cheia API', - failedToUnlock: 'Nu s-a reușit deblocarea', - forceUnlock: 'Forțați deblocarea', - forgotPassword: 'Am uitat parola', - forgotPasswordEmailInstructions: - 'Vă rugăm să introduceți emailul dumneavoastră mai jos. Veți primi un mesaj de email cu instrucțiuni despre cum să vă resetați parola.', - forgotPasswordQuestion: 'Ați uitat parola?', - generate: 'Generează', - generateNewAPIKey: 'Generează o nouă cheie API', - generatingNewAPIKeyWillInvalidate: - 'Generarea unei noi chei API va <1>invalida cheia anterioară. Sunteți sigur că doriți să continuați?', - lockUntil: 'Blocați până la', - logBackIn: 'Autentificați-vă din nou', - logOut: 'Deconectează-te', - loggedIn: - 'Pentru a vă autentifica cu un alt utilizator, trebuie să vă <0>deconectați mai întâi.', - loggedInChangePassword: - 'Pentru a vă schimba parola, accesați <0>contul și editați-vă parola acolo.', - loggedOutInactivity: 'Ați fost deconectat din cauza inactivității.', - loggedOutSuccessfully: 'Ați fost deconectat cu succes.', - login: 'Autentificare', - loginAttempts: 'Încercări de autentificare', - loginUser: 'Autentificare utilizator', - loginWithAnotherUser: - 'Pentru a vă autentifica cu un alt utilizator, trebuie să vă <0>deconectați mai întâi.', - logout: 'Ieșire', - logoutUser: 'Deconectați utilizatorul', - newAPIKeyGenerated: 'Cheie nouă API generată.', - newAccountCreated: - 'A fost creat un nou cont pe care îl puteți accesa {{serverURL}} Vă rugăm să intrați pe următorul link sau să copiați URL-ul de mai jos în browserul dvs. pentru a vă verifica emailul: {{verificationURL}}
    După ce vă verificați adresa de email, vă veți putea autentifica cu succes.', - newPassword: 'Parolă nouă', - resetPassword: 'Resetează parola', - resetPasswordExpiration: 'Resetați expirarea parolei', - resetPasswordToken: 'Resetați token-ul parolei', - resetYourPassword: 'Resetați-vă parola', - stayLoggedIn: 'Rămâneți conectat', - successfullyUnlocked: 'Deblocat cu succes', - unableToVerify: 'Nu se poate verifica', - verified: 'Verificat', - verifiedSuccessfully: 'Verificat cu succes', - verify: 'Verifică', - verifyUser: 'Verifică utilizatorul', - verifyYourEmail: 'Verifică-ți emailul', - youAreInactive: - 'Nu ați mai fost activ de ceva timp și în scurt timp veți fi deconectat automat pentru propria dvs. securitate. Doriți să rămâneți conectat(ă)?', - youAreReceivingResetPassword: - 'Primiți acest mesaj deoarece dumneavoastră (sau altcineva) ați solicitat resetarea parolei pentru contul dumneavoastră. Vă rugăm să dați clic pe următorul link sau să îl copiați în browserul dvs. pentru a finaliza procesul:', - youDidNotRequestPassword: - 'Dacă nu ați solicitat acest lucru, vă rugăm să ignorați acest email și parola dvs. va rămâne neschimbată.', - }, - error: { - accountAlreadyActivated: 'Acest cont a fost deja activat.', - autosaving: 'A existat o problemă în timpul salvării automate a acestui document.', - correctInvalidFields: 'Vă rugăm să corectați datele invalide.', - deletingFile: 'S-a produs o eroare la ștergerea fișierului.', - deletingTitle: - 'S-a produs o eroare în timpul ștergerii {{title}}. Vă rugăm să verificați conexiunea și să încercați din nou.', - emailOrPasswordIncorrect: 'Adresa de e-mail sau parola este incorectă.', - followingFieldsInvalid_one: 'Următorul câmp nu este valid:', - followingFieldsInvalid_other: 'Următoarele câmpuri nu sunt valabile:', - incorrectCollection: 'Colecție incorectă', - invalidFileType: 'Tip de fișier invalid', - invalidFileTypeValue: 'Tip de fișier invalid: {{value}}', - loadingDocument: 'A existat o problemă la încărcarea documentului cu ID-ul de {{id}}.', - missingEmail: 'Lipsește emailul.', - missingIDOfDocument: 'Lipsește ID-ul documentului care trebuie actualizat.', - missingIDOfVersion: 'Lipsește ID-ul versiunii.', - missingRequiredData: 'Lipsesc datele necesare.', - noFilesUploaded: 'Nu a fost încărcat niciun fișier.', - noMatchedField: 'Nu s-a găsit niciun câmp corespunzător pentru "{{label}}"', - noUser: 'Nici un utilizator', - notAllowedToAccessPage: 'Nu aveți voie să accesați această pagină.', - notAllowedToPerformAction: 'Nu aveți voie să efectuați această acțiune.', - notFound: 'Resursa solicitată nu a fost găsită.', - previewing: 'A existat o problemă la previzualizarea acestui document.', - problemUploadingFile: 'A existat o problemă în timpul încărcării fișierului.', - tokenInvalidOrExpired: 'Tokenul este invalid sau a expirat.', - unPublishingDocument: 'A existat o problemă în timpul nepublicării acestui document.', - unableToDeleteCount: 'Nu se poate șterge {{count}} din {{total}} {{label}}.', - unableToUpdateCount: 'Nu se poate șterge {{count}} din {{total}} {{label}}.', - unauthorized: 'neautorizat, trebuie să vă conectați pentru a face această cerere.', - unknown: 'S-a produs o eroare necunoscută.', - unspecific: 'S-a produs o eroare.', - userLocked: - 'Acest utilizator este blocat din cauza unui număr prea mare de încercări de autentificare eșuate.', - valueMustBeUnique: 'Valoarea trebuie să fie unică', - verificationTokenInvalid: 'Tokenul de verificare este invalid.', - }, - fields: { - addLabel: 'Adăugați {{label}}', - addLink: 'Adăugați un link', - addNew: 'Adăugați un nou', - addNewLabel: 'Adăugați un nou {{label}}', - addRelationship: 'Adăugați o relație', - addUpload: 'Adăugați un fișier', - block: 'bloc', - blockType: 'Tip de bloc', - blocks: 'Blocuri', - chooseBetweenCustomTextOrDocument: - 'Alegeți între a introduce un text URL personalizat sau a crea un link către un alt document.', - chooseDocumentToLink: 'Alegeți un document către care să creați un link', - chooseFromExisting: 'Alegeți dintre cele existente', - chooseLabel: 'Alege {{label}}', - collapseAll: 'Colapsează toate', - customURL: 'URL personalizat', - editLabelData: 'Editați {{label}}', - editLink: 'Editați Link-ul', - editRelationship: 'Editați relația', - enterURL: 'Introduceți un URL', - internalLink: 'Link intern', - itemsAndMore: '{{items}} şi {{count}} mai multe', - labelRelationship: 'Relația cu {{label}}', - latitude: 'Latitudine', - linkType: 'Tip de link', - linkedTo: 'Legat de <0>{{label}}', - longitude: 'Longitudine', - newLabel: 'Nou {{label}}', - openInNewTab: 'Deschideți în tab nou', - passwordsDoNotMatch: 'Parolele nu corespund.', - relatedDocument: 'Document asociat', - relationTo: 'Relație cu', - removeRelationship: 'Eliminați relația', - removeUpload: 'Eliminați încărcarea', - saveChanges: 'Salvați modificările', - searchForBlock: 'Căutați un bloc', - selectExistingLabel: 'Selectați existent {{label}}', - selectFieldsToEdit: 'Selectați câmpurile de editat', - showAll: 'Afișați toate', - swapRelationship: 'Schimbați relația', - swapUpload: 'Schimbați Încărcarea', - textToDisplay: 'Text de afișat', - toggleBlock: 'Toggle bloc', - uploadNewLabel: 'Încărcați un nou {{label}}', - }, - general: { - aboutToDelete: 'Sunteți pe cale să ștergeți {{label}} <1>{{title}}. Sunteți sigur?', - aboutToDeleteCount_many: 'Sunteți pe cale să ștergeți {{count}} {{label}}', - aboutToDeleteCount_one: 'Sunteți pe cale să ștergeți {{count}} {{label}}', - aboutToDeleteCount_other: 'Sunteți pe cale să ștergeți {{count}} {{label}}', - addBelow: 'Adaugă mai jos', - addFilter: 'Adaugă filtru', - adminTheme: 'Tema Admin', - and: 'Şi', - applyChanges: 'Aplicați modificările', - ascending: 'Ascendant', - automatic: 'Automat', - backToDashboard: 'Înapoi la panoul de bord', - cancel: 'Anulați', - changesNotSaved: - 'Modificările dvs. nu au fost salvate. Dacă plecați acum, vă veți pierde modificările.', - close: 'Închide', - collapse: 'Colaps', - collections: 'Colecții', - columnToSort: 'Coloana de sortat', - columns: 'Coloane', - confirm: 'Confirmați', - confirmDeletion: 'Confirmați ștergerea', - confirmDuplication: 'Confirmați duplicarea', - copied: 'Copiat', - copy: 'Copiați', - create: 'Creează', - createNew: 'Creați unul nou', - createNewLabel: 'Creați un nou {{label}}', - created: 'Creat', - createdAt: 'Creat la', - creating: 'Creare', - creatingNewLabel: 'Crearea unui nou {{label}}', - dark: 'Dark', - dashboard: 'Panoul de bord', - delete: 'Șterge', - deletedCountSuccessfully: 'Șterse cu succes {{count}} {{label}}.', - deletedSuccessfully: 'Șters cu succes.', - deleting: 'Deleting...', - descending: 'Descendentă', - deselectAllRows: 'Deselectează toate rândurile', - duplicate: 'Duplicați', - duplicateWithoutSaving: 'Duplicați fără salvarea modificărilor', - edit: 'Editează', - editLabel: 'Editați {{label}}', - editing: 'Editare', - editingLabel_many: 'Editare {{count}} {{label}}', - editingLabel_one: 'Editare {{count}} {{label}}', - editingLabel_other: 'Editare {{count}} {{label}}', - email: 'Email', - emailAddress: 'Adresa de email', - enterAValue: 'Introduceți o valoare', - error: 'Eroare', - errors: 'Erori', - fallbackToDefaultLocale: 'Revenire la locația implicită', - filter: 'Filtru', - filterWhere: 'Filtrează {{label}} unde', - filters: 'Filtre', - globals: 'Globale', - language: 'Limba', - lastModified: 'Ultima modificare', - leaveAnyway: 'Pleacă oricum', - leaveWithoutSaving: 'Plecare fără a salva', - light: 'Light', - livePreview: 'Previzualizare', - loading: 'Încărcare', - locale: 'Localitate', - locales: 'Localuri', - menu: 'Meniu', - moveDown: 'Mutați în jos', - moveUp: 'Mutați în sus', - newPassword: 'Parolă nouă', - noFiltersSet: 'Nici un filtru setat', - noLabel: '', - noOptions: 'Fără opțiuni', - noResults: - 'Nici un {{label}} găsit. Fie nu există încă niciun {{label}}, fie niciunul nu se potrivește cu filtrele pe care le-ați specificat mai sus..', - noValue: 'Nici o valoare', - none: 'Nici unul', - notFound: 'Nu a fost găsit', - nothingFound: 'Nimic găsit', - of: 'de', - open: 'Deschide', - or: 'Sau', - order: 'ORdine', - pageNotFound: 'Pagina nu a fost găsită', - password: 'Parola', - payloadSettings: 'Setări de Payload', - perPage: 'Pe pagină: {{limit}}', - remove: 'Eliminați', - reset: 'Resetare', - row: 'Rând', - rows: 'Rânduri', - save: 'Salvează', - saving: 'Salvare...', - searchBy: 'Căutați după {{label}}', - selectAll: 'Selectați toate {{count}} {{label}}', - selectAllRows: 'Selectează toate rândurile', - selectValue: 'Selectați o valoare', - selectedCount: '{{count}} {{label}} selectate', - showAllLabel: 'Afișează toate {{eticheta}}', - sorryNotFound: 'Ne pare rău - nu există nimic care să corespundă cu cererea dvs.', - sort: 'Sortează', - sortByLabelDirection: 'Sortează după {{etichetă}} {{direcţie}}', - stayOnThisPage: 'Rămâneți pe această pagină', - submissionSuccessful: 'Trimitere cu succes.', - submit: 'Trimite', - successfullyCreated: '{{label}} creat(ă) cu succes.', - successfullyDuplicated: '{{label}} duplicat(ă) cu succes.', - thisLanguage: 'Română', - titleDeleted: '{{label}} "{{title}}" șters cu succes.', - unauthorized: 'neautorizat(ă)', - unsavedChangesDuplicate: 'Aveți modificări nesalvate. Doriți să continuați să duplicați?', - untitled: 'Fără titlu', - updatedAt: 'Actualizat la', - updatedCountSuccessfully: 'Actualizate {{count}} {{label}} cu succes.', - updatedSuccessfully: 'Actualizat cu succes.', - updating: 'Actualizare', - uploading: 'Încărcare', - user: 'Utilizator', - users: 'Utilizatori', - value: 'Valoare', - welcome: 'Bine ați venit', - }, - operators: { - contains: 'conține', - equals: 'egal cu', - exists: 'există', - isGreaterThan: 'este mai mare decât', - isGreaterThanOrEqualTo: 'este mai mare sau egal cu', - isIn: 'este în', - isLessThan: 'este mai mic decât', - isLessThanOrEqualTo: 'este mai mic decât sau egal cu', - isLike: 'este ca', - isNotEqualTo: 'nu este egal cu', - isNotIn: 'nu este în', - near: 'în apropiere de', - }, - upload: { - crop: 'Cultură', - cropToolDescription: - 'Trageți colțurile zonei selectate, desenați o nouă zonă sau ajustați valorile de mai jos.', - dragAndDrop: 'Trageți și plasați un fișier', - dragAndDropHere: 'sau trageți și plasați un fișier aici', - editImage: 'Editează imaginea', - fileName: 'Numele fișierului', - fileSize: 'Dimensiunea fișierului', - focalPoint: 'Punct central', - focalPointDescription: - 'Trageți punctul focal direct pe previzualizare sau ajustați valorile de mai jos.', - height: 'Înălțime', - lessInfo: 'Mai puține informații', - moreInfo: 'Mai multe informații', - previewSizes: 'Dimensiuni Previzualizare', - selectCollectionToBrowse: 'Selectați o colecție pentru navigare', - selectFile: 'Selectați un fișier', - setCropArea: 'Setați zona de decupare', - setFocalPoint: 'Setează punctul focal', - sizes: 'Dimensiuni', - sizesFor: 'Mărimi pentru {{label}}', - width: 'Lățime', - }, - validation: { - emailAddress: 'Vă rugăm să introduceți o adresă de email validă.', - enterNumber: 'Vă rugăm să introduceți un număr valid.', - fieldHasNo: 'Acest câmp nu are un {{label}}', - greaterThanMax: - '{{value}} este mai mare decât valoarea maximă permisă pentru {{label}} de {{max}}.', - invalidInput: 'Acest câmp are o intrare invalidă.', - invalidSelection: 'Acest câmp are o selecție invalidă.', - invalidSelections: 'Acest câmp are următoarele selecții invalide:', - lessThanMin: - '{{value}} este mai mic decât valoarea minimă permisă pentru {{label}} de {{min}}.', - limitReached: 'Limita atinsă, doar {{max}} elemente pot fi adăugate.', - longerThanMin: - 'Această valoare trebuie să fie mai mare decât lungimea minimă de {{minLength}} caractere.', - notValidDate: '"{{value}}" nu este o dată valabilă.', - required: 'Acest câmp este obligatoriu.', - requiresAtLeast: 'Acest domeniu necesită cel puțin {{count}} {{label}}.', - requiresNoMoreThan: 'Acest câmp nu necesită mai mult de {{count}} {{label}}.', - requiresTwoNumbers: 'Acest câmp necesită două numere.', - shorterThanMax: - 'Această valoare trebuie să fie mai scurtă decât lungimea maximă de {{maxLength}} caractere.', - trueOrFalse: 'Acest câmp poate fi doar egal cu true sau false.', - validUploadID: 'Acest câmp nu este un ID de încărcare valid.', - }, - version: { - aboutToPublishSelection: - 'Sunteți pe cale să publicați toate {{label}} din selecție. Sunteți sigur?', - aboutToRestore: - 'Sunteți pe cale să readuceți acest document {{label}} în starea în care se afla la data de {{versionDate}}.', - aboutToRestoreGlobal: - 'Sunteți pe cale să readuceți {{label}} global în starea în care se afla la data de {{versionDate}}.', - aboutToRevertToPublished: - 'Sunteți pe cale să readuceți modificările aduse acestui document la starea sa publicată. Sunteți sigur?', - aboutToUnpublish: 'Sunteți pe cale să nepublicați acest document. Sunteți sigur?', - aboutToUnpublishSelection: - 'Sunteți pe punctul de a nepublica toate {{label}} din selecție. Sunteți sigur?', - autosave: 'Autosalvare', - autosavedSuccessfully: 'Autosalvare cu succes.', - autosavedVersion: 'Versiunea salvată automat.', - changed: 'Schimbat', - compareVersion: 'Comparați versiunea cu:', - confirmPublish: 'Confirmați publicarea', - confirmRevertToSaved: 'Confirmați revenirea la starea salvată', - confirmUnpublish: 'Confirmați nepublicarea', - confirmVersionRestoration: 'Confirmați restaurarea versiunii', - currentDocumentStatus: 'Documentul {{docStatus}} curent', - draft: 'Proiect', - draftSavedSuccessfully: 'Proiect salvat cu succes.', - lastSavedAgo: 'Ultima salvare acum {{distance}}', - noFurtherVersionsFound: 'Nu s-au găsit alte versiuni', - noRowsFound: 'Nu s-a găsit niciun {{label}}', - preview: 'Previzualizare', - problemRestoringVersion: 'A existat o problemă la restaurarea acestei versiuni', - publish: 'Publicați', - publishChanges: 'Publicați modificările', - published: 'Publicat', - publishin: 'Publicare', - restoreThisVersion: 'Restaurați această versiune', - restoredSuccessfully: 'Restaurat cu succes.', - restoring: 'Restaurare...', - revertToPublished: 'Reveniți la publicat', - reverting: 'Revenire...', - saveDraft: 'Salvați proiectul', - selectLocales: 'Selectați localitățile de afișat', - selectVersionToCompare: 'Selectați o versiune pentru a compara', - showLocales: 'Afișați localitățile:', - showingVersionsFor: 'Se afișează versiuni pentru:', - status: 'Status', - type: 'Tip', - unpublish: 'Dezpublicare', - unpublishing: 'Dezpublicare...', - version: 'Versiune', - versionCount_many: '{{count}} versiuni găsite', - versionCount_none: 'Nici o versiune găsită', - versionCount_one: '{{count}} versiune găsită', - versionCount_other: '{{count}} versiuni găsite', - versionCreatedOn: '{{version}} creată pe:', - versionID: 'ID-ul versiunii', - versions: 'Versiuni', - viewingVersion: 'Vizualizarea versiunii pentru {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: 'Vizualizarea versiunii pentru globala {{entityLabel}}', - viewingVersions: 'Vizualizarea versiunilor pentru {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: 'Vizualizarea versiunilor pentru globala {{entityLabel}}', - }, -} diff --git a/packages/translations/src/all/rs-latin.ts b/packages/translations/src/all/rs-latin.ts deleted file mode 100644 index 3aff0e2b04..0000000000 --- a/packages/translations/src/all/rs-latin.ts +++ /dev/null @@ -1,387 +0,0 @@ -export default { - authentication: { - account: 'Nalog', - accountOfCurrentUser: 'Nalog trenutnog korisnika', - alreadyActivated: 'Već aktivirano', - alreadyLoggedIn: 'Već prijavljen', - apiKey: 'API ključ', - backToLogin: 'Nazad na prijavu', - beginCreateFirstUser: 'Na samom početku kreiraj svog prvog korisnika', - changePassword: 'Promeni lozinku', - checkYourEmailForPasswordReset: 'Proverite e-poštu i poruku sa linkom za promenu lozinke.', - confirmGeneration: 'Potvrdi kreiranje', - confirmPassword: 'Potvrdi lozinku', - createFirstUser: 'Kreiraj prvog korisnika', - emailNotValid: 'Adresa e-pošte nije validna', - emailSent: 'Poruka e-pošte prosleđena', - enableAPIKey: 'Omogući API ključ', - failedToUnlock: 'Neuspešno otključavanje.', - forceUnlock: 'Prinudno otključaj', - forgotPassword: 'Zaboravljena lozinka', - forgotPasswordEmailInstructions: - 'Molimo Vas da unesete svoj adresu e-pošte. Primićete poruku sa uputstvom za ponovno postavljanje lozinke.', - forgotPasswordQuestion: 'Zaboravljena lozinka?', - generate: 'Generiši', - generateNewAPIKey: 'Generiši novi API ključ', - generatingNewAPIKeyWillInvalidate: - 'Generisanje novog API ključa će <1>poništiti prethodni ključ. Da li ste sigurni da želite nastaviti?', - lockUntil: 'Zaključaj dok', - logBackIn: 'Ponovna prijava', - logOut: 'Odjava', - loggedIn: 'Za prijavu sa drugim korisničkim nalogom potrebno je prvo <0>odjaviti se', - loggedInChangePassword: - 'Da biste promenili lozinku, otvorite svoj <0>nalog i promenite lozinku.', - loggedOutInactivity: 'Odjavljeni se zbog neaktivnosti.', - loggedOutSuccessfully: 'Uspešno ste odjavljeni', - login: 'Prijava', - loginAttempts: 'Pokušaji prijave', - loginUser: 'Prijava korisnika', - loginWithAnotherUser: - 'Za prijavu sa drugim korisničkim nalogom potrebno je prvo <0>odjaviti se', - logout: 'Odjava', - logoutUser: 'Odjava korisnika', - newAPIKeyGenerated: 'Novi API ključ generisan.', - newAccountCreated: - 'Novi nalog je kreiran. Pristupite nalogu klikom na {{serverURL}}. Molimo Vas kliknite na sledeći link ili zalepite URL koji se nalazi ispod u pretraživač da biste potvrdili adresu e-pošte: {{verificationURL}}
    Nakon što potvrdite adresu e-pošte možete se ulogovati.', - newPassword: 'Nova lozinka', - resetPassword: 'Promena lozinke', - resetPasswordExpiration: 'Promena roka trajanja lozinke', - resetPasswordToken: 'Promena lozinke tokena', - resetYourPassword: 'Promeni svoju lozinku', - stayLoggedIn: 'Ostani prijavljen', - successfullyUnlocked: 'Uspešno otključano', - unableToVerify: 'Nije moguće potvrditi', - verified: 'Potvrđeno', - verifiedSuccessfully: 'Uspešno potvrđeno', - verify: 'Potvrdi', - verifyUser: 'Potvrdi korisnika', - verifyYourEmail: 'Potvrdi svoju adresu e-pošte', - youAreInactive: - 'Neaktivni ste već neko vreme i uskoro ćete biti automatski odjavljeni zbog sigurnosti. Da li želite ostati prijavljeni?', - youAreReceivingResetPassword: - 'Primili ste ovo pošto ste Vi (ili neko u vaše ime) zatražili promenu lozinke naloga. Molimo Vas kliknite na link ili zalepite URL u svoj pretraživač da biste završili proces:', - youDidNotRequestPassword: - 'Ako niste zatražili promenu lozinke ignorišite ovu poruku i lozinka će ostati nepromenjena.', - }, - error: { - accountAlreadyActivated: 'Ovaj nalog je već aktiviran.', - autosaving: 'Nastao je problem pri automatskom čuvanju ovog dokumenta.', - correctInvalidFields: 'Molimo ispravite nevalidna polja.', - deletingFile: 'Dogodila se greška pri brisanju datoteke.', - deletingTitle: - 'Dogodila se greška pri brisanju {{title}}. Proverite internet konekciju i pokušajte ponovo.', - emailOrPasswordIncorrect: 'Adresa e-pošte ili lozinka su neispravni.', - followingFieldsInvalid_one: 'Ovo polje je nevalidno:', - followingFieldsInvalid_other: 'Ova polja su nevalidna:', - incorrectCollection: 'Nevalidna kolekcija', - invalidFileType: 'Nevalidan tip datoteke', - invalidFileTypeValue: 'Nevalidan tip datoteke: {{value}}', - loadingDocument: 'Postoji problem pri učitavanju dokumenta čiji je ID {{id}}.', - missingEmail: 'Nedostaje adresa e-pošte.', - missingIDOfDocument: 'Nedostaje ID dokumenta da bi se ažurirao.', - missingIDOfVersion: 'Nedostaje ID verzije.', - missingRequiredData: 'Nedostaju obavezni podaci.', - noFilesUploaded: 'Nijedna datoteka nije učitana.', - noMatchedField: 'Nema podudarajućih polja za "{{label}}"', - noUser: 'Nema korisnika', - notAllowedToAccessPage: 'Nemate dozvolu za pristup ovoj stranici.', - notAllowedToPerformAction: 'Nemate dozvolu za izvršenje ove radnje.', - notFound: 'Traženi resurs nije pronađen.', - previewing: 'Postoji problem pri pregledu ovog dokumenta.', - problemUploadingFile: 'Postoji problem pri učitavanju datoteke.', - tokenInvalidOrExpired: 'Token je nevalidan ili je istekao.', - unPublishingDocument: 'Postoji problem pri poništavanju objave ovog dokumenta.', - unableToDeleteCount: 'Nije moguće izbrisati {{count}} od {{total}} {{label}}.', - unableToUpdateCount: 'Nije moguće ažurirati {{count}} od {{total}} {{label}}.', - unauthorized: 'Niste autorizovani da biste uputili ovaj zahtev.', - unknown: 'Došlo je do nepoznate greške.', - unspecific: 'Došlo je do greške.', - userLocked: 'Ovaj korisnik je zaključan zbog prevelikog broja neuspešnih pokušaja prijave.', - valueMustBeUnique: 'Vrednost mora biti jedinstvena.', - verificationTokenInvalid: 'Verifikacioni token je nevalidan.', - }, - fields: { - addLabel: 'Dodaj {{label}}', - addLink: 'Dodaj link', - addNew: 'Dodaj novi', - addNewLabel: 'Dodaj novi {{label}}', - addRelationship: 'Dodaj relaciju', - addUpload: 'Dodaj učitavanje', - block: 'blokiranje', - blockType: 'Vrsta blokiranja', - blocks: 'blokiranja', - chooseBetweenCustomTextOrDocument: - 'Izaberite između unosa prilagođenog teksta URL ili linka na drugi dokument.', - chooseDocumentToLink: 'Odaberite dokument koji želite linkovati.', - chooseFromExisting: 'Odaberite iz postojećih.', - chooseLabel: 'Odaberite {{label}}', - collapseAll: 'Skupi sve', - customURL: 'Prilagođeni URL', - editLabelData: 'Izmeni {{label}} podatke', - editLink: 'Izmeni link', - editRelationship: 'Izmeni odnos', - enterURL: 'Unesi URL', - internalLink: 'Interni link', - itemsAndMore: '{{items}} i {{count}} više', - labelRelationship: '{{label}} veza', - latitude: 'Geografska širina', - linkType: 'Tip linka', - linkedTo: 'Povezani sa <0>{{label}}', - longitude: 'Geografska dužina', - newLabel: 'Novo {{label}}', - openInNewTab: 'Otvori u novoj kartici.', - passwordsDoNotMatch: 'Lozinke nisu iste.', - relatedDocument: 'Povezani dokument', - relationTo: 'Veza sa', - removeRelationship: 'Ukloni vezu', - removeUpload: 'Ukloni prenos', - saveChanges: 'Sačuvaj promene', - searchForBlock: 'Pretraži blok', - selectExistingLabel: 'Odaberi postojeću {{label}}', - selectFieldsToEdit: 'Odaberite polja za promenu', - showAll: 'Pokaži sve', - swapRelationship: 'Zameni vezu', - swapUpload: 'Zameni prenos', - textToDisplay: 'Tekst za prikaz', - toggleBlock: 'Prebaci blok', - uploadNewLabel: 'Učitaj novi {{label}}', - }, - general: { - aboutToDelete: 'Izbrisaćete {{label}} <1>{{title}}. Da li ste sigurni?', - aboutToDeleteCount_many: 'Izbrisaćete {{count}} {{label}}', - aboutToDeleteCount_one: 'Izbrisaćete {{count}} {{label}}', - aboutToDeleteCount_other: 'Izbrisaćete {{count}} {{label}}', - addBelow: 'Dodaj ispod', - addFilter: 'Dodaj filter', - adminTheme: 'Administratorska tema', - and: 'I', - applyChanges: 'Primeni promene', - ascending: 'Uzlazno', - automatic: 'Automatsko', - backToDashboard: 'Nazad na kontrolni panel', - cancel: 'Otkaži', - changesNotSaved: 'Vaše promene nisu sačuvane. Ako izađete sada, izgubićete promene.', - close: 'Zatvori', - collapse: 'Skupi', - collections: 'Kolekcije', - columnToSort: 'Kolona za sortiranje', - columns: 'Kolone', - confirm: 'Potvrdi', - confirmDeletion: 'Potvrdi brisanje', - confirmDuplication: 'Potvrdi duplikaciju', - copied: 'Kopirano', - copy: 'Kopiraj', - create: 'Kreiraj', - createNew: 'Kreiraj novo', - createNewLabel: 'Kreiraj novo {{label}}', - created: 'Kreirano', - createdAt: 'Kreirano u', - creating: 'Kreira se', - creatingNewLabel: 'Kreiranje novog {{label}}', - dark: 'Tamno', - dashboard: 'Kontrolni panel', - delete: 'Obriši', - deletedCountSuccessfully: 'Uspešno izbrisano {{count}} {{label}}.', - deletedSuccessfully: 'Uspešno izbrisano.', - deleting: 'Brisanje...', - descending: 'Opadajuće', - deselectAllRows: 'Deselektujte sve redove', - duplicate: 'Duplikat', - duplicateWithoutSaving: 'Ponovi bez čuvanja promena', - edit: 'Uredi', - editLabel: 'Uredi {{label}}', - editing: 'Uređivanje', - editingLabel_many: 'Uređivanje {{count}} {{label}}', - editingLabel_one: 'Uređivanje {{count}} {{label}}', - editingLabel_other: 'Uređivanje {{count}} {{label}}', - email: 'E-pošta', - emailAddress: 'Аdresa e-pošte', - enterAValue: 'Unesi vrednost', - error: 'Greška', - errors: 'Greške', - fallbackToDefaultLocale: 'Vraćanje na zadati jezik', - filter: 'Filter', - filterWhere: 'Filter {{label}} gde', - filters: 'Filteri', - globals: 'Globali', - language: 'Jezik', - lastModified: 'Zadnja promena', - leaveAnyway: 'Svejedno napusti', - leaveWithoutSaving: 'Napusti bez čuvanja', - light: 'Svetlo', - livePreview: 'Pregled', - loading: 'Učitavanje', - locale: 'Jezik', - locales: 'Prevodi', - menu: 'Meni', - moveDown: 'Pomeri dole', - moveUp: 'Pomeri gore', - newPassword: 'Nova lozinka', - noFiltersSet: 'Nema postavljenih filtera', - noLabel: '', - noOptions: 'Nema opcija', - noResults: - 'Nema pronađenih {{label}}. Moguće da {{label}} još uvek ne postoji ili nema rezultata u skladu sa postavljenim filterima.', - noValue: 'Bez vrednosti', - none: 'Nijedan', - notFound: 'Nije pronađeno', - nothingFound: 'Ništa nije pronađeno', - of: 'Od', - open: 'Otvori', - or: 'Ili', - order: 'Redosled', - pageNotFound: 'Stranica nije pronađena', - password: 'Lozinka', - payloadSettings: 'Payload postavke', - perPage: 'Po stranici: {{limit}}', - remove: 'Ukloni', - reset: 'Ponovo postavi', - row: 'Red', - rows: 'Redovi', - save: 'Sačuvaj', - saving: 'Čuvanje u toku...', - searchBy: 'Traži po {{label}}', - selectAll: 'Odaberite sve {{count}} {{label}}', - selectAllRows: 'Odaberite sve redove', - selectValue: 'Odaberi vrednost', - selectedCount: '{{count}} {{label}} odabrano', - showAllLabel: 'Prikaži sve {{label}}', - sorryNotFound: 'Nažalost, ne postoji ništa što odgovara vašem zahtevu.', - sort: 'Sortiraj', - sortByLabelDirection: 'Sortiraj prema {{label}} {{direction}}', - stayOnThisPage: 'Ostani na ovoj stranici', - submissionSuccessful: 'Uspešno slanje', - submit: 'Potvrdi', - successfullyCreated: '{{label}} uspešno kreirano.', - successfullyDuplicated: '{{label}} uspešno duplicirano.', - thisLanguage: 'Srpski (latinica)', - titleDeleted: '{{label}} "{{title}}" uspešno obrisano.', - unauthorized: 'Niste autorizovani', - unsavedChangesDuplicate: 'Imate nesačuvane promene. Da li želite nastaviti sa dupliciranjem?', - untitled: 'Bez naslova', - updatedAt: 'Ažurirano u', - updatedCountSuccessfully: 'Uspešno ažurirano {{count}} {{label}}.', - updatedSuccessfully: 'Uspešno ažurirano.', - updating: 'Ažuriranje', - uploading: 'Prenos', - user: 'Korisnik', - users: 'Korisnici', - value: 'Vrednost', - welcome: 'Dobrodošli', - }, - operators: { - contains: 'sadrži', - equals: 'jednako', - exists: 'postoji', - isGreaterThan: 'je veće od', - isGreaterThanOrEqualTo: 'je veće od ili jednako', - isIn: 'je u', - isLessThan: 'manje je od', - isLessThanOrEqualTo: 'manje je ili jednako', - isLike: 'je kao', - isNotEqualTo: 'nije jednako', - isNotIn: 'nije unutra', - near: 'blizu', - }, - upload: { - crop: 'Isecite sliku', - cropToolDescription: - 'Prevucite uglove izabranog područja, nacrtajte novo područje ili prilagodite vrednosti ispod.', - dragAndDrop: 'Prevucite i ispustite datoteku', - dragAndDropHere: 'ili povucite i ispustite datoteku ovde', - editImage: 'Uredi sliku', - fileName: 'Ime datoteke', - fileSize: 'Veličina datoteke', - focalPoint: 'Centralna tačka', - focalPointDescription: - 'Prevucite središnju tačku direktno na pregled ili prilagodite vrednosti ispod.', - height: 'Visina', - lessInfo: 'Manje informacija', - moreInfo: 'Više informacija', - previewSizes: 'Veličine pregleda', - selectCollectionToBrowse: 'Odaberite kolekciju za pregled', - selectFile: 'Odaberite datoteku', - setCropArea: 'Postavite područje za isečenu sliku', - setFocalPoint: 'Postavite centralnu tačku', - sizes: 'Veličine', - sizesFor: 'Veličine za {{label}}', - width: 'Širina', - }, - validation: { - emailAddress: 'Molimo Vas unesite validnu email adresu.', - enterNumber: 'Molimo Vas unesite validan broj.', - fieldHasNo: 'Ovo polje nema {{label}}', - greaterThanMax: '{{value}} prekoračuje maksimalan dozvoljeni {{label}} limit od {{max}}.', - invalidInput: 'Ovo polje sadrži nevalidan unos.', - invalidSelection: 'Ovo polje sadrži nevalidan odabir.', - invalidSelections: 'Ovo polje ima sledeće nevalidne odabire:', - lessThanMin: '{{value}} je ispod dozvoljenog minimuma za {{label}} (donji limit je {{min}}).', - limitReached: 'Dosegnut je limit, može se dodati samo {{max}} stavki.', - longerThanMin: 'Ova vrednost mora biti duža od minimalne dužine od {{minLength}} karaktera', - notValidDate: '"{{value}}" nije validan datum.', - required: 'Ovo polje je obavezno.', - requiresAtLeast: 'Ovo polje zahteva minimalno {{count}} {{label}}.', - requiresNoMoreThan: 'Ovo polje zahteva ne više od {{count}} {{label}}.', - requiresTwoNumbers: 'Ovo polje zahteva dva broja.', - shorterThanMax: 'Ova vrednost mora biti kraća od maksimalne dužine od {{maxLength}} karaktera', - trueOrFalse: 'Ovo polje može biti samo tačno ili netačno', - validUploadID: 'Ovo polje ne sadrži validan ID prenosa.', - }, - version: { - aboutToPublishSelection: 'Upravo ćete objaviti sve {{label}} u izboru. Da li ste sigurni?', - aboutToRestore: 'Vratićete {{label}} dokument u stanje u kojem je bio {{versionDate}}', - aboutToRestoreGlobal: 'Vratićete globalni {{label}} u stanje u kojem je bio {{versionDate}}.', - aboutToRevertToPublished: - 'Vratićete promene u dokumentu u objavljeno stanje. Da li ste sigurni?', - aboutToUnpublish: 'Poništićete objavu ovog dokumenta. Da li ste sigurni?', - aboutToUnpublishSelection: - 'Upravo ćete poništiti objavu svih {{label}} u odabiru. Da li ste sigurni?', - autosave: 'Automatsko čuvanje', - autosavedSuccessfully: 'Automatsko čuvanje uspešno.', - autosavedVersion: 'Verzija automatski sačuvanog dokumenta', - changed: 'Promenjeno', - compareVersion: 'Uporedi verziju sa:', - confirmPublish: 'Potvrdi objavu', - confirmRevertToSaved: 'Potvrdite vraćanje na sačuvano', - confirmUnpublish: 'Potvrdite poništavanje objave', - confirmVersionRestoration: 'Potvrdite vraćanje verzije', - currentDocumentStatus: 'Trenutni {{docStatus}} dokumenta', - draft: 'Nacrt', - draftSavedSuccessfully: 'Nacrt uspešno sačuvan.', - lastSavedAgo: 'Zadnji put sačuvano pre {{distance}', - noFurtherVersionsFound: 'Nisu pronađene naredne verzije', - noRowsFound: '{{label}} nije pronađeno', - preview: 'Pregled', - problemRestoringVersion: 'Nastao je problem pri vraćanju ove verzije', - publish: 'Objaviti', - publishChanges: 'Objavljivanje', - published: 'Objavljeno', - publishing: 'Objavljivanje', - restoreThisVersion: 'Vrati ovu verziju', - restoredSuccessfully: 'Uspešno vraćeno.', - restoring: 'Vraćanje...', - revertToPublished: 'Vrati na objavljeno', - reverting: 'Vraćanje...', - saveDraft: 'Sačuvaj nacrt', - selectLocales: 'Odaberite jezike', - selectVersionToCompare: 'Odaberite verziju za upoređivanje', - showLocales: 'Prikaži jezike:', - showingVersionsFor: 'Pokazujem verzije za:', - status: 'Status', - type: 'Tip', - unpublish: 'Poništi objavu', - unpublishing: 'Poništavanje objave...', - version: 'Verzija', - versionCount_many: '{{count}} pronađenih verzija', - versionCount_none: 'Nema pronađenih verzija', - versionCount_one: '{{count}} pronađena verzija', - versionCount_other: '{{count}} pronađenih verzija', - versionCreatedOn: '{{version}} kreiranih:', - versionID: 'ID verzije', - versions: 'Verzije', - viewingVersion: 'Pregled verzije za {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: 'Pregled verzije za globalni {{entityLabel}}', - viewingVersions: 'Pregled verzija za {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: 'Pregled verzije za globalni {{entityLabel}}', - }, -} diff --git a/packages/translations/src/all/rs.ts b/packages/translations/src/all/rs.ts deleted file mode 100644 index 65a2567e2a..0000000000 --- a/packages/translations/src/all/rs.ts +++ /dev/null @@ -1,386 +0,0 @@ -export default { - authentication: { - account: 'Налог', - accountOfCurrentUser: 'Налог тренутног корисника', - alreadyActivated: 'Већ активирано', - alreadyLoggedIn: 'Већ пријављен', - apiKey: 'АПИ кључ', - backToLogin: 'Назад на пријаву', - beginCreateFirstUser: 'На самом почетку креирај свог првог корисника', - changePassword: 'Промени лозинку', - checkYourEmailForPasswordReset: 'Проверите е-пошту и поруку са линком за промену лозинке.', - confirmGeneration: 'Потврди креирање', - confirmPassword: 'Потврди лозинку', - createFirstUser: 'Креирај првог корисника', - emailNotValid: 'Адреса е-поште није валидна', - emailSent: 'Порука е-поште прослеђена', - enableAPIKey: 'Омогући API кључ', - failedToUnlock: 'Неуспешно откључавање.', - forceUnlock: 'Принудно откључај', - forgotPassword: 'Заборављена лозинка', - forgotPasswordEmailInstructions: - 'Молимо Вас да унесете својy адресy е-поште. Примићете поруку са упутством за поновно постављање лозинке.', - forgotPasswordQuestion: 'Заборављена лозинка?', - generate: 'Генериши', - generateNewAPIKey: 'Генериши нови АПИ кључ', - generatingNewAPIKeyWillInvalidate: - 'Генерисање новог АПИ кључа ће <1>поништити претходни кључ. Да ли сте сигурни да желите наставити?', - lockUntil: 'Закључај док', - logBackIn: 'Поновна пријава', - logOut: 'Одјава', - loggedIn: 'За пријаву са другим корисничким налогом потребно је прво <0>одјавити се', - loggedInChangePassword: - 'Да бисте променили лозинку, отворите свој <0>налог и промените лозинку.', - loggedOutInactivity: 'Одјављени се због неактивности.', - loggedOutSuccessfully: 'Успешно сте одјављени', - login: 'Пријава', - loginAttempts: 'Покушаји пријаве', - loginUser: 'Пријава корисника', - loginWithAnotherUser: - 'За пријаву са другим корисничким налогом потребно је прво <0>одјавити се', - logout: 'Одјава', - logoutUser: 'Одјава корисника', - newAPIKeyGenerated: 'Нови АПИ кључ генерисан.', - newAccountCreated: - 'Нови налог је креиран. Приступите налогу кликом на {{serverURL}}. Молимо Вас кликните на следећи линк или залепите адресу која се налази испод у претраживач да бисте потврдили адресу е-поште: {{verificationURL}}
    Након што потврдите адресу е-поште можете се улоговати.', - newPassword: 'Нова лозинка', - resetPassword: 'Промена лозинке', - resetPasswordExpiration: 'Промена рока трајања лозинке', - resetPasswordToken: 'Промена лозинке токена', - resetYourPassword: 'Промени своју лозинку', - stayLoggedIn: 'Остани пријављен', - successfullyUnlocked: 'Успешно откључано', - unableToVerify: 'Није могуће потврдити', - verified: 'Потврђено', - verifiedSuccessfully: 'Успешно потврђено', - verify: 'Потврди', - verifyUser: 'Потврди корисника', - verifyYourEmail: 'Потврди своју адресу е-поште', - youAreInactive: - 'Неактивни сте већ неко време и ускоро ћете бити аутоматски одјављени због сигурности. Да ли желите остати пријављени?', - youAreReceivingResetPassword: - 'Примили сте поруку пошто сте Ви (или неко у ваше име) затражили промену лозинке налога. Молимо Вас кликните на линк или залепите адресу у свој претраживач да бисте завршили процес:', - youDidNotRequestPassword: - 'Ако нисте затражили промену лозинке игноришите ову поруку и лозинка ће остати непромењена.', - }, - error: { - accountAlreadyActivated: 'Овај налог је већ активиран.', - autosaving: 'Настао је проблем при аутоматском чувању овог документа.', - correctInvalidFields: 'Молимо исправите невалидна поља.', - deletingFile: 'Догодила се грешка при брисању датотеке.', - deletingTitle: - 'Догодила се грешка при брисању {{title}}. Проверите интернет конекцију и покушајте поново.', - emailOrPasswordIncorrect: 'Емаил или лозинка су неисправни.', - followingFieldsInvalid_one: 'Ово поље је невалидно:', - followingFieldsInvalid_other: 'Ова поља су невалидна:', - incorrectCollection: 'Невалидна колекција', - invalidFileType: 'Невалидан тип датотеке', - invalidFileTypeValue: 'Невалидан тип датотеке: {{value}}', - loadingDocument: 'Постоји проблем при учитавању документа чији је ИД {{id}}.', - missingEmail: 'Недостаје емаил.', - missingIDOfDocument: 'Недостаје ИД документа да би се ажурирао.', - missingIDOfVersion: 'Недостаје ИД верзије.', - missingRequiredData: 'Недостају обавезни подаци.', - noFilesUploaded: 'Ниједна датотека није учитана.', - noMatchedField: 'Нема подударајућих поља за "{{label}}"', - noUser: 'Нема корисника', - notAllowedToAccessPage: 'Немате дозволу за приступ овој страници.', - notAllowedToPerformAction: 'Немате дозволу за извршење ове радње.', - notFound: 'Тражени ресурс није пронађен.', - previewing: 'Постоји проблем при прегледу овог документа.', - problemUploadingFile: 'Постоји проблем при учитавању датотеке.', - tokenInvalidOrExpired: 'Токен је невалидан или је истекао.', - unPublishingDocument: 'Постоји проблем при поништавању објаве овог документа.', - unableToDeleteCount: 'Није могуће избрисати {{count}} од {{total}} {{label}}.', - unableToUpdateCount: 'Није могуће ажурирати {{count}} од {{total}} {{label}}.', - unauthorized: 'Нисте ауторизовани да бисте упутили овај захтев.', - unknown: 'Дошло је до непознате грешке.', - unspecific: 'Дошло је до грешке.', - userLocked: 'Овај корисник је закључан због превеликог броја неуспешних покушаја пријаве.', - valueMustBeUnique: 'Вредност мора бити јединствена.', - verificationTokenInvalid: 'Верификациони токен је невалидан.', - }, - fields: { - addLabel: 'Додај {{label}}', - addLink: 'Додај линк', - addNew: 'Додај нови', - addNewLabel: 'Додај нови {{label}}', - addRelationship: 'Додај релацију', - addUpload: 'Додај учитавање', - block: 'блокирање', - blockType: 'Врста блокирања', - blocks: 'блокирања', - chooseBetweenCustomTextOrDocument: - 'Изаберите између уноса прилагођеног текста адресе или линка на други документ.', - chooseDocumentToLink: 'Одаберите документ који желите линковати.', - chooseFromExisting: 'Одаберите из постојећих.', - chooseLabel: 'Одаберите {{label}}', - collapseAll: 'Скупи све', - customURL: 'Прилагођени линк', - editLabelData: 'Уреди {{label}} податке', - editLink: 'Измени линк', - editRelationship: 'Измени однос', - enterURL: 'Унеси адресу', - internalLink: 'Интерни линк', - itemsAndMore: '{{items}} и {{count}} више', - labelRelationship: '{{label}} веза', - latitude: 'Географска ширина', - linkType: 'Тип линка', - linkedTo: 'Повезани са <0>{{label}}', - longitude: 'Географска дужина', - newLabel: 'Ново {{label}}', - openInNewTab: 'Отвори у новој картици.', - passwordsDoNotMatch: 'Лозинке нису исте.', - relatedDocument: 'Повезани документ', - relationTo: 'Веза са', - removeRelationship: 'Уклони везу', - removeUpload: 'Уклони пренос', - saveChanges: 'Сачувај промене', - searchForBlock: 'Претражи блок', - selectExistingLabel: 'Одабери постојећу {{label}}', - selectFieldsToEdit: 'Одаберите поља за промену', - showAll: 'Покажи све', - swapRelationship: 'Замени везу', - swapUpload: 'Замени пренос', - textToDisplay: 'Текст за приказ', - toggleBlock: 'Пребаци блок', - uploadNewLabel: 'Учитај нови {{label}}', - }, - general: { - aboutToDelete: 'Избрисаћете {{label}} <1>{{title}}. Да ли сте сигурни?', - aboutToDeleteCount_many: 'Избрисаћете {{count}} {{label}}', - aboutToDeleteCount_one: 'Избрисаћете {{count}} {{label}}', - aboutToDeleteCount_other: 'Избрисаћете {{count}} {{label}}', - addBelow: 'Додај испод', - addFilter: 'Додај филтер', - adminTheme: 'Администраторска тема', - and: 'И', - applyChanges: 'Примени промене', - ascending: 'Узлазно', - automatic: 'Аутоматско', - backToDashboard: 'Назад на контролни панел', - cancel: 'Откажи', - changesNotSaved: 'Ваше промене нису сачуване. Ако изађете сада, изгубићете промене.', - close: 'Затвори', - collapse: 'Скупи', - collections: 'Колекције', - columnToSort: 'Колона за сортирање', - columns: 'Колоне', - confirm: 'Потврди', - confirmDeletion: 'Потврди брисање', - confirmDuplication: 'Потврди дупликацију', - copied: 'Копирано', - copy: 'Копирај', - create: 'Креирај', - createNew: 'Креирај ново', - createNewLabel: 'Креирај ново {{label}}', - created: 'Креирано', - createdAt: 'Креирано у', - creating: 'Креира се', - creatingNewLabel: 'Креирање новог {{label}}', - dark: 'Тамно', - dashboard: 'Контролни панел', - delete: 'Обриши', - deletedCountSuccessfully: 'Успешно избрисано {{count}} {{label}}.', - deletedSuccessfully: 'Успешно избрисано.', - deleting: 'Брисање...', - descending: 'Опадајуће', - deselectAllRows: 'Деселектујте све редове', - duplicate: 'Дупликат', - duplicateWithoutSaving: 'Понови без чувања промена', - edit: 'Уреди', - editLabel: 'Уреди {{label}}', - editing: 'Уређивање', - editingLabel_many: 'Уређивање {{count}} {{label}}', - editingLabel_one: 'Уређивање {{count}} {{label}}', - editingLabel_other: 'Уређивање {{count}} {{label}}', - email: 'Е-пошта', - emailAddress: 'Адреса е-поште', - enterAValue: 'Унеси вредност', - error: 'Грешка', - errors: 'Грешке', - fallbackToDefaultLocale: 'Враћање на задати језик', - filter: 'Филтер', - filterWhere: 'Филтер {{label}} где', - filters: 'Филтери', - globals: 'Глобали', - language: 'Језик', - lastModified: 'Задња промена', - leaveAnyway: 'Свеједно напусти', - leaveWithoutSaving: 'Напусти без чувања', - light: 'Светло', - livePreview: 'Преглед', - loading: 'Учитавање', - locale: 'Језик', - locales: 'Преводи', - menu: 'Мени', - moveDown: 'Помери доле', - moveUp: 'Помери горе', - newPassword: 'Нова лозинка', - noFiltersSet: 'Нема постављених филтера', - noLabel: '<Нема {{label}}>', - noOptions: 'Нема опција', - noResults: - 'Нема пронађених {{label}}. Могуће да {{label}} још увек не постоји или нема резултата у складу са постављеним филтерима.', - noValue: 'Без вредности', - none: 'Ниједан', - notFound: 'Није пронађено', - nothingFound: 'Ништа није пронађено', - of: 'Од', - open: 'Отвори', - or: 'Или', - order: 'Редослед', - pageNotFound: 'Страница није пронађена', - password: 'Лозинка', - payloadSettings: 'Payload поставке', - perPage: 'По страници: {{limit}}', - remove: 'Уклони', - reset: 'Поново постави', - row: 'Ред', - rows: 'Редови', - save: 'Сачувај', - saving: 'Чување у току...', - searchBy: 'Тражи по {{label}}', - selectAll: 'Одаберите све {{count}} {{label}}', - selectAllRows: 'Одаберите све редове', - selectValue: 'Одабери вредност', - selectedCount: '{{count}} {{label}} одабрано', - showAllLabel: 'Прикажи све {{label}}', - sorryNotFound: 'Нажалост, не постоји ништа што одговара вашем захтеву.', - sort: 'Сортирај', - sortByLabelDirection: 'Сортирај према {{label}} {{дирецтион}}', - stayOnThisPage: 'Остани на овој страници', - submissionSuccessful: 'Успешно слање', - submit: 'Потврди', - successfullyCreated: '{{label}} успешно креирано.', - successfullyDuplicated: '{{label}} успешно дуплицирано.', - thisLanguage: 'Српски (ћирилица)', - titleDeleted: '{{label}} "{{title}}" успешно обрисано.', - unauthorized: 'Нисте ауторизовани', - unsavedChangesDuplicate: 'Имате несачуване промене. Да ли желите наставити са дуплицирањем?', - untitled: 'Без наслова', - updatedAt: 'Ажурирано у', - updatedCountSuccessfully: 'Успешно ажурирано {{count}} {{label}}.', - updatedSuccessfully: 'Успешно ажурирано.', - updating: 'Ажурирање', - uploading: 'Пренос', - user: 'Корисник', - users: 'Корисници', - value: 'Вредност', - welcome: 'Добродошли', - }, - operators: { - contains: 'садржи', - equals: 'једнако', - exists: 'постоји', - isGreaterThan: 'је веће од', - isGreaterThanOrEqualTo: 'је веће од или једнако', - isIn: 'је у', - isLessThan: 'мање је од', - isLessThanOrEqualTo: 'мање је или једнако', - isLike: 'је као', - isNotEqualTo: 'није једнако', - isNotIn: 'није у', - near: 'близу', - }, - upload: { - crop: 'Исеците слику', - cropToolDescription: - 'Превуците углове изабраног подручја, нацртајте ново подручје или прилагодите вредности испод.', - dragAndDrop: 'Превуците и испустите датотеку', - dragAndDropHere: 'или превуците и испустите датотеку овде', - editImage: 'Уреди слику', - fileName: 'Име датотеке', - fileSize: 'Величина датотеке', - focalPoint: 'Централна тачка', - focalPointDescription: - 'Превуците средишњу тачку директно на преглед или прилагодите вредности испод.', - height: 'Висина', - lessInfo: 'Мање информација', - moreInfo: 'Више информација', - previewSizes: 'Величине прегледа', - selectCollectionToBrowse: 'Одаберите колекцију за преглед', - selectFile: 'Одаберите датотеку', - setCropArea: 'Поставите подручје за исечену слику', - setFocalPoint: 'Поставите централну тачку', - sizes: 'Величине', - sizesFor: 'Величине за {{label}}', - width: 'Ширина', - }, - validation: { - emailAddress: 'Молимо Вас унесите валидну емаил адресу.', - enterNumber: 'Молимо Вас унесите валидан број.', - fieldHasNo: 'Ово поље нема {{label}}', - greaterThanMax: '{{value}} прекорачује максималан дозвољени {{label}} лимит од {{max}}.', - invalidInput: 'Ово поље садржи невалидан унос.', - invalidSelection: 'Ово поље садржи невалидан одабир.', - invalidSelections: 'Ово поље има следеће невалидне одабире:', - lessThanMin: '{{value}} је испод дозвољеног минимума за {{label}} (доњи лимит је {{min}}).', - limitReached: 'Досегнут је лимит, може се додати само {{max}} ставки.', - longerThanMin: 'Ова вредност мора бити дужа од минималне дужине од {{минЛенгтх}} карактера', - notValidDate: '"{{value}}" није валидан датум.', - required: 'Ово поље је обавезно.', - requiresAtLeast: 'Ово поље захтева минимално {{count}} {{label}}.', - requiresNoMoreThan: 'Ово поље захтева не више од {{count}} {{label}}.', - requiresTwoNumbers: 'Ово поље захтева два броја.', - shorterThanMax: 'Ова вредност мора бити краћа од максималне дужине од {{maxLength}} карактера', - trueOrFalse: 'Ово поље може бити само тачно или нетачно', - validUploadID: 'Ово поље не садржи валидан ИД преноса.', - }, - version: { - aboutToPublishSelection: 'Управо ћете објавити све {{label}} у избору. Да ли сте сигурни?', - aboutToRestore: 'Вратићете {{label}} документ у стање у којем је био {{versionDate}}', - aboutToRestoreGlobal: 'Вратићете глобални {{label}} у стање у којем је био {{versionDate}}.', - aboutToRevertToPublished: 'Вратићете промене у документу у објављено стање. Да ли сте сигурни?', - aboutToUnpublish: 'Поништићете објаву овог документа. Да ли сте сигурни?', - aboutToUnpublishSelection: - 'Управо ћете поништити објаву свих {{label}} у одабиру. Да ли сте сигурни?', - autosave: 'Аутоматско чување', - autosavedSuccessfully: 'Аутоматско чување успешно.', - autosavedVersion: 'Верзија аутоматски сачуваног документа', - changed: 'Промењено', - compareVersion: 'Упореди верзију са:', - confirmPublish: 'Потврди објаву', - confirmRevertToSaved: 'Потврдите враћање на сачувано', - confirmUnpublish: 'Потврдите поништавање објаве', - confirmVersionRestoration: 'Потврдите враћање верзије', - currentDocumentStatus: 'Тренутни {{docStatus}} документа', - draft: 'Нацрт', - draftSavedSuccessfully: 'Нацрт успешно сачуван.', - lastSavedAgo: 'Задњи пут сачувано пре {{distance}', - noFurtherVersionsFound: 'Нису пронађене наредне верзије', - noRowsFound: '{{label}} није пронађено', - preview: 'Преглед', - problemRestoringVersion: 'Настао је проблем при враћању ове верзије', - publish: 'Објавити', - publishChanges: 'Објави промене', - published: 'Објављено', - publishing: 'Objavljivanje', - restoreThisVersion: 'Врати ову верзију', - restoredSuccessfully: 'Успешно враћено.', - restoring: 'Враћање...', - revertToPublished: 'Врати на објављено', - reverting: 'Враћање...', - saveDraft: 'Сачувај нацрт', - selectLocales: 'Одаберите језике', - selectVersionToCompare: 'Одаберите верзију за упоређивање', - showLocales: 'Прикажи језике:', - showingVersionsFor: 'Показујем верзије за:', - status: 'Статус', - type: 'Тип', - unpublish: 'Поништи објаву', - unpublishing: 'Поништавање објаве...', - version: 'Верзија', - versionCount_many: '{{count}} пронађених верзија', - versionCount_none: 'Нема пронађених верзија', - versionCount_one: '{{count}} пронађена верзија', - versionCount_other: '{{count}} пронађених верзија', - versionCreatedOn: '{{version}} креираних:', - versionID: 'Идентификатор верзије', - versions: 'Верзије', - viewingVersion: 'Преглед верзије за {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: 'Преглед верзије за глобални {{entityLabel}}', - viewingVersions: 'Преглед верзија за {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: 'Преглед верзије за глобални {{entityLabel}}', - }, -} diff --git a/packages/translations/src/all/ru.ts b/packages/translations/src/all/ru.ts deleted file mode 100644 index 8a90749b33..0000000000 --- a/packages/translations/src/all/ru.ts +++ /dev/null @@ -1,393 +0,0 @@ -export default { - authentication: { - account: 'Аккаунт', - accountOfCurrentUser: 'Аккаунт текущего пользователя', - alreadyActivated: 'Уже активирован', - alreadyLoggedIn: 'Уже вошли в систему', - apiKey: 'API ключ', - backToLogin: 'Вернуться к входу', - beginCreateFirstUser: 'Чтобы начать - создайте первого пользователя.', - changePassword: 'Сменить пароль', - checkYourEmailForPasswordReset: - 'На ваш email отправлена ссылка, с помощью которой можно будет сбросить пароль.', - confirmGeneration: 'Подтвердить генерацию', - confirmPassword: 'Подтверждение пароля', - createFirstUser: 'Создание первого пользователя', - emailNotValid: 'Указанный адрес электронной почты неверен', - emailSent: 'Email отправлен', - enableAPIKey: 'Активировать API ключ', - failedToUnlock: 'Не удалось разблокировать', - forceUnlock: 'Принудительная разблокировка', - forgotPassword: 'Забыли пароль', - forgotPasswordEmailInstructions: - 'Пожалуйста, введите ваш email. Вы получите письмо с инструкцией по восстановлению пароля.', - forgotPasswordQuestion: 'Забыли пароль?', - generate: 'Сгенерировать', - generateNewAPIKey: 'Сгенерировать новый API ключ', - generatingNewAPIKeyWillInvalidate: - 'Генерация нового API ключа приведёт к <1>недействительности предыдущего ключа. Вы уверены, что хотите продолжить?', - lockUntil: 'Заблокировать до', - logBackIn: 'Войти снова', - logOut: 'Выйти', - loggedIn: 'Чтобы войти в другую учетную запись, сначала <0>выйдите.', - loggedInChangePassword: - 'Чтобы изменить пароль, зайдите в свой <0>аккаунт и измените пароль там.', - loggedOutInactivity: 'Вы вышли из системы из-за неактивности.', - loggedOutSuccessfully: 'Вы успешно вышли из системы.', - login: 'Войти', - loginAttempts: 'Попытки входа', - loginUser: 'Вход пользователя в систему', - loginWithAnotherUser: - 'Чтобы войти в систему под другим пользователем, необходимо сначала <0>выйти.', - logout: 'Выйти', - logoutUser: 'Вход из системы', - newAPIKeyGenerated: 'Новый API ключ сгенерирован.', - newAccountCreated: - 'Новый аккаунт был создан для доступа к {{serverURL}} Пожалуйста, кликните по следующей ссылке или вставьте в адресную строку браузера чтобы подтвердить email: {{verificationURL}}
    После подтверждения вашего email, вы сможете успешно войти в систему.', - newPassword: 'Новый пароль', - resetPassword: 'Сброс пароля', - resetPasswordExpiration: 'Сброс пароля по истечении срока действия', - resetPasswordToken: 'Токен сброса пароля', - resetYourPassword: 'Сброс вашего пароля', - stayLoggedIn: 'Остаться в системе', - successfullyUnlocked: 'Успешно разблокирован', - unableToVerify: 'Невозможно подтвердить', - verified: 'Подтверждено', - verifiedSuccessfully: 'Успешно подтверждено', - verify: 'Подтвердить', - verifyUser: 'Подтвердить пользователя', - verifyYourEmail: 'Подтвердить ваш email', - youAreInactive: - 'Вы не были активны в течение некоторого времени и скоро автоматически выйдете из системы в целях вашей безопасности. Вы хотите остаться в системе?', - youAreReceivingResetPassword: - 'Вы получили это сообщение, потому что вы (или кто-то другой) запросили сброс пароля для вашей учетной записи. Пожалуйста, нажмите на следующую ссылку или вставьте ее в браузер, чтобы завершить процесс:', - youDidNotRequestPassword: - 'Если вы не запрашивали этого, пожалуйста, проигнорируйте это письмо, и ваш пароль останется неизменным.', - }, - error: { - accountAlreadyActivated: 'Этот аккаунт уже был активирован.', - autosaving: 'При автосохранении этого документа возникла проблема.', - correctInvalidFields: 'Пожалуйста, исправьте неправильные поля.', - deletingFile: 'Произошла ошибка при удалении файла.', - deletingTitle: - 'При удалении {{title}} произошла ошибка. Пожалуйста, проверьте соединение и повторите попытку.', - emailOrPasswordIncorrect: 'Указанный email или пароль неверен.', - followingFieldsInvalid_one: 'Следующее поле недействительно:', - followingFieldsInvalid_other: 'Следующие поля недействительны:', - incorrectCollection: 'Неправильная Коллекция', - invalidFileType: 'Недопустимый тип файла', - invalidFileTypeValue: 'Недопустимый тип файла: {{value}}', - loadingDocument: 'Возникла проблема при загрузке документа с ID {{id}}.', - missingEmail: 'Отсутствует email.', - missingIDOfDocument: 'Отсутствующий ID документа для обновления.', - missingIDOfVersion: 'Отсутствует ID версии.', - missingRequiredData: 'Отсутствуют необходимые данные.', - noFilesUploaded: 'Не было загружено ни одного файла.', - noMatchedField: 'Не найдено подходящего поля для "{{label}}"', - noUser: 'Нет Пользователя', - notAllowedToAccessPage: 'Вы не имеете права доступа к этой странице.', - notAllowedToPerformAction: 'У вас нет права на выполнение этого действия.', - notFound: 'Запрашиваемый ресурс не найден.', - previewing: 'При предварительном просмотре этого документа возникла проблема.', - problemUploadingFile: 'Возникла проблема при загрузке файла.', - tokenInvalidOrExpired: 'Токен либо недействителен, либо срок его действия истек.', - unPublishingDocument: 'При отмене публикации этого документа возникла проблема.', - unableToDeleteCount: 'Не удалось удалить {{count}} из {{total}} {{label}}.', - unableToUpdateCount: 'Не удалось обновить {{count}} из {{total}} {{label}}.', - unauthorized: 'Нет доступа, вы должны войти, чтобы сделать этот запрос.', - unknown: 'Произошла неизвестная ошибка.', - unspecific: 'Произошла ошибка.', - userLocked: - 'Этот пользователь заблокирован из-за слишком большого количества неудачных попыток входа.', - valueMustBeUnique: 'Значение должно быть уникальным', - verificationTokenInvalid: 'Проверочный токен недействителен.', - }, - fields: { - addLabel: 'Добавить {{label}}', - addLink: 'Добавить ссылку', - addNew: 'Добавить новый', - addNewLabel: 'Добавить {{label}}', - addRelationship: 'Добавить Отношения', - addUpload: 'Добавить загрузку', - block: 'Блок', - blockType: 'Тип Блока', - blocks: 'Блоки', - chooseBetweenCustomTextOrDocument: - 'Выберите между вводом пользовательского текстового URL и ссылкой на другой документ.', - chooseDocumentToLink: 'Выберите документ для ссылки', - chooseFromExisting: 'Выбрать из существующих', - chooseLabel: 'Выбрать {{label}}', - collapseAll: 'Свернуть все', - customURL: 'Пользовательский URL', - editLabelData: 'Редактировать данные {{label}}', - editLink: 'Редактировать ссылку', - editRelationship: 'Редактировать Отношения', - enterURL: 'Введите URL', - internalLink: 'Внутренняя ссылка', - itemsAndMore: '{{items}} и ещё {{count}}', - labelRelationship: '{{label}} Отношения', - latitude: 'Широта', - linkType: 'Тип ссылки', - linkedTo: 'Связано с <0>{{label}}', - longitude: 'Долгота', - newLabel: 'Новый {{label}}', - openInNewTab: 'Открывать в новой вкладке', - passwordsDoNotMatch: 'Пароли не совпадают.', - relatedDocument: 'Связанный документ', - relationTo: 'Отношение к', - removeRelationship: 'Удалить связь', - removeUpload: 'Удалить загруженное', - saveChanges: 'Сохранить изменения', - searchForBlock: 'Найти Блок', - selectExistingLabel: 'Выберите существующий {{label}}', - selectFieldsToEdit: 'Выберите поля для редактирования', - showAll: 'Показать все', - swapRelationship: 'Поменять отношения', - swapUpload: 'Заменить загруженное', - textToDisplay: 'Текст для отображения', - toggleBlock: 'Переключить Блок', - uploadNewLabel: 'Загрузить новый {{label}}', - }, - general: { - aboutToDelete: 'Вы собираетесь удалить {{label}} <1>{{title}}. Вы уверены?', - aboutToDeleteCount_many: 'Вы собираетесь удалить {{count}} {{label}}', - aboutToDeleteCount_one: 'Вы собираетесь удалить {{count}} {{label}}', - aboutToDeleteCount_other: 'Вы собираетесь удалить {{count}} {{label}}', - addBelow: 'Добавить ниже', - addFilter: 'Добавить фильтр', - adminTheme: 'Тема Панели', - and: 'А также', - applyChanges: 'Применить изменения', - ascending: 'Восходящий', - automatic: 'Автоматически', - backToDashboard: 'Назад к Панели', - cancel: 'Отмена', - changesNotSaved: - 'Ваши изменения не были сохранены. Если вы сейчас уйдете, то потеряете свои изменения.', - close: 'Закрыть', - collapse: 'Свернуть', - collections: 'Коллекции', - columnToSort: 'Колонка для сортировки', - columns: 'Колонки', - confirm: 'Подтвердить', - confirmDeletion: 'Подтвердить удаление', - confirmDuplication: 'Подтвердить копирование', - copied: 'Скопировано', - copy: 'Скопировать', - create: 'Создать', - createNew: 'Создать', - createNewLabel: 'Создать новый {{label}}', - created: 'Создано', - createdAt: 'Дата создания', - creating: 'Создание', - creatingNewLabel: 'Создание нового {{label}}', - dark: 'Тёмная', - dashboard: 'Панель', - delete: 'Удалить', - deletedCountSuccessfully: 'Удалено {{count}} {{label}} успешно.', - deletedSuccessfully: 'Удален успешно.', - deleting: 'Удаление...', - descending: 'Уменьшение', - deselectAllRows: 'Снять выделение со всех строк', - duplicate: 'Дублировать', - duplicateWithoutSaving: 'Дублирование без сохранения изменений', - edit: 'Редактировать', - editLabel: 'Редактировать {{label}}', - editing: 'Редактирование', - editingLabel_many: 'Редактирование {{count}} {{label}}', - editingLabel_one: 'Редактирование {{count}} {{label}}', - editingLabel_other: 'Редактирование {{count}} {{label}}', - email: 'Email', - emailAddress: 'Email', - enterAValue: 'Введите значение', - error: 'Ошибка', - errors: 'Ошибки', - fallbackToDefaultLocale: 'Возврат к локали по умолчанию', - filter: 'Фильтр', - filterWhere: 'Где фильтровать', - filters: 'Фильтры', - globals: 'Глобальные', - language: 'Язык', - lastModified: 'Последнее изменение', - leaveAnyway: 'Все равно уйти', - leaveWithoutSaving: 'Выход без сохранения', - light: 'Светлая', - livePreview: 'Предпросмотр', - loading: 'Загрузка', - locale: 'Локаль', - locales: 'Локали', - menu: 'Меню', - moveDown: 'Сдвинуть вниз', - moveUp: 'Сдвинуть вверх', - newPassword: 'Новый пароль', - noFiltersSet: 'Фильтры не установлены', - noLabel: 'Без метки', - noOptions: 'Нет вариантов', - noResults: - 'Не найдено ни одной {{label}}. Либо {{label}} еще не существует, либо ни одна из них не соответствует фильтрам, которые вы указали выше.', - noValue: 'Нет значения', - none: 'Никто', - notFound: 'Не найдено', - nothingFound: 'Ничего не найдено', - of: 'из', - open: 'Открыть', - or: 'Или же', - order: 'Порядок', - pageNotFound: 'Страница не найдена', - password: 'Пароль', - payloadSettings: 'Настройки Payload', - perPage: 'На странице: {{limit}}', - remove: 'Удалить', - reset: 'Сброс', - row: 'Строка', - rows: 'Строки', - save: 'Сохранить', - saving: 'Сохранение...', - searchBy: 'Искать по', - selectAll: 'Выбрать все {{count}} {{label}}', - selectAllRows: 'Выбрать все строки', - selectValue: 'Выбрать значение', - selectedCount: '{{count}} {{label}} выбрано', - showAllLabel: 'Показать все {{label}}', - sorryNotFound: 'К сожалению, ничего подходящего под ваш запрос нет.', - sort: 'Сортировать', - sortByLabelDirection: 'Сортировать по {{label}} {{direction}}', - stayOnThisPage: 'Остаться на этой странице', - submissionSuccessful: 'Успешно отправлено.', - submit: 'Отправить', - successfullyCreated: '{{label}} успешно создан.', - successfullyDuplicated: '{{label}} успешно продублирован.', - thisLanguage: 'Русский', - titleDeleted: '{{label}} {{title}} успешно удалено.', - unauthorized: 'Нет доступа', - unsavedChangesDuplicate: - 'У вас есть несохраненные изменения. Вы хотите продолжить дублирование?', - untitled: 'Без названия', - updatedAt: 'Дата правки', - updatedCountSuccessfully: 'Обновлено {{count}} {{label}} успешно.', - updatedSuccessfully: 'Успешно Обновлено.', - updating: 'Обновление', - uploading: 'Загрузка', - user: 'пользователь', - users: 'пользователи', - value: 'Значение', - welcome: 'Добро пожаловать', - }, - operators: { - contains: 'содержит', - equals: 'равно', - exists: 'существует', - isGreaterThan: 'больше чем', - isGreaterThanOrEqualTo: 'больше или равно', - isIn: 'находится', - isLessThan: 'меньше чем', - isLessThanOrEqualTo: 'меньше или равно', - isLike: 'похоже', - isNotEqualTo: 'не равно', - isNotIn: 'нет в', - near: 'рядом', - }, - upload: { - crop: 'Обрезать', - cropToolDescription: - 'Перетащите углы выбранной области, нарисуйте новую область или отрегулируйте значения ниже.', - dragAndDrop: 'Перетащите файл', - dragAndDropHere: 'или перетащите файл сюда', - editImage: 'Редактировать изображение', - fileName: 'Имя файла', - fileSize: 'Размер файла', - focalPoint: 'Центральная точка', - focalPointDescription: - 'Перетащите фокусное расстояние прямо на предварительный просмотр или отрегулируйте значения ниже.', - height: 'Высота', - lessInfo: 'Меньше информации', - moreInfo: 'Больше информации', - previewSizes: 'Предварительный просмотр размеров', - selectCollectionToBrowse: 'Выберите Коллекцию для просмотра', - selectFile: 'Выберите файл', - setCropArea: 'Установите область обрезки', - setFocalPoint: 'Установить фокусное расстояние', - sizes: 'Размеры', - sizesFor: 'Размеры для {{label}}', - width: 'Ширина', - }, - validation: { - emailAddress: 'Пожалуйста, введите корректный адрес email.', - enterNumber: 'Пожалуйста, введите корректный номер.', - fieldHasNo: 'У этого поля нет {{label}}', - greaterThanMax: '{{value}} больше максимально допустимого значения {{label}} {{max}}.', - invalidInput: 'Это поле имеет недопустимое значение.', - invalidSelection: 'В этом поле выбран недопустимый вариант.', - invalidSelections: "'Это поле содержит следующие неправильные варианты:'", - lessThanMin: '{{value}} меньше минимально допустимого значения {{label}} {{min}}.', - limitReached: 'Достигнут лимит, можно добавить только {{max}} элементов.', - longerThanMin: 'Это значение должно быть больше минимальной длины символов: {{minLength}}.', - notValidDate: '"{{value}}" это не действительная дата.', - required: 'Это обязательное поле.', - requiresAtLeast: 'Это поле требует не менее {{count}} {{label}}', - requiresNoMoreThan: 'Это поле требует не более {{count}} {{label}}', - requiresTwoNumbers: 'В этом поле требуется два числа.', - shorterThanMax: 'Это значение должно быть короче максимальной длины символов {{maxLength}}.', - trueOrFalse: 'Это поле может быть равно только true или false.', - validUploadID: "'Это поле не является действительным ID загрузки.'", - }, - version: { - aboutToPublishSelection: 'Вы собираетесь опубликовать все {{label}} в выборе. Вы уверены?', - aboutToRestore: - 'Вы собираетесь восстановить этот документ {{label}} в состояние, в котором он находился {{versionDate}}.', - aboutToRestoreGlobal: - 'Вы собираетесь восстановить глобальную запись {{label}} в состояние, в котором она находилась {{versionDate}}.', - aboutToRevertToPublished: - 'Вы собираетесь вернуть изменения этого документа к его опубликованному состоянию. Вы уверены?', - aboutToUnpublish: 'Вы собираетесь отменить публикацию этого документа. Вы уверены?', - aboutToUnpublishSelection: - 'Вы собираетесь отменить публикацию всех выбранных {{label}}. Вы уверены?', - autosave: 'Автосохранение', - autosavedSuccessfully: 'Автосохранение успешно.', - autosavedVersion: 'Автоматически сохраненная версия', - changed: 'Изменено', - compareVersion: 'Сравнить версию с:', - confirmPublish: 'Подтвердить публикацию', - confirmRevertToSaved: 'Подтвердить возврат к сохраненному', - confirmUnpublish: 'Подтвердить отмену публикации', - confirmVersionRestoration: 'Подтвердить восстановление версии', - currentDocumentStatus: 'Текущий статус {{docStatus}} документа', - draft: 'Черновик', - draftSavedSuccessfully: 'Черновик успешно сохранен.', - lastSavedAgo: 'Последний раз сохранено {{distance}} назад', - noFurtherVersionsFound: 'Другие версии не найдены', - noRowsFound: 'Не найдено {{label}}', - preview: 'Предпросмотр', - problemRestoringVersion: 'Возникла проблема с восстановлением этой версии', - publish: 'Публиковать', - publishChanges: 'Опубликовать изменения', - published: 'Опубликовано', - publishing: 'Публикация', - restoreThisVersion: 'Восстановить эту версию', - restoredSuccessfully: 'Восстановлен успешно.', - restoring: 'Восстановление...', - revertToPublished: 'Вернуться к опубликованному', - reverting: 'Возврат...', - saveDraft: 'Сохранить черновик', - selectLocales: 'Выберите локали для отображения', - selectVersionToCompare: 'Выбрать версию для сравнения', - showLocales: 'Показать локали:', - showingVersionsFor: 'Показаны версии для:', - status: 'Статус', - type: 'Тип', - unpublish: 'Отменить публикацию', - unpublishing: 'Отмена публикации...', - version: 'Версия', - versionCount_many: '{{count}} версий найдено', - versionCount_none: 'Версий не найдено', - versionCount_one: '{{count}} версия найдена', - versionCount_other: 'Найдено {{count}} версий', - versionCreatedOn: '{{version}} создана:', - versionID: 'ID версии', - versions: 'Версии', - viewingVersion: 'Просмотр версии для {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: '`Просмотр версии для глобальной Коллекции {{entityLabel}}', - viewingVersions: 'Просмотр версий для {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: '`Просмотр версии для глобальной Коллекции {{entityLabel}}', - }, -} diff --git a/packages/translations/src/all/sv.ts b/packages/translations/src/all/sv.ts deleted file mode 100644 index 7b57d832af..0000000000 --- a/packages/translations/src/all/sv.ts +++ /dev/null @@ -1,390 +0,0 @@ -export default { - authentication: { - account: 'Konto', - accountOfCurrentUser: 'Konto för nuvarande användare', - alreadyActivated: 'Redan aktiverad', - alreadyLoggedIn: 'Redan inloggad', - apiKey: 'API Nyckel', - backToLogin: 'Tillbaka till inloggningen', - beginCreateFirstUser: 'För att börja, skapa din första användare.', - changePassword: 'Byt Lösenord', - checkYourEmailForPasswordReset: - 'Kontrollera din e-post efter en länk som gör att du säkert kan återställa ditt lösenord.', - confirmGeneration: 'Bekräfta Generering', - confirmPassword: 'Bekräfta Lösenord', - createFirstUser: 'Skapa första användaren', - emailNotValid: 'Angiven e-postadress är inte giltig', - emailSent: 'E-posten Skickad', - enableAPIKey: 'Aktivera API nyckel', - failedToUnlock: 'Det gick inte att låsa upp', - forceUnlock: 'Tvinga Upplåsning', - forgotPassword: 'Glömt Lösenord', - forgotPasswordEmailInstructions: - 'Vänligen ange din e-postadress nedan. Du kommer att få ett e-postmeddelande med instruktioner om hur du återställer ditt lösenord.', - forgotPasswordQuestion: 'Glömt lösenordet?', - generate: 'Generera', - generateNewAPIKey: 'Generera ny API nyckel', - generatingNewAPIKeyWillInvalidate: - 'Att generera en ny API nyckel kommer <1>ogiltigförklara föregående nyckel. Är du säker på att du vill fortsätta?', - lockUntil: 'Lås Tills', - logBackIn: 'Logga in igen', - logOut: 'Logga ut', - loggedIn: 'För att logga in med en annan användare, bör du <0>logga ut först.', - loggedInChangePassword: - 'För att ändra ditt lösenord, gå till ditt <0>konto och redigera ditt lösenord där.', - loggedOutInactivity: 'Du har blivit utloggad på grund av inaktivitet.', - loggedOutSuccessfully: 'Du har loggat ut framgångsrikt.', - login: 'Logga in', - loginAttempts: 'Inloggningsförsök', - loginUser: 'Logga in användare', - loginWithAnotherUser: 'För att logga in med en annan användare, bör du <0>logga ut först.', - logout: 'Logga ut', - logoutUser: 'Logga ut användare', - newAPIKeyGenerated: 'Ny API Nyckel Genererad.', - newAccountCreated: - 'Ett nytt konto har precis skapats som du kan komma åt {{serverURL}} Klicka på följande länk eller klistra in webbadressen nedan i din webbläsare för att verifiera din e-post: {{verificationURL}}
    Efter att ha verifierat din e-post kommer du att kunna logga in framgångsrikt.', - newPassword: 'Nytt Lösenord', - resetPassword: 'Återställ Lösenord', - resetPasswordExpiration: 'Återställ Lösenordsutgång', - resetPasswordToken: 'Återställ Lösenord Token', - resetYourPassword: 'Återställ Ditt Lösenord', - stayLoggedIn: 'Stanna inloggad', - successfullyUnlocked: 'Låst upp framgångsrikt', - unableToVerify: 'Det går inte att Verifiera', - verified: 'Verifierad', - verifiedSuccessfully: 'Framgångsrikt Verifierad', - verify: 'Verifiera', - verifyUser: 'Verifiera Användare', - verifyYourEmail: 'Verifiera din epost', - youAreInactive: - 'Du har inte varit aktiv på ett tag och kommer inom kort att automatiskt loggas ut för din egen säkerhet. Vill du forsätta att vara inloggad?', - youAreReceivingResetPassword: - 'Du får detta för att du (eller någon annan) har begärt återställning av lösenordet för ditt konto. Klicka på följande länk eller klistra in den i din webbläsare för att slutföra processen:', - youDidNotRequestPassword: - 'Om du inte begärde detta, ignorera detta e-postmeddelande och ditt lösenord kommer att förbli oförändrat.', - }, - error: { - accountAlreadyActivated: 'Detta konto har redan aktiverats.', - autosaving: 'Det uppstod ett problem när det här dokumentet skulle sparas automatiskt.', - correctInvalidFields: 'Vänligen korrigera ogiltiga fält.', - deletingFile: 'Det gick inte att ta bort filen.', - deletingTitle: - 'Det uppstod ett fel vid borttagningen av {{title}}. Vänligen kontrollera din anslutning och försök igen.', - emailOrPasswordIncorrect: 'E-postadressen eller lösenordet som angivits är felaktigt.', - followingFieldsInvalid_one: 'Följande fält är ogiltigt:', - followingFieldsInvalid_other: 'Följande fält är ogiltiga:', - incorrectCollection: 'Felaktig Samling', - invalidFileType: 'Ogiltig filtyp', - invalidFileTypeValue: 'Ogiltig filtyp: {{value}}', - loadingDocument: 'Det gick inte att läsa in dokumentet med ID {{id}}.', - missingEmail: 'E-postadress saknas.', - missingIDOfDocument: 'Saknar ID för dokumentet som ska uppdateras.', - missingIDOfVersion: 'ID för versionen saknas.', - missingRequiredData: 'Obligatorisk data saknas.', - noFilesUploaded: 'Inga filer laddades upp.', - noMatchedField: 'Inget matchande fält hittades för "{{label}}"', - noUser: 'Ingen Användare', - notAllowedToAccessPage: 'Du får inte komma åt den här sidan.', - notAllowedToPerformAction: 'Du får inte utföra denna åtgärd.', - notFound: 'Den begärda resursen hittades inte.', - previewing: 'Det uppstod ett problem när det här dokumentet skulle förhandsgranskas.', - problemUploadingFile: 'Det uppstod ett problem när filen laddades upp.', - tokenInvalidOrExpired: 'Token är antingen ogiltig eller har löpt ut.', - unPublishingDocument: 'Det uppstod ett problem när det här dokumentet skulle avpubliceras.', - unableToDeleteCount: 'Det gick inte att ta bort {{count}} av {{total}} {{label}}.', - unableToUpdateCount: 'Det gick inte att uppdatera {{count}} av {{total}} {{label}}.', - unauthorized: 'Obehörig, du måste vara inloggad för att göra denna begäran.', - unknown: 'Ett okänt fel har uppstått.', - unspecific: 'Ett fel har uppstått.', - userLocked: 'Den här användaren är låst på grund av för många misslyckade inloggningsförsök.', - valueMustBeUnique: 'Värdet måste vara unikt', - verificationTokenInvalid: 'Verifieringstoken är ogiltig.', - }, - fields: { - addLabel: 'Lägg till {{label}}', - addLink: 'Lägg till Länk', - addNew: 'Lägg till ny', - addNewLabel: 'Lägg till ny {{label}}', - addRelationship: 'Lägg till Relation', - addUpload: 'Lägg till Uppladdning', - block: 'block', - blockType: 'Block Typ', - blocks: 'block', - chooseBetweenCustomTextOrDocument: - 'Välj mellan att ange en anpassad text-URL eller länka till ett annat dokument.', - chooseDocumentToLink: 'Välj ett dokument att länka till', - chooseFromExisting: 'Välj bland befintliga', - chooseLabel: 'Välj {{label}}', - collapseAll: 'kollapsa Alla', - customURL: 'Anpassad URL', - editLabelData: 'Redigera {{label}} data', - editLink: 'Redigera Länk', - editRelationship: 'Redigera Relation', - enterURL: 'Ange en URL', - internalLink: 'Intern länk', - itemsAndMore: '{{items}} och {{count}} mer', - labelRelationship: '{{label}} Relation', - latitude: 'Latitud', - linkType: 'Länktyp', - linkedTo: 'Länkad till <0>{{label}}', - longitude: 'Longitud', - newLabel: 'Ny {{label}}', - openInNewTab: 'Öppna i ny flik', - passwordsDoNotMatch: 'Lösenorden matchar inte.', - relatedDocument: 'Relaterat Dokument', - relationTo: 'Relation till', - removeRelationship: 'Ta Bort Relation', - removeUpload: 'Ta Bort Uppladdning', - saveChanges: 'Spara ändringar', - searchForBlock: 'Sök efter ett block', - selectExistingLabel: 'Välj befintlig {{label}}', - selectFieldsToEdit: 'Välj fält att redigera', - showAll: 'Visa Alla', - swapRelationship: 'Byt Förhållande', - swapUpload: 'Byt Uppladdning', - textToDisplay: 'Text att visa', - toggleBlock: 'Växla block', - uploadNewLabel: 'Ladda upp ny {{label}}', - }, - general: { - aboutToDelete: 'Du är på väg att ta bort {{label}} <1>{{title}}. Är du säker?', - aboutToDeleteCount_many: 'Du är på väg att ta bort {{count}} {{label}}', - aboutToDeleteCount_one: 'Du är på väg att ta bort {{count}} {{label}}', - aboutToDeleteCount_other: 'Du är på väg att ta bort {{count}} {{label}}', - addBelow: 'Lägg Till Nedanför', - addFilter: 'Lägg Till Filter', - adminTheme: 'Admin Tema', - and: 'Och', - applyChanges: 'Verkställ ändringar', - ascending: 'Stigande', - automatic: 'Automatisk', - backToDashboard: 'Tillbaka till Manöverpanelen', - cancel: 'Avbryt', - changesNotSaved: - 'Dina ändringar har inte sparats. Om du lämnar nu kommer du att förlora dina ändringar.', - close: 'Stänga', - collapse: 'Kollapsa', - collections: 'Samlingar', - columnToSort: 'Kolumn att Sortera', - columns: 'Kolumner', - confirm: 'Bekräfta', - confirmDeletion: 'Bekräfta radering', - confirmDuplication: 'Bekräfta dubblering', - copied: 'Kopierad', - copy: 'Kopiera', - create: 'Skapa', - createNew: 'Skapa Ny', - createNewLabel: 'Skapa ny {{label}}', - created: 'Skapad', - createdAt: 'Skapad Vid', - creating: 'Skapar', - creatingNewLabel: 'Skapar ny {{label}}', - dark: 'Mörk', - dashboard: 'Manöverpanel', - delete: 'Ta bort', - deletedCountSuccessfully: 'Raderade {{count}} {{label}} framgångsrikt.', - deletedSuccessfully: 'Togs bort framgångsrikt.', - deleting: 'Tar bort...', - descending: 'Fallande', - deselectAllRows: 'Avmarkera alla rader', - duplicate: 'Duplicera', - duplicateWithoutSaving: 'Duplicera utan att spara ändringar', - edit: 'Redigera', - editLabel: 'Redigera {{label}}', - editing: 'Redigerar', - editingLabel_many: 'Redigerar {{count}} {{label}}', - editingLabel_one: 'Redigerar {{count}} {{label}}', - editingLabel_other: 'Redigerar {{count}} {{label}}', - email: 'E-post', - emailAddress: 'E-postadress', - enterAValue: 'Ange ett värde', - error: 'Fel', - errors: 'Fel', - fallbackToDefaultLocale: 'Återgång till standardlokalspråk', - filter: 'Filter', - filterWhere: 'Filtrera {{label}} där', - filters: 'Filter', - globals: 'Globala', - language: 'Språk', - lastModified: 'Senast Ändrad', - leaveAnyway: 'Lämna ändå', - leaveWithoutSaving: 'Lämna utan att spara', - light: 'Ljus', - livePreview: 'Förhandsvisa', - loading: 'Läser in', - locale: 'Lokal', - locales: 'Språk', - menu: 'Meny', - moveDown: 'Flytta Ner', - moveUp: 'Flytta Upp', - newPassword: 'Nytt Lösenord', - noFiltersSet: 'Inga filter inställda', - noLabel: '', - noOptions: 'Inga alternativ', - noResults: - 'Inga {{label}} hittades. Antingen finns inga {{label}} ännu eller matchar ingen filtren du har angett ovan.', - noValue: 'Inget värde', - none: 'Ingen', - notFound: 'Hittades inte', - nothingFound: 'Inget hittades', - of: 'av', - open: 'Öppna', - or: 'Eller', - order: 'Ordning', - pageNotFound: 'Sidan hittas inte', - password: 'Lösenord', - payloadSettings: 'Payload Inställningar', - perPage: 'Per Sida: {{limit}}', - remove: 'Ta bort', - reset: 'Återställ', - row: 'Rad', - rows: 'Rader', - save: 'Spara', - saving: 'Sparar...', - searchBy: 'Sök efter {{label}}', - selectAll: 'Välj alla {{count}} {{label}}', - selectAllRows: 'Välj alla rader', - selectValue: 'Välj ett värde', - selectedCount: '{{count}} {{label}} har valts', - showAllLabel: 'Visa alla {{label}}', - sorryNotFound: 'Tyvärr–det finns inget som motsvarar din begäran.', - sort: 'Sortera', - sortByLabelDirection: 'Sortera efter {{label}} {{direction}}', - stayOnThisPage: 'Stanna på denna sida', - submissionSuccessful: 'Inlämningen Lyckades.', - submit: 'Lämna in', - successfullyCreated: '{{label}} skapades framgångsrikt.', - successfullyDuplicated: '{{label}} duplicerades framgångsrikt.', - thisLanguage: 'Svenska', - titleDeleted: '{{label}} "{{title}}" togs bort framgångsrikt.', - unauthorized: 'Obehörig', - unsavedChangesDuplicate: 'Du har osparade ändringar. Vill du fortsätta att duplicera?', - untitled: 'Namnlös', - updatedAt: 'Uppdaterades Vid', - updatedCountSuccessfully: 'Uppdaterade {{count}} {{label}} framgångsrikt.', - updatedSuccessfully: 'Uppdaterades framgångsrikt.', - updating: 'Uppdatering', - uploading: 'Uppladdning', - user: 'Användare', - users: 'Användare', - value: 'Värde', - welcome: 'Välkommen', - }, - operators: { - contains: 'innehåller', - equals: 'likar med', - exists: 'finns', - isGreaterThan: 'är större än', - isGreaterThanOrEqualTo: 'är större än eller lika med', - isIn: 'är med', - isLessThan: 'är mindre än', - isLessThanOrEqualTo: 'är mindre än eller lika med', - isLike: 'är som', - isNotEqualTo: 'är inte lika med', - isNotIn: 'är inte med', - near: 'nära', - }, - upload: { - crop: 'Skörd', - cropToolDescription: - 'Dra i hörnen på det valda området, rita ett nytt område eller justera värdena nedan.', - dragAndDrop: 'Dra och släpp en fil', - dragAndDropHere: 'eller dra och släpp en fil här', - editImage: 'Redigera bild', - fileName: 'Filnamn', - fileSize: 'Filstorlek', - focalPoint: 'Fokuspunkt', - focalPointDescription: - 'Dra fokuspunkten direkt på förhandsgranskningen eller justera värdena nedan.', - height: 'Höjd', - lessInfo: 'Mindre info', - moreInfo: 'Mer info', - previewSizes: 'Förhandsgranska Storlekar', - selectCollectionToBrowse: 'Välj en Samling att Bläddra i', - selectFile: 'Välj en fil', - setCropArea: 'Ange skärpområde', - setFocalPoint: 'Ställ in fokuspunkt', - sizes: 'Storlekar', - sizesFor: 'Storlekar för {{label}}', - width: 'Bredd', - }, - validation: { - emailAddress: 'Vänligen ange en giltig e-postadress.', - enterNumber: 'Vänligen skriv in ett giltigt nummer.', - fieldHasNo: 'Detta fält har ingen {{label}}', - greaterThanMax: '{{value}} är större än den maximalt tillåtna {{label}} av {{max}}.', - invalidInput: 'Det här fältet har en ogiltig inmatning.', - invalidSelection: 'Det här fältet har ett ogiltigt urval.', - invalidSelections: 'Det här fältet har följande ogiltiga val:', - lessThanMin: '{{value}} är mindre än den minst tillåtna {{label}} av {{min}}.', - limitReached: 'Gränsen nådd, endast {{max}} objekt kan läggas till.', - longerThanMin: 'Detta värde måste vara längre än minimilängden på {{minLength}} tecken.', - notValidDate: '"{{value}}" är inte ett giltigt datum.', - required: 'Detta fält är obligatoriskt.', - requiresAtLeast: 'Detta fält kräver minst {{count}} {{label}}.', - requiresNoMoreThan: 'Detta fält kräver inte mer än {{count}} {{label}}.', - requiresTwoNumbers: 'Detta fält kräver två nummer.', - shorterThanMax: 'Detta värde måste vara kortare än maxlängden på {{maxLength}} tecken.', - trueOrFalse: 'Detta fält kan bara vara lika med sant eller falskt.', - validUploadID: 'Det här fältet är inte ett giltigt uppladdnings-ID', - }, - version: { - aboutToPublishSelection: 'Du är på väg att publicera alla {{label}} i urvalet. Är du säker?', - aboutToRestore: - 'Du är på väg att återställa detta {{label}} dokumentet till det tillståndet som det var den {{versionDate}}.', - aboutToRestoreGlobal: - 'Du är på väg att återställa det globala {{label}} till det tillståndet som det var den {{versionDate}}.', - aboutToRevertToPublished: - 'Du är på väg att återställa det här dokumentets ändringar till dess publicerade tillstånd. Är du säker?', - aboutToUnpublish: 'Du håller på att avpublicera detta dokumentet. Är du säker?', - aboutToUnpublishSelection: - 'Du är på väg att avpublicera alla {{label}} i urvalet. Är du säker?', - autosave: 'Automatisk sparning', - autosavedSuccessfully: 'Autosparades framgångsrikt.', - autosavedVersion: 'Autosparad version', - changed: 'Ändrad', - compareVersion: 'Jämför version med:', - confirmPublish: 'Bekräfta publicering', - confirmRevertToSaved: 'Bekräfta återgång till sparad', - confirmUnpublish: 'Bekräfta avpublicering', - confirmVersionRestoration: 'Bekräfta Versionsåterställning', - currentDocumentStatus: 'Nuvarande {{docStatus}} dokument', - draft: 'Utkast', - draftSavedSuccessfully: 'Utkastet sparades framgångsrikt.', - lastSavedAgo: 'Senast sparad för {{distance}} sedan', - noFurtherVersionsFound: 'Inga fler versioner hittades', - noRowsFound: 'Inga {{label}} hittades', - preview: 'Förhandsvisa', - problemRestoringVersion: 'Det uppstod ett problem när den här versionen skulle återställas', - publish: 'Publicera', - publishChanges: 'Publicera ändringar', - published: 'Publicerad', - publishing: 'Publicering', - restoreThisVersion: 'Återställ den här versionen', - restoredSuccessfully: 'Återställd framgångsrikt.', - restoring: 'Återställer...', - revertToPublished: 'Återgå till publicerad', - reverting: 'Återgår...', - saveDraft: 'Spara Utkast', - selectLocales: 'Välj språk att visa', - selectVersionToCompare: 'Välj en version att jämföra', - showLocales: 'Visa språk:', - showingVersionsFor: 'Visar versioner för:', - status: 'Status', - type: 'Typ', - unpublish: 'Avpublicera', - unpublishing: 'Avpublicerar...', - version: 'Version', - versionCount_many: '{{count}} versioner hittades', - versionCount_none: 'Inga versioner hittades', - versionCount_one: '{{count}} version hittades', - versionCount_other: '{{count}} versioner hittades', - versionCreatedOn: '{{version}} skapad den:', - versionID: 'Versions-ID', - versions: 'Versioner', - viewingVersion: 'Visar version för {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: 'Visa version för den globala {{entityLabel}}', - viewingVersions: 'Visar versioner för {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: 'Visa versioner för den globala {{entityLabel}}', - }, -} diff --git a/packages/translations/src/all/th.ts b/packages/translations/src/all/th.ts deleted file mode 100644 index d9ad021106..0000000000 --- a/packages/translations/src/all/th.ts +++ /dev/null @@ -1,383 +0,0 @@ -export default { - authentication: { - account: 'บัญชี', - accountOfCurrentUser: 'บัญชีปัจจุบัน', - alreadyActivated: 'เปิดใช้งานแล้ว', - alreadyLoggedIn: 'ลงชื่อเข้าใช้แล้ว', - apiKey: 'API Key', - backToLogin: 'กลับไปหน้าเข้าสู่ระบบ', - beginCreateFirstUser: 'สร้างผู้ใช้แรกเพื่อเริ่มใช้งาน', - changePassword: 'เปลี่ยนรหัสผ่าน', - checkYourEmailForPasswordReset: - 'ระบบได้ส่งอีเมลสำหรับรีเซ็ตรหัสผ่านไปที่อีเมลของคุณแล้ว โปรดเช็กอีเมลของคุณ', - confirmGeneration: 'ยืนยันการสร้าง', - confirmPassword: 'ยืนยันรหัสผ่าน', - createFirstUser: 'สร้างผู้ใช้แรก', - emailNotValid: 'อีเมลไม่ถูกต้อง', - emailSent: 'ส่งอีเมลเรียบร้อยแล้ว', - enableAPIKey: 'เปิดใช้ API Key', - failedToUnlock: 'ไม่สามารถปลดล็อกได้', - forceUnlock: 'ปลดล็อกบัญชี', - forgotPassword: 'ลืมรหัสผ่าน', - forgotPasswordEmailInstructions: - 'กรุณาใส่อีเมลของคุณ ระบบจะส่งวิธีการเปลี่ยนรหัสผ่านไปให้คุณทางอีเมล', - forgotPasswordQuestion: 'ลืมรหัสผ่าน?', - generate: 'สร้าง', - generateNewAPIKey: 'สร้าง API Key', - generatingNewAPIKeyWillInvalidate: - 'การสร้าง API Key ใหม่จะเป็นการ<1>ยกเลิก API Key เดิม คุณต้องการดำเนินการต่อหรือไม่?', - lockUntil: 'ล็อกบัญชีถึง', - logBackIn: 'เข้าสู่ระบบอีกครั้ง', - logOut: 'ออกจากระบบ', - loggedIn: 'หากต้องการเข้าสู่ระบบด้วยบัญชีอื่น กรุณา<0>ออกจากระบบก่อน', - loggedInChangePassword: 'หากต้องการเปลี่ยนรหัสผ่าน กรุณาแก้ไขที่หน้า<0>บัญชีของคุณ', - loggedOutInactivity: 'คุณได้ออกจากระบบเนื่องจากไม่มีการใช้งาน', - loggedOutSuccessfully: 'ออกจากระบบเรียบร้อยแล้ว', - login: 'เข้าสู่ระบบ', - loginAttempts: 'จำนวนครั้งการเข้าสู่ระบบ', - loginUser: 'เข้าสู่ระบบ', - loginWithAnotherUser: 'หากต้องการเข้าสู่ระบบด้วยบัญชีอื่น กรุณา<0>ออกจากระบบก่อน', - logout: 'ออกจากระบบ', - logoutUser: 'ออกจากระบบ', - newAPIKeyGenerated: 'สร้าง API Key ใหม่แล้ว', - newAccountCreated: - 'ระบบได้สร้างบัญชีผู้ใช้ให้คุณสำหรับเข้าใช้งาน {{serverURL}} เรียบร้อยแล้ว กรุณากดลิงก์ด้านล่างเพื่อยืนยันอีเมล หลังจากยืนยันอีเมลเสร็จสิ้น คุณจะสามารถเข้าใช้งานระบบได้', - newPassword: 'รหัสผ่านใหม่', - resetPassword: 'รีเซ็ตรหัสผ่าน', - resetPasswordExpiration: 'วันหมดอายุสำหรับการรีเซ็ตรหัสผ่าน', - resetPasswordToken: 'Token รีเซ็ตรหัสผ่าน', - resetYourPassword: 'รีเซ็ตรหัสผ่านของคุณ', - stayLoggedIn: 'เข้าสู่ระบบต่อไป', - successfullyUnlocked: 'ปลดล็อกบัญชีสำเร็จ', - unableToVerify: 'ไม่สามารถยืนยันบัญชีได้', - verified: 'ยืนยันบััญชีแล้ว', - verifiedSuccessfully: 'ยืนยันบัญชีสำเร็จ', - verify: 'ยืนยันบัญชี', - verifyUser: 'ยืนยันบัญชี', - verifyYourEmail: 'ยืนยันอีเมลของคุณ', - youAreInactive: - 'คุณกำลังจะถูกให้ออกจากระบบในเร็ว ๆ นี้เนื่องจากไม่มีการใช้งานระบบมาสักพักหนึ่ง คุณต้องการเข้าสู่ระบบต่อหรือไม่?', - youAreReceivingResetPassword: - 'คุณได้รับอีเมลนี้เนื่องจากคุณ (หรือคนอื่น) ได้ร้องขอให้รีเซ็ตรหัสผ่านของบัญชีของคุณ กรุณากดลิงก์ด้านล่างเพื่อดำเนินการรีเซ็ตรหัสผ่านต่อ:', - youDidNotRequestPassword: - 'หากคุณไม่ได้ร้องขอให้มีการรีเซ็ตรหัสผ่าน คุณสามารถเพิกเฉยข้อความนี้ได้ โดยรหัสผ่านของคุณจะคงอยู่เช่นเดิม', - }, - error: { - accountAlreadyActivated: 'บัญชีนี้ถูกเปิดใช้งานไปแล้ว', - autosaving: 'เกิดปัญหาระหว่างการบันทึกเอกสารอัตโนมัติ', - correctInvalidFields: 'โปรดแก้ไขช่องที่ไม่ถูกต้อง', - deletingFile: 'เกิดปัญหาระหว่างการลบไฟล์', - deletingTitle: 'เกิดปัญหาระหว่างการลบ {{title}} โปรดตรวจสอบการเชื่อมต่อของคุณแล้วลองอีกครั้ง', - emailOrPasswordIncorrect: 'อีเมลหรือรหัสผ่านไม่ถูกต้อง', - followingFieldsInvalid_one: 'ช่องต่อไปนี้ไม่ถูกต้อง:', - followingFieldsInvalid_other: 'ช่องต่อไปนี้ไม่ถูกต้อง:', - incorrectCollection: 'Collection ไม่ถูกต้อง', - invalidFileType: 'ประเภทของไฟล์ไม่ถูกต้อง', - invalidFileTypeValue: 'ประเภทของไฟล์ไม่ถูกต้อง: {{value}}', - loadingDocument: 'เกิดปัญหาระหว่างการโหลดเอกสารที่มี ID {{id}}', - missingEmail: 'ไม่พบอีเมล', - missingIDOfDocument: 'ไม่พบ ID ของเอกสารที่ต้องการแก้ไข', - missingIDOfVersion: 'ไม่พบ ID ของเวอร์ชัน', - missingRequiredData: 'ไม่พบข้อมูลที่จำเป็น', - noFilesUploaded: 'ไม่มีไฟล์ถูกอัปโหลด', - noMatchedField: 'ไม่พบช่อง "{{label}}"', - noUser: 'ไม่พบผู้ใช้', - notAllowedToAccessPage: 'คุณไม่ได้รับอนุญาตให้เข้าถึงหน้านี้', - notAllowedToPerformAction: 'คุณไม่ได้รับอนุญาตให้ดำเนินการสิ่งนี้', - notFound: 'ไม่พบหน้าที่คุณต้องการ', - previewing: 'เกิดปัญหาระหว่างการแสดงตัวอย่างเอกสาร', - problemUploadingFile: 'เกิดปัญหาระหว่างการอัปโหลดไฟล์', - tokenInvalidOrExpired: 'Token ไม่ถูกต้องหรือหมดอายุ', - unPublishingDocument: 'เกิดปัญหาระหว่างการยกเลิกการเผยแพร่เอกสารนี้', - unableToDeleteCount: 'ไม่สามารถลบ {{count}} จาก {{total}} {{label}}', - unableToUpdateCount: 'ไม่สามารถอัปเดต {{count}} จาก {{total}} {{label}}', - unauthorized: 'คุณไม่ได้รับอนุญาต กรุณาเข้าสู่ระบบเพื่อทำคำขอนี้', - unknown: 'เกิดปัญหาบางอย่างที่ไม่ทราบสาเหตุ', - unspecific: 'เกิดปัญหาบางอย่าง', - userLocked: 'บัญชีนี้ถูกล็อกเนื่องจากมีการพยายามเข้าสู่ระบบมากเกินไป', - valueMustBeUnique: 'ค่าต้องไม่ซ้ำกับเอกสารอื่น', - verificationTokenInvalid: 'Token ยืนยันตัวตนไม่ถูกต้อง', - }, - fields: { - addLabel: 'เพิ่ม {{label}}', - addLink: 'เพิ่มลิงค์', - addNew: 'เพิ่ม', - addNewLabel: 'เพิ่ม {{label}} ใหม่', - addRelationship: 'เพิ่มความสัมพันธ์', - addUpload: 'เพิ่มการอัปโหลด', - block: 'Block', - blockType: 'ประเภท Block', - blocks: 'Blocks', - chooseBetweenCustomTextOrDocument: 'เลือกระหว่างกำหนด URL เองหรือเชื่อมไปยังเอกสารอื่น', - chooseDocumentToLink: 'เลือกเอกสารที่จะเชื่อมโยง', - chooseFromExisting: 'เลือกจากที่มีอยู่', - chooseLabel: 'เลือก {{label}}', - collapseAll: 'ยุบทั้งหมด', - customURL: 'URL ที่กำหนดเอง', - editLabelData: 'แก้ไขข้อมูล {{label}}', - editLink: 'แก้ไขลิงก์', - editRelationship: 'แก้ไขความสัมพันธ์', - enterURL: 'ระบุ URL', - internalLink: 'ลิงก์ภายใน', - itemsAndMore: '{{items}} และเพิ่มเติมอีก {{count}}', - labelRelationship: 'ความสัมพันธ์กับ {{label}}', - latitude: 'ละติจูด', - linkType: 'ประเภทของลิงก์', - linkedTo: 'เชื่อมกับ <0>{{label}} สำเร็จ', - longitude: 'ลองติจูด', - newLabel: '{{label}} ใหม่', - openInNewTab: 'เปิดในแท็บใหม่', - passwordsDoNotMatch: 'รหัสผ่านไม่ตรงกัน', - relatedDocument: 'เอกสารที่เกี่ยวข้อง', - relationTo: 'เชื่อมกับ', - removeRelationship: 'ลบความสัมพันธ์', - removeUpload: 'ลบอัปโหลด', - saveChanges: 'บันทึก', - searchForBlock: 'ค้นหา Block', - selectExistingLabel: 'เลือก {{label}} ที่มีอยู่', - selectFieldsToEdit: 'เลือกช่องที่จะแก้ไข', - showAll: 'แสดงทั้งหมด', - swapRelationship: 'สลับความสัมพันธ์', - swapUpload: 'สลับอัปโหลด', - textToDisplay: 'ข้อความสำหรับแสดงผล', - toggleBlock: 'เปิด/ปิด Block', - uploadNewLabel: 'อัปโหลด {{label}} ใหม่', - }, - general: { - aboutToDelete: 'คุณกำลังจะลบ {{label}} <1>{{title}} ต้องการดำเนินการต่อหรือไม่?', - aboutToDeleteCount_many: 'คุณกำลังจะลบ {{count}} {{label}}', - aboutToDeleteCount_one: 'คุณกำลังจะลบ {{count}} {{label}}', - aboutToDeleteCount_other: 'คุณกำลังจะลบ {{count}} {{label}}', - addBelow: 'เพิ่มด้านล่าง', - addFilter: 'เพิ่มการกรอง', - adminTheme: 'ธีมผู้ดูแลระบบ', - and: 'และ', - applyChanges: 'ใช้การเปลี่ยนแปลง', - ascending: 'น้อยไปมาก', - automatic: 'อัตโนมัติ', - backToDashboard: 'กลับไปหน้าแดชบอร์ด', - cancel: 'ยกเลิก', - changesNotSaved: 'การเปลี่ยนแปลงยังไม่ได้ถูกบันทึก ถ้าคุณออกตอนนี้ สิ่งที่แก้ไขไว้จะหายไป', - close: 'ปิด', - collapse: 'ยุบ', - collections: 'Collections', - columnToSort: 'คอลัมน์ที่ต้องการเรียง', - columns: 'คอลัมน์', - confirm: 'ยืนยัน', - confirmDeletion: 'ยืนยันการลบ', - confirmDuplication: 'ยืนยันการสำเนา', - copied: 'คัดลอกแล้ว', - copy: 'คัดลอก', - create: 'สร้าง', - createNew: 'สร้างใหม่', - createNewLabel: 'สร้าง {{label}} ใหม่', - created: 'ถูกสร้างเมื่อ', - createdAt: 'สร้างเมื่อ', - creating: 'กำลังสร้าง', - creatingNewLabel: 'กำลังสร้าง {{label}} ใหม่', - dark: 'มืด', - dashboard: 'แดชบอร์ด', - delete: 'ลบ', - deletedCountSuccessfully: 'Deleted {{count}} {{label}} successfully.', - deletedSuccessfully: 'ลบสำเร็จ', - deleting: 'กำลังลบ...', - descending: 'มากไปน้อย', - deselectAllRows: 'ยกเลิกการเลือกทุกแถว', - duplicate: 'สำเนา', - duplicateWithoutSaving: 'สำเนาโดยไม่บันทึกการแก้ไข', - edit: 'แก้ไข', - editLabel: 'แก้ไข {{label}}', - editing: 'แก้ไข', - editingLabel_many: 'กำลังแก้ไข {{count}} {{label}}', - editingLabel_one: 'กำลังแก้ไข {{count}} {{label}}', - editingLabel_other: 'กำลังแก้ไข {{count}} {{label}}', - email: 'อีเมล', - emailAddress: 'อีเมล', - enterAValue: 'ระบุค่า', - error: 'ข้อผิดพลาด', - errors: 'ข้อผิดพลาด', - fallbackToDefaultLocale: 'สำรองไปยังตำแหน่งที่ตั้งเริ่มต้น', - filter: 'กรอง', - filterWhere: 'กรอง {{label}} เฉพาะ', - filters: 'กรอง', - globals: 'Globals', - language: 'ภาษา', - lastModified: 'แก้ไขล่าสุดเมื่อ', - leaveAnyway: 'ออกจากหน้านี้', - leaveWithoutSaving: 'ออกโดยไม่บันทึก', - light: 'สว่าง', - livePreview: 'แสดงตัวอย่าง', - loading: 'กำลังโหลด', - locale: 'ตำแหน่งที่ตั้ง', - locales: 'ภาษา', - menu: 'เมนู', - moveDown: 'ขยับขึ้น', - moveUp: 'ขยับลง', - newPassword: 'รหัสผ่านใหม่', - noFiltersSet: 'ไม่มีการกรอง', - noLabel: '<ไม่มี {{label}}>', - noOptions: 'ไม่มีตัวเลือก', - noResults: - 'ไม่พบ {{label}} เนื่องจากยังไม่มี {{label}} หรือไม่มี {{label}} ใดตรงกับการกรองด้านบน', - noValue: 'ไม่มีค่า', - none: 'ไม่มี', - notFound: 'ไม่พบ', - nothingFound: 'ไม่พบสิ่งใด', - of: 'จาก', - open: 'เปิด', - or: 'หรือ', - order: 'เรียงตาม', - pageNotFound: 'ไม่พบหน้าที่ต้องการ', - password: 'รหัสผ่าน', - payloadSettings: 'การตั้งค่า Payload', - perPage: 'จำนวนต่อหน้า: {{limit}}', - remove: 'ลบ', - reset: 'รีเซ็ต', - row: 'แถว', - rows: 'แถว', - save: 'บันทึก', - saving: 'กำลังบันทึก...', - searchBy: 'ค้นหาด้วย {{label}}', - selectAll: 'เลือกทั้งหมด {{count}} {{label}}', - selectAllRows: 'เลือกทุกแถว', - selectValue: 'เลือกค่า', - selectedCount: 'เลือก {{count}} {{label}} แล้ว', - showAllLabel: 'แสดง {{label}} ทั้งหมด', - sorryNotFound: 'ขออภัย ไม่สามารถทำตามคำขอของคุณได้', - sort: 'เรียง', - sortByLabelDirection: 'เรียงลำดับตาม {{label}} {{direction}}', - stayOnThisPage: 'อยู่หน้านี้ต่อ', - submissionSuccessful: 'ส่งสำเร็จ', - submit: 'ส่ง', - successfullyCreated: 'สร้าง {{label}} สำเร็จ', - successfullyDuplicated: 'สำเนา {{label}} สำเร็จ', - thisLanguage: 'ไทย', - titleDeleted: 'ลบ {{label}} "{{title}}" สำเร็จ', - unauthorized: 'ไม่ได้รับอนุญาต', - unsavedChangesDuplicate: 'คุณมีการแก้ไขที่ยังไม่ถูกบันทึก คุณต้องการทำสำเนาต่อหรือไม่?', - untitled: 'ไม่มีชื่อ', - updatedAt: 'แก้ไขเมื่อ', - updatedCountSuccessfully: 'อัปเดต {{count}} {{label}} เรียบร้อยแล้ว', - updatedSuccessfully: 'แก้ไขสำเร็จ', - updating: 'กำลังอัปเดต', - uploading: 'กำลังอัปโหลด', - user: 'ผู้ใช้', - users: 'ผู้ใช้', - value: 'ค่า', - welcome: 'ยินดีต้อนรับ', - }, - operators: { - contains: 'มี', - equals: 'เท่ากับ', - exists: 'มีอยู่', - isGreaterThan: 'มากกว่า', - isGreaterThanOrEqualTo: 'มากกว่าหรือเท่ากับ', - isIn: 'อยู่ใน', - isLessThan: 'น้อยกว่า', - isLessThanOrEqualTo: 'น้อยกว่าหรือเท่ากับ', - isLike: 'เหมือน', - isNotEqualTo: 'ไม่เท่ากับ', - isNotIn: 'ไม่ได้อยู่ใน', - near: 'ใกล้', - }, - upload: { - crop: 'พืชผล', - cropToolDescription: 'ลากมุมของพื้นที่ที่เลือก, วาดพื้นที่ใหม่หรือปรับค่าด้านล่าง', - dragAndDrop: 'ลากและวางไฟล์', - dragAndDropHere: 'หรือลากและวางไฟล์ที่นี่', - editImage: 'แก้ไขรูปภาพ', - fileName: 'ชื่อไฟล์', - fileSize: 'ขนาดไฟล์', - focalPoint: 'จุดสนใจ', - focalPointDescription: 'ลากจุดโฟกัสตรงบนภาพตัวอย่างหรือปรับค่าที่อยู่ด้านล่าง', - height: 'ความสูง', - lessInfo: 'ซ่อนข้อมูล', - moreInfo: 'แสดงข้อมูล', - previewSizes: 'ขนาดตัวอย่าง', - selectCollectionToBrowse: 'เลือก Collection ที่ต้องการค้นหา', - selectFile: 'เลือกไฟล์', - setCropArea: 'ตั้งค่าพื้นที่การครอบตัด', - setFocalPoint: 'ตั้งจุดโฟกัส', - sizes: 'ขนาด', - sizesFor: 'ขนาดสำหรับ {{label}}', - width: 'ความกว้าง', - }, - validation: { - emailAddress: 'กรุณาระบุอีเมลที่ถูกต้อง', - enterNumber: 'กรุณาระบุตัวเลขที่ถูกต้อง', - fieldHasNo: 'ช่องนี้ไม่มี {{label}}', - greaterThanMax: '{{value}} มากกว่าค่าสูงสุดที่อนุญาตของ {{label}} ซึ่งคือ {{max}}.', - invalidInput: 'ข้อมูลไม่ถูกต้อง', - invalidSelection: 'ค่าที่เลือกไม่ถูกต้อง', - invalidSelections: 'ค่าที่เลือกไม่ถูกต้องดังนี้:', - lessThanMin: '{{value}} น้อยกว่าค่าต่ำสุดที่อนุญาตของ {{label}} ซึ่งคือ {{min}}.', - limitReached: 'ถึงขีดจำกัดแล้ว, สามารถเพิ่มไอเทมได้เพียง {{max}} ไอเทมเท่านั้น', - longerThanMin: 'ค่าต้องมีความยาวมากกว่า {{minLength}} ตัวอักษร', - notValidDate: 'วันที่ "{{value}}" ไม่ถูกต้อง', - required: 'จำเป็นต้องระบุค่า', - requiresAtLeast: 'ต้องมีอย่างน้อย {{count}} {{label}}', - requiresNoMoreThan: 'ห้ามมีเกิน {{count}} {{label}}', - requiresTwoNumbers: 'ต้องมีตัวเลข 2 ค่า', - shorterThanMax: 'ค่าต้องมีความยาวน้อยกว่า {{maxLength}} ตัวอักษร', - trueOrFalse: 'เป็นได้แค่ "ใช่" หรือ "ไม่ใช่"', - validUploadID: 'ไม่ใช่ ID ของการอัปโหลดที่ถูกต้อง', - }, - version: { - aboutToPublishSelection: 'คุณกำลังจะเผยแพร่ {{label}} ทั้งหมดในส่วนที่เลือก คุณแน่ใจไหม?', - aboutToRestore: - 'คุณกำลังจะคืนค่าเอกสาร {{label}} นี้กลับไปอยู่ในเวอร์ชันเมื่อวันที่ {{versionDate}}', - aboutToRestoreGlobal: - 'คุณกำลังจะคืนค่า global {{label}} กลับไปอยู่ในเวอร์ชันเมื่อวันที่ {{versionDate}}.', - aboutToRevertToPublished: - 'คุณกำลังจะย้อนการเปลี่ยนแปลงของเอกสารนี้ไปยังเวอร์ชันที่เผยแพร่อยู่ คุณต้องการดำเนินการต่อหรือไม่?', - aboutToUnpublish: 'คุณกำลังจะยกเลิกเผยแพร่เอกสารนี้ คุณต้องการดำเนินการต่อหรือไม่?', - aboutToUnpublishSelection: 'คุณกำลังจะเลิกเผยแพร่ {{label}} ทั้งหมดในส่วนที่เลือก คุณแน่ใจไหม?', - autosave: 'บันทึกอัตโนมัติ', - autosavedSuccessfully: 'บันทึกอัตโนมัติสำเร็จ', - autosavedVersion: 'เวอร์ชันบันทึกอัตโนมัติ', - changed: 'มีการแก้ไข', - compareVersion: 'เปรียบเทียบเวอร์ชันกับ:', - confirmPublish: 'ยืนยันการเผยแพร่', - confirmRevertToSaved: 'ยืนยันย้อนการแก้ไข', - confirmUnpublish: 'ยืนยันการยกเลิกการเผยแพร่', - confirmVersionRestoration: 'ยืนยันการกู้คืนเวอร์ชัน', - currentDocumentStatus: 'เอกสารปัจจุบัน', - draft: 'ฉบับร่าง', - draftSavedSuccessfully: 'บันทึกร่างสำเร็จ', - lastSavedAgo: 'บันทึกครั้งล่าสุด {{distance}} ที่ผ่านมา', - noFurtherVersionsFound: 'ไม่พบเวอร์ชันอื่น ๆ', - noRowsFound: 'ไม่พบ {{label}}', - preview: 'ตัวอย่าง', - problemRestoringVersion: 'เกิดปัญหาระหว่างการกู้คืนเวอร์ชันนี้', - publish: 'เผยแพร่', - publishChanges: 'เผยแพร่การแก้ไข', - published: 'เผยแพร่แล้ว', - publishing: 'การเผยแพร่', - restoreThisVersion: 'กู้คืนเวอร์ชันนี้', - restoredSuccessfully: 'กู้คืนเวอร์ชันสำเร็จ', - restoring: 'กำลังกู้คืน...', - revertToPublished: 'ย้อนกลับไปเวอร์ชันที่เผยแพร่อยู่', - reverting: 'กำลังย้อน...', - saveDraft: 'บันทึกร่าง', - selectLocales: 'เลือกภาษาที่ต้องการแสดง', - selectVersionToCompare: 'เลือกเวอร์ชันที่ต้องการเปรียบเทียบ', - showLocales: 'แสดงภาษา:', - showingVersionsFor: 'กำลังแสดงเวอร์ชันของ:', - status: 'สถานะ', - type: 'ประเภท', - unpublish: 'หยุดเผยแพร่', - unpublishing: 'กำลังหยุดการเผยแพร่...', - version: 'เวอร์ชัน', - versionCount_many: 'พบ {{count}} เวอร์ชัน', - versionCount_none: 'ไม่พบเวอร์ชันอื่น', - versionCount_one: 'พบ {{count}} เวอร์ชัน', - versionCount_other: 'พบ {{count}} เวอร์ชัน', - versionCreatedOn: '{{version}} ถูกสร้างเมื่อ:', - versionID: 'ID ของเวอร์ชัน', - versions: 'เวอร์ชัน', - viewingVersion: 'กำลังดูเวอร์ชันของ {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: 'กำลังดูเวอร์ชันของ global {{entityLabel}}', - viewingVersions: 'กำลังดูเวอร์ชันของ {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: 'กำลังดูเวอร์ชันของ global {{entityLabel}}', - }, -} diff --git a/packages/translations/src/all/tr.ts b/packages/translations/src/all/tr.ts deleted file mode 100644 index 677d31c6ac..0000000000 --- a/packages/translations/src/all/tr.ts +++ /dev/null @@ -1,392 +0,0 @@ -export default { - authentication: { - account: 'Hesap', - accountOfCurrentUser: 'Şu anki kullanıcının hesabı', - alreadyActivated: 'Hesap zaten etkinleştirildi', - alreadyLoggedIn: 'Hesaba zaten giriş yapıldı', - apiKey: 'API Anahtarı', - backToLogin: 'Giriş ekranına geri dön', - beginCreateFirstUser: 'Başlamak için ilk kullanıcı hesabını oluşturun.', - changePassword: 'Parolayı Değiştir', - checkYourEmailForPasswordReset: - 'Parolanızı güvenli bir şekilde güncelleyebilmeniz için e-posta adresinize bir bağlantı gönderilmiştir.', - confirmGeneration: 'Oluştumayı Onayla', - confirmPassword: 'Parolayı Onayla', - createFirstUser: 'İlk kullanıcı oluştur', - emailNotValid: 'Girilen e-posta geçersiz', - emailSent: 'E-posta gönderildi', - enableAPIKey: 'Api anahtarını etkinleştir', - failedToUnlock: 'Hesabı aktifleştirme başarısız oldu', - forceUnlock: 'Hesabı Etkinleştir', - forgotPassword: 'Parolamı Unuttum', - forgotPasswordEmailInstructions: - 'Lütfen e-posta adresinizi aşağıdaki alana girin. Parolanızı nasıl sıfırlayacağınızı gösteren bir e-posta adresi alacaksınız.', - forgotPasswordQuestion: 'Parolanızı mı unuttunuz?', - generate: 'Oluştur', - generateNewAPIKey: 'Yeni bir API anahtarı oluştur', - generatingNewAPIKeyWillInvalidate: - 'Yeni bir API anahtarı oluşturmak önceckini <1>geçersiz kılacaktır. Devam etmek istiyor musunuz?', - lockUntil: 'Lock Until', - logBackIn: 'Tekrar giriş yapın', - logOut: 'Çıkış', - loggedIn: - 'Başka bir kullanıcı hesabıyla giriş yapabilmek için önce <0>çıkış yapmanız gerekmektedir.', - loggedInChangePassword: 'Parolanızı değiştirmek için <0>hesabınıza gidebilirsiniz.', - loggedOutInactivity: 'Uzun süre işlem yapmadığınız için oturumunuz kapatıldı.', - loggedOutSuccessfully: 'Başarıyla çıkış yaptınız.', - login: 'Giriş', - loginAttempts: 'Giriş Denemeleri', - loginUser: 'Kullanıcı girişi', - loginWithAnotherUser: - 'Başka bir kullanıcı hesabıyla giriş yapmak için önce <0>çıkış yapmalısınız.', - logout: 'Çıkış', - logoutUser: 'Kullanıcıyı çıkış yapmaya zorla', - newAPIKeyGenerated: 'Yeni API anahtarı oluşturuldu.', - newAccountCreated: - '<0>{{serverURL}} sitesinde adınıza yeni bir hesap oluşturuldu. E-postanızı doğrulamak için bağlantıya tıklayabilirsiniz: <1>{{verificationURL}}
    E-postanızı doğruladıktan sonra siteye hesap bilgilerinizle giriş yapabilirsiniz.', - newPassword: 'Yeni Parola', - resetPassword: 'Parolayı Sıfırla', - resetPasswordExpiration: 'Parola Geçerlik Süresini Sıfırla', - resetPasswordToken: 'Parola tokenini sıfırla', - resetYourPassword: 'Parolanızı Sıfırlayın', - stayLoggedIn: 'Oturumu açık tut', - successfullyUnlocked: 'Hesabın kilidi başarıyla açıldı', - unableToVerify: 'Doğrulama başarısız', - verified: 'Doğrulandı', - verifiedSuccessfully: 'Hesap başarıyla doğrulandı', - verify: 'Doğrula', - verifyUser: 'Kullanıcıyı doğrula', - verifyYourEmail: 'E-postanızı doğrulayın', - youAreInactive: - 'Bir süredir işlem yapmadığınız için yakında oturumunuz kapatılacak. Oturumunuzun açık kalmasını istiyor musunuz?', - youAreReceivingResetPassword: - 'Siz veya bir başkası hesabınızın parolasını sıfırlama isteğinde bulunduğu için bu e-postayı alıyorsunuz. İşlemi tamamlamak için lütfen aşağıdaki bağlantıya tıklayın veya bağlantı adresini tarayıcınızın adres yazma bölümüne kopyalayın.', - youDidNotRequestPassword: - 'Eğer bu işlemi siz gerçekleştirmediyseniz bu e-postayı görmezden gelebilirsiniz.', - }, - error: { - accountAlreadyActivated: 'Hesap zaten etkinleştirildi.', - autosaving: 'Otomatik kaydetme başarısız oldu', - correctInvalidFields: 'Lütfen geçersiz alanları düzeltin.', - deletingFile: 'Dosya silinirken bir hatayla karşılaşıldı.', - deletingTitle: - '{{title}} silinirken bir sorun yaşandı. Lütfen internet bağlantınızı kontrol edip tekrar deneyin.', - emailOrPasswordIncorrect: 'Girilen e-posta veya parola hatalı', - followingFieldsInvalid_one: 'Lütfen geçersiz alanı düzeltin:', - followingFieldsInvalid_other: 'Lütfen geçersiz alanları düzeltin:', - incorrectCollection: 'Hatalı koleksiyon', - invalidFileType: 'Geçersiz dosya türü', - invalidFileTypeValue: 'Geçersiz dosya türü: {{value}}', - loadingDocument: "{{id}} ID'ye sahip döküman yüklenirken bir sorun oluştu.", - missingEmail: 'E-posta adresi girilmedi.', - missingIDOfDocument: "Güncellenecek döküman ID'si eksik.", - missingIDOfVersion: "Versiyon ID'si geçersiz.", - missingRequiredData: 'Gerekli veri eksik.', - noFilesUploaded: 'Yüklenen dosya yok', - noMatchedField: '"{{label}}" ile eşleşen alan bulunamadı.', - noUser: 'Kullanıcı yok', - notAllowedToAccessPage: 'Bu sayfaya erişim izniniz yok.', - notAllowedToPerformAction: 'Bu işlemi gerçekleştirmek için izniniz yok.', - notFound: 'Sayfa bulunamadı.', - previewing: 'Önizleme başarısız oldu', - problemUploadingFile: 'Dosya yüklenirken bir sorun oluştu.', - tokenInvalidOrExpired: 'Geçersiz veya süresi dolmuş token.', - unPublishingDocument: 'Geçerli döküman yayından kaldırılırken bir sorun oluştu.', - unableToDeleteCount: '{{total}} {{label}} içinden {{count}} silinemiyor.', - unableToUpdateCount: '{{total}} {{label}} içinden {{count}} güncellenemiyor.', - unauthorized: 'Bu işlemi gerçekleştirmek için lütfen giriş yapın.', - unknown: 'Bilinmeyen bir hata oluştu.', - unspecific: 'Bir hata oluştu.', - userLocked: - 'Hesabınız hatalı giriş denemeleri yüzünden geçici olarak kilitlendi. Lütfen daha sonra tekrar deneyin.', - valueMustBeUnique: 'Değer benzersiz olmalıdır', - verificationTokenInvalid: 'Doğrulama tokeni geçersiz.', - }, - fields: { - addLabel: '{{label}} ekle', - addLink: 'Link Ekle', - addNew: 'Yeni', - addNewLabel: 'Yeni {{label}}', - addRelationship: 'İlişki Ekle', - addUpload: 'Yükleme Ekle', - block: 'blok', - blockType: 'Blok tipi', - blocks: 'blok', - chooseBetweenCustomTextOrDocument: - 'Choose between entering a custom text URL or linking to another document.', - chooseDocumentToLink: 'Bağlantı verilecek bir döküman seçin.', - chooseFromExisting: 'Varolanlardan seç', - chooseLabel: '{{label}} seç', - collapseAll: 'Tümünü daralt', - customURL: 'Özel URL', - editLabelData: '{{label}} düzenle', - editLink: 'Bağlantıyı Düzenle', - editRelationship: 'İlişkiyi Ekle', - enterURL: 'Bir URL girin', - internalLink: 'İç bağlantı', - itemsAndMore: '{{items}} and {{count}} more', - labelRelationship: '{{label}} Relationship', - latitude: 'Enlem', - linkType: 'Bağlantı türü', - linkedTo: '<0>label için bağlantı verildi', - longitude: 'Boylam', - newLabel: 'Yeni {{label}}', - openInNewTab: 'Yeni sekmede aç', - passwordsDoNotMatch: 'Parolalar eşleşmiyor.', - relatedDocument: 'İlişkili döküman', - relationTo: 'Relation To', - removeRelationship: 'İlişkiyi Kaldır', - removeUpload: 'Dosyayı Sil', - saveChanges: 'Değişiklikleri kaydet', - searchForBlock: 'Blok ara', - selectExistingLabel: 'Varolan {{label}} seç', - selectFieldsToEdit: 'Düzenlenecek alanları seçin', - showAll: 'Tümünü göster', - swapRelationship: 'Takas Ilişkisi', - swapUpload: 'Karşıya Yüklemeyi Değiştir', - textToDisplay: 'Görüntülenecek metin', - toggleBlock: 'Bloğu aç/kapat', - uploadNewLabel: 'Karşıya {{label}} yükle', - }, - general: { - aboutToDelete: - '<1>{{title}} {{label}} silinmek üzere. Silme işlemine devam etmek istiyor musunuz?', - aboutToDeleteCount_many: '{{count}} {{label}} silmek üzeresiniz', - aboutToDeleteCount_one: '{{count}} {{label}} silmek üzeresiniz', - aboutToDeleteCount_other: '{{count}} {{label}} silmek üzeresiniz', - addBelow: 'Altına ekle', - addFilter: 'Filtre ekle', - adminTheme: 'Admin arayüzü', - and: 've', - applyChanges: 'Değişiklikleri Uygula', - ascending: 'artan', - automatic: 'Otomatik', - backToDashboard: 'Anasayfaya geri dön', - cancel: 'İptal', - changesNotSaved: - 'Değişiklikleriniz henüz kaydedilmedi. Eğer bu sayfayı terk ederseniz değişiklikleri kaybedeceksiniz.', - close: 'Kapat', - collapse: 'Daralt', - collections: 'Koleksiyonlar', - columnToSort: 'Sıralanacak Sütunlar', - columns: 'Sütunlar', - confirm: 'Onayla', - confirmDeletion: 'Silmeyi onayla', - confirmDuplication: 'Çoğaltmayı onayla', - copied: 'Kopyalandı', - copy: 'Kopyala', - create: 'Oluştur', - createNew: 'Yeni oluştur', - createNewLabel: 'Yeni bir {{label}} oluştur', - created: 'Oluşturma tarihi', - createdAt: 'Oluşturma tarihi', - creating: 'Oluşturuluyor', - creatingNewLabel: 'Yeni bir {{label}} oluşturuluyor', - dark: 'Karanlık', - dashboard: 'Anasayfa', - delete: 'Sil', - deletedCountSuccessfully: '{{count}} {{label}} başarıyla silindi.', - deletedSuccessfully: 'Başarıyla silindi.', - deleting: 'Siliniyor...', - descending: 'Azalan', - deselectAllRows: 'Tüm satırların seçimini kaldır', - duplicate: 'Çoğalt', - duplicateWithoutSaving: 'Ayarları kaydetmeden çoğalt', - edit: 'Düzenle', - editLabel: '{{label}} düzenle', - editing: 'Düzenleniyor', - editingLabel_many: '{{count}} {{label}} düzenleniyor', - editingLabel_one: '{{count}} {{label}} düzenleniyor', - editingLabel_other: '{{count}} {{label}} düzenleniyor', - email: 'E-posta', - emailAddress: 'E-posta adresi', - enterAValue: 'Değer girin', - error: 'Hata', - errors: 'Hatalar', - fallbackToDefaultLocale: 'Varsayılan yerel ayara geri dönme', - filter: 'Filtrele', - filterWhere: '{{label}} filtrele:', - filters: 'Filtreler', - globals: 'Globaller', - language: 'Dil', - lastModified: 'Son değiştirme', - leaveAnyway: 'Yine de ayrıl', - leaveWithoutSaving: 'Kaydetmeden ayrıl', - light: 'Aydınlık', - livePreview: 'Önizleme', - loading: 'Yükleniyor', - locale: 'Yerel ayar', - locales: 'Diller', - menu: 'Menü', - moveDown: 'Aşağı taşı', - moveUp: 'Yukarı taşı', - newPassword: 'Yeni parola', - noFiltersSet: 'Tanımlı filtre yok', - noLabel: '<{{label}} yok>', - noOptions: 'Seçenek yok', - noResults: - '{{label}} bulunamadı. Henüz bir {{label}} eklenmemiş olabilir veya seçtiğiniz filtrelerle eşleşen bir sonuç bulunamamış olabilir.', - noValue: 'Değer yok', - none: 'Hiç', - notFound: 'Bulunamadı', - nothingFound: 'Hiçbir şey bulunamadı', - of: 'of', - open: 'Aç', - or: 'Or', - order: 'Order', - pageNotFound: 'Sayfa bulunamadı', - password: 'Parola', - payloadSettings: 'Ayarlar', - perPage: 'Sayfa başına: {{limit}}', - remove: 'Kaldır', - reset: 'Sıfırla', - row: 'Satır', - rows: 'Satır', - save: 'Kaydet', - saving: 'Kaydediliyor...', - searchBy: 'Şuna göre sırala: {{label}}', - selectAll: "Tüm {{count}} {{label}}'ı seçin", - selectAllRows: 'Tüm satırları seçin', - selectValue: 'Bir değer seçin', - selectedCount: '{{count}} {{label}} seçildi', - showAllLabel: 'Tüm {{label}} göster', - sorryNotFound: 'Üzgünüz, isteğinizle eşleşen bir sonuç bulunamadı.', - sort: 'Sırala', - sortByLabelDirection: '{{label}} göre sırala {{direction}}', - stayOnThisPage: 'Bu sayfada kal', - submissionSuccessful: 'Gönderme başarılı', - submit: 'Gönder', - successfullyCreated: '{{label}} başarıyla oluşturuldu.', - successfullyDuplicated: '{{label}} başarıyla kopyalandı.', - thisLanguage: 'Türkçe', - titleDeleted: '{{label}} {{title}} başarıyla silindi.', - unauthorized: 'Yetkisiz', - unsavedChangesDuplicate: - 'Kaydedilmemiş değişiklikler var. Çoğaltma işlemine devam etmek istiyor musunuz?', - untitled: 'Başlıksız', - updatedAt: 'Güncellenme tarihi', - updatedCountSuccessfully: '{{count}} {{label}} başarıyla güncellendi.', - updatedSuccessfully: 'Başarıyla güncellendi.', - updating: 'Güncelleniyor', - uploading: 'Yükleniyor', - user: 'kullanıcı', - users: 'kullanıcı', - value: 'Değer', - welcome: 'Hoşgeldiniz', - }, - operators: { - contains: 'içerir', - equals: 'eşittir', - exists: 'var', - isGreaterThan: 'şundan büyüktür', - isGreaterThanOrEqualTo: 'büyüktür veya eşittir', - isIn: 'içinde', - isLessThan: 'küçüktür', - isLessThanOrEqualTo: 'küçüktür veya eşittir', - isLike: 'gibidir', - isNotEqualTo: 'eşit değildir', - isNotIn: 'içinde değil', - near: 'yakın', - }, - upload: { - crop: 'Mahsulat', - cropToolDescription: - 'Seçilen alanın köşelerini sürükleyin, yeni bir alan çizin ya da aşağıdaki değerleri ayarlayın.', - dragAndDrop: 'Bir dosya sürükleyip bırakabilirsiniz', - dragAndDropHere: 'veya buraya bir dosya sürükleyip bırakabilirsiniz', - editImage: 'Görüntüyü Düzenle', - fileName: 'Dosya adı', - fileSize: 'Dosya boyutu', - focalPoint: 'Odak Noktası', - focalPointDescription: - 'Önizlemeye odak noktasını doğrudan sürükleyin veya aşağıdaki değerleri ayarlayın.', - height: 'Yükseklik', - lessInfo: 'Daha az bilgi', - moreInfo: 'Daha fazla bilgi', - previewSizes: 'Önizleme Boyutları', - selectCollectionToBrowse: 'Görüntülenecek bir koleksiyon seçin', - selectFile: 'Dosya seç', - setCropArea: 'Mahsul alanını ayarla', - setFocalPoint: 'Odak noktasını ayarla', - sizes: 'Boyutlar', - sizesFor: '{{label}} için boyutlar', - width: 'Genişlik', - }, - validation: { - emailAddress: 'Lütfen geçerli bir e-posta adresi girin.', - enterNumber: 'Lütfen geçerli bir sayı girin.', - fieldHasNo: 'Bu alanda {{label}} girili değil.', - greaterThanMax: '{{value}} izin verilen maksimum {{label}} değerinden daha büyük.', - invalidInput: 'Bu alanda geçersiz bir giriş mevcut.', - invalidSelection: 'Bu alanda geçersiz bir seçim mevcut.', - invalidSelections: "'Bu alan şu geçersiz seçimlere sahip:'", - lessThanMin: '{{value}} izin verilen minimum {{label}} değerinden daha küçük.', - limitReached: 'Sınır aşıldı, yalnızca {{max}} öğe eklenebilir.', - longerThanMin: 'Bu değer minimum {{minLength}} karakterden uzun olmalıdır.', - notValidDate: '"{{value}}" geçerli bir tarih değil.', - required: 'Bu alan gereklidir.', - requiresAtLeast: 'Bu alan en az {{count}} adet {{label}} gerektirmektedir.', - requiresNoMoreThan: 'Bu alana {{count}} adetten fazla {{label}} girilemez.', - requiresTwoNumbers: 'Bu alana en az iki rakam girilmesi zorunludur.', - shorterThanMax: 'Bu alan {{maxLength}} karakterden daha kısa olmalıdır.', - trueOrFalse: 'Bu alan yalnızca doğru ve yanlış olabilir.', - validUploadID: "'Bu alan geçerli bir karşıya yükleme ID'sine sahip değil.'", - }, - version: { - aboutToPublishSelection: "Seçimdeki tüm {{label}}'i yayınlamak üzeresiniz. Emin misin?", - aboutToRestore: 'Döküman {{label}}, {{versionDate}} tarihindeki sürümüne geri döndürülecek.', - aboutToRestoreGlobal: - 'Global {{label}}, {{versionDate}} tarihindeki sürümüne geri döndürülecek.', - aboutToRevertToPublished: - 'Bu dökümanın değişikliklerini yayınladığı haline geri getirmek üzeresiniz. Devam etmek istiyor musunuz?', - aboutToUnpublish: 'Bu dökümanı yayından kaldırmak üzeresiniz. Devam etmek istiyor musunuz?', - aboutToUnpublishSelection: 'Seçimdeki tüm {{label}} yayınını kaldırmak üzeresiniz. Emin misin?', - autosave: 'Otomatik kaydet', - autosavedSuccessfully: 'Otomatik kaydetme başarılı', - autosavedVersion: 'Otomatik kayıtlı sürüm', - changed: 'Değişiklik yapıldı', - compareVersion: 'Sürümü şununla karşılaştır:', - confirmPublish: 'Yayınlamayı onayla', - confirmRevertToSaved: 'Confirm revert to saved', - confirmUnpublish: 'Yayından kaldırmayı onayla', - confirmVersionRestoration: 'Sürümü Geri Getirmeyi Onayla', - currentDocumentStatus: 'Şu an {{docStatus}} döküman', - draft: 'Taslak', - draftSavedSuccessfully: 'Taslak başarıyla kaydedildi.', - lastSavedAgo: 'Son kaydedildi {{distance}} önce', - noFurtherVersionsFound: 'Başka sürüm bulunamadı.', - noRowsFound: '{{label}} bulunamadı', - preview: 'Önizleme', - problemRestoringVersion: 'Bu sürüme geri döndürürken bir hatayla karşılaşıldı.', - publish: 'Yayınla', - publishChanges: 'Değişiklikleri yayınla', - published: 'Yayınlandı', - publishing: 'Yayınlama', - restoreThisVersion: 'Bu sürüme geri döndür', - restoredSuccessfully: 'Geri getirme başarılı.', - restoring: 'Geri döndürülüyor...', - revertToPublished: 'Yayınlanana geri döndür', - reverting: 'Değişiklikler geri alınıyor...', - saveDraft: 'Taslağı kaydet', - selectLocales: 'Görüntülenecek yerel ayarları seçin', - selectVersionToCompare: 'Karşılaştırılacak bir sürüm seçin', - showLocales: 'Yerel ayarları göster:', - showingVersionsFor: 'Şunun için sürümler gösteriliyor:', - status: 'Durum', - type: 'Tür', - unpublish: 'Yayından Kaldır', - unpublishing: 'Yayından kaldırılıyor...', - version: 'Sürüm', - versionCount_many: '{{count}} sürüm bulundu', - versionCount_none: 'Sürüm bulunamadı', - versionCount_one: '{{count}} sürüm bulundu', - versionCount_other: '{{count}} sürüm bulundu', - versionCreatedOn: '{{version}} oluşturma tarihi:', - versionID: 'Sürüm ID', - versions: 'Sürümler', - viewingVersion: '{{entityLabel}} {{documentTitle}} için sürümler gösteriliyor', - viewingVersionGlobal: '`Global {{entityLabel}} için sürümler gösteriliyor', - viewingVersions: '{{entityLabel}} {{documentTitle}} için sürümler gösteriliyor', - viewingVersionsGlobal: '`Global {{entityLabel}} için sürümler gösteriliyor', - }, -} diff --git a/packages/translations/src/all/ua.ts b/packages/translations/src/all/ua.ts deleted file mode 100644 index ee48d9c7cd..0000000000 --- a/packages/translations/src/all/ua.ts +++ /dev/null @@ -1,389 +0,0 @@ -export default { - authentication: { - account: 'Обліковий запис', - accountOfCurrentUser: 'Обліковий запис поточного користувача', - alreadyActivated: 'Вже активований', - alreadyLoggedIn: 'Вже увійшли в систему', - apiKey: 'API ключ', - backToLogin: 'Повернутися до входу', - beginCreateFirstUser: 'Щоб розпочати - створість першого користувача', - changePassword: 'Змінити пароль', - checkYourEmailForPasswordReset: - 'Перевірте вашу пошту на наявність посилання, яке дозволить вам безпечно скинути пароль', - confirmGeneration: 'Підтвердити генерацію', - confirmPassword: 'Підтвердження паролю', - createFirstUser: 'Створення першого користувача', - emailNotValid: 'Вказана адреса електронної пошти недійсна', - emailSent: 'Лист відправлено', - enableAPIKey: 'Активувати API ключ', - failedToUnlock: 'Не вдалось розблокувати', - forceUnlock: 'Примусове розблокування', - forgotPassword: 'Забули пароль', - forgotPasswordEmailInstructions: - 'Будь ласка, введіть вашу адресу електронної пошти нижче. Ви отримаєте повідомлення електронною поштою з інструкціями щодо скидання пароля.', - forgotPasswordQuestion: 'Забули пароль?', - generate: 'Згенерувати', - generateNewAPIKey: 'Згенерувати новий API ключ', - generatingNewAPIKeyWillInvalidate: - 'Генерація нового API ключа зробить попередній <1>недійсним. Ви впевнені, що хочете продовжити?', - lockUntil: 'Заблокувати до', - logBackIn: 'Увійти знову', - logOut: 'Вийти', - loggedIn: 'Щоб увійти в інший обліковий запис, спочатку <0>вийдіть з поточного.', - loggedInChangePassword: - 'Щоб змінити ваш пароль, перейдіть до <0>облікового запису і змініть ваш пароль там.', - loggedOutInactivity: 'Ви вийшли з системи через бездіяльність.', - loggedOutSuccessfully: 'Ви успішно вийшли з системи.', - login: 'Увійти', - loginAttempts: 'Спроби входу', - loginUser: 'Вхід користувача в систему', - loginWithAnotherUser: 'Щоб увйти в систему під іншим користувачем, спочатку <0>вийдіть.', - logout: 'Вийти', - logoutUser: 'Вийти з системи', - newAPIKeyGenerated: 'Новий API ключ згенеровано.', - newAccountCreated: - 'Новий обліковий запис було створено, щоб отримати доступ до {{serverURL}}, будь ласка, натисніть на наступне посилання, або вставте посилання в адресну строку вашого браузера, щоб підтвердити вашу пошту: {{verificationURL}}
    Після Підтвердження вашої пошти, ви матимете змогу зайти в систему.', - newPassword: 'Новий пароль', - resetPassword: 'Скинути пароль', - resetPasswordExpiration: 'Скинути пароль після закінчення строку дії', - resetPasswordToken: 'Токет для скидання пароля', - resetYourPassword: 'Скинути ваш пароль', - stayLoggedIn: 'Залишатись в системі', - successfullyUnlocked: 'Успішно розблоковано', - unableToVerify: 'Неможливо підтвердити', - verified: 'Підтверджено', - verifiedSuccessfully: 'Успішно Підтверджено', - verify: 'Підтвердити', - verifyUser: 'Підтвердити користувача', - verifyYourEmail: 'Підтвердити пошту', - youAreInactive: - 'Ви були неактивні певний час і скоро, в цілях вашої безпеки, вас буде розлогінено. Чи бажаєте ви залишитись в системі?', - youAreReceivingResetPassword: - 'Ви отримали це повідомлення, бо ви (або хтось інший) створив запит на скидання пароля до вашого облікового запису. Будь ласка, натисніть на наступне посилання, або вставте посилання в адресний рядок вашого браузера, щоб завершити процес:', - youDidNotRequestPassword: - 'Якщо ви не сторювали запит на це, будь ласка, ігноруйте це повідомлення і пароль залишиться без змін', - }, - error: { - accountAlreadyActivated: 'Цей аккаунт вже активований', - autosaving: 'Виникла проблема під час автозбереження цього документа.', - correctInvalidFields: 'Будь ласка, виправте невірні поля.', - deletingFile: 'Виникла помилка під час видалення файлу', - deletingTitle: - "Виникла помилка під час видалення {{title}}, Будь ласка, перевірте ваше з'єднання та спробуйте ще раз.", - emailOrPasswordIncorrect: 'Вказаний email або пароль не є вірними', - followingFieldsInvalid_one: 'Наступне поле не є вірним:', - followingFieldsInvalid_other: 'Наступні поля не є вірними', - incorrectCollection: 'Неправильна колекція', - invalidFileType: 'Невіртий тип файлу', - invalidFileTypeValue: 'Невірний тип файлу: {{value}}', - loadingDocument: 'Виникла помилка під час завантаження документа з ID {{id}}.', - missingEmail: 'Відсутній email.', - missingIDOfDocument: 'Відсутній ID документа для оновлення.', - missingIDOfVersion: 'Відсутній ID версії.', - missingRequiredData: "Відсусті обов'язкові дані.", - noFilesUploaded: 'Не було загружено жодного файлу.', - noMatchedField: 'Не знайдено відповідного поля для "{{label}}"', - noUser: 'Немає користувача', - notAllowedToAccessPage: 'Ви не маєте доступу до цієї сторінки.', - notAllowedToPerformAction: 'Вам не дозволено виконувати цю дію.', - notFound: 'Запитуваний ресурс не знайдено.', - previewing: 'Виникла помилка під час попереднього перегляду цього документа.', - problemUploadingFile: 'Виникла помилка під час завантаження файлу.', - tokenInvalidOrExpired: 'Токен або не дійсний, або його строк дії закінчився.', - unPublishingDocument: 'Підчас відміни публікації даного документа, виникла помилка.', - unableToDeleteCount: 'Не вдалося видалити {{count}} із {{total}} {{label}}.', - unableToUpdateCount: 'Не вдалося оновити {{count}} із {{total}} {{label}}.', - unauthorized: 'Немає доступу, ви повинні увійти, щоб виконати цей запит.', - unknown: 'Виникла невідома помилка.', - unspecific: 'Виникла помилка.', - userLocked: 'Цей користувач заблокований через велику кількість невдалих спроб входу.', - valueMustBeUnique: 'Значення має бути унікальним.', - verificationTokenInvalid: 'Токен верифікації є недійсним.', - }, - fields: { - addLabel: 'Додати {{label}}', - addLink: 'Додати посилання', - addNew: 'Додати новий', - addNewLabel: 'Створити {{label}}', - addRelationship: "Додати взаємозв'язок", - addUpload: 'Додати завантаження', - block: 'блок', - blockType: 'Тип блока', - blocks: 'блоки', - chooseBetweenCustomTextOrDocument: - 'Виберіть між введенням власної текстової URL-адреси і посиланням на інший документ.', - chooseDocumentToLink: 'Виберіть документ, на який потрібно зробити посилання', - chooseFromExisting: 'Вибрати з існуючих', - chooseLabel: 'Вибрати {{label}}', - collapseAll: 'Згорнути все', - customURL: 'Власний URL', - editLabelData: 'Редагувати данні {{label}}', - editLink: 'Редагувати посилання', - editRelationship: "Редагувати взаємозв'язок", - enterURL: 'Введіть URL', - internalLink: 'Внутрішнє посилання', - itemsAndMore: '{{items}} і ще {{count}}', - labelRelationship: "{{label}} Зв'язок", - latitude: 'Широта', - linkType: 'Тип посилання', - linkedTo: "Зв'язано з <0>{{label}}", - longitude: 'Довгота', - newLabel: 'Новий {{label}}', - openInNewTab: 'Відкривати в новій вкладці', - passwordsDoNotMatch: 'Паролі не співпадають.', - relatedDocument: "Пов'язаний документ", - relationTo: "Зв'язано з", - removeRelationship: "Видалити зв'язок", - removeUpload: 'Видалити завантаження', - saveChanges: 'Зберегти зміни', - searchForBlock: 'Знайти блок', - selectExistingLabel: 'Вибрати існуючий {{label}}', - selectFieldsToEdit: 'Виберіть поля для редагування', - showAll: 'Показати все', - swapRelationship: "Замінити зв'язок", - swapUpload: 'Замінити завантаження', - textToDisplay: 'Текст для відображення', - toggleBlock: 'Перемкнути блок', - uploadNewLabel: 'Завантажити новий {{label}}', - }, - general: { - aboutToDelete: 'Ви бажаєте видалити {{label}} <1>{{title}}. Ви впевнені?', - aboutToDeleteCount_many: 'Ви збираєтеся видалити {{count}} {{label}}', - aboutToDeleteCount_one: 'Ви збираєтеся видалити {{count}} {{label}}', - aboutToDeleteCount_other: 'Ви збираєтеся видалити {{count}} {{label}}', - addBelow: 'Додати нижче', - addFilter: 'Додати фільтр', - adminTheme: 'Тема адмінки', - and: 'і', - applyChanges: 'Застосувати зміни', - ascending: 'В порядку зростання', - automatic: 'Автоматично', - backToDashboard: 'Повернутись до головної сторінки', - cancel: 'Скасувати', - changesNotSaved: 'Ваши зміни не були збережені. Якщо ви вийдете зараз, то втратите свої зміни.', - close: 'Закрити', - collapse: 'Згорнути', - collections: 'Колекції', - columnToSort: 'Колонка для сортування', - columns: 'Колонки', - confirm: 'Підтвердити', - confirmDeletion: 'Підтвердити видалення', - confirmDuplication: 'Підтвердити копіювання', - copied: 'Скопійовано', - copy: 'Скопіювати', - create: 'Створити', - createNew: 'Створити', - createNewLabel: 'Створити новий {{label}}', - created: 'Створено', - createdAt: 'Дата створення', - creating: 'Створення', - creatingNewLabel: 'Створення нового {{label}}', - dark: 'Темна', - dashboard: 'Головна', - delete: 'Видалити', - deletedCountSuccessfully: 'Успішно видалено {{count}} {{label}}.', - deletedSuccessfully: 'Успішно видалено.', - deleting: 'Видалення...', - descending: 'В порядку спадання', - deselectAllRows: 'Скасувати вибір всіх рядків', - duplicate: 'Дублювати', - duplicateWithoutSaving: 'Дублювання без збереження змін', - edit: 'Редагувати', - editLabel: 'Редагувати {{label}}', - editing: 'Редагування', - editingLabel_many: 'Редагування {{count}} {{label}}', - editingLabel_one: 'Редагування {{count}} {{label}}', - editingLabel_other: 'Редагування {{count}} {{label}}', - email: 'Email', - emailAddress: 'Email адреса', - enterAValue: 'Введіть значення', - error: 'Помилка', - errors: 'Помилки', - fallbackToDefaultLocale: 'Відновлення локалі за замовчуванням', - filter: 'Фільтрувати', - filterWhere: 'Де фільтрувати {{label}}', - filters: 'Фільтри', - globals: 'Глобальні', - language: 'Мова', - lastModified: 'Останні зміни', - leaveAnyway: 'Все одно вийти', - leaveWithoutSaving: 'Вийти без збереження', - light: 'Світла', - livePreview: 'Попередній перегляд', - loading: 'Загрузка', - locale: 'Локаль', - locales: 'Переклади', - menu: 'Меню', - moveDown: 'Перемістити нижче', - moveUp: 'Перемістити вище', - newPassword: 'Новий пароль', - noFiltersSet: 'Відсусті фільтри', - noLabel: '<без {{label}}>', - noOptions: 'Немає варіантів', - noResults: - 'Жодного {{label}} не знайдено. Або {{label}} ще не існує, або жодна з них не відповідає фільтрам, які ви задали више.', - noValue: 'Немає значення', - none: 'Ніхто', - notFound: 'Не знайдено', - nothingFound: 'Нічого не знайдено', - of: 'з', - open: 'Відкрити', - or: 'або', - order: 'Порядок', - pageNotFound: 'Сторінка не знайдена', - password: 'Пароль', - payloadSettings: 'Налаштування Payload', - perPage: 'На сторінці: {{limit}}', - remove: 'Видалити', - reset: 'Скидання', - row: 'Рядок', - rows: 'Рядки', - save: 'Зберегти', - saving: 'Збереження...', - searchBy: 'Шукати по {{label}}', - selectAll: 'Вибрати всі {{count}} {{label}}', - selectAllRows: 'Вибрати всі рядки', - selectValue: 'Вибрати значення', - selectedCount: 'Вибрано {{count}} {{label}}', - showAllLabel: 'Показати всі {{label}}', - sorryNotFound: 'Вибачте - немає нічого, що відповідало б Вашому запиту.', - sort: 'Сортувати', - sortByLabelDirection: 'Сортувати за {{label}} {{direction}}', - stayOnThisPage: 'Залишитись на цій сторінці', - submissionSuccessful: 'Успішно відправлено.', - submit: 'Відправити', - successfullyCreated: '{{label}} успішно створено.', - successfullyDuplicated: '{{label}} успішно продубльовано.', - thisLanguage: 'Українська', - titleDeleted: '{{label}} "{{title}}" успішно видалено.', - unauthorized: 'Немає доступу', - unsavedChangesDuplicate: 'Ви маєте не збережені зміни. Чи бажаєте ви продовжити дублювання?', - untitled: 'Без назви', - updatedAt: 'Змінено', - updatedCountSuccessfully: 'Успішно оновлено {{count}} {{label}}.', - updatedSuccessfully: 'Успішно відредаговано.', - updating: 'оновлення', - uploading: 'завантаження', - user: 'Користувач', - users: 'Користувачі', - value: 'Значення', - welcome: 'Вітаю', - }, - operators: { - contains: 'містить', - equals: 'дорівнює', - exists: 'існує', - isGreaterThan: 'більше ніж', - isGreaterThanOrEqualTo: 'більше або дорівнює', - isIn: 'є в', - isLessThan: 'менше ніж', - isLessThanOrEqualTo: 'менше або дорівнює', - isLike: 'схоже', - isNotEqualTo: 'не дорівнює', - isNotIn: 'не в', - near: 'поруч', - }, - upload: { - crop: 'Обрізати', - cropToolDescription: - 'Перетягніть кути обраної області, намалюйте нову область або скоригуйте значення нижче.', - dragAndDrop: 'Перемістіть файл', - dragAndDropHere: 'або перемістіть сюди файл', - editImage: 'Редагувати зображення', - fileName: 'Назва файлу', - fileSize: 'Розмір файлу', - focalPoint: 'Центральна точка', - focalPointDescription: - 'Перетягніть фокусний пункт безпосередньо на попередній перегляд або налаштуйте значення нижче.', - height: 'Висота', - lessInfo: 'Менше інформації', - moreInfo: 'Більше інформації', - previewSizes: 'Розміри попереднього перегляду', - selectCollectionToBrowse: 'Виберіть колекцію для перегляду', - selectFile: 'Виберіть файл', - setCropArea: 'Встановити область обрізки', - setFocalPoint: 'Встановити фокусний пункт', - sizes: 'Розміри', - sizesFor: 'Розміри для {{label}}', - width: 'Ширина', - }, - validation: { - emailAddress: 'Будь ласка, введіть валідну email адресу.', - enterNumber: 'Будь ласка, введіть валідний номер.', - fieldHasNo: 'В цього поля немає {{label}}', - greaterThanMax: '{{value}} більше, ніж дозволено максимуму {{label}} в {{max}}.', - invalidInput: 'У цьому полі введено некоректне значення.', - invalidSelection: 'Це поле має некоректний вибір.', - invalidSelections: 'Це поле має наступні невірні варіанти вибору:', - lessThanMin: '{{value}} менше, ніж дозволено мінімуму {{label}} в {{min}}.', - limitReached: 'Досягнуто межі, можна додати лише {{max}} елементів.', - longerThanMin: 'Це значення має бути більше, ніж мінімальна довжина {{minLength}} characters.', - notValidDate: '"{{value}}" - некоректна дата.', - required: "Це поле є обов'язковим.", - requiresAtLeast: 'Це поле потребує не менше {{count}} {{label}}.', - requiresNoMoreThan: 'Це поле потребує не більше {{count}} {{label}}.', - requiresTwoNumbers: 'У цьому полі потрібно ввести два числа.', - shorterThanMax: 'Це значення має бути меншим за максимальну довжину символів {{maxLength}}.', - trueOrFalse: 'Це поле може мати значення тільки true або false.', - validUploadID: 'Це поле не є дійсним ID завантаження.', - }, - version: { - aboutToPublishSelection: 'Ви збираєтеся опублікувати всі {{label}} у добірці. Ти впевнений?', - aboutToRestore: - 'Ви збираєтесь відновити цей документ {{label}} до стану, в якому він знаходився {{versionDate}}.', - aboutToRestoreGlobal: - 'Ви збираєтесь відновити глобальний запис {{label}} до стану, в якому він знаходився {{versionDate}}.', - aboutToRevertToPublished: - 'Ви збираєтесь вернути зміни цього документа до його опублікованого стану. Ви впевнені?', - aboutToUnpublish: 'Ви збираєтесь відмінити публікацю цього документа. Ви впевнені?', - aboutToUnpublishSelection: - 'Ви збираєтеся скасувати публікацію всіх {{label}} у вибраному. Ти впевнений?', - autosave: 'Автозбереження', - autosavedSuccessfully: 'Автозбереження успішно виконано.', - autosavedVersion: 'Автозбережена версія', - changed: 'Змінено', - compareVersion: 'Порівняти версію з:', - confirmPublish: 'Підтвердити публікацію', - confirmRevertToSaved: 'Підтвердити повернення до збереженого', - confirmUnpublish: 'Підвтердити відміну публікації', - confirmVersionRestoration: 'Підтвердити відновлення версії', - currentDocumentStatus: 'Поточний статус {{docStatus}} документа', - draft: 'Чернетка', - draftSavedSuccessfully: 'Чернетка успішно збережена.', - lastSavedAgo: 'Останній раз збережено {{distance}} тому', - noFurtherVersionsFound: 'Інших версій не знайдено', - noRowsFound: 'Не знайдено {{label}}', - preview: 'Попередній перегляд', - problemRestoringVersion: 'Виникла проблема з відновленням цієї версії', - publish: 'Опублікувати', - publishChanges: 'Опублікувати зміни', - published: 'Опубліковано', - publishing: 'Публікація', - restoreThisVersion: 'Відновити цю версію', - restoredSuccessfully: 'Відновлено успішно.', - restoring: 'Відеовлення...', - revertToPublished: 'Відновити до опублікованого', - reverting: 'Відновлення...', - saveDraft: 'Зберегти чернетку', - selectLocales: 'Виберіть переклад для відображення', - selectVersionToCompare: 'Виберіть версію для порівняння', - showLocales: 'Показати переклади:', - showingVersionsFor: 'Показані версії для:', - status: 'Статус', - type: 'Тип', - unpublish: 'Відмінити публікацію', - unpublishing: 'Відміна публікації...', - version: 'Версія', - versionCount_many: '{{count}} Версій знайдено', - versionCount_none: 'Версій не знайдено', - versionCount_one: '{{count}} версія знайдена', - versionCount_other: '{{count}} versions found', - versionCreatedOn: '{{version}} створена:', - versionID: 'ID версії', - versions: 'Версії', - viewingVersion: 'Огляд версії для {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: 'Огляд версій для глобальної колекці {{entityLabel}}', - viewingVersions: 'Огляд версій для {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: 'Огляд версій для глобальної колекції {{entityLabel}}', - }, -} diff --git a/packages/translations/src/all/vi.ts b/packages/translations/src/all/vi.ts deleted file mode 100644 index b97383e05b..0000000000 --- a/packages/translations/src/all/vi.ts +++ /dev/null @@ -1,385 +0,0 @@ -export default { - authentication: { - account: 'Tài khoản', - accountOfCurrentUser: 'Tài khoản của người dùng hiện tại', - alreadyActivated: 'Đã được kích hoạt', - alreadyLoggedIn: 'Đã đăng nhập', - apiKey: 'API Key', - backToLogin: 'Quay lại đăng nhập.', - beginCreateFirstUser: 'Để bắt đầu, hãy tạo người dùng đầu tiên.', - changePassword: 'Đổi mật khẩu', - checkYourEmailForPasswordReset: 'Hãy kiểm tra email của bạn để lấy đường dẫn tạo lại mật khẩu.', - confirmGeneration: 'Xác nhận, tạo API Key', - confirmPassword: 'Xác nhận mật khẩu', - createFirstUser: 'Tạo người dùng đầu tiên', - emailNotValid: 'Email không chính xác', - emailSent: 'Email đã được gửi', - enableAPIKey: 'Kích hoạt API Key', - failedToUnlock: 'Mở khóa thất bại', - forceUnlock: 'Mở khóa tài khoản', - forgotPassword: 'Quên mật khẩu', - forgotPasswordEmailInstructions: 'Nhập email của bạn để nhận hướng dẫn tạo lại mật khẩu.', - forgotPasswordQuestion: 'Quên mật khẩu?', - generate: 'Tạo', - generateNewAPIKey: 'Tạo API Key mới', - generatingNewAPIKeyWillInvalidate: - 'Việc tạo API Key mới sẽ <1>vô hiệu hóa API Key cũ. Bạn có muốn tiếp tục không?', - lockUntil: 'Khóa lại cho tới thời điểm sau', - logBackIn: 'Đăng nhập lại', - logOut: 'Đăng xuất', - loggedIn: - 'Để đăng nhập dưới tên người dùng khác, bạn phải <0>đăng xuất người dùng hiện tại.', - loggedInChangePassword: 'Để đổi mật khẩu, hãy truy cập cài đặt <0>tài khoản.', - loggedOutInactivity: 'Bạn đã tự động đăng xuất sau một khoản thời gian dài không thao tác.', - loggedOutSuccessfully: 'Đăng xuất thành công.', - login: 'Đăng nhập', - loginAttempts: 'Lần đăng nhập', - loginUser: 'Đăng nhập người dùng', - loginWithAnotherUser: - 'Để đăng nhập dưới tên người dùng khác, bạn phải <0>đăng xuất người dùng hiện tại.', - logout: 'Đăng xuất', - logoutUser: 'Đăng xuất người dùng', - newAPIKeyGenerated: 'API Key mới đã được tạo', - newAccountCreated: - 'Một tài khoản mới đã được tạo cho bạn. Tài khoản này được dùng để truy cập {{serverURL}} Hãy nhấp chuột hoặc sao chép đường dẫn sau vào trình duyệt của bạn để xác thực email: {{verificationURL}}
    Sau khi email được xác thực, bạn sẽ có thể đăng nhập.', - newPassword: 'Mật khẩu mới', - resetPassword: 'Tạo lại mật khẩu', - resetPasswordExpiration: 'Hạn tạo lại mật khẩu ', - resetPasswordToken: 'Tạo lại token cho mật khẩu', - resetYourPassword: 'Tạo lại mật khẩu', - stayLoggedIn: 'Duy trì đăng nhập', - successfullyUnlocked: 'Mở khóa thành công', - unableToVerify: 'Không thể xác thực', - verified: 'Đã xác thực', - verifiedSuccessfully: 'Đã xác thực thành công', - verify: 'Tiến hành xác thực', - verifyUser: 'Tiến hành xác thực người dùng', - verifyYourEmail: 'Tiến hành xác thực email', - youAreInactive: - 'Bạn đã không thao tác trong một khoảng thời gian, và sẽ bị tự động đăng xuất vì lý do bảo mật. Bạn có muốn tiếp tục phiên đăng nhập.', - youAreReceivingResetPassword: - 'Bạn nhận được tin nhắn này vì bạn (hoặc một người nào khác) đã gửi yêu cầu thay đổi mật khẩu tài khoản của bạn. Xin hãy nhấp chuột vào đường dẫn sau, hoặc sao chép vào trình duyệt của bạn để hoàn tất quá trình:', - youDidNotRequestPassword: - 'Nếu bạn không phải là người yêu cầu thay đổi mật khẩu, xin hãy bỏ qua tin nhắn này và mật khẩu của bạn sẽ được giữ nguyên.', - }, - error: { - accountAlreadyActivated: 'Lỗi - Tài khoản này đã được kích hoạt.', - autosaving: 'Lỗi - Đã xảy ra vấn đề khi tự động sao lưu bản tài liệu này.', - correctInvalidFields: 'Lỗi - Xin hãy sửa lại những fields không hợp lệ.', - deletingFile: 'Lỗi - Đã xảy ra vấn đề khi xóa tệp này.', - deletingTitle: - 'Lỗi - Đã xảy ra vấn đề khi xóa {{title}}. Hãy kiểm tra kết nối mạng và thử lại.', - emailOrPasswordIncorrect: 'Lỗi - Email hoặc mật khẩu không chính xác.', - followingFieldsInvalid_one: 'Lỗi - Field sau không hợp lệ:', - followingFieldsInvalid_other: 'Lỗi - Những fields sau không hợp lệ:', - incorrectCollection: 'Lỗi - Collection không hợp lệ.', - invalidFileType: 'Lỗi - Định dạng tệp không hợp lệ.', - invalidFileTypeValue: 'Lỗi - Định dạng tệp không hợp lệ: {{value}}.', - loadingDocument: 'Lỗi - Đã xảy ra vấn để khi tải bản tài liệu với ID {{id}}.', - missingEmail: 'Lỗi - Thiếu email.', - missingIDOfDocument: 'Lỗi - Thiếu ID của bản tài liệu cần cập nhật.', - missingIDOfVersion: 'Lỗi - Thiếu ID của phiên bản.', - missingRequiredData: 'Lỗi - Thiếu dữ liệu cần thiết.', - noFilesUploaded: 'Lỗi - File chưa được tải lên.', - noMatchedField: 'Lỗi - Không tìm thấy field trùng với "{{label}}".', - noUser: 'Lỗi - Request thiếu thông tin người dùng.', - notAllowedToAccessPage: 'Lỗi - Bạn không có quyền truy cập trang này.', - notAllowedToPerformAction: 'Lỗi - Bạn không có quyền thực hiện lệnh này.', - notFound: 'Lỗi - Không thể tìm thấy.', - previewing: 'Lỗi - Đã xảy ra vấn đề khi xem trước bản tài liệu này.', - problemUploadingFile: 'Lỗi - Đã xảy ra vấn để khi tải lên file sau.', - tokenInvalidOrExpired: 'Lỗi - Token không hợp lệ hoặc đã hết hạn.', - unPublishingDocument: 'Lỗi - Đã xảy ra vấn để khi ẩn bản tài liệu.', - unableToDeleteCount: 'Không thể xóa {{count}} trong số {{total}} {{label}}.', - unableToUpdateCount: 'Không thể cập nhật {{count}} trên {{total}} {{label}}.', - unauthorized: 'Lỗi - Bạn cần phải đăng nhập trước khi gửi request sau.', - unknown: 'Lỗi - Không xác định (unknown error).', - unspecific: 'Lỗi - Đã xảy ra (unspecific error).', - userLocked: 'Lỗi- Tài khoản đã bị khóa do đăng nhập thất bại nhiều lần.', - valueMustBeUnique: 'Lỗi - Giá trị không được trùng lặp.', - verificationTokenInvalid: 'Lỗi - Token dùng để xác thực không hợp lệ.', - }, - fields: { - addLabel: 'Thêm: {{label}}', - addLink: 'Thêm liên kết', - addNew: 'Thêm mới', - addNewLabel: 'Thêm mới: {{label}}', - addRelationship: 'Thêm mối quan hệ (relationship)', - addUpload: 'Thêm tải lên (upload)', - block: 'block', - blockType: 'Block Type', - blocks: 'blocks', - chooseBetweenCustomTextOrDocument: - 'Chọn giữa nhập URL văn bản tùy chỉnh hoặc liên kết đến tài liệu khác.', - chooseDocumentToLink: 'Chọn một tài liệu để liên kết đến', - chooseFromExisting: 'Chọn từ thư viện', - chooseLabel: 'Chọn: {{label}}', - collapseAll: 'Ẩn toàn bộ', - customURL: 'URL tùy chỉnh', - editLabelData: 'Chỉnh sửa nội dung của: {{label}}', - editLink: 'Chỉnh sửa liên kết', - editRelationship: 'Chỉnh sửa mối quan hệ', - enterURL: 'Nhập một URL', - internalLink: 'Liên kết nội bộ', - itemsAndMore: '{{items}} và {{count}} món nữa', - labelRelationship: 'Mối quan hệ của {{label}} (Relationship)', - latitude: 'Vĩ độ', - linkType: 'Loại liên kết', - linkedTo: 'Được nối với <0>{{label}}', - longitude: 'Kinh độ', - newLabel: 'Tạo {{label}} mới', - openInNewTab: 'Mở trong trang mới', - passwordsDoNotMatch: 'Mật khẩu không trùng.', - relatedDocument: 'bản tài liệu liên quan', - relationTo: 'Có quan hệ với', - removeRelationship: 'Xóa Mối quan hệ', - removeUpload: 'Xóa bản tải lên', - saveChanges: 'Luu thay đổi', - searchForBlock: 'Tìm block', - selectExistingLabel: 'Chọn một {{label}} có sẵn', - selectFieldsToEdit: 'Chọn các trường để chỉnh sửa', - showAll: 'Hiển thị toàn bộ', - swapRelationship: 'Đổi quan hệ', - swapUpload: 'Đổi bản tải lên', - textToDisplay: 'Văn bản để hiển thị', - toggleBlock: 'Bật/tắt block', - uploadNewLabel: 'Tải lên bản mới: {{label}}', - }, - general: { - aboutToDelete: 'Chuẩn bị xóa {{label}} <1>{{title}}. Bạn có muốn tiếp tục không?', - aboutToDeleteCount_many: 'Bạn sắp xóa {{count}} {{label}}', - aboutToDeleteCount_one: 'Bạn sắp xóa {{count}} {{label}}', - aboutToDeleteCount_other: 'Bạn sắp xóa {{count}} {{label}}', - addBelow: 'Thêm bên dưới', - addFilter: 'Thêm bộ lọc', - adminTheme: 'Giao diện bảng điều khiển', - and: 'Và', - applyChanges: 'Áp dụng Thay đổi', - ascending: 'Sắp xếp theo thứ tự tăng dần', - automatic: 'Tự động', - backToDashboard: 'Quay lại bảng điều khiển', - cancel: 'Hủy', - changesNotSaved: 'Thay đổi chưa được lưu lại. Bạn sẽ mất bản chỉnh sửa nếu thoát bây giờ.', - close: 'Gần', - collapse: 'Thu gọn', - collections: 'Collections', - columnToSort: 'Sắp xếp cột', - columns: 'Hiển thị cột', - confirm: 'Xác nhận', - confirmDeletion: 'Xác nhận xóa', - confirmDuplication: 'Xác nhận tạo bản sao', - copied: 'Đâ sao chép', - copy: 'Sao chép', - create: 'Tạo', - createNew: 'Tạo mới', - createNewLabel: 'Tạo mới {{label}}', - created: 'Đã tạo', - createdAt: 'Ngày tạo', - creating: 'Đang tạo', - creatingNewLabel: 'Đang tạo mới {{label}}', - dark: 'Nền tối', - dashboard: 'Bảng điều khiển', - delete: 'Xóa', - deletedCountSuccessfully: 'Đã xóa thành công {{count}} {{label}}.', - deletedSuccessfully: 'Đã xoá thành công.', - deleting: 'Đang xóa...', - descending: 'Xếp theo thứ tự giảm dần', - deselectAllRows: 'Bỏ chọn tất cả các hàng', - duplicate: 'Tạo bản sao', - duplicateWithoutSaving: 'Không lưu dữ liệu và tạo bản sao', - edit: 'Chỉnh sửa', - editLabel: 'Chỉnh sửa: {{label}}', - editing: 'Đang chỉnh sửa', - editingLabel_many: 'Đang chỉnh sửa {{count}} {{label}}', - editingLabel_one: 'Đang chỉnh sửa {{count}} {{label}}', - editingLabel_other: 'Đang chỉnh sửa {{count}} {{label}}', - email: 'Email', - emailAddress: 'Địa chỉ Email', - enterAValue: 'Nhập một giá trị', - error: 'Lỗi', - errors: 'Lỗi', - fallbackToDefaultLocale: 'Ngôn ngữ mặc định', - filter: 'Lọc', - filterWhere: 'Lọc {{label}} với điều kiện:', - filters: 'Bộ lọc', - globals: 'Toàn thể (globals)', - language: 'Ngôn ngữ', - lastModified: 'Chỉnh sửa lần cuối vào lúc', - leaveAnyway: 'Tiếp tục thoát', - leaveWithoutSaving: 'Thay đổi chưa được lưu', - light: 'Nền sáng', - livePreview: 'Xem trước', - loading: 'Đang tải', - locale: 'Ngôn ngữ', - locales: 'Khu vực', - menu: 'Thực đơn', - moveDown: 'Di chuyển xuống', - moveUp: 'Di chuyển lên', - newPassword: 'Mật khảu mới', - noFiltersSet: 'Không có bộ lọc nào được áp dụng', - noLabel: '', - noOptions: 'Không có lựa chọn', - noResults: - 'Danh sách rỗng: {{label}}. Có thể {{label}} chưa tồn tại hoặc không có dữ kiện trùng với bộ lọc hiện tại.', - noValue: 'Không có giá trị', - none: 'Không có', - notFound: 'Không tìm thấy', - nothingFound: 'Không tìm thấy', - of: 'trong số', - open: 'Mở', - or: 'hoặc', - order: 'Thứ tự', - pageNotFound: 'Không tìm thấy trang', - password: 'Mật khẩu', - payloadSettings: 'Cài đặt', - perPage: 'Hiển thị mỗi trang: {{limit}}', - remove: 'Loại bỏ', - reset: 'Đặt lại', - row: 'Hàng', - rows: 'Những hàng', - save: 'Luu', - saving: 'Đang lưu...', - searchBy: 'Tìm với {{label}}', - selectAll: 'Chọn tất cả {{count}} {{label}}', - selectAllRows: 'Chọn tất cả các hàng', - selectValue: 'Chọn một giá trị', - selectedCount: 'Đã chọn {{count}} {{label}}', - showAllLabel: 'Hiển thị tất cả {{label}}', - sorryNotFound: 'Xin lỗi, không có kết quả nào tương ứng với request của bạn.', - sort: 'Sắp xếp', - sortByLabelDirection: 'Sắp xếp theo {{label}} {{direction}}', - stayOnThisPage: 'Ở lại trang này', - submissionSuccessful: 'Gửi thành công.', - submit: 'Gửi', - successfullyCreated: '{{label}} đã được tạo thành công.', - successfullyDuplicated: '{{label}} đã được sao chép thành công.', - thisLanguage: 'Vietnamese (Tiếng Việt)', - titleDeleted: '{{label}} {{title}} đã được xóa thành công.', - unauthorized: 'Không có quyền truy cập.', - unsavedChangesDuplicate: 'Bạn chưa lưu các thay đổi. Bạn có muốn tiếp tục tạo bản sao?', - untitled: 'Chưa có tiêu đề', - updatedAt: 'Ngày cập nhật', - updatedCountSuccessfully: 'Đã cập nhật thành công {{count}} {{label}}.', - updatedSuccessfully: 'Cập nhật thành công.', - updating: 'Đang cập nhật', - uploading: 'Đang tải lên', - user: 'Người dùng', - users: 'Người dùng', - value: 'Giá trị', - welcome: 'Xin chào', - }, - operators: { - contains: 'có chứa', - equals: 'bằng', - exists: 'tồn tại', - isGreaterThan: 'lớn hơn', - isGreaterThanOrEqualTo: 'lớn hơn hoặc bằng', - isIn: 'có trong', - isLessThan: 'nhỏ hơn', - isLessThanOrEqualTo: 'nhỏ hơn hoặc bằng', - isLike: 'gần giống', - isNotEqualTo: 'không bằng', - isNotIn: 'không có trong', - near: 'gần', - }, - upload: { - crop: 'Mùa vụ', - cropToolDescription: - 'Kéo các góc của khu vực đã chọn, vẽ một khu vực mới hoặc điều chỉnh các giá trị dưới đây.', - dragAndDrop: 'Kéo và thả một tập tin', - dragAndDropHere: 'hoặc kéo và thả file vào đây', - editImage: 'Chỉnh sửa hình ảnh', - fileName: 'Tên file', - fileSize: 'Dung lượng file', - focalPoint: 'Điểm trọng tâm', - focalPointDescription: - 'Kéo điểm tiêu cực trực tiếp trên trình xem trước hoặc điều chỉnh các giá trị bên dưới.', - height: 'Chiều cao', - lessInfo: 'Hiển thị ít hơn', - moreInfo: 'Thêm', - previewSizes: 'Kích cỡ xem trước', - selectCollectionToBrowse: 'Chọn một Collection để tìm', - selectFile: 'Chọn một file', - setCropArea: 'Đặt khu vực cắt', - setFocalPoint: 'Đặt điểm tiêu điểm', - sizes: 'Các độ phân giải', - sizesFor: 'Kích thước cho {{label}}', - width: 'Chiều rộng', - }, - validation: { - emailAddress: 'Địa chỉ email không hợp lệ.', - enterNumber: 'Vui lòng nhập số.', - fieldHasNo: 'Field này không có: {{label}}', - greaterThanMax: '{{value}} lớn hơn giá trị tối đa cho phép của {{label}} là {{max}}.', - invalidInput: 'Dữ liệu nhập vào không hợp lệ.', - invalidSelection: 'Lựa chọn ở field này không hợp lệ.', - invalidSelections: "'Field này có những lựa chọn không hợp lệ sau:'", - lessThanMin: '{{value}} nhỏ hơn giá trị tối thiểu cho phép của {{label}} là {{min}}.', - limitReached: 'Đã đạt giới hạn, chỉ có thể thêm {{max}} mục.', - longerThanMin: 'Giá trị này cần có độ dài tối thiểu {{minLength}} ký tự.', - notValidDate: '"{{value}}" không phải là một ngày (date) hợp lệ.', - required: 'Field này cần được diền.', - requiresAtLeast: 'Field này cần tối thiểu {{count}} {{label}}.', - requiresNoMoreThan: 'Field này không thể vượt quá {{count}} {{label}}.', - requiresTwoNumbers: 'Field này cần tối thiểu 2 chữ số.', - shorterThanMax: 'Giá trị phải ngắn hơn hoặc bằng {{maxLength}} ký tự.', - trueOrFalse: 'Field này chỉ có thể chứa giá trị true hoặc false.', - validUploadID: "'Field này không chứa ID tải lên hợp lệ.'", - }, - version: { - aboutToPublishSelection: 'Bạn có muốn xuất bản tất cả {{label}} không?', - aboutToRestore: 'Bạn chuẩn bị khôi phục lại {{label}} về phiên bản {{versionDate}}.', - aboutToRestoreGlobal: - 'Bạn chuẩn bị khôi phục lại bản toàn thể (global) của {{label}} về phiên bản {{versionDate}}.', - aboutToRevertToPublished: 'Bạn có muốn tái xuất bản bản nháp này không?', - aboutToUnpublish: 'Bạn có muốn ngưng xuất bản?', - aboutToUnpublishSelection: 'Bạn có muốn ngưng xuất bản tất cả {{label}} không?', - autosave: 'Tự động lưu dữ liệu', - autosavedSuccessfully: 'Đã tự động lưu thành công.', - autosavedVersion: 'Các phiên bản từ việc tự động lưu dữ liệu', - changed: 'Đã thay đổi', - compareVersion: 'So sánh phiên bản này với:', - confirmPublish: 'Xác nhận xuất bản', - confirmRevertToSaved: 'Xác nhận, quay về trạng thái đã lưu', - confirmUnpublish: 'Xác nhận, ngưng xuất bản', - confirmVersionRestoration: 'Xác nhận, khôi phục về phiên bản trước', - currentDocumentStatus: 'Trạng thái tài liệu hiện tại: {{docStatus}}', - draft: 'Bản nháp', - draftSavedSuccessfully: 'Bản nháp đã được lưu thành công.', - lastSavedAgo: 'Lần lưu cuối cùng {{distance}} trước đây', - noFurtherVersionsFound: 'Không tìm thấy phiên bản cũ hơn', - noRowsFound: 'Không tìm thấy: {{label}}', - preview: 'Bản xem trước', - problemRestoringVersion: 'Đã xảy ra vấn đề khi khôi phục phiên bản này', - publish: 'Công bố', - publishChanges: 'Xuất bản tài liệu', - published: 'Đã xuất bản', - publishing: 'Xuất bản', - restoreThisVersion: 'Khôi phục về phiên bản này', - restoredSuccessfully: 'Đã khôi phục thành công.', - restoring: 'Đang khôi phục...', - revertToPublished: 'Quay về trạng thái đã xuất bản', - reverting: 'Đang về trạng thái cũ...', - saveDraft: 'Lưu bản nháp', - selectLocales: 'Chọn mã khu vực để hiện thị', - selectVersionToCompare: 'Chọn phiên bản để so sánh', - showLocales: 'Hiển thị mã khu vực:', - showingVersionsFor: 'Hiển thị các phiên bản cho:', - status: 'Trạng thái', - type: 'Loại', - unpublish: 'Ẩn tài liệu', - unpublishing: 'Đang ẩn tài liệu...', - version: 'Phiên bản', - versionCount_many: '{{count}} phiên bản được tìm thấy', - versionCount_none: 'Không có phiên bản nào được tìm thấy', - versionCount_one: '{{count}} phiên bản được tìm thấy', - versionCount_other: 'Đã tìm thấy {{count}} phiên bản', - versionCreatedOn: 'Phiên bản {{version}} được tạo vào lúc:', - versionID: 'ID của phiên bản', - versions: 'Danh sách phiên bản', - viewingVersion: 'Xem phiên bản của {{entityLabel}} {{documentTitle}}', - viewingVersionGlobal: '`Xem phiên bản toàn thể (global) của {{entityLabel}}', - viewingVersions: 'Xem những phiên bản của {{entityLabel}} {{documentTitle}}', - viewingVersionsGlobal: '`Xem những phiên bản toàn thể (global) của {{entityLabel}}', - }, -} diff --git a/packages/translations/src/all/zh.ts b/packages/translations/src/all/zh.ts deleted file mode 100644 index 65962f06a3..0000000000 --- a/packages/translations/src/all/zh.ts +++ /dev/null @@ -1,376 +0,0 @@ -export default { - authentication: { - account: '帐户', - accountOfCurrentUser: '当前用户的帐户', - alreadyActivated: '已经激活了', - alreadyLoggedIn: '已经登入了', - apiKey: 'API密钥', - backToLogin: '回到登录页面', - beginCreateFirstUser: '首先,请创建您的第一个用户。', - changePassword: '更改密码', - checkYourEmailForPasswordReset: '请查看您的电子邮件,以取得安全重置密码的链接。', - confirmGeneration: '确认生成', - confirmPassword: '确认密码', - createFirstUser: '创建第一个用户', - emailNotValid: '所提供的电子邮件时无效的', - emailSent: '电子邮件已发送', - enableAPIKey: '启用API密钥', - failedToUnlock: '解锁失败', - forceUnlock: '强制解锁', - forgotPassword: '忘记密码', - forgotPasswordEmailInstructions: - '请在下方输入您的电子邮件。您将会收到一封有关如何重置密码说明的电子邮件。', - forgotPasswordQuestion: '忘记密码?', - generate: '生成', - generateNewAPIKey: '生成新的API密钥', - generatingNewAPIKeyWillInvalidate: '生成新的API密钥将使之前的密钥<1>失效。您确定要继续吗?', - lockUntil: '锁定至', - logBackIn: '重新登入', - logOut: '登出', - loggedIn: '要使用另一个用户登录前,您需要先<0>登出。', - loggedInChangePassword: '要更改您的密码,请到您的<0>帐户页面并在那里编辑您的密码。', - loggedOutInactivity: '您由于不活跃而被登出了。', - loggedOutSuccessfully: '您已成功登出。', - login: '登录', - loginAttempts: '登录次数', - loginUser: '登录用户', - loginWithAnotherUser: '要使用另一个用户登录前,您需要先<0>登出。', - logout: '登出', - logoutUser: '登出用户', - newAPIKeyGenerated: '新的API密钥已经生成。', - newAccountCreated: - '刚刚为您创建了一个可以访问 {{serverURL}} 的新帐户 请点击以下链接或在浏览器中粘贴以下网址,以验证您的电子邮件: {{verificationURL}}
    验证您的电子邮件后,您将能够成功登录。', - newPassword: '新的密码', - resetPassword: '重置密码', - resetPasswordExpiration: '重置密码的有效期', - resetPasswordToken: '重置密码令牌', - resetYourPassword: '重置您的密码', - stayLoggedIn: '保持登录状态', - successfullyUnlocked: '已成功解锁', - unableToVerify: '无法验证', - verified: '已验证', - verifiedSuccessfully: '成功验证', - verify: '验证', - verifyUser: '验证用户', - verifyYourEmail: '验证您的电子邮件', - youAreInactive: - '您已经有一段时间没有活动了,为了您的安全,很快就会自动登出。您想保持登录状态吗?', - youAreReceivingResetPassword: - '您收到此邮件是因为您(或其他人)已请求重置您帐户的密码。请点击以下链接,或将其粘贴到您的浏览器中以完成该过程:', - youDidNotRequestPassword: '如果您没有要求这样做,请忽略这封邮件,您的密码将保持不变。', - }, - error: { - accountAlreadyActivated: '该帐户已被激活。', - autosaving: '自动保存该文件时出现了问题。', - correctInvalidFields: '请更正无效字段。', - deletingFile: '删除文件时出现了错误。', - deletingTitle: '删除{{title}}时出现了错误。请检查您的连接并重试。', - emailOrPasswordIncorrect: '提供的电子邮件或密码不正确。', - followingFieldsInvalid_one: '下面的字段是无效的:', - followingFieldsInvalid_other: '以下字段是无效的:', - incorrectCollection: '不正确的集合', - invalidFileType: '无效的文件类型', - invalidFileTypeValue: '无效的文件类型: {{value}}', - loadingDocument: '加载ID为{{id}}的文件时出现了问题。', - missingEmail: '缺少电子邮件。', - missingIDOfDocument: '缺少需要更新的文档的ID。', - missingIDOfVersion: '缺少版本的ID。', - missingRequiredData: '缺少必要的数据。', - noFilesUploaded: '没有上传文件。', - noMatchedField: '找不到与"{{label}}"匹配的字段', - noUser: '没有该用户', - notAllowedToAccessPage: '您无权访问此页面。', - notAllowedToPerformAction: '您不被允许执行此操作。', - notFound: '没有找到请求的资源。', - previewing: '预览文件时出现了问题。', - problemUploadingFile: '上传文件时出现了问题。', - tokenInvalidOrExpired: '令牌无效或已过期。', - unPublishingDocument: '取消发布此文件时出现了问题。', - unableToDeleteCount: '无法从 {{total}} {{label}} 中删除 {{count}}。', - unableToUpdateCount: '无法更新 {{count}} 个,共 {{total}} 个 {{label}}。', - unauthorized: '未经授权,您必须登录才能提出这个请求。', - unknown: '发生了一个未知的错误。', - unspecific: '发生了一个错误。', - userLocked: '该用户由于有太多次失败的登录尝试而被锁定。', - valueMustBeUnique: '值必须是唯一的', - verificationTokenInvalid: '验证令牌无效。', - }, - fields: { - addLabel: '添加{{label}}', - addLink: '添加链接', - addNew: '添加新的', - addNewLabel: '添加新的{{label}}', - addRelationship: '添加关系', - addUpload: '添加上传', - block: '区块', - blockType: '区块类型', - blocks: '区块', - chooseBetweenCustomTextOrDocument: '选择输入一个自定义的文本URL或链接到另一个文档。', - chooseDocumentToLink: '选择一个要链接的文档', - chooseFromExisting: '从现有中选择', - chooseLabel: '选择{{label}}', - collapseAll: '全部折叠', - customURL: '自定义URL', - editLabelData: '编辑{{label}}数据', - editLink: '编辑链接', - editRelationship: '编辑关系', - enterURL: '输入一个URL', - internalLink: '内部链接', - itemsAndMore: '{{items}}和{{count}}更多', - labelRelationship: '{{label}}关系', - latitude: '纬度', - linkType: '链接类型', - linkedTo: '链接到<0>{{label}}', - longitude: '经度', - newLabel: '新的{{label}}', - openInNewTab: '在新标签中打开', - passwordsDoNotMatch: '密码不匹配。', - relatedDocument: '相关文件', - relationTo: '关系到', - removeRelationship: '移除关系', - removeUpload: '移除上传', - saveChanges: '保存更改', - searchForBlock: '搜索一个区块', - selectExistingLabel: '选择现有的{{label}}', - selectFieldsToEdit: '选择要编辑的字段', - showAll: '显示全部', - swapRelationship: '交换关系', - swapUpload: '交换上传', - textToDisplay: '要显示的文本', - toggleBlock: '切换块', - uploadNewLabel: '上传新的{{label}}', - }, - general: { - aboutToDelete: '您即将删除{{label}} <1>{{title}}。您确定要继续吗?', - aboutToDeleteCount_many: '您即将删除 {{count}} {{label}}', - aboutToDeleteCount_one: '您即将删除 {{count}} {{label}}', - aboutToDeleteCount_other: '您即将删除 {{count}} {{label}}', - addBelow: '添加到下面', - addFilter: '添加过滤器', - adminTheme: '管理页面主题', - and: '和', - applyChanges: '应用更改', - ascending: '升序', - automatic: '自动', - backToDashboard: '返回到仪表板', - cancel: '取消', - changesNotSaved: '您的更改尚未保存。您确定要离开吗?', - close: '关闭', - collapse: '折叠', - collections: '集合', - columnToSort: '要排序的列', - columns: '列', - confirm: '确认', - confirmDeletion: '确认删除', - confirmDuplication: '确认重复', - copied: '已复制', - copy: '复制', - create: '创建', - createNew: '创建新的', - createNewLabel: '创建新的{{label}}', - created: '已创建', - createdAt: '创建于', - creating: '创建中', - creatingNewLabel: '正在创建新的{{label}}', - dark: '深色', - dashboard: '仪表板', - delete: '删除', - deletedCountSuccessfully: '已成功删除 {{count}} {{label}}。', - deletedSuccessfully: '已成功删除。', - deleting: '删除中...', - descending: '降序', - deselectAllRows: '取消选择所有行', - duplicate: '重复', - duplicateWithoutSaving: '重复而不保存更改。', - edit: '编辑', - editLabel: '编辑{{label}}', - editing: '编辑中', - editingLabel_many: '编辑 {{count}} {{label}}', - editingLabel_one: '编辑 {{count}} {{label}}', - editingLabel_other: '编辑 {{count}} {{label}}', - email: '电子邮件', - emailAddress: '电子邮件地址', - enterAValue: '输入一个值', - error: '错误', - errors: '错误', - fallbackToDefaultLocale: '回退到默认语言环境', - filter: '过滤器', - filterWhere: '过滤{{label}}', - filters: '过滤器', - globals: '全局', - language: '语言', - lastModified: '最后修改', - leaveAnyway: '无论如何都要离开', - leaveWithoutSaving: '离开而不保存', - light: '亮色', - livePreview: '预览', - loading: '加载中...', - locale: '语言环境', - locales: '语言环境', - menu: '菜单', - moveDown: '向下移动', - moveUp: '向上移动', - newPassword: '新密码', - noFiltersSet: '没有设置过滤器', - noLabel: '<没有{{label}}>', - noOptions: '没有选项', - noResults: '没有找到{{label}}。{{label}}并不存在或没有符合您上面所指定的过滤器。', - noValue: '没有值', - none: '无', - notFound: '未找到', - nothingFound: '没有找到任何东西', - of: '的', - open: '打开', - or: '或', - order: '排序', - pageNotFound: '未找到页面', - password: '密码', - payloadSettings: 'Payload设置', - perPage: '每一页: {{limit}}', - remove: '移除', - reset: '重置', - row: '行', - rows: '行', - save: '保存', - saving: '保存中...', - searchBy: '搜索{{label}}', - selectAll: '选择所有 {{count}} {{label}}', - selectAllRows: '选择所有行', - selectValue: '选择一个值', - selectedCount: '已选择 {{count}} {{label}}', - showAllLabel: '显示所有{{label}}', - sorryNotFound: '对不起,没有与您的请求相对应的东西。', - sort: '排序', - sortByLabelDirection: '按{{label}} {{direction}}排序', - stayOnThisPage: '停留在此页面', - submissionSuccessful: '提交成功。', - submit: '提交', - successfullyCreated: '成功创建{{label}}', - successfullyDuplicated: '成功复制{{label}}', - thisLanguage: '中文 (简体)', - titleDeleted: '{{label}} "{{title}}"已被成功删除。', - unauthorized: '未经授权', - unsavedChangesDuplicate: '您有未保存的修改。您确定要继续重复吗?', - untitled: '无标题', - updatedAt: '更新于', - updatedCountSuccessfully: '已成功更新 {{count}} {{label}}。', - updatedSuccessfully: '更新成功。', - updating: '更新中', - uploading: '上传中', - user: '用户', - users: '用户', - value: '值', - welcome: '欢迎', - }, - operators: { - contains: '包含', - equals: '等于', - exists: '存在', - isGreaterThan: '大于', - isGreaterThanOrEqualTo: '大于等于', - isIn: '在', - isLessThan: '小于', - isLessThanOrEqualTo: '小于或等于', - isLike: '就像', - isNotEqualTo: '不等于', - isNotIn: '不在', - near: '附近', - }, - upload: { - crop: '作物', - cropToolDescription: '拖动所选区域的角落,绘制一个新区域或调整以下的值。', - dragAndDrop: '拖放一个文件', - dragAndDropHere: '或在这里拖放一个文件', - editImage: '编辑图像', - fileName: '文件名', - fileSize: '文件大小', - focalPoint: '焦点', - focalPointDescription: '直接在预览中拖动焦点或调整下面的值。', - height: '高度', - lessInfo: '更少信息', - moreInfo: '更多信息', - previewSizes: '预览尺寸', - selectCollectionToBrowse: '选择一个要浏览的集合', - selectFile: '选择一个文件', - setCropArea: '设置裁剪区域', - setFocalPoint: '设置焦点', - sizes: '尺寸', - sizesFor: '{{label}}的尺寸', - width: '宽度', - }, - validation: { - emailAddress: '请输入一个有效的电子邮件地址。', - enterNumber: '请输入一个有效的号码。', - fieldHasNo: '这个字段没有{{label}}', - greaterThanMax: '{{value}}超过了允许的最大{{label}},该最大值为{{max}}。', - invalidInput: '这个字段有一个无效的输入。', - invalidSelection: '这个字段有一个无效的选择。', - invalidSelections: '这个字段有以下无效的选择:', - lessThanMin: '{{value}}小于允许的最小{{label}},该最小值为{{min}}。', - limitReached: '已达限制,只能添加{{max}}个项目。', - longerThanMin: '该值必须大于{{minLength}}字符的最小长度', - notValidDate: '"{{value}}"不是一个有效的日期。', - required: '该字段为必填项目。', - requiresAtLeast: '该字段至少需要{{count}} {{label}}。', - requiresNoMoreThan: '该字段要求不超过{{count}} {{label}。', - requiresTwoNumbers: '该字段需要两个数字。', - shorterThanMax: '该值必须小于{{maxLength}}字符的最大长度', - trueOrFalse: '该字段只能等于真或伪。', - validUploadID: '该字段不是有效的上传ID。', - }, - version: { - aboutToPublishSelection: '您即将发布所选内容中的所有 {{label}}。 你确定吗?', - aboutToRestore: '您将把这个{{label}}文档恢复到{{versionDate}}时的状态', - aboutToRestoreGlobal: '您要将全局的{{label}}恢复到{{versionDate}}时的状态', - aboutToRevertToPublished: '您将要把这个文档的内容还原到它的发布状态。您确定吗?', - aboutToUnpublish: '你即将取消发布这个文档。你确定吗?', - aboutToUnpublishSelection: '您即将取消发布所选内容中的所有 {{label}}。 你确定吗?', - autosave: '自动保存', - autosavedSuccessfully: '自动保存成功。', - autosavedVersion: '自动保存的版本', - changed: '已更改', - compareVersion: '对比版本:', - confirmPublish: '确认发布', - confirmRevertToSaved: '确认恢复到保存状态', - confirmUnpublish: '确认取消发布', - confirmVersionRestoration: '确认版本恢复', - currentDocumentStatus: '当前{{docStatus}}文件', - draft: '草稿', - draftSavedSuccessfully: '草稿成功保存。', - lastSavedAgo: '上次保存{{distance}}之前', - noFurtherVersionsFound: '没有发现其他版本', - noRowsFound: '没有发现{{label}}', - preview: '预览', - problemRestoringVersion: '恢复这个版本时发生了问题', - publish: '发布', - publishChanges: '发布修改', - published: '已发布', - publishing: '发布', - restoreThisVersion: '恢复此版本', - restoredSuccessfully: '恢复成功。', - restoring: '恢复中...', - revertToPublished: '还原到已发布的版本', - reverting: '还原中...', - saveDraft: '保存草稿', - selectLocales: '选择要显示的语言', - selectVersionToCompare: '选择要比较的版本', - showLocales: '显示语言:', - showingVersionsFor: '显示版本为:', - status: '状态', - type: '类型', - unpublish: '取消发布', - unpublishing: '取消发布中...', - version: '版本', - versionCount_many: '发现{{count}}版本', - versionCount_none: '没有发现任何版本', - versionCount_one: '找到{{count}}版本', - versionCount_other: '找到{{count}}版本', - versionCreatedOn: '{{version}}创建于:', - versionID: '版本ID', - versions: '版本', - viewingVersion: '正在查看{{entityLabel}} {{documentTitle}}的版本', - viewingVersionGlobal: '正在查看全局{{entityLabel}}的版本', - viewingVersions: '正在查看{{entityLabel}} {{documentTitle}}的版本', - viewingVersionsGlobal: '正在查看全局{{entityLabel}}的版本', - }, -} diff --git a/packages/translations/src/all/zhTW.ts b/packages/translations/src/all/zhTW.ts deleted file mode 100644 index 7afb6f1f9a..0000000000 --- a/packages/translations/src/all/zhTW.ts +++ /dev/null @@ -1,376 +0,0 @@ -export default { - authentication: { - account: '帳戶', - accountOfCurrentUser: '目前使用者的帳戶', - alreadyActivated: '已經啟用了', - alreadyLoggedIn: '已經登入了', - apiKey: 'API金鑰', - backToLogin: '返回登入頁面', - beginCreateFirstUser: '首先,請建立您的第一個使用者。', - changePassword: '更改密碼', - checkYourEmailForPasswordReset: '請檢查您的電子郵件以獲取安全重設密碼的連結。', - confirmGeneration: '確認生成', - confirmPassword: '確認密碼', - createFirstUser: '建立第一個使用者', - emailNotValid: '提供的電子郵件無效', - emailSent: '電子郵件已寄出', - enableAPIKey: '啟用API金鑰', - failedToUnlock: '解鎖失敗', - forceUnlock: '強制解鎖', - forgotPassword: '忘記密碼', - forgotPasswordEmailInstructions: - '請在下方輸入您的電子郵件。您將收到一封有關如何重設密碼的說明電子郵件。', - forgotPasswordQuestion: '忘記密碼?', - generate: '生成', - generateNewAPIKey: '生成新的API金鑰', - generatingNewAPIKeyWillInvalidate: '生成新的API金鑰將使之前的金鑰<1>失效。您確定要繼續嗎?', - lockUntil: '鎖定直到', - logBackIn: '重新登入', - logOut: '登出', - loggedIn: '要使用另一個使用者登入前,您需要先<0>登出。', - loggedInChangePassword: '要更改您的密碼,請前往您的<0>帳戶頁面並在那裡編輯您的密碼。', - loggedOutInactivity: '您由於不活躍而被登出了。', - loggedOutSuccessfully: '您已成功登出。', - login: '登入', - loginAttempts: '登入次數', - loginUser: '登入使用者', - loginWithAnotherUser: '要使用另一個使用者登入前,您需要先<0>登出。', - logout: '登出', - logoutUser: '登出使用者', - newAPIKeyGenerated: '新的API金鑰已生成。', - newAccountCreated: - '剛剛為您建立了一個可以存取 {{serverURL}} 的新帳戶。請點擊以下連結或在瀏覽器中貼上以下網址以驗證您的電子郵件:{{verificationURL}}
    驗證您的電子郵件後,您將能夠成功登入。', - newPassword: '新的密碼', - resetPassword: '重設密碼', - resetPasswordExpiration: '重設密碼的有效期', - resetPasswordToken: '重設密碼令牌', - resetYourPassword: '重設您的密碼', - stayLoggedIn: '保持登入狀態', - successfullyUnlocked: '已成功解鎖', - unableToVerify: '無法驗證', - verified: '已驗證', - verifiedSuccessfully: '成功驗證', - verify: '驗證', - verifyUser: '驗證使用者', - verifyYourEmail: '驗證您的電子郵件', - youAreInactive: - '您已經有一段時間沒有活動了,為了您的安全,很快就會自動登出。您想保持登入狀態嗎?', - youAreReceivingResetPassword: - '您收到此郵件是因為您(或其他人)已請求重設您帳戶的密碼。請點擊以下連結,或將其貼上到您的瀏覽器中以完成該過程:', - youDidNotRequestPassword: '如果您沒有要求這樣做,請忽略這封郵件,您的密碼將保持不變。', - }, - error: { - accountAlreadyActivated: '該帳戶已被啟用。', - autosaving: '自動儲存該文件時出現了問題。', - correctInvalidFields: '請更正無效區塊。', - deletingFile: '刪除文件時出現了錯誤。', - deletingTitle: '刪除{{title}}時出現了錯誤。請檢查您的網路連線並重試。', - emailOrPasswordIncorrect: '提供的電子郵件或密碼不正確。', - followingFieldsInvalid_one: '下面的字串是無效的:', - followingFieldsInvalid_other: '以下字串是無效的:', - incorrectCollection: '不正確的集合', - invalidFileType: '無效的文件類型', - invalidFileTypeValue: '無效的文件類型: {{value}}', - loadingDocument: '加載ID為{{id}}的文件時出現了問題。', - missingEmail: '缺少電子郵件。', - missingIDOfDocument: '缺少需要更新的文檔的ID。', - missingIDOfVersion: '缺少版本的ID。', - missingRequiredData: '缺少必要的數據。', - noFilesUploaded: '沒有上傳文件。', - noMatchedField: '找不到與"{{label}}"匹配的字串', - noUser: '沒有該使用者', - notAllowedToAccessPage: '您沒有權限訪問此頁面。', - notAllowedToPerformAction: '您不被允許執行此操作。', - notFound: '沒有找到請求的資源。', - previewing: '預覽文件時出現了問題。', - problemUploadingFile: '上傳文件時出現了問題。', - tokenInvalidOrExpired: '令牌無效或已過期。', - unPublishingDocument: '取消發布此文件時出現了問題。', - unableToDeleteCount: '無法從 {{total}} 個中刪除 {{count}} 個 {{label}}。', - unableToUpdateCount: '無法從 {{total}} 個中更新 {{count}} 個 {{label}}。', - unauthorized: '未經授權,您必須登錄才能提出這個請求。', - unknown: '發生了一個未知的錯誤。', - unspecific: '發生了一個錯誤。', - userLocked: '該使用者由於有太多次失敗的登錄嘗試而被鎖定。', - valueMustBeUnique: '數值必須是唯一的', - verificationTokenInvalid: '驗證令牌無效。', - }, - fields: { - addLabel: '新增{{label}}', - addLink: '新增連結', - addNew: '新增', - addNewLabel: '新增{{label}}', - addRelationship: '新增關聯', - addUpload: '上傳', - block: '區塊', - blockType: '區塊類型', - blocks: '區塊', - chooseBetweenCustomTextOrDocument: '選擇自定義文件或連結到另一個文件。', - chooseDocumentToLink: '選擇要連結的文件', - chooseFromExisting: '從現有的選擇', - chooseLabel: '選擇{{label}}', - collapseAll: '全部折疊', - customURL: '自定義連結', - editLabelData: '編輯{{label}}資料', - editLink: '編輯連結', - editRelationship: '編輯關聯', - enterURL: '輸入連結', - internalLink: '內部連結', - itemsAndMore: '{{items}} 個,還有 {{count}} 個', - labelRelationship: '{{label}}關聯', - latitude: '緯度', - linkType: '連結類型', - linkedTo: '連結到<0>{{label}}', - longitude: '經度', - newLabel: '新的{{label}}', - openInNewTab: '在新標籤中打開', - passwordsDoNotMatch: '密碼不匹配。', - relatedDocument: '相關文件', - relationTo: '關聯到', - removeRelationship: '移除關聯', - removeUpload: '移除上傳', - saveChanges: '儲存變更', - searchForBlock: '搜尋一個區塊', - selectExistingLabel: '選擇現有的{{label}}', - selectFieldsToEdit: '選擇要編輯的字串', - showAll: '顯示全部', - swapRelationship: '替換關聯', - swapUpload: '替換上傳', - textToDisplay: '要顯示的文字', - toggleBlock: '切換區塊', - uploadNewLabel: '上傳新的{{label}}', - }, - general: { - aboutToDelete: '您即將刪除{{label}} <1>{{title}}。您確定要繼續嗎?', - aboutToDeleteCount_many: '您即將刪除 {{count}} 個 {{label}}', - aboutToDeleteCount_one: '您即將刪除 {{count}} 個 {{label}}', - aboutToDeleteCount_other: '您即將刪除 {{count}} 個 {{label}}', - addBelow: '新增到下方', - addFilter: '新增過濾器', - adminTheme: '管理頁面主題', - and: '和', - applyChanges: '套用更改', - ascending: '升冪', - automatic: '自動', - backToDashboard: '返回到控制面板', - cancel: '取消', - changesNotSaved: '您還有尚未儲存的變更。您確定要離開嗎?', - close: '關閉', - collapse: '折疊', - collections: '集合', - columnToSort: '要排序的欄位', - columns: '欄位', - confirm: '確認', - confirmDeletion: '確認刪除', - confirmDuplication: '確認複製', - copied: '已複製', - copy: '複製', - create: '建立', - createNew: '建立新的', - createNewLabel: '建立新的{{label}}', - created: '已建立', - createdAt: '建立於', - creating: '建立中', - creatingNewLabel: '正在建立新的{{label}}', - dark: '深色', - dashboard: '控制面板', - delete: '刪除', - deletedCountSuccessfully: '已成功刪除 {{count}} 個 {{label}}。', - deletedSuccessfully: '已成功刪除。', - deleting: '刪除中...', - descending: '降冪', - deselectAllRows: '取消選擇全部', - duplicate: '複製', - duplicateWithoutSaving: '複製而不儲存變更。', - edit: '編輯', - editLabel: '編輯{{label}}', - editing: '編輯中', - editingLabel_many: '編輯 {{count}} 個 {{label}}', - editingLabel_one: '編輯 {{count}} 個 {{label}}', - editingLabel_other: '編輯 {{count}} 個 {{label}}', - email: '電子郵件', - emailAddress: '電子郵件地址', - enterAValue: '輸入一個值', - error: '錯誤', - errors: '錯誤', - fallbackToDefaultLocale: '回到預設的語言', - filter: '過濾器', - filterWhere: '過濾{{label}}', - filters: '過濾器', - globals: '全域', - language: '語言', - lastModified: '最後修改', - leaveAnyway: '無論如何都要離開', - leaveWithoutSaving: '不儲存直接離開', - light: '亮色', - livePreview: '預覽', - loading: '載入中...', - locale: '語言環境', - locales: '語言環境', - menu: '菜單', - moveDown: '向下移動', - moveUp: '向上移動', - newPassword: '新密碼', - noFiltersSet: '沒有設定過濾器', - noLabel: '<沒有{{label}}>', - noOptions: '沒有選項', - noResults: '沒有找到{{label}}。{{label}}並不存在或沒有符合您上面所指定的過濾器。', - noValue: '沒有數值', - none: '無', - notFound: '未找到', - nothingFound: '沒有找到任何東西', - of: '的', - open: '打開', - or: '或', - order: '排序', - pageNotFound: '未找到頁面', - password: '密碼', - payloadSettings: 'Payload設定', - perPage: '每一頁: {{limit}} 個', - remove: '移除', - reset: '重設', - row: '行', - rows: '行', - save: '儲存', - saving: '儲存中...', - searchBy: '搜尋{{label}}', - selectAll: '選擇所有 {{count}} 個 {{label}}', - selectAllRows: '選擇所有行', - selectValue: '選擇一個值', - selectedCount: '已選擇 {{count}} 個 {{label}}', - showAllLabel: '顯示所有{{label}}', - sorryNotFound: '對不起,沒有找到您請求的東西。', - sort: '排序', - sortByLabelDirection: '按{{label}} {{direction}}排序', - stayOnThisPage: '停留在此頁面', - submissionSuccessful: '成功送出。', - submit: '送出', - successfullyCreated: '成功建立{{label}}', - successfullyDuplicated: '成功複製{{label}}', - thisLanguage: '中文 (繁體)', - titleDeleted: '{{label}} "{{title}}"已被成功刪除。', - unauthorized: '未經授權', - unsavedChangesDuplicate: '您有還沒儲存的修改,確定要繼續複製嗎?', - untitled: '無標題', - updatedAt: '更新於', - updatedCountSuccessfully: '已成功更新 {{count}} 個 {{label}}。', - updatedSuccessfully: '更新成功。', - updating: '更新中', - uploading: '上傳中', - user: '使用者', - users: '使用者', - value: '值', - welcome: '歡迎', - }, - operators: { - contains: '包含', - equals: '等於', - exists: '存在', - isGreaterThan: '大於', - isGreaterThanOrEqualTo: '大於等於', - isIn: '在', - isLessThan: '小於', - isLessThanOrEqualTo: '小於或等於', - isLike: '就像', - isNotEqualTo: '不等於', - isNotIn: '不在', - near: '附近', - }, - upload: { - crop: '裁剪', - cropToolDescription: '拖動所選區域的角落,繪製一個新區域或調整以下的值。', - dragAndDrop: '拖放一個檔案', - dragAndDropHere: '或在這裡拖放一個檔案', - editImage: '編輯圖像', - fileName: '檔案名稱', - fileSize: '檔案大小', - focalPoint: '焦點', - focalPointDescription: '直接在預覽中拖動焦點或調整下面的值。', - height: '高度', - lessInfo: '更少資訊', - moreInfo: '更多資訊', - previewSizes: '預覽尺寸', - selectCollectionToBrowse: '選擇一個要瀏覽的集合', - selectFile: '選擇一個文件', - setCropArea: '設置裁剪區域', - setFocalPoint: '設置焦點', - sizes: '尺寸', - sizesFor: '{{label}}的尺寸', - width: '寬度', - }, - validation: { - emailAddress: '請輸入一個有效的電子郵件地址。', - enterNumber: '請輸入一個有效的數字。', - fieldHasNo: '這個字串沒有{{label}}', - greaterThanMax: '{{value}}超過了允許的最大{{label}},該最大值為{{max}}。', - invalidInput: '這個字串有一個無效的輸入。', - invalidSelection: '這個字串有一個無效的選擇。', - invalidSelections: '這個字串有以下無效的選擇:', - lessThanMin: '{{value}}小於允許的最小{{label}},該最小值為{{min}}。', - limitReached: '已達限制,只能添加{{max}}個項目。', - longerThanMin: '該值必須大於{{minLength}}字串的最小長度', - notValidDate: '"{{value}}"不是一個有效的日期。', - required: '該字串為必填項目。', - requiresAtLeast: '該字串至少需要 {{count}} 個 {{label}}。', - requiresNoMoreThan: '該字串要求不超過 {{count}} 個 {{label}。', - requiresTwoNumbers: '該字串需要兩個數字。', - shorterThanMax: '該值長度必須小於{{maxLength}}個字元', - trueOrFalse: '該字串只能等於是或否。', - validUploadID: '該字串不是有效的上傳ID。', - }, - version: { - aboutToPublishSelection: '您確定即將發佈所選的 {{label}} 嗎?', - aboutToRestore: '您將把這個文件{{label}}回復到{{versionDate}}時的狀態', - aboutToRestoreGlobal: '您要將痊域的{{label}}回復到{{versionDate}}時的狀態', - aboutToRevertToPublished: '您將要將這個文件的內容還原到它的發佈狀態。您確定嗎?', - aboutToUnpublish: '您即將取消發佈這個文件。您確定嗎?', - aboutToUnpublishSelection: '您即將取消發佈所選內容中的所有 {{label}}。您確定嗎?', - autosave: '自動儲存', - autosavedSuccessfully: '自動儲存成功。', - autosavedVersion: '自動儲存的版本', - changed: '已更改', - compareVersion: '對比版本:', - confirmPublish: '確認發佈', - confirmRevertToSaved: '確認回復到儲存狀態', - confirmUnpublish: '確認取消發佈', - confirmVersionRestoration: '確認版本回復', - currentDocumentStatus: '目前{{docStatus}}文件', - draft: '草稿', - draftSavedSuccessfully: '草稿儲存成功。', - lastSavedAgo: '上次儲存在{{distance}}之前', - noFurtherVersionsFound: '沒有發現其他版本', - noRowsFound: '沒有發現{{label}}', - preview: '預覽', - problemRestoringVersion: '回復這個版本時發生了問題', - publish: '發佈', - publishChanges: '發佈修改', - published: '已發佈', - publishing: '發布', - restoreThisVersion: '回復此版本', - restoredSuccessfully: '回復成功。', - restoring: '回復中...', - revertToPublished: '還原到已發佈的版本', - reverting: '還原中...', - saveDraft: '儲存草稿', - selectLocales: '選擇要顯示的語言', - selectVersionToCompare: '選擇要比較的版本', - showLocales: '顯示語言:', - showingVersionsFor: '顯示版本為:', - status: '狀態', - type: '類型', - unpublish: '取消發佈', - unpublishing: '取消發佈中...', - version: '版本', - versionCount_many: '發現 {{count}}個版本', - versionCount_none: '沒有發現任何版本', - versionCount_one: '找到 {{count}} 個版本', - versionCount_other: '找到 {{count}} 個版本', - versionCreatedOn: '版本 {{version}} 建立於:', - versionID: '版本ID', - versions: '版本', - viewingVersion: '正在查看{{entityLabel}} {{documentTitle}}的版本', - viewingVersionGlobal: '正在查看全域{{entityLabel}}的版本', - viewingVersions: '正在查看{{entityLabel}} {{documentTitle}}的版本', - viewingVersionsGlobal: '正在查看全域{{entityLabel}}的版本', - }, -} diff --git a/packages/translations/writeTranslationFiles.ts b/packages/translations/src/clientKeys.ts similarity index 55% rename from packages/translations/writeTranslationFiles.ts rename to packages/translations/src/clientKeys.ts index a1d001ce7b..d2e8a57920 100644 --- a/packages/translations/writeTranslationFiles.ts +++ b/packages/translations/src/clientKeys.ts @@ -1,100 +1,4 @@ -/* eslint-disable no-console */ -import { exec } from 'child_process' -import * as fs from 'fs' -import * as path from 'path' -import { fileURLToPath } from 'url' - -import { translations } from './src/all/index.js' -import { copyFile } from './src/utilities/copyFile.js' -import { ensureDirectoryExists } from './src/utilities/ensureDirExists.js' - -const filename = fileURLToPath(import.meta.url) -const dirname = path.dirname(filename) - -const serverTranslationKeys = [ - 'authentication:account', - 'authentication:api', - 'authentication:apiKey', - 'authentication:enableAPIKey', - 'authentication:newAccountCreated', - 'authentication:resetYourPassword', - 'authentication:verifyYourEmail', - 'authentication:youAreReceivingResetPassword', - 'authentication:loggedInChangePassword', - 'authentication:youDidNotRequestPassword', - 'authentication:verified', - - 'fields:textToDisplay', - 'fields:linkType', - 'fields:chooseBetweenCustomTextOrDocument', - 'fields:customURL', - 'fields:internalLink', - 'fields:enterURL', - 'fields:chooseDocumentToLink', - 'fields:openInNewTab', - - 'general:copy', - 'general:createdAt', - 'general:deletedCountSuccessfully', - 'general:deletedSuccessfully', - 'general:email', - 'general:notFound', - 'general:successfullyCreated', - 'general:successfullyDuplicated', - 'general:thisLanguage', - 'general:user', - 'general:users', - 'general:updatedAt', - 'general:updatedSuccessfully', - 'general:updatedCountSuccessfully', - 'general:value', - 'general:row', - 'general:rows', - - 'error:deletingFile', - 'error:emailOrPasswordIncorrect', - 'error:followingFieldsInvalid', - 'error:noFilesUploaded', - 'error:notAllowedToPerformAction', - 'error:problemUploadingFile', - 'error:unableToDeleteCount', - 'error:unableToUpdateCount', - 'error:unauthorized', - 'error:userLocked', - 'error:valueMustBeUnique', - - 'upload:width', - 'upload:height', - 'upload:fileSize', - 'upload:fileName', - 'upload:sizes', - - 'validation:emailAddress', - 'validation:enterNumber', - 'validation:greaterThanMax', - 'validation:invalidInput', - 'validation:invalidSelection', - 'validation:invalidSelections', - 'validation:lessThanMin', - 'validation:longerThanMin', - 'validation:notValidDate', - 'validation:required', - 'validation:requiresAtLeast', - 'validation:requiresNoMoreThan', - 'validation:requiresTwoNumbers', - 'validation:shorterThanMax', - 'validation:trueOrFalse', - 'validation:validUploadID', - - 'version:autosavedSuccessfully', - 'version:draftSavedSuccessfully', - 'version:restoredSuccessfully', - 'version:draft', - 'version:published', - 'version:status', -] - -const clientTranslationKeys = [ +export const clientTranslationKeys = [ 'authentication:account', 'authentication:accountOfCurrentUser', 'authentication:alreadyActivated', @@ -102,6 +6,7 @@ const clientTranslationKeys = [ 'authentication:backToLogin', 'authentication:beginCreateFirstUser', 'authentication:changePassword', + 'authentication:checkYourEmailForPasswordReset', 'authentication:confirmGeneration', 'authentication:confirmPassword', 'authentication:createFirstUser', @@ -156,6 +61,9 @@ const clientTranslationKeys = [ 'fields:block', 'fields:blocks', 'fields:blockType', + 'fields:chooseBetweenCustomTextOrDocument', + 'fields:customURL', + 'fields:internalLink', 'fields:chooseFromExisting', 'fields:collapseAll', 'fields:editLink', @@ -276,6 +184,8 @@ const clientTranslationKeys = [ 'general:successfullyDeleted', 'general:thisLanguage', 'general:titleDeleted', + 'general:users', + 'general:user', 'general:unauthorized', 'general:unsavedChangesDuplicate', 'general:untitled', @@ -313,10 +223,13 @@ const clientTranslationKeys = [ 'upload:sizesFor', 'upload:width', + 'validation:emailAddress', 'validation:fieldHasNo', 'validation:limitReached', + 'validation:longerThanMin', 'validation:required', 'validation:requiresAtLeast', + 'validation:shorterThanMax', 'version:aboutToPublishSelection', 'version:aboutToRestore', @@ -364,117 +277,3 @@ const clientTranslationKeys = [ 'version:viewingVersions', 'version:viewingVersionsGlobal', ] - -const DESTINATION_ROOT = './src/_generatedFiles_' -const SOURCE_DIR = './src/all' - -function filterKeys(obj, parentGroupKey = '', keys) { - const result = {} - - for (const [namespaceKey, value] of Object.entries(obj)) { - // Skip $schema key - if (namespaceKey === '$schema') { - result[namespaceKey] = value - continue - } - - if (typeof value === 'object') { - const filteredObject = filterKeys(value, namespaceKey, keys) - if (Object.keys(filteredObject).length > 0) { - result[namespaceKey] = filteredObject - } - } else { - for (const key of keys) { - const [groupKey, selector] = key.split(':') - - if (parentGroupKey === groupKey) { - if (namespaceKey === selector) { - result[selector] = value - } else { - const pluralKeys = ['zero', 'one', 'two', 'few', 'many', 'other'] - pluralKeys.forEach((pluralKey) => { - if (namespaceKey === `${selector}_${pluralKey}`) { - result[`${selector}_${pluralKey}`] = value - } - }) - } - } - } - } - } - - return result -} - -function sortObject(obj) { - const sortedObject = {} - Object.keys(obj) - .sort() - .forEach((key) => { - if (typeof obj[key] === 'object') { - sortedObject[key] = sortObject(obj[key]) - } else { - sortedObject[key] = obj[key] - } - }) - return sortedObject -} - -function build() { - return new Promise((resolve, reject) => { - ensureDirectoryExists(path.resolve(dirname, `${DESTINATION_ROOT}/client`)) - ensureDirectoryExists(path.resolve(dirname, `${DESTINATION_ROOT}/api`)) - - try { - // build up the client and server translation files - for (const [locale, values] of Object.entries(translations)) { - const dest1 = path.resolve(dirname, `${DESTINATION_ROOT}/client/${locale}.js`) - - const clientTranslations = sortObject(filterKeys(values, '', clientTranslationKeys)) - - fs.writeFileSync(dest1, 'export default ' + JSON.stringify(clientTranslations, null, 2), { - flag: 'w+', - }) - - const serverTranslations = sortObject(filterKeys(values, '', serverTranslationKeys)) - const dest2 = path.resolve(dirname, `${DESTINATION_ROOT}/api/${locale}.js`) - - fs.writeFileSync(dest2, 'export default ' + JSON.stringify(serverTranslations, null, 2), { - flag: 'w+', - }) - - console.info('Rebuilt:', filename) - } - - // Copy barrel file to both client and api folders - copyFile( - path.resolve(dirname, `${SOURCE_DIR}/index.ts`), - path.resolve(dirname, `${DESTINATION_ROOT}/api/index.ts`), - ) - copyFile( - path.resolve(dirname, `${SOURCE_DIR}/index.ts`), - path.resolve(dirname, `${DESTINATION_ROOT}/client/index.ts`), - ) - - // Run prettier from CLI so that files pass the pre-commit hook: - console.info('Running prettier...') - exec('prettier --write "**/*.js"', (err, stdout) => { - if (err) { - console.error(err) - } else { - console.info(stdout) - } - }) - } catch (error) { - reject(error) - } - }) -} - -build() - .then(() => { - console.log('Built client and api translation files.') - }) - .catch((error) => { - console.error('Error occurred:', error) - }) diff --git a/packages/translations/src/exports/all.ts b/packages/translations/src/exports/all.ts new file mode 100644 index 0000000000..4e6b32043c --- /dev/null +++ b/packages/translations/src/exports/all.ts @@ -0,0 +1,65 @@ +import type { SupportedLanguages } from '../types.js' + +import { ar } from '../languages/ar.js' +import { az } from '../languages/az.js' +import { bg } from '../languages/bg.js' +import { cs } from '../languages/cs.js' +import { de } from '../languages/de.js' +import { en } from '../languages/en.js' +import { es } from '../languages/es.js' +import { fa } from '../languages/fa.js' +import { fr } from '../languages/fr.js' +import { hr } from '../languages/hr.js' +import { hu } from '../languages/hu.js' +import { it } from '../languages/it.js' +import { ja } from '../languages/ja.js' +import { ko } from '../languages/ko.js' +import { my } from '../languages/my.js' +import { nb } from '../languages/nb.js' +import { nl } from '../languages/nl.js' +import { pl } from '../languages/pl.js' +import { pt } from '../languages/pt.js' +import { ro } from '../languages/ro.js' +import { rs } from '../languages/rs.js' +import { rsLatin } from '../languages/rsLatin.js' +import { ru } from '../languages/ru.js' +import { sv } from '../languages/sv.js' +import { th } from '../languages/th.js' +import { tr } from '../languages/tr.js' +import { uk } from '../languages/uk.js' +import { vi } from '../languages/vi.js' +import { zh } from '../languages/zh.js' +import { zhTw } from '../languages/zhTw.js' + +export const translations = { + ar, + az, + bg, + cs, + de, + en, + es, + fa, + fr, + hr, + hu, + it, + ja, + ko, + my, + nb, + nl, + pl, + pt, + ro, + rs, + 'rs-latin': rsLatin, + ru, + sv, + th, + tr, + uk, + vi, + zh, + 'zh-TW': zhTw, +} as SupportedLanguages diff --git a/packages/translations/src/exports/index.ts b/packages/translations/src/exports/index.ts index fad56a8502..416cec3c0d 100644 --- a/packages/translations/src/exports/index.ts +++ b/packages/translations/src/exports/index.ts @@ -1,3 +1,5 @@ +export { importDateFNSLocale } from '../importDateFNSLocale.js' export { getTranslation } from '../utilities/getTranslation.js' -export { initI18n, matchLanguage, t } from '../utilities/init.js' +export { initI18n, t } from '../utilities/init.js' +export { acceptedLanguages, extractHeaderLanguage, rtlLanguages } from '../utilities/languages.js' export type * from '../types.js' diff --git a/packages/translations/src/importDateFNSLocale.ts b/packages/translations/src/importDateFNSLocale.ts new file mode 100644 index 0000000000..7dad7fcc53 --- /dev/null +++ b/packages/translations/src/importDateFNSLocale.ts @@ -0,0 +1,120 @@ +import type { Locale } from 'date-fns' + +export const importDateFNSLocale = async (locale: string): Promise => { + let result + + switch (locale) { + case 'ar': + result = await import('date-fns/locale/ar') + + break + case 'az': + result = await import('date-fns/locale/az') + + break + case 'bg': + result = await import('date-fns/locale/bg') + + break + case 'cs': + result = await import('date-fns/locale/cs') + + break + case 'de': + result = await import('date-fns/locale/de') + + break + case 'en-US': + result = await import('date-fns/locale/en-US') + + break + case 'es': + result = await import('date-fns/locale/es') + + break + case 'fa-IR': + result = await import('date-fns/locale/fa-IR') + + break + case 'fr': + result = await import('date-fns/locale/fr') + + break + case 'hr': + result = await import('date-fns/locale/hr') + + break + case 'hu': + result = await import('date-fns/locale/hu') + + break + case 'it': + result = await import('date-fns/locale/it') + + break + case 'ja': + result = await import('date-fns/locale/ja') + + break + case 'ko': + result = await import('date-fns/locale/ko') + + break + case 'nb': + result = await import('date-fns/locale/nb') + + break + case 'nl': + result = await import('date-fns/locale/nl') + + break + case 'pl': + result = await import('date-fns/locale/pl') + + break + case 'pt': + result = await import('date-fns/locale/pt') + + break + case 'ro': + result = await import('date-fns/locale/ro') + + break + case 'ru': + result = await import('date-fns/locale/ru') + + break + case 'sv': + result = await import('date-fns/locale/sv') + + break + case 'th': + result = await import('date-fns/locale/th') + + break + case 'tr': + result = await import('date-fns/locale/tr') + + break + case 'uk': + result = await import('date-fns/locale/uk') + + break + case 'vi': + result = await import('date-fns/locale/vi') + + break + case 'zh-CN': + result = await import('date-fns/locale/zh-CN') + + break + case 'zh-TW': + result = await import('date-fns/locale/zh-TW') + + break + } + + if (result.default) return result.default + + return result as Locale +} diff --git a/packages/translations/src/languages/ar.ts b/packages/translations/src/languages/ar.ts new file mode 100644 index 0000000000..4ed5cf375c --- /dev/null +++ b/packages/translations/src/languages/ar.ts @@ -0,0 +1,391 @@ +import type { Language } from '../types.js' + +export const ar: Language = { + dateFNSKey: 'ar', + translations: { + authentication: { + account: 'الحساب', + accountOfCurrentUser: 'حساب المستخدم الحالي', + alreadyActivated: 'تمّ التّفعيل بالفعل', + alreadyLoggedIn: 'تمّ تسجيل الدّخول بالفعل', + apiKey: 'مفتاح API', + backToLogin: 'العودة لتسجيل الدخول', + beginCreateFirstUser: 'للبدء, قم بإنشاء المستخدم الأوّل.', + changePassword: 'تغيير كلمة المرور', + checkYourEmailForPasswordReset: + 'تحقّق من بريدك الإلكتروني بحثًا عن رابط يسمح لك بإعادة تعيين كلمة المرور الخاصّة بك بشكل آمن.', + confirmGeneration: 'تأكيد التّوليد', + confirmPassword: 'تأكيد كلمة المرور', + createFirstUser: 'إنشاء المستخدم الأوّل', + emailNotValid: 'البريد الإلكتروني غير صالح', + emailSent: 'تمّ ارسال البريد الإلكتروني', + enableAPIKey: 'تفعيل مفتاح API', + failedToUnlock: 'فشل فتح القفل', + forceUnlock: 'إجبار فتح القفل', + forgotPassword: 'نسيت كلمة المرور', + forgotPasswordEmailInstructions: + 'يرجى إدخال البريد الالكتروني أدناه. ستتلقّى رسالة بريد إلكتروني تحتوي على إرشادات حول كيفيّة إعادة تعيين كلمة المرور الخاصّة بك.', + forgotPasswordQuestion: 'هل نسيت كلمة المرور؟', + generate: 'توليد', + generateNewAPIKey: 'توليد مفتاح API جديد', + generatingNewAPIKeyWillInvalidate: + 'سيؤدّي إنشاء مفتاح API جديد إلى <1> إبطال المفتاح السّابق. هل أنت متأكّد أنّك تريد المتابعة؟', + lockUntil: 'قفل حتى', + logBackIn: 'تسجيل الدّخول من جديد', + logOut: 'تسجيل الخروج', + loggedIn: 'لتسجيل الدّخول مع مستخدم آخر ، يجب عليك <0> تسجيل الخروج أوّلاً.', + loggedInChangePassword: + 'لتغيير كلمة المرور الخاصّة بك ، انتقل إلى <0>حسابك وقم بتعديل كلمة المرور هناك.', + loggedOutInactivity: 'لقد تمّ تسجيل الخروج بسبب عدم النّشاط.', + loggedOutSuccessfully: 'لقد تمّ تسجيل خروجك بنجاح.', + login: 'تسجيل الدخول', + loginAttempts: 'محاولات تسجيل الدخول', + loginUser: 'تسجيل دخول المستخدم', + loginWithAnotherUser: 'لتسجيل الدخول مع مستخدم آخر ، يجب عليك <0> تسجيل الخروج أوّلاً.', + logout: 'تسجيل الخروج', + logoutUser: 'تسجيل خروج المستخدم', + newAPIKeyGenerated: 'تمّ توليد مفتاح API جديد.', + newAccountCreated: + 'تمّ إنشاء حساب جديد لتتمكّن من الوصول إلى {{serverURL}} الرّجاء النّقر فوق الرّابط التّالي أو لصق عنوان URL أدناه في متصفّحّك لتأكيد بريدك الإلكتروني : {{verificationURL}}
    بعد التّحقّق من بريدك الإلكتروني ، ستتمكّن من تسجيل الدّخول بنجاح.', + newPassword: 'كلمة مرور جديدة', + resetPassword: 'إعادة تعيين كلمة المرور', + resetPasswordExpiration: 'انتهاء صلاحيّة إعادة تعيين كلمة المرور', + resetPasswordToken: 'رمز إعادة تعيين كلمة المرور', + resetYourPassword: 'إعادة تعيين كلمة المرور الخاصّة بك', + stayLoggedIn: 'ابق متّصلًا', + successfullyUnlocked: 'تمّ فتح القفل بنجاح', + unableToVerify: 'غير قادر على التحقق من', + verified: 'تمّ التحقّق', + verifiedSuccessfully: 'تمّ التحقّق بنجاح', + verify: 'قم بالتّحقّق', + verifyUser: 'قم بالتّحقّق من المستخدم', + verifyYourEmail: 'قم بتأكيد بريدك الألكتروني', + youAreInactive: + 'لم تكن نشطًا منذ فترة قصيرة وسيتمّ تسجيل خروجك قريبًا تلقائيًا من أجل أمنك. هل ترغب في البقاء مسجّلا؟', + youAreReceivingResetPassword: + 'أنت تتلقّى هذا البريد الالكتروني لأنّك (أو لأنّ شخص آخر) طلبت إعادة تعيين كلمة المرور لحسابك. الرّجاء النّقر فوق الرّابط التّالي ، أو لصق هذا الرّابط في متصفّحك لإكمال العمليّة:', + youDidNotRequestPassword: + 'إن لم تطلب هذا ، يرجى تجاهل هذا البريد الإلكتروني وستبقى كلمة مرورك ذاتها بدون تغيير.', + }, + error: { + accountAlreadyActivated: 'تم تفعيل هذا الحساب بالفعل.', + autosaving: 'حدثت مشكلة أثناء حفظ هذا المستند تلقائيًا.', + correctInvalidFields: 'يرجى تصحيح الحقول غير الصالحة.', + deletingFile: 'حدث خطأ أثناء حذف الملف.', + deletingTitle: + 'حدث خطأ أثناء حذف {{title}}. يرجى التحقق من الاتصال الخاص بك والمحاولة مرة أخرى.', + emailOrPasswordIncorrect: 'البريد الإلكتروني أو كلمة المرور المقدمة غير صحيحة.', + followingFieldsInvalid_one: 'الحقل التالي غير صالح:', + followingFieldsInvalid_other: 'الحقول التالية غير صالحة:', + incorrectCollection: 'مجموعة غير صحيحة', + invalidFileType: 'نوع ملف غير صالح', + invalidFileTypeValue: 'نوع ملف غير صالح: {{value}}', + loadingDocument: 'حدثت مشكلة أثناء تحميل المستند برقم التعريف {{id}}.', + missingEmail: 'البريد الإلكتروني مفقود.', + missingIDOfDocument: 'معرّف المستند المراد تحديثه مفقود.', + missingIDOfVersion: 'معرّف النسخة مفقود.', + missingRequiredData: 'توجد بيانات مطلوبة مفقودة.', + noFilesUploaded: 'لم يتمّ رفع أيّة ملفّات.', + noMatchedField: 'لم يتمّ العثور على حقل مطابق لـ "{{label}}"', + noUser: 'لا يوجد مستخدم', + notAllowedToAccessPage: 'لا يسمح لك الوصول إلى هذه الصّفحة.', + notAllowedToPerformAction: 'لا يسمح لك القيام بهذه العمليّة.', + notFound: 'لم يتمّ العثور على المورد المطلوب.', + previewing: 'حدث خطأ في اثناء معاينة هذا المستند.', + problemUploadingFile: 'حدث خطأ اثناء رفع الملفّ.', + tokenInvalidOrExpired: 'الرّمز إمّا غير صالح أو منتهي الصّلاحيّة.', + unPublishingDocument: 'حدث خطأ أثناء إلغاء نشر هذا المستند.', + unableToDeleteCount: 'يتعذّر حذف {{count}} من {{total}} {{label}}.', + unableToUpdateCount: 'يتعذّر تحديث {{count}} من {{total}} {{label}}.', + unauthorized: 'غير مصرّح لك ، عليك أن تقوم بتسجيل الدّخول لتتمكّن من تقديم هذا الطّلب.', + unknown: 'حدث خطأ غير معروف.', + unspecific: 'حدث خطأ.', + userLocked: 'تمّ قفل هذا المستخدم نظرًا لوجود عدد كبير من محاولات تسجيل الدّخول الغير ناجحة.', + valueMustBeUnique: 'على القيمة أن تكون فريدة', + verificationTokenInvalid: 'رمز التحقّق غير صالح.', + }, + fields: { + addLabel: 'أضف {{label}}', + addLink: 'أضف رابط', + addNew: 'أضف جديد', + addNewLabel: 'أضف {{label}} جديد', + addRelationship: 'أضف علاقة', + addUpload: 'أضف تحميل', + block: 'وحدة محتوى', + blockType: 'نوع وحدة المحتوى', + blocks: 'وحدات المحتوى', + chooseBetweenCustomTextOrDocument: + 'اختر بين إدخال عنوان URL نصّي مخصّص أو الرّبط بمستند آخر.', + chooseDocumentToLink: 'اختر مستندًا للربط', + chooseFromExisting: 'اختر من القائمة', + chooseLabel: 'اختر {{label}}', + collapseAll: 'طيّ الكلّ', + customURL: 'URL مخصّص', + editLabelData: 'عدّل بيانات {{label}}', + editLink: 'عدّل الرّابط', + editRelationship: 'عدّل العلاقة', + enterURL: 'ادخل عنوان URL', + internalLink: 'رابط داخلي', + itemsAndMore: '{{items}} و {{count}} أخرى', + labelRelationship: '{{label}} علاقة', + latitude: 'خطّ العرض', + linkType: 'نوع الرّابط', + linkedTo: 'تمّ الرّبط ل <0>{{label}}', + longitude: 'خطّ الطّول', + newLabel: '{{label}} جديد', + openInNewTab: 'الفتح في علامة تبويب جديدة', + passwordsDoNotMatch: 'كلمة المرور غير مطابقة.', + relatedDocument: 'مستند مربوط', + relationTo: 'ربط ل', + removeRelationship: 'حذف العلاقة', + removeUpload: 'حذف المحتوى المرفوع', + saveChanges: 'حفظ التّغييرات', + searchForBlock: 'ابحث عن وحدة محتوى', + selectExistingLabel: 'اختيار {{label}} من القائمة', + selectFieldsToEdit: 'حدّد الحقول اللتي تريد تعديلها', + showAll: 'إظهار الكلّ', + swapRelationship: 'تبديل العلاقة', + swapUpload: 'تبديل المحتوى المرفوع', + textToDisplay: 'النصّ الذي تريد إظهاره', + toggleBlock: 'Toggle block', + uploadNewLabel: 'رفع {{label}} جديد', + }, + general: { + aboutToDelete: 'أنت على وشك حذف {{label}} <1>{{title}}. هل أنت متأكّد؟', + aboutToDeleteCount_many: 'أنت على وشك حذف {{count}} {{label}}', + aboutToDeleteCount_one: 'أنت على وشك حذف {{count}} {{label}}', + aboutToDeleteCount_other: 'أنت على وشك حذف {{count}} {{label}}', + addBelow: 'أضف في الاسفل', + addFilter: 'أضف فلتر', + adminTheme: 'شكل واجهة المستخدم', + and: 'و', + applyChanges: 'طبق التغييرات', + ascending: 'تصاعدي', + automatic: 'تلقائي', + backToDashboard: 'العودة للوحة التّحكّم', + cancel: 'إلغاء', + changesNotSaved: 'لم يتمّ حفظ التّغييرات. إن غادرت الآن ، ستفقد تغييراتك.', + close: 'إغلاق', + collapse: 'طيّ', + collections: 'المجموعات', + columnToSort: 'التّرتيب حسب العامود', + columns: 'الأعمدة', + confirm: 'تأكيد', + confirmDeletion: 'تأكيد الحذف', + confirmDuplication: 'تأكيد التّكرار', + copied: 'تمّ النّسخ', + copy: 'نسخ', + create: 'إنشاء', + createNew: 'أنشاء جديد', + createNewLabel: 'إنشاء {{label}} جديد', + created: 'تمّ الإنشاء', + createdAt: 'تمّ الإنشاء في', + creating: 'يتمّ الإنشاء', + creatingNewLabel: 'جاري إنشاء {{label}} جديد', + dark: 'غامق', + dashboard: 'لوحة التّحكّم', + delete: 'حذف', + deletedCountSuccessfully: 'تمّ حذف {{count}} {{label}} بنجاح.', + deletedSuccessfully: 'تمّ الحذف بنجاح.', + deleting: 'يتمّ الحذف...', + descending: 'تنازلي', + deselectAllRows: 'إلغاء تحديد جميع الصفوف', + duplicate: 'استنساخ', + duplicateWithoutSaving: 'استنساخ بدون حفظ التغييرات', + edit: 'تعديل', + editLabel: 'تعديل {{label}}', + editing: 'جاري التعديل', + editingLabel_many: 'تعديل {{count}} {{label}}', + editingLabel_one: 'تعديل {{count}} {{label}}', + editingLabel_other: 'تعديل {{count}} {{label}}', + email: 'البريد الإلكتروني', + emailAddress: 'عنوان البريد الإلكتروني', + enterAValue: 'أدخل قيمة', + error: 'خطأ', + errors: 'أخطاء', + fallbackToDefaultLocale: 'الرجوع إلى اللغة الافتراضية', + filter: 'تصفية', + filterWhere: 'تصفية {{label}} حيث', + filters: 'عوامل التصفية', + globals: 'عامة', + language: 'اللغة', + lastModified: 'آخر تعديل', + leaveAnyway: 'المغادرة على أي حال', + leaveWithoutSaving: 'المغادرة بدون حفظ', + light: 'فاتح', + livePreview: 'معاينة مباشرة', + loading: 'يتمّ التّحميل', + locale: 'اللّغة', + locales: 'اللّغات', + menu: 'قائمة', + moveDown: 'التّحريك إلى الأسفل', + moveUp: 'التّحريك إلى الأعلى', + newPassword: 'كلمة مرور جديدة', + noFiltersSet: 'لم يتم تعيين أي عوامل تصفية', + noLabel: '<لا {{label}}>', + noOptions: 'لا خيارات', + noResults: + 'لا يوجد {{label}}. إما أن لا {{label}} موجودة حتى الآن أو لا تتطابق مع عوامل التصفية التي حددتها أعلاه.', + noValue: 'لا يوجد قيمة', + none: 'لا شيء', + notFound: 'غير موجود', + nothingFound: 'لم يتم العثور على شيء', + of: 'من', + open: 'فتح', + or: 'أو', + order: 'التّرتيب', + pageNotFound: 'الصّفحة غير موجودة', + password: 'كلمة المرور', + payloadSettings: 'الإعدادات', + perPage: 'لكلّ صفحة: {{limit}}', + remove: 'إزالة', + reset: 'إعادة تعيين', + row: 'سطر', + rows: 'أسطُر', + save: 'حفظ', + saving: 'جاري الحفظ...', + searchBy: 'البحث عن طريق {{label}}', + selectAll: 'تحديد كل {{count}} {{label}}', + selectAllRows: 'حدد جميع الصفوف', + selectValue: 'اختيار قيمة', + selectedCount: 'تم تحديد {{count}} {{label}}', + showAllLabel: 'عرض كل {{label}}', + sorryNotFound: 'عذرًا - لا يوجد شيء يتوافق مع طلبك.', + sort: 'ترتيب', + sortByLabelDirection: 'رتّب حسب {{label}} {{direction}}', + stayOnThisPage: 'البقاء على هذه الصفحة', + submissionSuccessful: 'تمت الإرسال بنجاح.', + submit: 'إرسال', + successfullyCreated: '{{label}} تم إنشاؤها بنجاح.', + successfullyDuplicated: '{{label}} تم استنساخها بنجاح.', + thisLanguage: 'العربية', + titleDeleted: 'تم حذف {{label}} "{{title}}" بنجاح.', + unauthorized: 'غير مصرح به', + unsavedChangesDuplicate: 'لديك تغييرات لم يتم حفظها. هل تريد الاستمرار في الاستنساخ؟', + untitled: 'بدون عنوان', + updatedAt: 'تم التحديث في', + updatedCountSuccessfully: 'تم تحديث {{count}} {{label}} بنجاح.', + updatedSuccessfully: 'تم التحديث بنجاح.', + updating: 'جار التحديث', + uploading: 'جار الرفع', + user: 'المستخدم', + users: 'المستخدمين', + value: 'القيمة', + welcome: 'مرحبًا', + }, + operators: { + contains: 'يحتوي', + equals: 'يساوي', + exists: 'موجود', + isGreaterThan: 'أكبر من', + isGreaterThanOrEqualTo: 'أكبر أو يساوي', + isIn: 'موجود في', + isLessThan: 'أصغر من', + isLessThanOrEqualTo: 'أصغر أو يساوي', + isLike: 'هو مثل', + isNotEqualTo: 'لا يساوي', + isNotIn: 'غير موجود في', + near: 'قريب من', + }, + upload: { + crop: 'محصول', + cropToolDescription: 'اسحب الزوايا المحددة للمنطقة، رسم منطقة جديدة أو قم بضبط القيم أدناه.', + dragAndDrop: 'قم بسحب وإسقاط ملفّ', + dragAndDropHere: 'أو اسحب الملفّ وأفلته هنا', + editImage: 'تعديل الصورة', + fileName: 'اسم الملفّ', + fileSize: 'حجم الملفّ', + focalPoint: 'نقطة التركيز', + focalPointDescription: 'اسحب النقطة المركزية مباشرة على المعاينة أو قم بضبط القيم أدناه.', + height: 'الطّول', + lessInfo: 'معلومات أقلّ', + moreInfo: 'معلومات أكثر', + previewSizes: 'أحجام المعاينة', + selectCollectionToBrowse: 'حدّد مجموعة لاستعراضها', + selectFile: 'اختر ملفّ', + setCropArea: 'حدد منطقة القص', + setFocalPoint: 'حدد النقطة البؤرية', + sizes: 'الاحجام', + sizesFor: 'أحجام لـ {{label}}', + width: 'العرض', + }, + validation: { + emailAddress: 'يرجى إدخال عنوان بريد إلكتروني صحيح.', + enterNumber: 'يرجى إدخال رقم صحيح.', + fieldHasNo: 'هذا الحقل ليس لديه {{label}}', + greaterThanMax: '{{value}} أكبر من الحد الأقصى المسموح به {{label}} الذي يبلغ {{max}}.', + invalidInput: 'هذا الحقل لديه إدخال غير صالح.', + invalidSelection: 'هذا الحقل لديه اختيار غير صالح.', + invalidSelections: 'هذا الحقل لديه الاختيارات الغير صالحة التالية:', + lessThanMin: '{{value}} أقل من الحد الأدنى المسموح به {{label}} الذي يبلغ {{min}}.', + limitReached: 'تم الوصول إلى الحد الأقصى، يمكن إضافة {{max}} عناصر فقط.', + longerThanMin: 'يجب أن يكون هذا القيمة أطول من الحد الأدنى للطول الذي هو {{minLength}} أحرف.', + notValidDate: '"{{value}}" ليس تاريخا صالحا.', + required: 'هذا الحقل مطلوب.', + requiresAtLeast: 'هذا الحقل يتطلب على الأقل {{count}} {{label}}.', + requiresNoMoreThan: 'هذا الحقل يتطلب عدم تجاوز {{count}} {{label}}.', + requiresTwoNumbers: 'هذا الحقل يتطلب رقمين.', + shorterThanMax: + 'يجب أن تكون هذه القيمة أقصر من الحد الأقصى للطول الذي هو {{maxLength}} أحرف.', + trueOrFalse: 'يمكن أن يكون هذا الحقل مساويًا فقط للقيمتين صحيح أو خطأ.', + validUploadID: 'هذا الحقل ليس معرّف تحميل صالح.', + }, + version: { + type: 'النّوع', + aboutToPublishSelection: 'أنت على وشك نشر كلّ {{label}} في التّحديد. هل أنت متأكّد؟', + aboutToRestore: + 'أنت على وشك استرجاع هذا المستند {{label}} إلى الحالة التّي كان عليها في {{versionDate}}.', + aboutToRestoreGlobal: + 'أنت على وشك استرجاع الاعداد العامّ {{label}} إلى الحالة التي كان عليها في {{versionDate}}.', + aboutToRevertToPublished: 'أنت على وشك إعادة هذا المستند إلى حالته المنشورة. هل أنت متأكّد؟', + aboutToUnpublish: 'أنت على وشك إلغاء نشر هذا المستند. هل أنت متأكّد؟', + aboutToUnpublishSelection: 'أنت على وشك إلغاء نشر كلّ {{label}} في التّحديد. هل أنت متأكّد؟', + autosave: 'حفظ تلقائي', + autosavedSuccessfully: 'تمّ الحفظ التّلقائي بنجاح.', + autosavedVersion: 'النّسخة المحفوظة تلقائياً', + changed: 'تمّ التّغيير', + compareVersion: 'مقارنة النّسخة مع:', + confirmPublish: 'تأكيد النّشر', + confirmRevertToSaved: 'تأكيد الرّجوع للنسخة المنشورة', + confirmUnpublish: 'تأكيد إلغاء النّشر', + confirmVersionRestoration: 'تأكيد إستعادة النّسخة', + currentDocumentStatus: 'المستند {{docStatus}} الحالي', + draft: 'مسودّة', + draftSavedSuccessfully: 'تمّ حفظ المسودّة بنجاح.', + lastSavedAgo: 'تم الحفظ آخر مرة قبل {{distance}}', + noFurtherVersionsFound: 'لم يتمّ العثور على نسخات أخرى', + noRowsFound: 'لم يتمّ العثور على {{label}}', + preview: 'معاينة', + problemRestoringVersion: 'حدث خطأ في استعادة هذه النّسخة', + publish: 'نشر', + publishChanges: 'نشر التّغييرات', + published: 'تمّ النّشر', + publishing: 'نشر', + restoreThisVersion: 'استعادة هذه النّسخة', + restoredSuccessfully: 'تمّت الاستعادة بنحاح.', + restoring: 'تتمّ الاستعادة...', + revertToPublished: 'الرّجوع للنسخة المنشورة', + reverting: 'يتمّ الاسترجاع...', + saveDraft: 'حفظ المسودّة', + selectLocales: 'حدّد اللّغات المراد عرضها', + selectVersionToCompare: 'حدّد نسخة للمقارنة', + showLocales: 'اظهر اللّغات:', + showingVersionsFor: 'يتمّ عرض النًّسخ ل:', + status: 'الحالة', + unpublish: 'الغاء النّشر', + unpublishing: 'يتمّ الغاء النّشر...', + version: 'النّسخة', + versionCount_many: 'تمّ العثور على {{count}} نُسخ', + versionCount_none: 'لم يتمّ العثور على أيّ من النّسخ', + versionCount_one: 'تمّ العثور على {{count}} من النّسخ', + versionCount_other: 'تمّ العثور على {{count}} نُسخ', + versionCreatedOn: 'تمّ ﻹنشاء النّسخة في {{version}}:', + versionID: 'مُعرّف النّسخة', + versions: 'النُّسَخ', + viewingVersion: 'يتمّ استعراض نسخة ل {{entityLabel}} {{documentTitle}}', + viewingVersionGlobal: 'يتمّ استعراض نسخة للاعداد العامّ {{entityLabel}}', + viewingVersions: 'يتمّ استعراض النُّسَخ ل {{entityLabel}} {{documentTitle}}', + viewingVersionsGlobal: 'يتمّ استعراض النُّسَخ للاعداد العامّ {{entityLabel}}', + }, + }, +} diff --git a/packages/translations/src/languages/az.ts b/packages/translations/src/languages/az.ts new file mode 100644 index 0000000000..d796f61d21 --- /dev/null +++ b/packages/translations/src/languages/az.ts @@ -0,0 +1,397 @@ +import type { Language } from '../types.js' + +export const az: Language = { + dateFNSKey: 'az', + translations: { + authentication: { + account: 'Hesab', + accountOfCurrentUser: 'Cari istifadəçinin hesabı', + alreadyActivated: 'Artıq Aktivləşdirilib', + alreadyLoggedIn: 'Artıq daxil olunub', + apiKey: 'API Açarı', + backToLogin: 'Girişə qayıt', + beginCreateFirstUser: 'Başlamaq üçün ilk istifadəçinizi yaradın.', + changePassword: 'Parolu dəyişdir', + checkYourEmailForPasswordReset: + 'Parolunuzu təhlükəsiz şəkildə sıfırlamağa imkan verəcək link üçün e-poçt ünvanınızı yoxlayın.', + confirmGeneration: 'Generasiyani təsdiqlə', + confirmPassword: 'Şifrəni təsdiq et', + createFirstUser: 'İlk istifadəçini yaradın', + emailNotValid: 'Təqdim olunan e-poçt etibarlı deyil', + emailSent: 'E-poçt göndərildi', + enableAPIKey: 'API açarını aktivləşdir', + failedToUnlock: 'Kilidi açmaq alınmadı', + forceUnlock: 'Kilidi zorla aç', + forgotPassword: 'Şifrəni unutmusan', + forgotPasswordEmailInstructions: + 'Zəhmət olmasa, e-poçt ünvanınızı aşağıda daxil edin. Siz parolunuzu necə sıfırlamaq barədə təlimatları olan e-poçt mesajı alacaqsınız.', + forgotPasswordQuestion: 'Şifrəni unutmusan?', + generate: 'Yarad', + generateNewAPIKey: 'Yeni API açarı yarad', + generatingNewAPIKeyWillInvalidate: + 'Yeni API açarının yaradılması əvvəlki açarı etibarsız edəcək. Davam etmək istədiyinizə əminsiniz?', + lockUntil: 'Klidklə', + logBackIn: 'Yenidən daxil ol', + logOut: 'Çıxış et', + loggedIn: 'Başqa istifadəçi ilə daxil olmaq üçün əvvəlcə çıxış etməlisiniz.', + loggedInChangePassword: + 'Parolu dəyişdirmək üçün hesabınıza get və orada şifrənizi redaktə edin.', + loggedOutInactivity: 'Hərəkətsizlik səbəbindən sistemdən çıxmısınız.', + loggedOutSuccessfully: 'Siz uğurla çıxış etdiniz.', + login: 'Giriş', + loginAttempts: 'Giriş cəhdləri', + loginUser: 'Giriş istifadəçisi', + loginWithAnotherUser: 'Başqa istifadəçi ilə daxil olmaq üçün əvvəlcə çıxış etməlisiniz.', + logout: 'Çıxış', + logoutUser: 'Sistemdən çıxış', + newAPIKeyGenerated: 'Yeni API Açarı Yaradıldı.', + newAccountCreated: + 'Sizin üçün yeni hesab yaradıldı. Zəhmət olmasa, e-poçtunuzu doğrulamaq üçün aşağıdakı linke klikləyin: {{verificationURL}}. E-poçtunuzu doğruladıqdan sonra uğurla daxil ola bilərsiniz.', + newPassword: 'Yeni şifrə', + resetPassword: 'Şifrəni sıfırla', + resetPasswordExpiration: 'Şifrənin müddətini sıfırla', + resetPasswordToken: 'Şifrə Tokenini Sıfırla', + resetYourPassword: 'Şifrənizi sıfırlayın', + stayLoggedIn: 'Sistemdə qal', + successfullyUnlocked: 'Uğurla kilidi açıldı', + unableToVerify: 'Doğrulamaq mümkün deyil', + verified: 'Doğrulanmış', + verifiedSuccessfully: 'Uğurla doğrulandı', + verify: 'Doğrula', + verifyUser: 'İstifadəçini doğrula', + verifyYourEmail: 'E-poçtunuzu doğrulayın', + youAreInactive: + 'Siz bir müddətdir aktiv deyilsiniz və tezliklə öz təhlükəsizliyiniz üçün avtomatik olaraq sistemdən çıxacaqsınız. Daxil olmaq istərdinizmi?', + youAreReceivingResetPassword: + 'Siz (və ya başqası) hesabınız üçün parolun sıfırlanmasını tələb etdiyiniz üçün bunu alırsınız. Prosesi tamamlamaq üçün zəhmət olmasa aşağıdakı linkə klikləyin:', + youDidNotRequestPassword: + 'Əgər siz bunu tələb etməmisinizsə, lütfən, bu e-poçtu nəzərə almayın və şifrəniz dəyişilməz qalacaq.', + }, + error: { + accountAlreadyActivated: 'Bu hesab artıq aktivləşdirilib.', + autosaving: 'Bu sənədin avto yadda saxlanılması zamanı problem yarandı.', + correctInvalidFields: 'Zəhmət olmasa, yanlış sahələri düzəlt.', + deletingFile: 'Faylın silinməsində xəta baş verdi.', + deletingTitle: + '{{title}} silinərkən xəta baş verdi. Zəhmət olmasa, bağlantınızı yoxlayın və yenidən cəhd edin.', + emailOrPasswordIncorrect: 'Təqdim olunan e-poçt və ya şifrə yanlışdır.', + followingFieldsInvalid_many: 'Aşağıdakı sahələr yanlışdır:', + followingFieldsInvalid_one: 'Aşağıdakı sahə yanlışdır:', + followingFieldsInvalid_other: 'Aşağıdaki sahələr yanlışdır:', + incorrectCollection: 'Yanlış Kolleksiya', + invalidFileType: 'Yanlış fayl növü', + invalidFileTypeValue: 'Yanlış fayl növü: {{value}}', + loadingDocument: '{{id}} ID-li sənədin yüklənməsində problem baş verdi.', + missingEmail: 'E-poçt adresi çatışmır.', + missingIDOfDocument: 'Yeniləmək üçün sənədin ID-si çatışmır.', + missingIDOfVersion: 'Versiyanın ID-si çatışmır.', + missingRequiredData: 'Tələb olunan məlumat çatışmır.', + noFilesUploaded: 'Heç bir fayl yüklənilməyib.', + noMatchedField: '"{{label}}" üçün uyğun sahə tapılmadı', + noUser: 'İstifadəçi Yoxdur', + notAllowedToAccessPage: 'Bu səhifəyə girməyə icazəniz yoxdur.', + notAllowedToPerformAction: 'Bu əməliyyatı icra etməyə icazəniz yoxdur.', + notFound: 'Tələb olunan resurs tapılmadı.', + previewing: 'Bu sənədin ön baxışı zamanı problem yarandı.', + problemUploadingFile: 'Faylın yüklənməsi zamanı problem yarandı.', + tokenInvalidOrExpired: 'Token ya yanlışdır və ya müddəti bitib.', + unPublishingDocument: 'Bu sənədin nəşrini ləğv etmək zamanı problem baş verdi.', + unableToDeleteCount: '{{count}} dən {{total}} {{label}} silinə bilmir.', + unableToUpdateCount: '{{count}} dən {{total}} {{label}} yenilənə bilmir.', + unauthorized: 'İcazəniz yoxdur, bu tələbi yerinə yetirmək üçün daxil olmalısınız.', + unknown: 'Naməlum bir xəta baş verdi.', + unspecific: 'Xəta baş verdi.', + userLocked: 'Bu istifadəçi çoxsaylı uğursuz giriş cəhdləri səbəbindən kilidlənib.', + valueMustBeUnique: 'Dəyər təkrar olmamalıdır', + verificationTokenInvalid: 'Doğrulama tokenı yanlışdır.', + }, + fields: { + addLabel: '{{label}} əlavə et', + addLink: 'Keçid əlavə et', + addNew: 'Yenisini əlavə et', + addNewLabel: 'Yeni {{label}} əlavə et', + addRelationship: 'Relationship əlavə et', + addUpload: 'Yükləmə əlavə et', + block: 'blok', + blockType: 'Blok Növü', + blocks: 'bloklar', + chooseBetweenCustomTextOrDocument: + "Xüsusi mətn URL'si daxil etmək və ya başqa bir sənədə keçid yaratmaq arasında seçim edin.", + chooseDocumentToLink: 'Keçid yaratmaq üçün sənəd seçin', + chooseFromExisting: 'Mövcuddan seçin', + chooseLabel: '{{label}} seçin', + collapseAll: 'Hamısını Bağla', + customURL: 'Xüsusi URL', + editLabelData: '{{label}} məlumatını redaktə et', + editLink: 'Keçidi redaktə et', + editRelationship: 'Relationship redaktə et', + enterURL: 'URL daxil edin', + internalLink: 'Daxili Keçid', + itemsAndMore: '{{items}} və daha {{count}} nəfər', + labelRelationship: '{{label}} Relationship', + latitude: 'Enlik', + linkType: 'Keçid Növü', + linkedTo: '<0>{{label}} ilə əlaqəli', + longitude: 'Uzunluq', + newLabel: 'Yeni {{label}}', + openInNewTab: 'Yeni sekmede aç', + passwordsDoNotMatch: 'Şifrələr uyğun gəlmir.', + relatedDocument: 'Əlaqəli Sənəd', + relationTo: 'Relationship', + removeRelationship: 'Relationship sil', + removeUpload: 'Yükləməni sil', + saveChanges: 'Dəyişiklikləri saxla', + searchForBlock: 'Blok üçün axtarış', + selectExistingLabel: 'Mövcud {{label}} seçin', + selectFieldsToEdit: 'Redaktə ediləcək sahələri seçin', + showAll: 'Hamısını Göstər', + swapRelationship: 'Relationship dəyiş', + swapUpload: 'Yükləməni dəyiş', + textToDisplay: 'Göstəriləcək mətn', + toggleBlock: 'Bloku keç', + uploadNewLabel: 'Yeni {{label}} yüklə', + }, + general: { + aboutToDelete: 'Siz {{label}} <1>{{title}} silməyə hazırsınız. Eminsiniz?', + aboutToDeleteCount_many: 'Siz {{count}} {{label}} silməyə hazırsınız.', + aboutToDeleteCount_one: 'Siz {{count}} {{label}} silməyə hazırsınız.', + aboutToDeleteCount_other: 'Siz {{count}} {{label}} silməyə hazırsınız.', + addBelow: 'Aşağıya əlavə et', + addFilter: 'Filter əlavə et', + adminTheme: 'Admin Mövzusu', + and: 'Və', + applyChanges: 'Dəyişiklikləri Tətbiq Edin', + ascending: 'Artan', + automatic: 'Avtomatik', + backToDashboard: 'Panelə qayıdın', + cancel: 'Ləğv et', + changesNotSaved: + 'Dəyişiklikləriniz saxlanılmayıb. İndi çıxsanız, dəyişikliklərinizi itirəcəksiniz.', + close: 'Bağla', + collapse: 'Bağla', + collections: 'Kolleksiyalar', + columnToSort: 'Sıralamağa sütun', + columns: 'Sütunlar', + confirm: 'Təsdiqlə', + confirmDeletion: 'Silməni təsdiqlə', + confirmDuplication: 'Dublikasiyanı təsdiqlə', + copied: 'Kopyalandı', + copy: 'Kopyala', + create: 'Yarat', + createNew: 'Yeni yarat', + createNewLabel: 'Yeni {{label}} yarat', + created: 'Yaradıldı', + createdAt: 'Yaradıldığı tarix', + creating: 'Yaradılır', + creatingNewLabel: 'Yeni {{label}} yaradılır', + dark: 'Tünd', + dashboard: 'Panel', + delete: 'Sil', + deletedCountSuccessfully: '{{count}} {{label}} uğurla silindi.', + deletedSuccessfully: 'Uğurla silindi.', + deleting: 'Silinir...', + descending: 'Azalan', + deselectAllRows: 'Bütün sıraları seçimi ləğv edin', + duplicate: 'Dublikat', + duplicateWithoutSaving: 'Dəyişiklikləri saxlamadan dublikatla', + edit: 'Redaktə et', + editLabel: '{{label}} redaktə et', + editing: 'Redaktə olunur', + editingLabel_many: '{{count}} {{label}} redaktə olunur', + editingLabel_one: '{{count}} {{label}} redaktə olunur', + editingLabel_other: '{{count}} {{label}} redaktə olunur', + email: 'Elektron poçt', + emailAddress: 'Elektron poçt ünvanı', + enterAValue: 'Bir dəyər daxil edin', + error: 'Xəta', + errors: 'Xətalar', + fallbackToDefaultLocale: 'Standart lokalə keçid', + filter: 'Filter', + filterWhere: '{{label}} filtrlə', + filters: 'Filtərlər', + globals: 'Qloballar', + language: 'Dil', + lastModified: 'Son dəyişdirildi', + leaveAnyway: 'Heç olmasa çıx', + leaveWithoutSaving: 'Saxlamadan çıx', + light: 'Açıq', + livePreview: 'Öncədən baxış', + loading: 'Yüklənir', + locale: 'Lokal', + locales: 'Dillər', + menu: 'Menyu', + moveDown: 'Aşağı hərəkət et', + moveUp: 'Yuxarı hərəkət et', + newPassword: 'Yeni şifrə', + noFiltersSet: 'Filter təyin edilməyib', + noLabel: '', + noOptions: 'Heç bir seçim yoxdur', + noResults: + 'Heç bir {{label}} tapılmadı. Ya hələ {{label}} yoxdur, ya da yuxarıda göstərdiyiniz filtrlərə uyğun gəlmir.', + noValue: 'Dəyər yoxdur', + none: 'Heç bir', + notFound: 'Tapılmadı', + nothingFound: 'Heç nə tapılmadı', + of: 'dən', + open: 'Aç', + or: 'Və ya', + order: 'Sıra', + pageNotFound: 'Səhifə tapılmadı', + password: 'Şifrə', + payloadSettings: 'Payload Parametrləri', + perPage: 'Hər səhifədə: {{limit}}', + remove: 'Sil', + reset: 'Yenidən başlat', + row: 'Sətir', + rows: 'Sətirlər', + save: 'Saxla', + saving: 'Saxlanılır...', + searchBy: '{{label}} ilə axtar', + selectAll: 'Bütün {{count}} {{label}} seç', + selectAllRows: 'Bütün sıraları seçin', + selectValue: 'Dəyər seçin', + selectedCount: '{{count}} {{label}} seçildi', + showAllLabel: 'Bütün {{label}}-ı göstər', + sorryNotFound: 'Üzr istəyirik - sizin tələbinizə uyğun heç nə yoxdur.', + sort: 'Sırala', + sortByLabelDirection: '{{label}} {{direction}} ilə sırala', + stayOnThisPage: 'Bu səhifədə qal', + submissionSuccessful: 'Təqdimat uğurlu oldu.', + submit: 'Təqdim et', + successfullyCreated: '{{label}} uğurla yaradıldı.', + successfullyDuplicated: '{{label}} uğurla dublikatlandı.', + thisLanguage: 'Azərbaycan dili', + titleDeleted: '{{label}} "{{title}}" uğurla silindi.', + unauthorized: 'İcazəsiz', + unsavedChangesDuplicate: + 'Saxlanılmamış dəyişiklikləriniz var. Dublikatla davam etmək istəyirsiniz?', + untitled: 'Başlıqsız', + updatedAt: 'Yeniləndiyi tarix', + updatedCountSuccessfully: '{{count}} {{label}} uğurla yeniləndi.', + updatedSuccessfully: 'Uğurla yeniləndi.', + updating: 'Yenilənir', + uploading: 'Yüklənir', + user: 'İstifadəçi', + users: 'İstifadəçilər', + value: 'Dəyər', + welcome: 'Xoş gəldiniz', + }, + operators: { + contains: 'daxilində', + equals: 'bərabərdir', + exists: 'mövcuddur', + isGreaterThan: 'dən böyük', + isGreaterThanOrEqualTo: 'böyük və ya bərabər', + isIn: 'daxildir', + isLessThan: 'dən kiçik', + isLessThanOrEqualTo: 'kiçik və ya bərabər', + isLike: 'kimi', + isNotEqualTo: 'bərabər deyil', + isNotIn: 'daxil deyil', + near: 'yaxın', + }, + upload: { + crop: 'Məhsul', + cropToolDescription: + 'Seçilmiş sahənin köşələrini sürükləyin, yeni bir sahə çəkin və ya aşağıdakı dəyərləri düzəltin.', + dragAndDrop: 'Faylı buraya sürükləyin və buraxın', + dragAndDropHere: 'və ya faylı buraya sürükləyin və buraxın', + editImage: 'Şəkili Redaktə Et', + fileName: 'Faylın Adı', + fileSize: 'Faylım Ölçüsü', + focalPoint: 'Mərkəzi Nöqtə', + focalPointDescription: + 'Fokus nöqtəsini birbaşa önizləməyə sürükləyin və ya aşağıdakı dəyərləri düzəltin.', + height: 'Hündürlük', + lessInfo: 'Daha az məlumat', + moreInfo: 'Daha çox məlumat', + previewSizes: 'Öncədən baxış ölçüləri', + selectCollectionToBrowse: 'Gözdən keçirmək üçün bir Kolleksiya seçin', + selectFile: 'Fayl seçin', + setCropArea: 'Məhsul sahəsini təyin et', + setFocalPoint: 'Fokus nöqtəsi təyin et', + sizes: 'Ölçülər', + sizesFor: '{{label}} üçün ölçülər', + width: 'En', + }, + validation: { + emailAddress: 'Xahiş edirik doğru elektron poçt ünvanını daxil edin.', + enterNumber: 'Xahiş edirik doğru nömrəni daxil edin.', + fieldHasNo: 'Bu sahədə heç bir {{label}} yoxdur', + greaterThanMax: '{{value}} icazə verilən maksimal {{label}} olan {{max}}-dən böyükdür.', + invalidInput: 'Bu sahə yanlış daxil edilmişdir.', + invalidSelection: 'Bu sahədə yanlış seçim edilmişdir.', + invalidSelections: 'Bu sahədə aşağıdakı yanlış seçimlər edilmişdir:', + lessThanMin: '{{value}} icazə verilən minimal {{label}} olan {{min}}-dən kiçikdir.', + limitReached: 'Limitə çatdınız, yalnız {{max}} element əlavə edilə bilər.', + longerThanMin: 'Bu dəyər {{minLength}} simvoldan uzun olmalıdır.', + notValidDate: '"{{value}}" doğru tarix deyil.', + required: 'Bu sahə mütləq doldurulmalıdır.', + requiresAtLeast: 'Bu sahə ən azı {{count}} {{label}} tələb edir.', + requiresNoMoreThan: 'Bu sahə {{count}} {{label}}-dan çox olmamalıdır.', + requiresTwoNumbers: 'Bu sahə iki nömrə tələb edir.', + shorterThanMax: 'Bu dəyər {{maxLength}} simvoldan qısa olmalıdır.', + trueOrFalse: 'Bu sahə yalnız doğru və ya yanlış ola bilər.', + validUploadID: 'Bu sahə doğru yükləmə ID-si deyil.', + }, + version: { + type: 'Növ', + aboutToPublishSelection: 'Seçimdə olan bütün {{label}}-i dərc etməyə hazırsınız. Əminsiniz?', + aboutToRestore: + 'Bu {{label}} sənədini {{versionDate}} tarixindəki vəziyyətinə bərpa etmək üzrəsiniz.', + aboutToRestoreGlobal: + 'Qlobal {{label}}-i {{versionDate}} tarixindəki vəziyyətinə bərpa etmək üzrəsiniz.', + aboutToRevertToPublished: + 'Bu sənədin dəyişikliklərini dərc edilmiş vəziyyətinə qaytarmağa hazırsınız. Əminsiniz?', + aboutToUnpublish: 'Bu sənədi dərcdən çıxartmağa hazırsınız. Əminsiniz?', + aboutToUnpublishSelection: + 'Seçimdə olan bütün {{label}}-i dərcdən çıxartmağa hazırsınız. Əminsiniz?', + autosave: 'Avtomatik yadda saxlama', + autosavedSuccessfully: 'Uğurla avtomatik olaraq yadda saxlandı.', + autosavedVersion: 'Avtomatik yadda saxlanmış versiya', + changed: 'Dəyişdirildi', + compareVersion: 'Versiyanı müqayisə et:', + confirmPublish: 'Dərci təsdiq edin', + confirmRevertToSaved: 'Yadda saxlanana qayıtmağı təsdiq edin', + confirmUnpublish: 'Dərcdən çıxartmağı təsdiq edin', + confirmVersionRestoration: 'Versiyanın bərpasını təsdiq edin', + currentDocumentStatus: 'Cari {{docStatus}} sənədi', + draft: 'Qaralama', + draftSavedSuccessfully: 'Qaralama uğurla yadda saxlandı.', + lastSavedAgo: '{{distance}} əvvəl son yadda saxlanıldı', + noFurtherVersionsFound: 'Başqa versiyalar tapılmadı', + noRowsFound: 'Heç bir {{label}} tapılmadı', + preview: 'Öncədən baxış', + problemRestoringVersion: 'Bu versiyanın bərpasında problem yaşandı', + publish: 'Dərc et', + publishChanges: 'Dəyişiklikləri dərc et', + published: 'Dərc edilmiş', + publishing: 'Nəşr', + restoreThisVersion: 'Bu versiyanı bərpa et', + restoredSuccessfully: 'Uğurla bərpa edildi.', + restoring: 'Bərpa olunur...', + revertToPublished: 'Dərc edilmişə qayıt', + reverting: 'Qayıdılır...', + saveDraft: 'Qaralamayı yadda saxla', + selectLocales: 'Göstərmək üçün lokalları seçin', + selectVersionToCompare: 'Müqayisə üçün bir versiya seçin', + showLocales: 'Lokalları göstər:', + showingVersionsFor: 'Göstərilən versiyalar üçün:', + status: 'Status', + unpublish: 'Dərcdən çıxart', + unpublishing: 'Dərcdən çıxarılır...', + version: 'Versiya', + versionCount_many: '{{count}} versiya tapıldı', + versionCount_none: 'Versiya tapılmadı', + versionCount_one: '{{count}} versiya tapıldı', + versionCount_other: '{{count}} versiya tapıldı', + versionCreatedOn: '{{version}} tarixində yaradıldı:', + versionID: 'Versiyanın ID-si', + versions: 'Versiyalar', + viewingVersion: '{{entityLabel}} {{documentTitle}} üçün versiyanı göstərir', + viewingVersionGlobal: 'Qlobal {{entityLabel}} üçün versiyanı göstərir', + viewingVersions: '{{entityLabel}} {{documentTitle}} üçün versiyaları göstərir', + viewingVersionsGlobal: 'Qlobal {{entityLabel}} üçün versiyaları göstərir', + }, + }, +} diff --git a/packages/translations/src/languages/bg.ts b/packages/translations/src/languages/bg.ts new file mode 100644 index 0000000000..ff8674cc5e --- /dev/null +++ b/packages/translations/src/languages/bg.ts @@ -0,0 +1,395 @@ +import type { Language } from '../types.js' + +export const bg: Language = { + dateFNSKey: 'bg', + translations: { + authentication: { + account: 'Профил', + accountOfCurrentUser: 'Профил на текущия потребител', + alreadyActivated: 'Вече активиран', + alreadyLoggedIn: 'Вече влязъл', + apiKey: 'API ключ', + backToLogin: 'Обратно към влизане', + beginCreateFirstUser: 'За да започнеш, създай първия си потребител', + changePassword: 'Промяна на паролата', + checkYourEmailForPasswordReset: + 'Провери имейла си за връзка, която ще ти позволи да промениш паролата си', + confirmGeneration: 'Потвърди генерация', + confirmPassword: 'Потвърди парола', + createFirstUser: 'Създай първи потребител', + emailNotValid: 'Даденият имейл не е валиден', + emailSent: 'Имейлът е изпратен', + enableAPIKey: 'Активирай API ключ', + failedToUnlock: 'Неуспешно отключване', + forceUnlock: 'Принудително отключване', + forgotPassword: 'Забравена парола', + forgotPasswordEmailInstructions: + 'Моля, въведи имейла си по-долу. Ще получиш съобщение с насоки как да промениш паролата си.', + forgotPasswordQuestion: 'Забравена парола?', + generate: 'Генерирай', + generateNewAPIKey: 'Генерирай нов API ключ', + generatingNewAPIKeyWillInvalidate: + 'Генерирането на нов API ключ ще <1>инвалидира предишния. Сигурен ли си, че искаш да продължиш?', + lockUntil: 'Заключи до', + logBackIn: 'Влез обратно', + logOut: 'Изход', + loggedIn: 'За да влезеш с друг потребител, първо трябва да <0>излезеш.', + loggedInChangePassword: + 'За да промениш паролата си, отиди в своя <0>профил и я промени оттам.', + loggedOutInactivity: 'Ти беше изкаран поради неактивност.', + loggedOutSuccessfully: 'Излезе успешно.', + login: 'Вход', + loginAttempts: 'Опити за вход', + loginUser: 'Вкарай потребител', + loginWithAnotherUser: 'За да влезеш с друг потребител, първо трябва да <0>излезеш.', + logout: 'Изход', + logoutUser: 'Изкарай потребител', + newAPIKeyGenerated: 'Нов API ключ генериран.', + newAccountCreated: + 'Току-що беше създаден нов профил за достъп до {{serverURL}} Моля, въведи връзката в браузъра си, за да потвърдиш имейла си: {{verificationURL}}
    След като потвърдиш имейла си, ще можеш да влезеш успешно.', + newPassword: 'Нова парола', + resetPassword: 'Възстанови парола', + resetPasswordExpiration: 'Изтичане на възстановяването на парола', + resetPasswordToken: 'Ключ за възстановяване на парола', + resetYourPassword: 'Възстанови паролата си', + stayLoggedIn: 'Запомни ме', + successfullyUnlocked: 'Успешно отключен', + unableToVerify: 'Неуспешно потвърждение', + verified: 'Потвърден', + verifiedSuccessfully: 'Потвърден успешно', + verify: 'Потвърди', + verifyUser: 'Потвърди потребител', + verifyYourEmail: 'Потвърди имейла си', + youAreInactive: + 'Не си активен от известно време и ще бъдеш изкаран за собствената си сигурност. Би ли пожелал да останеш вписан?', + youAreReceivingResetPassword: + 'Получаваш това, защото ти (или някой друг) е заявил възстановяване на паролата. Натисни връзката или постави това в браузъра си, за да довършиш процеса:', + youDidNotRequestPassword: + 'Ако не си заявил това, игнорирай този имейл и паролата ти ще остане непроменена.', + }, + error: { + accountAlreadyActivated: 'Този профил вече е активиран.', + autosaving: 'Имаше проблем в автоматичното запазване на този документ.', + correctInvalidFields: 'Моля, поправи некоректните полета.', + deletingFile: 'Имаше грешка при изтриването на файла.', + deletingTitle: + 'Имаше проблем при изтриването на {{title}}. Моля провери връзката си и опитай отново.', + emailOrPasswordIncorrect: 'Имейлът или паролата не са правилни.', + followingFieldsInvalid_one: 'Следното поле е некоректно:', + followingFieldsInvalid_other: 'Следните полета са некоректни:', + incorrectCollection: 'Некоректно събиране', + invalidFileType: 'Невалиден тип на файл', + invalidFileTypeValue: 'Невалиден тип на файл: {{value}}', + loadingDocument: 'Имаше проблем при зареждането на документа с идентификатор {{id}}.', + missingEmail: 'Липсващ имейл.', + missingIDOfDocument: 'Липсващ идентификатор на документа за обновяване.', + missingIDOfVersion: 'Липсващ идентификатор на версия.', + missingRequiredData: 'Липсва задължителна информация.', + noFilesUploaded: 'Никакви файлове не бяха качени.', + noMatchedField: 'Поле не беше открито за "{{label}}"', + noUser: 'Липсващ потребител', + notAllowedToAccessPage: 'Нямаш право на достъп до тази страница.', + notAllowedToPerformAction: 'Нямаш право да извършиш това действие.', + notFound: 'Заявеният ресурс не беше намерен.', + previewing: 'Имаше проблем при предварителното разглеждане на документа.', + problemUploadingFile: 'Имаше проблем при качването на файла.', + tokenInvalidOrExpired: 'Ключът е невалиден или изтекъл.', + unPublishingDocument: 'Имаше проблем при скриването на този документ.', + unableToDeleteCount: 'Не беше възможно да се изтрият {{count}} от {{total}} {{label}}.', + unableToUpdateCount: 'Не беше възможно да се обновят {{count}} от {{total}} {{label}}.', + unauthorized: 'Неавторизиран, трябва да влезеш, за да извършиш тази заявка.', + unknown: 'Неизвестна грешка.', + unspecific: 'Грешка.', + userLocked: 'Този потребител има прекалено много невалидни опити за влизане и е заключен.', + valueMustBeUnique: 'Стойността трябва да е уникална', + verificationTokenInvalid: 'Ключът за верификация е невалиден.', + }, + fields: { + addLabel: 'Добави {{label}}', + addLink: 'Добави нова връзка', + addNew: 'Добави нов', + addNewLabel: 'Добави нов {{label}}', + addRelationship: 'Добави отношение', + addUpload: 'Качи', + block: 'блок', + blockType: 'Тип блок', + blocks: 'блокове', + chooseBetweenCustomTextOrDocument: + 'Избери между това да въведеш текстова връзка или да свържеш с друг документ.', + chooseDocumentToLink: 'Избери документ, с който да свържеш', + chooseFromExisting: 'Избери от съществуващите', + chooseLabel: 'Избери {{label}}', + collapseAll: 'Свий всички', + customURL: 'Връзка', + editLabelData: 'Редактирай информацията за {{label}}', + editLink: 'Редактирай връзка', + editRelationship: 'Редактирай отношение', + enterURL: 'Въведи връзка', + internalLink: 'Вътрешна връзка', + itemsAndMore: '{{items}} и {{count}} повече', + labelRelationship: '{{label}} връзка', + latitude: 'Географска ширина', + linkType: 'Тип на връзката', + linkedTo: 'Свързано с <0>{{label}}', + longitude: 'Географска дължина', + newLabel: 'Нов {{label}}', + openInNewTab: 'Отвори в нов раздел', + passwordsDoNotMatch: 'Паролите не са еднакви.', + relatedDocument: 'Свързан документ', + relationTo: 'Отношение с', + removeRelationship: 'Премахни отношение', + removeUpload: 'Премахни качване', + saveChanges: 'Запази промените', + searchForBlock: 'Търси блок', + selectExistingLabel: 'Избери съществуващ {{label}}', + selectFieldsToEdit: 'Избери полета за редактиране', + showAll: 'Покажи всички', + swapRelationship: 'Смени отношение', + swapUpload: 'Смени качване', + textToDisplay: 'Текст към дисплей', + toggleBlock: 'Превключи блок', + uploadNewLabel: 'Качи нов {{label}}', + }, + general: { + aboutToDelete: 'На път си да изтриеш {{label}} <1>{{title}}. Сигурен ли си?', + aboutToDeleteCount_many: 'На път си да изтриеш {{count}} {{label}}', + aboutToDeleteCount_one: 'На път си да изтриеш {{count}} {{label}}', + aboutToDeleteCount_other: 'На път си да изтриеш {{count}} {{label}}', + addBelow: 'Добави отдолу', + addFilter: 'Добави филтър', + adminTheme: 'Цветова тема', + and: 'И', + applyChanges: 'Приложи промените', + ascending: 'Възходящ', + automatic: 'Автоматична', + backToDashboard: 'Обратно към таблото', + cancel: 'Отмени', + changesNotSaved: 'Промените ти не са запазени. Ако напуснеш сега, ще ги загубиш.', + close: 'Затвори', + collapse: 'Свий', + collections: 'Колекции', + columnToSort: 'Колона за сортиране', + columns: 'Колони', + confirm: 'Потвърди', + confirmDeletion: 'Потвърди изтриване', + confirmDuplication: 'Потвърди дупликация', + copied: 'Копирано', + copy: 'Копирай', + create: 'Създай', + createNew: 'Създай нов', + createNewLabel: 'Създай нов {{label}}', + created: 'Създаден', + createdAt: 'Създаден на', + creating: 'Създава се', + creatingNewLabel: 'Създаване на нов {{label}}', + dark: 'Тъмна', + dashboard: 'Табло', + delete: 'Изтрий', + deletedCountSuccessfully: 'Изтрити {{count}} {{label}} успешно.', + deletedSuccessfully: 'Изтрито успешно.', + deleting: 'Изтриване...', + descending: 'Низходящо', + deselectAllRows: 'Деселектирай всички редове', + duplicate: 'Дупликирай', + duplicateWithoutSaving: 'Дупликирай без да запазваш промените', + edit: 'Редактирай', + editLabel: 'Редактирай {{label}}', + editing: 'Редактиране', + editingLabel_many: 'Редактиране на {{count}} {{label}}', + editingLabel_one: 'Редактиране на {{count}} {{label}}', + editingLabel_other: 'Редактиране на {{count}} {{label}}', + email: 'Имейл', + emailAddress: 'Имейл адрес', + enterAValue: 'Въведи стойност', + error: 'Грешка', + errors: 'Грешки', + fallbackToDefaultLocale: 'Използвай локализация по подразбиране', + filter: 'Филтрирай', + filterWhere: 'Филтрирай {{label}} където', + filters: 'Филтри', + globals: 'Глобални', + language: 'Език', + lastModified: 'Последно променено', + leaveAnyway: 'Напусни въпреки това', + leaveWithoutSaving: 'Напусни без да запазиш', + light: 'Светла', + livePreview: 'Предварителен преглед', + loading: 'Зарежда се', + locale: 'Локализация', + locales: 'Локализации', + menu: 'Меню', + moveDown: 'Надолу', + moveUp: 'Нагоре', + newPassword: 'Нова парола', + noFiltersSet: 'Няма зададени филтри', + noLabel: '<Няма {{label}}>', + noOptions: 'Няма опции', + noResults: + '{{label}} не е открит. {{label}} не съществува или никой не отговаря на зададените филтри.', + noValue: 'Няма стойност', + none: 'Никакъв', + notFound: 'Няма открит', + nothingFound: 'Нищо не беше открито', + of: 'от', + open: 'Отвори', + or: 'Или', + order: 'Ред', + pageNotFound: 'Страницата не беше открита', + password: 'Парола', + payloadSettings: 'Настройки на Payload', + perPage: 'На страница: {{limit}}', + remove: 'Премахни', + reset: 'Нулиране', + row: 'ред', + rows: 'Редове', + save: 'Запази', + saving: 'Запазване...', + searchBy: 'Търси по {{label}}', + selectAll: 'Избери всички {{count}} {{label}}', + selectAllRows: 'Избери всички редове', + selectValue: 'Избери стойност', + selectedCount: '{{count}} {{label}} избрани', + showAllLabel: 'Покажи всички {{label}}', + sorryNotFound: 'Съжаляваме-няма нищо, което да отговаря на търсенето ти.', + sort: 'Сортирай', + sortByLabelDirection: 'Сортирай по {{label}} {{direction}}', + stayOnThisPage: 'Остани на тази страница', + submissionSuccessful: 'Успешно подаване.', + submit: 'Подай', + successfullyCreated: '{{label}} успешно създаден.', + successfullyDuplicated: '{{label}} успешно дупликиран.', + thisLanguage: 'Български', + titleDeleted: '{{label}} "{{title}}" успешно изтрит.', + unauthorized: 'Неавторизиран', + unsavedChangesDuplicate: 'Имаш незапазени промени. Искаш ли да продължиш да дупликираш?', + untitled: 'Неозаглавен', + updatedAt: 'Обновен на', + updatedCountSuccessfully: 'Обновени {{count}} {{label}} успешно.', + updatedSuccessfully: 'Обновен успешно.', + updating: 'Обновява се', + uploading: 'Качва се', + user: 'Потребител', + users: 'Потребители', + value: 'Стойност', + welcome: 'Добре дошъл', + }, + operators: { + contains: 'съдържа', + equals: 'е равно на', + exists: 'съществува', + isGreaterThan: 'е по-голямо от', + isGreaterThanOrEqualTo: 'е по-голямо от или равно на', + isIn: 'е в', + isLessThan: 'е по-малко от', + isLessThanOrEqualTo: 'е по-малко от или равно на', + isLike: 'е като', + isNotEqualTo: 'не е равно на', + isNotIn: 'не е в', + near: 'близко', + }, + upload: { + crop: 'Изрязване', + cropToolDescription: + 'Плъзни ъглите на избраната област, избери нова област или коригирай стойностите по-долу.', + dragAndDrop: 'Дръпни и пусни файл', + dragAndDropHere: 'или дръпни и пусни файла тук', + editImage: 'Редактирай изображение', + fileName: 'Име на файла', + fileSize: 'Големина на файла', + focalPoint: 'Фокусна точка', + focalPointDescription: + 'Премести фокусната точка директно върху визуализацията или регулирай стойностите по-долу.', + height: 'Височина', + lessInfo: 'По-малко информация', + moreInfo: 'Повече информация', + previewSizes: 'Преглед на размери', + selectCollectionToBrowse: 'Избери колекция, която да разгледаш', + selectFile: 'Избери файл', + setCropArea: 'Задай област за изрязване', + setFocalPoint: 'Задай фокусна точка', + sizes: 'Големини', + sizesFor: 'Размери за {{label}}', + width: 'Ширина', + }, + validation: { + emailAddress: 'Моля, въведи валиден имейл адрес.', + enterNumber: 'Моля, въведи валиден номер.', + fieldHasNo: 'Това поле няма {{label}}', + greaterThanMax: '{{value}} е по-голямо от максимално допустимото {{label}} от {{max}}.', + invalidInput: 'Това поле има невалиден вход.', + invalidSelection: 'Това поле има невалидна селекция.', + invalidSelections: 'Това поле има следните невалидни селекции:', + lessThanMin: '{{value}} е по-малко от минимално допустимото {{label}} от {{min}}.', + limitReached: 'Достигнат е лимитът, могат да бъдат добавени само {{max}} елемента.', + longerThanMin: + 'Тази стойност трябва да е по-голяма от минималната стойност от {{minLength}} символа.', + notValidDate: '"{{value}}" не е валидна дата.', + required: 'Това поле е задължително.', + requiresAtLeast: 'Това поле изисква поне {{count}} {{label}}.', + requiresNoMoreThan: 'Това поле изисква не повече от {{count}} {{label}}.', + requiresTwoNumbers: 'Това поле изисква 2 числа.', + shorterThanMax: + 'Тази стойност трябва да е по-малка от максималната стойност от {{maxLength}} символа.', + trueOrFalse: 'Това поле може да бъде само "true" или "false".', + validUploadID: 'Това поле не е валиден идентификатор на качването.', + }, + version: { + type: 'Тип', + aboutToPublishSelection: 'На път си да публикуваш всички избрани {{label}}. Сигурен ли си?', + aboutToRestore: + 'На път си да възстановиш този {{label}} документ до състоянието му от {{versionDate}}.', + aboutToRestoreGlobal: + 'На път си да възстановиш глобалния докумнт {{label}} до състоянието му от {{versionDate}}.', + aboutToRevertToPublished: + 'На път си да възстановиш промените на този документ до публикуваното му състояние. Сигурен ли си?', + aboutToUnpublish: 'На път си да скриеш този документ. Сигурен ли си?', + aboutToUnpublishSelection: 'На път си да скриеш всички избрани {{label}}. Сигурен ли си?', + autosave: 'Автоматично запазване', + autosavedSuccessfully: 'Успешно автоматично запазване.', + autosavedVersion: 'Автоматично запазена версия', + changed: 'Променен', + compareVersion: 'Сравни версия с:', + confirmPublish: 'Потвърди публикуване', + confirmRevertToSaved: 'Потвърди възстановяване до запазен', + confirmUnpublish: 'Потвърди скриване', + confirmVersionRestoration: 'Потвърди възстановяване на версия', + currentDocumentStatus: 'Сегашен статус на документа: {{docStatus}}', + draft: 'Чернова', + draftSavedSuccessfully: 'Чернова запазена успешно.', + lastSavedAgo: 'последно запазено преди {{distance}}', + noFurtherVersionsFound: 'Не са открити повече версии', + noRowsFound: 'Не е открит {{label}}', + preview: 'Предварителен преглед', + problemRestoringVersion: 'Имаше проблем при възстановяването на тази версия', + publish: 'Публикувай', + publishChanges: 'Публикувай промените', + published: 'Публикувано', + publishing: 'Публикуване', + restoreThisVersion: 'Възстанови тази версия', + restoredSuccessfully: 'Успешно възстановяване.', + restoring: 'Възстановяване...', + revertToPublished: 'Върни се до публикуваното', + reverting: 'Връщане..', + saveDraft: 'Запази чернова', + selectLocales: 'Избери локализации за показване', + selectVersionToCompare: 'Избери версия за сравняване', + showLocales: 'Покажи преводи:', + showingVersionsFor: 'Показване на версии за:', + status: 'Статус', + unpublish: 'Скрий', + unpublishing: 'Скриване...', + version: 'Версия', + versionCount_many: '{{count}} открити версии', + versionCount_none: 'Няма открити версии', + versionCount_one: '{{count}} окрита версия', + versionCount_other: '{{count}} открити версии', + versionCreatedOn: '{{version}} създадена на:', + versionID: 'Идентификатор на версията', + versions: 'Версии', + viewingVersion: 'Гледане на версия за {{entityLabel}} {{documentTitle}}', + viewingVersionGlobal: 'Гледане на версия за глобалния документ {{entityLabel}}', + viewingVersions: 'Гледане на версии за {{entityLabel}} {{documentTitle}}', + viewingVersionsGlobal: 'Гледане на версии за глобалния документ {{entityLabel}}', + }, + }, +} diff --git a/packages/translations/src/languages/cs.ts b/packages/translations/src/languages/cs.ts new file mode 100644 index 0000000000..a11c8e78df --- /dev/null +++ b/packages/translations/src/languages/cs.ts @@ -0,0 +1,394 @@ +import type { Language } from '../types.js' + +export const cs: Language = { + dateFNSKey: 'cs', + translations: { + authentication: { + account: 'Účet', + accountOfCurrentUser: 'Účet současného uživatele', + alreadyActivated: 'Již aktivováno', + alreadyLoggedIn: 'Již přihlášen', + apiKey: 'Klíč API', + backToLogin: 'Zpět na přihlášení', + beginCreateFirstUser: 'Začněte vytvořením svého prvního uživatele.', + changePassword: 'Změnit heslo', + checkYourEmailForPasswordReset: + 'Zkontrolujte svůj email a najděte v něm odkaz, který vám umožní bezpečně resetovat vaše heslo.', + confirmGeneration: 'Potvrdit generaci', + confirmPassword: 'Potvrdit heslo', + createFirstUser: 'Vytvořit prvního uživatele', + emailNotValid: 'Zadaný email není platný', + emailSent: 'Email odeslán', + enableAPIKey: 'Povolit klíč API', + failedToUnlock: 'Nepodařilo se odemknout', + forceUnlock: 'Vynutit odemčení', + forgotPassword: 'Zapomněli jste heslo?', + forgotPasswordEmailInstructions: + 'Zadejte svůj email níže. Obdržíte email s instrukcemi, jak resetovat vaše heslo.', + forgotPasswordQuestion: 'Zapomněli jste heslo?', + generate: 'Generovat', + generateNewAPIKey: 'Generovat nový klíč API', + generatingNewAPIKeyWillInvalidate: + 'Vytvoření nového klíče API <1>zneplatní předchozí klíč. Opravdu chcete pokračovat?', + lockUntil: 'Uzamknout do', + logBackIn: 'Znovu se přihlásit', + logOut: 'Odhlásit se', + loggedIn: 'Abyste se mohli přihlásit s jiným uživatelem, nejdříve se <0>odhlaste.', + loggedInChangePassword: + 'Pro změnu hesla přejděte do svého <0>účtu a zde si heslo upravte.', + loggedOutInactivity: 'Byli jste odhlášeni z důvodu neaktivity.', + loggedOutSuccessfully: 'Byli jste úspěšně odhlášeni.', + login: 'Přihlásit se', + loginAttempts: 'Pokusy o přihlášení', + loginUser: 'Přihlásit uživatele', + loginWithAnotherUser: + 'Abyste se mohli přihlásit s jiným uživatelem, nejdříve se <0>odhlaste.', + logout: 'Odhlásit se', + logoutUser: 'Odhlásit uživatele', + newAPIKeyGenerated: 'Byl vygenerován nový klíč API.', + newAccountCreated: + 'Pro přístup k {{serverURL}} byl pro vás vytvořen nový účet. Klepněte na následující odkaz nebo zkopírujte URL do svého prohlížeče pro ověření vašeho emailu: {{verificationURL}}
    Po ověření vašeho emailu se budete moci úspěšně přihlásit.', + newPassword: 'Nové heslo', + resetPassword: 'Resetovat heslo', + resetPasswordExpiration: 'Expirace resetování hesla', + resetPasswordToken: 'Token pro resetování hesla', + resetYourPassword: 'Resetujte své heslo', + stayLoggedIn: 'Zůstat přihlášen', + successfullyUnlocked: 'Úspěšně odemčeno', + unableToVerify: 'Nepodařilo se ověřit', + verified: 'Ověřeno', + verifiedSuccessfully: 'Úspěšně ověřeno', + verify: 'Ověřit', + verifyUser: 'Ověřit uživatele', + verifyYourEmail: 'Ověřte svůj email', + youAreInactive: + 'Nějakou dobu jste nebyli aktivní a brzy budete automaticky odhlášeni z bezpečnostních důvodů. Chcete zůstat přihlášen?', + youAreReceivingResetPassword: + 'Tento email obdržíte, protože jste (nebo někdo jiný) požádali o resetování hesla pro váš účet.', + youDidNotRequestPassword: + 'Pokud jste o to nepožádali, ignorujte prosím tento e-mail a vaše heslo zůstane nezměněno.', + }, + error: { + accountAlreadyActivated: 'Tento účet již byl aktivován.', + autosaving: 'Při automatickém ukládání tohoto dokumentu došlo k chybě.', + correctInvalidFields: 'Opravte neplatná pole.', + deletingFile: 'Při mazání souboru došlo k chybě.', + deletingTitle: + 'Při mazání {{title}} došlo k chybě. Zkontrolujte své připojení a zkuste to znovu.', + emailOrPasswordIncorrect: 'Zadaný email nebo heslo není správné.', + followingFieldsInvalid_one: 'Následující pole je neplatné:', + followingFieldsInvalid_other: 'Následující pole jsou neplatná:', + incorrectCollection: 'Nesprávná kolekce', + invalidFileType: 'Neplatný typ souboru', + invalidFileTypeValue: 'Neplatný typ souboru: {{value}}', + loadingDocument: 'Při načítání dokumentu s ID {{id}} došlo k chybě.', + missingEmail: 'Chybějící email.', + missingIDOfDocument: 'Chybějící ID dokumentu pro aktualizaci.', + missingIDOfVersion: 'Chybějící ID verze.', + missingRequiredData: 'Chybějící povinná data.', + noFilesUploaded: 'Nebyly nahrány žádné soubory.', + noMatchedField: 'Pro "{{label}}" nebylo nalezeno žádné odpovídající pole', + noUser: 'Žádný uživatel', + notAllowedToAccessPage: 'Nemáte povolení přistupovat k této stránce.', + notAllowedToPerformAction: 'Nemáte povolení provádět tuto akci.', + notFound: 'Požadovaný zdroj nebyl nalezen.', + previewing: 'Při náhledu tohoto dokumentu došlo k chybě.', + problemUploadingFile: 'Při nahrávání souboru došlo k chybě.', + tokenInvalidOrExpired: 'Token je neplatný nebo vypršel.', + unPublishingDocument: 'Při zrušení publikování tohoto dokumentu došlo k chybě.', + unableToDeleteCount: 'Nelze smazat {{count}} z {{total}} {{label}}', + unableToUpdateCount: 'Nelze aktualizovat {{count}} z {{total}} {{label}}.', + unauthorized: 'Neautorizováno, pro zadání tohoto požadavku musíte být přihlášeni.', + unknown: 'Došlo k neznámé chybě.', + unspecific: 'Došlo k chybě.', + userLocked: 'Tento uživatel je uzamčen kvůli příliš mnoha neúspěšným pokusům o přihlášení.', + valueMustBeUnique: 'Hodnota musí být jedinečná', + verificationTokenInvalid: 'Ověřovací token je neplatný.', + }, + fields: { + addLabel: 'Přidat {{label}}', + addLink: 'Přidat Odkaz', + addNew: 'Přidat nový', + addNewLabel: 'Přidat nový {{label}}', + addRelationship: 'Přidat vztah', + addUpload: 'Přidat nahrávání', + block: 'blok', + blockType: 'Typ bloku', + blocks: 'bloky', + chooseBetweenCustomTextOrDocument: + 'Zvolte mezi vložením vlastního textového URL nebo odkazováním na jiný dokument.', + chooseDocumentToLink: 'Vyberte dokument, na který se chcete odkázat', + chooseFromExisting: 'Vybrat z existujících', + chooseLabel: 'Vybrat {{label}}', + collapseAll: 'Sbalit vše', + customURL: 'Vlastní URL', + editLabelData: 'Upravit data {{label}}', + editLink: 'Upravit odkaz', + editRelationship: 'Upravit vztah', + enterURL: 'Zadejte URL', + internalLink: 'Interní odkaz', + itemsAndMore: '{{items}} a {{count}} dalších', + labelRelationship: 'Vztah {{label}}', + latitude: 'Zeměpisná šířka', + linkType: 'Typ odkazu', + linkedTo: 'Odkaz na <0>{{label}}', + longitude: 'Zeměpisná délka', + newLabel: 'Nový {{label}}', + openInNewTab: 'Otevřít v nové záložce', + passwordsDoNotMatch: 'Hesla se neshodují.', + relatedDocument: 'Související dokument', + relationTo: 'Vztah k', + removeRelationship: 'Odstranit vztah', + removeUpload: 'Odstranit nahrání', + saveChanges: 'Uložit změny', + searchForBlock: 'Hledat blok', + selectExistingLabel: 'Vybrat existující {{label}}', + selectFieldsToEdit: 'Vyberte pole, která chcete upravit', + showAll: 'Zobrazit vše', + swapRelationship: 'Zaměnit vztah', + swapUpload: 'Vyměnit nahrání', + textToDisplay: 'Text k zobrazení', + toggleBlock: 'Přepnout blok', + uploadNewLabel: 'Nahrát nový {{label}}', + }, + general: { + aboutToDelete: 'Chystáte se odstranit {{label}} <1>{{title}}. Jste si jisti?', + aboutToDeleteCount_many: 'Chystáte se smazat {{count}} {{label}}', + aboutToDeleteCount_one: 'Chystáte se smazat {{count}} {{label}}', + aboutToDeleteCount_other: 'Chystáte se smazat {{count}} {{label}}', + addBelow: 'Přidat pod', + addFilter: 'Přidat filtr', + adminTheme: 'Motiv administračního rozhraní', + and: 'A', + applyChanges: 'Použít změny', + ascending: 'Vzestupně', + automatic: 'Automatické', + backToDashboard: 'Zpět na nástěnku', + cancel: 'Zrušit', + changesNotSaved: 'Vaše změny nebyly uloženy. Pokud teď odejdete, ztratíte své změny.', + close: 'Zavřít', + collapse: 'Sbalit', + collections: 'Kolekce', + columnToSort: 'Sloupec k seřazení', + columns: 'Sloupce', + confirm: 'Potvrdit', + confirmDeletion: 'Potvrdit odstranění', + confirmDuplication: 'Potvrdit duplikaci', + copied: 'Zkopírováno', + copy: 'Kopírovat', + create: 'Vytvořit', + createNew: 'Vytvořit nové', + createNewLabel: 'Vytvořit nový {{label}}', + created: 'Vytvořeno', + createdAt: 'Vytvořeno v', + creating: 'Vytváření', + creatingNewLabel: 'Vytváření nového {{label}}', + dark: 'Tmavé', + dashboard: 'Nástěnka', + delete: 'Odstranit', + deletedCountSuccessfully: 'Úspěšně smazáno {{count}} {{label}}.', + deletedSuccessfully: 'Úspěšně odstraněno.', + deleting: 'Odstraňování...', + descending: 'Sestupně', + deselectAllRows: 'Zrušte výběr všech řádků', + duplicate: 'Duplikovat', + duplicateWithoutSaving: 'Duplikovat bez uložení změn', + edit: 'Upravit', + editLabel: 'Upravit {{label}}', + editing: 'Úpravy', + editingLabel_many: 'Úprava {{count}} {{label}}', + editingLabel_one: 'Úprava {{count}} {{label}}', + editingLabel_other: 'Úprava {{count}} {{label}}', + email: 'E-mail', + emailAddress: 'E-mailová adresa', + enterAValue: 'Zadejte hodnotu', + error: 'Chyba', + errors: 'Chyby', + fallbackToDefaultLocale: 'Zpětné přepnutí do výchozího locale', + filter: 'Filtr', + filterWhere: 'Filtrovat {{label}} kde', + filters: 'Filtry', + globals: 'Globální', + language: 'Jazyk', + lastModified: 'Naposledy změněno', + leaveAnyway: 'Přesto odejít', + leaveWithoutSaving: 'Odejít bez uložení', + light: 'Světlé', + livePreview: 'Náhled', + loading: 'Načítání', + locale: 'Místní verze', + locales: 'Lokality', + menu: 'Jídelní lístek', + moveDown: 'Posunout dolů', + moveUp: 'Posunout nahoru', + newPassword: 'Nové heslo', + noFiltersSet: 'Nenastaveny žádné filtry', + noLabel: '<Žádný {{label}}>', + noOptions: 'Žádné možnosti', + noResults: + 'Nebyly nalezeny žádné {{label}}. Buď ještě neexistují žádné {{label}}, nebo žádné nesplňují filtry, které jste zadali výše.', + noValue: 'Žádná hodnota', + none: 'Žádné', + notFound: 'Nenalezeno', + nothingFound: 'Nic nenalezeno', + of: 'z', + open: 'Otevřít', + or: 'Nebo', + order: 'Pořadí', + pageNotFound: 'Stránka nenalezena', + password: 'Heslo', + payloadSettings: 'Nastavení datového záběru', + perPage: 'Na stránku: {{limit}}', + remove: 'Odstranit', + reset: 'Resetovat', + row: 'Řádek', + rows: 'Řádky', + save: 'Uložit', + saving: 'Ukládání...', + searchBy: 'Vyhledat podle {{label}}', + selectAll: 'Vybrat vše {{count}} {{label}}', + selectAllRows: 'Vyberte všechny řádky', + selectValue: 'Vyberte hodnotu', + selectedCount: 'Vybráno {{count}} {{label}}', + showAllLabel: 'Zobrazit všechny {{label}}', + sorryNotFound: 'Je nám líto, ale neexistuje nic, co by odpovídalo vašemu požadavku.', + sort: 'Třídit', + sortByLabelDirection: 'Seřadit podle {{label}} {{direction}}', + stayOnThisPage: 'Zůstat na této stránce', + submissionSuccessful: 'Odeslání úspěšné.', + submit: 'Odeslat', + successfullyCreated: '{{label}} úspěšně vytvořeno.', + successfullyDuplicated: '{{label}} úspěšně duplikováno.', + thisLanguage: 'Čeština', + titleDeleted: '{{label}} "{{title}}" úspěšně smazáno.', + unauthorized: 'Neoprávněný', + unsavedChangesDuplicate: 'Máte neuložené změny. Chtěli byste pokračovat v duplikování?', + untitled: 'Bez názvu', + updatedAt: 'Aktualizováno v', + updatedCountSuccessfully: 'Úspěšně aktualizováno {{count}} {{label}}.', + updatedSuccessfully: 'Úspěšně aktualizováno.', + updating: 'Aktualizace', + uploading: 'Nahrávání', + user: 'Uživatel', + users: 'Uživatelé', + value: 'Hodnota', + welcome: 'Vítejte', + }, + operators: { + contains: 'obsahuje', + equals: 'rovná se', + exists: 'existuje', + isGreaterThan: 'je větší než', + isGreaterThanOrEqualTo: 'je větší nebo rovno', + isIn: 'je v', + isLessThan: 'je menší než', + isLessThanOrEqualTo: 'je menší nebo rovno', + isLike: 'je jako', + isNotEqualTo: 'není rovno', + isNotIn: 'není in', + near: 'blízko', + }, + upload: { + crop: 'Plodina', + cropToolDescription: + 'Přetáhněte rohy vybrané oblasti, nakreslete novou oblast nebo upravte hodnoty níže.', + dragAndDrop: 'Přetáhněte soubor', + dragAndDropHere: 'nebo sem přetáhněte soubor', + editImage: 'Upravit obrázek', + fileName: 'Název souboru', + fileSize: 'Velikost souboru', + focalPoint: 'Středobod', + focalPointDescription: 'Přetáhněte bod zaměření přímo na náhled nebo upravte hodnoty níže.', + height: 'Výška', + lessInfo: 'Méně informací', + moreInfo: 'Více informací', + previewSizes: 'Náhled velikostí', + selectCollectionToBrowse: 'Vyberte kolekci pro procházení', + selectFile: 'Vyberte soubor', + setCropArea: 'Nastavit oblast ořezu', + setFocalPoint: 'Nastavit ohnisko', + sizes: 'Velikosti', + sizesFor: 'Velikosti pro {{label}}', + width: 'Šířka', + }, + validation: { + emailAddress: 'Zadejte prosím platnou e-mailovou adresu.', + enterNumber: 'Zadejte prosím platné číslo.', + fieldHasNo: 'Toto pole nemá {{label}}', + greaterThanMax: '{{value}} je vyšší než maximálně povolená {{label}} {{max}}.', + invalidInput: 'Toto pole má neplatný vstup.', + invalidSelection: 'Toto pole má neplatný výběr.', + invalidSelections: 'Toto pole má následující neplatné výběry:', + lessThanMin: '{{value}} je nižší než minimálně povolená {{label}} {{min}}.', + limitReached: 'Dosáhnutý limit, mohou být přidány pouze {{max}} položky.', + longerThanMin: 'Tato hodnota musí být delší než minimální délka {{minLength}} znaků.', + notValidDate: '"{{value}}" není platné datum.', + required: 'Toto pole je povinné.', + requiresAtLeast: 'Toto pole vyžaduje alespoň {{count}} {{label}}.', + requiresNoMoreThan: 'Toto pole vyžaduje ne více než {{count}} {{label}}.', + requiresTwoNumbers: 'Toto pole vyžaduje dvě čísla.', + shorterThanMax: 'Tato hodnota musí být kratší než maximální délka {{maxLength}} znaků.', + trueOrFalse: 'Toto pole může být rovno pouze true nebo false.', + validUploadID: 'Toto pole není platné ID pro odeslání.', + }, + version: { + type: 'Typ', + aboutToPublishSelection: 'Chystáte se publikovat všechny {{label}} ve výběru. Jsi si jistá?', + aboutToRestore: + 'Chystáte se obnovit tento {{label}} dokument do stavu, v jakém byl {{versionDate}}.', + aboutToRestoreGlobal: + 'Chystáte se obnovit globální {{label}} do stavu, v jakém byl {{versionDate}}.', + aboutToRevertToPublished: + 'Chystáte se vrátit změny tohoto dokumentu do jeho publikovaného stavu. Jste si jisti?', + aboutToUnpublish: 'Chystáte se zrušit publikování tohoto dokumentu. Jste si jisti?', + aboutToUnpublishSelection: + 'Chystáte se zrušit publikování všech {{label}} ve výběru. Jsi si jistá?', + autosave: 'Automatické uložení', + autosavedSuccessfully: 'Úspěšně uloženo automaticky.', + autosavedVersion: 'Verze automatického uložení', + changed: 'Změněno', + compareVersion: 'Porovnat verzi s:', + confirmPublish: 'Potvrďte publikování', + confirmRevertToSaved: 'Potvrdit vrácení k uloženému', + confirmUnpublish: 'Potvrdit zrušení publikování', + confirmVersionRestoration: 'Potvrdit obnovení verze', + currentDocumentStatus: 'Současný {{docStatus}} dokument', + draft: 'Koncept', + draftSavedSuccessfully: 'Koncept úspěšně uložen.', + lastSavedAgo: 'Naposledy uloženo před {{distance}}', + noFurtherVersionsFound: 'Nenalezeny další verze', + noRowsFound: 'Nenalezen {{label}}', + preview: 'Náhled', + problemRestoringVersion: 'Při obnovování této verze došlo k problému', + publish: 'Publikovat', + publishChanges: 'Publikovat změny', + published: 'Publikováno', + publishing: 'Publikování', + restoreThisVersion: 'Obnovit tuto verzi', + restoredSuccessfully: 'Úspěšně obnoveno.', + restoring: 'Obnovování...', + revertToPublished: 'Vrátit se k publikovanému', + reverting: 'Vracení...', + saveDraft: 'Uložit koncept', + selectLocales: 'Vyberte místní verze pro zobrazení', + selectVersionToCompare: 'Vyberte verzi pro porovnání', + showLocales: 'Zobrazit místní verze:', + showingVersionsFor: 'Zobrazují se verze pro:', + status: 'Stav', + unpublish: 'Zrušit publikování', + unpublishing: 'Zrušuji publikování...', + version: 'Verze', + versionCount_many: '{{count}} verzí nalezeno', + versionCount_none: 'Žádné verze nenalezeny', + versionCount_one: '{{count}} verze nalezena', + versionCount_other: '{{count}} verzí nalezeno', + versionCreatedOn: '{{version}} vytvořena:', + versionID: 'ID verze', + versions: 'Verze', + viewingVersion: 'Zobrazuji verzi pro {{entityLabel}} {{documentTitle}}', + viewingVersionGlobal: 'Zobrazuji verzi pro globální {{entityLabel}}', + viewingVersions: 'Zobrazuji verze pro {{entityLabel}} {{documentTitle}}', + viewingVersionsGlobal: 'Zobrazuji verze pro globální {{entityLabel}}', + }, + }, +} diff --git a/packages/translations/src/languages/de.ts b/packages/translations/src/languages/de.ts new file mode 100644 index 0000000000..dbbd739570 --- /dev/null +++ b/packages/translations/src/languages/de.ts @@ -0,0 +1,400 @@ +import type { Language } from '../types.js' + +export const de: Language = { + dateFNSKey: 'de', + translations: { + authentication: { + account: 'Konto', + accountOfCurrentUser: 'Aktuelles Benutzerkonto', + alreadyActivated: 'Bereits aktiviert', + alreadyLoggedIn: 'Bereits angemeldet', + apiKey: 'API-Key', + backToLogin: 'Zurück zur Anmeldung', + beginCreateFirstUser: 'Erstelle deinen ersten Benutzer um zu beginnen', + changePassword: 'Passwort ändern', + checkYourEmailForPasswordReset: + 'Du solltest eine E-Mail mit einem Link zum sicheren Zurücksetzen deines Passworts erhalten haben.', + confirmGeneration: 'Generierung bestätigen', + confirmPassword: 'Passwort bestätigen', + createFirstUser: 'Ersten Benutzer erstellen', + emailNotValid: 'Die angegebene E-Mail-Adresse ist ungültig', + emailSent: 'E-Mail verschickt', + enableAPIKey: 'API-Key aktivieren', + failedToUnlock: 'Konnte nicht entsperren', + forceUnlock: 'Entsperrung erzwingen', + forgotPassword: 'Passwort vergessen', + forgotPasswordEmailInstructions: + 'Bitte gib deine E-Mail-Adresse an. Du wirst eine E-Mail mit Instruktionen zum Zurücksetzen deines Passworts erhalten.', + forgotPasswordQuestion: 'Passwort vergessen?', + generate: 'Generieren', + generateNewAPIKey: 'Neuen API-Key generieren', + generatingNewAPIKeyWillInvalidate: + 'Die Generierung eines neuen API-Keys wird den vorherigen Key <1>ungültig machen. Bist du sicher, dass du fortfahren möchtest?', + lockUntil: 'Sperre bis', + logBackIn: 'Wieder anmelden', + logOut: 'Abmelden', + loggedIn: + 'Um dich mit einem anderen Benutzer anzumelden, musst du dich zuerst <0>abmelden.', + loggedInChangePassword: + 'Um dein Passwort zu ändern, gehe in dein <0>Konto und ändere dort dein Passwort.', + loggedOutInactivity: 'Du wurdest aufgrund von Inaktivität abgemeldet.', + loggedOutSuccessfully: 'Du wurdest erfolgreich abgemeldet.', + login: 'Anmelden', + loginAttempts: 'Anmelde-Versuche', + loginUser: 'Benutzeranmeldung', + loginWithAnotherUser: + 'Um dich mit einem anderen Benutzer anzumelden, musst du dich zuerst <0>abmelden.', + logout: 'Abmelden', + logoutUser: 'Benutzerabmeldung', + newAPIKeyGenerated: 'Neuer API-Key wurde generiert', + newAccountCreated: + 'Ein neues Konto wurde gerade für dich auf {{serverURL}} erstellt. Bitte klicke auf den folgenden Link oder kopiere die URL in deinen Browser um deine E-Mail-Adresse zu verifizieren: {{verificationURL}}
    Nachdem du deine E-Mail-Adresse verifiziert hast, kannst du dich erfolgreich anmelden.', + newPassword: 'Neues Passwort', + resetPassword: 'Passwort zurücksetzen', + resetPasswordExpiration: 'Passwort-Ablauf zurücksetzen', + resetPasswordToken: 'Passwort-Token zurücksetzen', + resetYourPassword: 'Dein Passwort zurücksetzen', + stayLoggedIn: 'Angemeldet bleiben', + successfullyUnlocked: 'Erfolgreich entsperrt', + unableToVerify: 'Konnte nicht verifiziert werden', + verified: 'Verifiziert', + verifiedSuccessfully: 'Erfolgreich verifiziert', + verify: 'Verifizieren', + verifyUser: 'Benutzer verifizieren', + verifyYourEmail: 'Deine E-Mail-Adresse verifizieren', + youAreInactive: + 'Du warst seit einiger Zeit inaktiv und wirst in kurzer Zeit zu deiner eigenen Sicherheit abgemeldet. Möchtest du angemeldet bleiben?', + youAreReceivingResetPassword: + 'Du erhältst diese Nachricht, weil du (oder jemand anderes) das Zurücksetzen deines Passworts für dein Benutzerkonto angefordert hat. Bitte klicke auf den folgenden Link, oder kopiere die URL in deinen Browser den Prozess abzuschließen:', + youDidNotRequestPassword: + 'Solltest du dies nicht angefordert haben, ignoriere diese E-Mail und dein Passwort bleibt unverändert.', + }, + error: { + accountAlreadyActivated: 'Dieses Konto wurde bereits aktiviert', + autosaving: 'Es gab ein Problem während der automatischen Speicherung für dieses Dokument', + correctInvalidFields: 'Bitte ungültige Felder korrigieren.', + deletingFile: 'Beim Löschen der Datei ist ein Fehler aufgetreten.', + deletingTitle: + 'Es gab ein Problem während der Löschung von {{title}}. Bitte überprüfe deine Verbindung und versuche es erneut.', + emailOrPasswordIncorrect: 'Die E-Mail-Adresse oder das Passwort sind nicht korrekt.', + followingFieldsInvalid_one: 'Das folgende Feld ist nicht korrekt:', + followingFieldsInvalid_other: 'Die folgenden Felder sind nicht korrekt:', + incorrectCollection: 'Falsche Sammlung', + invalidFileType: 'Ungültiger Datei-Typ', + invalidFileTypeValue: 'Ungültiger Datei-Typ: {{value}}', + loadingDocument: 'Es gab ein Problem, das Dokument mit der ID {{id}} zu laden.', + missingEmail: 'E-Mail-Adresse fehlt.', + missingIDOfDocument: 'ID des zu speichernden Dokuments fehlt.', + missingIDOfVersion: 'ID der Version fehlt.', + missingRequiredData: 'Erforderliche Daten fehlen.', + noFilesUploaded: 'Es wurden keine Dateien hochgeladen.', + noMatchedField: 'Kein übereinstimmendes Feld für "{{label}}" gefunden', + noUser: 'Kein Benutzer', + notAllowedToAccessPage: 'Du hast keine Berechtigung, auf diese Seite zuzugreifen.', + notAllowedToPerformAction: 'Du hast keine Berechtigung, diese Aktion auszuführen.', + notFound: 'Die angeforderte Ressource wurde nicht gefunden.', + previewing: 'Es gab ein Problem beim Vorschauen dieses Dokuments.', + problemUploadingFile: 'Es gab ein Problem während des Hochladens der Datei.', + tokenInvalidOrExpired: 'Token ist entweder ungültig oder abgelaufen.', + unPublishingDocument: 'Es gab ein Problem, dieses Dokument auf Entwurf zu setzen.', + unableToDeleteCount: '{{count}} von {{total}} {{label}} konnte nicht gelöscht werden.', + unableToUpdateCount: '{{count}} von {{total}} {{label}} konnte nicht aktualisiert werden.', + unauthorized: 'Nicht autorisiert - du musst angemeldet sein, um diese Anfrage zu stellen.', + unknown: 'Ein unbekannter Fehler ist aufgetreten.', + unspecific: 'Ein Fehler ist aufgetreten.', + userLocked: + 'Dieser Benutzer ist auf Grund zu vieler unerfolgreicher Anmelde-Versuche gesperrt.', + valueMustBeUnique: 'Wert muss einzigartig sein', + verificationTokenInvalid: 'Verifizierungs-Token ist nicht korrekt.', + }, + fields: { + addLabel: '{{label}} hinzufügen', + addLink: 'Link Hinzufügen', + addNew: 'Neu erstellen', + addNewLabel: '{{label}} erstellen', + addRelationship: 'Verknüpfung Hinzufügen', + addUpload: 'Hochladen Hinzufügen', + block: 'Block', + blockType: 'Block-Typ', + blocks: 'Blöcke', + chooseBetweenCustomTextOrDocument: + 'Wähle zwischen einer eigenen Text-URL oder verlinke zu einem anderen Dokument.', + chooseDocumentToLink: 'Wähle ein Dokument zum Verlinken', + chooseFromExisting: 'Aus vorhandenen auswählen', + chooseLabel: '{{label}} auswählen', + collapseAll: 'Alle einklappen', + customURL: 'Eigene URL', + editLabelData: '{{label}} bearbeiten', + editLink: 'Bearbeite Link', + editRelationship: 'Beziehung Hinzufügen', + enterURL: 'URL eingeben', + internalLink: 'Interner Link', + itemsAndMore: '{{items}} und {{count}} mehr', + labelRelationship: '{{label}} Verknüpfung', + latitude: 'Breitengrad', + linkType: 'Linktyp', + linkedTo: 'Verweist auf <0>{{label}}', + longitude: 'Längengrad', + newLabel: '{{label}} erstellen', + openInNewTab: 'Öffne im neuen Tab', + passwordsDoNotMatch: 'Passwörter stimmen nicht überein.', + relatedDocument: 'Verknüpftes Dokument', + relationTo: 'Verknüpfung zu', + removeRelationship: 'Beziehung Entfernen', + removeUpload: 'Hochgeladene Datei Löschen', + saveChanges: 'Änderungen speichern', + searchForBlock: 'Nach Block suchen', + selectExistingLabel: '{{label}} auswählen (vorhandene)', + selectFieldsToEdit: 'Wählen Sie die zu bearbeitenden Felder aus', + showAll: 'Alle anzeigen', + swapRelationship: 'Beziehung Tauschen', + swapUpload: 'Datei Austauschen', + textToDisplay: 'Angezeigter Text', + toggleBlock: 'Block umschalten', + uploadNewLabel: '{{label}} neu hochladen', + }, + general: { + aboutToDelete: 'Du bist dabei {{label}} <1>{{title}} zu löschen. Bist du dir sicher?', + aboutToDeleteCount_many: 'Sie sind dabei, {{count}} {{label}} zu löschen', + aboutToDeleteCount_one: 'Sie sind dabei, {{count}} {{label}} zu löschen', + aboutToDeleteCount_other: 'Sie sind dabei, {{count}} {{label}} zu löschen', + addBelow: 'Darunter hinzufügen', + addFilter: 'Filter hinzufügen', + adminTheme: 'Admin-Farbthema', + and: 'Und', + applyChanges: 'Änderungen anwenden', + ascending: 'Aufsteigend', + automatic: 'Automatisch', + backToDashboard: 'Zurück zur Übersicht', + cancel: 'Abbrechen', + changesNotSaved: + 'Deine Änderungen wurden nicht gespeichert. Wenn du diese Seite verlässt, gehen deine Änderungen verloren.', + close: 'Schließen', + collapse: 'Einklappen', + collections: 'Sammlungen', + columnToSort: 'Spalten zum Sortieren', + columns: 'Spalten', + confirm: 'Bestätigen', + confirmDeletion: 'Löschen bestätigen', + confirmDuplication: 'Duplizieren bestätigen', + copied: 'Kopiert', + copy: 'Kopieren', + create: 'Erstellen', + createNew: 'Neu Erstellen', + createNewLabel: '{{label}} neu erstellen', + created: 'Erstellt', + createdAt: 'Erstellt am', + creating: 'Erstelle', + creatingNewLabel: 'Erstelle {{label}}', + dark: 'Dunkel', + dashboard: 'Übersicht', + delete: 'Löschen', + deletedCountSuccessfully: '{{count}} {{label}} erfolgreich gelöscht.', + deletedSuccessfully: 'Erfolgreich gelöscht.', + deleting: 'Lösche...', + descending: 'Absteigend', + deselectAllRows: 'Alle Zeilen abwählen', + duplicate: 'Duplizieren', + duplicateWithoutSaving: 'Dupliziere ohne Änderungen zu speichern', + edit: 'Bearbeiten', + editLabel: '{{label}} bearbeiten', + editing: 'Bearbeite', + editingLabel_many: 'Bearbeiten von {{count}} {{label}}', + editingLabel_one: 'Bearbeiten von {{count}} {{label}}', + editingLabel_other: 'Bearbeiten von {{count}} {{label}}', + email: 'E-Mail', + emailAddress: 'E-Mail-Adresse', + enterAValue: 'Gib einen Wert ein', + error: 'Fehler', + errors: 'Fehler', + fallbackToDefaultLocale: 'Rückgriff auf das Standardgebietsschema', + filter: 'Filter', + filterWhere: 'Filter {{label}} wo', + filters: 'Filter', + globals: 'Globale Dokumente', + language: 'Sprache', + lastModified: 'Zuletzt geändert', + leaveAnyway: 'Trotzdem verlassen', + leaveWithoutSaving: 'Ohne speichern verlassen', + light: 'Hell', + livePreview: 'Vorschau', + loading: 'Lädt', + locale: 'Sprachumgebung', + locales: 'Sprachumgebungen', + menu: 'Menü', + moveDown: 'Nach unten bewegen', + moveUp: 'Nach oben bewegen', + newPassword: 'Neues Passwort', + noFiltersSet: 'Keine Filter gesetzt', + noLabel: '', + noOptions: 'Keine Optionen', + noResults: + 'Keine {{label}} gefunden. Entweder es existieren keine {{label}} oder es gibt keine Übereinstimmung zu den von dir verwendeten Filtern.', + noValue: 'Kein Wert', + none: 'Kein', + notFound: 'Nicht gefunden', + nothingFound: 'Keine Ergebnisse', + of: 'von', + open: 'Öffnen', + or: 'oder', + order: 'Reihenfolge', + pageNotFound: 'Seite nicht gefunden', + password: 'Passwort', + payloadSettings: 'Payload Einstellungen', + perPage: 'Pro Seite: {{limit}}', + remove: 'Entfernen', + reset: 'Zurücksetzen', + row: 'Zeile', + rows: 'Zeilen', + save: 'Speichern', + saving: 'Speichert...', + searchBy: 'Suche nach {{label}}', + selectAll: 'Alle auswählen {{count}} {{label}}', + selectAllRows: 'Wählen Sie alle Zeilen aus', + selectValue: 'Wert auswählen', + selectedCount: '{{count}} {{label}} ausgewählt', + showAllLabel: 'Zeige alle {{label}}', + sorryNotFound: 'Entschuldige, es entspricht nichts deiner Anfrage', + sort: 'Sortieren', + sortByLabelDirection: 'Sortieren nach {{label}} {{direction}}', + stayOnThisPage: 'Auf dieser Seite bleiben', + submissionSuccessful: 'Einrichung erfolgreich.', + submit: 'Senden', + successfullyCreated: '{{label}} erfolgreich erstellt.', + successfullyDuplicated: '{{label}} wurde erfolgreich dupliziert.', + thisLanguage: 'Deutsch', + titleDeleted: '{{label}} {{title}} wurde erfolgreich gelöscht.', + unauthorized: 'Nicht autorisiert', + unsavedChangesDuplicate: + 'Du hast ungespeicherte Änderungen, möchtest du mit dem Duplizieren fortfahren?', + untitled: 'ohne Titel', + updatedAt: 'Aktualisiert am', + updatedCountSuccessfully: '{{count}} {{label}} erfolgreich aktualisiert.', + updatedSuccessfully: 'Erfolgreich aktualisiert.', + updating: 'Aktualisierung', + uploading: 'Hochladen', + user: 'Benutzer', + users: 'Benutzer', + value: 'Wert', + welcome: 'Willkommen', + }, + operators: { + contains: 'enthält', + equals: 'gleich', + exists: 'existiert', + isGreaterThan: 'ist größer als', + isGreaterThanOrEqualTo: 'ist größer oder gleich', + isIn: 'ist drin', + isLessThan: 'ist kleiner als', + isLessThanOrEqualTo: 'ist kleiner oder gleich', + isLike: 'ist wie', + isNotEqualTo: 'ist nicht gleich', + isNotIn: 'ist nicht drin', + near: 'in der Nähe', + }, + upload: { + crop: 'Zuschneiden', + cropToolDescription: + 'Ziehen Sie die Ecken des ausgewählten Bereichs, zeichnen Sie einen neuen Bereich oder passen Sie die Werte unten an.', + dragAndDrop: 'Ziehen Sie eine Datei per Drag-and-Drop', + dragAndDropHere: 'oder ziehe eine Datei hier', + editImage: 'Bild bearbeiten', + fileName: 'Dateiname', + fileSize: 'Dateigröße', + focalPoint: 'Brennpunkt', + focalPointDescription: + 'Ziehen Sie den Fokuspunkt direkt auf die Vorschau oder passen Sie die Werte unten an.', + height: 'Höhe', + lessInfo: 'Weniger Info', + moreInfo: 'Mehr Info', + previewSizes: 'Vorschaugrößen', + selectCollectionToBrowse: 'Wähle eine Sammlung zum Durchsuchen aus', + selectFile: 'Datei auswählen', + setCropArea: 'Bereich zum Zuschneiden festlegen', + setFocalPoint: 'Fokuspunkt setzen', + sizes: 'Größen', + sizesFor: 'Größen für {{label}}', + width: 'Breite', + }, + validation: { + emailAddress: 'Bitte gib eine korrekte E-Mail-Adresse an.', + enterNumber: 'Bitte gib eine gültige Nummer an,', + fieldHasNo: 'Dieses Feld hat kein {{label}}', + greaterThanMax: '{{value}} ist größer als der maximal erlaubte {{label}} von {{max}}.', + invalidInput: 'Dieses Feld hat einen inkorrekten Wert.', + invalidSelection: 'Dieses Feld hat eine inkorrekte Auswahl.', + invalidSelections: "'Dieses Feld enthält die folgenden inkorrekten Auswahlen:'", + lessThanMin: '{{value}} ist kleiner als der minimal erlaubte {{label}} von {{min}}.', + limitReached: 'Limit erreicht, es können nur {{max}} Elemente hinzugefügt werden.', + longerThanMin: + 'Dieser Wert muss länger als die minimale Länge von {{minLength}} Zeichen sein.', + notValidDate: '"{{value}}" ist kein gültiges Datum.', + required: 'Pflichtfeld', + requiresAtLeast: 'Dieses Feld muss mindestens {{count}} {{label}} enthalten.', + requiresNoMoreThan: 'Dieses Feld kann nicht mehr als {{count}} {{label}} enthalten.', + requiresTwoNumbers: 'Dieses Feld muss zwei Nummern enthalten.', + shorterThanMax: 'Dieser Wert muss kürzer als die maximale Länge von {{maxLength}} sein.', + trueOrFalse: 'Dieses Feld kann nur wahr oder falsch sein.', + validUploadID: "'Dieses Feld enthält keine valide Upload-ID.'", + }, + version: { + type: 'Typ', + aboutToPublishSelection: + 'Sie sind dabei, alle {{label}} in der Auswahl zu veröffentlichen. Bist du dir sicher?', + aboutToRestore: 'Du bist dabei, {{label}} auf den Stand vom {{versionDate}} zurücksetzen.', + aboutToRestoreGlobal: + 'Du bist dabei, das Globale Dokument {{label}} auf den Stand vom {{versionDate}} zurückzusetzen.', + aboutToRevertToPublished: + 'Du bist dabei, dieses Dokument auf den Stand des ersten Veröffentlichungsdatums zurückzusetzen - Bist du sicher?', + aboutToUnpublish: 'Du bist dabei dieses Dokument auf Entwurf zu setzen - bist du dir sicher?', + aboutToUnpublishSelection: + 'Sie sind dabei, die Veröffentlichung aller {{label}} in der Auswahl aufzuheben. Bist du dir sicher?', + autosave: 'Automatische Speicherung', + autosavedSuccessfully: 'Erfolgreich automatisch gespeichert.', + autosavedVersion: 'Automatisch gespeicherte Version', + changed: 'Geändert', + compareVersion: 'Vergleiche Version zu:', + confirmPublish: 'Veröffentlichung bestätigen', + confirmRevertToSaved: 'Zurücksetzen auf die letzte Speicherung bestätigen', + confirmUnpublish: 'Setzen auf Entwurf bestätigen', + confirmVersionRestoration: ' Wiederherstellung der Version bestätigen', + currentDocumentStatus: 'Aktueller Dokumentenstatus: {{docStatus}}', + draft: 'Entwurf', + draftSavedSuccessfully: 'Entwurf erfolgreich gespeichert.', + lastSavedAgo: 'Zuletzt vor {{distance}} gespeichert', + noFurtherVersionsFound: 'Keine weiteren Versionen vorhanden', + noRowsFound: 'Kein {{label}} gefunden', + preview: 'Vorschau', + problemRestoringVersion: 'Es gab ein Problem bei der Wiederherstellung dieser Version', + publish: 'Veröffentlichen', + publishChanges: 'Änderungen veröffentlichen', + published: 'Veröffentlicht', + publishing: 'Veröffentlichung', + restoreThisVersion: 'Diese Version wiederherstellen', + restoredSuccessfully: 'Erfolgreich wiederhergestellt.', + restoring: 'wiederherstellen...', + revertToPublished: 'Auf Veröffentlicht zurücksetzen', + reverting: 'zurücksetzen...', + saveDraft: 'Entwurf speichern', + selectLocales: 'Wähle anzuzeigende Sprachumgebungen', + selectVersionToCompare: 'Wähle Version zum Vergleich', + showLocales: 'Sprachumgebungen anzeigen:', + showingVersionsFor: 'Versionen anzeigen für:', + status: 'Status', + unpublish: 'Auf Entwurf setzen', + unpublishing: 'Setze auf Entwurf...', + version: 'Version', + versionCount_many: '{{count}} Versionen gefunden', + versionCount_none: 'Keine Versionen gefunden', + versionCount_one: '{{count}} Version gefunden', + versionCount_other: '{{count}} Versionen gefunden', + versionCreatedOn: '{{version}} erstellt am:', + versionID: 'Version ID', + versions: 'Versionen', + viewingVersion: 'Betrachte Version für {{entityLabel}} {{documentTitle}}', + viewingVersionGlobal: '`Betrachte Version für das Globale Dokument {{entityLabel}}', + viewingVersions: 'Betrachte Versionen für {{entityLabel}} {{documentTitle}}', + viewingVersionsGlobal: '`Betrachte Versionen für das Globale Dokument {{entityLabel}}', + }, + }, +} diff --git a/packages/translations/src/languages/en.ts b/packages/translations/src/languages/en.ts new file mode 100644 index 0000000000..f80053a1c8 --- /dev/null +++ b/packages/translations/src/languages/en.ts @@ -0,0 +1,397 @@ +import type { Language } from '../types.js' + +export const en: Language = { + dateFNSKey: 'en-US', + translations: { + authentication: { + account: 'Account', + accountOfCurrentUser: 'Account of current user', + alreadyActivated: 'Already Activated', + alreadyLoggedIn: 'Already logged in', + apiKey: 'API Key', + backToLogin: 'Back to login', + beginCreateFirstUser: 'To begin, create your first user.', + changePassword: 'Change Password', + checkYourEmailForPasswordReset: + 'Check your email for a link that will allow you to securely reset your password.', + confirmGeneration: 'Confirm Generation', + confirmPassword: 'Confirm Password', + createFirstUser: 'Create first user', + emailNotValid: 'The email provided is not valid', + emailSent: 'Email Sent', + enableAPIKey: 'Enable API Key', + failedToUnlock: 'Failed to unlock', + forceUnlock: 'Force Unlock', + forgotPassword: 'Forgot Password', + forgotPasswordEmailInstructions: + 'Please enter your email below. You will receive an email message with instructions on how to reset your password.', + forgotPasswordQuestion: 'Forgot password?', + generate: 'Generate', + generateNewAPIKey: 'Generate new API key', + generatingNewAPIKeyWillInvalidate: + 'Generating a new API key will <1>invalidate the previous key. Are you sure you wish to continue?', + lockUntil: 'Lock Until', + logBackIn: 'Log back in', + logOut: 'Log out', + loggedIn: 'To log in with another user, you should <0>log out first.', + loggedInChangePassword: + 'To change your password, go to your <0>account and edit your password there.', + loggedOutInactivity: 'You have been logged out due to inactivity.', + loggedOutSuccessfully: 'You have been logged out successfully.', + login: 'Login', + loginAttempts: 'Login Attempts', + loginUser: 'Login user', + loginWithAnotherUser: 'To log in with another user, you should <0>log out first.', + logout: 'Logout', + logoutUser: 'Logout user', + newAPIKeyGenerated: 'New API Key Generated.', + newAccountCreated: + 'A new account has just been created for you to access {{serverURL}} Please click on the following link or paste the URL below into your browser to verify your email: {{verificationURL}}
    After verifying your email, you will be able to log in successfully.', + newPassword: 'New Password', + resetPassword: 'Reset Password', + resetPasswordExpiration: 'Reset Password Expiration', + resetPasswordToken: 'Reset Password Token', + resetYourPassword: 'Reset Your Password', + stayLoggedIn: 'Stay logged in', + successfullyUnlocked: 'Successfully unlocked', + unableToVerify: 'Unable to Verify', + verified: 'Verified', + verifiedSuccessfully: 'Verified Successfully', + verify: 'Verify', + verifyUser: 'Verify User', + verifyYourEmail: 'Verify your email', + youAreInactive: + "You haven't been active in a little while and will shortly be automatically logged out for your own security. Would you like to stay logged in?", + youAreReceivingResetPassword: + 'You are receiving this because you (or someone else) have requested the reset of the password for your account. Please click on the following link, or paste this into your browser to complete the process:', + youDidNotRequestPassword: + 'If you did not request this, please ignore this email and your password will remain unchanged.', + }, + error: { + accountAlreadyActivated: 'This account has already been activated.', + autosaving: 'There was a problem while autosaving this document.', + correctInvalidFields: 'Please correct invalid fields.', + deletingFile: 'There was an error deleting file.', + deletingTitle: + 'There was an error while deleting {{title}}. Please check your connection and try again.', + emailOrPasswordIncorrect: 'The email or password provided is incorrect.', + followingFieldsInvalid_one: 'The following field is invalid:', + followingFieldsInvalid_other: 'The following fields are invalid:', + incorrectCollection: 'Incorrect Collection', + invalidFileType: 'Invalid file type', + invalidFileTypeValue: 'Invalid file type: {{value}}', + loadingDocument: 'There was a problem loading the document with ID of {{id}}.', + missingEmail: 'Missing email.', + missingIDOfDocument: 'Missing ID of document to update.', + missingIDOfVersion: 'Missing ID of version.', + missingRequiredData: 'Missing required data.', + noFilesUploaded: 'No files were uploaded.', + noMatchedField: 'No matched field found for "{{label}}"', + noUser: 'No User', + notAllowedToAccessPage: 'You are not allowed to access this page.', + notAllowedToPerformAction: 'You are not allowed to perform this action.', + notFound: 'The requested resource was not found.', + previewing: 'There was a problem previewing this document.', + problemUploadingFile: 'There was a problem while uploading the file.', + tokenInvalidOrExpired: 'Token is either invalid or has expired.', + unPublishingDocument: 'There was a problem while un-publishing this document.', + unableToDeleteCount: 'Unable to delete {{count}} out of {{total}} {{label}}.', + unableToUpdateCount: 'Unable to update {{count}} out of {{total}} {{label}}.', + unauthorized: 'Unauthorized, you must be logged in to make this request.', + unknown: 'An unknown error has occurred.', + unspecific: 'An error has occurred.', + userLocked: 'This user is locked due to having too many failed login attempts.', + valueMustBeUnique: 'Value must be unique', + verificationTokenInvalid: 'Verification token is invalid.', + }, + fields: { + addLabel: 'Add {{label}}', + addLink: 'Add Link', + addNew: 'Add new', + addNewLabel: 'Add new {{label}}', + addRelationship: 'Add Relationship', + addUpload: 'Add Upload', + block: 'block', + blockType: 'Block Type', + blocks: 'blocks', + chooseBetweenCustomTextOrDocument: + 'Choose between entering a custom text URL or linking to another document.', + chooseDocumentToLink: 'Choose a document to link to', + chooseFromExisting: 'Choose from existing', + chooseLabel: 'Choose {{label}}', + collapseAll: 'Collapse All', + customURL: 'Custom URL', + editLabelData: 'Edit {{label}} data', + editLink: 'Edit Link', + editRelationship: 'Edit Relationship', + enterURL: 'Enter a URL', + internalLink: 'Internal Link', + itemsAndMore: '{{items}} and {{count}} more', + labelRelationship: '{{label}} Relationship', + latitude: 'Latitude', + linkType: 'Link Type', + linkedTo: 'Linked to <0>{{label}}', + longitude: 'Longitude', + newLabel: 'New {{label}}', + openInNewTab: 'Open in new tab', + passwordsDoNotMatch: 'Passwords do not match.', + relatedDocument: 'Related Document', + relationTo: 'Relation To', + removeRelationship: 'Remove Relationship', + removeUpload: 'Remove Upload', + saveChanges: 'Save changes', + searchForBlock: 'Search for a block', + selectExistingLabel: 'Select existing {{label}}', + selectFieldsToEdit: 'Select fields to edit', + showAll: 'Show All', + swapRelationship: 'Swap Relationship', + swapUpload: 'Swap Upload', + textToDisplay: 'Text to display', + toggleBlock: 'Toggle block', + uploadNewLabel: 'Upload new {{label}}', + }, + general: { + aboutToDelete: 'You are about to delete the {{label}} <1>{{title}}. Are you sure?', + aboutToDeleteCount_many: 'You are about to delete {{count}} {{label}}', + aboutToDeleteCount_one: 'You are about to delete {{count}} {{label}}', + aboutToDeleteCount_other: 'You are about to delete {{count}} {{label}}', + addBelow: 'Add Below', + addFilter: 'Add Filter', + adminTheme: 'Admin Theme', + and: 'And', + applyChanges: 'Apply Changes', + ascending: 'Ascending', + automatic: 'Automatic', + backToDashboard: 'Back to Dashboard', + cancel: 'Cancel', + changesNotSaved: + 'Your changes have not been saved. If you leave now, you will lose your changes.', + close: 'Close', + collapse: 'Collapse', + collections: 'Collections', + columnToSort: 'Column to Sort', + columns: 'Columns', + confirm: 'Confirm', + confirmDeletion: 'Confirm deletion', + confirmDuplication: 'Confirm duplication', + copied: 'Copied', + copy: 'Copy', + create: 'Create', + createNew: 'Create New', + createNewLabel: 'Create new {{label}}', + created: 'Created', + createdAt: 'Created At', + creating: 'Creating', + creatingNewLabel: 'Creating new {{label}}', + dark: 'Dark', + dashboard: 'Dashboard', + delete: 'Delete', + deletedCountSuccessfully: 'Deleted {{count}} {{label}} successfully.', + deletedSuccessfully: 'Deleted successfully.', + deleting: 'Deleting...', + descending: 'Descending', + deselectAllRows: 'Deselect all rows', + duplicate: 'Duplicate', + duplicateWithoutSaving: 'Duplicate without saving changes', + edit: 'Edit', + editLabel: 'Edit {{label}}', + editing: 'Editing', + editingLabel_many: 'Editing {{count}} {{label}}', + editingLabel_one: 'Editing {{count}} {{label}}', + editingLabel_other: 'Editing {{count}} {{label}}', + email: 'Email', + emailAddress: 'Email Address', + enterAValue: 'Enter a value', + error: 'Error', + errors: 'Errors', + fallbackToDefaultLocale: 'Fallback to default locale', + filter: 'Filter', + filterWhere: 'Filter {{label}} where', + filters: 'Filters', + globals: 'Globals', + language: 'Language', + lastModified: 'Last Modified', + leaveAnyway: 'Leave anyway', + leaveWithoutSaving: 'Leave without saving', + light: 'Light', + livePreview: 'Live Preview', + loading: 'Loading', + locale: 'Locale', + locales: 'Locales', + menu: 'Menu', + moveDown: 'Move Down', + moveUp: 'Move Up', + newPassword: 'New Password', + noFiltersSet: 'No filters set', + noLabel: '', + noOptions: 'No options', + noResults: + "No {{label}} found. Either no {{label}} exist yet or none match the filters you've specified above.", + noValue: 'No value', + none: 'None', + notFound: 'Not Found', + nothingFound: 'Nothing found', + of: 'of', + open: 'Open', + or: 'Or', + order: 'Order', + pageNotFound: 'Page not found', + password: 'Password', + payloadSettings: 'Payload Settings', + perPage: 'Per Page: {{limit}}', + remove: 'Remove', + reset: 'Reset', + row: 'Row', + rows: 'Rows', + save: 'Save', + saving: 'Saving...', + searchBy: 'Search by {{label}}', + selectAll: 'Select all {{count}} {{label}}', + selectAllRows: 'Select all rows', + selectValue: 'Select a value', + selectedCount: '{{count}} {{label}} selected', + showAllLabel: 'Show all {{label}}', + sorryNotFound: 'Sorry—there is nothing to correspond with your request.', + sort: 'Sort', + sortByLabelDirection: 'Sort by {{label}} {{direction}}', + stayOnThisPage: 'Stay on this page', + submissionSuccessful: 'Submission Successful.', + submit: 'Submit', + successfullyCreated: '{{label}} successfully created.', + successfullyDuplicated: '{{label}} successfully duplicated.', + thisLanguage: 'English', + titleDeleted: '{{label}} "{{title}}" successfully deleted.', + unauthorized: 'Unauthorized', + unsavedChangesDuplicate: 'You have unsaved changes. Would you like to continue to duplicate?', + untitled: 'Untitled', + updatedAt: 'Updated At', + updatedCountSuccessfully: 'Updated {{count}} {{label}} successfully.', + updatedSuccessfully: 'Updated successfully.', + updating: 'Updating', + uploading: 'Uploading', + user: 'User', + users: 'Users', + value: 'Value', + welcome: 'Welcome', + }, + operators: { + contains: 'contains', + equals: 'equals', + exists: 'exists', + isGreaterThan: 'is greater than', + isGreaterThanOrEqualTo: 'is greater than or equal to', + isIn: 'is in', + isLessThan: 'is less than', + isLessThanOrEqualTo: 'is less than or equal to', + isLike: 'is like', + isNotEqualTo: 'is not equal to', + isNotIn: 'is not in', + near: 'near', + }, + upload: { + crop: 'Crop', + cropToolDescription: + 'Drag the corners of the selected area, draw a new area or adjust the values below.', + dragAndDrop: 'Drag and drop a file', + dragAndDropHere: 'or drag and drop a file here', + editImage: 'Edit Image', + fileName: 'File Name', + fileSize: 'File Size', + focalPoint: 'Focal Point', + focalPointDescription: + 'Drag the focal point directly on the preview or adjust the values below.', + height: 'Height', + lessInfo: 'Less info', + moreInfo: 'More info', + previewSizes: 'Preview Sizes', + selectCollectionToBrowse: 'Select a Collection to Browse', + selectFile: 'Select a file', + setCropArea: 'Set crop area', + setFocalPoint: 'Set focal point', + sizes: 'Sizes', + sizesFor: 'Sizes for {{label}}', + width: 'Width', + }, + validation: { + emailAddress: 'Please enter a valid email address.', + enterNumber: 'Please enter a valid number.', + fieldHasNo: 'This field has no {{label}}', + greaterThanMax: '{{value}} is greater than the max allowed {{label}} of {{max}}.', + invalidInput: 'This field has an invalid input.', + invalidSelection: 'This field has an invalid selection.', + invalidSelections: 'This field has the following invalid selections:', + lessThanMin: '{{value}} is less than the min allowed {{label}} of {{min}}.', + limitReached: 'Limit reached, only {{max}} items can be added.', + longerThanMin: + 'This value must be longer than the minimum length of {{minLength}} characters.', + notValidDate: '"{{value}}" is not a valid date.', + required: 'This field is required.', + requiresAtLeast: 'This field requires at least {{count}} {{label}}.', + requiresNoMoreThan: 'This field requires no more than {{count}} {{label}}.', + requiresTwoNumbers: 'This field requires two numbers.', + shorterThanMax: 'This value must be shorter than the max length of {{maxLength}} characters.', + trueOrFalse: 'This field can only be equal to true or false.', + validUploadID: 'This field is not a valid upload ID.', + }, + version: { + type: 'Type', + aboutToPublishSelection: + 'You are about to publish all {{label}} in the selection. Are you sure?', + aboutToRestore: + 'You are about to restore this {{label}} document to the state that it was in on {{versionDate}}.', + aboutToRestoreGlobal: + 'You are about to restore the global {{label}} to the state that it was in on {{versionDate}}.', + aboutToRevertToPublished: + "You are about to revert this document's changes to its published state. Are you sure?", + aboutToUnpublish: 'You are about to unpublish this document. Are you sure?', + aboutToUnpublishSelection: + 'You are about to unpublish all {{label}} in the selection. Are you sure?', + autosave: 'Autosave', + autosavedSuccessfully: 'Autosaved successfully.', + autosavedVersion: 'Autosaved version', + changed: 'Changed', + compareVersion: 'Compare version against:', + confirmPublish: 'Confirm publish', + confirmRevertToSaved: 'Confirm revert to saved', + confirmUnpublish: 'Confirm unpublish', + confirmVersionRestoration: 'Confirm version Restoration', + currentDocumentStatus: 'Current {{docStatus}} document', + draft: 'Draft', + draftSavedSuccessfully: 'Draft saved successfully.', + lastSavedAgo: 'Last saved {{distance}} ago', + noFurtherVersionsFound: 'No further versions found', + noRowsFound: 'No {{label}} found', + preview: 'Preview', + problemRestoringVersion: 'There was a problem restoring this version', + publish: 'Publish', + publishChanges: 'Publish changes', + published: 'Published', + publishing: 'Publishing', + restoreThisVersion: 'Restore this version', + restoredSuccessfully: 'Restored Successfully.', + restoring: 'Restoring...', + revertToPublished: 'Revert to published', + reverting: 'Reverting...', + saveDraft: 'Save Draft', + selectLocales: 'Select locales to display', + selectVersionToCompare: 'Select a version to compare', + showLocales: 'Show locales:', + showingVersionsFor: 'Showing versions for:', + status: 'Status', + unpublish: 'Unpublish', + unpublishing: 'Unpublishing...', + version: 'Version', + versionCount_many: '{{count}} versions found', + versionCount_none: 'No versions found', + versionCount_one: '{{count}} version found', + versionCount_other: '{{count}} versions found', + versionCreatedOn: '{{version}} created on:', + versionID: 'Version ID', + versions: 'Versions', + viewingVersion: 'Viewing version for the {{entityLabel}} {{documentTitle}}', + viewingVersionGlobal: 'Viewing version for the global {{entityLabel}}', + viewingVersions: 'Viewing versions for the {{entityLabel}} {{documentTitle}}', + viewingVersionsGlobal: 'Viewing versions for the global {{entityLabel}}', + }, + }, +} diff --git a/packages/translations/src/languages/es.ts b/packages/translations/src/languages/es.ts new file mode 100644 index 0000000000..5cccd3886c --- /dev/null +++ b/packages/translations/src/languages/es.ts @@ -0,0 +1,398 @@ +import type { Language } from '../types.js' + +export const es: Language = { + dateFNSKey: 'es', + translations: { + authentication: { + account: 'Cuenta', + accountOfCurrentUser: 'Cuenta del usuario actual', + alreadyActivated: 'Ya Activado', + alreadyLoggedIn: 'Sesión iniciada', + apiKey: 'Clave API', + backToLogin: 'Regresar al inicio de sesión', + beginCreateFirstUser: 'Para empezar, crea tu primer usuario.', + changePassword: 'Cambiar contraseña', + checkYourEmailForPasswordReset: + 'Revisa tu correo con el enlace para restablecer tu contraseña de forma segura.', + confirmGeneration: 'Confirmar Generación', + confirmPassword: 'Confirmar Contraseña', + createFirstUser: 'Crear al primer usuario', + emailNotValid: 'El correo proporcionado es inválido', + emailSent: 'Correo Enviado', + enableAPIKey: 'Habilitar Clave API', + failedToUnlock: 'Desbloqueo Fallido', + forceUnlock: 'Forzar Desbloqueo', + forgotPassword: 'Olvidé mi contraseña', + forgotPasswordEmailInstructions: + 'Por favor introduce tu correo electrónico. Recibirás un mensaje con las instrucciones para restablecer tu contraseña.', + forgotPasswordQuestion: '¿Olvidaste tu contraseña?', + generate: 'Generar', + generateNewAPIKey: 'Generar Nueva Clave de API', + generatingNewAPIKeyWillInvalidate: + 'Generar una nueva clave de API <1>invalidará la clave anterior. ¿Deseas continuar?', + lockUntil: 'Bloquear Hasta', + logBackIn: 'Volver a iniciar sesión', + logOut: 'Cerrar sesión', + loggedIn: 'Para iniciar sesión con otro usuario, primero <0>cierra tu sesión.', + loggedInChangePassword: + 'Para cambiar tu contraseña, entra a <0>tu cuenta y edita la contraseña desde ahí.', + loggedOutInactivity: 'Tú sesión se cerró debido a inactividad.', + loggedOutSuccessfully: 'Tú sesión se cerró correctamente.', + login: 'Iniciar sesión', + loginAttempts: 'Login Attempts', + loginUser: 'Iniciar sesión de usuario', + loginWithAnotherUser: + 'Para iniciar sesión con otro usuario, primero <0>cierra tu sesión.', + logout: 'Cerrar sesión', + logoutUser: 'Cerrar sesión de usuario', + newAPIKeyGenerated: 'Nueva Clave de API Generada.', + newAccountCreated: + 'Se ha creado una nueva cuenta para que puedas acceder a {{serverURL}}. Por favor, haz click o copia el siguiente enlace a tu navegador para verificar tu correo: {{verificationURL}}.
    Una vez hayas verificado tu correo, podrás iniciar sesión.', + newPassword: 'Nueva Contraseña', + resetPassword: 'Restablecer Contraseña', + resetPasswordExpiration: 'Restablecer Caducidad de la Contraseña', + resetPasswordToken: 'Restablecer Token de la Contraseña', + resetYourPassword: 'Restablecer tu Contraseña', + stayLoggedIn: 'Mantener sesión abierta', + successfullyUnlocked: 'Desbloqueado correctamente', + unableToVerify: 'No se pudo Verificar', + verified: 'Verificado', + verifiedSuccessfully: 'Verificación Correcta', + verify: 'Verificar', + verifyUser: 'Verificar Usuario', + verifyYourEmail: 'Verifica tu correo', + youAreInactive: + 'Has estado inactivo por un tiempo y por tu seguridad se cerrará tu sesión automáticamente. ¿Deseas mantener tu sesión activa?', + youAreReceivingResetPassword: + 'Estás recibiendo esto porque tú (o alguien más) ha solicitado restablecer la contraseña de tu cuenta. Por favor haz click en el siguiente enlace o pégalo en tu navegador para completar el proceso:', + youDidNotRequestPassword: + 'Si tú no solicitaste esto, por favor ignora este correo y tu contraseña no se cambiará.', + }, + error: { + accountAlreadyActivated: 'Esta cuenta ya fue activada.', + autosaving: 'Ocurrió un problema al autoguardar este documento.', + correctInvalidFields: 'Por favor corrige los campos inválidos.', + deletingFile: 'Ocurrió un error al eliminar el archivo.', + deletingTitle: + 'Ocurrió un error al eliminar {{title}}. Por favor revisa tu conexión y vuelve a intentarlo.', + emailOrPasswordIncorrect: 'El correo o la contraseña introducida es incorrecta.', + followingFieldsInvalid_one: 'El siguiente campo es inválido:', + followingFieldsInvalid_other: 'Los siguientes campos son inválidos:', + incorrectCollection: 'Colección Incorrecta', + invalidFileType: 'Tipo de archivo inválido', + invalidFileTypeValue: 'Tipo de archivo inválido: {{value}}', + loadingDocument: 'Ocurrió un problema al cargar el documento con la ID {{id}}.', + missingEmail: 'Falta el correo.', + missingIDOfDocument: 'Falta la ID del documento a actualizar.', + missingIDOfVersion: 'Falta la ID de la versión.', + missingRequiredData: 'Falta la información obligatoria.', + noFilesUploaded: 'No se subieron archivos.', + noMatchedField: 'No se encontró un campo para "{{label}}"', + noUser: 'Sin usuario', + notAllowedToAccessPage: 'No tienes permiso para acceder a esta página.', + notAllowedToPerformAction: 'No tienes permiso para realizar esta acción.', + notFound: 'No se encontró el recurso solicitado.', + previewing: 'Ocurrió un problema al previsualizar este documento.', + problemUploadingFile: 'Ocurrió un problema al subir el archivo.', + tokenInvalidOrExpired: 'El token es inválido o ya expiró.', + unPublishingDocument: 'Ocurrió un error al despublicar este documento.', + unableToDeleteCount: 'No se pudo eliminar {{count}} de {{total}} {{label}}.', + unableToUpdateCount: 'No se puede actualizar {{count}} de {{total}} {{label}}.', + unauthorized: 'No autorizado, debes iniciar sesión para realizar esta solicitud.', + unknown: 'Ocurrió un error desconocido.', + unspecific: 'Ocurrió un error.', + userLocked: + 'Este usuario ha sido bloqueado debido a que tiene muchos intentos fallidos para iniciar sesión.', + valueMustBeUnique: 'El valor debe ser único', + verificationTokenInvalid: 'Token de verificación inválido.', + }, + fields: { + addLabel: 'Añadir {{label}}', + addLink: 'Añadir Enlace', + addNew: 'Añadir nuevo', + addNewLabel: 'Añadir {{label}}', + addRelationship: 'Añadir Relación', + addUpload: 'Añadir Carga', + block: 'bloque', + blockType: 'Tipo de bloque', + blocks: 'bloques', + chooseBetweenCustomTextOrDocument: + 'Elige entre ingresar una URL personalizada o enlazar a otro documento.', + chooseDocumentToLink: 'Elige un documento a enlazar', + chooseFromExisting: 'Elegir existente', + chooseLabel: 'Elegir {{label}}', + collapseAll: 'Colapsar todo', + customURL: 'URL Personalizado', + editLabelData: 'Editar información de {{label}}', + editLink: 'Editar Enlace', + editRelationship: 'Editar Relación', + enterURL: 'Ingresar URL', + internalLink: 'Enlace Interno', + itemsAndMore: '{{items}} y {{count}} más', + labelRelationship: 'Relación de {{label}}', + latitude: 'Latitud', + linkType: 'Tipo de enlace', + linkedTo: 'Enlazado a <0>{{label}}', + longitude: 'Longitud', + newLabel: 'Nuevo {{label}}', + openInNewTab: 'Abrir en nueva pestaña', + passwordsDoNotMatch: 'Las contraseñas no coinciden.', + relatedDocument: 'Documento Relacionado', + relationTo: 'Relación con', + removeRelationship: 'Eliminar relación', + removeUpload: 'Quitar Carga', + saveChanges: 'Guardar cambios', + searchForBlock: 'Buscar bloque', + selectExistingLabel: 'Seleccionar {{label}} existente', + selectFieldsToEdit: 'Seleccionar campos para editar', + showAll: 'Mostrar Todo', + swapRelationship: 'Cambiar Relación', + swapUpload: 'Cambiar carga', + textToDisplay: 'Texto a mostrar', + toggleBlock: 'Alternar bloque', + uploadNewLabel: 'Subir nuevo {{label}}', + }, + general: { + aboutToDelete: 'Estás por eliminar el {{label}} <1>{{title}}. ¿Estás seguro?', + aboutToDeleteCount_many: 'Está a punto de eliminar {{count}} {{label}}', + aboutToDeleteCount_one: 'Está a punto de eliminar {{count}} {{label}}', + aboutToDeleteCount_other: 'Está a punto de eliminar {{count}} {{label}}', + addBelow: 'Agrega abajo', + addFilter: 'Añadir filtro', + adminTheme: 'Tema del admin', + and: 'Y', + applyChanges: 'Aplicar Cambios', + ascending: 'Ascendente', + automatic: 'Automático', + backToDashboard: 'Volver al Tablero', + cancel: 'Cancelar', + changesNotSaved: + 'Tus cambios no han sido guardados. Si te sales ahora, se perderán tus cambios.', + close: 'Cerrar', + collapse: 'Colapsar', + collections: 'Colecciones', + columnToSort: 'Columna de ordenado', + columns: 'Columnas', + confirm: 'Confirmar', + confirmDeletion: 'Confirmar eliminación', + confirmDuplication: 'Confirmar duplicado', + copied: 'Copiado', + copy: 'Copiar', + create: 'Crear', + createNew: 'Crear nuevo', + createNewLabel: 'Crear nuevo {{label}}', + created: 'Creado', + createdAt: 'Fecha de creación', + creating: 'Creando', + creatingNewLabel: 'Creando nuevo {{label}}', + dark: 'Oscuro', + dashboard: 'Tablero', + delete: 'Eliminar', + deletedCountSuccessfully: 'Se eliminó {{count}} {{label}} con éxito.', + deletedSuccessfully: 'Borrado exitosamente.', + deleting: 'Eliminando...', + descending: 'Descendente', + deselectAllRows: 'Deselecciona todas las filas', + duplicate: 'Duplicar', + duplicateWithoutSaving: 'Duplicar sin guardar cambios', + edit: 'Editar', + editLabel: 'Editar {{label}}', + editing: 'Editando', + editingLabel_many: 'Edición de {{count}} {{label}}', + editingLabel_one: 'Editando {{count}} {{label}}', + editingLabel_other: 'Edición de {{count}} {{label}}', + email: 'Correo electrónico', + emailAddress: 'Dirección de Correo Electrónico', + enterAValue: 'Introduce un valor', + error: 'Error', + errors: 'Errores', + fallbackToDefaultLocale: 'Volver a la configuración regional por defecto', + filter: 'Filtro', + filterWhere: 'Filtrar {{label}} donde', + filters: 'Filtros', + globals: 'Globales', + language: 'Idioma', + lastModified: 'Última modificación', + leaveAnyway: 'Salir de todos modos', + leaveWithoutSaving: 'Salir sin guardar', + light: 'Claro', + livePreview: 'Previsualizar', + loading: 'Cargando', + locale: 'Regional', + locales: 'Locales', + menu: 'Menú', + moveDown: 'Mover abajo', + moveUp: 'Mover arriba', + newPassword: 'Nueva contraseña', + noFiltersSet: 'No hay filtros establecidos', + noLabel: '', + noOptions: 'Sin opciones', + noResults: + 'No encontramos {{label}}. Puede que no existan {{label}} todavía o no hay coincidencias con los filtros introducidos arriba.', + noValue: 'Sin valor', + none: 'Ninguna', + notFound: 'No encontrado', + nothingFound: 'No se encontró nada', + of: 'de', + open: 'Abrir', + or: 'O', + order: 'Orden', + pageNotFound: 'Página no encontrada', + password: 'Contraseña', + payloadSettings: 'Configuración de la carga', + perPage: 'Por página: {{limit}}', + remove: 'Remover', + reset: 'Reiniciar', + row: 'Fila', + rows: 'Filas', + save: 'Guardar', + saving: 'Guardando...', + searchBy: 'Buscar por {{label}}', + selectAll: 'Seleccionar todo {{count}} {{label}}', + selectAllRows: 'Selecciona todas las filas', + selectValue: 'Selecciona un valor', + selectedCount: '{{count}} {{label}} seleccionado', + showAllLabel: 'Muestra todas {{label}}', + sorryNotFound: 'Lo sentimos. No hay nada que corresponda con tu solicitud.', + sort: 'Ordenar', + sortByLabelDirection: 'Ordenar por {{label}} {{direction}}', + stayOnThisPage: 'Permanecer en esta página', + submissionSuccessful: 'Envío realizado correctamente.', + submit: 'Enviar', + successfullyCreated: '{{label}} creado correctamente.', + successfullyDuplicated: '{{label}} duplicado correctamente.', + thisLanguage: 'Español', + titleDeleted: '{{label}} {{title}} eliminado correctamente.', + unauthorized: 'No autorizado', + unsavedChangesDuplicate: 'Tienes cambios sin guardar. ¿Deseas continuar para duplicar?', + untitled: 'Sin título', + updatedAt: 'Fecha de modificado', + updatedCountSuccessfully: '{{count}} {{label}} actualizado con éxito.', + updatedSuccessfully: 'Actualizado con éxito.', + updating: 'Actualizando', + uploading: 'Subiendo', + user: 'Usuario', + users: 'Usuarios', + value: 'Valor', + welcome: 'Bienvenido', + }, + operators: { + contains: 'contiene', + equals: 'igual', + exists: 'existe', + isGreaterThan: 'es mayor que', + isGreaterThanOrEqualTo: 'es mayor o igual que', + isIn: 'está en', + isLessThan: 'es menor que', + isLessThanOrEqualTo: 'es menor o igual que', + isLike: 'es como', + isNotEqualTo: 'no es igual a', + isNotIn: 'no está en', + near: 'cerca', + }, + upload: { + crop: 'Cultivo', + cropToolDescription: + 'Arrastra las esquinas del área seleccionada, dibuja un nuevo área o ajusta los valores a continuación.', + dragAndDrop: 'Arrastra y suelta un archivo', + dragAndDropHere: 'o arrastra un archivo aquí', + editImage: 'Editar imagen', + fileName: 'Nombre del archivo', + fileSize: 'Tamaño del archivo', + focalPoint: 'Punto Focal', + focalPointDescription: + 'Arrastra el punto focal directamente en la vista previa o ajusta los valores a continuación.', + height: 'Alto', + lessInfo: 'Menos info', + moreInfo: 'Más info', + previewSizes: 'Tamaños de Vista Previa', + selectCollectionToBrowse: 'Selecciona una Colección', + selectFile: 'Selecciona un archivo', + setCropArea: 'Establecer área de cultivo', + setFocalPoint: 'Establecer punto focal', + sizes: 'Tamaños', + sizesFor: 'Tamaños para {{label}}', + width: 'Ancho', + }, + validation: { + emailAddress: 'Por favor introduce un correo electrónico válido.', + enterNumber: 'Por favor introduce un número válido.', + fieldHasNo: 'Este campo no tiene {{label}}', + greaterThanMax: '{{value}} es mayor que el {{label}} máximo permitido de {{max}}.', + invalidInput: 'La información en este campo es inválida.', + invalidSelection: 'La selección en este campo es inválida.', + invalidSelections: 'Este campo tiene las siguientes selecciones inválidas:', + lessThanMin: '{{value}} es menor que el {{label}} mínimo permitido de {{min}}.', + limitReached: 'Se ha alcanzado el límite, solo se pueden agregar {{max}} elementos.', + longerThanMin: 'Este dato debe ser más largo que el mínimo de {{minLength}} caracteres.', + notValidDate: '"{{value}}" es una fecha inválida.', + required: 'Este campo es obligatorio.', + requiresAtLeast: 'Este campo require al menos {{count}} {{label}}.', + requiresNoMoreThan: 'Este campo require no más de {{count}} {{label}}', + requiresTwoNumbers: 'Este campo requiere dos números.', + shorterThanMax: 'Este dato debe ser más corto que el máximo de {{maxLength}} caracteres.', + trueOrFalse: 'Este campo solamente puede ser verdadero o falso.', + validUploadID: "'Este campo no es una ID de subida válida.'", + }, + version: { + type: 'Tipo', + aboutToPublishSelection: + 'Está a punto de publicar todas las {{etiquetas}} de la selección. ¿Está seguro?', + aboutToRestore: + 'Estás a punto de restaurar este documento de {{label}} al estado en el que estaba en la fecha {{versionDate}}.', + aboutToRestoreGlobal: + 'Estás a punto de restaurar el {{label}} global al estado en el que estaba en la fecha {{versionDate}}.', + aboutToRevertToPublished: + 'Estás a punto de revertir los cambios de este documento a su estado publicado. ¿Estás seguro?', + aboutToUnpublish: 'Estás a punto de despublicar este documento. ¿Estás seguro?', + aboutToUnpublishSelection: + 'Está a punto de anular la publicación de todos los {{label}} de la selección. ¿Está seguro?', + autosave: 'Autoguardar', + autosavedSuccessfully: 'Guardado automáticamente con éxito.', + autosavedVersion: 'Versión Autoguardada', + changed: 'Modificado', + compareVersion: 'Comparar versión con:', + confirmPublish: 'Confirmar publicación', + confirmRevertToSaved: 'Confirmar revertir a guardado', + confirmUnpublish: 'Confirmar despublicado', + confirmVersionRestoration: 'Confirmar restauración de versión', + currentDocumentStatus: 'Documento {{docStatus}} actual', + draft: 'Borrador', + draftSavedSuccessfully: 'Borrador guardado con éxito.', + lastSavedAgo: 'Guardado por última vez hace {{distance}}', + noFurtherVersionsFound: 'No se encontraron más versiones', + noRowsFound: 'No encontramos {{label}}', + preview: 'Previsualizar', + problemRestoringVersion: 'Ocurrió un problema al restaurar esta versión', + publish: 'Publicar', + publishChanges: 'Publicar cambios', + published: 'Publicado', + publishing: 'Publicación', + restoreThisVersion: 'Restaurar esta versión', + restoredSuccessfully: 'Restaurado éxito.', + restoring: 'Restaurando...', + revertToPublished: 'Revertir a publicado', + reverting: 'Revirtiendo...', + saveDraft: 'Guardar Borrador', + selectLocales: 'Selecciona idiomas a mostrar', + selectVersionToCompare: 'Selecciona versión a comparar', + showLocales: 'Mostrar idiomas:', + showingVersionsFor: 'Mostrando versiones para:', + status: 'Estado', + unpublish: 'Despublicar', + unpublishing: 'Despublicando...', + version: 'Versión', + versionCount_many: '{{count}} versiones encontradas', + versionCount_none: 'No encontramos versiones', + versionCount_one: '{{count}} versión encontrada', + versionCount_other: '{{count}} versiones encontradas', + versionCreatedOn: '{{version}} creada el:', + versionID: 'ID de Versión', + versions: 'Versiones', + viewingVersion: 'Viendo versión para {{entityLabel}} {{documentTitle}}', + viewingVersionGlobal: 'Viendo versión para el global {{entityLabel}}', + viewingVersions: 'Viendo versiones para {{entityLabel}} {{documentTitle}}', + viewingVersionsGlobal: 'Viendo versiones para el global {{entityLabel}}', + }, + }, +} diff --git a/packages/translations/src/languages/fa.ts b/packages/translations/src/languages/fa.ts new file mode 100644 index 0000000000..e05e44d545 --- /dev/null +++ b/packages/translations/src/languages/fa.ts @@ -0,0 +1,396 @@ +import type { Language } from '../types.js' + +export const fa: Language = { + dateFNSKey: 'fa-IR', + translations: { + authentication: { + account: 'نمایه', + accountOfCurrentUser: 'نمایه کاربر فعلی', + alreadyActivated: 'قبلاً فعال شده است', + alreadyLoggedIn: 'قبلاً وارد شده‌اید', + apiKey: 'کلید اِی‌پی‌آی', + backToLogin: 'بازگشت به برگه ورود', + beginCreateFirstUser: 'برای آغاز، نخستین کاربر خود را بسازید.', + changePassword: 'تغییر گذرواژه', + checkYourEmailForPasswordReset: + 'برای بازیابی ایمن گذرواژه خود، پیامی که به رایانامه شما فرستادیم و دارای پیوند بازنشانی گذرواژه است را بررسی نمایید.', + confirmGeneration: 'تأیید ساخت', + confirmPassword: 'تأیید گذرواژه', + createFirstUser: 'ایجاد کاربر نخست', + emailNotValid: 'رایانامه ارائه‌شده درست نیست', + emailSent: 'رایانامه فرستاده شد', + enableAPIKey: 'فعال‌سازی کلید اِی‌پی‌آی', + failedToUnlock: 'باز کردن قفل ناموفق بود', + forceUnlock: 'باز کردن قفل اجباری', + forgotPassword: 'بازیابی گذرواژه', + forgotPasswordEmailInstructions: + 'لطفا نام کاربری یا نشانی رایانامه خود را وارد نمایید. شما یک پیام با دستورالعمل راه‌اندازی مجدد گذرواژه خود دریافت خواهید کرد.', + forgotPasswordQuestion: 'بازیابی گذرواژه؟', + generate: 'ساخت', + generateNewAPIKey: 'ساخت کلید اِی‌پی‌آی تازه', + generatingNewAPIKeyWillInvalidate: + 'ساخت کلید اِی‌پی‌آی تازه انجام خواهد شد، اما کلیدهای پیشین را <1>باطلخواهد کرد، تمایل دارید ادامه دهید؟', + lockUntil: 'قفل تا', + logBackIn: 'دوباره وارد شوید', + logOut: 'خروج', + loggedIn: 'برای ورود با کاربر دیگر، باید اول <0>خارج شوید.', + loggedInChangePassword: + 'برای تغییر گذرواژه، به <0>نمایه بروید تا گذرواژه خود را ویرایش کنید.', + loggedOutInactivity: 'شما به دلیل عدم فعالیت از سیستم خارج شده اید.', + loggedOutSuccessfully: 'شما با موفقیت از سیستم خارج شدید.', + login: 'وارد شدن', + loginAttempts: 'تلاش برای ورود', + loginUser: 'ورود کاربر', + loginWithAnotherUser: 'برای ورود با کاربر دیگر، باید اول<0>خارج شوید.', + logout: 'خروج', + logoutUser: 'خروج از کاربر', + newAPIKeyGenerated: 'کلید اِی‌پی‌آی تازه ساخته شد.', + newAccountCreated: + 'یک نمایه کاربری تازه برای دسترسی شما ساخته شده است {{serverURL}} لطفاً روی پیوند زیر کلیک کنید یا آدرس زیر را در مرورگر خود قرار دهید تا رایانامه خود را تأیید کنید: {{verificationURL}}
    پس از تایید رایانامه خود، می توانید وارد سیستم شوید.', + newPassword: 'گذرواژه تازه', + resetPassword: 'بازنشانی گذرواژه', + resetPasswordExpiration: 'زمان انقضاء بازنشانی گذرواژه', + resetPasswordToken: 'ژتون بازیابی گذرواژه', + resetYourPassword: 'گذرواژه خود را بازنشانی کنید', + stayLoggedIn: 'وارد سیستم بمانید', + successfullyUnlocked: 'با موفقیت باز شد', + unableToVerify: 'امکان تأیید نیست', + verified: 'تأیید شده', + verifiedSuccessfully: 'با موفقیت تأیید شد', + verify: 'تأیید', + verifyUser: 'تأیید کاربر', + verifyYourEmail: 'رایانامه خود را تأیید کنید', + youAreInactive: + 'مدتی است که فعال نبوده‌اید و به زودی جهت حفظ امنیت شما به صورت خودکار از سیستم خارج خواهید شد. ادامه می‌دهید؟', + youAreReceivingResetPassword: + 'درخواست بازنشانی گذرواژه نمایه توسط شما یا فرد دیگری فرستاده شده است، اگر این درخواست از سمت شما بوده روی پیوند مقابل کلیک کنید یا در مرورگر وب خود پیوند را کپی کنید تا مراحل بازنشانی گذرواژه تکمیل شود، در غیر این صورت جای نگرانی نیست این پیام را نادیده بگیرید:', + youDidNotRequestPassword: + 'اگر شما این درخواست را ندادید، لطفاً این رایانامه را نادیده بگیرید و گذرواژه شما تغییری نخواهد کرد.', + }, + error: { + accountAlreadyActivated: 'این حساب قبلاً فعال شده است.', + autosaving: 'هنگام ذخیره خودکار این سند خطایی رخ داد.', + correctInvalidFields: 'لطفا کادرهای نامعتبر را تصحیح کنید.', + deletingFile: 'هنگام حذف فایل خطایی روی داد.', + deletingTitle: + 'هنگام حذف {{title}} خطایی رخ داد. لطفاً وضعیت اتصال اینترنت خود را بررسی کنید.', + emailOrPasswordIncorrect: 'رایانامه یا گذرواژه ارائه شده نادرست است.', + followingFieldsInvalid_one: 'کادر زیر نامعتبر است:', + followingFieldsInvalid_other: 'کادرهای زیر نامعتبر هستند:', + incorrectCollection: 'مجموعه نادرست', + invalidFileType: 'نوع رسانه نامعتبر است', + invalidFileTypeValue: 'نوع رسانه نامعتبر: {{value}}', + loadingDocument: 'مشکلی در بارگیری رسانه با شناسه {{id}} پیش آمد.', + missingEmail: 'رایانامه وارد نشده.', + missingIDOfDocument: 'شناسه سند جهت بروزرسانی نامعتبر است.', + missingIDOfVersion: 'شناسه نگارش وارد نشده.', + missingRequiredData: 'داده های مورد نیاز وجود ندارد.', + noFilesUploaded: 'هیچ رسانه‌ای بارگذاری نشده.', + noMatchedField: 'کادر منطبقی با"{{label}}" یافت نشد', + noUser: 'بدون کاربر', + notAllowedToAccessPage: 'شما اجازه دسترسی به این برگه را ندارید.', + notAllowedToPerformAction: 'این عملیات برای شما مجاز نیست.', + notFound: 'منبع درخواست شده یافت نشد.', + previewing: 'مشکلی در پیش‌نمایش این رسانه رخ داد.', + problemUploadingFile: 'هنگام بارگذاری سند خطایی رخ داد.', + tokenInvalidOrExpired: 'ژتون شما نامعتبر یا منقضی شده است.', + unPublishingDocument: 'هنگام لغو انتشار این سند خطایی رخ داد.', + unableToDeleteCount: 'نمی‌توان {{count}} از {{total}} {{label}} را حذف کرد.', + unableToUpdateCount: 'امکان به روز رسانی {{count}} خارج از {{total}} {{label}} وجود ندارد.', + unauthorized: 'درخواست نامعتبر، جهت فرستادن این درخواست باید وارد شوید.', + unknown: 'یک خطای ناشناخته رخ داد.', + unspecific: 'خطایی رخ داد.', + userLocked: 'این کاربر به دلیل تلاش های زیاد برای ورود ناموفق قفل شده است.', + valueMustBeUnique: 'مقدار باید منحصر به فرد باشد', + verificationTokenInvalid: 'ژتون تأیید نامعتبر است.', + }, + fields: { + addLabel: 'افزودن {{label}}', + addLink: 'افزودن پیوند', + addNew: 'افزودن', + addNewLabel: 'افزودن {{label}} تازه', + addRelationship: 'افزودن پیوستگی', + addUpload: 'افزودن بارگذار', + block: 'بلوک', + blockType: 'نوع بلوک', + blocks: 'بلوک‌ها', + chooseBetweenCustomTextOrDocument: + 'بین یک نشانی وب یا پیوند دادن به سندی دیگری یکی را انتخاب کنید.', + chooseDocumentToLink: 'یک سند را برای پیوند دادن برگزینید', + chooseFromExisting: 'برگزیدن از بین ورودی‌ها', + chooseLabel: 'انتخاب {{label}}', + collapseAll: 'بستن همه', + customURL: 'URL سفارشی', + editLabelData: 'ویرایش {{label}} داده', + editLink: 'نگارش پیوند', + editRelationship: 'نگارش پیوستگی', + enterURL: 'یک نشانی وب وارد کنید', + internalLink: 'پیوند درونی', + itemsAndMore: '{{items}} و {{count}} بیش‌تر', + labelRelationship: '{{label}} پیوستگی', + latitude: 'عرض جغرافیایی', + linkType: 'نوع پیوند', + linkedTo: 'مرتبط با <0>{{label}}', + longitude: 'طول جغرافیایی', + newLabel: 'تازه {{label}}', + openInNewTab: 'بازکردن درزبانه تازه', + passwordsDoNotMatch: 'گذرواژه‌های وارد شده مطابقت ندارند.', + relatedDocument: 'اسناد مرتبط', + relationTo: 'پیوست به', + removeRelationship: 'حذف پیوستگی', + removeUpload: 'حذف بارگذار', + saveChanges: 'ذخیره تغییرات', + searchForBlock: 'جست‌وجو برای بلوک', + selectExistingLabel: 'انتخاب موارد {{label}}', + selectFieldsToEdit: 'انتخاب کادرها برای نگارش', + showAll: 'نمایش کل', + swapRelationship: 'تبادل پیوستگی', + swapUpload: 'تبادل بارگذار', + textToDisplay: 'متن برای نمایش', + toggleBlock: 'کارگذاری بلوک', + uploadNewLabel: 'بارگذاری تازه {{label}}', + }, + general: { + aboutToDelete: 'شما در حال پاک کردن {{label}} <1>{{title}} هستید. اطمینان دارید؟', + aboutToDeleteCount_many: 'شما در حال پاک کردن {{count}} تعداد {{label}} هستید', + aboutToDeleteCount_one: 'شما در حال پاک کردن {{count}} تعداد {{label}} هستید', + aboutToDeleteCount_other: 'شما در شرف حذف هستید {{count}} {{label}}', + addBelow: 'افزودن به زیر', + addFilter: 'افزودن علامت', + adminTheme: 'پوسته پیشخوان', + and: 'و', + applyChanges: 'اعمال تغییرات', + ascending: 'صعودی', + automatic: 'خودکار', + backToDashboard: 'بازگشت به پیشخوان', + cancel: 'لغو', + changesNotSaved: + 'تغییرات شما ذخیره نشده، اگر این برگه را ترک کنید. تمام تغییرات از دست خواهد رفت.', + close: 'بستن', + collapse: 'بستن', + collections: 'مجموعه‌ها', + columnToSort: 'ستون برای مرتب‌سازی', + columns: 'ستون‌ها', + confirm: 'تأیید', + confirmDeletion: 'تأئید عملیات حذف', + confirmDuplication: 'تأئید رونوشت', + copied: 'رونوشت شده', + copy: 'رونوشت', + create: 'ساختن', + createNew: 'ساختن تازه', + createNewLabel: 'ساختن {{label}} تازه', + created: 'ساخته شده', + createdAt: 'ساخته شده در', + creating: 'در حال ساخت', + creatingNewLabel: 'در حال ساختن {{label}} تازه', + dark: 'تاریک', + dashboard: 'پیشخوان', + delete: 'حذف', + deletedCountSuccessfully: 'تعداد {{count}} {{label}} با موفقیت پاک گردید.', + deletedSuccessfully: 'با موفقیت حذف شد.', + deleting: 'در حال حذف...', + descending: 'رو به پایین', + deselectAllRows: 'تمام سطرها را از انتخاب خارج کنید', + duplicate: 'تکراری', + duplicateWithoutSaving: 'رونوشت بدون ذخیره کردن تغییرات', + edit: 'نگارش', + editLabel: 'نگارش {{label}}', + editing: 'در حال نگارش', + editingLabel_many: 'در حال نگارش {{count}} از {{label}}', + editingLabel_one: 'در حال نگارش {{count}} از {{label}}', + editingLabel_other: 'در حال نگارش {{count}} از {{label}}', + email: 'رایانامه', + emailAddress: 'نشانی رایانامه', + enterAValue: 'یک مقدار وارد کنید', + error: 'خطا', + errors: 'خطاها', + fallbackToDefaultLocale: 'بازگردان پیشفرض زبان', + filter: 'علامت‌گذاری', + filterWhere: 'علامت گذاری کردن {{label}} جایی که', + filters: 'علامت‌گذاری‌ها', + globals: 'سراسری', + language: 'زبان', + lastModified: 'آخرین نگارش', + leaveAnyway: 'به هر حال ترک کن', + leaveWithoutSaving: 'ترک کردن بدون ذخیره', + light: 'روشن', + livePreview: 'پیش‌نمایش', + loading: 'در حال بارگذاری', + locale: 'زبان', + locales: 'زبان‌ها', + menu: 'منو', + moveDown: 'حرکت به پایین', + moveUp: 'حرکت به بالا', + newPassword: 'گذرواژه تازه', + noFiltersSet: 'هیچ علامت‌گذاری تنظیم نشده', + noLabel: '', + noOptions: 'بدون گزینه', + noResults: + 'هیچ {{label}} یافت نشد. {{label}} یا هنوز وجود ندارد یا هیچ کدام با علامت‌گذاری‌هایی که در بالا مشخص کرده اید مطابقت ندارد.', + noValue: 'بدون مقدار', + none: 'هیچ یک', + notFound: 'یافت نشد', + nothingFound: 'چیزی یافت نشد', + of: 'از', + open: 'باز کردن', + or: 'یا', + order: 'چیدمان', + pageNotFound: 'برگه یافت نشد', + password: 'گذرواژه', + payloadSettings: 'تنظیمات پی‌لود', + perPage: 'هر برگه: {{limit}}', + remove: 'برداشتن', + reset: 'بازنشانی', + row: 'ردیف', + rows: 'ردیف‌ها', + save: 'ذخیره', + saving: 'در حال ذخیره...', + searchBy: 'جستجو بر اساس {{label}}', + selectAll: 'انتخاب همه {{count}} {{label}}', + selectAllRows: 'انتخاب تمام سطرها', + selectValue: 'یک مقدار را انتخاب کنید', + selectedCount: '{{count}} {{label}} انتخاب شد', + showAllLabel: 'نمایش همه {{label}}', + sorryNotFound: 'متأسفانه چیزی برای مطابقت با درخواست شما وجود ندارد.', + sort: 'مرتب‌سازی', + sortByLabelDirection: 'مرتب کردن بر اساس {{label}} {{direction}}', + stayOnThisPage: 'ماندن در این برگه', + submissionSuccessful: 'با موفقیت ثبت شد.', + submit: 'فرستادن', + successfullyCreated: '{{label}} با موفقیت ساخته شد.', + successfullyDuplicated: '{{label}} با موفقیت رونوشت شد.', + thisLanguage: 'فارسی', + titleDeleted: '{{label}} "{{title}}" با موفقیت پاک شد.', + unauthorized: 'غیرمجاز', + unsavedChangesDuplicate: + 'شما تغییرات ذخیره نشده دارید. مطمئنید میخواهید به رونوشت ادامه دهید؟', + untitled: 'بدون عنوان', + updatedAt: 'بروز شده در', + updatedCountSuccessfully: 'تعداد {{count}} با عنوان {{label}} با موفقیت بروزرسانی شدند.', + updatedSuccessfully: 'با موفقیت به‌روز شد.', + updating: 'در حال به‌روزرسانی', + uploading: 'در حال بارگذاری', + user: 'کاربر', + users: 'کاربران', + value: 'مقدار', + welcome: 'خوش‌آمدید', + }, + operators: { + contains: 'شامل', + equals: 'برابر با', + exists: 'وجود دارد', + isGreaterThan: 'بزرگتر است از', + isGreaterThanOrEqualTo: 'بزرگتر یا مساوی است', + isIn: 'هست در', + isLessThan: 'کمتر است از', + isLessThanOrEqualTo: 'کمتر یا مساوی است', + isLike: 'مانند این است', + isNotEqualTo: 'برابر نیست', + isNotIn: 'در این نیست', + near: 'نزدیک', + }, + upload: { + crop: 'محصول', + cropToolDescription: + 'گوشه‌های منطقه انتخاب شده را بکشید، یک منطقه جدید رسم کنید یا مقادیر زیر را تنظیم کنید.', + dragAndDrop: 'یک سند را بکشید و رها کنید', + dragAndDropHere: 'یا یک سند را به اینجا بکشید و رها کنید', + editImage: 'ویرایش تصویر', + fileName: 'نام رسانه', + fileSize: 'حجم رسانه', + focalPoint: 'نقطه متمرکز', + focalPointDescription: + 'نقطه کانونی را مستقیماً روی پیش نمایش بکشید یا مقادیر زیر را تنظیم کنید.', + height: 'ارتفاع', + lessInfo: 'اطلاعات کمتر', + moreInfo: 'اطلاعات بیشتر', + previewSizes: 'اندازه های پیش نمایش', + selectCollectionToBrowse: 'یک مجموعه را برای مرور انتخاب کنید', + selectFile: 'برگزیدن رسانه', + setCropArea: 'تنظیم ناحیه برش', + setFocalPoint: 'تنظیم نقطه کانونی', + sizes: 'اندازه‌ها', + sizesFor: 'اندازه‌ها برای {{label}}', + width: 'پهنا', + }, + validation: { + emailAddress: 'لطفاً یک نشانی رایانامه معتبر وارد کنید.', + enterNumber: 'لطفاً یک شماره درست وارد کنید.', + fieldHasNo: 'این کادر شامل هیچ {{label}} نمی‌شود', + greaterThanMax: '{{value}} بیشتر از حداکثر مجاز برای {{label}} است که {{max}} است.', + invalidInput: 'این کادر دارای ورودی نامعتبر است.', + invalidSelection: 'این کادر دارای یک انتخاب نامعتبر است.', + invalidSelections: 'این کادر دارای انتخاب‌های نامعتبر زیر است:', + lessThanMin: '{{value}} کمتر از حداقل مجاز برای {{label}} است که {{min}} است.', + limitReached: 'محدودیت رسیده است، فقط {{max}} مورد می تواند اضافه شود.', + longerThanMin: 'ورودی باید بیش از حداقل {{minLength}} واژه باشد.', + notValidDate: '"{{value}}" یک تاریخ معتبر نیست.', + required: 'این کادر اجباری است.', + requiresAtLeast: 'این رشته حداقل نیازمند {{count}} {{label}}.', + requiresNoMoreThan: 'این رشته به بیش از {{count}} {{label}} نیاز دارد.', + requiresTwoNumbers: 'این کادر به دو عدد نیاز دارد.', + shorterThanMax: 'ورودی باید کمتر از {{maxLength}} واژه باشد.', + trueOrFalse: 'این کادر فقط می تواند به صورت true یا false باشد.', + validUploadID: 'این فیلد یک شناسه بارگذاری معتبر نیست.', + }, + version: { + type: 'تایپ کنید', + aboutToPublishSelection: + 'شما در حال انتشار همه {{label}} برگزیده هستید از این کار اطمینان دارید؟', + aboutToRestore: + 'شما در شرف بازیابی این هستید {{label}} سند به ایالتی که در آن بود {{versionDate}}.', + aboutToRestoreGlobal: 'شما در حال بازگردانی کلی {{label}} در این {{versionDate}} هستید.', + aboutToRevertToPublished: + 'شما در حال بازگردانی تغییرات این رسانه به وضعیت منتشر شده آن هستید. از این کار اطمینان دارید؟', + aboutToUnpublish: 'شما در حال لغو انتشار این سند هستید، آیا از این کار اطمینان دارید؟', + aboutToUnpublishSelection: + 'شما در شرف لغو انتشار {{label}} برگزیده هستید. ایا اطمینان دارید؟', + autosave: 'ذخیره خودکار', + autosavedSuccessfully: 'با موفقیت ذخیره خودکار شد.', + autosavedVersion: 'نگارش ذخیره شده خودکار', + changed: 'تغییر کرد', + compareVersion: 'مقایسه نگارش با:', + confirmPublish: 'تأیید انتشار', + confirmRevertToSaved: 'تأیید بازگردانی نگارش ذخیره شده', + confirmUnpublish: 'تأیید لغو انتشار', + confirmVersionRestoration: 'تأیید بازیابی نگارش', + currentDocumentStatus: 'جاری {{docStatus}} سند', + draft: 'پیش‌نویس', + draftSavedSuccessfully: 'پیش‌نویس با موفقیت ذخیره شد.', + lastSavedAgo: 'آخرین بار {{distance}} پیش ذخیره شد', + noFurtherVersionsFound: 'نگارش دیگری یافت نشد', + noRowsFound: 'هیچ {{label}} یافت نشد', + preview: 'پیش‌نمایش', + problemRestoringVersion: 'مشکلی در بازیابی این نگارش وجود دارد', + publish: 'انتشار', + publishChanges: 'انتشار تغییرات', + published: 'انتشار یافته', + publishing: 'انتشار', + restoreThisVersion: 'این نگارش را بازیابی کنید', + restoredSuccessfully: 'با موفقیت بازیابی شد.', + restoring: 'در حال بازیابی...', + revertToPublished: 'بازگردانی به انتشار یافته', + reverting: 'در حال بازگردانی...', + saveDraft: 'ذخیره پیش‌نویس', + selectLocales: 'زبان‌ها را برای نمایش انتخاب کنید', + selectVersionToCompare: 'نگارشی را برای مقایسه انتخاب کنید', + showLocales: 'نمایش زبان‌ها:', + showingVersionsFor: 'نمایش نگارش‌ها برای:', + status: 'وضعیت', + unpublish: 'لغو انتشار', + unpublishing: 'در حال لغو انتشار...', + version: 'نگارش', + versionCount_many: '{{count}} نگارش‌ یافت شد', + versionCount_none: 'هیچ نگارشی یافت نشد', + versionCount_one: '{{count}} نگارش یافت شد', + versionCount_other: '{{count}} نگارش یافت شد', + versionCreatedOn: '{{version}} ساخته شده در:', + versionID: 'شناسه نگارش', + versions: 'نگارش‌ها', + viewingVersion: 'در حال مشاهده نگارش برای {{entityLabel}} {{documentTitle}}', + viewingVersionGlobal: 'در حال مشاهده نگارش‌های کلی {{entityLabel}}', + viewingVersions: 'مشاهده نگارش‌ها برای {{entityLabel}} {{documentTitle}}', + viewingVersionsGlobal: 'مشاهده نگارش‌های کلی {{entityLabel}}', + }, + }, +} diff --git a/packages/translations/src/languages/fr.ts b/packages/translations/src/languages/fr.ts new file mode 100644 index 0000000000..547daa8a91 --- /dev/null +++ b/packages/translations/src/languages/fr.ts @@ -0,0 +1,406 @@ +import type { Language } from '../types.js' + +export const fr: Language = { + dateFNSKey: 'fr', + translations: { + authentication: { + account: 'Compte', + accountOfCurrentUser: "Compte de l'utilisateur actuel", + alreadyActivated: 'Déjà activé', + alreadyLoggedIn: 'Déjà connecté', + apiKey: 'Clé API', + backToLogin: 'Retour à la connexion', + beginCreateFirstUser: 'Pour commencer, créez votre premier utilisateur.', + changePassword: 'Changer le mot de passe', + checkYourEmailForPasswordReset: + 'Vérifiez votre e-mail, nous vous avons envoyé un lien qui vous permettra de réinitialiser votre mot de passe en toute sécurité.', + confirmGeneration: 'Confirmer la génération', + confirmPassword: 'Confirmez le mot de passe', + createFirstUser: 'Créer le premier utilisateur', + emailNotValid: "L'adresse e-mail fourni n'est pas valide", + emailSent: 'E-mail envoyé', + enableAPIKey: 'Activer la clé API', + failedToUnlock: 'Déverrouillage échoué', + forceUnlock: 'Forcer le déverrouillage', + forgotPassword: 'Mot de passe oublié', + forgotPasswordEmailInstructions: + 'Veuillez saisir votre e-mail ci-dessous. Vous recevrez un e-mail avec des instructions concernant comment réinitialiser votre mot de passe.', + forgotPasswordQuestion: 'Mot de passe oublié ?', + generate: 'Générer', + generateNewAPIKey: 'Générer une nouvelle clé API', + generatingNewAPIKeyWillInvalidate: + "La génération d'une nouvelle clé API <1>invalidera la clé précédente. Êtes-vous sûr de vouloir continuer ?", + lockUntil: "Verrouiller jusqu'à", + logBackIn: 'Se reconnecter', + logOut: 'Se déconnecter', + loggedIn: + "Pour vous connecter en tant qu'un autre utilisateur, vous devez d'abord vous <0>déconnecter.", + loggedInChangePassword: + 'Pour changer votre mot de passe, rendez-vous sur votre <0>compte puis modifiez-y votre mot de passe.', + loggedOutInactivity: "Vous avez été déconnecté pour cause d'inactivité.", + loggedOutSuccessfully: 'Vous avez été déconnecté avec succès.', + login: 'Se connecter', + loginAttempts: 'Tentatives de connexion', + loginUser: "Connecter l'utilisateur", + loginWithAnotherUser: + "Pour vous connecter en tant qu'un autre utilisateur, vous devez d'abord vous <0>déconnecter.", + logout: 'Se déconnecter', + logoutUser: "Déconnecter l'utilisateur", + newAPIKeyGenerated: 'Nouvelle clé API générée.', + newAccountCreated: + 'Un nouveau compte vient d\'être créé pour vous permettre d\'accéder {{serverURL}}. Veuillez cliquer sur le lien suivant ou collez l\'URL ci-dessous dans votre navigateur pour vérifier votre adresse e-mail: {{verificationURL}}
    . Après avoir vérifié votre adresse e-mail, vous pourrez vous connecter avec succès.', + newPassword: 'Nouveau mot de passe', + resetPassword: 'Réinitialiser le mot de passe', + resetPasswordExpiration: "Réinitialiser l'expiration du mot de passe", + resetPasswordToken: 'Réinitialiser le jeton de mot de passe', + resetYourPassword: 'Réinitialisez votre mot de passe', + stayLoggedIn: 'Rester connecté', + successfullyUnlocked: 'Déverrouillé avec succès', + unableToVerify: 'Vérification échoué', + verified: 'Vérifié', + verifiedSuccessfully: 'Vérifié avec succès', + verify: 'Vérifier', + verifyUser: "Vérifier l'utilisateur", + verifyYourEmail: 'Vérifiez votre e-mail', + youAreInactive: + "Vous n'avez pas été actif depuis un moment alors vous serez bientôt automatiquement déconnecté pour votre propre sécurité. Souhaitez-vous rester connecté ?", + youAreReceivingResetPassword: + "Vous recevez ceci parce que vous (ou quelqu'un d'autre) avez demandé la réinitialisation du mot de passe de votre compte. Veuillez cliquer sur le lien suivant ou le coller dans votre navigateur pour terminer le processus :", + youDidNotRequestPassword: + "Si vous ne l'avez pas demandé, veuillez ignorer cet e-mail et votre mot de passe restera inchangé.", + }, + error: { + accountAlreadyActivated: 'Ce compte a déjà été activé.', + autosaving: "Un problème est survenu lors de l'enregistrement automatique de ce document.", + correctInvalidFields: 'Veuillez corriger les champs invalides.', + deletingFile: "Une erreur s'est produite lors de la suppression du fichier.", + deletingTitle: + "Une erreur s'est produite lors de la suppression de {{title}}. Veuillez vérifier votre connexion puis réessayer.", + emailOrPasswordIncorrect: "L'adresse e-mail ou le mot de passe fourni est incorrect.", + followingFieldsInvalid_one: "Le champ suivant n'est pas valide :", + followingFieldsInvalid_other: 'Les champs suivants ne sont pas valides :', + incorrectCollection: 'Collection incorrecte', + invalidFileType: 'Type de fichier invalide', + invalidFileTypeValue: 'Type de fichier invalide : {{value}}', + loadingDocument: + 'Un problème est survenu lors du chargement du document qui a pour identifiant {{id}}.', + missingEmail: 'E-mail manquant.', + missingIDOfDocument: "Il manque l'identifiant du document à mettre à jour.", + missingIDOfVersion: "Il manque l'identifiant de la version.", + missingRequiredData: 'Données requises manquantes.', + noFilesUploaded: "Aucun fichier n'a été téléversé.", + noMatchedField: 'Aucun champ correspondant n\'a été trouvé pour "{{label}}"', + noUser: 'Aucun utilisateur', + notAllowedToAccessPage: "Vous n'êtes pas autorisé à accéder à cette page.", + notAllowedToPerformAction: "Vous n'êtes pas autorisé à effectuer cette action.", + notFound: "La ressource demandée n'a pas été trouvée.", + previewing: "Un problème est survenu lors de l'aperçu de ce document.", + problemUploadingFile: 'Il y a eu un problème lors du téléversement du fichier.', + tokenInvalidOrExpired: "Le jeton n'est soit pas valide ou a expiré.", + unPublishingDocument: + "Un problème est survenu lors de l'annulation de la publication de ce document.", + unableToDeleteCount: 'Impossible de supprimer {{count}} sur {{total}} {{label}}.', + unableToUpdateCount: 'Impossible de mettre à jour {{count}} sur {{total}} {{label}}.', + unauthorized: 'Non autorisé, vous devez être connecté pour effectuer cette demande.', + unknown: "Une erreur inconnue s'est produite.", + unspecific: 'Une erreur est survenue.', + userLocked: + "Cet utilisateur est verrouillé en raison d'un trop grand nombre de tentatives de connexion infructueuses.", + valueMustBeUnique: 'La valeur doit être unique', + verificationTokenInvalid: "Le jeton de vérification n'est pas valide.", + }, + fields: { + addLabel: 'Ajouter {{label}}', + addLink: 'Ajouter un Lien', + addNew: 'Ajouter nouveau ou nouvelle', + addNewLabel: 'Ajouter nouveau ou nouvelle {{label}}', + addRelationship: 'Ajouter une relation', + addUpload: 'Ajouter le téléchargement', + block: 'bloc', + blockType: 'Type de bloc', + blocks: 'blocs', + chooseBetweenCustomTextOrDocument: + 'Choisissez entre saisir une URL personnalisée ou créer un lien vers un autre document.', + chooseDocumentToLink: 'Choisissez un document vers lequel établir un lien', + chooseFromExisting: 'Choisir parmi les existant(e)s', + chooseLabel: 'Choisir un(e) {{label}}', + collapseAll: 'Tout réduire', + customURL: 'URL personnalisée', + editLabelData: 'Modifier les données de ou du {{label}}', + editLink: 'Modifier le lien', + editRelationship: 'Modifier la relation', + enterURL: 'Entrez une URL', + internalLink: 'Lien interne', + itemsAndMore: '{{items}} et {{count}} de plus', + labelRelationship: 'Relation de ou du {{label}} ', + latitude: 'Latitude', + linkType: 'Type de lien', + linkedTo: 'Lié à <0>{{label}}', + longitude: 'Longitude', + newLabel: 'Nouveau ou nouvelle {{label}}', + openInNewTab: 'Ouvrir dans un nouvel onglet', + passwordsDoNotMatch: 'Les mots de passe ne correspondent pas.', + relatedDocument: 'Document connexe', + relationTo: 'Lié à', + removeRelationship: 'Supprimer la relation', + removeUpload: 'Supprimer le Téléversement', + saveChanges: 'Sauvegarder les modifications', + searchForBlock: 'Rechercher un bloc', + selectExistingLabel: 'Sélectionnez {{label}} existant', + selectFieldsToEdit: 'Sélectionnez les champs à modifier', + showAll: 'Afficher tout', + swapRelationship: 'Changer de relation', + swapUpload: 'Changer de Fichier', + textToDisplay: 'Texte à afficher', + toggleBlock: 'Bloc bascule', + uploadNewLabel: 'Téléverser un(e) nouveau ou nouvelle {{label}}', + }, + general: { + aboutToDelete: + 'Vous êtes sur le point de supprimer ce ou cette {{label}} <1>{{title}}. Êtes-vous sûr ?', + aboutToDeleteCount_many: 'Vous êtes sur le point de supprimer {{count}} {{label}}', + aboutToDeleteCount_one: 'Vous êtes sur le point de supprimer {{count}} {{label}}', + aboutToDeleteCount_other: 'Vous êtes sur le point de supprimer {{count}} {{label}}', + addBelow: 'Ajoutez ci-dessous', + addFilter: 'Ajouter un filtre', + adminTheme: "Thème d'administration", + and: 'Et', + applyChanges: 'Appliquer les modifications', + ascending: 'Ascendant', + automatic: 'Automatique', + backToDashboard: 'Retour au tableau de bord', + cancel: 'Annuler', + changesNotSaved: + "Vos modifications n'ont pas été enregistrées. Vous perdrez vos modifications si vous quittez maintenant.", + close: 'Fermer', + collapse: 'Réduire', + collections: 'Collections', + columnToSort: 'Colonne à trier', + columns: 'Colonnes', + confirm: 'Confirmer', + confirmDeletion: 'Confirmer la suppression', + confirmDuplication: 'Confirmer la duplication', + copied: 'Copié', + copy: 'Copie', + create: 'Créer', + createNew: 'Créer un(e) nouveau ou nouvelle', + createNewLabel: 'Créer un(e) nouveau ou nouvelle {{label}}', + created: 'Créé(e)', + createdAt: 'Créé(e) à', + creating: 'création en cours', + creatingNewLabel: "Création d'un(e) nouveau ou nouvelle {{label}}", + dark: 'Nuit', + dashboard: 'Tableau de bord', + delete: 'Supprimer', + deletedCountSuccessfully: '{{count}} {{label}} supprimé avec succès.', + deletedSuccessfully: 'Supprimé(e) avec succès.', + deleting: 'Suppression en cours...', + descending: 'Descendant(e)', + deselectAllRows: 'Désélectionner toutes les lignes', + duplicate: 'Dupliquer', + duplicateWithoutSaving: 'Dupliquer sans enregistrer les modifications', + edit: 'Éditer', + editLabel: 'Modifier {{label}}', + editing: 'Modification en cours', + editingLabel_many: 'Modification des {{count}} {{label}}', + editingLabel_one: 'Modification de {{count}} {{label}}', + editingLabel_other: 'Modification des {{count}} {{label}}', + email: 'E-mail', + emailAddress: 'Adresse e-mail', + enterAValue: 'Entrez une valeur', + error: 'Erreur', + errors: 'Erreurs', + fallbackToDefaultLocale: 'Retour à la locale par défaut', + filter: 'Filtrer', + filterWhere: 'Filtrer {{label}} où', + filters: 'Filtres', + globals: 'Globals(es)', + language: 'Langue', + lastModified: 'Dernière modification', + leaveAnyway: 'Quitter quand même', + leaveWithoutSaving: 'Quitter sans sauvegarder', + light: 'Lumière ou Jour', + livePreview: 'Aperçu', + loading: 'Chargement en cours', + locale: 'Paramètres régionaux', + locales: 'Paramètres régionaux', + menu: 'Menu', + moveDown: 'Déplacer vers le bas', + moveUp: 'Déplacer vers le haut', + newPassword: 'Nouveau mot de passe', + noFiltersSet: 'Aucun filtre défini', + noLabel: '', + noOptions: 'Aucune option', + noResults: + "Aucun(e) {{label}} trouvé(e). Soit aucun(e) {{label}} n'existe encore, soit aucun(e) ne correspond aux filtres que vous avez spécifiés ci-dessus", + noValue: 'Aucune valeur', + none: 'Aucun(e)', + notFound: 'Pas trouvé', + nothingFound: "Rien n'a été trouvé", + of: 'de', + open: 'Ouvrir', + or: 'ou', + order: 'Ordre', + pageNotFound: 'Page non trouvée', + password: 'Mot de passe', + payloadSettings: 'Paramètres de Payload', + perPage: 'Par Page: {{limit}}', + remove: 'Retirer', + reset: 'Réinitialiser', + row: 'Ligne', + rows: 'Lignes', + save: 'Sauvegarder', + saving: 'Sauvegarde en cours...', + searchBy: 'Rechercher par {{label}}', + selectAll: 'Tout sélectionner {{count}} {{label}}', + selectAllRows: 'Sélectionnez toutes les lignes', + selectValue: 'Sélectionnez une valeur', + selectedCount: '{{count}} {{label}} sélectionné', + showAllLabel: 'Afficher tous les {{label}}', + sorryNotFound: 'Désolé, rien ne correspond à votre demande.', + sort: 'Trier', + sortByLabelDirection: 'Trier par {{label}} {{direction}}', + stayOnThisPage: 'Rester sur cette page', + submissionSuccessful: 'Soumission réussie.', + submit: 'Soumettre', + successfullyCreated: '{{label}} créé(e) avec succès.', + successfullyDuplicated: '{{label}} dupliqué(e) avec succès.', + thisLanguage: 'Français', + titleDeleted: '{{label}} "{{title}}" supprimé(e) avec succès.', + unauthorized: 'Non autorisé', + unsavedChangesDuplicate: + 'Vous avez des changements non enregistrés. Souhaitez-vous continuer la duplication ?', + untitled: 'Sans titre', + updatedAt: 'Modifié le', + updatedCountSuccessfully: '{{count}} {{label}} mis à jour avec succès.', + updatedSuccessfully: 'Mis à jour avec succés.', + updating: 'Mise à jour', + uploading: 'Téléchargement', + user: 'Utilisateur', + users: 'Utilisateurs', + value: 'Valeur', + welcome: 'Bienvenu(e)', + }, + operators: { + contains: 'contient', + equals: 'est égal à', + exists: 'existe', + isGreaterThan: 'est supérieur à', + isGreaterThanOrEqualTo: 'est supérieur ou égal à', + isIn: 'est dans', + isLessThan: 'est inférieur à', + isLessThanOrEqualTo: 'est inférieur ou égal à', + isLike: 'est comme', + isNotEqualTo: "n'est pas égal à", + isNotIn: "n'est pas dans", + near: 'proche', + }, + upload: { + crop: 'Récolte', + cropToolDescription: + 'Faites glisser les coins de la zone sélectionnée, dessinez une nouvelle zone ou ajustez les valeurs ci-dessous.', + dragAndDrop: 'Glisser-déposer un fichier', + dragAndDropHere: 'ou glissez-déposez un fichier ici', + editImage: "Modifier l'image", + fileName: 'Nom du fichier', + fileSize: 'Taille du fichier', + focalPoint: 'Point focal', + focalPointDescription: + "Faites glisser le point focal directement sur l'aperçu ou ajustez les valeurs ci-dessous.", + height: 'Hauteur', + lessInfo: "Moins d'infos", + moreInfo: "Plus d'infos", + previewSizes: "Tailles d'aperçu", + selectCollectionToBrowse: 'Sélectionnez une collection à parcourir', + selectFile: 'Sélectionnez un fichier', + setCropArea: 'Définir la zone de recadrage', + setFocalPoint: 'Définir le point focal', + sizes: 'Tailles', + sizesFor: 'Tailles pour {{label}}', + width: 'Largeur', + }, + validation: { + emailAddress: "S'il vous plaît, veuillez entrer une adresse e-mail valide.", + enterNumber: "S'il vous plait, veuillez entrer un nombre valide.", + fieldHasNo: "Ce champ n'a pas de {{label}}", + greaterThanMax: '{{value}} est supérieur au max autorisé {{label}} de {{max}}.', + invalidInput: 'Ce champ a une entrée invalide.', + invalidSelection: 'Ce champ a une sélection invalide.', + invalidSelections: 'Ce champ contient des sélections invalides suivantes :', + lessThanMin: '{{value}} est inférieur au min autorisé {{label}} de {{min}}.', + limitReached: 'Limite atteinte, seulement {{max}} éléments peuvent être ajoutés.', + longerThanMin: + 'Cette valeur doit être supérieure à la longueur minimale de {{minLength}} caractères.', + notValidDate: '"{{value}}" n\'est pas une date valide.', + required: 'Ce champ est requis.', + requiresAtLeast: 'Ce champ doit avoir au moins {{count}} {{label}}.', + requiresNoMoreThan: 'Ce champ ne doit pas avoir plus de {{count}} {{label}}.', + requiresTwoNumbers: 'Ce champ doit avoir deux chiffres.', + shorterThanMax: + 'Cette valeur doit être inférieure à la longueur maximale de {{maxLength}} caractères.', + trueOrFalse: "Ce champ ne peut être égal qu'à vrai ou faux.", + validUploadID: "Ce champ n'est pas un valide identifiant de fichier.", + }, + version: { + type: 'Type', + aboutToPublishSelection: + 'Vous êtes sur le point de publier tous les {{label}} de la sélection. Es-tu sûr?', + aboutToRestore: + "Vous êtes sur le point de restaurer le document {{label}} à l'état où il se trouvait le {{versionDate}}.", + aboutToRestoreGlobal: + "Vous êtes sur le point de restaurer le ou la {{label}} global(e) à l'état où il ou elle se trouvait le {{versionDate}}.", + aboutToRevertToPublished: + 'Vous êtes sur le point de rétablir les modifications apportées à ce document à la version publiée. Êtes-vous sûr ?', + aboutToUnpublish: + "Vous êtes sur le point d'annuler la publication de ce document. Êtes-vous sûr ?", + aboutToUnpublishSelection: + 'Vous êtes sur le point de dépublier tous les {{label}} de la sélection. Es-tu sûr?', + autosave: 'Enregistrement automatique', + autosavedSuccessfully: 'Enregistrement automatique réussi.', + autosavedVersion: 'Version enregistrée automatiquement', + changed: 'Modifié', + compareVersion: 'Comparez cette version à :', + confirmPublish: 'Confirmer la publication', + confirmRevertToSaved: 'Confirmer la restauration', + confirmUnpublish: "Confirmer l'annulation", + confirmVersionRestoration: 'Confirmer la restauration de la version', + currentDocumentStatus: 'Document {{docStatus}} actuel', + draft: 'Brouillon', + draftSavedSuccessfully: 'Brouillon enregistré avec succès.', + lastSavedAgo: 'Dernière sauvegarde il y a {{distance}}', + noFurtherVersionsFound: 'Aucune autre version trouvée', + noRowsFound: 'Aucun(e) {{label}} trouvé(e)', + preview: 'Aperçu', + problemRestoringVersion: 'Un problème est survenu lors de la restauration de cette version', + publish: 'Publier', + publishChanges: 'Publier les modifications', + published: 'Publié', + publishing: 'Publication', + restoreThisVersion: 'Restaurer cette version', + restoredSuccessfully: 'Restauré(e) avec succès.', + restoring: 'Restauration en cours...', + revertToPublished: 'Republier', + reverting: 'Republication en cours...', + saveDraft: 'Enregistrer le brouillon', + selectLocales: 'Sélectionnez les paramètres régionaux à afficher', + selectVersionToCompare: 'Sélectionnez une version à comparer', + showLocales: 'Afficher les paramètres régionaux :', + showingVersionsFor: 'Affichage des versions pour :', + status: 'Statut', + unpublish: 'Annuler la publication', + unpublishing: 'Annulation en cours...', + version: 'Version', + versionCount_many: '{{count}} versions trouvées', + versionCount_none: 'Aucune version trouvée', + versionCount_one: '{{count}} version trouvée', + versionCount_other: '{{count}} versions trouvées', + versionCreatedOn: '{{version}} créé(e) le :', + versionID: 'Identifiant de la version', + versions: 'Versions', + viewingVersion: 'Affichage de la version de ou du {{entityLabel}} {{documentTitle}}', + viewingVersionGlobal: 'Affichage de la version globale de ou du {{entityLabel}}', + viewingVersions: 'Affichage des versions de ou du {{entityLabel}} {{documentTitle}}', + viewingVersionsGlobal: 'Affichage des versions globales de ou du {{entityLabel}}', + }, + }, +} diff --git a/packages/translations/src/languages/hr.ts b/packages/translations/src/languages/hr.ts new file mode 100644 index 0000000000..ecee035662 --- /dev/null +++ b/packages/translations/src/languages/hr.ts @@ -0,0 +1,395 @@ +import type { Language } from '../types.js' + +export const hr: Language = { + dateFNSKey: 'hr', + translations: { + authentication: { + account: 'Račun', + accountOfCurrentUser: 'Račun od trenutnog korisnika', + alreadyActivated: 'Već aktivirano', + alreadyLoggedIn: 'Već prijavljen', + apiKey: 'API ključ', + backToLogin: 'Nazad na prijavu', + beginCreateFirstUser: 'Za početak, kreiraj svog prvog korisnika.', + changePassword: 'Promjeni lozinku', + checkYourEmailForPasswordReset: + 'Provjerite email s poveznicom koja će Vam omogućiti sigurnu promjenu lozinke.', + confirmGeneration: 'Potvrdi kreiranje', + confirmPassword: 'Potvrdi lozinku', + createFirstUser: 'Kreiraj prvog korisnika', + emailNotValid: 'Email nije ispravan', + emailSent: 'Email poslan', + enableAPIKey: 'Omogući API ključ', + failedToUnlock: 'Neuspješno otključavanje.', + forceUnlock: 'Prisilno otključaj', + forgotPassword: 'Zaboravljena lozinka', + forgotPasswordEmailInstructions: + 'Molim unesite svoj email. Primit ćete poruku s uputama za ponovno postavljanje lozinke.', + forgotPasswordQuestion: 'Zaboravljena lozinka?', + generate: 'Generiraj', + generateNewAPIKey: 'Generiraj novi API ključ', + generatingNewAPIKeyWillInvalidate: + 'Generiranje novog API ključa će <1>poništiti prethodni ključ. Jeste li sigurni da želite nastaviti?', + lockUntil: 'Zaključaj dok', + logBackIn: 'Ponovna prijava', + logOut: 'Odjava', + loggedIn: 'Za prijavu s drugim korisničkim računom potrebno je prvo <0>odjaviti se', + loggedInChangePassword: + 'Da biste promijenili lozinku, otvorite svoj <0>račun i promijenite lozinku tamo.', + loggedOutInactivity: 'Odjavljeni se zbog neaktivnosti.', + loggedOutSuccessfully: 'Uspješno ste odjavljeni..', + login: 'Prijava', + loginAttempts: 'Pokušaji prijave', + loginUser: 'Prijava korisnika', + loginWithAnotherUser: + 'Za prijavu s drugim korisničkim računom potrebno je prvo <0>odjaviti se', + logout: 'Odjava', + logoutUser: 'Odjava korisnika', + newAPIKeyGenerated: 'Novi API ključ generiran.', + newAccountCreated: + 'Novi račun je kreiran. Pristupite računu klikom na {{serverURL}}. Molim kliknite na sljedeći link ili zalijepite URL, koji se nalazi ispod, u preglednik da biste potvrdili svoj email: {{verificationURL}}
    Nakon što potvrdite email, moći ćete se prijaviti.', + newPassword: 'Nova lozinka', + resetPassword: 'Restartiranje lozinke', + resetPasswordExpiration: 'Restartiranje roka trajanja lozinke', + resetPasswordToken: 'Restartiranje lozinke tokena', + resetYourPassword: 'Restartiraj svoju lozinku', + stayLoggedIn: 'Ostani prijavljen', + successfullyUnlocked: 'Uspješno otključano', + unableToVerify: 'Nije moguće potvrditi', + verified: 'Potvrđeno', + verifiedSuccessfully: 'Uspješno potvrđeno', + verify: 'Potvrdi', + verifyUser: 'Potvrdi korisnika', + verifyYourEmail: 'Potvrdi svoj email', + youAreInactive: + 'Neaktivni ste neko vrijeme i uskoro ćete biti automatski odjavljeni zbog vlastite sigurnosti. Želite li ostati prijavljeni?', + youAreReceivingResetPassword: + 'Primili ste ovo jer ste Vi (ili netko drugi) zatražili promjenu lozinke za Vaš račun. Molim kliknite na poveznicu ili zalijepite ovo u svoje preglednik da biste završili proces:', + youDidNotRequestPassword: + 'Ako niste zatražili ovo, molim ignorirajte ovaj email i Vaša lozinka ostat će nepromijenjena.', + }, + error: { + accountAlreadyActivated: 'Ovaj račun je već aktiviran.', + autosaving: 'Nastao je problem pri automatskom spremanju ovog dokumenta.', + correctInvalidFields: 'Molim ispravite nevaljana polja.', + deletingFile: 'Dogodila se pogreška pri brisanju datoteke.', + deletingTitle: + 'Dogodila se pogreška pri brisanju {{title}}. Molim provjerite svoju internetsku vezu i pokušajte ponovno.', + emailOrPasswordIncorrect: 'Email ili lozinka netočni.', + followingFieldsInvalid_one: ' Ovo polje je nevaljano:', + followingFieldsInvalid_other: 'Ova polja su nevaljana:', + incorrectCollection: 'Nevaljana kolekcija', + invalidFileType: 'Nevaljan tip datoteke', + invalidFileTypeValue: 'Nevaljan tip datoteke: {{value}}', + loadingDocument: 'Pojavio se problem pri učitavanju dokumenta čiji je ID {{id}}.', + missingEmail: 'Nedostaje email.', + missingIDOfDocument: 'Nedostaje ID dokumenta da bi se ažurirao.', + missingIDOfVersion: 'Nedostaje ID verzije.', + missingRequiredData: 'Nedostaju obvezni podaci.', + noFilesUploaded: 'Nijedna datoteka nije učitana.', + noMatchedField: 'Nema podudarajućih polja za "{{label}}"', + noUser: 'Nema korisnika', + notAllowedToAccessPage: 'Nemate dopuštenje pristupiti ovoj stranici.', + notAllowedToPerformAction: 'Nemate dopuštenje izvršiti ovu radnju.', + notFound: 'Traženi resurs nije pronađen.', + previewing: 'Pojavio se problem pri pregledavanju ovog dokumenta.', + problemUploadingFile: 'Pojavio se problem pri učitavanju datoteke.', + tokenInvalidOrExpired: 'Token je nevaljan ili je istekao.', + unPublishingDocument: 'Pojavio se problem pri poništavanju objave ovog dokumenta.', + unableToDeleteCount: 'Nije moguće izbrisati {{count}} od {{total}} {{label}}.', + unableToUpdateCount: 'Nije moguće ažurirati {{count}} od {{total}} {{label}}.', + unauthorized: 'Neovlašten, morate biti prijavljeni da biste uputili ovaj zahtjev.', + unknown: 'Došlo je do nepoznate pogreške.', + unspecific: 'Došlo je do pogreške.', + userLocked: 'Ovaj korisnik je zaključan zbog previše neuspješnih pokušaja prijave.', + valueMustBeUnique: 'Vrijednost mora biti jedinstvena.', + verificationTokenInvalid: 'Verifikacijski token je nevaljan.', + }, + fields: { + addLabel: 'Dodaj {{label}}', + addLink: 'Dodaj poveznicu', + addNew: 'Dodaj novi', + addNewLabel: 'Dodaj novi {{label}}', + addRelationship: 'Dodaj odnos', + addUpload: 'Dodaj učitavanje', + block: 'blokiranje', + blockType: 'Vrsta blokiranja', + blocks: 'blokiranja', + chooseBetweenCustomTextOrDocument: + 'Izaberite između unošenja prilagođenog teksta URL ili poveznice na drugi dokument.', + chooseDocumentToLink: 'Odaberite dokument koji želite povezati.', + chooseFromExisting: 'Odaberite iz postojećih.', + chooseLabel: 'Odaberite {{label}}', + collapseAll: 'Sažmi sve', + customURL: 'Prilagođeni URL', + editLabelData: 'Uredi {{label}} podatke', + editLink: 'Uredi poveznicu', + editRelationship: 'Uredi odnos', + enterURL: 'Unesi URL', + internalLink: 'Interna poveznika', + itemsAndMore: '{{items}} i {{count}} više', + labelRelationship: '{{label}} veza', + latitude: 'Zemljopisna širina', + linkType: 'Tip poveznce', + linkedTo: 'Povezabi sa <0>{{label}}', + longitude: 'Zemljopisna dužina', + newLabel: 'Novo {{label}}', + openInNewTab: 'Otvori u novoj kartici.', + passwordsDoNotMatch: 'Lozinke nisu iste.', + relatedDocument: 'Povezani dokument', + relationTo: 'Veza sa', + removeRelationship: 'Ukloni vezu', + removeUpload: 'Ukloni prijenos', + saveChanges: 'Spremi promjene', + searchForBlock: 'Potraži blok', + selectExistingLabel: 'Odaberi postojeće{{label}}', + selectFieldsToEdit: 'Odaberite polja za uređivanje', + showAll: 'Pokaži sve', + swapRelationship: 'Zamijeni vezu', + swapUpload: 'Zamijeni prijenos', + textToDisplay: 'Tekst za prikaz', + toggleBlock: 'Prebaci blok', + uploadNewLabel: 'Učitaj novi {{label}}', + }, + general: { + aboutToDelete: 'Izbrisat ćete {{label}} <1>{{title}}. Jeste li sigurni?', + aboutToDeleteCount_many: 'Upravo ćete izbrisati {{count}} {{label}}', + aboutToDeleteCount_one: 'Upravo ćete izbrisati {{count}} {{label}}', + aboutToDeleteCount_other: 'Upravo ćete izbrisati {{count}} {{label}}', + addBelow: 'Dodaj ispod', + addFilter: 'Dodaj filter', + adminTheme: 'Administratorska tema', + and: 'I', + applyChanges: 'Primijeni promjene', + ascending: 'Uzlazno', + automatic: 'Automatsko', + backToDashboard: 'Natrag na nadzornu ploču', + cancel: 'Otkaži', + changesNotSaved: 'Vaše promjene nisu spremljene. Ako izađete sada, izgubit ćete promjene.', + close: 'Zatvori', + collapse: 'Sažmi', + collections: 'Kolekcije', + columnToSort: 'Stupac za sortiranje', + columns: 'Stupci', + confirm: 'Potvrdi', + confirmDeletion: 'Potvrdi brisanje', + confirmDuplication: 'Potvrdi duplikaciju', + copied: 'Kopirano', + copy: 'Kopiraj', + create: 'Kreiraj', + createNew: 'Kreiraj novo', + createNewLabel: 'Kreiraj novo {{label}}', + created: 'Kreirano', + createdAt: 'Kreirano u', + creating: 'Kreira se', + creatingNewLabel: 'Kreiranje novog {{label}}', + dark: 'Tamno', + dashboard: 'Nadzorna ploča', + delete: 'Obriši', + deletedCountSuccessfully: 'Uspješno izbrisano {{count}} {{label}}.', + deletedSuccessfully: 'Uspješno obrisano.', + deleting: 'Brisanje...', + descending: 'Silazno', + deselectAllRows: 'Odznači sve redove', + duplicate: 'Duplikat', + duplicateWithoutSaving: 'Dupliciraj bez spremanja promjena', + edit: 'Uredi', + editLabel: 'Uredi {{label}}', + editing: 'Uređivanje', + editingLabel_many: 'Uređivanje {{count}} {{label}}', + editingLabel_one: 'Uređivanje {{count}} {{label}}', + editingLabel_other: 'Uređivanje {{count}} {{label}}', + email: 'Email', + emailAddress: 'Email adresa', + enterAValue: 'Unesi vrijednost', + error: 'Greška', + errors: 'Greške', + fallbackToDefaultLocale: 'Vraćanje na zadani jezik', + filter: 'Filter', + filterWhere: 'Filter {{label}} gdje', + filters: 'Filteri', + globals: 'Globali', + language: 'Jezik', + lastModified: 'Zadnja promjena', + leaveAnyway: 'Svejedno napusti', + leaveWithoutSaving: 'Napusti bez spremanja', + light: 'Svijetlo', + livePreview: 'Pregled', + loading: 'Učitavanje', + locale: 'Jezik', + locales: 'Prijevodi', + menu: 'Izbornik', + moveDown: 'Pomakni dolje', + moveUp: 'Pomakni gore', + newPassword: 'Nova lozinka', + noFiltersSet: 'Nema postavljenih filtera', + noLabel: '', + noOptions: 'Nema opcija', + noResults: + 'Nema pronađenih {{label}}. Ili {{label}} još uvijek ne postoji ili nijedan od odgovara postavljenim filterima.', + noValue: 'Bez vrijednosti', + none: 'Nijedan', + notFound: 'Nije pronađeno', + nothingFound: 'Ništa nije pronađeno', + of: 'Od', + open: 'Otvori', + or: 'Ili', + order: 'Poredak', + pageNotFound: 'Stranica nije pronađena', + password: 'Lozinka', + payloadSettings: 'Payload postavke', + perPage: 'Po stranici: {{limit}}', + remove: 'Ukloni', + reset: 'Ponovno postavi', + row: 'Red', + rows: 'Redovi', + save: 'Spremi', + saving: 'Spremanje...', + searchBy: 'Traži po {{label}}', + selectAll: 'Odaberite sve {{count}} {{label}}', + selectAllRows: 'Odaberite sve redove', + selectValue: 'Odaberi vrijednost', + selectedCount: '{{count}} {{label}} odabrano', + showAllLabel: 'Prikaži sve {{label}}', + sorryNotFound: 'Nažalost, ne postoji ništa što odgovara vašem zahtjevu.', + sort: 'Sortiraj', + sortByLabelDirection: 'Sortiraj prema {{label}} {{direction}}', + stayOnThisPage: 'Ostani na ovoj stranici', + submissionSuccessful: 'Uspješno slanje', + submit: 'Podnesi', + successfullyCreated: '{{label}} uspješno kreirano.', + successfullyDuplicated: '{{label}} uspješno duplicirano.', + thisLanguage: 'Hrvatski', + titleDeleted: '{{label}} "{{title}}" uspješno obrisano.', + unauthorized: 'Neovlašteno', + unsavedChangesDuplicate: 'Imate nespremljene promjene. Želite li nastaviti s dupliciranjem?', + untitled: 'Bez naslova', + updatedAt: 'Ažurirano u', + updatedCountSuccessfully: 'Uspješno ažurirano {{count}} {{label}}.', + updatedSuccessfully: 'Uspješno ažurirano.', + updating: 'Ažuriranje', + uploading: 'Prijenos', + user: 'Korisnik', + users: 'Korisnici', + value: 'Attribute', + welcome: 'Dobrodošli', + }, + operators: { + contains: 'sadrži', + equals: 'jednako', + exists: 'postoji', + isGreaterThan: 'je veće od', + isGreaterThanOrEqualTo: 'je veće od ili jednako', + isIn: 'je u', + isLessThan: 'manje je od', + isLessThanOrEqualTo: 'manje je ili jednako', + isLike: 'je kao', + isNotEqualTo: 'nije jednako', + isNotIn: 'nije unutra', + near: 'blizu', + }, + upload: { + crop: 'Usjev', + cropToolDescription: + 'Povucite kutove odabranog područja, nacrtajte novo područje ili prilagodite vrijednosti ispod.', + dragAndDrop: 'Povucite i ispustite datoteku', + dragAndDropHere: 'ili povucite i ispustite datoteku ovdje', + editImage: 'Uredi sliku', + fileName: 'Ime datoteke', + fileSize: 'Veličina datoteke', + focalPoint: 'Središnja točka', + focalPointDescription: + 'Povucite središnju točku izravno na pregledu ili prilagodite vrijednosti ispod.', + height: 'Visina', + lessInfo: 'Manje informacija', + moreInfo: 'Više informacija', + previewSizes: 'Veličine pregleda', + selectCollectionToBrowse: 'Odaberite kolekciju za pregled', + selectFile: 'Odaberite datoteku', + setCropArea: 'Postavi područje usjeva', + setFocalPoint: 'Postavi fokusnu točku', + sizes: 'Veličine', + sizesFor: 'Veličine za {{label}}', + width: 'Širina', + }, + validation: { + emailAddress: 'Molim unestie valjanu email adresu.', + enterNumber: 'Molim unesite valjani broj.', + fieldHasNo: 'Ovo polje nema {{label}}', + greaterThanMax: '{{value}} exceeds the maximum allowable {{label}} limit of {{max}}.', + invalidInput: 'Ovo polje ima nevaljan unos.', + invalidSelection: 'Ovo polje ima nevaljan odabir.', + invalidSelections: 'Ovo polje ima sljedeće nevaljane odabire:', + lessThanMin: '{{value}} is below the minimum allowable {{label}} limit of {{min}}.', + limitReached: 'Dosegnut je limit, može se dodati samo {{max}} stavki.', + longerThanMin: 'Ova vrijednost mora biti duža od minimalne dužine od {{minLength}} znakova', + notValidDate: '"{{value}}" nije valjan datum.', + required: 'Ovo polje je obvezno.', + requiresAtLeast: 'Ovo polje zahtjeva minimalno {{count}} {{label}}.', + requiresNoMoreThan: 'Ovo polje zahtjeva ne više od {{count}} {{label}}.', + requiresTwoNumbers: 'Ovo polje zahtjeva dva broja.', + shorterThanMax: + 'Ova vrijednost mora biti kraća od maksimalne dužine od {{maxLength}} znakova', + trueOrFalse: 'Ovo polje može biti samo točno ili netočno', + validUploadID: 'Ovo polje nije valjani ID prijenosa.', + }, + version: { + type: 'Tip', + aboutToPublishSelection: 'Upravo ćete objaviti sve {{label}} u izboru. Jesi li siguran?', + aboutToRestore: 'Vratit ćete {{label}} dokument u stanje u kojem je bio {{versionDate}}', + aboutToRestoreGlobal: + 'Vratit ćete globalni {{label}} u stanje u kojem je bio {{versionDate}}.', + aboutToRevertToPublished: + 'Vratit ćete promjene u dokumentu u objavljeno stanje. Jeste li sigurni? ', + aboutToUnpublish: 'Poništit ćete objavu ovog dokumenta. Jeste li sigurni?', + aboutToUnpublishSelection: + 'Upravo ćete poništiti objavu svih {{label}} u odabiru. Jesi li siguran?', + autosave: 'Automatsko spremanje', + autosavedSuccessfully: 'Automatsko spremanje uspješno.', + autosavedVersion: 'Verzija automatski spremljenog dokumenta', + changed: 'Promijenjeno', + compareVersion: 'Usporedi verziju sa:', + confirmPublish: 'Potvrdi objavu', + confirmRevertToSaved: 'Potvrdite vraćanje na spremljeno', + confirmUnpublish: 'Potvrdite poništavanje objave', + confirmVersionRestoration: 'Potvrdite vraćanje verzije', + currentDocumentStatus: 'Trenutni {{docStatus}} dokumenta', + draft: 'Nacrt', + draftSavedSuccessfully: 'Nacrt uspješno spremljen.', + lastSavedAgo: 'Zadnji put spremljeno prije {{distance}', + noFurtherVersionsFound: 'Nisu pronađene daljnje verzije', + noRowsFound: '{{label}} nije pronađeno', + preview: 'Pregled', + problemRestoringVersion: 'Nastao je problem pri vraćanju ove verzije', + publish: 'Objaviti', + publishChanges: 'Objavi promjene', + published: 'Objavljeno', + publishing: 'Objavljivanje', + restoreThisVersion: 'Vrati ovu verziju', + restoredSuccessfully: 'Uspješno vraćeno.', + restoring: 'Vraćanje...', + revertToPublished: 'Vrati na objavljeno', + reverting: 'Vraćanje...', + saveDraft: 'Sačuvaj nacrt', + selectLocales: 'Odaberite jezike', + selectVersionToCompare: 'Odaberite verziju za usporedbu', + showLocales: 'Prikaži jezike:', + showingVersionsFor: 'Pokazujem verzije za:', + status: 'Status', + unpublish: 'Poništi objavu', + unpublishing: 'Poništavanje objave...', + version: 'Verzija', + versionCount_many: '{{count}} pronađenih verzija', + versionCount_none: 'Nema pronađenih verzija', + versionCount_one: '{{count}} pronađena verzija', + versionCount_other: '{{count}} pronađenih verzija', + versionCreatedOn: '{{version}} kreiranih:', + versionID: 'ID verzije', + versions: 'Verzije', + viewingVersion: 'Pregled verzije za {{entityLabel}} {{documentTitle}}', + viewingVersionGlobal: 'Pregled verzije za globalni {{entityLabel}}', + viewingVersions: 'Pregled verzija za {{entityLabel}} {{documentTitle}}', + viewingVersionsGlobal: 'Pregled verzije za globalni {{entityLabel}}', + }, + }, +} diff --git a/packages/translations/src/languages/hu.ts b/packages/translations/src/languages/hu.ts new file mode 100644 index 0000000000..1d4320d6b5 --- /dev/null +++ b/packages/translations/src/languages/hu.ts @@ -0,0 +1,400 @@ +import type { Language } from '../types.js' + +export const hu: Language = { + dateFNSKey: 'hu', + translations: { + authentication: { + account: 'Fiók', + accountOfCurrentUser: 'Az aktuális felhasználó fiókja', + alreadyActivated: 'Már aktiválva van', + alreadyLoggedIn: 'Már bejelentkezett', + apiKey: 'API-kulcs', + backToLogin: 'Vissza a bejelentkezéshez', + beginCreateFirstUser: 'Kezdésként hozza létre az első felhasználót.', + changePassword: 'Jelszó módosítása', + checkYourEmailForPasswordReset: + 'Ellenőrizze az e-mailjét, a linkért, amellyel biztonságosan visszaállíthatja jelszavát.', + confirmGeneration: 'Generálás megerősítése', + confirmPassword: 'Jelszó megerősítése', + createFirstUser: 'Első felhasználó létrehozása', + emailNotValid: 'A megadott e-mail cím érvénytelen', + emailSent: 'E-mail elküldve', + enableAPIKey: 'API-kulcs engedélyezése', + failedToUnlock: 'Nem sikerült feloldani', + forceUnlock: 'Kényszerített feloldás', + forgotPassword: 'Elfelejtett jelszó', + forgotPasswordEmailInstructions: + 'Kérjük, adja meg e-mail címét alább. Kapni fog egy e-mail üzenetet a jelszó visszaállításához szükséges utasításokkal.', + forgotPasswordQuestion: 'Elfelejtette jelszavát?', + generate: 'Generálás', + generateNewAPIKey: 'Új API-kulcs generálása', + generatingNewAPIKeyWillInvalidate: + 'Az új API-kulcs generálása <1>érvényteleníti az előző kulcsot. Biztos, hogy folytatni szeretné?', + lockUntil: 'Zárolás eddig', + logBackIn: 'Jelentkezzen be újra', + logOut: 'Kijelentkezés', + loggedIn: + 'Ha egy másik felhasználóval szeretne bejelentkezni, először <0>ki kell jelentkeznie.', + loggedInChangePassword: + 'Jelszavának megváltoztatásához lépjen be <0>fiókjába, és ott szerkessze jelszavát.', + loggedOutInactivity: 'Inaktivitás miatt kijelentkeztünk.', + loggedOutSuccessfully: 'Sikeresen kijelentkezett.', + login: 'Bejelentkezés', + loginAttempts: 'Bejelentkezési kísérletek', + loginUser: 'Bejelentkezés felhasználó', + loginWithAnotherUser: + 'Ha egy másik felhasználóval szeretne bejelentkezni, először <0>ki kell jelentkeznie.', + logout: 'Kijelentkezés', + logoutUser: 'Felhasználó kijelentkezése', + newAPIKeyGenerated: 'Új API-kulcs generálva.', + newAccountCreated: + 'Létrehoztunk egy új fiókot, amellyel hozzáférhet a következőhöz {{serverURL}} Kérjük, kattintson a következő linkre, vagy illessze be az alábbi URL-t a böngészőbe az e-mail-cím ellenőrzéséhez : {{verificationURL}}
    Az e-mail-cím ellenőrzése után sikeresen be tud majd jelentkezni.', + newPassword: 'Új jelszó', + resetPassword: 'Jelszó visszaállítása', + resetPasswordExpiration: 'Jelszóvisszaállítás lejárata', + resetPasswordToken: 'Jelszóvisszaállító token', + resetYourPassword: 'Jelszó visszaállítása', + stayLoggedIn: 'Maradjon bejelentkezve', + successfullyUnlocked: 'Sikeresen feloldva', + unableToVerify: 'Sikertelen megerősítés', + verified: 'Megerősítve', + verifiedSuccessfully: 'Sikeresen megerősítve', + verify: 'Megerősítés', + verifyUser: 'Felhasználó megerősítése', + verifyYourEmail: 'Erősítse meg az e-mail címét', + youAreInactive: + 'Már egy ideje nem volt aktív, és hamarosan automatikusan kijelentkeztetjük saját biztonsága érdekében. Szeretne bejelentkezve maradni?', + youAreReceivingResetPassword: + 'Ezt azért kapja, mert Ön (vagy valaki más) kérte fiókja jelszavának visszaállítását. A folyamat befejezéséhez kattintson a következő linkre, vagy illessze be böngészőjébe:', + youDidNotRequestPassword: + 'Ha nem Ön kérte ezt, kérjük, hagyja figyelmen kívül ezt az e-mailt, és jelszava változatlan marad.', + }, + error: { + accountAlreadyActivated: 'Ez a fiók már aktiválva van.', + autosaving: 'Hiba történt a dokumentum automatikus mentése közben.', + correctInvalidFields: 'Kérjük, javítsa ki az érvénytelen mezőket.', + deletingFile: 'Hiba történt a fájl törlésekor.', + deletingTitle: + 'Hiba történt a {{title}} törlése közben. Kérjük, ellenőrizze a kapcsolatot, és próbálja meg újra.', + emailOrPasswordIncorrect: 'A megadott e-mail-cím vagy jelszó helytelen.', + followingFieldsInvalid_one: 'A következő mező érvénytelen:', + followingFieldsInvalid_other: 'A következő mezők érvénytelenek:', + incorrectCollection: 'Helytelen gyűjtemény', + invalidFileType: 'Érvénytelen fájltípus', + invalidFileTypeValue: 'Érvénytelen fájltípus: {{value}}', + loadingDocument: 'Hiba történt a {{id}} azonosítójú dokumentum betöltésekor.', + missingEmail: 'Hiányzó e-mail.', + missingIDOfDocument: 'Hiányzik a frissítendő dokumentum azonosítója.', + missingIDOfVersion: 'A verzió azonosítója hiányzik.', + missingRequiredData: 'Hiányoznak kötelező adatok.', + noFilesUploaded: 'Nem került fájl feltöltésre.', + noMatchedField: 'Nem található egyező mező a következőhöz: "{{label}}"', + noUser: 'Nincs felhasználó', + notAllowedToAccessPage: 'Ehhez az oldalhoz nem férhet hozzá.', + notAllowedToPerformAction: 'Ezt a műveletet nem hajthatja végre.', + notFound: 'A kért erőforrás nem található.', + previewing: 'Hiba történt a dokumentum előnézetének megtekintése közben.', + problemUploadingFile: 'Hiba történt a fájl feltöltése közben.', + tokenInvalidOrExpired: 'A token érvénytelen vagy lejárt.', + unPublishingDocument: 'Hiba történt a dokumentum közzétételének visszavonása közben.', + unableToDeleteCount: 'Nem sikerült törölni {{count}}/{{total}} {{label}}.', + unableToUpdateCount: 'Nem sikerült frissíteni {{count}}/{{total}} {{label}}.', + unauthorized: 'Jogosulatlan, a kéréshez be kell jelentkeznie.', + unknown: 'Ismeretlen hiba történt.', + unspecific: 'Hiba történt.', + userLocked: 'Ez a felhasználó túl sok sikertelen bejelentkezési kísérlet miatt zárolva van.', + valueMustBeUnique: 'Az értéknek egyedinek kell lennie', + verificationTokenInvalid: 'Az ellenőrző token érvénytelen.', + }, + fields: { + addLabel: '{{label}} hozzáadása', + addLink: 'Link hozzáadása', + addNew: 'Új hozzáadása', + addNewLabel: 'Új {{label}} hozzáadása', + addRelationship: 'Kapcsolat hozzáadása', + addUpload: 'Feltöltés hozzáadása', + block: 'blokk', + blockType: 'Blokk típusa', + blocks: 'blokkok', + chooseBetweenCustomTextOrDocument: + 'Válasszon egy egyéni szöveges URL-cím megadása vagy egy másik dokumentumra való hivatkozás között.', + chooseDocumentToLink: 'Válassza ki a dokumentumot, amelyre hivatkozni kíván', + chooseFromExisting: 'Válasszon a meglévők közül', + chooseLabel: 'Válassza ki a {{label}}', + collapseAll: 'Mindet összecsuk', + customURL: 'Egyéni URL', + editLabelData: '{{label}} adatok szerkesztése', + editLink: 'Link szerkesztése', + editRelationship: 'Kapcsolat hozzáadása', + enterURL: 'Adjon meg egy URL-t', + internalLink: 'Belső link', + itemsAndMore: '{{items}} és további {{count}}', + labelRelationship: '{{label}} Kapcsolat', + latitude: 'Szélesség', + linkType: 'Link típusa', + linkedTo: 'Kapcsolódik a <0>{{label}}', + longitude: 'Hosszúság', + newLabel: 'Új {{label}}', + openInNewTab: 'Megnyitás új lapon', + passwordsDoNotMatch: 'A jelszavak nem egyeznek.', + relatedDocument: 'Kapcsolódó dokumentum', + relationTo: 'Kapcsolat a következővel:', + removeRelationship: 'Kapcsolat eltávolítása', + removeUpload: 'Feltöltés eltávolítása', + saveChanges: 'Módosítások mentése', + searchForBlock: 'Blokk keresése', + selectExistingLabel: 'Meglévő {{label}} kiválasztása', + selectFieldsToEdit: 'Válassza ki a szerkeszteni kívánt mezőket', + showAll: 'Az összes megjelenítése', + swapRelationship: 'Kapcsolat csere', + swapUpload: 'Feltöltés csere', + textToDisplay: 'Megjelenítendő szöveg', + toggleBlock: 'Blokk kinyitása', + uploadNewLabel: 'Új {{label}} feltöltése', + }, + general: { + aboutToDelete: 'A {{label}} <1>{{title}} törlésére készül. Biztos benne?', + aboutToDeleteCount_many: 'Törölni készül {{count}} {{label}}', + aboutToDeleteCount_one: 'Törölni készül {{count}} {{label}}', + aboutToDeleteCount_other: 'Törölni készül {{count}} {{label}}', + addBelow: 'Hozzáadás lent', + addFilter: 'Szűrő hozzáadása', + adminTheme: 'Admin téma', + and: 'És', + applyChanges: 'Változtatások alkalmazása', + ascending: 'Növekvő', + automatic: 'Automatikus', + backToDashboard: 'Vissza az irányítópultra', + cancel: 'Mégsem', + changesNotSaved: + 'A módosítások nem lettek mentve. Ha most távozik, elveszíti a változtatásokat.', + close: 'Bezárás', + collapse: 'Összecsukás', + collections: 'Gyűjtemények', + columnToSort: 'Rendezendő oszlop', + columns: 'Oszlopok', + confirm: 'Megerősítés', + confirmDeletion: 'Törlés megerősítése', + confirmDuplication: 'Duplikáció megerősítése', + copied: 'Másolva', + copy: 'Másolás', + create: 'Létrehozás', + createNew: 'Új létrehozása', + createNewLabel: 'Új {{label}} létrehozása', + created: 'Létrehozva', + createdAt: 'Létrehozva:', + creating: 'Létrehozás', + creatingNewLabel: 'Új {{label}} létrehozása', + dark: 'Sötét', + dashboard: 'Irányítópult', + delete: 'Törlés', + deletedCountSuccessfully: '{{count}} {{label}} sikeresen törölve.', + deletedSuccessfully: 'Sikeresen törölve.', + deleting: 'Törlés...', + descending: 'Csökkenő', + deselectAllRows: 'Jelölje ki az összes sort', + duplicate: 'Duplikálás', + duplicateWithoutSaving: 'Duplikálás a módosítások mentése nélkül', + edit: 'Szerkesztés', + editLabel: '{{label}} szerkesztése', + editing: 'Szerkesztés', + editingLabel_many: '{{count}} {{label}} szerkesztése', + editingLabel_one: '{{count}} {{label}} szerkesztése', + editingLabel_other: '{{count}} {{label}} szerkesztése', + email: 'E-mail', + emailAddress: 'E-mail cím', + enterAValue: 'Adjon meg egy értéket', + error: 'Hiba', + errors: 'Hibák', + fallbackToDefaultLocale: 'Visszatérés az alapértelmezett nyelvhez', + filter: 'Szűrő', + filterWhere: 'Szűrő {{label}} ahol', + filters: 'Szűrők', + globals: 'Globálisok', + language: 'Nyelv', + lastModified: 'Utoljára módosítva', + leaveAnyway: 'Távozás mindenképp', + leaveWithoutSaving: 'Távozás mentés nélkül', + light: 'Világos', + livePreview: 'Előnézet', + loading: 'Betöltés', + locale: 'Nyelv', + locales: 'Nyelvek', + menu: 'Menü', + moveDown: 'Mozgatás lefelé', + moveUp: 'Mozgatás felfelé', + newPassword: 'Új jelszó', + noFiltersSet: 'Nincs beállítva szűrő', + noLabel: '', + noOptions: 'Nincs lehetőség', + noResults: + 'Nem találtunk {{label}}. Vagy még nem létezik {{label}}, vagy egyik sem felel meg a fent megadott szűrőknek.', + noValue: 'Nincs érték', + none: 'Semmi', + notFound: 'Nem található', + nothingFound: 'Nincs találat', + of: 'a', + open: 'Megnyitás', + or: 'Vagy', + order: 'Sorrend', + pageNotFound: 'Az oldal nem található', + password: 'Jelszó', + payloadSettings: 'Payload beállítások', + perPage: 'Oldalanként: {{limit}}', + remove: 'Törlés', + reset: 'Visszaállítás', + row: 'Sor', + rows: 'Sorok', + save: 'Mentés', + saving: 'Mentés...', + searchBy: 'Keresés a következő szerint: {{label}}', + selectAll: 'Az összes kijelölése: {{count}} {{label}}', + selectAllRows: 'Válassza ki az összes sort', + selectValue: 'Válasszon ki egy értéket', + selectedCount: '{{count}} {{label}} kiválasztva', + showAllLabel: 'Mutasd az összes {{címke}}', + sorryNotFound: 'Sajnáljuk – nincs semmi, ami megfelelne a kérésének.', + sort: 'Rendezés', + sortByLabelDirection: 'Rendezés {{label}} {{direction}} szerint', + stayOnThisPage: 'Maradjon ezen az oldalon', + submissionSuccessful: 'Beküldés sikeres.', + submit: 'Beküldés', + successfullyCreated: '{{label}} sikeresen létrehozva.', + successfullyDuplicated: '{{label}} sikeresen duplikálódott.', + thisLanguage: 'Magyar', + titleDeleted: '{{label}} "{{title}}" sikeresen törölve.', + unauthorized: 'Jogosulatlan', + unsavedChangesDuplicate: 'Nem mentett módosításai vannak. Szeretné folytatni a duplikációt?', + untitled: 'Névtelen', + updatedAt: 'Frissítve:', + updatedCountSuccessfully: '{{count}} {{label}} sikeresen frissítve.', + updatedSuccessfully: 'Sikeresen frissítve.', + updating: 'Frissítés', + uploading: 'Feltöltés', + user: 'Felhasználó', + users: 'Felhasználók', + value: 'Érték', + welcome: 'Üdvözöljük', + }, + operators: { + contains: 'tartalmaz', + equals: 'egyenlő', + exists: 'létezik', + isGreaterThan: 'nagyobb, mint', + isGreaterThanOrEqualTo: 'nagyobb vagy egyenlő, mint', + isIn: 'benne van', + isLessThan: 'kisebb, mint', + isLessThanOrEqualTo: 'kisebb vagy egyenlő, mint', + isLike: 'olyan, mint', + isNotEqualTo: 'nem egyenlő', + isNotIn: 'nincs benne', + near: 'közel', + }, + upload: { + crop: 'Termés', + cropToolDescription: + 'Húzza a kijelölt terület sarkait, rajzoljon új területet, vagy igazítsa a lentebb található értékeket.', + dragAndDrop: 'Húzzon ide egy fájlt', + dragAndDropHere: 'vagy húzzon ide egy fájlt', + editImage: 'Kép szerkesztése', + fileName: 'Fájlnév', + fileSize: 'Fájl mérete', + focalPoint: 'Fókuszpont', + focalPointDescription: + 'Húzza az érdekes pontot közvetlenül az előnézetre, vagy állítsa be az alábbi értékeket.', + height: 'Magasság', + lessInfo: 'Kevesebb információ', + moreInfo: 'További információ', + previewSizes: 'Előnézeti méretek', + selectCollectionToBrowse: 'Válassza ki a böngészni kívánt gyűjteményt', + selectFile: 'Válasszon ki egy fájlt', + setCropArea: 'Állítsa be a vágási területet', + setFocalPoint: 'Állítsa be a fókuszpontot', + sizes: 'Méretek', + sizesFor: 'Méretek a {{címke}} számára', + width: 'Szélesség', + }, + validation: { + emailAddress: 'Kérjük, adjon meg egy érvényes e-mail címet.', + enterNumber: 'Kérjük, adjon meg egy érvényes számot.', + fieldHasNo: 'Ennek a mezőnek nincs {{label}}', + greaterThanMax: '{{value}} nagyobb, mint a megengedett maximum {{label}} érték, ami {{max}}.', + invalidInput: 'Ez a mező érvénytelen értéket tartalmaz.', + invalidSelection: 'Ez a mező érvénytelen kijelöléssel rendelkezik.', + invalidSelections: 'Ez a mező a következő érvénytelen kijelöléseket tartalmazza:', + lessThanMin: '{{value}} kisebb, mint a megengedett minimum {{label}} érték, ami {{min}}.', + limitReached: 'Elérte a korlátot, csak {{max}} elem adható hozzá.', + longerThanMin: + 'Ennek az értéknek hosszabbnak kell lennie, mint a minimális {{minLength}} karakter hosszúság.', + notValidDate: '" {{value}} " nem érvényes dátum.', + required: 'Ez a mező kötelező.', + requiresAtLeast: 'Ehhez a mezőhöz legalább {{count}} {{label}} szükséges.', + requiresNoMoreThan: 'Ehhez a mezőhöz legfeljebb {{count}} {{label}} szükséges.', + requiresTwoNumbers: 'Ehhez a mezőhöz két szám szükséges.', + shorterThanMax: + 'Ennek az értéknek rövidebbnek kell lennie, mint a maximálisan megengedett {{maxLength}} karakter.', + trueOrFalse: 'Ez a mező csak igaz vagy hamis lehet.', + validUploadID: 'Ez a mező nem érvényes feltöltési azonosító.', + }, + version: { + type: 'Típus', + aboutToPublishSelection: + 'Arra készül, hogy az összes {{label}} elemet közzétegye a kijelölésben. biztos vagy ebben?', + aboutToRestore: + 'Arra készül, hogy visszaállítsa ezt a {{label}} dokumentumot arra az állapotra, amelyben {{versionDate}} napon volt.', + aboutToRestoreGlobal: + 'Arra készül, hogy visszaállítsa a {{label}} arra az állapotra, amelyben {{versionDate}} napon volt.', + aboutToRevertToPublished: + 'Arra készül, hogy visszaállítsa a dokumentum módosításait a közzétett állapotába. Biztos benne?', + aboutToUnpublish: 'A dokumentum közzétételének visszavonására készül. Biztos benne?', + aboutToUnpublishSelection: + 'Arra készül, hogy visszavonja a kijelölésben szereplő összes {{label}} közzétételét. biztos vagy ebben?', + autosave: 'Automatikus mentés', + autosavedSuccessfully: 'Automatikus mentés sikeres.', + autosavedVersion: 'Automatikusan mentett verzió', + changed: 'Megváltozott', + compareVersion: 'Hasonlítsa össze a verziót a következőkkel:', + confirmPublish: 'A közzététel megerősítése', + confirmRevertToSaved: 'Erősítse meg a mentett verzióra való visszatérést', + confirmUnpublish: 'A közzététel visszavonásának megerősítése', + confirmVersionRestoration: 'Verzió-visszaállítás megerősítése', + currentDocumentStatus: 'Jelenlegi {{docStatus}} dokumentum', + draft: 'Piszkozat', + draftSavedSuccessfully: 'A piszkozat sikeresen mentve.', + lastSavedAgo: 'Utoljára mentve {{distance}} órája', + noFurtherVersionsFound: 'További verziók nem találhatók', + noRowsFound: 'Nem található {{label}}', + preview: 'Előnézet', + problemRestoringVersion: 'Hiba történt a verzió visszaállításakor', + publish: 'Közzététel', + publishChanges: 'Módosítások közzététele', + published: 'Közzétett', + publishing: 'Közzététel', + restoreThisVersion: 'A verzió visszaállítása', + restoredSuccessfully: 'Sikeresen visszaállítva.', + restoring: 'Visszaállítás...', + revertToPublished: 'Visszatérés a közzétetthez', + reverting: 'Visszaállítás...', + saveDraft: 'Piszkozat mentése', + selectLocales: 'Megjelenítendő nyelvek kiválasztása', + selectVersionToCompare: 'Válassza ki az összehasonlítani kívánt verziót', + showLocales: 'Nyelvek megjelenítése:', + showingVersionsFor: 'Verziók megjelenítése a következőkhöz:', + status: 'Állapot', + unpublish: 'Közzététel visszavonása', + unpublishing: 'Közzététel visszavonása...', + version: 'Verzió', + versionCount_many: '{{count}} verzió található', + versionCount_none: 'Nem található verzió', + versionCount_one: '{{count}} verzió található', + versionCount_other: '{{count}} verzió található', + versionCreatedOn: '{{version}} létrehozva:', + versionID: 'Verzióazonosító', + versions: 'Verziók', + viewingVersion: 'A(z) {{entityLabel}} {{documentTitle}} verziójának megtekintése', + viewingVersionGlobal: 'A globális {{entityLabel}} verziójának megtekintése', + viewingVersions: 'A {{entityLabel}} {{documentTitle}} verzióinak megtekintése', + viewingVersionsGlobal: 'A globális {{entityLabel}} verzióinak megtekintése', + }, + }, +} diff --git a/packages/translations/src/languages/it.ts b/packages/translations/src/languages/it.ts new file mode 100644 index 0000000000..b45b648faa --- /dev/null +++ b/packages/translations/src/languages/it.ts @@ -0,0 +1,402 @@ +import type { Language } from '../types.js' + +export const it: Language = { + dateFNSKey: 'it', + translations: { + authentication: { + account: 'Account', + accountOfCurrentUser: "Account dell'utente corrente", + alreadyActivated: 'Già Attivato', + alreadyLoggedIn: 'Sei già loggato', + apiKey: 'Chiave API', + backToLogin: 'Torna al login', + beginCreateFirstUser: 'Per iniziare, crea il tuo primo utente.', + changePassword: 'Cambia Password', + checkYourEmailForPasswordReset: + 'Controlla la tua email e clicca sul link che ti permetterà di cambiare in sicurezza la tua password.', + confirmGeneration: 'Conferma Generazione', + confirmPassword: 'Conferma Password', + createFirstUser: 'Crea il primo utente', + emailNotValid: "L'email fornita non è valida", + emailSent: 'Email Inviata', + enableAPIKey: 'Abilita la Chiave API', + failedToUnlock: 'Lo sblocco è fallito', + forceUnlock: 'Forza Sblocco', + forgotPassword: 'Cambia Password', + forgotPasswordEmailInstructions: + 'Inserisci la tua mail qui sotto. Riceverai un messaggio email con le istruzioni su come cambiare la tua password.', + forgotPasswordQuestion: 'Password dimenticata?', + generate: 'Genera', + generateNewAPIKey: 'Genera una nuova Chiave API', + generatingNewAPIKeyWillInvalidate: + 'Generando una nuova chiave API si <1>invaliderà la chiave precedente. Sei sicuro di voler continuare?', + lockUntil: 'Sblocca Fino', + logBackIn: 'Vai al Log in', + logOut: 'Log out', + loggedIn: 'Per accedere con un altro utente, devi prima <0>uscire.', + loggedInChangePassword: + 'Per cambiare la tua password, vai al tuo <0>account e modifica la tua password lì.', + loggedOutInactivity: 'Sei stato disconnesso automaticamente per inattività.', + loggedOutSuccessfully: 'Sei stato disconnesso con successo.', + login: 'Login', + loginAttempts: 'Tentativi di Login', + loginUser: 'Utente Login', + loginWithAnotherUser: 'Per accedere con un altro utente, devi prima <0>uscire.', + logout: 'Logout', + logoutUser: 'Logout utente', + newAPIKeyGenerated: 'Nuova Chiave API Generata.', + newAccountCreated: + 'Un nuovo account è appena stato creato per te per accedere a {{serverURL}} Clicca sul seguente link o incolla l\'URL qui sotto nel browser per verificare la tua email: {{verificationURL}}
    Dopo aver verificato la tua email, sarai in grado di effettuare il log in con successo.', + newPassword: 'Nuova Password', + resetPassword: 'Modifica Password', + resetPasswordExpiration: 'Reimposta Scadenza Password', + resetPasswordToken: 'Reimposta il Password Token', + resetYourPassword: 'Modifica la tua Password', + stayLoggedIn: 'Rimani connesso', + successfullyUnlocked: 'Sbloccato con successo', + unableToVerify: 'Impossibile verificare', + verified: 'Verificato', + verifiedSuccessfully: 'Verificato con successo', + verify: 'Verifica', + verifyUser: 'Verifica Utente', + verifyYourEmail: 'Verifica la tua email', + youAreInactive: + "Non sei attivo da un po' di tempo e a breve verrai disconnesso automaticamente per la tua sicurezza. Vuoi rimanere connesso?", + youAreReceivingResetPassword: + 'Ricevi questo messaggio perché tu (o qualcun altro) hai richiesto la modifica della password per il tuo account. Clicca sul seguente link o incollalo nel browser per completare il processo:', + youDidNotRequestPassword: + "Se non l'hai richiesto, ignora questa email e la tua password rimarrà invariata.", + }, + error: { + accountAlreadyActivated: 'Questo account è già stato attivato.', + autosaving: + 'Si è verificato un problema durante il salvataggio automatico di questo documento.', + correctInvalidFields: 'Per favore correggi i campi non validi.', + deletingFile: "Si è verificato un errore durante l'eleminazione del file.", + deletingTitle: + "Si è verificato un errore durante l'eliminazione di {{title}}. Per favore controlla la tua connessione e riprova.", + emailOrPasswordIncorrect: "L'email o la password fornita non è corretta.", + followingFieldsInvalid_one: 'Il seguente campo non è valido:', + followingFieldsInvalid_other: 'I seguenti campi non sono validi:', + incorrectCollection: 'Collezione non corretta', + invalidFileType: 'Tipo di file non valido', + invalidFileTypeValue: 'Tipo di file non valido: {{value}}', + loadingDocument: + 'Si è verificato un problema durante il caricamento del documento con ID {{id}}.', + missingEmail: 'Email mancante.', + missingIDOfDocument: 'ID del documento da aggiornare mancante.', + missingIDOfVersion: 'ID della versione mancante.', + missingRequiredData: 'Data mancante.', + noFilesUploaded: 'Nessun file è stato caricato.', + noMatchedField: 'Nessun campo corrispondente trovato per "{{label}}"', + noUser: 'Nessun Utente', + notAllowedToAccessPage: 'Non sei autorizzato ad accedere a questa pagina.', + notAllowedToPerformAction: 'Non sei autorizzato a eseguire questa azione.', + notFound: 'La risorsa richiesta non è stata trovata.', + previewing: "Si è verificato un problema durante l'anteprima di questo documento.", + problemUploadingFile: 'Si è verificato un problema durante il caricamento del file.', + tokenInvalidOrExpired: 'Il token non è valido o è scaduto.', + unPublishingDocument: + "Si è verificato un problema durante l'annullamento della pubblicazione di questo documento.", + unableToDeleteCount: 'Impossibile eliminare {{count}} su {{total}} {{label}}.', + unableToUpdateCount: 'Impossibile aggiornare {{count}} su {{total}} {{label}}.', + unauthorized: 'Non autorizzato, devi essere loggato per effettuare questa richiesta.', + unknown: 'Si è verificato un errore sconosciuto.', + unspecific: 'Si è verificato un errore.', + userLocked: 'Questo utente è bloccato a causa di troppi tentativi di accesso non riusciti.', + valueMustBeUnique: 'Il valore deve essere univoco', + verificationTokenInvalid: 'Il token di verifica non è valido.', + }, + fields: { + addLabel: 'Aggiungi {{label}}', + addLink: 'Aggiungi Collegamento', + addNew: 'Aggiungi nuovo', + addNewLabel: 'Aggiungi nuovo {{label}}', + addRelationship: 'Aggiungi Relazione', + addUpload: 'aggiungi Carica', + block: 'blocco', + blockType: 'Tipo di Blocco', + blocks: 'blocchi', + chooseBetweenCustomTextOrDocument: + "Scegli tra l'inserimento di un URL di testo personalizzato o il collegamento a un altro documento.", + chooseDocumentToLink: 'Scegli un documento a cui collegarti', + chooseFromExisting: 'Scegli tra esistente', + chooseLabel: 'Scegli {{label}}', + collapseAll: 'Comprimi tutto', + customURL: 'URL personalizzato', + editLabelData: 'Modifica i dati di {{label}}', + editLink: 'Modifica Collegamento', + editRelationship: 'Modifica Relazione', + enterURL: 'Inserisci un URL', + internalLink: 'Collegamento interno', + itemsAndMore: '{{items}} e altri {{count}}', + labelRelationship: 'Relazione {{label}}', + latitude: 'Latitudine', + linkType: 'Tipo di collegamento', + linkedTo: 'Collegato a <0>{{label}}', + longitude: 'Longitudine', + newLabel: 'Nuovo {{label}}', + openInNewTab: 'Apri in una nuova scheda', + passwordsDoNotMatch: 'Le password non corrispondono.', + relatedDocument: 'Documento Correlato', + relationTo: 'Correla a', + removeRelationship: 'Rimuovi Relazione', + removeUpload: 'Rimuovi Upload', + saveChanges: 'Salva modifiche', + searchForBlock: 'Cerca un blocco', + selectExistingLabel: 'Seleziona {{label}} esistente', + selectFieldsToEdit: 'Seleziona i campi da modificare', + showAll: 'Mostra tutto', + swapRelationship: 'Cambia Relationship', + swapUpload: 'Cambia Upload', + textToDisplay: 'Testo da visualizzare', + toggleBlock: 'Apri/chiudi blocco', + uploadNewLabel: 'Carica nuovo {{label}}', + }, + general: { + aboutToDelete: 'Stai per eliminare {{label}} <1>{{title}}. Sei sicuro?', + aboutToDeleteCount_many: 'Stai per eliminare {{count}} {{label}}', + aboutToDeleteCount_one: 'Stai per eliminare {{count}} {{label}}', + aboutToDeleteCount_other: 'Stai per eliminare {{count}} {{label}}', + addBelow: 'Aggiungi sotto', + addFilter: 'Aggiungi Filtro', + adminTheme: 'Tema Admin', + and: 'E', + applyChanges: 'Applica modifiche', + ascending: 'Ascendente', + automatic: 'Automatico', + backToDashboard: 'Torna alla Dashboard', + cancel: 'Cancella', + changesNotSaved: 'Le tue modifiche non sono state salvate. Se esci ora, verranno perse.', + close: 'Chiudere', + collapse: 'Comprimi', + collections: 'Collezioni', + columnToSort: 'Colonna da Ordinare', + columns: 'Colonne', + confirm: 'Conferma', + confirmDeletion: "Conferma l'eliminazione", + confirmDuplication: 'Conferma la duplicazione', + copied: 'Copiato', + copy: 'Copia', + create: 'Crea', + createNew: 'Crea Nuovo', + createNewLabel: 'Crea nuovo {{label}}', + created: 'Data di creazione', + createdAt: 'Creato il', + creating: 'Crea nuovo', + creatingNewLabel: 'Creazione di un nuovo {{label}}', + dark: 'Scuro', + dashboard: 'Dashboard', + delete: 'Elimina', + deletedCountSuccessfully: '{{count}} {{label}} eliminato con successo.', + deletedSuccessfully: 'Eliminato con successo.', + deleting: 'Sto eliminando...', + descending: 'Decrescente', + deselectAllRows: 'Deseleziona tutte le righe', + duplicate: 'Duplica', + duplicateWithoutSaving: 'Duplica senza salvare le modifiche', + edit: 'Modificare', + editLabel: 'Modifica {{label}}', + editing: 'Modifica', + editingLabel_many: 'Modificare {{count}} {{label}}', + editingLabel_one: 'Modifica {{count}} {{label}}', + editingLabel_other: 'Modificare {{count}} {{label}}', + email: 'Email', + emailAddress: 'Indirizzo Email', + enterAValue: 'Inserisci un valore', + error: 'Errore', + errors: 'Errori', + fallbackToDefaultLocale: 'Fallback al locale predefinito', + filter: 'Filtro', + filterWhere: 'Filtra {{label}} se', + filters: 'Filtri', + globals: 'Globali', + language: 'Lingua', + lastModified: 'Ultima modifica', + leaveAnyway: 'Esci comunque', + leaveWithoutSaving: 'Esci senza salvare', + light: 'Chiaro', + livePreview: 'Anteprima dal vivo', + loading: 'Caricamento', + locale: 'Locale', + locales: 'Localizzazioni', + menu: 'Menù', + moveDown: 'Sposta sotto', + moveUp: 'Sposta sopra', + newPassword: 'Nuova Password', + noFiltersSet: 'Nessun filtro impostato', + noLabel: '', + noOptions: 'Nessuna opzione', + noResults: + 'Nessun {{label}} trovato. Non esiste ancora nessun {{label}} oppure nessuno corrisponde ai filtri che hai specificato sopra.', + noValue: 'Nessun valore', + none: 'Nessuno', + notFound: 'Non Trovato', + nothingFound: 'Non è stato trovato nulla', + of: 'di', + open: 'Apri', + or: 'Oppure', + order: 'Ordine', + pageNotFound: 'Pagina non trovata', + password: 'Password', + payloadSettings: 'Impostazioni di Payload', + perPage: 'Per Pagina: {{limit}}', + preview: 'Anteprima', + remove: 'Rimuovi', + reset: 'Ripristina', + row: 'Riga', + rows: 'Righe', + save: 'Salva', + saving: 'Salvo...', + searchBy: 'Cerca per {{label}}', + selectAll: 'Seleziona tutto {{count}} {{label}}', + selectAllRows: 'Seleziona tutte le righe', + selectValue: 'Seleziona un valore', + selectedCount: '{{count}} {{label}} selezionato', + showAllLabel: 'Mostra tutti {{label}}', + sorryNotFound: "Siamo spiacenti, non c'è nulla che corrisponda alla tua richiesta.", + sort: 'Ordina', + sortByLabelDirection: 'Ordina per {{label}} {{direction}}', + stayOnThisPage: 'Rimani su questa pagina', + submissionSuccessful: 'Invio riuscito.', + submit: 'Invia', + successfullyCreated: '{{label}} creato con successo.', + successfullyDuplicated: '{{label}} duplicato con successo.', + thisLanguage: 'Italiano', + titleDeleted: '{{label}} {{title}} eliminato con successo.', + unauthorized: 'Non autorizzato', + unsavedChangesDuplicate: 'Sono presenti modifiche non salvate. Vuoi continuare a duplicare?', + untitled: 'Senza titolo', + updatedAt: 'Aggiornato il', + updatedCountSuccessfully: '{{count}} {{label}} aggiornato con successo.', + updatedSuccessfully: 'Aggiornato con successo.', + updating: 'Aggiornamento', + uploading: 'Caricamento', + user: 'Utente', + users: 'Utenti', + value: 'Valore', + welcome: 'Benvenuto', + }, + operators: { + contains: 'contiene', + equals: 'uguale', + exists: 'esiste', + isGreaterThan: 'è maggiore di', + isGreaterThanOrEqualTo: 'è maggiore o uguale a', + isIn: 'è in', + isLessThan: 'è minore di', + isLessThanOrEqualTo: 'è minore o uguale a', + isLike: 'è come', + isNotEqualTo: 'non è uguale a', + isNotIn: 'non è in', + near: 'vicino', + }, + upload: { + crop: 'Raccolto', + cropToolDescription: + "Trascina gli angoli dell'area selezionata, disegna una nuova area o regola i valori qui sotto.", + dragAndDrop: 'Trascina e rilascia un file', + dragAndDropHere: 'oppure trascina e rilascia un file qui', + editImage: 'Modifica immagine', + fileName: 'Nome File', + fileSize: 'Dimensione File', + focalPoint: 'Punto Focale', + focalPointDescription: + "Trascina il punto focale direttamente sull'anteprima o regola i valori sottostanti.", + height: 'Altezza', + lessInfo: 'Meno info', + moreInfo: 'Più info', + previewSizes: 'Anteprime Dimensioni', + selectCollectionToBrowse: 'Seleziona una Collezione da Sfogliare', + selectFile: 'Seleziona un file', + setCropArea: 'Imposta area di ritaglio', + setFocalPoint: 'Imposta punto focale', + sizes: 'Formati', + sizesFor: 'Dimensioni per {{label}}', + width: 'Larghezza', + }, + validation: { + emailAddress: 'Si prega di inserire un indirizzo email valido.', + enterNumber: 'Si prega di inserire un numero valido.', + fieldHasNo: 'Questo campo non ha {{label}}', + greaterThanMax: '{{value}} è superiore al massimo consentito {{label}} di {{max}}.', + invalidInput: 'Questo campo ha un input non valido.', + invalidSelection: 'Questo campo ha una selezione non valida.', + invalidSelections: "'In questo campo sono presenti le seguenti selezioni non valide:'", + lessThanMin: '{{value}} è inferiore al minimo consentito {{label}} di {{min}}.', + limitReached: 'Raggiunto il limite, possono essere aggiunti solo {{max}} elementi.', + longerThanMin: + 'Questo valore deve essere più lungo della lunghezza minima di {{minLength}} caratteri.', + notValidDate: '"{{value}}" non è una data valida.', + required: 'Questo campo è obbligatorio.', + requiresAtLeast: 'Questo campo richiede almeno {{count}} {{label}}.', + requiresNoMoreThan: 'Questo campo richiede non più di {{count}} {{label}}.', + requiresTwoNumbers: 'Questo campo richiede due numeri.', + shorterThanMax: + 'Questo valore deve essere inferiore alla lunghezza massima di {{maxLength}} caratteri.', + trueOrFalse: "Questo campo può essere solo uguale a 'true' o 'false'.", + validUploadID: "'Questo campo non è un ID di Upload valido.'", + }, + version: { + type: 'Tipo', + aboutToPublishSelection: + 'Stai per pubblicare tutte le {{label}} nella selezione. Sei sicuro?', + aboutToRestore: + 'Stai per ripristinare questo documento {{label}} allo stato in cui si trovava il {{versionDate}}.', + aboutToRestoreGlobal: + 'Stai per ripristinare {{label}} allo stato in cui si trovava il {{versionDate}}.', + aboutToRevertToPublished: + 'Stai per ripristinare le modifiche di questo documento al suo stato pubblicato. Sei sicuro?', + aboutToUnpublish: 'Stai per annullare la pubblicazione di questo documento. Sei sicuro?', + aboutToUnpublishSelection: + 'Stai per annullare la pubblicazione di tutte le {{label}} nella selezione. Sei sicuro?', + autosave: 'Salvataggio automatico', + autosavedSuccessfully: 'Salvataggio automatico riuscito.', + autosavedVersion: 'Versione salvata automaticamente', + changed: 'Modificato', + compareVersion: 'Confronta versione con:', + confirmPublish: 'Conferma la pubblicazione', + confirmRevertToSaved: 'Conferma il ripristino dei salvataggi', + confirmUnpublish: 'Conferma annullamento della pubblicazione', + confirmVersionRestoration: 'Conferma il ripristino della versione', + currentDocumentStatus: 'Documento {{docStatus}} corrente', + draft: 'Bozza', + draftSavedSuccessfully: 'Bozza salvata con successo.', + lastSavedAgo: 'Ultimo salvataggio {{distance}} fa', + noFurtherVersionsFound: 'Non sono state trovate ulteriori versioni', + noRowsFound: 'Nessun {{label}} trovato', + preview: 'Anteprima', + problemRestoringVersion: + 'Si è verificato un problema durante il ripristino di questa versione', + publish: 'Pubblicare', + publishChanges: 'Pubblica modifiche', + published: 'Pubblicato', + publishing: 'Pubblicazione', + restoreThisVersion: 'Ripristina questa versione', + restoredSuccessfully: 'Ripristinato con successo.', + restoring: 'Ripristino...', + revertToPublished: 'Ritorna alla versione pubblicata', + reverting: 'Ritorno...', + saveDraft: 'Salva Bozza', + selectLocales: 'Seleziona le lingue da visualizzare', + selectVersionToCompare: 'Seleziona una versione da confrontare', + showLocales: 'Mostra localizzazioni:', + showingVersionsFor: 'Mostra le versioni per:', + status: 'Stato', + unpublish: 'Annulla pubblicazione', + unpublishing: 'Annullamento pubblicazione...', + version: 'Versione', + versionCount_many: '{{count}} versioni trovate', + versionCount_none: 'Nessuna versione trovata', + versionCount_one: '{{count}} versione trovata', + versionCount_other: '{{count}} versioni trovate', + versionCreatedOn: '{{version}} creata il:', + versionID: 'ID Versione', + versions: 'Versioni', + viewingVersion: 'Visualizzazione della versione per {{entityLabel}} {{documentTitle}}', + viewingVersionGlobal: '`Visualizzazione della versione per {{entityLabel}}', + viewingVersions: 'Visualizzazione delle versioni per {{entityLabel}} {{documentTitle}}', + viewingVersionsGlobal: '`Visualizzazione delle versioni per {{entityLabel}}', + }, + }, +} diff --git a/packages/translations/src/languages/ja.ts b/packages/translations/src/languages/ja.ts new file mode 100644 index 0000000000..c3738a2fd1 --- /dev/null +++ b/packages/translations/src/languages/ja.ts @@ -0,0 +1,395 @@ +import type { Language } from '../types.js' + +export const ja: Language = { + dateFNSKey: 'ja', + translations: { + authentication: { + account: 'アカウント', + accountOfCurrentUser: '現在のユーザーアカウント', + alreadyActivated: 'すでに有効です', + alreadyLoggedIn: 'すでにログインしています', + apiKey: 'API Key', + backToLogin: 'ログイン画面へ戻る', + beginCreateFirstUser: 'まずは、最初のユーザーを作成します。', + changePassword: 'パスワードを変更', + checkYourEmailForPasswordReset: + 'パスワードを安全に再設定するためのリンクがメールで送られてくるので、確認してください。', + confirmGeneration: '生成の確認', + confirmPassword: 'パスワードの確認', + createFirstUser: '最初のユーザーを作成', + emailNotValid: '入力されたメールアドレスは無効です。', + emailSent: 'Emailが送信されました。', + enableAPIKey: 'API Keyを許可', + failedToUnlock: 'ロックの解除に失敗しました。', + forceUnlock: '強制的にロックを解除', + forgotPassword: 'パスワード再設定', + forgotPasswordEmailInstructions: + 'アカウントのメールアドレスを以下に入力してください。パスワードの再設定方法が記載されたメールが届きます。', + forgotPasswordQuestion: 'パスワードをお忘れですか?', + generate: '生成', + generateNewAPIKey: '新しいAPI Keyを生成', + generatingNewAPIKeyWillInvalidate: + '新しいAPI Keyを生成すると、以前のAPI Keyは<1>無効になります。よろしいですか?', + lockUntil: 'ロック期限', + logBackIn: '改めてログイン', + logOut: 'ログアウト', + loggedIn: '他のユーザーでログインするには、まず<0>ログアウトする必要があります。', + loggedInChangePassword: + 'パスワードを変更するには、<0>アカウントにアクセスしてパスワードを編集してください。', + loggedOutInactivity: 'しばらく操作を行わなかったため、管理画面からログアウトしました。', + loggedOutSuccessfully: '管理画面からログアウトしました。', + login: 'ログイン', + loginAttempts: 'ログイン試行回数', + loginUser: 'ログインユーザー', + loginWithAnotherUser: + '他のユーザーでログインするには、まず<0>ログアウトする必要があります。', + logout: 'ログアウト', + logoutUser: 'ログアウトユーザー', + newAPIKeyGenerated: '新しいAPI Keyを生成しました。', + newAccountCreated: + '{{serverURL}}にアクセスするための新しいアカウントが作成されました。以下のリンクをクリックするか、ブラウザに以下のURLを貼り付けて、メールアドレスの確認を行ってください。{{verificationURL}}
    メールアドレスの確認後に、正常にログインできるようになります。', + newPassword: '新しいパスワード', + resetPassword: 'パスワード再発行', + resetPasswordExpiration: 'パスワードの有効期限をリセット', + resetPasswordToken: 'パスワードのトークンをリセット', + resetYourPassword: 'パスワードの再設定', + stayLoggedIn: 'ログイン状態を維持', + successfullyUnlocked: 'ロックの解除に成功しました。', + unableToVerify: '検証ができません', + verified: '検証済み', + verifiedSuccessfully: '検証が成功しました', + verify: '検証', + verifyUser: 'ユーザーの確認', + verifyYourEmail: 'メールアドレスの確認', + youAreInactive: + 'しばらく操作を行わなかったため、セキュリティのために自動的にログアウトします。ログイン状態を維持しますか?', + youAreReceivingResetPassword: + 'アカウントのパスワードリセットがリクエストされました。次のリンクをクリックする、または、ブラウザにリンクを貼り付けて、手続きを行ってください:', + youDidNotRequestPassword: + 'もし望まない場合は、このメールを無視してください。パスワードは変更されません。', + }, + error: { + accountAlreadyActivated: 'このアカウントはすでに有効です。', + autosaving: 'このデータを自動保存する際に問題が発生しました。', + correctInvalidFields: '無効なフィールドを修正してください。', + deletingFile: 'ファイルの削除中にエラーが発生しました。', + deletingTitle: + '{{title}} を削除する際にエラーが発生しました。接続を確認してからもう一度お試しください。', + emailOrPasswordIncorrect: 'メールアドレス、または、パスワードが正しくありません。', + followingFieldsInvalid_one: '次のフィールドは無効です:', + followingFieldsInvalid_other: '次のフィールドは無効です:', + incorrectCollection: '不正なコレクション', + invalidFileType: '無効なファイル形式', + invalidFileTypeValue: '無効なファイル形式: {{value}}', + loadingDocument: 'IDが {{id}} のデータを読み込む際に問題が発生しました。', + missingEmail: 'メールアドレスが不足しています。', + missingIDOfDocument: '更新するデータのIDが不足しています。', + missingIDOfVersion: 'バージョンIDが不足しています。', + missingRequiredData: '必須データが不足しています。', + noFilesUploaded: 'ファイルがアップロードされていません。', + noMatchedField: '"{{label}}" に該当するフィールドがありません。', + noUser: 'ユーザーなし', + notAllowedToAccessPage: 'この画面へのアクセスは許可されていません。', + notAllowedToPerformAction: 'このアクションは許可されていません。', + notFound: 'リクエストされたリソースは見つかりませんでした。', + previewing: 'このデータをプレビューする際に問題が発生しました。', + problemUploadingFile: 'ファイルのアップロード中に問題が発生しました。', + tokenInvalidOrExpired: 'トークンが無効、または、有効期限が切れています。', + unPublishingDocument: 'このデータを非公開する際に問題が発生しました。', + unableToDeleteCount: '{{total}} {{label}} から {{count}} を削除できません。', + unableToUpdateCount: '{{total}} {{label}} のうち {{count}} 個を更新できません。', + unauthorized: '認証されていません。このリクエストを行うにはログインが必要です。', + unknown: '不明なエラーが発生しました。', + unspecific: 'エラーが発生しました。', + userLocked: 'このユーザーは、ログイン試行回数が多すぎるため、ロックされています。', + valueMustBeUnique: 'ユニークな値である必要があります。', + verificationTokenInvalid: '認証トークンが無効です。', + }, + fields: { + addLabel: '{{label}} を追加', + addLink: 'リンクを追加', + addNew: '新規追加', + addNewLabel: '{{label}} を新規追加', + addRelationship: 'リレーションシップを追加', + addUpload: 'アップロードを追加', + block: 'ブロック', + blockType: 'ブロックタイプ', + blocks: 'ブロック', + chooseBetweenCustomTextOrDocument: + 'カスタムテキストのURLを入力するか、他のドキュメントにリンクするかを選択してください。', + chooseDocumentToLink: 'リンクするドキュメントを選択してください。', + chooseFromExisting: '既存から選択', + chooseLabel: '{{label}} を選択', + collapseAll: 'すべて閉じる', + customURL: 'カスタムURL', + editLabelData: '{{label}} データを編集', + editLink: 'リンクを編集', + editRelationship: 'リレーションシップを編集', + enterURL: 'URL を入力してください', + internalLink: '内部リンク', + itemsAndMore: '{{items}} 他{{count}}件', + labelRelationship: '{{label}} リレーションシップ', + latitude: '緯度', + linkType: 'リンクタイプ', + linkedTo: '<0>{{label}} にリンク', + longitude: '経度', + newLabel: '新規 {{label}}', + openInNewTab: '新しいタブで開く', + passwordsDoNotMatch: 'パスワードが一致しません', + relatedDocument: 'リレーションデータ', + relationTo: 'リレーション', + removeRelationship: '関係を削除', + removeUpload: '削除', + saveChanges: '変更を保存', + searchForBlock: 'ブロックを検索', + selectExistingLabel: '既存 {{label}} を選択', + selectFieldsToEdit: '編集するフィールドを選択', + showAll: 'すべて開く', + swapRelationship: 'スワップ関係', + swapUpload: '差し替え', + textToDisplay: '表示するテキスト', + toggleBlock: 'ブロックを切り替え', + uploadNewLabel: '新規 {{label}} アップロード', + }, + general: { + aboutToDelete: '{{label}} <1>{{title}} を削除します。よろしいですか?', + aboutToDeleteCount_many: '{{label}}を{{count}}つ削除しようとしています', + aboutToDeleteCount_one: '{{label}}を{{count}}つ削除しようとしています', + aboutToDeleteCount_other: '{{label}}を{{count}}つ削除しようとしています', + addBelow: '下に追加', + addFilter: '絞り込みを追加', + adminTheme: '管理画面のテーマ', + and: 'かつ', + applyChanges: '変更を適用する', + ascending: '昇順', + automatic: '自動設定', + backToDashboard: 'ダッシュボードに戻る', + cancel: 'キャンセル', + changesNotSaved: '未保存の変更があります。このまま画面を離れると内容が失われます。', + close: '閉じる', + collapse: '閉じる', + collections: 'コレクション', + columnToSort: '並び替え対象の行', + columns: '行の表示', + confirm: '実行', + confirmDeletion: '削除の確認', + confirmDuplication: '複製の確認', + copied: 'コピーしました', + copy: 'コピー', + create: '作成', + createNew: '新規作成', + createNewLabel: '{{label}} を新規作成', + created: '作成', + createdAt: '作成日', + creating: '作成中', + creatingNewLabel: '{{label}} を新規作成しています', + dark: 'ダークモード', + dashboard: 'ダッシュボード', + delete: '削除', + deletedCountSuccessfully: '{{count}}つの{{label}}を正常に削除しました。', + deletedSuccessfully: '正常に削除されました。', + deleting: '削除しています...', + descending: '降順', + deselectAllRows: 'すべての行の選択を解除します', + duplicate: '複製', + duplicateWithoutSaving: '変更を保存せずに複製', + edit: '編集', + editLabel: '{{label}} を編集', + editing: '編集', + editingLabel_many: '{{count}}つの{{label}}を編集しています', + editingLabel_one: '{{count}}つの{{label}}を編集しています', + editingLabel_other: '{{count}}つの{{label}}を編集しています', + email: 'メールアドレス', + emailAddress: 'メールアドレス', + enterAValue: '値を入力', + error: 'エラー', + errors: 'エラー', + fallbackToDefaultLocale: 'デフォルトロケールへのフォールバック', + filter: '絞り込み', + filterWhere: '{{label}} の絞り込み', + filters: '絞り込み', + globals: 'グローバル', + language: '言語', + lastModified: '最終更新', + leaveAnyway: 'すぐに画面を離れる', + leaveWithoutSaving: '内容が保存されていません', + light: 'ライトモード', + livePreview: 'プレビュー', + loading: 'ローディング中', + locale: 'ロケール', + locales: 'ロケール', + menu: 'メニュー', + moveDown: '下へ移動', + moveUp: '上へ移動', + newPassword: '新しいパスワード', + noFiltersSet: '絞り込みが未設定です。', + noLabel: '', + noOptions: '選択肢なし', + noResults: + '{{label}} データが見つかりませんでした。データが存在しない、または、絞り込みに一致するものがありません。', + noValue: '未設定', + none: 'なし', + notFound: 'Not Found', + nothingFound: 'Nothing found', + of: '/', + open: '開く', + or: 'または', + order: '表示順', + pageNotFound: 'ページが見つかりません', + password: 'パスワード', + payloadSettings: 'Payload 設定', + perPage: '表示件数: {{limit}}', + remove: '削除', + reset: 'リセット', + row: '列', + rows: '列', + save: '保存', + saving: '保存しています...', + searchBy: '{{label}} で検索', + selectAll: 'すべての{{count}}つの{{label}}を選択', + selectAllRows: 'すべての行を選択します', + selectValue: '値を選択', + selectedCount: '{{count}}つの{{label}}を選択中', + showAllLabel: 'すべての{{label}}を表示する', + sorryNotFound: '申し訳ありません。リクエストに対応する内容が見つかりませんでした。', + sort: '並び替え', + sortByLabelDirection: '{{label}}により並べ替え {{direction}}', + stayOnThisPage: 'この画面にとどまる', + submissionSuccessful: '送信が成功しました。', + submit: '送信', + successfullyCreated: '{{label}} が作成されました。', + successfullyDuplicated: '{{label}} が複製されました。', + thisLanguage: 'Japanese', + titleDeleted: '{{label}} "{{title}}" が削除されました。', + unauthorized: '未認証', + unsavedChangesDuplicate: '未保存の変更があります。複製を続けますか?', + untitled: 'Untitled', + updatedAt: '更新日', + updatedCountSuccessfully: '{{count}}つの{{label}}を正常に更新しました。', + updatedSuccessfully: '更新成功。', + updating: '更新中', + uploading: 'アップロード中', + user: 'ユーザー', + users: 'ユーザー', + value: '値', + welcome: 'ようこそ', + }, + operators: { + contains: '含む', + equals: '等しい', + exists: '存在す', + isGreaterThan: 'より大きい', + isGreaterThanOrEqualTo: '以上', + isIn: 'あります', + isLessThan: 'より小さい', + isLessThanOrEqualTo: '以下', + isLike: 'のような', + isNotEqualTo: '等しくない', + isNotIn: '入っていません', + near: '近く', + }, + upload: { + crop: 'クロップ', + cropToolDescription: + '選択したエリアのコーナーをドラッグしたり、新たなエリアを描画したり、下記の値を調整してください。', + dragAndDrop: 'ファイルをドラッグ アンド ドロップする', + dragAndDropHere: 'または、このエリアにファイルをドラッグ & ドロップ', + editImage: '画像を編集する', + fileName: 'ファイル名', + fileSize: 'ファイル容量', + focalPoint: '焦点', + focalPointDescription: 'プレビュー上で焦点を直接ドラッグするか、下の値を調整してください。', + height: '高さ', + lessInfo: '詳細を隠す', + moreInfo: '詳細を表示', + previewSizes: 'プレビューサイズ', + selectCollectionToBrowse: '閲覧するコレクションを選択', + selectFile: 'ファイルを選択', + setCropArea: 'クロップエリアを設定する', + setFocalPoint: '焦点を設定する', + sizes: '容量', + sizesFor: '{{label}}のサイズ', + width: '横幅', + }, + validation: { + emailAddress: '有効なメールアドレスを入力してください。', + enterNumber: '有効な数値を入力してください。', + fieldHasNo: '{{label}} が必要です。', + greaterThanMax: '{{value}}は許容最大{{label}}の{{max}}を超えています。', + invalidInput: '無効な入力値です。', + invalidSelection: '無効な選択です。', + invalidSelections: '次の無効な選択があります: ', + lessThanMin: '{{value}}は許容最小{{label}}の{{min}}未満です。', + limitReached: '制限に達しました、{{max}}個以上のアイテムを追加することはできません。', + longerThanMin: '{{minLength}} 文字以上にする必要があります。', + notValidDate: '"{{value}}" は有効な日付ではありません。', + required: '必須フィールドです。', + requiresAtLeast: '少なくとも {{count}} {{label}} 以上が必要です。', + requiresNoMoreThan: '最大で {{count}} {{label}} 以下にする必要があります。', + requiresTwoNumbers: '2つの数値が必要です。', + shorterThanMax: '{{maxLength}} 文字以下にする必要があります。', + trueOrFalse: '"true" または "false" の値にする必要があります。', + validUploadID: '有効なアップロードIDではありません。', + }, + version: { + type: 'タイプ', + aboutToPublishSelection: + '選択中のすべての{{label}}を公開しようとしています。よろしいですか?', + aboutToRestore: + 'この {{label}} データを {{versionDate}} 時点のバージョンに復元しようとしています。', + aboutToRestoreGlobal: + 'グローバルな {{label}} データを {{versionDate}} 時点のバージョンに復元しようとしています。', + aboutToRevertToPublished: + 'このデータの変更を公開時の状態に戻そうとしています。よろしいですか?', + aboutToUnpublish: 'このデータを非公開にしようとしています。よろしいですか?', + aboutToUnpublishSelection: + '選択したすべての{{label}}の公開を取り消そうとしています。よろしいですか?', + autosave: '自動保存', + autosavedSuccessfully: '自動保存に成功しました。', + autosavedVersion: '自動保存されたバージョン', + changed: '変更済み', + compareVersion: 'バージョンを比較:', + confirmPublish: '公開を確認する', + confirmRevertToSaved: '保存された状態に戻す確認', + confirmUnpublish: '非公開の確認', + confirmVersionRestoration: 'バージョン復元の確認', + currentDocumentStatus: '現在の {{docStatus}} データ', + draft: 'ドラフト', + draftSavedSuccessfully: '下書きは正常に保存されました。', + lastSavedAgo: '{{distance}}前に最後に保存されました', + noFurtherVersionsFound: 'その他のバージョンは見つかりませんでした。', + noRowsFound: '{{label}} は未設定です', + preview: 'プレビュー', + problemRestoringVersion: 'このバージョンの復元に問題がありました。', + publish: '公開する', + publishChanges: '変更内容を公開', + published: '公開済み', + publishing: '公開', + restoreThisVersion: 'このバージョンを復元', + restoredSuccessfully: '正常に復元されました。', + restoring: '復元しています...', + revertToPublished: '公開時の内容に戻す', + reverting: '内容を戻しています...', + saveDraft: 'ドラフトを保存', + selectLocales: '表示するロケールを選択', + selectVersionToCompare: '比較するバージョンを選択', + showLocales: 'ロケールを表示:', + showingVersionsFor: '次のバージョンを表示します:', + status: 'ステータス', + unpublish: '非公開', + unpublishing: '非公開中...', + version: 'バージョン', + versionCount_many: '{{count}} バージョンがあります', + versionCount_none: 'バージョンがありません', + versionCount_one: '{{count}} バージョンがあります', + versionCount_other: '{{count}}バージョンが見つかりました', + versionCreatedOn: '{{version}} 作成日時:', + versionID: 'バージョンID', + versions: 'バージョン', + viewingVersion: '表示バージョン: {{entityLabel}} {{documentTitle}}', + viewingVersionGlobal: '表示バージョン: グローバルな {{entityLabel}}', + viewingVersions: '表示バージョン: {{entityLabel}} {{documentTitle}}', + viewingVersionsGlobal: '表示バージョン: グローバルな {{entityLabel}}', + }, + }, +} diff --git a/packages/translations/src/languages/ko.ts b/packages/translations/src/languages/ko.ts new file mode 100644 index 0000000000..6076f7f57e --- /dev/null +++ b/packages/translations/src/languages/ko.ts @@ -0,0 +1,392 @@ +import type { Language } from '../types.js' + +export const ko: Language = { + dateFNSKey: 'ko', + translations: { + authentication: { + account: '계정', + accountOfCurrentUser: '현재 사용자의 계정', + alreadyActivated: '이미 활성화됨', + alreadyLoggedIn: '이미 로그인됨', + apiKey: 'API 키', + backToLogin: '로그인 화면으로 돌아가기', + beginCreateFirstUser: '시작하려면 첫 번째 사용자를 생성하세요.', + changePassword: '비밀번호 변경', + checkYourEmailForPasswordReset: + '비밀번호 재설정을 안전하게 수행할 수 있는 링크가 포함된 이메일을 확인하세요.', + confirmGeneration: '생성 확인', + confirmPassword: '비밀번호 확인', + createFirstUser: '첫 번째 사용자 생성', + emailNotValid: '입력한 이메일은 유효하지 않습니다.', + emailSent: '이메일 전송됨', + enableAPIKey: 'API 키 활성화', + failedToUnlock: '잠금 해제 실패', + forceUnlock: '강제 잠금 해제', + forgotPassword: '비밀번호를 잊으셨나요?', + forgotPasswordEmailInstructions: + '아래에 이메일을 입력하세요. 비밀번호를 재설정하는 방법에 대한 안내가 포함된 이메일 메시지를 받게 될 것입니다.', + forgotPasswordQuestion: '비밀번호를 잊으셨나요?', + generate: '생성', + generateNewAPIKey: '새로운 API 키 생성', + generatingNewAPIKeyWillInvalidate: + '새로운 API 키를 생성하면 이전 키가 무효화됩니다. 계속하시겠습니까?', + lockUntil: '잠금 시간', + logBackIn: '다시 로그인', + logOut: '로그아웃', + loggedIn: '다른 사용자로 로그인하려면 먼저 <0>로그아웃해야 합니다.', + loggedInChangePassword: + '비밀번호를 변경하려면 <0>계정 화면으로 이동하여 비밀번호를 편집하세요.', + loggedOutInactivity: '보안을 위해 일정 시간 동안 활동하지 않아 로그아웃되었습니다.', + loggedOutSuccessfully: '로그아웃되었습니다.', + login: '로그인', + loginAttempts: '로그인 시도', + loginUser: '현재 사용자 로그인', + loginWithAnotherUser: '다른 사용자로 로그인하려면 먼저 <0>로그아웃해야 합니다.', + logout: '로그아웃', + logoutUser: '현재 사용자 로그아웃', + newAPIKeyGenerated: '새로운 API 키가 생성되었습니다.', + newAccountCreated: + '{{serverURL}}에 접근할 수 있는 새로운 계정이 생성되었습니다. 다음 링크를 클릭하거나 브라우저에 URL을 붙여넣으세요: {{verificationURL}}
    이메일을 확인한 후에 로그인할 수 있습니다.', + newPassword: '새로운 비밀번호', + resetPassword: '비밀번호 재설정', + resetPasswordExpiration: '비밀번호 재설정 만료', + resetPasswordToken: '비밀번호 재설정 토큰', + resetYourPassword: '비밀번호 재설정', + stayLoggedIn: '로그인 상태 유지', + successfullyUnlocked: '잠금 해제 성공', + unableToVerify: '확인할 수 없음', + verified: '확인됨', + verifiedSuccessfully: '성공적으로 확인됨', + verify: '확인', + verifyUser: '현재 사용자 확인', + verifyYourEmail: '이메일을 확인해주세요', + youAreInactive: + '잠시 활동하지 않았으며 보안을 위해 곧 자동 로그아웃됩니다. 로그인 상태를 유지하시겠습니까?', + youAreReceivingResetPassword: + '당신(혹은 다른 사람)이 계정의 비밀번호 초기화를 요청했기 때문에 이 이메일을 받았습니다. 다음 링크를 클릭하거나 브라우저에 붙여넣어 비밀번호를 초기화하세요:', + youDidNotRequestPassword: + '비밀번호 초기화를 요청하지 않았다면 이 이메일을 무시하시고 비밀번호를 변경하지 마세요.', + }, + error: { + accountAlreadyActivated: '이 계정은 이미 활성화되었습니다.', + autosaving: '이 문서를 자동 저장하는 중에 문제가 발생했습니다.', + correctInvalidFields: '입력하신 내용을 확인해주세요.', + deletingFile: '파일을 삭제하는 중에 오류가 발생했습니다.', + deletingTitle: + '{{title}} 삭제하는 중에 오류가 발생했습니다. 인터넷 연결을 확인하고 다시 시도하세요.', + emailOrPasswordIncorrect: '입력한 이메일 또는 비밀번호가 올바르지 않습니다.', + followingFieldsInvalid_one: '다음 입력란이 유효하지 않습니다:', + followingFieldsInvalid_other: '다음 입력란이 유효하지 않습니다:', + incorrectCollection: '잘못된 컬렉션', + invalidFileType: '잘못된 파일 형식', + invalidFileTypeValue: '잘못된 파일 형식: {{value}}', + loadingDocument: 'ID가 {{id}}인 문서를 불러오는 중에 문제가 발생했습니다.', + missingEmail: '이메일이 누락되었습니다.', + missingIDOfDocument: '업데이트할 문서의 ID가 누락되었습니다.', + missingIDOfVersion: '버전의 ID가 누락되었습니다.', + missingRequiredData: '필수 데이터가 누락되었습니다.', + noFilesUploaded: '파일이 업로드되지 않았습니다.', + noMatchedField: '"{{label}}"에 대한 일치하는 입력란이 없습니다.', + noUser: '사용자가 없습니다.', + notAllowedToAccessPage: '이 페이지에 접근할 권한이 없습니다.', + notAllowedToPerformAction: '이 작업을 수행할 권한이 없습니다.', + notFound: '요청한 리소스를 찾을 수 없습니다.', + previewing: '이 문서를 미리보는 중에 문제가 발생했습니다.', + problemUploadingFile: '파일 업로드 중에 문제가 발생했습니다.', + tokenInvalidOrExpired: '토큰이 유효하지 않거나 만료되었습니다.', + unPublishingDocument: '이 문서의 게시 취소 중에 문제가 발생했습니다.', + unableToDeleteCount: '총 {{total}}개 중 {{count}}개의 {{label}}을(를) 삭제할 수 없습니다.', + unableToUpdateCount: + '총 {{total}}개 중 {{count}}개의 {{label}}을(를) 업데이트할 수 없습니다.', + unauthorized: '권한 없음, 이 요청을 수행하려면 로그인해야 합니다.', + unknown: '알 수 없는 오류가 발생했습니다.', + unspecific: '오류가 발생했습니다.', + userLocked: '이 사용자는 로그인 실패 횟수가 너무 많아 잠겼습니다.', + valueMustBeUnique: '값은 고유해야 합니다.', + verificationTokenInvalid: '확인 토큰이 유효하지 않습니다.', + }, + fields: { + addLabel: '{{label}} 추가', + addLink: '링크 추가', + addNew: '새로 추가', + addNewLabel: '새로운 {{label}} 추가', + addRelationship: '관계 추가', + addUpload: '업로드 추가', + block: '블록', + blockType: '블록 유형', + blocks: '블록', + chooseBetweenCustomTextOrDocument: + '사용자 지정 텍스트 URL 또는 다른 문서에 링크 중 선택하세요.', + chooseDocumentToLink: '연결할 문서 선택', + chooseFromExisting: '기존 항목 중 선택', + chooseLabel: '{{label}} 선택', + collapseAll: '모두 접기', + customURL: '사용자 지정 URL', + editLabelData: '{{label}} 데이터 수정', + editLink: '링크 수정', + editRelationship: '관계 수정', + enterURL: 'URL 입력', + internalLink: '내부 링크', + itemsAndMore: '{{items}} 및 {{count}}개 더', + labelRelationship: '{{label}} 관계', + latitude: '위도', + linkType: '링크 유형', + linkedTo: '<0>{{label}}에 연결됨', + longitude: '경도', + newLabel: '새로운 {{label}}', + openInNewTab: '새 탭에서 열기', + passwordsDoNotMatch: '비밀번호가 일치하지 않습니다.', + relatedDocument: '관련 문서', + relationTo: '관계', + removeRelationship: '관계 제거', + removeUpload: '제거', + saveChanges: '변경 사항 저장', + searchForBlock: '블록 검색', + selectExistingLabel: '기존 {{label}} 선택', + selectFieldsToEdit: '수정할 입력란 선택', + showAll: '모두 표시', + swapRelationship: '관계 교체', + swapUpload: '업로드 교체', + textToDisplay: '표시할 텍스트', + toggleBlock: '블록 토글', + uploadNewLabel: '새로운 {{label}} 업로드', + }, + general: { + aboutToDelete: '{{label}} <1>{{title}}를 삭제하려고 합니다. 계속하시겠습니까?', + aboutToDeleteCount_many: '{{label}}를 {{count}}개 삭제하려고 합니다.', + aboutToDeleteCount_one: '{{label}}를 {{count}}개 삭제하려고 합니다.', + aboutToDeleteCount_other: '{{label}}를 {{count}}개 삭제하려고 합니다.', + addBelow: '아래에 추가', + addFilter: '필터 추가', + adminTheme: '관리자 테마', + and: '및', + applyChanges: '변경 사항 적용', + ascending: '오름차순', + automatic: '자동 설정', + backToDashboard: '대시보드로 돌아가기', + cancel: '취소', + changesNotSaved: '변경 사항이 저장되지 않았습니다. 지금 떠나면 변경 사항을 잃게 됩니다.', + close: '닫기', + collapse: '접기', + collections: '컬렉션', + columnToSort: '정렬할 열', + columns: '열', + confirm: '확인', + confirmDeletion: '삭제하시겠습니까?', + confirmDuplication: '복제하시겠습니까?', + copied: '복사됨', + copy: '복사', + create: '생성', + createNew: '새로 생성', + createNewLabel: '새로운 {{label}} 생성', + created: '생성됨', + createdAt: '생성 일시', + creating: '생성 중', + creatingNewLabel: '{{label}} 생성 중', + dark: '다크', + dashboard: '대시보드', + delete: '삭제', + deletedCountSuccessfully: '{{count}}개의 {{label}}를 삭제했습니다.', + deletedSuccessfully: '삭제되었습니다.', + deleting: '삭제 중...', + descending: '내림차순', + deselectAllRows: '모든 행 선택 해제', + duplicate: '복제', + duplicateWithoutSaving: '변경 사항 저장 없이 복제', + edit: '수정', + editLabel: '{{label}} 수정', + editing: '수정 중', + editingLabel_many: '{{count}}개의 {{label}} 수정 중', + editingLabel_one: '{{count}}개의 {{label}} 수정 중', + editingLabel_other: '{{count}}개의 {{label}} 수정 중', + email: '이메일', + emailAddress: '이메일 주소', + enterAValue: '값을 입력하세요', + error: '오류', + errors: '오류', + fallbackToDefaultLocale: '기본 locale로 대체', + filter: '필터', + filterWhere: '{{label}} 필터링 조건', + filters: '필터', + globals: '글로벌', + language: '언어', + lastModified: '마지막 수정 일시', + leaveAnyway: '그래도 나가시겠습니까?', + leaveWithoutSaving: '저장하지 않고 나가기', + light: '라이트', + livePreview: '실시간 미리보기', + loading: '불러오는 중', + locale: 'locale', + locales: 'locale', + menu: '메뉴', + moveDown: '아래로 이동', + moveUp: '위로 이동', + newPassword: '새 비밀번호', + noFiltersSet: '설정된 필터 없음', + noLabel: '<{{label}} 없음>', + noOptions: '옵션 없음', + noResults: + '{{label}}를 찾을 수 없습니다. 아직 {{label}}이 없거나 설정한 필터와 일치하는 것이 없습니다.', + noValue: '값 없음', + none: '없음', + notFound: '찾을 수 없음', + nothingFound: '찾을 수 없습니다', + of: '의', + open: '열기', + or: '또는', + order: '순서', + pageNotFound: '페이지를 찾을 수 없음', + password: '비밀번호', + payloadSettings: 'Payload 설정', + perPage: '페이지당 개수: {{limit}}', + remove: '제거', + reset: '초기화', + row: '행', + rows: '행', + save: '저장', + saving: '저장 중...', + searchBy: '{{label}}로 검색', + selectAll: '{{count}}개 {{label}} 모두 선택', + selectAllRows: '모든 행 선택', + selectValue: '값 선택', + selectedCount: '{{count}}개의 {{label}} 선택됨', + showAllLabel: '{{label}} 모두 표시', + sorryNotFound: '죄송합니다. 요청과 일치하는 항목이 없습니다.', + sort: '정렬', + sortByLabelDirection: '{{label}} {{direction}}으로 정렬', + stayOnThisPage: '이 페이지에 머무르기', + submissionSuccessful: '제출이 완료되었습니다.', + submit: '제출', + successfullyCreated: '{{label}}이(가) 생성되었습니다.', + successfullyDuplicated: '{{label}}이(가) 복제되었습니다.', + thisLanguage: '한국어', + titleDeleted: '{{label}} "{{title}}"을(를) 삭제했습니다.', + unauthorized: '권한 없음', + unsavedChangesDuplicate: '저장되지 않은 변경 사항이 있습니다. 복제를 계속하시겠습니까?', + untitled: '제목 없음', + updatedAt: '업데이트 일시', + updatedCountSuccessfully: '{{count}}개의 {{label}}을(를) 업데이트했습니다.', + updatedSuccessfully: '성공적으로 업데이트되었습니다.', + updating: '업데이트 중', + uploading: '업로드 중', + user: '사용자', + users: '사용자', + value: '값', + welcome: '환영합니다', + }, + operators: { + contains: '포함', + equals: '같음', + exists: '존재', + isGreaterThan: '보다 큼', + isGreaterThanOrEqualTo: '보다 크거나 같음', + isIn: '포함됨', + isLessThan: '보다 작음', + isLessThanOrEqualTo: '보다 작거나 같음', + isLike: '유사', + isNotEqualTo: '같지 않음', + isNotIn: '포함되지 않음', + near: '근처', + }, + upload: { + crop: '자르기', + cropToolDescription: + '선택한 영역의 모퉁이를 드래그하거나 새로운 영역을 그리거나 아래의 값을 조정하세요.', + dragAndDrop: '파일을 끌어다 놓으세요', + dragAndDropHere: '또는 여기로 파일을 끌어다 놓으세요', + editImage: '이미지 수정', + fileName: '파일 이름', + fileSize: '파일 크기', + focalPoint: '초점', + focalPointDescription: '미리보기에서 초점을 직접 드래그하거나 아래의 값을 조정하세요.', + height: '높이', + lessInfo: '정보 숨기기', + moreInfo: '정보 더보기', + previewSizes: '미리보기 크기', + selectCollectionToBrowse: '찾을 컬렉션 선택', + selectFile: '파일 선택', + setCropArea: '자르기 영역 설정', + setFocalPoint: '초점 설정', + sizes: '크기', + sizesFor: '{{label}} 크기', + width: '너비', + }, + validation: { + emailAddress: '유효한 이메일 주소를 입력하세요.', + enterNumber: '유효한 숫자를 입력하세요.', + fieldHasNo: '이 입력란에는 {{label}}이(가) 없습니다.', + greaterThanMax: '{{value}}은(는) 최대 허용된 {{label}}인 {{max}}개보다 큽니다.', + invalidInput: '이 입력란에는 유효하지 않은 입력이 있습니다.', + invalidSelection: '이 입력란에는 유효하지 않은 선택이 있습니다.', + invalidSelections: '이 입력란에는 다음과 같은 유효하지 않은 선택 사항이 있습니다:', + lessThanMin: '{{value}}은(는) 최소 허용된 {{label}}인 {{min}}개보다 작습니다.', + limitReached: '제한에 도달했습니다. {{max}}개 항목만 추가할 수 있습니다.', + longerThanMin: '이 값은 최소 길이인 {{minLength}}자보다 길어야 합니다.', + notValidDate: '"{{value}}"은(는) 유효한 날짜가 아닙니다.', + required: '이 입력란은 필수입니다.', + requiresAtLeast: '이 입력란운 최소한 {{count}} {{label}}이 필요합니다.', + requiresNoMoreThan: '이 입력란은 최대 {{count}} {{label}} 이하이어야 합니다.', + requiresTwoNumbers: '이 입력란은 두 개의 숫자가 필요합니다.', + shorterThanMax: '이 값은 최대 길이인 {{maxLength}}자보다 짧아야 합니다.', + trueOrFalse: '이 입력란은 true 또는 false만 가능합니다.', + validUploadID: '이 입력란은 유효한 업로드 ID가 아닙니다.', + }, + version: { + type: '유형', + aboutToPublishSelection: '선택한 {{label}}을(를) 게시하려고 합니다. 계속하시겠습니까?', + aboutToRestore: '이 {{label}} 문서를 {{versionDate}}기준 버전으로 복원하려고 합니다.', + aboutToRestoreGlobal: + '글로벌 {{label}}을(를) {{versionDate}}기준 버전으로 복원하려고 합니다.', + aboutToRevertToPublished: + '이 문서의 변경 사항을 게시된 상태로 되돌리려고 합니다. 계속하시겠습니까?', + aboutToUnpublish: '이 문서를 게시 해제하려고 합니다. 계속하시겠습니까?', + aboutToUnpublishSelection: '선택한 {{label}}을(를) 게시 해제하려고 합니다. 계속하시겠습니까?', + autosave: '자동 저장', + autosavedSuccessfully: '자동 저장이 완료되었습니다.', + autosavedVersion: '자동 저장된 버전', + changed: '변경됨', + compareVersion: '비교할 버전 선택:', + confirmPublish: '게시하기', + confirmRevertToSaved: '저장된 상태로 되돌리기', + confirmUnpublish: '게시 해제하기', + confirmVersionRestoration: '버전 복원하기', + currentDocumentStatus: '현재 {{docStatus}} 문서', + draft: '초안', + draftSavedSuccessfully: '초안이 저장되었습니다.', + lastSavedAgo: '마지막으로 저장한지 {{distance}} 전', + noFurtherVersionsFound: '더 이상의 버전을 찾을 수 없습니다.', + noRowsFound: '{{label}}을(를) 찾을 수 없음', + preview: '미리보기', + problemRestoringVersion: '이 버전을 복원하는 중 문제가 발생했습니다.', + publish: '게시', + publishChanges: '변경 사항 게시', + published: '게시됨', + publishing: '게시', + restoreThisVersion: '이 버전 복원', + restoredSuccessfully: '복원이 완료되었습니다.', + restoring: '복원 중...', + revertToPublished: '게시된 상태로 되돌리기', + reverting: '되돌리는 중...', + saveDraft: '초안 저장', + selectLocales: '표시할 locale 선택', + selectVersionToCompare: '비교할 버전 선택', + showLocales: 'locale 표시:', + showingVersionsFor: '다음 버전 표시 중:', + status: '상태', + unpublish: '게시 해제', + unpublishing: '게시 해제 중...', + version: '버전', + versionCount_many: '{{count}}개의 버전을 찾았습니다', + versionCount_none: '버전을 찾을 수 없습니다', + versionCount_one: '{{count}}개의 버전을 찾았습니다', + versionCount_other: '{{count}}개의 버전을 찾았습니다', + versionCreatedOn: '{{version}} 생성 날짜:', + versionID: '버전 ID', + versions: '버전', + viewingVersion: '{{entityLabel}} {{documentTitle}}의 버전 보기', + viewingVersionGlobal: '글로벌 {{entityLabel}}의 버전 보기', + viewingVersions: '{{entityLabel}} {{documentTitle}}에 대한 버전 보기', + viewingVersionsGlobal: '글로벌 {{entityLabel}}에 대한 버전 보기', + }, + }, +} diff --git a/packages/translations/src/languages/my.ts b/packages/translations/src/languages/my.ts new file mode 100644 index 0000000000..cd0d2efecb --- /dev/null +++ b/packages/translations/src/languages/my.ts @@ -0,0 +1,402 @@ +import type { Language } from '../types.js' + +export const my: Language = { + dateFNSKey: 'en-US', + translations: { + authentication: { + account: 'အကောင့်', + accountOfCurrentUser: 'သင့် အကောင့်', + alreadyActivated: 'အတည်ပြုပြီး', + alreadyLoggedIn: 'ဝင်ရောက်ပြီးသား', + apiKey: 'API Key', + backToLogin: 'အကောင့်ထဲ ပြန်ဝင်မည်။', + beginCreateFirstUser: 'စတင်နိုင်ရန် ပထမဦးစွာ အသုံးပြုသူအား ဖန်တီးပါ။', + changePassword: 'စကားဝှက် ပြောင်းလဲမည်။', + checkYourEmailForPasswordReset: + 'သင့်စကားဝှက်ကို ပြန်လည်သတ်မှတ်နိုင်ရန်အတွက် မေးလ်ပို့ထားပါသည်။', + confirmGeneration: 'Generation အတည်ပြု', + confirmPassword: 'စကားဝှက်အား ထပ်မံ ရိုက်ထည့်ပါ။', + createFirstUser: 'ပထမဆုံး အသုံးပြုသူကို ဖန်တီးပါ။', + emailNotValid: 'ထည့်သွင်းထားသော အီးမေလ်မှာ မှားယွင်းနေပါသည်။', + emailSent: 'မေးလ် ပို့ထားပါသည်။', + enableAPIKey: 'API Key ကိုဖွင့်ရန်', + failedToUnlock: 'လော့ခ်ဖွင့်၍မရပါ။', + forceUnlock: 'လော့ခ်ဖွင့်ရန်', + forgotPassword: 'စကားဝှက် မေ့နေပါသလား။', + forgotPasswordEmailInstructions: + 'ကျေးဇူးပြု၍ သင့်အီးမေးလ်ကို ထည့်သွင်းပါ။ သင့်စကားဝှက်ကို ပြန်လည်သတ်မှတ်နိုင်ရန် အီးမေးလ်စာတစ်စောင်ကို သင်လက်ခံရရှိမည်ဖြစ်သည်။', + forgotPasswordQuestion: 'စကားဝှက် မေ့နေပါသလား။', + generate: 'Generate', + generateNewAPIKey: 'API key အသစ်ဖန်တီးရန်', + generatingNewAPIKeyWillInvalidate: + 'API ကီးအသစ်တစ်ခုကို ဖန်တီးခြင်းသည် ယခင်ကီးကို <1>တရားဝင်ခြင်းမရှိစေဘဲ ဖြစ်လိမ့်မည်။ ဆက်လုပ်မှာတာ သေချာပါသလား။', + lockUntil: 'Lock Until', + logBackIn: 'အကောင့်ထဲ ပြန်ဝင်မည်။', + logOut: 'အကောင့်ထဲက ထွက်မည်။', + loggedIn: 'အခြားအကောင့်နှင့် လော့ဂ်အင်ဝင်လိုပါက <0>လော့ဂ်အောက် ပြုလုပ်ပါ။', + loggedInChangePassword: + 'စကားဝှက် ပြောင်းလဲရန်အတွက် သင့် <0>အကောင့် သို့ဝင်ရောက်ပြီး ပြင်ဆင် သတ်မှတ်ပါ။', + loggedOutInactivity: 'လုပ်ဆောင်ချက်မရှိခြင်းကြောင့် သင်သည် ထွက်လိုက်ပါသည်။', + loggedOutSuccessfully: 'သင်သည် အောင်မြင်စွာ ထွက်ပြီးပါပြီ။', + login: 'အကောင့်ထဲ ဝင်မည်။', + loginAttempts: 'လော့ဂ်အင် လုပ်ဆောင်ချက်များ', + loginUser: 'လော့ဂ်အင် အသုံးပြုသူ', + loginWithAnotherUser: 'အခြားအကောင့်နှင့် လော့ဂ်အင်ဝင်လိုပါက <0>လော့ဂ်အောက် ပြုလုပ်ပါ။', + logout: 'အကောင့်မှ ထွက်မည်၊', + logoutUser: 'လော့ဂ်အောက် အသုံးပြုသူ', + newAPIKeyGenerated: 'New API Key Generated.', + newAccountCreated: + '{{serverURL}} သို့ဝင်ရောက်ရန် သင့်အီးမေးလ်ကို အတည်ပြုရန်အတွက် အကောင့်အသစ်တစ်ခုကို ယခုလေးတင် ဖန်တီးပြီးပါပြီ။ ကျေးဇူးပြု၍ အောက်ပါလင့်ခ်ကို နှိပ်ပါ သို့မဟုတ် သင့်အီးမေးလ်ကို အတည်ပြုရန် ဖော်ပြပါ လင့်ခ်ကို သင့်ဘရောက်ဆာထဲသို့ ကူးထည့်ပါ- {{verificationURL}}
    သင့်အီးမေးလ်ကို အတည်ပြုပြီးနောက်၊ သင်သည် အောင်မြင်စွာ လော့ဂ်အင်ဝင်နိုင်ပါမည်။', + newPassword: 'စကားဝှက် အသစ်', + resetPassword: 'စကားဝှက် ပြန်လည်သတ်မှတ်', + resetPasswordExpiration: 'စကားဝှက် ပြန်လည်သတ်မှတ်ရန် သတ်တမ်း', + resetPasswordToken: 'စကားဝှက် တိုကင်အား ပြန်လည်သတ်မှတ်', + resetYourPassword: 'သင့်စကားဝှက်ကို ပြန်လည်သတ်မှတ်ပါ။', + stayLoggedIn: 'အကောင့်ထဲ ဝင်ထားသည်။', + successfullyUnlocked: 'အောင်မြင်စွာသော့ဖွင့်ခဲ့သည်။', + unableToVerify: 'စိစစ်၍မရပါ။', + verified: 'စိစစ်ပြီး', + verifiedSuccessfully: 'အတည်ပြုပြီးပါပြီ။', + verify: 'စိစစ်ခြင်း', + verifyUser: 'အသုံးပြုသူ စီစစ်ခြင်း', + verifyYourEmail: 'သင့်အီးမေးလ်ကို အတည်ပြုပါ။', + youAreInactive: + 'သင်သည် အချိန်အနည်းငယ်အတွင်း active မဖြစ်ပါက သင့်အကောင့် လုံခြုံရေးအတွက် မကြာမီ အလိုအလျောက် လော့ဂ်အောက်ဖြစ်ပါမည်။ အကောင့်ထဲ ဆက်နေလိုပါသလား။', + youAreReceivingResetPassword: + 'သင့်အကောင့်အတွက် စကားဝှက်ကို ပြန်လည်သတ်မှတ်ရန် သင် (သို့မဟုတ် အခြားသူတစ်ဦးဦး) က တောင်းဆိုထားသောကြောင့်လက်ခံရရှိခြင်းဖြစ်သည်။ ကျေးဇူးပြု၍ အောက်ပါလင့်ခ်ကို နှိပ်ပါ (သို့မဟုတ်) ၎င်းကို သင့်ဘရောက်ဆာထဲသို့ ကူးထည့်ပါ။', + youDidNotRequestPassword: + 'ယခု လုပ်ဆောင်ချက်ကို သင်မတောင်းဆိုထားပါက ဤအီးမေးလ်ကို လျစ်လျူရှုထားခြင်းဖြင့် သင့်စကားဝှက်သည် ပြောင်းလဲမည်မဟုတ်ပါ။', + }, + error: { + accountAlreadyActivated: 'ဤအကောင့်ကို အသက်သွင်းပြီးဖြစ်သည်။', + autosaving: 'ဖိုင်ကို အလိုအလျောက်သိမ်းဆည်းရာတွင် ပြဿနာတစ်ခုရှိနေသည်။', + correctInvalidFields: 'ကျေးဇူးပြု၍ အချက်အလက်များကို ပြန်လည် စစ်ဆေးပါ။', + deletingFile: 'ဖိုင်ကိုဖျက်ရာတွင် အမှားအယွင်းရှိနေသည်။', + deletingTitle: + '{{title}} ကို ဖျက်ရာတွင် အမှားအယွင်းရှိခဲ့သည်။ သင့် အင်တာနက်လိုင်းအား စစ်ဆေးပြီး ထပ်မံကြို့စားကြည့်ပါ။', + emailOrPasswordIncorrect: 'ထည့်သွင်းထားသော အီးမေးလ် သို့မဟုတ် စကားဝှက်သည် မမှန်ပါ။', + followingFieldsInvalid_one: 'ထည့်သွင်းထားသော အချက်အလက်သည် မမှန်ကန်ပါ။', + followingFieldsInvalid_other: 'ထည့်သွင်းထားသော အချက်အလက်များသည် မမှန်ကန်ပါ။', + incorrectCollection: 'မှားယွင်းသော စုစည်းမှု', + invalidFileType: 'မမှန်ကန်သော ဖိုင်အမျိုးအစား', + invalidFileTypeValue: 'မမှန်ကန်သော ဖိုင်အမျိုးအစား: {{value}}', + loadingDocument: '{{id}} ID ဖြင့် ဖိုင်ကို ဖွင့်ရာတွင် ပြဿနာရှိနေသည်။', + missingEmail: 'အီးမေးလ်ပျောက်ဆုံး', + missingIDOfDocument: 'ပြင်ဆင်ရန် ဖိုင် ID ပျောက်နေပါသည်။', + missingIDOfVersion: 'ပျောက်ဆုံး ဗားရှင်း ID', + missingRequiredData: 'လိုအပ်သောဒေတာ ပျောက်ဆုံးနေပါသည်။', + noFilesUploaded: 'ဖိုင်များကို အပ်လုဒ်လုပ်ထားခြင်းမရှိပါ။', + noMatchedField: '"{{label}}" အတွက် ကိုက်ညီသောအပိုင်းကို ရှာမတွေ့ပါ။', + noUser: 'အသုံးပြုသူ မရှိပါ။', + notAllowedToAccessPage: 'ဤစာမျက်နှာကို ဝင်ရောက်ခွင့်မပြုပါ။', + notAllowedToPerformAction: 'ဤလုပ်ဆောင်ချက်ကို လုပ်ဆောင်ရန် ခွင့်မပြုပါ။', + notFound: 'တောင်းဆိုထားသော အရင်းအမြစ်ကို ရှာမတွေ့ပါ။', + previewing: 'ဖိုင်ကို အစမ်းကြည့်ရန် ပြဿနာရှိနေသည်။', + problemUploadingFile: 'ဖိုင်ကို အပ်လုဒ်တင်ရာတွင် ပြဿနာရှိနေသည်။', + tokenInvalidOrExpired: 'တိုကင်သည် မမှန်ကန်ပါ သို့မဟုတ် သက်တမ်းကုန်သွားပါပြီ။', + unPublishingDocument: 'ဖိုင်ကို ပြန်လည့် သိမ်းဆည်းခြင်းမှာ ပြဿနာရှိနေသည်။', + unableToDeleteCount: '{{total}} {{label}} မှ {{count}} ကို ဖျက်၍မရပါ။', + unableToUpdateCount: '{{total}} {{label}} မှ {{count}} ကို အပ်ဒိတ်လုပ်၍မရပါ။', + unauthorized: 'အခွင့်မရှိပါ။ ဤတောင်းဆိုချက်ကို လုပ်ဆောင်နိုင်ရန် သင်သည် လော့ဂ်အင်ဝင်ရပါမည်။', + unknown: 'ဘာမှန်းမသိသော error တက်သွားပါသည်။', + unspecific: 'Error တက်နေပါသည်။', + userLocked: + 'အကောင့်ထဲကို ဝင်ရန် အရမ်းအရမ်းကို ကြိုးပမ်းနေသောကြောင့် အကောင့်အား လော့ခ်ချလိုက်ပါသည်။', + valueMustBeUnique: 'value သည် အဓိပ္ပာယ်ရှိရပါမည်။', + verificationTokenInvalid: 'အတည်ပြုခြင်းတိုကင်သည် မမှန်ကန်ပါ။', + }, + fields: { + addLabel: '{{label}} ထည့်သွင်းမည်။', + addLink: 'လင့်ခ်ထည့်ပါ။', + addNew: 'အသစ် ထည့်သွင်းမည်။', + addNewLabel: '{{label}} အားအသစ် ထည့်သွင်းမည်။', + addRelationship: 'Relationship အသစ်ထည့်သွင်းမည်။', + addUpload: 'Upload ထည့်ပါ။', + block: 'ဘလောက်', + blockType: 'ဘလောက် အမျိုးအစား', + blocks: 'ဘလောက်များ', + chooseBetweenCustomTextOrDocument: + 'စိတ်ကြိုက်စာသား URL ကိုထည့်ခြင်း သို့မဟုတ် အခြားစာရွက်စာတမ်းတစ်ခုသို့ လင့်ခ်ချိတ်ခြင်းအကြား ရွေးချယ်ပါ။', + chooseDocumentToLink: 'ချိတ်ဆက်ရန် စာရွက်စာတမ်းကို ရွေးပါ။', + chooseFromExisting: 'ရှိပြီးသားထဲကပဲ ရွေးချယ်ပါ။', + chooseLabel: '{{label}} အားရွေးချယ်ပါ။', + collapseAll: 'အားလုံးကို ခေါက်သိမ်းပါ။', + customURL: 'စိတ်ကြိုက် URL', + editLabelData: 'ဒေတာ {{label}} ကို တည်းဖြတ်ပါ။', + editLink: 'လင့်ခ်ကို တည်းဖြတ်ပါ။', + editRelationship: 'ဆက်ဆံရေးကို တည်းဖြတ်ပါ။', + enterURL: 'URL တစ်ခုထည့်ပါ။', + internalLink: 'Internal Link', + itemsAndMore: '{{items}} နှင့် နောက်ထပ် {{count}} ခု', + labelRelationship: '{{label}} Relationship', + latitude: 'vĩ độ', + linkType: 'လင့်အမျိုးအစား', + linkedTo: '<0>{{label}} ချိတ်ဆက်ထားသည်။', + longitude: 'လောင်ဂျီကျု', + newLabel: '{{label}} အသစ်', + openInNewTab: 'တက်ဘ်အသစ်တွင် ဖွင့်ပါ။', + passwordsDoNotMatch: 'စကားဝှက်များနှင့် မကိုက်ညီပါ။', + relatedDocument: 'ဆက်စပ် ဖိုင်', + relationTo: 'ဆက်စပ်မှု', + removeRelationship: 'ဆက်ဆံရေးကို ဖယ်ရှားပါ။', + removeUpload: 'အပ်လုဒ်ကို ဖယ်ရှားပါ။', + saveChanges: 'သိမ်းဆည်းမည်။', + searchForBlock: 'ဘလောက်တစ်ခုရှာမည်။', + selectExistingLabel: 'ရှိပြီးသား {{label}} ကို ရွေးပါ', + selectFieldsToEdit: 'တည်းဖြတ်ရန် အကွက်များကို ရွေးပါ။', + showAll: 'အကုန် ကြည့်မည်။', + swapRelationship: 'လဲလှယ်ဆက်ဆံရေး', + swapUpload: 'အပ်လုဒ်ဖလှယ်ပါ။', + textToDisplay: 'ပြသရန် စာသား', + toggleBlock: 'ဘလောက်ကို ပြောင်းပါ။', + uploadNewLabel: '{{label}} အသစ်တင်မည်။', + }, + general: { + aboutToDelete: + '{{label}} <1>{{title}} ကို ဖျက်ပါတော့မည်။ သေချာပြီလား။ ဖျက်ပြီးရင် ပြန်မရဘူးနော်။', + aboutToDeleteCount_many: 'သင်သည် {{count}} {{label}} ကို ဖျက်ပါတော့မည်။', + aboutToDeleteCount_one: 'သင်သည် {{count}} {{label}} ကို ဖျက်ပါတော့မည်။', + aboutToDeleteCount_other: 'သင်သည် {{count}} {{label}} ကို ဖျက်ပါတော့မည်။', + addBelow: 'အောက်တွင်ထည့်ပါ။', + addFilter: 'ဇကာထည့်ပါ။', + adminTheme: 'အက်ပ်ဒိုင်များစပ်စွာ', + and: 'နှင့်', + applyChanges: 'ပြောင်းလဲမှုများ အသုံးပြုပါ', + ascending: 'တက်နေသည်', + automatic: 'အော်တို', + backToDashboard: 'ပင်မစာမျက်နှာသို့ ပြန်သွားမည်။', + cancel: 'မလုပ်တော့ပါ။', + changesNotSaved: + 'သင်၏ပြောင်းလဲမှုများကို မသိမ်းဆည်းရသေးပါ။ ယခု စာမျက်နှာက ထွက်လိုက်ပါက သင်၏ပြောင်းလဲမှုများ အကုန် ဆုံးရှုံးသွားပါမည်။ အကုန်နော်။', + close: 'ပိတ်', + collapse: 'ခေါက်သိမ်းပါ။', + collections: 'စုစည်းမှူများ', + columnToSort: 'ကော်လံ စီရန်', + columns: 'ကော်လံများ', + confirm: 'သေချာပါပြီ။', + confirmDeletion: 'ဖျက်တော့မယ်နော်။', + confirmDuplication: 'ပုံတူပွားခြင်းကို အတည်ပြုပါ။', + copied: 'ကူးယူပြီးပြီ။', + copy: 'ကူးယူမည်။', + create: 'ဖန်တီးမည်။', + createNew: 'အသစ် ဖန်တီးမည်။', + createNewLabel: '{{label}} အသစ် ဖန်တီးမည်။', + created: 'ဖန်တီးခဲ့သည်။', + createdAt: 'ဖန်တီးခဲ့သည့်အချိန်', + creating: 'ဖန်တီးနေသည်။', + creatingNewLabel: '{{label}} အသစ် ဖန်တီးနေသည်။', + dark: 'အမှောင်', + dashboard: 'ပင်မစာမျက်နှာ', + delete: 'ဖျက်မည်။', + deletedCountSuccessfully: '{{count}} {{label}} ကို အောင်မြင်စွာ ဖျက်လိုက်ပါပြီ။', + deletedSuccessfully: 'အောင်မြင်စွာ ဖျက်လိုက်ပါပြီ။', + deleting: 'ဖျက်နေဆဲ ...', + descending: 'ဆင်းသက်လာသည်။', + deselectAllRows: 'အားလုံးကို မရွေးနိုင်ပါ', + duplicate: 'ပုံတူပွားမည်။', + duplicateWithoutSaving: 'သေချာပါပြီ။', + edit: 'တည်းဖြတ်ပါ။', + editLabel: '{{label}} ပြင်ဆင်မည်။', + editing: 'ပြင်ဆင်နေသည်။', + editingLabel_many: 'တည်းဖြတ်ခြင်း {{count}} {{label}}', + editingLabel_one: 'တည်းဖြတ်ခြင်း {{count}} {{label}}', + editingLabel_other: 'တည်းဖြတ်ခြင်း {{count}} {{label}}', + email: 'အီးမေးလ်', + emailAddress: 'အီးမေးလ် လိပ်စာ', + enterAValue: 'တန်ဖိုးတစ်ခုထည့်ပါ။', + error: 'အမှား', + errors: 'အမှားများ', + fallbackToDefaultLocale: 'မူရင်းဒေသသို့ ပြန်ပြောင်းပါ။', + filter: 'ဇကာ', + filterWhere: 'နေရာတွင် စစ်ထုတ်ပါ။', + filters: 'စစ်ထုတ်မှုများ', + globals: 'Globals', + language: 'ဘာသာစကား', + lastModified: 'နောက်ဆုံးပြင်ဆင်ထားသည်။', + leaveAnyway: 'ဘာဖြစ်ဖြစ် ထွက်မည်။', + leaveWithoutSaving: 'မသိမ်းဘဲ ထွက်မည်။', + light: 'အလင်း', + livePreview: 'အစမ်းကြည့်ရန်', + loading: 'ဖွင့်နေသည်', + locale: 'ဒေသ', + locales: 'Locales', + menu: 'မီနူး', + moveDown: 'Move Down', + moveUp: 'Move Up', + newPassword: 'စကားဝှက် အသစ်', + noFiltersSet: 'စစ်ထုတ်မှုများ မသတ်မှတ်ထားပါ။', + noLabel: '<မရှိ {{label}}>', + noOptions: 'ရွေးချယ်မှုမရှိပါ', + noResults: + '{{label}} မတွေ့ပါ။ {{label}} မရှိသေးသည်ဖြစ်စေ အထက်တွင်ဖော်ပြထားသော စစ်ထုတ်မှုများနှင့် ကိုက်ညီမှုမရှိပါ။', + noValue: 'တန်ဖိုး မရှိပါ။', + none: 'တစ်ခုမှ', + notFound: 'ဘာမှ မရှိတော့ဘူး။', + nothingFound: 'ဘာမှလည်း မတွေ့ဘူး။', + of: '၏', + open: 'ဖွင့်မည်။', + or: 'သို့မဟုတ်', + order: 'အစဉ်လိုက်', + pageNotFound: 'ရောက်ရှိနေသော စာမျက်နှာသည် မရှိပါ။', + password: 'စကားဝှက်', + payloadSettings: 'ရွေးချယ်စရာများ', + perPage: 'စာမျက်နှာ အလိုက်: {{limit}}', + remove: 'ဖယ်ရှားမည်။', + reset: 'Tetapkan semula', + row: 'အတန်း', + rows: 'Rows', + save: 'သိမ်းဆည်းမည်။', + saving: 'သိမ်းနေဆဲ ...', + searchBy: 'ရှာဖွေပါ။', + selectAll: '{{count}} {{label}} အားလုံးကို ရွေးပါ', + selectAllRows: 'အားလုံးကိုရွေးချယ်ပါ', + selectValue: 'တစ်ခုခုကို ရွေးချယ်ပါ။', + selectedCount: '{{count}} {{label}} ကို ရွေးထားသည်။', + showAllLabel: 'Tunjukkan semua {{label}}', + sorryNotFound: 'ဝမ်းနည်းပါသည်။ သင်ရှာနေတဲ့ဟာ ဒီမှာမရှိပါ။', + sort: 'အစဉ်လိုက်', + sortByLabelDirection: 'အစဉ်အလိုက် စီမံခန့်ခွဲထားသည် {{label}} {{direction}}', + stayOnThisPage: 'ဒီမှာပဲ ဆက်နေမည်။', + submissionSuccessful: 'သိမ်းဆည်းမှု အောင်မြင်ပါသည်။', + submit: 'သိမ်းဆည်းမည်။', + successfullyCreated: '{{label}} အောင်မြင်စွာဖန်တီးခဲ့သည်။', + successfullyDuplicated: '{{label}} အောင်မြင်စွာ ပုံတူပွားခဲ့သည်။', + thisLanguage: 'မြန်မာစာ', + titleDeleted: '{{label}} {{title}} အောင်မြင်စွာ ဖျက်သိမ်းခဲ့သည်။', + unauthorized: 'အခွင့်မရှိပါ။', + unsavedChangesDuplicate: + 'သင့်တွင် မသိမ်းဆည်းရသေးသော ပြောင်းလဲမှုများ ရှိနေပါသည်။ ပုံတူပွားမှာ သေချာပြီလား။', + untitled: 'ခေါင်းစဥ်မဲ့', + updatedAt: 'ပြင်ဆင်ခဲ့သည့်အချိန်', + updatedCountSuccessfully: '{{count}} {{label}} ကို အောင်မြင်စွာ အပ်ဒိတ်လုပ်ခဲ့သည်။', + updatedSuccessfully: 'အပ်ဒိတ်လုပ်ပြီးပါပြီ။', + updating: 'ပြင်ဆင်ရန်', + uploading: 'တင်ပေးနေသည်', + user: 'အသုံးပြုသူ', + users: 'အသုံးပြုသူများ', + value: 'တန်ဖိုး', + welcome: 'ကြိုဆိုပါတယ်။', + }, + operators: { + contains: 'ပါဝင်သည်', + equals: 'ညီမျှ', + exists: 'တည်ရှိသည်', + isGreaterThan: 'ထက်ကြီးသည်', + isGreaterThanOrEqualTo: 'ထက်ကြီးသည် သို့မဟုတ် ညီမျှသည်', + isIn: 'ရှိ', + isLessThan: 'ထက်နည်းသည်', + isLessThanOrEqualTo: 'ထက်နည်းသည် သို့မဟုတ် ညီမျှသည်', + isLike: 'တူသည်', + isNotEqualTo: 'ညီမျှသည်', + isNotIn: 'မဝင်ပါ', + near: 'နီး', + }, + upload: { + crop: 'သုန်း', + cropToolDescription: + 'ရွေးထားသည့်ဧရိယာတွင်မွေးလျှက်မှုများကိုဆွဲပြီး, အသစ်တည်ပြီးသို့မဟုတ်အောက်ပါတ', + dragAndDrop: 'ဖိုင်တစ်ဖိုင်ကို ဆွဲချလိုက်ပါ။', + dragAndDropHere: 'သို့မဟုတ် ဖိုင်တစ်ခုကို ဤနေရာတွင် ဆွဲချပါ။', + editImage: 'ပုံပြင်ပြောင်းရန်', + fileName: 'ဖိုင် နာမည်', + fileSize: 'ဖိုင် အရွယ်အစား', + focalPoint: 'အကန့်အသတ်ချုပ်', + focalPointDescription: + 'ပြသနားရထားသည့်ပုံအားထိန်းသိမ်းရန် ဖိုကယ်ပိုင်းကို တိုက်ရိုက်ပွဲ့နိုင်သည် သို', + height: 'Height', + lessInfo: 'အချက်အလက်နည်းတယ်။', + moreInfo: 'အချက်အလက်', + previewSizes: 'Saiz Pratonton', + selectCollectionToBrowse: 'စုစည်းမှု တစ်ခုခုကို ရွေးချယ်ပါ။', + selectFile: 'ဖိုင်ရွေးပါ။', + setCropArea: 'စပြန်းနယ်မြေထားပါ', + setFocalPoint: 'အစေခံဖောက်ရေစနစ်ကိုသတ်မှတ်ပါ', + sizes: 'အရွယ်အစားများ', + sizesFor: '{{label}} အတွက် အရွယ်အစားများ', + width: 'အကျယ်', + }, + validation: { + emailAddress: 'မှန်ကန်သော အီးမေးလ်လိပ်စာကို ထည့်သွင်းပါ။', + enterNumber: 'မှန်ကန်သောနံပါတ်တစ်ခုထည့်ပါ။', + fieldHasNo: 'ဤအကွက်တွင် {{label}} မရှိပါ။', + greaterThanMax: + '{{value}} သည် {{max}} ထက် ပိုမိုကြီးသည်။ ဤသည်ဖြင့် {{label}} အများဆုံးခွင့်ပြုထားသော တန်ဖိုးထက် ကြီးသည်။', + invalidInput: 'ဤအကွက်တွင် မမှန်ကန်သော ထည့်သွင်းမှုတစ်ခုရှိသည်။', + invalidSelection: 'ဤအကွက်တွင် မမှန်ကန်သော ရွေးချယ်မှုတစ်ခုရှိသည်။', + invalidSelections: 'ဤအကွက်တွင် အောက်ပါ မမှန်ကန်သော ရွေးချယ်မှုများ ရှိသည်', + lessThanMin: + '{{value}} သည် {{min}} ထက် ပိုမိုနိမ့်သည်။ ဤသည်ဖြင့် {{label}} အနည်းဆုံးခွင့်ပြုထားသော တန်ဖိုးထက် နိမ့်သည်။', + limitReached: + 'Had yang dibenarkan telah dicapai, hanya {{max}} item sahaja yang boleh ditambah.', + longerThanMin: 'ဤတန်ဖိုးသည် အနိမ့်ဆုံးအရှည် {{minLength}} စာလုံးထက် ပိုရှည်ရမည်။', + notValidDate: '"{{value}}" သည် တရားဝင်ရက်စွဲမဟုတ်ပါ။', + required: 'ဤအကွက်ကို လိုအပ်သည်။', + requiresAtLeast: 'ဤအကွက်သည် အနည်းဆုံး {{count}} {{label}} လိုအပ်သည်', + requiresNoMoreThan: 'ဤအကွက်တွင် {{count}} {{label}} ထက် မပိုရပါ။', + requiresTwoNumbers: 'ဤအကွက်သည် နံပါတ်နှစ်ခု လိုအပ်ပါသည်။', + shorterThanMax: 'ဤတန်ဖိုးသည် စာလုံး {{maxLength}} လုံး၏ အမြင့်ဆုံးအရှည်ထက် ပိုတိုရပါမည်။', + trueOrFalse: 'ဤအကွက်သည် တစ်ခုခုဖြစ်ရပါမည်။', + validUploadID: "'ဤအကွက်သည် မှန်ကန်သော အပ်လုဒ် ID မဟုတ်ပါ။'", + }, + version: { + type: 'အမျိုးအစား', + aboutToPublishSelection: + 'သင်သည် ရွေးချယ်မှုတွင် {{label}} အားလုံးကို ထုတ်ဝေပါတော့မည်။ သေချာလား?', + aboutToRestore: + 'သင်သည် ဤ {{label}} စာရွက်စာတမ်းကို {{versionDate}} တွင် ပါရှိသည့် အခြေအနေသို့ ပြန်ယူတော့မည်။', + aboutToRestoreGlobal: + 'သင်သည် ဂလိုဘယ် {{label}} ကို {{versionDate}} တွင် ပါရှိသည့် အခြေအနေသို့ ပြန်လည်ရောက်ရှိတော့မည်ဖြစ်သည်။', + aboutToRevertToPublished: + 'သင်သည် အပြောင်းအလဲများကို အများဆိုင် အခြေအနေသို့ ပြန်ပြောင်းပါတော့မည်။ သေချာလား?', + aboutToUnpublish: 'အများဆိုင်မှ ပြန်ဖြုတ်တော့မည်။ သေချာလား', + aboutToUnpublishSelection: + 'သင်သည် ရွေးချယ်မှုတွင် {{label}} အားလုံးကို ထုတ်ဝေတော့မည် ဖြစ်သည်။ သေချာလား?', + autosave: 'အလိုအလျောက်သိမ်းဆည်းပါ။', + autosavedSuccessfully: 'အလိုအလျောက် သိမ်းဆည်းပြီးပါပြီ။', + autosavedVersion: 'အော်တို ဗားရှင်း', + changed: 'ပြောင်းခဲ့သည်။', + compareVersion: 'ဗားရှင်းနှင့် နှိုင်းယှဉ်ချက်:', + confirmPublish: 'ထုတ်ဝေအတည်ပြုပါ။', + confirmRevertToSaved: 'သိမ်းဆည်းပြီးကြောင်း အတည်ပြုပါ။', + confirmUnpublish: 'အများဆိုင်ကို ဖျက်ရန် အတည်ပြုပါ။', + confirmVersionRestoration: 'ဗားရှင်းပြန်လည် အသုံးပြုခြင်းကို အတည်ပြုပါ။', + currentDocumentStatus: 'လက်ရှိ {{docStatus}} ဖိုင်', + draft: 'မူကြမ်း', + draftSavedSuccessfully: 'မူကြမ်းကို အောင်မြင်စွာ သိမ်းဆည်းပြီးပါပြီ။', + lastSavedAgo: 'နောက်ဆုံး သိမ်းချက် {{distance}} ကြာပြီး', + noFurtherVersionsFound: 'နောက်ထပ်ဗားရှင်းများ မတွေ့ပါ။', + noRowsFound: '{{label}} အားမတွေ့ပါ။', + preview: 'နမူနာပြရန်', + problemRestoringVersion: 'ဤဗားရှင်းကို ပြန်လည်ရယူရာတွင် ပြဿနာရှိနေသည်။', + publish: 'ထုတ်ဝေသည်။', + publishChanges: 'အပြောင်းအလဲများကို တင်ခဲ့သည်။', + published: 'တင်ပြီးပြီ။', + publishing: 'ထုတ်ဝေခြင်း', + restoreThisVersion: 'ဤဗားရှင်းကိုကို ပြန်ယူမည်။', + restoredSuccessfully: 'အောင်မြင်စွာ ပြန်လည်ရယူခဲ့သည်။', + restoring: 'ပြန်ယူနေဆဲ...', + revertToPublished: 'အများဆိုင်သို့ ပြန်ပြောင်းပါ။', + reverting: 'ပြန်ပြောင်းနေဆဲ...', + saveDraft: 'မှုကြမ်းကို သိမ်းဆည်းမည်။', + selectLocales: 'ပြသရန် ဒေသန္တရများကို ရွေးပါ။', + selectVersionToCompare: 'နှိုင်းယှဉ်ရန် ဗားရှင်းကို ရွေးပါ။', + showLocales: 'ဒေသန္တရများကိုပြပါ။:', + showingVersionsFor: 'အတွက် ဗားရှင်းများကို ပြသနေသည်-', + status: 'အခြေအနေ', + unpublish: 'ပြန်ဖြုတ်မည်။', + unpublishing: 'ပြန်ဖြုတ်နေဆဲ ...', + version: 'ဗားရှင်း', + versionCount_many: '{{count}} ဗားရှင်းများကို တွေ့ပါသည်။', + versionCount_none: 'ဗားရှင်းရှာဖွေ့ပါ။', + versionCount_one: '{{count}} ဗားရှင်အား တွေ့ပါသည်။', + versionCount_other: 'ဗားရှင်း {{count}} ခု တွေ့ရှိပါသည်။', + versionCreatedOn: '{{version}} အား ဖန်တီးခဲ့သည်။', + versionID: 'ဗားရှင်း ID', + versions: 'ဗားရှင်းများ', + viewingVersion: '{{entityLabel}} {{documentTitle}} အတွက် ဗားရှင်းကို ကြည့်ရှုနေသည်', + viewingVersionGlobal: '`ဂလိုဘယ်ဆိုင်ရာ {entityLabel}} အတွက် ဗားရှင်းကို ကြည့်ရှုနေသည်', + viewingVersions: '{{entityLabel}} {{documentTitle}} အတွက် ဗားရှင်းများကို ကြည့်ရှုခြင်း', + viewingVersionsGlobal: '`ဂလိုဘယ်ဆိုင်ရာ {{entityLabel}} အတွက် ဗားရှင်းများကို ကြည့်ရှုနေသည်', + }, + }, +} diff --git a/packages/translations/src/languages/nb.ts b/packages/translations/src/languages/nb.ts new file mode 100644 index 0000000000..d7599c7ed5 --- /dev/null +++ b/packages/translations/src/languages/nb.ts @@ -0,0 +1,396 @@ +import type { Language } from '../types.js' + +export const nb: Language = { + dateFNSKey: 'nb', + translations: { + authentication: { + account: 'Konto', + accountOfCurrentUser: 'Konto til nåværende bruker', + alreadyActivated: 'Allerede aktivert', + alreadyLoggedIn: 'Allerede logget inn', + apiKey: 'API-nøkkel', + backToLogin: 'Tilbake til innlogging', + beginCreateFirstUser: 'Opprett din første bruker for å fortsette.', + changePassword: 'Endre passord', + checkYourEmailForPasswordReset: + 'Sjekk e-posten din for en lenke som lar deg tilbakestille passordet ditt.', + confirmGeneration: 'Bekreft generering', + confirmPassword: 'Bekreft passord', + createFirstUser: 'Opprett første bruker', + emailNotValid: 'E-posten er ikke gyldig', + emailSent: 'E-post sendt', + enableAPIKey: 'Aktiver API-nøkkel', + failedToUnlock: 'Kunne ikke låse opp', + forceUnlock: 'Tving opplåsing', + forgotPassword: 'Glemt passord', + forgotPasswordEmailInstructions: + 'Skriv inn e-postadressen din nedenfor, og vi vil sende deg en e-post med instruksjoner om hvordan du tilbakestiller passordet ditt.', + forgotPasswordQuestion: 'Glemt passord?', + generate: 'Generer', + generateNewAPIKey: 'Generer ny API-nøkkel', + generatingNewAPIKeyWillInvalidate: + 'Å generere en ny API-nøkkel vil <1>ugyldiggjøre den forrige nøkkelen. Er du sikker på at du vil fortsette?', + lockUntil: 'Lås til', + logBackIn: 'Logg inn igjen', + logOut: 'Logg ut', + loggedIn: 'For å logge inn med en annen bruker, må du <0>logge ut først.', + loggedInChangePassword: + 'For å endre passordet ditt, gå til <0>kontoen din og endre passordet der.', + loggedOutInactivity: 'Du har blitt logget ut på grunn av inaktivitet.', + loggedOutSuccessfully: 'Du har blitt logget ut.', + login: 'Logg inn', + loginAttempts: 'Innloggingsforsøk', + loginUser: 'Logg inn bruker', + loginWithAnotherUser: 'For å logge inn med en annen bruker, må du <0>logge ut først.', + logout: 'Logg ut', + logoutUser: 'Logg ut bruker', + newAPIKeyGenerated: 'Ny API-nøkkel generert.', + newAccountCreated: + 'En ny konto har blitt opprettet for deg på {{serverURL}} Klikk på lenken nedenfor eller lim inn URLen i nettleseren din for å bekrefte e-postadressen din: {{verificationURL}}
    Etter at du har bekreftet e-postadressen din, kan du logge inn.', + newPassword: 'Nytt passord', + resetPassword: 'Tilbakestill passord', + resetPasswordExpiration: 'Tilbakestill passordets utløpsdato', + resetPasswordToken: 'Tilbakestill passordet-token', + resetYourPassword: 'Tilbakestill passordet ditt', + stayLoggedIn: 'Forbli logget inn', + successfullyUnlocked: 'Låst opp', + unableToVerify: 'Kunne ikke bekrefte', + verified: 'Bekreftet', + verifiedSuccessfully: 'Bekreftet', + verify: 'Bekreft', + verifyUser: 'Bekreft bruker', + verifyYourEmail: 'Bekreft e-postadressen din', + youAreInactive: + 'Du har ikke vært aktiv i en stund, og vil snart bli logget ut automatisk for din egen sikkerhet. Vil du forbli innlogget?', + youAreReceivingResetPassword: + 'Du mottar denne e-posten fordi du (eller noen andre) har bedt om tilbakestilling av passordet til kontoen din. Klikk på lenken nedenfor, eller lim den inn i nettleseren din for å fullføre prosessen:', + youDidNotRequestPassword: + 'Hvis du ikke har bedt om dette, kan du ignorere denne e-posten, og passordet ditt vil forbli uendret.', + }, + error: { + accountAlreadyActivated: 'Denne kontoen er allerede aktivert.', + autosaving: 'Det oppstod et problem under automatisk lagring av dokumentet.', + correctInvalidFields: 'Korriger ugyldige felt.', + deletingFile: 'Det oppstod en feil under sletting av filen.', + deletingTitle: + 'Det oppstod en feil under sletting av {{title}}. Sjekk tilkoblingen og prøv igjen.', + emailOrPasswordIncorrect: 'E-postadressen eller passordet er feil.', + followingFieldsInvalid_one: 'Følgende felt er ugyldig:', + followingFieldsInvalid_other: 'Følgende felter er ugyldige:', + incorrectCollection: 'Ugyldig samling', + invalidFileType: 'Ugyldig filtype', + invalidFileTypeValue: 'Ugyldig filtype: {{value}}', + loadingDocument: 'Det oppstod et problem under lasting av dokumentet med ID {{id}}.', + missingEmail: 'Mangler e-postadresse.', + missingIDOfDocument: 'Mangler ID for dokumentet som skal oppdateres.', + missingIDOfVersion: 'Mangler ID for versjonen.', + missingRequiredData: 'Mangler påkrevd data.', + noFilesUploaded: 'Ingen filer ble lastet opp.', + noMatchedField: 'Ingen matchende felt funnet for "{{label}}"', + noUser: 'Ingen bruker', + notAllowedToAccessPage: 'Du har ikke tilgang til denne siden.', + notAllowedToPerformAction: 'Du har ikke tillatelse til å utføre denne handlingen.', + notFound: 'Den forespurte ressursen ble ikke funnet.', + previewing: 'Det oppstod et problem under forhåndsvisning av dokumentet.', + problemUploadingFile: 'Det oppstod et problem under opplasting av filen.', + tokenInvalidOrExpired: 'Token er enten ugyldig eller har utløpt.', + unPublishingDocument: 'Det oppstod et problem under avpublisering av dokumentet.', + unableToDeleteCount: 'Kan ikke slette {{count}} av {{total}} {{label}}.', + unableToUpdateCount: 'Kan ikke oppdatere {{count}} av {{total}} {{label}}.', + unauthorized: 'Uautorisert, du må være innlogget for å gjøre denne forespørselen.', + unknown: 'En ukjent feil har oppstått.', + unspecific: 'En feil har oppstått.', + userLocked: 'Denne brukeren er låst på grunn av for mange mislykkede innloggingsforsøk.', + valueMustBeUnique: 'Verdien må være unik', + verificationTokenInvalid: 'Verifiseringskoden er ugyldig.', + }, + fields: { + addLabel: 'Legg til {{label}}', + addLink: 'Legg til Lenke', + addNew: 'Legg til ny', + addNewLabel: 'Legg til ny {{label}}', + addRelationship: 'Legg til Relasjon', + addUpload: 'Legg til Opplasting', + block: 'blokk', + blockType: 'Blokktype', + blocks: 'blokker', + chooseBetweenCustomTextOrDocument: + 'Velg mellom å skrive inn en egen tekst-URL eller å lenke til et annet dokument.', + chooseDocumentToLink: 'Velg et dokument å lenke til', + chooseFromExisting: 'Velg fra eksisterende', + chooseLabel: 'Velg {{label}}', + collapseAll: 'Skjul alle', + customURL: 'Egendefinert URL', + editLabelData: 'Rediger {{label}}-data', + editLink: 'Rediger lenke', + editRelationship: 'Rediger relasjon', + enterURL: 'Skriv inn en URL', + internalLink: 'Intern lenke', + itemsAndMore: '{{items}} og {{count}} flere', + labelRelationship: '{{label}}-relasjon', + latitude: 'Breddegrad', + linkType: 'Lenketype', + linkedTo: 'Lenket til <0>{{label}}', + longitude: 'Lengdegrad', + newLabel: 'Ny {{label}}', + openInNewTab: 'Åpne i ny fane', + passwordsDoNotMatch: 'Passordene er ikke like.', + relatedDocument: 'Relatert dokument', + relationTo: 'Relasjon til', + removeRelationship: 'Fjern Forhold', + removeUpload: 'Fjern Opplasting', + saveChanges: 'Lagre endringer', + searchForBlock: 'Søk etter en blokk', + selectExistingLabel: 'Velg eksisterende {{label}}', + selectFieldsToEdit: 'Velg felt som skal redigeres', + showAll: 'Vis alle', + swapRelationship: 'Bytte Forhold', + swapUpload: 'Bytt Opplasting', + textToDisplay: 'Tekst som skal vises', + toggleBlock: 'Veksle blokk', + uploadNewLabel: 'Last opp ny {{label}}', + }, + general: { + aboutToDelete: 'Du er i ferd med å slette {{label}} <1>{{title}}. Er du sikker?', + aboutToDeleteCount_many: 'Du er i ferd med å slette {{count}} {{label}}', + aboutToDeleteCount_one: 'Du er i ferd med å slette {{count}} {{label}}', + aboutToDeleteCount_other: 'Du er i ferd med å slette {{count}} {{label}}', + addBelow: 'Legg til under', + addFilter: 'Legg til filter', + adminTheme: 'Admin-tema', + and: 'Og', + applyChanges: 'Bruk endringer', + ascending: 'Stigende', + automatic: 'Automatisk', + backToDashboard: 'Tilbake til kontrollpanel', + cancel: 'Avbryt', + changesNotSaved: + 'Endringene dine er ikke lagret. Hvis du forlater nå, vil du miste endringene dine.', + close: 'Lukk', + collapse: 'Skjul', + collections: 'Samlinger', + columnToSort: 'Kolonne å sortere', + columns: 'Kolonner', + confirm: 'Bekreft', + confirmDeletion: 'Bekreft sletting', + confirmDuplication: 'Bekreft duplisering', + copied: 'Kopiert', + copy: 'Kopiér', + create: 'Opprett', + createNew: 'Opprett ny', + createNewLabel: 'Opprett ny {{label}}', + created: 'Opprettet', + createdAt: 'Opprettet', + creating: 'Oppretter', + creatingNewLabel: 'Oppretter ny {{label}}', + dark: 'Mørk', + dashboard: 'Kontrollpanel', + delete: 'Slett', + deletedCountSuccessfully: 'Slettet {{count}} {{label}}.', + deletedSuccessfully: 'Slettet.', + deleting: 'Sletter...', + descending: 'Synkende', + deselectAllRows: 'Fjern markeringen fra alle rader', + duplicate: 'Dupliser', + duplicateWithoutSaving: 'Dupliser uten å lagre endringer', + edit: 'Redigere', + editLabel: 'Rediger {{label}}', + editing: 'Redigerer', + editingLabel_many: 'Redigerer {{count}} {{label}}', + editingLabel_one: 'Redigerer {{count}} {{label}}', + editingLabel_other: 'Redigerer {{count}} {{label}}', + email: 'E-post', + emailAddress: 'E-postadresse', + enterAValue: 'Skriv inn en verdi', + error: 'Feil', + errors: 'Feil', + fallbackToDefaultLocale: 'Tilbakestilling til standard lokalitet', + filter: 'Filtrer', + filterWhere: 'Filtrer {{label}} der', + filters: 'Filter', + globals: 'Globale variabler', + language: 'Språk', + lastModified: 'Sist endret', + leaveAnyway: 'Forlat likevel', + leaveWithoutSaving: 'Forlat uten å lagre', + light: 'Lys', + livePreview: 'Forhåndsvisning', + loading: 'Laster', + locale: 'Lokalitet', + locales: 'Språk', + menu: 'Meny', + moveDown: 'Flytt ned', + moveUp: 'Flytt opp', + newPassword: 'Nytt passord', + noFiltersSet: 'Ingen filtre satt', + noLabel: '', + noOptions: 'Ingen alternativer', + noResults: + 'Ingen {{label}} funnet. Enten finnes det ingen {{label}} enda eller ingen matcher filterne du har spesifisert ovenfor.', + noValue: 'Ingen verdi', + none: 'Ingen', + notFound: 'Ikke funnet', + nothingFound: 'Ingenting funnet', + of: 'av', + open: 'Åpne', + or: 'Eller', + order: 'Rekkefølge', + pageNotFound: 'Siden ble ikke funnet', + password: 'Passord', + payloadSettings: 'Payload-innstillinger', + perPage: 'Per side: {{limit}}', + remove: 'Fjern', + reset: 'Tilbakestill', + row: 'Rad', + rows: 'Rader', + save: 'Lagre', + saving: 'Lagrer...', + searchBy: 'Søk etter {{label}}', + selectAll: 'Velg alle {{count}} {{label}}', + selectAllRows: 'Velg alle rader', + selectValue: 'Velg en verdi', + selectedCount: '{{count}} {{label}} valgt', + showAllLabel: 'Vis alle {{label}}', + sorryNotFound: 'Beklager, det er ingenting som samsvarer med forespørselen din.', + sort: 'Sortér', + sortByLabelDirection: 'Sorter etter {{label}} {{direction}}', + stayOnThisPage: 'Bli på denne siden', + submissionSuccessful: 'Innsending vellykket.', + submit: 'Send inn', + successfullyCreated: '{{label}} ble opprettet.', + successfullyDuplicated: '{{label}} ble duplisert.', + thisLanguage: 'Norsk', + titleDeleted: '{{label}} "{{title}}" ble slettet.', + unauthorized: 'Ikke autorisert', + unsavedChangesDuplicate: 'Du har ulagrede endringer. Vil du fortsette å duplisere?', + untitled: 'Uten tittel', + updatedAt: 'Oppdatert', + updatedCountSuccessfully: 'Oppdaterte {{count}} {{label}} vellykket.', + updatedSuccessfully: 'Oppdatert.', + updating: 'Oppdatering', + uploading: 'Opplasting', + user: 'Bruker', + users: 'Brukere', + value: 'Verdi', + welcome: 'Velkommen', + }, + operators: { + contains: 'contains', + equals: 'lik', + exists: 'eksisterer', + isGreaterThan: 'er større enn', + isGreaterThanOrEqualTo: 'er større enn eller lik', + isIn: 'er i', + isLessThan: 'er mindre enn', + isLessThanOrEqualTo: 'er mindre enn eller lik', + isLike: 'er som', + isNotEqualTo: 'er ikke lik', + isNotIn: 'er ikke med', + near: 'nær', + }, + upload: { + crop: 'Beskjær', + cropToolDescription: + 'Dra hjørnene av det valgte området, tegn et nytt område eller juster verdiene nedenfor.', + dragAndDrop: 'Dra og slipp en fil', + dragAndDropHere: 'eller dra og slipp en fil her', + editImage: 'Rediger bilde', + fileName: 'Filnavn', + fileSize: 'Filstørrelse', + focalPoint: 'Fokuspunkt', + focalPointDescription: + 'Dra fokuspunktet direkte på forhåndsvisningen eller juster verdiene nedenfor.', + height: 'Høyde', + lessInfo: 'Mindre info', + moreInfo: 'Mer info', + previewSizes: 'Forhåndsvisningsstørrelser', + selectCollectionToBrowse: 'Velg en samling å bla i', + selectFile: 'Velg en fil', + setCropArea: 'Angi beskjæringsområde', + setFocalPoint: 'Angi fokuspunkt', + sizes: 'Størrelser', + sizesFor: 'Størrelser for {{label}}', + width: 'Bredde', + }, + validation: { + emailAddress: 'Vennligst skriv inn en gyldig e-postadresse.', + enterNumber: 'Vennligst skriv inn et gyldig tall.', + fieldHasNo: 'Dette feltet har ingen {{label}}', + greaterThanMax: '{{value}} er større enn den tillatte maksimale {{label}} på {{max}}.', + invalidInput: 'Dette feltet har en ugyldig inndata.', + invalidSelection: 'Dette feltet har en ugyldig utvalg.', + invalidSelections: 'Dette feltet har følgende ugyldige utvalg:', + lessThanMin: '{{value}} er mindre enn den tillatte minimale {{label}} på {{min}}.', + limitReached: 'Begrensning nådd, bare {{max}} elementer kan legges til.', + longerThanMin: 'Denne verdien må være lengre enn minimumslengden på {{minLength}} tegn.', + notValidDate: '"{{value}}" er ikke en gyldig dato.', + required: 'Dette feltet er påkrevd.', + requiresAtLeast: 'Dette feltet krever minst {{count}} {{label}}.', + requiresNoMoreThan: 'Dette feltet krever maksimalt {{count}} {{label}}.', + requiresTwoNumbers: 'Dette feltet krever to tall.', + shorterThanMax: 'Denne verdien må være kortere enn maksimal lengde på {{maxLength}} tegn.', + trueOrFalse: 'Dette feltet kan bare være likt true eller false.', + validUploadID: 'Dette feltet er ikke en gyldig opplastings-ID.', + }, + version: { + type: 'Type', + aboutToPublishSelection: + 'Du er i ferd med å publisere alle {{label}} i utvalget. Er du sikker?', + aboutToRestore: + 'Du er i ferd med å gjenopprette denne {{label}} dokumentet til tilstanden det var i på {{versionDate}}.', + aboutToRestoreGlobal: + 'Du er i ferd med å gjenopprette den globale variabelen {{label}} til tilstanden det var i på {{versionDate}}.', + aboutToRevertToPublished: + 'Du er i ferd med å tilbakestille endringene i dette dokumentet til den publiserte tilstanden. Er du sikker?', + aboutToUnpublish: 'Du er i ferd med å avpublisere dette dokumentet. Er du sikker?', + aboutToUnpublishSelection: + 'Du er i ferd med å oppheve publiseringen av alle {{label}} i utvalget. Er du sikker?', + autosave: 'Lagre automatisk', + autosavedSuccessfully: 'Lagret automatisk.', + autosavedVersion: 'Automatisk lagret versjon', + changed: 'Endret', + compareVersion: 'Sammenlign versjon mot:', + confirmPublish: 'Bekreft publisering', + confirmRevertToSaved: 'Bekreft tilbakestilling til lagret', + confirmUnpublish: 'Bekreft avpublisering', + confirmVersionRestoration: 'Bekreft versjon-gjenoppretting', + currentDocumentStatus: 'Nåværende {{docStatus}} dokument', + draft: 'Utkast', + draftSavedSuccessfully: 'Utkast lagret.', + lastSavedAgo: 'Sist lagret {{distance}} siden', + noFurtherVersionsFound: 'Ingen flere versjoner funnet', + noRowsFound: 'Ingen {{label}} funnet', + preview: 'Forhåndsvisning', + problemRestoringVersion: 'Det oppstod et problem med gjenoppretting av denne versjonen', + publish: 'Publisere', + publishChanges: 'Publiser endringer', + published: 'Publisert', + publishing: 'Publisering', + restoreThisVersion: 'Gjenopprett denne versjonen', + restoredSuccessfully: 'Gjenopprettet.', + restoring: 'Gjenoppretter...', + revertToPublished: 'Tilbakestill til publisert', + reverting: 'Tilbakestiller...', + saveDraft: 'Lagre utkast', + selectLocales: 'Velg språk å vise', + selectVersionToCompare: 'Velg en versjon å sammenligne', + showLocales: 'Vis språk:', + showingVersionsFor: 'Viser versjoner for:', + status: 'Status', + unpublish: 'Avpubliser', + unpublishing: 'Avpubliserer...', + version: 'Versjon', + versionCount_many: '{{count}} versjoner funnet', + versionCount_none: 'Ingen versjoner funnet', + versionCount_one: '{{count}} versjon funnet', + versionCount_other: '{{count}} versjoner funnet', + versionCreatedOn: '{{version}} opprettet:', + versionID: 'Versjons-ID', + versions: 'Versjoner', + viewingVersion: 'Viser versjon for {{entityLabel}} {{documentTitle}}', + viewingVersionGlobal: 'Viser versjon for den globale variabelen {{entityLabel}}', + viewingVersions: 'Viser versjoner for {{entityLabel}} {{documentTitle}}', + viewingVersionsGlobal: 'Viser versjoner for den globale variabelen {{entityLabel}}', + }, + }, +} diff --git a/packages/translations/src/languages/nl.ts b/packages/translations/src/languages/nl.ts new file mode 100644 index 0000000000..3df7fe42c1 --- /dev/null +++ b/packages/translations/src/languages/nl.ts @@ -0,0 +1,400 @@ +import type { Language } from '../types.js' + +export const nl: Language = { + dateFNSKey: 'nl', + translations: { + authentication: { + account: 'Account', + accountOfCurrentUser: 'Account van huidige gebruiker', + alreadyActivated: 'Al geactiveerd', + alreadyLoggedIn: 'Al ingelogd', + apiKey: 'API-sleutel', + backToLogin: 'Terug naar inloggen', + beginCreateFirstUser: 'Om te beginnen maakt u uw eerste gebruiker aan.', + changePassword: 'Wachtwoord wijzigen', + checkYourEmailForPasswordReset: + 'Controleer uw e-mail voor een link waarmee u uw wachtwoord veilig opnieuw kunt instellen.', + confirmGeneration: 'Bevestigen', + confirmPassword: 'Wachtwoord bevestigen', + createFirstUser: 'Eerste gebruiker aanmaken', + emailNotValid: 'Het ingevoerde e-mailadres is niet geldig', + emailSent: 'E-mail verzonden', + enableAPIKey: 'Activeer API-sleutel', + failedToUnlock: 'Ontgrendeling mislukt', + forceUnlock: 'Forceer ontgrendeling', + forgotPassword: 'Wachtwoord vergeten', + forgotPasswordEmailInstructions: + 'Vul hieronder uw e-mailadres in. U ontvangt een e-mailbericht met instructies om uw wachtwoord opnieuw in te stellen.', + forgotPasswordQuestion: 'Wachtwoord vergeten?', + generate: 'Genereren', + generateNewAPIKey: 'Genereer nieuwe API-sleutel', + generatingNewAPIKeyWillInvalidate: + 'Het genereren van een nieuwe API-sleutel maakt de vorige sleutel <1>ongeldig. Weet u zeker dat u wilt doorgaan?', + lockUntil: 'Vergrendel tot', + logBackIn: 'Opnieuw inloggen', + logOut: 'Uitloggen', + loggedIn: 'Om in te loggen met een andere gebruiker, moet u zich eerst <0>uitloggen.', + loggedInChangePassword: + 'Om uw wachtwoord te wijzigen, gaat u naar <0>account en wijzigt u daar uw wachtwoord.', + loggedOutInactivity: 'U bent uitgelogd wegens inactiviteit.', + loggedOutSuccessfully: 'U bent succesvol uitgelogd.', + login: 'Inloggen', + loginAttempts: 'Inlogpogingen', + loginUser: 'Gebruiker inloggen', + loginWithAnotherUser: + 'Om in te loggen met een andere gebruiker, moet u zich eerst <0>uitoggen.', + logout: 'Uitloggen', + logoutUser: 'Gebruiker uitloggen', + newAPIKeyGenerated: 'Nieuwe API-sleutel is gegenereerd.', + newAccountCreated: + 'Er is zojuist een nieuw account voor u aangemaakt waarmee u toegang krijgt tot {{serverURL}}. Klik op de volgende link, of plak onderstaande URL in uw browser om uw e-mailadres te verifiëren: {{verificationURL}}
    Na de verificatie van uw e-mail kunt u succesvol inloggen.', + newPassword: 'Nieuw wachtwoord', + resetPassword: 'Wachtwoord herstellen', + resetPasswordExpiration: 'Vervaltijd van wachtwoord herstellen', + resetPasswordToken: 'Token van wachtwoordreset', + resetYourPassword: 'Reset uw wachtwoord', + stayLoggedIn: 'Ingelogd blijven', + successfullyUnlocked: 'Succesvol ontgrendeld', + unableToVerify: 'Verificatie niet mogelijk', + verified: 'Geverifieerd', + verifiedSuccessfully: 'Succesvol geverifieerd', + verify: 'Verifiëren', + verifyUser: 'Gebruiker verifiëren', + verifyYourEmail: 'Verifieer uw e-mailadres', + youAreInactive: + 'U bent al een tijdje niet meer actief geweest en wordt binnenkort voor uw eigen veiligheid automatisch uitgelogd. Wilt u ingelogd blijven?', + youAreReceivingResetPassword: + 'U ontvangt dit omdat u (of iemand anders) het wachtwoord voor uw account opnieuw heeft aangevraagd. Klik op de volgende link, of plak deze in uw browser om het proces te voltooien:', + youDidNotRequestPassword: + 'Als u dit niet heeft aangevraagd, negeer dan deze e-mail en uw wachtwoord zal ongewijzigd blijven.', + }, + error: { + accountAlreadyActivated: 'Dit account is al geactiveerd.', + autosaving: 'Er is een probleem opgetreden bij het automatisch bewaren van dit document.', + correctInvalidFields: 'Gelieve de ongeldige velden te corrigeren.', + deletingFile: 'Er is een fout opgetreden bij het verwijderen van dit bestand.', + deletingTitle: + 'Er is een fout opgetreden tijdens het verwijderen van {{title}}. Controleer uw verbinding en probeer het opnieuw.', + emailOrPasswordIncorrect: 'Het opgegeven e-mailadres of wachtwoord is onjuist.', + followingFieldsInvalid_one: 'Het volgende veld is ongeldig:', + followingFieldsInvalid_other: 'De volgende velden zijn ongeldig:', + incorrectCollection: 'Ongeldige collectie', + invalidFileType: 'Ongeldig bestandstype', + invalidFileTypeValue: 'Ongeldig bestandstype: {{value}}', + loadingDocument: 'Er was een probleem met het laden van het document met ID {{id}}.', + missingEmail: 'E-mailadres ontbreekt.', + missingIDOfDocument: 'ID ontbreekt van het aan te passen document.', + missingIDOfVersion: 'ID van versie ontbreekt.', + missingRequiredData: 'Ontbrekende vereiste gegevens.', + noFilesUploaded: 'Er zijn geen bestanden geüpload.', + noMatchedField: 'Geen overeenkomend veld gevonden voor "{{label}}"', + noUser: 'Geen gebruiker', + notAllowedToAccessPage: 'U hebt geen toegang tot deze pagina.', + notAllowedToPerformAction: 'U mag deze actie niet uitvoeren.', + notFound: 'De gevraagde resource werd niet gevonden.', + previewing: 'Er was een probleem met het voorvertonen van dit document.', + problemUploadingFile: 'Er was een probleem bij het uploaden van het bestand.', + tokenInvalidOrExpired: 'Token is ongeldig of verlopen.', + unPublishingDocument: 'Er was een probleem met het depubliceren van dit document.', + unableToDeleteCount: 'Kan {{count}} van {{total}} {{label}} niet verwijderen.', + unableToUpdateCount: 'Kan {{count}} van {{total}} {{label}} niet updaten.', + unauthorized: 'Ongeautoriseerd, u moet ingelogd zijn om dit verzoek te doen.', + unknown: 'Er is een onbekende fout opgetreden.', + unspecific: 'Er is een fout opgetreden.', + userLocked: 'Deze gebruiker is vergrendeld wegens te veel mislukte inlogpogingen.', + valueMustBeUnique: 'De waarde moet uniek zijn', + verificationTokenInvalid: 'Verificatietoken is ongeldig.', + }, + fields: { + addLabel: 'Voeg {{label}} toe', + addLink: 'Voeg een link toe', + addNew: 'Nieuw(e)', + addNewLabel: 'Nieuw(e) {{label}} toevoegen', + addRelationship: 'Nieuwe Relatie', + addUpload: 'Upload Toevoegen', + block: 'blok', + blockType: 'Bloktype', + blocks: 'blokken', + chooseBetweenCustomTextOrDocument: + 'Kies tussen het invoeren van een aangepaste tekst-URL of een koppeling naar een ander document.', + chooseDocumentToLink: 'Kies een document om naar te linken', + chooseFromExisting: 'Kies uit bestaande', + chooseLabel: 'Kies {{label}}', + collapseAll: 'Alles samenvouwen', + customURL: 'Eigen URL', + editLabelData: 'Bewerk gegevens van {{label}}', + editLink: 'Link bewerken', + editRelationship: 'Relatie Relatie', + enterURL: 'Voer een URL in', + internalLink: 'Interne koppeling', + itemsAndMore: '{{items}} en {{count}} meer', + labelRelationship: '{{label}} relatie', + latitude: 'Breedtegraad', + linkType: 'Koppelingstype', + linkedTo: 'Gekoppeld aan aan <0>{{label}}', + longitude: 'Lengtegraad', + newLabel: 'Nieuw(e) {{label}}', + openInNewTab: 'Openen in nieuw tabblad', + passwordsDoNotMatch: 'Wachtwoorden komen niet overeen.', + relatedDocument: 'Gerelateerd document', + relationTo: 'Relatie tot', + removeRelationship: 'Relatie Verwijderen', + removeUpload: 'Verwijder Upload', + saveChanges: 'Bewaar aanpassingen', + searchForBlock: 'Zoeken naar een blok', + selectExistingLabel: 'Selecteer bestaand(e) {{label}}', + selectFieldsToEdit: 'Selecteer velden om te bewerken', + showAll: 'Alles tonen', + swapRelationship: 'Relatie Wisselen', + swapUpload: 'Upload Verwisselen', + textToDisplay: 'Tekst om weer te geven', + toggleBlock: 'Blok togglen', + uploadNewLabel: 'Upload nieuw(e) {{label}}', + }, + general: { + aboutToDelete: + 'U staat op het punt om {{label}} <1>{{title}} te verwijderen. Weet u het zeker?', + aboutToDeleteCount_many: 'Je staat op het punt {{count}} {{label}} te verwijderen', + aboutToDeleteCount_one: 'Je staat op het punt {{count}} {{label}} te verwijderen', + aboutToDeleteCount_other: 'Je staat op het punt {{count}} {{label}} te verwijderen', + addBelow: 'Onderaan toevoegen', + addFilter: 'Filter toevoegen', + adminTheme: 'Adminthema', + and: 'En', + applyChanges: 'Breng wijzigingen aan', + ascending: 'Oplopend', + automatic: 'Automatisch', + backToDashboard: 'Terug naar dashboard', + cancel: 'Annuleren', + changesNotSaved: + 'Uw wijzigingen zijn niet bewaard. Als u weggaat zullen de wijzigingen verloren gaan.', + close: 'Dichtbij', + collapse: 'Samenvouwen', + collections: 'Collecties', + columnToSort: 'Kolom om te sorteren', + columns: 'Kolommen', + confirm: 'Bevestigen', + confirmDeletion: 'Bevestig verwijdering', + confirmDuplication: 'Bevestig duplicatie', + copied: 'Gekopieerd', + copy: 'Kopiëren', + create: 'Aanmaken', + createNew: 'Nieuw aanmaken', + createNewLabel: 'Nieuw(e) {{label}} aanmaken', + created: 'Aangemaakt', + createdAt: 'Aangemaakt op', + creating: 'Aanmaken', + creatingNewLabel: 'Nieuw(e) {{label}} aanmaken', + dark: 'Donker', + dashboard: 'Dashboard', + delete: 'Verwijderen', + deletedCountSuccessfully: '{{count}} {{label}} succesvol verwijderd.', + deletedSuccessfully: 'Succesvol verwijderd.', + deleting: 'Verwijderen...', + descending: 'Aflopend', + deselectAllRows: 'Deselecteer alle rijen', + duplicate: 'Dupliceren', + duplicateWithoutSaving: 'Dupliceren zonder wijzigingen te bewaren', + edit: 'Bewerk', + editLabel: 'Bewerk {{label}}', + editing: 'Bewerken', + editingLabel_many: 'Bewerken {{count}} {{label}}', + editingLabel_one: 'Bewerken {{count}} {{label}}', + editingLabel_other: 'Bewerken {{count}} {{label}}', + email: 'E-mail', + emailAddress: 'E-maildres', + enterAValue: 'Waarde invoeren', + error: 'Fout', + errors: 'Fouten', + fallbackToDefaultLocale: 'Terugval naar standaardtaal', + filter: 'Filter', + filterWhere: 'Filter {{label}} waar', + filters: 'Filters', + globals: 'Globalen', + language: 'Taal', + lastModified: 'Laatst gewijzigd', + leaveAnyway: 'Toch weggaan', + leaveWithoutSaving: 'Verlaten zonder op te slaan', + light: 'Licht', + livePreview: 'Voorbeeld', + loading: 'Laden', + locale: 'Taal', + locales: 'Landinstellingen', + menu: 'Menu', + moveDown: 'Verplaats naar beneden', + moveUp: 'Verplaats naar boven', + newPassword: 'Nieuw wachtwoord', + noFiltersSet: 'Geen filters ingesteld', + noLabel: 'Geen "{{label}}"', + noOptions: 'Geen opties', + noResults: + 'Geen {{label}} gevonden. Of er bestaat nog geen {{label}}, of niets komt overeen met de hierboven gespecifieerde filters.', + noValue: 'Geen waarde', + none: 'Niets', + notFound: 'Niet gevonden', + nothingFound: 'Niets gevonden', + of: 'van', + open: 'Open', + or: 'Of', + order: 'Volgorde', + pageNotFound: 'Pagina niet gevonden', + password: 'Wachtwoord', + payloadSettings: 'Payload Instellingen', + perPage: 'Per pagina: {{limit}}', + remove: 'Verwijderen', + reset: 'Resetten', + row: 'Rij', + rows: 'Rijen', + save: 'Bewaar', + saving: 'Bewaren...', + searchBy: 'Zoeken op {{label}}', + selectAll: 'Alles selecteren {{count}} {{label}}', + selectAllRows: 'Selecteer alle rijen', + selectValue: 'Selecteer een waarde', + selectedCount: '{{count}} {{label}} geselecteerd', + showAllLabel: 'Toon alle {{label}}', + sorryNotFound: 'Sorry, er is niets dat overeen komt met uw verzoek.', + sort: 'Sorteer', + sortByLabelDirection: 'Sorteer op {{label}} {{direction}}', + stayOnThisPage: 'Blijf op deze pagina', + submissionSuccessful: 'Indiening succesvol.', + submit: 'Indienen', + successfullyCreated: '{{label}} succesvol aangemaakt.', + successfullyDuplicated: '{{label}} succesvol gedupliceerd.', + thisLanguage: 'Nederlands', + titleDeleted: '{{label}} "{{title}}" succesvol verwijderd.', + unauthorized: 'Onbevoegd', + unsavedChangesDuplicate: 'U heeft onbewaarde wijzigingen. Wilt u doorgaan met dupliceren?', + untitled: 'Zonder titel', + updatedAt: 'Aangepast op', + updatedCountSuccessfully: '{{count}} {{label}} succesvol bijgewerkt.', + updatedSuccessfully: 'Succesvol aangepast.', + updating: 'Bijwerken', + uploading: 'Uploaden', + user: 'Gebruiker', + users: 'Gebruikers', + value: 'Waarde', + welcome: 'Welkom', + }, + operators: { + contains: 'bevat', + equals: 'is gelijk aan', + exists: 'bestaat', + isGreaterThan: 'is groter dan', + isGreaterThanOrEqualTo: 'is groter dan of gelijk aan', + isIn: 'is binnen', + isLessThan: 'is kleiner dan', + isLessThanOrEqualTo: 'is kleiner dan of gelijk aan', + isLike: 'is als', + isNotEqualTo: 'is niet gelijk aan', + isNotIn: 'zit er niet in', + near: 'nabij', + }, + upload: { + crop: 'Bijsnijden', + cropToolDescription: + 'Sleep de hoeken van het geselecteerde gebied, teken een nieuw gebied of pas de waarden hieronder aan.', + dragAndDrop: 'Sleep een bestand', + dragAndDropHere: 'of sleep een bestand naar hier', + editImage: 'Afbeelding bewerken', + fileName: 'Bestandsnaam', + fileSize: 'Bestandsgrootte', + focalPoint: 'Focuspunt', + focalPointDescription: + 'Sleep het focuspunt rechtstreeks op de voorvertoning of pas de waarden hieronder aan.', + height: 'Hoogte', + lessInfo: 'Minder info', + moreInfo: 'Meer info', + previewSizes: 'Voorbeeldgroottes', + selectCollectionToBrowse: 'Selecteer een collectie om door te bladeren', + selectFile: 'Selecteer een bestand', + setCropArea: 'Stel bijsnijdgebied in', + setFocalPoint: 'Stel het brandpunt in', + sizes: 'Groottes', + sizesFor: 'Maten voor {{label}}', + width: 'Breedte', + }, + validation: { + emailAddress: 'Voer een geldig e-mailadres in.', + enterNumber: 'Voer een geldig nummer in.', + fieldHasNo: 'Dit veld heeft geen {{label}}', + greaterThanMax: '{{value}} is groter dan de maximaal toegestane {{label}} van {{max}}.', + invalidInput: 'Dit veld heeft een ongeldige invoer.', + invalidSelection: 'Dit veld heeft een ongeldige selectie.', + invalidSelections: 'Dit veld heeft de volgende ongeldige selecties:', + lessThanMin: '{{value}} is kleiner dan de minimaal toegestane {{label}} van {{min}}.', + limitReached: 'Limiet bereikt, er kunnen slechts {{max}} items worden toegevoegd.', + longerThanMin: + 'Deze waarde moet langer zijn dan de minimale lengte van {{minLength}} tekens.', + notValidDate: '"{{value}}" is geen geldige datum.', + required: 'Dit veld is verplicht.', + requiresAtLeast: 'Dit veld vereist minstens {{count}} {{label}}.', + requiresNoMoreThan: 'Dit veld vereist niet meer dan {{count}} {{label}}.', + requiresTwoNumbers: 'Dit veld vereist twee nummers.', + shorterThanMax: 'Dit veld moet korter zijn dan de maximale lengte van {{maxLength}} tekens.', + trueOrFalse: 'Dit veld kan alleen waar of onwaar zijn.', + validUploadID: 'Dit veld is geen geldige upload-ID.', + }, + version: { + type: 'Type', + aboutToPublishSelection: + 'Je staat op het punt om alle {{label}} in de selectie te publiceren. Weet je het zeker?', + aboutToRestore: + 'U staat op het punt dit {{label}} document te herstellen in de staat waarin het zich bevond op {{versionDate}}.', + aboutToRestoreGlobal: + 'U staat op het punt om de global {{label}} te herstellen in de staat waarin het zich bevond op {{versionDate}}.', + aboutToRevertToPublished: + 'U staat op het punt om de wijzigingen van dit document terug te draaien naar de gepubliceerde staat. Weet u het zeker?', + aboutToUnpublish: + 'U staat op het punt om de publicatie van dit document ongedaan te maken. Weet u het zeker?', + aboutToUnpublishSelection: + 'You are about to unpublish all {{label}} in the selection. Are you sure?', + autosave: 'Automatisch bewaren', + autosavedSuccessfully: 'Succesvol automatisch bewaard.', + autosavedVersion: 'Automatisch bewaarde versie', + changed: 'Gewijzigd', + compareVersion: 'Vergelijk versie met:', + confirmPublish: 'Bevestig publiceren', + confirmRevertToSaved: 'Bevestig terugdraaien naar bewaarde versie', + confirmUnpublish: 'Bevestig depubliceren', + confirmVersionRestoration: 'Bevestig te herstellen versie', + currentDocumentStatus: 'Huidig {{docStatus}} document', + draft: 'Concept', + draftSavedSuccessfully: 'Concept succesvol bewaard.', + lastSavedAgo: 'Laatst opgeslagen {{distance}} geleden', + noFurtherVersionsFound: 'Geen verdere versies gevonden', + noRowsFound: 'Geen {{label}} gevonden', + preview: 'Voorbeeld', + problemRestoringVersion: 'Er was een probleem bij het herstellen van deze versie', + publish: 'Publiceren', + publishChanges: 'Publiceer wijzigingen', + published: 'Gepubliceerd', + publishing: 'Publicatie', + restoreThisVersion: 'Herstel deze versie', + restoredSuccessfully: 'Herstelling succesvol.', + restoring: 'Herstellen...', + revertToPublished: 'Terugdraaien naar gepubliceerde versie', + reverting: 'Terugdraaien...', + saveDraft: 'Bewaar concept', + selectLocales: 'Selecteer locales om weer te geven', + selectVersionToCompare: 'Selecteer een versie om te vergelijken', + showLocales: 'Toon locales:', + showingVersionsFor: 'Versies tonen voor:', + status: 'Status', + unpublish: 'Publicatie ongedaan maken', + unpublishing: 'Publicatie ongedaan maken...', + version: 'Versie', + versionCount_many: '{{count}} versies gevonden', + versionCount_none: 'Geen versies gevonden', + versionCount_one: '{{count}} versie gevonden', + versionCount_other: '{{count}} versies gevonden', + versionCreatedOn: '{{version}} aangemaakt op:', + versionID: 'Versie-ID', + versions: 'Versies', + viewingVersion: 'Bekijk versie voor {{entityLabel}} {{documentTitle}}', + viewingVersionGlobal: 'Bekijk versie voor global {{entityLabel}}', + viewingVersions: 'Bekijk versies voor {{entityLabel}} {{documentTitle}}', + viewingVersionsGlobal: '`Bekijk versies voor global {{entityLabel}}', + }, + }, +} diff --git a/packages/translations/src/languages/pl.ts b/packages/translations/src/languages/pl.ts new file mode 100644 index 0000000000..31339337ab --- /dev/null +++ b/packages/translations/src/languages/pl.ts @@ -0,0 +1,399 @@ +import type { Language } from '../types.js' + +export const pl: Language = { + dateFNSKey: 'pl', + translations: { + authentication: { + account: 'Konto', + accountOfCurrentUser: 'Konto bieżącego użytkownika', + alreadyActivated: 'Już aktywowano', + alreadyLoggedIn: 'Już zalogowano', + apiKey: 'Klucz API', + backToLogin: 'Powrót do logowania', + beginCreateFirstUser: 'Aby rozpocząć, utwórz pierwszego użytkownika', + changePassword: 'Zmień hasło', + checkYourEmailForPasswordReset: + 'Sprawdź email, na który wysłano link, który pozwoli Ci bezpiecznie zresetować hasło.', + confirmGeneration: 'Potwierdź wygenerowanie', + confirmPassword: 'Potwierdź hasło', + createFirstUser: 'Utwórz pierwszego użytkownika', + emailNotValid: 'Podany email jest nieprawidłowy', + emailSent: 'Wysłano email', + enableAPIKey: 'Aktywuj klucz API', + failedToUnlock: 'Nie udało się odblokować', + forceUnlock: 'Wymuś odblokowanie', + forgotPassword: 'Zresetuj hasło', + forgotPasswordEmailInstructions: + 'Proszę podaj swój email. Otrzymasz wiadomość z instrukcjami, jak zresetować hasło.', + forgotPasswordQuestion: 'Nie pamiętasz hasła?', + generate: 'Wygeneruj', + generateNewAPIKey: 'Wygeneruj nowy klucz API', + generatingNewAPIKeyWillInvalidate: + 'Wygenerowanie nowego klucza API <1>unieważni poprzedni klucz. Czy na pewno chcesz kontynuować?', + lockUntil: 'Zablokuj do', + logBackIn: 'Zaloguj się ponownie', + logOut: 'Wyloguj', + loggedIn: 'Aby zalogować się na inne konto, najpierw się <0>wyloguj.', + loggedInChangePassword: + 'Aby zmienić hasło, przejdź do swojego <0>konta i tam edytuj swoje hasło.', + loggedOutInactivity: 'Zostałeś wylogowany z powodu braku aktywności.', + loggedOutSuccessfully: 'Zostałeś pomyślnie wylogowany.', + login: 'Zaloguj', + loginAttempts: 'Próby logowania', + loginUser: 'Zaloguj użytkownika', + loginWithAnotherUser: 'Aby zalogować się na inne konto, najpierw się <0>wyloguj.', + logout: 'Wyloguj', + logoutUser: 'Wyloguj użytkownika', + newAPIKeyGenerated: 'Wygenerowano nowy klucz API.', + newAccountCreated: + 'Właśnie utworzono nowe konto, w celu uzyskania dostępu do {{serverURL}}. Kliknij poniższy link lub wklej go do przeglądarki, aby zweryfikować swój adres email: {{verificationURL}}.
    Po zweryfikowaniu adresu email będziesz mógł się pomyślnie zalogować.', + newPassword: 'Nowe hasło', + resetPassword: 'Zresetuj hasło', + resetPasswordExpiration: 'Zresetuj czas wygaśnięcia hasła', + resetPasswordToken: 'Zresetuj token hasła', + resetYourPassword: 'Zresetuj swoje hasło', + stayLoggedIn: 'Pozostań zalogowany', + successfullyUnlocked: 'Pomyślnie odblokowano', + unableToVerify: 'Nie można zweryfikować', + verified: 'Zweryfikowano', + verifiedSuccessfully: 'Pomyślnie zweryfikowany', + verify: 'Zweryfikuj', + verifyUser: 'Zweryfikuj użytkownika', + verifyYourEmail: 'Zweryfikuj swój email', + youAreInactive: + 'Nie byłeś aktywny od dłuższego czasu i wkrótce zostaniesz automatycznie wylogowany dla własnego bezpieczeństwa. Czy chcesz pozostać zalogowany?', + youAreReceivingResetPassword: + 'Otrzymałeś tę wiadomość, ponieważ Ty (lub ktoś inny) poprosiłeś o zresetowanie hasła do Twojego konta. Kliknij poniższy link lub wklej go w przeglądarce, aby zakończyć proces:', + youDidNotRequestPassword: + 'Jeśli nie prosiłeś o zmianę hasła, zignoruj tę wiadomość, a Twoje hasło pozostanie niezmienione.', + }, + error: { + accountAlreadyActivated: 'To konto zostało już aktywowane.', + autosaving: 'Wystąpił problem podczas automatycznego zapisywania tego dokumentu.', + correctInvalidFields: 'Popraw nieprawidłowe pola.', + deletingFile: '', + deletingTitle: + 'Wystąpił błąd podczas usuwania {{title}}. Proszę, sprawdź swoje połączenie i spróbuj ponownie.', + emailOrPasswordIncorrect: 'Podany adres e-mail lub hasło jest nieprawidłowe.', + followingFieldsInvalid_one: 'To pole jest nieprawidłowe:', + followingFieldsInvalid_other: 'Następujące pola są nieprawidłowe:', + incorrectCollection: 'Nieprawidłowa kolekcja', + invalidFileType: 'Nieprawidłowy typ pliku', + invalidFileTypeValue: 'Nieprawidłowy typ pliku: {{value}}', + loadingDocument: 'Wystapił problem podczas ładowania dokumentu o ID {{id}}.', + missingEmail: 'Brak adresu email.', + missingIDOfDocument: 'Brak ID dokumentu do aktualizacji.', + missingIDOfVersion: 'Brak ID wersji', + missingRequiredData: 'Brak wymaganych danych.', + noFilesUploaded: 'Nie przesłano żadnych plików.', + noMatchedField: 'Nie znaleziono pasującego pola dla "{{label}}"', + noUser: 'Brak użytkownika', + notAllowedToAccessPage: 'Nie masz dostępu do tej strony.', + notAllowedToPerformAction: 'Nie możesz wykonać tej akcji.', + notFound: 'Żądany zasób nie został znaleziony.', + previewing: 'Wystąpił problem podczas podglądu tego dokumentu.', + problemUploadingFile: 'Wystąpił problem podczas przesyłania pliku.', + tokenInvalidOrExpired: 'Token jest nieprawidłowy lub wygasł.', + unPublishingDocument: 'Wystąpił problem podczas cofania publikacji tego dokumentu.', + unableToDeleteCount: 'Nie można usunąć {{count}} z {{total}} {{label}}.', + unableToUpdateCount: 'Nie można zaktualizować {{count}} z {{total}} {{label}}.', + unauthorized: 'Brak dostępu, musisz być zalogowany.', + unknown: 'Wystąpił nieznany błąd.', + unspecific: 'Wystąpił błąd', + userLocked: + 'Ten użytkownik został zablokowany z powodu zbyt wielu nieudanych prób logowania.', + valueMustBeUnique: 'Wartość musi być unikalna', + verificationTokenInvalid: 'Token weryfikacyjny jest nieprawidłowy.', + }, + fields: { + addLabel: 'Dodaj {{label}}', + addLink: 'Dodaj Link', + addNew: 'Dodaj nowy', + addNewLabel: 'Dodaj nowy {{label}}', + addRelationship: 'Dodaj Relację', + addUpload: 'Dodaj ładowanie', + block: 'Blok', + blockType: 'Typ Bloku', + blocks: 'Bloki', + chooseBetweenCustomTextOrDocument: + 'Wybierz między wprowadzeniem niestandardowego tekstowego adresu URL a linkiem do innego dokumentu.', + chooseDocumentToLink: 'Wybierz dokument, do którego chcesz utworzyć łącze', + chooseFromExisting: 'Wybierz z istniejących', + chooseLabel: 'Wybierz {{label}}', + collapseAll: 'Zwiń wszystko', + customURL: 'Niestandardowy adres URL', + editLabelData: 'Edytuj dane {{label}}', + editLink: 'Edytuj Link', + editRelationship: 'Edytuj Relację', + enterURL: 'Wpisz adres URL', + internalLink: 'Link wewnętrzny', + itemsAndMore: '{{items}} i {{count}} więcej', + labelRelationship: 'Relacja {{label}}', + latitude: 'Szerokość', + linkType: 'Typ łącza', + linkedTo: 'Połączony z <0>{{label}}', + longitude: 'Długość geograficzna', + newLabel: 'Nowy {{label}}', + openInNewTab: 'Otwórz w nowej karcie', + passwordsDoNotMatch: 'Hasła nie pasują', + relatedDocument: 'Powiązany dokument', + relationTo: 'Powiązany z', + removeRelationship: 'Usuń Relację', + removeUpload: 'Usuń Wrzucone', + saveChanges: 'Zapisz zmiany', + searchForBlock: 'Szukaj bloku', + selectExistingLabel: 'Wybierz istniejący {{label}}', + selectFieldsToEdit: 'Wybierz pola do edycji', + showAll: 'Pokaż wszystkie', + swapRelationship: 'Zamiana Relacji', + swapUpload: 'Zamień Wrzucone', + textToDisplay: 'Tekst do wyświetlenia', + toggleBlock: 'Przełącz blok', + uploadNewLabel: 'Wrzuć nowy {{label}}', + }, + general: { + aboutToDelete: 'Zamierzasz usunąć {{label}} <1>{{title}}. Jesteś pewien?', + aboutToDeleteCount_many: 'Zamierzasz usunąć {{count}} {{label}}', + aboutToDeleteCount_one: 'Zamierzasz usunąć {{count}} {{label}}', + aboutToDeleteCount_other: 'Zamierzasz usunąć {{count}} {{label}}', + addBelow: 'Dodaj poniżej', + addFilter: 'Dodaj filtr', + adminTheme: 'Motyw administratora', + and: 'i', + applyChanges: 'Zastosuj zmiany', + ascending: 'Rosnąco', + automatic: 'Automatyczny', + backToDashboard: 'Powrót do panelu', + cancel: 'Anuluj', + changesNotSaved: + 'Twoje zmiany nie zostały zapisane. Jeśli teraz wyjdziesz, stracisz swoje zmiany.', + close: 'Zamknij', + collapse: 'Zwiń', + collection: 'Kolekcja', + collections: 'Kolekcje', + columnToSort: 'Kolumna sortowania', + columns: 'Kolumny', + confirm: 'Potwierdź', + confirmDeletion: 'Potwierdź usunięcie', + confirmDuplication: 'Potwierdź duplikację', + copied: 'Skopiowano', + copy: 'Skopiuj', + create: 'Stwórz', + createNew: 'Stwórz nowy', + createNewLabel: 'Stwórz nowy {{label}}', + created: 'Utworzono', + createdAt: 'Data utworzenia', + creating: 'Tworzenie', + creatingNewLabel: 'Tworzenie nowego {{label}}', + dark: 'Ciemny', + dashboard: 'Panel', + delete: 'Usuń', + deletedCountSuccessfully: 'Pomyślnie usunięto {{count}} {{label}}.', + deletedSuccessfully: 'Pomyślnie usunięto.', + deleting: 'Usuwanie...', + descending: 'Malejąco', + deselectAllRows: 'Odznacz wszystkie wiersze', + duplicate: 'Zduplikuj', + duplicateWithoutSaving: 'Zduplikuj bez zapisywania zmian', + edit: 'Edytuj', + editLabel: 'Edytuj {{label}}', + editing: 'Edycja', + editingLabel_many: 'Edytowanie {{count}} {{label}}', + editingLabel_one: 'Edytowanie {{count}} {{label}}', + editingLabel_other: 'Edytowanie {{count}} {{label}}', + email: 'Email', + emailAddress: 'Adres email', + enterAValue: 'Wpisz wartość', + error: 'Błąd', + errors: 'Błędy', + fallbackToDefaultLocale: 'Powrót do domyślnych ustawień regionalnych', + filter: 'Filtr', + filterWhere: 'Filtruj gdzie', + filters: 'Filtry', + globals: 'Globalne', + language: 'Język', + lastModified: 'Ostatnio zmodyfikowany', + leaveAnyway: 'Wyjdź mimo to', + leaveWithoutSaving: 'Wyjdź bez zapisywania', + light: 'Jasny', + livePreview: 'Podgląd', + loading: 'Ładowanie', + locale: 'Ustawienia regionalne', + locales: 'Ustawienia regionalne', + menu: 'Menu', + moveDown: 'Przesuń niżej', + moveUp: 'Przesuń wyżej', + newPassword: 'Nowe hasło', + noFiltersSet: 'Brak ustawionych filtrów', + noLabel: '', + noOptions: 'Brak opcji', + noResults: + 'Nie znaleziono {{label}}. Być może {{label}} jeszcze nie istnieje, albo żaden nie pasuje do filtrów określonych powyżej.', + noValue: 'Brak wartości', + none: 'Nic', + notFound: 'Nie znaleziono', + nothingFound: 'Nic nie znaleziono', + of: 'z', + open: 'Otwórz', + or: 'lub', + order: 'Kolejność', + pageNotFound: 'Strona nie znaleziona', + password: 'Hasło', + payloadSettings: 'Ustawienia Payload', + perPage: 'Na stronę: {{limit}}', + remove: 'Usuń', + reset: 'Zresetuj', + row: 'Wiersz', + rows: 'Wiersze', + save: 'Zapisz', + saving: 'Zapisywanie...', + searchBy: 'Szukaj według', + selectAll: 'Wybierz wszystkie {{count}} {{label}}', + selectAllRows: 'Wybierz wszystkie wiersze', + selectValue: 'Wybierz wartość', + selectedCount: 'Wybrano {{count}} {{label}}', + showAllLabel: 'Pokaż wszystkie {{label}}', + sorryNotFound: 'Przepraszamy — nie ma nic, co odpowiadałoby twojemu zapytaniu.', + sort: 'Sortuj', + sortByLabelDirection: 'Sortuj według {{label}} {{direction}}', + stayOnThisPage: 'Pozostań na stronie', + submissionSuccessful: 'Zgłoszenie zakończone powodzeniem.', + submit: 'Zatwierdź', + successfullyCreated: 'Pomyślnie utworzono {{label}}.', + successfullyDuplicated: 'Pomyślnie zduplikowano {{label}}', + thisLanguage: 'Polski', + titleDeleted: 'Pomyślnie usunięto {{label}} {{title}}', + unauthorized: 'Brak autoryzacji', + unsavedChangesDuplicate: 'Masz niezapisane zmiany. Czy chcesz kontynuować duplikowanie?', + untitled: 'Bez nazwy', + updatedAt: 'Data edycji', + updatedCountSuccessfully: 'Pomyślnie zaktualizowano {{count}} {{label}}.', + updatedSuccessfully: 'Aktualizacja zakończona sukcesem.', + updating: 'Aktualizacja', + uploading: 'Przesyłanie', + user: 'użytkownik', + users: 'użytkownicy', + value: 'Wartość', + welcome: 'Witaj', + }, + operators: { + contains: 'zawiera', + equals: 'równe', + exists: 'istnieje', + isGreaterThan: 'jest większy niż', + isGreaterThanOrEqualTo: 'jest większe lub równe', + isIn: 'jest w', + isLessThan: 'jest mniejsze niż', + isLessThanOrEqualTo: 'jest mniejsze lub równe', + isLike: 'jest jak', + isNotEqualTo: 'nie jest równe', + isNotIn: 'nie ma go w', + near: 'blisko', + }, + upload: { + crop: 'Przytnij', + cropToolDescription: + 'Przeciągnij narożniki wybranego obszaru, narysuj nowy obszar lub dostosuj poniższe wartości.', + dragAndDrop: 'Przeciągnij i upuść plik', + dragAndDropHere: 'lub złap i upuść plik tutaj', + editImage: 'Edytuj obraz', + fileName: 'Nazwa pliku', + fileSize: 'Rozmiar pliku', + focalPoint: 'Punkt centralny', + focalPointDescription: + 'Przeciągnij punkt centralny bezpośrednio na podglądzie lub dostosuj wartości poniżej.', + height: 'Wysokość', + lessInfo: 'Mniej informacji', + moreInfo: 'Więcej informacji', + previewSizes: 'Rozmiary podglądu', + selectCollectionToBrowse: 'Wybierz kolekcję aby przejrzeć', + selectFile: 'Wybierz plik', + setCropArea: 'Ustaw obszar kadrowania', + setFocalPoint: 'Ustawić punkt ogniskowy', + sizes: 'Rozmiary', + sizesFor: 'Rozmiary dla {{label}}', + width: 'Szerokość', + }, + validation: { + emailAddress: 'Wprowadź poprawny adres email.', + enterNumber: 'Wprowadź poprawny numer telefonu.', + fieldHasNo: 'To pole nie posiada {{label}}', + greaterThanMax: + '{{value}} jest większe niż maksymalnie dozwolony {{label}} wynoszący {{max}}.', + invalidInput: 'To pole zawiera nieprawidłowe dane.', + invalidSelection: 'To pole ma nieprawidłowy wybór.', + invalidSelections: 'To pole zawiera następujące, nieprawidłowe wybory:', + lessThanMin: '{{value}} jest mniejsze niż minimalnie dozwolony {{label}} wynoszący {{min}}.', + limitReached: 'Osiągnięto limit, można dodać tylko {{max}} elementów.', + longerThanMin: 'Ta wartość musi być dłuższa niż minimalna długość znaków: {{minLength}}.', + notValidDate: '"{{value}}" nie jest prawidłową datą.', + required: 'To pole jest wymagane.', + requiresAtLeast: 'To pole wymaga co najmniej {{count}} {{label}}.', + requiresNoMoreThan: 'To pole może posiadać co najmniej {{count}} {{label}}.', + requiresTwoNumbers: 'To pole wymaga dwóch liczb.', + shorterThanMax: 'Ta wartość musi być krótsza niż maksymalna długość znaków: {{maxLength}}.', + trueOrFalse: "To pole może mieć wartość tylko 'true' lub 'false'.", + validUploadID: 'To pole nie jest prawidłowym identyfikatorem przesyłania.', + }, + version: { + type: 'Typ', + aboutToPublishSelection: + 'Za chwilę opublikujesz wszystkie {{label}} w zaznaczeniu. Jesteś pewny?', + aboutToRestore: + 'Zamierzasz przywrócić dokument {{label}} do stanu, w jakim znajdował się w dniu {{versionDate}}.', + aboutToRestoreGlobal: + 'Zamierzasz przywrócić globalny rekord {{label}} do stanu, w którym znajdował się w dniu {{versionDate}}.', + aboutToRevertToPublished: + 'Zamierzasz przywrócić zmiany w tym dokumencie do stanu opublikowanego. Jesteś pewien?', + aboutToUnpublish: 'Zamierzasz cofnąć publikację tego dokumentu. Jesteś pewien?', + aboutToUnpublishSelection: + 'Zamierzasz cofnąć publikację wszystkich {{label}} w zaznaczeniu. Jesteś pewny?', + autosave: 'Autozapis', + autosavedSuccessfully: 'Pomyślnie zapisano automatycznie.', + autosavedVersion: 'Wersja zapisana automatycznie', + changed: 'Zmieniono', + compareVersion: 'Porównaj wersję z:', + confirmPublish: 'Potwierdź publikację', + confirmRevertToSaved: 'Potwierdź powrót do zapisanego', + confirmUnpublish: 'Potwierdź cofnięcie publikacji', + confirmVersionRestoration: 'Potwierdź przywrócenie wersji', + currentDocumentStatus: 'Bieżący status {{docStatus}} dokumentu', + draft: 'Szkic', + draftSavedSuccessfully: 'Wersja robocza została pomyślnie zapisana.', + lastSavedAgo: 'Ostatnio zapisane {{distance}} temu', + noFurtherVersionsFound: 'Nie znaleziono dalszych wersji', + noRowsFound: 'Nie znaleziono {{label}}', + preview: 'Podgląd', + problemRestoringVersion: 'Wystąpił problem podczas przywracania tej wersji', + publish: 'Publikuj', + publishChanges: 'Opublikuj zmiany', + published: 'Opublikowano', + publising: 'Publikacja', + restoreThisVersion: 'Przywróć tę wersję', + restoredSuccessfully: 'Przywrócono pomyślnie.', + restoring: 'Przywracanie...', + revertToPublished: 'Przywróć do opublikowanego', + reverting: 'Cofanie...', + saveDraft: 'Zapisz szkic', + selectLocales: 'Wybierz ustawienia regionalne do wyświetlenia', + selectVersionToCompare: 'Wybierz wersję do porównania', + showLocales: 'Pokaż ustawienia regionalne:', + showingVersionsFor: 'Wyświetlanie wersji dla:', + status: 'Status', + unpublish: 'Cofnij publikację', + unpublishing: 'Cofanie publikacji...', + version: 'Wersja', + versionCount_many: 'Znalezionych wersji: {{count}}', + versionCount_none: 'Nie znaleziono wersji', + versionCount_one: 'Znaleziono {{count}} wersję', + versionCount_other: 'Znaleziono {{count}} wersji', + versionCreatedOn: 'Wersja {{version}} utworzona:', + versionID: 'ID wersji', + versions: 'Wersje', + viewingVersion: 'Przeglądanie wersji dla {{entityLabel}} {{documentTitle}}', + viewingVersionGlobal: 'Przeglądanie wersji dla globalnej kolekcji {{entityLabel}}', + viewingVersions: 'Przeglądanie wersji {{entityLabel}} {{documentTitle}}', + viewingVersionsGlobal: 'Przeglądanie wersji dla globalnej kolekcji {{entityLabel}}', + }, + }, +} diff --git a/packages/translations/src/languages/pt.ts b/packages/translations/src/languages/pt.ts new file mode 100644 index 0000000000..c0d3b07681 --- /dev/null +++ b/packages/translations/src/languages/pt.ts @@ -0,0 +1,398 @@ +import type { Language } from '../types.js' + +export const pt: Language = { + dateFNSKey: 'pt', + translations: { + authentication: { + account: 'Conta', + accountOfCurrentUser: 'Conta do usuário ativo', + alreadyActivated: 'Conta já ativada', + alreadyLoggedIn: 'Login já realizado', + apiKey: 'Chave da API', + backToLogin: 'Voltar para login', + beginCreateFirstUser: 'Para começar, crie seu primeiro usuário.', + changePassword: 'Mudar senha', + checkYourEmailForPasswordReset: + 'Verifique seu email para um link que permitirá que você redefina sua senha com segurança.', + confirmGeneration: 'Confirmar Geração', + confirmPassword: 'Confirmar Senha', + createFirstUser: 'Criar primeiro usuário', + emailNotValid: 'O email fornecido não é válido', + emailSent: 'Email Enviado', + enableAPIKey: 'Habilitar Chave API', + failedToUnlock: 'Falha ao desbloquear', + forceUnlock: 'Forçar Desbloqueio', + forgotPassword: 'Esqueci a senha', + forgotPasswordEmailInstructions: + 'Por favor, preencha seu email abaixo. Você receberá um email com instruções para gerar uma nova senha', + forgotPasswordQuestion: 'Esqueceu a senha?', + generate: 'Gerar', + generateNewAPIKey: 'Gerar nova chave API', + generatingNewAPIKeyWillInvalidate: + 'Gerar uma nova chave API <1>invalidará a chave anterior. Você tem certeza que deseja prosseguir?', + lockUntil: 'Bloquear Até', + logBackIn: 'Fazer login novamente', + logOut: 'Log out', + loggedIn: 'Para fazer login como outro usuário, você deve fazer o <0>log out antes.', + loggedInChangePassword: + 'Para mudar a sua senha, acesse a sua <0>conta e edite sua senha lá.', + loggedOutInactivity: 'Você foi desconectado devido a inatividade.', + loggedOutSuccessfully: 'Log out efetuado com sucesso.', + login: 'Login', + loginAttempts: 'Tentativas de Login', + loginUser: 'Iniciar sessão', + loginWithAnotherUser: + 'Para fazer login como outro usuário, você deve fazer o <0>log out antes.', + logout: 'Logout', + logoutUser: 'Encerrar sessão', + newAPIKeyGenerated: 'Nova Chave API Gerada.', + newAccountCreated: + 'Uma nova conta acaba de ser criada para que você possa acessar {{serverURL}} Por favor, clique no link a seguir ou cole a URL abaixo no seu navegador para verificar seu email: {{verificationURL}}
    Após a verificação de email, você será capaz de fazer o login.', + newPassword: 'Nova Senha', + resetPassword: 'Redefinir Senha', + resetPasswordExpiration: 'Tempo Limite para Redefinição de Senha', + resetPasswordToken: 'Token para Redefinição de Senha', + resetYourPassword: 'Redefinir Sua Senha', + stayLoggedIn: 'Manter sessão ativa', + successfullyUnlocked: 'Desbloqueado com sucesso', + unableToVerify: 'Não foi possível verificar', + verified: 'Verificado', + verifiedSuccessfully: 'Verificado com Sucesso', + verify: 'Verificar', + verifyUser: 'Verificar Usuário', + verifyYourEmail: 'Verifique seu email', + youAreInactive: + 'Você não está ativo há algum tempo e sua sessão será automaticamente finalizada em breve, para sua própria segurança. Você gostaria de manter a sessão ativa?', + youAreReceivingResetPassword: + 'Você está recebendo essa mensagem porque você (ou outra pessoa) requisitou a redefinição de senha da sua conta. Por favor, clique no link a seguir ou cole no seu navegador para completar o processo:', + youDidNotRequestPassword: + 'Se você não fez essa requisição, por favor ignore esse email e sua senha permanecerá igual.', + }, + error: { + accountAlreadyActivated: 'Essa conta já foi ativada.', + autosaving: 'Ocorreu um problema ao salvar automaticamente esse documento.', + correctInvalidFields: 'Por favor, corrija os campos inválidos.', + deletingFile: 'Ocorreu um erro ao excluir o arquivo.', + deletingTitle: + 'Ocorreu um erro ao excluir {{title}}. Por favor, verifique sua conexão e tente novamente.', + emailOrPasswordIncorrect: 'O email ou senha fornecido está incorreto.', + followingFieldsInvalid_one: 'O campo a seguir está inválido:', + followingFieldsInvalid_other: 'Os campos a seguir estão inválidos:', + incorrectCollection: 'Coleção Incorreta', + invalidFileType: 'Tipo de arquivo inválido', + invalidFileTypeValue: 'Tipo de arquivo inválido: {{value}}', + loadingDocument: 'Ocorreu um problema ao carregar o documento com ID {{id}}.', + missingEmail: 'Email ausente.', + missingIDOfDocument: 'ID do documento a ser atualizado ausente.', + missingIDOfVersion: 'ID da versão ausente.', + missingRequiredData: 'Dados requeridos ausentes.', + noFilesUploaded: 'Nenhum arquivo foi carregado.', + noMatchedField: 'Não foi encontrado nenhum campo correspondente a "{{label}}"', + noUser: 'Nenhum Usuário', + notAllowedToAccessPage: 'Você não tem permissão para acessar essa página.', + notAllowedToPerformAction: 'Você não tem permissão para realizar essa ação.', + notFound: 'O recurso requisitado não foi encontrado.', + previewing: 'Ocorreu um problema ao visualizar esse documento.', + problemUploadingFile: 'Ocorreu um problema ao carregar o arquivo.', + tokenInvalidOrExpired: 'Token expirado ou inválido.', + unPublishingDocument: 'Ocorreu um problema ao despublicar esse documento', + unableToDeleteCount: 'Não é possível excluir {{count}} de {{total}} {{label}}.', + unableToUpdateCount: 'Não foi possível atualizar {{count}} de {{total}} {{label}}.', + unauthorized: 'Não autorizado. Você deve estar logado para fazer essa requisição', + unknown: 'Ocorreu um erro desconhecido.', + unspecific: 'Ocorreu um erro.', + userLocked: 'Esse usuário está bloqueado devido a muitas tentativas de login malsucedidas.', + valueMustBeUnique: 'Valor deve ser único', + verificationTokenInvalid: 'Token de verificação inválido.', + }, + fields: { + addLabel: 'Adicionar {{label}}', + addLink: 'Adicionar Link', + addNew: 'Adicionar novo', + addNewLabel: 'Adicionar novo {{label}}', + addRelationship: 'Adicionar Relação', + addUpload: 'Adicionar Upload', + block: 'bloco', + blockType: 'Tipo de bloco', + blocks: 'blocos', + chooseBetweenCustomTextOrDocument: + 'Escolha entre inserir um URL de texto personalizado ou vincular a outro documento.', + chooseDocumentToLink: 'Escolha um documento para vincular', + chooseFromExisting: 'Escolher entre os existentes', + chooseLabel: 'Escolher {{label}}', + collapseAll: 'Recolher todos', + customURL: 'URL personalizado', + editLabelData: 'Editar dados de {{label}}', + editLink: 'Editar Link', + editRelationship: 'Editar Relacionamento', + enterURL: 'Insira um URL', + internalLink: 'Link Interno', + itemsAndMore: '{{items}} e mais {{count}}', + labelRelationship: 'Relacionado a {{label}}', + latitude: 'Latitude', + linkType: 'Tipo de link', + linkedTo: 'Ligado a <0>{{label}}', + longitude: 'Longitude', + newLabel: 'Novo(a) {{label}}', + openInNewTab: 'Abrir em nova aba', + passwordsDoNotMatch: 'Senhas não coincidem.', + relatedDocument: 'Documento Relacionado', + relationTo: 'Relacionado a', + removeRelationship: 'Remover Relacionamento', + removeUpload: 'Remover Upload', + saveChanges: 'Salvar alterações', + searchForBlock: 'Procurar bloco', + selectExistingLabel: 'Selecionar {{label}} existente', + selectFieldsToEdit: 'Selecione os campos para editar', + showAll: 'Mostrar Tudo', + swapRelationship: 'Relação de Troca', + swapUpload: 'Substituir Upload', + textToDisplay: 'Texto a ser exibido', + toggleBlock: 'Alternar bloco', + uploadNewLabel: 'Carregar novo(a) {{label}}', + }, + general: { + aboutToDelete: 'Você está prestes a excluir o/a {{label}} <1>{{title}}. Tem certeza?', + aboutToDeleteCount_many: 'Você está prestes a deletar {{count}} {{label}}', + aboutToDeleteCount_one: 'Você está prestes a deletar {{count}} {{label}}', + aboutToDeleteCount_other: 'Você está prestes a deletar {{count}} {{label}}', + addBelow: 'Adicionar abaixo', + addFilter: 'Adicionar Filtro', + adminTheme: 'Tema do Admin', + and: 'E', + applyChanges: 'Aplicar alterações', + ascending: 'Ascendente', + automatic: 'Automático', + backToDashboard: 'Voltar para Painel de Controle', + cancel: 'Cancelar', + changesNotSaved: + 'Suas alterações não foram salvas. Se você sair agora, essas alterações serão perdidas.', + close: 'Fechar', + collapse: 'Recolher', + collections: 'Coleções', + columnToSort: 'Coluna para Ordenar', + columns: 'Colunas', + confirm: 'Confirmar', + confirmDeletion: 'Confirmar exclusão', + confirmDuplication: 'Confirmar duplicação', + copied: 'Copiado', + copy: 'Copiar', + create: 'Criar', + createNew: 'Criar Novo', + createNewLabel: 'Criar novo(a) {{label}}', + created: 'Criado', + createdAt: 'Criado Em', + creating: 'Criando', + creatingNewLabel: 'Criando novo(a) {{label}}', + dark: 'Escuro', + dashboard: 'Painel de Controle', + delete: 'Excluir', + deletedCountSuccessfully: 'Excluído {{count}} {{label}} com sucesso.', + deletedSuccessfully: 'Apagado com sucesso.', + deleting: 'Excluindo...', + descending: 'Decrescente', + deselectAllRows: 'Desmarcar todas as linhas', + duplicate: 'Duplicar', + duplicateWithoutSaving: 'Duplicar sem salvar alterações', + edit: 'Editar', + editLabel: 'Editar {{label}}', + editing: 'Editando', + editingLabel_many: 'Editando {{count}} {{label}}', + editingLabel_one: 'Editando {{count}} {{label}}', + editingLabel_other: 'Editando {{count}} {{label}}', + email: 'Email', + emailAddress: 'Endereço de Email', + enterAValue: 'Insira um valor', + error: 'Erro', + errors: 'Erros', + fallbackToDefaultLocale: 'Recuo para o local padrão', + filter: 'Filtro', + filterWhere: 'Filtrar {{label}} em que', + filters: 'Filtros', + globals: 'Globais', + language: 'Idioma', + lastModified: 'Última modificação', + leaveAnyway: 'Sair mesmo assim', + leaveWithoutSaving: 'Sair sem salvar', + light: 'Claro', + livePreview: 'Pré-visualização', + loading: 'Carregando', + locale: 'Local', + locales: 'Localizações', + menu: 'Cardápio', + moveDown: 'Mover para Baixo', + moveUp: 'Mover para Cima', + newPassword: 'Nova Senha', + noFiltersSet: 'Nenhum filtro definido', + noLabel: '', + noOptions: 'Sem opções', + noResults: + 'Nenhum {{label}} encontrado. Ou nenhum(a) {{label}} existe ainda, ou nenhum(a) corresponde aos filtros que você especificou acima.', + noValue: 'Nenhum valor', + none: 'Nenhum', + notFound: 'Não Encontrado', + nothingFound: 'Nada encontrado', + of: 'de', + open: 'Abrir', + or: 'Ou', + order: 'Ordem', + pageNotFound: 'Página não encontrada', + password: 'Senha', + payloadSettings: 'Configurações do Payload', + perPage: 'Itens por Página: {{limit}}', + remove: 'Remover', + reset: 'Redefinir', + row: 'Linha', + rows: 'Linhas', + save: 'Salvar', + saving: 'Salvando...', + searchBy: 'Buscar por {{label}}', + selectAll: 'Selecione tudo {{count}} {{label}}', + selectAllRows: 'Selecione todas as linhas', + selectValue: 'Selecione um valor', + selectedCount: '{{count}} {{label}} selecionado', + showAllLabel: 'Mostre todos {{label}}', + sorryNotFound: 'Desculpe—não há nada que corresponda à sua requisição.', + sort: 'Ordenar', + sortByLabelDirection: 'Ordenar por {{label}} {{direction}}', + stayOnThisPage: 'Permanecer nessa página', + submissionSuccessful: 'Envio bem-sucedido.', + submit: 'Enviar', + successfullyCreated: '{{label}} criado com sucesso.', + successfullyDuplicated: '{{label}} duplicado com sucesso.', + thisLanguage: 'Português', + titleDeleted: '{{label}} {{title}} excluído com sucesso.', + unauthorized: 'Não autorizado', + unsavedChangesDuplicate: + 'Você tem mudanças não salvas. Você gostaria de continuar a duplicar?', + untitled: 'Sem título', + updatedAt: 'Atualizado Em', + updatedCountSuccessfully: 'Atualizado {{count}} {{label}} com sucesso.', + updatedSuccessfully: 'Atualizado com sucesso.', + updating: 'Atualizando', + uploading: 'Fazendo upload', + user: 'usuário', + users: 'usuários', + value: 'Valor', + welcome: 'Boas vindas', + }, + operators: { + contains: 'contém', + equals: 'igual', + exists: 'existe', + isGreaterThan: 'é maior que', + isGreaterThanOrEqualTo: 'é maior ou igual a', + isIn: 'está em', + isLessThan: 'é menor que', + isLessThanOrEqualTo: 'é menor ou igual a', + isLike: 'é como', + isNotEqualTo: 'não é igual a', + isNotIn: 'não está em', + near: 'perto', + }, + upload: { + crop: 'Cultura', + cropToolDescription: + 'Arraste as bordas da área selecionada, desenhe uma nova área ou ajuste os valores abaixo.', + dragAndDrop: 'Arraste e solte um arquivo', + dragAndDropHere: 'ou arraste um arquivo aqui', + editImage: 'Editar imagem', + fileName: 'Nome do Arquivo', + fileSize: 'Tamanho do Arquivo', + focalPoint: 'Ponto Focal', + focalPointDescription: + 'Arraste o ponto focal diretamente na pré-visualização ou ajuste os valores abaixo.', + height: 'Altura', + lessInfo: 'Ver menos', + moreInfo: 'Ver mais', + previewSizes: 'Tamanhos de Pré-visualização', + selectCollectionToBrowse: 'Selecione uma Coleção para Navegar', + selectFile: 'Selecione um arquivo', + setCropArea: 'Definir área de corte', + setFocalPoint: 'Definir ponto focal', + sizes: 'Tamanhos', + sizesFor: 'Tamanhos para {{label}}', + width: 'Largura', + }, + validation: { + emailAddress: 'Por favor, insira um endereço de email válido.', + enterNumber: 'Por favor, insira um número válido.', + fieldHasNo: 'Esse campo não contém {{label}}', + greaterThanMax: '{{value}} é maior que o máximo permitido de {{label}} que é {{max}}.', + invalidInput: 'Esse campo tem um conteúdo inválido.', + invalidSelection: 'Esse campo tem uma seleção inválida.', + invalidSelections: "'Esse campo tem as seguintes seleções inválidas:'", + lessThanMin: '{{value}} é menor que o mínimo permitido de {{label}} que é {{min}}.', + limitReached: 'Limite atingido, apenas {{max}} itens podem ser adicionados.', + longerThanMin: 'Esse valor deve ser maior do que o mínimo de {{minLength}} characters.', + notValidDate: '"{{value}}" não é uma data válida.', + required: 'Esse campo é obrigatório.', + requiresAtLeast: 'Esse campo requer no máximo {{count}} {{label}}.', + requiresNoMoreThan: 'Esse campo requer pelo menos {{count}} {{label}}.', + requiresTwoNumbers: 'Esse campo requer dois números.', + shorterThanMax: 'Esse valor deve ser menor do que o máximo de {{maxLength}} caracteres.', + trueOrFalse: 'Esse campo pode ser apenas verdadeiro (true) ou falso (false)', + validUploadID: "'Esse campo não é um ID de upload válido.'", + }, + version: { + type: 'Tipo', + aboutToPublishSelection: + 'Você está prestes a publicar todos os {{label}} da seleção. Tem certeza?', + aboutToRestore: + 'Você está prestes a restaurar o documento {{label}} para o estado em que ele se encontrava em {{versionDate}}.', + aboutToRestoreGlobal: + 'Você está prestes a restaurar o Global {{label}} para o estado em que ele se encontrava em {{versionDate}}.', + aboutToRevertToPublished: + 'Você está prestes a reverter as alterações desse documento para seu estado de publicação. Tem certeza?', + aboutToUnpublish: 'Você está prestes a despublicar esse documento. Tem certeza?', + aboutToUnpublishSelection: + 'Você está prestes a cancelar a publicação de todos os {{label}} na seleção. Tem certeza?', + autosave: 'Salvamento automático', + autosavedSuccessfully: 'Salvamento automático com sucesso.', + autosavedVersion: 'Versão de salvamento automático', + changed: 'Alterado', + compareVersion: 'Comparar versão com:', + confirmPublish: 'Confirmar publicação', + confirmRevertToSaved: 'Confirmar a reversão para o salvo', + confirmUnpublish: 'Confirmar despublicação', + confirmVersionRestoration: 'Confirmar Restauração de versão', + currentDocumentStatus: 'Documento {{docStatus}} atual', + draft: 'Rascunho', + draftSavedSuccessfully: 'Rascunho salvo com sucesso.', + lastSavedAgo: 'Última gravação há {{distance}}', + noFurtherVersionsFound: 'Nenhuma outra versão encontrada', + noRowsFound: 'Nenhum(a) {{label}} encontrado(a)', + preview: 'Pré-visualização', + problemRestoringVersion: 'Ocorreu um problema ao restaurar essa versão', + publish: 'Publicar', + publishChanges: 'Publicar alterações', + published: 'Publicado', + publishing: 'Publicação', + restoreThisVersion: 'Restaurar essa versão', + restoredSuccessfully: 'Restaurado com sucesso.', + restoring: 'Restaurando...', + revertToPublished: 'Reverter para publicado', + reverting: 'Revertendo...', + saveDraft: 'Salvar rascunho', + selectLocales: 'Selecione as localizações para exibir', + selectVersionToCompare: 'Selecione uma versão para comparar', + showLocales: 'Exibir localizações:', + showingVersionsFor: 'Mostrando versões para:', + status: 'Status', + unpublish: 'Despublicar', + unpublishing: 'Despublicando...', + version: 'Versão', + versionCount_many: '{{count}} versões encontradas', + versionCount_none: 'Nenhuma versão encontrada', + versionCount_one: '{{count}} versão encontrada', + versionCount_other: '{{count}} versões encontradas', + versionCreatedOn: '{{version}} criada em:', + versionID: 'ID da versão', + versions: 'Versões', + viewingVersion: 'Visualizando versão para o/a {{entityLabel}} {{documentTitle}}', + viewingVersionGlobal: '`Visualizando versão para o global {{entityLabel}}', + viewingVersions: 'Visualizando versões para o/a {{entityLabel}} {{documentTitle}}', + viewingVersionsGlobal: '`Visualizando versões para o global {{entityLabel}}', + }, + }, +} diff --git a/packages/translations/src/all/rn.sh b/packages/translations/src/languages/rn.sh similarity index 100% rename from packages/translations/src/all/rn.sh rename to packages/translations/src/languages/rn.sh diff --git a/packages/translations/src/languages/ro.ts b/packages/translations/src/languages/ro.ts new file mode 100644 index 0000000000..18149f9653 --- /dev/null +++ b/packages/translations/src/languages/ro.ts @@ -0,0 +1,403 @@ +import type { Language } from '../types.js' + +export const ro: Language = { + dateFNSKey: 'ro', + translations: { + authentication: { + account: 'Cont', + accountOfCurrentUser: 'Contul utilizatorului curent', + alreadyActivated: 'Deja activat', + alreadyLoggedIn: 'Deja autorizat', + apiKey: 'Cheia API', + backToLogin: 'Înapoi la login', + beginCreateFirstUser: 'Pentru a începe, creați primul utilizator.', + changePassword: 'Schimbați parola', + checkYourEmailForPasswordReset: + 'Verificați emailul pentru un link care vă va permite să vă resetați parola în siguranță.', + confirmGeneration: 'Confirmați generarea', + confirmPassword: 'Confirmați parola', + createFirstUser: 'Creați primul utilizator', + emailNotValid: 'Emailul furnizat nu este valid', + emailSent: 'Email trimis', + enableAPIKey: 'Activați cheia API', + failedToUnlock: 'Nu s-a reușit deblocarea', + forceUnlock: 'Forțați deblocarea', + forgotPassword: 'Am uitat parola', + forgotPasswordEmailInstructions: + 'Vă rugăm să introduceți emailul dumneavoastră mai jos. Veți primi un mesaj de email cu instrucțiuni despre cum să vă resetați parola.', + forgotPasswordQuestion: 'Ați uitat parola?', + generate: 'Generează', + generateNewAPIKey: 'Generează o nouă cheie API', + generatingNewAPIKeyWillInvalidate: + 'Generarea unei noi chei API va <1>invalida cheia anterioară. Sunteți sigur că doriți să continuați?', + lockUntil: 'Blocați până la', + logBackIn: 'Autentificați-vă din nou', + logOut: 'Deconectează-te', + loggedIn: + 'Pentru a vă autentifica cu un alt utilizator, trebuie să vă <0>deconectați mai întâi.', + loggedInChangePassword: + 'Pentru a vă schimba parola, accesați <0>contul și editați-vă parola acolo.', + loggedOutInactivity: 'Ați fost deconectat din cauza inactivității.', + loggedOutSuccessfully: 'Ați fost deconectat cu succes.', + login: 'Autentificare', + loginAttempts: 'Încercări de autentificare', + loginUser: 'Autentificare utilizator', + loginWithAnotherUser: + 'Pentru a vă autentifica cu un alt utilizator, trebuie să vă <0>deconectați mai întâi.', + logout: 'Ieșire', + logoutUser: 'Deconectați utilizatorul', + newAPIKeyGenerated: 'Cheie nouă API generată.', + newAccountCreated: + 'A fost creat un nou cont pe care îl puteți accesa {{serverURL}} Vă rugăm să intrați pe următorul link sau să copiați URL-ul de mai jos în browserul dvs. pentru a vă verifica emailul: {{verificationURL}}
    După ce vă verificați adresa de email, vă veți putea autentifica cu succes.', + newPassword: 'Parolă nouă', + resetPassword: 'Resetează parola', + resetPasswordExpiration: 'Resetați expirarea parolei', + resetPasswordToken: 'Resetați token-ul parolei', + resetYourPassword: 'Resetați-vă parola', + stayLoggedIn: 'Rămâneți conectat', + successfullyUnlocked: 'Deblocat cu succes', + unableToVerify: 'Nu se poate verifica', + verified: 'Verificat', + verifiedSuccessfully: 'Verificat cu succes', + verify: 'Verifică', + verifyUser: 'Verifică utilizatorul', + verifyYourEmail: 'Verifică-ți emailul', + youAreInactive: + 'Nu ați mai fost activ de ceva timp și în scurt timp veți fi deconectat automat pentru propria dvs. securitate. Doriți să rămâneți conectat(ă)?', + youAreReceivingResetPassword: + 'Primiți acest mesaj deoarece dumneavoastră (sau altcineva) ați solicitat resetarea parolei pentru contul dumneavoastră. Vă rugăm să dați clic pe următorul link sau să îl copiați în browserul dvs. pentru a finaliza procesul:', + youDidNotRequestPassword: + 'Dacă nu ați solicitat acest lucru, vă rugăm să ignorați acest email și parola dvs. va rămâne neschimbată.', + }, + error: { + accountAlreadyActivated: 'Acest cont a fost deja activat.', + autosaving: 'A existat o problemă în timpul salvării automate a acestui document.', + correctInvalidFields: 'Vă rugăm să corectați datele invalide.', + deletingFile: 'S-a produs o eroare la ștergerea fișierului.', + deletingTitle: + 'S-a produs o eroare în timpul ștergerii {{title}}. Vă rugăm să verificați conexiunea și să încercați din nou.', + emailOrPasswordIncorrect: 'Adresa de e-mail sau parola este incorectă.', + followingFieldsInvalid_one: 'Următorul câmp nu este valid:', + followingFieldsInvalid_other: 'Următoarele câmpuri nu sunt valabile:', + incorrectCollection: 'Colecție incorectă', + invalidFileType: 'Tip de fișier invalid', + invalidFileTypeValue: 'Tip de fișier invalid: {{value}}', + loadingDocument: 'A existat o problemă la încărcarea documentului cu ID-ul de {{id}}.', + missingEmail: 'Lipsește emailul.', + missingIDOfDocument: 'Lipsește ID-ul documentului care trebuie actualizat.', + missingIDOfVersion: 'Lipsește ID-ul versiunii.', + missingRequiredData: 'Lipsesc datele necesare.', + noFilesUploaded: 'Nu a fost încărcat niciun fișier.', + noMatchedField: 'Nu s-a găsit niciun câmp corespunzător pentru "{{label}}"', + noUser: 'Nici un utilizator', + notAllowedToAccessPage: 'Nu aveți voie să accesați această pagină.', + notAllowedToPerformAction: 'Nu aveți voie să efectuați această acțiune.', + notFound: 'Resursa solicitată nu a fost găsită.', + previewing: 'A existat o problemă la previzualizarea acestui document.', + problemUploadingFile: 'A existat o problemă în timpul încărcării fișierului.', + tokenInvalidOrExpired: 'Tokenul este invalid sau a expirat.', + unPublishingDocument: 'A existat o problemă în timpul nepublicării acestui document.', + unableToDeleteCount: 'Nu se poate șterge {{count}} din {{total}} {{label}}.', + unableToUpdateCount: 'Nu se poate șterge {{count}} din {{total}} {{label}}.', + unauthorized: 'neautorizat, trebuie să vă conectați pentru a face această cerere.', + unknown: 'S-a produs o eroare necunoscută.', + unspecific: 'S-a produs o eroare.', + userLocked: + 'Acest utilizator este blocat din cauza unui număr prea mare de încercări de autentificare eșuate.', + valueMustBeUnique: 'Valoarea trebuie să fie unică', + verificationTokenInvalid: 'Tokenul de verificare este invalid.', + }, + fields: { + addLabel: 'Adăugați {{label}}', + addLink: 'Adăugați un link', + addNew: 'Adăugați un nou', + addNewLabel: 'Adăugați un nou {{label}}', + addRelationship: 'Adăugați o relație', + addUpload: 'Adăugați un fișier', + block: 'bloc', + blockType: 'Tip de bloc', + blocks: 'Blocuri', + chooseBetweenCustomTextOrDocument: + 'Alegeți între a introduce un text URL personalizat sau a crea un link către un alt document.', + chooseDocumentToLink: 'Alegeți un document către care să creați un link', + chooseFromExisting: 'Alegeți dintre cele existente', + chooseLabel: 'Alege {{label}}', + collapseAll: 'Colapsează toate', + customURL: 'URL personalizat', + editLabelData: 'Editați {{label}}', + editLink: 'Editați Link-ul', + editRelationship: 'Editați relația', + enterURL: 'Introduceți un URL', + internalLink: 'Link intern', + itemsAndMore: '{{items}} şi {{count}} mai multe', + labelRelationship: 'Relația cu {{label}}', + latitude: 'Latitudine', + linkType: 'Tip de link', + linkedTo: 'Legat de <0>{{label}}', + longitude: 'Longitudine', + newLabel: 'Nou {{label}}', + openInNewTab: 'Deschideți în tab nou', + passwordsDoNotMatch: 'Parolele nu corespund.', + relatedDocument: 'Document asociat', + relationTo: 'Relație cu', + removeRelationship: 'Eliminați relația', + removeUpload: 'Eliminați încărcarea', + saveChanges: 'Salvați modificările', + searchForBlock: 'Căutați un bloc', + selectExistingLabel: 'Selectați existent {{label}}', + selectFieldsToEdit: 'Selectați câmpurile de editat', + showAll: 'Afișați toate', + swapRelationship: 'Schimbați relația', + swapUpload: 'Schimbați Încărcarea', + textToDisplay: 'Text de afișat', + toggleBlock: 'Toggle bloc', + uploadNewLabel: 'Încărcați un nou {{label}}', + }, + general: { + aboutToDelete: 'Sunteți pe cale să ștergeți {{label}} <1>{{title}}. Sunteți sigur?', + aboutToDeleteCount_many: 'Sunteți pe cale să ștergeți {{count}} {{label}}', + aboutToDeleteCount_one: 'Sunteți pe cale să ștergeți {{count}} {{label}}', + aboutToDeleteCount_other: 'Sunteți pe cale să ștergeți {{count}} {{label}}', + addBelow: 'Adaugă mai jos', + addFilter: 'Adaugă filtru', + adminTheme: 'Tema Admin', + and: 'Şi', + applyChanges: 'Aplicați modificările', + ascending: 'Ascendant', + automatic: 'Automat', + backToDashboard: 'Înapoi la panoul de bord', + cancel: 'Anulați', + changesNotSaved: + 'Modificările dvs. nu au fost salvate. Dacă plecați acum, vă veți pierde modificările.', + close: 'Închide', + collapse: 'Colaps', + collections: 'Colecții', + columnToSort: 'Coloana de sortat', + columns: 'Coloane', + confirm: 'Confirmați', + confirmDeletion: 'Confirmați ștergerea', + confirmDuplication: 'Confirmați duplicarea', + copied: 'Copiat', + copy: 'Copiați', + create: 'Creează', + createNew: 'Creați unul nou', + createNewLabel: 'Creați un nou {{label}}', + created: 'Creat', + createdAt: 'Creat la', + creating: 'Creare', + creatingNewLabel: 'Crearea unui nou {{label}}', + dark: 'Dark', + dashboard: 'Panoul de bord', + delete: 'Șterge', + deletedCountSuccessfully: 'Șterse cu succes {{count}} {{label}}.', + deletedSuccessfully: 'Șters cu succes.', + deleting: 'Deleting...', + descending: 'Descendentă', + deselectAllRows: 'Deselectează toate rândurile', + duplicate: 'Duplicați', + duplicateWithoutSaving: 'Duplicați fără salvarea modificărilor', + edit: 'Editează', + editLabel: 'Editați {{label}}', + editing: 'Editare', + editingLabel_many: 'Editare {{count}} {{label}}', + editingLabel_one: 'Editare {{count}} {{label}}', + editingLabel_other: 'Editare {{count}} {{label}}', + email: 'Email', + emailAddress: 'Adresa de email', + enterAValue: 'Introduceți o valoare', + error: 'Eroare', + errors: 'Erori', + fallbackToDefaultLocale: 'Revenire la locația implicită', + filter: 'Filtru', + filterWhere: 'Filtrează {{label}} unde', + filters: 'Filtre', + globals: 'Globale', + language: 'Limba', + lastModified: 'Ultima modificare', + leaveAnyway: 'Pleacă oricum', + leaveWithoutSaving: 'Plecare fără a salva', + light: 'Light', + livePreview: 'Previzualizare', + loading: 'Încărcare', + locale: 'Localitate', + locales: 'Localuri', + menu: 'Meniu', + moveDown: 'Mutați în jos', + moveUp: 'Mutați în sus', + newPassword: 'Parolă nouă', + noFiltersSet: 'Nici un filtru setat', + noLabel: '', + noOptions: 'Fără opțiuni', + noResults: + 'Nici un {{label}} găsit. Fie nu există încă niciun {{label}}, fie niciunul nu se potrivește cu filtrele pe care le-ați specificat mai sus..', + noValue: 'Nici o valoare', + none: 'Nici unul', + notFound: 'Nu a fost găsit', + nothingFound: 'Nimic găsit', + of: 'de', + open: 'Deschide', + or: 'Sau', + order: 'ORdine', + pageNotFound: 'Pagina nu a fost găsită', + password: 'Parola', + payloadSettings: 'Setări de Payload', + perPage: 'Pe pagină: {{limit}}', + remove: 'Eliminați', + reset: 'Resetare', + row: 'Rând', + rows: 'Rânduri', + save: 'Salvează', + saving: 'Salvare...', + searchBy: 'Căutați după {{label}}', + selectAll: 'Selectați toate {{count}} {{label}}', + selectAllRows: 'Selectează toate rândurile', + selectValue: 'Selectați o valoare', + selectedCount: '{{count}} {{label}} selectate', + showAllLabel: 'Afișează toate {{eticheta}}', + sorryNotFound: 'Ne pare rău - nu există nimic care să corespundă cu cererea dvs.', + sort: 'Sortează', + sortByLabelDirection: 'Sortează după {{etichetă}} {{direcţie}}', + stayOnThisPage: 'Rămâneți pe această pagină', + submissionSuccessful: 'Trimitere cu succes.', + submit: 'Trimite', + successfullyCreated: '{{label}} creat(ă) cu succes.', + successfullyDuplicated: '{{label}} duplicat(ă) cu succes.', + thisLanguage: 'Română', + titleDeleted: '{{label}} "{{title}}" șters cu succes.', + unauthorized: 'neautorizat(ă)', + unsavedChangesDuplicate: 'Aveți modificări nesalvate. Doriți să continuați să duplicați?', + untitled: 'Fără titlu', + updatedAt: 'Actualizat la', + updatedCountSuccessfully: 'Actualizate {{count}} {{label}} cu succes.', + updatedSuccessfully: 'Actualizat cu succes.', + updating: 'Actualizare', + uploading: 'Încărcare', + user: 'Utilizator', + users: 'Utilizatori', + value: 'Valoare', + welcome: 'Bine ați venit', + }, + operators: { + contains: 'conține', + equals: 'egal cu', + exists: 'există', + isGreaterThan: 'este mai mare decât', + isGreaterThanOrEqualTo: 'este mai mare sau egal cu', + isIn: 'este în', + isLessThan: 'este mai mic decât', + isLessThanOrEqualTo: 'este mai mic decât sau egal cu', + isLike: 'este ca', + isNotEqualTo: 'nu este egal cu', + isNotIn: 'nu este în', + near: 'în apropiere de', + }, + upload: { + crop: 'Cultură', + cropToolDescription: + 'Trageți colțurile zonei selectate, desenați o nouă zonă sau ajustați valorile de mai jos.', + dragAndDrop: 'Trageți și plasați un fișier', + dragAndDropHere: 'sau trageți și plasați un fișier aici', + editImage: 'Editează imaginea', + fileName: 'Numele fișierului', + fileSize: 'Dimensiunea fișierului', + focalPoint: 'Punct central', + focalPointDescription: + 'Trageți punctul focal direct pe previzualizare sau ajustați valorile de mai jos.', + height: 'Înălțime', + lessInfo: 'Mai puține informații', + moreInfo: 'Mai multe informații', + previewSizes: 'Dimensiuni Previzualizare', + selectCollectionToBrowse: 'Selectați o colecție pentru navigare', + selectFile: 'Selectați un fișier', + setCropArea: 'Setați zona de decupare', + setFocalPoint: 'Setează punctul focal', + sizes: 'Dimensiuni', + sizesFor: 'Mărimi pentru {{label}}', + width: 'Lățime', + }, + validation: { + emailAddress: 'Vă rugăm să introduceți o adresă de email validă.', + enterNumber: 'Vă rugăm să introduceți un număr valid.', + fieldHasNo: 'Acest câmp nu are un {{label}}', + greaterThanMax: + '{{value}} este mai mare decât valoarea maximă permisă pentru {{label}} de {{max}}.', + invalidInput: 'Acest câmp are o intrare invalidă.', + invalidSelection: 'Acest câmp are o selecție invalidă.', + invalidSelections: 'Acest câmp are următoarele selecții invalide:', + lessThanMin: + '{{value}} este mai mic decât valoarea minimă permisă pentru {{label}} de {{min}}.', + limitReached: 'Limita atinsă, doar {{max}} elemente pot fi adăugate.', + longerThanMin: + 'Această valoare trebuie să fie mai mare decât lungimea minimă de {{minLength}} caractere.', + notValidDate: '"{{value}}" nu este o dată valabilă.', + required: 'Acest câmp este obligatoriu.', + requiresAtLeast: 'Acest domeniu necesită cel puțin {{count}} {{label}}.', + requiresNoMoreThan: 'Acest câmp nu necesită mai mult de {{count}} {{label}}.', + requiresTwoNumbers: 'Acest câmp necesită două numere.', + shorterThanMax: + 'Această valoare trebuie să fie mai scurtă decât lungimea maximă de {{maxLength}} caractere.', + trueOrFalse: 'Acest câmp poate fi doar egal cu true sau false.', + validUploadID: 'Acest câmp nu este un ID de încărcare valid.', + }, + version: { + type: 'Tip', + aboutToPublishSelection: + 'Sunteți pe cale să publicați toate {{label}} din selecție. Sunteți sigur?', + aboutToRestore: + 'Sunteți pe cale să readuceți acest document {{label}} în starea în care se afla la data de {{versionDate}}.', + aboutToRestoreGlobal: + 'Sunteți pe cale să readuceți {{label}} global în starea în care se afla la data de {{versionDate}}.', + aboutToRevertToPublished: + 'Sunteți pe cale să readuceți modificările aduse acestui document la starea sa publicată. Sunteți sigur?', + aboutToUnpublish: 'Sunteți pe cale să nepublicați acest document. Sunteți sigur?', + aboutToUnpublishSelection: + 'Sunteți pe punctul de a nepublica toate {{label}} din selecție. Sunteți sigur?', + autosave: 'Autosalvare', + autosavedSuccessfully: 'Autosalvare cu succes.', + autosavedVersion: 'Versiunea salvată automat.', + changed: 'Schimbat', + compareVersion: 'Comparați versiunea cu:', + confirmPublish: 'Confirmați publicarea', + confirmRevertToSaved: 'Confirmați revenirea la starea salvată', + confirmUnpublish: 'Confirmați nepublicarea', + confirmVersionRestoration: 'Confirmați restaurarea versiunii', + currentDocumentStatus: 'Documentul {{docStatus}} curent', + draft: 'Proiect', + draftSavedSuccessfully: 'Proiect salvat cu succes.', + lastSavedAgo: 'Ultima salvare acum {{distance}}', + noFurtherVersionsFound: 'Nu s-au găsit alte versiuni', + noRowsFound: 'Nu s-a găsit niciun {{label}}', + preview: 'Previzualizare', + problemRestoringVersion: 'A existat o problemă la restaurarea acestei versiuni', + publish: 'Publicați', + publishChanges: 'Publicați modificările', + published: 'Publicat', + publishin: 'Publicare', + restoreThisVersion: 'Restaurați această versiune', + restoredSuccessfully: 'Restaurat cu succes.', + restoring: 'Restaurare...', + revertToPublished: 'Reveniți la publicat', + reverting: 'Revenire...', + saveDraft: 'Salvați proiectul', + selectLocales: 'Selectați localitățile de afișat', + selectVersionToCompare: 'Selectați o versiune pentru a compara', + showLocales: 'Afișați localitățile:', + showingVersionsFor: 'Se afișează versiuni pentru:', + status: 'Status', + unpublish: 'Dezpublicare', + unpublishing: 'Dezpublicare...', + version: 'Versiune', + versionCount_many: '{{count}} versiuni găsite', + versionCount_none: 'Nici o versiune găsită', + versionCount_one: '{{count}} versiune găsită', + versionCount_other: '{{count}} versiuni găsite', + versionCreatedOn: '{{version}} creată pe:', + versionID: 'ID-ul versiunii', + versions: 'Versiuni', + viewingVersion: 'Vizualizarea versiunii pentru {{entityLabel}} {{documentTitle}}', + viewingVersionGlobal: 'Vizualizarea versiunii pentru globala {{entityLabel}}', + viewingVersions: 'Vizualizarea versiunilor pentru {{entityLabel}} {{documentTitle}}', + viewingVersionsGlobal: 'Vizualizarea versiunilor pentru globala {{entityLabel}}', + }, + }, +} diff --git a/packages/translations/src/languages/rs.ts b/packages/translations/src/languages/rs.ts new file mode 100644 index 0000000000..4a0cbc891c --- /dev/null +++ b/packages/translations/src/languages/rs.ts @@ -0,0 +1,393 @@ +import type { Language } from '../types.js' + +export const rs: Language = { + dateFNSKey: 'en-US', + translations: { + authentication: { + account: 'Налог', + accountOfCurrentUser: 'Налог тренутног корисника', + alreadyActivated: 'Већ активирано', + alreadyLoggedIn: 'Већ пријављен', + apiKey: 'АПИ кључ', + backToLogin: 'Назад на пријаву', + beginCreateFirstUser: 'На самом почетку креирај свог првог корисника', + changePassword: 'Промени лозинку', + checkYourEmailForPasswordReset: 'Проверите е-пошту и поруку са линком за промену лозинке.', + confirmGeneration: 'Потврди креирање', + confirmPassword: 'Потврди лозинку', + createFirstUser: 'Креирај првог корисника', + emailNotValid: 'Адреса е-поште није валидна', + emailSent: 'Порука е-поште прослеђена', + enableAPIKey: 'Омогући API кључ', + failedToUnlock: 'Неуспешно откључавање.', + forceUnlock: 'Принудно откључај', + forgotPassword: 'Заборављена лозинка', + forgotPasswordEmailInstructions: + 'Молимо Вас да унесете својy адресy е-поште. Примићете поруку са упутством за поновно постављање лозинке.', + forgotPasswordQuestion: 'Заборављена лозинка?', + generate: 'Генериши', + generateNewAPIKey: 'Генериши нови АПИ кључ', + generatingNewAPIKeyWillInvalidate: + 'Генерисање новог АПИ кључа ће <1>поништити претходни кључ. Да ли сте сигурни да желите наставити?', + lockUntil: 'Закључај док', + logBackIn: 'Поновна пријава', + logOut: 'Одјава', + loggedIn: 'За пријаву са другим корисничким налогом потребно је прво <0>одјавити се', + loggedInChangePassword: + 'Да бисте променили лозинку, отворите свој <0>налог и промените лозинку.', + loggedOutInactivity: 'Одјављени се због неактивности.', + loggedOutSuccessfully: 'Успешно сте одјављени', + login: 'Пријава', + loginAttempts: 'Покушаји пријаве', + loginUser: 'Пријава корисника', + loginWithAnotherUser: + 'За пријаву са другим корисничким налогом потребно је прво <0>одјавити се', + logout: 'Одјава', + logoutUser: 'Одјава корисника', + newAPIKeyGenerated: 'Нови АПИ кључ генерисан.', + newAccountCreated: + 'Нови налог је креиран. Приступите налогу кликом на {{serverURL}}. Молимо Вас кликните на следећи линк или залепите адресу која се налази испод у претраживач да бисте потврдили адресу е-поште: {{verificationURL}}
    Након што потврдите адресу е-поште можете се улоговати.', + newPassword: 'Нова лозинка', + resetPassword: 'Промена лозинке', + resetPasswordExpiration: 'Промена рока трајања лозинке', + resetPasswordToken: 'Промена лозинке токена', + resetYourPassword: 'Промени своју лозинку', + stayLoggedIn: 'Остани пријављен', + successfullyUnlocked: 'Успешно откључано', + unableToVerify: 'Није могуће потврдити', + verified: 'Потврђено', + verifiedSuccessfully: 'Успешно потврђено', + verify: 'Потврди', + verifyUser: 'Потврди корисника', + verifyYourEmail: 'Потврди своју адресу е-поште', + youAreInactive: + 'Неактивни сте већ неко време и ускоро ћете бити аутоматски одјављени због сигурности. Да ли желите остати пријављени?', + youAreReceivingResetPassword: + 'Примили сте поруку пошто сте Ви (или неко у ваше име) затражили промену лозинке налога. Молимо Вас кликните на линк или залепите адресу у свој претраживач да бисте завршили процес:', + youDidNotRequestPassword: + 'Ако нисте затражили промену лозинке игноришите ову поруку и лозинка ће остати непромењена.', + }, + error: { + accountAlreadyActivated: 'Овај налог је већ активиран.', + autosaving: 'Настао је проблем при аутоматском чувању овог документа.', + correctInvalidFields: 'Молимо исправите невалидна поља.', + deletingFile: 'Догодила се грешка при брисању датотеке.', + deletingTitle: + 'Догодила се грешка при брисању {{title}}. Проверите интернет конекцију и покушајте поново.', + emailOrPasswordIncorrect: 'Емаил или лозинка су неисправни.', + followingFieldsInvalid_one: 'Ово поље је невалидно:', + followingFieldsInvalid_other: 'Ова поља су невалидна:', + incorrectCollection: 'Невалидна колекција', + invalidFileType: 'Невалидан тип датотеке', + invalidFileTypeValue: 'Невалидан тип датотеке: {{value}}', + loadingDocument: 'Постоји проблем при учитавању документа чији је ИД {{id}}.', + missingEmail: 'Недостаје емаил.', + missingIDOfDocument: 'Недостаје ИД документа да би се ажурирао.', + missingIDOfVersion: 'Недостаје ИД верзије.', + missingRequiredData: 'Недостају обавезни подаци.', + noFilesUploaded: 'Ниједна датотека није учитана.', + noMatchedField: 'Нема подударајућих поља за "{{label}}"', + noUser: 'Нема корисника', + notAllowedToAccessPage: 'Немате дозволу за приступ овој страници.', + notAllowedToPerformAction: 'Немате дозволу за извршење ове радње.', + notFound: 'Тражени ресурс није пронађен.', + previewing: 'Постоји проблем при прегледу овог документа.', + problemUploadingFile: 'Постоји проблем при учитавању датотеке.', + tokenInvalidOrExpired: 'Токен је невалидан или је истекао.', + unPublishingDocument: 'Постоји проблем при поништавању објаве овог документа.', + unableToDeleteCount: 'Није могуће избрисати {{count}} од {{total}} {{label}}.', + unableToUpdateCount: 'Није могуће ажурирати {{count}} од {{total}} {{label}}.', + unauthorized: 'Нисте ауторизовани да бисте упутили овај захтев.', + unknown: 'Дошло је до непознате грешке.', + unspecific: 'Дошло је до грешке.', + userLocked: 'Овај корисник је закључан због превеликог броја неуспешних покушаја пријаве.', + valueMustBeUnique: 'Вредност мора бити јединствена.', + verificationTokenInvalid: 'Верификациони токен је невалидан.', + }, + fields: { + addLabel: 'Додај {{label}}', + addLink: 'Додај линк', + addNew: 'Додај нови', + addNewLabel: 'Додај нови {{label}}', + addRelationship: 'Додај релацију', + addUpload: 'Додај учитавање', + block: 'блокирање', + blockType: 'Врста блокирања', + blocks: 'блокирања', + chooseBetweenCustomTextOrDocument: + 'Изаберите између уноса прилагођеног текста адресе или линка на други документ.', + chooseDocumentToLink: 'Одаберите документ који желите линковати.', + chooseFromExisting: 'Одаберите из постојећих.', + chooseLabel: 'Одаберите {{label}}', + collapseAll: 'Скупи све', + customURL: 'Прилагођени линк', + editLabelData: 'Уреди {{label}} податке', + editLink: 'Измени линк', + editRelationship: 'Измени однос', + enterURL: 'Унеси адресу', + internalLink: 'Интерни линк', + itemsAndMore: '{{items}} и {{count}} више', + labelRelationship: '{{label}} веза', + latitude: 'Географска ширина', + linkType: 'Тип линка', + linkedTo: 'Повезани са <0>{{label}}', + longitude: 'Географска дужина', + newLabel: 'Ново {{label}}', + openInNewTab: 'Отвори у новој картици.', + passwordsDoNotMatch: 'Лозинке нису исте.', + relatedDocument: 'Повезани документ', + relationTo: 'Веза са', + removeRelationship: 'Уклони везу', + removeUpload: 'Уклони пренос', + saveChanges: 'Сачувај промене', + searchForBlock: 'Претражи блок', + selectExistingLabel: 'Одабери постојећу {{label}}', + selectFieldsToEdit: 'Одаберите поља за промену', + showAll: 'Покажи све', + swapRelationship: 'Замени везу', + swapUpload: 'Замени пренос', + textToDisplay: 'Текст за приказ', + toggleBlock: 'Пребаци блок', + uploadNewLabel: 'Учитај нови {{label}}', + }, + general: { + aboutToDelete: 'Избрисаћете {{label}} <1>{{title}}. Да ли сте сигурни?', + aboutToDeleteCount_many: 'Избрисаћете {{count}} {{label}}', + aboutToDeleteCount_one: 'Избрисаћете {{count}} {{label}}', + aboutToDeleteCount_other: 'Избрисаћете {{count}} {{label}}', + addBelow: 'Додај испод', + addFilter: 'Додај филтер', + adminTheme: 'Администраторска тема', + and: 'И', + applyChanges: 'Примени промене', + ascending: 'Узлазно', + automatic: 'Аутоматско', + backToDashboard: 'Назад на контролни панел', + cancel: 'Откажи', + changesNotSaved: 'Ваше промене нису сачуване. Ако изађете сада, изгубићете промене.', + close: 'Затвори', + collapse: 'Скупи', + collections: 'Колекције', + columnToSort: 'Колона за сортирање', + columns: 'Колоне', + confirm: 'Потврди', + confirmDeletion: 'Потврди брисање', + confirmDuplication: 'Потврди дупликацију', + copied: 'Копирано', + copy: 'Копирај', + create: 'Креирај', + createNew: 'Креирај ново', + createNewLabel: 'Креирај ново {{label}}', + created: 'Креирано', + createdAt: 'Креирано у', + creating: 'Креира се', + creatingNewLabel: 'Креирање новог {{label}}', + dark: 'Тамно', + dashboard: 'Контролни панел', + delete: 'Обриши', + deletedCountSuccessfully: 'Успешно избрисано {{count}} {{label}}.', + deletedSuccessfully: 'Успешно избрисано.', + deleting: 'Брисање...', + descending: 'Опадајуће', + deselectAllRows: 'Деселектујте све редове', + duplicate: 'Дупликат', + duplicateWithoutSaving: 'Понови без чувања промена', + edit: 'Уреди', + editLabel: 'Уреди {{label}}', + editing: 'Уређивање', + editingLabel_many: 'Уређивање {{count}} {{label}}', + editingLabel_one: 'Уређивање {{count}} {{label}}', + editingLabel_other: 'Уређивање {{count}} {{label}}', + email: 'Е-пошта', + emailAddress: 'Адреса е-поште', + enterAValue: 'Унеси вредност', + error: 'Грешка', + errors: 'Грешке', + fallbackToDefaultLocale: 'Враћање на задати језик', + filter: 'Филтер', + filterWhere: 'Филтер {{label}} где', + filters: 'Филтери', + globals: 'Глобали', + language: 'Језик', + lastModified: 'Задња промена', + leaveAnyway: 'Свеједно напусти', + leaveWithoutSaving: 'Напусти без чувања', + light: 'Светло', + livePreview: 'Преглед', + loading: 'Учитавање', + locale: 'Језик', + locales: 'Преводи', + menu: 'Мени', + moveDown: 'Помери доле', + moveUp: 'Помери горе', + newPassword: 'Нова лозинка', + noFiltersSet: 'Нема постављених филтера', + noLabel: '<Нема {{label}}>', + noOptions: 'Нема опција', + noResults: + 'Нема пронађених {{label}}. Могуће да {{label}} још увек не постоји или нема резултата у складу са постављеним филтерима.', + noValue: 'Без вредности', + none: 'Ниједан', + notFound: 'Није пронађено', + nothingFound: 'Ништа није пронађено', + of: 'Од', + open: 'Отвори', + or: 'Или', + order: 'Редослед', + pageNotFound: 'Страница није пронађена', + password: 'Лозинка', + payloadSettings: 'Payload поставке', + perPage: 'По страници: {{limit}}', + remove: 'Уклони', + reset: 'Поново постави', + row: 'Ред', + rows: 'Редови', + save: 'Сачувај', + saving: 'Чување у току...', + searchBy: 'Тражи по {{label}}', + selectAll: 'Одаберите све {{count}} {{label}}', + selectAllRows: 'Одаберите све редове', + selectValue: 'Одабери вредност', + selectedCount: '{{count}} {{label}} одабрано', + showAllLabel: 'Прикажи све {{label}}', + sorryNotFound: 'Нажалост, не постоји ништа што одговара вашем захтеву.', + sort: 'Сортирај', + sortByLabelDirection: 'Сортирај према {{label}} {{дирецтион}}', + stayOnThisPage: 'Остани на овој страници', + submissionSuccessful: 'Успешно слање', + submit: 'Потврди', + successfullyCreated: '{{label}} успешно креирано.', + successfullyDuplicated: '{{label}} успешно дуплицирано.', + thisLanguage: 'Српски (ћирилица)', + titleDeleted: '{{label}} "{{title}}" успешно обрисано.', + unauthorized: 'Нисте ауторизовани', + unsavedChangesDuplicate: 'Имате несачуване промене. Да ли желите наставити са дуплицирањем?', + untitled: 'Без наслова', + updatedAt: 'Ажурирано у', + updatedCountSuccessfully: 'Успешно ажурирано {{count}} {{label}}.', + updatedSuccessfully: 'Успешно ажурирано.', + updating: 'Ажурирање', + uploading: 'Пренос', + user: 'Корисник', + users: 'Корисници', + value: 'Вредност', + welcome: 'Добродошли', + }, + operators: { + contains: 'садржи', + equals: 'једнако', + exists: 'постоји', + isGreaterThan: 'је веће од', + isGreaterThanOrEqualTo: 'је веће од или једнако', + isIn: 'је у', + isLessThan: 'мање је од', + isLessThanOrEqualTo: 'мање је или једнако', + isLike: 'је као', + isNotEqualTo: 'није једнако', + isNotIn: 'није у', + near: 'близу', + }, + upload: { + crop: 'Исеците слику', + cropToolDescription: + 'Превуците углове изабраног подручја, нацртајте ново подручје или прилагодите вредности испод.', + dragAndDrop: 'Превуците и испустите датотеку', + dragAndDropHere: 'или превуците и испустите датотеку овде', + editImage: 'Уреди слику', + fileName: 'Име датотеке', + fileSize: 'Величина датотеке', + focalPoint: 'Централна тачка', + focalPointDescription: + 'Превуците средишњу тачку директно на преглед или прилагодите вредности испод.', + height: 'Висина', + lessInfo: 'Мање информација', + moreInfo: 'Више информација', + previewSizes: 'Величине прегледа', + selectCollectionToBrowse: 'Одаберите колекцију за преглед', + selectFile: 'Одаберите датотеку', + setCropArea: 'Поставите подручје за исечену слику', + setFocalPoint: 'Поставите централну тачку', + sizes: 'Величине', + sizesFor: 'Величине за {{label}}', + width: 'Ширина', + }, + validation: { + emailAddress: 'Молимо Вас унесите валидну емаил адресу.', + enterNumber: 'Молимо Вас унесите валидан број.', + fieldHasNo: 'Ово поље нема {{label}}', + greaterThanMax: '{{value}} прекорачује максималан дозвољени {{label}} лимит од {{max}}.', + invalidInput: 'Ово поље садржи невалидан унос.', + invalidSelection: 'Ово поље садржи невалидан одабир.', + invalidSelections: 'Ово поље има следеће невалидне одабире:', + lessThanMin: '{{value}} је испод дозвољеног минимума за {{label}} (доњи лимит је {{min}}).', + limitReached: 'Досегнут је лимит, може се додати само {{max}} ставки.', + longerThanMin: 'Ова вредност мора бити дужа од минималне дужине од {{минЛенгтх}} карактера', + notValidDate: '"{{value}}" није валидан датум.', + required: 'Ово поље је обавезно.', + requiresAtLeast: 'Ово поље захтева минимално {{count}} {{label}}.', + requiresNoMoreThan: 'Ово поље захтева не више од {{count}} {{label}}.', + requiresTwoNumbers: 'Ово поље захтева два броја.', + shorterThanMax: + 'Ова вредност мора бити краћа од максималне дужине од {{maxLength}} карактера', + trueOrFalse: 'Ово поље може бити само тачно или нетачно', + validUploadID: 'Ово поље не садржи валидан ИД преноса.', + }, + version: { + type: 'Тип', + aboutToPublishSelection: 'Управо ћете објавити све {{label}} у избору. Да ли сте сигурни?', + aboutToRestore: 'Вратићете {{label}} документ у стање у којем је био {{versionDate}}', + aboutToRestoreGlobal: 'Вратићете глобални {{label}} у стање у којем је био {{versionDate}}.', + aboutToRevertToPublished: + 'Вратићете промене у документу у објављено стање. Да ли сте сигурни?', + aboutToUnpublish: 'Поништићете објаву овог документа. Да ли сте сигурни?', + aboutToUnpublishSelection: + 'Управо ћете поништити објаву свих {{label}} у одабиру. Да ли сте сигурни?', + autosave: 'Аутоматско чување', + autosavedSuccessfully: 'Аутоматско чување успешно.', + autosavedVersion: 'Верзија аутоматски сачуваног документа', + changed: 'Промењено', + compareVersion: 'Упореди верзију са:', + confirmPublish: 'Потврди објаву', + confirmRevertToSaved: 'Потврдите враћање на сачувано', + confirmUnpublish: 'Потврдите поништавање објаве', + confirmVersionRestoration: 'Потврдите враћање верзије', + currentDocumentStatus: 'Тренутни {{docStatus}} документа', + draft: 'Нацрт', + draftSavedSuccessfully: 'Нацрт успешно сачуван.', + lastSavedAgo: 'Задњи пут сачувано пре {{distance}', + noFurtherVersionsFound: 'Нису пронађене наредне верзије', + noRowsFound: '{{label}} није пронађено', + preview: 'Преглед', + problemRestoringVersion: 'Настао је проблем при враћању ове верзије', + publish: 'Објавити', + publishChanges: 'Објави промене', + published: 'Објављено', + publishing: 'Objavljivanje', + restoreThisVersion: 'Врати ову верзију', + restoredSuccessfully: 'Успешно враћено.', + restoring: 'Враћање...', + revertToPublished: 'Врати на објављено', + reverting: 'Враћање...', + saveDraft: 'Сачувај нацрт', + selectLocales: 'Одаберите језике', + selectVersionToCompare: 'Одаберите верзију за упоређивање', + showLocales: 'Прикажи језике:', + showingVersionsFor: 'Показујем верзије за:', + status: 'Статус', + unpublish: 'Поништи објаву', + unpublishing: 'Поништавање објаве...', + version: 'Верзија', + versionCount_many: '{{count}} пронађених верзија', + versionCount_none: 'Нема пронађених верзија', + versionCount_one: '{{count}} пронађена верзија', + versionCount_other: '{{count}} пронађених верзија', + versionCreatedOn: '{{version}} креираних:', + versionID: 'Идентификатор верзије', + versions: 'Верзије', + viewingVersion: 'Преглед верзије за {{entityLabel}} {{documentTitle}}', + viewingVersionGlobal: 'Преглед верзије за глобални {{entityLabel}}', + viewingVersions: 'Преглед верзија за {{entityLabel}} {{documentTitle}}', + viewingVersionsGlobal: 'Преглед верзије за глобални {{entityLabel}}', + }, + }, +} diff --git a/packages/translations/src/languages/rsLatin.ts b/packages/translations/src/languages/rsLatin.ts new file mode 100644 index 0000000000..145c65e8b7 --- /dev/null +++ b/packages/translations/src/languages/rsLatin.ts @@ -0,0 +1,393 @@ +import type { Language } from '../types.js' + +export const rsLatin: Language = { + dateFNSKey: 'en-US', + translations: { + authentication: { + account: 'Nalog', + accountOfCurrentUser: 'Nalog trenutnog korisnika', + alreadyActivated: 'Već aktivirano', + alreadyLoggedIn: 'Već prijavljen', + apiKey: 'API ključ', + backToLogin: 'Nazad na prijavu', + beginCreateFirstUser: 'Na samom početku kreiraj svog prvog korisnika', + changePassword: 'Promeni lozinku', + checkYourEmailForPasswordReset: 'Proverite e-poštu i poruku sa linkom za promenu lozinke.', + confirmGeneration: 'Potvrdi kreiranje', + confirmPassword: 'Potvrdi lozinku', + createFirstUser: 'Kreiraj prvog korisnika', + emailNotValid: 'Adresa e-pošte nije validna', + emailSent: 'Poruka e-pošte prosleđena', + enableAPIKey: 'Omogući API ključ', + failedToUnlock: 'Neuspešno otključavanje.', + forceUnlock: 'Prinudno otključaj', + forgotPassword: 'Zaboravljena lozinka', + forgotPasswordEmailInstructions: + 'Molimo Vas da unesete svoj adresu e-pošte. Primićete poruku sa uputstvom za ponovno postavljanje lozinke.', + forgotPasswordQuestion: 'Zaboravljena lozinka?', + generate: 'Generiši', + generateNewAPIKey: 'Generiši novi API ključ', + generatingNewAPIKeyWillInvalidate: + 'Generisanje novog API ključa će <1>poništiti prethodni ključ. Da li ste sigurni da želite nastaviti?', + lockUntil: 'Zaključaj dok', + logBackIn: 'Ponovna prijava', + logOut: 'Odjava', + loggedIn: 'Za prijavu sa drugim korisničkim nalogom potrebno je prvo <0>odjaviti se', + loggedInChangePassword: + 'Da biste promenili lozinku, otvorite svoj <0>nalog i promenite lozinku.', + loggedOutInactivity: 'Odjavljeni se zbog neaktivnosti.', + loggedOutSuccessfully: 'Uspešno ste odjavljeni', + login: 'Prijava', + loginAttempts: 'Pokušaji prijave', + loginUser: 'Prijava korisnika', + loginWithAnotherUser: + 'Za prijavu sa drugim korisničkim nalogom potrebno je prvo <0>odjaviti se', + logout: 'Odjava', + logoutUser: 'Odjava korisnika', + newAPIKeyGenerated: 'Novi API ključ generisan.', + newAccountCreated: + 'Novi nalog je kreiran. Pristupite nalogu klikom na {{serverURL}}. Molimo Vas kliknite na sledeći link ili zalepite URL koji se nalazi ispod u pretraživač da biste potvrdili adresu e-pošte: {{verificationURL}}
    Nakon što potvrdite adresu e-pošte možete se ulogovati.', + newPassword: 'Nova lozinka', + resetPassword: 'Promena lozinke', + resetPasswordExpiration: 'Promena roka trajanja lozinke', + resetPasswordToken: 'Promena lozinke tokena', + resetYourPassword: 'Promeni svoju lozinku', + stayLoggedIn: 'Ostani prijavljen', + successfullyUnlocked: 'Uspešno otključano', + unableToVerify: 'Nije moguće potvrditi', + verified: 'Potvrđeno', + verifiedSuccessfully: 'Uspešno potvrđeno', + verify: 'Potvrdi', + verifyUser: 'Potvrdi korisnika', + verifyYourEmail: 'Potvrdi svoju adresu e-pošte', + youAreInactive: + 'Neaktivni ste već neko vreme i uskoro ćete biti automatski odjavljeni zbog sigurnosti. Da li želite ostati prijavljeni?', + youAreReceivingResetPassword: + 'Primili ste ovo pošto ste Vi (ili neko u vaše ime) zatražili promenu lozinke naloga. Molimo Vas kliknite na link ili zalepite URL u svoj pretraživač da biste završili proces:', + youDidNotRequestPassword: + 'Ako niste zatražili promenu lozinke ignorišite ovu poruku i lozinka će ostati nepromenjena.', + }, + error: { + accountAlreadyActivated: 'Ovaj nalog je već aktiviran.', + autosaving: 'Nastao je problem pri automatskom čuvanju ovog dokumenta.', + correctInvalidFields: 'Molimo ispravite nevalidna polja.', + deletingFile: 'Dogodila se greška pri brisanju datoteke.', + deletingTitle: + 'Dogodila se greška pri brisanju {{title}}. Proverite internet konekciju i pokušajte ponovo.', + emailOrPasswordIncorrect: 'Adresa e-pošte ili lozinka su neispravni.', + followingFieldsInvalid_one: 'Ovo polje je nevalidno:', + followingFieldsInvalid_other: 'Ova polja su nevalidna:', + incorrectCollection: 'Nevalidna kolekcija', + invalidFileType: 'Nevalidan tip datoteke', + invalidFileTypeValue: 'Nevalidan tip datoteke: {{value}}', + loadingDocument: 'Postoji problem pri učitavanju dokumenta čiji je ID {{id}}.', + missingEmail: 'Nedostaje adresa e-pošte.', + missingIDOfDocument: 'Nedostaje ID dokumenta da bi se ažurirao.', + missingIDOfVersion: 'Nedostaje ID verzije.', + missingRequiredData: 'Nedostaju obavezni podaci.', + noFilesUploaded: 'Nijedna datoteka nije učitana.', + noMatchedField: 'Nema podudarajućih polja za "{{label}}"', + noUser: 'Nema korisnika', + notAllowedToAccessPage: 'Nemate dozvolu za pristup ovoj stranici.', + notAllowedToPerformAction: 'Nemate dozvolu za izvršenje ove radnje.', + notFound: 'Traženi resurs nije pronađen.', + previewing: 'Postoji problem pri pregledu ovog dokumenta.', + problemUploadingFile: 'Postoji problem pri učitavanju datoteke.', + tokenInvalidOrExpired: 'Token je nevalidan ili je istekao.', + unPublishingDocument: 'Postoji problem pri poništavanju objave ovog dokumenta.', + unableToDeleteCount: 'Nije moguće izbrisati {{count}} od {{total}} {{label}}.', + unableToUpdateCount: 'Nije moguće ažurirati {{count}} od {{total}} {{label}}.', + unauthorized: 'Niste autorizovani da biste uputili ovaj zahtev.', + unknown: 'Došlo je do nepoznate greške.', + unspecific: 'Došlo je do greške.', + userLocked: 'Ovaj korisnik je zaključan zbog prevelikog broja neuspešnih pokušaja prijave.', + valueMustBeUnique: 'Vrednost mora biti jedinstvena.', + verificationTokenInvalid: 'Verifikacioni token je nevalidan.', + }, + fields: { + addLabel: 'Dodaj {{label}}', + addLink: 'Dodaj link', + addNew: 'Dodaj novi', + addNewLabel: 'Dodaj novi {{label}}', + addRelationship: 'Dodaj relaciju', + addUpload: 'Dodaj učitavanje', + block: 'blokiranje', + blockType: 'Vrsta blokiranja', + blocks: 'blokiranja', + chooseBetweenCustomTextOrDocument: + 'Izaberite između unosa prilagođenog teksta URL ili linka na drugi dokument.', + chooseDocumentToLink: 'Odaberite dokument koji želite linkovati.', + chooseFromExisting: 'Odaberite iz postojećih.', + chooseLabel: 'Odaberite {{label}}', + collapseAll: 'Skupi sve', + customURL: 'Prilagođeni URL', + editLabelData: 'Izmeni {{label}} podatke', + editLink: 'Izmeni link', + editRelationship: 'Izmeni odnos', + enterURL: 'Unesi URL', + internalLink: 'Interni link', + itemsAndMore: '{{items}} i {{count}} više', + labelRelationship: '{{label}} veza', + latitude: 'Geografska širina', + linkType: 'Tip linka', + linkedTo: 'Povezani sa <0>{{label}}', + longitude: 'Geografska dužina', + newLabel: 'Novo {{label}}', + openInNewTab: 'Otvori u novoj kartici.', + passwordsDoNotMatch: 'Lozinke nisu iste.', + relatedDocument: 'Povezani dokument', + relationTo: 'Veza sa', + removeRelationship: 'Ukloni vezu', + removeUpload: 'Ukloni prenos', + saveChanges: 'Sačuvaj promene', + searchForBlock: 'Pretraži blok', + selectExistingLabel: 'Odaberi postojeću {{label}}', + selectFieldsToEdit: 'Odaberite polja za promenu', + showAll: 'Pokaži sve', + swapRelationship: 'Zameni vezu', + swapUpload: 'Zameni prenos', + textToDisplay: 'Tekst za prikaz', + toggleBlock: 'Prebaci blok', + uploadNewLabel: 'Učitaj novi {{label}}', + }, + general: { + aboutToDelete: 'Izbrisaćete {{label}} <1>{{title}}. Da li ste sigurni?', + aboutToDeleteCount_many: 'Izbrisaćete {{count}} {{label}}', + aboutToDeleteCount_one: 'Izbrisaćete {{count}} {{label}}', + aboutToDeleteCount_other: 'Izbrisaćete {{count}} {{label}}', + addBelow: 'Dodaj ispod', + addFilter: 'Dodaj filter', + adminTheme: 'Administratorska tema', + and: 'I', + applyChanges: 'Primeni promene', + ascending: 'Uzlazno', + automatic: 'Automatsko', + backToDashboard: 'Nazad na kontrolni panel', + cancel: 'Otkaži', + changesNotSaved: 'Vaše promene nisu sačuvane. Ako izađete sada, izgubićete promene.', + close: 'Zatvori', + collapse: 'Skupi', + collections: 'Kolekcije', + columnToSort: 'Kolona za sortiranje', + columns: 'Kolone', + confirm: 'Potvrdi', + confirmDeletion: 'Potvrdi brisanje', + confirmDuplication: 'Potvrdi duplikaciju', + copied: 'Kopirano', + copy: 'Kopiraj', + create: 'Kreiraj', + createNew: 'Kreiraj novo', + createNewLabel: 'Kreiraj novo {{label}}', + created: 'Kreirano', + createdAt: 'Kreirano u', + creating: 'Kreira se', + creatingNewLabel: 'Kreiranje novog {{label}}', + dark: 'Tamno', + dashboard: 'Kontrolni panel', + delete: 'Obriši', + deletedCountSuccessfully: 'Uspešno izbrisano {{count}} {{label}}.', + deletedSuccessfully: 'Uspešno izbrisano.', + deleting: 'Brisanje...', + descending: 'Opadajuće', + deselectAllRows: 'Deselektujte sve redove', + duplicate: 'Duplikat', + duplicateWithoutSaving: 'Ponovi bez čuvanja promena', + edit: 'Uredi', + editLabel: 'Uredi {{label}}', + editing: 'Uređivanje', + editingLabel_many: 'Uređivanje {{count}} {{label}}', + editingLabel_one: 'Uređivanje {{count}} {{label}}', + editingLabel_other: 'Uređivanje {{count}} {{label}}', + email: 'E-pošta', + emailAddress: 'Аdresa e-pošte', + enterAValue: 'Unesi vrednost', + error: 'Greška', + errors: 'Greške', + fallbackToDefaultLocale: 'Vraćanje na zadati jezik', + filter: 'Filter', + filterWhere: 'Filter {{label}} gde', + filters: 'Filteri', + globals: 'Globali', + language: 'Jezik', + lastModified: 'Zadnja promena', + leaveAnyway: 'Svejedno napusti', + leaveWithoutSaving: 'Napusti bez čuvanja', + light: 'Svetlo', + livePreview: 'Pregled', + loading: 'Učitavanje', + locale: 'Jezik', + locales: 'Prevodi', + menu: 'Meni', + moveDown: 'Pomeri dole', + moveUp: 'Pomeri gore', + newPassword: 'Nova lozinka', + noFiltersSet: 'Nema postavljenih filtera', + noLabel: '', + noOptions: 'Nema opcija', + noResults: + 'Nema pronađenih {{label}}. Moguće da {{label}} još uvek ne postoji ili nema rezultata u skladu sa postavljenim filterima.', + noValue: 'Bez vrednosti', + none: 'Nijedan', + notFound: 'Nije pronađeno', + nothingFound: 'Ništa nije pronađeno', + of: 'Od', + open: 'Otvori', + or: 'Ili', + order: 'Redosled', + pageNotFound: 'Stranica nije pronađena', + password: 'Lozinka', + payloadSettings: 'Payload postavke', + perPage: 'Po stranici: {{limit}}', + remove: 'Ukloni', + reset: 'Ponovo postavi', + row: 'Red', + rows: 'Redovi', + save: 'Sačuvaj', + saving: 'Čuvanje u toku...', + searchBy: 'Traži po {{label}}', + selectAll: 'Odaberite sve {{count}} {{label}}', + selectAllRows: 'Odaberite sve redove', + selectValue: 'Odaberi vrednost', + selectedCount: '{{count}} {{label}} odabrano', + showAllLabel: 'Prikaži sve {{label}}', + sorryNotFound: 'Nažalost, ne postoji ništa što odgovara vašem zahtevu.', + sort: 'Sortiraj', + sortByLabelDirection: 'Sortiraj prema {{label}} {{direction}}', + stayOnThisPage: 'Ostani na ovoj stranici', + submissionSuccessful: 'Uspešno slanje', + submit: 'Potvrdi', + successfullyCreated: '{{label}} uspešno kreirano.', + successfullyDuplicated: '{{label}} uspešno duplicirano.', + thisLanguage: 'Srpski (latinica)', + titleDeleted: '{{label}} "{{title}}" uspešno obrisano.', + unauthorized: 'Niste autorizovani', + unsavedChangesDuplicate: 'Imate nesačuvane promene. Da li želite nastaviti sa dupliciranjem?', + untitled: 'Bez naslova', + updatedAt: 'Ažurirano u', + updatedCountSuccessfully: 'Uspešno ažurirano {{count}} {{label}}.', + updatedSuccessfully: 'Uspešno ažurirano.', + updating: 'Ažuriranje', + uploading: 'Prenos', + user: 'Korisnik', + users: 'Korisnici', + value: 'Vrednost', + welcome: 'Dobrodošli', + }, + operators: { + contains: 'sadrži', + equals: 'jednako', + exists: 'postoji', + isGreaterThan: 'je veće od', + isGreaterThanOrEqualTo: 'je veće od ili jednako', + isIn: 'je u', + isLessThan: 'manje je od', + isLessThanOrEqualTo: 'manje je ili jednako', + isLike: 'je kao', + isNotEqualTo: 'nije jednako', + isNotIn: 'nije unutra', + near: 'blizu', + }, + upload: { + crop: 'Isecite sliku', + cropToolDescription: + 'Prevucite uglove izabranog područja, nacrtajte novo područje ili prilagodite vrednosti ispod.', + dragAndDrop: 'Prevucite i ispustite datoteku', + dragAndDropHere: 'ili povucite i ispustite datoteku ovde', + editImage: 'Uredi sliku', + fileName: 'Ime datoteke', + fileSize: 'Veličina datoteke', + focalPoint: 'Centralna tačka', + focalPointDescription: + 'Prevucite središnju tačku direktno na pregled ili prilagodite vrednosti ispod.', + height: 'Visina', + lessInfo: 'Manje informacija', + moreInfo: 'Više informacija', + previewSizes: 'Veličine pregleda', + selectCollectionToBrowse: 'Odaberite kolekciju za pregled', + selectFile: 'Odaberite datoteku', + setCropArea: 'Postavite područje za isečenu sliku', + setFocalPoint: 'Postavite centralnu tačku', + sizes: 'Veličine', + sizesFor: 'Veličine za {{label}}', + width: 'Širina', + }, + validation: { + emailAddress: 'Molimo Vas unesite validnu email adresu.', + enterNumber: 'Molimo Vas unesite validan broj.', + fieldHasNo: 'Ovo polje nema {{label}}', + greaterThanMax: '{{value}} prekoračuje maksimalan dozvoljeni {{label}} limit od {{max}}.', + invalidInput: 'Ovo polje sadrži nevalidan unos.', + invalidSelection: 'Ovo polje sadrži nevalidan odabir.', + invalidSelections: 'Ovo polje ima sledeće nevalidne odabire:', + lessThanMin: '{{value}} je ispod dozvoljenog minimuma za {{label}} (donji limit je {{min}}).', + limitReached: 'Dosegnut je limit, može se dodati samo {{max}} stavki.', + longerThanMin: 'Ova vrednost mora biti duža od minimalne dužine od {{minLength}} karaktera', + notValidDate: '"{{value}}" nije validan datum.', + required: 'Ovo polje je obavezno.', + requiresAtLeast: 'Ovo polje zahteva minimalno {{count}} {{label}}.', + requiresNoMoreThan: 'Ovo polje zahteva ne više od {{count}} {{label}}.', + requiresTwoNumbers: 'Ovo polje zahteva dva broja.', + shorterThanMax: + 'Ova vrednost mora biti kraća od maksimalne dužine od {{maxLength}} karaktera', + trueOrFalse: 'Ovo polje može biti samo tačno ili netačno', + validUploadID: 'Ovo polje ne sadrži validan ID prenosa.', + }, + version: { + type: 'Tip', + aboutToPublishSelection: 'Upravo ćete objaviti sve {{label}} u izboru. Da li ste sigurni?', + aboutToRestore: 'Vratićete {{label}} dokument u stanje u kojem je bio {{versionDate}}', + aboutToRestoreGlobal: 'Vratićete globalni {{label}} u stanje u kojem je bio {{versionDate}}.', + aboutToRevertToPublished: + 'Vratićete promene u dokumentu u objavljeno stanje. Da li ste sigurni?', + aboutToUnpublish: 'Poništićete objavu ovog dokumenta. Da li ste sigurni?', + aboutToUnpublishSelection: + 'Upravo ćete poništiti objavu svih {{label}} u odabiru. Da li ste sigurni?', + autosave: 'Automatsko čuvanje', + autosavedSuccessfully: 'Automatsko čuvanje uspešno.', + autosavedVersion: 'Verzija automatski sačuvanog dokumenta', + changed: 'Promenjeno', + compareVersion: 'Uporedi verziju sa:', + confirmPublish: 'Potvrdi objavu', + confirmRevertToSaved: 'Potvrdite vraćanje na sačuvano', + confirmUnpublish: 'Potvrdite poništavanje objave', + confirmVersionRestoration: 'Potvrdite vraćanje verzije', + currentDocumentStatus: 'Trenutni {{docStatus}} dokumenta', + draft: 'Nacrt', + draftSavedSuccessfully: 'Nacrt uspešno sačuvan.', + lastSavedAgo: 'Zadnji put sačuvano pre {{distance}', + noFurtherVersionsFound: 'Nisu pronađene naredne verzije', + noRowsFound: '{{label}} nije pronađeno', + preview: 'Pregled', + problemRestoringVersion: 'Nastao je problem pri vraćanju ove verzije', + publish: 'Objaviti', + publishChanges: 'Objavljivanje', + published: 'Objavljeno', + publishing: 'Objavljivanje', + restoreThisVersion: 'Vrati ovu verziju', + restoredSuccessfully: 'Uspešno vraćeno.', + restoring: 'Vraćanje...', + revertToPublished: 'Vrati na objavljeno', + reverting: 'Vraćanje...', + saveDraft: 'Sačuvaj nacrt', + selectLocales: 'Odaberite jezike', + selectVersionToCompare: 'Odaberite verziju za upoređivanje', + showLocales: 'Prikaži jezike:', + showingVersionsFor: 'Pokazujem verzije za:', + status: 'Status', + unpublish: 'Poništi objavu', + unpublishing: 'Poništavanje objave...', + version: 'Verzija', + versionCount_many: '{{count}} pronađenih verzija', + versionCount_none: 'Nema pronađenih verzija', + versionCount_one: '{{count}} pronađena verzija', + versionCount_other: '{{count}} pronađenih verzija', + versionCreatedOn: '{{version}} kreiranih:', + versionID: 'ID verzije', + versions: 'Verzije', + viewingVersion: 'Pregled verzije za {{entityLabel}} {{documentTitle}}', + viewingVersionGlobal: 'Pregled verzije za globalni {{entityLabel}}', + viewingVersions: 'Pregled verzija za {{entityLabel}} {{documentTitle}}', + viewingVersionsGlobal: 'Pregled verzije za globalni {{entityLabel}}', + }, + }, +} diff --git a/packages/translations/src/languages/ru.ts b/packages/translations/src/languages/ru.ts new file mode 100644 index 0000000000..dacb23f60d --- /dev/null +++ b/packages/translations/src/languages/ru.ts @@ -0,0 +1,398 @@ +import type { Language } from '../types.js' + +export const ru: Language = { + dateFNSKey: 'ru', + translations: { + authentication: { + account: 'Аккаунт', + accountOfCurrentUser: 'Аккаунт текущего пользователя', + alreadyActivated: 'Уже активирован', + alreadyLoggedIn: 'Уже вошли в систему', + apiKey: 'API ключ', + backToLogin: 'Вернуться к входу', + beginCreateFirstUser: 'Чтобы начать - создайте первого пользователя.', + changePassword: 'Сменить пароль', + checkYourEmailForPasswordReset: + 'На ваш email отправлена ссылка, с помощью которой можно будет сбросить пароль.', + confirmGeneration: 'Подтвердить генерацию', + confirmPassword: 'Подтверждение пароля', + createFirstUser: 'Создание первого пользователя', + emailNotValid: 'Указанный адрес электронной почты неверен', + emailSent: 'Email отправлен', + enableAPIKey: 'Активировать API ключ', + failedToUnlock: 'Не удалось разблокировать', + forceUnlock: 'Принудительная разблокировка', + forgotPassword: 'Забыли пароль', + forgotPasswordEmailInstructions: + 'Пожалуйста, введите ваш email. Вы получите письмо с инструкцией по восстановлению пароля.', + forgotPasswordQuestion: 'Забыли пароль?', + generate: 'Сгенерировать', + generateNewAPIKey: 'Сгенерировать новый API ключ', + generatingNewAPIKeyWillInvalidate: + 'Генерация нового API ключа приведёт к <1>недействительности предыдущего ключа. Вы уверены, что хотите продолжить?', + lockUntil: 'Заблокировать до', + logBackIn: 'Войти снова', + logOut: 'Выйти', + loggedIn: 'Чтобы войти в другую учетную запись, сначала <0>выйдите.', + loggedInChangePassword: + 'Чтобы изменить пароль, зайдите в свой <0>аккаунт и измените пароль там.', + loggedOutInactivity: 'Вы вышли из системы из-за неактивности.', + loggedOutSuccessfully: 'Вы успешно вышли из системы.', + login: 'Войти', + loginAttempts: 'Попытки входа', + loginUser: 'Вход пользователя в систему', + loginWithAnotherUser: + 'Чтобы войти в систему под другим пользователем, необходимо сначала <0>выйти.', + logout: 'Выйти', + logoutUser: 'Вход из системы', + newAPIKeyGenerated: 'Новый API ключ сгенерирован.', + newAccountCreated: + 'Новый аккаунт был создан для доступа к {{serverURL}} Пожалуйста, кликните по следующей ссылке или вставьте в адресную строку браузера чтобы подтвердить email: {{verificationURL}}
    После подтверждения вашего email, вы сможете успешно войти в систему.', + newPassword: 'Новый пароль', + resetPassword: 'Сброс пароля', + resetPasswordExpiration: 'Сброс пароля по истечении срока действия', + resetPasswordToken: 'Токен сброса пароля', + resetYourPassword: 'Сброс вашего пароля', + stayLoggedIn: 'Остаться в системе', + successfullyUnlocked: 'Успешно разблокирован', + unableToVerify: 'Невозможно подтвердить', + verified: 'Подтверждено', + verifiedSuccessfully: 'Успешно подтверждено', + verify: 'Подтвердить', + verifyUser: 'Подтвердить пользователя', + verifyYourEmail: 'Подтвердить ваш email', + youAreInactive: + 'Вы не были активны в течение некоторого времени и скоро автоматически выйдете из системы в целях вашей безопасности. Вы хотите остаться в системе?', + youAreReceivingResetPassword: + 'Вы получили это сообщение, потому что вы (или кто-то другой) запросили сброс пароля для вашей учетной записи. Пожалуйста, нажмите на следующую ссылку или вставьте ее в браузер, чтобы завершить процесс:', + youDidNotRequestPassword: + 'Если вы не запрашивали этого, пожалуйста, проигнорируйте это письмо, и ваш пароль останется неизменным.', + }, + error: { + accountAlreadyActivated: 'Этот аккаунт уже был активирован.', + autosaving: 'При автосохранении этого документа возникла проблема.', + correctInvalidFields: 'Пожалуйста, исправьте неправильные поля.', + deletingFile: 'Произошла ошибка при удалении файла.', + deletingTitle: + 'При удалении {{title}} произошла ошибка. Пожалуйста, проверьте соединение и повторите попытку.', + emailOrPasswordIncorrect: 'Указанный email или пароль неверен.', + followingFieldsInvalid_one: 'Следующее поле недействительно:', + followingFieldsInvalid_other: 'Следующие поля недействительны:', + incorrectCollection: 'Неправильная Коллекция', + invalidFileType: 'Недопустимый тип файла', + invalidFileTypeValue: 'Недопустимый тип файла: {{value}}', + loadingDocument: 'Возникла проблема при загрузке документа с ID {{id}}.', + missingEmail: 'Отсутствует email.', + missingIDOfDocument: 'Отсутствующий ID документа для обновления.', + missingIDOfVersion: 'Отсутствует ID версии.', + missingRequiredData: 'Отсутствуют необходимые данные.', + noFilesUploaded: 'Не было загружено ни одного файла.', + noMatchedField: 'Не найдено подходящего поля для "{{label}}"', + noUser: 'Нет Пользователя', + notAllowedToAccessPage: 'Вы не имеете права доступа к этой странице.', + notAllowedToPerformAction: 'У вас нет права на выполнение этого действия.', + notFound: 'Запрашиваемый ресурс не найден.', + previewing: 'При предварительном просмотре этого документа возникла проблема.', + problemUploadingFile: 'Возникла проблема при загрузке файла.', + tokenInvalidOrExpired: 'Токен либо недействителен, либо срок его действия истек.', + unPublishingDocument: 'При отмене публикации этого документа возникла проблема.', + unableToDeleteCount: 'Не удалось удалить {{count}} из {{total}} {{label}}.', + unableToUpdateCount: 'Не удалось обновить {{count}} из {{total}} {{label}}.', + unauthorized: 'Нет доступа, вы должны войти, чтобы сделать этот запрос.', + unknown: 'Произошла неизвестная ошибка.', + unspecific: 'Произошла ошибка.', + userLocked: + 'Этот пользователь заблокирован из-за слишком большого количества неудачных попыток входа.', + valueMustBeUnique: 'Значение должно быть уникальным', + verificationTokenInvalid: 'Проверочный токен недействителен.', + }, + fields: { + addLabel: 'Добавить {{label}}', + addLink: 'Добавить ссылку', + addNew: 'Добавить новый', + addNewLabel: 'Добавить {{label}}', + addRelationship: 'Добавить Отношения', + addUpload: 'Добавить загрузку', + block: 'Блок', + blockType: 'Тип Блока', + blocks: 'Блоки', + chooseBetweenCustomTextOrDocument: + 'Выберите между вводом пользовательского текстового URL и ссылкой на другой документ.', + chooseDocumentToLink: 'Выберите документ для ссылки', + chooseFromExisting: 'Выбрать из существующих', + chooseLabel: 'Выбрать {{label}}', + collapseAll: 'Свернуть все', + customURL: 'Пользовательский URL', + editLabelData: 'Редактировать данные {{label}}', + editLink: 'Редактировать ссылку', + editRelationship: 'Редактировать Отношения', + enterURL: 'Введите URL', + internalLink: 'Внутренняя ссылка', + itemsAndMore: '{{items}} и ещё {{count}}', + labelRelationship: '{{label}} Отношения', + latitude: 'Широта', + linkType: 'Тип ссылки', + linkedTo: 'Связано с <0>{{label}}', + longitude: 'Долгота', + newLabel: 'Новый {{label}}', + openInNewTab: 'Открывать в новой вкладке', + passwordsDoNotMatch: 'Пароли не совпадают.', + relatedDocument: 'Связанный документ', + relationTo: 'Отношение к', + removeRelationship: 'Удалить связь', + removeUpload: 'Удалить загруженное', + saveChanges: 'Сохранить изменения', + searchForBlock: 'Найти Блок', + selectExistingLabel: 'Выберите существующий {{label}}', + selectFieldsToEdit: 'Выберите поля для редактирования', + showAll: 'Показать все', + swapRelationship: 'Поменять отношения', + swapUpload: 'Заменить загруженное', + textToDisplay: 'Текст для отображения', + toggleBlock: 'Переключить Блок', + uploadNewLabel: 'Загрузить новый {{label}}', + }, + general: { + aboutToDelete: 'Вы собираетесь удалить {{label}} <1>{{title}}. Вы уверены?', + aboutToDeleteCount_many: 'Вы собираетесь удалить {{count}} {{label}}', + aboutToDeleteCount_one: 'Вы собираетесь удалить {{count}} {{label}}', + aboutToDeleteCount_other: 'Вы собираетесь удалить {{count}} {{label}}', + addBelow: 'Добавить ниже', + addFilter: 'Добавить фильтр', + adminTheme: 'Тема Панели', + and: 'А также', + applyChanges: 'Применить изменения', + ascending: 'Восходящий', + automatic: 'Автоматически', + backToDashboard: 'Назад к Панели', + cancel: 'Отмена', + changesNotSaved: + 'Ваши изменения не были сохранены. Если вы сейчас уйдете, то потеряете свои изменения.', + close: 'Закрыть', + collapse: 'Свернуть', + collections: 'Коллекции', + columnToSort: 'Колонка для сортировки', + columns: 'Колонки', + confirm: 'Подтвердить', + confirmDeletion: 'Подтвердить удаление', + confirmDuplication: 'Подтвердить копирование', + copied: 'Скопировано', + copy: 'Скопировать', + create: 'Создать', + createNew: 'Создать', + createNewLabel: 'Создать новый {{label}}', + created: 'Создано', + createdAt: 'Дата создания', + creating: 'Создание', + creatingNewLabel: 'Создание нового {{label}}', + dark: 'Тёмная', + dashboard: 'Панель', + delete: 'Удалить', + deletedCountSuccessfully: 'Удалено {{count}} {{label}} успешно.', + deletedSuccessfully: 'Удален успешно.', + deleting: 'Удаление...', + descending: 'Уменьшение', + deselectAllRows: 'Снять выделение со всех строк', + duplicate: 'Дублировать', + duplicateWithoutSaving: 'Дублирование без сохранения изменений', + edit: 'Редактировать', + editLabel: 'Редактировать {{label}}', + editing: 'Редактирование', + editingLabel_many: 'Редактирование {{count}} {{label}}', + editingLabel_one: 'Редактирование {{count}} {{label}}', + editingLabel_other: 'Редактирование {{count}} {{label}}', + email: 'Email', + emailAddress: 'Email', + enterAValue: 'Введите значение', + error: 'Ошибка', + errors: 'Ошибки', + fallbackToDefaultLocale: 'Возврат к локали по умолчанию', + filter: 'Фильтр', + filterWhere: 'Где фильтровать', + filters: 'Фильтры', + globals: 'Глобальные', + language: 'Язык', + lastModified: 'Последнее изменение', + leaveAnyway: 'Все равно уйти', + leaveWithoutSaving: 'Выход без сохранения', + light: 'Светлая', + livePreview: 'Предпросмотр', + loading: 'Загрузка', + locale: 'Локаль', + locales: 'Локали', + menu: 'Меню', + moveDown: 'Сдвинуть вниз', + moveUp: 'Сдвинуть вверх', + newPassword: 'Новый пароль', + noFiltersSet: 'Фильтры не установлены', + noLabel: 'Без метки', + noOptions: 'Нет вариантов', + noResults: + 'Не найдено ни одной {{label}}. Либо {{label}} еще не существует, либо ни одна из них не соответствует фильтрам, которые вы указали выше.', + noValue: 'Нет значения', + none: 'Никто', + notFound: 'Не найдено', + nothingFound: 'Ничего не найдено', + of: 'из', + open: 'Открыть', + or: 'Или же', + order: 'Порядок', + pageNotFound: 'Страница не найдена', + password: 'Пароль', + payloadSettings: 'Настройки Payload', + perPage: 'На странице: {{limit}}', + remove: 'Удалить', + reset: 'Сброс', + row: 'Строка', + rows: 'Строки', + save: 'Сохранить', + saving: 'Сохранение...', + searchBy: 'Искать по', + selectAll: 'Выбрать все {{count}} {{label}}', + selectAllRows: 'Выбрать все строки', + selectValue: 'Выбрать значение', + selectedCount: '{{count}} {{label}} выбрано', + showAllLabel: 'Показать все {{label}}', + sorryNotFound: 'К сожалению, ничего подходящего под ваш запрос нет.', + sort: 'Сортировать', + sortByLabelDirection: 'Сортировать по {{label}} {{direction}}', + stayOnThisPage: 'Остаться на этой странице', + submissionSuccessful: 'Успешно отправлено.', + submit: 'Отправить', + successfullyCreated: '{{label}} успешно создан.', + successfullyDuplicated: '{{label}} успешно продублирован.', + thisLanguage: 'Русский', + titleDeleted: '{{label}} {{title}} успешно удалено.', + unauthorized: 'Нет доступа', + unsavedChangesDuplicate: + 'У вас есть несохраненные изменения. Вы хотите продолжить дублирование?', + untitled: 'Без названия', + updatedAt: 'Дата правки', + updatedCountSuccessfully: 'Обновлено {{count}} {{label}} успешно.', + updatedSuccessfully: 'Успешно Обновлено.', + updating: 'Обновление', + uploading: 'Загрузка', + user: 'пользователь', + users: 'пользователи', + value: 'Значение', + welcome: 'Добро пожаловать', + }, + operators: { + contains: 'содержит', + equals: 'равно', + exists: 'существует', + isGreaterThan: 'больше чем', + isGreaterThanOrEqualTo: 'больше или равно', + isIn: 'находится', + isLessThan: 'меньше чем', + isLessThanOrEqualTo: 'меньше или равно', + isLike: 'похоже', + isNotEqualTo: 'не равно', + isNotIn: 'нет в', + near: 'рядом', + }, + upload: { + crop: 'Обрезать', + cropToolDescription: + 'Перетащите углы выбранной области, нарисуйте новую область или отрегулируйте значения ниже.', + dragAndDrop: 'Перетащите файл', + dragAndDropHere: 'или перетащите файл сюда', + editImage: 'Редактировать изображение', + fileName: 'Имя файла', + fileSize: 'Размер файла', + focalPoint: 'Центральная точка', + focalPointDescription: + 'Перетащите фокусное расстояние прямо на предварительный просмотр или отрегулируйте значения ниже.', + height: 'Высота', + lessInfo: 'Меньше информации', + moreInfo: 'Больше информации', + previewSizes: 'Предварительный просмотр размеров', + selectCollectionToBrowse: 'Выберите Коллекцию для просмотра', + selectFile: 'Выберите файл', + setCropArea: 'Установите область обрезки', + setFocalPoint: 'Установить фокусное расстояние', + sizes: 'Размеры', + sizesFor: 'Размеры для {{label}}', + width: 'Ширина', + }, + validation: { + emailAddress: 'Пожалуйста, введите корректный адрес email.', + enterNumber: 'Пожалуйста, введите корректный номер.', + fieldHasNo: 'У этого поля нет {{label}}', + greaterThanMax: '{{value}} больше максимально допустимого значения {{label}} {{max}}.', + invalidInput: 'Это поле имеет недопустимое значение.', + invalidSelection: 'В этом поле выбран недопустимый вариант.', + invalidSelections: "'Это поле содержит следующие неправильные варианты:'", + lessThanMin: '{{value}} меньше минимально допустимого значения {{label}} {{min}}.', + limitReached: 'Достигнут лимит, можно добавить только {{max}} элементов.', + longerThanMin: 'Это значение должно быть больше минимальной длины символов: {{minLength}}.', + notValidDate: '"{{value}}" это не действительная дата.', + required: 'Это обязательное поле.', + requiresAtLeast: 'Это поле требует не менее {{count}} {{label}}', + requiresNoMoreThan: 'Это поле требует не более {{count}} {{label}}', + requiresTwoNumbers: 'В этом поле требуется два числа.', + shorterThanMax: 'Это значение должно быть короче максимальной длины символов {{maxLength}}.', + trueOrFalse: 'Это поле может быть равно только true или false.', + validUploadID: "'Это поле не является действительным ID загрузки.'", + }, + version: { + type: 'Тип', + aboutToPublishSelection: 'Вы собираетесь опубликовать все {{label}} в выборе. Вы уверены?', + aboutToRestore: + 'Вы собираетесь восстановить этот документ {{label}} в состояние, в котором он находился {{versionDate}}.', + aboutToRestoreGlobal: + 'Вы собираетесь восстановить глобальную запись {{label}} в состояние, в котором она находилась {{versionDate}}.', + aboutToRevertToPublished: + 'Вы собираетесь вернуть изменения этого документа к его опубликованному состоянию. Вы уверены?', + aboutToUnpublish: 'Вы собираетесь отменить публикацию этого документа. Вы уверены?', + aboutToUnpublishSelection: + 'Вы собираетесь отменить публикацию всех выбранных {{label}}. Вы уверены?', + autosave: 'Автосохранение', + autosavedSuccessfully: 'Автосохранение успешно.', + autosavedVersion: 'Автоматически сохраненная версия', + changed: 'Изменено', + compareVersion: 'Сравнить версию с:', + confirmPublish: 'Подтвердить публикацию', + confirmRevertToSaved: 'Подтвердить возврат к сохраненному', + confirmUnpublish: 'Подтвердить отмену публикации', + confirmVersionRestoration: 'Подтвердить восстановление версии', + currentDocumentStatus: 'Текущий статус {{docStatus}} документа', + draft: 'Черновик', + draftSavedSuccessfully: 'Черновик успешно сохранен.', + lastSavedAgo: 'Последний раз сохранено {{distance}} назад', + noFurtherVersionsFound: 'Другие версии не найдены', + noRowsFound: 'Не найдено {{label}}', + preview: 'Предпросмотр', + problemRestoringVersion: 'Возникла проблема с восстановлением этой версии', + publish: 'Публиковать', + publishChanges: 'Опубликовать изменения', + published: 'Опубликовано', + publishing: 'Публикация', + restoreThisVersion: 'Восстановить эту версию', + restoredSuccessfully: 'Восстановлен успешно.', + restoring: 'Восстановление...', + revertToPublished: 'Вернуться к опубликованному', + reverting: 'Возврат...', + saveDraft: 'Сохранить черновик', + selectLocales: 'Выберите локали для отображения', + selectVersionToCompare: 'Выбрать версию для сравнения', + showLocales: 'Показать локали:', + showingVersionsFor: 'Показаны версии для:', + status: 'Статус', + unpublish: 'Отменить публикацию', + unpublishing: 'Отмена публикации...', + version: 'Версия', + versionCount_many: '{{count}} версий найдено', + versionCount_none: 'Версий не найдено', + versionCount_one: '{{count}} версия найдена', + versionCount_other: 'Найдено {{count}} версий', + versionCreatedOn: '{{version}} создана:', + versionID: 'ID версии', + versions: 'Версии', + viewingVersion: 'Просмотр версии для {{entityLabel}} {{documentTitle}}', + viewingVersionGlobal: '`Просмотр версии для глобальной Коллекции {{entityLabel}}', + viewingVersions: 'Просмотр версий для {{entityLabel}} {{documentTitle}}', + viewingVersionsGlobal: '`Просмотр версии для глобальной Коллекции {{entityLabel}}', + }, + }, +} diff --git a/packages/translations/src/languages/sv.ts b/packages/translations/src/languages/sv.ts new file mode 100644 index 0000000000..ef046a869d --- /dev/null +++ b/packages/translations/src/languages/sv.ts @@ -0,0 +1,396 @@ +import type { Language } from '../types.js' + +export const sv: Language = { + dateFNSKey: 'sv', + translations: { + authentication: { + account: 'Konto', + accountOfCurrentUser: 'Konto för nuvarande användare', + alreadyActivated: 'Redan aktiverad', + alreadyLoggedIn: 'Redan inloggad', + apiKey: 'API Nyckel', + backToLogin: 'Tillbaka till inloggningen', + beginCreateFirstUser: 'För att börja, skapa din första användare.', + changePassword: 'Byt Lösenord', + checkYourEmailForPasswordReset: + 'Kontrollera din e-post efter en länk som gör att du säkert kan återställa ditt lösenord.', + confirmGeneration: 'Bekräfta Generering', + confirmPassword: 'Bekräfta Lösenord', + createFirstUser: 'Skapa första användaren', + emailNotValid: 'Angiven e-postadress är inte giltig', + emailSent: 'E-posten Skickad', + enableAPIKey: 'Aktivera API nyckel', + failedToUnlock: 'Det gick inte att låsa upp', + forceUnlock: 'Tvinga Upplåsning', + forgotPassword: 'Glömt Lösenord', + forgotPasswordEmailInstructions: + 'Vänligen ange din e-postadress nedan. Du kommer att få ett e-postmeddelande med instruktioner om hur du återställer ditt lösenord.', + forgotPasswordQuestion: 'Glömt lösenordet?', + generate: 'Generera', + generateNewAPIKey: 'Generera ny API nyckel', + generatingNewAPIKeyWillInvalidate: + 'Att generera en ny API nyckel kommer <1>ogiltigförklara föregående nyckel. Är du säker på att du vill fortsätta?', + lockUntil: 'Lås Tills', + logBackIn: 'Logga in igen', + logOut: 'Logga ut', + loggedIn: 'För att logga in med en annan användare, bör du <0>logga ut först.', + loggedInChangePassword: + 'För att ändra ditt lösenord, gå till ditt <0>konto och redigera ditt lösenord där.', + loggedOutInactivity: 'Du har blivit utloggad på grund av inaktivitet.', + loggedOutSuccessfully: 'Du har loggat ut framgångsrikt.', + login: 'Logga in', + loginAttempts: 'Inloggningsförsök', + loginUser: 'Logga in användare', + loginWithAnotherUser: + 'För att logga in med en annan användare, bör du <0>logga ut först.', + logout: 'Logga ut', + logoutUser: 'Logga ut användare', + newAPIKeyGenerated: 'Ny API Nyckel Genererad.', + newAccountCreated: + 'Ett nytt konto har precis skapats som du kan komma åt {{serverURL}} Klicka på följande länk eller klistra in webbadressen nedan i din webbläsare för att verifiera din e-post: {{verificationURL}}
    Efter att ha verifierat din e-post kommer du att kunna logga in framgångsrikt.', + newPassword: 'Nytt Lösenord', + resetPassword: 'Återställ Lösenord', + resetPasswordExpiration: 'Återställ Lösenordsutgång', + resetPasswordToken: 'Återställ Lösenord Token', + resetYourPassword: 'Återställ Ditt Lösenord', + stayLoggedIn: 'Stanna inloggad', + successfullyUnlocked: 'Låst upp framgångsrikt', + unableToVerify: 'Det går inte att Verifiera', + verified: 'Verifierad', + verifiedSuccessfully: 'Framgångsrikt Verifierad', + verify: 'Verifiera', + verifyUser: 'Verifiera Användare', + verifyYourEmail: 'Verifiera din epost', + youAreInactive: + 'Du har inte varit aktiv på ett tag och kommer inom kort att automatiskt loggas ut för din egen säkerhet. Vill du forsätta att vara inloggad?', + youAreReceivingResetPassword: + 'Du får detta för att du (eller någon annan) har begärt återställning av lösenordet för ditt konto. Klicka på följande länk eller klistra in den i din webbläsare för att slutföra processen:', + youDidNotRequestPassword: + 'Om du inte begärde detta, ignorera detta e-postmeddelande och ditt lösenord kommer att förbli oförändrat.', + }, + error: { + accountAlreadyActivated: 'Detta konto har redan aktiverats.', + autosaving: 'Det uppstod ett problem när det här dokumentet skulle sparas automatiskt.', + correctInvalidFields: 'Vänligen korrigera ogiltiga fält.', + deletingFile: 'Det gick inte att ta bort filen.', + deletingTitle: + 'Det uppstod ett fel vid borttagningen av {{title}}. Vänligen kontrollera din anslutning och försök igen.', + emailOrPasswordIncorrect: 'E-postadressen eller lösenordet som angivits är felaktigt.', + followingFieldsInvalid_one: 'Följande fält är ogiltigt:', + followingFieldsInvalid_other: 'Följande fält är ogiltiga:', + incorrectCollection: 'Felaktig Samling', + invalidFileType: 'Ogiltig filtyp', + invalidFileTypeValue: 'Ogiltig filtyp: {{value}}', + loadingDocument: 'Det gick inte att läsa in dokumentet med ID {{id}}.', + missingEmail: 'E-postadress saknas.', + missingIDOfDocument: 'Saknar ID för dokumentet som ska uppdateras.', + missingIDOfVersion: 'ID för versionen saknas.', + missingRequiredData: 'Obligatorisk data saknas.', + noFilesUploaded: 'Inga filer laddades upp.', + noMatchedField: 'Inget matchande fält hittades för "{{label}}"', + noUser: 'Ingen Användare', + notAllowedToAccessPage: 'Du får inte komma åt den här sidan.', + notAllowedToPerformAction: 'Du får inte utföra denna åtgärd.', + notFound: 'Den begärda resursen hittades inte.', + previewing: 'Det uppstod ett problem när det här dokumentet skulle förhandsgranskas.', + problemUploadingFile: 'Det uppstod ett problem när filen laddades upp.', + tokenInvalidOrExpired: 'Token är antingen ogiltig eller har löpt ut.', + unPublishingDocument: 'Det uppstod ett problem när det här dokumentet skulle avpubliceras.', + unableToDeleteCount: 'Det gick inte att ta bort {{count}} av {{total}} {{label}}.', + unableToUpdateCount: 'Det gick inte att uppdatera {{count}} av {{total}} {{label}}.', + unauthorized: 'Obehörig, du måste vara inloggad för att göra denna begäran.', + unknown: 'Ett okänt fel har uppstått.', + unspecific: 'Ett fel har uppstått.', + userLocked: 'Den här användaren är låst på grund av för många misslyckade inloggningsförsök.', + valueMustBeUnique: 'Värdet måste vara unikt', + verificationTokenInvalid: 'Verifieringstoken är ogiltig.', + }, + fields: { + addLabel: 'Lägg till {{label}}', + addLink: 'Lägg till Länk', + addNew: 'Lägg till ny', + addNewLabel: 'Lägg till ny {{label}}', + addRelationship: 'Lägg till Relation', + addUpload: 'Lägg till Uppladdning', + block: 'block', + blockType: 'Block Typ', + blocks: 'block', + chooseBetweenCustomTextOrDocument: + 'Välj mellan att ange en anpassad text-URL eller länka till ett annat dokument.', + chooseDocumentToLink: 'Välj ett dokument att länka till', + chooseFromExisting: 'Välj bland befintliga', + chooseLabel: 'Välj {{label}}', + collapseAll: 'kollapsa Alla', + customURL: 'Anpassad URL', + editLabelData: 'Redigera {{label}} data', + editLink: 'Redigera Länk', + editRelationship: 'Redigera Relation', + enterURL: 'Ange en URL', + internalLink: 'Intern länk', + itemsAndMore: '{{items}} och {{count}} mer', + labelRelationship: '{{label}} Relation', + latitude: 'Latitud', + linkType: 'Länktyp', + linkedTo: 'Länkad till <0>{{label}}', + longitude: 'Longitud', + newLabel: 'Ny {{label}}', + openInNewTab: 'Öppna i ny flik', + passwordsDoNotMatch: 'Lösenorden matchar inte.', + relatedDocument: 'Relaterat Dokument', + relationTo: 'Relation till', + removeRelationship: 'Ta Bort Relation', + removeUpload: 'Ta Bort Uppladdning', + saveChanges: 'Spara ändringar', + searchForBlock: 'Sök efter ett block', + selectExistingLabel: 'Välj befintlig {{label}}', + selectFieldsToEdit: 'Välj fält att redigera', + showAll: 'Visa Alla', + swapRelationship: 'Byt Förhållande', + swapUpload: 'Byt Uppladdning', + textToDisplay: 'Text att visa', + toggleBlock: 'Växla block', + uploadNewLabel: 'Ladda upp ny {{label}}', + }, + general: { + aboutToDelete: 'Du är på väg att ta bort {{label}} <1>{{title}}. Är du säker?', + aboutToDeleteCount_many: 'Du är på väg att ta bort {{count}} {{label}}', + aboutToDeleteCount_one: 'Du är på väg att ta bort {{count}} {{label}}', + aboutToDeleteCount_other: 'Du är på väg att ta bort {{count}} {{label}}', + addBelow: 'Lägg Till Nedanför', + addFilter: 'Lägg Till Filter', + adminTheme: 'Admin Tema', + and: 'Och', + applyChanges: 'Verkställ ändringar', + ascending: 'Stigande', + automatic: 'Automatisk', + backToDashboard: 'Tillbaka till Manöverpanelen', + cancel: 'Avbryt', + changesNotSaved: + 'Dina ändringar har inte sparats. Om du lämnar nu kommer du att förlora dina ändringar.', + close: 'Stänga', + collapse: 'Kollapsa', + collections: 'Samlingar', + columnToSort: 'Kolumn att Sortera', + columns: 'Kolumner', + confirm: 'Bekräfta', + confirmDeletion: 'Bekräfta radering', + confirmDuplication: 'Bekräfta dubblering', + copied: 'Kopierad', + copy: 'Kopiera', + create: 'Skapa', + createNew: 'Skapa Ny', + createNewLabel: 'Skapa ny {{label}}', + created: 'Skapad', + createdAt: 'Skapad Vid', + creating: 'Skapar', + creatingNewLabel: 'Skapar ny {{label}}', + dark: 'Mörk', + dashboard: 'Manöverpanel', + delete: 'Ta bort', + deletedCountSuccessfully: 'Raderade {{count}} {{label}} framgångsrikt.', + deletedSuccessfully: 'Togs bort framgångsrikt.', + deleting: 'Tar bort...', + descending: 'Fallande', + deselectAllRows: 'Avmarkera alla rader', + duplicate: 'Duplicera', + duplicateWithoutSaving: 'Duplicera utan att spara ändringar', + edit: 'Redigera', + editLabel: 'Redigera {{label}}', + editing: 'Redigerar', + editingLabel_many: 'Redigerar {{count}} {{label}}', + editingLabel_one: 'Redigerar {{count}} {{label}}', + editingLabel_other: 'Redigerar {{count}} {{label}}', + email: 'E-post', + emailAddress: 'E-postadress', + enterAValue: 'Ange ett värde', + error: 'Fel', + errors: 'Fel', + fallbackToDefaultLocale: 'Återgång till standardlokalspråk', + filter: 'Filter', + filterWhere: 'Filtrera {{label}} där', + filters: 'Filter', + globals: 'Globala', + language: 'Språk', + lastModified: 'Senast Ändrad', + leaveAnyway: 'Lämna ändå', + leaveWithoutSaving: 'Lämna utan att spara', + light: 'Ljus', + livePreview: 'Förhandsvisa', + loading: 'Läser in', + locale: 'Lokal', + locales: 'Språk', + menu: 'Meny', + moveDown: 'Flytta Ner', + moveUp: 'Flytta Upp', + newPassword: 'Nytt Lösenord', + noFiltersSet: 'Inga filter inställda', + noLabel: '', + noOptions: 'Inga alternativ', + noResults: + 'Inga {{label}} hittades. Antingen finns inga {{label}} ännu eller matchar ingen filtren du har angett ovan.', + noValue: 'Inget värde', + none: 'Ingen', + notFound: 'Hittades inte', + nothingFound: 'Inget hittades', + of: 'av', + open: 'Öppna', + or: 'Eller', + order: 'Ordning', + pageNotFound: 'Sidan hittas inte', + password: 'Lösenord', + payloadSettings: 'Payload Inställningar', + perPage: 'Per Sida: {{limit}}', + remove: 'Ta bort', + reset: 'Återställ', + row: 'Rad', + rows: 'Rader', + save: 'Spara', + saving: 'Sparar...', + searchBy: 'Sök efter {{label}}', + selectAll: 'Välj alla {{count}} {{label}}', + selectAllRows: 'Välj alla rader', + selectValue: 'Välj ett värde', + selectedCount: '{{count}} {{label}} har valts', + showAllLabel: 'Visa alla {{label}}', + sorryNotFound: 'Tyvärr–det finns inget som motsvarar din begäran.', + sort: 'Sortera', + sortByLabelDirection: 'Sortera efter {{label}} {{direction}}', + stayOnThisPage: 'Stanna på denna sida', + submissionSuccessful: 'Inlämningen Lyckades.', + submit: 'Lämna in', + successfullyCreated: '{{label}} skapades framgångsrikt.', + successfullyDuplicated: '{{label}} duplicerades framgångsrikt.', + thisLanguage: 'Svenska', + titleDeleted: '{{label}} "{{title}}" togs bort framgångsrikt.', + unauthorized: 'Obehörig', + unsavedChangesDuplicate: 'Du har osparade ändringar. Vill du fortsätta att duplicera?', + untitled: 'Namnlös', + updatedAt: 'Uppdaterades Vid', + updatedCountSuccessfully: 'Uppdaterade {{count}} {{label}} framgångsrikt.', + updatedSuccessfully: 'Uppdaterades framgångsrikt.', + updating: 'Uppdatering', + uploading: 'Uppladdning', + user: 'Användare', + users: 'Användare', + value: 'Värde', + welcome: 'Välkommen', + }, + operators: { + contains: 'innehåller', + equals: 'likar med', + exists: 'finns', + isGreaterThan: 'är större än', + isGreaterThanOrEqualTo: 'är större än eller lika med', + isIn: 'är med', + isLessThan: 'är mindre än', + isLessThanOrEqualTo: 'är mindre än eller lika med', + isLike: 'är som', + isNotEqualTo: 'är inte lika med', + isNotIn: 'är inte med', + near: 'nära', + }, + upload: { + crop: 'Skörd', + cropToolDescription: + 'Dra i hörnen på det valda området, rita ett nytt område eller justera värdena nedan.', + dragAndDrop: 'Dra och släpp en fil', + dragAndDropHere: 'eller dra och släpp en fil här', + editImage: 'Redigera bild', + fileName: 'Filnamn', + fileSize: 'Filstorlek', + focalPoint: 'Fokuspunkt', + focalPointDescription: + 'Dra fokuspunkten direkt på förhandsgranskningen eller justera värdena nedan.', + height: 'Höjd', + lessInfo: 'Mindre info', + moreInfo: 'Mer info', + previewSizes: 'Förhandsgranska Storlekar', + selectCollectionToBrowse: 'Välj en Samling att Bläddra i', + selectFile: 'Välj en fil', + setCropArea: 'Ange skärpområde', + setFocalPoint: 'Ställ in fokuspunkt', + sizes: 'Storlekar', + sizesFor: 'Storlekar för {{label}}', + width: 'Bredd', + }, + validation: { + emailAddress: 'Vänligen ange en giltig e-postadress.', + enterNumber: 'Vänligen skriv in ett giltigt nummer.', + fieldHasNo: 'Detta fält har ingen {{label}}', + greaterThanMax: '{{value}} är större än den maximalt tillåtna {{label}} av {{max}}.', + invalidInput: 'Det här fältet har en ogiltig inmatning.', + invalidSelection: 'Det här fältet har ett ogiltigt urval.', + invalidSelections: 'Det här fältet har följande ogiltiga val:', + lessThanMin: '{{value}} är mindre än den minst tillåtna {{label}} av {{min}}.', + limitReached: 'Gränsen nådd, endast {{max}} objekt kan läggas till.', + longerThanMin: 'Detta värde måste vara längre än minimilängden på {{minLength}} tecken.', + notValidDate: '"{{value}}" är inte ett giltigt datum.', + required: 'Detta fält är obligatoriskt.', + requiresAtLeast: 'Detta fält kräver minst {{count}} {{label}}.', + requiresNoMoreThan: 'Detta fält kräver inte mer än {{count}} {{label}}.', + requiresTwoNumbers: 'Detta fält kräver två nummer.', + shorterThanMax: 'Detta värde måste vara kortare än maxlängden på {{maxLength}} tecken.', + trueOrFalse: 'Detta fält kan bara vara lika med sant eller falskt.', + validUploadID: 'Det här fältet är inte ett giltigt uppladdnings-ID', + }, + version: { + type: 'Typ', + aboutToPublishSelection: 'Du är på väg att publicera alla {{label}} i urvalet. Är du säker?', + aboutToRestore: + 'Du är på väg att återställa detta {{label}} dokumentet till det tillståndet som det var den {{versionDate}}.', + aboutToRestoreGlobal: + 'Du är på väg att återställa det globala {{label}} till det tillståndet som det var den {{versionDate}}.', + aboutToRevertToPublished: + 'Du är på väg att återställa det här dokumentets ändringar till dess publicerade tillstånd. Är du säker?', + aboutToUnpublish: 'Du håller på att avpublicera detta dokumentet. Är du säker?', + aboutToUnpublishSelection: + 'Du är på väg att avpublicera alla {{label}} i urvalet. Är du säker?', + autosave: 'Automatisk sparning', + autosavedSuccessfully: 'Autosparades framgångsrikt.', + autosavedVersion: 'Autosparad version', + changed: 'Ändrad', + compareVersion: 'Jämför version med:', + confirmPublish: 'Bekräfta publicering', + confirmRevertToSaved: 'Bekräfta återgång till sparad', + confirmUnpublish: 'Bekräfta avpublicering', + confirmVersionRestoration: 'Bekräfta Versionsåterställning', + currentDocumentStatus: 'Nuvarande {{docStatus}} dokument', + draft: 'Utkast', + draftSavedSuccessfully: 'Utkastet sparades framgångsrikt.', + lastSavedAgo: 'Senast sparad för {{distance}} sedan', + noFurtherVersionsFound: 'Inga fler versioner hittades', + noRowsFound: 'Inga {{label}} hittades', + preview: 'Förhandsvisa', + problemRestoringVersion: 'Det uppstod ett problem när den här versionen skulle återställas', + publish: 'Publicera', + publishChanges: 'Publicera ändringar', + published: 'Publicerad', + publishing: 'Publicering', + restoreThisVersion: 'Återställ den här versionen', + restoredSuccessfully: 'Återställd framgångsrikt.', + restoring: 'Återställer...', + revertToPublished: 'Återgå till publicerad', + reverting: 'Återgår...', + saveDraft: 'Spara Utkast', + selectLocales: 'Välj språk att visa', + selectVersionToCompare: 'Välj en version att jämföra', + showLocales: 'Visa språk:', + showingVersionsFor: 'Visar versioner för:', + status: 'Status', + unpublish: 'Avpublicera', + unpublishing: 'Avpublicerar...', + version: 'Version', + versionCount_many: '{{count}} versioner hittades', + versionCount_none: 'Inga versioner hittades', + versionCount_one: '{{count}} version hittades', + versionCount_other: '{{count}} versioner hittades', + versionCreatedOn: '{{version}} skapad den:', + versionID: 'Versions-ID', + versions: 'Versioner', + viewingVersion: 'Visar version för {{entityLabel}} {{documentTitle}}', + viewingVersionGlobal: 'Visa version för den globala {{entityLabel}}', + viewingVersions: 'Visar versioner för {{entityLabel}} {{documentTitle}}', + viewingVersionsGlobal: 'Visa versioner för den globala {{entityLabel}}', + }, + }, +} diff --git a/packages/translations/src/languages/th.ts b/packages/translations/src/languages/th.ts new file mode 100644 index 0000000000..949901843f --- /dev/null +++ b/packages/translations/src/languages/th.ts @@ -0,0 +1,389 @@ +import type { Language } from '../types.js' + +export const th: Language = { + dateFNSKey: 'th', + translations: { + authentication: { + account: 'บัญชี', + accountOfCurrentUser: 'บัญชีปัจจุบัน', + alreadyActivated: 'เปิดใช้งานแล้ว', + alreadyLoggedIn: 'ลงชื่อเข้าใช้แล้ว', + apiKey: 'API Key', + backToLogin: 'กลับไปหน้าเข้าสู่ระบบ', + beginCreateFirstUser: 'สร้างผู้ใช้แรกเพื่อเริ่มใช้งาน', + changePassword: 'เปลี่ยนรหัสผ่าน', + checkYourEmailForPasswordReset: + 'ระบบได้ส่งอีเมลสำหรับรีเซ็ตรหัสผ่านไปที่อีเมลของคุณแล้ว โปรดเช็กอีเมลของคุณ', + confirmGeneration: 'ยืนยันการสร้าง', + confirmPassword: 'ยืนยันรหัสผ่าน', + createFirstUser: 'สร้างผู้ใช้แรก', + emailNotValid: 'อีเมลไม่ถูกต้อง', + emailSent: 'ส่งอีเมลเรียบร้อยแล้ว', + enableAPIKey: 'เปิดใช้ API Key', + failedToUnlock: 'ไม่สามารถปลดล็อกได้', + forceUnlock: 'ปลดล็อกบัญชี', + forgotPassword: 'ลืมรหัสผ่าน', + forgotPasswordEmailInstructions: + 'กรุณาใส่อีเมลของคุณ ระบบจะส่งวิธีการเปลี่ยนรหัสผ่านไปให้คุณทางอีเมล', + forgotPasswordQuestion: 'ลืมรหัสผ่าน?', + generate: 'สร้าง', + generateNewAPIKey: 'สร้าง API Key', + generatingNewAPIKeyWillInvalidate: + 'การสร้าง API Key ใหม่จะเป็นการ<1>ยกเลิก API Key เดิม คุณต้องการดำเนินการต่อหรือไม่?', + lockUntil: 'ล็อกบัญชีถึง', + logBackIn: 'เข้าสู่ระบบอีกครั้ง', + logOut: 'ออกจากระบบ', + loggedIn: 'หากต้องการเข้าสู่ระบบด้วยบัญชีอื่น กรุณา<0>ออกจากระบบก่อน', + loggedInChangePassword: 'หากต้องการเปลี่ยนรหัสผ่าน กรุณาแก้ไขที่หน้า<0>บัญชีของคุณ', + loggedOutInactivity: 'คุณได้ออกจากระบบเนื่องจากไม่มีการใช้งาน', + loggedOutSuccessfully: 'ออกจากระบบเรียบร้อยแล้ว', + login: 'เข้าสู่ระบบ', + loginAttempts: 'จำนวนครั้งการเข้าสู่ระบบ', + loginUser: 'เข้าสู่ระบบ', + loginWithAnotherUser: 'หากต้องการเข้าสู่ระบบด้วยบัญชีอื่น กรุณา<0>ออกจากระบบก่อน', + logout: 'ออกจากระบบ', + logoutUser: 'ออกจากระบบ', + newAPIKeyGenerated: 'สร้าง API Key ใหม่แล้ว', + newAccountCreated: + 'ระบบได้สร้างบัญชีผู้ใช้ให้คุณสำหรับเข้าใช้งาน {{serverURL}} เรียบร้อยแล้ว กรุณากดลิงก์ด้านล่างเพื่อยืนยันอีเมล หลังจากยืนยันอีเมลเสร็จสิ้น คุณจะสามารถเข้าใช้งานระบบได้', + newPassword: 'รหัสผ่านใหม่', + resetPassword: 'รีเซ็ตรหัสผ่าน', + resetPasswordExpiration: 'วันหมดอายุสำหรับการรีเซ็ตรหัสผ่าน', + resetPasswordToken: 'Token รีเซ็ตรหัสผ่าน', + resetYourPassword: 'รีเซ็ตรหัสผ่านของคุณ', + stayLoggedIn: 'เข้าสู่ระบบต่อไป', + successfullyUnlocked: 'ปลดล็อกบัญชีสำเร็จ', + unableToVerify: 'ไม่สามารถยืนยันบัญชีได้', + verified: 'ยืนยันบััญชีแล้ว', + verifiedSuccessfully: 'ยืนยันบัญชีสำเร็จ', + verify: 'ยืนยันบัญชี', + verifyUser: 'ยืนยันบัญชี', + verifyYourEmail: 'ยืนยันอีเมลของคุณ', + youAreInactive: + 'คุณกำลังจะถูกให้ออกจากระบบในเร็ว ๆ นี้เนื่องจากไม่มีการใช้งานระบบมาสักพักหนึ่ง คุณต้องการเข้าสู่ระบบต่อหรือไม่?', + youAreReceivingResetPassword: + 'คุณได้รับอีเมลนี้เนื่องจากคุณ (หรือคนอื่น) ได้ร้องขอให้รีเซ็ตรหัสผ่านของบัญชีของคุณ กรุณากดลิงก์ด้านล่างเพื่อดำเนินการรีเซ็ตรหัสผ่านต่อ:', + youDidNotRequestPassword: + 'หากคุณไม่ได้ร้องขอให้มีการรีเซ็ตรหัสผ่าน คุณสามารถเพิกเฉยข้อความนี้ได้ โดยรหัสผ่านของคุณจะคงอยู่เช่นเดิม', + }, + error: { + accountAlreadyActivated: 'บัญชีนี้ถูกเปิดใช้งานไปแล้ว', + autosaving: 'เกิดปัญหาระหว่างการบันทึกเอกสารอัตโนมัติ', + correctInvalidFields: 'โปรดแก้ไขช่องที่ไม่ถูกต้อง', + deletingFile: 'เกิดปัญหาระหว่างการลบไฟล์', + deletingTitle: 'เกิดปัญหาระหว่างการลบ {{title}} โปรดตรวจสอบการเชื่อมต่อของคุณแล้วลองอีกครั้ง', + emailOrPasswordIncorrect: 'อีเมลหรือรหัสผ่านไม่ถูกต้อง', + followingFieldsInvalid_one: 'ช่องต่อไปนี้ไม่ถูกต้อง:', + followingFieldsInvalid_other: 'ช่องต่อไปนี้ไม่ถูกต้อง:', + incorrectCollection: 'Collection ไม่ถูกต้อง', + invalidFileType: 'ประเภทของไฟล์ไม่ถูกต้อง', + invalidFileTypeValue: 'ประเภทของไฟล์ไม่ถูกต้อง: {{value}}', + loadingDocument: 'เกิดปัญหาระหว่างการโหลดเอกสารที่มี ID {{id}}', + missingEmail: 'ไม่พบอีเมล', + missingIDOfDocument: 'ไม่พบ ID ของเอกสารที่ต้องการแก้ไข', + missingIDOfVersion: 'ไม่พบ ID ของเวอร์ชัน', + missingRequiredData: 'ไม่พบข้อมูลที่จำเป็น', + noFilesUploaded: 'ไม่มีไฟล์ถูกอัปโหลด', + noMatchedField: 'ไม่พบช่อง "{{label}}"', + noUser: 'ไม่พบผู้ใช้', + notAllowedToAccessPage: 'คุณไม่ได้รับอนุญาตให้เข้าถึงหน้านี้', + notAllowedToPerformAction: 'คุณไม่ได้รับอนุญาตให้ดำเนินการสิ่งนี้', + notFound: 'ไม่พบหน้าที่คุณต้องการ', + previewing: 'เกิดปัญหาระหว่างการแสดงตัวอย่างเอกสาร', + problemUploadingFile: 'เกิดปัญหาระหว่างการอัปโหลดไฟล์', + tokenInvalidOrExpired: 'Token ไม่ถูกต้องหรือหมดอายุ', + unPublishingDocument: 'เกิดปัญหาระหว่างการยกเลิกการเผยแพร่เอกสารนี้', + unableToDeleteCount: 'ไม่สามารถลบ {{count}} จาก {{total}} {{label}}', + unableToUpdateCount: 'ไม่สามารถอัปเดต {{count}} จาก {{total}} {{label}}', + unauthorized: 'คุณไม่ได้รับอนุญาต กรุณาเข้าสู่ระบบเพื่อทำคำขอนี้', + unknown: 'เกิดปัญหาบางอย่างที่ไม่ทราบสาเหตุ', + unspecific: 'เกิดปัญหาบางอย่าง', + userLocked: 'บัญชีนี้ถูกล็อกเนื่องจากมีการพยายามเข้าสู่ระบบมากเกินไป', + valueMustBeUnique: 'ค่าต้องไม่ซ้ำกับเอกสารอื่น', + verificationTokenInvalid: 'Token ยืนยันตัวตนไม่ถูกต้อง', + }, + fields: { + addLabel: 'เพิ่ม {{label}}', + addLink: 'เพิ่มลิงค์', + addNew: 'เพิ่ม', + addNewLabel: 'เพิ่ม {{label}} ใหม่', + addRelationship: 'เพิ่มความสัมพันธ์', + addUpload: 'เพิ่มการอัปโหลด', + block: 'Block', + blockType: 'ประเภท Block', + blocks: 'Blocks', + chooseBetweenCustomTextOrDocument: 'เลือกระหว่างกำหนด URL เองหรือเชื่อมไปยังเอกสารอื่น', + chooseDocumentToLink: 'เลือกเอกสารที่จะเชื่อมโยง', + chooseFromExisting: 'เลือกจากที่มีอยู่', + chooseLabel: 'เลือก {{label}}', + collapseAll: 'ยุบทั้งหมด', + customURL: 'URL ที่กำหนดเอง', + editLabelData: 'แก้ไขข้อมูล {{label}}', + editLink: 'แก้ไขลิงก์', + editRelationship: 'แก้ไขความสัมพันธ์', + enterURL: 'ระบุ URL', + internalLink: 'ลิงก์ภายใน', + itemsAndMore: '{{items}} และเพิ่มเติมอีก {{count}}', + labelRelationship: 'ความสัมพันธ์กับ {{label}}', + latitude: 'ละติจูด', + linkType: 'ประเภทของลิงก์', + linkedTo: 'เชื่อมกับ <0>{{label}} สำเร็จ', + longitude: 'ลองติจูด', + newLabel: '{{label}} ใหม่', + openInNewTab: 'เปิดในแท็บใหม่', + passwordsDoNotMatch: 'รหัสผ่านไม่ตรงกัน', + relatedDocument: 'เอกสารที่เกี่ยวข้อง', + relationTo: 'เชื่อมกับ', + removeRelationship: 'ลบความสัมพันธ์', + removeUpload: 'ลบอัปโหลด', + saveChanges: 'บันทึก', + searchForBlock: 'ค้นหา Block', + selectExistingLabel: 'เลือก {{label}} ที่มีอยู่', + selectFieldsToEdit: 'เลือกช่องที่จะแก้ไข', + showAll: 'แสดงทั้งหมด', + swapRelationship: 'สลับความสัมพันธ์', + swapUpload: 'สลับอัปโหลด', + textToDisplay: 'ข้อความสำหรับแสดงผล', + toggleBlock: 'เปิด/ปิด Block', + uploadNewLabel: 'อัปโหลด {{label}} ใหม่', + }, + general: { + aboutToDelete: 'คุณกำลังจะลบ {{label}} <1>{{title}} ต้องการดำเนินการต่อหรือไม่?', + aboutToDeleteCount_many: 'คุณกำลังจะลบ {{count}} {{label}}', + aboutToDeleteCount_one: 'คุณกำลังจะลบ {{count}} {{label}}', + aboutToDeleteCount_other: 'คุณกำลังจะลบ {{count}} {{label}}', + addBelow: 'เพิ่มด้านล่าง', + addFilter: 'เพิ่มการกรอง', + adminTheme: 'ธีมผู้ดูแลระบบ', + and: 'และ', + applyChanges: 'ใช้การเปลี่ยนแปลง', + ascending: 'น้อยไปมาก', + automatic: 'อัตโนมัติ', + backToDashboard: 'กลับไปหน้าแดชบอร์ด', + cancel: 'ยกเลิก', + changesNotSaved: 'การเปลี่ยนแปลงยังไม่ได้ถูกบันทึก ถ้าคุณออกตอนนี้ สิ่งที่แก้ไขไว้จะหายไป', + close: 'ปิด', + collapse: 'ยุบ', + collections: 'Collections', + columnToSort: 'คอลัมน์ที่ต้องการเรียง', + columns: 'คอลัมน์', + confirm: 'ยืนยัน', + confirmDeletion: 'ยืนยันการลบ', + confirmDuplication: 'ยืนยันการสำเนา', + copied: 'คัดลอกแล้ว', + copy: 'คัดลอก', + create: 'สร้าง', + createNew: 'สร้างใหม่', + createNewLabel: 'สร้าง {{label}} ใหม่', + created: 'ถูกสร้างเมื่อ', + createdAt: 'สร้างเมื่อ', + creating: 'กำลังสร้าง', + creatingNewLabel: 'กำลังสร้าง {{label}} ใหม่', + dark: 'มืด', + dashboard: 'แดชบอร์ด', + delete: 'ลบ', + deletedCountSuccessfully: 'Deleted {{count}} {{label}} successfully.', + deletedSuccessfully: 'ลบสำเร็จ', + deleting: 'กำลังลบ...', + descending: 'มากไปน้อย', + deselectAllRows: 'ยกเลิกการเลือกทุกแถว', + duplicate: 'สำเนา', + duplicateWithoutSaving: 'สำเนาโดยไม่บันทึกการแก้ไข', + edit: 'แก้ไข', + editLabel: 'แก้ไข {{label}}', + editing: 'แก้ไข', + editingLabel_many: 'กำลังแก้ไข {{count}} {{label}}', + editingLabel_one: 'กำลังแก้ไข {{count}} {{label}}', + editingLabel_other: 'กำลังแก้ไข {{count}} {{label}}', + email: 'อีเมล', + emailAddress: 'อีเมล', + enterAValue: 'ระบุค่า', + error: 'ข้อผิดพลาด', + errors: 'ข้อผิดพลาด', + fallbackToDefaultLocale: 'สำรองไปยังตำแหน่งที่ตั้งเริ่มต้น', + filter: 'กรอง', + filterWhere: 'กรอง {{label}} เฉพาะ', + filters: 'กรอง', + globals: 'Globals', + language: 'ภาษา', + lastModified: 'แก้ไขล่าสุดเมื่อ', + leaveAnyway: 'ออกจากหน้านี้', + leaveWithoutSaving: 'ออกโดยไม่บันทึก', + light: 'สว่าง', + livePreview: 'แสดงตัวอย่าง', + loading: 'กำลังโหลด', + locale: 'ตำแหน่งที่ตั้ง', + locales: 'ภาษา', + menu: 'เมนู', + moveDown: 'ขยับขึ้น', + moveUp: 'ขยับลง', + newPassword: 'รหัสผ่านใหม่', + noFiltersSet: 'ไม่มีการกรอง', + noLabel: '<ไม่มี {{label}}>', + noOptions: 'ไม่มีตัวเลือก', + noResults: + 'ไม่พบ {{label}} เนื่องจากยังไม่มี {{label}} หรือไม่มี {{label}} ใดตรงกับการกรองด้านบน', + noValue: 'ไม่มีค่า', + none: 'ไม่มี', + notFound: 'ไม่พบ', + nothingFound: 'ไม่พบสิ่งใด', + of: 'จาก', + open: 'เปิด', + or: 'หรือ', + order: 'เรียงตาม', + pageNotFound: 'ไม่พบหน้าที่ต้องการ', + password: 'รหัสผ่าน', + payloadSettings: 'การตั้งค่า Payload', + perPage: 'จำนวนต่อหน้า: {{limit}}', + remove: 'ลบ', + reset: 'รีเซ็ต', + row: 'แถว', + rows: 'แถว', + save: 'บันทึก', + saving: 'กำลังบันทึก...', + searchBy: 'ค้นหาด้วย {{label}}', + selectAll: 'เลือกทั้งหมด {{count}} {{label}}', + selectAllRows: 'เลือกทุกแถว', + selectValue: 'เลือกค่า', + selectedCount: 'เลือก {{count}} {{label}} แล้ว', + showAllLabel: 'แสดง {{label}} ทั้งหมด', + sorryNotFound: 'ขออภัย ไม่สามารถทำตามคำขอของคุณได้', + sort: 'เรียง', + sortByLabelDirection: 'เรียงลำดับตาม {{label}} {{direction}}', + stayOnThisPage: 'อยู่หน้านี้ต่อ', + submissionSuccessful: 'ส่งสำเร็จ', + submit: 'ส่ง', + successfullyCreated: 'สร้าง {{label}} สำเร็จ', + successfullyDuplicated: 'สำเนา {{label}} สำเร็จ', + thisLanguage: 'ไทย', + titleDeleted: 'ลบ {{label}} "{{title}}" สำเร็จ', + unauthorized: 'ไม่ได้รับอนุญาต', + unsavedChangesDuplicate: 'คุณมีการแก้ไขที่ยังไม่ถูกบันทึก คุณต้องการทำสำเนาต่อหรือไม่?', + untitled: 'ไม่มีชื่อ', + updatedAt: 'แก้ไขเมื่อ', + updatedCountSuccessfully: 'อัปเดต {{count}} {{label}} เรียบร้อยแล้ว', + updatedSuccessfully: 'แก้ไขสำเร็จ', + updating: 'กำลังอัปเดต', + uploading: 'กำลังอัปโหลด', + user: 'ผู้ใช้', + users: 'ผู้ใช้', + value: 'ค่า', + welcome: 'ยินดีต้อนรับ', + }, + operators: { + contains: 'มี', + equals: 'เท่ากับ', + exists: 'มีอยู่', + isGreaterThan: 'มากกว่า', + isGreaterThanOrEqualTo: 'มากกว่าหรือเท่ากับ', + isIn: 'อยู่ใน', + isLessThan: 'น้อยกว่า', + isLessThanOrEqualTo: 'น้อยกว่าหรือเท่ากับ', + isLike: 'เหมือน', + isNotEqualTo: 'ไม่เท่ากับ', + isNotIn: 'ไม่ได้อยู่ใน', + near: 'ใกล้', + }, + upload: { + crop: 'พืชผล', + cropToolDescription: 'ลากมุมของพื้นที่ที่เลือก, วาดพื้นที่ใหม่หรือปรับค่าด้านล่าง', + dragAndDrop: 'ลากและวางไฟล์', + dragAndDropHere: 'หรือลากและวางไฟล์ที่นี่', + editImage: 'แก้ไขรูปภาพ', + fileName: 'ชื่อไฟล์', + fileSize: 'ขนาดไฟล์', + focalPoint: 'จุดสนใจ', + focalPointDescription: 'ลากจุดโฟกัสตรงบนภาพตัวอย่างหรือปรับค่าที่อยู่ด้านล่าง', + height: 'ความสูง', + lessInfo: 'ซ่อนข้อมูล', + moreInfo: 'แสดงข้อมูล', + previewSizes: 'ขนาดตัวอย่าง', + selectCollectionToBrowse: 'เลือก Collection ที่ต้องการค้นหา', + selectFile: 'เลือกไฟล์', + setCropArea: 'ตั้งค่าพื้นที่การครอบตัด', + setFocalPoint: 'ตั้งจุดโฟกัส', + sizes: 'ขนาด', + sizesFor: 'ขนาดสำหรับ {{label}}', + width: 'ความกว้าง', + }, + validation: { + emailAddress: 'กรุณาระบุอีเมลที่ถูกต้อง', + enterNumber: 'กรุณาระบุตัวเลขที่ถูกต้อง', + fieldHasNo: 'ช่องนี้ไม่มี {{label}}', + greaterThanMax: '{{value}} มากกว่าค่าสูงสุดที่อนุญาตของ {{label}} ซึ่งคือ {{max}}.', + invalidInput: 'ข้อมูลไม่ถูกต้อง', + invalidSelection: 'ค่าที่เลือกไม่ถูกต้อง', + invalidSelections: 'ค่าที่เลือกไม่ถูกต้องดังนี้:', + lessThanMin: '{{value}} น้อยกว่าค่าต่ำสุดที่อนุญาตของ {{label}} ซึ่งคือ {{min}}.', + limitReached: 'ถึงขีดจำกัดแล้ว, สามารถเพิ่มไอเทมได้เพียง {{max}} ไอเทมเท่านั้น', + longerThanMin: 'ค่าต้องมีความยาวมากกว่า {{minLength}} ตัวอักษร', + notValidDate: 'วันที่ "{{value}}" ไม่ถูกต้อง', + required: 'จำเป็นต้องระบุค่า', + requiresAtLeast: 'ต้องมีอย่างน้อย {{count}} {{label}}', + requiresNoMoreThan: 'ห้ามมีเกิน {{count}} {{label}}', + requiresTwoNumbers: 'ต้องมีตัวเลข 2 ค่า', + shorterThanMax: 'ค่าต้องมีความยาวน้อยกว่า {{maxLength}} ตัวอักษร', + trueOrFalse: 'เป็นได้แค่ "ใช่" หรือ "ไม่ใช่"', + validUploadID: 'ไม่ใช่ ID ของการอัปโหลดที่ถูกต้อง', + }, + version: { + type: 'ประเภท', + aboutToPublishSelection: 'คุณกำลังจะเผยแพร่ {{label}} ทั้งหมดในส่วนที่เลือก คุณแน่ใจไหม?', + aboutToRestore: + 'คุณกำลังจะคืนค่าเอกสาร {{label}} นี้กลับไปอยู่ในเวอร์ชันเมื่อวันที่ {{versionDate}}', + aboutToRestoreGlobal: + 'คุณกำลังจะคืนค่า global {{label}} กลับไปอยู่ในเวอร์ชันเมื่อวันที่ {{versionDate}}.', + aboutToRevertToPublished: + 'คุณกำลังจะย้อนการเปลี่ยนแปลงของเอกสารนี้ไปยังเวอร์ชันที่เผยแพร่อยู่ คุณต้องการดำเนินการต่อหรือไม่?', + aboutToUnpublish: 'คุณกำลังจะยกเลิกเผยแพร่เอกสารนี้ คุณต้องการดำเนินการต่อหรือไม่?', + aboutToUnpublishSelection: + 'คุณกำลังจะเลิกเผยแพร่ {{label}} ทั้งหมดในส่วนที่เลือก คุณแน่ใจไหม?', + autosave: 'บันทึกอัตโนมัติ', + autosavedSuccessfully: 'บันทึกอัตโนมัติสำเร็จ', + autosavedVersion: 'เวอร์ชันบันทึกอัตโนมัติ', + changed: 'มีการแก้ไข', + compareVersion: 'เปรียบเทียบเวอร์ชันกับ:', + confirmPublish: 'ยืนยันการเผยแพร่', + confirmRevertToSaved: 'ยืนยันย้อนการแก้ไข', + confirmUnpublish: 'ยืนยันการยกเลิกการเผยแพร่', + confirmVersionRestoration: 'ยืนยันการกู้คืนเวอร์ชัน', + currentDocumentStatus: 'เอกสารปัจจุบัน', + draft: 'ฉบับร่าง', + draftSavedSuccessfully: 'บันทึกร่างสำเร็จ', + lastSavedAgo: 'บันทึกครั้งล่าสุด {{distance}} ที่ผ่านมา', + noFurtherVersionsFound: 'ไม่พบเวอร์ชันอื่น ๆ', + noRowsFound: 'ไม่พบ {{label}}', + preview: 'ตัวอย่าง', + problemRestoringVersion: 'เกิดปัญหาระหว่างการกู้คืนเวอร์ชันนี้', + publish: 'เผยแพร่', + publishChanges: 'เผยแพร่การแก้ไข', + published: 'เผยแพร่แล้ว', + publishing: 'การเผยแพร่', + restoreThisVersion: 'กู้คืนเวอร์ชันนี้', + restoredSuccessfully: 'กู้คืนเวอร์ชันสำเร็จ', + restoring: 'กำลังกู้คืน...', + revertToPublished: 'ย้อนกลับไปเวอร์ชันที่เผยแพร่อยู่', + reverting: 'กำลังย้อน...', + saveDraft: 'บันทึกร่าง', + selectLocales: 'เลือกภาษาที่ต้องการแสดง', + selectVersionToCompare: 'เลือกเวอร์ชันที่ต้องการเปรียบเทียบ', + showLocales: 'แสดงภาษา:', + showingVersionsFor: 'กำลังแสดงเวอร์ชันของ:', + status: 'สถานะ', + unpublish: 'หยุดเผยแพร่', + unpublishing: 'กำลังหยุดการเผยแพร่...', + version: 'เวอร์ชัน', + versionCount_many: 'พบ {{count}} เวอร์ชัน', + versionCount_none: 'ไม่พบเวอร์ชันอื่น', + versionCount_one: 'พบ {{count}} เวอร์ชัน', + versionCount_other: 'พบ {{count}} เวอร์ชัน', + versionCreatedOn: '{{version}} ถูกสร้างเมื่อ:', + versionID: 'ID ของเวอร์ชัน', + versions: 'เวอร์ชัน', + viewingVersion: 'กำลังดูเวอร์ชันของ {{entityLabel}} {{documentTitle}}', + viewingVersionGlobal: 'กำลังดูเวอร์ชันของ global {{entityLabel}}', + viewingVersions: 'กำลังดูเวอร์ชันของ {{entityLabel}} {{documentTitle}}', + viewingVersionsGlobal: 'กำลังดูเวอร์ชันของ global {{entityLabel}}', + }, + }, +} diff --git a/packages/translations/src/languages/tr.ts b/packages/translations/src/languages/tr.ts new file mode 100644 index 0000000000..2af4f72a96 --- /dev/null +++ b/packages/translations/src/languages/tr.ts @@ -0,0 +1,398 @@ +import type { Language } from '../types.js' + +export const tr: Language = { + dateFNSKey: 'tr', + translations: { + authentication: { + account: 'Hesap', + accountOfCurrentUser: 'Şu anki kullanıcının hesabı', + alreadyActivated: 'Hesap zaten etkinleştirildi', + alreadyLoggedIn: 'Hesaba zaten giriş yapıldı', + apiKey: 'API Anahtarı', + backToLogin: 'Giriş ekranına geri dön', + beginCreateFirstUser: 'Başlamak için ilk kullanıcı hesabını oluşturun.', + changePassword: 'Parolayı Değiştir', + checkYourEmailForPasswordReset: + 'Parolanızı güvenli bir şekilde güncelleyebilmeniz için e-posta adresinize bir bağlantı gönderilmiştir.', + confirmGeneration: 'Oluştumayı Onayla', + confirmPassword: 'Parolayı Onayla', + createFirstUser: 'İlk kullanıcı oluştur', + emailNotValid: 'Girilen e-posta geçersiz', + emailSent: 'E-posta gönderildi', + enableAPIKey: 'Api anahtarını etkinleştir', + failedToUnlock: 'Hesabı aktifleştirme başarısız oldu', + forceUnlock: 'Hesabı Etkinleştir', + forgotPassword: 'Parolamı Unuttum', + forgotPasswordEmailInstructions: + 'Lütfen e-posta adresinizi aşağıdaki alana girin. Parolanızı nasıl sıfırlayacağınızı gösteren bir e-posta adresi alacaksınız.', + forgotPasswordQuestion: 'Parolanızı mı unuttunuz?', + generate: 'Oluştur', + generateNewAPIKey: 'Yeni bir API anahtarı oluştur', + generatingNewAPIKeyWillInvalidate: + 'Yeni bir API anahtarı oluşturmak önceckini <1>geçersiz kılacaktır. Devam etmek istiyor musunuz?', + lockUntil: 'Lock Until', + logBackIn: 'Tekrar giriş yapın', + logOut: 'Çıkış', + loggedIn: + 'Başka bir kullanıcı hesabıyla giriş yapabilmek için önce <0>çıkış yapmanız gerekmektedir.', + loggedInChangePassword: 'Parolanızı değiştirmek için <0>hesabınıza gidebilirsiniz.', + loggedOutInactivity: 'Uzun süre işlem yapmadığınız için oturumunuz kapatıldı.', + loggedOutSuccessfully: 'Başarıyla çıkış yaptınız.', + login: 'Giriş', + loginAttempts: 'Giriş Denemeleri', + loginUser: 'Kullanıcı girişi', + loginWithAnotherUser: + 'Başka bir kullanıcı hesabıyla giriş yapmak için önce <0>çıkış yapmalısınız.', + logout: 'Çıkış', + logoutUser: 'Kullanıcıyı çıkış yapmaya zorla', + newAPIKeyGenerated: 'Yeni API anahtarı oluşturuldu.', + newAccountCreated: + '<0>{{serverURL}} sitesinde adınıza yeni bir hesap oluşturuldu. E-postanızı doğrulamak için bağlantıya tıklayabilirsiniz: <1>{{verificationURL}}
    E-postanızı doğruladıktan sonra siteye hesap bilgilerinizle giriş yapabilirsiniz.', + newPassword: 'Yeni Parola', + resetPassword: 'Parolayı Sıfırla', + resetPasswordExpiration: 'Parola Geçerlik Süresini Sıfırla', + resetPasswordToken: 'Parola tokenini sıfırla', + resetYourPassword: 'Parolanızı Sıfırlayın', + stayLoggedIn: 'Oturumu açık tut', + successfullyUnlocked: 'Hesabın kilidi başarıyla açıldı', + unableToVerify: 'Doğrulama başarısız', + verified: 'Doğrulandı', + verifiedSuccessfully: 'Hesap başarıyla doğrulandı', + verify: 'Doğrula', + verifyUser: 'Kullanıcıyı doğrula', + verifyYourEmail: 'E-postanızı doğrulayın', + youAreInactive: + 'Bir süredir işlem yapmadığınız için yakında oturumunuz kapatılacak. Oturumunuzun açık kalmasını istiyor musunuz?', + youAreReceivingResetPassword: + 'Siz veya bir başkası hesabınızın parolasını sıfırlama isteğinde bulunduğu için bu e-postayı alıyorsunuz. İşlemi tamamlamak için lütfen aşağıdaki bağlantıya tıklayın veya bağlantı adresini tarayıcınızın adres yazma bölümüne kopyalayın.', + youDidNotRequestPassword: + 'Eğer bu işlemi siz gerçekleştirmediyseniz bu e-postayı görmezden gelebilirsiniz.', + }, + error: { + accountAlreadyActivated: 'Hesap zaten etkinleştirildi.', + autosaving: 'Otomatik kaydetme başarısız oldu', + correctInvalidFields: 'Lütfen geçersiz alanları düzeltin.', + deletingFile: 'Dosya silinirken bir hatayla karşılaşıldı.', + deletingTitle: + '{{title}} silinirken bir sorun yaşandı. Lütfen internet bağlantınızı kontrol edip tekrar deneyin.', + emailOrPasswordIncorrect: 'Girilen e-posta veya parola hatalı', + followingFieldsInvalid_one: 'Lütfen geçersiz alanı düzeltin:', + followingFieldsInvalid_other: 'Lütfen geçersiz alanları düzeltin:', + incorrectCollection: 'Hatalı koleksiyon', + invalidFileType: 'Geçersiz dosya türü', + invalidFileTypeValue: 'Geçersiz dosya türü: {{value}}', + loadingDocument: "{{id}} ID'ye sahip döküman yüklenirken bir sorun oluştu.", + missingEmail: 'E-posta adresi girilmedi.', + missingIDOfDocument: "Güncellenecek döküman ID'si eksik.", + missingIDOfVersion: "Versiyon ID'si geçersiz.", + missingRequiredData: 'Gerekli veri eksik.', + noFilesUploaded: 'Yüklenen dosya yok', + noMatchedField: '"{{label}}" ile eşleşen alan bulunamadı.', + noUser: 'Kullanıcı yok', + notAllowedToAccessPage: 'Bu sayfaya erişim izniniz yok.', + notAllowedToPerformAction: 'Bu işlemi gerçekleştirmek için izniniz yok.', + notFound: 'Sayfa bulunamadı.', + previewing: 'Önizleme başarısız oldu', + problemUploadingFile: 'Dosya yüklenirken bir sorun oluştu.', + tokenInvalidOrExpired: 'Geçersiz veya süresi dolmuş token.', + unPublishingDocument: 'Geçerli döküman yayından kaldırılırken bir sorun oluştu.', + unableToDeleteCount: '{{total}} {{label}} içinden {{count}} silinemiyor.', + unableToUpdateCount: '{{total}} {{label}} içinden {{count}} güncellenemiyor.', + unauthorized: 'Bu işlemi gerçekleştirmek için lütfen giriş yapın.', + unknown: 'Bilinmeyen bir hata oluştu.', + unspecific: 'Bir hata oluştu.', + userLocked: + 'Hesabınız hatalı giriş denemeleri yüzünden geçici olarak kilitlendi. Lütfen daha sonra tekrar deneyin.', + valueMustBeUnique: 'Değer benzersiz olmalıdır', + verificationTokenInvalid: 'Doğrulama tokeni geçersiz.', + }, + fields: { + addLabel: '{{label}} ekle', + addLink: 'Link Ekle', + addNew: 'Yeni', + addNewLabel: 'Yeni {{label}}', + addRelationship: 'İlişki Ekle', + addUpload: 'Yükleme Ekle', + block: 'blok', + blockType: 'Blok tipi', + blocks: 'blok', + chooseBetweenCustomTextOrDocument: + 'Choose between entering a custom text URL or linking to another document.', + chooseDocumentToLink: 'Bağlantı verilecek bir döküman seçin.', + chooseFromExisting: 'Varolanlardan seç', + chooseLabel: '{{label}} seç', + collapseAll: 'Tümünü daralt', + customURL: 'Özel URL', + editLabelData: '{{label}} düzenle', + editLink: 'Bağlantıyı Düzenle', + editRelationship: 'İlişkiyi Ekle', + enterURL: 'Bir URL girin', + internalLink: 'İç bağlantı', + itemsAndMore: '{{items}} and {{count}} more', + labelRelationship: '{{label}} Relationship', + latitude: 'Enlem', + linkType: 'Bağlantı türü', + linkedTo: '<0>label için bağlantı verildi', + longitude: 'Boylam', + newLabel: 'Yeni {{label}}', + openInNewTab: 'Yeni sekmede aç', + passwordsDoNotMatch: 'Parolalar eşleşmiyor.', + relatedDocument: 'İlişkili döküman', + relationTo: 'Relation To', + removeRelationship: 'İlişkiyi Kaldır', + removeUpload: 'Dosyayı Sil', + saveChanges: 'Değişiklikleri kaydet', + searchForBlock: 'Blok ara', + selectExistingLabel: 'Varolan {{label}} seç', + selectFieldsToEdit: 'Düzenlenecek alanları seçin', + showAll: 'Tümünü göster', + swapRelationship: 'Takas Ilişkisi', + swapUpload: 'Karşıya Yüklemeyi Değiştir', + textToDisplay: 'Görüntülenecek metin', + toggleBlock: 'Bloğu aç/kapat', + uploadNewLabel: 'Karşıya {{label}} yükle', + }, + general: { + aboutToDelete: + '<1>{{title}} {{label}} silinmek üzere. Silme işlemine devam etmek istiyor musunuz?', + aboutToDeleteCount_many: '{{count}} {{label}} silmek üzeresiniz', + aboutToDeleteCount_one: '{{count}} {{label}} silmek üzeresiniz', + aboutToDeleteCount_other: '{{count}} {{label}} silmek üzeresiniz', + addBelow: 'Altına ekle', + addFilter: 'Filtre ekle', + adminTheme: 'Admin arayüzü', + and: 've', + applyChanges: 'Değişiklikleri Uygula', + ascending: 'artan', + automatic: 'Otomatik', + backToDashboard: 'Anasayfaya geri dön', + cancel: 'İptal', + changesNotSaved: + 'Değişiklikleriniz henüz kaydedilmedi. Eğer bu sayfayı terk ederseniz değişiklikleri kaybedeceksiniz.', + close: 'Kapat', + collapse: 'Daralt', + collections: 'Koleksiyonlar', + columnToSort: 'Sıralanacak Sütunlar', + columns: 'Sütunlar', + confirm: 'Onayla', + confirmDeletion: 'Silmeyi onayla', + confirmDuplication: 'Çoğaltmayı onayla', + copied: 'Kopyalandı', + copy: 'Kopyala', + create: 'Oluştur', + createNew: 'Yeni oluştur', + createNewLabel: 'Yeni bir {{label}} oluştur', + created: 'Oluşturma tarihi', + createdAt: 'Oluşturma tarihi', + creating: 'Oluşturuluyor', + creatingNewLabel: 'Yeni bir {{label}} oluşturuluyor', + dark: 'Karanlık', + dashboard: 'Anasayfa', + delete: 'Sil', + deletedCountSuccessfully: '{{count}} {{label}} başarıyla silindi.', + deletedSuccessfully: 'Başarıyla silindi.', + deleting: 'Siliniyor...', + descending: 'Azalan', + deselectAllRows: 'Tüm satırların seçimini kaldır', + duplicate: 'Çoğalt', + duplicateWithoutSaving: 'Ayarları kaydetmeden çoğalt', + edit: 'Düzenle', + editLabel: '{{label}} düzenle', + editing: 'Düzenleniyor', + editingLabel_many: '{{count}} {{label}} düzenleniyor', + editingLabel_one: '{{count}} {{label}} düzenleniyor', + editingLabel_other: '{{count}} {{label}} düzenleniyor', + email: 'E-posta', + emailAddress: 'E-posta adresi', + enterAValue: 'Değer girin', + error: 'Hata', + errors: 'Hatalar', + fallbackToDefaultLocale: 'Varsayılan yerel ayara geri dönme', + filter: 'Filtrele', + filterWhere: '{{label}} filtrele:', + filters: 'Filtreler', + globals: 'Globaller', + language: 'Dil', + lastModified: 'Son değiştirme', + leaveAnyway: 'Yine de ayrıl', + leaveWithoutSaving: 'Kaydetmeden ayrıl', + light: 'Aydınlık', + livePreview: 'Önizleme', + loading: 'Yükleniyor', + locale: 'Yerel ayar', + locales: 'Diller', + menu: 'Menü', + moveDown: 'Aşağı taşı', + moveUp: 'Yukarı taşı', + newPassword: 'Yeni parola', + noFiltersSet: 'Tanımlı filtre yok', + noLabel: '<{{label}} yok>', + noOptions: 'Seçenek yok', + noResults: + '{{label}} bulunamadı. Henüz bir {{label}} eklenmemiş olabilir veya seçtiğiniz filtrelerle eşleşen bir sonuç bulunamamış olabilir.', + noValue: 'Değer yok', + none: 'Hiç', + notFound: 'Bulunamadı', + nothingFound: 'Hiçbir şey bulunamadı', + of: 'of', + open: 'Aç', + or: 'Or', + order: 'Order', + pageNotFound: 'Sayfa bulunamadı', + password: 'Parola', + payloadSettings: 'Ayarlar', + perPage: 'Sayfa başına: {{limit}}', + remove: 'Kaldır', + reset: 'Sıfırla', + row: 'Satır', + rows: 'Satır', + save: 'Kaydet', + saving: 'Kaydediliyor...', + searchBy: 'Şuna göre sırala: {{label}}', + selectAll: "Tüm {{count}} {{label}}'ı seçin", + selectAllRows: 'Tüm satırları seçin', + selectValue: 'Bir değer seçin', + selectedCount: '{{count}} {{label}} seçildi', + showAllLabel: 'Tüm {{label}} göster', + sorryNotFound: 'Üzgünüz, isteğinizle eşleşen bir sonuç bulunamadı.', + sort: 'Sırala', + sortByLabelDirection: '{{label}} göre sırala {{direction}}', + stayOnThisPage: 'Bu sayfada kal', + submissionSuccessful: 'Gönderme başarılı', + submit: 'Gönder', + successfullyCreated: '{{label}} başarıyla oluşturuldu.', + successfullyDuplicated: '{{label}} başarıyla kopyalandı.', + thisLanguage: 'Türkçe', + titleDeleted: '{{label}} {{title}} başarıyla silindi.', + unauthorized: 'Yetkisiz', + unsavedChangesDuplicate: + 'Kaydedilmemiş değişiklikler var. Çoğaltma işlemine devam etmek istiyor musunuz?', + untitled: 'Başlıksız', + updatedAt: 'Güncellenme tarihi', + updatedCountSuccessfully: '{{count}} {{label}} başarıyla güncellendi.', + updatedSuccessfully: 'Başarıyla güncellendi.', + updating: 'Güncelleniyor', + uploading: 'Yükleniyor', + user: 'kullanıcı', + users: 'kullanıcı', + value: 'Değer', + welcome: 'Hoşgeldiniz', + }, + operators: { + contains: 'içerir', + equals: 'eşittir', + exists: 'var', + isGreaterThan: 'şundan büyüktür', + isGreaterThanOrEqualTo: 'büyüktür veya eşittir', + isIn: 'içinde', + isLessThan: 'küçüktür', + isLessThanOrEqualTo: 'küçüktür veya eşittir', + isLike: 'gibidir', + isNotEqualTo: 'eşit değildir', + isNotIn: 'içinde değil', + near: 'yakın', + }, + upload: { + crop: 'Mahsulat', + cropToolDescription: + 'Seçilen alanın köşelerini sürükleyin, yeni bir alan çizin ya da aşağıdaki değerleri ayarlayın.', + dragAndDrop: 'Bir dosya sürükleyip bırakabilirsiniz', + dragAndDropHere: 'veya buraya bir dosya sürükleyip bırakabilirsiniz', + editImage: 'Görüntüyü Düzenle', + fileName: 'Dosya adı', + fileSize: 'Dosya boyutu', + focalPoint: 'Odak Noktası', + focalPointDescription: + 'Önizlemeye odak noktasını doğrudan sürükleyin veya aşağıdaki değerleri ayarlayın.', + height: 'Yükseklik', + lessInfo: 'Daha az bilgi', + moreInfo: 'Daha fazla bilgi', + previewSizes: 'Önizleme Boyutları', + selectCollectionToBrowse: 'Görüntülenecek bir koleksiyon seçin', + selectFile: 'Dosya seç', + setCropArea: 'Mahsul alanını ayarla', + setFocalPoint: 'Odak noktasını ayarla', + sizes: 'Boyutlar', + sizesFor: '{{label}} için boyutlar', + width: 'Genişlik', + }, + validation: { + emailAddress: 'Lütfen geçerli bir e-posta adresi girin.', + enterNumber: 'Lütfen geçerli bir sayı girin.', + fieldHasNo: 'Bu alanda {{label}} girili değil.', + greaterThanMax: '{{value}} izin verilen maksimum {{label}} değerinden daha büyük.', + invalidInput: 'Bu alanda geçersiz bir giriş mevcut.', + invalidSelection: 'Bu alanda geçersiz bir seçim mevcut.', + invalidSelections: "'Bu alan şu geçersiz seçimlere sahip:'", + lessThanMin: '{{value}} izin verilen minimum {{label}} değerinden daha küçük.', + limitReached: 'Sınır aşıldı, yalnızca {{max}} öğe eklenebilir.', + longerThanMin: 'Bu değer minimum {{minLength}} karakterden uzun olmalıdır.', + notValidDate: '"{{value}}" geçerli bir tarih değil.', + required: 'Bu alan gereklidir.', + requiresAtLeast: 'Bu alan en az {{count}} adet {{label}} gerektirmektedir.', + requiresNoMoreThan: 'Bu alana {{count}} adetten fazla {{label}} girilemez.', + requiresTwoNumbers: 'Bu alana en az iki rakam girilmesi zorunludur.', + shorterThanMax: 'Bu alan {{maxLength}} karakterden daha kısa olmalıdır.', + trueOrFalse: 'Bu alan yalnızca doğru ve yanlış olabilir.', + validUploadID: "'Bu alan geçerli bir karşıya yükleme ID'sine sahip değil.'", + }, + version: { + type: 'Tür', + aboutToPublishSelection: "Seçimdeki tüm {{label}}'i yayınlamak üzeresiniz. Emin misin?", + aboutToRestore: 'Döküman {{label}}, {{versionDate}} tarihindeki sürümüne geri döndürülecek.', + aboutToRestoreGlobal: + 'Global {{label}}, {{versionDate}} tarihindeki sürümüne geri döndürülecek.', + aboutToRevertToPublished: + 'Bu dökümanın değişikliklerini yayınladığı haline geri getirmek üzeresiniz. Devam etmek istiyor musunuz?', + aboutToUnpublish: 'Bu dökümanı yayından kaldırmak üzeresiniz. Devam etmek istiyor musunuz?', + aboutToUnpublishSelection: + 'Seçimdeki tüm {{label}} yayınını kaldırmak üzeresiniz. Emin misin?', + autosave: 'Otomatik kaydet', + autosavedSuccessfully: 'Otomatik kaydetme başarılı', + autosavedVersion: 'Otomatik kayıtlı sürüm', + changed: 'Değişiklik yapıldı', + compareVersion: 'Sürümü şununla karşılaştır:', + confirmPublish: 'Yayınlamayı onayla', + confirmRevertToSaved: 'Confirm revert to saved', + confirmUnpublish: 'Yayından kaldırmayı onayla', + confirmVersionRestoration: 'Sürümü Geri Getirmeyi Onayla', + currentDocumentStatus: 'Şu an {{docStatus}} döküman', + draft: 'Taslak', + draftSavedSuccessfully: 'Taslak başarıyla kaydedildi.', + lastSavedAgo: 'Son kaydedildi {{distance}} önce', + noFurtherVersionsFound: 'Başka sürüm bulunamadı.', + noRowsFound: '{{label}} bulunamadı', + preview: 'Önizleme', + problemRestoringVersion: 'Bu sürüme geri döndürürken bir hatayla karşılaşıldı.', + publish: 'Yayınla', + publishChanges: 'Değişiklikleri yayınla', + published: 'Yayınlandı', + publishing: 'Yayınlama', + restoreThisVersion: 'Bu sürüme geri döndür', + restoredSuccessfully: 'Geri getirme başarılı.', + restoring: 'Geri döndürülüyor...', + revertToPublished: 'Yayınlanana geri döndür', + reverting: 'Değişiklikler geri alınıyor...', + saveDraft: 'Taslağı kaydet', + selectLocales: 'Görüntülenecek yerel ayarları seçin', + selectVersionToCompare: 'Karşılaştırılacak bir sürüm seçin', + showLocales: 'Yerel ayarları göster:', + showingVersionsFor: 'Şunun için sürümler gösteriliyor:', + status: 'Durum', + unpublish: 'Yayından Kaldır', + unpublishing: 'Yayından kaldırılıyor...', + version: 'Sürüm', + versionCount_many: '{{count}} sürüm bulundu', + versionCount_none: 'Sürüm bulunamadı', + versionCount_one: '{{count}} sürüm bulundu', + versionCount_other: '{{count}} sürüm bulundu', + versionCreatedOn: '{{version}} oluşturma tarihi:', + versionID: 'Sürüm ID', + versions: 'Sürümler', + viewingVersion: '{{entityLabel}} {{documentTitle}} için sürümler gösteriliyor', + viewingVersionGlobal: '`Global {{entityLabel}} için sürümler gösteriliyor', + viewingVersions: '{{entityLabel}} {{documentTitle}} için sürümler gösteriliyor', + viewingVersionsGlobal: '`Global {{entityLabel}} için sürümler gösteriliyor', + }, + }, +} diff --git a/packages/translations/src/languages/uk.ts b/packages/translations/src/languages/uk.ts new file mode 100644 index 0000000000..e9e08ecfd5 --- /dev/null +++ b/packages/translations/src/languages/uk.ts @@ -0,0 +1,398 @@ +import type { Language } from '../types.js' + +export const uk: Language = { + dateFNSKey: 'uk', + translations: { + authentication: { + account: 'Обліковий запис', + accountOfCurrentUser: 'Обліковий запис поточного користувача', + alreadyActivated: 'Вже активований', + alreadyLoggedIn: 'Вже увійшли в систему', + apiKey: 'API ключ', + backToLogin: 'Повернутися до входу', + beginCreateFirstUser: 'Щоб розпочати — створість першого користувача', + changePassword: 'Змінити пароль', + checkYourEmailForPasswordReset: + 'Перевірте вашу електронну пошту на наявність посилання, що дозволить вам безпечно скинути пароль', + confirmGeneration: 'Підтвердити генерацію', + confirmPassword: 'Підтвердження паролю', + createFirstUser: 'Створення першого користувача', + emailNotValid: 'Вказана адреса електронної пошти недійсна', + emailSent: 'Лист відправлено', + enableAPIKey: 'Активувати API ключ', + failedToUnlock: 'Не вдалось розблокувати', + forceUnlock: 'Примусове розблокування', + forgotPassword: 'Забули пароль?', + forgotPasswordEmailInstructions: + 'Будь ласка, вкажіть адресу вашої електронної пошти нижче. Ви отримаєте лист на вашу електронну пошту з інструкціями щодо скидання пароля.', + forgotPasswordQuestion: 'Забули пароль?', + generate: 'Згенерувати', + generateNewAPIKey: 'Згенерувати новий API ключ', + generatingNewAPIKeyWillInvalidate: + 'Генерація нового API ключа зробить попередній <1>недійсним. Ви впевнені, що бажаєте продовжити?', + lockUntil: 'Заблокувати до', + logBackIn: 'Увійти знову', + logOut: 'Вийти', + loggedIn: + 'Щоб увйти в систему з іншого облікового запису, спочатку <0>вийдіть з системи.', + loggedInChangePassword: + 'Щоб змінити ваш пароль, перейдіть до <0>сторінки облікового запису і змініть ваш пароль.', + loggedOutInactivity: 'Ви вийшли з системи через бездіяльність.', + loggedOutSuccessfully: 'Ви успішно вийшли з системи.', + login: 'Увійти', + loginAttempts: 'Спроби входу', + loginUser: 'Вхід користувача в систему', + loginWithAnotherUser: + 'Щоб увйти в систему з іншого облікового запису, спочатку <0>вийдіть з системи.', + logout: 'Вийти', + logoutUser: 'Вийти з системи', + newAPIKeyGenerated: 'Новий API ключ згенеровано.', + newAccountCreated: + 'Новий обліковий запис було створено, щоб отримати доступ до {{serverURL}}, будь ласка, натисніть на наступне посилання, або вставте його в адресний рядок браузера, щоб підтвердити вашу електронну пошту: {{verificationURL}}
    Після підтвердження вашої електронно пошти, ви зможете увійти в систему.', + newPassword: 'Новий пароль', + resetPassword: 'Скинути пароль', + resetPasswordExpiration: 'Скинути пароль після закінчення строку дії', + resetPasswordToken: 'Токет для скидання пароля', + resetYourPassword: 'Скинути ваш пароль', + stayLoggedIn: 'Залишитись в системі', + successfullyUnlocked: 'Успішно розблоковано', + unableToVerify: 'Неможливо підтвердити', + verified: 'Підтверджено', + verifiedSuccessfully: 'Успішно підтверджено', + verify: 'Підтвердити', + verifyUser: 'Підтвердити користувача', + verifyYourEmail: 'Підтвердити пошту', + youAreInactive: + 'Ви були неактивні певний час і скоро, в цілях вашої безпеки, вас буде розлогінено. Чи бажаєте ви залишитись в системі?', + youAreReceivingResetPassword: + 'Ви отримали це повідомлення, бо ви (або хтось інший) створив запит на скидання пароля до вашого облікового запису. Будь ласка, натисніть на наступне посилання, або вставте посилання в адресний рядок браузера, щоб завершити процес:', + youDidNotRequestPassword: + 'Якщо ви не сторювали цей запит, будь ласка, проігноруйте це повідомлення', + }, + error: { + accountAlreadyActivated: 'Цей обліковий запис вже активований', + autosaving: 'Виникла проблема під час автозбереження цього документа.', + correctInvalidFields: 'Будь ласка, виправте невірні поля.', + deletingFile: 'Виникла помилка під час видалення файлу', + deletingTitle: + "Виникла помилка під час видалення {{title}}. Будь ласка, перевірте ваше з'єднання та спробуйте ще раз.", + emailOrPasswordIncorrect: 'Вказана адреса електронної пошти або пароль є невірними', + followingFieldsInvalid_one: 'Наступне поле невірне:', + followingFieldsInvalid_other: 'Наступні поля невірні', + incorrectCollection: 'Неправильна колекція', + invalidFileType: 'Невірний тип файлу', + invalidFileTypeValue: 'Невірний тип файлу: {{value}}', + loadingDocument: 'Виникла помилка під час завантаження документа з ID {{id}}.', + missingEmail: 'Відсутній email.', + missingIDOfDocument: 'Відсутній ID документа для оновлення.', + missingIDOfVersion: 'Відсутній ID версії.', + missingRequiredData: "Відсусті обов'язкові дані.", + noFilesUploaded: 'Жодного файлу не було завантажено.', + noMatchedField: 'Не знайдено відповідного поля для "{{label}}"', + noUser: 'Немає користувача', + notAllowedToAccessPage: 'Ви не маєте доступу до цієї сторінки.', + notAllowedToPerformAction: 'Ви не маєте дозволу виконувати цю дію.', + notFound: 'Запитуваний ресурс не знайдено.', + previewing: 'Виникла помилка під час попереднього перегляду цього документа.', + problemUploadingFile: 'Виникла помилка під час завантаження файлу.', + tokenInvalidOrExpired: 'Токен недійсний, або його строк дії закінчився.', + unPublishingDocument: 'Під час скасування публікації даного документа виникла помилка.', + unableToDeleteCount: 'Не вдалося видалити {{count}} із {{total}} {{label}}.', + unableToUpdateCount: 'Не вдалося оновити {{count}} із {{total}} {{label}}.', + unauthorized: 'Немає доступу, ви повинні увійти, щоб виконати цей запит.', + unknown: 'Виникла невідома помилка.', + unspecific: 'Виникла помилка.', + userLocked: 'Цей користувач заблокований через велику кількість невдалих спроб входу.', + valueMustBeUnique: 'Значення має бути унікальним.', + verificationTokenInvalid: 'Токен верифікації недійсний.', + }, + fields: { + addLabel: 'Додати {{label}}', + addLink: 'Додати посилання', + addNew: 'Додати новий', + addNewLabel: 'Створити {{label}}', + addRelationship: "Додати взаємозв'язок", + addUpload: 'Додати завантаження', + block: 'блок', + blockType: 'Тип блока', + blocks: 'блоки', + chooseBetweenCustomTextOrDocument: + 'Виберіть між введенням власної URL-адреси та посиланням на інший документ.', + chooseDocumentToLink: 'Оберіть документ, на який потрібно зробити посилання', + chooseFromExisting: 'Обрати з існуючих', + chooseLabel: 'Обрати {{label}}', + collapseAll: 'Згорнути все', + customURL: 'Власний URL', + editLabelData: 'Редагувати дані {{label}}', + editLink: 'Редагувати посилання', + editRelationship: "Редагувати взаємозв'язок", + enterURL: 'Введіть URL', + internalLink: 'Внутрішнє посилання', + itemsAndMore: '{{items}} і ще {{count}}', + labelRelationship: "{{label}} взаємов'язок", + latitude: 'Широта', + linkType: 'Тип посилання', + linkedTo: "Зв'язано з <0>{{label}}", + longitude: 'Довгота', + newLabel: 'Новий {{label}}', + openInNewTab: 'Відкривати в новій вкладці', + passwordsDoNotMatch: 'Паролі не співпадають.', + relatedDocument: "Пов'язаний документ", + relationTo: "Пов'язано з", + removeRelationship: "Видалити взаємозв'язок", + removeUpload: 'Видалити завантаження', + saveChanges: 'Зберегти зміни', + searchForBlock: 'Знайти блок', + selectExistingLabel: 'Вибрати існуючий {{label}}', + selectFieldsToEdit: 'Виберіть поля для редагування', + showAll: 'Показати все', + swapRelationship: "Замінити зв'язок", + swapUpload: 'Замінити завантаження', + textToDisplay: 'Текст для відображення', + toggleBlock: 'Перемкнути блок', + uploadNewLabel: 'Завантажити новий {{label}}', + }, + general: { + aboutToDelete: 'Ви бажаєте видалити {{label}} <1>{{title}}. Ви впевнені?', + aboutToDeleteCount_many: 'Ви бажаєте видалити {{count}} {{label}}', + aboutToDeleteCount_one: 'Ви бажаєте видалити {{count}} {{label}}', + aboutToDeleteCount_other: 'Ви бажаєте видалити {{count}} {{label}}', + addBelow: 'Додати нижче', + addFilter: 'Додати фільтр', + adminTheme: 'Тема адмін панелі', + and: 'і', + applyChanges: 'Застосувати зміни', + ascending: 'В порядку зростання', + automatic: 'Автоматично', + backToDashboard: 'Повернутись до головної сторінки', + cancel: 'Скасувати', + changesNotSaved: + 'Ваши зміни не були збережені. Якщо ви вийдете зараз, то втратите свої зміни.', + close: 'Закрити', + collapse: 'Згорнути', + collections: 'Колекції', + columnToSort: 'Колонка для сортування', + columns: 'Колонки', + confirm: 'Підтвердити', + confirmDeletion: 'Підтвердити видалення', + confirmDuplication: 'Підтвердити копіювання', + copied: 'Скопійовано', + copy: 'Скопіювати', + create: 'Створити', + createNew: 'Створити', + createNewLabel: 'Створити новий {{label}}', + created: 'Створено', + createdAt: 'Дата створення', + creating: 'Створення', + creatingNewLabel: 'Створення нового {{label}}', + dark: 'Темна', + dashboard: 'Головна', + delete: 'Видалити', + deletedCountSuccessfully: 'Успішно видалено {{count}} {{label}}.', + deletedSuccessfully: 'Успішно видалено.', + deleting: 'Видалення...', + descending: 'В порядку спадання', + deselectAllRows: 'Скасувати вибір всіх рядків', + duplicate: 'Дублювати', + duplicateWithoutSaving: 'Дублювання без збереження змін', + edit: 'Редагувати', + editLabel: 'Редагувати {{label}}', + editing: 'Редагування', + editingLabel_many: 'Редагування {{count}} {{label}}', + editingLabel_one: 'Редагування {{count}} {{label}}', + editingLabel_other: 'Редагування {{count}} {{label}}', + email: 'Електронна пошта', + emailAddress: 'Адреса електронної пошти', + enterAValue: 'Введіть значення', + error: 'Помилка', + errors: 'Помилки', + fallbackToDefaultLocale: 'Відновлення локалі за замовчуванням', + filter: 'Фільтрувати', + filterWhere: 'Де фільтрувати {{label}}', + filters: 'Фільтри', + globals: 'Глобальні', + language: 'Мова', + lastModified: 'Останні зміни', + leaveAnyway: 'Все одно вийти', + leaveWithoutSaving: 'Вийти без збереження', + light: 'Світла', + livePreview: 'Попередній перегляд', + loading: 'Завантаження', + locale: 'Локаль', + locales: 'Локалі', + menu: 'Меню', + moveDown: 'Перемістити нижче', + moveUp: 'Перемістити вище', + newPassword: 'Новий пароль', + noFiltersSet: 'Відсусті фільтри', + noLabel: '<без {{label}}>', + noOptions: 'Немає варіантів', + noResults: + 'Жодного {{label}} не знайдено. Або {{label}} ще не існує, або жодна з них не відповідає фільтрам, що ви задали више.', + noValue: 'Немає значення', + none: 'Ніхто', + notFound: 'Не знайдено', + nothingFound: 'Нічого не знайдено', + of: 'з', + open: 'Відкрити', + or: 'або', + order: 'Порядок', + pageNotFound: 'Сторінка не знайдена', + password: 'Пароль', + payloadSettings: 'Налаштування Payload', + perPage: 'На сторінці: {{limit}}', + remove: 'Видалити', + reset: 'Скидання', + row: 'Рядок', + rows: 'Рядки', + save: 'Зберегти', + saving: 'Збереження...', + searchBy: 'Шукати по {{label}}', + selectAll: 'Вибрати всі {{count}} {{label}}', + selectAllRows: 'Обрати всі рядки', + selectValue: 'Обрати значення', + selectedCount: 'Обрано {{count}} {{label}}', + showAllLabel: 'Показати всі {{label}}', + sorryNotFound: 'Вибачте, немає нічого, що відповідало б Вашому запиту.', + sort: 'Сортувати', + sortByLabelDirection: 'Сортувати за {{label}} {{direction}}', + stayOnThisPage: 'Залишитись на цій сторінці', + submissionSuccessful: 'Успішно відправлено.', + submit: 'Відправити', + successfullyCreated: '{{label}} успішно створено.', + successfullyDuplicated: '{{label}} успішно продубльовано.', + thisLanguage: 'Українська', + titleDeleted: '{{label}} "{{title}}" успішно видалено.', + unauthorized: 'Немає доступу', + unsavedChangesDuplicate: 'Ви маєте незбережені зміни. Чи бажаєте ви продовжити дублювання?', + untitled: 'Без назви', + updatedAt: 'Змінено', + updatedCountSuccessfully: 'Успішно оновлено {{count}} {{label}}.', + updatedSuccessfully: 'Успішно відредаговано.', + updating: 'оновлення', + uploading: 'завантаження', + user: 'Користувач', + users: 'Користувачі', + value: 'Значення', + welcome: 'Вітаю', + }, + operators: { + contains: 'містить', + equals: 'дорівнює', + exists: 'існує', + isGreaterThan: 'більше ніж', + isGreaterThanOrEqualTo: 'більше або дорівнює', + isIn: 'є в', + isLessThan: 'менше ніж', + isLessThanOrEqualTo: 'менше або дорівнює', + isLike: 'схоже', + isNotEqualTo: 'не дорівнює', + isNotIn: 'не в', + near: 'поруч', + }, + upload: { + crop: 'Обрізати', + cropToolDescription: + 'Перетягніть кути обраної області, намалюйте нову область або скоригуйте значення нижче.', + dragAndDrop: 'Перемістіть файл', + dragAndDropHere: 'або перемістіть сюди файл', + editImage: 'Редагувати зображення', + fileName: 'Назва файлу', + fileSize: 'Розмір файлу', + focalPoint: 'Точка фокусу', + focalPointDescription: + 'Перетягніть точку фокусу безпосередньо на попередньому перегляді або налаштуйте значення нижче.', + height: 'Висота', + lessInfo: 'Менше інформації', + moreInfo: 'Більше інформації', + previewSizes: 'Попередній перегляд розмірів', + selectCollectionToBrowse: 'Оберіть колекцію для перегляду', + selectFile: 'Оберіть файл', + setCropArea: 'Встановити область обрізки', + setFocalPoint: 'Встановити точку фокусу', + sizes: 'Розміри', + sizesFor: 'Розміри для {{label}}', + width: 'Ширина', + }, + validation: { + emailAddress: 'Будь ласка, введіть валідну адресу електронної пошти.', + enterNumber: 'Будь ласка, введіть валідне число.', + fieldHasNo: 'В цього полі немає {{label}}', + greaterThanMax: '{{value}} більше, ніж припустиме максимальне значення {{label}} в {{max}}.', + invalidInput: 'У цьому полі введено некоректне значення.', + invalidSelection: 'Це поле має некоректний вибір.', + invalidSelections: 'Це поле має наступні невірні варіанти вибору:', + lessThanMin: '{{value}} менше, ніж мінімальне припустиме значення {{label}} в {{min}}.', + limitReached: 'Досягнуто межі, можна додати лише {{max}} елементів.', + longerThanMin: 'Це значення має дорівнювати або бути довшим, ніж {{minLength}} символів.', + notValidDate: '"{{value}}" - некоректна дата.', + required: "Це поле є обов'язковим.", + requiresAtLeast: 'Це поле потребує не менше {{count}} {{label}}.', + requiresNoMoreThan: 'Це поле потребує не більше {{count}} {{label}}.', + requiresTwoNumbers: 'У цьому полі потрібно ввести два числа.', + shorterThanMax: 'Це значення має дорівнювати або бути коротшим, ніж {{maxLength}} символів.', + trueOrFalse: 'Це поле може мати значення тільки true або false.', + validUploadID: 'Це поле не є дійсним ID завантаження.', + }, + version: { + type: 'Тип', + aboutToPublishSelection: 'Ви бажаєте опублікувати всі {{label}} у вибірці. Ви впевнені?', + aboutToRestore: + 'Ви бажаєте відновити цей документ {{label}} до стану, в якому він знаходився {{versionDate}}. Ви впевнені?', + aboutToRestoreGlobal: + 'Ви бажаєте відновити глобальний запис {{label}} до стану, в якому він знаходився {{versionDate}}. Ви впевнені?', + aboutToRevertToPublished: + 'Ви бажаєте повернути зміни цього документа до його опублікованого стану. Ви впевнені?', + aboutToUnpublish: 'Ви бажаєте скасувати публікацю цього документа. Ви впевнені?', + aboutToUnpublishSelection: + 'Ви бажаєте скасувати публікацію всіх {{label}} у вибірці. Ви впевнені?', + autosave: 'Автозбереження', + autosavedSuccessfully: 'Автозбереження успішно виконано.', + autosavedVersion: 'Автозбереження', + changed: 'Змінено', + compareVersion: 'Порівняти версію з:', + confirmPublish: 'Підтвердити публікацію', + confirmRevertToSaved: 'Підтвердити повернення до збереженого стану', + confirmUnpublish: 'Підвтердити скасування публікації', + confirmVersionRestoration: 'Підтвердити відновлення версії', + currentDocumentStatus: 'Поточний статус {{docStatus}} документа', + draft: 'Чернетка', + draftSavedSuccessfully: 'Чернетку успішно збережено.', + lastSavedAgo: 'Востаннє збережено {{distance}} тому', + noFurtherVersionsFound: 'Інших версій не знайдено', + noRowsFound: 'Не знайдено {{label}}', + preview: 'Попередній перегляд', + problemRestoringVersion: 'Виникла проблема з відновленням цієї версії', + publish: 'Опублікувати', + publishChanges: 'Опублікувати зміни', + published: 'Опубліковано', + publishing: 'Публікація', + restoreThisVersion: 'Відновити цю версію', + restoredSuccessfully: 'Відновлено успішно.', + restoring: 'Відновлення...', + revertToPublished: 'Повернутися до опублікованого стану', + reverting: 'Повернення до опублікованого стану...', + saveDraft: 'Зберегти чернетку', + selectLocales: 'Оберіть локаль для відображення', + selectVersionToCompare: 'Оберіть версію для порівняння', + showLocales: 'Показати локалі:', + showingVersionsFor: 'Показані версії для:', + status: 'Статус', + unpublish: 'Скасувати публікацію', + unpublishing: 'Скасування публікації...', + version: 'Версія', + versionCount_many: '{{count}} версій знайдено', + versionCount_none: 'Версій не знайдено', + versionCount_one: '{{count}} версія знайдена', + versionCount_other: '{{count}} версій знайдено', + versionCount_two: '{{count}} версії знайдено', + versionCreatedOn: '{{version}} створена:', + versionID: 'ID версії', + versions: 'Версії', + viewingVersion: 'Перенляд версії для {{entityLabel}} {{documentTitle}}', + viewingVersionGlobal: 'Перегляд версій для глобальної колекції {{entityLabel}}', + viewingVersions: 'Перегляд версій для {{entityLabel}} {{documentTitle}}', + viewingVersionsGlobal: 'Перегляд версій для глобальної колекції {{entityLabel}}', + }, + }, +} diff --git a/packages/translations/src/languages/vi.ts b/packages/translations/src/languages/vi.ts new file mode 100644 index 0000000000..9dd95a9238 --- /dev/null +++ b/packages/translations/src/languages/vi.ts @@ -0,0 +1,391 @@ +import type { Language } from '../types.js' + +export const vi: Language = { + dateFNSKey: 'vi', + translations: { + authentication: { + account: 'Tài khoản', + accountOfCurrentUser: 'Tài khoản của người dùng hiện tại', + alreadyActivated: 'Đã được kích hoạt', + alreadyLoggedIn: 'Đã đăng nhập', + apiKey: 'API Key', + backToLogin: 'Quay lại đăng nhập.', + beginCreateFirstUser: 'Để bắt đầu, hãy tạo người dùng đầu tiên.', + changePassword: 'Đổi mật khẩu', + checkYourEmailForPasswordReset: + 'Hãy kiểm tra email của bạn để lấy đường dẫn tạo lại mật khẩu.', + confirmGeneration: 'Xác nhận, tạo API Key', + confirmPassword: 'Xác nhận mật khẩu', + createFirstUser: 'Tạo người dùng đầu tiên', + emailNotValid: 'Email không chính xác', + emailSent: 'Email đã được gửi', + enableAPIKey: 'Kích hoạt API Key', + failedToUnlock: 'Mở khóa thất bại', + forceUnlock: 'Mở khóa tài khoản', + forgotPassword: 'Quên mật khẩu', + forgotPasswordEmailInstructions: 'Nhập email của bạn để nhận hướng dẫn tạo lại mật khẩu.', + forgotPasswordQuestion: 'Quên mật khẩu?', + generate: 'Tạo', + generateNewAPIKey: 'Tạo API Key mới', + generatingNewAPIKeyWillInvalidate: + 'Việc tạo API Key mới sẽ <1>vô hiệu hóa API Key cũ. Bạn có muốn tiếp tục không?', + lockUntil: 'Khóa lại cho tới thời điểm sau', + logBackIn: 'Đăng nhập lại', + logOut: 'Đăng xuất', + loggedIn: + 'Để đăng nhập dưới tên người dùng khác, bạn phải <0>đăng xuất người dùng hiện tại.', + loggedInChangePassword: 'Để đổi mật khẩu, hãy truy cập cài đặt <0>tài khoản.', + loggedOutInactivity: 'Bạn đã tự động đăng xuất sau một khoản thời gian dài không thao tác.', + loggedOutSuccessfully: 'Đăng xuất thành công.', + login: 'Đăng nhập', + loginAttempts: 'Lần đăng nhập', + loginUser: 'Đăng nhập người dùng', + loginWithAnotherUser: + 'Để đăng nhập dưới tên người dùng khác, bạn phải <0>đăng xuất người dùng hiện tại.', + logout: 'Đăng xuất', + logoutUser: 'Đăng xuất người dùng', + newAPIKeyGenerated: 'API Key mới đã được tạo', + newAccountCreated: + 'Một tài khoản mới đã được tạo cho bạn. Tài khoản này được dùng để truy cập {{serverURL}} Hãy nhấp chuột hoặc sao chép đường dẫn sau vào trình duyệt của bạn để xác thực email: {{verificationURL}}
    Sau khi email được xác thực, bạn sẽ có thể đăng nhập.', + newPassword: 'Mật khẩu mới', + resetPassword: 'Tạo lại mật khẩu', + resetPasswordExpiration: 'Hạn tạo lại mật khẩu ', + resetPasswordToken: 'Tạo lại token cho mật khẩu', + resetYourPassword: 'Tạo lại mật khẩu', + stayLoggedIn: 'Duy trì đăng nhập', + successfullyUnlocked: 'Mở khóa thành công', + unableToVerify: 'Không thể xác thực', + verified: 'Đã xác thực', + verifiedSuccessfully: 'Đã xác thực thành công', + verify: 'Tiến hành xác thực', + verifyUser: 'Tiến hành xác thực người dùng', + verifyYourEmail: 'Tiến hành xác thực email', + youAreInactive: + 'Bạn đã không thao tác trong một khoảng thời gian, và sẽ bị tự động đăng xuất vì lý do bảo mật. Bạn có muốn tiếp tục phiên đăng nhập.', + youAreReceivingResetPassword: + 'Bạn nhận được tin nhắn này vì bạn (hoặc một người nào khác) đã gửi yêu cầu thay đổi mật khẩu tài khoản của bạn. Xin hãy nhấp chuột vào đường dẫn sau, hoặc sao chép vào trình duyệt của bạn để hoàn tất quá trình:', + youDidNotRequestPassword: + 'Nếu bạn không phải là người yêu cầu thay đổi mật khẩu, xin hãy bỏ qua tin nhắn này và mật khẩu của bạn sẽ được giữ nguyên.', + }, + error: { + accountAlreadyActivated: 'Lỗi - Tài khoản này đã được kích hoạt.', + autosaving: 'Lỗi - Đã xảy ra vấn đề khi tự động sao lưu bản tài liệu này.', + correctInvalidFields: 'Lỗi - Xin hãy sửa lại những fields không hợp lệ.', + deletingFile: 'Lỗi - Đã xảy ra vấn đề khi xóa tệp này.', + deletingTitle: + 'Lỗi - Đã xảy ra vấn đề khi xóa {{title}}. Hãy kiểm tra kết nối mạng và thử lại.', + emailOrPasswordIncorrect: 'Lỗi - Email hoặc mật khẩu không chính xác.', + followingFieldsInvalid_one: 'Lỗi - Field sau không hợp lệ:', + followingFieldsInvalid_other: 'Lỗi - Những fields sau không hợp lệ:', + incorrectCollection: 'Lỗi - Collection không hợp lệ.', + invalidFileType: 'Lỗi - Định dạng tệp không hợp lệ.', + invalidFileTypeValue: 'Lỗi - Định dạng tệp không hợp lệ: {{value}}.', + loadingDocument: 'Lỗi - Đã xảy ra vấn để khi tải bản tài liệu với ID {{id}}.', + missingEmail: 'Lỗi - Thiếu email.', + missingIDOfDocument: 'Lỗi - Thiếu ID của bản tài liệu cần cập nhật.', + missingIDOfVersion: 'Lỗi - Thiếu ID của phiên bản.', + missingRequiredData: 'Lỗi - Thiếu dữ liệu cần thiết.', + noFilesUploaded: 'Lỗi - File chưa được tải lên.', + noMatchedField: 'Lỗi - Không tìm thấy field trùng với "{{label}}".', + noUser: 'Lỗi - Request thiếu thông tin người dùng.', + notAllowedToAccessPage: 'Lỗi - Bạn không có quyền truy cập trang này.', + notAllowedToPerformAction: 'Lỗi - Bạn không có quyền thực hiện lệnh này.', + notFound: 'Lỗi - Không thể tìm thấy.', + previewing: 'Lỗi - Đã xảy ra vấn đề khi xem trước bản tài liệu này.', + problemUploadingFile: 'Lỗi - Đã xảy ra vấn để khi tải lên file sau.', + tokenInvalidOrExpired: 'Lỗi - Token không hợp lệ hoặc đã hết hạn.', + unPublishingDocument: 'Lỗi - Đã xảy ra vấn để khi ẩn bản tài liệu.', + unableToDeleteCount: 'Không thể xóa {{count}} trong số {{total}} {{label}}.', + unableToUpdateCount: 'Không thể cập nhật {{count}} trên {{total}} {{label}}.', + unauthorized: 'Lỗi - Bạn cần phải đăng nhập trước khi gửi request sau.', + unknown: 'Lỗi - Không xác định (unknown error).', + unspecific: 'Lỗi - Đã xảy ra (unspecific error).', + userLocked: 'Lỗi- Tài khoản đã bị khóa do đăng nhập thất bại nhiều lần.', + valueMustBeUnique: 'Lỗi - Giá trị không được trùng lặp.', + verificationTokenInvalid: 'Lỗi - Token dùng để xác thực không hợp lệ.', + }, + fields: { + addLabel: 'Thêm: {{label}}', + addLink: 'Thêm liên kết', + addNew: 'Thêm mới', + addNewLabel: 'Thêm mới: {{label}}', + addRelationship: 'Thêm mối quan hệ (relationship)', + addUpload: 'Thêm tải lên (upload)', + block: 'block', + blockType: 'Block Type', + blocks: 'blocks', + chooseBetweenCustomTextOrDocument: + 'Chọn giữa nhập URL văn bản tùy chỉnh hoặc liên kết đến tài liệu khác.', + chooseDocumentToLink: 'Chọn một tài liệu để liên kết đến', + chooseFromExisting: 'Chọn từ thư viện', + chooseLabel: 'Chọn: {{label}}', + collapseAll: 'Ẩn toàn bộ', + customURL: 'URL tùy chỉnh', + editLabelData: 'Chỉnh sửa nội dung của: {{label}}', + editLink: 'Chỉnh sửa liên kết', + editRelationship: 'Chỉnh sửa mối quan hệ', + enterURL: 'Nhập một URL', + internalLink: 'Liên kết nội bộ', + itemsAndMore: '{{items}} và {{count}} món nữa', + labelRelationship: 'Mối quan hệ của {{label}} (Relationship)', + latitude: 'Vĩ độ', + linkType: 'Loại liên kết', + linkedTo: 'Được nối với <0>{{label}}', + longitude: 'Kinh độ', + newLabel: 'Tạo {{label}} mới', + openInNewTab: 'Mở trong trang mới', + passwordsDoNotMatch: 'Mật khẩu không trùng.', + relatedDocument: 'bản tài liệu liên quan', + relationTo: 'Có quan hệ với', + removeRelationship: 'Xóa Mối quan hệ', + removeUpload: 'Xóa bản tải lên', + saveChanges: 'Luu thay đổi', + searchForBlock: 'Tìm block', + selectExistingLabel: 'Chọn một {{label}} có sẵn', + selectFieldsToEdit: 'Chọn các trường để chỉnh sửa', + showAll: 'Hiển thị toàn bộ', + swapRelationship: 'Đổi quan hệ', + swapUpload: 'Đổi bản tải lên', + textToDisplay: 'Văn bản để hiển thị', + toggleBlock: 'Bật/tắt block', + uploadNewLabel: 'Tải lên bản mới: {{label}}', + }, + general: { + aboutToDelete: 'Chuẩn bị xóa {{label}} <1>{{title}}. Bạn có muốn tiếp tục không?', + aboutToDeleteCount_many: 'Bạn sắp xóa {{count}} {{label}}', + aboutToDeleteCount_one: 'Bạn sắp xóa {{count}} {{label}}', + aboutToDeleteCount_other: 'Bạn sắp xóa {{count}} {{label}}', + addBelow: 'Thêm bên dưới', + addFilter: 'Thêm bộ lọc', + adminTheme: 'Giao diện bảng điều khiển', + and: 'Và', + applyChanges: 'Áp dụng Thay đổi', + ascending: 'Sắp xếp theo thứ tự tăng dần', + automatic: 'Tự động', + backToDashboard: 'Quay lại bảng điều khiển', + cancel: 'Hủy', + changesNotSaved: 'Thay đổi chưa được lưu lại. Bạn sẽ mất bản chỉnh sửa nếu thoát bây giờ.', + close: 'Gần', + collapse: 'Thu gọn', + collections: 'Collections', + columnToSort: 'Sắp xếp cột', + columns: 'Hiển thị cột', + confirm: 'Xác nhận', + confirmDeletion: 'Xác nhận xóa', + confirmDuplication: 'Xác nhận tạo bản sao', + copied: 'Đâ sao chép', + copy: 'Sao chép', + create: 'Tạo', + createNew: 'Tạo mới', + createNewLabel: 'Tạo mới {{label}}', + created: 'Đã tạo', + createdAt: 'Ngày tạo', + creating: 'Đang tạo', + creatingNewLabel: 'Đang tạo mới {{label}}', + dark: 'Nền tối', + dashboard: 'Bảng điều khiển', + delete: 'Xóa', + deletedCountSuccessfully: 'Đã xóa thành công {{count}} {{label}}.', + deletedSuccessfully: 'Đã xoá thành công.', + deleting: 'Đang xóa...', + descending: 'Xếp theo thứ tự giảm dần', + deselectAllRows: 'Bỏ chọn tất cả các hàng', + duplicate: 'Tạo bản sao', + duplicateWithoutSaving: 'Không lưu dữ liệu và tạo bản sao', + edit: 'Chỉnh sửa', + editLabel: 'Chỉnh sửa: {{label}}', + editing: 'Đang chỉnh sửa', + editingLabel_many: 'Đang chỉnh sửa {{count}} {{label}}', + editingLabel_one: 'Đang chỉnh sửa {{count}} {{label}}', + editingLabel_other: 'Đang chỉnh sửa {{count}} {{label}}', + email: 'Email', + emailAddress: 'Địa chỉ Email', + enterAValue: 'Nhập một giá trị', + error: 'Lỗi', + errors: 'Lỗi', + fallbackToDefaultLocale: 'Ngôn ngữ mặc định', + filter: 'Lọc', + filterWhere: 'Lọc {{label}} với điều kiện:', + filters: 'Bộ lọc', + globals: 'Toàn thể (globals)', + language: 'Ngôn ngữ', + lastModified: 'Chỉnh sửa lần cuối vào lúc', + leaveAnyway: 'Tiếp tục thoát', + leaveWithoutSaving: 'Thay đổi chưa được lưu', + light: 'Nền sáng', + livePreview: 'Xem trước', + loading: 'Đang tải', + locale: 'Ngôn ngữ', + locales: 'Khu vực', + menu: 'Thực đơn', + moveDown: 'Di chuyển xuống', + moveUp: 'Di chuyển lên', + newPassword: 'Mật khảu mới', + noFiltersSet: 'Không có bộ lọc nào được áp dụng', + noLabel: '', + noOptions: 'Không có lựa chọn', + noResults: + 'Danh sách rỗng: {{label}}. Có thể {{label}} chưa tồn tại hoặc không có dữ kiện trùng với bộ lọc hiện tại.', + noValue: 'Không có giá trị', + none: 'Không có', + notFound: 'Không tìm thấy', + nothingFound: 'Không tìm thấy', + of: 'trong số', + open: 'Mở', + or: 'hoặc', + order: 'Thứ tự', + pageNotFound: 'Không tìm thấy trang', + password: 'Mật khẩu', + payloadSettings: 'Cài đặt', + perPage: 'Hiển thị mỗi trang: {{limit}}', + remove: 'Loại bỏ', + reset: 'Đặt lại', + row: 'Hàng', + rows: 'Những hàng', + save: 'Luu', + saving: 'Đang lưu...', + searchBy: 'Tìm với {{label}}', + selectAll: 'Chọn tất cả {{count}} {{label}}', + selectAllRows: 'Chọn tất cả các hàng', + selectValue: 'Chọn một giá trị', + selectedCount: 'Đã chọn {{count}} {{label}}', + showAllLabel: 'Hiển thị tất cả {{label}}', + sorryNotFound: 'Xin lỗi, không có kết quả nào tương ứng với request của bạn.', + sort: 'Sắp xếp', + sortByLabelDirection: 'Sắp xếp theo {{label}} {{direction}}', + stayOnThisPage: 'Ở lại trang này', + submissionSuccessful: 'Gửi thành công.', + submit: 'Gửi', + successfullyCreated: '{{label}} đã được tạo thành công.', + successfullyDuplicated: '{{label}} đã được sao chép thành công.', + thisLanguage: 'Vietnamese (Tiếng Việt)', + titleDeleted: '{{label}} {{title}} đã được xóa thành công.', + unauthorized: 'Không có quyền truy cập.', + unsavedChangesDuplicate: 'Bạn chưa lưu các thay đổi. Bạn có muốn tiếp tục tạo bản sao?', + untitled: 'Chưa có tiêu đề', + updatedAt: 'Ngày cập nhật', + updatedCountSuccessfully: 'Đã cập nhật thành công {{count}} {{label}}.', + updatedSuccessfully: 'Cập nhật thành công.', + updating: 'Đang cập nhật', + uploading: 'Đang tải lên', + user: 'Người dùng', + users: 'Người dùng', + value: 'Giá trị', + welcome: 'Xin chào', + }, + operators: { + contains: 'có chứa', + equals: 'bằng', + exists: 'tồn tại', + isGreaterThan: 'lớn hơn', + isGreaterThanOrEqualTo: 'lớn hơn hoặc bằng', + isIn: 'có trong', + isLessThan: 'nhỏ hơn', + isLessThanOrEqualTo: 'nhỏ hơn hoặc bằng', + isLike: 'gần giống', + isNotEqualTo: 'không bằng', + isNotIn: 'không có trong', + near: 'gần', + }, + upload: { + crop: 'Mùa vụ', + cropToolDescription: + 'Kéo các góc của khu vực đã chọn, vẽ một khu vực mới hoặc điều chỉnh các giá trị dưới đây.', + dragAndDrop: 'Kéo và thả một tập tin', + dragAndDropHere: 'hoặc kéo và thả file vào đây', + editImage: 'Chỉnh sửa hình ảnh', + fileName: 'Tên file', + fileSize: 'Dung lượng file', + focalPoint: 'Điểm trọng tâm', + focalPointDescription: + 'Kéo điểm tiêu cực trực tiếp trên trình xem trước hoặc điều chỉnh các giá trị bên dưới.', + height: 'Chiều cao', + lessInfo: 'Hiển thị ít hơn', + moreInfo: 'Thêm', + previewSizes: 'Kích cỡ xem trước', + selectCollectionToBrowse: 'Chọn một Collection để tìm', + selectFile: 'Chọn một file', + setCropArea: 'Đặt khu vực cắt', + setFocalPoint: 'Đặt điểm tiêu điểm', + sizes: 'Các độ phân giải', + sizesFor: 'Kích thước cho {{label}}', + width: 'Chiều rộng', + }, + validation: { + emailAddress: 'Địa chỉ email không hợp lệ.', + enterNumber: 'Vui lòng nhập số.', + fieldHasNo: 'Field này không có: {{label}}', + greaterThanMax: '{{value}} lớn hơn giá trị tối đa cho phép của {{label}} là {{max}}.', + invalidInput: 'Dữ liệu nhập vào không hợp lệ.', + invalidSelection: 'Lựa chọn ở field này không hợp lệ.', + invalidSelections: "'Field này có những lựa chọn không hợp lệ sau:'", + lessThanMin: '{{value}} nhỏ hơn giá trị tối thiểu cho phép của {{label}} là {{min}}.', + limitReached: 'Đã đạt giới hạn, chỉ có thể thêm {{max}} mục.', + longerThanMin: 'Giá trị này cần có độ dài tối thiểu {{minLength}} ký tự.', + notValidDate: '"{{value}}" không phải là một ngày (date) hợp lệ.', + required: 'Field này cần được diền.', + requiresAtLeast: 'Field này cần tối thiểu {{count}} {{label}}.', + requiresNoMoreThan: 'Field này không thể vượt quá {{count}} {{label}}.', + requiresTwoNumbers: 'Field này cần tối thiểu 2 chữ số.', + shorterThanMax: 'Giá trị phải ngắn hơn hoặc bằng {{maxLength}} ký tự.', + trueOrFalse: 'Field này chỉ có thể chứa giá trị true hoặc false.', + validUploadID: "'Field này không chứa ID tải lên hợp lệ.'", + }, + version: { + type: 'Loại', + aboutToPublishSelection: 'Bạn có muốn xuất bản tất cả {{label}} không?', + aboutToRestore: 'Bạn chuẩn bị khôi phục lại {{label}} về phiên bản {{versionDate}}.', + aboutToRestoreGlobal: + 'Bạn chuẩn bị khôi phục lại bản toàn thể (global) của {{label}} về phiên bản {{versionDate}}.', + aboutToRevertToPublished: 'Bạn có muốn tái xuất bản bản nháp này không?', + aboutToUnpublish: 'Bạn có muốn ngưng xuất bản?', + aboutToUnpublishSelection: 'Bạn có muốn ngưng xuất bản tất cả {{label}} không?', + autosave: 'Tự động lưu dữ liệu', + autosavedSuccessfully: 'Đã tự động lưu thành công.', + autosavedVersion: 'Các phiên bản từ việc tự động lưu dữ liệu', + changed: 'Đã thay đổi', + compareVersion: 'So sánh phiên bản này với:', + confirmPublish: 'Xác nhận xuất bản', + confirmRevertToSaved: 'Xác nhận, quay về trạng thái đã lưu', + confirmUnpublish: 'Xác nhận, ngưng xuất bản', + confirmVersionRestoration: 'Xác nhận, khôi phục về phiên bản trước', + currentDocumentStatus: 'Trạng thái tài liệu hiện tại: {{docStatus}}', + draft: 'Bản nháp', + draftSavedSuccessfully: 'Bản nháp đã được lưu thành công.', + lastSavedAgo: 'Lần lưu cuối cùng {{distance}} trước đây', + noFurtherVersionsFound: 'Không tìm thấy phiên bản cũ hơn', + noRowsFound: 'Không tìm thấy: {{label}}', + preview: 'Bản xem trước', + problemRestoringVersion: 'Đã xảy ra vấn đề khi khôi phục phiên bản này', + publish: 'Công bố', + publishChanges: 'Xuất bản tài liệu', + published: 'Đã xuất bản', + publishing: 'Xuất bản', + restoreThisVersion: 'Khôi phục về phiên bản này', + restoredSuccessfully: 'Đã khôi phục thành công.', + restoring: 'Đang khôi phục...', + revertToPublished: 'Quay về trạng thái đã xuất bản', + reverting: 'Đang về trạng thái cũ...', + saveDraft: 'Lưu bản nháp', + selectLocales: 'Chọn mã khu vực để hiện thị', + selectVersionToCompare: 'Chọn phiên bản để so sánh', + showLocales: 'Hiển thị mã khu vực:', + showingVersionsFor: 'Hiển thị các phiên bản cho:', + status: 'Trạng thái', + unpublish: 'Ẩn tài liệu', + unpublishing: 'Đang ẩn tài liệu...', + version: 'Phiên bản', + versionCount_many: '{{count}} phiên bản được tìm thấy', + versionCount_none: 'Không có phiên bản nào được tìm thấy', + versionCount_one: '{{count}} phiên bản được tìm thấy', + versionCount_other: 'Đã tìm thấy {{count}} phiên bản', + versionCreatedOn: 'Phiên bản {{version}} được tạo vào lúc:', + versionID: 'ID của phiên bản', + versions: 'Danh sách phiên bản', + viewingVersion: 'Xem phiên bản của {{entityLabel}} {{documentTitle}}', + viewingVersionGlobal: '`Xem phiên bản toàn thể (global) của {{entityLabel}}', + viewingVersions: 'Xem những phiên bản của {{entityLabel}} {{documentTitle}}', + viewingVersionsGlobal: '`Xem những phiên bản toàn thể (global) của {{entityLabel}}', + }, + }, +} diff --git a/packages/translations/src/languages/zh.ts b/packages/translations/src/languages/zh.ts new file mode 100644 index 0000000000..4e4aba7148 --- /dev/null +++ b/packages/translations/src/languages/zh.ts @@ -0,0 +1,382 @@ +import type { Language } from '../types.js' + +export const zh: Language = { + dateFNSKey: 'zh-CN', + translations: { + authentication: { + account: '帐户', + accountOfCurrentUser: '当前用户的帐户', + alreadyActivated: '已经激活了', + alreadyLoggedIn: '已经登入了', + apiKey: 'API密钥', + backToLogin: '回到登录页面', + beginCreateFirstUser: '首先,请创建您的第一个用户。', + changePassword: '更改密码', + checkYourEmailForPasswordReset: '请查看您的电子邮件,以取得安全重置密码的链接。', + confirmGeneration: '确认生成', + confirmPassword: '确认密码', + createFirstUser: '创建第一个用户', + emailNotValid: '所提供的电子邮件时无效的', + emailSent: '电子邮件已发送', + enableAPIKey: '启用API密钥', + failedToUnlock: '解锁失败', + forceUnlock: '强制解锁', + forgotPassword: '忘记密码', + forgotPasswordEmailInstructions: + '请在下方输入您的电子邮件。您将会收到一封有关如何重置密码说明的电子邮件。', + forgotPasswordQuestion: '忘记密码?', + generate: '生成', + generateNewAPIKey: '生成新的API密钥', + generatingNewAPIKeyWillInvalidate: + '生成新的API密钥将使之前的密钥<1>失效。您确定要继续吗?', + lockUntil: '锁定至', + logBackIn: '重新登入', + logOut: '登出', + loggedIn: '要使用另一个用户登录前,您需要先<0>登出。', + loggedInChangePassword: '要更改您的密码,请到您的<0>帐户页面并在那里编辑您的密码。', + loggedOutInactivity: '您由于不活跃而被登出了。', + loggedOutSuccessfully: '您已成功登出。', + login: '登录', + loginAttempts: '登录次数', + loginUser: '登录用户', + loginWithAnotherUser: '要使用另一个用户登录前,您需要先<0>登出。', + logout: '登出', + logoutUser: '登出用户', + newAPIKeyGenerated: '新的API密钥已经生成。', + newAccountCreated: + '刚刚为您创建了一个可以访问 {{serverURL}} 的新帐户 请点击以下链接或在浏览器中粘贴以下网址,以验证您的电子邮件: {{verificationURL}}
    验证您的电子邮件后,您将能够成功登录。', + newPassword: '新的密码', + resetPassword: '重置密码', + resetPasswordExpiration: '重置密码的有效期', + resetPasswordToken: '重置密码令牌', + resetYourPassword: '重置您的密码', + stayLoggedIn: '保持登录状态', + successfullyUnlocked: '已成功解锁', + unableToVerify: '无法验证', + verified: '已验证', + verifiedSuccessfully: '成功验证', + verify: '验证', + verifyUser: '验证用户', + verifyYourEmail: '验证您的电子邮件', + youAreInactive: + '您已经有一段时间没有活动了,为了您的安全,很快就会自动登出。您想保持登录状态吗?', + youAreReceivingResetPassword: + '您收到此邮件是因为您(或其他人)已请求重置您帐户的密码。请点击以下链接,或将其粘贴到您的浏览器中以完成该过程:', + youDidNotRequestPassword: '如果您没有要求这样做,请忽略这封邮件,您的密码将保持不变。', + }, + error: { + accountAlreadyActivated: '该帐户已被激活。', + autosaving: '自动保存该文件时出现了问题。', + correctInvalidFields: '请更正无效字段。', + deletingFile: '删除文件时出现了错误。', + deletingTitle: '删除{{title}}时出现了错误。请检查您的连接并重试。', + emailOrPasswordIncorrect: '提供的电子邮件或密码不正确。', + followingFieldsInvalid_one: '下面的字段是无效的:', + followingFieldsInvalid_other: '以下字段是无效的:', + incorrectCollection: '不正确的集合', + invalidFileType: '无效的文件类型', + invalidFileTypeValue: '无效的文件类型: {{value}}', + loadingDocument: '加载ID为{{id}}的文件时出现了问题。', + missingEmail: '缺少电子邮件。', + missingIDOfDocument: '缺少需要更新的文档的ID。', + missingIDOfVersion: '缺少版本的ID。', + missingRequiredData: '缺少必要的数据。', + noFilesUploaded: '没有上传文件。', + noMatchedField: '找不到与"{{label}}"匹配的字段', + noUser: '没有该用户', + notAllowedToAccessPage: '您无权访问此页面。', + notAllowedToPerformAction: '您不被允许执行此操作。', + notFound: '没有找到请求的资源。', + previewing: '预览文件时出现了问题。', + problemUploadingFile: '上传文件时出现了问题。', + tokenInvalidOrExpired: '令牌无效或已过期。', + unPublishingDocument: '取消发布此文件时出现了问题。', + unableToDeleteCount: '无法从 {{total}} {{label}} 中删除 {{count}}。', + unableToUpdateCount: '无法更新 {{count}} 个,共 {{total}} 个 {{label}}。', + unauthorized: '未经授权,您必须登录才能提出这个请求。', + unknown: '发生了一个未知的错误。', + unspecific: '发生了一个错误。', + userLocked: '该用户由于有太多次失败的登录尝试而被锁定。', + valueMustBeUnique: '值必须是唯一的', + verificationTokenInvalid: '验证令牌无效。', + }, + fields: { + addLabel: '添加{{label}}', + addLink: '添加链接', + addNew: '添加新的', + addNewLabel: '添加新的{{label}}', + addRelationship: '添加关系', + addUpload: '添加上传', + block: '区块', + blockType: '区块类型', + blocks: '区块', + chooseBetweenCustomTextOrDocument: '选择输入一个自定义的文本URL或链接到另一个文档。', + chooseDocumentToLink: '选择一个要链接的文档', + chooseFromExisting: '从现有中选择', + chooseLabel: '选择{{label}}', + collapseAll: '全部折叠', + customURL: '自定义URL', + editLabelData: '编辑{{label}}数据', + editLink: '编辑链接', + editRelationship: '编辑关系', + enterURL: '输入一个URL', + internalLink: '内部链接', + itemsAndMore: '{{items}}和{{count}}更多', + labelRelationship: '{{label}}关系', + latitude: '纬度', + linkType: '链接类型', + linkedTo: '链接到<0>{{label}}', + longitude: '经度', + newLabel: '新的{{label}}', + openInNewTab: '在新标签中打开', + passwordsDoNotMatch: '密码不匹配。', + relatedDocument: '相关文件', + relationTo: '关系到', + removeRelationship: '移除关系', + removeUpload: '移除上传', + saveChanges: '保存更改', + searchForBlock: '搜索一个区块', + selectExistingLabel: '选择现有的{{label}}', + selectFieldsToEdit: '选择要编辑的字段', + showAll: '显示全部', + swapRelationship: '交换关系', + swapUpload: '交换上传', + textToDisplay: '要显示的文本', + toggleBlock: '切换块', + uploadNewLabel: '上传新的{{label}}', + }, + general: { + aboutToDelete: '您即将删除{{label}} <1>{{title}}。您确定要继续吗?', + aboutToDeleteCount_many: '您即将删除 {{count}} {{label}}', + aboutToDeleteCount_one: '您即将删除 {{count}} {{label}}', + aboutToDeleteCount_other: '您即将删除 {{count}} {{label}}', + addBelow: '添加到下面', + addFilter: '添加过滤器', + adminTheme: '管理页面主题', + and: '和', + applyChanges: '应用更改', + ascending: '升序', + automatic: '自动', + backToDashboard: '返回到仪表板', + cancel: '取消', + changesNotSaved: '您的更改尚未保存。您确定要离开吗?', + close: '关闭', + collapse: '折叠', + collections: '集合', + columnToSort: '要排序的列', + columns: '列', + confirm: '确认', + confirmDeletion: '确认删除', + confirmDuplication: '确认重复', + copied: '已复制', + copy: '复制', + create: '创建', + createNew: '创建新的', + createNewLabel: '创建新的{{label}}', + created: '已创建', + createdAt: '创建于', + creating: '创建中', + creatingNewLabel: '正在创建新的{{label}}', + dark: '深色', + dashboard: '仪表板', + delete: '删除', + deletedCountSuccessfully: '已成功删除 {{count}} {{label}}。', + deletedSuccessfully: '已成功删除。', + deleting: '删除中...', + descending: '降序', + deselectAllRows: '取消选择所有行', + duplicate: '重复', + duplicateWithoutSaving: '重复而不保存更改。', + edit: '编辑', + editLabel: '编辑{{label}}', + editing: '编辑中', + editingLabel_many: '编辑 {{count}} {{label}}', + editingLabel_one: '编辑 {{count}} {{label}}', + editingLabel_other: '编辑 {{count}} {{label}}', + email: '电子邮件', + emailAddress: '电子邮件地址', + enterAValue: '输入一个值', + error: '错误', + errors: '错误', + fallbackToDefaultLocale: '回退到默认语言环境', + filter: '过滤器', + filterWhere: '过滤{{label}}', + filters: '过滤器', + globals: '全局', + language: '语言', + lastModified: '最后修改', + leaveAnyway: '无论如何都要离开', + leaveWithoutSaving: '离开而不保存', + light: '亮色', + livePreview: '预览', + loading: '加载中...', + locale: '语言环境', + locales: '语言环境', + menu: '菜单', + moveDown: '向下移动', + moveUp: '向上移动', + newPassword: '新密码', + noFiltersSet: '没有设置过滤器', + noLabel: '<没有{{label}}>', + noOptions: '没有选项', + noResults: '没有找到{{label}}。{{label}}并不存在或没有符合您上面所指定的过滤器。', + noValue: '没有值', + none: '无', + notFound: '未找到', + nothingFound: '没有找到任何东西', + of: '的', + open: '打开', + or: '或', + order: '排序', + pageNotFound: '未找到页面', + password: '密码', + payloadSettings: 'Payload设置', + perPage: '每一页: {{limit}}', + remove: '移除', + reset: '重置', + row: '行', + rows: '行', + save: '保存', + saving: '保存中...', + searchBy: '搜索{{label}}', + selectAll: '选择所有 {{count}} {{label}}', + selectAllRows: '选择所有行', + selectValue: '选择一个值', + selectedCount: '已选择 {{count}} {{label}}', + showAllLabel: '显示所有{{label}}', + sorryNotFound: '对不起,没有与您的请求相对应的东西。', + sort: '排序', + sortByLabelDirection: '按{{label}} {{direction}}排序', + stayOnThisPage: '停留在此页面', + submissionSuccessful: '提交成功。', + submit: '提交', + successfullyCreated: '成功创建{{label}}', + successfullyDuplicated: '成功复制{{label}}', + thisLanguage: '中文 (简体)', + titleDeleted: '{{label}} "{{title}}"已被成功删除。', + unauthorized: '未经授权', + unsavedChangesDuplicate: '您有未保存的修改。您确定要继续重复吗?', + untitled: '无标题', + updatedAt: '更新于', + updatedCountSuccessfully: '已成功更新 {{count}} {{label}}。', + updatedSuccessfully: '更新成功。', + updating: '更新中', + uploading: '上传中', + user: '用户', + users: '用户', + value: '值', + welcome: '欢迎', + }, + operators: { + contains: '包含', + equals: '等于', + exists: '存在', + isGreaterThan: '大于', + isGreaterThanOrEqualTo: '大于等于', + isIn: '在', + isLessThan: '小于', + isLessThanOrEqualTo: '小于或等于', + isLike: '就像', + isNotEqualTo: '不等于', + isNotIn: '不在', + near: '附近', + }, + upload: { + crop: '作物', + cropToolDescription: '拖动所选区域的角落,绘制一个新区域或调整以下的值。', + dragAndDrop: '拖放一个文件', + dragAndDropHere: '或在这里拖放一个文件', + editImage: '编辑图像', + fileName: '文件名', + fileSize: '文件大小', + focalPoint: '焦点', + focalPointDescription: '直接在预览中拖动焦点或调整下面的值。', + height: '高度', + lessInfo: '更少信息', + moreInfo: '更多信息', + previewSizes: '预览尺寸', + selectCollectionToBrowse: '选择一个要浏览的集合', + selectFile: '选择一个文件', + setCropArea: '设置裁剪区域', + setFocalPoint: '设置焦点', + sizes: '尺寸', + sizesFor: '{{label}}的尺寸', + width: '宽度', + }, + validation: { + emailAddress: '请输入一个有效的电子邮件地址。', + enterNumber: '请输入一个有效的号码。', + fieldHasNo: '这个字段没有{{label}}', + greaterThanMax: '{{value}}超过了允许的最大{{label}},该最大值为{{max}}。', + invalidInput: '这个字段有一个无效的输入。', + invalidSelection: '这个字段有一个无效的选择。', + invalidSelections: '这个字段有以下无效的选择:', + lessThanMin: '{{value}}小于允许的最小{{label}},该最小值为{{min}}。', + limitReached: '已达限制,只能添加{{max}}个项目。', + longerThanMin: '该值必须大于{{minLength}}字符的最小长度', + notValidDate: '"{{value}}"不是一个有效的日期。', + required: '该字段为必填项目。', + requiresAtLeast: '该字段至少需要{{count}} {{label}}。', + requiresNoMoreThan: '该字段要求不超过{{count}} {{label}。', + requiresTwoNumbers: '该字段需要两个数字。', + shorterThanMax: '该值必须小于{{maxLength}}字符的最大长度', + trueOrFalse: '该字段只能等于真或伪。', + validUploadID: '该字段不是有效的上传ID。', + }, + version: { + type: '类型', + aboutToPublishSelection: '您即将发布所选内容中的所有 {{label}}。 你确定吗?', + aboutToRestore: '您将把这个{{label}}文档恢复到{{versionDate}}时的状态', + aboutToRestoreGlobal: '您要将全局的{{label}}恢复到{{versionDate}}时的状态', + aboutToRevertToPublished: '您将要把这个文档的内容还原到它的发布状态。您确定吗?', + aboutToUnpublish: '你即将取消发布这个文档。你确定吗?', + aboutToUnpublishSelection: '您即将取消发布所选内容中的所有 {{label}}。 你确定吗?', + autosave: '自动保存', + autosavedSuccessfully: '自动保存成功。', + autosavedVersion: '自动保存的版本', + changed: '已更改', + compareVersion: '对比版本:', + confirmPublish: '确认发布', + confirmRevertToSaved: '确认恢复到保存状态', + confirmUnpublish: '确认取消发布', + confirmVersionRestoration: '确认版本恢复', + currentDocumentStatus: '当前{{docStatus}}文件', + draft: '草稿', + draftSavedSuccessfully: '草稿成功保存。', + lastSavedAgo: '上次保存{{distance}}之前', + noFurtherVersionsFound: '没有发现其他版本', + noRowsFound: '没有发现{{label}}', + preview: '预览', + problemRestoringVersion: '恢复这个版本时发生了问题', + publish: '发布', + publishChanges: '发布修改', + published: '已发布', + publishing: '发布', + restoreThisVersion: '恢复此版本', + restoredSuccessfully: '恢复成功。', + restoring: '恢复中...', + revertToPublished: '还原到已发布的版本', + reverting: '还原中...', + saveDraft: '保存草稿', + selectLocales: '选择要显示的语言', + selectVersionToCompare: '选择要比较的版本', + showLocales: '显示语言:', + showingVersionsFor: '显示版本为:', + status: '状态', + unpublish: '取消发布', + unpublishing: '取消发布中...', + version: '版本', + versionCount_many: '发现{{count}}版本', + versionCount_none: '没有发现任何版本', + versionCount_one: '找到{{count}}版本', + versionCount_other: '找到{{count}}版本', + versionCreatedOn: '{{version}}创建于:', + versionID: '版本ID', + versions: '版本', + viewingVersion: '正在查看{{entityLabel}} {{documentTitle}}的版本', + viewingVersionGlobal: '正在查看全局{{entityLabel}}的版本', + viewingVersions: '正在查看{{entityLabel}} {{documentTitle}}的版本', + viewingVersionsGlobal: '正在查看全局{{entityLabel}}的版本', + }, + }, +} diff --git a/packages/translations/src/types.ts b/packages/translations/src/types.ts index 202fadb214..1e06bf82b7 100644 --- a/packages/translations/src/types.ts +++ b/packages/translations/src/types.ts @@ -1,49 +1,90 @@ -export type LanguageTranslations = { - [namespace: string]: { - [key: string]: string +import type { Locale } from 'date-fns' + +import type { acceptedLanguages } from './utilities/languages.js' + +type DateFNSKeys = + | 'ar' + | 'az' + | 'bg' + | 'cs' + | 'de' + | 'en-US' + | 'es' + | 'fa-IR' + | 'fr' + | 'hr' + | 'hu' + | 'it' + | 'ja' + | 'ko' + | 'nb' + | 'nl' + | 'pl' + | 'pt' + | 'ro' + | 'ru' + | 'sv' + | 'th' + | 'tr' + | 'uk' + | 'vi' + | 'zh-CN' + | 'zh-TW' + +export type Language = { + dateFNSKey: DateFNSKeys + translations: { + [namespace: string]: { + [key: string]: string + } } } -export type Translations = { - [language: string]: LanguageTranslations +export type AcceptedLanguages = (typeof acceptedLanguages)[number] + +export type SupportedLanguages = { + [key in AcceptedLanguages]?: Language } export type TFunction = (key: string, options?: Record) => string export type I18n = { + dateFNS: Locale + /** Corresponding dateFNS key */ + dateFNSKey: DateFNSKeys /** The fallback language */ fallbackLanguage: string /** The language of the request */ language: string /** Translate function */ - t: (key: string, options?: Record) => string - translations: Translations + t: TFunction + translations: Language['translations'] } export type I18nOptions = { fallbackLanguage?: string - supportedLanguages?: string[] - translations?: { - [language: string]: - | { - $schema: string - } - | LanguageTranslations - } + supportedLanguages?: SupportedLanguages + translations?: Partial<{ + [key in AcceptedLanguages]?: Language['translations'] + }> } export type InitTFunction = (args: { config: I18nOptions language?: string - translations?: Translations + translations: Language['translations'] }) => { t: TFunction - translations: Translations + translations: Language['translations'] } export type InitI18n = (args: { config: I18nOptions context: 'api' | 'client' - language?: string - translations: Translations -}) => I18n + language?: AcceptedLanguages +}) => Promise + +export type LanguagePreference = { + language: AcceptedLanguages + quality?: number +} diff --git a/packages/translations/src/utilities/getTranslation.ts b/packages/translations/src/utilities/getTranslation.ts index 98d6aa2662..8e6b96cbe5 100644 --- a/packages/translations/src/utilities/getTranslation.ts +++ b/packages/translations/src/utilities/getTranslation.ts @@ -1,12 +1,16 @@ import type { JSX } from 'react' -import type { I18n } from '../types.js' +import type { I18n, TFunction } from '../types.js' -type LabelType = JSX.Element | Record | string +type LabelType = + | (({ t }: { t: TFunction }) => string) + | JSX.Element + | Record + | string export const getTranslation = ( label: T, - i18n: Pick, + i18n: Pick, ): T extends JSX.Element ? JSX.Element : string => { // If it's a Record, look for translation. If string or React Element, pass through if (typeof label === 'object' && !Object.prototype.hasOwnProperty.call(label, '$$typeof')) { @@ -25,6 +29,10 @@ export const getTranslation = ( return fallbackLang && label[fallbackLang] ? fallbackLang : label[Object.keys(label)[0]] } + if (typeof label === 'function') { + return label({ t: i18n.t }) as unknown as T extends JSX.Element ? JSX.Element : string + } + // If it's a React Element or string, then we should just pass it through return label as unknown as T extends JSX.Element ? JSX.Element : string } diff --git a/packages/translations/src/utilities/getTranslationsByContext.ts b/packages/translations/src/utilities/getTranslationsByContext.ts new file mode 100644 index 0000000000..952bb971d3 --- /dev/null +++ b/packages/translations/src/utilities/getTranslationsByContext.ts @@ -0,0 +1,63 @@ +import type { Language } from '../types.js' + +import { clientTranslationKeys } from '../clientKeys.js' + +function filterKeys(obj, parentGroupKey = '', keys) { + const result = {} + + for (const [namespaceKey, value] of Object.entries(obj)) { + // Skip $schema key + if (namespaceKey === '$schema') { + result[namespaceKey] = value + continue + } + + if (typeof value === 'object') { + const filteredObject = filterKeys(value, namespaceKey, keys) + if (Object.keys(filteredObject).length > 0) { + result[namespaceKey] = filteredObject + } + } else { + for (const key of keys) { + const [groupKey, selector] = key.split(':') + + if (parentGroupKey === groupKey) { + if (namespaceKey === selector) { + result[selector] = value + } else { + const pluralKeys = ['zero', 'one', 'two', 'few', 'many', 'other'] + pluralKeys.forEach((pluralKey) => { + if (namespaceKey === `${selector}_${pluralKey}`) { + result[`${selector}_${pluralKey}`] = value + } + }) + } + } + } + } + } + + return result +} + +function sortObject(obj) { + const sortedObject = {} + Object.keys(obj) + .sort() + .forEach((key) => { + if (typeof obj[key] === 'object') { + sortedObject[key] = sortObject(obj[key]) + } else { + sortedObject[key] = obj[key] + } + }) + return sortedObject +} + +export const getTranslationsByContext = (selectedLanguage: Language, context: 'api' | 'client') => { + if (context === 'client') { + return sortObject(filterKeys(selectedLanguage.translations, '', clientTranslationKeys)) + } else { + return selectedLanguage.translations + } +} diff --git a/packages/translations/src/utilities/init.ts b/packages/translations/src/utilities/init.ts index d4adb38569..5d84dbd214 100644 --- a/packages/translations/src/utilities/init.ts +++ b/packages/translations/src/utilities/init.ts @@ -1,6 +1,8 @@ -import type { I18n, InitI18n, InitTFunction, Translations } from '../types.js' +import type { I18n, InitI18n, InitTFunction, Language } from '../types.js' +import { importDateFNSLocale } from '../importDateFNSLocale.js' import { deepMerge } from './deepMerge.js' +import { getTranslationsByContext } from './getTranslationsByContext.js' /** * @function getTranslationString @@ -16,7 +18,7 @@ export const getTranslationString = ({ }: { count?: number key: string - translations: Translations[0] + translations: Language['translations'] }) => { const keys = key.split(':') let keySuffix = '' @@ -103,7 +105,7 @@ type TFunctionConstructor = ({ vars, }: { key: string - translations?: Translations[0] + translations?: Language['translations'] vars?: Record }) => string @@ -128,86 +130,15 @@ export const t: TFunctionConstructor = ({ key, translations, vars }) => { return translationString } -type LanguagePreference = { - language: string - quality?: number -} - -function parseAcceptLanguage(header: string): LanguagePreference[] { - return header - .split(',') - .map((lang) => { - const [language, quality] = lang.trim().split(';q=') - return { - language, - quality: quality ? parseFloat(quality) : 1, - } - }) - .sort((a, b) => b.quality - a.quality) // Sort by quality, highest to lowest -} - -const acceptedLanguages = new Set([ - 'ar', - 'az', - 'bg', - 'cs', - 'de', - 'en', - 'es', - 'fa', - 'fr', - 'hr', - 'hu', - 'it', - 'ja', - 'ko', - 'my', - 'nb', - 'nl', - 'pl', - 'pt', - 'ro', - 'rs', - 'rsLatin', - 'ru', - 'sv', - 'th', - 'tr', - 'ua', - 'vi', - 'zh', - 'zhTW', -]) - -export function matchLanguage(header: string): string | undefined { - const parsedHeader = parseAcceptLanguage(header) - let matchedLanguage: string - - for (const { language } of parsedHeader) { - if (acceptedLanguages.has(language)) { - matchedLanguage = language - } else { - acceptedLanguages.forEach((acceptedLanguage) => { - if (language.startsWith(acceptedLanguage)) { - matchedLanguage = acceptedLanguage - } - }) - } - } - - return matchedLanguage -} - const initTFunction: InitTFunction = (args) => { const { config, language, translations } = args - const mergedTranslations = deepMerge(config?.translations ?? {}, translations) - const languagePreference = matchLanguage(language) + const mergedTranslations = deepMerge(translations, config?.translations?.[language] ?? {}) return { t: (key, vars) => { return t({ key, - translations: mergedTranslations[languagePreference], + translations: mergedTranslations, vars, }) }, @@ -215,14 +146,14 @@ const initTFunction: InitTFunction = (args) => { } } -function memoize(fn: Function, keys: string[]) { +function memoize(fn: (args: unknown) => Promise, keys: string[]) { const cacheMap = new Map() - const memoized = (args) => { + const memoized = async (args) => { const cacheKey = keys.reduce((acc, key) => acc + args[key], '') if (!cacheMap.has(cacheKey)) { - const result = fn(args) + const result = await fn(args) cacheMap.set(cacheKey, result) } @@ -233,18 +164,26 @@ function memoize(fn: Function, keys: string[]) { } export const initI18n: InitI18n = memoize( - ({ config, language = 'en', translations: incomingTranslations }: Parameters[0]) => { - const { t, translations } = initTFunction({ + async ({ config, context, language = 'en' }: Parameters[0]) => { + const translations = getTranslationsByContext(config.supportedLanguages[language], context) + + const { t, translations: mergedTranslations } = initTFunction({ config, language: language || config.fallbackLanguage, - translations: incomingTranslations, + translations, }) + const dateFNSKey = config.supportedLanguages[language]?.dateFNSKey || 'en-US' + + const dateFNS = await importDateFNSLocale(dateFNSKey) + const i18n: I18n = { + dateFNS, + dateFNSKey, fallbackLanguage: config.fallbackLanguage, language: language || config.fallbackLanguage, t, - translations, + translations: mergedTranslations, } return i18n diff --git a/packages/translations/src/utilities/languages.ts b/packages/translations/src/utilities/languages.ts new file mode 100644 index 0000000000..ca9c98fa2a --- /dev/null +++ b/packages/translations/src/utilities/languages.ts @@ -0,0 +1,164 @@ +import type { AcceptedLanguages, LanguagePreference } from '../types.js' + +export const rtlLanguages = ['ar', 'fa'] as const + +export const acceptedLanguages = [ + 'ar', + 'az', + 'bg', + 'cs', + 'de', + 'en', + 'es', + 'fa', + 'fr', + 'hr', + 'hu', + 'it', + 'ja', + 'ko', + 'my', + 'nb', + 'nl', + 'pl', + 'pt', + 'ro', + 'rs', + 'rsLatin', + 'ru', + 'sv', + 'th', + 'tr', + 'uk', + 'vi', + 'zh', + 'zh-TW', + + /** + * Languages not implemented: + * + * 'af', + * 'am', + * 'ar-sa', + * 'as', + * 'az-latin', + * 'be', + * 'bn-BD', + * 'bn-IN', + * 'bs', + * 'ca', + * 'ca-ES-valencia', + * 'cy', + * 'da', + * 'el', + * 'en-GB', + * 'en-US', + * 'es-ES', + * 'es-US', + * 'es-MX', + * 'et', + * 'eu', + * 'fi', + * 'fil-Latn', + * 'fr-FR', + * 'fr-CA', + * 'ga', + * 'gd-Latn', + * 'gl', + * 'gu', + * 'ha-Latn', + * 'he', + * 'hi', + * 'hr', + * 'hy', + * 'id', + * 'ig-Latn', + * 'is', + * 'it-it', + * 'ka', + * 'kk', + * 'km', + * 'kn', + * 'kok', + * 'ku-Arab', + * 'ky-Cyrl', + * 'lb', + * 'lt', + * 'lv', + * 'mi-Latn', + * 'mk', + * 'ml', + * 'mn-Cyrl', + * 'mr', + * 'ms', + * 'mt', + * 'ne', + * 'nl-BE', + * 'nn', + * 'nso', + * 'or', + * 'pa', + * 'pa-Arab', + * 'prs-Arab', + * 'pt-BR', + * 'pt-PT', + * 'qut-Latn', + * 'quz', + * 'rw', + * 'sd-Arab', + * 'si', + * 'sk', + * 'sl', + * 'sq', + * 'sr-Cyrl-BA', + * 'sr-Cyrl-RS', + * 'sr-Latn-RS', + * 'sw', + * 'ta', + * 'te', + * 'tg-Cyrl', + * 'ti', + * 'tk-Latn', + * 'tn', + * 'tt-Cyrl', + * 'ug-Arab', + * 'ur', + * 'uz-Latn', + * 'wo', + * 'xh', + * 'yo-Latn', + * 'zh-Hans', + * 'zh-Hant', + * 'zu', + */ +] as const + +function parseAcceptLanguage(acceptLanguageHeader: string): LanguagePreference[] { + return acceptLanguageHeader + .split(',') + .map((lang) => { + const [language, quality] = lang.trim().split(';q=') as [ + AcceptedLanguages, + string | undefined, + ] + return { + language, + quality: quality ? parseFloat(quality) : 1, + } + }) + .sort((a, b) => b.quality - a.quality) // Sort by quality, highest to lowest +} + +export function extractHeaderLanguage(acceptLanguageHeader: string): AcceptedLanguages | undefined { + const parsedHeader = parseAcceptLanguage(acceptLanguageHeader) + + let matchedLanguage: AcceptedLanguages + + for (const { language } of parsedHeader) { + if (!matchedLanguage && acceptedLanguages.includes(language)) { + matchedLanguage = language + } + } + + return matchedLanguage +} diff --git a/packages/translations/tsconfig.json b/packages/translations/tsconfig.json index 145f5f5566..9885eb76a4 100644 --- a/packages/translations/tsconfig.json +++ b/packages/translations/tsconfig.json @@ -12,5 +12,4 @@ "emitDeclarationOnly": false }, "include": ["src/**/*.ts", "src/**/*.js"], - "exclude": ["src/all"] } diff --git a/packages/ui/package.json b/packages/ui/package.json index 2fa5575a44..ff820f5e83 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@payloadcms/ui", - "version": "3.0.0-alpha.59", + "version": "3.0.0-beta.11", "type": "module", "homepage": "https://payloadcms.com", "repository": { @@ -82,9 +82,9 @@ "types": "./src/utilities/*.ts" }, "./scss": { - "import": "./src/scss.scss", - "require": "./src/scss.scss", - "default": "./src/scss.scss" + "import": "./src/scss/styles.scss", + "require": "./src/scss/styles.scss", + "default": "./src/scss/styles.scss" }, "./scss/app.scss": "./src/scss/app.scss" }, @@ -163,9 +163,9 @@ "default": "./dist/prod/styles.css" }, "./scss": { - "import": "./dist/scss.scss", - "require": "./dist/scss.scss", - "default": "./dist/scss.scss" + "import": "./dist/scss/styles.scss", + "require": "./dist/scss/styles.scss", + "default": "./dist/scss/styles.scss" }, "./scss/app.scss": "./dist/scss/app.scss" } @@ -216,12 +216,12 @@ "uuid": "9.0.1" }, "peerDependencies": { - "next": "14.2.0-canary.23", + "next": "^14.2.0-canary.23", "payload": "workspace:*", "react": "^18.0.0" }, "engines": { - "node": ">=18.17.0" + "node": ">=18.20.2" }, "files": [ "dist" diff --git a/packages/ui/src/assets/fonts/SuisseIntl-Bold.woff b/packages/ui/src/assets/fonts/SuisseIntl-Bold.woff deleted file mode 100644 index 063560bc07..0000000000 Binary files a/packages/ui/src/assets/fonts/SuisseIntl-Bold.woff and /dev/null differ diff --git a/packages/ui/src/assets/fonts/SuisseIntl-Bold.woff2 b/packages/ui/src/assets/fonts/SuisseIntl-Bold.woff2 deleted file mode 100644 index aaf4a07c6b..0000000000 Binary files a/packages/ui/src/assets/fonts/SuisseIntl-Bold.woff2 and /dev/null differ diff --git a/packages/ui/src/assets/fonts/SuisseIntl-Medium.woff b/packages/ui/src/assets/fonts/SuisseIntl-Medium.woff deleted file mode 100644 index 1bab020083..0000000000 Binary files a/packages/ui/src/assets/fonts/SuisseIntl-Medium.woff and /dev/null differ diff --git a/packages/ui/src/assets/fonts/SuisseIntl-Medium.woff2 b/packages/ui/src/assets/fonts/SuisseIntl-Medium.woff2 deleted file mode 100644 index bba153f9d8..0000000000 Binary files a/packages/ui/src/assets/fonts/SuisseIntl-Medium.woff2 and /dev/null differ diff --git a/packages/ui/src/assets/fonts/SuisseIntl-SemiBold.woff b/packages/ui/src/assets/fonts/SuisseIntl-SemiBold.woff deleted file mode 100644 index 529e69f0af..0000000000 Binary files a/packages/ui/src/assets/fonts/SuisseIntl-SemiBold.woff and /dev/null differ diff --git a/packages/ui/src/assets/fonts/SuisseIntl-SemiBold.woff2 b/packages/ui/src/assets/fonts/SuisseIntl-SemiBold.woff2 deleted file mode 100644 index 39061d7d92..0000000000 Binary files a/packages/ui/src/assets/fonts/SuisseIntl-SemiBold.woff2 and /dev/null differ diff --git a/packages/ui/src/assets/fonts/SuisseIntl.woff b/packages/ui/src/assets/fonts/SuisseIntl.woff deleted file mode 100644 index 19e43b032f..0000000000 Binary files a/packages/ui/src/assets/fonts/SuisseIntl.woff and /dev/null differ diff --git a/packages/ui/src/assets/fonts/SuisseIntl.woff2 b/packages/ui/src/assets/fonts/SuisseIntl.woff2 deleted file mode 100644 index 43dbcfef5d..0000000000 Binary files a/packages/ui/src/assets/fonts/SuisseIntl.woff2 and /dev/null differ diff --git a/packages/ui/src/assets/fonts/merriweather-v30-latin-900.woff b/packages/ui/src/assets/fonts/merriweather-v30-latin-900.woff deleted file mode 100644 index 2a3aadc1c3..0000000000 Binary files a/packages/ui/src/assets/fonts/merriweather-v30-latin-900.woff and /dev/null differ diff --git a/packages/ui/src/assets/fonts/merriweather-v30-latin-900.woff2 b/packages/ui/src/assets/fonts/merriweather-v30-latin-900.woff2 deleted file mode 100644 index 4e3aec9297..0000000000 Binary files a/packages/ui/src/assets/fonts/merriweather-v30-latin-900.woff2 and /dev/null differ diff --git a/packages/ui/src/assets/fonts/merriweather-v30-latin-900italic.woff b/packages/ui/src/assets/fonts/merriweather-v30-latin-900italic.woff deleted file mode 100644 index 29190fdfee..0000000000 Binary files a/packages/ui/src/assets/fonts/merriweather-v30-latin-900italic.woff and /dev/null differ diff --git a/packages/ui/src/assets/fonts/merriweather-v30-latin-900italic.woff2 b/packages/ui/src/assets/fonts/merriweather-v30-latin-900italic.woff2 deleted file mode 100644 index d7cdeaa4fe..0000000000 Binary files a/packages/ui/src/assets/fonts/merriweather-v30-latin-900italic.woff2 and /dev/null differ diff --git a/packages/ui/src/assets/fonts/merriweather-v30-latin-italic.woff b/packages/ui/src/assets/fonts/merriweather-v30-latin-italic.woff deleted file mode 100644 index 0e5871dada..0000000000 Binary files a/packages/ui/src/assets/fonts/merriweather-v30-latin-italic.woff and /dev/null differ diff --git a/packages/ui/src/assets/fonts/merriweather-v30-latin-italic.woff2 b/packages/ui/src/assets/fonts/merriweather-v30-latin-italic.woff2 deleted file mode 100644 index 38bfa01eb5..0000000000 Binary files a/packages/ui/src/assets/fonts/merriweather-v30-latin-italic.woff2 and /dev/null differ diff --git a/packages/ui/src/assets/fonts/merriweather-v30-latin-regular.woff b/packages/ui/src/assets/fonts/merriweather-v30-latin-regular.woff deleted file mode 100644 index d85e75ba87..0000000000 Binary files a/packages/ui/src/assets/fonts/merriweather-v30-latin-regular.woff and /dev/null differ diff --git a/packages/ui/src/assets/fonts/merriweather-v30-latin-regular.woff2 b/packages/ui/src/assets/fonts/merriweather-v30-latin-regular.woff2 deleted file mode 100644 index 6515c26fd0..0000000000 Binary files a/packages/ui/src/assets/fonts/merriweather-v30-latin-regular.woff2 and /dev/null differ diff --git a/packages/ui/src/elements/Autosave/index.tsx b/packages/ui/src/elements/Autosave/index.tsx index 1c48bc0cd1..88308aacba 100644 --- a/packages/ui/src/elements/Autosave/index.tsx +++ b/packages/ui/src/elements/Autosave/index.tsx @@ -131,7 +131,7 @@ export const Autosave: React.FC = ({ {!saving && lastSaved && ( {t('version:lastSavedAgo', { - distance: formatTimeToNow(lastSaved, i18n.language), + distance: formatTimeToNow({ date: lastSaved, i18n }), })} )} diff --git a/packages/ui/src/elements/DatePicker/DatePicker.tsx b/packages/ui/src/elements/DatePicker/DatePicker.tsx index 3e9f2c8dbb..d268830f7a 100644 --- a/packages/ui/src/elements/DatePicker/DatePicker.tsx +++ b/packages/ui/src/elements/DatePicker/DatePicker.tsx @@ -11,7 +11,7 @@ import type { Props } from './types.js' import { Calendar as CalendarIcon } from '../../icons/Calendar/index.js' import { X as XIcon } from '../../icons/X/index.js' import { useTranslation } from '../../providers/Translation/index.js' -import { getDateLocale } from '../../utilities/getDateLocale.js' +import { getFormattedLocale } from './getFormattedLocale.js' import './index.scss' const baseClass = 'date-time-picker' @@ -37,10 +37,10 @@ const DateTime: React.FC = (props) => { // Use the user's AdminUI language preference for the locale const { i18n } = useTranslation() - const { locale, localeData } = getDateLocale(i18n.language) + const datepickerLocale = getFormattedLocale(i18n.language) try { - registerLocale(locale, localeData) + registerLocale(datepickerLocale, i18n.dateFNS) } catch (e) { console.warn(`Could not find DatePicker locale for ${i18n.language}`) } @@ -108,7 +108,7 @@ const DateTime: React.FC = (props) => { diff --git a/packages/ui/src/elements/DatePicker/getFormattedLocale.ts b/packages/ui/src/elements/DatePicker/getFormattedLocale.ts new file mode 100644 index 0000000000..e2293dc665 --- /dev/null +++ b/packages/ui/src/elements/DatePicker/getFormattedLocale.ts @@ -0,0 +1,12 @@ +export const getFormattedLocale = (language = 'enUS') => { + const formattedLocales = { + en: 'enUS', + my: 'enUS', // Burmese is not currently supported + ua: 'uk', + zh: 'zhCN', + } + + const formattedLocale = formattedLocales[language] || language + + return formattedLocale +} diff --git a/packages/ui/src/elements/DocumentControls/index.tsx b/packages/ui/src/elements/DocumentControls/index.tsx index 3a009232cb..ee333a26bb 100644 --- a/packages/ui/src/elements/DocumentControls/index.tsx +++ b/packages/ui/src/elements/DocumentControls/index.tsx @@ -122,13 +122,15 @@ export const DocumentControls: React.FC<{ .filter(Boolean) .join(' ')} title={ - data?.updatedAt ? formatDate(data?.updatedAt, dateFormat, i18n.language) : '' + data?.updatedAt + ? formatDate({ date: data?.updatedAt, i18n, pattern: dateFormat }) + : '' } >

    {i18n.t('general:lastModified')}: 

    {data?.updatedAt && (

    - {formatDate(data.updatedAt, dateFormat, i18n.language)} + {formatDate({ date: data?.updatedAt, i18n, pattern: dateFormat })}

    )} @@ -137,13 +139,15 @@ export const DocumentControls: React.FC<{ .filter(Boolean) .join(' ')} title={ - data?.createdAt ? formatDate(data?.createdAt, dateFormat, i18n.language) : '' + data?.createdAt + ? formatDate({ date: data?.createdAt, i18n, pattern: dateFormat }) + : '' } >

    {i18n.t('general:created')}: 

    {data?.createdAt && (

    - {formatDate(data?.createdAt, dateFormat, i18n.language)} + {formatDate({ date: data?.createdAt, i18n, pattern: dateFormat })}

    )} diff --git a/packages/ui/src/elements/HydrateClientUser/index.tsx b/packages/ui/src/elements/HydrateClientUser/index.tsx index f483d38d53..dc58b561d7 100644 --- a/packages/ui/src/elements/HydrateClientUser/index.tsx +++ b/packages/ui/src/elements/HydrateClientUser/index.tsx @@ -1,15 +1,16 @@ 'use client' -import type { Permissions, User } from 'payload/auth' +import type { Permissions } from 'payload/auth' +import type { PayloadRequest } from 'payload/types' import { useEffect } from 'react' import { useAuth } from '../../providers/Auth/index.js' -export const HydrateClientUser: React.FC<{ permissions: Permissions; user: User }> = ({ - permissions, - user, -}) => { +export const HydrateClientUser: React.FC<{ + permissions: Permissions + user: PayloadRequest['user'] +}> = ({ permissions, user }) => { const { setPermissions, setUser } = useAuth() useEffect(() => { diff --git a/packages/ui/src/elements/ListControls/index.tsx b/packages/ui/src/elements/ListControls/index.tsx index 1a08c9d807..f1ec993537 100644 --- a/packages/ui/src/elements/ListControls/index.tsx +++ b/packages/ui/src/elements/ListControls/index.tsx @@ -79,7 +79,7 @@ export const ListControls: React.FC = (props) => { )) ?? undefined } - fieldName={titleField.name} + fieldName={titleField?.name} handleChange={handleSearchChange} listSearchableFields={getTextFieldsToBeSearched( collectionConfig.admin.listSearchableFields, diff --git a/packages/ui/src/elements/Publish/index.tsx b/packages/ui/src/elements/Publish/index.tsx index 2044e57140..e5215779a8 100644 --- a/packages/ui/src/elements/Publish/index.tsx +++ b/packages/ui/src/elements/Publish/index.tsx @@ -75,7 +75,7 @@ export const DefaultPublishButton: React.FC<{ label?: string }> = ({ label: labe void fetchPublishAccess() }, [api, code, collectionSlug, getData, globalSlug, id, serverURL]) - if (!canPublish) return null + if (!hasPublishPermission) return null return ( | string + label: LabelFunction | Record | string url?: string } diff --git a/packages/ui/src/elements/Table/DefaultCell/fields/Date/index.tsx b/packages/ui/src/elements/Table/DefaultCell/fields/Date/index.tsx index 0bb2df223f..ecc6a7cd47 100644 --- a/packages/ui/src/elements/Table/DefaultCell/fields/Date/index.tsx +++ b/packages/ui/src/elements/Table/DefaultCell/fields/Date/index.tsx @@ -18,5 +18,5 @@ export const DateCell: React.FC{cellData && formatDate(cellData, dateFormat, i18n.language)} + return {cellData && formatDate({ date: cellData, i18n, pattern: dateFormat })} } diff --git a/packages/ui/src/elements/TableColumns/buildColumnState.tsx b/packages/ui/src/elements/TableColumns/buildColumnState.tsx index fc8a901706..9bfca32833 100644 --- a/packages/ui/src/elements/TableColumns/buildColumnState.tsx +++ b/packages/ui/src/elements/TableColumns/buildColumnState.tsx @@ -134,6 +134,7 @@ export const buildColumnState = (args: Args): Column[] => { accessor: name, active, cellProps: { + ...field.cellComponentProps, ...cellProps?.[index], link: isFirstActiveColumn, relationTo: diff --git a/packages/ui/src/elements/withMergedProps/index.tsx b/packages/ui/src/elements/withMergedProps/index.tsx index e84ab4b720..1983e765db 100644 --- a/packages/ui/src/elements/withMergedProps/index.tsx +++ b/packages/ui/src/elements/withMergedProps/index.tsx @@ -1,3 +1,4 @@ +import { serverProps } from 'payload/config' import { deepMerge } from 'payload/utilities' import React from 'react' @@ -21,14 +22,23 @@ import React from 'react' */ export function withMergedProps({ Component, + sanitizeServerOnlyProps = true, toMergeIntoProps, }: { Component: React.FC + sanitizeServerOnlyProps?: boolean toMergeIntoProps: ToMergeIntoProps }): React.FC { // A wrapper around the args.Component to inject the args.toMergeArgs as props, which are merged with the passed props const MergedPropsComponent: React.FC = (passedProps) => { const mergedProps = deepMerge(passedProps, toMergeIntoProps) + + if (sanitizeServerOnlyProps) { + serverProps.forEach((prop) => { + delete mergedProps[prop] + }) + } + return } diff --git a/packages/ui/src/exports/elements.ts b/packages/ui/src/exports/elements.ts index d3b2b4ef5b..f53972274d 100644 --- a/packages/ui/src/exports/elements.ts +++ b/packages/ui/src/exports/elements.ts @@ -46,9 +46,11 @@ export { Tooltip } from '../elements/Tooltip/index.js' export { Translation } from '../elements/Translation/index.js' export { UnpublishMany } from '../elements/UnpublishMany/index.js' export { Upload } from '../elements/Upload/index.js' -export { BlocksDrawer } from '../fields/Blocks/BlocksDrawer/index.js' import * as facelessUIImport from '@faceless-ui/modal' const { Modal } = facelessUIImport && 'Modal' in facelessUIImport ? facelessUIImport : { Modal: undefined } export { Modal } -export { SetViewActions } from '../providers/Actions/SetViewActions/index.js' +import * as reactToastifyImport from 'react-toastify' +const { toast } = + reactToastifyImport && 'toast' in reactToastifyImport ? reactToastifyImport : { toast: undefined } +export { toast } diff --git a/packages/ui/src/exports/fields.ts b/packages/ui/src/exports/fields.ts new file mode 100644 index 0000000000..79921ad079 --- /dev/null +++ b/packages/ui/src/exports/fields.ts @@ -0,0 +1 @@ +export { BlocksDrawer } from '../fields/Blocks/BlocksDrawer/index.js' diff --git a/packages/ui/src/exports/providers.ts b/packages/ui/src/exports/providers.ts new file mode 100644 index 0000000000..513c383c5f --- /dev/null +++ b/packages/ui/src/exports/providers.ts @@ -0,0 +1 @@ +export { SetViewActions } from '../providers/Actions/SetViewActions/index.js' diff --git a/packages/ui/src/fields/Array/index.tsx b/packages/ui/src/fields/Array/index.tsx index bdebd7e6db..05105b86b6 100644 --- a/packages/ui/src/fields/Array/index.tsx +++ b/packages/ui/src/fields/Array/index.tsx @@ -62,7 +62,7 @@ export const _ArrayField: React.FC = (props) => { labelProps, localized, maxRows, - minRows, + minRows: minRowsProp, path: pathFromProps, permissions, readOnly: readOnlyFromProps, @@ -72,6 +72,7 @@ export const _ArrayField: React.FC = (props) => { const { indexPath, readOnly: readOnlyFromContext } = useFieldProps() const readOnly = readOnlyFromProps || readOnlyFromContext + const minRows = minRowsProp ?? required ? 1 : 0 const { setDocFieldPreferences } = useDocumentInfo() const { addFieldRow, dispatchFields, setModified } = useForm() @@ -300,7 +301,7 @@ export const _ArrayField: React.FC = (props) => { {t('validation:requiresAtLeast', { count: minRows, label: - getTranslation(minRows ? labels.plural : labels.singular, i18n) || + getTranslation(minRows > 1 ? labels.plural : labels.singular, i18n) || t(minRows > 1 ? 'general:row' : 'general:rows'), })} diff --git a/packages/ui/src/fields/Blocks/index.tsx b/packages/ui/src/fields/Blocks/index.tsx index 6387d7c897..f730cbace4 100644 --- a/packages/ui/src/fields/Blocks/index.tsx +++ b/packages/ui/src/fields/Blocks/index.tsx @@ -67,7 +67,7 @@ const _BlocksField: React.FC = (props) => { labels: labelsFromProps, localized, maxRows, - minRows, + minRows: minRowsProp, path: pathFromProps, readOnly: readOnlyFromProps, required, @@ -76,6 +76,7 @@ const _BlocksField: React.FC = (props) => { const { indexPath, readOnly: readOnlyFromContext } = useFieldProps() const readOnly = readOnlyFromProps || readOnlyFromContext + const minRows = minRowsProp ?? required ? 1 : 0 const { setDocFieldPreferences } = useDocumentInfo() const { addFieldRow, dispatchFields, setModified } = useForm() @@ -313,12 +314,9 @@ const _BlocksField: React.FC = (props) => { {t('validation:requiresAtLeast', { count: minRows, - label: getTranslation( - minRows === 1 || typeof minRows === 'undefined' - ? labels.singular - : labels.plural, - i18n, - ), + label: + getTranslation(minRows > 1 ? labels.plural : labels.singular, i18n) || + t(minRows > 1 ? 'general:row' : 'general:rows'), })} )} diff --git a/packages/ui/src/fields/Collapsible/index.tsx b/packages/ui/src/fields/Collapsible/index.tsx index 6dc0084a31..f9e66ce555 100644 --- a/packages/ui/src/fields/Collapsible/index.tsx +++ b/packages/ui/src/fields/Collapsible/index.tsx @@ -67,40 +67,47 @@ const CollapsibleField: React.FC = (props) => { async (newCollapsedState: boolean) => { const existingPreferences: DocumentPreferences = await getPreference(preferencesKey) - void setPreference(preferencesKey, { - ...existingPreferences, - ...(path - ? { - fields: { - ...(existingPreferences?.fields || {}), - [path]: { - ...existingPreferences?.fields?.[path], - collapsed: newCollapsedState, + if (preferencesKey) { + void setPreference(preferencesKey, { + ...existingPreferences, + ...(path + ? { + fields: { + ...(existingPreferences?.fields || {}), + [path]: { + ...existingPreferences?.fields?.[path], + collapsed: newCollapsedState, + }, }, - }, - } - : { - fields: { - ...(existingPreferences?.fields || {}), - [fieldPreferencesKey]: { - ...existingPreferences?.fields?.[fieldPreferencesKey], - collapsed: newCollapsedState, + } + : { + fields: { + ...(existingPreferences?.fields || {}), + [fieldPreferencesKey]: { + ...existingPreferences?.fields?.[fieldPreferencesKey], + collapsed: newCollapsedState, + }, }, - }, - }), - }) + }), + }) + } }, [preferencesKey, fieldPreferencesKey, getPreference, setPreference, path], ) useEffect(() => { const fetchInitialState = async () => { - const preferences = await getPreference(preferencesKey) - if (preferences) { - const initCollapsedFromPref = path + if (preferencesKey) { + const preferences = await getPreference(preferencesKey) + const specificPreference = path ? preferences?.fields?.[path]?.collapsed : preferences?.fields?.[fieldPreferencesKey]?.collapsed - setCollapsedOnMount(Boolean(initCollapsedFromPref)) + + if (specificPreference !== undefined) { + setCollapsedOnMount(Boolean(specificPreference)) + } else { + setCollapsedOnMount(typeof initCollapsed === 'boolean' ? initCollapsed : false) + } } else { setCollapsedOnMount(typeof initCollapsed === 'boolean' ? initCollapsed : false) } diff --git a/packages/ui/src/fields/HiddenInput/index.tsx b/packages/ui/src/fields/HiddenInput/index.tsx index 358661a9f1..c25aac57af 100644 --- a/packages/ui/src/fields/HiddenInput/index.tsx +++ b/packages/ui/src/fields/HiddenInput/index.tsx @@ -10,7 +10,7 @@ import { withCondition } from '../../forms/withCondition/index.js' export type HiddenInputFieldProps = FormFieldBase & { disableModifyingForm?: false forceUsePathFromProps?: boolean - name: string + name?: string path?: string value?: unknown } diff --git a/packages/ui/src/fields/Tabs/index.tsx b/packages/ui/src/fields/Tabs/index.tsx index 2a20413b93..a09078b493 100644 --- a/packages/ui/src/fields/Tabs/index.tsx +++ b/packages/ui/src/fields/Tabs/index.tsx @@ -64,14 +64,16 @@ const TabsField: React.FC = (props) => { const tabsPrefKey = `tabs-${indexPath}` useEffect(() => { - const getInitialPref = async () => { - const existingPreferences: DocumentPreferences = await getPreference(preferencesKey) - const initialIndex = path - ? existingPreferences?.fields?.[path]?.tabIndex - : existingPreferences?.fields?.[tabsPrefKey]?.tabIndex - setActiveTabIndex(initialIndex || 0) + if (preferencesKey) { + const getInitialPref = async () => { + const existingPreferences: DocumentPreferences = await getPreference(preferencesKey) + const initialIndex = path + ? existingPreferences?.fields?.[path]?.tabIndex + : existingPreferences?.fields?.[tabsPrefKey]?.tabIndex + setActiveTabIndex(initialIndex || 0) + } + void getInitialPref() } - void getInitialPref() }, [path, getPreference, preferencesKey, tabsPrefKey]) const handleTabChange = useCallback( @@ -80,28 +82,30 @@ const TabsField: React.FC = (props) => { const existingPreferences: DocumentPreferences = await getPreference(preferencesKey) - void setPreference(preferencesKey, { - ...existingPreferences, - ...(path - ? { - fields: { - ...(existingPreferences?.fields || {}), - [path]: { - ...existingPreferences?.fields?.[path], - tabIndex: incomingTabIndex, + if (preferencesKey) { + void setPreference(preferencesKey, { + ...existingPreferences, + ...(path + ? { + fields: { + ...(existingPreferences?.fields || {}), + [path]: { + ...existingPreferences?.fields?.[path], + tabIndex: incomingTabIndex, + }, }, - }, - } - : { - fields: { - ...existingPreferences?.fields, - [tabsPrefKey]: { - ...existingPreferences?.fields?.[tabsPrefKey], - tabIndex: incomingTabIndex, + } + : { + fields: { + ...existingPreferences?.fields, + [tabsPrefKey]: { + ...existingPreferences?.fields?.[tabsPrefKey], + tabIndex: incomingTabIndex, + }, }, - }, - }), - }) + }), + }) + } }, [preferencesKey, getPreference, setPreference, path, tabsPrefKey], ) diff --git a/packages/ui/src/forms/Form/fieldReducer.ts b/packages/ui/src/forms/Form/fieldReducer.ts index 7ed0bc78e0..143dbf41a6 100644 --- a/packages/ui/src/forms/Form/fieldReducer.ts +++ b/packages/ui/src/forms/Form/fieldReducer.ts @@ -47,6 +47,68 @@ export function fieldReducer(state: FormState, action: FieldAction): FormState { return newState } + case 'ADD_SERVER_ERRORS': { + let newState = { ...state } + + const errorPaths: { fieldErrorPath: string; parentPath: string }[] = [] + + action.errors.forEach(({ field, message }) => { + newState[field] = { + ...(newState[field] || { + initialValue: null, + value: null, + }), + errorMessage: message, + valid: false, + } + + const segments = field.split('.') + if (segments.length > 1) { + errorPaths.push({ + fieldErrorPath: field, + parentPath: segments.slice(0, segments.length - 1).join('.'), + }) + } + }) + + newState = Object.entries(newState).reduce((acc, [path, fieldState]) => { + const fieldErrorPaths = errorPaths.reduce((errorACC, { fieldErrorPath, parentPath }) => { + if (parentPath.startsWith(path)) { + errorACC.push(fieldErrorPath) + } + return errorACC + }, []) + + let changed = false + + if (fieldErrorPaths.length > 0) { + const newErrorPaths = Array.isArray(fieldState.errorPaths) ? fieldState.errorPaths : [] + + fieldErrorPaths.forEach((fieldErrorPath) => { + if (!newErrorPaths.includes(fieldErrorPath)) { + newErrorPaths.push(fieldErrorPath) + changed = true + } + }) + + if (changed) { + acc[path] = { + ...fieldState, + errorPaths: newErrorPaths, + } + } + } + + if (!changed) { + acc[path] = fieldState + } + + return acc + }, {}) + + return newState + } + case 'UPDATE': { const newField = Object.entries(action).reduce( (field, [key, value]) => { diff --git a/packages/ui/src/forms/Form/index.tsx b/packages/ui/src/forms/Form/index.tsx index 7ab6ddacd9..23d81406dc 100644 --- a/packages/ui/src/forms/Form/index.tsx +++ b/packages/ui/src/forms/Form/index.tsx @@ -317,14 +317,9 @@ export const Form: React.FC = (props) => { [[], []], ) - fieldErrors.forEach((err) => { - dispatchFields({ - type: 'UPDATE', - ...(contextRef.current?.fields?.[err.field] || {}), - errorMessage: err.message, - path: err.field, - valid: false, - }) + dispatchFields({ + type: 'ADD_SERVER_ERRORS', + errors: fieldErrors, }) nonFieldErrors.forEach((err) => { diff --git a/packages/ui/src/forms/Form/types.ts b/packages/ui/src/forms/Form/types.ts index ec48eb4a4b..fbaef43667 100644 --- a/packages/ui/src/forms/Form/types.ts +++ b/packages/ui/src/forms/Form/types.ts @@ -129,6 +129,14 @@ export type MOVE_ROW = { type: 'MOVE_ROW' } +export type ADD_SERVER_ERRORS = { + errors: { + field: string + message: string + }[] + type: 'ADD_SERVER_ERRORS' +} + export type SET_ROW_COLLAPSED = { collapsed: boolean path: string @@ -146,6 +154,7 @@ export type SET_ALL_ROWS_COLLAPSED = { export type FieldAction = | ADD_ROW + | ADD_SERVER_ERRORS | DUPLICATE_ROW | MODIFY_CONDITION | MOVE_ROW diff --git a/packages/ui/src/providers/ComponentMap/buildComponentMap/WithServerSideProps.tsx b/packages/ui/src/providers/ComponentMap/buildComponentMap/WithServerSideProps.tsx new file mode 100644 index 0000000000..44d2ab7737 --- /dev/null +++ b/packages/ui/src/providers/ComponentMap/buildComponentMap/WithServerSideProps.tsx @@ -0,0 +1,21 @@ +import type { WithServerSideProps as WithServerSidePropsType } from 'payload/types' + +import { isReactServerComponent } from 'payload/utilities' +import React from 'react' + +export const WithServerSideProps: WithServerSidePropsType = ({ Component, payload, ...rest }) => { + if (Component) { + const WithServerSideProps: React.FC = (passedProps) => { + const propsWithPayload = { + ...passedProps, + ...(isReactServerComponent(Component) ? { payload } : {}), + } + + return + } + + return + } + + return null +} diff --git a/packages/ui/src/providers/ComponentMap/buildComponentMap/actions.tsx b/packages/ui/src/providers/ComponentMap/buildComponentMap/actions.tsx index 56c3cc592a..7dbb253d8d 100644 --- a/packages/ui/src/providers/ComponentMap/buildComponentMap/actions.tsx +++ b/packages/ui/src/providers/ComponentMap/buildComponentMap/actions.tsx @@ -1,14 +1,19 @@ -import type { SanitizedCollectionConfig, SanitizedGlobalConfig } from 'payload/types' +import type { + SanitizedCollectionConfig, + SanitizedGlobalConfig, + WithServerSideProps as WithServerSidePropsType, +} from 'payload/types' import React from 'react' import type { ActionMap } from './types.js' export const mapActions = (args: { + WithServerSideProps: WithServerSidePropsType collectionConfig?: SanitizedCollectionConfig globalConfig?: SanitizedGlobalConfig }): ActionMap => { - const { collectionConfig, globalConfig } = args + const { WithServerSideProps, collectionConfig, globalConfig } = args const editViews = (collectionConfig || globalConfig)?.admin?.components?.views?.Edit @@ -28,7 +33,7 @@ export const mapActions = (args: { view.actions.forEach((action) => { const Action = action if (typeof Action === 'function') { - result.Edit[key] = [...(result[key] || []), ] + result.Edit[key] = [...(result[key] || []), ] } }) } @@ -40,7 +45,7 @@ export const mapActions = (args: { const Action = action if (typeof Action === 'function') { // eslint-disable-next-line @typescript-eslint/no-floating-promises - result.List = [...result.List, ] + result.List = [...result.List, ] } }) } diff --git a/packages/ui/src/providers/ComponentMap/buildComponentMap/collections.tsx b/packages/ui/src/providers/ComponentMap/buildComponentMap/collections.tsx index be6a71a86c..ccfa0023fc 100644 --- a/packages/ui/src/providers/ComponentMap/buildComponentMap/collections.tsx +++ b/packages/ui/src/providers/ComponentMap/buildComponentMap/collections.tsx @@ -1,3 +1,4 @@ +import type { I18n } from '@payloadcms/translations' import type { ViewDescriptionProps } from '@payloadcms/ui/elements/ViewDescription' import type { AdminViewProps, @@ -6,6 +7,7 @@ import type { EntityDescriptionFunction, SanitizedCollectionConfig, SanitizedConfig, + WithServerSideProps as WithServerSidePropsType, } from 'payload/types' import { ViewDescription } from '@payloadcms/ui/elements/ViewDescription' @@ -20,14 +22,18 @@ import { mapFields } from './fields.js' export const mapCollections = ({ DefaultEditView, DefaultListView, + WithServerSideProps, collections, config, + i18n, readOnly: readOnlyOverride, }: { DefaultEditView: React.FC DefaultListView: React.FC + WithServerSideProps: WithServerSidePropsType collections: SanitizedCollectionConfig[] config: SanitizedConfig + i18n: I18n readOnly?: boolean }): { [key: SanitizedCollectionConfig['slug']]: CollectionComponentMap @@ -68,44 +74,60 @@ export const mapCollections = ({ const List = CustomListView || DefaultListView - const beforeList = collectionConfig?.admin?.components?.BeforeList - - const beforeListTable = collectionConfig?.admin?.components?.BeforeListTable - - const afterList = collectionConfig?.admin?.components?.AfterList - - const afterListTable = collectionConfig?.admin?.components?.AfterListTable - const SaveButtonComponent = collectionConfig?.admin?.components?.edit?.SaveButton - const SaveButton = SaveButtonComponent ? : undefined + + const SaveButton = SaveButtonComponent ? ( + + ) : undefined const SaveDraftButtonComponent = collectionConfig?.admin?.components?.edit?.SaveDraftButton - const SaveDraftButton = SaveDraftButtonComponent ? : undefined + + const SaveDraftButton = SaveDraftButtonComponent ? ( + + ) : undefined const PreviewButtonComponent = collectionConfig?.admin?.components?.edit?.PreviewButton - const PreviewButton = PreviewButtonComponent ? : undefined + + const PreviewButton = PreviewButtonComponent ? ( + + ) : undefined const PublishButtonComponent = collectionConfig?.admin?.components?.edit?.PublishButton - const PublishButton = PublishButtonComponent ? : undefined + + const PublishButton = PublishButtonComponent ? ( + + ) : undefined + + const beforeList = collectionConfig?.admin?.components?.BeforeList const BeforeList = - (beforeList && Array.isArray(beforeList) && beforeList?.map((Component) => )) || + (beforeList && + Array.isArray(beforeList) && + beforeList?.map((Component) => )) || null + const beforeListTable = collectionConfig?.admin?.components?.BeforeListTable + const BeforeListTable = (beforeListTable && Array.isArray(beforeListTable) && - beforeListTable?.map((Component) => )) || + beforeListTable?.map((Component) => )) || null + const afterList = collectionConfig?.admin?.components?.AfterList + const AfterList = - (afterList && Array.isArray(afterList) && afterList?.map((Component) => )) || + (afterList && + Array.isArray(afterList) && + afterList?.map((Component) => )) || null + const afterListTable = collectionConfig?.admin?.components?.AfterListTable + const AfterListTable = (afterListTable && Array.isArray(afterListTable) && - afterListTable?.map((Component) => )) || + afterListTable?.map((Component) => )) || null const descriptionProps: ViewDescriptionProps = { @@ -131,7 +153,7 @@ export const mapCollections = ({ const Description = DescriptionComponent !== undefined ? ( - + ) : undefined const componentMap: CollectionComponentMap = { @@ -147,11 +169,14 @@ export const mapCollections = ({ SaveButton, SaveDraftButton, actionsMap: mapActions({ + WithServerSideProps, collectionConfig, }), fieldMap: mapFields({ + WithServerSideProps, config, fieldSchema: fields, + i18n, readOnly: readOnlyOverride, }), isPreviewEnabled: !!collectionConfig?.admin?.preview, diff --git a/packages/ui/src/providers/ComponentMap/buildComponentMap/fields.tsx b/packages/ui/src/providers/ComponentMap/buildComponentMap/fields.tsx index 5bd1765461..d09d3cc308 100644 --- a/packages/ui/src/providers/ComponentMap/buildComponentMap/fields.tsx +++ b/packages/ui/src/providers/ComponentMap/buildComponentMap/fields.tsx @@ -1,3 +1,5 @@ +import type { I18n } from '@payloadcms/translations' +import type { CustomComponent } from 'packages/payload/src/config/types.js' import type { CellComponentProps, DescriptionComponent, @@ -7,13 +9,20 @@ import type { FieldDescriptionProps, FieldWithPath, LabelProps, + Option, RowLabelComponent, SanitizedConfig, + WithServerSideProps as WithServerSidePropsType, } from 'payload/types' import { FieldDescription } from '@payloadcms/ui/forms/FieldDescription' import { fieldAffectsData, fieldIsPresentationalOnly } from 'payload/types' -import { isPlainFunction, isReactComponent } from 'payload/utilities' +import { + isPlainFunction, + isReactClientComponent, + isReactComponent, + isReactServerComponent, +} from 'payload/utilities' import React, { Fragment } from 'react' import type { ArrayFieldProps } from '../../../fields/Array/index.js' @@ -48,6 +57,7 @@ import type { import { HiddenInput } from '../../../fields/HiddenInput/index.js' export const mapFields = (args: { + WithServerSideProps: WithServerSidePropsType config: SanitizedConfig /** * If mapFields is used outside of collections, you might not want it to add an id field @@ -55,22 +65,25 @@ export const mapFields = (args: { disableAddingID?: boolean fieldSchema: FieldWithPath[] filter?: (field: Field) => boolean + i18n: I18n parentPath?: string readOnly?: boolean }): FieldMap => { const { + WithServerSideProps, config, disableAddingID, fieldSchema, filter, + i18n, + i18n: { t }, parentPath, readOnly: readOnlyOverride, } = args const result: FieldMap = fieldSchema.reduce((acc, field): FieldMap => { const fieldIsPresentational = fieldIsPresentationalOnly(field) - let CustomFieldComponent: React.ComponentType = - field.admin?.components?.Field + let CustomFieldComponent: CustomComponent = field.admin?.components?.Field const CustomCellComponent = field.admin?.components?.Cell @@ -97,7 +110,7 @@ export const mapFields = (args: { Array.isArray(field.admin?.components?.afterInput) && ( {field.admin.components.afterInput.map((Component, i) => ( - + ))} )) || @@ -110,7 +123,7 @@ export const mapFields = (args: { Array.isArray(field.admin.components.beforeInput) && ( {field.admin.components.beforeInput.map((Component, i) => ( - + ))} )) || @@ -128,12 +141,12 @@ export const mapFields = (args: { ('admin' in field && field.admin?.components && 'Label' in field.admin.components && - field.admin?.components?.Label) || + field.admin.components?.Label) || undefined const CustomLabel = CustomLabelComponent !== undefined ? ( - + ) : undefined const descriptionProps: FieldDescriptionProps = { @@ -145,7 +158,7 @@ export const mapFields = (args: { field.admin.description) || (typeof field.admin?.description === 'function' && isPlainFunction(field.admin?.description) && - field.admin?.description()))) || + field.admin?.description({ t })))) || undefined, } @@ -159,7 +172,10 @@ export const mapFields = (args: { const CustomDescription = CustomDescriptionComponent !== undefined ? ( - + ) : undefined const errorProps = { @@ -175,7 +191,7 @@ export const mapFields = (args: { const CustomError = CustomErrorComponent !== undefined ? ( - + ) : undefined const baseFieldProps: FormFieldBase = { @@ -194,6 +210,21 @@ export const mapFields = (args: { let fieldComponentProps: FieldComponentProps + let fieldOptions: Option[] + + if ('options' in field) { + fieldOptions = field.options.map((option) => { + if (typeof option === 'object' && typeof option.label === 'function') { + return { + label: option.label({ t: i18n.t }), + value: option.value, + } + } + + return option + }) + } + const cellComponentProps: CellComponentProps = { name: 'name' in field ? field.name : undefined, fieldType: field.type, @@ -203,7 +234,7 @@ export const mapFields = (args: { ? field.label : undefined, labels: 'labels' in field ? field.labels : undefined, - options: 'options' in field ? field.options : undefined, + options: 'options' in field ? fieldOptions : undefined, relationTo: 'relationTo' in field ? field.relationTo : undefined, } @@ -219,7 +250,7 @@ export const mapFields = (args: { isReactComponent(field.admin.components.RowLabel) ) { const CustomRowLabelComponent = field.admin.components.RowLabel - CustomRowLabel = + CustomRowLabel = } const arrayFieldProps: Omit = { @@ -229,9 +260,11 @@ export const mapFields = (args: { className: field.admin?.className, disabled: field.admin?.disabled, fieldMap: mapFields({ + WithServerSideProps, config, fieldSchema: field.fields, filter, + i18n, parentPath: path, readOnly: readOnlyOverride, }), @@ -251,9 +284,11 @@ export const mapFields = (args: { case 'blocks': { const blocks = field.blocks.map((block) => { const blockFieldMap = mapFields({ + WithServerSideProps, config, fieldSchema: block.fields, filter, + i18n, parentPath: `${path}.${block.slug}`, readOnly: readOnlyOverride, }) @@ -333,7 +368,9 @@ export const mapFields = (args: { if (isReactComponent(field.label) || isPlainFunction(field.label)) { const CustomCollapsibleLabelComponent = field.label as RowLabelComponent - CustomCollapsibleLabel = + CustomCollapsibleLabel = ( + + ) } const collapsibleField: Omit = { @@ -342,10 +379,12 @@ export const mapFields = (args: { className: field.admin?.className, disabled: field.admin?.disabled, fieldMap: mapFields({ + WithServerSideProps, config, disableAddingID: true, fieldSchema: field.fields, filter, + i18n, parentPath: path, readOnly: readOnlyOverride, }), @@ -403,10 +442,12 @@ export const mapFields = (args: { className: field.admin?.className, disabled: field.admin?.disabled, fieldMap: mapFields({ + WithServerSideProps, config, disableAddingID: true, fieldSchema: field.fields, filter, + i18n, parentPath: path, readOnly: readOnlyOverride, }), @@ -501,14 +542,14 @@ export const mapFields = (args: { className: field.admin?.className, disabled: field.admin?.disabled, label: field.label, - options: field.options, + options: fieldOptions, readOnly: field.admin?.readOnly, required: field.required, style: field.admin?.style, width: field.admin?.width, } - cellComponentProps.options = field.options + cellComponentProps.options = fieldOptions fieldComponentProps = radioField break } @@ -529,7 +570,12 @@ export const mapFields = (args: { const RichTextCellComponent = field.editor.CellComponent if (typeof field.editor.generateComponentMap === 'function') { - const result = field.editor.generateComponentMap({ config, schemaPath: path }) + const result = field.editor.generateComponentMap({ + WithServerSideProps, + config, + i18n, + schemaPath: path, + }) richTextField.richTextComponentMap = result cellComponentProps.richTextComponentMap = result } @@ -539,7 +585,9 @@ export const mapFields = (args: { } if (RichTextCellComponent) { - cellComponentProps.CellComponentOverride = + cellComponentProps.CellComponentOverride = ( + + ) } fieldComponentProps = richTextField @@ -552,10 +600,12 @@ export const mapFields = (args: { className: field.admin?.className, disabled: field.admin?.disabled, fieldMap: mapFields({ + WithServerSideProps, config, disableAddingID: true, fieldSchema: field.fields, filter, + i18n, parentPath: path, readOnly: readOnlyOverride, }), @@ -572,10 +622,12 @@ export const mapFields = (args: { // `tabs` fields require a field map of each of its tab's nested fields const tabs = field.tabs.map((tab) => { const tabFieldMap = mapFields({ + WithServerSideProps, config, disableAddingID: true, fieldSchema: tab.fields, filter, + i18n, parentPath: path, readOnly: readOnlyOverride, }) @@ -676,14 +728,14 @@ export const mapFields = (args: { hasMany: field.hasMany, isClearable: field.admin?.isClearable, label: field.label, - options: field.options, + options: fieldOptions, readOnly: field.admin?.readOnly, required: field.required, style: field.admin?.style, width: field.admin?.width, } - cellComponentProps.options = field.options + cellComponentProps.options = fieldOptions fieldComponentProps = selectField break } @@ -696,10 +748,10 @@ export const mapFields = (args: { name: 'name' in field ? field.name : undefined, type: field.type, CustomCell: CustomCellComponent ? ( - + ) : undefined, CustomField: CustomFieldComponent ? ( - + ) : undefined, cellComponentProps, disableBulkEdit: diff --git a/packages/ui/src/providers/ComponentMap/buildComponentMap/globals.tsx b/packages/ui/src/providers/ComponentMap/buildComponentMap/globals.tsx index 544c6b3f3b..10d44da0f4 100644 --- a/packages/ui/src/providers/ComponentMap/buildComponentMap/globals.tsx +++ b/packages/ui/src/providers/ComponentMap/buildComponentMap/globals.tsx @@ -1,9 +1,11 @@ +import type { I18n } from '@payloadcms/translations' import type { EditViewProps, EntityDescriptionComponent, EntityDescriptionFunction, SanitizedConfig, SanitizedGlobalConfig, + WithServerSideProps as WithServerSidePropsType, } from 'payload/types' import { ViewDescription, type ViewDescriptionProps } from '@payloadcms/ui/elements/ViewDescription' @@ -17,13 +19,17 @@ import { mapFields } from './fields.js' export const mapGlobals = ({ DefaultEditView, + WithServerSideProps, config, globals, + i18n, readOnly: readOnlyOverride, }: { DefaultEditView: React.FC + WithServerSideProps: WithServerSidePropsType config: SanitizedConfig globals: SanitizedGlobalConfig[] + i18n: I18n readOnly?: boolean }): { [key: SanitizedGlobalConfig['slug']]: GlobalComponentMap @@ -34,16 +40,28 @@ export const mapGlobals = ({ const editViewFromConfig = globalConfig?.admin?.components?.views?.Edit const SaveButton = globalConfig?.admin?.components?.elements?.SaveButton - const SaveButtonComponent = SaveButton ? : undefined + + const SaveButtonComponent = SaveButton ? ( + + ) : undefined const SaveDraftButton = globalConfig?.admin?.components?.elements?.SaveDraftButton - const SaveDraftButtonComponent = SaveDraftButton ? : undefined + + const SaveDraftButtonComponent = SaveDraftButton ? ( + + ) : undefined const PreviewButton = globalConfig?.admin?.components?.elements?.PreviewButton - const PreviewButtonComponent = PreviewButton ? : undefined + + const PreviewButtonComponent = PreviewButton ? ( + + ) : undefined const PublishButton = globalConfig?.admin?.components?.elements?.PublishButton - const PublishButtonComponent = PublishButton ? : undefined + + const PublishButtonComponent = PublishButton ? ( + + ) : undefined const CustomEditView = typeof editViewFromConfig === 'function' @@ -81,7 +99,7 @@ export const mapGlobals = ({ const Description = DescriptionComponent !== undefined ? ( - + ) : undefined const componentMap: GlobalComponentMap = { @@ -92,11 +110,14 @@ export const mapGlobals = ({ SaveButton: SaveButtonComponent, SaveDraftButton: SaveDraftButtonComponent, actionsMap: mapActions({ + WithServerSideProps, globalConfig, }), fieldMap: mapFields({ + WithServerSideProps, config, fieldSchema: fields, + i18n, readOnly: readOnlyOverride, }), isPreviewEnabled: !!globalConfig?.admin?.preview, diff --git a/packages/ui/src/providers/ComponentMap/buildComponentMap/index.tsx b/packages/ui/src/providers/ComponentMap/buildComponentMap/index.tsx index f9f669aa63..8abade7e50 100644 --- a/packages/ui/src/providers/ComponentMap/buildComponentMap/index.tsx +++ b/packages/ui/src/providers/ComponentMap/buildComponentMap/index.tsx @@ -1,9 +1,17 @@ -import type { AdminViewProps, EditViewProps, SanitizedConfig } from 'payload/types' +import type { I18n } from '@payloadcms/translations' +import type { + AdminViewProps, + EditViewProps, + Payload, + SanitizedConfig, + WithServerSideProps as WithServerSidePropsType, +} from 'payload/types' import React from 'react' import type { ComponentMap } from './types.js' +import { WithServerSideProps as WithServerSidePropsGeneric } from './WithServerSideProps.js' import { mapCollections } from './collections.js' import { mapGlobals } from './globals.js' @@ -12,25 +20,35 @@ export const buildComponentMap = (args: { DefaultListView: React.FC children: React.ReactNode config: SanitizedConfig + i18n: I18n + payload: Payload readOnly?: boolean }): { componentMap: ComponentMap wrappedChildren: React.ReactNode } => { - const { DefaultEditView, DefaultListView, children, config, readOnly } = args + const { DefaultEditView, DefaultListView, children, config, i18n, payload, readOnly } = args + + const WithServerSideProps: WithServerSidePropsType = ({ Component, ...rest }) => { + return + } const collections = mapCollections({ DefaultEditView, DefaultListView, + WithServerSideProps, collections: config.collections, config, + i18n, readOnly, }) const globals = mapGlobals({ DefaultEditView, + WithServerSideProps, config, globals: config.globals, + i18n, readOnly, }) @@ -48,17 +66,21 @@ export const buildComponentMap = (args: { const LogoutButtonComponent = config.admin?.components?.logout?.Button - const LogoutButton = LogoutButtonComponent ? : null + const LogoutButton = LogoutButtonComponent ? ( + + ) : null const IconComponent = config.admin?.components?.graphics?.Icon - const Icon = IconComponent ? : null + const Icon = IconComponent ? : null return { componentMap: { Icon, LogoutButton, - actions: config.admin?.components?.actions?.map((Component) => ), + actions: config.admin?.components?.actions?.map((Component) => ( + + )), collections, globals, }, diff --git a/packages/ui/src/providers/ComponentMap/index.tsx b/packages/ui/src/providers/ComponentMap/index.tsx index 79e0b4efbb..e0b3785323 100644 --- a/packages/ui/src/providers/ComponentMap/index.tsx +++ b/packages/ui/src/providers/ComponentMap/index.tsx @@ -17,6 +17,8 @@ export type IComponentMapContext = { }) => MappedField | undefined } +export { WithServerSideProps } from './buildComponentMap/WithServerSideProps.js' + const ComponentMapContext = createContext({} as IComponentMapContext) export const ComponentMapProvider: React.FC<{ diff --git a/packages/ui/src/providers/Locale/index.tsx b/packages/ui/src/providers/Locale/index.tsx index 054b0d9753..2502bfdb42 100644 --- a/packages/ui/src/providers/Locale/index.tsx +++ b/packages/ui/src/providers/Locale/index.tsx @@ -20,7 +20,7 @@ export const LocaleProvider: React.FC<{ children?: React.ReactNode }> = ({ child localization && localization.defaultLocale ? localization.defaultLocale : 'en' const { searchParams } = useSearchParams() - const localeFromParams = searchParams?.locale || '' + const localeFromParams = searchParams?.locale const [localeCode, setLocaleCode] = useState( (localeFromParams as string) || defaultLocale, diff --git a/packages/ui/src/providers/Root/index.tsx b/packages/ui/src/providers/Root/index.tsx index 0c73aca768..fe3dde837e 100644 --- a/packages/ui/src/providers/Root/index.tsx +++ b/packages/ui/src/providers/Root/index.tsx @@ -1,5 +1,5 @@ 'use client' -import type { LanguageTranslations } from '@payloadcms/translations' +import type { Language } from '@payloadcms/translations' import type { ClientConfig } from 'payload/types' import * as facelessUIImport from '@faceless-ui/modal' @@ -33,19 +33,21 @@ type Props = { children: React.ReactNode componentMap: ComponentMap config: ClientConfig + dateFNSKey: Language['dateFNSKey'] fallbackLang: ClientConfig['i18n']['fallbackLanguage'] - lang: string + languageCode: string languageOptions: LanguageOptions switchLanguageServerAction?: (lang: string) => Promise - translations: LanguageTranslations + translations: Language['translations'] } export const RootProvider: React.FC = ({ children, componentMap, config, + dateFNSKey, fallbackLang, - lang, + languageCode, languageOptions, switchLanguageServerAction, translations, @@ -65,8 +67,9 @@ export const RootProvider: React.FC = ({ ) => string }>({ i18n: { + dateFNS: enUS, + dateFNSKey: 'en-US', fallbackLanguage: 'en', language: 'en', t: (key) => key, @@ -31,22 +36,25 @@ const Context = createContext<{ type Props = { children: React.ReactNode + dateFNSKey: Language['dateFNSKey'] fallbackLang: ClientConfig['i18n']['fallbackLanguage'] - lang: string + language: string languageOptions: LanguageOptions switchLanguageServerAction: (lang: string) => Promise - translations: LanguageTranslations + translations: Language['translations'] } export const TranslationProvider: React.FC = ({ children, + dateFNSKey, fallbackLang, - lang, + language, languageOptions, switchLanguageServerAction, translations, }) => { const { clearRouteCache } = useRouteCache() + const [dateFNS, setDateFNS] = useState() const nextT = (key: string, vars?: Record): string => t({ @@ -68,16 +76,26 @@ export const TranslationProvider: React.FC = ({ [switchLanguageServerAction, clearRouteCache], ) + useEffect(() => { + const loadDateFNS = async () => { + const imported = await importDateFNSLocale(dateFNSKey) + + setDateFNS(imported) + } + + void loadDateFNS() + }, [dateFNSKey]) + return ( { - const theDate = new Date(date) - const { localeData } = getDateLocale(locale) - return format(theDate, pattern, { locale: localeData }) +type FormatDateArgs = { + date: Date | number | string | undefined + i18n: I18n + pattern: string } -export const formatTimeToNow = ( - date: Date | number | string | undefined, - locale?: string, -): string => { +export const formatDate = ({ date, i18n, pattern }: FormatDateArgs): string => { const theDate = new Date(date) - const { localeData } = getDateLocale(locale) - return formatDistanceToNow(theDate, { locale: localeData }) + return format(theDate, pattern, { locale: i18n.dateFNS }) +} + +type FormatTimeToNowArgs = { + date: Date | number | string | undefined + i18n: I18n +} + +export const formatTimeToNow = ({ date, i18n }: FormatTimeToNowArgs): string => { + const theDate = new Date(date) + return formatDistanceToNow(theDate, { locale: i18n.dateFNS }) } diff --git a/packages/ui/src/utilities/formatDocTitle.ts b/packages/ui/src/utilities/formatDocTitle.ts index 5f24496a40..3fd9099319 100644 --- a/packages/ui/src/utilities/formatDocTitle.ts +++ b/packages/ui/src/utilities/formatDocTitle.ts @@ -44,7 +44,7 @@ export const formatDocTitle = ({ const dateFormat = ('date' in fieldConfig.admin && fieldConfig?.admin?.date?.displayFormat) || dateFormatFromConfig - title = formatDate(title, dateFormat, i18n.language) || title + title = formatDate({ date: title, i18n, pattern: dateFormat }) || title } } } diff --git a/packages/ui/src/utilities/getDateLocale.ts b/packages/ui/src/utilities/getDateLocale.ts deleted file mode 100644 index f5ed143d2a..0000000000 --- a/packages/ui/src/utilities/getDateLocale.ts +++ /dev/null @@ -1,48 +0,0 @@ -import type { Locale } from 'date-fns' - -import { dateLocales } from './dateLocales.js' - -export const getDateLocale = ( - locale = 'enUS', -): { - locale: string - localeData: Locale -} => { - const formattedLocales = { - ar: 'ar', - az: 'az', - bg: 'bg', - cs: 'cs', - de: 'de', - en: 'enUS', - es: 'es', - fa: 'faIR', - fr: 'fr', - hr: 'hr', - hu: 'hu', - it: 'it', - ja: 'ja', - ko: 'ko', - my: 'enUS', // Burmese is not currently supported - nb: 'nb', - nl: 'nl', - pl: 'pl', - pt: 'pt', - ro: 'ro', - ru: 'ru', - sv: 'sv', - th: 'th', - tr: 'tr', - ua: 'uk', - vi: 'vi', - zh: 'zhCN', - zhTW: 'zhTW', - } - - const formattedLocale = formattedLocales[locale] || locale - - return { - locale: formattedLocale, - localeData: dateLocales[formattedLocale], - } -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f8d37f8c20..b95b955f55 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -26,20 +26,20 @@ importers: dependencies: '@sentry/react': specifier: ^7.77.0 - version: 7.103.0(react@18.2.0) + version: 7.109.0(react@18.2.0) passport-strategy: specifier: 1.0.0 version: 1.0.0 devDependencies: '@aws-sdk/client-s3': specifier: ^3.525.0 - version: 3.525.0 + version: 3.550.0 '@next/bundle-analyzer': specifier: ^14.1.0 - version: 14.1.0 + version: 14.1.4 '@octokit/core': specifier: ^5.1.0 - version: 5.1.0 + version: 5.2.0 '@payloadcms/eslint-config': specifier: workspace:* version: link:packages/eslint-config-payload @@ -51,10 +51,10 @@ importers: version: 1.43.0 '@swc/cli': specifier: ^0.1.62 - version: 0.1.65(@swc/core@1.4.2) + version: 0.1.65(@swc/core@1.4.13) '@swc/jest': specifier: 0.2.36 - version: 0.2.36(@swc/core@1.4.2) + version: 0.2.36(@swc/core@1.4.13) '@testing-library/jest-dom': specifier: 6.4.2 version: 6.4.2(@types/jest@29.5.12)(jest@29.7.0) @@ -144,7 +144,7 @@ importers: version: 0.20.14-1f2c838 drizzle-orm: specifier: 0.29.4 - version: 0.29.4(@libsql/client@0.5.2)(@types/pg@8.10.2)(@types/react@18.2.74)(pg@8.11.3)(react@18.2.0) + version: 0.29.4(@libsql/client@0.5.6)(@types/pg@8.10.2)(@types/react@18.2.74)(pg@8.11.3)(react@18.2.0) escape-html: specifier: ^1.0.3 version: 1.0.3 @@ -198,10 +198,10 @@ importers: version: 1.2.8 mongodb-memory-server: specifier: ^9.0 - version: 9.1.7 + version: 9.1.8 next: - specifier: 14.2.0-canary.22 - version: 14.2.0-canary.22(@babel/core@7.24.0)(react-dom@18.2.0)(react@18.2.0) + specifier: ^14.2.0-canary.23 + version: 14.2.0(@babel/core@7.24.4)(@playwright/test@1.43.0)(react-dom@18.2.0)(react@18.2.0)(sass@1.74.1) node-mocks-http: specifier: ^1.14.1 version: 1.14.1 @@ -276,10 +276,10 @@ importers: version: 1.0.1 ts-node: specifier: 10.9.1 - version: 10.9.1(@swc/core@1.4.2)(@types/node@20.12.5)(typescript@5.4.4) + version: 10.9.1(@swc/core@1.4.13)(@types/node@20.12.5)(typescript@5.4.4) tsx: specifier: ^4.7.1 - version: 4.7.1 + version: 4.7.2 turbo: specifier: ^1.13.2 version: 1.13.2 @@ -319,9 +319,9 @@ importers: detect-package-manager: specifier: ^3.0.1 version: 3.0.1 - esprima: - specifier: ^4.0.1 - version: 4.0.1 + esprima-next: + specifier: ^6.0.3 + version: 6.0.3 execa: specifier: ^5.0.0 version: 5.1.1 @@ -395,7 +395,7 @@ importers: version: 4.17.1 mongodb-memory-server: specifier: ^9.0 - version: 9.1.7 + version: 9.1.8 payload: specifier: workspace:* version: link:../payload @@ -404,7 +404,7 @@ importers: dependencies: '@libsql/client': specifier: ^0.5.2 - version: 0.5.2 + version: 0.5.6 console-table-printer: specifier: 2.11.2 version: 2.11.2 @@ -413,7 +413,7 @@ importers: version: 0.20.14-1f2c838 drizzle-orm: specifier: 0.29.4 - version: 0.29.4(@libsql/client@0.5.2)(@types/pg@8.10.2)(@types/react@18.2.74)(pg@8.11.3)(react@18.2.0) + version: 0.29.4(@libsql/client@0.5.6)(@types/pg@8.10.2)(@types/react@18.2.74)(pg@8.11.3)(react@18.2.0) pg: specifier: 8.11.3 version: 8.11.3 @@ -628,11 +628,11 @@ importers: specifier: 1.6.2 version: 1.6.2 next: - specifier: 14.2.0-canary.23 - version: 14.2.0-canary.23(@babel/core@7.24.0)(react-dom@18.2.0)(react@18.2.0)(sass@1.71.1) + specifier: ^14.2.0-canary.23 + version: 14.2.0(@babel/core@7.24.4)(@playwright/test@1.43.0)(react-dom@18.2.0)(react@18.2.0)(sass@1.74.1) path-to-regexp: specifier: ^6.2.1 - version: 6.2.1 + version: 6.2.2 qs: specifier: 6.11.2 version: 6.11.2 @@ -644,14 +644,14 @@ importers: version: 8.2.0(react-dom@18.2.0)(react@18.2.0) sass: specifier: ^1.71.1 - version: 1.71.1 + version: 1.74.1 ws: specifier: ^8.16.0 version: 8.16.0 devDependencies: '@next/eslint-plugin-next': specifier: ^14.1.0 - version: 14.1.0 + version: 14.1.4 '@payloadcms/eslint-config': specifier: workspace:* version: link:../eslint-config-payload @@ -666,40 +666,40 @@ importers: version: 8.5.10 css-loader: specifier: ^6.10.0 - version: 6.10.0(webpack@5.90.3) + version: 6.11.0(webpack@5.91.0) css-minimizer-webpack-plugin: specifier: ^6.0.0 - version: 6.0.0(esbuild@0.19.12)(webpack@5.90.3) + version: 6.0.0(esbuild@0.19.12)(webpack@5.91.0) mini-css-extract-plugin: specifier: 1.6.2 - version: 1.6.2(webpack@5.90.3) + version: 1.6.2(webpack@5.91.0) payload: specifier: workspace:* version: link:../payload postcss-loader: specifier: ^8.1.1 - version: 8.1.1(postcss@8.4.35)(typescript@5.4.4)(webpack@5.90.3) + version: 8.1.1(postcss@8.4.38)(typescript@5.4.4)(webpack@5.91.0) postcss-preset-env: specifier: ^9.5.0 - version: 9.5.0(postcss@8.4.35) + version: 9.5.4(postcss@8.4.38) sass-loader: specifier: ^14.1.1 - version: 14.1.1(sass@1.71.1)(webpack@5.90.3) + version: 14.1.1(sass@1.74.1)(webpack@5.91.0) swc-loader: specifier: ^0.2.6 - version: 0.2.6(@swc/core@1.4.2)(webpack@5.90.3) + version: 0.2.6(@swc/core@1.4.13)(webpack@5.91.0) swc-plugin-transform-remove-imports: specifier: ^1.12.1 version: 1.12.1 terser-webpack-plugin: specifier: ^5.3.10 - version: 5.3.10(@swc/core@1.4.2)(esbuild@0.19.12)(webpack@5.90.3) + version: 5.3.10(@swc/core@1.4.13)(esbuild@0.19.12)(webpack@5.91.0) webpack: specifier: ^5.78.0 - version: 5.90.3(@swc/core@1.4.2)(esbuild@0.19.12)(webpack-cli@5.1.4) + version: 5.91.0(@swc/core@1.4.13)(esbuild@0.19.12)(webpack-cli@5.1.4) webpack-cli: specifier: ^5.1.4 - version: 5.1.4(webpack@5.90.3) + version: 5.1.4(webpack@5.91.0) packages/payload: dependencies: @@ -708,10 +708,13 @@ importers: version: link:../translations '@swc-node/core': specifier: ^1.13.0 - version: 1.13.0(@swc/core@1.4.2)(@swc/types@0.1.5) + version: 1.13.0(@swc/core@1.4.13)(@swc/types@0.1.6) '@swc-node/sourcemap-support': specifier: ^0.5.0 version: 0.5.0 + '@swc/core': + specifier: ^1.4.13 + version: 1.4.13 '@types/probe-image-size': specifier: ^7.2.4 version: 7.2.4 @@ -741,13 +744,16 @@ importers: version: 4.1.0 get-tsconfig: specifier: ^4.7.2 - version: 4.7.2 + version: 4.7.3 http-status: specifier: 1.6.2 version: 1.6.2 + image-size: + specifier: ^1.1.1 + version: 1.1.1 joi: specifier: ^17.12.1 - version: 17.12.2 + version: 17.12.3 json-schema-to-typescript: specifier: 11.0.3 version: 11.0.3 @@ -775,9 +781,6 @@ importers: pluralize: specifier: 8.0.0 version: 8.0.0 - probe-image-size: - specifier: ^7.2.3 - version: 7.2.3 sanitize-filename: specifier: 1.6.3 version: 1.6.3 @@ -787,6 +790,9 @@ importers: scmp: specifier: 2.1.0 version: 2.1.0 + uuid: + specifier: ^9.0.1 + version: 9.0.1 devDependencies: '@monaco-editor/react': specifier: 4.5.1 @@ -877,7 +883,7 @@ importers: version: 7.0.3 file-loader: specifier: 6.2.0 - version: 6.2.0(webpack@5.90.3) + version: 6.2.0(webpack@5.91.0) form-data: specifier: 3.0.1 version: 3.0.1 @@ -892,7 +898,7 @@ importers: version: 1.22.0(graphql@16.8.1) mini-css-extract-plugin: specifier: 1.6.2 - version: 1.6.2(webpack@5.90.3) + version: 1.6.2(webpack@5.91.0) nodemon: specifier: 3.0.3 version: 3.0.3 @@ -922,19 +928,19 @@ importers: dependencies: '@aws-sdk/client-cognito-identity': specifier: ^3.525.0 - version: 3.525.0 + version: 3.549.0 '@aws-sdk/client-s3': specifier: ^3.525.0 - version: 3.525.0 + version: 3.550.0 '@aws-sdk/credential-providers': specifier: ^3.525.0 - version: 3.525.0 + version: 3.549.0 '@aws-sdk/lib-storage': specifier: ^3.525.0 - version: 3.525.1(@aws-sdk/client-s3@3.525.0) + version: 3.550.0(@aws-sdk/client-s3@3.550.0) amazon-cognito-identity-js: specifier: ^6.1.2 - version: 6.3.7 + version: 6.3.12 nodemailer: specifier: 6.9.10 version: 6.9.10 @@ -944,7 +950,7 @@ importers: devDependencies: '@types/jest': specifier: ^29.5.1 - version: 29.5.7 + version: 29.5.12 '@types/nodemailer': specifier: 6.4.14 version: 6.4.14 @@ -953,7 +959,7 @@ importers: version: link:../payload ts-jest: specifier: ^29.1.0 - version: 29.1.2(@babel/core@7.24.0)(esbuild@0.19.12)(jest@29.7.0)(typescript@5.4.4) + version: 29.1.2(@babel/core@7.24.4)(esbuild@0.19.12)(jest@29.7.0)(typescript@5.4.4) packages/plugin-cloud-storage: dependencies: @@ -969,19 +975,22 @@ importers: devDependencies: '@aws-sdk/client-s3': specifier: ^3.525.0 - version: 3.525.0 + version: 3.550.0 '@aws-sdk/lib-storage': specifier: ^3.525.0 - version: 3.525.1(@aws-sdk/client-s3@3.525.0) + version: 3.550.0(@aws-sdk/client-s3@3.550.0) '@azure/storage-blob': specifier: ^12.11.0 version: 12.17.0 '@google-cloud/storage': specifier: ^7.7.0 - version: 7.7.0 + version: 7.9.0 '@types/find-node-modules': specifier: ^2.1.2 version: 2.1.2 + '@vercel/blob': + specifier: ^0.22.3 + version: 0.22.3 payload: specifier: workspace:* version: link:../payload @@ -1027,7 +1036,7 @@ importers: version: 18.2.0 ts-node: specifier: 10.9.1 - version: 10.9.1(@swc/core@1.4.2)(@types/node@20.12.5)(typescript@5.4.4) + version: 10.9.1(@swc/core@1.4.13)(@types/node@20.12.5)(typescript@5.4.4) packages/plugin-nested-docs: devDependencies: @@ -1085,13 +1094,13 @@ importers: dependencies: '@sentry/node': specifier: ^7.55.2 - version: 7.103.0 + version: 7.109.0 '@sentry/types': specifier: ^7.54.0 - version: 7.103.0 + version: 7.109.0 express: specifier: ^4.18.2 - version: 4.18.2 + version: 4.19.2 react: specifier: ^18.2.0 version: 18.2.0 @@ -1104,7 +1113,7 @@ importers: version: 4.17.21 '@types/jest': specifier: ^29.5.2 - version: 29.5.7 + version: 29.5.12 '@types/node': specifier: 20.12.5 version: 20.12.5 @@ -1131,10 +1140,10 @@ importers: version: link:../payload ts-jest: specifier: ^29.1.0 - version: 29.1.2(@babel/core@7.24.0)(esbuild@0.19.12)(jest@29.7.0)(typescript@5.4.4) + version: 29.1.2(@babel/core@7.24.4)(esbuild@0.19.12)(jest@29.7.0)(typescript@5.4.4) webpack: specifier: ^5.78.0 - version: 5.90.3(@swc/core@1.4.2)(esbuild@0.19.12)(webpack-cli@5.1.4) + version: 5.91.0(@swc/core@1.4.13)(esbuild@0.19.12)(webpack-cli@5.1.4) packages/plugin-seo: devDependencies: @@ -1198,7 +1207,7 @@ importers: version: 18.2.0 webpack: specifier: ^5.78.0 - version: 5.90.3(@swc/core@1.4.2)(esbuild@0.19.12)(webpack-cli@5.1.4) + version: 5.91.0(@swc/core@1.4.13)(esbuild@0.19.12)(webpack-cli@5.1.4) packages/richtext-lexical: dependencies: @@ -1222,7 +1231,7 @@ importers: version: 0.13.1(@lexical/clipboard@0.13.1)(@lexical/selection@0.13.1)(lexical@0.13.1) '@lexical/react': specifier: 0.13.1 - version: 0.13.1(lexical@0.13.1)(react-dom@18.2.0)(react@18.2.0)(yjs@13.6.12) + version: 0.13.1(lexical@0.13.1)(react-dom@18.2.0)(react@18.2.0)(yjs@13.6.14) '@lexical/rich-text': specifier: 0.13.1 version: 0.13.1(@lexical/clipboard@0.13.1)(@lexical/selection@0.13.1)(@lexical/utils@0.13.1)(lexical@0.13.1) @@ -1341,10 +1350,13 @@ importers: version: link:../eslint-config-payload '@swc/core': specifier: ^1.3.102 - version: 1.4.2 + version: 1.4.13 '@types/react': specifier: 18.2.74 version: 18.2.74 + date-fns: + specifier: 3.3.1 + version: 3.3.1 typescript: specifier: 5.4.4 version: 5.4.4 @@ -1391,8 +1403,8 @@ importers: specifier: 2.3.0 version: 2.3.0 next: - specifier: 14.2.0-canary.23 - version: 14.2.0-canary.23(@babel/core@7.24.0)(react-dom@18.2.0)(react@18.2.0)(sass@1.71.1) + specifier: ^14.2.0-canary.23 + version: 14.2.0(@babel/core@7.24.4)(@playwright/test@1.43.0)(react-dom@18.2.0)(react@18.2.0)(sass@1.74.1) object-to-formdata: specifier: 4.5.1 version: 4.5.1 @@ -1447,40 +1459,40 @@ importers: version: 8.3.4 css-loader: specifier: ^6.10.0 - version: 6.10.0(webpack@5.90.3) + version: 6.11.0(webpack@5.91.0) css-minimizer-webpack-plugin: specifier: ^6.0.0 - version: 6.0.0(esbuild@0.19.12)(webpack@5.90.3) + version: 6.0.0(esbuild@0.19.12)(webpack@5.91.0) mini-css-extract-plugin: specifier: 1.6.2 - version: 1.6.2(webpack@5.90.3) + version: 1.6.2(webpack@5.91.0) payload: specifier: workspace:* version: link:../payload postcss-loader: specifier: ^8.1.1 - version: 8.1.1(postcss@8.4.35)(typescript@5.4.4)(webpack@5.90.3) + version: 8.1.1(postcss@8.4.38)(typescript@5.4.4)(webpack@5.91.0) postcss-preset-env: specifier: ^9.5.0 - version: 9.5.0(postcss@8.4.35) + version: 9.5.4(postcss@8.4.38) sass-loader: specifier: ^14.1.1 - version: 14.1.1(sass@1.71.1)(webpack@5.90.3) + version: 14.1.1(sass@1.74.1)(webpack@5.91.0) swc-loader: specifier: ^0.2.6 - version: 0.2.6(@swc/core@1.4.2)(webpack@5.90.3) + version: 0.2.6(@swc/core@1.4.13)(webpack@5.91.0) swc-plugin-transform-remove-imports: specifier: ^1.12.1 version: 1.12.1 terser-webpack-plugin: specifier: ^5.3.10 - version: 5.3.10(@swc/core@1.4.2)(esbuild@0.19.12)(webpack@5.90.3) + version: 5.3.10(@swc/core@1.4.13)(esbuild@0.19.12)(webpack@5.91.0) webpack: specifier: ^5.78.0 - version: 5.90.3(@swc/core@1.4.2)(esbuild@0.19.12)(webpack-cli@5.1.4) + version: 5.91.0(@swc/core@1.4.13)(esbuild@0.19.12)(webpack-cli@5.1.4) webpack-cli: specifier: ^5.1.4 - version: 5.1.4(webpack@5.90.3) + version: 5.1.4(webpack@5.91.0) test: devDependencies: @@ -1585,31 +1597,29 @@ packages: resolution: {integrity: sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==} dev: true - /@ampproject/remapping@2.2.1: - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + /@ampproject/remapping@2.3.0: + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/gen-mapping': 0.3.4 - '@jridgewell/trace-mapping': 0.3.23 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 /@aws-crypto/crc32@3.0.0: resolution: {integrity: sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==} - requiresBuild: true dependencies: '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.523.0 + '@aws-sdk/types': 3.535.0 tslib: 1.14.1 /@aws-crypto/crc32c@3.0.0: resolution: {integrity: sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==} dependencies: '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.523.0 + '@aws-sdk/types': 3.535.0 tslib: 1.14.1 /@aws-crypto/ie11-detection@3.0.0: resolution: {integrity: sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==} - requiresBuild: true dependencies: tslib: 1.14.1 @@ -1619,21 +1629,20 @@ packages: '@aws-crypto/ie11-detection': 3.0.0 '@aws-crypto/supports-web-crypto': 3.0.0 '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.523.0 - '@aws-sdk/util-locate-window': 3.495.0 + '@aws-sdk/types': 3.535.0 + '@aws-sdk/util-locate-window': 3.535.0 '@aws-sdk/util-utf8-browser': 3.259.0 tslib: 1.14.1 /@aws-crypto/sha256-browser@3.0.0: resolution: {integrity: sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==} - requiresBuild: true dependencies: '@aws-crypto/ie11-detection': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 '@aws-crypto/supports-web-crypto': 3.0.0 '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.523.0 - '@aws-sdk/util-locate-window': 3.495.0 + '@aws-sdk/types': 3.535.0 + '@aws-sdk/util-locate-window': 3.535.0 '@aws-sdk/util-utf8-browser': 3.259.0 tslib: 1.14.1 @@ -1641,689 +1650,659 @@ packages: resolution: {integrity: sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==} dependencies: '@aws-crypto/util': 1.2.2 - '@aws-sdk/types': 3.523.0 + '@aws-sdk/types': 3.535.0 tslib: 1.14.1 dev: false /@aws-crypto/sha256-js@3.0.0: resolution: {integrity: sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==} - requiresBuild: true dependencies: '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.523.0 + '@aws-sdk/types': 3.535.0 tslib: 1.14.1 /@aws-crypto/supports-web-crypto@3.0.0: resolution: {integrity: sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==} - requiresBuild: true dependencies: tslib: 1.14.1 /@aws-crypto/util@1.2.2: resolution: {integrity: sha512-H8PjG5WJ4wz0UXAFXeJjWCW1vkvIJ3qUUD+rGRwJ2/hj+xT58Qle2MTql/2MGzkU+1JLAFuR6aJpLAjHwhmwwg==} dependencies: - '@aws-sdk/types': 3.523.0 + '@aws-sdk/types': 3.535.0 '@aws-sdk/util-utf8-browser': 3.259.0 tslib: 1.14.1 dev: false /@aws-crypto/util@3.0.0: resolution: {integrity: sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==} - requiresBuild: true dependencies: - '@aws-sdk/types': 3.523.0 + '@aws-sdk/types': 3.535.0 '@aws-sdk/util-utf8-browser': 3.259.0 tslib: 1.14.1 - /@aws-sdk/client-cognito-identity@3.525.0: - resolution: {integrity: sha512-LxI9rfn6Vy/EX6I7as14PAKqAhUwVQviaMV/xCLQIubgdVj1xfexVURdiSk7GQshpcwtrs+GQWV21yP+3AX/7A==} + /@aws-sdk/client-cognito-identity@3.549.0: + resolution: {integrity: sha512-KrmjksANuWZTLx8JGtHXsHJ8bA72DoH5rMXhAUQSeSwGYlJKQWeBN9um4XtOOP6fMO9FtEorsG9cxJRk92M7Yw==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sts': 3.525.0(@aws-sdk/credential-provider-node@3.525.0) - '@aws-sdk/core': 3.525.0 - '@aws-sdk/credential-provider-node': 3.525.0 - '@aws-sdk/middleware-host-header': 3.523.0 - '@aws-sdk/middleware-logger': 3.523.0 - '@aws-sdk/middleware-recursion-detection': 3.523.0 - '@aws-sdk/middleware-user-agent': 3.525.0 - '@aws-sdk/region-config-resolver': 3.525.0 - '@aws-sdk/types': 3.523.0 - '@aws-sdk/util-endpoints': 3.525.0 - '@aws-sdk/util-user-agent-browser': 3.523.0 - '@aws-sdk/util-user-agent-node': 3.525.0 - '@smithy/config-resolver': 2.1.4 - '@smithy/core': 1.3.5 - '@smithy/fetch-http-handler': 2.4.3 - '@smithy/hash-node': 2.1.3 - '@smithy/invalid-dependency': 2.1.3 - '@smithy/middleware-content-length': 2.1.3 - '@smithy/middleware-endpoint': 2.4.4 - '@smithy/middleware-retry': 2.1.4 - '@smithy/middleware-serde': 2.1.3 - '@smithy/middleware-stack': 2.1.3 - '@smithy/node-config-provider': 2.2.4 - '@smithy/node-http-handler': 2.4.1 - '@smithy/protocol-http': 3.2.1 - '@smithy/smithy-client': 2.4.2 - '@smithy/types': 2.10.1 - '@smithy/url-parser': 2.1.3 - '@smithy/util-base64': 2.1.1 - '@smithy/util-body-length-browser': 2.1.1 - '@smithy/util-body-length-node': 2.2.1 - '@smithy/util-defaults-mode-browser': 2.1.4 - '@smithy/util-defaults-mode-node': 2.2.3 - '@smithy/util-endpoints': 1.1.4 - '@smithy/util-middleware': 2.1.3 - '@smithy/util-retry': 2.1.3 - '@smithy/util-utf8': 2.1.1 + '@aws-sdk/client-sts': 3.549.0(@aws-sdk/credential-provider-node@3.549.0) + '@aws-sdk/core': 3.549.0 + '@aws-sdk/credential-provider-node': 3.549.0 + '@aws-sdk/middleware-host-header': 3.535.0 + '@aws-sdk/middleware-logger': 3.535.0 + '@aws-sdk/middleware-recursion-detection': 3.535.0 + '@aws-sdk/middleware-user-agent': 3.540.0 + '@aws-sdk/region-config-resolver': 3.535.0 + '@aws-sdk/types': 3.535.0 + '@aws-sdk/util-endpoints': 3.540.0 + '@aws-sdk/util-user-agent-browser': 3.535.0 + '@aws-sdk/util-user-agent-node': 3.535.0 + '@smithy/config-resolver': 2.2.0 + '@smithy/core': 1.4.2 + '@smithy/fetch-http-handler': 2.5.0 + '@smithy/hash-node': 2.2.0 + '@smithy/invalid-dependency': 2.2.0 + '@smithy/middleware-content-length': 2.2.0 + '@smithy/middleware-endpoint': 2.5.1 + '@smithy/middleware-retry': 2.3.1 + '@smithy/middleware-serde': 2.3.0 + '@smithy/middleware-stack': 2.2.0 + '@smithy/node-config-provider': 2.3.0 + '@smithy/node-http-handler': 2.5.0 + '@smithy/protocol-http': 3.3.0 + '@smithy/smithy-client': 2.5.1 + '@smithy/types': 2.12.0 + '@smithy/url-parser': 2.2.0 + '@smithy/util-base64': 2.3.0 + '@smithy/util-body-length-browser': 2.2.0 + '@smithy/util-body-length-node': 2.3.0 + '@smithy/util-defaults-mode-browser': 2.2.1 + '@smithy/util-defaults-mode-node': 2.3.1 + '@smithy/util-endpoints': 1.2.0 + '@smithy/util-middleware': 2.2.0 + '@smithy/util-retry': 2.2.0 + '@smithy/util-utf8': 2.3.0 tslib: 2.6.2 transitivePeerDependencies: - aws-crt - /@aws-sdk/client-s3@3.525.0: - resolution: {integrity: sha512-hoMGH8G9rezZDiJPsMjsyRVNfVHHa4u6lcZ09SQMmtFHWK0FUcC0DIKR5ripV5qGDbnV54i2JotXlLzAv0aNCQ==} + /@aws-sdk/client-s3@3.550.0: + resolution: {integrity: sha512-45jjDQI0Q37PIteWhywhlExxYaiUeOsTsbE62b+U/FOjYV8tirC8uBY9eHeHaP4IPVGHeQWvEYrFJHNU+qsQLQ==} engines: {node: '>=14.0.0'} dependencies: '@aws-crypto/sha1-browser': 3.0.0 '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sts': 3.525.0(@aws-sdk/credential-provider-node@3.525.0) - '@aws-sdk/core': 3.525.0 - '@aws-sdk/credential-provider-node': 3.525.0 - '@aws-sdk/middleware-bucket-endpoint': 3.525.0 - '@aws-sdk/middleware-expect-continue': 3.523.0 - '@aws-sdk/middleware-flexible-checksums': 3.523.0 - '@aws-sdk/middleware-host-header': 3.523.0 - '@aws-sdk/middleware-location-constraint': 3.523.0 - '@aws-sdk/middleware-logger': 3.523.0 - '@aws-sdk/middleware-recursion-detection': 3.523.0 - '@aws-sdk/middleware-sdk-s3': 3.525.0 - '@aws-sdk/middleware-signing': 3.523.0 - '@aws-sdk/middleware-ssec': 3.523.0 - '@aws-sdk/middleware-user-agent': 3.525.0 - '@aws-sdk/region-config-resolver': 3.525.0 - '@aws-sdk/signature-v4-multi-region': 3.525.0 - '@aws-sdk/types': 3.523.0 - '@aws-sdk/util-endpoints': 3.525.0 - '@aws-sdk/util-user-agent-browser': 3.523.0 - '@aws-sdk/util-user-agent-node': 3.525.0 - '@aws-sdk/xml-builder': 3.523.0 - '@smithy/config-resolver': 2.1.4 - '@smithy/core': 1.3.5 - '@smithy/eventstream-serde-browser': 2.1.3 - '@smithy/eventstream-serde-config-resolver': 2.1.3 - '@smithy/eventstream-serde-node': 2.1.3 - '@smithy/fetch-http-handler': 2.4.3 - '@smithy/hash-blob-browser': 2.1.3 - '@smithy/hash-node': 2.1.3 - '@smithy/hash-stream-node': 2.1.3 - '@smithy/invalid-dependency': 2.1.3 - '@smithy/md5-js': 2.1.3 - '@smithy/middleware-content-length': 2.1.3 - '@smithy/middleware-endpoint': 2.4.4 - '@smithy/middleware-retry': 2.1.4 - '@smithy/middleware-serde': 2.1.3 - '@smithy/middleware-stack': 2.1.3 - '@smithy/node-config-provider': 2.2.4 - '@smithy/node-http-handler': 2.4.1 - '@smithy/protocol-http': 3.2.1 - '@smithy/smithy-client': 2.4.2 - '@smithy/types': 2.10.1 - '@smithy/url-parser': 2.1.3 - '@smithy/util-base64': 2.1.1 - '@smithy/util-body-length-browser': 2.1.1 - '@smithy/util-body-length-node': 2.2.1 - '@smithy/util-defaults-mode-browser': 2.1.4 - '@smithy/util-defaults-mode-node': 2.2.3 - '@smithy/util-endpoints': 1.1.4 - '@smithy/util-retry': 2.1.3 - '@smithy/util-stream': 2.1.3 - '@smithy/util-utf8': 2.1.1 - '@smithy/util-waiter': 2.1.3 + '@aws-sdk/client-sts': 3.549.0(@aws-sdk/credential-provider-node@3.549.0) + '@aws-sdk/core': 3.549.0 + '@aws-sdk/credential-provider-node': 3.549.0 + '@aws-sdk/middleware-bucket-endpoint': 3.535.0 + '@aws-sdk/middleware-expect-continue': 3.535.0 + '@aws-sdk/middleware-flexible-checksums': 3.535.0 + '@aws-sdk/middleware-host-header': 3.535.0 + '@aws-sdk/middleware-location-constraint': 3.535.0 + '@aws-sdk/middleware-logger': 3.535.0 + '@aws-sdk/middleware-recursion-detection': 3.535.0 + '@aws-sdk/middleware-sdk-s3': 3.535.0 + '@aws-sdk/middleware-signing': 3.535.0 + '@aws-sdk/middleware-ssec': 3.537.0 + '@aws-sdk/middleware-user-agent': 3.540.0 + '@aws-sdk/region-config-resolver': 3.535.0 + '@aws-sdk/signature-v4-multi-region': 3.535.0 + '@aws-sdk/types': 3.535.0 + '@aws-sdk/util-endpoints': 3.540.0 + '@aws-sdk/util-user-agent-browser': 3.535.0 + '@aws-sdk/util-user-agent-node': 3.535.0 + '@aws-sdk/xml-builder': 3.535.0 + '@smithy/config-resolver': 2.2.0 + '@smithy/core': 1.4.2 + '@smithy/eventstream-serde-browser': 2.2.0 + '@smithy/eventstream-serde-config-resolver': 2.2.0 + '@smithy/eventstream-serde-node': 2.2.0 + '@smithy/fetch-http-handler': 2.5.0 + '@smithy/hash-blob-browser': 2.2.0 + '@smithy/hash-node': 2.2.0 + '@smithy/hash-stream-node': 2.2.0 + '@smithy/invalid-dependency': 2.2.0 + '@smithy/md5-js': 2.2.0 + '@smithy/middleware-content-length': 2.2.0 + '@smithy/middleware-endpoint': 2.5.1 + '@smithy/middleware-retry': 2.3.1 + '@smithy/middleware-serde': 2.3.0 + '@smithy/middleware-stack': 2.2.0 + '@smithy/node-config-provider': 2.3.0 + '@smithy/node-http-handler': 2.5.0 + '@smithy/protocol-http': 3.3.0 + '@smithy/smithy-client': 2.5.1 + '@smithy/types': 2.12.0 + '@smithy/url-parser': 2.2.0 + '@smithy/util-base64': 2.3.0 + '@smithy/util-body-length-browser': 2.2.0 + '@smithy/util-body-length-node': 2.3.0 + '@smithy/util-defaults-mode-browser': 2.2.1 + '@smithy/util-defaults-mode-node': 2.3.1 + '@smithy/util-endpoints': 1.2.0 + '@smithy/util-retry': 2.2.0 + '@smithy/util-stream': 2.2.0 + '@smithy/util-utf8': 2.3.0 + '@smithy/util-waiter': 2.2.0 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + + /@aws-sdk/client-sso-oidc@3.549.0(@aws-sdk/credential-provider-node@3.549.0): + resolution: {integrity: sha512-FbB4A78ILAb8sM4TfBd+3CrQcfZIhe0gtVZNbaxpq5cJZh1K7oZ8vPfKw4do9JWkDUXPLsD9Bwz12f8/JpAb6Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@aws-sdk/credential-provider-node': ^3.549.0 + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/client-sts': 3.549.0(@aws-sdk/credential-provider-node@3.549.0) + '@aws-sdk/core': 3.549.0 + '@aws-sdk/credential-provider-node': 3.549.0 + '@aws-sdk/middleware-host-header': 3.535.0 + '@aws-sdk/middleware-logger': 3.535.0 + '@aws-sdk/middleware-recursion-detection': 3.535.0 + '@aws-sdk/middleware-user-agent': 3.540.0 + '@aws-sdk/region-config-resolver': 3.535.0 + '@aws-sdk/types': 3.535.0 + '@aws-sdk/util-endpoints': 3.540.0 + '@aws-sdk/util-user-agent-browser': 3.535.0 + '@aws-sdk/util-user-agent-node': 3.535.0 + '@smithy/config-resolver': 2.2.0 + '@smithy/core': 1.4.2 + '@smithy/fetch-http-handler': 2.5.0 + '@smithy/hash-node': 2.2.0 + '@smithy/invalid-dependency': 2.2.0 + '@smithy/middleware-content-length': 2.2.0 + '@smithy/middleware-endpoint': 2.5.1 + '@smithy/middleware-retry': 2.3.1 + '@smithy/middleware-serde': 2.3.0 + '@smithy/middleware-stack': 2.2.0 + '@smithy/node-config-provider': 2.3.0 + '@smithy/node-http-handler': 2.5.0 + '@smithy/protocol-http': 3.3.0 + '@smithy/smithy-client': 2.5.1 + '@smithy/types': 2.12.0 + '@smithy/url-parser': 2.2.0 + '@smithy/util-base64': 2.3.0 + '@smithy/util-body-length-browser': 2.2.0 + '@smithy/util-body-length-node': 2.3.0 + '@smithy/util-defaults-mode-browser': 2.2.1 + '@smithy/util-defaults-mode-node': 2.3.1 + '@smithy/util-endpoints': 1.2.0 + '@smithy/util-middleware': 2.2.0 + '@smithy/util-retry': 2.2.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + + /@aws-sdk/client-sso@3.549.0: + resolution: {integrity: sha512-lz+yflOAj5Q263FlCsKpNqttaCb2NPh8jC76gVCqCt7TPxRDBYVaqg0OZYluDaETIDNJi4DwN2Azcck7ilwuPw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/core': 3.549.0 + '@aws-sdk/middleware-host-header': 3.535.0 + '@aws-sdk/middleware-logger': 3.535.0 + '@aws-sdk/middleware-recursion-detection': 3.535.0 + '@aws-sdk/middleware-user-agent': 3.540.0 + '@aws-sdk/region-config-resolver': 3.535.0 + '@aws-sdk/types': 3.535.0 + '@aws-sdk/util-endpoints': 3.540.0 + '@aws-sdk/util-user-agent-browser': 3.535.0 + '@aws-sdk/util-user-agent-node': 3.535.0 + '@smithy/config-resolver': 2.2.0 + '@smithy/core': 1.4.2 + '@smithy/fetch-http-handler': 2.5.0 + '@smithy/hash-node': 2.2.0 + '@smithy/invalid-dependency': 2.2.0 + '@smithy/middleware-content-length': 2.2.0 + '@smithy/middleware-endpoint': 2.5.1 + '@smithy/middleware-retry': 2.3.1 + '@smithy/middleware-serde': 2.3.0 + '@smithy/middleware-stack': 2.2.0 + '@smithy/node-config-provider': 2.3.0 + '@smithy/node-http-handler': 2.5.0 + '@smithy/protocol-http': 3.3.0 + '@smithy/smithy-client': 2.5.1 + '@smithy/types': 2.12.0 + '@smithy/url-parser': 2.2.0 + '@smithy/util-base64': 2.3.0 + '@smithy/util-body-length-browser': 2.2.0 + '@smithy/util-body-length-node': 2.3.0 + '@smithy/util-defaults-mode-browser': 2.2.1 + '@smithy/util-defaults-mode-node': 2.3.1 + '@smithy/util-endpoints': 1.2.0 + '@smithy/util-middleware': 2.2.0 + '@smithy/util-retry': 2.2.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + + /@aws-sdk/client-sts@3.549.0(@aws-sdk/credential-provider-node@3.549.0): + resolution: {integrity: sha512-63IreJ598Dzvpb+6sy81KfIX5iQxnrWSEtlyeCdC2GO6gmSQVwJzc9kr5pAC83lHmlZcm/Q3KZr3XBhRQqP0og==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@aws-sdk/credential-provider-node': ^3.549.0 + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/core': 3.549.0 + '@aws-sdk/credential-provider-node': 3.549.0 + '@aws-sdk/middleware-host-header': 3.535.0 + '@aws-sdk/middleware-logger': 3.535.0 + '@aws-sdk/middleware-recursion-detection': 3.535.0 + '@aws-sdk/middleware-user-agent': 3.540.0 + '@aws-sdk/region-config-resolver': 3.535.0 + '@aws-sdk/types': 3.535.0 + '@aws-sdk/util-endpoints': 3.540.0 + '@aws-sdk/util-user-agent-browser': 3.535.0 + '@aws-sdk/util-user-agent-node': 3.535.0 + '@smithy/config-resolver': 2.2.0 + '@smithy/core': 1.4.2 + '@smithy/fetch-http-handler': 2.5.0 + '@smithy/hash-node': 2.2.0 + '@smithy/invalid-dependency': 2.2.0 + '@smithy/middleware-content-length': 2.2.0 + '@smithy/middleware-endpoint': 2.5.1 + '@smithy/middleware-retry': 2.3.1 + '@smithy/middleware-serde': 2.3.0 + '@smithy/middleware-stack': 2.2.0 + '@smithy/node-config-provider': 2.3.0 + '@smithy/node-http-handler': 2.5.0 + '@smithy/protocol-http': 3.3.0 + '@smithy/smithy-client': 2.5.1 + '@smithy/types': 2.12.0 + '@smithy/url-parser': 2.2.0 + '@smithy/util-base64': 2.3.0 + '@smithy/util-body-length-browser': 2.2.0 + '@smithy/util-body-length-node': 2.3.0 + '@smithy/util-defaults-mode-browser': 2.2.1 + '@smithy/util-defaults-mode-node': 2.3.1 + '@smithy/util-endpoints': 1.2.0 + '@smithy/util-middleware': 2.2.0 + '@smithy/util-retry': 2.2.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + + /@aws-sdk/core@3.549.0: + resolution: {integrity: sha512-jC61OxJn72r/BbuDRCcluiw05Xw9eVLG0CwxQpF3RocxfxyZqlrGYaGecZ8Wy+7g/3sqGRC/Ar5eUhU1YcLx7w==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/core': 1.4.2 + '@smithy/protocol-http': 3.3.0 + '@smithy/signature-v4': 2.2.1 + '@smithy/smithy-client': 2.5.1 + '@smithy/types': 2.12.0 fast-xml-parser: 4.2.5 tslib: 2.6.2 - transitivePeerDependencies: - - aws-crt - /@aws-sdk/client-sso-oidc@3.525.0(@aws-sdk/credential-provider-node@3.525.0): - resolution: {integrity: sha512-zz13k/6RkjPSLmReSeGxd8wzGiiZa4Odr2Tv3wTcxClM4wOjD+zOgGv4Fe32b9AMqaueiCdjbvdu7AKcYxFA4A==} + /@aws-sdk/credential-provider-cognito-identity@3.549.0: + resolution: {integrity: sha512-EADYw4JimdZ3mGhxtAXSdARNunw/4T7Vd82vvsvqavqL3S9jt5+2SrZ2/PYrweJHLRFggMHcBs82FRql1efMaA==} engines: {node: '>=14.0.0'} - requiresBuild: true - peerDependencies: - '@aws-sdk/credential-provider-node': ^3.525.0 dependencies: - '@aws-crypto/sha256-browser': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sts': 3.525.0(@aws-sdk/credential-provider-node@3.525.0) - '@aws-sdk/core': 3.525.0 - '@aws-sdk/credential-provider-node': 3.525.0 - '@aws-sdk/middleware-host-header': 3.523.0 - '@aws-sdk/middleware-logger': 3.523.0 - '@aws-sdk/middleware-recursion-detection': 3.523.0 - '@aws-sdk/middleware-user-agent': 3.525.0 - '@aws-sdk/region-config-resolver': 3.525.0 - '@aws-sdk/types': 3.523.0 - '@aws-sdk/util-endpoints': 3.525.0 - '@aws-sdk/util-user-agent-browser': 3.523.0 - '@aws-sdk/util-user-agent-node': 3.525.0 - '@smithy/config-resolver': 2.1.4 - '@smithy/core': 1.3.5 - '@smithy/fetch-http-handler': 2.4.3 - '@smithy/hash-node': 2.1.3 - '@smithy/invalid-dependency': 2.1.3 - '@smithy/middleware-content-length': 2.1.3 - '@smithy/middleware-endpoint': 2.4.4 - '@smithy/middleware-retry': 2.1.4 - '@smithy/middleware-serde': 2.1.3 - '@smithy/middleware-stack': 2.1.3 - '@smithy/node-config-provider': 2.2.4 - '@smithy/node-http-handler': 2.4.1 - '@smithy/protocol-http': 3.2.1 - '@smithy/smithy-client': 2.4.2 - '@smithy/types': 2.10.1 - '@smithy/url-parser': 2.1.3 - '@smithy/util-base64': 2.1.1 - '@smithy/util-body-length-browser': 2.1.1 - '@smithy/util-body-length-node': 2.2.1 - '@smithy/util-defaults-mode-browser': 2.1.4 - '@smithy/util-defaults-mode-node': 2.2.3 - '@smithy/util-endpoints': 1.1.4 - '@smithy/util-middleware': 2.1.3 - '@smithy/util-retry': 2.1.3 - '@smithy/util-utf8': 2.1.1 + '@aws-sdk/client-cognito-identity': 3.549.0 + '@aws-sdk/types': 3.535.0 + '@smithy/property-provider': 2.2.0 + '@smithy/types': 2.12.0 tslib: 2.6.2 transitivePeerDependencies: - aws-crt - /@aws-sdk/client-sso@3.525.0: - resolution: {integrity: sha512-6KwGQWFoNLH1UupdWPFdKPfTgjSz1kN8/r8aCzuvvXBe4Pz+iDUZ6FEJzGWNc9AapjvZDNO1hs23slomM9rTaA==} + /@aws-sdk/credential-provider-env@3.535.0: + resolution: {integrity: sha512-XppwO8c0GCGSAvdzyJOhbtktSEaShg14VJKg8mpMa1XcgqzmcqqHQjtDWbx5rZheY1VdpXZhpEzJkB6LpQejpA==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@aws-crypto/sha256-browser': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/core': 3.525.0 - '@aws-sdk/middleware-host-header': 3.523.0 - '@aws-sdk/middleware-logger': 3.523.0 - '@aws-sdk/middleware-recursion-detection': 3.523.0 - '@aws-sdk/middleware-user-agent': 3.525.0 - '@aws-sdk/region-config-resolver': 3.525.0 - '@aws-sdk/types': 3.523.0 - '@aws-sdk/util-endpoints': 3.525.0 - '@aws-sdk/util-user-agent-browser': 3.523.0 - '@aws-sdk/util-user-agent-node': 3.525.0 - '@smithy/config-resolver': 2.1.4 - '@smithy/core': 1.3.5 - '@smithy/fetch-http-handler': 2.4.3 - '@smithy/hash-node': 2.1.3 - '@smithy/invalid-dependency': 2.1.3 - '@smithy/middleware-content-length': 2.1.3 - '@smithy/middleware-endpoint': 2.4.4 - '@smithy/middleware-retry': 2.1.4 - '@smithy/middleware-serde': 2.1.3 - '@smithy/middleware-stack': 2.1.3 - '@smithy/node-config-provider': 2.2.4 - '@smithy/node-http-handler': 2.4.1 - '@smithy/protocol-http': 3.2.1 - '@smithy/smithy-client': 2.4.2 - '@smithy/types': 2.10.1 - '@smithy/url-parser': 2.1.3 - '@smithy/util-base64': 2.1.1 - '@smithy/util-body-length-browser': 2.1.1 - '@smithy/util-body-length-node': 2.2.1 - '@smithy/util-defaults-mode-browser': 2.1.4 - '@smithy/util-defaults-mode-node': 2.2.3 - '@smithy/util-endpoints': 1.1.4 - '@smithy/util-middleware': 2.1.3 - '@smithy/util-retry': 2.1.3 - '@smithy/util-utf8': 2.1.1 - tslib: 2.6.2 - transitivePeerDependencies: - - aws-crt - - /@aws-sdk/client-sts@3.525.0(@aws-sdk/credential-provider-node@3.525.0): - resolution: {integrity: sha512-a8NUGRvO6rkfTZCbMaCsjDjLbERCwIUU9dIywFYcRgbFhkupJ7fSaZz3Het98U51M9ZbTEpaTa3fz0HaJv8VJw==} - engines: {node: '>=14.0.0'} - requiresBuild: true - peerDependencies: - '@aws-sdk/credential-provider-node': ^3.525.0 - dependencies: - '@aws-crypto/sha256-browser': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/core': 3.525.0 - '@aws-sdk/credential-provider-node': 3.525.0 - '@aws-sdk/middleware-host-header': 3.523.0 - '@aws-sdk/middleware-logger': 3.523.0 - '@aws-sdk/middleware-recursion-detection': 3.523.0 - '@aws-sdk/middleware-user-agent': 3.525.0 - '@aws-sdk/region-config-resolver': 3.525.0 - '@aws-sdk/types': 3.523.0 - '@aws-sdk/util-endpoints': 3.525.0 - '@aws-sdk/util-user-agent-browser': 3.523.0 - '@aws-sdk/util-user-agent-node': 3.525.0 - '@smithy/config-resolver': 2.1.4 - '@smithy/core': 1.3.5 - '@smithy/fetch-http-handler': 2.4.3 - '@smithy/hash-node': 2.1.3 - '@smithy/invalid-dependency': 2.1.3 - '@smithy/middleware-content-length': 2.1.3 - '@smithy/middleware-endpoint': 2.4.4 - '@smithy/middleware-retry': 2.1.4 - '@smithy/middleware-serde': 2.1.3 - '@smithy/middleware-stack': 2.1.3 - '@smithy/node-config-provider': 2.2.4 - '@smithy/node-http-handler': 2.4.1 - '@smithy/protocol-http': 3.2.1 - '@smithy/smithy-client': 2.4.2 - '@smithy/types': 2.10.1 - '@smithy/url-parser': 2.1.3 - '@smithy/util-base64': 2.1.1 - '@smithy/util-body-length-browser': 2.1.1 - '@smithy/util-body-length-node': 2.2.1 - '@smithy/util-defaults-mode-browser': 2.1.4 - '@smithy/util-defaults-mode-node': 2.2.3 - '@smithy/util-endpoints': 1.1.4 - '@smithy/util-middleware': 2.1.3 - '@smithy/util-retry': 2.1.3 - '@smithy/util-utf8': 2.1.1 - fast-xml-parser: 4.2.5 - tslib: 2.6.2 - transitivePeerDependencies: - - aws-crt - - /@aws-sdk/core@3.525.0: - resolution: {integrity: sha512-E3LtEtMWCriQOFZpVKpLYzbdw/v2PAOEAMhn2VRRZ1g0/g1TXzQrfhEU2yd8l/vQEJaCJ82ooGGg7YECviBUxA==} - engines: {node: '>=14.0.0'} - requiresBuild: true - dependencies: - '@smithy/core': 1.3.5 - '@smithy/protocol-http': 3.2.1 - '@smithy/signature-v4': 2.1.3 - '@smithy/smithy-client': 2.4.2 - '@smithy/types': 2.10.1 + '@aws-sdk/types': 3.535.0 + '@smithy/property-provider': 2.2.0 + '@smithy/types': 2.12.0 tslib: 2.6.2 - /@aws-sdk/credential-provider-cognito-identity@3.525.0: - resolution: {integrity: sha512-0djjCN/zN6QFQt1xU64VBOSRP4wJckU6U7FjLPrGpL6w03hF0dUmVUXjhQZe5WKNPCicVc2S3BYPohl/PzCx1w==} + /@aws-sdk/credential-provider-http@3.535.0: + resolution: {integrity: sha512-kdj1wCmOMZ29jSlUskRqN04S6fJ4dvt0Nq9Z32SA6wO7UG8ht6Ot9h/au/eTWJM3E1somZ7D771oK7dQt9b8yw==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@aws-sdk/client-cognito-identity': 3.525.0 - '@aws-sdk/types': 3.523.0 - '@smithy/property-provider': 2.1.3 - '@smithy/types': 2.10.1 - tslib: 2.6.2 - transitivePeerDependencies: - - aws-crt - - /@aws-sdk/credential-provider-env@3.523.0: - resolution: {integrity: sha512-Y6DWdH6/OuMDoNKVzZlNeBc6f1Yjk1lYMjANKpIhMbkRCvLJw/PYZKOZa8WpXbTYdgg9XLjKybnLIb3ww3uuzA==} - engines: {node: '>=14.0.0'} - requiresBuild: true - dependencies: - '@aws-sdk/types': 3.523.0 - '@smithy/property-provider': 2.1.3 - '@smithy/types': 2.10.1 + '@aws-sdk/types': 3.535.0 + '@smithy/fetch-http-handler': 2.5.0 + '@smithy/node-http-handler': 2.5.0 + '@smithy/property-provider': 2.2.0 + '@smithy/protocol-http': 3.3.0 + '@smithy/smithy-client': 2.5.1 + '@smithy/types': 2.12.0 + '@smithy/util-stream': 2.2.0 tslib: 2.6.2 - /@aws-sdk/credential-provider-http@3.525.0: - resolution: {integrity: sha512-RNWQGuSBQZhl3iqklOslUEfQ4br1V3DCPboMpeqFtddUWJV3m2u2extFur9/4Uy+1EHVF120IwZUKtd8dF+ibw==} + /@aws-sdk/credential-provider-ini@3.549.0(@aws-sdk/credential-provider-node@3.549.0): + resolution: {integrity: sha512-k6IIrluZjQpzui5Din8fW3bFFhHaJ64XrsfYx0Ks1mb7xan84dJxmYP3tdDDmLzUeJv5h95ag88taHfjY9rakA==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@aws-sdk/types': 3.523.0 - '@smithy/fetch-http-handler': 2.4.3 - '@smithy/node-http-handler': 2.4.1 - '@smithy/property-provider': 2.1.3 - '@smithy/protocol-http': 3.2.1 - '@smithy/smithy-client': 2.4.2 - '@smithy/types': 2.10.1 - '@smithy/util-stream': 2.1.3 - tslib: 2.6.2 - - /@aws-sdk/credential-provider-ini@3.525.0(@aws-sdk/credential-provider-node@3.525.0): - resolution: {integrity: sha512-JDnccfK5JRb9jcgpc9lirL9PyCwGIqY0nKdw3LlX5WL5vTpTG4E1q7rLAlpNh7/tFD1n66Itarfv2tsyHMIqCw==} - engines: {node: '>=14.0.0'} - requiresBuild: true - dependencies: - '@aws-sdk/client-sts': 3.525.0(@aws-sdk/credential-provider-node@3.525.0) - '@aws-sdk/credential-provider-env': 3.523.0 - '@aws-sdk/credential-provider-process': 3.523.0 - '@aws-sdk/credential-provider-sso': 3.525.0(@aws-sdk/credential-provider-node@3.525.0) - '@aws-sdk/credential-provider-web-identity': 3.525.0(@aws-sdk/credential-provider-node@3.525.0) - '@aws-sdk/types': 3.523.0 - '@smithy/credential-provider-imds': 2.2.4 - '@smithy/property-provider': 2.1.3 - '@smithy/shared-ini-file-loader': 2.3.4 - '@smithy/types': 2.10.1 + '@aws-sdk/client-sts': 3.549.0(@aws-sdk/credential-provider-node@3.549.0) + '@aws-sdk/credential-provider-env': 3.535.0 + '@aws-sdk/credential-provider-process': 3.535.0 + '@aws-sdk/credential-provider-sso': 3.549.0(@aws-sdk/credential-provider-node@3.549.0) + '@aws-sdk/credential-provider-web-identity': 3.549.0(@aws-sdk/credential-provider-node@3.549.0) + '@aws-sdk/types': 3.535.0 + '@smithy/credential-provider-imds': 2.3.0 + '@smithy/property-provider': 2.2.0 + '@smithy/shared-ini-file-loader': 2.4.0 + '@smithy/types': 2.12.0 tslib: 2.6.2 transitivePeerDependencies: - '@aws-sdk/credential-provider-node' - aws-crt - /@aws-sdk/credential-provider-node@3.525.0: - resolution: {integrity: sha512-RJXlO8goGXpnoHQAyrCcJ0QtWEOFa34LSbfdqBIjQX/fwnjUuEmiGdXTV3AZmwYQ7juk49tfBneHbtOP3AGqsQ==} + /@aws-sdk/credential-provider-node@3.549.0: + resolution: {integrity: sha512-f3YgalsMuywEAVX4AUm9tojqrBdfpAac0+D320ePzas0Ntbp7ItYu9ceKIhgfzXO3No7P3QK0rCrOxL+ABTn8Q==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@aws-sdk/credential-provider-env': 3.523.0 - '@aws-sdk/credential-provider-http': 3.525.0 - '@aws-sdk/credential-provider-ini': 3.525.0(@aws-sdk/credential-provider-node@3.525.0) - '@aws-sdk/credential-provider-process': 3.523.0 - '@aws-sdk/credential-provider-sso': 3.525.0(@aws-sdk/credential-provider-node@3.525.0) - '@aws-sdk/credential-provider-web-identity': 3.525.0(@aws-sdk/credential-provider-node@3.525.0) - '@aws-sdk/types': 3.523.0 - '@smithy/credential-provider-imds': 2.2.4 - '@smithy/property-provider': 2.1.3 - '@smithy/shared-ini-file-loader': 2.3.4 - '@smithy/types': 2.10.1 + '@aws-sdk/credential-provider-env': 3.535.0 + '@aws-sdk/credential-provider-http': 3.535.0 + '@aws-sdk/credential-provider-ini': 3.549.0(@aws-sdk/credential-provider-node@3.549.0) + '@aws-sdk/credential-provider-process': 3.535.0 + '@aws-sdk/credential-provider-sso': 3.549.0(@aws-sdk/credential-provider-node@3.549.0) + '@aws-sdk/credential-provider-web-identity': 3.549.0(@aws-sdk/credential-provider-node@3.549.0) + '@aws-sdk/types': 3.535.0 + '@smithy/credential-provider-imds': 2.3.0 + '@smithy/property-provider': 2.2.0 + '@smithy/shared-ini-file-loader': 2.4.0 + '@smithy/types': 2.12.0 tslib: 2.6.2 transitivePeerDependencies: - aws-crt - /@aws-sdk/credential-provider-process@3.523.0: - resolution: {integrity: sha512-f0LP9KlFmMvPWdKeUKYlZ6FkQAECUeZMmISsv6NKtvPCI9e4O4cLTeR09telwDK8P0HrgcRuZfXM7E30m8re0Q==} + /@aws-sdk/credential-provider-process@3.535.0: + resolution: {integrity: sha512-9O1OaprGCnlb/kYl8RwmH7Mlg8JREZctB8r9sa1KhSsWFq/SWO0AuJTyowxD7zL5PkeS4eTvzFFHWCa3OO5epA==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@aws-sdk/types': 3.523.0 - '@smithy/property-provider': 2.1.3 - '@smithy/shared-ini-file-loader': 2.3.4 - '@smithy/types': 2.10.1 + '@aws-sdk/types': 3.535.0 + '@smithy/property-provider': 2.2.0 + '@smithy/shared-ini-file-loader': 2.4.0 + '@smithy/types': 2.12.0 tslib: 2.6.2 - /@aws-sdk/credential-provider-sso@3.525.0(@aws-sdk/credential-provider-node@3.525.0): - resolution: {integrity: sha512-7V7ybtufxdD3plxeIeB6aqHZeFIUlAyPphXIUgXrGY10iNcosL970rQPBeggsohe4gCM6UvY2TfMeEcr+ZE8FA==} + /@aws-sdk/credential-provider-sso@3.549.0(@aws-sdk/credential-provider-node@3.549.0): + resolution: {integrity: sha512-BGopRKHs7W8zkoH8qmSHrjudj263kXbhVkAUPxVUz0I28+CZNBgJC/RfVCbOpzmysIQEpwSqvOv1y0k+DQzIJQ==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@aws-sdk/client-sso': 3.525.0 - '@aws-sdk/token-providers': 3.525.0(@aws-sdk/credential-provider-node@3.525.0) - '@aws-sdk/types': 3.523.0 - '@smithy/property-provider': 2.1.3 - '@smithy/shared-ini-file-loader': 2.3.4 - '@smithy/types': 2.10.1 + '@aws-sdk/client-sso': 3.549.0 + '@aws-sdk/token-providers': 3.549.0(@aws-sdk/credential-provider-node@3.549.0) + '@aws-sdk/types': 3.535.0 + '@smithy/property-provider': 2.2.0 + '@smithy/shared-ini-file-loader': 2.4.0 + '@smithy/types': 2.12.0 tslib: 2.6.2 transitivePeerDependencies: - '@aws-sdk/credential-provider-node' - aws-crt - /@aws-sdk/credential-provider-web-identity@3.525.0(@aws-sdk/credential-provider-node@3.525.0): - resolution: {integrity: sha512-sAukOjR1oKb2JXG4nPpuBFpSwGUhrrY17PG/xbTy8NAoLLhrqRwnErcLfdTfmj6tH+3094k6ws/Sh8a35ae7fA==} + /@aws-sdk/credential-provider-web-identity@3.549.0(@aws-sdk/credential-provider-node@3.549.0): + resolution: {integrity: sha512-QzclVXPxuwSI7515l34sdvliVq5leroO8P7RQFKRgfyQKO45o1psghierwG3PgV6jlMiv78FIAGJBr/n4qZ7YA==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@aws-sdk/client-sts': 3.525.0(@aws-sdk/credential-provider-node@3.525.0) - '@aws-sdk/types': 3.523.0 - '@smithy/property-provider': 2.1.3 - '@smithy/types': 2.10.1 + '@aws-sdk/client-sts': 3.549.0(@aws-sdk/credential-provider-node@3.549.0) + '@aws-sdk/types': 3.535.0 + '@smithy/property-provider': 2.2.0 + '@smithy/types': 2.12.0 tslib: 2.6.2 transitivePeerDependencies: - '@aws-sdk/credential-provider-node' - aws-crt - /@aws-sdk/credential-providers@3.525.0: - resolution: {integrity: sha512-zj439Ok1s44nahIJKpBM4jhAxnSw20flXQpMD2aeGdvUuKm2xmzZP0lX5z9a+XQWFtNh251ZcSt2p+RwtLKtiw==} + /@aws-sdk/credential-providers@3.549.0: + resolution: {integrity: sha512-icbw8zCX2eSGPGBZLD6HKSgUMnpL95KzUikr94sVN81UuP1EnueaWj6gnErqP2Dr05ZEF9wMZxwd91qu8kVTNw==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@aws-sdk/client-cognito-identity': 3.525.0 - '@aws-sdk/client-sso': 3.525.0 - '@aws-sdk/client-sts': 3.525.0(@aws-sdk/credential-provider-node@3.525.0) - '@aws-sdk/credential-provider-cognito-identity': 3.525.0 - '@aws-sdk/credential-provider-env': 3.523.0 - '@aws-sdk/credential-provider-http': 3.525.0 - '@aws-sdk/credential-provider-ini': 3.525.0(@aws-sdk/credential-provider-node@3.525.0) - '@aws-sdk/credential-provider-node': 3.525.0 - '@aws-sdk/credential-provider-process': 3.523.0 - '@aws-sdk/credential-provider-sso': 3.525.0(@aws-sdk/credential-provider-node@3.525.0) - '@aws-sdk/credential-provider-web-identity': 3.525.0(@aws-sdk/credential-provider-node@3.525.0) - '@aws-sdk/types': 3.523.0 - '@smithy/credential-provider-imds': 2.2.4 - '@smithy/property-provider': 2.1.3 - '@smithy/types': 2.10.1 + '@aws-sdk/client-cognito-identity': 3.549.0 + '@aws-sdk/client-sso': 3.549.0 + '@aws-sdk/client-sts': 3.549.0(@aws-sdk/credential-provider-node@3.549.0) + '@aws-sdk/credential-provider-cognito-identity': 3.549.0 + '@aws-sdk/credential-provider-env': 3.535.0 + '@aws-sdk/credential-provider-http': 3.535.0 + '@aws-sdk/credential-provider-ini': 3.549.0(@aws-sdk/credential-provider-node@3.549.0) + '@aws-sdk/credential-provider-node': 3.549.0 + '@aws-sdk/credential-provider-process': 3.535.0 + '@aws-sdk/credential-provider-sso': 3.549.0(@aws-sdk/credential-provider-node@3.549.0) + '@aws-sdk/credential-provider-web-identity': 3.549.0(@aws-sdk/credential-provider-node@3.549.0) + '@aws-sdk/types': 3.535.0 + '@smithy/credential-provider-imds': 2.3.0 + '@smithy/property-provider': 2.2.0 + '@smithy/types': 2.12.0 tslib: 2.6.2 transitivePeerDependencies: - aws-crt - /@aws-sdk/lib-storage@3.525.1(@aws-sdk/client-s3@3.525.0): - resolution: {integrity: sha512-q0y4+bc5GsE10F1HyA1D24maRyy2H3Ph3o+1eK7/kzKrk0nBbISLGbZ8XNqtWwi+9KdsqWNKMoN9+zsDaE6d/w==} + /@aws-sdk/lib-storage@3.550.0(@aws-sdk/client-s3@3.550.0): + resolution: {integrity: sha512-zDUM4hV/t148DCXschwDusH9tzg7U1MpuUaUPJlklx9Va+NnjrjtWHwL/JeZ5sfGR/1wTZIg3sKho/4P2oAYrQ==} engines: {node: '>=14.0.0'} peerDependencies: '@aws-sdk/client-s3': ^3.0.0 dependencies: - '@aws-sdk/client-s3': 3.525.0 - '@smithy/abort-controller': 2.1.3 - '@smithy/middleware-endpoint': 2.4.4 - '@smithy/smithy-client': 2.4.2 + '@aws-sdk/client-s3': 3.550.0 + '@smithy/abort-controller': 2.2.0 + '@smithy/middleware-endpoint': 2.5.1 + '@smithy/smithy-client': 2.5.1 buffer: 5.6.0 events: 3.3.0 stream-browserify: 3.0.0 tslib: 2.6.2 - /@aws-sdk/middleware-bucket-endpoint@3.525.0: - resolution: {integrity: sha512-nYfQ2Xspfef7j8mZO7varUWLPH6HQlXateH7tBVtBNUAazyQE4UJEvC0fbQ+Y01e+FKlirim/m2umkdMXqAlTg==} + /@aws-sdk/middleware-bucket-endpoint@3.535.0: + resolution: {integrity: sha512-7sijlfQsc4UO9Fsl11mU26Y5f9E7g6UoNg/iJUBpC5pgvvmdBRO5UEhbB/gnqvOEPsBXyhmfzbstebq23Qdz7A==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.523.0 - '@aws-sdk/util-arn-parser': 3.495.0 - '@smithy/node-config-provider': 2.2.4 - '@smithy/protocol-http': 3.2.1 - '@smithy/types': 2.10.1 - '@smithy/util-config-provider': 2.2.1 + '@aws-sdk/types': 3.535.0 + '@aws-sdk/util-arn-parser': 3.535.0 + '@smithy/node-config-provider': 2.3.0 + '@smithy/protocol-http': 3.3.0 + '@smithy/types': 2.12.0 + '@smithy/util-config-provider': 2.3.0 tslib: 2.6.2 - /@aws-sdk/middleware-expect-continue@3.523.0: - resolution: {integrity: sha512-E5DyRAHU39VHaAlQLqXYS/IKpgk3vsryuU6kkOcIIK8Dgw0a2tjoh5AOCaNa8pD+KgAGrFp35JIMSX1zui5diA==} + /@aws-sdk/middleware-expect-continue@3.535.0: + resolution: {integrity: sha512-hFKyqUBky0NWCVku8iZ9+PACehx0p6vuMw5YnZf8FVgHP0fode0b/NwQY6UY7oor/GftvRsAlRUAWGNFEGUpwA==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.523.0 - '@smithy/protocol-http': 3.2.1 - '@smithy/types': 2.10.1 + '@aws-sdk/types': 3.535.0 + '@smithy/protocol-http': 3.3.0 + '@smithy/types': 2.12.0 tslib: 2.6.2 - /@aws-sdk/middleware-flexible-checksums@3.523.0: - resolution: {integrity: sha512-lIa1TdWY9q4zsDFarfSnYcdrwPR+nypaU4n6hb95i620/1F5M5s6H8P0hYtwTNNvx+slrR8F3VBML9pjBtzAHw==} + /@aws-sdk/middleware-flexible-checksums@3.535.0: + resolution: {integrity: sha512-rBIzldY9jjRATxICDX7t77aW6ctqmVDgnuAOgbVT5xgHftt4o7PGWKoMvl/45hYqoQgxVFnCBof9bxkqSBebVA==} engines: {node: '>=14.0.0'} dependencies: '@aws-crypto/crc32': 3.0.0 '@aws-crypto/crc32c': 3.0.0 - '@aws-sdk/types': 3.523.0 - '@smithy/is-array-buffer': 2.1.1 - '@smithy/protocol-http': 3.2.1 - '@smithy/types': 2.10.1 - '@smithy/util-utf8': 2.1.1 + '@aws-sdk/types': 3.535.0 + '@smithy/is-array-buffer': 2.2.0 + '@smithy/protocol-http': 3.3.0 + '@smithy/types': 2.12.0 + '@smithy/util-utf8': 2.3.0 tslib: 2.6.2 - /@aws-sdk/middleware-host-header@3.523.0: - resolution: {integrity: sha512-4g3q7Ta9sdD9TMUuohBAkbx/e3I/juTqfKi7TPgP+8jxcYX72MOsgemAMHuP6CX27eyj4dpvjH+w4SIVDiDSmg==} + /@aws-sdk/middleware-host-header@3.535.0: + resolution: {integrity: sha512-0h6TWjBWtDaYwHMQJI9ulafeS4lLaw1vIxRjbpH0svFRt6Eve+Sy8NlVhECfTU2hNz/fLubvrUxsXoThaLBIew==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@aws-sdk/types': 3.523.0 - '@smithy/protocol-http': 3.2.1 - '@smithy/types': 2.10.1 + '@aws-sdk/types': 3.535.0 + '@smithy/protocol-http': 3.3.0 + '@smithy/types': 2.12.0 tslib: 2.6.2 - /@aws-sdk/middleware-location-constraint@3.523.0: - resolution: {integrity: sha512-1QAUXX3U0jkARnU0yyjk81EO4Uw5dCeQOtvUY5s3bUOHatR3ThosQeIr6y9BCsbXHzNnDe1ytCjqAPyo8r/bYw==} + /@aws-sdk/middleware-location-constraint@3.535.0: + resolution: {integrity: sha512-SxfS9wfidUZZ+WnlKRTCRn3h+XTsymXRXPJj8VV6hNRNeOwzNweoG3YhQbTowuuNfXf89m9v6meYkBBtkdacKw==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.523.0 - '@smithy/types': 2.10.1 + '@aws-sdk/types': 3.535.0 + '@smithy/types': 2.12.0 tslib: 2.6.2 - /@aws-sdk/middleware-logger@3.523.0: - resolution: {integrity: sha512-PeDNJNhfiaZx54LBaLTXzUaJ9LXFwDFFIksipjqjvxMafnoVcQwKbkoPUWLe5ytT4nnL1LogD3s55mERFUsnwg==} + /@aws-sdk/middleware-logger@3.535.0: + resolution: {integrity: sha512-huNHpONOrEDrdRTvSQr1cJiRMNf0S52NDXtaPzdxiubTkP+vni2MohmZANMOai/qT0olmEVX01LhZ0ZAOgmg6A==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@aws-sdk/types': 3.523.0 - '@smithy/types': 2.10.1 + '@aws-sdk/types': 3.535.0 + '@smithy/types': 2.12.0 tslib: 2.6.2 - /@aws-sdk/middleware-recursion-detection@3.523.0: - resolution: {integrity: sha512-nZ3Vt7ehfSDYnrcg/aAfjjvpdE+61B3Zk68i6/hSUIegT3IH9H1vSW67NDKVp+50hcEfzWwM2HMPXxlzuyFyrw==} + /@aws-sdk/middleware-recursion-detection@3.535.0: + resolution: {integrity: sha512-am2qgGs+gwqmR4wHLWpzlZ8PWhm4ktj5bYSgDrsOfjhdBlWNxvPoID9/pDAz5RWL48+oH7I6SQzMqxXsFDikrw==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@aws-sdk/types': 3.523.0 - '@smithy/protocol-http': 3.2.1 - '@smithy/types': 2.10.1 + '@aws-sdk/types': 3.535.0 + '@smithy/protocol-http': 3.3.0 + '@smithy/types': 2.12.0 tslib: 2.6.2 - /@aws-sdk/middleware-sdk-s3@3.525.0: - resolution: {integrity: sha512-ewFyyFM6wdFTOqCiId5GQNi7owDdLEonQhB4h8tF6r3HV52bRlDvZA4aDos+ft6N/XY2J6L0qlFTFq+/oiurXw==} + /@aws-sdk/middleware-sdk-s3@3.535.0: + resolution: {integrity: sha512-/dLG/E3af6ohxkQ5GBHT8tZfuPIg6eItKxCXuulvYj0Tqgf3Mb+xTsvSkxQsJF06RS4sH7Qsg/PnB8ZfrJrXpg==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.523.0 - '@aws-sdk/util-arn-parser': 3.495.0 - '@smithy/node-config-provider': 2.2.4 - '@smithy/protocol-http': 3.2.1 - '@smithy/signature-v4': 2.1.3 - '@smithy/smithy-client': 2.4.2 - '@smithy/types': 2.10.1 - '@smithy/util-config-provider': 2.2.1 + '@aws-sdk/types': 3.535.0 + '@aws-sdk/util-arn-parser': 3.535.0 + '@smithy/node-config-provider': 2.3.0 + '@smithy/protocol-http': 3.3.0 + '@smithy/signature-v4': 2.2.1 + '@smithy/smithy-client': 2.5.1 + '@smithy/types': 2.12.0 + '@smithy/util-config-provider': 2.3.0 tslib: 2.6.2 - /@aws-sdk/middleware-signing@3.523.0: - resolution: {integrity: sha512-pFXV4don6qcmew/OvEjLUr2foVjzoJ8o5k57Oz9yAHz8INx3RHK8MP/K4mVhHo6n0SquRcWrm4kY/Tw+89gkEA==} + /@aws-sdk/middleware-signing@3.535.0: + resolution: {integrity: sha512-Rb4sfus1Gc5paRl9JJgymJGsb/i3gJKK/rTuFZICdd1PBBE5osIOHP5CpzWYBtc5LlyZE1a2QoxPMCyG+QUGPw==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.523.0 - '@smithy/property-provider': 2.1.3 - '@smithy/protocol-http': 3.2.1 - '@smithy/signature-v4': 2.1.3 - '@smithy/types': 2.10.1 - '@smithy/util-middleware': 2.1.3 + '@aws-sdk/types': 3.535.0 + '@smithy/property-provider': 2.2.0 + '@smithy/protocol-http': 3.3.0 + '@smithy/signature-v4': 2.2.1 + '@smithy/types': 2.12.0 + '@smithy/util-middleware': 2.2.0 tslib: 2.6.2 - /@aws-sdk/middleware-ssec@3.523.0: - resolution: {integrity: sha512-FaqAZQeF5cQzZLOIboIJRaWVOQ2F2pJZAXGF5D7nJsxYNFChotA0O0iWimBRxU35RNn7yirVxz35zQzs20ddIw==} + /@aws-sdk/middleware-ssec@3.537.0: + resolution: {integrity: sha512-2QWMrbwd5eBy5KCYn9a15JEWBgrK2qFEKQN2lqb/6z0bhtevIOxIRfC99tzvRuPt6nixFQ+ynKuBjcfT4ZFrdQ==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.523.0 - '@smithy/types': 2.10.1 + '@aws-sdk/types': 3.535.0 + '@smithy/types': 2.12.0 tslib: 2.6.2 - /@aws-sdk/middleware-user-agent@3.525.0: - resolution: {integrity: sha512-4al/6uO+t/QIYXK2OgqzDKQzzLAYJza1vWFS+S0lJ3jLNGyLB5BMU5KqWjDzevYZ4eCnz2Nn7z0FveUTNz8YdQ==} + /@aws-sdk/middleware-user-agent@3.540.0: + resolution: {integrity: sha512-8Rd6wPeXDnOYzWj1XCmOKcx/Q87L0K1/EHqOBocGjLVbN3gmRxBvpmR1pRTjf7IsWfnnzN5btqtcAkfDPYQUMQ==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@aws-sdk/types': 3.523.0 - '@aws-sdk/util-endpoints': 3.525.0 - '@smithy/protocol-http': 3.2.1 - '@smithy/types': 2.10.1 + '@aws-sdk/types': 3.535.0 + '@aws-sdk/util-endpoints': 3.540.0 + '@smithy/protocol-http': 3.3.0 + '@smithy/types': 2.12.0 tslib: 2.6.2 - /@aws-sdk/region-config-resolver@3.525.0: - resolution: {integrity: sha512-8kFqXk6UyKgTMi7N7QlhA6qM4pGPWbiUXqEY2RgUWngtxqNFGeM9JTexZeuavQI+qLLe09VPShPNX71fEDcM6w==} + /@aws-sdk/region-config-resolver@3.535.0: + resolution: {integrity: sha512-IXOznDiaItBjsQy4Fil0kzX/J3HxIOknEphqHbOfUf+LpA5ugcsxuQQONrbEQusCBnfJyymrldBvBhFmtlU9Wg==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@aws-sdk/types': 3.523.0 - '@smithy/node-config-provider': 2.2.4 - '@smithy/types': 2.10.1 - '@smithy/util-config-provider': 2.2.1 - '@smithy/util-middleware': 2.1.3 + '@aws-sdk/types': 3.535.0 + '@smithy/node-config-provider': 2.3.0 + '@smithy/types': 2.12.0 + '@smithy/util-config-provider': 2.3.0 + '@smithy/util-middleware': 2.2.0 tslib: 2.6.2 - /@aws-sdk/signature-v4-multi-region@3.525.0: - resolution: {integrity: sha512-j8gkdfiokaherRgokfZBl2azYBMHlegT7pOnR/3Y79TSz6G+bJeIkuNk8aUbJArr6R8nvAM1j4dt1rBM+efolQ==} + /@aws-sdk/signature-v4-multi-region@3.535.0: + resolution: {integrity: sha512-tqCsEsEj8icW0SAh3NvyhRUq54Gz2pu4NM2tOSrFp7SO55heUUaRLSzYteNZCTOupH//AAaZvbN/UUTO/DrOog==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/middleware-sdk-s3': 3.525.0 - '@aws-sdk/types': 3.523.0 - '@smithy/protocol-http': 3.2.1 - '@smithy/signature-v4': 2.1.3 - '@smithy/types': 2.10.1 + '@aws-sdk/middleware-sdk-s3': 3.535.0 + '@aws-sdk/types': 3.535.0 + '@smithy/protocol-http': 3.3.0 + '@smithy/signature-v4': 2.2.1 + '@smithy/types': 2.12.0 tslib: 2.6.2 - /@aws-sdk/token-providers@3.525.0(@aws-sdk/credential-provider-node@3.525.0): - resolution: {integrity: sha512-puVjbxuK0Dq7PTQ2HdddHy2eQjOH8GZbump74yWJa6JVpRW84LlOcNmP+79x4Kscvz2ldWB8XDFw/pcCiSDe5A==} + /@aws-sdk/token-providers@3.549.0(@aws-sdk/credential-provider-node@3.549.0): + resolution: {integrity: sha512-rJyeXkXknLukRFGuMQOgKnPBa+kLODJtOqEBf929SpQ96f1I6ytdndmWbB5B/OQN5Fu5DOOQUQqJypDQVl5ibQ==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@aws-sdk/client-sso-oidc': 3.525.0(@aws-sdk/credential-provider-node@3.525.0) - '@aws-sdk/types': 3.523.0 - '@smithy/property-provider': 2.1.3 - '@smithy/shared-ini-file-loader': 2.3.4 - '@smithy/types': 2.10.1 + '@aws-sdk/client-sso-oidc': 3.549.0(@aws-sdk/credential-provider-node@3.549.0) + '@aws-sdk/types': 3.535.0 + '@smithy/property-provider': 2.2.0 + '@smithy/shared-ini-file-loader': 2.4.0 + '@smithy/types': 2.12.0 tslib: 2.6.2 transitivePeerDependencies: - '@aws-sdk/credential-provider-node' - aws-crt - /@aws-sdk/types@3.523.0: - resolution: {integrity: sha512-AqGIu4u+SxPiUuNBp2acCVcq80KDUFjxe6e3cMTvKWTzCbrVk1AXv0dAaJnCmdkWIha6zJDWxpIk/aL4EGhZ9A==} + /@aws-sdk/types@3.535.0: + resolution: {integrity: sha512-aY4MYfduNj+sRR37U7XxYR8wemfbKP6lx00ze2M2uubn7mZotuVrWYAafbMSXrdEMSToE5JDhr28vArSOoLcSg==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@smithy/types': 2.10.1 + '@smithy/types': 2.12.0 tslib: 2.6.2 - /@aws-sdk/util-arn-parser@3.495.0: - resolution: {integrity: sha512-hwdA3XAippSEUxs7jpznwD63YYFR+LtQvlEcebPTgWR9oQgG9TfS+39PUfbnEeje1ICuOrN3lrFqFbmP9uzbMg==} + /@aws-sdk/util-arn-parser@3.535.0: + resolution: {integrity: sha512-smVo29nUPAOprp8Z5Y3GHuhiOtw6c8/EtLCm5AVMtRsTPw4V414ZXL2H66tzmb5kEeSzQlbfBSBEdIFZoxO9kg==} engines: {node: '>=14.0.0'} dependencies: tslib: 2.6.2 - /@aws-sdk/util-endpoints@3.525.0: - resolution: {integrity: sha512-DIW7WWU5tIGkeeKX6NJUyrEIdWMiqjLQG3XBzaUj+ufIENwNjdAHhlD8l2vX7Yr3JZRT6yN/84wBCj7Tw1xd1g==} + /@aws-sdk/util-endpoints@3.540.0: + resolution: {integrity: sha512-1kMyQFAWx6f8alaI6UT65/5YW/7pDWAKAdNwL6vuJLea03KrZRX3PMoONOSJpAS5m3Ot7HlWZvf3wZDNTLELZw==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@aws-sdk/types': 3.523.0 - '@smithy/types': 2.10.1 - '@smithy/util-endpoints': 1.1.4 + '@aws-sdk/types': 3.535.0 + '@smithy/types': 2.12.0 + '@smithy/util-endpoints': 1.2.0 tslib: 2.6.2 - /@aws-sdk/util-locate-window@3.495.0: - resolution: {integrity: sha512-MfaPXT0kLX2tQaR90saBT9fWQq2DHqSSJRzW+MZWsmF+y5LGCOhO22ac/2o6TKSQm7h0HRc2GaADqYYYor62yg==} + /@aws-sdk/util-locate-window@3.535.0: + resolution: {integrity: sha512-PHJ3SL6d2jpcgbqdgiPxkXpu7Drc2PYViwxSIqvvMKhDwzSB1W3mMvtpzwKM4IE7zLFodZo0GKjJ9AsoXndXhA==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: tslib: 2.6.2 - /@aws-sdk/util-user-agent-browser@3.523.0: - resolution: {integrity: sha512-6ZRNdGHX6+HQFqTbIA5+i8RWzxFyxsZv8D3soRfpdyWIKkzhSz8IyRKXRciwKBJDaC7OX2jzGE90wxRQft27nA==} - requiresBuild: true + /@aws-sdk/util-user-agent-browser@3.535.0: + resolution: {integrity: sha512-RWMcF/xV5n+nhaA/Ff5P3yNP3Kur/I+VNZngog4TEs92oB/nwOdAg/2JL8bVAhUbMrjTjpwm7PItziYFQoqyig==} dependencies: - '@aws-sdk/types': 3.523.0 - '@smithy/types': 2.10.1 + '@aws-sdk/types': 3.535.0 + '@smithy/types': 2.12.0 bowser: 2.11.0 tslib: 2.6.2 - /@aws-sdk/util-user-agent-node@3.525.0: - resolution: {integrity: sha512-88Wjt4efyUSBGcyIuh1dvoMqY1k15jpJc5A/3yi67clBQEFsu9QCodQCQPqmRjV3VRcMtBOk+jeCTiUzTY5dRQ==} + /@aws-sdk/util-user-agent-node@3.535.0: + resolution: {integrity: sha512-dRek0zUuIT25wOWJlsRm97nTkUlh1NDcLsQZIN2Y8KxhwoXXWtJs5vaDPT+qAg+OpcNj80i1zLR/CirqlFg/TQ==} engines: {node: '>=14.0.0'} - requiresBuild: true peerDependencies: aws-crt: '>=1.0.0' peerDependenciesMeta: aws-crt: optional: true dependencies: - '@aws-sdk/types': 3.523.0 - '@smithy/node-config-provider': 2.2.4 - '@smithy/types': 2.10.1 + '@aws-sdk/types': 3.535.0 + '@smithy/node-config-provider': 2.3.0 + '@smithy/types': 2.12.0 tslib: 2.6.2 /@aws-sdk/util-utf8-browser@3.259.0: resolution: {integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==} - requiresBuild: true dependencies: tslib: 2.6.2 - /@aws-sdk/xml-builder@3.523.0: - resolution: {integrity: sha512-wfvyVymj2TUw7SuDor9IuFcAzJZvWRBZotvY/wQJOlYa3UP3Oezzecy64N4FWfBJEsZdrTN+HOZFl+IzTWWnUA==} + /@aws-sdk/xml-builder@3.535.0: + resolution: {integrity: sha512-VXAq/Jz8KIrU84+HqsOJhIKZqG0PNTdi6n6PFQ4xJf44ZQHD/5C7ouH4qCFX5XgZXcgbRIcMVVYGC6Jye0dRng==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/types': 2.10.1 + '@smithy/types': 2.12.0 tslib: 2.6.2 /@azure/abort-controller@1.1.0: @@ -2332,19 +2311,19 @@ packages: dependencies: tslib: 2.6.2 - /@azure/abort-controller@2.0.0: - resolution: {integrity: sha512-RP/mR/WJchR+g+nQFJGOec+nzeN/VvjlwbinccoqfhTsTHbb8X5+mLDp48kHT0ueyum0BNSwGm0kX0UZuIqTGg==} + /@azure/abort-controller@2.1.1: + resolution: {integrity: sha512-NhzeNm5zu2fPlwGXPUjzsRCRuPx5demaZyNcyNYJDqpa/Sbxzvo/RYt9IwUaAOnDW5+r7J9UOE6f22TQnb9nhQ==} engines: {node: '>=18.0.0'} dependencies: tslib: 2.6.2 dev: true - /@azure/core-auth@1.6.0: - resolution: {integrity: sha512-3X9wzaaGgRaBCwhLQZDtFp5uLIXCPrGbwJNWPPugvL4xbIGgScv77YzzxToKGLAKvG9amDoofMoP+9hsH1vs1w==} + /@azure/core-auth@1.7.1: + resolution: {integrity: sha512-dyeQwvgthqs/SlPVQbZQetpslXceHd4i5a7M/7z/lGEAVwnSluabnQOjF2/dk/hhWgMISusv1Ytp4mQ8JNy62A==} engines: {node: '>=18.0.0'} dependencies: - '@azure/abort-controller': 2.0.0 - '@azure/core-util': 1.7.0 + '@azure/abort-controller': 2.1.1 + '@azure/core-util': 1.8.1 tslib: 2.6.2 dev: true @@ -2353,10 +2332,10 @@ packages: engines: {node: '>=14.0.0'} dependencies: '@azure/abort-controller': 1.1.0 - '@azure/core-auth': 1.6.0 + '@azure/core-auth': 1.7.1 '@azure/core-tracing': 1.0.0-preview.13 - '@azure/core-util': 1.7.0 - '@azure/logger': 1.0.4 + '@azure/core-util': 1.8.1 + '@azure/logger': 1.1.1 '@types/node-fetch': 2.6.4 '@types/tunnel': 0.0.3 form-data: 4.0.0 @@ -2370,19 +2349,19 @@ packages: - encoding dev: true - /@azure/core-lro@2.6.0: - resolution: {integrity: sha512-PyRNcaIOfMgoUC01/24NoG+k8O81VrKxYARnDlo+Q2xji0/0/j2nIt8BwQh294pb1c5QnXTDPbNR4KzoDKXEoQ==} + /@azure/core-lro@2.7.1: + resolution: {integrity: sha512-kXSlrNHOCTVZMxpXNRqzgh9/j4cnNXU5Hf2YjMyjddRhCXFiFRzmNaqwN+XO9rGTsCOIaaG7M67zZdyliXZG9g==} engines: {node: '>=18.0.0'} dependencies: - '@azure/abort-controller': 2.0.0 - '@azure/core-util': 1.7.0 - '@azure/logger': 1.0.4 + '@azure/abort-controller': 2.1.1 + '@azure/core-util': 1.8.1 + '@azure/logger': 1.1.1 tslib: 2.6.2 dev: true - /@azure/core-paging@1.5.0: - resolution: {integrity: sha512-zqWdVIt+2Z+3wqxEOGzR5hXFZ8MGKK52x4vFLw8n58pR6ZfKRx3EXYTxTaYxYHc/PexPUTyimcTWFJbji9Z6Iw==} - engines: {node: '>=14.0.0'} + /@azure/core-paging@1.6.1: + resolution: {integrity: sha512-3tKIQXSU3mlN+ITz0m2pXLnKK3oQ6/EVcW8ud011Iq+M0rx6Wnm7NUEpoMeOAEedeKlPtemrQzO6YWoDR71O5w==} + engines: {node: '>=18.0.0'} dependencies: tslib: 2.6.2 dev: true @@ -2391,21 +2370,21 @@ packages: resolution: {integrity: sha512-KxDlhXyMlh2Jhj2ykX6vNEU0Vou4nHr025KoSEiz7cS3BNiHNaZcdECk/DmLkEB0as5T7b/TpRcehJ5yV6NeXQ==} engines: {node: '>=12.0.0'} dependencies: - '@opentelemetry/api': 1.7.0 + '@opentelemetry/api': 1.8.0 tslib: 2.6.2 dev: true - /@azure/core-util@1.7.0: - resolution: {integrity: sha512-Zq2i3QO6k9DA8vnm29mYM4G8IE9u1mhF1GUabVEqPNX8Lj833gdxQ2NAFxt2BZsfAL+e9cT8SyVN7dFVJ/Hf0g==} + /@azure/core-util@1.8.1: + resolution: {integrity: sha512-L3voj0StUdJ+YKomvwnTv7gHzguJO+a6h30pmmZdRprJCM+RJlGMPxzuh4R7lhQu1jNmEtaHX5wvTgWLDAmbGQ==} engines: {node: '>=18.0.0'} dependencies: - '@azure/abort-controller': 2.0.0 + '@azure/abort-controller': 2.1.1 tslib: 2.6.2 dev: true - /@azure/logger@1.0.4: - resolution: {integrity: sha512-ustrPY8MryhloQj7OWGe+HrYx+aoiOxzbXTtgblbV3xwCqpzUK36phH3XNHQKj3EPonyFUuDTfR3qFhTEAuZEg==} - engines: {node: '>=14.0.0'} + /@azure/logger@1.1.1: + resolution: {integrity: sha512-/+4TtokaGgC+MnThdf6HyIH9Wrjp+CnCn3Nx3ggevN7FFjjNyjqg0yLlc2i9S+Z2uAzI8GYOo35Nzb1MhQ89MA==} + engines: {node: '>=18.0.0'} dependencies: tslib: 2.6.2 dev: true @@ -2416,40 +2395,40 @@ packages: dependencies: '@azure/abort-controller': 1.1.0 '@azure/core-http': 3.0.4 - '@azure/core-lro': 2.6.0 - '@azure/core-paging': 1.5.0 + '@azure/core-lro': 2.7.1 + '@azure/core-paging': 1.6.1 '@azure/core-tracing': 1.0.0-preview.13 - '@azure/logger': 1.0.4 + '@azure/logger': 1.1.1 events: 3.3.0 tslib: 2.6.2 transitivePeerDependencies: - encoding dev: true - /@babel/code-frame@7.23.5: - resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} + /@babel/code-frame@7.24.2: + resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.23.4 - chalk: 2.4.2 + '@babel/highlight': 7.24.2 + picocolors: 1.0.0 - /@babel/compat-data@7.23.5: - resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} + /@babel/compat-data@7.24.4: + resolution: {integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==} engines: {node: '>=6.9.0'} - /@babel/core@7.24.0: - resolution: {integrity: sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==} + /@babel/core@7.24.4: + resolution: {integrity: sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==} engines: {node: '>=6.9.0'} dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.2 + '@babel/generator': 7.24.4 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.0) - '@babel/helpers': 7.24.0 - '@babel/parser': 7.24.0 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) + '@babel/helpers': 7.24.4 + '@babel/parser': 7.24.4 '@babel/template': 7.24.0 - '@babel/traverse': 7.24.0 + '@babel/traverse': 7.24.1 '@babel/types': 7.24.0 convert-source-map: 2.0.0 debug: 4.3.4(supports-color@5.5.0) @@ -2459,20 +2438,20 @@ packages: transitivePeerDependencies: - supports-color - /@babel/generator@7.23.6: - resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} + /@babel/generator@7.24.4: + resolution: {integrity: sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.24.0 - '@jridgewell/gen-mapping': 0.3.4 - '@jridgewell/trace-mapping': 0.3.23 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 /@babel/helper-compilation-targets@7.23.6: resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/compat-data': 7.23.5 + '@babel/compat-data': 7.24.4 '@babel/helper-validator-option': 7.23.5 browserslist: 4.23.0 lru-cache: 5.1.1 @@ -2495,21 +2474,21 @@ packages: dependencies: '@babel/types': 7.24.0 - /@babel/helper-module-imports@7.22.15: - resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + /@babel/helper-module-imports@7.24.3: + resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.24.0 - /@babel/helper-module-transforms@7.23.3(@babel/core@7.24.0): + /@babel/helper-module-transforms@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 + '@babel/helper-module-imports': 7.24.3 '@babel/helper-simple-access': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.20 @@ -2530,8 +2509,8 @@ packages: dependencies: '@babel/types': 7.24.0 - /@babel/helper-string-parser@7.23.4: - resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + /@babel/helper-string-parser@7.24.1: + resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} engines: {node: '>=6.9.0'} /@babel/helper-validator-identifier@7.22.20: @@ -2542,148 +2521,149 @@ packages: resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} engines: {node: '>=6.9.0'} - /@babel/helpers@7.24.0: - resolution: {integrity: sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==} + /@babel/helpers@7.24.4: + resolution: {integrity: sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.24.0 - '@babel/traverse': 7.24.0 + '@babel/traverse': 7.24.1 '@babel/types': 7.24.0 transitivePeerDependencies: - supports-color - /@babel/highlight@7.23.4: - resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + /@babel/highlight@7.24.2: + resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 + picocolors: 1.0.0 - /@babel/parser@7.24.0: - resolution: {integrity: sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==} + /@babel/parser@7.24.4: + resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==} engines: {node: '>=6.0.0'} hasBin: true dependencies: '@babel/types': 7.24.0 - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.0): + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.4): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.0): + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.4): resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.0): + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.4): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.0): + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.4): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.0): + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.4): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.24.0): - resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} + /@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.0): + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.4): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.0): + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.4): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.0): + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.4): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.0): + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.4): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.0): + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.4): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.0): + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.4): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.0): + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.4): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.24.0): - resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} + /@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - /@babel/runtime@7.24.0: - resolution: {integrity: sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==} + /@babel/runtime@7.24.4: + resolution: {integrity: sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 @@ -2692,21 +2672,21 @@ packages: resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.23.5 - '@babel/parser': 7.24.0 + '@babel/code-frame': 7.24.2 + '@babel/parser': 7.24.4 '@babel/types': 7.24.0 - /@babel/traverse@7.24.0: - resolution: {integrity: sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==} + /@babel/traverse@7.24.1: + resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 + '@babel/code-frame': 7.24.2 + '@babel/generator': 7.24.4 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.24.0 + '@babel/parser': 7.24.4 '@babel/types': 7.24.0 debug: 4.3.4(supports-color@5.5.0) globals: 11.12.0 @@ -2717,7 +2697,7 @@ packages: resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.23.4 + '@babel/helper-string-parser': 7.24.1 '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 @@ -2756,429 +2736,429 @@ packages: dependencies: '@jridgewell/trace-mapping': 0.3.9 - /@csstools/cascade-layer-name-parser@1.0.8(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3): - resolution: {integrity: sha512-xHxXavWvXB5nAA9IvZtjEzkONM3hPXpxqYK4cEw60LcqPiFjq7ZlEFxOyYFPrG4UdANKtnucNtRVDy7frjq6AA==} + /@csstools/cascade-layer-name-parser@1.0.9(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4): + resolution: {integrity: sha512-RRqNjxTZDUhx7pxYOBG/AkCVmPS3zYzfE47GEhIGkFuWFTQGJBgWOUUkKNo5MfxIfjDz5/1L3F3rF1oIsYaIpw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: - '@csstools/css-parser-algorithms': ^2.6.0 - '@csstools/css-tokenizer': ^2.2.3 + '@csstools/css-parser-algorithms': ^2.6.1 + '@csstools/css-tokenizer': ^2.2.4 dependencies: - '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3) - '@csstools/css-tokenizer': 2.2.3 + '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4) + '@csstools/css-tokenizer': 2.2.4 dev: true - /@csstools/color-helpers@4.0.0: - resolution: {integrity: sha512-wjyXB22/h2OvxAr3jldPB7R7kjTUEzopvjitS8jWtyd8fN6xJ8vy1HnHu0ZNfEkqpBJgQ76Q+sBDshWcMvTa/w==} + /@csstools/color-helpers@4.1.0: + resolution: {integrity: sha512-pWRKF6cDwget8HowIIf2MqEmqIca/cf8/jO4b3PRtUF5EfQXYMtBIKycXB4yXTCUmwLKOoRZAzh/hjnc7ywOIg==} engines: {node: ^14 || ^16 || >=18} dev: true - /@csstools/css-calc@1.1.7(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3): - resolution: {integrity: sha512-+7bUzB5I4cI97tKmBJA8ilTl/YRo6VAOdlrnd/4x2NyK60nvYurGKa5TZpE1zcgIrTC97iJRE0/V65feyFytuw==} + /@csstools/css-calc@1.2.0(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4): + resolution: {integrity: sha512-iQqIW5vDPqQdLx07/atCuNKDprhIWjB0b8XRhUyXZWBZYUG+9mNyFwyu30rypX84WLevVo25NYW2ipxR8WyseQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: - '@csstools/css-parser-algorithms': ^2.6.0 - '@csstools/css-tokenizer': ^2.2.3 + '@csstools/css-parser-algorithms': ^2.6.1 + '@csstools/css-tokenizer': ^2.2.4 dependencies: - '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3) - '@csstools/css-tokenizer': 2.2.3 + '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4) + '@csstools/css-tokenizer': 2.2.4 dev: true - /@csstools/css-color-parser@1.5.2(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3): - resolution: {integrity: sha512-5GEkuuUxD5dael3xoWjyf7gAPAi4pwm8X8JW/nUMhxntGY4Wo4Lp7vKlex4V5ZgTfAoov14rZFsZyOantdTatg==} + /@csstools/css-color-parser@1.6.3(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4): + resolution: {integrity: sha512-pQPUPo32HW3/NuZxrwr3VJHE+vGqSTVI5gK4jGbuJ7eOFUrsTmZikXcVdInCVWOvuxK5xbCzwDWoTlZUCAKN+A==} engines: {node: ^14 || ^16 || >=18} peerDependencies: - '@csstools/css-parser-algorithms': ^2.6.0 - '@csstools/css-tokenizer': ^2.2.3 + '@csstools/css-parser-algorithms': ^2.6.1 + '@csstools/css-tokenizer': ^2.2.4 dependencies: - '@csstools/color-helpers': 4.0.0 - '@csstools/css-calc': 1.1.7(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3) - '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3) - '@csstools/css-tokenizer': 2.2.3 + '@csstools/color-helpers': 4.1.0 + '@csstools/css-calc': 1.2.0(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4) + '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4) + '@csstools/css-tokenizer': 2.2.4 dev: true - /@csstools/css-parser-algorithms@2.6.0(@csstools/css-tokenizer@2.2.3): - resolution: {integrity: sha512-YfEHq0eRH98ffb5/EsrrDspVWAuph6gDggAE74ZtjecsmyyWpW768hOyiONa8zwWGbIWYfa2Xp4tRTrpQQ00CQ==} + /@csstools/css-parser-algorithms@2.6.1(@csstools/css-tokenizer@2.2.4): + resolution: {integrity: sha512-ubEkAaTfVZa+WwGhs5jbo5Xfqpeaybr/RvWzvFxRs4jfq16wH8l8Ty/QEEpINxll4xhuGfdMbipRyz5QZh9+FA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: - '@csstools/css-tokenizer': ^2.2.3 + '@csstools/css-tokenizer': ^2.2.4 dependencies: - '@csstools/css-tokenizer': 2.2.3 + '@csstools/css-tokenizer': 2.2.4 dev: true - /@csstools/css-tokenizer@2.2.3: - resolution: {integrity: sha512-pp//EvZ9dUmGuGtG1p+n17gTHEOqu9jO+FiCUjNN3BDmyhdA2Jq9QsVeR7K8/2QCK17HSsioPlTW9ZkzoWb3Lg==} + /@csstools/css-tokenizer@2.2.4: + resolution: {integrity: sha512-PuWRAewQLbDhGeTvFuq2oClaSCKPIBmHyIobCV39JHRYN0byDcUWJl5baPeNUcqrjtdMNqFooE0FGl31I3JOqw==} engines: {node: ^14 || ^16 || >=18} dev: true - /@csstools/media-query-list-parser@2.1.8(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3): - resolution: {integrity: sha512-DiD3vG5ciNzeuTEoh74S+JMjQDs50R3zlxHnBnfd04YYfA/kh2KiBCGhzqLxlJcNq+7yNQ3stuZZYLX6wK/U2g==} + /@csstools/media-query-list-parser@2.1.9(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4): + resolution: {integrity: sha512-qqGuFfbn4rUmyOB0u8CVISIp5FfJ5GAR3mBrZ9/TKndHakdnm6pY0L/fbLcpPnrzwCyyTEZl1nUcXAYHEWneTA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: - '@csstools/css-parser-algorithms': ^2.6.0 - '@csstools/css-tokenizer': ^2.2.3 + '@csstools/css-parser-algorithms': ^2.6.1 + '@csstools/css-tokenizer': ^2.2.4 dependencies: - '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3) - '@csstools/css-tokenizer': 2.2.3 + '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4) + '@csstools/css-tokenizer': 2.2.4 dev: true - /@csstools/postcss-cascade-layers@4.0.3(postcss@8.4.35): - resolution: {integrity: sha512-RbkQoOH23yGhWVetgBTwFgIOHEyU2tKMN7blTz/YAKKabR6tr9pP7mYS23Q9snFY2hr8WSaV8Le64KdM9BtUSA==} + /@csstools/postcss-cascade-layers@4.0.4(postcss@8.4.38): + resolution: {integrity: sha512-MKErv8lpEwVmAcAwidY1Kfd3oWrh2Q14kxHs9xn26XzjP/PrcdngWq63lJsZeMlBY7o+WlEOeE+FP6zPzeY2uw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/selector-specificity': 3.0.2(postcss-selector-parser@6.0.15) - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + '@csstools/selector-specificity': 3.0.3(postcss-selector-parser@6.0.16) + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 dev: true - /@csstools/postcss-color-function@3.0.10(postcss@8.4.35): - resolution: {integrity: sha512-jxiXmSl4ZYX8KewFjL5ef6of9uW73VkaHeDb2tqb5q4ZDPYxjusNX1KJ8UXY8+7ydqS5QBo42tVMrSMGy+rDmw==} + /@csstools/postcss-color-function@3.0.13(postcss@8.4.38): + resolution: {integrity: sha512-gM24cIPU45HSPJ2zllz7VKjS1OKQS1sKOMI7Wsw8gFyXSGAGrxhYo++McylOqOXd8ecMaKxKQMUJqJVibvJYig==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/css-color-parser': 1.5.2(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3) - '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3) - '@csstools/css-tokenizer': 2.2.3 - '@csstools/postcss-progressive-custom-properties': 3.1.0(postcss@8.4.35) - '@csstools/utilities': 1.0.0(postcss@8.4.35) - postcss: 8.4.35 + '@csstools/css-color-parser': 1.6.3(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4) + '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4) + '@csstools/css-tokenizer': 2.2.4 + '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.4.38) + '@csstools/utilities': 1.0.0(postcss@8.4.38) + postcss: 8.4.38 dev: true - /@csstools/postcss-color-mix-function@2.0.10(postcss@8.4.35): - resolution: {integrity: sha512-zeD856+FDCUjB077pPS+Z9OnTQnqpiJrao3TW+sasCb/gJ3vZCX7sRSRFsRUo0/MntTtJu9hkKv9eMkFmfjydA==} + /@csstools/postcss-color-mix-function@2.0.13(postcss@8.4.38): + resolution: {integrity: sha512-mD8IIfGVeWkN1H1wfCqYePOg4cDnVrOXm4P0OlYcvKriq6sImGCGShv/2D88q6s3iUlLXfUBES+DUjLVjDMhnw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/css-color-parser': 1.5.2(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3) - '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3) - '@csstools/css-tokenizer': 2.2.3 - '@csstools/postcss-progressive-custom-properties': 3.1.0(postcss@8.4.35) - '@csstools/utilities': 1.0.0(postcss@8.4.35) - postcss: 8.4.35 + '@csstools/css-color-parser': 1.6.3(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4) + '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4) + '@csstools/css-tokenizer': 2.2.4 + '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.4.38) + '@csstools/utilities': 1.0.0(postcss@8.4.38) + postcss: 8.4.38 dev: true - /@csstools/postcss-exponential-functions@1.0.4(postcss@8.4.35): - resolution: {integrity: sha512-frMf0CFVnZoGEKAHlxLy3s4g/tpjyFn5+A+h895UJNm9Uc+ewGT7+EeK7Kh9IHH4pD4FkaGW1vOQtER00PLurQ==} + /@csstools/postcss-exponential-functions@1.0.5(postcss@8.4.38): + resolution: {integrity: sha512-7S7I7KgwHWQYzJJAoIjRtUf7DQs1dxipeg1A6ikZr0PYapNJX7UHz0evlpE67SQqYj1xBs70gpG7xUv3uLp4PA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/css-calc': 1.1.7(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3) - '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3) - '@csstools/css-tokenizer': 2.2.3 - postcss: 8.4.35 + '@csstools/css-calc': 1.2.0(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4) + '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4) + '@csstools/css-tokenizer': 2.2.4 + postcss: 8.4.38 dev: true - /@csstools/postcss-font-format-keywords@3.0.2(postcss@8.4.35): + /@csstools/postcss-font-format-keywords@3.0.2(postcss@8.4.38): resolution: {integrity: sha512-E0xz2sjm4AMCkXLCFvI/lyl4XO6aN1NCSMMVEOngFDJ+k2rDwfr6NDjWljk1li42jiLNChVX+YFnmfGCigZKXw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/utilities': 1.0.0(postcss@8.4.35) - postcss: 8.4.35 + '@csstools/utilities': 1.0.0(postcss@8.4.38) + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /@csstools/postcss-gamut-mapping@1.0.3(postcss@8.4.35): - resolution: {integrity: sha512-P0+ude1KyCy9LXOe2pHJmpcXK4q/OQbr2Sn2wQSssMw0rALGmny2MfHiCqEu8n6mf2cN6lWDZdzY8enBk8WHXQ==} + /@csstools/postcss-gamut-mapping@1.0.6(postcss@8.4.38): + resolution: {integrity: sha512-qGFpHU9cRf9qqkbHh9cWMTlBtGi/ujPgP/znQdwkbB4TgDR1ddI5wRRrksBsx64sfoUSlIEd70bxXzD9FtfdLg==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/css-color-parser': 1.5.2(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3) - '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3) - '@csstools/css-tokenizer': 2.2.3 - postcss: 8.4.35 + '@csstools/css-color-parser': 1.6.3(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4) + '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4) + '@csstools/css-tokenizer': 2.2.4 + postcss: 8.4.38 dev: true - /@csstools/postcss-gradients-interpolation-method@4.0.11(postcss@8.4.35): - resolution: {integrity: sha512-LFom5jCVUfzF+iuiOZvhvX7RRN8vc+tKpcKo9s4keEBAU2mPwV5/Fgz5iylEfXP/DZbEdq2C0At20urMi/lupw==} + /@csstools/postcss-gradients-interpolation-method@4.0.14(postcss@8.4.38): + resolution: {integrity: sha512-VMWC3xtpchHJoRBb/fs1gJR/5nHopX+0GwwmgdCI1DjROtfWUKIW0nv8occ922Gv0/Lk93XBtYBv8JttVBMZUQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/css-color-parser': 1.5.2(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3) - '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3) - '@csstools/css-tokenizer': 2.2.3 - '@csstools/postcss-progressive-custom-properties': 3.1.0(postcss@8.4.35) - '@csstools/utilities': 1.0.0(postcss@8.4.35) - postcss: 8.4.35 + '@csstools/css-color-parser': 1.6.3(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4) + '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4) + '@csstools/css-tokenizer': 2.2.4 + '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.4.38) + '@csstools/utilities': 1.0.0(postcss@8.4.38) + postcss: 8.4.38 dev: true - /@csstools/postcss-hwb-function@3.0.9(postcss@8.4.35): - resolution: {integrity: sha512-S3/Z+mGHWIKAex7DLsHFDiku5lBEK34avT2My6sGPNCXB38TZjrKI0rd7JdN9oulem5sn+CU7oONyIftui24oQ==} + /@csstools/postcss-hwb-function@3.0.12(postcss@8.4.38): + resolution: {integrity: sha512-90kIs+FsM6isAXLVoFHTTl4h0J6g1J1M6ahpIjAs6/k7a2A9FB/q+l0MHpLre0ZiPlBf2y3e1j4L+79vml7kJw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/css-color-parser': 1.5.2(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3) - '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3) - '@csstools/css-tokenizer': 2.2.3 - '@csstools/postcss-progressive-custom-properties': 3.1.0(postcss@8.4.35) - '@csstools/utilities': 1.0.0(postcss@8.4.35) - postcss: 8.4.35 + '@csstools/css-color-parser': 1.6.3(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4) + '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4) + '@csstools/css-tokenizer': 2.2.4 + '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.4.38) + '@csstools/utilities': 1.0.0(postcss@8.4.38) + postcss: 8.4.38 dev: true - /@csstools/postcss-ic-unit@3.0.4(postcss@8.4.35): - resolution: {integrity: sha512-OB6ojl33/TQHhjVx1NI+n3EnYbdUM6Q/mSUv3WFATdcz7IrH/CmBaZt7P1R6j1Xdp58thIa6jm4Je7saGs+2AA==} + /@csstools/postcss-ic-unit@3.0.6(postcss@8.4.38): + resolution: {integrity: sha512-fHaU9C/sZPauXMrzPitZ/xbACbvxbkPpHoUgB9Kw5evtsBWdVkVrajOyiT9qX7/c+G1yjApoQjP1fQatldsy9w==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/postcss-progressive-custom-properties': 3.1.0(postcss@8.4.35) - '@csstools/utilities': 1.0.0(postcss@8.4.35) - postcss: 8.4.35 + '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.4.38) + '@csstools/utilities': 1.0.0(postcss@8.4.38) + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /@csstools/postcss-initial@1.0.1(postcss@8.4.35): + /@csstools/postcss-initial@1.0.1(postcss@8.4.38): resolution: {integrity: sha512-wtb+IbUIrIf8CrN6MLQuFR7nlU5C7PwuebfeEXfjthUha1+XZj2RVi+5k/lukToA24sZkYAiSJfHM8uG/UZIdg==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true - /@csstools/postcss-is-pseudo-class@4.0.5(postcss@8.4.35): - resolution: {integrity: sha512-qG3MI7IN3KY9UwdaE9E7G7sFydscVW7nAj5OGwaBP9tQPEEVdxXTGI+l1ZW5EUpZFSj+u3q/22fH5+8HI72+Bg==} + /@csstools/postcss-is-pseudo-class@4.0.6(postcss@8.4.38): + resolution: {integrity: sha512-HilOhAsMpFheMYkuaREZx+CGa4hsG6kQdzwXSsuqKDFzYz2eIMP213+3dH/vUbPXaWrzqLKr8m3i0dgYPoh7vg==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/selector-specificity': 3.0.2(postcss-selector-parser@6.0.15) - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + '@csstools/selector-specificity': 3.0.3(postcss-selector-parser@6.0.16) + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 dev: true - /@csstools/postcss-light-dark-function@1.0.0(postcss@8.4.35): - resolution: {integrity: sha512-KHo633V16DGo6tmpr1ARAwO73CPBNmDI3PfSQYe7ZBMiv60WEizbcEroK75fHjxKYJ4tj9uCCzp5sYG4cEUqqw==} + /@csstools/postcss-light-dark-function@1.0.3(postcss@8.4.38): + resolution: {integrity: sha512-izW8hvhOqJlarLcGXO5PSylW9pQS3fytmhRdx2/e1oZFi15vs7ZShOHcREHJ3FfGdYqDA10cP9uhH0A3hmm1Rw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3) - '@csstools/css-tokenizer': 2.2.3 - '@csstools/postcss-progressive-custom-properties': 3.1.0(postcss@8.4.35) - '@csstools/utilities': 1.0.0(postcss@8.4.35) - postcss: 8.4.35 + '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4) + '@csstools/css-tokenizer': 2.2.4 + '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.4.38) + '@csstools/utilities': 1.0.0(postcss@8.4.38) + postcss: 8.4.38 dev: true - /@csstools/postcss-logical-float-and-clear@2.0.1(postcss@8.4.35): + /@csstools/postcss-logical-float-and-clear@2.0.1(postcss@8.4.38): resolution: {integrity: sha512-SsrWUNaXKr+e/Uo4R/uIsqJYt3DaggIh/jyZdhy/q8fECoJSKsSMr7nObSLdvoULB69Zb6Bs+sefEIoMG/YfOA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true - /@csstools/postcss-logical-overflow@1.0.1(postcss@8.4.35): + /@csstools/postcss-logical-overflow@1.0.1(postcss@8.4.38): resolution: {integrity: sha512-Kl4lAbMg0iyztEzDhZuQw8Sj9r2uqFDcU1IPl+AAt2nue8K/f1i7ElvKtXkjhIAmKiy5h2EY8Gt/Cqg0pYFDCw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true - /@csstools/postcss-logical-overscroll-behavior@1.0.1(postcss@8.4.35): + /@csstools/postcss-logical-overscroll-behavior@1.0.1(postcss@8.4.38): resolution: {integrity: sha512-+kHamNxAnX8ojPCtV8WPcUP3XcqMFBSDuBuvT6MHgq7oX4IQxLIXKx64t7g9LiuJzE7vd06Q9qUYR6bh4YnGpQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true - /@csstools/postcss-logical-resize@2.0.1(postcss@8.4.35): + /@csstools/postcss-logical-resize@2.0.1(postcss@8.4.38): resolution: {integrity: sha512-W5Gtwz7oIuFcKa5SmBjQ2uxr8ZoL7M2bkoIf0T1WeNqljMkBrfw1DDA8/J83k57NQ1kcweJEjkJ04pUkmyee3A==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /@csstools/postcss-logical-viewport-units@2.0.6(postcss@8.4.35): - resolution: {integrity: sha512-6hV0ngZh8J7HqNY3kyt+z5ABN/XE18qvrU7ne4YSkKfltrWDnQgGiW/Q+h7bdQz8/W5juAefcdCCAJUIBE7erg==} + /@csstools/postcss-logical-viewport-units@2.0.7(postcss@8.4.38): + resolution: {integrity: sha512-L4G3zsp/bnU0+WXUyysihCUH14LkfMgUJsS9vKz3vCYbVobOTqQRoNXnEPpyNp8WYyolLqAWbGGJhVu8J6u2OQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/css-tokenizer': 2.2.3 - '@csstools/utilities': 1.0.0(postcss@8.4.35) - postcss: 8.4.35 + '@csstools/css-tokenizer': 2.2.4 + '@csstools/utilities': 1.0.0(postcss@8.4.38) + postcss: 8.4.38 dev: true - /@csstools/postcss-media-minmax@1.1.3(postcss@8.4.35): - resolution: {integrity: sha512-W9AFRQSLvT+Dxtp20AewzGTUxzkJ21XSKzqRALwQdAv0uJGXkR76qgdhkoX0L/tcV4gXtgDfVtGYL/x2Nz/M5Q==} + /@csstools/postcss-media-minmax@1.1.4(postcss@8.4.38): + resolution: {integrity: sha512-xl/PIO3TUbXO1ZA4SA6HCw+Q9UGe2cgeRKx3lHCzoNig2D4bT5vfVCOrwhxjUb09oHihc9eI3I0iIfVPiXaN1A==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/css-calc': 1.1.7(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3) - '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3) - '@csstools/css-tokenizer': 2.2.3 - '@csstools/media-query-list-parser': 2.1.8(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3) - postcss: 8.4.35 + '@csstools/css-calc': 1.2.0(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4) + '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4) + '@csstools/css-tokenizer': 2.2.4 + '@csstools/media-query-list-parser': 2.1.9(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4) + postcss: 8.4.38 dev: true - /@csstools/postcss-media-queries-aspect-ratio-number-values@2.0.6(postcss@8.4.35): - resolution: {integrity: sha512-awc2qenSDvx6r+w6G9xxENp+LsbvHC8mMMV23KYmk4pR3YL8JxeKPDSiDhmqd93FQ9nNNDc/CaCQEcvP+GV4rw==} + /@csstools/postcss-media-queries-aspect-ratio-number-values@2.0.7(postcss@8.4.38): + resolution: {integrity: sha512-HBDAQw1K0NilcHGMUHv8jzf2mpOtcWTVKtuY3AeZ5TS1uyWWNVi5/yuA/tREPLU9WifNdqHQ+rfbsV/8zTIkTg==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3) - '@csstools/css-tokenizer': 2.2.3 - '@csstools/media-query-list-parser': 2.1.8(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3) - postcss: 8.4.35 + '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4) + '@csstools/css-tokenizer': 2.2.4 + '@csstools/media-query-list-parser': 2.1.9(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4) + postcss: 8.4.38 dev: true - /@csstools/postcss-nested-calc@3.0.2(postcss@8.4.35): + /@csstools/postcss-nested-calc@3.0.2(postcss@8.4.38): resolution: {integrity: sha512-ySUmPyawiHSmBW/VI44+IObcKH0v88LqFe0d09Sb3w4B1qjkaROc6d5IA3ll9kjD46IIX/dbO5bwFN/swyoyZA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/utilities': 1.0.0(postcss@8.4.35) - postcss: 8.4.35 + '@csstools/utilities': 1.0.0(postcss@8.4.38) + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /@csstools/postcss-normalize-display-values@3.0.2(postcss@8.4.35): + /@csstools/postcss-normalize-display-values@3.0.2(postcss@8.4.38): resolution: {integrity: sha512-fCapyyT/dUdyPtrelQSIV+d5HqtTgnNP/BEG9IuhgXHt93Wc4CfC1bQ55GzKAjWrZbgakMQ7MLfCXEf3rlZJOw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /@csstools/postcss-oklab-function@3.0.10(postcss@8.4.35): - resolution: {integrity: sha512-s9trs1c+gUMtaTtwrrIpdVQkUbRuwi6bQ9rBHaqwt4kd3kEnEYfP85uLY1inFx6Rt8OM2XVg3PSYbfnFSAO51A==} + /@csstools/postcss-oklab-function@3.0.13(postcss@8.4.38): + resolution: {integrity: sha512-xbzMmukDFAwCt2+279io7ZiamZj87s6cnU3UgKB3G+NMpRX9A6uvN8xlnTLCe384hqg6hix5vlOmwkxqACb5pg==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/css-color-parser': 1.5.2(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3) - '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3) - '@csstools/css-tokenizer': 2.2.3 - '@csstools/postcss-progressive-custom-properties': 3.1.0(postcss@8.4.35) - '@csstools/utilities': 1.0.0(postcss@8.4.35) - postcss: 8.4.35 + '@csstools/css-color-parser': 1.6.3(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4) + '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4) + '@csstools/css-tokenizer': 2.2.4 + '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.4.38) + '@csstools/utilities': 1.0.0(postcss@8.4.38) + postcss: 8.4.38 dev: true - /@csstools/postcss-progressive-custom-properties@3.1.0(postcss@8.4.35): - resolution: {integrity: sha512-Mfb1T1BHa6pktLI+poMEHI7Q+VYvAsdwJZPFsSkIB2ZUsawCiPxXLw06BKSVPITxFlaY/FEUzfpyOTfX9YCE2w==} + /@csstools/postcss-progressive-custom-properties@3.2.0(postcss@8.4.38): + resolution: {integrity: sha512-BZlirVxCRgKlE7yVme+Xvif72eTn1MYXj8oZ4Knb+jwaH4u3AN1DjbhM7j86RP5vvuAOexJ4JwfifYYKWMN/QQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /@csstools/postcss-relative-color-syntax@2.0.10(postcss@8.4.35): - resolution: {integrity: sha512-IkTIk9Eq2VegSN4lgsljGY8boyfX3l3Pw58e+R9oyPe/Ye7r3NwuiQ3w0nkXoQ+RC+d240V6n7eZme2mEPqQvg==} + /@csstools/postcss-relative-color-syntax@2.0.13(postcss@8.4.38): + resolution: {integrity: sha512-mENWPNcHdiEYtjHFfZP9U1jNukQgFpSQ7wvTvwiadK3qgNBiSl0vMSinM9kKsGsJLTHQ0LEAqWLHurU52I4Jeg==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/css-color-parser': 1.5.2(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3) - '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3) - '@csstools/css-tokenizer': 2.2.3 - '@csstools/postcss-progressive-custom-properties': 3.1.0(postcss@8.4.35) - '@csstools/utilities': 1.0.0(postcss@8.4.35) - postcss: 8.4.35 + '@csstools/css-color-parser': 1.6.3(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4) + '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4) + '@csstools/css-tokenizer': 2.2.4 + '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.4.38) + '@csstools/utilities': 1.0.0(postcss@8.4.38) + postcss: 8.4.38 dev: true - /@csstools/postcss-scope-pseudo-class@3.0.1(postcss@8.4.35): + /@csstools/postcss-scope-pseudo-class@3.0.1(postcss@8.4.38): resolution: {integrity: sha512-3ZFonK2gfgqg29gUJ2w7xVw2wFJ1eNWVDONjbzGkm73gJHVCYK5fnCqlLr+N+KbEfv2XbWAO0AaOJCFB6Fer6A==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 dev: true - /@csstools/postcss-stepped-value-functions@3.0.5(postcss@8.4.35): - resolution: {integrity: sha512-B8K8RaTrYVZLxbNzVUvFO3SlCDJDaUTAO7KRth05fa7f01ufPvb6ztdBuxSoRwOtmNp8iROxPJHOemWo2kBBtA==} + /@csstools/postcss-stepped-value-functions@3.0.6(postcss@8.4.38): + resolution: {integrity: sha512-rnyp8tWRuBXERTHVdB5hjUlif5dQgPcyN+BX55wUnYpZ3LN9QPfK2Z3/HUZymwyou8Gg6vhd6X2W+g1pLq1jYg==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/css-calc': 1.1.7(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3) - '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3) - '@csstools/css-tokenizer': 2.2.3 - postcss: 8.4.35 + '@csstools/css-calc': 1.2.0(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4) + '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4) + '@csstools/css-tokenizer': 2.2.4 + postcss: 8.4.38 dev: true - /@csstools/postcss-text-decoration-shorthand@3.0.4(postcss@8.4.35): - resolution: {integrity: sha512-yUZmbnUemgQmja7SpOZeU45+P49wNEgQguRdyTktFkZsHf7Gof+ZIYfvF6Cm+LsU1PwSupy4yUeEKKjX5+k6cQ==} + /@csstools/postcss-text-decoration-shorthand@3.0.5(postcss@8.4.38): + resolution: {integrity: sha512-qKxXpD0TYINkUtWDN1RHdeWKtZCzEv5j3UMT/ZGqyY27icwCFw7iKO0bUeLSHjYFBqhurCWvoOsa9REqLdrNDw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/color-helpers': 4.0.0 - postcss: 8.4.35 + '@csstools/color-helpers': 4.1.0 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /@csstools/postcss-trigonometric-functions@3.0.5(postcss@8.4.35): - resolution: {integrity: sha512-RhBfQ0TsBudyPuoo8pXKdfQuUiQxMU/Sc5GyV57bWk93JbUHXq6b4CdPx+B/tHUeFKvocVJn/e2jbu96rh0d3Q==} + /@csstools/postcss-trigonometric-functions@3.0.6(postcss@8.4.38): + resolution: {integrity: sha512-i5Zd0bMJooZAn+ZcDmPij2WCkcOJJJ6opzK+QeDjxbMrYmoGQl0CY8FDHdeQyBF1Nly+Q0Fq3S7QfdNLKBBaCg==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/css-calc': 1.1.7(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3) - '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3) - '@csstools/css-tokenizer': 2.2.3 - postcss: 8.4.35 + '@csstools/css-calc': 1.2.0(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4) + '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4) + '@csstools/css-tokenizer': 2.2.4 + postcss: 8.4.38 dev: true - /@csstools/postcss-unset-value@3.0.1(postcss@8.4.35): + /@csstools/postcss-unset-value@3.0.1(postcss@8.4.38): resolution: {integrity: sha512-dbDnZ2ja2U8mbPP0Hvmt2RMEGBiF1H7oY6HYSpjteXJGihYwgxgTr6KRbbJ/V6c+4wd51M+9980qG4gKVn5ttg==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true - /@csstools/selector-resolve-nested@1.1.0(postcss-selector-parser@6.0.15): + /@csstools/selector-resolve-nested@1.1.0(postcss-selector-parser@6.0.16): resolution: {integrity: sha512-uWvSaeRcHyeNenKg8tp17EVDRkpflmdyvbE0DHo6D/GdBb6PDnCYYU6gRpXhtICMGMcahQmj2zGxwFM/WC8hCg==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss-selector-parser: ^6.0.13 dependencies: - postcss-selector-parser: 6.0.15 + postcss-selector-parser: 6.0.16 dev: true - /@csstools/selector-specificity@3.0.2(postcss-selector-parser@6.0.15): - resolution: {integrity: sha512-RpHaZ1h9LE7aALeQXmXrJkRG84ZxIsctEN2biEUmFyKpzFM3zZ35eUMcIzZFsw/2olQE6v69+esEqU2f1MKycg==} + /@csstools/selector-specificity@3.0.3(postcss-selector-parser@6.0.16): + resolution: {integrity: sha512-KEPNw4+WW5AVEIyzC80rTbWEUatTW2lXpN8+8ILC8PiPeWPjwUzrPZDIOZ2wwqDmeqOYTdSGyL3+vE5GC3FB3Q==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss-selector-parser: ^6.0.13 dependencies: - postcss-selector-parser: 6.0.15 + postcss-selector-parser: 6.0.16 dev: true - /@csstools/utilities@1.0.0(postcss@8.4.35): + /@csstools/utilities@1.0.0(postcss@8.4.38): resolution: {integrity: sha512-tAgvZQe/t2mlvpNosA4+CkMiZ2azISW5WPAcdSalZlEjQvUfghHxfQcrCiK/7/CrfAWVxyM88kGFYO82heIGDg==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true /@discoveryjs/json-ext@0.5.7: @@ -3237,11 +3217,11 @@ packages: /@emotion/babel-plugin@11.11.0: resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} dependencies: - '@babel/helper-module-imports': 7.22.15 - '@babel/runtime': 7.24.0 + '@babel/helper-module-imports': 7.24.3 + '@babel/runtime': 7.24.4 '@emotion/hash': 0.9.1 '@emotion/memoize': 0.8.1 - '@emotion/serialize': 1.1.3 + '@emotion/serialize': 1.1.4 babel-plugin-macros: 3.1.0 convert-source-map: 1.9.0 escape-string-regexp: 4.0.0 @@ -3265,7 +3245,7 @@ packages: dependencies: '@emotion/babel-plugin': 11.11.0 '@emotion/cache': 11.11.0 - '@emotion/serialize': 1.1.3 + '@emotion/serialize': 1.1.4 '@emotion/sheet': 1.2.2 '@emotion/utils': 1.2.1 dev: false @@ -3287,10 +3267,10 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 '@emotion/babel-plugin': 11.11.0 '@emotion/cache': 11.11.0 - '@emotion/serialize': 1.1.3 + '@emotion/serialize': 1.1.4 '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) '@emotion/utils': 1.2.1 '@emotion/weak-memoize': 0.3.1 @@ -3299,8 +3279,8 @@ packages: react: 18.2.0 dev: false - /@emotion/serialize@1.1.3: - resolution: {integrity: sha512-iD4D6QVZFDhcbH0RAG1uVu1CwVLMWUkCvAqqlewO/rxf8+87yIBAlt4+AxMiiKPLs5hFc0owNk/sLLAOROw3cA==} + /@emotion/serialize@1.1.4: + resolution: {integrity: sha512-RIN04MBT8g+FnDwgvIUi8czvr1LU1alUMI05LekWB5DGyTm8cCBMCRpq3GqaiyEDRptEXOyXnvZ58GZYu4kBxQ==} dependencies: '@emotion/hash': 0.9.1 '@emotion/memoize': 0.8.1 @@ -3343,7 +3323,7 @@ packages: resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==} dependencies: '@esbuild-kit/core-utils': 3.3.2 - get-tsconfig: 4.7.2 + get-tsconfig: 4.7.3 /@esbuild/aix-ppc64@0.19.12: resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} @@ -3772,6 +3752,11 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@fastify/busboy@2.1.1: + resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} + engines: {node: '>=14'} + dev: true + /@floating-ui/core@1.6.0: resolution: {integrity: sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==} dependencies: @@ -3796,8 +3781,8 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@floating-ui/react@0.26.9(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-p86wynZJVEkEq2BBjY/8p2g3biQ6TlgT4o/3KgFKyTWoJLU1GZ8wpctwRqtkEl2tseYA+kw7dBAIDFcednfI5w==} + /@floating-ui/react@0.26.11(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-fo01Cu+jzLDVG/AYAV2OtV6flhXvxP5rDaR1Fk8WWhtsFqwk478Dr2HGtB8s0HqQCsFWVbdHYpPjMiQiR/A9VA==} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 @@ -3831,8 +3816,8 @@ packages: engines: {node: '>=14'} dev: true - /@google-cloud/storage@7.7.0: - resolution: {integrity: sha512-EMCEY+6JiIkx7Dt8NXVGGjy1vRdSGdHkoqZoqjJw7cEBkT7ZkX0c7puedfn1MamnzW5SX4xoa2jVq5u7OWBmkQ==} + /@google-cloud/storage@7.9.0: + resolution: {integrity: sha512-PlFl7g3r91NmXtZHXsSEfTZES5ysD3SSBWmX4iBdQ2TFH7tN/Vn/IhnVELCHtgh1vc+uYPZ7XvRYaqtDCdghIA==} engines: {node: '>=14'} dependencies: '@google-cloud/paginator': 5.0.0 @@ -3841,11 +3826,11 @@ packages: abort-controller: 3.0.0 async-retry: 1.3.3 compressible: 2.0.18 - duplexify: 4.1.2 + duplexify: 4.1.3 ent: 2.2.0 - fast-xml-parser: 4.3.5 - gaxios: 6.3.0 - google-auth-library: 9.6.3 + fast-xml-parser: 4.3.6 + gaxios: 6.4.0 + google-auth-library: 9.7.0 mime: 3.0.0 mime-types: 2.1.35 p-limit: 3.1.0 @@ -3871,7 +3856,7 @@ packages: resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} dependencies: - '@humanwhocodes/object-schema': 2.0.2 + '@humanwhocodes/object-schema': 2.0.3 debug: 4.3.4(supports-color@5.5.0) minimatch: 3.1.2 transitivePeerDependencies: @@ -3881,8 +3866,8 @@ packages: resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - /@humanwhocodes/object-schema@2.0.2: - resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} + /@humanwhocodes/object-schema@2.0.3: + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} /@hutson/parse-repository-url@5.0.0: resolution: {integrity: sha512-e5+YUKENATs1JgYHMzTr2MW/NDcXGfYFAuOQU8gJgF/kEh4EqKgfGrfLI67bMD4tbhZVlkigz/9YYwWcbOFthg==} @@ -4034,7 +4019,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.23 + '@jridgewell/trace-mapping': 0.3.25 '@types/node': 20.12.5 chalk: 4.1.2 collect-v8-coverage: 1.0.2 @@ -4066,7 +4051,7 @@ packages: resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jridgewell/trace-mapping': 0.3.23 + '@jridgewell/trace-mapping': 0.3.25 callsites: 3.1.0 graceful-fs: 4.2.11 @@ -4092,9 +4077,9 @@ packages: resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.23 + '@jridgewell/trace-mapping': 0.3.25 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 @@ -4121,34 +4106,34 @@ packages: '@types/yargs': 17.0.32 chalk: 4.1.2 - /@jridgewell/gen-mapping@0.3.4: - resolution: {integrity: sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw==} + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/set-array': 1.1.2 + '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.23 + '@jridgewell/trace-mapping': 0.3.25 /@jridgewell/resolve-uri@3.1.2: resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} - /@jridgewell/source-map@0.3.5: - resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} + /@jridgewell/source-map@0.3.6: + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} dependencies: - '@jridgewell/gen-mapping': 0.3.4 - '@jridgewell/trace-mapping': 0.3.23 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 dev: true /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - /@jridgewell/trace-mapping@0.3.23: - resolution: {integrity: sha512-9/4foRoUKp8s96tSkh8DlAAc5A0Ty8vLXld+l9gjKKY6ckwI8G15f0hskGmuLZu78ZlGa1vtsfOa+lnB4vG6Jg==} + /@jridgewell/trace-mapping@0.3.25: + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 @@ -4319,7 +4304,7 @@ packages: lexical: 0.13.1 dev: false - /@lexical/react@0.13.1(lexical@0.13.1)(react-dom@18.2.0)(react@18.2.0)(yjs@13.6.12): + /@lexical/react@0.13.1(lexical@0.13.1)(react-dom@18.2.0)(react@18.2.0)(yjs@13.6.14): resolution: {integrity: sha512-Sy6EL230KAb0RZsZf1dZrRrc3+rvCDQWltcd8C/cqBUYlxsLYCW9s4f3RB2werngD/PtLYbBB48SYXNkIALITA==} peerDependencies: lexical: 0.13.1 @@ -4342,7 +4327,7 @@ packages: '@lexical/table': 0.13.1(lexical@0.13.1) '@lexical/text': 0.13.1(lexical@0.13.1) '@lexical/utils': 0.13.1(lexical@0.13.1) - '@lexical/yjs': 0.13.1(lexical@0.13.1)(yjs@13.6.12) + '@lexical/yjs': 0.13.1(lexical@0.13.1)(yjs@13.6.14) lexical: 0.13.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -4401,7 +4386,7 @@ packages: lexical: 0.13.1 dev: false - /@lexical/yjs@0.13.1(lexical@0.13.1)(yjs@13.6.12): + /@lexical/yjs@0.13.1(lexical@0.13.1)(yjs@13.6.14): resolution: {integrity: sha512-4GbqQM+PwNTV59AZoNrfTe/0rLjs+cX6Y6yAdZSRPBwr5L3JzYeU1TTcFCVQTtsE7KF8ddVP8sD7w9pi8rOWLA==} peerDependencies: lexical: 0.13.1 @@ -4409,35 +4394,35 @@ packages: dependencies: '@lexical/offset': 0.13.1(lexical@0.13.1) lexical: 0.13.1 - yjs: 13.6.12 + yjs: 13.6.14 dev: false - /@libsql/client@0.5.2: - resolution: {integrity: sha512-aHnYjsqE4QWhb+HdJj2HtLw6QBt61veSu6IQgFO5rxzdY/rb69YAgYF0ZvpVoMn12B/t9U9U7H3ow/IADo4Yhg==} + /@libsql/client@0.5.6: + resolution: {integrity: sha512-UBjmDoxz75Z2sHdP+ETCROpeLA/77VMesiff8R4UWK1rnaWbh6/YoCLDILMJL3Rh0udQeKxjL8MjXthqohax+g==} dependencies: - '@libsql/core': 0.5.2 + '@libsql/core': 0.5.6 '@libsql/hrana-client': 0.5.6 js-base64: 3.7.7 - libsql: 0.3.4 + libsql: 0.3.10 transitivePeerDependencies: - bufferutil - encoding - utf-8-validate - /@libsql/core@0.5.2: - resolution: {integrity: sha512-sBo55JJXRiggymOy91MvI+lJ15U8BdWBHytAeszpebhhbrkuTfd+5jDoB3sSZ0dMH0NIPAVQEEQnQldAO+SDXg==} + /@libsql/core@0.5.6: + resolution: {integrity: sha512-3vicUAydq6jPth410n4AsHHm1n2psTwvkSf94nfJlSXutGSZsl0updn2N/mJBgqUHkbuFoWZtlMifF0SwBj1xQ==} dependencies: js-base64: 3.7.7 - /@libsql/darwin-arm64@0.3.4: - resolution: {integrity: sha512-scNlltUTZp74jqjzDVVBtKUy5nZD+0+Q3CR8RJwCKrf73I/0IAKfvwddx4gsinymFqMn8hyiTGIZukgHlBjftA==} + /@libsql/darwin-arm64@0.3.10: + resolution: {integrity: sha512-RaexEFfPAFogd6dJlqkpCkTxdr6K14Z0286lodIJ8Ny77mWuWyBkWKxf70OYWXXAMxMJFUW+6al1F3/Osf/pTg==} cpu: [arm64] os: [darwin] requiresBuild: true optional: true - /@libsql/darwin-x64@0.3.4: - resolution: {integrity: sha512-xZUVgzH1qshTnnE8RRZlvAgUGFE7w36iczMiDvGN5XHOuI6gLE4Lk1m/G51MKjN+p7AK/3wowlQpvZPK/KMV8Q==} + /@libsql/darwin-x64@0.3.10: + resolution: {integrity: sha512-SNVN6n4qNUdMW1fJMFmx4qn4n5RnXsxjFbczpkzG/V7m/5VeTFt1chhGcrahTHCr3+K6eRJWJUEQHRGqjBwPkw==} cpu: [x64] os: [darwin] requiresBuild: true @@ -4472,36 +4457,36 @@ packages: - bufferutil - utf-8-validate - /@libsql/linux-arm64-gnu@0.3.4: - resolution: {integrity: sha512-IewL34c9WyxPtvLQqYb5WX3IEqFjprDkFjXmySkDrF9+3k2AfmCurnXjJwOrWHu2GlNLo84mwSVsCQ/jfm8lPw==} + /@libsql/linux-arm64-gnu@0.3.10: + resolution: {integrity: sha512-2uXpi9d8qtyIOr7pyG4a88j6YXgemyIHEs2Wbp+PPletlCIPsFS+E7IQHbz8VwTohchOzcokGUm1Bc5QC+A7wg==} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@libsql/linux-arm64-musl@0.3.4: - resolution: {integrity: sha512-Qiml3cZuLLptsZ9Mkdkt8sZROvVWyqhWcQkEPpp5MtSUiluy+8y+IHniiI7wJvOpi9A4tGREY9KoDZCWWPwLBw==} + /@libsql/linux-arm64-musl@0.3.10: + resolution: {integrity: sha512-72SN1FUavLvzHddCS861ynSpQndcW5oLGKA3U8CyMfgIZIwJAPc7+48Uj1plW00htXBx4GBpcntFp68KKIx3YQ==} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@libsql/linux-x64-gnu@0.3.4: - resolution: {integrity: sha512-fZRwlEjzRkJFf+lPpe9AMbaF32IL5HFtQVfXe6nSuE+YwlUNC+kN7ElGIKfuh5wJ3S9S4fXMefH0FY4ynEz4vw==} + /@libsql/linux-x64-gnu@0.3.10: + resolution: {integrity: sha512-hXyNqVRi7ONuyWZ1SX6setxL0QaQ7InyS3bHLupsi9s7NpOGD5vcpTaYicJOqmIIm+6kt8vJfmo7ZxlarIHy7Q==} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@libsql/linux-x64-musl@0.3.4: - resolution: {integrity: sha512-TCjX+nQpK/xQC5jhQJWShc98FsoTWQCdp0w1ZhVa47jIFdTPh44rvVf9sS6j5K8bxfyMNiBQQNSn7A0vBfAZXw==} + /@libsql/linux-x64-musl@0.3.10: + resolution: {integrity: sha512-kNmIRxomVwt9S+cLyYS497F/3gXFF4r8wW12YSBQgxG75JYft07AHVd8J7HINg+oqRkLzT0s+mVX5dM6nk68EQ==} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@libsql/win32-x64-msvc@0.3.4: - resolution: {integrity: sha512-q8uLbIqIB6mMUqN6Joiy+GN5d8/WfKsk8cN28H71WAywmQVsFg1u0RJj3X28qFzNGz+K1z4BqQFBSPVEefqYNw==} + /@libsql/win32-x64-msvc@0.3.10: + resolution: {integrity: sha512-c/6rjdtGULKrJkLgfLobFefObfOtxjXGmCfPxv6pr0epPCeUEssfDbDIeEH9fQUgzogIMWEHwT8so52UJ/iT1Q==} cpu: [x64] os: [win32] requiresBuild: true @@ -4541,8 +4526,8 @@ packages: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - /@mongodb-js/saslprep@1.1.4: - resolution: {integrity: sha512-8zJ8N1x51xo9hwPh6AWnKdLGEC5N3lDa6kms1YHmFBoRhTpJR6HG8wWk0td1MVCu9cD4YBrvjZEtd5Obw0Fbnw==} + /@mongodb-js/saslprep@1.1.5: + resolution: {integrity: sha512-XLNOMH66KhJzUJNwT/qlMnS4WsNDWD5ASdyaSH3EtK+F4r/CFGa3jT4GNi4mfOitGvWXtdLgQJkQjxSVrio+jA==} requiresBuild: true dependencies: sparse-bitfield: 3.0.3 @@ -4551,8 +4536,8 @@ packages: /@neon-rs/load@0.0.4: resolution: {integrity: sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw==} - /@next/bundle-analyzer@14.1.0: - resolution: {integrity: sha512-RJWjnlMp/1WSW0ahAdawV22WgJiC6BVaFS5Xfhw6gP7NJEX3cAJjh4JqSHKGr8GnLNRaFCVTQdDPoX84E421BA==} + /@next/bundle-analyzer@14.1.4: + resolution: {integrity: sha512-IpF/18HcAOcfHRr24tqPOUpMmVKIqvkCxIubMeRYWCXs3jm7niPGrt8Mu74yMDzfGlUwgQA6Xd6BUc5+jQxcEg==} dependencies: webpack-bundle-analyzer: 4.10.1 transitivePeerDependencies: @@ -4560,180 +4545,85 @@ packages: - utf-8-validate dev: true - /@next/env@14.2.0-canary.22: - resolution: {integrity: sha512-c72nBWQcgDwc711vtF0juZ81WPEHJbj22QzEkaqaS2cJty9IiyXTVTVzJHA1dueN9fDFCH3BeWDxoVn4y7MO8A==} - dev: true + /@next/env@14.2.0: + resolution: {integrity: sha512-4+70ELtSbRtYUuyRpAJmKC8NHBW2x1HMje9KO2Xd7IkoyucmV9SjgO+qeWMC0JWkRQXgydv1O7yKOK8nu/rITQ==} - /@next/env@14.2.0-canary.23: - resolution: {integrity: sha512-cBlFB8Y/iE3K2NX/Km4tP4RZGLsv0D72KI9KxmZepKSkaQBSbtHM0YeHnZ51CFe9UQKzQ/1mPnCY89BjiyIQtQ==} - dev: false - - /@next/eslint-plugin-next@14.1.0: - resolution: {integrity: sha512-x4FavbNEeXx/baD/zC/SdrvkjSby8nBn8KcCREqk6UuwvwoAPZmaV8TFCAuo/cpovBRTIY67mHhe86MQQm/68Q==} + /@next/eslint-plugin-next@14.1.4: + resolution: {integrity: sha512-n4zYNLSyCo0Ln5b7qxqQeQ34OZKXwgbdcx6kmkQbywr+0k6M3Vinft0T72R6CDAcDrne2IAgSud4uWCzFgc5HA==} dependencies: glob: 10.3.10 dev: true - /@next/swc-darwin-arm64@14.2.0-canary.22: - resolution: {integrity: sha512-aMU93w01wjqi5kfCS7Khot+lRvEtKxNrRv3KuQpXYrSaVCytMBqVwiyugo3IF5FPNuO0kMk90Wct4gxHE9jIGw==} + /@next/swc-darwin-arm64@14.2.0: + resolution: {integrity: sha512-kHktLlw0AceuDnkVljJ/4lTJagLzDiO3klR1Fzl2APDFZ8r+aTxNaNcPmpp0xLMkgRwwk6sggYeqq0Rz9K4zzA==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] requiresBuild: true - dev: true optional: true - /@next/swc-darwin-arm64@14.2.0-canary.23: - resolution: {integrity: sha512-K1f7A/0ljZO7IX+M+phguFP8lxdqMgEv1x1+gC+UmyZ1c8Na1PgirGgUwdLKxuNjyxlRqY5lkQ/FDk2FOYBSLA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - - /@next/swc-darwin-x64@14.2.0-canary.22: - resolution: {integrity: sha512-188vbCauuryRk+ePTK6YJ5r+1tzDKVFeZmDK/1BHOeGqDUtzYqY0N+08iY4Nyg4rHb8OBO4CONfRSOTzGJw+Pg==} + /@next/swc-darwin-x64@14.2.0: + resolution: {integrity: sha512-HFSDu7lb1U3RDxXNeKH3NGRR5KyTPBSUTuIOr9jXoAso7i76gNYvnTjbuzGVWt2X5izpH908gmOYWtI7un+JrA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] requiresBuild: true - dev: true optional: true - /@next/swc-darwin-x64@14.2.0-canary.23: - resolution: {integrity: sha512-3Zg0aZZV9Z0+4QCVNMH/LLW1dRD2mVNtuFBoTI6/7rWUiGrm/9+58sKyjjg+cE9S/zAKvJoFZP7Ask9vnrk4tg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - - /@next/swc-linux-arm64-gnu@14.2.0-canary.22: - resolution: {integrity: sha512-RzKik7qYGzW2+UIw0SALjfsVqTF4iO5m8otBBz0Rst5poBtjPtY7Wkp362Y69g2BoNM03tG/QhsM3HGyoGKwQQ==} + /@next/swc-linux-arm64-gnu@14.2.0: + resolution: {integrity: sha512-iQsoWziO5ZMxDWZ4ZTCAc7hbJ1C9UDj/gATSqTaMjW2bJFwAsvf9UM79AKnljBl73uPZ+V0kH4rvnHTco4Ps2w==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] requiresBuild: true - dev: true optional: true - /@next/swc-linux-arm64-gnu@14.2.0-canary.23: - resolution: {integrity: sha512-OMt5uTXtEZNKaeSvviJQVXzARr3Jyk1BKUQVD10hKUa4edWBcmnrpdqiDVoDCGt9kMOdKdGqJHOJUk/jV/G15w==} + /@next/swc-linux-arm64-musl@14.2.0: + resolution: {integrity: sha512-0JOk2uzLUt8fJK5LpsKKZa74zAch7bJjjgJzR9aOMs231AlE4gPYzsSm430ckZitjPGKeH5bgDZjqwqJQKIS2w==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] requiresBuild: true - dev: false optional: true - /@next/swc-linux-arm64-musl@14.2.0-canary.22: - resolution: {integrity: sha512-u7egrTZPX+xHMc07bpICwb79omVC8oEjClOJrf2zsqExXaem2AzkGOeK6P+vPKwXOQ1dbTsdbEoYI02BCpUvmQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@next/swc-linux-arm64-musl@14.2.0-canary.23: - resolution: {integrity: sha512-vllciUQ4U99LCOBnsFt9QGf9AyE8yhBtNdNxbij5QsdQ/F53SamxrbYOgG7RisvRqFmWSQMfHdpGZOE0EUUsvQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@next/swc-linux-x64-gnu@14.2.0-canary.22: - resolution: {integrity: sha512-9cHF5tVln5yGGZJIbbRtKj0dCRB+ySnQa6/xS6e6Obe//+M8hpIuzYUJFbb7LIyAs5TL0pVs1wiFLilyZGWqtA==} + /@next/swc-linux-x64-gnu@14.2.0: + resolution: {integrity: sha512-uYHkuTzX0NM6biKNp7hdKTf+BF0iMV254SxO0B8PgrQkxUBKGmk5ysHKB+FYBfdf9xei/t8OIKlXJs9ckD943A==} engines: {node: '>= 10'} cpu: [x64] os: [linux] requiresBuild: true - dev: true optional: true - /@next/swc-linux-x64-gnu@14.2.0-canary.23: - resolution: {integrity: sha512-soKCxTCi0m0hOBSEchH2YTluvQzAEb8HIoQXxligU8C1fmFDX25pwQ4iSWmdvA6xDJn96PG2R64NyytTTMg9TQ==} + /@next/swc-linux-x64-musl@14.2.0: + resolution: {integrity: sha512-paN89nLs2dTBDtfXWty1/NVPit+q6ldwdktixYSVwiiAz647QDCd+EIYqoiS+/rPG3oXs/A7rWcJK9HVqfnMVg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] requiresBuild: true - dev: false optional: true - /@next/swc-linux-x64-musl@14.2.0-canary.22: - resolution: {integrity: sha512-tr/on4bRNu5uua86CnBVAoz7sYyoPn4n5k04hwlcHDVg08pi/DhmqPp1d7oJCSb7rY6imH3nSMqNqoAVROT2VQ==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@next/swc-linux-x64-musl@14.2.0-canary.23: - resolution: {integrity: sha512-Qr+4ySSYEh1hSSmUJ50oHtKopkqwo3RFb2CXpzcMqp+6U8WOMYBX+JTSCFdA3lSlUJqScIgoRoMDk9I3TZM71g==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@next/swc-win32-arm64-msvc@14.2.0-canary.22: - resolution: {integrity: sha512-H8cvi02H8uk9a1ZvtTpsaC8yxfKRFCgi8G/dMMknzHbepOMcYLa0tUJmGqDWklWZY8RnuupNqJIt/MhLmSdoTA==} + /@next/swc-win32-arm64-msvc@14.2.0: + resolution: {integrity: sha512-j1oiidZisnymYjawFqEfeGNcE22ZQ7lGUaa4pGOCVWrWeIDkPSj8zYgS9TzMNlg17Q3wSWCQC/F5uJAhSh7qcA==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] requiresBuild: true - dev: true optional: true - /@next/swc-win32-arm64-msvc@14.2.0-canary.23: - resolution: {integrity: sha512-94HGrBqz9s7z6d6hlukbkF4LiU4Bw+a+C3i+J7pBA+3BHtIyffuqmnrP3HY92trP3M328GBN01H7/zqahcvwPQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: false - optional: true - - /@next/swc-win32-ia32-msvc@14.2.0-canary.22: - resolution: {integrity: sha512-s8Jdg0CUp3OL5ccAMliIBzhKwSlwWDDSypjqkKcEVINnzJexgl7ymrCMzZWeNO0IOhJxMWaPdMf5xuEsSxBbKg==} + /@next/swc-win32-ia32-msvc@14.2.0: + resolution: {integrity: sha512-6ff6F4xb+QGD1jhx/dOT9Ot7PQ/GAYekV9ykwEh2EFS/cLTyU4Y3cXkX5cNtNIhpctS5NvyjW9gIksRNErYE0A==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] requiresBuild: true - dev: true optional: true - /@next/swc-win32-ia32-msvc@14.2.0-canary.23: - resolution: {integrity: sha512-lrvn6ekxPyrBidQxA0kE3xyys8fCLlbhi1tl2FA0QUPHvgPbu2127Q7+UFnl/NGC9veZfCbw6b7TVFyvPseRsQ==} - engines: {node: '>= 10'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: false - optional: true - - /@next/swc-win32-x64-msvc@14.2.0-canary.22: - resolution: {integrity: sha512-6MrHjj76CeuYTJnVXyd43OF9fOkBSmDRbkLp+kwa+O1GZmkFZyqRNORdtMWNKbmiFPxfhd+FOgHG9fl1l05gUQ==} + /@next/swc-win32-x64-msvc@14.2.0: + resolution: {integrity: sha512-09DbG5vXAxz0eTFSf1uebWD36GF3D5toynRkgo2AlSrxwGZkWtJ1RhmrczRYQ17eD5bdo4FZ0ibiffdq5kc4vg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] requiresBuild: true - dev: true - optional: true - - /@next/swc-win32-x64-msvc@14.2.0-canary.23: - resolution: {integrity: sha512-T8zZcK8M5GYWzIKOlxcothb0sixdFSowUztZTNb/kmUK8Vz1Z+TFBxU00WvBDx9ymrGP2f4EKL9YQqu2d+BmcA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: false optional: true /@nodelib/fs.scandir@2.1.5: @@ -4759,71 +4649,71 @@ packages: engines: {node: '>= 18'} dev: true - /@octokit/core@5.1.0: - resolution: {integrity: sha512-BDa2VAMLSh3otEiaMJ/3Y36GU4qf6GI+VivQ/P41NC6GHcdxpKlqV0ikSZ5gdQsmS3ojXeRx5vasgNTinF0Q4g==} + /@octokit/core@5.2.0: + resolution: {integrity: sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==} engines: {node: '>= 18'} dependencies: '@octokit/auth-token': 4.0.0 - '@octokit/graphql': 7.0.2 - '@octokit/request': 8.2.0 - '@octokit/request-error': 5.0.1 - '@octokit/types': 12.6.0 + '@octokit/graphql': 7.1.0 + '@octokit/request': 8.3.1 + '@octokit/request-error': 5.1.0 + '@octokit/types': 13.2.0 before-after-hook: 2.2.3 universal-user-agent: 6.0.1 dev: true - /@octokit/endpoint@9.0.4: - resolution: {integrity: sha512-DWPLtr1Kz3tv8L0UvXTDP1fNwM0S+z6EJpRcvH66orY6Eld4XBMCSYsaWp4xIm61jTWxK68BrR7ibO+vSDnZqw==} + /@octokit/endpoint@9.0.5: + resolution: {integrity: sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw==} engines: {node: '>= 18'} dependencies: - '@octokit/types': 12.6.0 + '@octokit/types': 13.2.0 universal-user-agent: 6.0.1 dev: true - /@octokit/graphql@7.0.2: - resolution: {integrity: sha512-OJ2iGMtj5Tg3s6RaXH22cJcxXRi7Y3EBqbHTBRq+PQAqfaS8f/236fUrWhfSn8P4jovyzqucxme7/vWSSZBX2Q==} + /@octokit/graphql@7.1.0: + resolution: {integrity: sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==} engines: {node: '>= 18'} dependencies: - '@octokit/request': 8.2.0 - '@octokit/types': 12.6.0 + '@octokit/request': 8.3.1 + '@octokit/types': 13.2.0 universal-user-agent: 6.0.1 dev: true - /@octokit/openapi-types@20.0.0: - resolution: {integrity: sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==} + /@octokit/openapi-types@22.0.0: + resolution: {integrity: sha512-kWzSxSIBjCtwrT8/O/A/nrSjmHvR5I9GGTHPyBU19VuEae+QZfaPnnfLwXgV56n51xHN3U2dYy8zh/kO9/39ig==} dev: true - /@octokit/request-error@5.0.1: - resolution: {integrity: sha512-X7pnyTMV7MgtGmiXBwmO6M5kIPrntOXdyKZLigNfQWSEQzVxR4a4vo49vJjTWX70mPndj8KhfT4Dx+2Ng3vnBQ==} + /@octokit/request-error@5.1.0: + resolution: {integrity: sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==} engines: {node: '>= 18'} dependencies: - '@octokit/types': 12.6.0 + '@octokit/types': 13.2.0 deprecation: 2.3.1 once: 1.4.0 dev: true - /@octokit/request@8.2.0: - resolution: {integrity: sha512-exPif6x5uwLqv1N1irkLG1zZNJkOtj8bZxuVHd71U5Ftuxf2wGNvAJyNBcPbPC+EBzwYEbBDdSFb8EPcjpYxPQ==} + /@octokit/request@8.3.1: + resolution: {integrity: sha512-fin4cl5eHN5Ybmb/gtn7YZ+ycyUlcyqqkg5lfxeSChqj7sUt6TNaJPehREi+0PABKLREYL8pfaUhH3TicEWNoA==} engines: {node: '>= 18'} dependencies: - '@octokit/endpoint': 9.0.4 - '@octokit/request-error': 5.0.1 - '@octokit/types': 12.6.0 + '@octokit/endpoint': 9.0.5 + '@octokit/request-error': 5.1.0 + '@octokit/types': 13.2.0 universal-user-agent: 6.0.1 dev: true - /@octokit/types@12.6.0: - resolution: {integrity: sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==} + /@octokit/types@13.2.0: + resolution: {integrity: sha512-K4rpfbIQLe4UimS/PWZAcImhZUC80lhe2f1NpAaaTulPJXv54QIAFFCQEEbdQdqTV/745QDmdvp8NI49LaI00A==} dependencies: - '@octokit/openapi-types': 20.0.0 + '@octokit/openapi-types': 22.0.0 dev: true /@one-ini/wasm@0.1.1: resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==} dev: false - /@opentelemetry/api@1.7.0: - resolution: {integrity: sha512-AdY5wvN0P2vXBi3b29hxZgSFvdhdxPB9+f0B6s//P9Q8nibRWeA3cHm8UmLpio9ABigkVHJ5NMPk+Mz8VCCyrw==} + /@opentelemetry/api@1.8.0: + resolution: {integrity: sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w==} engines: {node: '>=8.0.0'} dev: true @@ -4839,10 +4729,9 @@ packages: hasBin: true dependencies: playwright: 1.43.0(patch_hash=smjs6qro5qsqddamrqipwrbi5i) - dev: true - /@polka/url@1.0.0-next.24: - resolution: {integrity: sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==} + /@polka/url@1.0.0-next.25: + resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==} dev: true /@popperjs/core@2.11.8: @@ -4866,99 +4755,99 @@ packages: selderee: 0.10.0 dev: false - /@sentry-internal/feedback@7.103.0: - resolution: {integrity: sha512-2nYoCfP7FpiUR+xxO5y5BL2ajHrhM4fL7HSup6QKNn7gI7vLyllYOOuYFNHhSmsXCD0i00U8DBClGLcn+6DQqw==} + /@sentry-internal/feedback@7.109.0: + resolution: {integrity: sha512-EL7N++poxvJP9rYvh6vSu24tsKkOveNCcCj4IM7+irWPjsuD2GLYYlhp/A/Mtt9l7iqO4plvtiQU5HGk7smcTQ==} engines: {node: '>=12'} dependencies: - '@sentry/core': 7.103.0 - '@sentry/types': 7.103.0 - '@sentry/utils': 7.103.0 + '@sentry/core': 7.109.0 + '@sentry/types': 7.109.0 + '@sentry/utils': 7.109.0 dev: false - /@sentry-internal/replay-canvas@7.103.0: - resolution: {integrity: sha512-EyDRMdlSqtwY8zGFhOWwl+nwwo98hlhJz+bpF5PQ6VmFpbplh6Wqfx2p+cPXQr40TGMMC4+vPFlSWTOMjcO9zQ==} + /@sentry-internal/replay-canvas@7.109.0: + resolution: {integrity: sha512-Lh/K60kmloR6lkPUcQP0iamw7B/MdEUEx/ImAx4tUSMrLj+IoUEcq/ECgnnVyQkJq59+8nPEKrVLt7x6PUPEjw==} engines: {node: '>=12'} dependencies: - '@sentry/core': 7.103.0 - '@sentry/replay': 7.103.0 - '@sentry/types': 7.103.0 - '@sentry/utils': 7.103.0 + '@sentry/core': 7.109.0 + '@sentry/replay': 7.109.0 + '@sentry/types': 7.109.0 + '@sentry/utils': 7.109.0 dev: false - /@sentry-internal/tracing@7.103.0: - resolution: {integrity: sha512-sZ/Wao8HOvGaBs7WlOdflMpHGAFkOBWL6hBiirHaOy5d+IDm7n7et5U6zhvcfiyYBO4nY36gy1Tg5mw+aNO0Vw==} + /@sentry-internal/tracing@7.109.0: + resolution: {integrity: sha512-PzK/joC5tCuh2R/PRh+7dp+uuZl7pTsBIjPhVZHMTtb9+ls65WkdZJ1/uKXPouyz8NOo9Xok7aEvEo9seongyw==} engines: {node: '>=8'} dependencies: - '@sentry/core': 7.103.0 - '@sentry/types': 7.103.0 - '@sentry/utils': 7.103.0 + '@sentry/core': 7.109.0 + '@sentry/types': 7.109.0 + '@sentry/utils': 7.109.0 dev: false - /@sentry/browser@7.103.0: - resolution: {integrity: sha512-lP3Oplnwo1lY8ltk8SWzQURbxnSfVhYA099mVs1T95sdwXS16Za6SX7Ld/9T506ZW/WyoU4VCq7eKtG2kPFhMQ==} + /@sentry/browser@7.109.0: + resolution: {integrity: sha512-yx+OFG+Ab9qUDDgV9ZDv8M9O9Mqr0fjKta/LMlWALYLjzkMvxsPlRPFj7oMBlHqOTVLDeg7lFYmsA8wyWQ8Z8g==} engines: {node: '>=8'} dependencies: - '@sentry-internal/feedback': 7.103.0 - '@sentry-internal/replay-canvas': 7.103.0 - '@sentry-internal/tracing': 7.103.0 - '@sentry/core': 7.103.0 - '@sentry/replay': 7.103.0 - '@sentry/types': 7.103.0 - '@sentry/utils': 7.103.0 + '@sentry-internal/feedback': 7.109.0 + '@sentry-internal/replay-canvas': 7.109.0 + '@sentry-internal/tracing': 7.109.0 + '@sentry/core': 7.109.0 + '@sentry/replay': 7.109.0 + '@sentry/types': 7.109.0 + '@sentry/utils': 7.109.0 dev: false - /@sentry/core@7.103.0: - resolution: {integrity: sha512-LCI+PIDoF/RLqN41fNXum3ilmS6ukni6L7t38vSdibbe2G0804EbPLtOIpv2PkS8E6CFuRW5zOb+8OwEAAtZWw==} + /@sentry/core@7.109.0: + resolution: {integrity: sha512-xwD4U0IlvvlE/x/g/W1I8b4Cfb16SsCMmiEuBf6XxvAa3OfWBxKoqLifb3GyrbxMC4LbIIZCN/SvLlnGJPgszA==} engines: {node: '>=8'} dependencies: - '@sentry/types': 7.103.0 - '@sentry/utils': 7.103.0 + '@sentry/types': 7.109.0 + '@sentry/utils': 7.109.0 dev: false - /@sentry/node@7.103.0: - resolution: {integrity: sha512-/bS/WNeO+PEd0r3o3LN0XGJV+l7hLNy1dTcn61VRgWGVs8SqMBb3uAvXAibZ9zGTCkaX/Ky3JumMcOOoxmNCtg==} + /@sentry/node@7.109.0: + resolution: {integrity: sha512-tqMNAES4X/iBl1eZRCmc29p//0id01FBLEiesNo5nk6ECl6/SaGMFAEwu1gsn90h/Bjgr04slwFOS4cR45V2PQ==} engines: {node: '>=8'} dependencies: - '@sentry-internal/tracing': 7.103.0 - '@sentry/core': 7.103.0 - '@sentry/types': 7.103.0 - '@sentry/utils': 7.103.0 + '@sentry-internal/tracing': 7.109.0 + '@sentry/core': 7.109.0 + '@sentry/types': 7.109.0 + '@sentry/utils': 7.109.0 dev: false - /@sentry/react@7.103.0(react@18.2.0): - resolution: {integrity: sha512-EyWZi9u94RShzAK/vpkXNCdkocMtb98AbxRZOjuFL+pf4jjwxdPRekGGzXz7St0cf56Mv3oHNk6QGDA0PF7mlQ==} + /@sentry/react@7.109.0(react@18.2.0): + resolution: {integrity: sha512-KqXoDh6LVhNO+FLdM5LiTGpuorFvjoBPQ4nPGIVbjeMY/KZIau3kFxR142EvCApxmD69yvS5EhMnEqlNdaQPGw==} engines: {node: '>=8'} peerDependencies: react: ^18.2.0 dependencies: - '@sentry/browser': 7.103.0 - '@sentry/core': 7.103.0 - '@sentry/types': 7.103.0 - '@sentry/utils': 7.103.0 + '@sentry/browser': 7.109.0 + '@sentry/core': 7.109.0 + '@sentry/types': 7.109.0 + '@sentry/utils': 7.109.0 hoist-non-react-statics: 3.3.2 react: 18.2.0 dev: false - /@sentry/replay@7.103.0: - resolution: {integrity: sha512-I37komyb+DruQG8lPPPOFxLLbOijNXeTxiWLsIn+KFZqRtKqxxQWdNnk56V4YSTpFzxnMEFMRCpXhncuTWu4LA==} + /@sentry/replay@7.109.0: + resolution: {integrity: sha512-hCDjbTNO7ErW/XsaBXlyHFsUhneyBUdTec1Swf98TFEfVqNsTs6q338aUcaR8dGRLbLrJ9YU9D1qKq++v5h2CA==} engines: {node: '>=12'} dependencies: - '@sentry-internal/tracing': 7.103.0 - '@sentry/core': 7.103.0 - '@sentry/types': 7.103.0 - '@sentry/utils': 7.103.0 + '@sentry-internal/tracing': 7.109.0 + '@sentry/core': 7.109.0 + '@sentry/types': 7.109.0 + '@sentry/utils': 7.109.0 dev: false - /@sentry/types@7.103.0: - resolution: {integrity: sha512-NCvKyx8d2AGBQKPARrJemZmZ16DiMo688OEikZg4BbvFNDUzK5Egm2BH0vfLDhbNkU19o3maJowrYo42m8r9Zw==} + /@sentry/types@7.109.0: + resolution: {integrity: sha512-egCBnDv3YpVFoNzRLdP0soVrxVLCQ+rovREKJ1sw3rA2/MFH9WJ+DZZexsX89yeAFzy1IFsCp7/dEqudusml6g==} engines: {node: '>=8'} dev: false - /@sentry/utils@7.103.0: - resolution: {integrity: sha512-phkUJt3F0UOkVq+M4GfdAh2ewI3ASrNiJddx9aO7GnT0aDwwVBHZltnqt95qgAB8W+BipTSt1dAh8yUbbq1Ceg==} + /@sentry/utils@7.109.0: + resolution: {integrity: sha512-3RjxMOLMBwZ5VSiH84+o/3NY2An4Zldjz0EbfEQNRY9yffRiCPJSQiCJID8EoylCFOh/PAhPimBhqbtWJxX6iw==} engines: {node: '>=8'} dependencies: - '@sentry/types': 7.103.0 + '@sentry/types': 7.109.0 dev: false /@sideway/address@4.1.5: @@ -5009,460 +4898,420 @@ packages: dependencies: '@sinonjs/commons': 3.0.1 - /@smithy/abort-controller@2.1.3: - resolution: {integrity: sha512-c2aYH2Wu1RVE3rLlVgg2kQOBJGM0WbjReQi5DnPTm2Zb7F0gk7J2aeQeaX2u/lQZoHl6gv8Oac7mt9alU3+f4A==} + /@smithy/abort-controller@2.2.0: + resolution: {integrity: sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@smithy/types': 2.10.1 + '@smithy/types': 2.12.0 tslib: 2.6.2 - /@smithy/chunked-blob-reader-native@2.1.1: - resolution: {integrity: sha512-zNW+43dltfNMUrBEYLMWgI8lQr0uhtTcUyxkgC9EP4j17WREzgSFMPUFVrVV6Rc2+QtWERYjb4tzZnQGa7R9fQ==} + /@smithy/chunked-blob-reader-native@2.2.0: + resolution: {integrity: sha512-VNB5+1oCgX3Fzs072yuRsUoC2N4Zg/LJ11DTxX3+Qu+Paa6AmbIF0E9sc2wthz9Psrk/zcOlTCyuposlIhPjZQ==} dependencies: - '@smithy/util-base64': 2.1.1 + '@smithy/util-base64': 2.3.0 tslib: 2.6.2 - /@smithy/chunked-blob-reader@2.1.1: - resolution: {integrity: sha512-NjNFCKxC4jVvn+lUr3Yo4/PmUJj3tbyqH6GNHueyTGS5Q27vlEJ1MkNhUDV8QGxJI7Bodnc2pD18lU2zRfhHlQ==} + /@smithy/chunked-blob-reader@2.2.0: + resolution: {integrity: sha512-3GJNvRwXBGdkDZZOGiziVYzDpn4j6zfyULHMDKAGIUo72yHALpE9CbhfQp/XcLNVoc1byfMpn6uW5H2BqPjgaQ==} dependencies: tslib: 2.6.2 - /@smithy/config-resolver@2.1.4: - resolution: {integrity: sha512-AW2WUZmBAzgO3V3ovKtsUbI3aBNMeQKFDumoqkNxaVDWF/xfnxAWqBKDr/NuG7c06N2Rm4xeZLPiJH/d+na0HA==} + /@smithy/config-resolver@2.2.0: + resolution: {integrity: sha512-fsiMgd8toyUba6n1WRmr+qACzXltpdDkPTAaDqc8QqPBUzO+/JKwL6bUBseHVi8tu9l+3JOK+tSf7cay+4B3LA==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@smithy/node-config-provider': 2.2.4 - '@smithy/types': 2.10.1 - '@smithy/util-config-provider': 2.2.1 - '@smithy/util-middleware': 2.1.3 + '@smithy/node-config-provider': 2.3.0 + '@smithy/types': 2.12.0 + '@smithy/util-config-provider': 2.3.0 + '@smithy/util-middleware': 2.2.0 tslib: 2.6.2 - /@smithy/core@1.3.5: - resolution: {integrity: sha512-Rrc+e2Jj6Gu7Xbn0jvrzZlSiP2CZocIOfZ9aNUA82+1sa6GBnxqL9+iZ9EKHeD9aqD1nU8EK4+oN2EiFpSv7Yw==} + /@smithy/core@1.4.2: + resolution: {integrity: sha512-2fek3I0KZHWJlRLvRTqxTEri+qV0GRHrJIoLFuBMZB4EMg4WgeBGfF0X6abnrNYpq55KJ6R4D6x4f0vLnhzinA==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@smithy/middleware-endpoint': 2.4.4 - '@smithy/middleware-retry': 2.1.4 - '@smithy/middleware-serde': 2.1.3 - '@smithy/protocol-http': 3.2.1 - '@smithy/smithy-client': 2.4.2 - '@smithy/types': 2.10.1 - '@smithy/util-middleware': 2.1.3 + '@smithy/middleware-endpoint': 2.5.1 + '@smithy/middleware-retry': 2.3.1 + '@smithy/middleware-serde': 2.3.0 + '@smithy/protocol-http': 3.3.0 + '@smithy/smithy-client': 2.5.1 + '@smithy/types': 2.12.0 + '@smithy/util-middleware': 2.2.0 tslib: 2.6.2 - /@smithy/credential-provider-imds@2.2.4: - resolution: {integrity: sha512-DdatjmBZQnhGe1FhI8gO98f7NmvQFSDiZTwC3WMvLTCKQUY+Y1SVkhJqIuLu50Eb7pTheoXQmK+hKYUgpUWsNA==} + /@smithy/credential-provider-imds@2.3.0: + resolution: {integrity: sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@smithy/node-config-provider': 2.2.4 - '@smithy/property-provider': 2.1.3 - '@smithy/types': 2.10.1 - '@smithy/url-parser': 2.1.3 + '@smithy/node-config-provider': 2.3.0 + '@smithy/property-provider': 2.2.0 + '@smithy/types': 2.12.0 + '@smithy/url-parser': 2.2.0 tslib: 2.6.2 - /@smithy/eventstream-codec@2.1.3: - resolution: {integrity: sha512-rGlCVuwSDv6qfKH4/lRxFjcZQnIE0LZ3D4lkMHg7ZSltK9rA74r0VuGSvWVQ4N/d70VZPaniFhp4Z14QYZsa+A==} - requiresBuild: true + /@smithy/eventstream-codec@2.2.0: + resolution: {integrity: sha512-8janZoJw85nJmQZc4L8TuePp2pk1nxLgkxIR0TUjKJ5Dkj5oelB9WtiSSGXCQvNsJl0VSTvK/2ueMXxvpa9GVw==} dependencies: '@aws-crypto/crc32': 3.0.0 - '@smithy/types': 2.10.1 - '@smithy/util-hex-encoding': 2.1.1 + '@smithy/types': 2.12.0 + '@smithy/util-hex-encoding': 2.2.0 tslib: 2.6.2 - /@smithy/eventstream-serde-browser@2.1.3: - resolution: {integrity: sha512-qAgKbZ9m2oBfSyJWWurX/MvQFRPrYypj79cDSleEgDwBoez6Tfd+FTpu2L/j3ZeC3mDlDHIKWksoeaXZpLLAHw==} + /@smithy/eventstream-serde-browser@2.2.0: + resolution: {integrity: sha512-UaPf8jKbcP71BGiO0CdeLmlg+RhWnlN8ipsMSdwvqBFigl5nil3rHOI/5GE3tfiuX8LvY5Z9N0meuU7Rab7jWw==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/eventstream-serde-universal': 2.1.3 - '@smithy/types': 2.10.1 + '@smithy/eventstream-serde-universal': 2.2.0 + '@smithy/types': 2.12.0 tslib: 2.6.2 - /@smithy/eventstream-serde-config-resolver@2.1.3: - resolution: {integrity: sha512-48rvsNv/MgAFCxOE0qwR7ZwKhaEdDoTxqH5HM+T6SDxICmPGb7gEuQzjTxQhcieCPgqyXeZFW8cU0QJxdowuIg==} + /@smithy/eventstream-serde-config-resolver@2.2.0: + resolution: {integrity: sha512-RHhbTw/JW3+r8QQH7PrganjNCiuiEZmpi6fYUAetFfPLfZ6EkiA08uN3EFfcyKubXQxOwTeJRZSQmDDCdUshaA==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/types': 2.10.1 + '@smithy/types': 2.12.0 tslib: 2.6.2 - /@smithy/eventstream-serde-node@2.1.3: - resolution: {integrity: sha512-RPJWWDhj8isk3NtGfm3Xt1WdHyX9ZE42V+m1nLU1I0zZ1hEol/oawHsTnhva/VR5bn+bJ2zscx+BYr0cEPRtmg==} + /@smithy/eventstream-serde-node@2.2.0: + resolution: {integrity: sha512-zpQMtJVqCUMn+pCSFcl9K/RPNtQE0NuMh8sKpCdEHafhwRsjP50Oq/4kMmvxSRy6d8Jslqd8BLvDngrUtmN9iA==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/eventstream-serde-universal': 2.1.3 - '@smithy/types': 2.10.1 + '@smithy/eventstream-serde-universal': 2.2.0 + '@smithy/types': 2.12.0 tslib: 2.6.2 - /@smithy/eventstream-serde-universal@2.1.3: - resolution: {integrity: sha512-ssvSMk1LX2jRhiOVgVLGfNJXdB8SvyjieKcJDHq698Gi3LOog6g/+l7ggrN+hZxyjUiDF4cUxgKaZTBUghzhLw==} + /@smithy/eventstream-serde-universal@2.2.0: + resolution: {integrity: sha512-pvoe/vvJY0mOpuF84BEtyZoYfbehiFj8KKWk1ds2AT0mTLYFVs+7sBJZmioOFdBXKd48lfrx1vumdPdmGlCLxA==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/eventstream-codec': 2.1.3 - '@smithy/types': 2.10.1 + '@smithy/eventstream-codec': 2.2.0 + '@smithy/types': 2.12.0 tslib: 2.6.2 - /@smithy/fetch-http-handler@2.4.3: - resolution: {integrity: sha512-Fn/KYJFo6L5I4YPG8WQb2hOmExgRmNpVH5IK2zU3JKrY5FKW7y9ar5e0BexiIC9DhSKqKX+HeWq/Y18fq7Dkpw==} - requiresBuild: true + /@smithy/fetch-http-handler@2.5.0: + resolution: {integrity: sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw==} dependencies: - '@smithy/protocol-http': 3.2.1 - '@smithy/querystring-builder': 2.1.3 - '@smithy/types': 2.10.1 - '@smithy/util-base64': 2.1.1 + '@smithy/protocol-http': 3.3.0 + '@smithy/querystring-builder': 2.2.0 + '@smithy/types': 2.12.0 + '@smithy/util-base64': 2.3.0 tslib: 2.6.2 - /@smithy/hash-blob-browser@2.1.3: - resolution: {integrity: sha512-sHLTM5xQYw5Wxz07DFo+eh1PVC6P5+kazQRF1k5nsvOhZG5VnkIy4LZ7N0ZNWqJx16g9otGd5MvqUOpb3WWtgA==} + /@smithy/hash-blob-browser@2.2.0: + resolution: {integrity: sha512-SGPoVH8mdXBqrkVCJ1Hd1X7vh1zDXojNN1yZyZTZsCno99hVue9+IYzWDjq/EQDDXxmITB0gBmuyPh8oAZSTcg==} dependencies: - '@smithy/chunked-blob-reader': 2.1.1 - '@smithy/chunked-blob-reader-native': 2.1.1 - '@smithy/types': 2.10.1 + '@smithy/chunked-blob-reader': 2.2.0 + '@smithy/chunked-blob-reader-native': 2.2.0 + '@smithy/types': 2.12.0 tslib: 2.6.2 - /@smithy/hash-node@2.1.3: - resolution: {integrity: sha512-FsAPCUj7VNJIdHbSxMd5uiZiF20G2zdSDgrgrDrHqIs/VMxK85Vqk5kMVNNDMCZmMezp6UKnac0B4nAyx7HJ9g==} - engines: {node: '>=14.0.0'} - requiresBuild: true - dependencies: - '@smithy/types': 2.10.1 - '@smithy/util-buffer-from': 2.1.1 - '@smithy/util-utf8': 2.1.1 - tslib: 2.6.2 - - /@smithy/hash-stream-node@2.1.3: - resolution: {integrity: sha512-fWpUx2ca/u5lcD5RhNJogEG5FD7H0RDDpYmfQgxFqIUv3Ow7bZsapMukh8uzQPVO8R+NDAvSdxmgXoy4Hz8sFw==} + /@smithy/hash-node@2.2.0: + resolution: {integrity: sha512-zLWaC/5aWpMrHKpoDF6nqpNtBhlAYKF/7+9yMN7GpdR8CzohnWfGtMznPybnwSS8saaXBMxIGwJqR4HmRp6b3g==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/types': 2.10.1 - '@smithy/util-utf8': 2.1.1 + '@smithy/types': 2.12.0 + '@smithy/util-buffer-from': 2.2.0 + '@smithy/util-utf8': 2.3.0 tslib: 2.6.2 - /@smithy/invalid-dependency@2.1.3: - resolution: {integrity: sha512-wkra7d/G4CbngV4xsjYyAYOvdAhahQje/WymuQdVEnXFExJopEu7fbL5AEAlBPgWHXwu94VnCSG00gVzRfExyg==} - requiresBuild: true - dependencies: - '@smithy/types': 2.10.1 - tslib: 2.6.2 - - /@smithy/is-array-buffer@2.1.1: - resolution: {integrity: sha512-xozSQrcUinPpNPNPds4S7z/FakDTh1MZWtRP/2vQtYB/u3HYrX2UXuZs+VhaKBd6Vc7g2XPr2ZtwGBNDN6fNKQ==} + /@smithy/hash-stream-node@2.2.0: + resolution: {integrity: sha512-aT+HCATOSRMGpPI7bi7NSsTNVZE/La9IaxLXWoVAYMxHT5hGO3ZOGEMZQg8A6nNL+pdFGtZQtND1eoY084HgHQ==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: + '@smithy/types': 2.12.0 + '@smithy/util-utf8': 2.3.0 tslib: 2.6.2 - /@smithy/md5-js@2.1.3: - resolution: {integrity: sha512-zmn3M6+mP4IJlSmXBN9964AztgkIO8b5lRzAgdJn9AdCFwA6xLkcW2B6uEnpBjvotxtQMmXTUP19tIO7NmFPpw==} + /@smithy/invalid-dependency@2.2.0: + resolution: {integrity: sha512-nEDASdbKFKPXN2O6lOlTgrEEOO9NHIeO+HVvZnkqc8h5U9g3BIhWsvzFo+UcUbliMHvKNPD/zVxDrkP1Sbgp8Q==} dependencies: - '@smithy/types': 2.10.1 - '@smithy/util-utf8': 2.1.1 + '@smithy/types': 2.12.0 tslib: 2.6.2 - /@smithy/middleware-content-length@2.1.3: - resolution: {integrity: sha512-aJduhkC+dcXxdnv5ZpM3uMmtGmVFKx412R1gbeykS5HXDmRU6oSsyy2SoHENCkfOGKAQOjVE2WVqDJibC0d21g==} + /@smithy/is-array-buffer@2.2.0: + resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@smithy/protocol-http': 3.2.1 - '@smithy/types': 2.10.1 tslib: 2.6.2 - /@smithy/middleware-endpoint@2.4.4: - resolution: {integrity: sha512-4yjHyHK2Jul4JUDBo2sTsWY9UshYUnXeb/TAK/MTaPEb8XQvDmpwSFnfIRDU45RY1a6iC9LCnmJNg/yHyfxqkw==} + /@smithy/md5-js@2.2.0: + resolution: {integrity: sha512-M26XTtt9IIusVMOWEAhIvFIr9jYj4ISPPGJROqw6vXngO3IYJCnVVSMFn4Tx1rUTG5BiKJNg9u2nxmBiZC5IlQ==} + dependencies: + '@smithy/types': 2.12.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.6.2 + + /@smithy/middleware-content-length@2.2.0: + resolution: {integrity: sha512-5bl2LG1Ah/7E5cMSC+q+h3IpVHMeOkG0yLRyQT1p2aMJkSrZG7RlXHPuAgb7EyaFeidKEnnd/fNaLLaKlHGzDQ==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@smithy/middleware-serde': 2.1.3 - '@smithy/node-config-provider': 2.2.4 - '@smithy/shared-ini-file-loader': 2.3.4 - '@smithy/types': 2.10.1 - '@smithy/url-parser': 2.1.3 - '@smithy/util-middleware': 2.1.3 + '@smithy/protocol-http': 3.3.0 + '@smithy/types': 2.12.0 tslib: 2.6.2 - /@smithy/middleware-retry@2.1.4: - resolution: {integrity: sha512-Cyolv9YckZTPli1EkkaS39UklonxMd08VskiuMhURDjC0HHa/AD6aK/YoD21CHv9s0QLg0WMLvk9YeLTKkXaFQ==} + /@smithy/middleware-endpoint@2.5.1: + resolution: {integrity: sha512-1/8kFp6Fl4OsSIVTWHnNjLnTL8IqpIb/D3sTSczrKFnrE9VMNWxnrRKNvpUHOJ6zpGD5f62TPm7+17ilTJpiCQ==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@smithy/node-config-provider': 2.2.4 - '@smithy/protocol-http': 3.2.1 - '@smithy/service-error-classification': 2.1.3 - '@smithy/smithy-client': 2.4.2 - '@smithy/types': 2.10.1 - '@smithy/util-middleware': 2.1.3 - '@smithy/util-retry': 2.1.3 + '@smithy/middleware-serde': 2.3.0 + '@smithy/node-config-provider': 2.3.0 + '@smithy/shared-ini-file-loader': 2.4.0 + '@smithy/types': 2.12.0 + '@smithy/url-parser': 2.2.0 + '@smithy/util-middleware': 2.2.0 tslib: 2.6.2 - uuid: 8.3.2 - /@smithy/middleware-serde@2.1.3: - resolution: {integrity: sha512-s76LId+TwASrHhUa9QS4k/zeXDUAuNuddKklQzRgumbzge5BftVXHXIqL4wQxKGLocPwfgAOXWx+HdWhQk9hTg==} + /@smithy/middleware-retry@2.3.1: + resolution: {integrity: sha512-P2bGufFpFdYcWvqpyqqmalRtwFUNUA8vHjJR5iGqbfR6mp65qKOLcUd6lTr4S9Gn/enynSrSf3p3FVgVAf6bXA==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@smithy/types': 2.10.1 + '@smithy/node-config-provider': 2.3.0 + '@smithy/protocol-http': 3.3.0 + '@smithy/service-error-classification': 2.1.5 + '@smithy/smithy-client': 2.5.1 + '@smithy/types': 2.12.0 + '@smithy/util-middleware': 2.2.0 + '@smithy/util-retry': 2.2.0 tslib: 2.6.2 + uuid: 9.0.1 - /@smithy/middleware-stack@2.1.3: - resolution: {integrity: sha512-opMFufVQgvBSld/b7mD7OOEBxF6STyraVr1xel1j0abVILM8ALJvRoFbqSWHGmaDlRGIiV9Q5cGbWi0sdiEaLQ==} + /@smithy/middleware-serde@2.3.0: + resolution: {integrity: sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@smithy/types': 2.10.1 + '@smithy/types': 2.12.0 tslib: 2.6.2 - /@smithy/node-config-provider@2.2.4: - resolution: {integrity: sha512-nqazHCp8r4KHSFhRQ+T0VEkeqvA0U+RhehBSr1gunUuNW3X7j0uDrWBxB2gE9eutzy6kE3Y7L+Dov/UXT871vg==} + /@smithy/middleware-stack@2.2.0: + resolution: {integrity: sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@smithy/property-provider': 2.1.3 - '@smithy/shared-ini-file-loader': 2.3.4 - '@smithy/types': 2.10.1 + '@smithy/types': 2.12.0 tslib: 2.6.2 - /@smithy/node-http-handler@2.4.1: - resolution: {integrity: sha512-HCkb94soYhJMxPCa61wGKgmeKpJ3Gftx1XD6bcWEB2wMV1L9/SkQu/6/ysKBnbOzWRE01FGzwrTxucHypZ8rdg==} + /@smithy/node-config-provider@2.3.0: + resolution: {integrity: sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@smithy/abort-controller': 2.1.3 - '@smithy/protocol-http': 3.2.1 - '@smithy/querystring-builder': 2.1.3 - '@smithy/types': 2.10.1 + '@smithy/property-provider': 2.2.0 + '@smithy/shared-ini-file-loader': 2.4.0 + '@smithy/types': 2.12.0 tslib: 2.6.2 - /@smithy/property-provider@2.1.3: - resolution: {integrity: sha512-bMz3se+ySKWNrgm7eIiQMa2HO/0fl2D0HvLAdg9pTMcpgp4SqOAh6bz7Ik6y7uQqSrk4rLjIKgbQ6yzYgGehCQ==} + /@smithy/node-http-handler@2.5.0: + resolution: {integrity: sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@smithy/types': 2.10.1 + '@smithy/abort-controller': 2.2.0 + '@smithy/protocol-http': 3.3.0 + '@smithy/querystring-builder': 2.2.0 + '@smithy/types': 2.12.0 tslib: 2.6.2 - /@smithy/protocol-http@3.2.1: - resolution: {integrity: sha512-KLrQkEw4yJCeAmAH7hctE8g9KwA7+H2nSJwxgwIxchbp/L0B5exTdOQi9D5HinPLlothoervGmhpYKelZ6AxIA==} + /@smithy/property-provider@2.2.0: + resolution: {integrity: sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@smithy/types': 2.10.1 + '@smithy/types': 2.12.0 tslib: 2.6.2 - /@smithy/querystring-builder@2.1.3: - resolution: {integrity: sha512-kFD3PnNqKELe6m9GRHQw/ftFFSZpnSeQD4qvgDB6BQN6hREHELSosVFUMPN4M3MDKN2jAwk35vXHLoDrNfKu0A==} + /@smithy/protocol-http@3.3.0: + resolution: {integrity: sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@smithy/types': 2.10.1 - '@smithy/util-uri-escape': 2.1.1 + '@smithy/types': 2.12.0 tslib: 2.6.2 - /@smithy/querystring-parser@2.1.3: - resolution: {integrity: sha512-3+CWJoAqcBMR+yvz6D+Fc5VdoGFtfenW6wqSWATWajrRMGVwJGPT3Vy2eb2bnMktJc4HU4bpjeovFa566P3knQ==} + /@smithy/querystring-builder@2.2.0: + resolution: {integrity: sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@smithy/types': 2.10.1 + '@smithy/types': 2.12.0 + '@smithy/util-uri-escape': 2.2.0 tslib: 2.6.2 - /@smithy/service-error-classification@2.1.3: - resolution: {integrity: sha512-iUrpSsem97bbXHHT/v3s7vaq8IIeMo6P6cXdeYHrx0wOJpMeBGQF7CB0mbJSiTm3//iq3L55JiEm8rA7CTVI8A==} + /@smithy/querystring-parser@2.2.0: + resolution: {integrity: sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@smithy/types': 2.10.1 + '@smithy/types': 2.12.0 + tslib: 2.6.2 - /@smithy/shared-ini-file-loader@2.3.4: - resolution: {integrity: sha512-CiZmPg9GeDKbKmJGEFvJBsJcFnh0AQRzOtQAzj1XEa8N/0/uSN/v1LYzgO7ry8hhO8+9KB7+DhSW0weqBra4Aw==} + /@smithy/service-error-classification@2.1.5: + resolution: {integrity: sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@smithy/types': 2.10.1 - tslib: 2.6.2 + '@smithy/types': 2.12.0 - /@smithy/signature-v4@2.1.3: - resolution: {integrity: sha512-Jq4iPPdCmJojZTsPePn4r1ULShh6ONkokLuxp1Lnk4Sq7r7rJp4HlA1LbPBq4bD64TIzQezIpr1X+eh5NYkNxw==} + /@smithy/shared-ini-file-loader@2.4.0: + resolution: {integrity: sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@smithy/eventstream-codec': 2.1.3 - '@smithy/is-array-buffer': 2.1.1 - '@smithy/types': 2.10.1 - '@smithy/util-hex-encoding': 2.1.1 - '@smithy/util-middleware': 2.1.3 - '@smithy/util-uri-escape': 2.1.1 - '@smithy/util-utf8': 2.1.1 + '@smithy/types': 2.12.0 tslib: 2.6.2 - /@smithy/smithy-client@2.4.2: - resolution: {integrity: sha512-ntAFYN51zu3N3mCd95YFcFi/8rmvm//uX+HnK24CRbI6k5Rjackn0JhgKz5zOx/tbNvOpgQIwhSX+1EvEsBLbA==} + /@smithy/signature-v4@2.2.1: + resolution: {integrity: sha512-j5fHgL1iqKTsKJ1mTcw88p0RUcidDu95AWSeZTgiYJb+QcfwWU/UpBnaqiB59FNH5MiAZuSbOBnZlwzeeY2tIw==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@smithy/middleware-endpoint': 2.4.4 - '@smithy/middleware-stack': 2.1.3 - '@smithy/protocol-http': 3.2.1 - '@smithy/types': 2.10.1 - '@smithy/util-stream': 2.1.3 + '@smithy/is-array-buffer': 2.2.0 + '@smithy/types': 2.12.0 + '@smithy/util-hex-encoding': 2.2.0 + '@smithy/util-middleware': 2.2.0 + '@smithy/util-uri-escape': 2.2.0 + '@smithy/util-utf8': 2.3.0 tslib: 2.6.2 - /@smithy/types@2.10.1: - resolution: {integrity: sha512-hjQO+4ru4cQ58FluQvKKiyMsFg0A6iRpGm2kqdH8fniyNd2WyanoOsYJfMX/IFLuLxEoW6gnRkNZy1y6fUUhtA==} + /@smithy/smithy-client@2.5.1: + resolution: {integrity: sha512-jrbSQrYCho0yDaaf92qWgd+7nAeap5LtHTI51KXqmpIFCceKU3K9+vIVTUH72bOJngBMqa4kyu1VJhRcSrk/CQ==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: + '@smithy/middleware-endpoint': 2.5.1 + '@smithy/middleware-stack': 2.2.0 + '@smithy/protocol-http': 3.3.0 + '@smithy/types': 2.12.0 + '@smithy/util-stream': 2.2.0 tslib: 2.6.2 - /@smithy/url-parser@2.1.3: - resolution: {integrity: sha512-X1NRA4WzK/ihgyzTpeGvI9Wn45y8HmqF4AZ/FazwAv8V203Ex+4lXqcYI70naX9ETqbqKVzFk88W6WJJzCggTQ==} - requiresBuild: true - dependencies: - '@smithy/querystring-parser': 2.1.3 - '@smithy/types': 2.10.1 - tslib: 2.6.2 - - /@smithy/util-base64@2.1.1: - resolution: {integrity: sha512-UfHVpY7qfF/MrgndI5PexSKVTxSZIdz9InghTFa49QOvuu9I52zLPLUHXvHpNuMb1iD2vmc6R+zbv/bdMipR/g==} + /@smithy/types@2.12.0: + resolution: {integrity: sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==} engines: {node: '>=14.0.0'} - requiresBuild: true - dependencies: - '@smithy/util-buffer-from': 2.1.1 - tslib: 2.6.2 - - /@smithy/util-body-length-browser@2.1.1: - resolution: {integrity: sha512-ekOGBLvs1VS2d1zM2ER4JEeBWAvIOUKeaFch29UjjJsxmZ/f0L3K3x0dEETgh3Q9bkZNHgT+rkdl/J/VUqSRag==} - requiresBuild: true dependencies: tslib: 2.6.2 - /@smithy/util-body-length-node@2.2.1: - resolution: {integrity: sha512-/ggJG+ta3IDtpNVq4ktmEUtOkH1LW64RHB5B0hcr5ZaWBmo96UX2cIOVbjCqqDickTXqBWZ4ZO0APuaPrD7Abg==} + /@smithy/url-parser@2.2.0: + resolution: {integrity: sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ==} + dependencies: + '@smithy/querystring-parser': 2.2.0 + '@smithy/types': 2.12.0 + tslib: 2.6.2 + + /@smithy/util-base64@2.3.0: + resolution: {integrity: sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==} engines: {node: '>=14.0.0'} - requiresBuild: true + dependencies: + '@smithy/util-buffer-from': 2.2.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.6.2 + + /@smithy/util-body-length-browser@2.2.0: + resolution: {integrity: sha512-dtpw9uQP7W+n3vOtx0CfBD5EWd7EPdIdsQnWTDoFf77e3VUf05uA7R7TGipIo8e4WL2kuPdnsr3hMQn9ziYj5w==} dependencies: tslib: 2.6.2 - /@smithy/util-buffer-from@2.1.1: - resolution: {integrity: sha512-clhNjbyfqIv9Md2Mg6FffGVrJxw7bgK7s3Iax36xnfVj6cg0fUG7I4RH0XgXJF8bxi+saY5HR21g2UPKSxVCXg==} + /@smithy/util-body-length-node@2.3.0: + resolution: {integrity: sha512-ITWT1Wqjubf2CJthb0BuT9+bpzBfXeMokH/AAa5EJQgbv9aPMVfnM76iFIZVFf50hYXGbtiV71BHAthNWd6+dw==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@smithy/is-array-buffer': 2.1.1 tslib: 2.6.2 - /@smithy/util-config-provider@2.2.1: - resolution: {integrity: sha512-50VL/tx9oYYcjJn/qKqNy7sCtpD0+s8XEBamIFo4mFFTclKMNp+rsnymD796uybjiIquB7VCB/DeafduL0y2kw==} + /@smithy/util-buffer-from@2.2.0: + resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/is-array-buffer': 2.2.0 + tslib: 2.6.2 + + /@smithy/util-config-provider@2.3.0: + resolution: {integrity: sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: tslib: 2.6.2 - /@smithy/util-defaults-mode-browser@2.1.4: - resolution: {integrity: sha512-J6XAVY+/g7jf03QMnvqPyU+8jqGrrtXoKWFVOS+n1sz0Lg8HjHJ1ANqaDN+KTTKZRZlvG8nU5ZrJOUL6VdwgcQ==} + /@smithy/util-defaults-mode-browser@2.2.1: + resolution: {integrity: sha512-RtKW+8j8skk17SYowucwRUjeh4mCtnm5odCL0Lm2NtHQBsYKrNW0od9Rhopu9wF1gHMfHeWF7i90NwBz/U22Kw==} engines: {node: '>= 10.0.0'} - requiresBuild: true dependencies: - '@smithy/property-provider': 2.1.3 - '@smithy/smithy-client': 2.4.2 - '@smithy/types': 2.10.1 + '@smithy/property-provider': 2.2.0 + '@smithy/smithy-client': 2.5.1 + '@smithy/types': 2.12.0 bowser: 2.11.0 tslib: 2.6.2 - /@smithy/util-defaults-mode-node@2.2.3: - resolution: {integrity: sha512-ttUISrv1uVOjTlDa3nznX33f0pthoUlP+4grhTvOzcLhzArx8qHB94/untGACOG3nlf8vU20nI2iWImfzoLkYA==} + /@smithy/util-defaults-mode-node@2.3.1: + resolution: {integrity: sha512-vkMXHQ0BcLFysBMWgSBLSk3+leMpFSyyFj8zQtv5ZyUBx8/owVh1/pPEkzmW/DR/Gy/5c8vjLDD9gZjXNKbrpA==} engines: {node: '>= 10.0.0'} - requiresBuild: true dependencies: - '@smithy/config-resolver': 2.1.4 - '@smithy/credential-provider-imds': 2.2.4 - '@smithy/node-config-provider': 2.2.4 - '@smithy/property-provider': 2.1.3 - '@smithy/smithy-client': 2.4.2 - '@smithy/types': 2.10.1 + '@smithy/config-resolver': 2.2.0 + '@smithy/credential-provider-imds': 2.3.0 + '@smithy/node-config-provider': 2.3.0 + '@smithy/property-provider': 2.2.0 + '@smithy/smithy-client': 2.5.1 + '@smithy/types': 2.12.0 tslib: 2.6.2 - /@smithy/util-endpoints@1.1.4: - resolution: {integrity: sha512-/qAeHmK5l4yQ4/bCIJ9p49wDe9rwWtOzhPHblu386fwPNT3pxmodgcs9jDCV52yK9b4rB8o9Sj31P/7Vzka1cg==} + /@smithy/util-endpoints@1.2.0: + resolution: {integrity: sha512-BuDHv8zRjsE5zXd3PxFXFknzBG3owCpjq8G3FcsXW3CykYXuEqM3nTSsmLzw5q+T12ZYuDlVUZKBdpNbhVtlrQ==} engines: {node: '>= 14.0.0'} - requiresBuild: true dependencies: - '@smithy/node-config-provider': 2.2.4 - '@smithy/types': 2.10.1 + '@smithy/node-config-provider': 2.3.0 + '@smithy/types': 2.12.0 tslib: 2.6.2 - /@smithy/util-hex-encoding@2.1.1: - resolution: {integrity: sha512-3UNdP2pkYUUBGEXzQI9ODTDK+Tcu1BlCyDBaRHwyxhA+8xLP8agEKQq4MGmpjqb4VQAjq9TwlCQX0kP6XDKYLg==} + /@smithy/util-hex-encoding@2.2.0: + resolution: {integrity: sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: tslib: 2.6.2 - /@smithy/util-middleware@2.1.3: - resolution: {integrity: sha512-/+2fm7AZ2ozl5h8wM++ZP0ovE9/tiUUAHIbCfGfb3Zd3+Dyk17WODPKXBeJ/TnK5U+x743QmA0xHzlSm8I/qhw==} + /@smithy/util-middleware@2.2.0: + resolution: {integrity: sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw==} engines: {node: '>=14.0.0'} - requiresBuild: true dependencies: - '@smithy/types': 2.10.1 + '@smithy/types': 2.12.0 tslib: 2.6.2 - /@smithy/util-retry@2.1.3: - resolution: {integrity: sha512-Kbvd+GEMuozbNUU3B89mb99tbufwREcyx2BOX0X2+qHjq6Gvsah8xSDDgxISDwcOHoDqUWO425F0Uc/QIRhYkg==} + /@smithy/util-retry@2.2.0: + resolution: {integrity: sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g==} engines: {node: '>= 14.0.0'} - requiresBuild: true dependencies: - '@smithy/service-error-classification': 2.1.3 - '@smithy/types': 2.10.1 + '@smithy/service-error-classification': 2.1.5 + '@smithy/types': 2.12.0 tslib: 2.6.2 - /@smithy/util-stream@2.1.3: - resolution: {integrity: sha512-HvpEQbP8raTy9n86ZfXiAkf3ezp1c3qeeO//zGqwZdrfaoOpGKQgF2Sv1IqZp7wjhna7pvczWaGUHjcOPuQwKw==} - engines: {node: '>=14.0.0'} - requiresBuild: true - dependencies: - '@smithy/fetch-http-handler': 2.4.3 - '@smithy/node-http-handler': 2.4.1 - '@smithy/types': 2.10.1 - '@smithy/util-base64': 2.1.1 - '@smithy/util-buffer-from': 2.1.1 - '@smithy/util-hex-encoding': 2.1.1 - '@smithy/util-utf8': 2.1.1 - tslib: 2.6.2 - - /@smithy/util-uri-escape@2.1.1: - resolution: {integrity: sha512-saVzI1h6iRBUVSqtnlOnc9ssU09ypo7n+shdQ8hBTZno/9rZ3AuRYvoHInV57VF7Qn7B+pFJG7qTzFiHxWlWBw==} - engines: {node: '>=14.0.0'} - requiresBuild: true - dependencies: - tslib: 2.6.2 - - /@smithy/util-utf8@2.1.1: - resolution: {integrity: sha512-BqTpzYEcUMDwAKr7/mVRUtHDhs6ZoXDi9NypMvMfOr/+u1NW7JgqodPDECiiLboEm6bobcPcECxzjtQh865e9A==} - engines: {node: '>=14.0.0'} - requiresBuild: true - dependencies: - '@smithy/util-buffer-from': 2.1.1 - tslib: 2.6.2 - - /@smithy/util-waiter@2.1.3: - resolution: {integrity: sha512-3R0wNFAQQoH9e4m+bVLDYNOst2qNxtxFgq03WoNHWTBOqQT3jFnOBRj1W51Rf563xDA5kwqjziksxn6RKkHB+Q==} + /@smithy/util-stream@2.2.0: + resolution: {integrity: sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA==} engines: {node: '>=14.0.0'} dependencies: - '@smithy/abort-controller': 2.1.3 - '@smithy/types': 2.10.1 + '@smithy/fetch-http-handler': 2.5.0 + '@smithy/node-http-handler': 2.5.0 + '@smithy/types': 2.12.0 + '@smithy/util-base64': 2.3.0 + '@smithy/util-buffer-from': 2.2.0 + '@smithy/util-hex-encoding': 2.2.0 + '@smithy/util-utf8': 2.3.0 tslib: 2.6.2 - /@swc-node/core@1.13.0(@swc/core@1.4.2)(@swc/types@0.1.5): + /@smithy/util-uri-escape@2.2.0: + resolution: {integrity: sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.6.2 + + /@smithy/util-utf8@2.3.0: + resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/util-buffer-from': 2.2.0 + tslib: 2.6.2 + + /@smithy/util-waiter@2.2.0: + resolution: {integrity: sha512-IHk53BVw6MPMi2Gsn+hCng8rFA3ZmR3Rk7GllxDUW9qFJl/hiSvskn7XldkECapQVkIg/1dHpMAxI9xSTaLLSA==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/abort-controller': 2.2.0 + '@smithy/types': 2.12.0 + tslib: 2.6.2 + + /@swc-node/core@1.13.0(@swc/core@1.4.13)(@swc/types@0.1.6): resolution: {integrity: sha512-lFPD4nmy4ifAOVMChFjwlpXN5KQXvegqeyuzz1KQz42q1lf+cL3Qux1/GteGuZjh8HC+Rj1RdNrHpE/MCfJSTw==} engines: {node: '>= 10'} peerDependencies: '@swc/core': '>= 1.3' '@swc/types': '>= 0.1' dependencies: - '@swc/core': 1.4.2 - '@swc/types': 0.1.5 + '@swc/core': 1.4.13 + '@swc/types': 0.1.6 dev: false /@swc-node/sourcemap-support@0.5.0: @@ -5472,7 +5321,7 @@ packages: tslib: 2.6.2 dev: false - /@swc/cli@0.1.65(@swc/core@1.4.2): + /@swc/cli@0.1.65(@swc/core@1.4.13): resolution: {integrity: sha512-4NcgsvJVHhA7trDnMmkGLLvWMHu2kSy+qHx6QwRhhJhdiYdNUrhdp+ERxen73sYtaeEOYeLJcWrQ60nzKi6rpg==} engines: {node: '>= 12.13'} hasBin: true @@ -5484,97 +5333,97 @@ packages: optional: true dependencies: '@mole-inc/bin-wrapper': 8.0.1 - '@swc/core': 1.4.2 + '@swc/core': 1.4.13 commander: 7.2.0 fast-glob: 3.3.2 - minimatch: 9.0.3 + minimatch: 9.0.4 semver: 7.6.0 slash: 3.0.0 source-map: 0.7.4 dev: true - /@swc/core-darwin-arm64@1.4.2: - resolution: {integrity: sha512-1uSdAn1MRK5C1m/TvLZ2RDvr0zLvochgrZ2xL+lRzugLlCTlSA+Q4TWtrZaOz+vnnFVliCpw7c7qu0JouhgQIw==} + /@swc/core-darwin-arm64@1.4.13: + resolution: {integrity: sha512-36P72FLpm5iq85IvoEjBvi22DiqkkEIanJ1M0E8bkxcFHUbjBrYfPY9T6cpPyK5oQqkaTBvNAc3j1BlVD6IH6w==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] requiresBuild: true optional: true - /@swc/core-darwin-x64@1.4.2: - resolution: {integrity: sha512-TYD28+dCQKeuxxcy7gLJUCFLqrwDZnHtC2z7cdeGfZpbI2mbfppfTf2wUPzqZk3gEC96zHd4Yr37V3Tvzar+lQ==} + /@swc/core-darwin-x64@1.4.13: + resolution: {integrity: sha512-ye7OgKpDdyA8AMIVVdmD1ICDaFXgoEXORnVO8bBHyul0WN71yUBZMX+YxEx2lpWtiftA2vY/1MAuOR80vHkBCw==} engines: {node: '>=10'} cpu: [x64] os: [darwin] requiresBuild: true optional: true - /@swc/core-linux-arm-gnueabihf@1.4.2: - resolution: {integrity: sha512-Eyqipf7ZPGj0vplKHo8JUOoU1un2sg5PjJMpEesX0k+6HKE2T8pdyeyXODN0YTFqzndSa/J43EEPXm+rHAsLFQ==} + /@swc/core-linux-arm-gnueabihf@1.4.13: + resolution: {integrity: sha512-+x593Jlmu4c3lJtZUKRejWpV2MAij1Js5nmQLLdjo6ChR2D4B2rzj3iMiKn5gITew7fraF9t3fvXALdWh7HmUg==} engines: {node: '>=10'} cpu: [arm] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-arm64-gnu@1.4.2: - resolution: {integrity: sha512-wZn02DH8VYPv3FC0ub4my52Rttsus/rFw+UUfzdb3tHMHXB66LqN+rR0ssIOZrH6K+VLN6qpTw9VizjyoH0BxA==} + /@swc/core-linux-arm64-gnu@1.4.13: + resolution: {integrity: sha512-0x8OVw4dfyNerrs/9eZX9wNnmvwbwXSMCi+LbE6Xt1pXOIwvoLtFIXcV3NsrlkFboO3sr5UAQIwDxKqbIZA9pQ==} engines: {node: '>=10'} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-arm64-musl@1.4.2: - resolution: {integrity: sha512-3G0D5z9hUj9bXNcwmA1eGiFTwe5rWkuL3DsoviTj73TKLpk7u64ND0XjEfO0huVv4vVu9H1jodrKb7nvln/dlw==} + /@swc/core-linux-arm64-musl@1.4.13: + resolution: {integrity: sha512-Z9c4JiequtZvngPcxbCuAOkmWBxi2vInZbjjhD5I+Q9oiJdXUz1t2USGwsGPS41Xvk1BOA3ecK2Sn1ilY3titg==} engines: {node: '>=10'} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-x64-gnu@1.4.2: - resolution: {integrity: sha512-LFxn9U8cjmYHw3jrdPNqPAkBGglKE3tCZ8rA7hYyp0BFxuo7L2ZcEnPm4RFpmSCCsExFH+LEJWuMGgWERoktvg==} + /@swc/core-linux-x64-gnu@1.4.13: + resolution: {integrity: sha512-ChatHtk+vX0Ke5QG+jO+rIapw/KwZsi9MedCBHFXHH6iWF4z8d51cJeN68ykcn+vAXzjNeFNdlNy5Vbkd1zAqg==} engines: {node: '>=10'} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-x64-musl@1.4.2: - resolution: {integrity: sha512-dp0fAmreeVVYTUcb4u9njTPrYzKnbIH0EhH2qvC9GOYNNREUu2GezSIDgonjOXkHiTCvopG4xU7y56XtXj4VrQ==} + /@swc/core-linux-x64-musl@1.4.13: + resolution: {integrity: sha512-0Pz39YR530mXpsztwQkmEKdkkZy4fY4Smdh4pkm6Ly8Nndyo0te/l4bcAGqN24Jp7aVwF/QSy14SAtw4HRjU9g==} engines: {node: '>=10'} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@swc/core-win32-arm64-msvc@1.4.2: - resolution: {integrity: sha512-HlVIiLMQkzthAdqMslQhDkoXJ5+AOLUSTV6fm6shFKZKqc/9cJvr4S8UveNERL9zUficA36yM3bbfo36McwnvQ==} + /@swc/core-win32-arm64-msvc@1.4.13: + resolution: {integrity: sha512-LVZfhlD+jHcAbz5NN+gAJ1BEasB0WpcvUzcsJt0nQSRsojgzPzFjJ+fzEBnvT7SMtqKkrnVJ0OmDYeh88bDRpw==} engines: {node: '>=10'} cpu: [arm64] os: [win32] requiresBuild: true optional: true - /@swc/core-win32-ia32-msvc@1.4.2: - resolution: {integrity: sha512-WCF8faPGjCl4oIgugkp+kL9nl3nUATlzKXCEGFowMEmVVCFM0GsqlmGdPp1pjZoWc9tpYanoXQDnp5IvlDSLhA==} + /@swc/core-win32-ia32-msvc@1.4.13: + resolution: {integrity: sha512-78hxHWUvUZtWsnhcf8DKwhBcNFJw+j4y4fN2B9ioXmBWX2tIyw+BqUHOrismOtjPihaZmwe/Ok2e4qmkawE2fw==} engines: {node: '>=10'} cpu: [ia32] os: [win32] requiresBuild: true optional: true - /@swc/core-win32-x64-msvc@1.4.2: - resolution: {integrity: sha512-oV71rwiSpA5xre2C5570BhCsg1HF97SNLsZ/12xv7zayGzqr3yvFALFJN8tHKpqUdCB4FGPjoP3JFdV3i+1wUw==} + /@swc/core-win32-x64-msvc@1.4.13: + resolution: {integrity: sha512-WSfy1u2Xde6jU7UpHIInCUMW98Zw9iZglddKUAvmr1obkZji5U6EX0Oca3asEJdZPFb+2lMLjt0Mh5a1YisROg==} engines: {node: '>=10'} cpu: [x64] os: [win32] requiresBuild: true optional: true - /@swc/core@1.4.2: - resolution: {integrity: sha512-vWgY07R/eqj1/a0vsRKLI9o9klGZfpLNOVEnrv4nrccxBgYPjcf22IWwAoaBJ+wpA7Q4fVjCUM8lP0m01dpxcg==} + /@swc/core@1.4.13: + resolution: {integrity: sha512-rOtusBE+2gaeRkAJn5E4zp5yzZekZOypzSOz5ZG6P1hFbd+Cc26fWEdK6sUSnrkkvTd0Oj33KXLB/4UkbK/UHA==} engines: {node: '>=10'} requiresBuild: true peerDependencies: @@ -5584,18 +5433,18 @@ packages: optional: true dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.5 + '@swc/types': 0.1.6 optionalDependencies: - '@swc/core-darwin-arm64': 1.4.2 - '@swc/core-darwin-x64': 1.4.2 - '@swc/core-linux-arm-gnueabihf': 1.4.2 - '@swc/core-linux-arm64-gnu': 1.4.2 - '@swc/core-linux-arm64-musl': 1.4.2 - '@swc/core-linux-x64-gnu': 1.4.2 - '@swc/core-linux-x64-musl': 1.4.2 - '@swc/core-win32-arm64-msvc': 1.4.2 - '@swc/core-win32-ia32-msvc': 1.4.2 - '@swc/core-win32-x64-msvc': 1.4.2 + '@swc/core-darwin-arm64': 1.4.13 + '@swc/core-darwin-x64': 1.4.13 + '@swc/core-linux-arm-gnueabihf': 1.4.13 + '@swc/core-linux-arm64-gnu': 1.4.13 + '@swc/core-linux-arm64-musl': 1.4.13 + '@swc/core-linux-x64-gnu': 1.4.13 + '@swc/core-linux-x64-musl': 1.4.13 + '@swc/core-win32-arm64-msvc': 1.4.13 + '@swc/core-win32-ia32-msvc': 1.4.13 + '@swc/core-win32-x64-msvc': 1.4.13 /@swc/counter@0.1.3: resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} @@ -5606,20 +5455,22 @@ packages: '@swc/counter': 0.1.3 tslib: 2.6.2 - /@swc/jest@0.2.36(@swc/core@1.4.2): + /@swc/jest@0.2.36(@swc/core@1.4.13): resolution: {integrity: sha512-8X80dp81ugxs4a11z1ka43FPhP+/e+mJNXJSxiNYk8gIX/jPBtY4gQTrKu/KIoco8bzKuPI5lUxjfLiGsfvnlw==} engines: {npm: '>= 7.0.0'} peerDependencies: '@swc/core': '*' dependencies: '@jest/create-cache-key-function': 29.7.0 - '@swc/core': 1.4.2 + '@swc/core': 1.4.13 '@swc/counter': 0.1.3 jsonc-parser: 3.2.1 dev: true - /@swc/types@0.1.5: - resolution: {integrity: sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==} + /@swc/types@0.1.6: + resolution: {integrity: sha512-/JLo/l2JsT/LRd80C3HfbmVpxOAJ11FO2RCEslFrgzLltoP9j8XIbsyDcfCt2WWyX+CM96rBoNM+IToAkFOugg==} + dependencies: + '@swc/counter': 0.1.3 /@szmarczak/http-timer@4.0.6: resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} @@ -5632,8 +5483,8 @@ packages: resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==} engines: {node: '>=14'} dependencies: - '@babel/code-frame': 7.23.5 - '@babel/runtime': 7.24.0 + '@babel/code-frame': 7.24.2 + '@babel/runtime': 7.24.4 '@types/aria-query': 5.0.4 aria-query: 5.1.3 chalk: 4.1.2 @@ -5664,7 +5515,7 @@ packages: optional: true dependencies: '@adobe/css-tools': 4.3.3 - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 '@types/jest': 29.5.12 aria-query: 5.3.0 chalk: 3.0.0 @@ -5682,7 +5533,7 @@ packages: react: ^18.2.0 react-dom: ^18.2.0 dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 '@testing-library/dom': 9.3.4 '@types/react-dom': 18.2.24 react: 18.2.0 @@ -5702,8 +5553,8 @@ packages: engines: {node: '>=10.13.0'} dev: true - /@tsconfig/node10@1.0.9: - resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + /@tsconfig/node10@1.0.11: + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} /@tsconfig/node12@1.0.11: resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} @@ -5725,7 +5576,7 @@ packages: /@types/babel__core@7.20.5: resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: - '@babel/parser': 7.24.0 + '@babel/parser': 7.24.4 '@babel/types': 7.24.0 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 @@ -5739,7 +5590,7 @@ packages: /@types/babel__template@7.4.4: resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} dependencies: - '@babel/parser': 7.24.0 + '@babel/parser': 7.24.4 '@babel/types': 7.24.0 /@types/babel__traverse@7.20.5: @@ -5866,7 +5717,7 @@ packages: resolution: {integrity: sha512-ymwc+qb1XkjT/gfoQwxIeHZ6ixH23A+tCT2ADSA/DPVKzAjwYkTXBMCQ/f6fe4wEa85Lhp26VPeUxI7wMhAi7A==} dependencies: '@types/estree': 1.0.5 - '@types/json-schema': 7.0.12 + '@types/json-schema': 7.0.15 /@types/esprima@4.0.6: resolution: {integrity: sha512-lIk+kSt9lGv5hxK6aZNjiUEGZqKmOTpmg0tKiJQI+Ow98fLillxsiZNik5+RcP7mXL929KiTH/D9jGtpDlMbVw==} @@ -5894,7 +5745,7 @@ packages: resolution: {integrity: sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==} dependencies: '@types/node': 20.12.5 - '@types/qs': 6.9.7 + '@types/qs': 6.9.14 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 dev: true @@ -5904,8 +5755,8 @@ packages: dependencies: '@types/body-parser': 1.19.2 '@types/express-serve-static-core': 4.17.35 - '@types/qs': 6.9.7 - '@types/serve-static': 1.15.5 + '@types/qs': 6.9.14 + '@types/serve-static': 1.15.7 dev: true /@types/express@4.17.21: @@ -5913,8 +5764,8 @@ packages: dependencies: '@types/body-parser': 1.19.2 '@types/express-serve-static-core': 4.17.35 - '@types/qs': 6.9.7 - '@types/serve-static': 1.15.5 + '@types/qs': 6.9.14 + '@types/serve-static': 1.15.7 dev: true /@types/find-node-modules@2.1.2: @@ -6000,13 +5851,6 @@ packages: pretty-format: 29.7.0 dev: true - /@types/jest@29.5.7: - resolution: {integrity: sha512-HLyetab6KVPSiF+7pFcUyMeLsx25LDNDemw9mGsJBkai/oouwrjTycocSDYopMEwFhN2Y4s9oPyOCZNofgSt2g==} - dependencies: - expect: 29.7.0 - pretty-format: 29.7.0 - dev: true - /@types/joi@14.3.4: resolution: {integrity: sha512-1TQNDJvIKlgYXGNIABfgFp9y0FziDpuGrd799Q5RcnsDu+krD+eeW/0Fs5PHARvWWFelOhIG2OPCo6KbadBM4A==} dev: true @@ -6021,6 +5865,7 @@ packages: /@types/json-schema@7.0.12: resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} + dev: true /@types/json-schema@7.0.15: resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -6046,11 +5891,11 @@ packages: /@types/lodash.get@4.4.9: resolution: {integrity: sha512-J5dvW98sxmGnamqf+/aLP87PYXyrha9xIgc2ZlHl6OHMFR2Ejdxep50QfU0abO1+CH6+ugx+8wEUN1toImAinA==} dependencies: - '@types/lodash': 4.14.202 + '@types/lodash': 4.17.0 dev: true - /@types/lodash@4.14.202: - resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==} + /@types/lodash@4.17.0: + resolution: {integrity: sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==} /@types/method-override@0.0.32: resolution: {integrity: sha512-Vf9AohOlANmhNswCbkdRG3p+tYcq1+63O+ex1UoNIVYWW3tO8Mx6Z+5G1R8DENeC6/t1SiDJS+ph6ACKpryokg==} @@ -6169,7 +6014,7 @@ packages: resolution: {integrity: sha512-MKFs9P6nJ+LAeHLU3V0cODEOgyThJ3OAnmOlsZsxux6sfQs3HRXR5bBn7xG5DjckEFhTAxsXi7k7cd0pCMxpJw==} dependencies: '@types/node': 20.12.5 - pg-protocol: 1.6.0 + pg-protocol: 1.6.1 pg-types: 4.0.2 /@types/pluralize@0.0.33: @@ -6194,8 +6039,8 @@ packages: kleur: 3.0.3 dev: true - /@types/prop-types@15.7.11: - resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} + /@types/prop-types@15.7.12: + resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} /@types/qs@6.9.14: resolution: {integrity: sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==} @@ -6236,7 +6081,7 @@ packages: /@types/react@18.2.74: resolution: {integrity: sha512-9AEqNZZyBx8OdZpxzQlaFEVCSFUM2YXJH46yPOiOpm078k6ZLOCcuAzGum/zK8YBwY+dbahVNbHrbgrAwIRlqw==} dependencies: - '@types/prop-types': 15.7.11 + '@types/prop-types': 15.7.12 csstype: 3.1.3 /@types/request@2.48.12: @@ -6264,12 +6109,12 @@ packages: '@types/node': 20.12.5 dev: true - /@types/serve-static@1.15.5: - resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} + /@types/serve-static@1.15.7: + resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} dependencies: '@types/http-errors': 2.0.4 - '@types/mime': 2.0.3 '@types/node': 20.12.5 + '@types/send': 0.17.4 dev: true /@types/shelljs@0.8.15: @@ -6349,7 +6194,7 @@ packages: ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.6.0 - ts-api-utils: 1.2.1(typescript@5.4.4) + ts-api-utils: 1.3.0(typescript@5.4.4) typescript: 5.4.4 transitivePeerDependencies: - supports-color @@ -6414,7 +6259,7 @@ packages: '@typescript-eslint/utils': 7.3.1(eslint@8.57.0)(typescript@5.4.4) debug: 4.3.4(supports-color@5.5.0) eslint: 8.57.0 - ts-api-utils: 1.2.1(typescript@5.4.4) + ts-api-utils: 1.3.0(typescript@5.4.4) typescript: 5.4.4 transitivePeerDependencies: - supports-color @@ -6472,7 +6317,7 @@ packages: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.6.0 - ts-api-utils: 1.2.1(typescript@5.4.4) + ts-api-utils: 1.3.0(typescript@5.4.4) typescript: 5.4.4 transitivePeerDependencies: - supports-color @@ -6494,7 +6339,7 @@ packages: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.6.0 - ts-api-utils: 1.2.1(typescript@5.4.4) + ts-api-utils: 1.3.0(typescript@5.4.4) typescript: 5.4.4 transitivePeerDependencies: - supports-color @@ -6585,8 +6430,18 @@ packages: /@ungap/structured-clone@1.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - /@webassemblyjs/ast@1.11.6: - resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} + /@vercel/blob@0.22.3: + resolution: {integrity: sha512-l0t2KhbOO/I8ZNOl9zypYf1NE0837aO4/CPQNGR/RAxtj8FpdYKjhyUADUXj2gERLQmnhun+teaVs/G7vZJ/TQ==} + engines: {node: '>=16.14'} + dependencies: + async-retry: 1.3.3 + bytes: 3.1.2 + is-buffer: 2.0.5 + undici: 5.28.4 + dev: true + + /@webassemblyjs/ast@1.12.1: + resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} dependencies: '@webassemblyjs/helper-numbers': 1.11.6 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 @@ -6600,8 +6455,8 @@ packages: resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} dev: true - /@webassemblyjs/helper-buffer@1.11.6: - resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==} + /@webassemblyjs/helper-buffer@1.12.1: + resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==} dev: true /@webassemblyjs/helper-numbers@1.11.6: @@ -6616,13 +6471,13 @@ packages: resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} dev: true - /@webassemblyjs/helper-wasm-section@1.11.6: - resolution: {integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==} + /@webassemblyjs/helper-wasm-section@1.12.1: + resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==} dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/wasm-gen': 1.11.6 + '@webassemblyjs/wasm-gen': 1.12.1 dev: true /@webassemblyjs/ieee754@1.11.6: @@ -6641,42 +6496,42 @@ packages: resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} dev: true - /@webassemblyjs/wasm-edit@1.11.6: - resolution: {integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==} + /@webassemblyjs/wasm-edit@1.12.1: + resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==} dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/helper-wasm-section': 1.11.6 - '@webassemblyjs/wasm-gen': 1.11.6 - '@webassemblyjs/wasm-opt': 1.11.6 - '@webassemblyjs/wasm-parser': 1.11.6 - '@webassemblyjs/wast-printer': 1.11.6 + '@webassemblyjs/helper-wasm-section': 1.12.1 + '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/wasm-opt': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + '@webassemblyjs/wast-printer': 1.12.1 dev: true - /@webassemblyjs/wasm-gen@1.11.6: - resolution: {integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==} + /@webassemblyjs/wasm-gen@1.12.1: + resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==} dependencies: - '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 '@webassemblyjs/ieee754': 1.11.6 '@webassemblyjs/leb128': 1.11.6 '@webassemblyjs/utf8': 1.11.6 dev: true - /@webassemblyjs/wasm-opt@1.11.6: - resolution: {integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==} + /@webassemblyjs/wasm-opt@1.12.1: + resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==} dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-buffer': 1.11.6 - '@webassemblyjs/wasm-gen': 1.11.6 - '@webassemblyjs/wasm-parser': 1.11.6 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 dev: true - /@webassemblyjs/wasm-parser@1.11.6: - resolution: {integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==} + /@webassemblyjs/wasm-parser@1.12.1: + resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==} dependencies: - '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/helper-api-error': 1.11.6 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 '@webassemblyjs/ieee754': 1.11.6 @@ -6684,36 +6539,36 @@ packages: '@webassemblyjs/utf8': 1.11.6 dev: true - /@webassemblyjs/wast-printer@1.11.6: - resolution: {integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==} + /@webassemblyjs/wast-printer@1.12.1: + resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==} dependencies: - '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/ast': 1.12.1 '@xtuc/long': 4.2.2 dev: true - /@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.90.3): + /@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.91.0): resolution: {integrity: sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==} engines: {node: '>=14.15.0'} peerDependencies: webpack: 5.x.x webpack-cli: 5.x.x dependencies: - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.19.12)(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack@5.90.3) + webpack: 5.91.0(@swc/core@1.4.13)(esbuild@0.19.12)(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack@5.91.0) dev: true - /@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.90.3): + /@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.91.0): resolution: {integrity: sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==} engines: {node: '>=14.15.0'} peerDependencies: webpack: 5.x.x webpack-cli: 5.x.x dependencies: - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.19.12)(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack@5.90.3) + webpack: 5.91.0(@swc/core@1.4.13)(esbuild@0.19.12)(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack@5.91.0) dev: true - /@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack@5.90.3): + /@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack@5.91.0): resolution: {integrity: sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==} engines: {node: '>=14.15.0'} peerDependencies: @@ -6724,8 +6579,8 @@ packages: webpack-dev-server: optional: true dependencies: - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.19.12)(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack@5.90.3) + webpack: 5.91.0(@swc/core@1.4.13)(esbuild@0.19.12)(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack@5.91.0) dev: true /@xtuc/ieee754@1.2.0: @@ -6815,8 +6670,8 @@ packages: - supports-color dev: true - /agent-base@7.1.0: - resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} + /agent-base@7.1.1: + resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} engines: {node: '>= 14'} dependencies: debug: 4.3.4(supports-color@5.5.0) @@ -6875,8 +6730,8 @@ packages: require-from-string: 2.0.2 uri-js: 4.4.1 - /amazon-cognito-identity-js@6.3.7: - resolution: {integrity: sha512-tSjnM7KyAeOZ7UMah+oOZ6cW4Gf64FFcc7BE2l7MTcp7ekAPrXaCbpcW2xEpH1EiDS4cPcAouHzmCuc2tr72vQ==} + /amazon-cognito-identity-js@6.3.12: + resolution: {integrity: sha512-s7NKDZgx336cp+oDeUtB2ZzT8jWJp/v2LWuYl+LQtMEODe22RF1IJ4nRiDATp+rp1pTffCZcm44Quw4jx2bqNg==} dependencies: '@aws-crypto/sha256-js': 1.2.2 buffer: 4.9.2 @@ -6984,13 +6839,14 @@ packages: resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} dev: true - /array-includes@3.1.7: - resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + /array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.5 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 get-intrinsic: 1.2.4 is-string: 1.0.7 dev: false @@ -7002,14 +6858,15 @@ packages: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} - /array.prototype.findlast@1.2.4: - resolution: {integrity: sha512-BMtLxpV+8BD+6ZPFIWmnUBpQoy+A+ujcg4rhp2iwCRJYA7PEh2MS4NL3lz8EiDlLrJPp2hg9qWihr5pd//jcGw==} + /array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.5 + es-abstract: 1.23.3 es-errors: 1.3.0 + es-object-atoms: 1.0.0 es-shim-unscopables: 1.0.2 dev: false @@ -7019,7 +6876,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.5 + es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 dev: false @@ -7029,7 +6886,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.5 + es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 dev: false @@ -7038,7 +6895,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.5 + es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 dev: false @@ -7047,7 +6904,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.5 + es-abstract: 1.23.3 es-errors: 1.3.0 es-shim-unscopables: 1.0.2 dev: false @@ -7059,7 +6916,7 @@ packages: array-buffer-byte-length: 1.0.1 call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.5 + es-abstract: 1.23.3 es-errors: 1.3.0 get-intrinsic: 1.2.4 is-array-buffer: 3.0.4 @@ -7086,12 +6943,6 @@ packages: retry: 0.13.1 dev: true - /asynciterator.prototype@1.0.0: - resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} - dependencies: - has-symbols: 1.0.3 - dev: false - /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -7109,19 +6960,19 @@ packages: engines: {node: '>=10.12.0'} dev: false - /autoprefixer@10.4.18(postcss@8.4.35): - resolution: {integrity: sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==} + /autoprefixer@10.4.19(postcss@8.4.38): + resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 dependencies: browserslist: 4.23.0 - caniuse-lite: 1.0.30001591 + caniuse-lite: 1.0.30001607 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.0 - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true @@ -7139,7 +6990,7 @@ packages: /axios@1.4.0: resolution: {integrity: sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==} dependencies: - follow-redirects: 1.15.5(debug@4.3.4) + follow-redirects: 1.15.6(debug@4.3.4) form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -7156,17 +7007,17 @@ packages: resolution: {integrity: sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==} dev: true - /babel-jest@29.7.0(@babel/core@7.24.0): + /babel-jest@29.7.0(@babel/core@7.24.4): resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@jest/transform': 29.7.0 '@types/babel__core': 7.20.5 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.24.0) + babel-preset-jest: 29.6.3(@babel/core@7.24.4) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -7198,71 +7049,70 @@ packages: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 cosmiconfig: 7.1.0 resolve: 1.22.8 dev: false - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.0): + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.4): resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.0 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.0) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.0) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.0) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.0) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.0) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.0) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.0) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.0) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.0) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.0) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.0) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.0) + '@babel/core': 7.24.4 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.4) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.4) - /babel-preset-jest@29.6.3(@babel/core@7.24.0): + /babel-preset-jest@29.6.3(@babel/core@7.24.4): resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.0) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.4) /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - /bare-events@2.2.0: - resolution: {integrity: sha512-Yyyqff4PIFfSuthCZqLlPISTWHmnQxoPuAvkmgzsJEmG3CesdIv6Xweayl0JkCZJSB2yYIdJyEz97tpxNhgjbg==} + /bare-events@2.2.2: + resolution: {integrity: sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ==} requiresBuild: true dev: true optional: true - /bare-fs@2.2.1: - resolution: {integrity: sha512-+CjmZANQDFZWy4PGbVdmALIwmt33aJg8qTkVjClU6X4WmZkTPBDxRHiBn7fpqEWEfF3AC2io++erpViAIQbSjg==} + /bare-fs@2.2.3: + resolution: {integrity: sha512-amG72llr9pstfXOBOHve1WjiuKKAMnebcmMbPWDZ7BCevAoJLpugjuAPRsDINEyjT0a6tbaVx3DctkXIRbLuJw==} requiresBuild: true dependencies: - bare-events: 2.2.0 - bare-os: 2.2.0 - bare-path: 2.1.0 + bare-events: 2.2.2 + bare-path: 2.1.1 streamx: 2.16.1 dev: true optional: true - /bare-os@2.2.0: - resolution: {integrity: sha512-hD0rOPfYWOMpVirTACt4/nK8mC55La12K5fY1ij8HAdfQakD62M+H4o4tpfKzVGLgRDTuk3vjA4GqGXXCeFbag==} + /bare-os@2.2.1: + resolution: {integrity: sha512-OwPyHgBBMkhC29Hl3O4/YfxW9n7mdTr2+SsO29XBWKKJsbgj3mnorDB80r5TiCQgQstgE5ga1qNYrpes6NvX2w==} requiresBuild: true dev: true optional: true - /bare-path@2.1.0: - resolution: {integrity: sha512-DIIg7ts8bdRKwJRJrUMy/PICEaQZaPGZ26lsSx9MJSwIhSrcdHn7/C8W+XmnG/rKi6BaRcz+JO00CjZteybDtw==} + /bare-path@2.1.1: + resolution: {integrity: sha512-OHM+iwRDRMDBsSW7kl3dO62JyHdBKO3B25FB9vNQBPcGHMo4+eA8Yj41Lfbk3pS/seDY+siNge0LdRTulAau/A==} requiresBuild: true dependencies: - bare-os: 2.2.0 + bare-os: 2.2.1 dev: true optional: true @@ -7306,8 +7156,8 @@ packages: find-versions: 5.1.0 dev: true - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + /binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} /bl@4.1.0: @@ -7318,8 +7168,8 @@ packages: readable-stream: 3.6.2 dev: true - /body-parser@1.20.1: - resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} + /body-parser@1.20.2: + resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dependencies: bytes: 3.1.2 @@ -7331,7 +7181,7 @@ packages: iconv-lite: 0.4.24 on-finished: 2.4.1 qs: 6.11.0 - raw-body: 2.5.1 + raw-body: 2.5.2 type-is: 1.6.18 unpipe: 1.0.0 transitivePeerDependencies: @@ -7352,7 +7202,6 @@ packages: /bowser@2.11.0: resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} - requiresBuild: true /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -7376,8 +7225,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001591 - electron-to-chromium: 1.4.686 + caniuse-lite: 1.0.30001607 + electron-to-chromium: 1.4.730 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.23.0) @@ -7464,7 +7313,6 @@ packages: /bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} - dev: false /cacheable-lookup@5.0.4: resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} @@ -7492,7 +7340,7 @@ packages: es-errors: 1.3.0 function-bind: 1.1.2 get-intrinsic: 1.2.4 - set-function-length: 1.2.1 + set-function-length: 1.2.2 /call-me-maybe@1.0.2: resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} @@ -7518,13 +7366,13 @@ packages: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} dependencies: browserslist: 4.23.0 - caniuse-lite: 1.0.30001591 + caniuse-lite: 1.0.30001607 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 dev: true - /caniuse-lite@1.0.30001591: - resolution: {integrity: sha512-PCzRMei/vXjJyL5mJtzNiUCKP59dm8Apqc3PH8gJkMnMXZGox93RbE76jHsmLwmIo6/3nsYIpJtx0O7u5PqFuQ==} + /caniuse-lite@1.0.30001607: + resolution: {integrity: sha512-WcvhVRjXLKFB/kmOFVwELtMxyhq3iM/MvmXcyCe2PNf166c39mptscOc/45TTS96n2gpNV2z7+NakArTWZCQ3w==} /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} @@ -7600,11 +7448,11 @@ packages: engines: {node: '>=6'} dev: true - /cli-color@2.0.3: - resolution: {integrity: sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==} + /cli-color@2.0.4: + resolution: {integrity: sha512-zlnpg0jNcibNrO7GG9IeHH7maWFeCz+Ja1wx/7tZNU5ASSSSZ+/qZciM0/LHCYxSdqv5h2sdbQ/PXYdOuetXvA==} engines: {node: '>=0.10'} dependencies: - d: 1.0.1 + d: 1.0.2 es5-ext: 0.10.64 es6-iterator: 2.0.3 memoizee: 0.4.15 @@ -7978,8 +7826,8 @@ packages: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} dev: false - /cookie@0.5.0: - resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + /cookie@0.6.0: + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} dev: false @@ -8086,39 +7934,39 @@ packages: engines: {node: '>=8'} dev: true - /css-blank-pseudo@6.0.1(postcss@8.4.35): + /css-blank-pseudo@6.0.1(postcss@8.4.38): resolution: {integrity: sha512-goSnEITByxTzU4Oh5oJZrEWudxTqk7L6IXj1UW69pO6Hv0UdX+Vsrt02FFu5DweRh2bLu6WpX/+zsQCu5O1gKw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 dev: true - /css-declaration-sorter@7.1.1(postcss@8.4.35): - resolution: {integrity: sha512-dZ3bVTEEc1vxr3Bek9vGwfB5Z6ESPULhcRvO472mfjVnj8jRcTnKO8/JTczlvxM10Myb+wBM++1MtdO76eWcaQ==} + /css-declaration-sorter@7.2.0(postcss@8.4.38): + resolution: {integrity: sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.0.9 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true - /css-has-pseudo@6.0.2(postcss@8.4.35): - resolution: {integrity: sha512-Z2Qm5yyOvJRTy6THdUlnGIX6PW/1wOc4FHWlfkcBkfkpZ3oz6lPdG+h+J7t1HZHT4uSSVR8XatXiMpqMUADXow==} + /css-has-pseudo@6.0.3(postcss@8.4.38): + resolution: {integrity: sha512-qIsDxK/z0byH/mpNsv5hzQ5NOl8m1FRmOLgZpx4bG5uYHnOlO2XafeMI4mFIgNSViHwoUWcxSJZyyijaAmbs+A==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/selector-specificity': 3.0.2(postcss-selector-parser@6.0.15) - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + '@csstools/selector-specificity': 3.0.3(postcss-selector-parser@6.0.16) + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 postcss-value-parser: 4.2.0 dev: true - /css-loader@6.10.0(webpack@5.90.3): - resolution: {integrity: sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw==} + /css-loader@6.11.0(webpack@5.91.0): + resolution: {integrity: sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==} engines: {node: '>= 12.13.0'} peerDependencies: '@rspack/core': 0.x || 1.x @@ -8129,18 +7977,18 @@ packages: webpack: optional: true dependencies: - icss-utils: 5.1.0(postcss@8.4.35) - postcss: 8.4.35 - postcss-modules-extract-imports: 3.0.0(postcss@8.4.35) - postcss-modules-local-by-default: 4.0.4(postcss@8.4.35) - postcss-modules-scope: 3.1.1(postcss@8.4.35) - postcss-modules-values: 4.0.0(postcss@8.4.35) + icss-utils: 5.1.0(postcss@8.4.38) + postcss: 8.4.38 + postcss-modules-extract-imports: 3.1.0(postcss@8.4.38) + postcss-modules-local-by-default: 4.0.5(postcss@8.4.38) + postcss-modules-scope: 3.2.0(postcss@8.4.38) + postcss-modules-values: 4.0.0(postcss@8.4.38) postcss-value-parser: 4.2.0 semver: 7.6.0 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.19.12)(webpack-cli@5.1.4) + webpack: 5.91.0(@swc/core@1.4.13)(esbuild@0.19.12)(webpack-cli@5.1.4) dev: true - /css-minimizer-webpack-plugin@6.0.0(esbuild@0.19.12)(webpack@5.90.3): + /css-minimizer-webpack-plugin@6.0.0(esbuild@0.19.12)(webpack@5.91.0): resolution: {integrity: sha512-BLpR9CCDkKvhO3i0oZQgad6v9pCxUuhSc5RT6iUEy9M8hBXi4TJb5vqF2GQ2deqYHmRi3O6IR9hgAZQWg0EBwA==} engines: {node: '>= 18.12.0'} peerDependencies: @@ -8165,23 +8013,23 @@ packages: lightningcss: optional: true dependencies: - '@jridgewell/trace-mapping': 0.3.23 - cssnano: 6.1.0(postcss@8.4.35) + '@jridgewell/trace-mapping': 0.3.25 + cssnano: 6.1.2(postcss@8.4.38) esbuild: 0.19.12 jest-worker: 29.7.0 - postcss: 8.4.35 + postcss: 8.4.38 schema-utils: 4.2.0 serialize-javascript: 6.0.2 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.19.12)(webpack-cli@5.1.4) + webpack: 5.91.0(@swc/core@1.4.13)(esbuild@0.19.12)(webpack-cli@5.1.4) dev: true - /css-prefers-color-scheme@9.0.1(postcss@8.4.35): + /css-prefers-color-scheme@9.0.1(postcss@8.4.38): resolution: {integrity: sha512-iFit06ochwCKPRiWagbTa1OAWCvWWVdEnIFd8BaRrgO8YrrNh4RAWUQTFcYX5tdFZgFl1DJ3iiULchZyEbnF4g==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true /css-select@5.1.0: @@ -8199,7 +8047,7 @@ packages: engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} dependencies: mdn-data: 2.0.28 - source-map-js: 1.0.2 + source-map-js: 1.2.0 dev: true /css-tree@2.3.1: @@ -8207,7 +8055,7 @@ packages: engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} dependencies: mdn-data: 2.0.30 - source-map-js: 1.0.2 + source-map-js: 1.2.0 dev: true /css-what@6.1.0: @@ -8219,8 +8067,8 @@ packages: resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} dev: true - /cssdb@7.11.2: - resolution: {integrity: sha512-lhQ32TFkc1X4eTefGfYPvgovRSzIMofHkigfH8nWtyRL4XJLsRhJFreRvEgKzept7x1rjBuy3J/MurXLaFxW/A==} + /cssdb@8.0.0: + resolution: {integrity: sha512-hfpm8VXc7/dhcEWpLvKDLwImOSk1sa2DxL36OEiY/4h2MGfKjPYIMZo4hnEEl+TCJr2GwcX46jF5TafRASDe9w==} dev: true /cssesc@3.0.0: @@ -8233,63 +8081,63 @@ packages: resolution: {integrity: sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==} dev: false - /cssnano-preset-default@6.1.0(postcss@8.4.35): - resolution: {integrity: sha512-4DUXZoDj+PI3fRl3MqMjl9DwLGjcsFP4qt+92nLUcN1RGfw2TY+GwNoG2B38Usu1BrcTs8j9pxNfSusmvtSjfg==} + /cssnano-preset-default@6.1.2(postcss@8.4.38): + resolution: {integrity: sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.4.31 dependencies: browserslist: 4.23.0 - css-declaration-sorter: 7.1.1(postcss@8.4.35) - cssnano-utils: 4.0.2(postcss@8.4.35) - postcss: 8.4.35 - postcss-calc: 9.0.1(postcss@8.4.35) - postcss-colormin: 6.1.0(postcss@8.4.35) - postcss-convert-values: 6.1.0(postcss@8.4.35) - postcss-discard-comments: 6.0.2(postcss@8.4.35) - postcss-discard-duplicates: 6.0.3(postcss@8.4.35) - postcss-discard-empty: 6.0.3(postcss@8.4.35) - postcss-discard-overridden: 6.0.2(postcss@8.4.35) - postcss-merge-longhand: 6.0.4(postcss@8.4.35) - postcss-merge-rules: 6.1.0(postcss@8.4.35) - postcss-minify-font-values: 6.0.3(postcss@8.4.35) - postcss-minify-gradients: 6.0.3(postcss@8.4.35) - postcss-minify-params: 6.1.0(postcss@8.4.35) - postcss-minify-selectors: 6.0.3(postcss@8.4.35) - postcss-normalize-charset: 6.0.2(postcss@8.4.35) - postcss-normalize-display-values: 6.0.2(postcss@8.4.35) - postcss-normalize-positions: 6.0.2(postcss@8.4.35) - postcss-normalize-repeat-style: 6.0.2(postcss@8.4.35) - postcss-normalize-string: 6.0.2(postcss@8.4.35) - postcss-normalize-timing-functions: 6.0.2(postcss@8.4.35) - postcss-normalize-unicode: 6.1.0(postcss@8.4.35) - postcss-normalize-url: 6.0.2(postcss@8.4.35) - postcss-normalize-whitespace: 6.0.2(postcss@8.4.35) - postcss-ordered-values: 6.0.2(postcss@8.4.35) - postcss-reduce-initial: 6.1.0(postcss@8.4.35) - postcss-reduce-transforms: 6.0.2(postcss@8.4.35) - postcss-svgo: 6.0.3(postcss@8.4.35) - postcss-unique-selectors: 6.0.3(postcss@8.4.35) + css-declaration-sorter: 7.2.0(postcss@8.4.38) + cssnano-utils: 4.0.2(postcss@8.4.38) + postcss: 8.4.38 + postcss-calc: 9.0.1(postcss@8.4.38) + postcss-colormin: 6.1.0(postcss@8.4.38) + postcss-convert-values: 6.1.0(postcss@8.4.38) + postcss-discard-comments: 6.0.2(postcss@8.4.38) + postcss-discard-duplicates: 6.0.3(postcss@8.4.38) + postcss-discard-empty: 6.0.3(postcss@8.4.38) + postcss-discard-overridden: 6.0.2(postcss@8.4.38) + postcss-merge-longhand: 6.0.5(postcss@8.4.38) + postcss-merge-rules: 6.1.1(postcss@8.4.38) + postcss-minify-font-values: 6.1.0(postcss@8.4.38) + postcss-minify-gradients: 6.0.3(postcss@8.4.38) + postcss-minify-params: 6.1.0(postcss@8.4.38) + postcss-minify-selectors: 6.0.4(postcss@8.4.38) + postcss-normalize-charset: 6.0.2(postcss@8.4.38) + postcss-normalize-display-values: 6.0.2(postcss@8.4.38) + postcss-normalize-positions: 6.0.2(postcss@8.4.38) + postcss-normalize-repeat-style: 6.0.2(postcss@8.4.38) + postcss-normalize-string: 6.0.2(postcss@8.4.38) + postcss-normalize-timing-functions: 6.0.2(postcss@8.4.38) + postcss-normalize-unicode: 6.1.0(postcss@8.4.38) + postcss-normalize-url: 6.0.2(postcss@8.4.38) + postcss-normalize-whitespace: 6.0.2(postcss@8.4.38) + postcss-ordered-values: 6.0.2(postcss@8.4.38) + postcss-reduce-initial: 6.1.0(postcss@8.4.38) + postcss-reduce-transforms: 6.0.2(postcss@8.4.38) + postcss-svgo: 6.0.3(postcss@8.4.38) + postcss-unique-selectors: 6.0.4(postcss@8.4.38) dev: true - /cssnano-utils@4.0.2(postcss@8.4.35): + /cssnano-utils@4.0.2(postcss@8.4.38): resolution: {integrity: sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.4.31 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true - /cssnano@6.1.0(postcss@8.4.35): - resolution: {integrity: sha512-e2v4w/t3OFM6HTuSweI4RSdABaqgVgHlJp5FZrQsopHnKKHLFIvK2D3C4kHWeFIycN/1L1J5VIrg5KlDzn3r/g==} + /cssnano@6.1.2(postcss@8.4.38): + resolution: {integrity: sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.4.31 dependencies: - cssnano-preset-default: 6.1.0(postcss@8.4.35) + cssnano-preset-default: 6.1.2(postcss@8.4.38) lilconfig: 3.1.1 - postcss: 8.4.35 + postcss: 8.4.38 dev: true /csso@5.0.5: @@ -8317,11 +8165,12 @@ packages: /csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - /d@1.0.1: - resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==} + /d@1.0.2: + resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==} + engines: {node: '>=0.12'} dependencies: es5-ext: 0.10.64 - type: 1.2.0 + type: 2.7.2 /damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} @@ -8345,6 +8194,30 @@ packages: whatwg-url: 11.0.0 dev: true + /data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + /data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + /data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + /dataloader@2.2.2: resolution: {integrity: sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==} dev: false @@ -8353,12 +8226,11 @@ packages: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 dev: true /date-fns@3.3.1: resolution: {integrity: sha512-y8e109LYGgoQDveiEBD3DYXKba1jWf5BA8YU1FL5Tvm0BTdEfy54WLCwnuYWZNnzzvALy/QQ4Hov+Q9RVRv+Zw==} - dev: false /dateformat@4.6.3: resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} @@ -8384,17 +8256,6 @@ packages: dependencies: ms: 2.0.0 - /debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.3 - dev: false - /debug@4.3.4(supports-color@5.5.0): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -8443,10 +8304,10 @@ packages: object-keys: 1.1.1 object.assign: 4.1.4 regexp.prototype.flags: 1.5.2 - side-channel: 1.0.5 + side-channel: 1.0.6 which-boxed-primitive: 1.0.2 - which-collection: 1.0.1 - which-typed-array: 1.1.14 + which-collection: 1.0.2 + which-typed-array: 1.1.15 dev: false /deep-equal@2.2.3: @@ -8467,10 +8328,10 @@ packages: object-keys: 1.1.1 object.assign: 4.1.4 regexp.prototype.flags: 1.5.2 - side-channel: 1.0.5 + side-channel: 1.0.6 which-boxed-primitive: 1.0.2 - which-collection: 1.0.1 - which-typed-array: 1.1.14 + which-collection: 1.0.2 + which-typed-array: 1.1.15 /deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} @@ -8577,6 +8438,11 @@ packages: resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} engines: {node: '>=8'} + /detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + engines: {node: '>=8'} + dev: true + /detect-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} @@ -8646,7 +8512,7 @@ packages: /dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 csstype: 3.1.3 dev: false @@ -8726,7 +8592,7 @@ packages: transitivePeerDependencies: - supports-color - /drizzle-orm@0.29.4(@libsql/client@0.5.2)(@types/pg@8.10.2)(@types/react@18.2.74)(pg@8.11.3)(react@18.2.0): + /drizzle-orm@0.29.4(@libsql/client@0.5.6)(@types/pg@8.10.2)(@types/react@18.2.74)(pg@8.11.3)(react@18.2.0): resolution: {integrity: sha512-ZnSM8TAxFhzH7p1s3+w3pRE/eKaOeNkH9SKitm717pubDVVcV2I0BCDBPGKV+pe02+wMfw37ntlTcCyo2rA3IA==} peerDependencies: '@aws-sdk/client-rds-data': '>=3' @@ -8797,7 +8663,7 @@ packages: sqlite3: optional: true dependencies: - '@libsql/client': 0.5.2 + '@libsql/client': 0.5.6 '@types/pg': 8.10.2 '@types/react': 18.2.74 pg: 8.11.3 @@ -8807,8 +8673,8 @@ packages: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} dev: true - /duplexify@4.1.2: - resolution: {integrity: sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==} + /duplexify@4.1.3: + resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==} dependencies: end-of-stream: 1.4.4 inherits: 2.0.4 @@ -8838,8 +8704,8 @@ packages: /ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - /electron-to-chromium@1.4.686: - resolution: {integrity: sha512-3avY1B+vUzNxEgkBDpKOP8WarvUAEwpRaiCL0He5OKWEFxzaOFiq4WoZEZe7qh0ReS7DiWoHMnYoQCKxNZNzSg==} + /electron-to-chromium@1.4.730: + resolution: {integrity: sha512-oJRPo82XEqtQAobHpJIR3zW5YO3sSRRkPz2an4yxi1UvqhsGm54vR/wzTFV74a3soDOJ8CKW7ajOOX5ESzddwg==} /emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} @@ -8865,8 +8731,8 @@ packages: dependencies: once: 1.4.0 - /enhanced-resolve@5.15.1: - resolution: {integrity: sha512-3d3JRbwsCLJsYgvb6NuWEG44jjPSOMuS73L/6+7BZuoKm3W+qXnSoIYVHi8dG7Qcg4inAY4jbzkZ7MnskePeDg==} + /enhanced-resolve@5.16.0: + resolution: {integrity: sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==} engines: {node: '>=10.13.0'} dependencies: graceful-fs: 4.2.11 @@ -8889,8 +8755,8 @@ packages: resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - /envinfo@7.11.1: - resolution: {integrity: sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg==} + /envinfo@7.12.0: + resolution: {integrity: sha512-Iw9rQJBGpJRd3rwXm9ft/JiGoAZmLxxJZELYDQoPRZ4USVhkKtIcNBPw6U+/K2mBpaqM25JSV6Yl4Az9vO2wJg==} engines: {node: '>=4'} hasBin: true dev: true @@ -8900,16 +8766,20 @@ packages: dependencies: is-arrayish: 0.2.1 - /es-abstract@1.22.5: - resolution: {integrity: sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w==} + /es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.1 arraybuffer.prototype.slice: 1.0.3 available-typed-arrays: 1.0.7 call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 es-define-property: 1.0.0 es-errors: 1.3.0 + es-object-atoms: 1.0.0 es-set-tostringtag: 2.0.3 es-to-primitive: 1.2.1 function.prototype.name: 1.1.6 @@ -8920,10 +8790,11 @@ packages: has-property-descriptors: 1.0.2 has-proto: 1.0.3 has-symbols: 1.0.3 - hasown: 2.0.1 + hasown: 2.0.2 internal-slot: 1.0.7 is-array-buffer: 3.0.4 is-callable: 1.2.7 + is-data-view: 1.0.1 is-negative-zero: 2.0.3 is-regex: 1.1.4 is-shared-array-buffer: 1.0.3 @@ -8934,17 +8805,17 @@ packages: object-keys: 1.1.1 object.assign: 4.1.5 regexp.prototype.flags: 1.5.2 - safe-array-concat: 1.1.0 + safe-array-concat: 1.1.2 safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.8 - string.prototype.trimend: 1.0.7 - string.prototype.trimstart: 1.0.7 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 typed-array-buffer: 1.0.2 typed-array-byte-length: 1.0.1 typed-array-byte-offset: 1.0.2 - typed-array-length: 1.0.5 + typed-array-length: 1.0.6 unbox-primitive: 1.0.2 - which-typed-array: 1.1.14 + which-typed-array: 1.1.15 /es-define-property@1.0.0: resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} @@ -8963,20 +8834,19 @@ packages: get-intrinsic: 1.2.4 has-symbols: 1.0.3 is-arguments: 1.1.1 - is-map: 2.0.2 - is-set: 2.0.2 + is-map: 2.0.3 + is-set: 2.0.3 is-string: 1.0.7 isarray: 2.0.5 stop-iteration-iterator: 1.0.0 - /es-iterator-helpers@1.0.17: - resolution: {integrity: sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ==} + /es-iterator-helpers@1.0.18: + resolution: {integrity: sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==} engines: {node: '>= 0.4'} dependencies: - asynciterator.prototype: 1.0.0 call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.5 + es-abstract: 1.23.3 es-errors: 1.3.0 es-set-tostringtag: 2.0.3 function-bind: 1.1.2 @@ -8987,25 +8857,31 @@ packages: has-symbols: 1.0.3 internal-slot: 1.0.7 iterator.prototype: 1.1.2 - safe-array-concat: 1.1.0 + safe-array-concat: 1.1.2 dev: false - /es-module-lexer@1.4.1: - resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==} + /es-module-lexer@1.5.0: + resolution: {integrity: sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==} dev: true + /es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + /es-set-tostringtag@2.0.3: resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} engines: {node: '>= 0.4'} dependencies: get-intrinsic: 1.2.4 has-tostringtag: 1.0.2 - hasown: 2.0.1 + hasown: 2.0.2 /es-shim-unscopables@1.0.2: resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} dependencies: - hasown: 2.0.1 + hasown: 2.0.2 dev: false /es-to-primitive@1.2.1: @@ -9022,30 +8898,31 @@ packages: requiresBuild: true dependencies: es6-iterator: 2.0.3 - es6-symbol: 3.1.3 + es6-symbol: 3.1.4 esniff: 2.0.1 next-tick: 1.1.0 /es6-iterator@2.0.3: resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} dependencies: - d: 1.0.1 + d: 1.0.2 es5-ext: 0.10.64 - es6-symbol: 3.1.3 + es6-symbol: 3.1.4 - /es6-symbol@3.1.3: - resolution: {integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==} + /es6-symbol@3.1.4: + resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==} + engines: {node: '>=0.12'} dependencies: - d: 1.0.1 + d: 1.0.2 ext: 1.7.0 /es6-weak-map@2.0.3: resolution: {integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==} dependencies: - d: 1.0.1 + d: 1.0.2 es5-ext: 0.10.64 es6-iterator: 2.0.3 - es6-symbol: 3.1.3 + es6-symbol: 3.1.4 /esbuild-register@3.5.0(esbuild@0.19.12): resolution: {integrity: sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==} @@ -9182,7 +9059,7 @@ packages: '@testing-library/dom': optional: true dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 eslint: 8.57.0 requireindex: 1.2.0 dev: false @@ -9215,23 +9092,23 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 aria-query: 5.3.0 - array-includes: 3.1.7 + array-includes: 3.1.8 array.prototype.flatmap: 1.3.2 ast-types-flow: 0.0.8 axe-core: 4.7.0 axobject-query: 3.2.1 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - es-iterator-helpers: 1.0.17 + es-iterator-helpers: 1.0.18 eslint: 8.57.0 - hasown: 2.0.1 + hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 + object.entries: 1.1.8 + object.fromentries: 2.0.8 dev: false /eslint-plugin-node@11.1.0(eslint@8.57.0): @@ -9269,7 +9146,7 @@ packages: dependencies: '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.4) eslint: 8.57.0 - minimatch: 9.0.3 + minimatch: 9.0.4 natural-compare-lite: 1.4.0 transitivePeerDependencies: - supports-color @@ -9305,25 +9182,25 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - array-includes: 3.1.7 - array.prototype.findlast: 1.2.4 + array-includes: 3.1.8 + array.prototype.findlast: 1.2.5 array.prototype.flatmap: 1.3.2 array.prototype.toreversed: 1.1.2 array.prototype.tosorted: 1.1.3 doctrine: 2.1.0 - es-iterator-helpers: 1.0.17 + es-iterator-helpers: 1.0.18 eslint: 8.57.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 - object.hasown: 1.1.3 - object.values: 1.1.7 + object.entries: 1.1.8 + object.fromentries: 2.0.8 + object.hasown: 1.1.4 + object.values: 1.2.0 prop-types: 15.8.1 resolve: 2.0.0-next.5 semver: 6.3.1 - string.prototype.matchall: 4.0.10 + string.prototype.matchall: 4.0.11 dev: false /eslint-plugin-regexp@2.3.0(eslint@8.57.0): @@ -9422,7 +9299,7 @@ packages: resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==} engines: {node: '>=0.10'} dependencies: - d: 1.0.1 + d: 1.0.2 es5-ext: 0.10.64 event-emitter: 0.3.5 type: 2.7.2 @@ -9435,6 +9312,12 @@ packages: acorn-jsx: 5.3.2(acorn@8.11.3) eslint-visitor-keys: 3.4.3 + /esprima-next@6.0.3: + resolution: {integrity: sha512-fVfE+9qIOJSbS3AR7roIuL0gCeS+tC86bJV9GlJtwXCRoo67q6tsGGUjThW+JtR5IQSShnHqaDqX8D0IYDfRGA==} + engines: {node: '>=12'} + hasBin: true + dev: false + /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} @@ -9471,7 +9354,7 @@ packages: /event-emitter@0.3.5: resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} dependencies: - d: 1.0.1 + d: 1.0.2 es5-ext: 0.10.64 /event-target-shim@5.0.1: @@ -9561,16 +9444,16 @@ packages: jest-message-util: 29.7.0 jest-util: 29.7.0 - /express@4.18.2: - resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} + /express@4.19.2: + resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==} engines: {node: '>= 0.10.0'} dependencies: accepts: 1.3.8 array-flatten: 1.1.1 - body-parser: 1.20.1 + body-parser: 1.20.2 content-disposition: 0.5.4 content-type: 1.0.5 - cookie: 0.5.0 + cookie: 0.6.0 cookie-signature: 1.0.6 debug: 2.6.9 depd: 2.0.0 @@ -9635,8 +9518,8 @@ packages: resolution: {integrity: sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==} dev: false - /fast-copy@3.0.1: - resolution: {integrity: sha512-Knr7NOtK3HWRYGtHoJrjkaWepqT8thIVGAwt0p0aUs1zqkAzXZV4vo9fFNwyb5fcqK1GKYFYxldQdIDVKhUAfA==} + /fast-copy@3.0.2: + resolution: {integrity: sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==} /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -9661,8 +9544,8 @@ packages: /fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - /fast-redact@3.3.0: - resolution: {integrity: sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ==} + /fast-redact@3.5.0: + resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} engines: {node: '>=6'} /fast-safe-stringify@2.1.1: @@ -9671,12 +9554,11 @@ packages: /fast-xml-parser@4.2.5: resolution: {integrity: sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==} hasBin: true - requiresBuild: true dependencies: strnum: 1.0.5 - /fast-xml-parser@4.3.5: - resolution: {integrity: sha512-sWvP1Pl8H03B8oFJpFR3HE31HUfwtX7Rlf9BNsvdpujD4n7WMhfmu8h9wOV2u+c1k0ZilTADhPqypzx2J690ZQ==} + /fast-xml-parser@4.3.6: + resolution: {integrity: sha512-M2SovcRxD4+vC493Uc2GZVcZaj66CCJhWurC4viynVSTvrpErCShNcDz1lAho6n9REQKvL/ll4A4/fw6Y9z8nw==} hasBin: true dependencies: strnum: 1.0.5 @@ -9723,7 +9605,7 @@ packages: dependencies: flat-cache: 3.2.0 - /file-loader@6.2.0(webpack@5.90.3): + /file-loader@6.2.0(webpack@5.91.0): resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -9731,7 +9613,7 @@ packages: dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.19.12)(webpack-cli@5.1.4) + webpack: 5.91.0(@swc/core@1.4.13)(esbuild@0.19.12)(webpack-cli@5.1.4) dev: true /file-type@16.5.4: @@ -9881,8 +9763,8 @@ packages: tabbable: 5.3.3 dev: false - /follow-redirects@1.15.5(debug@4.3.4): - resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} + /follow-redirects@1.15.6(debug@4.3.4): + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -9980,7 +9862,6 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true - dev: true optional: true /fsevents@2.3.3: @@ -9999,20 +9880,21 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.5 + es-abstract: 1.23.3 functions-have-names: 1.2.3 /functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - /gaxios@6.3.0: - resolution: {integrity: sha512-p+ggrQw3fBwH2F5N/PAI4k/G/y1art5OxKpb2J2chwNNHM4hHuAOtivjPuirMF4KNKwTTUal/lPfL2+7h2mEcg==} + /gaxios@6.4.0: + resolution: {integrity: sha512-apAloYrY4dlBGlhauDAYSZveafb5U6+L9titing1wox6BvWM0TSXBp603zTrLpyLMGkrcFgohnUN150dFN/zOA==} engines: {node: '>=14'} dependencies: extend: 3.0.2 https-proxy-agent: 7.0.4 is-stream: 2.0.1 node-fetch: 2.7.0 + uuid: 9.0.1 transitivePeerDependencies: - encoding - supports-color @@ -10022,7 +9904,7 @@ packages: resolution: {integrity: sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==} engines: {node: '>=14'} dependencies: - gaxios: 6.3.0 + gaxios: 6.4.0 json-bigint: 1.0.0 transitivePeerDependencies: - encoding @@ -10045,7 +9927,7 @@ packages: function-bind: 1.1.2 has-proto: 1.0.3 has-symbols: 1.0.3 - hasown: 2.0.1 + hasown: 2.0.2 /get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} @@ -10084,8 +9966,8 @@ packages: es-errors: 1.3.0 get-intrinsic: 1.2.4 - /get-tsconfig@4.7.2: - resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} + /get-tsconfig@4.7.3: + resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==} dependencies: resolve-pkg-maps: 1.0.0 @@ -10145,9 +10027,22 @@ packages: dependencies: foreground-child: 3.1.1 jackspeak: 2.3.6 - minimatch: 9.0.3 + minimatch: 9.0.4 minipass: 7.0.4 - path-scurry: 1.10.1 + path-scurry: 1.10.2 + dev: true + + /glob@10.3.12: + resolution: {integrity: sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + dependencies: + foreground-child: 3.1.1 + jackspeak: 2.3.6 + minimatch: 9.0.4 + minipass: 7.0.4 + path-scurry: 1.10.2 + dev: false /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} @@ -10216,13 +10111,13 @@ packages: merge2: 1.4.1 slash: 3.0.0 - /google-auth-library@9.6.3: - resolution: {integrity: sha512-4CacM29MLC2eT9Cey5GDVK4Q8t+MMp8+OEdOaqD9MG6b0dOyLORaaeJMPQ7EESVgm/+z5EKYyFLxgzBJlJgyHQ==} + /google-auth-library@9.7.0: + resolution: {integrity: sha512-I/AvzBiUXDzLOy4iIZ2W+Zq33W4lcukQv1nl7C8WUA6SQwyQwUwu3waNmWNAvzds//FG8SZ+DnKnW/2k6mQS8A==} engines: {node: '>=14'} dependencies: base64-js: 1.5.1 ecdsa-sig-formatter: 1.0.11 - gaxios: 6.3.0 + gaxios: 6.4.0 gcp-metadata: 6.1.0 gtoken: 7.1.0 jws: 4.0.0 @@ -10270,7 +10165,7 @@ packages: /graphql-playground-html@1.6.30: resolution: {integrity: sha512-tpCujhsJMva4aqE8ULnF7/l3xw4sNRZcSHu+R00VV+W0mfp+Q20Plvcrp+5UXD+2yS6oyCXncA+zoQJQqhGCEw==} dependencies: - xss: 1.0.14 + xss: 1.0.15 dev: false /graphql-query-complexity@0.12.0(graphql@16.8.1): @@ -10308,7 +10203,7 @@ packages: resolution: {integrity: sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==} engines: {node: '>=14.0.0'} dependencies: - gaxios: 6.3.0 + gaxios: 6.4.0 jws: 4.0.0 transitivePeerDependencies: - encoding @@ -10375,8 +10270,8 @@ packages: dependencies: has-symbols: 1.0.3 - /hasown@2.0.1: - resolution: {integrity: sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==} + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 @@ -10491,7 +10386,7 @@ packages: resolution: {integrity: sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==} engines: {node: '>= 14'} dependencies: - agent-base: 7.1.0 + agent-base: 7.1.1 debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -10526,13 +10421,13 @@ packages: safer-buffer: 2.1.2 dev: true - /icss-utils@5.1.0(postcss@8.4.35): + /icss-utils@5.1.0(postcss@8.4.38): resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true /ieee754@1.2.1: @@ -10546,6 +10441,14 @@ packages: resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} + /image-size@1.1.1: + resolution: {integrity: sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==} + engines: {node: '>=16.x'} + hasBin: true + dependencies: + queue: 6.0.2 + dev: false + /immer@9.0.21: resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} @@ -10593,8 +10496,8 @@ packages: engines: {node: '>= 0.4'} dependencies: es-errors: 1.3.0 - hasown: 2.0.1 - side-channel: 1.0.5 + hasown: 2.0.2 + side-channel: 1.0.6 /interpret@1.4.0: resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} @@ -10655,7 +10558,7 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} dependencies: - binary-extensions: 2.2.0 + binary-extensions: 2.3.0 /is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} @@ -10668,6 +10571,11 @@ packages: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} dev: false + /is-buffer@2.0.5: + resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} + engines: {node: '>=4'} + dev: true + /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} @@ -10675,7 +10583,13 @@ packages: /is-core-module@2.13.1: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: - hasown: 2.0.1 + hasown: 2.0.2 + + /is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + dependencies: + is-typed-array: 1.1.13 /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} @@ -10746,8 +10660,9 @@ packages: is-docker: 3.0.0 dev: true - /is-map@2.0.2: - resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} + /is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} /is-negative-zero@2.0.3: resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} @@ -10806,8 +10721,9 @@ packages: call-bind: 1.0.7 has-tostringtag: 1.0.2 - /is-set@2.0.2: - resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} + /is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} /is-shared-array-buffer@1.0.3: resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} @@ -10852,23 +10768,25 @@ packages: resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} engines: {node: '>= 0.4'} dependencies: - which-typed-array: 1.1.14 + which-typed-array: 1.1.15 /is-unicode-supported@2.0.0: resolution: {integrity: sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==} engines: {node: '>=18'} dev: false - /is-weakmap@2.0.1: - resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} + /is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: call-bind: 1.0.7 - /is-weakset@2.0.2: - resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} + /is-weakset@2.0.3: + resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 @@ -10933,8 +10851,8 @@ packages: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.24.0 - '@babel/parser': 7.24.0 + '@babel/core': 7.24.4 + '@babel/parser': 7.24.4 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -10945,8 +10863,8 @@ packages: resolution: {integrity: sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==} engines: {node: '>=10'} dependencies: - '@babel/core': 7.24.0 - '@babel/parser': 7.24.0 + '@babel/core': 7.24.4 + '@babel/parser': 7.24.4 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.6.0 @@ -10984,7 +10902,7 @@ packages: define-properties: 1.2.1 get-intrinsic: 1.2.4 has-symbols: 1.0.3 - reflect.getprototypeof: 1.0.5 + reflect.getprototypeof: 1.0.6 set-function-name: 2.0.2 dev: false @@ -11025,7 +10943,7 @@ packages: jest-util: 29.7.0 p-limit: 3.1.0 pretty-format: 29.7.0 - pure-rand: 6.0.4 + pure-rand: 6.1.0 slash: 3.0.0 stack-utils: 2.0.6 transitivePeerDependencies: @@ -11071,11 +10989,11 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 '@types/node': 20.12.5 - babel-jest: 29.7.0(@babel/core@7.24.0) + babel-jest: 29.7.0(@babel/core@7.24.4) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -11094,7 +11012,7 @@ packages: pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@swc/core@1.4.2)(@types/node@20.12.5)(typescript@5.4.4) + ts-node: 10.9.1(@swc/core@1.4.13)(@types/node@20.12.5)(typescript@5.4.4) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -11225,7 +11143,7 @@ packages: resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.2 '@jest/types': 29.6.3 '@types/stack-utils': 2.0.3 chalk: 4.1.2 @@ -11342,15 +11260,15 @@ packages: resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.24.0 - '@babel/generator': 7.23.6 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.24.0) - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.24.0) + '@babel/core': 7.24.4 + '@babel/generator': 7.24.4 + '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.4) '@babel/types': 7.24.0 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.0) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.4) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -11443,8 +11361,8 @@ packages: hasBin: true dev: true - /joi@17.12.2: - resolution: {integrity: sha512-RonXAIzCiHLc8ss3Ibuz45u28GOsWE1UpfDXLbN/9NKbL4tCJf8TWYVKsoYuuh+sAUt7fsSNpA+r2+TBA6Wjmw==} + /joi@17.12.3: + resolution: {integrity: sha512-2RRziagf555owrm9IRVtdKynOBeITiDpuZqIpgwqXShPncPKNiRQoiGsl/T8SQdq+8ugRzH2LqY67irr2y/d+g==} dependencies: '@hapi/hoek': 9.3.0 '@hapi/topo': 5.1.0 @@ -11467,7 +11385,7 @@ packages: dependencies: config-chain: 1.1.13 editorconfig: 1.0.4 - glob: 10.3.10 + glob: 10.3.12 js-cookie: 3.0.5 nopt: 7.2.0 dev: false @@ -11564,7 +11482,7 @@ packages: resolution: {integrity: sha512-cVnggDrVkAAA3OvFfHpFEhOnmcsUpleEKq4d4O8sQWWSH40MBrWstKigVB1kGrgLWzuom+7rRdaCsnBD6VyObQ==} hasBin: true dependencies: - cli-color: 2.0.3 + cli-color: 2.0.4 difflib: 0.2.4 dreamopt: 0.8.0 @@ -11583,9 +11501,9 @@ packages: dependencies: '@bcherny/json-schema-ref-parser': 9.0.9 '@types/json-schema': 7.0.15 - '@types/lodash': 4.14.202 + '@types/lodash': 4.17.0 '@types/prettier': 2.7.3 - cli-color: 2.0.3 + cli-color: 2.0.4 get-stdin: 8.0.0 glob: 7.2.3 glob-promise: 4.2.2(glob@7.2.3) @@ -11653,10 +11571,10 @@ packages: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} dependencies: - array-includes: 3.1.7 + array-includes: 3.1.8 array.prototype.flat: 1.3.2 object.assign: 4.1.4 - object.values: 1.1.7 + object.values: 1.2.0 dev: false /jwa@1.4.1: @@ -11748,29 +11666,29 @@ packages: /lexical@0.13.1: resolution: {integrity: sha512-jaqRYzVEfBKbX4FwYpd/g+MyOjRaraAel0iQsTrwvx3hyN0bswUZuzb6H6nGlFSjcdrc77wKpyKwoWj4aUd+Bw==} - /lib0@0.2.90: - resolution: {integrity: sha512-iQmk+fThPq1ZTD2cFUu8xN6JLp9gFWnjs8auR6hmI6QQXoy6sSEh85uKcdkqpuEnkhhwQm4GSlKHOYfSCVp0Mw==} + /lib0@0.2.93: + resolution: {integrity: sha512-M5IKsiFJYulS+8Eal8f+zAqf5ckm1vffW0fFDxfgxJ+uiVopvDdd3PxJmz0GsVi3YNO7QCFSq0nAsiDmNhLj9Q==} engines: {node: '>=16'} hasBin: true dependencies: isomorphic.js: 0.2.5 dev: false - /libsql@0.3.4: - resolution: {integrity: sha512-lbmNw2H7e2UrBoV0gtvivsBoa8bxuApoYEawAYzwHW+fY51p9VGMp6kS18iSs1QFAn7Ck8YXpT3l29RT2Yh0EQ==} - cpu: [x64, arm64] + /libsql@0.3.10: + resolution: {integrity: sha512-/8YMTbwWFPmrDWY+YFK3kYqVPFkMgQre0DGmBaOmjogMdSe+7GHm1/q9AZ61AWkEub/vHmi+bA4tqIzVhKnqzg==} + cpu: [x64, arm64, wasm32] os: [darwin, linux, win32] dependencies: '@neon-rs/load': 0.0.4 detect-libc: 2.0.2 optionalDependencies: - '@libsql/darwin-arm64': 0.3.4 - '@libsql/darwin-x64': 0.3.4 - '@libsql/linux-arm64-gnu': 0.3.4 - '@libsql/linux-arm64-musl': 0.3.4 - '@libsql/linux-x64-gnu': 0.3.4 - '@libsql/linux-x64-musl': 0.3.4 - '@libsql/win32-x64-msvc': 0.3.4 + '@libsql/darwin-arm64': 0.3.10 + '@libsql/darwin-x64': 0.3.10 + '@libsql/linux-arm64-gnu': 0.3.10 + '@libsql/linux-arm64-musl': 0.3.10 + '@libsql/linux-x64-gnu': 0.3.10 + '@libsql/linux-x64-musl': 0.3.10 + '@libsql/win32-x64-msvc': 0.3.10 /lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} @@ -11995,7 +11913,7 @@ packages: /memoizee@0.4.15: resolution: {integrity: sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==} dependencies: - d: 1.0.1 + d: 1.0.2 es5-ext: 0.10.64 es6-weak-map: 2.0.3 event-emitter: 0.3.5 @@ -12094,7 +12012,7 @@ packages: engines: {node: '>=4'} dev: true - /mini-css-extract-plugin@1.6.2(webpack@5.90.3): + /mini-css-extract-plugin@1.6.2(webpack@5.91.0): resolution: {integrity: sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -12102,7 +12020,7 @@ packages: dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.19.12)(webpack-cli@5.1.4) + webpack: 5.91.0(@swc/core@1.4.13)(esbuild@0.19.12)(webpack-cli@5.1.4) webpack-sources: 1.4.3 dev: true @@ -12135,6 +12053,13 @@ packages: engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 + dev: false + + /minimatch@9.0.4: + resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} @@ -12161,15 +12086,15 @@ packages: '@types/whatwg-url': 8.2.2 whatwg-url: 11.0.0 - /mongodb-memory-server-core@9.1.7: - resolution: {integrity: sha512-q8geqCmt5hGuxaDhRo03ZUB0ITr6lnJ3jffdNiC4nDq13WbHUfY2A1RQq3OHDbdrY6aRYvZphx2bcXYBFRis3A==} + /mongodb-memory-server-core@9.1.8: + resolution: {integrity: sha512-iCWwaP7De4lm1lRCUKB2ffUYr6GB0I/cj6fK0NV9dgwc9fA3xapHTTT/cPYRNx29M5gmAOSaOpUgjP7i2GZ/LQ==} engines: {node: '>=14.20.1'} dependencies: async-mutex: 0.4.1 camelcase: 6.3.0 debug: 4.3.4(supports-color@5.5.0) find-cache-dir: 3.3.2 - follow-redirects: 1.15.5(debug@4.3.4) + follow-redirects: 1.15.6(debug@4.3.4) https-proxy-agent: 7.0.4 mongodb: 5.9.2 new-find-package-json: 2.0.0 @@ -12186,12 +12111,12 @@ packages: - supports-color dev: true - /mongodb-memory-server@9.1.7: - resolution: {integrity: sha512-Yxw1cUMoCKTK6jxk4cKG07P+Z/qOmuCVyt3ScIDaoHeOCbOlg2sEtXYO9vEK/tzpj/1KHdDStU2oYrsJ8Fvm0A==} + /mongodb-memory-server@9.1.8: + resolution: {integrity: sha512-QumPTOlWWWzgW6dtV4bf+ZFdTxenHSSGS4ZT85Vbb+FzPVoOtfcFwYlSfC9IM4e2nw7xvnQZvWtILYseO6HE9Q==} engines: {node: '>=14.20.1'} requiresBuild: true dependencies: - mongodb-memory-server-core: 9.1.7 + mongodb-memory-server-core: 9.1.8 tslib: 2.6.2 transitivePeerDependencies: - '@aws-sdk/credential-providers' @@ -12210,8 +12135,8 @@ packages: mongodb-connection-string-url: 2.6.0 socks: 2.8.1 optionalDependencies: - '@aws-sdk/credential-providers': 3.525.0 - '@mongodb-js/saslprep': 1.1.4 + '@aws-sdk/credential-providers': 3.549.0 + '@mongodb-js/saslprep': 1.1.5 transitivePeerDependencies: - aws-crt @@ -12240,7 +12165,7 @@ packages: mongodb-connection-string-url: 2.6.0 socks: 2.8.1 optionalDependencies: - '@mongodb-js/saslprep': 1.1.4 + '@mongodb-js/saslprep': 1.1.5 dev: true /mongoose-paginate-v2@1.7.22: @@ -12313,18 +12238,6 @@ packages: /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - /needle@2.9.1: - resolution: {integrity: sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==} - engines: {node: '>= 4.4.x'} - hasBin: true - dependencies: - debug: 3.2.7 - iconv-lite: 0.4.24 - sax: 1.3.0 - transitivePeerDependencies: - - supports-color - dev: false - /negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} @@ -12345,87 +12258,51 @@ packages: /next-tick@1.1.0: resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} - /next@14.2.0-canary.22(@babel/core@7.24.0)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-nCqEuJLHRFDWpMfcql3D8V88GAGoEeZobxSCgi6ablFWMkzBGgrwZmsJi41OgtJnWwfF/c56MPXAgkFqbBcwyw==} + /next@14.2.0(@babel/core@7.24.4)(@playwright/test@1.43.0)(react-dom@18.2.0)(react@18.2.0)(sass@1.74.1): + resolution: {integrity: sha512-2T41HqJdKPqheR27ll7MFZ3gtTYvGew7cUc0PwPSyK9Ao5vvwpf9bYfP4V5YBGLckHF2kEGvrLte5BqLSv0s8g==} engines: {node: '>=18.17.0'} hasBin: true peerDependencies: '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.41.2 react: ^18.2.0 react-dom: ^18.2.0 sass: ^1.3.0 peerDependenciesMeta: '@opentelemetry/api': optional: true - sass: - optional: true - dependencies: - '@next/env': 14.2.0-canary.22 - '@swc/helpers': 0.5.5 - busboy: 1.6.0 - caniuse-lite: 1.0.30001591 - graceful-fs: 4.2.11 - postcss: 8.4.31 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(@babel/core@7.24.0)(react@18.2.0) - optionalDependencies: - '@next/swc-darwin-arm64': 14.2.0-canary.22 - '@next/swc-darwin-x64': 14.2.0-canary.22 - '@next/swc-linux-arm64-gnu': 14.2.0-canary.22 - '@next/swc-linux-arm64-musl': 14.2.0-canary.22 - '@next/swc-linux-x64-gnu': 14.2.0-canary.22 - '@next/swc-linux-x64-musl': 14.2.0-canary.22 - '@next/swc-win32-arm64-msvc': 14.2.0-canary.22 - '@next/swc-win32-ia32-msvc': 14.2.0-canary.22 - '@next/swc-win32-x64-msvc': 14.2.0-canary.22 - transitivePeerDependencies: - - '@babel/core' - - babel-plugin-macros - dev: true - - /next@14.2.0-canary.23(@babel/core@7.24.0)(react-dom@18.2.0)(react@18.2.0)(sass@1.71.1): - resolution: {integrity: sha512-HuQYIeSlmBmTueVIxn0Zjxx5I4MD6vG3p6AsFySTF7/hMSF5qFUCHGIj3YJRWsDcUw/LQhuGPNLaGUg119YegQ==} - engines: {node: '>=18.17.0'} - hasBin: true - peerDependencies: - '@opentelemetry/api': ^1.1.0 - react: ^18.2.0 - react-dom: ^18.2.0 - sass: ^1.3.0 - peerDependenciesMeta: - '@opentelemetry/api': + '@playwright/test': optional: true sass: optional: true dependencies: - '@next/env': 14.2.0-canary.23 + '@next/env': 14.2.0 + '@playwright/test': 1.43.0 '@swc/helpers': 0.5.5 busboy: 1.6.0 - caniuse-lite: 1.0.30001591 + caniuse-lite: 1.0.30001607 graceful-fs: 4.2.11 postcss: 8.4.31 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - sass: 1.71.1 - styled-jsx: 5.1.1(@babel/core@7.24.0)(react@18.2.0) + sass: 1.74.1 + styled-jsx: 5.1.1(@babel/core@7.24.4)(react@18.2.0) optionalDependencies: - '@next/swc-darwin-arm64': 14.2.0-canary.23 - '@next/swc-darwin-x64': 14.2.0-canary.23 - '@next/swc-linux-arm64-gnu': 14.2.0-canary.23 - '@next/swc-linux-arm64-musl': 14.2.0-canary.23 - '@next/swc-linux-x64-gnu': 14.2.0-canary.23 - '@next/swc-linux-x64-musl': 14.2.0-canary.23 - '@next/swc-win32-arm64-msvc': 14.2.0-canary.23 - '@next/swc-win32-ia32-msvc': 14.2.0-canary.23 - '@next/swc-win32-x64-msvc': 14.2.0-canary.23 + '@next/swc-darwin-arm64': 14.2.0 + '@next/swc-darwin-x64': 14.2.0 + '@next/swc-linux-arm64-gnu': 14.2.0 + '@next/swc-linux-arm64-musl': 14.2.0 + '@next/swc-linux-x64-gnu': 14.2.0 + '@next/swc-linux-x64-musl': 14.2.0 + '@next/swc-win32-arm64-msvc': 14.2.0 + '@next/swc-win32-ia32-msvc': 14.2.0 + '@next/swc-win32-x64-msvc': 14.2.0 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros - dev: false - /node-abi@3.56.0: - resolution: {integrity: sha512-fZjdhDOeRcaS+rcpve7XuwHBmktS1nS1gzgghwKUQQ8nTy2FdSDr6ZT8k6YhvlJeHmmQMYiT/IH9hfco5zeW2Q==} + /node-abi@3.57.0: + resolution: {integrity: sha512-Dp+A9JWxRaKuHP35H77I4kCKesDy5HUDEmScia2FyncMTOXASMyg251F5PhFoDA5uqBrDDffiLpbqnrZmNXW+g==} engines: {node: '>=10'} dependencies: semver: 7.6.0 @@ -12627,41 +12504,44 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.5 + es-abstract: 1.23.3 dev: true - /object.entries@1.1.7: - resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} + /object.entries@1.1.8: + resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.5 + es-object-atoms: 1.0.0 dev: false - /object.fromentries@2.0.7: - resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} + /object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.5 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 dev: false - /object.hasown@1.1.3: - resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} + /object.hasown@1.1.4: + resolution: {integrity: sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==} + engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.1 - es-abstract: 1.22.5 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 dev: false - /object.values@1.1.7: - resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + /object.values@1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.5 + es-object-atoms: 1.0.0 dev: false /obuf@1.1.2: @@ -12814,7 +12694,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.2 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -12823,7 +12703,7 @@ packages: resolution: {integrity: sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==} engines: {node: '>=16'} dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.2 error-ex: 1.3.2 json-parse-even-better-errors: 3.0.1 lines-and-columns: 2.0.4 @@ -12891,8 +12771,8 @@ packages: /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - /path-scurry@1.10.1: - resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} + /path-scurry@1.10.2: + resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==} engines: {node: '>=16 || 14 >=14.17'} dependencies: lru-cache: 10.2.0 @@ -12902,8 +12782,8 @@ packages: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} dev: false - /path-to-regexp@6.2.1: - resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==} + /path-to-regexp@6.2.2: + resolution: {integrity: sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==} dev: false /path-type@4.0.0: @@ -12933,8 +12813,8 @@ packages: requiresBuild: true optional: true - /pg-connection-string@2.6.2: - resolution: {integrity: sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==} + /pg-connection-string@2.6.4: + resolution: {integrity: sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA==} /pg-int8@1.0.1: resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} @@ -12944,15 +12824,15 @@ packages: resolution: {integrity: sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==} engines: {node: '>=4'} - /pg-pool@3.6.1(pg@8.11.3): - resolution: {integrity: sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==} + /pg-pool@3.6.2(pg@8.11.3): + resolution: {integrity: sha512-Htjbg8BlwXqSBQ9V8Vjtc+vzf/6fVUuak/3/XXKA9oxZprwW3IMDQTGHP+KDmVL7rtd+R1QjbnCFPuTHm3G4hg==} peerDependencies: pg: '>=8.0' dependencies: pg: 8.11.3 - /pg-protocol@1.6.0: - resolution: {integrity: sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==} + /pg-protocol@1.6.1: + resolution: {integrity: sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg==} /pg-types@2.2.0: resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} @@ -12987,9 +12867,9 @@ packages: dependencies: buffer-writer: 2.0.0 packet-reader: 1.0.0 - pg-connection-string: 2.6.2 - pg-pool: 3.6.1(pg@8.11.3) - pg-protocol: 1.6.0 + pg-connection-string: 2.6.4 + pg-pool: 3.6.2(pg@8.11.3) + pg-protocol: 1.6.1 pg-types: 2.2.0 pgpass: 1.0.5 optionalDependencies: @@ -13036,7 +12916,7 @@ packages: dependencies: colorette: 2.0.20 dateformat: 4.6.3 - fast-copy: 3.0.1 + fast-copy: 3.0.2 fast-safe-stringify: 2.1.1 help-me: 4.2.0 joycon: 3.1.1 @@ -13046,7 +12926,7 @@ packages: pump: 3.0.0 readable-stream: 4.5.2 secure-json-parse: 2.7.0 - sonic-boom: 3.8.0 + sonic-boom: 3.8.1 strip-json-comments: 3.1.1 /pino-std-serializers@6.2.2: @@ -13057,7 +12937,7 @@ packages: hasBin: true dependencies: atomic-sleep: 1.0.0 - fast-redact: 3.3.0 + fast-redact: 3.5.0 on-exit-leak-free: 2.1.2 pino-abstract-transport: 1.0.0 pino-std-serializers: 6.2.2 @@ -13065,7 +12945,7 @@ packages: quick-format-unescaped: 4.0.4 real-require: 0.2.0 safe-stable-stringify: 2.4.3 - sonic-boom: 3.8.0 + sonic-boom: 3.8.1 thread-stream: 2.4.1 /pirates@4.0.6: @@ -13089,7 +12969,6 @@ packages: resolution: {integrity: sha512-iWFjyBUH97+pUFiyTqSLd8cDMMOS0r2ZYz2qEsPjH8/bX++sbIJT35MSwKnp1r/OQBAqC5XO99xFbJ9XClhf4w==} engines: {node: '>=16'} hasBin: true - dev: true /playwright@1.43.0(patch_hash=smjs6qro5qsqddamrqipwrbi5i): resolution: {integrity: sha512-SiOKHbVjTSf6wHuGCbqrEyzlm6qvXcv7mENP+OZon1I07brfZLGdfWV0l/efAzVx7TF3Z45ov1gPEkku9q25YQ==} @@ -13099,7 +12978,6 @@ packages: playwright-core: 1.43.0 optionalDependencies: fsevents: 2.3.2 - dev: true patched: true /pluralize@8.0.0: @@ -13111,74 +12989,74 @@ packages: resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} engines: {node: '>= 0.4'} - /postcss-attribute-case-insensitive@6.0.3(postcss@8.4.35): + /postcss-attribute-case-insensitive@6.0.3(postcss@8.4.38): resolution: {integrity: sha512-KHkmCILThWBRtg+Jn1owTnHPnFit4OkqS+eKiGEOPIGke54DCeYGJ6r0Fx/HjfE9M9kznApCLcU0DvnPchazMQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 dev: true - /postcss-calc@9.0.1(postcss@8.4.35): + /postcss-calc@9.0.1(postcss@8.4.38): resolution: {integrity: sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.2 dependencies: - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 postcss-value-parser: 4.2.0 dev: true - /postcss-clamp@4.1.0(postcss@8.4.35): + /postcss-clamp@4.1.0(postcss@8.4.38): resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==} engines: {node: '>=7.6.0'} peerDependencies: postcss: ^8.4.6 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /postcss-color-functional-notation@6.0.5(postcss@8.4.35): - resolution: {integrity: sha512-aTFsIy89ftjyclwUHRwvz1IxucLzVrzmmcXmtbPWT9GdyYeaJEKeAwbaZzOZn7AQlXg4xfwgkYhKsofC4aLIwg==} + /postcss-color-functional-notation@6.0.8(postcss@8.4.38): + resolution: {integrity: sha512-BilFPTHcfWEnuQeqL83nbSPVK3tcU57S60aOrqgditarNDzOojyF0Gdc2Ur5L+zox366QjrCe0rOBLDO2pNvRQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/css-color-parser': 1.5.2(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3) - '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3) - '@csstools/css-tokenizer': 2.2.3 - '@csstools/postcss-progressive-custom-properties': 3.1.0(postcss@8.4.35) - '@csstools/utilities': 1.0.0(postcss@8.4.35) - postcss: 8.4.35 + '@csstools/css-color-parser': 1.6.3(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4) + '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4) + '@csstools/css-tokenizer': 2.2.4 + '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.4.38) + '@csstools/utilities': 1.0.0(postcss@8.4.38) + postcss: 8.4.38 dev: true - /postcss-color-hex-alpha@9.0.4(postcss@8.4.35): + /postcss-color-hex-alpha@9.0.4(postcss@8.4.38): resolution: {integrity: sha512-XQZm4q4fNFqVCYMGPiBjcqDhuG7Ey2xrl99AnDJMyr5eDASsAGalndVgHZF8i97VFNy1GQeZc4q2ydagGmhelQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/utilities': 1.0.0(postcss@8.4.35) - postcss: 8.4.35 + '@csstools/utilities': 1.0.0(postcss@8.4.38) + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /postcss-color-rebeccapurple@9.0.3(postcss@8.4.35): + /postcss-color-rebeccapurple@9.0.3(postcss@8.4.38): resolution: {integrity: sha512-ruBqzEFDYHrcVq3FnW3XHgwRqVMrtEPLBtD7K2YmsLKVc2jbkxzzNEctJKsPCpDZ+LeMHLKRDoSShVefGc+CkQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/utilities': 1.0.0(postcss@8.4.35) - postcss: 8.4.35 + '@csstools/utilities': 1.0.0(postcss@8.4.38) + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /postcss-colormin@6.1.0(postcss@8.4.35): + /postcss-colormin@6.1.0(postcss@8.4.38): resolution: {integrity: sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: @@ -13187,182 +13065,182 @@ packages: browserslist: 4.23.0 caniuse-api: 3.0.0 colord: 2.9.3 - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /postcss-convert-values@6.1.0(postcss@8.4.35): + /postcss-convert-values@6.1.0(postcss@8.4.38): resolution: {integrity: sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.4.31 dependencies: browserslist: 4.23.0 - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /postcss-custom-media@10.0.3(postcss@8.4.35): - resolution: {integrity: sha512-wfJ9nKpLn/Qy7LASKu0Rj9Iq2uMzlRt27P4FAE1889IKRMdYUgy8SqvdXfAOs7LJLQX9Fjm0mZ+TSFphD/mKwA==} + /postcss-custom-media@10.0.4(postcss@8.4.38): + resolution: {integrity: sha512-Ubs7O3wj2prghaKRa68VHBvuy3KnTQ0zbGwqDYY1mntxJD0QL2AeiAy+AMfl3HBedTCVr2IcFNktwty9YpSskA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/cascade-layer-name-parser': 1.0.8(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3) - '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3) - '@csstools/css-tokenizer': 2.2.3 - '@csstools/media-query-list-parser': 2.1.8(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3) - postcss: 8.4.35 + '@csstools/cascade-layer-name-parser': 1.0.9(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4) + '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4) + '@csstools/css-tokenizer': 2.2.4 + '@csstools/media-query-list-parser': 2.1.9(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4) + postcss: 8.4.38 dev: true - /postcss-custom-properties@13.3.5(postcss@8.4.35): - resolution: {integrity: sha512-xHg8DTCMfN2nrqs2CQTF+0m5jgnzKL5zrW5Y05KF6xBRO0uDPxiplBm/xcr1o49SLbyJXkMuaRJKhRzkrquKnQ==} + /postcss-custom-properties@13.3.6(postcss@8.4.38): + resolution: {integrity: sha512-vVVIwQbJiIz+PBLMIWA6XMi53Zg66/f474KolA7x0Das6EwkATc/9ZvM6zZx2gs7ZhcgVHjmWBbHkK9FlCgLeA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/cascade-layer-name-parser': 1.0.8(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3) - '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3) - '@csstools/css-tokenizer': 2.2.3 - '@csstools/utilities': 1.0.0(postcss@8.4.35) - postcss: 8.4.35 + '@csstools/cascade-layer-name-parser': 1.0.9(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4) + '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4) + '@csstools/css-tokenizer': 2.2.4 + '@csstools/utilities': 1.0.0(postcss@8.4.38) + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /postcss-custom-selectors@7.1.7(postcss@8.4.35): - resolution: {integrity: sha512-N19MpExaR+hYTXU59VO02xE42zLoAUYSVcupwkKlWWLteOb+sWCWHw5FhV7u7gVLTzaGULy7nZP3DNTHgOZAPA==} + /postcss-custom-selectors@7.1.8(postcss@8.4.38): + resolution: {integrity: sha512-fqDkGSEsO7+oQaqdRdR8nwwqH+N2uk6LE/2g4myVJJYz/Ly418lHKEleKTdV/GzjBjFcG4n0dbfuH/Pd2BE8YA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/cascade-layer-name-parser': 1.0.8(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3) - '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3) - '@csstools/css-tokenizer': 2.2.3 - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + '@csstools/cascade-layer-name-parser': 1.0.9(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4) + '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4) + '@csstools/css-tokenizer': 2.2.4 + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 dev: true - /postcss-dir-pseudo-class@8.0.1(postcss@8.4.35): + /postcss-dir-pseudo-class@8.0.1(postcss@8.4.38): resolution: {integrity: sha512-uULohfWBBVoFiZXgsQA24JV6FdKIidQ+ZqxOouhWwdE+qJlALbkS5ScB43ZTjPK+xUZZhlaO/NjfCt5h4IKUfw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 dev: true - /postcss-discard-comments@6.0.2(postcss@8.4.35): + /postcss-discard-comments@6.0.2(postcss@8.4.38): resolution: {integrity: sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.4.31 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true - /postcss-discard-duplicates@6.0.3(postcss@8.4.35): + /postcss-discard-duplicates@6.0.3(postcss@8.4.38): resolution: {integrity: sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.4.31 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true - /postcss-discard-empty@6.0.3(postcss@8.4.35): + /postcss-discard-empty@6.0.3(postcss@8.4.38): resolution: {integrity: sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.4.31 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true - /postcss-discard-overridden@6.0.2(postcss@8.4.35): + /postcss-discard-overridden@6.0.2(postcss@8.4.38): resolution: {integrity: sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.4.31 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true - /postcss-double-position-gradients@5.0.4(postcss@8.4.35): - resolution: {integrity: sha512-xOH2QhazCPeYR+ziYaDcGlpo7Bpw8PVoggOFfU/xPkmBRUQH8MR2eWoPY1CZM93CB0WKs2mxq3ORo83QGIooLw==} + /postcss-double-position-gradients@5.0.6(postcss@8.4.38): + resolution: {integrity: sha512-QJ+089FKMaqDxOhhIHsJrh4IP7h4PIHNC5jZP5PMmnfUScNu8Hji2lskqpFWCvu+5sj+2EJFyzKd13sLEWOZmQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/postcss-progressive-custom-properties': 3.1.0(postcss@8.4.35) - '@csstools/utilities': 1.0.0(postcss@8.4.35) - postcss: 8.4.35 + '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.4.38) + '@csstools/utilities': 1.0.0(postcss@8.4.38) + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /postcss-focus-visible@9.0.1(postcss@8.4.35): + /postcss-focus-visible@9.0.1(postcss@8.4.38): resolution: {integrity: sha512-N2VQ5uPz3Z9ZcqI5tmeholn4d+1H14fKXszpjogZIrFbhaq0zNAtq8sAnw6VLiqGbL8YBzsnu7K9bBkTqaRimQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 dev: true - /postcss-focus-within@8.0.1(postcss@8.4.35): + /postcss-focus-within@8.0.1(postcss@8.4.38): resolution: {integrity: sha512-NFU3xcY/xwNaapVb+1uJ4n23XImoC86JNwkY/uduytSl2s9Ekc2EpzmRR63+ExitnW3Mab3Fba/wRPCT5oDILA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 dev: true - /postcss-font-variant@5.0.0(postcss@8.4.35): + /postcss-font-variant@5.0.0(postcss@8.4.38): resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true - /postcss-gap-properties@5.0.1(postcss@8.4.35): + /postcss-gap-properties@5.0.1(postcss@8.4.38): resolution: {integrity: sha512-k2z9Cnngc24c0KF4MtMuDdToROYqGMMUQGcE6V0odwjHyOHtaDBlLeRBV70y9/vF7KIbShrTRZ70JjsI1BZyWw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true - /postcss-image-set-function@6.0.3(postcss@8.4.35): + /postcss-image-set-function@6.0.3(postcss@8.4.38): resolution: {integrity: sha512-i2bXrBYzfbRzFnm+pVuxVePSTCRiNmlfssGI4H0tJQvDue+yywXwUxe68VyzXs7cGtMaH6MCLY6IbCShrSroCw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/utilities': 1.0.0(postcss@8.4.35) - postcss: 8.4.35 + '@csstools/utilities': 1.0.0(postcss@8.4.38) + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /postcss-lab-function@6.0.10(postcss@8.4.35): - resolution: {integrity: sha512-Csvw/CwwuwTojK2O3Ad0SvYKrfnAKy+uvT+1Fjk6igR+n8gHuJHIwdj1A2s46EZZojg3RkibdMBuv1vMvR6Sng==} + /postcss-lab-function@6.0.13(postcss@8.4.38): + resolution: {integrity: sha512-tzEThi3prSyomnVqaAU+k/YJib4rxeeTKVfMt+mPcEugFgp0t6xRjoc7fzaWCoEwYLC6GxGLD8/Ugx8COCqabw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/css-color-parser': 1.5.2(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3) - '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3) - '@csstools/css-tokenizer': 2.2.3 - '@csstools/postcss-progressive-custom-properties': 3.1.0(postcss@8.4.35) - '@csstools/utilities': 1.0.0(postcss@8.4.35) - postcss: 8.4.35 + '@csstools/css-color-parser': 1.6.3(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4) + '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4) + '@csstools/css-tokenizer': 2.2.4 + '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.4.38) + '@csstools/utilities': 1.0.0(postcss@8.4.38) + postcss: 8.4.38 dev: true - /postcss-loader@8.1.1(postcss@8.4.35)(typescript@5.4.4)(webpack@5.90.3): + /postcss-loader@8.1.1(postcss@8.4.38)(typescript@5.4.4)(webpack@5.91.0): resolution: {integrity: sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==} engines: {node: '>= 18.12.0'} peerDependencies: @@ -13377,362 +13255,362 @@ packages: dependencies: cosmiconfig: 9.0.0(typescript@5.4.4) jiti: 1.21.0 - postcss: 8.4.35 + postcss: 8.4.38 semver: 7.6.0 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.19.12)(webpack-cli@5.1.4) + webpack: 5.91.0(@swc/core@1.4.13)(esbuild@0.19.12)(webpack-cli@5.1.4) transitivePeerDependencies: - typescript dev: true - /postcss-logical@7.0.1(postcss@8.4.35): + /postcss-logical@7.0.1(postcss@8.4.38): resolution: {integrity: sha512-8GwUQZE0ri0K0HJHkDv87XOLC8DE0msc+HoWLeKdtjDZEwpZ5xuK3QdV6FhmHSQW40LPkg43QzvATRAI3LsRkg==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /postcss-merge-longhand@6.0.4(postcss@8.4.35): - resolution: {integrity: sha512-vAfWGcxUUGlFiPM3nDMZA+/Yo9sbpc3JNkcYZez8FfJDv41Dh7tAgA3QGVTocaHCZZL6aXPXPOaBMJsjujodsA==} + /postcss-merge-longhand@6.0.5(postcss@8.4.38): + resolution: {integrity: sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.4.31 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 - stylehacks: 6.1.0(postcss@8.4.35) + stylehacks: 6.1.1(postcss@8.4.38) dev: true - /postcss-merge-rules@6.1.0(postcss@8.4.35): - resolution: {integrity: sha512-lER+W3Gr6XOvxOYk1Vi/6UsAgKMg6MDBthmvbNqi2XxAk/r9XfhdYZSigfWjuWWn3zYw2wLelvtM8XuAEFqRkA==} + /postcss-merge-rules@6.1.1(postcss@8.4.38): + resolution: {integrity: sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.4.31 dependencies: browserslist: 4.23.0 caniuse-api: 3.0.0 - cssnano-utils: 4.0.2(postcss@8.4.35) - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + cssnano-utils: 4.0.2(postcss@8.4.38) + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 dev: true - /postcss-minify-font-values@6.0.3(postcss@8.4.35): - resolution: {integrity: sha512-SmAeTA1We5rMnN3F8X9YBNo9bj9xB4KyDHnaNJnBfQIPi+60fNiR9OTRnIaMqkYzAQX0vObIw4Pn0vuKEOettg==} + /postcss-minify-font-values@6.1.0(postcss@8.4.38): + resolution: {integrity: sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.4.31 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /postcss-minify-gradients@6.0.3(postcss@8.4.35): + /postcss-minify-gradients@6.0.3(postcss@8.4.38): resolution: {integrity: sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.4.31 dependencies: colord: 2.9.3 - cssnano-utils: 4.0.2(postcss@8.4.35) - postcss: 8.4.35 + cssnano-utils: 4.0.2(postcss@8.4.38) + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /postcss-minify-params@6.1.0(postcss@8.4.35): + /postcss-minify-params@6.1.0(postcss@8.4.38): resolution: {integrity: sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.4.31 dependencies: browserslist: 4.23.0 - cssnano-utils: 4.0.2(postcss@8.4.35) - postcss: 8.4.35 + cssnano-utils: 4.0.2(postcss@8.4.38) + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /postcss-minify-selectors@6.0.3(postcss@8.4.35): - resolution: {integrity: sha512-IcV7ZQJcaXyhx4UBpWZMsinGs2NmiUC60rJSkyvjPCPqhNjVGsrJUM+QhAtCaikZ0w0/AbZuH4wVvF/YMuMhvA==} + /postcss-minify-selectors@6.0.4(postcss@8.4.38): + resolution: {integrity: sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.4.31 dependencies: - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 dev: true - /postcss-modules-extract-imports@3.0.0(postcss@8.4.35): - resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} + /postcss-modules-extract-imports@3.1.0(postcss@8.4.38): + resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true - /postcss-modules-local-by-default@4.0.4(postcss@8.4.35): - resolution: {integrity: sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==} + /postcss-modules-local-by-default@4.0.5(postcss@8.4.38): + resolution: {integrity: sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.35) - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + icss-utils: 5.1.0(postcss@8.4.38) + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 postcss-value-parser: 4.2.0 dev: true - /postcss-modules-scope@3.1.1(postcss@8.4.35): - resolution: {integrity: sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==} + /postcss-modules-scope@3.2.0(postcss@8.4.38): + resolution: {integrity: sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 dev: true - /postcss-modules-values@4.0.0(postcss@8.4.35): + /postcss-modules-values@4.0.0(postcss@8.4.38): resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.35) - postcss: 8.4.35 + icss-utils: 5.1.0(postcss@8.4.38) + postcss: 8.4.38 dev: true - /postcss-nesting@12.1.0(postcss@8.4.35): - resolution: {integrity: sha512-QOYnosaZ+mlP6plQrAxFw09UUp2Sgtxj1BVHN+rSVbtV0Yx48zRt9/9F/ZOoxOKBBEsaJk2MYhhVRjeRRw5yuw==} + /postcss-nesting@12.1.1(postcss@8.4.38): + resolution: {integrity: sha512-qc74KvIAQNa5ujZKG1UV286dhaDW6basbUy2i9AzNU/T8C9hpvGu9NZzm1SfePe2yP7sPYgpA8d4sPVopn2Hhw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/selector-resolve-nested': 1.1.0(postcss-selector-parser@6.0.15) - '@csstools/selector-specificity': 3.0.2(postcss-selector-parser@6.0.15) - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + '@csstools/selector-resolve-nested': 1.1.0(postcss-selector-parser@6.0.16) + '@csstools/selector-specificity': 3.0.3(postcss-selector-parser@6.0.16) + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 dev: true - /postcss-normalize-charset@6.0.2(postcss@8.4.35): + /postcss-normalize-charset@6.0.2(postcss@8.4.38): resolution: {integrity: sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.4.31 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true - /postcss-normalize-display-values@6.0.2(postcss@8.4.35): + /postcss-normalize-display-values@6.0.2(postcss@8.4.38): resolution: {integrity: sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.4.31 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /postcss-normalize-positions@6.0.2(postcss@8.4.35): + /postcss-normalize-positions@6.0.2(postcss@8.4.38): resolution: {integrity: sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.4.31 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /postcss-normalize-repeat-style@6.0.2(postcss@8.4.35): + /postcss-normalize-repeat-style@6.0.2(postcss@8.4.38): resolution: {integrity: sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.4.31 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /postcss-normalize-string@6.0.2(postcss@8.4.35): + /postcss-normalize-string@6.0.2(postcss@8.4.38): resolution: {integrity: sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.4.31 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /postcss-normalize-timing-functions@6.0.2(postcss@8.4.35): + /postcss-normalize-timing-functions@6.0.2(postcss@8.4.38): resolution: {integrity: sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.4.31 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /postcss-normalize-unicode@6.1.0(postcss@8.4.35): + /postcss-normalize-unicode@6.1.0(postcss@8.4.38): resolution: {integrity: sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.4.31 dependencies: browserslist: 4.23.0 - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /postcss-normalize-url@6.0.2(postcss@8.4.35): + /postcss-normalize-url@6.0.2(postcss@8.4.38): resolution: {integrity: sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.4.31 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /postcss-normalize-whitespace@6.0.2(postcss@8.4.35): + /postcss-normalize-whitespace@6.0.2(postcss@8.4.38): resolution: {integrity: sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.4.31 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /postcss-opacity-percentage@2.0.0(postcss@8.4.35): + /postcss-opacity-percentage@2.0.0(postcss@8.4.38): resolution: {integrity: sha512-lyDrCOtntq5Y1JZpBFzIWm2wG9kbEdujpNt4NLannF+J9c8CgFIzPa80YQfdza+Y+yFfzbYj/rfoOsYsooUWTQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.2 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true - /postcss-ordered-values@6.0.2(postcss@8.4.35): + /postcss-ordered-values@6.0.2(postcss@8.4.38): resolution: {integrity: sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.4.31 dependencies: - cssnano-utils: 4.0.2(postcss@8.4.35) - postcss: 8.4.35 + cssnano-utils: 4.0.2(postcss@8.4.38) + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /postcss-overflow-shorthand@5.0.1(postcss@8.4.35): + /postcss-overflow-shorthand@5.0.1(postcss@8.4.38): resolution: {integrity: sha512-XzjBYKLd1t6vHsaokMV9URBt2EwC9a7nDhpQpjoPk2HRTSQfokPfyAS/Q7AOrzUu6q+vp/GnrDBGuj/FCaRqrQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /postcss-page-break@3.0.4(postcss@8.4.35): + /postcss-page-break@3.0.4(postcss@8.4.38): resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==} peerDependencies: postcss: ^8 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true - /postcss-place@9.0.1(postcss@8.4.35): + /postcss-place@9.0.1(postcss@8.4.38): resolution: {integrity: sha512-JfL+paQOgRQRMoYFc2f73pGuG/Aw3tt4vYMR6UA3cWVMxivviPTnMFnFTczUJOA4K2Zga6xgQVE+PcLs64WC8Q==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /postcss-preset-env@9.5.0(postcss@8.4.35): - resolution: {integrity: sha512-ZTrTWCSqKVYSABB1GerMBb6F8Uto5YWIq1nqi+TKOHPzrXMcyJNuJTc0v2lp5WjG4Sfvwdo7HF/7/3j7HskRog==} + /postcss-preset-env@9.5.4(postcss@8.4.38): + resolution: {integrity: sha512-o/jOlJjhm4f6rI5q1f+4Og3tz1cjaO50er9ndk7ZdcXHjWOH49kMAhqDC/nQifypQkOAiAmF46dPt3pZM+Cwbg==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/postcss-cascade-layers': 4.0.3(postcss@8.4.35) - '@csstools/postcss-color-function': 3.0.10(postcss@8.4.35) - '@csstools/postcss-color-mix-function': 2.0.10(postcss@8.4.35) - '@csstools/postcss-exponential-functions': 1.0.4(postcss@8.4.35) - '@csstools/postcss-font-format-keywords': 3.0.2(postcss@8.4.35) - '@csstools/postcss-gamut-mapping': 1.0.3(postcss@8.4.35) - '@csstools/postcss-gradients-interpolation-method': 4.0.11(postcss@8.4.35) - '@csstools/postcss-hwb-function': 3.0.9(postcss@8.4.35) - '@csstools/postcss-ic-unit': 3.0.4(postcss@8.4.35) - '@csstools/postcss-initial': 1.0.1(postcss@8.4.35) - '@csstools/postcss-is-pseudo-class': 4.0.5(postcss@8.4.35) - '@csstools/postcss-light-dark-function': 1.0.0(postcss@8.4.35) - '@csstools/postcss-logical-float-and-clear': 2.0.1(postcss@8.4.35) - '@csstools/postcss-logical-overflow': 1.0.1(postcss@8.4.35) - '@csstools/postcss-logical-overscroll-behavior': 1.0.1(postcss@8.4.35) - '@csstools/postcss-logical-resize': 2.0.1(postcss@8.4.35) - '@csstools/postcss-logical-viewport-units': 2.0.6(postcss@8.4.35) - '@csstools/postcss-media-minmax': 1.1.3(postcss@8.4.35) - '@csstools/postcss-media-queries-aspect-ratio-number-values': 2.0.6(postcss@8.4.35) - '@csstools/postcss-nested-calc': 3.0.2(postcss@8.4.35) - '@csstools/postcss-normalize-display-values': 3.0.2(postcss@8.4.35) - '@csstools/postcss-oklab-function': 3.0.10(postcss@8.4.35) - '@csstools/postcss-progressive-custom-properties': 3.1.0(postcss@8.4.35) - '@csstools/postcss-relative-color-syntax': 2.0.10(postcss@8.4.35) - '@csstools/postcss-scope-pseudo-class': 3.0.1(postcss@8.4.35) - '@csstools/postcss-stepped-value-functions': 3.0.5(postcss@8.4.35) - '@csstools/postcss-text-decoration-shorthand': 3.0.4(postcss@8.4.35) - '@csstools/postcss-trigonometric-functions': 3.0.5(postcss@8.4.35) - '@csstools/postcss-unset-value': 3.0.1(postcss@8.4.35) - autoprefixer: 10.4.18(postcss@8.4.35) + '@csstools/postcss-cascade-layers': 4.0.4(postcss@8.4.38) + '@csstools/postcss-color-function': 3.0.13(postcss@8.4.38) + '@csstools/postcss-color-mix-function': 2.0.13(postcss@8.4.38) + '@csstools/postcss-exponential-functions': 1.0.5(postcss@8.4.38) + '@csstools/postcss-font-format-keywords': 3.0.2(postcss@8.4.38) + '@csstools/postcss-gamut-mapping': 1.0.6(postcss@8.4.38) + '@csstools/postcss-gradients-interpolation-method': 4.0.14(postcss@8.4.38) + '@csstools/postcss-hwb-function': 3.0.12(postcss@8.4.38) + '@csstools/postcss-ic-unit': 3.0.6(postcss@8.4.38) + '@csstools/postcss-initial': 1.0.1(postcss@8.4.38) + '@csstools/postcss-is-pseudo-class': 4.0.6(postcss@8.4.38) + '@csstools/postcss-light-dark-function': 1.0.3(postcss@8.4.38) + '@csstools/postcss-logical-float-and-clear': 2.0.1(postcss@8.4.38) + '@csstools/postcss-logical-overflow': 1.0.1(postcss@8.4.38) + '@csstools/postcss-logical-overscroll-behavior': 1.0.1(postcss@8.4.38) + '@csstools/postcss-logical-resize': 2.0.1(postcss@8.4.38) + '@csstools/postcss-logical-viewport-units': 2.0.7(postcss@8.4.38) + '@csstools/postcss-media-minmax': 1.1.4(postcss@8.4.38) + '@csstools/postcss-media-queries-aspect-ratio-number-values': 2.0.7(postcss@8.4.38) + '@csstools/postcss-nested-calc': 3.0.2(postcss@8.4.38) + '@csstools/postcss-normalize-display-values': 3.0.2(postcss@8.4.38) + '@csstools/postcss-oklab-function': 3.0.13(postcss@8.4.38) + '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.4.38) + '@csstools/postcss-relative-color-syntax': 2.0.13(postcss@8.4.38) + '@csstools/postcss-scope-pseudo-class': 3.0.1(postcss@8.4.38) + '@csstools/postcss-stepped-value-functions': 3.0.6(postcss@8.4.38) + '@csstools/postcss-text-decoration-shorthand': 3.0.5(postcss@8.4.38) + '@csstools/postcss-trigonometric-functions': 3.0.6(postcss@8.4.38) + '@csstools/postcss-unset-value': 3.0.1(postcss@8.4.38) + autoprefixer: 10.4.19(postcss@8.4.38) browserslist: 4.23.0 - css-blank-pseudo: 6.0.1(postcss@8.4.35) - css-has-pseudo: 6.0.2(postcss@8.4.35) - css-prefers-color-scheme: 9.0.1(postcss@8.4.35) - cssdb: 7.11.2 - postcss: 8.4.35 - postcss-attribute-case-insensitive: 6.0.3(postcss@8.4.35) - postcss-clamp: 4.1.0(postcss@8.4.35) - postcss-color-functional-notation: 6.0.5(postcss@8.4.35) - postcss-color-hex-alpha: 9.0.4(postcss@8.4.35) - postcss-color-rebeccapurple: 9.0.3(postcss@8.4.35) - postcss-custom-media: 10.0.3(postcss@8.4.35) - postcss-custom-properties: 13.3.5(postcss@8.4.35) - postcss-custom-selectors: 7.1.7(postcss@8.4.35) - postcss-dir-pseudo-class: 8.0.1(postcss@8.4.35) - postcss-double-position-gradients: 5.0.4(postcss@8.4.35) - postcss-focus-visible: 9.0.1(postcss@8.4.35) - postcss-focus-within: 8.0.1(postcss@8.4.35) - postcss-font-variant: 5.0.0(postcss@8.4.35) - postcss-gap-properties: 5.0.1(postcss@8.4.35) - postcss-image-set-function: 6.0.3(postcss@8.4.35) - postcss-lab-function: 6.0.10(postcss@8.4.35) - postcss-logical: 7.0.1(postcss@8.4.35) - postcss-nesting: 12.1.0(postcss@8.4.35) - postcss-opacity-percentage: 2.0.0(postcss@8.4.35) - postcss-overflow-shorthand: 5.0.1(postcss@8.4.35) - postcss-page-break: 3.0.4(postcss@8.4.35) - postcss-place: 9.0.1(postcss@8.4.35) - postcss-pseudo-class-any-link: 9.0.1(postcss@8.4.35) - postcss-replace-overflow-wrap: 4.0.0(postcss@8.4.35) - postcss-selector-not: 7.0.2(postcss@8.4.35) + css-blank-pseudo: 6.0.1(postcss@8.4.38) + css-has-pseudo: 6.0.3(postcss@8.4.38) + css-prefers-color-scheme: 9.0.1(postcss@8.4.38) + cssdb: 8.0.0 + postcss: 8.4.38 + postcss-attribute-case-insensitive: 6.0.3(postcss@8.4.38) + postcss-clamp: 4.1.0(postcss@8.4.38) + postcss-color-functional-notation: 6.0.8(postcss@8.4.38) + postcss-color-hex-alpha: 9.0.4(postcss@8.4.38) + postcss-color-rebeccapurple: 9.0.3(postcss@8.4.38) + postcss-custom-media: 10.0.4(postcss@8.4.38) + postcss-custom-properties: 13.3.6(postcss@8.4.38) + postcss-custom-selectors: 7.1.8(postcss@8.4.38) + postcss-dir-pseudo-class: 8.0.1(postcss@8.4.38) + postcss-double-position-gradients: 5.0.6(postcss@8.4.38) + postcss-focus-visible: 9.0.1(postcss@8.4.38) + postcss-focus-within: 8.0.1(postcss@8.4.38) + postcss-font-variant: 5.0.0(postcss@8.4.38) + postcss-gap-properties: 5.0.1(postcss@8.4.38) + postcss-image-set-function: 6.0.3(postcss@8.4.38) + postcss-lab-function: 6.0.13(postcss@8.4.38) + postcss-logical: 7.0.1(postcss@8.4.38) + postcss-nesting: 12.1.1(postcss@8.4.38) + postcss-opacity-percentage: 2.0.0(postcss@8.4.38) + postcss-overflow-shorthand: 5.0.1(postcss@8.4.38) + postcss-page-break: 3.0.4(postcss@8.4.38) + postcss-place: 9.0.1(postcss@8.4.38) + postcss-pseudo-class-any-link: 9.0.1(postcss@8.4.38) + postcss-replace-overflow-wrap: 4.0.0(postcss@8.4.38) + postcss-selector-not: 7.0.2(postcss@8.4.38) dev: true - /postcss-pseudo-class-any-link@9.0.1(postcss@8.4.35): + /postcss-pseudo-class-any-link@9.0.1(postcss@8.4.38): resolution: {integrity: sha512-cKYGGZ9yzUZi+dZd7XT2M8iSDfo+T2Ctbpiizf89uBTBfIpZpjvTavzIJXpCReMVXSKROqzpxClNu6fz4DHM0Q==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 dev: true - /postcss-reduce-initial@6.1.0(postcss@8.4.35): + /postcss-reduce-initial@6.1.0(postcss@8.4.38): resolution: {integrity: sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: @@ -13740,64 +13618,64 @@ packages: dependencies: browserslist: 4.23.0 caniuse-api: 3.0.0 - postcss: 8.4.35 + postcss: 8.4.38 dev: true - /postcss-reduce-transforms@6.0.2(postcss@8.4.35): + /postcss-reduce-transforms@6.0.2(postcss@8.4.38): resolution: {integrity: sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.4.31 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /postcss-replace-overflow-wrap@4.0.0(postcss@8.4.35): + /postcss-replace-overflow-wrap@4.0.0(postcss@8.4.38): resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==} peerDependencies: postcss: ^8.0.3 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true - /postcss-selector-not@7.0.2(postcss@8.4.35): + /postcss-selector-not@7.0.2(postcss@8.4.38): resolution: {integrity: sha512-/SSxf/90Obye49VZIfc0ls4H0P6i6V1iHv0pzZH8SdgvZOPFkF37ef1r5cyWcMflJSFJ5bfuoluTnFnBBFiuSA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 dev: true - /postcss-selector-parser@6.0.15: - resolution: {integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==} + /postcss-selector-parser@6.0.16: + resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==} engines: {node: '>=4'} dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 dev: true - /postcss-svgo@6.0.3(postcss@8.4.35): + /postcss-svgo@6.0.3(postcss@8.4.38): resolution: {integrity: sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==} engines: {node: ^14 || ^16 || >= 18} peerDependencies: postcss: ^8.4.31 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 svgo: 3.2.0 dev: true - /postcss-unique-selectors@6.0.3(postcss@8.4.35): - resolution: {integrity: sha512-NFXbYr8qdmCr/AFceaEfdcsKGCvWTeGO6QVC9h2GvtWgj0/0dklKQcaMMVzs6tr8bY+ase8hOtHW8OBTTRvS8A==} + /postcss-unique-selectors@6.0.4(postcss@8.4.38): + resolution: {integrity: sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.4.31 dependencies: - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 dev: true /postcss-value-parser@4.2.0: @@ -13810,15 +13688,15 @@ packages: dependencies: nanoid: 3.3.7 picocolors: 1.0.0 - source-map-js: 1.0.2 + source-map-js: 1.2.0 - /postcss@8.4.35: - resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} + /postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 picocolors: 1.0.0 - source-map-js: 1.0.2 + source-map-js: 1.2.0 dev: true /postgres-array@2.0.0: @@ -13865,13 +13743,13 @@ packages: engines: {node: '>=10'} hasBin: true dependencies: - detect-libc: 2.0.2 + detect-libc: 2.0.3 expand-template: 2.0.3 github-from-package: 0.0.0 minimist: 1.2.8 mkdirp-classic: 0.5.3 napi-build-utils: 1.0.2 - node-abi: 3.56.0 + node-abi: 3.57.0 pump: 3.0.0 rc: 1.2.8 simple-get: 4.0.1 @@ -13925,16 +13803,6 @@ packages: engines: {node: '>=6'} dev: false - /probe-image-size@7.2.3: - resolution: {integrity: sha512-HubhG4Rb2UH8YtV4ba0Vp5bQ7L78RTONYu/ujmCu5nBI8wGv24s4E9xSKBi0N1MowRpxk76pFCpJtW0KPzOK0w==} - dependencies: - lodash.merge: 4.6.2 - needle: 2.9.1 - stream-parser: 0.3.1 - transitivePeerDependencies: - - supports-color - dev: false - /process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: true @@ -14004,21 +13872,21 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - /pure-rand@6.0.4: - resolution: {integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==} + /pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} /qs@6.11.0: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} engines: {node: '>=0.6'} dependencies: - side-channel: 1.0.5 + side-channel: 1.0.6 dev: false /qs@6.11.2: resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} engines: {node: '>=0.6'} dependencies: - side-channel: 1.0.5 + side-channel: 1.0.6 /querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} @@ -14029,9 +13897,14 @@ packages: /queue-tick@1.0.1: resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} - requiresBuild: true dev: true + /queue@6.0.2: + resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==} + dependencies: + inherits: 2.0.4 + dev: false + /quick-format-unescaped@4.0.4: resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} @@ -14050,8 +13923,8 @@ packages: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} - /raw-body@2.5.1: - resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} + /raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} dependencies: bytes: 3.1.2 @@ -14089,7 +13962,7 @@ packages: react: ^18.2.0 react-dom: ^18.2.0 dependencies: - '@floating-ui/react': 0.26.9(react-dom@18.2.0)(react@18.2.0) + '@floating-ui/react': 0.26.11(react-dom@18.2.0)(react@18.2.0) classnames: 2.5.1 date-fns: 3.3.1 prop-types: 15.8.1 @@ -14129,7 +14002,7 @@ packages: peerDependencies: react: ^18.2.0 dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 react: 18.2.0 dev: false @@ -14138,7 +14011,7 @@ packages: peerDependencies: react: ^18.2.0 dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 react: 18.2.0 dev: false @@ -14195,7 +14068,7 @@ packages: react: ^18.2.0 react-dom: ^18.2.0 dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 '@emotion/cache': 11.11.0 '@emotion/react': 11.11.4(@types/react@18.2.74)(react@18.2.0) '@floating-ui/dom': 1.6.3 @@ -14238,7 +14111,7 @@ packages: react: ^18.2.0 react-dom: ^18.2.0 dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.4 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -14258,7 +14131,7 @@ packages: dependencies: find-up: 6.3.0 read-pkg: 8.1.0 - type-fest: 4.10.3 + type-fest: 4.15.0 dev: true /read-pkg@8.1.0: @@ -14268,7 +14141,7 @@ packages: '@types/normalize-package-data': 2.4.4 normalize-package-data: 6.0.0 parse-json: 7.1.1 - type-fest: 4.10.3 + type-fest: 4.15.0 dev: true /read-stream@2.1.1: @@ -14362,13 +14235,13 @@ packages: '@eslint-community/regexpp': 4.10.0 dev: false - /reflect.getprototypeof@1.0.5: - resolution: {integrity: sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ==} + /reflect.getprototypeof@1.0.6: + resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.5 + es-abstract: 1.23.3 es-errors: 1.3.0 get-intrinsic: 1.2.4 globalthis: 1.0.3 @@ -14536,8 +14409,8 @@ packages: dependencies: queue-microtask: 1.2.3 - /safe-array-concat@1.1.0: - resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} + /safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} dependencies: call-bind: 1.0.7 @@ -14573,7 +14446,7 @@ packages: truncate-utf8-bytes: 1.0.2 dev: false - /sass-loader@14.1.1(sass@1.71.1)(webpack@5.90.3): + /sass-loader@14.1.1(sass@1.74.1)(webpack@5.91.0): resolution: {integrity: sha512-QX8AasDg75monlybel38BZ49JP5Z+uSKfKwF2rO7S74BywaRmGQMUBw9dtkS+ekyM/QnP+NOrRYq8ABMZ9G8jw==} engines: {node: '>= 18.12.0'} peerDependencies: @@ -14595,21 +14468,22 @@ packages: optional: true dependencies: neo-async: 2.6.2 - sass: 1.71.1 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.19.12)(webpack-cli@5.1.4) + sass: 1.74.1 + webpack: 5.91.0(@swc/core@1.4.13)(esbuild@0.19.12)(webpack-cli@5.1.4) dev: true - /sass@1.71.1: - resolution: {integrity: sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==} + /sass@1.74.1: + resolution: {integrity: sha512-w0Z9p/rWZWelb88ISOLyvqTWGmtmu2QJICqDBGyNnfG4OUnPX9BBjjYIXUpXCMOOg5MQWNpqzt876la1fsTvUA==} engines: {node: '>=14.0.0'} hasBin: true dependencies: chokidar: 3.6.0 immutable: 4.3.5 - source-map-js: 1.0.2 + source-map-js: 1.2.0 /sax@1.3.0: resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} + dev: true /saxes@6.0.0: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} @@ -14730,8 +14604,8 @@ packages: transitivePeerDependencies: - supports-color - /set-function-length@1.2.1: - resolution: {integrity: sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==} + /set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} dependencies: define-data-property: 1.1.4 @@ -14766,7 +14640,7 @@ packages: requiresBuild: true dependencies: color: 4.2.3 - detect-libc: 2.0.2 + detect-libc: 2.0.3 node-addon-api: 6.1.0 prebuild-install: 7.1.2 semver: 7.6.0 @@ -14807,8 +14681,8 @@ packages: rechoir: 0.6.2 dev: true - /side-channel@1.0.5: - resolution: {integrity: sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==} + /side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 @@ -14869,7 +14743,7 @@ packages: resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} engines: {node: '>= 10'} dependencies: - '@polka/url': 1.0.0-next.24 + '@polka/url': 1.0.0-next.25 mrmime: 2.0.0 totalist: 3.0.1 dev: true @@ -14908,7 +14782,7 @@ packages: dependencies: '@juggle/resize-observer': 3.4.0 '@types/is-hotkey': 0.1.10 - '@types/lodash': 4.14.202 + '@types/lodash': 4.17.0 direction: 1.0.4 is-hotkey: 0.1.8 is-plain-object: 5.0.0 @@ -14946,8 +14820,8 @@ packages: ip-address: 9.0.5 smart-buffer: 4.2.0 - /sonic-boom@3.8.0: - resolution: {integrity: sha512-ybz6OYOUjoQQCQ/i4LU8kaToD8ACtYP+Cj5qd2AO36bwbdewxWJ3ArmJ2cr6AvxlL2o0PqnCcPGUgkILbfkaCA==} + /sonic-boom@3.8.1: + resolution: {integrity: sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==} dependencies: atomic-sleep: 1.0.0 @@ -14969,8 +14843,8 @@ packages: resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} dev: true - /source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + /source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} /source-map-support@0.5.13: @@ -15069,14 +14943,6 @@ packages: stubs: 3.0.0 dev: true - /stream-parser@0.3.1: - resolution: {integrity: sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==} - dependencies: - debug: 2.6.9 - transitivePeerDependencies: - - supports-color - dev: false - /stream-shift@1.0.3: resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} dev: true @@ -15091,7 +14957,7 @@ packages: fast-fifo: 1.3.2 queue-tick: 1.0.1 optionalDependencies: - bare-events: 2.2.0 + bare-events: 2.2.2 dev: true /string-argv@0.3.2: @@ -15122,41 +14988,47 @@ packages: emoji-regex: 9.2.2 strip-ansi: 7.1.0 - /string.prototype.matchall@4.0.10: - resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.5 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - internal-slot: 1.0.7 - regexp.prototype.flags: 1.5.2 - set-function-name: 2.0.2 - side-channel: 1.0.5 - dev: false - - /string.prototype.trim@1.2.8: - resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + /string.prototype.matchall@4.0.11: + resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.5 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.7 + regexp.prototype.flags: 1.5.2 + set-function-name: 2.0.2 + side-channel: 1.0.6 + dev: false - /string.prototype.trimend@1.0.7: - resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + /string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.5 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 - /string.prototype.trimstart@1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + /string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.5 + es-object-atoms: 1.0.0 + + /string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 /string_decoder@0.10.31: resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} @@ -15234,7 +15106,6 @@ packages: /strnum@1.0.5: resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} - requiresBuild: true /strtok3@6.3.0: resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==} @@ -15256,7 +15127,7 @@ packages: resolution: {integrity: sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==} dev: true - /styled-jsx@5.1.1(@babel/core@7.24.0)(react@18.2.0): + /styled-jsx@5.1.1(@babel/core@7.24.4)(react@18.2.0): resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} engines: {node: '>= 12.0.0'} peerDependencies: @@ -15269,19 +15140,19 @@ packages: babel-plugin-macros: optional: true dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 client-only: 0.0.1 react: 18.2.0 - /stylehacks@6.1.0(postcss@8.4.35): - resolution: {integrity: sha512-ETErsPFgwlfYZ/CSjMO2Ddf+TsnkCVPBPaoB99Ro8WMAxf7cglzmFsRBhRmKObFjibtcvlNxFFPHuyr3sNlNUQ==} + /stylehacks@6.1.1(postcss@8.4.38): + resolution: {integrity: sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.4.31 dependencies: browserslist: 4.23.0 - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 dev: true /stylis@4.2.0: @@ -15338,15 +15209,15 @@ packages: picocolors: 1.0.0 dev: true - /swc-loader@0.2.6(@swc/core@1.4.2)(webpack@5.90.3): + /swc-loader@0.2.6(@swc/core@1.4.13)(webpack@5.91.0): resolution: {integrity: sha512-9Zi9UP2YmDpgmQVbyOPJClY0dwf58JDyDMQ7uRc4krmc72twNI2fvlBWHLqVekBpPc7h5NJkGVT1zNDxFrqhvg==} peerDependencies: '@swc/core': ^1.2.147 webpack: '>=2' dependencies: - '@swc/core': 1.4.2 + '@swc/core': 1.4.13 '@swc/counter': 0.1.3 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.19.12)(webpack-cli@5.1.4) + webpack: 5.91.0(@swc/core@1.4.13)(esbuild@0.19.12)(webpack-cli@5.1.4) dev: true /swc-plugin-transform-remove-imports@1.12.1: @@ -15385,8 +15256,8 @@ packages: pump: 3.0.0 tar-stream: 3.1.7 optionalDependencies: - bare-fs: 2.2.1 - bare-path: 2.1.0 + bare-fs: 2.2.3 + bare-path: 2.1.1 dev: true /tar-stream@2.2.0: @@ -15454,7 +15325,7 @@ packages: supports-hyperlinks: 2.3.0 dev: false - /terser-webpack-plugin@5.3.10(@swc/core@1.4.2)(esbuild@0.19.12)(webpack@5.90.3): + /terser-webpack-plugin@5.3.10(@swc/core@1.4.13)(esbuild@0.19.12)(webpack@5.91.0): resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -15470,22 +15341,22 @@ packages: uglify-js: optional: true dependencies: - '@jridgewell/trace-mapping': 0.3.23 - '@swc/core': 1.4.2 + '@jridgewell/trace-mapping': 0.3.25 + '@swc/core': 1.4.13 esbuild: 0.19.12 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 - terser: 5.28.1 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.19.12)(webpack-cli@5.1.4) + terser: 5.30.3 + webpack: 5.91.0(@swc/core@1.4.13)(esbuild@0.19.12)(webpack-cli@5.1.4) dev: true - /terser@5.28.1: - resolution: {integrity: sha512-wM+bZp54v/E9eRRGXb5ZFDvinrJIOaTapx3WUokyVGZu5ucVCK55zEgGd5Dl2fSr3jUo5sDiERErUWLY6QPFyA==} + /terser@5.30.3: + resolution: {integrity: sha512-STdUgOUx8rLbMGO9IOwHLpCqolkDITFFQSMYYwKE1N2lY6MVSaeoi10z/EhWxRc6ybqoVmKSkhKYH/XUpl7vSA==} engines: {node: '>=10'} hasBin: true dependencies: - '@jridgewell/source-map': 0.3.5 + '@jridgewell/source-map': 0.3.6 acorn: 8.11.3 commander: 2.20.3 source-map-support: 0.5.21 @@ -15642,8 +15513,8 @@ packages: utf8-byte-length: 1.0.4 dev: false - /ts-api-utils@1.2.1(typescript@5.4.4): - resolution: {integrity: sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==} + /ts-api-utils@1.3.0(typescript@5.4.4): + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} engines: {node: '>=16'} peerDependencies: typescript: 5.4.4 @@ -15658,7 +15529,7 @@ packages: dependencies: typescript: 5.4.4 - /ts-jest@29.1.2(@babel/core@7.24.0)(esbuild@0.19.12)(jest@29.7.0)(typescript@5.4.4): + /ts-jest@29.1.2(@babel/core@7.24.4)(esbuild@0.19.12)(jest@29.7.0)(typescript@5.4.4): resolution: {integrity: sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==} engines: {node: ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true @@ -15679,7 +15550,7 @@ packages: esbuild: optional: true dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.24.4 bs-logger: 0.2.6 esbuild: 0.19.12 fast-json-stable-stringify: 2.1.0 @@ -15693,7 +15564,7 @@ packages: yargs-parser: 21.1.1 dev: true - /ts-node@10.9.1(@swc/core@1.4.2)(@types/node@20.12.5)(typescript@5.4.4): + /ts-node@10.9.1(@swc/core@1.4.13)(@types/node@20.12.5)(typescript@5.4.4): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -15708,8 +15579,8 @@ packages: optional: true dependencies: '@cspotcode/source-map-support': 0.8.1 - '@swc/core': 1.4.2 - '@tsconfig/node10': 1.0.9 + '@swc/core': 1.4.13 + '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 @@ -15726,7 +15597,6 @@ packages: /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - requiresBuild: true /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} @@ -15741,13 +15611,13 @@ packages: typescript: 5.4.4 dev: false - /tsx@4.7.1: - resolution: {integrity: sha512-8d6VuibXHtlN5E3zFkgY8u4DX7Y3Z27zvvPKVmLon/D4AjuKzarkUBTLDBgj9iTQ0hg5xM7c/mYiRVM+HETf0g==} + /tsx@4.7.2: + resolution: {integrity: sha512-BCNd4kz6fz12fyrgCTEdZHGJ9fWTGeUzXmQysh0RVocDY3h4frk05ZNCXSy4kIenF7y/QnrdiVpTsyNRn6vlAw==} engines: {node: '>=18.0.0'} hasBin: true dependencies: esbuild: 0.19.12 - get-tsconfig: 4.7.2 + get-tsconfig: 4.7.3 optionalDependencies: fsevents: 2.3.3 dev: true @@ -15861,8 +15731,8 @@ packages: engines: {node: '>=14.16'} dev: true - /type-fest@4.10.3: - resolution: {integrity: sha512-JLXyjizi072smKGGcZiAJDCNweT8J+AuRxmPZ1aG7TERg4ijx9REl8CNhbr36RV4qXqL1gO1FF9HL8OkVmmrsA==} + /type-fest@4.15.0: + resolution: {integrity: sha512-tB9lu0pQpX5KJq54g+oHOLumOx+pMep4RaM6liXh2PKmVRFF+/vAtUP0ZaJ0kOySfVNjF6doBWPHhBhISKdlIA==} engines: {node: '>=16'} dev: true @@ -15873,9 +15743,6 @@ packages: media-typer: 0.3.0 mime-types: 2.1.35 - /type@1.2.0: - resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==} - /type@2.7.2: resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} @@ -15908,8 +15775,8 @@ packages: has-proto: 1.0.3 is-typed-array: 1.1.13 - /typed-array-length@1.0.5: - resolution: {integrity: sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==} + /typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 @@ -15951,6 +15818,13 @@ packages: /undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + /undici@5.28.4: + resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} + engines: {node: '>=14.0'} + dependencies: + '@fastify/busboy': 2.1.1 + dev: true + /unfetch@4.2.0: resolution: {integrity: sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==} dev: false @@ -16059,7 +15933,7 @@ packages: /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true - requiresBuild: true + dev: true /uuid@9.0.0: resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} @@ -16077,7 +15951,7 @@ packages: resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} engines: {node: '>=10.12.0'} dependencies: - '@jridgewell/trace-mapping': 0.3.23 + '@jridgewell/trace-mapping': 0.3.25 '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 @@ -16111,8 +15985,8 @@ packages: loose-envify: 1.4.0 dev: true - /watchpack@2.4.0: - resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} + /watchpack@2.4.1: + resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==} engines: {node: '>=10.13.0'} dependencies: glob-to-regexp: 0.4.1 @@ -16153,7 +16027,7 @@ packages: - utf-8-validate dev: true - /webpack-cli@5.1.4(webpack@5.90.3): + /webpack-cli@5.1.4(webpack@5.91.0): resolution: {integrity: sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==} engines: {node: '>=14.15.0'} hasBin: true @@ -16171,18 +16045,18 @@ packages: optional: true dependencies: '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.90.3) - '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.90.3) - '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack@5.90.3) + '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.91.0) + '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.91.0) + '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack@5.91.0) colorette: 2.0.20 commander: 10.0.1 cross-spawn: 7.0.3 - envinfo: 7.11.1 + envinfo: 7.12.0 fastest-levenshtein: 1.0.16 import-local: 3.1.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack: 5.90.3(@swc/core@1.4.2)(esbuild@0.19.12)(webpack-cli@5.1.4) + webpack: 5.91.0(@swc/core@1.4.13)(esbuild@0.19.12)(webpack-cli@5.1.4) webpack-merge: 5.10.0 dev: true @@ -16207,8 +16081,8 @@ packages: engines: {node: '>=10.13.0'} dev: true - /webpack@5.90.3(@swc/core@1.4.2)(esbuild@0.19.12)(webpack-cli@5.1.4): - resolution: {integrity: sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==} + /webpack@5.91.0(@swc/core@1.4.13)(esbuild@0.19.12)(webpack-cli@5.1.4): + resolution: {integrity: sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -16219,15 +16093,15 @@ packages: dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.5 - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/wasm-edit': 1.11.6 - '@webassemblyjs/wasm-parser': 1.11.6 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/wasm-edit': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 acorn: 8.11.3 acorn-import-assertions: 1.9.0(acorn@8.11.3) browserslist: 4.23.0 chrome-trace-event: 1.0.3 - enhanced-resolve: 5.15.1 - es-module-lexer: 1.4.1 + enhanced-resolve: 5.16.0 + es-module-lexer: 1.5.0 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -16238,9 +16112,9 @@ packages: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.4.2)(esbuild@0.19.12)(webpack@5.90.3) - watchpack: 2.4.0 - webpack-cli: 5.1.4(webpack@5.90.3) + terser-webpack-plugin: 5.3.10(@swc/core@1.4.13)(esbuild@0.19.12)(webpack@5.91.0) + watchpack: 2.4.1 + webpack-cli: 5.1.4(webpack@5.91.0) webpack-sources: 3.2.3 transitivePeerDependencies: - '@swc/core' @@ -16296,20 +16170,21 @@ packages: is-weakref: 1.0.2 isarray: 2.0.5 which-boxed-primitive: 1.0.2 - which-collection: 1.0.1 - which-typed-array: 1.1.14 + which-collection: 1.0.2 + which-typed-array: 1.1.15 dev: false - /which-collection@1.0.1: - resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} + /which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} dependencies: - is-map: 2.0.2 - is-set: 2.0.2 - is-weakmap: 2.0.1 - is-weakset: 2.0.2 + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.3 - /which-typed-array@1.1.14: - resolution: {integrity: sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==} + /which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.7 @@ -16411,8 +16286,8 @@ packages: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} dev: true - /xss@1.0.14: - resolution: {integrity: sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw==} + /xss@1.0.15: + resolution: {integrity: sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg==} engines: {node: '>= 0.10.0'} hasBin: true dependencies: @@ -16489,11 +16364,11 @@ packages: fd-slicer: 1.1.0 dev: true - /yjs@13.6.12: - resolution: {integrity: sha512-KOT8ILoyVH2f/PxPadeu5kVVS055D1r3x1iFfJVJzFdnN98pVGM8H07NcKsO+fG3F7/0tf30Vnokf5YIqhU/iw==} + /yjs@13.6.14: + resolution: {integrity: sha512-D+7KcUr0j+vBCUSKXXEWfA+bG4UQBviAwP3gYBhkstkgwy5+8diOPMx0iqLIOxNo/HxaREUimZRxqHGAHCL2BQ==} engines: {node: '>=16.0.0', npm: '>=8.0.0'} dependencies: - lib0: 0.2.90 + lib0: 0.2.93 dev: false /yn@3.1.1: diff --git a/scripts/exportPointerFiles.ts b/scripts/exportPointerFiles.ts deleted file mode 100644 index 2e845ebc43..0000000000 --- a/scripts/exportPointerFiles.ts +++ /dev/null @@ -1,110 +0,0 @@ -import fs from 'fs' -import path from 'path' -import { fileURLToPath } from 'url' - -const __filename = fileURLToPath(import.meta.url) -const __dirname = path.dirname(__filename) - -const [baseDirRelativePath] = process.argv.slice(2) -const [sourceDirRelativePath] = process.argv.slice(3) - -// Base directory -const baseDir = path.resolve(__dirname, baseDirRelativePath) -const sourceDir = path.join(baseDir, sourceDirRelativePath) -const targetDir = baseDir - -// Helper function to read directories recursively and exclude .map files -function getFiles(dir: string): string[] { - const subDirs = fs.readdirSync(dir, { withFileTypes: true }) - const files = subDirs.map((dirEntry) => { - const res = path.resolve(dir, dirEntry.name) - if (dirEntry.isDirectory()) { - return getFiles(res) - } else { - // Exclude .map files - return res.endsWith('.map') ? [] : res - } - }) - return Array.prototype.concat(...files) -} - -function fixImports(fileExtension: string, content: string, depth: number): string { - const parentDirReference = '../'.repeat(depth + 1) // +1 to account for the original reference - const replacementPrefix = (depth === 0 ? './' : '../'.repeat(depth)) + 'dist/' - - if (fileExtension === '.scss') { - // Adjust paths in @import statements for SCSS - content = content.replace( - new RegExp(`(@import\\s+['"])${parentDirReference}`, 'gs'), - `$1${replacementPrefix}`, - ) - return content - } - - // Adjust paths in require statements - content = content.replace( - new RegExp(`(require\\()(['"])${parentDirReference}(.*?)\\2`, 'gs'), - `$1$2${replacementPrefix}$3$2`, - ) - content = content.replace( - new RegExp(`(require\\()(['"])\\.\\/${parentDirReference}(.*?)\\2`, 'gs'), - `$1$2${replacementPrefix}$3$2`, - ) - - // Adjust paths in import and export from statements - content = content.replace( - new RegExp(`(from\\s+['"])${parentDirReference}(.*?)\\1`, 'gs'), - `$1${replacementPrefix}$2$1`, - ) - content = content.replace( - new RegExp(`(from\\s+['"])\\.\\/${parentDirReference}(.*?)\\1`, 'gs'), - `$1${replacementPrefix}$2$1`, - ) - - // Adjust paths in simpler export statements - content = content.replace( - new RegExp(`(export.*?\\s+from\\s+['"])${parentDirReference}(.*?['"])`, 'gs'), - `$1${replacementPrefix}$2`, - ) - content = content.replace( - new RegExp(`(export.*?\\s+from\\s+['"])\\.\\/${parentDirReference}(.*?['"])`, 'gs'), - `$1${replacementPrefix}$2`, - ) - - return content -} - -const calculateDepth = (pathy: string): number => { - const parts = pathy.split(path.sep) - - // Find the index of "exports" - const exportsIndex = parts.indexOf('exports') - - if (exportsIndex === -1) { - return -1 // "exports" directory not found in the path - } - - // Calculate the depth by subtracting the number of parts up to and including "exports" from the total number of parts. - // Subtract 1 more to not count the file itself. - return parts.length - exportsIndex - 2 -} - -// Move files and adjust paths -getFiles(sourceDir).forEach((filePath) => { - const fileContent = fs.readFileSync(filePath, 'utf-8') - const relativePath = path.relative(sourceDir, filePath) - const targetPath = path.join(targetDir, relativePath) - - // Calculate the depth to correctly adjust imports - const depth = calculateDepth(filePath) - - // Create any non-existent directories - const dir = path.dirname(targetPath) - if (!fs.existsSync(dir)) { - fs.mkdirSync(dir, { recursive: true }) - } - - fs.writeFileSync(targetPath, fixImports(path.extname(filePath), fileContent, depth), 'utf-8') -}) - -console.log('Export pointer files moved and paths adjusted successfully.') diff --git a/scripts/lib/getPackageDetails.ts b/scripts/lib/getPackageDetails.ts index 2831617260..5845b05275 100644 --- a/scripts/lib/getPackageDetails.ts +++ b/scripts/lib/getPackageDetails.ts @@ -8,9 +8,13 @@ const __dirname = path.dirname(__filename) const packagesDir = path.resolve(__dirname, '../../packages') export type PackageDetails = { + /** Name in package.json / npm registry */ name: string + /** Full path to package */ packagePath: string + /** Short name is the directory name */ shortName: string + /** Version in package.json */ version: string } diff --git a/scripts/lib/getPackageRegistryVersions.ts b/scripts/lib/getPackageRegistryVersions.ts new file mode 100644 index 0000000000..5b50a628fe --- /dev/null +++ b/scripts/lib/getPackageRegistryVersions.ts @@ -0,0 +1,46 @@ +import chalk from 'chalk' + +import { getPackageDetails } from './getPackageDetails.js' + +const packages = [ + 'payload', + 'translations', + 'ui', + 'next', + 'graphql', + 'db-mongodb', + 'db-postgres', + 'richtext-slate', + 'richtext-lexical', + + 'create-payload-app', + + // Plugins + 'plugin-cloud', + 'plugin-cloud-storage', + 'plugin-form-builder', + 'plugin-nested-docs', + 'plugin-redirects', + 'plugin-search', + 'plugin-seo', + // 'plugin-stripe', + // 'plugin-sentry', +] + +export const getPackageRegistryVersions = async (): Promise => { + const packageDetails = await getPackageDetails(packages) + + await Promise.all( + packageDetails.map(async (pkg) => { + // Get published version from npm + const json = await fetch(`https://registry.npmjs.org/${pkg.name}`).then((res) => res.json()) + const { latest, beta } = json['dist-tags'] + const msg = `${chalk.bold(pkg.name.padEnd(32))} latest: ${latest?.padEnd(16)} beta: ${beta?.padEnd(16)}` + console.log(msg) + }), + ) +} + +if (import.meta.url === new URL(import.meta.url).href) { + await getPackageRegistryVersions() +} diff --git a/scripts/release.ts b/scripts/release.ts index dd270a6d84..171f8f016a 100755 --- a/scripts/release.ts +++ b/scripts/release.ts @@ -6,19 +6,20 @@ import execa from 'execa' import fse from 'fs-extra' import minimist from 'minimist' import { fileURLToPath } from 'node:url' -import pMap from 'p-map' import path from 'path' import prompts from 'prompts' import semver from 'semver' import { simpleGit } from 'simple-git' +import type { PackageDetails } from './lib/getPackageDetails.js' + import { getPackageDetails } from './lib/getPackageDetails.js' import { updateChangelog } from './utils/updateChangelog.js' // Update this list with any packages to publish const packageWhitelist = [ 'payload', - // 'translations', + 'translations', 'ui', 'next', 'graphql', @@ -27,7 +28,7 @@ const packageWhitelist = [ 'richtext-slate', 'richtext-lexical', - // 'create-payload-app', + 'create-payload-app', // Plugins 'plugin-cloud', @@ -122,7 +123,7 @@ async function main() { return // For TS type checking } - const packageDetails = await getPackageDetails(packageWhitelist) + let packageDetails = await getPackageDetails(packageWhitelist) console.log(chalk.bold(`\n Version: ${monorepoVersion} => ${chalk.green(nextReleaseVersion)}\n`)) console.log(chalk.bold.yellow(` Bump: ${bump}`)) @@ -143,26 +144,13 @@ async function main() { await execa('pnpm', ['install'], execaOpts) - const buildResult = await execa('pnpm', ['build:core', '--output-logs=errors-only'], execaOpts) - // const buildResult = execSync('pnpm build:all', execOpts) + const buildResult = await execa('pnpm', ['build:all', '--output-logs=errors-only'], execaOpts) if (buildResult.exitCode !== 0) { console.error(chalk.bold.red('Build failed')) console.log(buildResult.stderr) abort('Build failed') } - const buildPluginsResult = await execa( - 'pnpm', - ['build:plugins', '--output-logs=errors-only'], - execaOpts, - ) - - if (buildPluginsResult.exitCode !== 0) { - console.error(chalk.bold.red('Build failed')) - console.log(buildPluginsResult.stderr) - abort('Build failed') - } - // Update changelog if (changelog) { header(`${logPrefix}📝 Updating changelog...`) @@ -203,43 +191,17 @@ async function main() { header(`🏷️ Tagging release v${nextReleaseVersion}`, { enable: gitTag }) runCmd(`git tag -a v${nextReleaseVersion} -m "v${nextReleaseVersion}"`, execOpts) - const otp = dryRun ? undefined : await question('Enter your 2FA code') + // Publish only payload to get 5 min auth token + packageDetails = packageDetails.filter((p) => p.name !== 'payload') + runCmd(`pnpm publish -C packages/payload --no-git-checks --json --tag ${tag}`, execOpts) - if (!dryRun && !otp) { - abort('2FA code is required') + const results: { name: string; success: boolean; details?: string }[] = [] + // Sequential publish + for (const pkg of packageDetails) { + const result = await publishSinglePackage(pkg, { dryRun }) + results.push(result) } - // Publish - const results: { name: string; success: boolean; details?: string }[] = await Promise.all( - packageDetails.map(async (pkg) => { - try { - console.log(logPrefix, chalk.bold(`🚀 ${pkg.name} publishing...`)) - const cmdArgs = ['publish', '-C', pkg.packagePath, '--no-git-checks', '--tag', tag] - if (dryRun) { - cmdArgs.push('--dry-run') - } else { - cmdArgs.push('--otp', otp) - } - const { exitCode, stderr } = await execa('pnpm', cmdArgs, { - cwd, - stdio: ['ignore', 'ignore', 'pipe'], - // stdio: 'inherit', - }) - - if (exitCode !== 0) { - console.log(chalk.bold.red(`\n\n❌ ${pkg.name} ERROR: pnpm publish failed\n\n`)) - return { name: pkg.name, success: false, details: stderr } - } - - console.log(`${logPrefix} ${chalk.green(`✅ ${pkg.name} published`)}`) - return { name: pkg.name, success: true } - } catch (error) { - console.error(chalk.bold.red(`\n\n❌ ${pkg.name} ERROR: ${error.message}\n\n`)) - return { name: pkg.name, success: false } - } - }), - ) - console.log(chalk.bold.green(`\n\nResults:\n`)) // New results format @@ -270,6 +232,28 @@ main().catch((error) => { process.exit(1) }) +async function publishSinglePackage(pkg: PackageDetails, opts?: { dryRun?: boolean }) { + const { dryRun = false } = opts ?? {} + console.log(chalk.bold(`🚀 ${pkg.name} publishing...`)) + const cmdArgs = ['publish', '-C', pkg.packagePath, '--no-git-checks', '--json', '--tag', tag] + if (dryRun) { + cmdArgs.push('--dry-run') + } + const { exitCode, stderr } = await execa('pnpm', cmdArgs, { + cwd, + stdio: ['ignore', 'ignore', 'pipe'], + // stdio: 'inherit', + }) + + if (exitCode !== 0) { + console.log(chalk.bold.red(`\n\n❌ ${pkg.name} ERROR: pnpm publish failed\n\n${stderr}`)) + return { name: pkg.name, success: false, details: stderr } + } + + console.log(`${logPrefix} ${chalk.green(`✅ ${pkg.name} published`)}`) + return { name: pkg.name, success: true } +} + function abort(message = 'Abort', exitCode = 1) { console.error(chalk.bold.red(`\n${message}\n`)) process.exit(exitCode) diff --git a/templates/blank-3.0/next.config.mjs b/templates/blank-3.0/next.config.mjs index 8d3f99c5be..7ec4bd8366 100644 --- a/templates/blank-3.0/next.config.mjs +++ b/templates/blank-3.0/next.config.mjs @@ -1,4 +1,4 @@ -import { withPayload } from '@payloadcms/next' +import { withPayload } from '@payloadcms/next/withPayload' /** @type {import('next').NextConfig} */ const nextConfig = { diff --git a/templates/blank-3.0/package.json b/templates/blank-3.0/package.json index 1f2730cd82..f5906e1136 100644 --- a/templates/blank-3.0/package.json +++ b/templates/blank-3.0/package.json @@ -10,19 +10,20 @@ "build": "cross-env NODE_OPTIONS=--no-deprecation next build", "payload": "cross-env NODE_OPTIONS=--no-deprecation payload", "start": "cross-env NODE_OPTIONS=--no-deprecation next start", - "lint": "cross-env NODE_OPTIONS=--no-deprecation next lint" + "lint": "cross-env NODE_OPTIONS=--no-deprecation next lint", + "generate:types": "payload generate:types" }, "engines": { "node": ">=18.19.0" }, "dependencies": { - "@payloadcms/db-mongodb": "alpha", - "@payloadcms/next": "alpha", - "@payloadcms/plugin-cloud": "alpha", - "@payloadcms/richtext-lexical": "alpha", + "@payloadcms/db-mongodb": "beta", + "@payloadcms/next": "beta", + "@payloadcms/plugin-cloud": "beta", + "@payloadcms/richtext-lexical": "beta", "cross-env": "^7.0.3", "next": "14.2.0-canary.23", - "payload": "alpha", + "payload": "beta", "react": "^18.2.0", "react-dom": "^18.2.0", "sharp": "0.32.6" diff --git a/templates/blank-3.0/src/payload.config.ts b/templates/blank-3.0/src/payload.config.ts index d1ba25647f..7a1b155371 100644 --- a/templates/blank-3.0/src/payload.config.ts +++ b/templates/blank-3.0/src/payload.config.ts @@ -1,6 +1,6 @@ import { mongooseAdapter } from '@payloadcms/db-mongodb' // database-adapter-import // import { payloadCloud } from '@payloadcms/plugin-cloud' -import { lexicalEditor } from '@payloadcms/richtext-lexical' // editor-import +import { lexicalEditor } from '@payloadcms/richtext-lexical' import path from 'path' import { buildConfig } from 'payload/config' // import sharp from 'sharp' @@ -27,6 +27,7 @@ export default buildConfig({ url: process.env.DATABASE_URI || '', }), // database-adapter-config-end + // Sharp is now an optional dependency - // if you want to resize images, crop, set focal point, etc. // make sure to install it and pass it to the config. diff --git a/test/_community/collections/Posts/index.ts b/test/_community/collections/Posts/index.ts index 1284ab8a27..3eadb517f0 100644 --- a/test/_community/collections/Posts/index.ts +++ b/test/_community/collections/Posts/index.ts @@ -15,18 +15,22 @@ export const PostsCollection: CollectionConfig = { type: 'text', }, { - type: 'row', - fields: [], - }, - { - name: 'associatedMedia', - type: 'upload', - access: { - create: () => true, - update: () => false, - }, - relationTo: mediaSlug, + name: 'richText', + type: 'richText', }, + // { + // type: 'row', + // fields: [], + // }, + // { + // name: 'associatedMedia', + // type: 'upload', + // access: { + // create: () => true, + // update: () => false, + // }, + // relationTo: mediaSlug, + // }, ], versions: { drafts: true, diff --git a/test/_community/config.ts b/test/_community/config.ts index 5f1e814f86..b7195870ee 100644 --- a/test/_community/config.ts +++ b/test/_community/config.ts @@ -12,11 +12,14 @@ const dirname = path.dirname(filename) export default buildConfigWithDefaults({ // ...extend config here - collections: [PostsCollection, MediaCollection], - globals: [ - MenuGlobal, - // ...add more globals here + collections: [ + PostsCollection, + // MediaCollection ], + // globals: [ + // MenuGlobal, + // // ...add more globals here + // ], onInit: async (payload) => { await payload.create({ collection: 'users', @@ -33,14 +36,14 @@ export default buildConfigWithDefaults({ }, }) - // Create image - const imageFilePath = path.resolve(dirname, '../uploads/image.png') - const imageFile = await getFileByPath(imageFilePath) + // // Create image + // const imageFilePath = path.resolve(dirname, '../uploads/image.png') + // const imageFile = await getFileByPath(imageFilePath) - await payload.create({ - collection: 'media', - data: {}, - file: imageFile, - }) + // await payload.create({ + // collection: 'media', + // data: {}, + // file: imageFile, + // }) }, }) diff --git a/test/access-control/config.ts b/test/access-control/config.ts index 450de34e11..4b38c242e1 100644 --- a/test/access-control/config.ts +++ b/test/access-control/config.ts @@ -8,6 +8,7 @@ import { firstArrayText, hiddenAccessSlug, hiddenFieldsSlug, + noAdminAccessEmail, readOnlySlug, relyOnRequestHeadersSlug, restrictedSlug, @@ -41,6 +42,7 @@ const UseRequestHeadersAccess: FieldAccess = ({ req: { headers } }) => { export default buildConfigWithDefaults({ admin: { user: 'users', + autoLogin: false, }, globals: [ { @@ -76,12 +78,17 @@ export default buildConfigWithDefaults({ slug: 'users', auth: true, access: { - // admin: () => true, - admin: async () => - new Promise((resolve) => { + // admin: () => true, + admin: async ({ req }) => { + if (req.user?.email === noAdminAccessEmail) { + return false + } + + return new Promise((resolve) => { // Simulate a request to an external service to determine access, i.e. another instance of Payload setTimeout(resolve, 50, true) // set to 'true' or 'false' here to simulate the response - }), + }) + }, }, fields: [ { @@ -431,6 +438,14 @@ export default buildConfigWithDefaults({ }, }) + await payload.create({ + collection: 'users', + data: { + email: noAdminAccessEmail, + password: 'test', + }, + }) + await payload.create({ collection: slug, data: { diff --git a/test/access-control/e2e.spec.ts b/test/access-control/e2e.spec.ts index 0d046404e2..b588e4a842 100644 --- a/test/access-control/e2e.spec.ts +++ b/test/access-control/e2e.spec.ts @@ -1,26 +1,31 @@ import type { Page } from '@playwright/test' -import type { Payload, TypeWithID } from 'payload/types' +import type { TypeWithID } from 'payload/types' import { expect, test } from '@playwright/test' +import { devUser } from 'credentials.js' import path from 'path' +import { wait } from 'payload/utilities' import { fileURLToPath } from 'url' -import type { ReadOnlyCollection, RestrictedVersion } from './payload-types.js' +import type { PayloadTestSDK } from '../helpers/sdk/index.js' +import type { Config, ReadOnlyCollection, RestrictedVersion } from './payload-types.js' import { closeNav, ensureAutoLoginAndCompilationIsDone, exactText, initPageConsoleErrorCatch, + login, openDocControls, openNav, saveDocAndAssert, } from '../helpers.js' import { AdminUrlUtil } from '../helpers/adminUrlUtil.js' -import { initPayloadE2E } from '../helpers/initPayloadE2E.js' +import { initPayloadE2ENoConfig } from '../helpers/initPayloadE2ENoConfig.js' import { POLL_TOPASS_TIMEOUT } from '../playwright.config.js' import { docLevelAccessSlug, + noAdminAccessEmail, readOnlySlug, restrictedSlug, restrictedVersionsSlug, @@ -40,7 +45,7 @@ const dirname = path.dirname(filename) */ const { beforeAll, describe } = test -let payload: Payload +let payload: PayloadTestSDK describe('access control', () => { let page: Page let url: AdminUrlUtil @@ -50,7 +55,7 @@ describe('access control', () => { let serverURL: string beforeAll(async ({ browser }) => { - ;({ payload, serverURL } = await initPayloadE2E({ dirname })) + ;({ payload, serverURL } = await initPayloadE2ENoConfig({ dirname })) url = new AdminUrlUtil(serverURL, slug) restrictedUrl = new AdminUrlUtil(serverURL, restrictedSlug) @@ -60,7 +65,8 @@ describe('access control', () => { const context = await browser.newContext() page = await context.newPage() initPageConsoleErrorCatch(page) - await ensureAutoLoginAndCompilationIsDone({ page, serverURL }) + + await login({ page, serverURL }) }) test('field without read access should not show', async () => { @@ -100,7 +106,7 @@ describe('access control', () => { beforeAll(async () => { existingDoc = await payload.create({ - collection: readOnlySlug, + collection: restrictedSlug, data: { name: 'name', }, @@ -135,7 +141,7 @@ describe('access control', () => { test('should not have access to existing doc', async () => { await page.goto(restrictedUrl.edit(existingDoc.id)) - await expect(page.locator('.unauthorized')).toBeVisible() + await expect(page.locator('.not-found')).toBeVisible() }) }) @@ -327,6 +333,28 @@ describe('access control', () => { // ensure user is allowed to edit this document await expect(documentDrawer2.locator('#field-name')).toBeEnabled() }) + + test('should completely block admin access', async () => { + const adminURL = `${serverURL}/admin` + await page.goto(adminURL) + await page.waitForURL(adminURL) + + await expect(page.locator('.dashboard')).toBeVisible() + + await page.goto(`${serverURL}/admin/logout`) + await page.waitForURL(`${serverURL}/admin/logout`) + + await login({ + page, + serverURL, + data: { + email: noAdminAccessEmail, + password: 'test', + }, + }) + + await expect(page.locator('.next-error-h1')).toBeVisible() + }) }) // eslint-disable-next-line @typescript-eslint/require-await diff --git a/test/access-control/shared.ts b/test/access-control/shared.ts index ef1ed5eaad..0b98730f1f 100644 --- a/test/access-control/shared.ts +++ b/test/access-control/shared.ts @@ -14,3 +14,5 @@ export const docLevelAccessSlug = 'doc-level-access' export const hiddenFieldsSlug = 'hidden-fields' export const hiddenAccessSlug = 'hidden-access' + +export const noAdminAccessEmail = 'no-admin-access@payloadcms.com' diff --git a/test/admin/components/AdminButton/index.tsx b/test/admin/components/AdminButton/index.tsx index 459d2c8a25..5cd5438e6e 100644 --- a/test/admin/components/AdminButton/index.tsx +++ b/test/admin/components/AdminButton/index.tsx @@ -1,8 +1,10 @@ +import type { SanitizedConfig } from 'payload/types' + import React from 'react' const baseClass = 'admin-button' -export const AdminButton: React.FC = () => { +export const AdminButton: SanitizedConfig['admin']['components']['actions'][0] = () => { return (
    { +export const AfterDashboard: SanitizedConfig['admin']['components']['afterDashboard'][0] = () => { return (

    Test Config

    diff --git a/test/admin/components/AfterNavLinks/index.tsx b/test/admin/components/AfterNavLinks/index.tsx index 84ecfb99b6..cb881f215c 100644 --- a/test/admin/components/AfterNavLinks/index.tsx +++ b/test/admin/components/AfterNavLinks/index.tsx @@ -1,5 +1,7 @@ 'use client' +import type { SanitizedConfig } from 'payload/types' + import { useConfig } from '@payloadcms/ui/providers/Config' import LinkImport from 'next/link.js' const Link = (LinkImport.default || LinkImport) as unknown as typeof LinkImport.default @@ -8,7 +10,7 @@ import React from 'react' const baseClass = 'after-nav-links' -export const AfterNavLinks: React.FC = () => { +export const AfterNavLinks: SanitizedConfig['admin']['components']['afterNavLinks'][0] = () => { const { routes: { admin: adminRoute }, } = useConfig() diff --git a/test/admin/components/BeforeLogin/index.tsx b/test/admin/components/BeforeLogin/index.tsx index d3be5424ce..c9be4fb006 100644 --- a/test/admin/components/BeforeLogin/index.tsx +++ b/test/admin/components/BeforeLogin/index.tsx @@ -1,10 +1,13 @@ 'use client' +import type { SanitizedConfig } from 'payload/types' + import { useTranslation } from '@payloadcms/ui/providers/Translation' import React from 'react' -export const BeforeLogin: React.FC = () => { +export const BeforeLogin: SanitizedConfig['admin']['components']['beforeLogin'][0] = () => { const translation = useTranslation() + return (

    {translation.t('general:welcome')}

    diff --git a/test/admin/components/CollectionAPIButton/index.tsx b/test/admin/components/CollectionAPIButton/index.tsx index 3d15673dce..b4f8ac915d 100644 --- a/test/admin/components/CollectionAPIButton/index.tsx +++ b/test/admin/components/CollectionAPIButton/index.tsx @@ -1,8 +1,10 @@ +import type { CustomComponent } from 'payload/config' + import React from 'react' const baseClass = 'collection-api-button' -export const CollectionAPIButton: React.FC = () => { +export const CollectionAPIButton: CustomComponent = () => { return (
    { +export const CollectionEditButton: CustomComponent = () => { return (
    { +export const CollectionListButton: CustomComponent = () => { return (
    { beforeAll(async ({ browser }, testInfo) => { const prebuild = Boolean(process.env.CI) - if (prebuild) testInfo.setTimeout(testInfo.timeout * 2) + if (prebuild) testInfo.setTimeout(testInfo.timeout * 3) process.env.SEED_IN_CONFIG_ONINIT = 'false' // Makes it so the payload config onInit seed is not run. Otherwise, the seed would be run unnecessarily twice for the initial test run - once for beforeEach and once for onInit ;({ payload, serverURL } = await initPayloadE2ENoConfig({ @@ -428,9 +429,12 @@ describe('admin', () => { test('collection — should render `id` as `useAsTitle` fallback', async () => { const { id } = await createPost() - await page.goto(postsUrl.edit(id)) + const postURL = postsUrl.edit(id) + await page.goto(postURL) + await page.waitForURL(postURL) + await wait(500) await page.locator('#field-title')?.fill('') - expect(await page.locator('.doc-header__title.render-title')?.innerText()).toContain('ID:') + await expect(page.locator('.doc-header__title.render-title:has-text("ID:")')).toBeVisible() await saveDocAndAssert(page) }) @@ -1052,8 +1056,8 @@ describe('admin', () => { await createPost() await page.goto(postsUrl.create) - // Open the drawer - await page.locator('.rich-text .list-drawer__toggler').click() + await openDocDrawer(page, '.rich-text .list-drawer__toggler') + const listDrawer = page.locator('[id^=list-drawer_1_]') await expect(listDrawer).toBeVisible() @@ -1092,7 +1096,7 @@ describe('admin', () => { await page.goto(postsUrl.create) // Open the drawer - await page.locator('.rich-text .list-drawer__toggler').click() + await openDocDrawer(page, '.rich-text .list-drawer__toggler') const listDrawer = page.locator('[id^=list-drawer_1_]') await expect(listDrawer).toBeVisible() diff --git a/test/auth/int.spec.ts b/test/auth/int.spec.ts index 99b6a50323..0a3b0eb0e9 100644 --- a/test/auth/int.spec.ts +++ b/test/auth/int.spec.ts @@ -74,6 +74,7 @@ describe('Auth', () => { body: JSON.stringify({ email, password, + 'confirm-password': password, }), }) @@ -622,4 +623,18 @@ describe('Auth', () => { expect(fail.status).toStrictEqual(404) }) }) + + describe('Local API', () => { + it('should login via the local API', async () => { + const authenticated = await payload.login({ + collection: slug, + data: { + email: devUser.email, + password: devUser.password, + }, + }) + + expect(authenticated.token).toBeTruthy() + }) + }) }) diff --git a/test/auth/payload-types.ts b/test/auth/payload-types.ts index 19ce576c79..17b24758de 100644 --- a/test/auth/payload-types.ts +++ b/test/auth/payload-types.ts @@ -7,73 +7,112 @@ */ export interface Config { + user: + | (User & { + collection: 'users' + }) + | (ApiKey & { + collection: 'api-keys' + }) + | (PublicUser & { + collection: 'public-users' + }) collections: { users: User 'api-keys': ApiKey 'public-users': PublicUser + relationsCollection: RelationsCollection 'payload-preferences': PayloadPreference 'payload-migrations': PayloadMigration } globals: {} } +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "users". + */ export interface User { id: string + adminOnlyField?: string | null roles: ('admin' | 'editor' | 'moderator' | 'user' | 'viewer')[] - namedSaveToJWT?: string + namedSaveToJWT?: string | null group?: { - liftedSaveToJWT?: string + liftedSaveToJWT?: string | null } groupSaveToJWT?: { - saveToJWTString?: string - saveToJWTFalse?: string + saveToJWTString?: string | null + saveToJWTFalse?: string | null } saveToJWTTab: { - test?: string + test?: string | null } tabSaveToJWTString: { - includedByDefault?: string + includedByDefault?: string | null } - tabLiftedSaveToJWT?: string - unnamedTabSaveToJWTString?: string - unnamedTabSaveToJWTFalse?: string - custom?: string + tabLiftedSaveToJWT?: string | null + unnamedTabSaveToJWTString?: string | null + unnamedTabSaveToJWTFalse?: string | null + custom?: string | null updatedAt: string createdAt: string - enableAPIKey?: boolean - apiKey?: string - apiKeyIndex?: string + enableAPIKey?: boolean | null + apiKey?: string | null + apiKeyIndex?: string | null email: string - resetPasswordToken?: string - resetPasswordExpiration?: string - salt?: string - hash?: string - loginAttempts?: number - lockUntil?: string - password?: string + resetPasswordToken?: string | null + resetPasswordExpiration?: string | null + salt?: string | null + hash?: string | null + loginAttempts?: number | null + lockUntil?: string | null + password?: string | null } +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "api-keys". + */ export interface ApiKey { id: string updatedAt: string createdAt: string - enableAPIKey?: boolean - apiKey?: string - apiKeyIndex?: string + enableAPIKey?: boolean | null + apiKey?: string | null + apiKeyIndex?: string | null } +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "public-users". + */ export interface PublicUser { id: string updatedAt: string createdAt: string email: string - resetPasswordToken?: string - resetPasswordExpiration?: string - salt?: string - hash?: string - _verified?: boolean - _verificationToken?: string - loginAttempts?: number - lockUntil?: string - password?: string + resetPasswordToken?: string | null + resetPasswordExpiration?: string | null + salt?: string | null + hash?: string | null + _verified?: boolean | null + _verificationToken?: string | null + loginAttempts?: number | null + lockUntil?: string | null + password?: string | null } +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "relationsCollection". + */ +export interface RelationsCollection { + id: string + rel?: (string | null) | User + text?: string | null + updatedAt: string + createdAt: string +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "payload-preferences". + */ export interface PayloadPreference { id: string user: @@ -89,7 +128,7 @@ export interface PayloadPreference { relationTo: 'public-users' value: string | PublicUser } - key?: string + key?: string | null value?: | { [k: string]: unknown @@ -102,19 +141,14 @@ export interface PayloadPreference { updatedAt: string createdAt: string } +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "payload-migrations". + */ export interface PayloadMigration { id: string - name?: string - batch?: number - schema?: - | { - [k: string]: unknown - } - | unknown[] - | string - | number - | boolean - | null + name?: string | null + batch?: number | null updatedAt: string createdAt: string } diff --git a/test/auth/removed-token/int.spec.ts b/test/auth/removed-token/int.spec.ts index 00bfa160b1..1add694125 100644 --- a/test/auth/removed-token/int.spec.ts +++ b/test/auth/removed-token/int.spec.ts @@ -14,7 +14,7 @@ describe('Remove token from auth responses', () => { ;({ payload, restClient } = await initPayloadInt(config)) await restClient.POST(`/${collectionSlug}/first-register`, { - body: JSON.stringify(devUser), + body: JSON.stringify({ ...devUser, 'confirm-password': devUser.password }), }) await restClient.login({ slug: collectionSlug, credentials: devUser }) }) diff --git a/test/buildConfigWithDefaults.ts b/test/buildConfigWithDefaults.ts index 49e9834ea9..dfd9a630e7 100644 --- a/test/buildConfigWithDefaults.ts +++ b/test/buildConfigWithDefaults.ts @@ -27,6 +27,9 @@ import { } from '@payloadcms/richtext-lexical' // import { slateEditor } from '@payloadcms/richtext-slate' import { type Config, buildConfig } from 'payload/config' +import { de } from 'payload/i18n/de' +import { en } from 'payload/i18n/en' +import { es } from 'payload/i18n/es' import sharp from 'sharp' import { reInitEndpoint } from './helpers/reInit.js' @@ -175,6 +178,14 @@ export async function buildConfigWithDefaults( declare: false, }, ...testConfig, + i18n: { + supportedLanguages: { + en, + es, + de, + }, + ...(testConfig?.i18n || {}), + }, } config.admin = { diff --git a/test/collections-rest/int.spec.ts b/test/collections-rest/int.spec.ts index 11a5f1a5aa..d98a72e419 100644 --- a/test/collections-rest/int.spec.ts +++ b/test/collections-rest/int.spec.ts @@ -1248,46 +1248,164 @@ describe('collections-rest', () => { expect(result.docs).toEqual([post1]) }) - describe('limit', () => { + describe('pagination', () => { + let relatedDoc + beforeEach(async () => { - await mapAsync([...Array(50)], async (_, i) => - createPost({ number: i, title: 'limit-test' }), - ) - }) - - it('should query a limited set of docs', async () => { - const response = await restClient.GET(`/${slug}`, { - query: { - where: { - title: { - equals: 'limit-test', - }, - }, - limit: 15, + relatedDoc = await payload.create({ + collection: relationSlug, + data: { + name: 'test', }, }) - const result = await response.json() - - expect(response.status).toEqual(200) - expect(result.docs).toHaveLength(15) + await mapAsync([...Array(10)], async (_, i) => { + await createPost({ + number: i, + relationField: relatedDoc.id as string, + title: 'paginate-test', + }) + }) }) - it('should query all docs when limit=0', async () => { - const response = await restClient.GET(`/${slug}`, { - query: { - where: { - title: { - equals: 'limit-test', - }, + it('should paginate with where query', async () => { + const query = { + limit: 4, + where: { + title: { + equals: 'paginate-test', }, - limit: 0, }, - }) - const result = await response.json() + } + let response = await restClient.GET(`/${slug}`, { query }) + const page1 = await response.json() - expect(response.status).toEqual(200) - expect(result.docs).toHaveLength(50) - expect(result.totalPages).toEqual(1) + response = await restClient.GET(`/${slug}`, { query: { ...query, page: 2 } }) + const page2 = await response.json() + + response = await restClient.GET(`/${slug}`, { query: { ...query, page: 3 } }) + const page3 = await response.json() + + expect(page1.hasNextPage).toStrictEqual(true) + expect(page1.hasPrevPage).toStrictEqual(false) + expect(page1.limit).toStrictEqual(4) + expect(page1.nextPage).toStrictEqual(2) + expect(page1.page).toStrictEqual(1) + expect(page1.pagingCounter).toStrictEqual(1) + expect(page1.prevPage).toStrictEqual(null) + expect(page1.totalDocs).toStrictEqual(10) + expect(page1.totalPages).toStrictEqual(3) + + expect(page2.hasNextPage).toStrictEqual(true) + expect(page2.hasPrevPage).toStrictEqual(true) + expect(page2.limit).toStrictEqual(4) + expect(page2.nextPage).toStrictEqual(3) + expect(page2.page).toStrictEqual(2) + expect(page2.pagingCounter).toStrictEqual(5) + expect(page2.prevPage).toStrictEqual(1) + expect(page2.totalDocs).toStrictEqual(10) + expect(page2.totalPages).toStrictEqual(3) + + expect(page3.hasNextPage).toStrictEqual(false) + expect(page3.hasPrevPage).toStrictEqual(true) + expect(page3.limit).toStrictEqual(4) + expect(page3.nextPage).toStrictEqual(null) + expect(page3.page).toStrictEqual(3) + expect(page3.pagingCounter).toStrictEqual(9) + expect(page3.prevPage).toStrictEqual(2) + expect(page3.totalDocs).toStrictEqual(10) + expect(page3.totalPages).toStrictEqual(3) + }) + + it('should paginate with where query on relationships', async () => { + const query = { + limit: 4, + where: { + relationField: { + equals: relatedDoc.id, + }, + }, + } + let response = await restClient.GET(`/${slug}`, { query }) + const page1 = await response.json() + + response = await restClient.GET(`/${slug}`, { query: { ...query, page: 2 } }) + const page2 = await response.json() + + response = await restClient.GET(`/${slug}`, { query: { ...query, page: 3 } }) + const page3 = await response.json() + + expect(page1.hasNextPage).toStrictEqual(true) + expect(page1.hasPrevPage).toStrictEqual(false) + expect(page1.limit).toStrictEqual(4) + expect(page1.nextPage).toStrictEqual(2) + expect(page1.page).toStrictEqual(1) + expect(page1.pagingCounter).toStrictEqual(1) + expect(page1.prevPage).toStrictEqual(null) + expect(page1.totalDocs).toStrictEqual(10) + expect(page1.totalPages).toStrictEqual(3) + + expect(page2.hasNextPage).toStrictEqual(true) + expect(page2.hasPrevPage).toStrictEqual(true) + expect(page2.limit).toStrictEqual(4) + expect(page2.nextPage).toStrictEqual(3) + expect(page2.page).toStrictEqual(2) + expect(page2.pagingCounter).toStrictEqual(5) + expect(page2.prevPage).toStrictEqual(1) + expect(page2.totalDocs).toStrictEqual(10) + expect(page2.totalPages).toStrictEqual(3) + + expect(page3.hasNextPage).toStrictEqual(false) + expect(page3.hasPrevPage).toStrictEqual(true) + expect(page3.limit).toStrictEqual(4) + expect(page3.nextPage).toStrictEqual(null) + expect(page3.page).toStrictEqual(3) + expect(page3.pagingCounter).toStrictEqual(9) + expect(page3.prevPage).toStrictEqual(2) + expect(page3.totalDocs).toStrictEqual(10) + expect(page3.totalPages).toStrictEqual(3) + }) + + describe('limit', () => { + beforeEach(async () => { + await mapAsync([...Array(50)], async (_, i) => + createPost({ number: i, title: 'limit-test' }), + ) + }) + + it('should query a limited set of docs', async () => { + const response = await restClient.GET(`/${slug}`, { + query: { + where: { + title: { + equals: 'limit-test', + }, + }, + limit: 15, + }, + }) + const result = await response.json() + + expect(response.status).toEqual(200) + expect(result.docs).toHaveLength(15) + }) + + it('should query all docs when limit=0', async () => { + const response = await restClient.GET(`/${slug}`, { + query: { + where: { + title: { + equals: 'limit-test', + }, + }, + limit: 0, + }, + }) + const result = await response.json() + + expect(response.status).toEqual(200) + expect(result.docs).toHaveLength(50) + expect(result.totalPages).toEqual(1) + }) }) }) diff --git a/test/database/config.ts b/test/database/config.ts index 0f768de704..156d1397b6 100644 --- a/test/database/config.ts +++ b/test/database/config.ts @@ -5,6 +5,21 @@ export default buildConfigWithDefaults({ collections: [ { slug: 'posts', + hooks: { + beforeOperation: [ + ({ req, operation, args }) => { + if (operation === 'update') { + const defaultIDType = req.payload.db.defaultIDType + + if (defaultIDType === 'number' && typeof args.id === 'string') { + throw new Error('ID was not sanitized to a number properly') + } + } + + return args + }, + ], + }, fields: [ { name: 'title', diff --git a/test/database/int.spec.ts b/test/database/int.spec.ts index c9cc8104ee..e1f0d049dc 100644 --- a/test/database/int.spec.ts +++ b/test/database/int.spec.ts @@ -1,4 +1,5 @@ import type { PostgresAdapter } from '@payloadcms/db-postgres/types' +import type { NextRESTClient } from 'helpers/NextRESTClient.js' import type { Payload } from 'payload' import type { PayloadRequest, TypeWithID } from 'payload/types' @@ -18,13 +19,15 @@ const dirname = path.dirname(filename) let payload: Payload let user: TypeWithID & Record +let token: string +let restClient: NextRESTClient const collection = 'posts' const title = 'title' process.env.PAYLOAD_CONFIG_PATH = path.join(dirname, 'config.ts') describe('database', () => { beforeAll(async () => { - ;({ payload } = await initPayloadInt(configPromise)) + ;({ payload, restClient } = await initPayloadInt(configPromise)) payload.db.migrationDir = path.join(dirname, './migrations') const loginResult = await payload.login({ @@ -36,6 +39,7 @@ describe('database', () => { }) user = loginResult.user + token = loginResult.token }) afterAll(async () => { @@ -44,6 +48,34 @@ describe('database', () => { } }) + describe('id type', () => { + it('should sanitize incoming IDs if ID type is number', async () => { + const created = await restClient + .POST(`/posts`, { + body: JSON.stringify({ + title: 'post to test that ID comes in as proper type', + }), + headers: { + Authorization: `Bearer ${token}`, + }, + }) + .then((res) => res.json()) + + const { doc: updated } = await restClient + .PATCH(`/posts/${created.doc.id}`, { + body: JSON.stringify({ + title: 'hello', + }), + headers: { + Authorization: `Bearer ${token}`, + }, + }) + .then((res) => res.json()) + + expect(updated.id).toStrictEqual(created.doc.id) + }) + }) + describe('migrations', () => { beforeAll(async () => { if (process.env.PAYLOAD_DROP_DATABASE === 'true' && 'drizzle' in payload.db) { diff --git a/test/dev.js b/test/dev.js index 04a64413f0..dc3b15b721 100644 --- a/test/dev.js +++ b/test/dev.js @@ -1,5 +1,4 @@ import minimist from 'minimist' -import { MongoMemoryReplSet } from 'mongodb-memory-server' import { nextDev } from 'next/dist/cli/next-dev.js' import open from 'open' import { getNextJSRootDir } from './helpers/getNextJSRootDir.js' @@ -29,15 +28,6 @@ if (args.o) { await open('http://localhost:3000/admin') } -global._mongoMemoryServer = await MongoMemoryReplSet.create({ - replSet: { - count: 3, - dbName: 'payloadmemory', - }, -}) - -process.env.MONGODB_MEMORY_SERVER_URI = global._mongoMemoryServer.getUri() - // @ts-expect-error await nextDev({ port: process.env.PORT || 3000, dirname: rootDir }, 'default', rootDir) diff --git a/test/fields-relationship/e2e.spec.ts b/test/fields-relationship/e2e.spec.ts index db42490b19..922a64ba04 100644 --- a/test/fields-relationship/e2e.spec.ts +++ b/test/fields-relationship/e2e.spec.ts @@ -6,8 +6,10 @@ import path from 'path' import { wait } from 'payload/utilities' import { fileURLToPath } from 'url' +import type { PayloadTestSDK } from '../helpers/sdk/index.js' import type { FieldsRelationship as CollectionWithRelationships, + Config, RelationOne, RelationRestricted, RelationTwo, @@ -19,10 +21,11 @@ import { ensureAutoLoginAndCompilationIsDone, initPageConsoleErrorCatch, openDocControls, + openDocDrawer, saveDocAndAssert, } from '../helpers.js' import { AdminUrlUtil } from '../helpers/adminUrlUtil.js' -import { initPayloadE2E } from '../helpers/initPayloadE2E.js' +import { initPayloadE2ENoConfig } from '../helpers/initPayloadE2ENoConfig.js' import { relationFalseFilterOptionSlug, relationOneSlug, @@ -33,12 +36,13 @@ import { relationWithTitleSlug, slug, } from './collectionSlugs.js' + const filename = fileURLToPath(import.meta.url) const dirname = path.dirname(filename) const { beforeAll, beforeEach, describe } = test -let payload: Payload +let payload: PayloadTestSDK describe('fields - relationship', () => { let url: AdminUrlUtil @@ -53,7 +57,7 @@ describe('fields - relationship', () => { let serverURL: string beforeAll(async ({ browser }) => { - ;({ payload, serverURL } = await initPayloadE2E({ dirname })) + ;({ payload, serverURL } = await initPayloadE2ENoConfig({ dirname })) url = new AdminUrlUtil(serverURL, slug) @@ -387,16 +391,14 @@ describe('fields - relationship', () => { }) test('should open document drawer from read-only relationships', async () => { - await page.goto(url.edit(docWithExistingRelations.id)) + const editURL = url.edit(docWithExistingRelations.id) + await page.goto(editURL) + await page.waitForURL(editURL) - const field = page.locator('#field-relationshipReadOnly') - - const button = field.locator( - 'button.relationship--single-value__drawer-toggler.doc-drawer__toggler', + await openDocDrawer( + page, + '#field-relationshipReadOnly button.relationship--single-value__drawer-toggler.doc-drawer__toggler', ) - await button.click() - - await wait(500) const documentDrawer = page.locator('[id^=doc-drawer_relation-one_1_]') await expect(documentDrawer).toBeVisible() diff --git a/test/fields/collections/Array/e2e.spec.ts b/test/fields/collections/Array/e2e.spec.ts new file mode 100644 index 0000000000..fd01392807 --- /dev/null +++ b/test/fields/collections/Array/e2e.spec.ts @@ -0,0 +1,288 @@ +import type { Page } from '@playwright/test' + +import { expect, test } from '@playwright/test' +import path from 'path' +import { wait } from 'payload/utilities' +import { fileURLToPath } from 'url' + +import type { PayloadTestSDK } from '../../../helpers/sdk/index.js' +import type { Config } from '../../payload-types.js' + +import { + ensureAutoLoginAndCompilationIsDone, + initPageConsoleErrorCatch, + saveDocAndAssert, +} from '../../../helpers.js' +import { AdminUrlUtil } from '../../../helpers/adminUrlUtil.js' +import { initPayloadE2ENoConfig } from '../../../helpers/initPayloadE2ENoConfig.js' +import { reInitializeDB } from '../../../helpers/reInit.js' +import { RESTClient } from '../../../helpers/rest.js' + +const filename = fileURLToPath(import.meta.url) +const currentFolder = path.dirname(filename) +const dirname = path.resolve(currentFolder, '../../') + +const { beforeAll, beforeEach, describe } = test + +let payload: PayloadTestSDK +let client: RESTClient +let page: Page +let serverURL: string +// If we want to make this run in parallel: test.describe.configure({ mode: 'parallel' }) + +describe('Array', () => { + beforeAll(async ({ browser }) => { + process.env.SEED_IN_CONFIG_ONINIT = 'false' // Makes it so the payload config onInit seed is not run. Otherwise, the seed would be run unnecessarily twice for the initial test run - once for beforeEach and once for onInit + ;({ payload, serverURL } = await initPayloadE2ENoConfig({ + dirname, + })) + + const context = await browser.newContext() + page = await context.newPage() + initPageConsoleErrorCatch(page) + }) + beforeEach(async () => { + await reInitializeDB({ + serverURL, + snapshotKey: 'fieldsArrayTest', + uploadsDir: path.resolve(dirname, '../Upload/uploads'), + }) + + if (client) { + await client.logout() + } + client = new RESTClient(null, { defaultSlug: 'users', serverURL }) + await client.login() + + await ensureAutoLoginAndCompilationIsDone({ page, serverURL }) + }) + + let url: AdminUrlUtil + beforeAll(() => { + url = new AdminUrlUtil(serverURL, 'array-fields') + }) + + test('should be readOnly', async () => { + await page.goto(url.create) + const field = page.locator('#field-readOnly__0__text') + await expect(field).toBeDisabled() + }) + + test('should have defaultValue', async () => { + await page.goto(url.create) + const field = page.locator('#field-readOnly__0__text') + await expect(field).toHaveValue('defaultValue') + }) + + test('should render RowLabel using a component', async () => { + const label = 'custom row label as component' + await page.goto(url.create) + await page.locator('#field-rowLabelAsComponent >> .array-field__add-row').click() + + await page.locator('#field-rowLabelAsComponent__0__title').fill(label) + await wait(100) + const customRowLabel = page.locator( + '#rowLabelAsComponent-row-0 >> .array-field__row-header > :text("custom row label")', + ) + await expect(customRowLabel).toHaveCSS('text-transform', 'uppercase') + }) + + // eslint-disable-next-line playwright/expect-expect + test('should bypass min rows validation when no rows present and field is not required', async () => { + await page.goto(url.create) + await saveDocAndAssert(page) + }) + + test('should fail min rows validation when rows are present', async () => { + await page.goto(url.create) + await page.locator('#field-arrayWithMinRows >> .array-field__add-row').click() + + await page.click('#action-save', { delay: 100 }) + await expect(page.locator('.Toastify')).toContainText( + 'The following field is invalid: arrayWithMinRows', + ) + }) + + describe('row manipulation', () => { + test('should add, remove and duplicate rows', async () => { + const assertText0 = 'array row 1' + const assertGroupText0 = 'text in group in row 1' + const assertText1 = 'array row 2' + const assertText3 = 'array row 3' + const assertGroupText3 = 'text in group in row 3' + await page.goto(url.create) + await page.mouse.wheel(0, 1750) + await page.locator('#field-potentiallyEmptyArray').scrollIntoViewIfNeeded() + await wait(300) + + // Add 3 rows + await page.locator('#field-potentiallyEmptyArray > .array-field__add-row').click() + await wait(300) + await page.locator('#field-potentiallyEmptyArray > .array-field__add-row').click() + await wait(300) + await page.locator('#field-potentiallyEmptyArray > .array-field__add-row').click() + await wait(300) + + // Fill out row 1 + await page.locator('#field-potentiallyEmptyArray__0__text').fill(assertText0) + await page + .locator('#field-potentiallyEmptyArray__0__groupInRow__textInGroupInRow') + .fill(assertGroupText0) + // Fill out row 2 + await page.locator('#field-potentiallyEmptyArray__1__text').fill(assertText1) + // Fill out row 3 + await page.locator('#field-potentiallyEmptyArray__2__text').fill(assertText3) + await page + .locator('#field-potentiallyEmptyArray__2__groupInRow__textInGroupInRow') + .fill(assertGroupText3) + + // Remove row 1 + await page.locator('#potentiallyEmptyArray-row-0 .array-actions__button').click() + await page + .locator('#potentiallyEmptyArray-row-0 .popup__scroll-container .array-actions__remove') + .click() + // Remove row 2 + await page.locator('#potentiallyEmptyArray-row-0 .array-actions__button').click() + await page + .locator('#potentiallyEmptyArray-row-0 .popup__scroll-container .array-actions__remove') + .click() + + // Save document + await saveDocAndAssert(page) + + // Scroll to array row (fields are not rendered in DOM until on screen) + await page.locator('#field-potentiallyEmptyArray__0__groupInRow').scrollIntoViewIfNeeded() + + // Expect the remaining row to be the third row + const input = page.locator('#field-potentiallyEmptyArray__0__groupInRow__textInGroupInRow') + await expect(input).toHaveValue(assertGroupText3) + + // Duplicate row + await page.locator('#potentiallyEmptyArray-row-0 .array-actions__button').click() + await page + .locator('#potentiallyEmptyArray-row-0 .popup__scroll-container .array-actions__duplicate') + .click() + + // Update duplicated row group field text + await page + .locator('#field-potentiallyEmptyArray__1__groupInRow__textInGroupInRow') + .fill(`${assertGroupText3} duplicate`) + + // Save document + await saveDocAndAssert(page) + + // Expect the second row to be a duplicate of the remaining row + await expect( + page.locator('#field-potentiallyEmptyArray__1__groupInRow__textInGroupInRow'), + ).toHaveValue(`${assertGroupText3} duplicate`) + + // Remove row 1 + await page.locator('#potentiallyEmptyArray-row-0 .array-actions__button').click() + await page + .locator('#potentiallyEmptyArray-row-0 .popup__scroll-container .array-actions__remove') + .click() + + // Save document + await saveDocAndAssert(page) + + // Expect the remaining row to be the copy of the duplicate row + await expect( + page.locator('#field-potentiallyEmptyArray__0__groupInRow__textInGroupInRow'), + ).toHaveValue(`${assertGroupText3} duplicate`) + }) + }) + + // TODO: re-enable this test + test.skip('should bulk update', async () => { + await payload.create({ + collection: 'array-fields', + data: { + title: 'for test 1', + items: [ + { + text: 'test 1', + }, + { + text: 'test 2', + }, + ], + }, + }) + + await payload.create({ + collection: 'array-fields', + data: { + title: 'for test 2', + items: [ + { + text: 'test 3', + }, + ], + }, + }) + + await payload.create({ + collection: 'array-fields', + data: { + title: 'for test 3', + items: [ + { + text: 'test 4', + }, + { + text: 'test 5', + }, + { + text: 'test 6', + }, + ], + }, + }) + + const bulkText = 'Bulk update text' + await page.goto(url.list) + await page.waitForSelector('.table > table > tbody > tr td.cell-title') + const rows = page.locator('.table > table > tbody > tr', { + has: page.locator('td.cell-title a', { + hasText: 'for test', + }), + }) + const count = await rows.count() + + for (let i = 0; i < count; i++) { + await rows + .nth(i) + .locator('td.cell-_select .checkbox-input__input > input[type="checkbox"]') + .click() + } + await page.locator('.edit-many__toggle').click() + await page.locator('.field-select .rs__control').click() + + const arrayOption = page.locator('.rs__option', { + hasText: 'Items', + }) + + await expect(arrayOption).toBeVisible() + + await arrayOption.click() + await wait(200) + + const addRowButton = page.locator('#field-items > .array-field__add-row') + + await expect(addRowButton).toBeVisible() + + await addRowButton.click() + await wait(200) + + const targetInput = page.locator('#field-items__0__text') + + await expect(targetInput).toBeVisible() + + await targetInput.fill(bulkText) + + await page.locator('#edit-array-fields .form-submit .edit-many__save').click() + await expect(page.locator('.Toastify__toast--success')).toContainText( + 'Updated 3 Array Fields successfully.', + ) + }) +}) diff --git a/test/fields/collections/Blocks/e2e.spec.ts b/test/fields/collections/Blocks/e2e.spec.ts new file mode 100644 index 0000000000..35854bc930 --- /dev/null +++ b/test/fields/collections/Blocks/e2e.spec.ts @@ -0,0 +1,245 @@ +import type { Page } from '@playwright/test' + +import { expect, test } from '@playwright/test' +import path from 'path' +import { fileURLToPath } from 'url' + +import { + ensureAutoLoginAndCompilationIsDone, + initPageConsoleErrorCatch, + saveDocAndAssert, +} from '../../../helpers.js' +import { AdminUrlUtil } from '../../../helpers/adminUrlUtil.js' +import { initPayloadE2ENoConfig } from '../../../helpers/initPayloadE2ENoConfig.js' +import { reInitializeDB } from '../../../helpers/reInit.js' +import { RESTClient } from '../../../helpers/rest.js' + +const filename = fileURLToPath(import.meta.url) +const currentFolder = path.dirname(filename) +const dirname = path.resolve(currentFolder, '../../') + +const { beforeAll, beforeEach, describe } = test + +let client: RESTClient +let page: Page +let serverURL: string +// If we want to make this run in parallel: test.describe.configure({ mode: 'parallel' }) + +describe('Block fields', () => { + beforeAll(async ({ browser }) => { + process.env.SEED_IN_CONFIG_ONINIT = 'false' // Makes it so the payload config onInit seed is not run. Otherwise, the seed would be run unnecessarily twice for the initial test run - once for beforeEach and once for onInit + ;({ serverURL } = await initPayloadE2ENoConfig({ + dirname, + })) + + const context = await browser.newContext() + page = await context.newPage() + initPageConsoleErrorCatch(page) + }) + beforeEach(async () => { + await reInitializeDB({ + serverURL, + snapshotKey: 'blockFieldsTest', + uploadsDir: path.resolve(dirname, '../Upload/uploads'), + }) + + if (client) { + await client.logout() + } + client = new RESTClient(null, { defaultSlug: 'users', serverURL }) + await client.login() + + await ensureAutoLoginAndCompilationIsDone({ page, serverURL }) + }) + + let url: AdminUrlUtil + beforeAll(() => { + url = new AdminUrlUtil(serverURL, 'block-fields') + }) + + test('should open blocks drawer and select first block', async () => { + await page.goto(url.create) + const addButton = page.locator('#field-blocks > .blocks-field__drawer-toggler') + await expect(addButton).toContainText('Add Block') + await addButton.click() + + const blocksDrawer = page.locator('[id^=drawer_1_blocks-drawer-]') + await expect(blocksDrawer).toBeVisible() + + // select the first block in the drawer + const firstBlockSelector = blocksDrawer + .locator('.blocks-drawer__blocks .blocks-drawer__block') + .first() + await expect(firstBlockSelector).toContainText('Content') + await firstBlockSelector.click() + + // ensure the block was appended to the rows + const addedRow = page.locator('#field-blocks .blocks-field__row').last() + await expect(addedRow).toBeVisible() + await expect(addedRow.locator('.blocks-field__block-pill-content')).toContainText('Content') + }) + + test('should open blocks drawer from block row and add below', async () => { + await page.goto(url.create) + const firstRow = page.locator('#field-blocks #blocks-row-0') + const rowActions = firstRow.locator('.collapsible__actions') + await expect(rowActions).toBeVisible() + + await rowActions.locator('.array-actions__button').click() + const addBelowButton = rowActions.locator('.array-actions__action.array-actions__add') + await expect(addBelowButton).toBeVisible() + await addBelowButton.click() + + const blocksDrawer = page.locator('[id^=drawer_1_blocks-drawer-]') + await expect(blocksDrawer).toBeVisible() + + // select the first block in the drawer + const firstBlockSelector = blocksDrawer + .locator('.blocks-drawer__blocks .blocks-drawer__block') + .first() + await expect(firstBlockSelector).toContainText('Content') + await firstBlockSelector.click() + + // ensure the block was inserted beneath the first in the rows + const addedRow = page.locator('#field-blocks #blocks-row-1') + await expect(addedRow).toBeVisible() + await expect(addedRow.locator('.blocks-field__block-pill-content')).toContainText('Content') // went from `Number` to `Content` + }) + + test('should use i18n block labels', async () => { + await page.goto(url.create) + await expect(page.locator('#field-i18nBlocks .blocks-field__header')).toContainText('Block en') + + const addButton = page.locator('#field-i18nBlocks > .blocks-field__drawer-toggler') + await expect(addButton).toContainText('Add Block en') + await addButton.click() + + const blocksDrawer = page.locator('[id^=drawer_1_blocks-drawer-]') + await expect(blocksDrawer).toBeVisible() + + // select the first block in the drawer + const firstBlockSelector = blocksDrawer + .locator('.blocks-drawer__blocks .blocks-drawer__block') + .first() + await expect(firstBlockSelector).toContainText('Text en') + await firstBlockSelector.click() + + // ensure the block was appended to the rows + const firstRow = page.locator('#field-i18nBlocks .blocks-field__row').first() + await expect(firstRow).toBeVisible() + await expect(firstRow.locator('.blocks-field__block-pill-text')).toContainText('Text en') + }) + + test('should add different blocks with similar field configs', async () => { + await page.goto(url.create) + + async function addBlock(name: 'Block A' | 'Block B') { + await page + .locator('#field-blocksWithSimilarConfigs') + .getByRole('button', { name: 'Add Blocks With Similar Config' }) + .click() + await page.getByRole('button', { name }).click() + } + + await addBlock('Block A') + + await page + .locator('#blocksWithSimilarConfigs-row-0') + .getByRole('button', { name: 'Add Item' }) + .click() + await page + .locator('input[name="blocksWithSimilarConfigs.0.items.0.title"]') + .fill('items>0>title') + + await expect( + page.locator('input[name="blocksWithSimilarConfigs.0.items.0.title"]'), + ).toHaveValue('items>0>title') + + await addBlock('Block B') + + await page + .locator('#blocksWithSimilarConfigs-row-1') + .getByRole('button', { name: 'Add Item' }) + .click() + await page + .locator('input[name="blocksWithSimilarConfigs.1.items.0.title2"]') + .fill('items>1>title') + + await expect( + page.locator('input[name="blocksWithSimilarConfigs.1.items.0.title2"]'), + ).toHaveValue('items>1>title') + }) + + test('should bypass min rows validation when no rows present and field is not required', async () => { + await page.goto(url.create) + await saveDocAndAssert(page) + await expect(page.locator('.Toastify')).toContainText('successfully') + }) + + test('should fail min rows validation when rows are present', async () => { + await page.goto(url.create) + + await page + .locator('#field-blocksWithMinRows') + .getByRole('button', { name: 'Add Blocks With Min Row' }) + .click() + + const blocksDrawer = page.locator('[id^=drawer_1_blocks-drawer-]') + await expect(blocksDrawer).toBeVisible() + + const firstBlockSelector = blocksDrawer + .locator('.blocks-drawer__blocks .blocks-drawer__block') + .first() + + await firstBlockSelector.click() + + const firstRow = page.locator('input[name="blocksWithMinRows.0.blockTitle"]') + await expect(firstRow).toBeVisible() + await firstRow.fill('first row') + await expect(firstRow).toHaveValue('first row') + + await page.click('#action-save', { delay: 100 }) + await expect(page.locator('.Toastify')).toContainText( + 'The following field is invalid: blocksWithMinRows', + ) + }) + + describe('row manipulation', () => { + describe('react hooks', () => { + test('should add 2 new block rows', async () => { + await page.goto(url.create) + + await page + .locator('.custom-blocks-field-management') + .getByRole('button', { name: 'Add Block 1' }) + .click() + + const customBlocks = page.locator( + '#field-customBlocks input[name="customBlocks.0.block1Title"]', + ) + + await page.mouse.wheel(0, 1750) + + await customBlocks.scrollIntoViewIfNeeded() + + await expect(customBlocks).toHaveValue('Block 1: Prefilled Title') + + await page + .locator('.custom-blocks-field-management') + .getByRole('button', { name: 'Add Block 2' }) + .click() + await expect( + page.locator('#field-customBlocks input[name="customBlocks.1.block2Title"]'), + ).toHaveValue('Block 2: Prefilled Title') + + await page + .locator('.custom-blocks-field-management') + .getByRole('button', { name: 'Replace Block 2' }) + .click() + await expect( + page.locator('#field-customBlocks input[name="customBlocks.1.block1Title"]'), + ).toHaveValue('REPLACED BLOCK') + }) + }) + }) +}) diff --git a/test/fields/collections/Lexical/blocks.ts b/test/fields/collections/Lexical/blocks.ts index 768b2c9093..593e12c54b 100644 --- a/test/fields/collections/Lexical/blocks.ts +++ b/test/fields/collections/Lexical/blocks.ts @@ -1,5 +1,7 @@ -import type { ArrayField, Block } from 'payload/types' +import type { LexicalBlock } from '@payloadcms/richtext-lexical' +import type { ArrayField } from 'payload/types' +import { BlocksFeature } from '@payloadcms/richtext-lexical' import { lexicalEditor } from '@payloadcms/richtext-lexical' import { textFieldsSlug } from '../Text/shared.js' @@ -29,7 +31,7 @@ export const BlockColumns = ({ name }: { name: string }): ArrayField => ({ }, ], }) -export const ConditionalLayoutBlock: Block = { +export const ConditionalLayoutBlock: LexicalBlock = { fields: [ { label: 'Layout', @@ -73,7 +75,7 @@ export const ConditionalLayoutBlock: Block = { slug: 'conditionalLayout', } -export const TextBlock: Block = { +export const TextBlock: LexicalBlock = { fields: [ { name: 'text', @@ -84,7 +86,7 @@ export const TextBlock: Block = { slug: 'text', } -export const RadioButtonsBlock: Block = { +export const RadioButtonsBlock: LexicalBlock = { interfaceName: 'LexicalBlocksRadioButtonsBlock', fields: [ { @@ -109,18 +111,41 @@ export const RadioButtonsBlock: Block = { slug: 'radioButtons', } -export const RichTextBlock: Block = { +export const RichTextBlock: LexicalBlock = { fields: [ { - name: 'richText', + name: 'richTextField', type: 'richText', - editor: lexicalEditor(), + editor: lexicalEditor({ + features: ({ defaultFeatures }) => [ + ...defaultFeatures, + BlocksFeature({ + blocks: [ + { + fields: [ + { + name: 'subRichTextField', + type: 'richText', + editor: lexicalEditor({}), + }, + { + name: 'subUploadField', + type: 'upload', + relationTo: 'uploads', + }, + ], + slug: 'lexicalAndUploadBlock', + }, + ], + }), + ], + }), }, ], - slug: 'richText', + slug: 'richTextBlock', } -export const UploadAndRichTextBlock: Block = { +export const UploadAndRichTextBlock: LexicalBlock = { fields: [ { name: 'upload', @@ -137,7 +162,7 @@ export const UploadAndRichTextBlock: Block = { slug: 'uploadAndRichText', } -export const RelationshipHasManyBlock: Block = { +export const RelationshipHasManyBlock: LexicalBlock = { fields: [ { name: 'rel', @@ -149,7 +174,7 @@ export const RelationshipHasManyBlock: Block = { ], slug: 'relationshipHasManyBlock', } -export const RelationshipBlock: Block = { +export const RelationshipBlock: LexicalBlock = { fields: [ { name: 'rel', @@ -161,7 +186,7 @@ export const RelationshipBlock: Block = { slug: 'relationshipBlock', } -export const SelectFieldBlock: Block = { +export const SelectFieldBlock: LexicalBlock = { fields: [ { name: 'select', @@ -193,7 +218,7 @@ export const SelectFieldBlock: Block = { slug: 'select', } -export const SubBlockBlock: Block = { +export const SubBlockBlock: LexicalBlock = { slug: 'subBlock', fields: [ { diff --git a/test/fields/lexical.e2e.spec.ts b/test/fields/collections/Lexical/e2e.spec.ts similarity index 70% rename from test/fields/lexical.e2e.spec.ts rename to test/fields/collections/Lexical/e2e.spec.ts index 0ea4e229f9..197413321b 100644 --- a/test/fields/lexical.e2e.spec.ts +++ b/test/fields/collections/Lexical/e2e.spec.ts @@ -1,28 +1,31 @@ -import type { SerializedBlockNode } from '@payloadcms/richtext-lexical' +import type { SerializedBlockNode, SerializedLinkNode } from '@payloadcms/richtext-lexical' import type { Page } from '@playwright/test' +import type { PayloadTestSDK } from 'helpers/sdk/index.js' import type { SerializedEditorState, SerializedParagraphNode, SerializedTextNode } from 'lexical' -import type { Payload } from 'payload' import { expect, test } from '@playwright/test' +import { initPayloadE2ENoConfig } from 'helpers/initPayloadE2ENoConfig.js' +import { reInitializeDB } from 'helpers/reInit.js' import path from 'path' +import { wait } from 'payload/utilities' import { fileURLToPath } from 'url' -import type { LexicalField } from './payload-types.js' +import type { Config, LexicalField, Upload } from '../../payload-types.js' + +import { initPageConsoleErrorCatch, saveDocAndAssert } from '../../../helpers.js' +import { AdminUrlUtil } from '../../../helpers/adminUrlUtil.js' +import { RESTClient } from '../../../helpers/rest.js' +import { POLL_TOPASS_TIMEOUT } from '../../../playwright.config.js' +import { lexicalFieldsSlug } from '../../slugs.js' +import { lexicalDocData } from './data.js' -import { initPageConsoleErrorCatch, saveDocAndAssert } from '../helpers.js' -import { AdminUrlUtil } from '../helpers/adminUrlUtil.js' -import { initPayloadE2E } from '../helpers/initPayloadE2E.js' -import { RESTClient } from '../helpers/rest.js' -import { POLL_TOPASS_TIMEOUT } from '../playwright.config.js' -import { lexicalDocData } from './collections/Lexical/data.js' -import { clearAndSeedEverything } from './seed.js' -import { lexicalFieldsSlug } from './slugs.js' const filename = fileURLToPath(import.meta.url) -const dirname = path.dirname(filename) +const currentFolder = path.dirname(filename) +const dirname = path.resolve(currentFolder, '../../') const { beforeAll, beforeEach, describe } = test -let payload: Payload +let payload: PayloadTestSDK let client: RESTClient let page: Page let serverURL: string @@ -48,7 +51,7 @@ async function navigateToLexicalFields(navigateToListView: boolean = true) { describe('lexical', () => { beforeAll(async ({ browser }) => { process.env.SEED_IN_CONFIG_ONINIT = 'false' // Makes it so the payload config onInit seed is not run. Otherwise, the seed would be run unnecessarily twice for the initial test run - once for beforeEach and once for onInit - ;({ payload, serverURL } = await initPayloadE2E({ dirname })) + ;({ payload, serverURL } = await initPayloadE2ENoConfig({ dirname })) const context = await browser.newContext() page = await context.newPage() @@ -56,7 +59,12 @@ describe('lexical', () => { initPageConsoleErrorCatch(page) }) beforeEach(async () => { - await clearAndSeedEverything(payload) + await reInitializeDB({ + serverURL, + snapshotKey: 'fieldsLexicalTest', + uploadsDir: path.resolve(dirname, '../Upload/uploads'), + }) + if (client) { await client.logout() } @@ -140,6 +148,7 @@ describe('lexical', () => { await payload.find({ collection: lexicalFieldsSlug, depth: 0, + overrideAccess: true, where: { title: { equals: lexicalDocData.title, @@ -209,6 +218,7 @@ describe('lexical', () => { await payload.find({ collection: lexicalFieldsSlug, depth: 0, + overrideAccess: true, where: { title: { equals: lexicalDocData.title, @@ -359,6 +369,7 @@ describe('lexical', () => { await payload.find({ collection: lexicalFieldsSlug, depth: 0, + overrideAccess: true, where: { title: { equals: lexicalDocData.title, @@ -368,8 +379,11 @@ describe('lexical', () => { ).docs[0] as never const lexicalField: SerializedEditorState = lexicalDoc.lexicalWithBlocks + const blockNode: SerializedBlockNode = lexicalField.root.children[4] as SerializedBlockNode - const textNodeInBlockNodeRichText = blockNode.fields.richText.root.children[1].children[0] + + const textNodeInBlockNodeRichText = + blockNode.fields.richTextField.root.children[1].children[0] expect(textNodeInBlockNodeRichText.text).toBe( 'Some text below relationship node 1 inserted text', @@ -401,7 +415,7 @@ describe('lexical', () => { for (let i = 0; i < 18; i++) { await page.keyboard.press('Shift+ArrowRight') } - // The following text should now be selected: elationship node 1 + // The following text should now be selectedelationship node 1 const floatingToolbar_formatSection = page.locator( '.floating-select-toolbar-popup__section-format', @@ -436,6 +450,7 @@ describe('lexical', () => { await payload.find({ collection: lexicalFieldsSlug, depth: 0, + overrideAccess: true, where: { title: { equals: lexicalDocData.title, @@ -446,7 +461,7 @@ describe('lexical', () => { const lexicalField: SerializedEditorState = lexicalDoc.lexicalWithBlocks const blockNode: SerializedBlockNode = lexicalField.root.children[4] as SerializedBlockNode - const paragraphNodeInBlockNodeRichText = blockNode.fields.richText.root.children[1] + const paragraphNodeInBlockNodeRichText = blockNode.fields.richTextField.root.children[1] expect(paragraphNodeInBlockNodeRichText.children).toHaveLength(2) @@ -462,6 +477,93 @@ describe('lexical', () => { timeout: POLL_TOPASS_TIMEOUT, }) }) + + test('should be able to select text, make it an external link and receive the updated link value', async () => { + // Reproduces https://github.com/payloadcms/payload/issues/4025 + await navigateToLexicalFields() + const richTextField = page.locator('.rich-text-lexical').nth(1) // second + await richTextField.scrollIntoViewIfNeeded() + await expect(richTextField).toBeVisible() + + // Find span in contentEditable with text "Some text below relationship node" + const spanInEditor = richTextField.locator('span').getByText('Upload Node:').first() + await expect(spanInEditor).toBeVisible() + await spanInEditor.click() // Use click, because focus does not work + + await page.keyboard.press('ArrowRight') + // Now select some text + for (let i = 0; i < 4; i++) { + await page.keyboard.press('Shift+ArrowRight') + } + // The following text should now be "Node" + + const floatingToolbar = page.locator('.floating-select-toolbar-popup') + + await expect(floatingToolbar).toBeVisible() + + const linkButton = floatingToolbar + .locator('.floating-select-toolbar-popup__button-link') + .first() + + await expect(linkButton).toBeVisible() + await linkButton.click() + + /** + * In drawer + */ + const drawerContent = page.locator('.drawer__content').first() + await expect(drawerContent).toBeVisible() + + const urlField = drawerContent.locator('input#field-fields__url').first() + await expect(urlField).toBeVisible() + // Fill with https://www.payloadcms.com + await urlField.fill('https://www.payloadcms.com') + await expect(urlField).toHaveValue('https://www.payloadcms.com') + await drawerContent.locator('.form-submit button').click({ delay: 100 }) + await expect(drawerContent).toBeHidden() + + /** + * check if it worked correctly + */ + + const linkInEditor = richTextField.locator('a.LexicalEditorTheme__link').first() + await expect(linkInEditor).toBeVisible() + await expect(linkInEditor).toHaveAttribute('href', 'https://www.payloadcms.com') + + await saveDocAndAssert(page) + + // Check if it persists after saving + await expect(linkInEditor).toBeVisible() + await expect(linkInEditor).toHaveAttribute('href', 'https://www.payloadcms.com') + + // Make sure it's being returned from the API as well + await expect(async () => { + const lexicalDoc: LexicalField = ( + await payload.find({ + collection: lexicalFieldsSlug, + depth: 0, + overrideAccess: true, + where: { + title: { + equals: lexicalDocData.title, + }, + }, + }) + ).docs[0] as never + + const lexicalField: SerializedEditorState = lexicalDoc.lexicalWithBlocks + + expect( + ( + (lexicalField.root.children[0] as SerializedParagraphNode) + .children[1] as SerializedLinkNode + ).fields.url, + ).toBe('https://www.payloadcms.com') + }).toPass({ + timeout: POLL_TOPASS_TIMEOUT, + }) + }) + test('ensure slash menu is not hidden behind other blocks', async () => { // This test makes sure there are no z-index issues here await navigateToLexicalFields() @@ -587,6 +689,7 @@ describe('lexical', () => { await payload.find({ collection: lexicalFieldsSlug, depth: 0, + overrideAccess: true, where: { title: { equals: lexicalDocData.title, @@ -609,6 +712,189 @@ describe('lexical', () => { }) }) + // Big test which tests a bunch of things: Creation of blocks via slash commands, creation of deeply nested sub-lexical-block fields via slash commands, properly populated deeply nested fields within those + test('ensure creation of a lexical, lexical-field-block, which contains another lexical, lexical-and-upload-field-block, works and that the sub-upload field is properly populated', async () => { + await navigateToLexicalFields() + const richTextField = page.locator('.rich-text-lexical').nth(1) // second + await richTextField.scrollIntoViewIfNeeded() + await expect(richTextField).toBeVisible() + + const lastParagraph = richTextField.locator('p').last() + await lastParagraph.scrollIntoViewIfNeeded() + await expect(lastParagraph).toBeVisible() + + /** + * Create new sub-block + */ + // type / to open the slash menu + await lastParagraph.click() + await page.keyboard.press('/') + await page.keyboard.type('Rich') + + // Create Rich Text Block + const slashMenuPopover = page.locator('#slash-menu .slash-menu-popup') + await expect(slashMenuPopover).toBeVisible() + + // Click 1. Button and ensure it's the Rich Text block creation button (it should be! Otherwise, sorting wouldn't work) + const richTextBlockSelectButton = slashMenuPopover.locator('button').first() + await expect(richTextBlockSelectButton).toBeVisible() + await expect(richTextBlockSelectButton).toContainText('Rich Text') + await richTextBlockSelectButton.click() + await expect(slashMenuPopover).toBeHidden() + + const newRichTextBlock = richTextField + .locator('.lexical-block:not(.lexical-block .lexical-block)') + .last() // The :not(.lexical-block .lexical-block) makes sure this does not select sub-blocks + await newRichTextBlock.scrollIntoViewIfNeeded() + await expect(newRichTextBlock).toBeVisible() + + // Ensure that sub-editor is empty + const newRichTextEditorParagraph = newRichTextBlock.locator('p').first() + await expect(newRichTextEditorParagraph).toBeVisible() + await expect(newRichTextEditorParagraph).toHaveText('') + + await newRichTextEditorParagraph.click() + await page.keyboard.press('/') + await page.keyboard.type('Lexical') + await expect(slashMenuPopover).toBeVisible() + // Click 1. Button and ensure it's the Lexical And Upload block creation button (it should be! Otherwise, sorting wouldn't work) + const lexicalAndUploadBlockSelectButton = slashMenuPopover.locator('button').first() + await expect(lexicalAndUploadBlockSelectButton).toBeVisible() + await expect(lexicalAndUploadBlockSelectButton).toContainText('Lexical And Upload') + await lexicalAndUploadBlockSelectButton.click() + await expect(slashMenuPopover).toBeHidden() + + // Ensure that sub-editor is created + const newSubLexicalAndUploadBlock = newRichTextBlock.locator('.lexical-block').first() + await newSubLexicalAndUploadBlock.scrollIntoViewIfNeeded() + await expect(newSubLexicalAndUploadBlock).toBeVisible() + + // Type in newSubLexicalAndUploadBlock + const paragraphInSubEditor = newSubLexicalAndUploadBlock.locator('p').first() + await expect(paragraphInSubEditor).toBeVisible() + await paragraphInSubEditor.click() + await page.keyboard.type('Some subText') + // Upload something + const chooseExistingUploadButton = newSubLexicalAndUploadBlock + .locator('.upload__toggler.list-drawer__toggler') + .first() + await expect(chooseExistingUploadButton).toBeVisible() + await chooseExistingUploadButton.click() + await wait(500) // wait for drawer form state to initialize (it's a flake) + const uploadListDrawer = page.locator('dialog[id^=list-drawer_1_]').first() // IDs starting with list-drawer_1_ (there's some other symbol after the underscore) + await expect(uploadListDrawer).toBeVisible() + // find button which has a span with text "payload.jpg" and click it in playwright + const uploadButton = uploadListDrawer.locator('button').getByText('payload.jpg').first() + await expect(uploadButton).toBeVisible() + await uploadButton.click() + await expect(uploadListDrawer).toBeHidden() + // Check if the upload is there + await expect( + newSubLexicalAndUploadBlock.locator('.field-type.upload .file-meta__url a'), + ).toHaveText('payload.jpg') + // save document and assert + await saveDocAndAssert(page) + await expect( + newSubLexicalAndUploadBlock.locator('.field-type.upload .file-meta__url a'), + ).toHaveText('payload.jpg') + await expect(paragraphInSubEditor).toHaveText('Some subText') + + // reload page and assert again + await page.reload() + await expect( + newSubLexicalAndUploadBlock.locator('.field-type.upload .file-meta__url a'), + ).toHaveText('payload.jpg') + await expect(paragraphInSubEditor).toHaveText('Some subText') + + // Check if the API result is populated correctly - Depth 0 + await expect(async () => { + const lexicalDoc: LexicalField = ( + await payload.find({ + collection: lexicalFieldsSlug, + depth: 0, + overrideAccess: true, + where: { + title: { + equals: lexicalDocData.title, + }, + }, + }) + ).docs[0] as never + + const uploadDoc: Upload = ( + await payload.find({ + collection: 'uploads', + depth: 0, + overrideAccess: true, + where: { + filename: { + equals: 'payload.jpg', + }, + }, + }) + ).docs[0] as never + + const lexicalField: SerializedEditorState = lexicalDoc.lexicalWithBlocks + const richTextBlock: SerializedBlockNode = lexicalField.root + .children[12] as SerializedBlockNode + const subRichTextBlock: SerializedBlockNode = richTextBlock.fields.richTextField.root + .children[1] as SerializedBlockNode // index 0 and 2 are paragraphs created by default around the block node when a new block is added via slash command + + const subSubRichTextField = subRichTextBlock.fields.subRichTextField + const subSubUploadField = subRichTextBlock.fields.subUploadField + + expect(subSubRichTextField.root.children[0].children[0].text).toBe('Some subText') + expect(subSubUploadField).toBe(uploadDoc.id) + }).toPass({ + timeout: POLL_TOPASS_TIMEOUT, + }) + + // Check if the API result is populated correctly - Depth 1 + await expect(async () => { + // Now with depth 1 + const lexicalDocDepth1: LexicalField = ( + await payload.find({ + collection: lexicalFieldsSlug, + depth: 1, + overrideAccess: true, + where: { + title: { + equals: lexicalDocData.title, + }, + }, + }) + ).docs[0] as never + + const uploadDoc: Upload = ( + await payload.find({ + collection: 'uploads', + depth: 0, + overrideAccess: true, + where: { + filename: { + equals: 'payload.jpg', + }, + }, + }) + ).docs[0] as never + + const lexicalField2: SerializedEditorState = lexicalDocDepth1.lexicalWithBlocks + const richTextBlock2: SerializedBlockNode = lexicalField2.root + .children[12] as SerializedBlockNode + const subRichTextBlock2: SerializedBlockNode = richTextBlock2.fields.richTextField.root + .children[1] as SerializedBlockNode // index 0 and 2 are paragraphs created by default around the block node when a new block is added via slash command + + const subSubRichTextField2 = subRichTextBlock2.fields.subRichTextField + const subSubUploadField2 = subRichTextBlock2.fields.subUploadField + + expect(subSubRichTextField2.root.children[0].children[0].text).toBe('Some subText') + expect(subSubUploadField2.id).toBe(uploadDoc.id) + expect(subSubUploadField2.filename).toBe(uploadDoc.filename) + }).toPass({ + timeout: POLL_TOPASS_TIMEOUT, + }) + }) + test('should allow changing values of two different radio button blocks independently', async () => { // This test ensures that https://github.com/payloadcms/payload/issues/3911 does not happen again @@ -657,6 +943,7 @@ describe('lexical', () => { await payload.find({ collection: lexicalFieldsSlug, depth: 0, + overrideAccess: true, where: { title: { equals: lexicalDocData.title, @@ -798,6 +1085,22 @@ describe('lexical', () => { await shouldRespectRowRemovalTest() }) + test('ensure pre-seeded uploads node is visible', async () => { + // Due to issues with the relationships condition, we had issues with that not being visible. Checking for visibility ensures there is no breakage there again + await navigateToLexicalFields() + const richTextField = page.locator('.rich-text-lexical').nth(1) // second + await richTextField.scrollIntoViewIfNeeded() + await expect(richTextField).toBeVisible() + + const uploadBlock = richTextField.locator('.ContentEditable__root > div').first() // Check for the first div, as we wanna make sure it's the first div in the editor (1. node is a paragraph, second node is a div which is the upload node) + await uploadBlock.scrollIntoViewIfNeeded() + await expect(uploadBlock).toBeVisible() + + await expect(uploadBlock.locator('.lexical-upload__doc-drawer-toggler strong')).toHaveText( + 'payload.jpg', + ) + }) + test.skip('should respect required error state in deeply nested text field', async () => { await navigateToLexicalFields() const richTextField = page.locator('.rich-text-lexical').nth(1) // second diff --git a/test/fields/collections/Lexical/generateLexicalRichText.ts b/test/fields/collections/Lexical/generateLexicalRichText.ts index b38d2fd61b..08bedd6bb4 100644 --- a/test/fields/collections/Lexical/generateLexicalRichText.ts +++ b/test/fields/collections/Lexical/generateLexicalRichText.ts @@ -110,7 +110,7 @@ export function generateLexicalRichText() { version: 2, fields: { id: '65298b1ddb4ef8c744a7faab', - richText: { + richTextField: { root: { type: 'root', format: '', @@ -149,7 +149,7 @@ export function generateLexicalRichText() { }, }, blockName: 'Block Node, with RichText Field, with Relationship Node', - blockType: 'richText', + blockType: 'richTextBlock', }, }, { diff --git a/test/fields/collections/Relationship/e2e.spec.ts b/test/fields/collections/Relationship/e2e.spec.ts new file mode 100644 index 0000000000..e85f52baae --- /dev/null +++ b/test/fields/collections/Relationship/e2e.spec.ts @@ -0,0 +1,454 @@ +import type { Page } from '@playwright/test' + +import { expect, test } from '@playwright/test' +import path from 'path' +import { wait } from 'payload/utilities' +import { fileURLToPath } from 'url' + +import type { PayloadTestSDK } from '../../../helpers/sdk/index.js' +import type { Config, RelationshipField, TextField } from '../../payload-types.js' + +import { + ensureAutoLoginAndCompilationIsDone, + exactText, + initPageConsoleErrorCatch, + openDocDrawer, + saveDocAndAssert, + saveDocHotkeyAndAssert, +} from '../../../helpers.js' +import { AdminUrlUtil } from '../../../helpers/adminUrlUtil.js' +import { initPayloadE2ENoConfig } from '../../../helpers/initPayloadE2ENoConfig.js' +import { reInitializeDB } from '../../../helpers/reInit.js' +import { RESTClient } from '../../../helpers/rest.js' +import { POLL_TOPASS_TIMEOUT } from '../../../playwright.config.js' +import { relationshipFieldsSlug, textFieldsSlug } from '../../slugs.js' +const filename = fileURLToPath(import.meta.url) +const currentFolder = path.dirname(filename) +const dirname = path.resolve(currentFolder, '../../') + +const { beforeAll, beforeEach, describe } = test + +let payload: PayloadTestSDK +let client: RESTClient +let page: Page +let serverURL: string +// If we want to make this run in parallel: test.describe.configure({ mode: 'parallel' }) + +describe('relationship', () => { + beforeAll(async ({ browser }) => { + process.env.SEED_IN_CONFIG_ONINIT = 'false' // Makes it so the payload config onInit seed is not run. Otherwise, the seed would be run unnecessarily twice for the initial test run - once for beforeEach and once for onInit + ;({ payload, serverURL } = await initPayloadE2ENoConfig({ + dirname, + })) + + const context = await browser.newContext() + page = await context.newPage() + initPageConsoleErrorCatch(page) + }) + beforeEach(async () => { + await reInitializeDB({ + serverURL, + snapshotKey: 'fieldsRelationshipTest', + uploadsDir: path.resolve(dirname, '../Upload/uploads'), + }) + + if (client) { + await client.logout() + } + client = new RESTClient(null, { defaultSlug: 'users', serverURL }) + await client.login() + + await ensureAutoLoginAndCompilationIsDone({ page, serverURL }) + }) + + let url: AdminUrlUtil + const tableRowLocator = 'table > tbody > tr' + + beforeAll(() => { + url = new AdminUrlUtil(serverURL, 'relationship-fields') + }) + + test('should create inline relationship within field with many relations', async () => { + await page.goto(url.create) + + await openDocDrawer(page, '#relationship-add-new .relationship-add-new__add-button') + + await page + .locator('#field-relationship .relationship-add-new__relation-button--text-fields') + .click() + + const textField = page.locator('.drawer__content #field-text') + const textValue = 'hello' + + await textField.fill(textValue) + + await page.locator('[id^=doc-drawer_text-fields_1_] #action-save').click() + await expect(page.locator('.Toastify')).toContainText('successfully') + await page.locator('[id^=close-drawer__doc-drawer_text-fields_1_]').click() + + await expect( + page.locator('#field-relationship .relationship--single-value__text'), + ).toContainText(textValue) + + await page.locator('#action-save').click() + await expect(page.locator('.Toastify')).toContainText('successfully') + }) + + test('should create nested inline relationships', async () => { + await page.goto(url.create) + await page.waitForURL(`**/${url.create}`) + // Open first modal + await openDocDrawer(page, '#relationToSelf-add-new .relationship-add-new__add-button') + + // Fill first modal's required relationship field + await page.locator('[id^=doc-drawer_relationship-fields_1_] #field-relationship').click() + await page + .locator( + '[id^=doc-drawer_relationship-fields_1_] .rs__option:has-text("Seeded text document")', + ) + .click() + + // Open second modal + await openDocDrawer( + page, + '[id^=doc-drawer_relationship-fields_1_] #relationToSelf-add-new button', + ) + + // Fill second modal's required relationship field + await page.locator('[id^=doc-drawer_relationship-fields_2_] #field-relationship').click() + await page + .locator( + '[id^=doc-drawer_relationship-fields_2_] .rs__option:has-text("Seeded text document")', + ) + .click() + + // Save then close the second modal + await page.locator('[id^=doc-drawer_relationship-fields_2_] #action-save').click() + await expect.poll(() => page.url(), { timeout: POLL_TOPASS_TIMEOUT }).toContain('create') + await page.locator('[id^=close-drawer__doc-drawer_relationship-fields_2_]').click() + + // Assert that the first modal is still open and the value matches + await expect(page.locator('[id^=doc-drawer_relationship-fields_1_]')).toBeVisible() + await expect( + page.locator( + '[id^=doc-drawer_relationship-fields_1_] #field-relationToSelf .relationship--single-value__text', + ), + ).toBeVisible() // TODO: use '.toContainText('doc_id')' with the doc in the second modal + + // Save then close the first modal + await page.locator('[id^=doc-drawer_relationship-fields_1_] #action-save').click() + await expect.poll(() => page.url(), { timeout: POLL_TOPASS_TIMEOUT }).toContain('create') + await page.locator('[id^=close-drawer__doc-drawer_relationship-fields_1_]').click() + + // Expect the original field to have a value filled + await expect( + page.locator('#field-relationToSelf .relationship--single-value__text'), + ).toBeVisible() + + // Fill the required field + await page.locator('#field-relationship').click() + await page.locator('.rs__option:has-text("Seeded text document")').click() + await expect.poll(() => page.url(), { timeout: POLL_TOPASS_TIMEOUT }).toContain('create') + await page.locator('#action-save').click() + + await expect(page.locator('.Toastify')).toContainText('successfully') + }) + + test('should hide relationship add new button', async () => { + await page.goto(url.create) + // expect the button to not exist in the field + const count = await page + .locator('#relationToSelfSelectOnly-add-new .relationship-add-new__add-button') + .count() + expect(count).toEqual(0) + }) + + test('should clear relationship values', async () => { + await page.goto(url.create) + + const field = page.locator('#field-relationship') + await field.click() + await page.locator('.rs__option:has-text("Seeded text document")').click() + await field.locator('.clear-indicator').click() + await expect(field.locator('.rs__placeholder')).toBeVisible() + }) + + // TODO: React-Select not loading things sometimes. Fix later + test.skip('should display `hasMany` polymorphic relationships', async () => { + await page.goto(url.create) + await page.waitForURL(url.create) + const field = page.locator('#field-relationHasManyPolymorphic') + await field.click() + + await page + .locator('.rs__option', { + hasText: exactText('Seeded text document'), + }) + .click() + + await expect( + page + .locator('#field-relationHasManyPolymorphic .relationship--multi-value-label__text', { + hasText: exactText('Seeded text document'), + }) + .first(), + ).toBeVisible() + + // await fill the required fields then save the document and check again + await page.locator('#field-relationship').click() + await page.locator('#field-relationship .rs__option:has-text("Seeded text document")').click() + await saveDocAndAssert(page) + + const valueAfterSave = page.locator('#field-relationHasManyPolymorphic .multi-value').first() + + await expect( + valueAfterSave + .locator('.relationship--multi-value-label__text', { + hasText: exactText('Seeded text document'), + }) + .first(), + ).toBeVisible() + }) + + test('should populate relationship dynamic default value', async () => { + await page.goto(url.create) + await page.waitForURL(url.create) + await expect( + page.locator('#field-relationWithDynamicDefault .relationship--single-value__text'), + ).toContainText('dev@payloadcms.com') + await expect( + page.locator('#field-relationHasManyWithDynamicDefault .relationship--single-value__text'), + ).toContainText('dev@payloadcms.com') + }) + + test('should filter relationship options', async () => { + await page.goto(url.create) + await page.locator('#field-relationship .rs__control').click() + await page.keyboard.type('seeded') + await page.locator('.rs__option:has-text("Seeded text document")').click() + await saveDocAndAssert(page) + }) + + // Related issue: https://github.com/payloadcms/payload/issues/2815 + test('should modify fields in relationship drawer', async () => { + await page.goto(url.create) + await page.waitForURL(`**/${url.create}`) + // First fill out the relationship field, as it's required + await openDocDrawer(page, '#relationship-add-new .relationship-add-new__add-button') + await page + .locator('#field-relationship .relationship-add-new__relation-button--text-fields') + .click() + + await page.locator('.drawer__content #field-text').fill('something') + + await page.locator('[id^=doc-drawer_text-fields_1_] #action-save').click() + await expect(page.locator('.Toastify')).toContainText('successfully') + await page.locator('[id^=close-drawer__doc-drawer_text-fields_1_]').click() + await page.locator('#action-save').click() + await expect(page.locator('.Toastify')).toContainText('successfully') + + // Create a new doc for the `relationshipHasMany` field + await expect.poll(() => page.url(), { timeout: POLL_TOPASS_TIMEOUT }).not.toContain('create') + await openDocDrawer(page, '#field-relationshipHasMany .relationship-add-new__add-button') + const value = 'Hello, world!' + await page.locator('.drawer__content #field-text').fill(value) + + // Save and close the drawer + await page.locator('[id^=doc-drawer_text-fields_1_] #action-save').click() + await expect(page.locator('.Toastify')).toContainText('successfully') + await page.locator('[id^=close-drawer__doc-drawer_text-fields_1_]').click() + + // Now open the drawer again to edit the `text` field _using the keyboard_ + // Mimic real user behavior by typing into the field with spaces and backspaces + // Explicitly use both `down` and `type` to cover edge cases + await page + .locator('#field-relationshipHasMany button.relationship--multi-value-label__drawer-toggler') + .click() + await page.locator('[id^=doc-drawer_text-fields_1_] #field-text').click() + await page.keyboard.down('1') + await page.keyboard.type('23') + await expect(page.locator('[id^=doc-drawer_text-fields_1_] #field-text')).toHaveValue( + `${value}123`, + ) + await page.keyboard.type('4567') + await page.keyboard.press('Backspace') + await expect(page.locator('[id^=doc-drawer_text-fields_1_] #field-text')).toHaveValue( + `${value}123456`, + ) + + // save drawer + await page.locator('[id^=doc-drawer_text-fields_1_] #action-save').click() + await expect(page.locator('.Toastify')).toContainText('successfully') + // close drawer + await page.locator('[id^=close-drawer__doc-drawer_text-fields_1_]').click() + // save document and reload + await page.locator('#action-save').click() + await expect(page.locator('.Toastify')).toContainText('successfully') + await page.reload() + + // check if the value is saved + await expect( + page.locator('#field-relationshipHasMany .relationship--multi-value-label__text'), + ).toHaveText(`${value}123456`) + }) + + // Drawers opened through the edit button are prone to issues due to the use of stopPropagation for certain + // events - specifically for drawers opened through the edit button. This test is to ensure that drawers + // opened through the edit button can be saved using the hotkey. + test('should save using hotkey in edit document drawer', async () => { + await page.goto(url.create) + // First fill out the relationship field, as it's required + await openDocDrawer(page, '#relationship-add-new .relationship-add-new__add-button') + await page.locator('#field-relationship .value-container').click() + await wait(500) + // Select "Seeded text document" relationship + await page.getByText('Seeded text document', { exact: true }).click() + + // Need to wait to properly open drawer - without this the drawer state is flakey and closes before + // the text below can be filled before the save on the drawer + await wait(1000) + + // Click edit button which opens drawer + await page.getByRole('button', { name: 'Edit Seeded text document' }).click() + + // Fill 'text' field of 'Seeded text document' + await page.locator('.drawer__content #field-text').fill('some updated text value') + + // Save drawer (not parent page) with hotkey + await saveDocHotkeyAndAssert(page) + + const seededTextDocument = await payload.find({ + collection: textFieldsSlug, + where: { + text: { + equals: 'some updated text value', + }, + }, + }) + const relationshipDocuments = await payload.find({ + collection: relationshipFieldsSlug, + }) + + // The Seeded text document should now have a text field with value 'some updated text value', + expect(seededTextDocument.docs.length).toEqual(1) + // but the relationship document should NOT exist, as the hotkey should have saved the drawer and not the parent page + expect(relationshipDocuments.docs.length).toEqual(0) + }) + + // TODO: Fix this. This test flakes due to react select + test.skip('should bypass min rows validation when no rows present and field is not required', async () => { + await page.goto(url.create) + // First fill out the relationship field, as it's required + await openDocDrawer(page, '#relationship-add-new .relationship-add-new__add-button') + await page.locator('#field-relationship .value-container').click() + await page.getByText('Seeded text document', { exact: true }).click() + + await saveDocAndAssert(page) + await expect(page.locator('.Toastify')).toContainText('successfully') + }) + + test('should fail min rows validation when rows are present', async () => { + await page.goto(url.create) + await page.waitForURL(url.create) + // First fill out the relationship field, as it's required + await openDocDrawer(page, '#relationship-add-new .relationship-add-new__add-button') + await page.locator('#field-relationship .value-container').click() + await page.getByText('Seeded text document', { exact: true }).click() + + // Need to wait to allow for field to retrieve documents before the save occurs + await wait(200) + + await page.locator('#field-relationshipWithMinRows .value-container').click() + + await page + .locator('#field-relationshipWithMinRows .rs__option:has-text("Seeded text document")') + .click() + + await page.click('#action-save', { delay: 100 }) + await expect(page.locator('.Toastify')).toContainText( + 'The following field is invalid: relationshipWithMinRows', + ) + }) + + test('should sort relationship options by sortOptions property (ID in ascending order)', async () => { + await page.goto(url.create) + await page.waitForURL(url.create) + + const field = page.locator('#field-relationship') + await field.click() + + const textDocsGroup = page.locator('.rs__group-heading:has-text("Text Fields")') + const firstTextDocOption = textDocsGroup.locator('+div .rs__option').first() + const firstOptionLabel = await firstTextDocOption.textContent() + expect(firstOptionLabel.trim()).toBe('Another text document') + }) + + test('should sort relationHasManyPolymorphic options by sortOptions property: text-fields collection (items in descending order)', async () => { + await page.goto(url.create) + await page.waitForURL(url.create) + + const field = page.locator('#field-relationHasManyPolymorphic') + await field.click() + + const textDocsGroup = page.locator('.rs__group-heading:has-text("Text Fields")') + const firstTextDocOption = textDocsGroup.locator('+div .rs__option').first() + const firstOptionLabel = await firstTextDocOption.textContent() + expect(firstOptionLabel).toBe('Seeded text document') + }) + + test('should allow filtering by relationship field / equals', async () => { + const textDoc = await createTextFieldDoc() + await createRelationshipFieldDoc({ value: textDoc.id, relationTo: 'text-fields' }) + + await page.goto(url.list) + await page.waitForURL(url.list) + + await page.locator('.list-controls__toggle-columns').click() + await page.locator('.list-controls__toggle-where').click() + await expect(page.locator('.list-controls__where.rah-static--height-auto')).toBeVisible() + await page.locator('.where-builder__add-first-filter').click() + + const conditionField = page.locator('.condition__field') + await conditionField.click() + + const dropdownFieldOptions = conditionField.locator('.rs__option') + await dropdownFieldOptions.locator('text=Relationship').nth(0).click() + + const operatorField = page.locator('.condition__operator') + await operatorField.click() + + const dropdownOperatorOptions = operatorField.locator('.rs__option') + await dropdownOperatorOptions.locator('text=equals').click() + + const valueField = page.locator('.condition__value') + await valueField.click() + const dropdownValueOptions = valueField.locator('.rs__option') + await dropdownValueOptions.locator('text=some text').click() + + await expect(page.locator(tableRowLocator)).toHaveCount(1) + }) +}) + +async function createTextFieldDoc(overrides?: Partial): Promise { + return payload.create({ + collection: 'text-fields', + data: { + text: 'some text', + localizedText: 'some localized text', + ...overrides, + }, + }) as unknown as Promise +} + +async function createRelationshipFieldDoc( + relationship: RelationshipField['relationship'], + overrides?: Partial, +): Promise { + return payload.create({ + collection: 'relationship-fields', + data: { + relationship, + ...overrides, + }, + }) as unknown as Promise +} diff --git a/test/fields/collections/RichText/blocks.ts b/test/fields/collections/RichText/blocks.ts index 13e3d20eac..a6207b1956 100644 --- a/test/fields/collections/RichText/blocks.ts +++ b/test/fields/collections/RichText/blocks.ts @@ -1,8 +1,8 @@ -import type { Block } from 'payload/types' +import type { LexicalBlock } from '@payloadcms/richtext-lexical' import { lexicalEditor } from '@payloadcms/richtext-lexical' -export const TextBlock: Block = { +export const TextBlock: LexicalBlock = { fields: [ { name: 'text', @@ -13,7 +13,7 @@ export const TextBlock: Block = { slug: 'text', } -export const UploadAndRichTextBlock: Block = { +export const UploadAndRichTextBlock: LexicalBlock = { fields: [ { name: 'upload', @@ -30,7 +30,7 @@ export const UploadAndRichTextBlock: Block = { slug: 'uploadAndRichText', } -export const RelationshipBlock: Block = { +export const RelationshipBlock: LexicalBlock = { fields: [ { name: 'rel', @@ -42,7 +42,7 @@ export const RelationshipBlock: Block = { slug: 'relationshipBlock', } -export const SelectFieldBlock: Block = { +export const SelectFieldBlock: LexicalBlock = { fields: [ { name: 'select', diff --git a/test/fields/collections/RichText/e2e.spec.ts b/test/fields/collections/RichText/e2e.spec.ts new file mode 100644 index 0000000000..6c1b114625 --- /dev/null +++ b/test/fields/collections/RichText/e2e.spec.ts @@ -0,0 +1,413 @@ +import type { Page } from '@playwright/test' + +import { expect, test } from '@playwright/test' +import path from 'path' +import { wait } from 'payload/utilities' +import { fileURLToPath } from 'url' + +import { + ensureAutoLoginAndCompilationIsDone, + initPageConsoleErrorCatch, + saveDocAndAssert, +} from '../../../helpers.js' +import { AdminUrlUtil } from '../../../helpers/adminUrlUtil.js' +import { initPayloadE2ENoConfig } from '../../../helpers/initPayloadE2ENoConfig.js' +import { reInitializeDB } from '../../../helpers/reInit.js' +import { RESTClient } from '../../../helpers/rest.js' + +const filename = fileURLToPath(import.meta.url) +const currentFolder = path.dirname(filename) +const dirname = path.resolve(currentFolder, '../../') + +const { beforeAll, beforeEach, describe } = test + +let client: RESTClient +let page: Page +let serverURL: string +// If we want to make this run in parallel: test.describe.configure({ mode: 'parallel' }) + +describe('Rich Text', () => { + beforeAll(async ({ browser }) => { + process.env.SEED_IN_CONFIG_ONINIT = 'false' // Makes it so the payload config onInit seed is not run. Otherwise, the seed would be run unnecessarily twice for the initial test run - once for beforeEach and once for onInit + ;({ serverURL } = await initPayloadE2ENoConfig({ + dirname, + })) + + const context = await browser.newContext() + page = await context.newPage() + initPageConsoleErrorCatch(page) + }) + beforeEach(async () => { + await reInitializeDB({ + serverURL, + snapshotKey: 'fieldsRichTextTest', + uploadsDir: path.resolve(dirname, '../Upload/uploads'), + }) + + if (client) { + await client.logout() + } + client = new RESTClient(null, { defaultSlug: 'users', serverURL }) + await client.login() + + await ensureAutoLoginAndCompilationIsDone({ page, serverURL }) + }) + + async function navigateToRichTextFields() { + const url: AdminUrlUtil = new AdminUrlUtil(serverURL, 'rich-text-fields') + await page.goto(url.list) + await page.waitForURL(url.list) + await page.locator('.row-1 .cell-title a').click() + } + + describe('cell', () => { + test('ensure cells are smaller than 300px in height', async () => { + const url: AdminUrlUtil = new AdminUrlUtil(serverURL, 'rich-text-fields') + await page.goto(url.list) // Navigate to rich-text list view + + const table = page.locator('.list-controls ~ .table') + const lexicalCell = table.locator('.cell-lexicalCustomFields').first() + const lexicalHtmlCell = table.locator('.cell-lexicalCustomFields_html').first() + const entireRow = table.locator('.row-1').first() + + // Make sure each of the 3 above are no larger than 300px in height: + expect((await lexicalCell.boundingBox()).height).toBeLessThanOrEqual(300) + expect((await lexicalHtmlCell.boundingBox()).height).toBeLessThanOrEqual(300) + expect((await entireRow.boundingBox()).height).toBeLessThanOrEqual(300) + }) + }) + + describe('toolbar', () => { + test('should run url validation', async () => { + await navigateToRichTextFields() + + // Open link drawer + await page.locator('.rich-text__toolbar button:not([disabled]) .link').first().click() + + // find the drawer + const editLinkModal = page.locator('[id^=drawer_1_rich-text-link-]') + await expect(editLinkModal).toBeVisible() + + // Fill values and click Confirm + await editLinkModal.locator('#field-text').fill('link text') + await editLinkModal.locator('label[for="field-linkType-custom"]').click() + await editLinkModal.locator('#field-url').fill('') + await wait(200) + await editLinkModal.locator('button[type="submit"]').click() + await wait(400) + const errorField = page.locator( + '[id^=drawer_1_rich-text-link-] .render-fields > :nth-child(3)', + ) + const hasErrorClass = await errorField.evaluate((el) => el.classList.contains('error')) + expect(hasErrorClass).toBe(true) + }) + + test('should create new url custom link', async () => { + await navigateToRichTextFields() + + // Open link drawer + await page.locator('.rich-text__toolbar button:not([disabled]) .link').first().click() + + // find the drawer + const editLinkModal = page.locator('[id^=drawer_1_rich-text-link-]') + await expect(editLinkModal).toBeVisible() + + await wait(400) + // Fill values and click Confirm + await editLinkModal.locator('#field-text').fill('link text') + await editLinkModal.locator('label[for="field-linkType-custom"]').click() + await editLinkModal.locator('#field-url').fill('https://payloadcms.com') + await editLinkModal.locator('button[type="submit"]').click() + await wait(400) + await saveDocAndAssert(page) + + // Remove link from editor body + await page.locator('span >> text="link text"').click() + const popup = page.locator('.popup--active .rich-text-link__popup') + await expect(popup.locator('.rich-text-link__link-label')).toBeVisible() + await popup.locator('.rich-text-link__link-close').click() + await expect(page.locator('span >> text="link text"')).toHaveCount(0) + }) + + test('should create new internal link', async () => { + await navigateToRichTextFields() + + // Open link drawer + await page.locator('.rich-text__toolbar button:not([disabled]) .link').first().click() + + // find the drawer + const editLinkModal = page.locator('[id^=drawer_1_rich-text-link-]') + await expect(editLinkModal).toBeVisible() + await wait(400) + + // Fill values and click Confirm + await editLinkModal.locator('#field-text').fill('link text') + await editLinkModal.locator('label[for="field-linkType-internal"]').click() + await editLinkModal.locator('#field-doc .rs__control').click() + await page.keyboard.type('dev@') + await editLinkModal + .locator('#field-doc .rs__menu .rs__option:has-text("dev@payloadcms.com")') + .click() + // await wait(200); + await editLinkModal.locator('button[type="submit"]').click() + await saveDocAndAssert(page) + }) + + test('should not create new url link when read only', async () => { + await navigateToRichTextFields() + + // Attempt to open link popup + const modalTrigger = page.locator('.rich-text--read-only .rich-text__toolbar button .link') + await expect(modalTrigger).toBeDisabled() + }) + + test('should only list RTE enabled upload collections in drawer', async () => { + await navigateToRichTextFields() + + // Open link drawer + await page + .locator('.rich-text__toolbar button:not([disabled]) .upload-rich-text-button') + .first() + .click() + + // open the list select menu + await page.locator('.list-drawer__select-collection-wrap .rs__control').click() + + const menu = page.locator('.list-drawer__select-collection-wrap .rs__menu') + // `uploads-3` has enableRichTextRelationship set to false + await expect(menu).not.toContainText('Uploads3') + }) + + // TODO: this test can't find the selector for the search filter, but functionality works. + // Need to debug + test.skip('should search correct useAsTitle field after toggling collection in list drawer', async () => { + await navigateToRichTextFields() + + // open link drawer + const field = page.locator('#field-richText') + const button = field.locator( + 'button.rich-text-relationship__list-drawer-toggler.list-drawer__toggler', + ) + await button.click() + + // check that the search is on the `name` field of the `text-fields` collection + const drawer = page.locator('[id^=list-drawer_1_]') + + await expect(drawer.locator('.search-filter__input')).toHaveAttribute( + 'placeholder', + 'Search by Text', + ) + + // change the selected collection to `array-fields` + await page.locator('.list-drawer__select-collection-wrap .rs__control').click() + const menu = page.locator('.list-drawer__select-collection-wrap .rs__menu') + await menu.locator('.rs__option').getByText('Array Field').click() + + // check that `id` is now the default search field + await expect(drawer.locator('.search-filter__input')).toHaveAttribute( + 'placeholder', + 'Search by ID', + ) + }) + + test('should only list RTE enabled collections in link drawer', async () => { + await navigateToRichTextFields() + + await page.locator('.rich-text__toolbar button:not([disabled]) .link').first().click() + + const editLinkModal = page.locator('[id^=drawer_1_rich-text-link-]') + await expect(editLinkModal).toBeVisible() + + await editLinkModal.locator('label[for="field-linkType-internal"]').click() + await editLinkModal.locator('.relationship__wrap .rs__control').click() + + const menu = page.locator('.relationship__wrap .rs__menu') + + // array-fields has enableRichTextLink set to false + await expect(menu).not.toContainText('Array Fields') + }) + + test('should only list non-upload collections in relationship drawer', async () => { + await navigateToRichTextFields() + + // Open link drawer + await page + .locator('.rich-text__toolbar button:not([disabled]) .relationship-rich-text-button') + .first() + .click() + + await wait(300) + + // open the list select menu + await page.locator('.list-drawer__select-collection-wrap .rs__control').click() + + const menu = page.locator('.list-drawer__select-collection-wrap .rs__menu') + await expect(menu).not.toContainText('Uploads') + }) + + test('should respect customizing the default fields', async () => { + const linkText = 'link' + const value = 'test value' + await navigateToRichTextFields() + const field = page.locator('.rich-text', { + has: page.locator('#field-richTextCustomFields'), + }) + // open link drawer + const button = field.locator('button.rich-text__button.link') + await button.click() + + // fill link fields + const linkDrawer = page.locator('[id^=drawer_1_rich-text-link-]') + const fields = linkDrawer.locator('.render-fields > .field-type') + await fields.locator('#field-text').fill(linkText) + await fields.locator('#field-url').fill('https://payloadcms.com') + const input = fields.locator('#field-fields__customLinkField') + await input.fill(value) + + await wait(300) + + // submit link closing drawer + await linkDrawer.locator('button[type="submit"]').click() + const linkInEditor = field.locator(`.rich-text-link >> text="${linkText}"`) + await saveDocAndAssert(page) + + // open modal again + await linkInEditor.click() + + const popup = page.locator('.popup--active .rich-text-link__popup') + await expect(popup).toBeVisible() + + await popup.locator('.rich-text-link__link-edit').click() + + const linkDrawer2 = page.locator('[id^=drawer_1_rich-text-link-]') + const fields2 = linkDrawer2.locator('.render-fields > .field-type') + const input2 = fields2.locator('#field-fields__customLinkField') + + await expect(input2).toHaveValue(value) + }) + }) + + describe('editor', () => { + test('should populate url link', async () => { + await navigateToRichTextFields() + + // Open link popup + await page.locator('#field-richText span >> text="render links"').click() + const popup = page.locator('.popup--active .rich-text-link__popup') + await expect(popup).toBeVisible() + await expect(popup.locator('a')).toHaveAttribute('href', 'https://payloadcms.com') + + // Open the drawer + await popup.locator('.rich-text-link__link-edit').click() + const editLinkModal = page.locator('[id^=drawer_1_rich-text-link-]') + await expect(editLinkModal).toBeVisible() + + // Check the drawer values + const textField = editLinkModal.locator('#field-text') + await expect(textField).toHaveValue('render links') + + // Close the drawer + await editLinkModal.locator('button[type="submit"]').click() + await expect(editLinkModal).toBeHidden() + }) + + test('should populate relationship link', async () => { + await navigateToRichTextFields() + + // Open link popup + await page.locator('#field-richText span >> text="link to relationships"').click() + const popup = page.locator('.popup--active .rich-text-link__popup') + await expect(popup).toBeVisible() + await expect(popup.locator('a')).toHaveAttribute( + 'href', + /\/admin\/collections\/array-fields\/.*/, + ) + + // Open the drawer + await popup.locator('.rich-text-link__link-edit').click() + const editLinkModal = page.locator('[id^=drawer_1_rich-text-link-]') + await expect(editLinkModal).toBeVisible() + + // Check the drawer values + const textField = editLinkModal.locator('#field-text') + await expect(textField).toHaveValue('link to relationships') + }) + + test('should open upload drawer and render custom relationship fields', async () => { + await navigateToRichTextFields() + const field = page.locator('#field-richText') + const button = field.locator('button.rich-text-upload__upload-drawer-toggler') + + await button.click() + + const documentDrawer = page.locator('[id^=drawer_1_upload-drawer-]') + await expect(documentDrawer).toBeVisible() + const caption = documentDrawer.locator('#field-caption') + await expect(caption).toBeVisible() + }) + + test('should open upload document drawer from read-only field', async () => { + await navigateToRichTextFields() + const field = page.locator('#field-richTextReadOnly') + const button = field.locator( + 'button.rich-text-upload__doc-drawer-toggler.doc-drawer__toggler', + ) + + await button.click() + + const documentDrawer = page.locator('[id^=doc-drawer_uploads_1_]') + await expect(documentDrawer).toBeVisible() + }) + + test('should open relationship document drawer from read-only field', async () => { + await navigateToRichTextFields() + const field = page.locator('#field-richTextReadOnly') + const button = field.locator( + 'button.rich-text-relationship__doc-drawer-toggler.doc-drawer__toggler', + ) + + await button.click() + + const documentDrawer = page.locator('[id^=doc-drawer_text-fields_1_]') + await expect(documentDrawer).toBeVisible() + }) + + test('should populate new links', async () => { + await navigateToRichTextFields() + + // Highlight existing text + const headingElement = page.locator( + '#field-richText h1 >> text="Hello, I\'m a rich text field."', + ) + await headingElement.selectText() + + // click the toolbar link button + await page.locator('.rich-text__toolbar button:not([disabled]) .link').first().click() + + // find the drawer and confirm the values + const editLinkModal = page.locator('[id^=drawer_1_rich-text-link-]') + await expect(editLinkModal).toBeVisible() + const textField = editLinkModal.locator('#field-text') + await expect(textField).toHaveValue("Hello, I'm a rich text field.") + }) + test('should not take value from previous block', async () => { + await navigateToRichTextFields() + + // check first block value + const textField = page.locator('#field-blocks__0__text') + await expect(textField).toHaveValue('Regular text') + + // remove the first block + const editBlock = page.locator('#blocks-row-0 .popup-button') + await editBlock.click() + const removeButton = page.locator('#blocks-row-0').getByRole('button', { name: 'Remove' }) + await expect(removeButton).toBeVisible() + await removeButton.click() + + // check new first block value + const richTextField = page.locator('#field-blocks__0__text') + const richTextValue = await richTextField.innerText() + expect(richTextValue).toContain('Rich text') + }) + }) +}) diff --git a/test/fields/config.ts b/test/fields/config.ts index 96e765092a..db0fa8f645 100644 --- a/test/fields/config.ts +++ b/test/fields/config.ts @@ -26,7 +26,7 @@ import Uploads from './collections/Upload/index.js' import Uploads2 from './collections/Upload2/index.js' import Uploads3 from './collections/Uploads3/index.js' import TabsWithRichText from './globals/TabsWithRichText.js' -import { seed } from './seed.js' +import { clearAndSeedEverything } from './seed.js' export const collectionSlugs: CollectionConfig[] = [ LexicalFields, @@ -79,7 +79,7 @@ export default buildConfigWithDefaults({ }, onInit: async (payload) => { if (process.env.SEED_IN_CONFIG_ONINIT !== 'false') { - await seed(payload) + await clearAndSeedEverything(payload) } }, }) diff --git a/test/fields/e2e.spec.ts b/test/fields/e2e.spec.ts index fa155eca53..8f28702710 100644 --- a/test/fields/e2e.spec.ts +++ b/test/fields/e2e.spec.ts @@ -6,14 +6,15 @@ import { wait } from 'payload/utilities' import { fileURLToPath } from 'url' import type { PayloadTestSDK } from '../helpers/sdk/index.js' -import type { Config, RelationshipField, TextField } from './payload-types.js' +import type { Config } from './payload-types.js' import { ensureAutoLoginAndCompilationIsDone, - exactText, initPageConsoleErrorCatch, + navigateToListCellLink, + openDocDrawer, saveDocAndAssert, - saveDocHotkeyAndAssert, + switchTab, } from '../helpers.js' import { AdminUrlUtil } from '../helpers/adminUrlUtil.js' import { initPayloadE2ENoConfig } from '../helpers/initPayloadE2ENoConfig.js' @@ -23,13 +24,7 @@ import { POLL_TOPASS_TIMEOUT } from '../playwright.config.js' import { jsonDoc } from './collections/JSON/shared.js' import { numberDoc } from './collections/Number/shared.js' import { textDoc } from './collections/Text/shared.js' -import { - collapsibleFieldsSlug, - pointFieldsSlug, - relationshipFieldsSlug, - tabsFieldsSlug, - textFieldsSlug, -} from './slugs.js' +import { collapsibleFieldsSlug, pointFieldsSlug, tabsFieldsSlug, textFieldsSlug } from './slugs.js' const filename = fileURLToPath(import.meta.url) const dirname = path.dirname(filename) @@ -42,15 +37,11 @@ let serverURL: string // If we want to make this run in parallel: test.describe.configure({ mode: 'parallel' }) describe('fields', () => { - beforeAll(async ({ browser }, testInfo) => { - const prebuild = Boolean(process.env.CI) - - if (prebuild) testInfo.setTimeout(testInfo.timeout * 3) - + beforeAll(async ({ browser }) => { process.env.SEED_IN_CONFIG_ONINIT = 'false' // Makes it so the payload config onInit seed is not run. Otherwise, the seed would be run unnecessarily twice for the initial test run - once for beforeEach and once for onInit ;({ payload, serverURL } = await initPayloadE2ENoConfig({ dirname, - prebuild, + // prebuild, })) const context = await browser.newContext() @@ -283,6 +274,8 @@ describe('fields', () => { await page.locator('#field-uniqueText').fill(uniqueText) await page.locator('#field-localizedUniqueRequiredText').fill('localizedUniqueRequired2') + await wait(500) + // attempt to save await page.click('#action-save', { delay: 200 }) @@ -302,6 +295,8 @@ describe('fields', () => { // nested in a group error await page.locator('#field-group__unique').fill(uniqueText) + await wait(1000) + // attempt to save await page.locator('#action-save').click() @@ -534,434 +529,6 @@ describe('fields', () => { }) }) - describe('blocks', () => { - let url: AdminUrlUtil - beforeAll(() => { - url = new AdminUrlUtil(serverURL, 'block-fields') - }) - - test('should open blocks drawer and select first block', async () => { - await page.goto(url.create) - const addButton = page.locator('#field-blocks > .blocks-field__drawer-toggler') - await expect(addButton).toContainText('Add Block') - await addButton.click() - - const blocksDrawer = page.locator('[id^=drawer_1_blocks-drawer-]') - await expect(blocksDrawer).toBeVisible() - - // select the first block in the drawer - const firstBlockSelector = blocksDrawer - .locator('.blocks-drawer__blocks .blocks-drawer__block') - .first() - await expect(firstBlockSelector).toContainText('Content') - await firstBlockSelector.click() - - // ensure the block was appended to the rows - const addedRow = page.locator('#field-blocks .blocks-field__row').last() - await expect(addedRow).toBeVisible() - await expect(addedRow.locator('.blocks-field__block-pill-content')).toContainText('Content') - }) - - test('should open blocks drawer from block row and add below', async () => { - await page.goto(url.create) - const firstRow = page.locator('#field-blocks #blocks-row-0') - const rowActions = firstRow.locator('.collapsible__actions') - await expect(rowActions).toBeVisible() - - await rowActions.locator('.array-actions__button').click() - const addBelowButton = rowActions.locator('.array-actions__action.array-actions__add') - await expect(addBelowButton).toBeVisible() - await addBelowButton.click() - - const blocksDrawer = page.locator('[id^=drawer_1_blocks-drawer-]') - await expect(blocksDrawer).toBeVisible() - - // select the first block in the drawer - const firstBlockSelector = blocksDrawer - .locator('.blocks-drawer__blocks .blocks-drawer__block') - .first() - await expect(firstBlockSelector).toContainText('Content') - await firstBlockSelector.click() - - // ensure the block was inserted beneath the first in the rows - const addedRow = page.locator('#field-blocks #blocks-row-1') - await expect(addedRow).toBeVisible() - await expect(addedRow.locator('.blocks-field__block-pill-content')).toContainText('Content') // went from `Number` to `Content` - }) - - test('should use i18n block labels', async () => { - await page.goto(url.create) - await expect(page.locator('#field-i18nBlocks .blocks-field__header')).toContainText( - 'Block en', - ) - - const addButton = page.locator('#field-i18nBlocks > .blocks-field__drawer-toggler') - await expect(addButton).toContainText('Add Block en') - await addButton.click() - - const blocksDrawer = page.locator('[id^=drawer_1_blocks-drawer-]') - await expect(blocksDrawer).toBeVisible() - - // select the first block in the drawer - const firstBlockSelector = blocksDrawer - .locator('.blocks-drawer__blocks .blocks-drawer__block') - .first() - await expect(firstBlockSelector).toContainText('Text en') - await firstBlockSelector.click() - - // ensure the block was appended to the rows - const firstRow = page.locator('#field-i18nBlocks .blocks-field__row').first() - await expect(firstRow).toBeVisible() - await expect(firstRow.locator('.blocks-field__block-pill-text')).toContainText('Text en') - }) - - test('should add different blocks with similar field configs', async () => { - await page.goto(url.create) - - async function addBlock(name: 'Block A' | 'Block B') { - await page - .locator('#field-blocksWithSimilarConfigs') - .getByRole('button', { name: 'Add Blocks With Similar Config' }) - .click() - await page.getByRole('button', { name }).click() - } - - await addBlock('Block A') - - await page - .locator('#blocksWithSimilarConfigs-row-0') - .getByRole('button', { name: 'Add Item' }) - .click() - await page - .locator('input[name="blocksWithSimilarConfigs.0.items.0.title"]') - .fill('items>0>title') - - await expect( - page.locator('input[name="blocksWithSimilarConfigs.0.items.0.title"]'), - ).toHaveValue('items>0>title') - - await addBlock('Block B') - - await page - .locator('#blocksWithSimilarConfigs-row-1') - .getByRole('button', { name: 'Add Item' }) - .click() - await page - .locator('input[name="blocksWithSimilarConfigs.1.items.0.title2"]') - .fill('items>1>title') - - await expect( - page.locator('input[name="blocksWithSimilarConfigs.1.items.0.title2"]'), - ).toHaveValue('items>1>title') - }) - - test('should bypass min rows validation when no rows present and field is not required', async () => { - await page.goto(url.create) - await saveDocAndAssert(page) - await expect(page.locator('.Toastify')).toContainText('successfully') - }) - - test('should fail min rows validation when rows are present', async () => { - await page.goto(url.create) - - await page - .locator('#field-blocksWithMinRows') - .getByRole('button', { name: 'Add Blocks With Min Row' }) - .click() - - const blocksDrawer = page.locator('[id^=drawer_1_blocks-drawer-]') - await expect(blocksDrawer).toBeVisible() - - const firstBlockSelector = blocksDrawer - .locator('.blocks-drawer__blocks .blocks-drawer__block') - .first() - - await firstBlockSelector.click() - - const firstRow = page.locator('input[name="blocksWithMinRows.0.blockTitle"]') - await expect(firstRow).toBeVisible() - await firstRow.fill('first row') - await expect(firstRow).toHaveValue('first row') - - await page.click('#action-save', { delay: 100 }) - await expect(page.locator('.Toastify')).toContainText( - 'The following field is invalid: blocksWithMinRows', - ) - }) - - describe('row manipulation', () => { - describe('react hooks', () => { - test('should add 2 new block rows', async () => { - await page.goto(url.create) - - await page - .locator('.custom-blocks-field-management') - .getByRole('button', { name: 'Add Block 1' }) - .click() - - const customBlocks = page.locator( - '#field-customBlocks input[name="customBlocks.0.block1Title"]', - ) - - await page.mouse.wheel(0, 1750) - - await customBlocks.scrollIntoViewIfNeeded() - - await expect(customBlocks).toHaveValue('Block 1: Prefilled Title') - - await page - .locator('.custom-blocks-field-management') - .getByRole('button', { name: 'Add Block 2' }) - .click() - await expect( - page.locator('#field-customBlocks input[name="customBlocks.1.block2Title"]'), - ).toHaveValue('Block 2: Prefilled Title') - - await page - .locator('.custom-blocks-field-management') - .getByRole('button', { name: 'Replace Block 2' }) - .click() - await expect( - page.locator('#field-customBlocks input[name="customBlocks.1.block1Title"]'), - ).toHaveValue('REPLACED BLOCK') - }) - }) - }) - }) - - describe('array', () => { - let url: AdminUrlUtil - beforeAll(() => { - url = new AdminUrlUtil(serverURL, 'array-fields') - }) - - test('should be readOnly', async () => { - await page.goto(url.create) - const field = page.locator('#field-readOnly__0__text') - await expect(field).toBeDisabled() - }) - - test('should have defaultValue', async () => { - await page.goto(url.create) - const field = page.locator('#field-readOnly__0__text') - await expect(field).toHaveValue('defaultValue') - }) - - test('should render RowLabel using a component', async () => { - const label = 'custom row label as component' - await page.goto(url.create) - await page.locator('#field-rowLabelAsComponent >> .array-field__add-row').click() - - await page.locator('#field-rowLabelAsComponent__0__title').fill(label) - await wait(100) - const customRowLabel = page.locator( - '#rowLabelAsComponent-row-0 >> .array-field__row-header > :text("custom row label")', - ) - await expect(customRowLabel).toHaveCSS('text-transform', 'uppercase') - }) - - test('should bypass min rows validation when no rows present and field is not required', async () => { - await page.goto(url.create) - await saveDocAndAssert(page) - await expect(page.locator('.Toastify')).toContainText('successfully') - }) - - test('should fail min rows validation when rows are present', async () => { - await page.goto(url.create) - await page.locator('#field-arrayWithMinRows >> .array-field__add-row').click() - - await page.click('#action-save', { delay: 100 }) - await expect(page.locator('.Toastify')).toContainText( - 'The following field is invalid: arrayWithMinRows', - ) - }) - - describe('row manipulation', () => { - test('should add, remove and duplicate rows', async () => { - const assertText0 = 'array row 1' - const assertGroupText0 = 'text in group in row 1' - const assertText1 = 'array row 2' - const assertText3 = 'array row 3' - const assertGroupText3 = 'text in group in row 3' - await page.goto(url.create) - await page.mouse.wheel(0, 1750) - await page.locator('#field-potentiallyEmptyArray').scrollIntoViewIfNeeded() - await wait(300) - - // Add 3 rows - await page.locator('#field-potentiallyEmptyArray > .array-field__add-row').click() - await wait(300) - await page.locator('#field-potentiallyEmptyArray > .array-field__add-row').click() - await wait(300) - await page.locator('#field-potentiallyEmptyArray > .array-field__add-row').click() - await wait(300) - - // Fill out row 1 - await page.locator('#field-potentiallyEmptyArray__0__text').fill(assertText0) - await page - .locator('#field-potentiallyEmptyArray__0__groupInRow__textInGroupInRow') - .fill(assertGroupText0) - // Fill out row 2 - await page.locator('#field-potentiallyEmptyArray__1__text').fill(assertText1) - // Fill out row 3 - await page.locator('#field-potentiallyEmptyArray__2__text').fill(assertText3) - await page - .locator('#field-potentiallyEmptyArray__2__groupInRow__textInGroupInRow') - .fill(assertGroupText3) - - // Remove row 1 - await page.locator('#potentiallyEmptyArray-row-0 .array-actions__button').click() - await page - .locator('#potentiallyEmptyArray-row-0 .popup__scroll-container .array-actions__remove') - .click() - // Remove row 2 - await page.locator('#potentiallyEmptyArray-row-0 .array-actions__button').click() - await page - .locator('#potentiallyEmptyArray-row-0 .popup__scroll-container .array-actions__remove') - .click() - - // Save document - await saveDocAndAssert(page) - - // Scroll to array row (fields are not rendered in DOM until on screen) - await page.locator('#field-potentiallyEmptyArray__0__groupInRow').scrollIntoViewIfNeeded() - - // Expect the remaining row to be the third row - const input = page.locator('#field-potentiallyEmptyArray__0__groupInRow__textInGroupInRow') - await expect(input).toHaveValue(assertGroupText3) - - // Duplicate row - await page.locator('#potentiallyEmptyArray-row-0 .array-actions__button').click() - await page - .locator( - '#potentiallyEmptyArray-row-0 .popup__scroll-container .array-actions__duplicate', - ) - .click() - - // Update duplicated row group field text - await page - .locator('#field-potentiallyEmptyArray__1__groupInRow__textInGroupInRow') - .fill(`${assertGroupText3} duplicate`) - - // Save document - await saveDocAndAssert(page) - - // Expect the second row to be a duplicate of the remaining row - await expect( - page.locator('#field-potentiallyEmptyArray__1__groupInRow__textInGroupInRow'), - ).toHaveValue(`${assertGroupText3} duplicate`) - - // Remove row 1 - await page.locator('#potentiallyEmptyArray-row-0 .array-actions__button').click() - await page - .locator('#potentiallyEmptyArray-row-0 .popup__scroll-container .array-actions__remove') - .click() - - // Save document - await saveDocAndAssert(page) - - // Expect the remaining row to be the copy of the duplicate row - await expect( - page.locator('#field-potentiallyEmptyArray__0__groupInRow__textInGroupInRow'), - ).toHaveValue(`${assertGroupText3} duplicate`) - }) - }) - - // TODO: re-enable this test - test.skip('should bulk update', async () => { - await payload.create({ - collection: 'array-fields', - data: { - title: 'for test 1', - items: [ - { - text: 'test 1', - }, - { - text: 'test 2', - }, - ], - }, - }) - - await payload.create({ - collection: 'array-fields', - data: { - title: 'for test 2', - items: [ - { - text: 'test 3', - }, - ], - }, - }) - - await payload.create({ - collection: 'array-fields', - data: { - title: 'for test 3', - items: [ - { - text: 'test 4', - }, - { - text: 'test 5', - }, - { - text: 'test 6', - }, - ], - }, - }) - - const bulkText = 'Bulk update text' - await page.goto(url.list) - await page.waitForSelector('.table > table > tbody > tr td.cell-title') - const rows = page.locator('.table > table > tbody > tr', { - has: page.locator('td.cell-title a', { - hasText: 'for test', - }), - }) - const count = await rows.count() - - for (let i = 0; i < count; i++) { - await rows - .nth(i) - .locator('td.cell-_select .checkbox-input__input > input[type="checkbox"]') - .click() - } - await page.locator('.edit-many__toggle').click() - await page.locator('.field-select .rs__control').click() - - const arrayOption = page.locator('.rs__option', { - hasText: 'Items', - }) - - await expect(arrayOption).toBeVisible() - - await arrayOption.click() - await wait(200) - - const addRowButton = page.locator('#field-items > .array-field__add-row') - - await expect(addRowButton).toBeVisible() - - await addRowButton.click() - await wait(200) - - const targetInput = page.locator('#field-items__0__text') - - await expect(targetInput).toBeVisible() - - await targetInput.fill(bulkText) - - await page.locator('#edit-array-fields .form-submit .edit-many__save').click() - await expect(page.locator('.Toastify__toast--success')).toContainText( - 'Updated 3 Array Fields successfully.', - ) - }) - }) - describe('tabs', () => { let url: AdminUrlUtil beforeAll(() => { @@ -974,20 +541,17 @@ describe('fields', () => { const jsonValue = '{ "foo": "bar"}' await page.goto(url.create) + await page.waitForURL(url.create) - await wait(300) - - await page.locator('.tabs-field__tab-button:has-text("Tab with Row")').click() + await switchTab(page, '.tabs-field__tab-button:has-text("Tab with Row")') await page.locator('#field-textInRow').fill(textInRowValue) await page.locator('#field-numberInRow').fill(numberInRowValue) await page.locator('.json-field .inputarea').fill(jsonValue) await wait(300) - await page.locator('.tabs-field__tab-button:has-text("Tab with Array")').click() - await page.locator('.tabs-field__tab-button:has-text("Tab with Row")').click() - - await wait(100) + await switchTab(page, '.tabs-field__tab-button:has-text("Tab with Array")') + await switchTab(page, '.tabs-field__tab-button:has-text("Tab with Row")') await expect(page.locator('#field-textInRow')).toHaveValue(textInRowValue) await expect(page.locator('#field-numberInRow')).toHaveValue(numberInRowValue) @@ -998,410 +562,48 @@ describe('fields', () => { const textInRowValue = 'new value' const jsonValue = '{ "new": "value"}' await page.goto(url.list) - await page.locator('.cell-id a').click() - - await wait(300) + await navigateToListCellLink(page) // Go to Row tab, update the value - await page.locator('.tabs-field__tab-button:has-text("Tab with Row")').click() + await switchTab(page, '.tabs-field__tab-button:has-text("Tab with Row")') + await page.locator('#field-textInRow').fill(textInRowValue) await page.locator('.json-field .inputarea').fill(jsonValue) - await wait(250) + await wait(500) // Go to Array tab, then back to Row. Make sure new value is still there - await page.locator('.tabs-field__tab-button:has-text("Tab with Array")').click() - await page.locator('.tabs-field__tab-button:has-text("Tab with Row")').click() + await switchTab(page, '.tabs-field__tab-button:has-text("Tab with Array")') + await switchTab(page, '.tabs-field__tab-button:has-text("Tab with Row")') await expect(page.locator('#field-textInRow')).toHaveValue(textInRowValue) await expect(page.locator('.json-field .lines-content')).toContainText(jsonValue) // Go to array tab, save the doc - await page.locator('.tabs-field__tab-button:has-text("Tab with Array")').click() - await page.click('#action-save', { delay: 100 }) - - await wait(250) + await switchTab(page, '.tabs-field__tab-button:has-text("Tab with Array")') + await saveDocAndAssert(page) // Go back to row tab, make sure the new value is still present - await page.locator('.tabs-field__tab-button:has-text("Tab with Row")').click() + await switchTab(page, '.tabs-field__tab-button:has-text("Tab with Row")') await expect(page.locator('#field-textInRow')).toHaveValue(textInRowValue) }) test('should render array data within unnamed tabs', async () => { await page.goto(url.list) - await page.locator('.cell-id a').click() - await page.locator('.tabs-field__tab-button:has-text("Tab with Array")').click() + await navigateToListCellLink(page) + await switchTab(page, '.tabs-field__tab-button:has-text("Tab with Array")') await expect(page.locator('#field-array__0__text')).toHaveValue("Hello, I'm the first row") }) test('should render array data within named tabs', async () => { await page.goto(url.list) - await page.locator('.cell-id a').click() - await page.locator('.tabs-field__tab-button:nth-child(5)').click() + await navigateToListCellLink(page) + await switchTab(page, '.tabs-field__tab-button:nth-child(5)') await expect(page.locator('#field-tab__array__0__text')).toHaveValue( "Hello, I'm the first row, in a named tab", ) }) }) - describe('richText', () => { - async function navigateToRichTextFields() { - const url: AdminUrlUtil = new AdminUrlUtil(serverURL, 'rich-text-fields') - await page.goto(url.list) - await page.waitForURL(url.list) - await page.locator('.row-1 .cell-title a').click() - } - - describe('cell', () => { - test('ensure cells are smaller than 300px in height', async () => { - const url: AdminUrlUtil = new AdminUrlUtil(serverURL, 'rich-text-fields') - await page.goto(url.list) // Navigate to rich-text list view - - const table = page.locator('.list-controls ~ .table') - const lexicalCell = table.locator('.cell-lexicalCustomFields').first() - const lexicalHtmlCell = table.locator('.cell-lexicalCustomFields_html').first() - const entireRow = table.locator('.row-1').first() - - // Make sure each of the 3 above are no larger than 300px in height: - expect((await lexicalCell.boundingBox()).height).toBeLessThanOrEqual(300) - expect((await lexicalHtmlCell.boundingBox()).height).toBeLessThanOrEqual(300) - expect((await entireRow.boundingBox()).height).toBeLessThanOrEqual(300) - }) - }) - - describe('toolbar', () => { - test('should run url validation', async () => { - await navigateToRichTextFields() - - // Open link drawer - await page.locator('.rich-text__toolbar button:not([disabled]) .link').first().click() - - // find the drawer - const editLinkModal = page.locator('[id^=drawer_1_rich-text-link-]') - await expect(editLinkModal).toBeVisible() - - // Fill values and click Confirm - await editLinkModal.locator('#field-text').fill('link text') - await editLinkModal.locator('label[for="field-linkType-custom"]').click() - await editLinkModal.locator('#field-url').fill('') - await wait(200) - await editLinkModal.locator('button[type="submit"]').click() - await wait(400) - const errorField = page.locator( - '[id^=drawer_1_rich-text-link-] .render-fields > :nth-child(3)', - ) - const hasErrorClass = await errorField.evaluate((el) => el.classList.contains('error')) - expect(hasErrorClass).toBe(true) - }) - - test('should create new url custom link', async () => { - await navigateToRichTextFields() - - // Open link drawer - await page.locator('.rich-text__toolbar button:not([disabled]) .link').first().click() - - // find the drawer - const editLinkModal = page.locator('[id^=drawer_1_rich-text-link-]') - await expect(editLinkModal).toBeVisible() - - await wait(400) - // Fill values and click Confirm - await editLinkModal.locator('#field-text').fill('link text') - await editLinkModal.locator('label[for="field-linkType-custom"]').click() - await editLinkModal.locator('#field-url').fill('https://payloadcms.com') - await editLinkModal.locator('button[type="submit"]').click() - await wait(400) - await saveDocAndAssert(page) - - // Remove link from editor body - await page.locator('span >> text="link text"').click() - const popup = page.locator('.popup--active .rich-text-link__popup') - await expect(popup.locator('.rich-text-link__link-label')).toBeVisible() - await popup.locator('.rich-text-link__link-close').click() - await expect(page.locator('span >> text="link text"')).toHaveCount(0) - }) - - test('should create new internal link', async () => { - await navigateToRichTextFields() - - // Open link drawer - await page.locator('.rich-text__toolbar button:not([disabled]) .link').first().click() - - // find the drawer - const editLinkModal = page.locator('[id^=drawer_1_rich-text-link-]') - await expect(editLinkModal).toBeVisible() - await wait(400) - - // Fill values and click Confirm - await editLinkModal.locator('#field-text').fill('link text') - await editLinkModal.locator('label[for="field-linkType-internal"]').click() - await editLinkModal.locator('#field-doc .rs__control').click() - await page.keyboard.type('dev@') - await editLinkModal - .locator('#field-doc .rs__menu .rs__option:has-text("dev@payloadcms.com")') - .click() - // await wait(200); - await editLinkModal.locator('button[type="submit"]').click() - await saveDocAndAssert(page) - }) - - test('should not create new url link when read only', async () => { - await navigateToRichTextFields() - - // Attempt to open link popup - const modalTrigger = page.locator('.rich-text--read-only .rich-text__toolbar button .link') - await expect(modalTrigger).toBeDisabled() - }) - - test('should only list RTE enabled upload collections in drawer', async () => { - await navigateToRichTextFields() - - // Open link drawer - await page - .locator('.rich-text__toolbar button:not([disabled]) .upload-rich-text-button') - .first() - .click() - - // open the list select menu - await page.locator('.list-drawer__select-collection-wrap .rs__control').click() - - const menu = page.locator('.list-drawer__select-collection-wrap .rs__menu') - // `uploads-3` has enableRichTextRelationship set to false - await expect(menu).not.toContainText('Uploads3') - }) - - // TODO: this test can't find the selector for the search filter, but functionality works. - // Need to debug - test.skip('should search correct useAsTitle field after toggling collection in list drawer', async () => { - await navigateToRichTextFields() - - // open link drawer - const field = page.locator('#field-richText') - const button = field.locator( - 'button.rich-text-relationship__list-drawer-toggler.list-drawer__toggler', - ) - await button.click() - - // check that the search is on the `name` field of the `text-fields` collection - const drawer = page.locator('[id^=list-drawer_1_]') - - await expect(drawer.locator('.search-filter__input')).toHaveAttribute( - 'placeholder', - 'Search by Text', - ) - - // change the selected collection to `array-fields` - await page.locator('.list-drawer__select-collection-wrap .rs__control').click() - const menu = page.locator('.list-drawer__select-collection-wrap .rs__menu') - await menu.locator('.rs__option').getByText('Array Field').click() - - // check that `id` is now the default search field - await expect(drawer.locator('.search-filter__input')).toHaveAttribute( - 'placeholder', - 'Search by ID', - ) - }) - - test('should only list RTE enabled collections in link drawer', async () => { - await navigateToRichTextFields() - - await page.locator('.rich-text__toolbar button:not([disabled]) .link').first().click() - - const editLinkModal = page.locator('[id^=drawer_1_rich-text-link-]') - await expect(editLinkModal).toBeVisible() - - await editLinkModal.locator('label[for="field-linkType-internal"]').click() - await editLinkModal.locator('.relationship__wrap .rs__control').click() - - const menu = page.locator('.relationship__wrap .rs__menu') - - // array-fields has enableRichTextLink set to false - await expect(menu).not.toContainText('Array Fields') - }) - - test('should only list non-upload collections in relationship drawer', async () => { - await navigateToRichTextFields() - - // Open link drawer - await page - .locator('.rich-text__toolbar button:not([disabled]) .relationship-rich-text-button') - .first() - .click() - - await wait(300) - - // open the list select menu - await page.locator('.list-drawer__select-collection-wrap .rs__control').click() - - const menu = page.locator('.list-drawer__select-collection-wrap .rs__menu') - await expect(menu).not.toContainText('Uploads') - }) - - test('should respect customizing the default fields', async () => { - const linkText = 'link' - const value = 'test value' - await navigateToRichTextFields() - const field = page.locator('.rich-text', { - has: page.locator('#field-richTextCustomFields'), - }) - // open link drawer - const button = field.locator('button.rich-text__button.link') - await button.click() - - // fill link fields - const linkDrawer = page.locator('[id^=drawer_1_rich-text-link-]') - const fields = linkDrawer.locator('.render-fields > .field-type') - await fields.locator('#field-text').fill(linkText) - await fields.locator('#field-url').fill('https://payloadcms.com') - const input = fields.locator('#field-fields__customLinkField') - await input.fill(value) - - await wait(300) - - // submit link closing drawer - await linkDrawer.locator('button[type="submit"]').click() - const linkInEditor = field.locator(`.rich-text-link >> text="${linkText}"`) - await saveDocAndAssert(page) - - // open modal again - await linkInEditor.click() - - const popup = page.locator('.popup--active .rich-text-link__popup') - await expect(popup).toBeVisible() - - await popup.locator('.rich-text-link__link-edit').click() - - const linkDrawer2 = page.locator('[id^=drawer_1_rich-text-link-]') - const fields2 = linkDrawer2.locator('.render-fields > .field-type') - const input2 = fields2.locator('#field-fields__customLinkField') - - await expect(input2).toHaveValue(value) - }) - }) - - describe('editor', () => { - test('should populate url link', async () => { - await navigateToRichTextFields() - - // Open link popup - await page.locator('#field-richText span >> text="render links"').click() - const popup = page.locator('.popup--active .rich-text-link__popup') - await expect(popup).toBeVisible() - await expect(popup.locator('a')).toHaveAttribute('href', 'https://payloadcms.com') - - // Open the drawer - await popup.locator('.rich-text-link__link-edit').click() - const editLinkModal = page.locator('[id^=drawer_1_rich-text-link-]') - await expect(editLinkModal).toBeVisible() - - // Check the drawer values - const textField = editLinkModal.locator('#field-text') - await expect(textField).toHaveValue('render links') - - // Close the drawer - await editLinkModal.locator('button[type="submit"]').click() - await expect(editLinkModal).toBeHidden() - }) - - test('should populate relationship link', async () => { - await navigateToRichTextFields() - - // Open link popup - await page.locator('#field-richText span >> text="link to relationships"').click() - const popup = page.locator('.popup--active .rich-text-link__popup') - await expect(popup).toBeVisible() - await expect(popup.locator('a')).toHaveAttribute( - 'href', - /\/admin\/collections\/array-fields\/.*/, - ) - - // Open the drawer - await popup.locator('.rich-text-link__link-edit').click() - const editLinkModal = page.locator('[id^=drawer_1_rich-text-link-]') - await expect(editLinkModal).toBeVisible() - - // Check the drawer values - const textField = editLinkModal.locator('#field-text') - await expect(textField).toHaveValue('link to relationships') - }) - - test('should open upload drawer and render custom relationship fields', async () => { - await navigateToRichTextFields() - const field = page.locator('#field-richText') - const button = field.locator('button.rich-text-upload__upload-drawer-toggler') - - await button.click() - - const documentDrawer = page.locator('[id^=drawer_1_upload-drawer-]') - await expect(documentDrawer).toBeVisible() - const caption = documentDrawer.locator('#field-caption') - await expect(caption).toBeVisible() - }) - - test('should open upload document drawer from read-only field', async () => { - await navigateToRichTextFields() - const field = page.locator('#field-richTextReadOnly') - const button = field.locator( - 'button.rich-text-upload__doc-drawer-toggler.doc-drawer__toggler', - ) - - await button.click() - - const documentDrawer = page.locator('[id^=doc-drawer_uploads_1_]') - await expect(documentDrawer).toBeVisible() - }) - - test('should open relationship document drawer from read-only field', async () => { - await navigateToRichTextFields() - const field = page.locator('#field-richTextReadOnly') - const button = field.locator( - 'button.rich-text-relationship__doc-drawer-toggler.doc-drawer__toggler', - ) - - await button.click() - - const documentDrawer = page.locator('[id^=doc-drawer_text-fields_1_]') - await expect(documentDrawer).toBeVisible() - }) - - test('should populate new links', async () => { - await navigateToRichTextFields() - - // Highlight existing text - const headingElement = page.locator( - '#field-richText h1 >> text="Hello, I\'m a rich text field."', - ) - await headingElement.selectText() - - // click the toolbar link button - await page.locator('.rich-text__toolbar button:not([disabled]) .link').first().click() - - // find the drawer and confirm the values - const editLinkModal = page.locator('[id^=drawer_1_rich-text-link-]') - await expect(editLinkModal).toBeVisible() - const textField = editLinkModal.locator('#field-text') - await expect(textField).toHaveValue("Hello, I'm a rich text field.") - }) - test('should not take value from previous block', async () => { - await navigateToRichTextFields() - - // check first block value - const textField = page.locator('#field-blocks__0__text') - await expect(textField).toHaveValue('Regular text') - - // remove the first block - const editBlock = page.locator('#blocks-row-0 .popup-button') - await editBlock.click() - const removeButton = page.locator('#blocks-row-0').getByRole('button', { name: 'Remove' }) - await expect(removeButton).toBeVisible() - await removeButton.click() - - // check new first block value - const richTextField = page.locator('#field-blocks__0__text') - const richTextValue = await richTextField.innerText() - expect(richTextValue).toContain('Rich text') - }) - }) - }) describe('date', () => { let url: AdminUrlUtil @@ -1483,10 +685,7 @@ describe('fields', () => { // enter date in default date field await dateField.fill('02/07/2023') - await page.locator('#action-save').click() - - // wait for navigation to update route - await expect.poll(() => page.url(), { timeout: 1000 }).not.toContain('create') + await saveDocAndAssert(page) // get the ID of the doc const routeSegments = page.url().split('/') @@ -1530,369 +729,6 @@ describe('fields', () => { }) }) - describe('relationship', () => { - let url: AdminUrlUtil - const tableRowLocator = 'table > tbody > tr' - - beforeAll(() => { - url = new AdminUrlUtil(serverURL, 'relationship-fields') - }) - - test('should create inline relationship within field with many relations', async () => { - await page.goto(url.create) - - const button = page.locator('#relationship-add-new .relationship-add-new__add-button') - await button.click() - await page - .locator('#field-relationship .relationship-add-new__relation-button--text-fields') - .click() - - const textField = page.locator('.drawer__content #field-text') - const textValue = 'hello' - - await textField.fill(textValue) - - await page.locator('[id^=doc-drawer_text-fields_1_] #action-save').click() - await expect(page.locator('.Toastify')).toContainText('successfully') - await page.locator('[id^=close-drawer__doc-drawer_text-fields_1_]').click() - - await expect( - page.locator('#field-relationship .relationship--single-value__text'), - ).toContainText(textValue) - - await page.locator('#action-save').click() - await expect(page.locator('.Toastify')).toContainText('successfully') - }) - - test('should create nested inline relationships', async () => { - await page.goto(url.create) - await page.waitForURL(`**/${url.create}`) - // Open first modal - await page.locator('#relationToSelf-add-new .relationship-add-new__add-button').click() - - // Fill first modal's required relationship field - await page.locator('[id^=doc-drawer_relationship-fields_1_] #field-relationship').click() - await page - .locator( - '[id^=doc-drawer_relationship-fields_1_] .rs__option:has-text("Seeded text document")', - ) - .click() - - // Open second modal - await page - .locator('[id^=doc-drawer_relationship-fields_1_] #relationToSelf-add-new button') - .click() - - // Fill second modal's required relationship field - await page.locator('[id^=doc-drawer_relationship-fields_2_] #field-relationship').click() - await page - .locator( - '[id^=doc-drawer_relationship-fields_2_] .rs__option:has-text("Seeded text document")', - ) - .click() - - // Save then close the second modal - await page.locator('[id^=doc-drawer_relationship-fields_2_] #action-save').click() - await expect.poll(() => page.url(), { timeout: POLL_TOPASS_TIMEOUT }).toContain('create') - await page.locator('[id^=close-drawer__doc-drawer_relationship-fields_2_]').click() - - // Assert that the first modal is still open and the value matches - await expect(page.locator('[id^=doc-drawer_relationship-fields_1_]')).toBeVisible() - await expect( - page.locator( - '[id^=doc-drawer_relationship-fields_1_] #field-relationToSelf .relationship--single-value__text', - ), - ).toBeVisible() // TODO: use '.toContainText('doc_id')' with the doc in the second modal - - // Save then close the first modal - await page.locator('[id^=doc-drawer_relationship-fields_1_] #action-save').click() - await expect.poll(() => page.url(), { timeout: POLL_TOPASS_TIMEOUT }).toContain('create') - await page.locator('[id^=close-drawer__doc-drawer_relationship-fields_1_]').click() - - // Expect the original field to have a value filled - await expect( - page.locator('#field-relationToSelf .relationship--single-value__text'), - ).toBeVisible() - - // Fill the required field - await page.locator('#field-relationship').click() - await page.locator('.rs__option:has-text("Seeded text document")').click() - await expect.poll(() => page.url(), { timeout: POLL_TOPASS_TIMEOUT }).toContain('create') - await page.locator('#action-save').click() - - await expect(page.locator('.Toastify')).toContainText('successfully') - }) - - test('should hide relationship add new button', async () => { - await page.goto(url.create) - // expect the button to not exist in the field - const count = await page - .locator('#relationToSelfSelectOnly-add-new .relationship-add-new__add-button') - .count() - expect(count).toEqual(0) - }) - - test('should clear relationship values', async () => { - await page.goto(url.create) - - const field = page.locator('#field-relationship') - await field.click() - await page.locator('.rs__option:has-text("Seeded text document")').click() - await field.locator('.clear-indicator').click() - await expect(field.locator('.rs__placeholder')).toBeVisible() - }) - - // TODO: React-Select not loading things sometimes. Fix later - test.skip('should display `hasMany` polymorphic relationships', async () => { - await page.goto(url.create) - const field = page.locator('#field-relationHasManyPolymorphic') - await field.click() - - await page - .locator('.rs__option', { - hasText: exactText('Seeded text document'), - }) - .click() - - await expect( - page - .locator('#field-relationHasManyPolymorphic .relationship--multi-value-label__text', { - hasText: exactText('Seeded text document'), - }) - .first(), - ).toBeVisible() - - // await fill the required fields then save the document and check again - await page.locator('#field-relationship').click() - await page.locator('#field-relationship .rs__option:has-text("Seeded text document")').click() - await saveDocAndAssert(page) - - const valueAfterSave = page.locator('#field-relationHasManyPolymorphic .multi-value').first() - - await expect( - valueAfterSave - .locator('.relationship--multi-value-label__text', { - hasText: exactText('Seeded text document'), - }) - .first(), - ).toBeVisible() - }) - - test('should populate relationship dynamic default value', async () => { - await page.goto(url.create) - await expect( - page.locator('#field-relationWithDynamicDefault .relationship--single-value__text'), - ).toContainText('dev@payloadcms.com') - await expect( - page.locator('#field-relationHasManyWithDynamicDefault .relationship--single-value__text'), - ).toContainText('dev@payloadcms.com') - }) - - test('should filter relationship options', async () => { - await page.goto(url.create) - await page.locator('#field-relationship .rs__control').click() - await page.keyboard.type('seeded') - await page.locator('.rs__option:has-text("Seeded text document")').click() - await saveDocAndAssert(page) - }) - - // Related issue: https://github.com/payloadcms/payload/issues/2815 - test('should modify fields in relationship drawer', async () => { - await page.goto(url.create) - await page.waitForURL(`**/${url.create}`) - // First fill out the relationship field, as it's required - await page.locator('#relationship-add-new .relationship-add-new__add-button').click() - await page - .locator('#field-relationship .relationship-add-new__relation-button--text-fields') - .click() - - await page.locator('.drawer__content #field-text').fill('something') - - await page.locator('[id^=doc-drawer_text-fields_1_] #action-save').click() - await expect(page.locator('.Toastify')).toContainText('successfully') - await page.locator('[id^=close-drawer__doc-drawer_text-fields_1_]').click() - await page.locator('#action-save').click() - await expect(page.locator('.Toastify')).toContainText('successfully') - - // Create a new doc for the `relationshipHasMany` field - await expect.poll(() => page.url(), { timeout: POLL_TOPASS_TIMEOUT }).not.toContain('create') - await page.locator('#field-relationshipHasMany .relationship-add-new__add-button').click() - const value = 'Hello, world!' - await page.locator('.drawer__content #field-text').fill(value) - - // Save and close the drawer - await page.locator('[id^=doc-drawer_text-fields_1_] #action-save').click() - await expect(page.locator('.Toastify')).toContainText('successfully') - await page.locator('[id^=close-drawer__doc-drawer_text-fields_1_]').click() - - // Now open the drawer again to edit the `text` field _using the keyboard_ - // Mimic real user behavior by typing into the field with spaces and backspaces - // Explicitly use both `down` and `type` to cover edge cases - await page - .locator( - '#field-relationshipHasMany button.relationship--multi-value-label__drawer-toggler', - ) - .click() - await page.locator('[id^=doc-drawer_text-fields_1_] #field-text').click() - await page.keyboard.down('1') - await page.keyboard.type('23') - await expect(page.locator('[id^=doc-drawer_text-fields_1_] #field-text')).toHaveValue( - `${value}123`, - ) - await page.keyboard.type('4567') - await page.keyboard.press('Backspace') - await expect(page.locator('[id^=doc-drawer_text-fields_1_] #field-text')).toHaveValue( - `${value}123456`, - ) - - // save drawer - await page.locator('[id^=doc-drawer_text-fields_1_] #action-save').click() - await expect(page.locator('.Toastify')).toContainText('successfully') - // close drawer - await page.locator('[id^=close-drawer__doc-drawer_text-fields_1_]').click() - // save document and reload - await page.locator('#action-save').click() - await expect(page.locator('.Toastify')).toContainText('successfully') - await page.reload() - - // check if the value is saved - await expect( - page.locator('#field-relationshipHasMany .relationship--multi-value-label__text'), - ).toHaveText(`${value}123456`) - }) - - // Drawers opened through the edit button are prone to issues due to the use of stopPropagation for certain - // events - specifically for drawers opened through the edit button. This test is to ensure that drawers - // opened through the edit button can be saved using the hotkey. - test('should save using hotkey in edit document drawer', async () => { - await page.goto(url.create) - // First fill out the relationship field, as it's required - await page.locator('#relationship-add-new .relationship-add-new__add-button').click() - await page.locator('#field-relationship .value-container').click() - // Select "Seeded text document" relationship - await page.getByText('Seeded text document', { exact: true }).click() - - // Need to wait to properly open drawer - without this the drawer state is flakey and closes before - // the text below can be filled before the save on the drawer - await wait(200) - - // Click edit button which opens drawer - await page.getByRole('button', { name: 'Edit Seeded text document' }).click() - - // Fill 'text' field of 'Seeded text document' - await page.locator('.drawer__content #field-text').fill('some updated text value') - - // Save drawer (not parent page) with hotkey - await saveDocHotkeyAndAssert(page) - - const seededTextDocument = await payload.find({ - collection: textFieldsSlug, - where: { - text: { - equals: 'some updated text value', - }, - }, - }) - const relationshipDocuments = await payload.find({ - collection: relationshipFieldsSlug, - }) - - // The Seeded text document should now have a text field with value 'some updated text value', - expect(seededTextDocument.docs.length).toEqual(1) - // but the relationship document should NOT exist, as the hotkey should have saved the drawer and not the parent page - expect(relationshipDocuments.docs.length).toEqual(0) - }) - - // TODO: Fix this. This test flakes due to react select - test.skip('should bypass min rows validation when no rows present and field is not required', async () => { - await page.goto(url.create) - // First fill out the relationship field, as it's required - await page.locator('#relationship-add-new .relationship-add-new__add-button').click() - await page.locator('#field-relationship .value-container').click() - await page.getByText('Seeded text document', { exact: true }).click() - - await saveDocAndAssert(page) - await expect(page.locator('.Toastify')).toContainText('successfully') - }) - - test('should fail min rows validation when rows are present', async () => { - await page.goto(url.create) - // First fill out the relationship field, as it's required - await page.locator('#relationship-add-new .relationship-add-new__add-button').click() - await page.locator('#field-relationship .value-container').click() - await page.getByText('Seeded text document', { exact: true }).click() - - // Need to wait to allow for field to retrieve documents before the save occurs - await wait(200) - - await page.locator('#field-relationshipWithMinRows .value-container').click() - - await page - .locator('#field-relationshipWithMinRows .rs__option:has-text("Seeded text document")') - .click() - - await page.click('#action-save', { delay: 100 }) - await expect(page.locator('.Toastify')).toContainText( - 'The following field is invalid: relationshipWithMinRows', - ) - }) - - test('should sort relationship options by sortOptions property (ID in ascending order)', async () => { - await page.goto(url.create) - - const field = page.locator('#field-relationship') - await field.click() - - const firstOption = page.locator('.rs__option').first() - await expect(firstOption).toBeVisible() - const firstOptionText = await firstOption.textContent() - expect(firstOptionText.trim()).toBe('Another text document') - }) - - test('should sort relationHasManyPolymorphic options by sortOptions property: text-fields collection (items in descending order)', async () => { - await page.goto(url.create) - - const field = page.locator('#field-relationHasManyPolymorphic') - await field.click() - - const firstOption = page.locator('.rs__option').first() - await expect(firstOption).toBeVisible() - const firstOptionText = await firstOption.textContent() - expect(firstOptionText.trim()).toBe('Seeded text document') - }) - - test('should allow filtering by relationship field / equals', async () => { - const textDoc = await createTextFieldDoc() - await createRelationshipFieldDoc({ value: textDoc.id, relationTo: 'text-fields' }) - - await page.goto(url.list) - - await page.locator('.list-controls__toggle-columns').click() - await page.locator('.list-controls__toggle-where').click() - await expect(page.locator('.list-controls__where.rah-static--height-auto')).toBeVisible() - await page.locator('.where-builder__add-first-filter').click() - - const conditionField = page.locator('.condition__field') - await conditionField.click() - - const dropdownFieldOptions = conditionField.locator('.rs__option') - await dropdownFieldOptions.locator('text=Relationship').nth(0).click() - - const operatorField = page.locator('.condition__operator') - await operatorField.click() - - const dropdownOperatorOptions = operatorField.locator('.rs__option') - await dropdownOperatorOptions.locator('text=equals').click() - - const valueField = page.locator('.condition__value') - await valueField.click() - const dropdownValueOptions = valueField.locator('.rs__option') - await dropdownValueOptions.locator('text=some text').click() - - await expect(page.locator(tableRowLocator)).toHaveCount(1) - }) - }) - describe('upload', () => { let url: AdminUrlUtil beforeAll(() => { @@ -1907,8 +743,7 @@ describe('fields', () => { .locator('.file-field__upload input[type="file"]') .setInputFiles(path.resolve(dirname, './collections/Upload/payload.jpg')) await expect(page.locator('.file-field .file-field__filename')).toHaveValue('payload.jpg') - await page.locator('#action-save').click() - await expect(page.locator('.Toastify')).toContainText('successfully') + await saveDocAndAssert(page) } // eslint-disable-next-line playwright/expect-expect @@ -1927,10 +762,11 @@ describe('fields', () => { test('should upload using the document drawer', async () => { await uploadImage() - await wait(500) + await wait(1000) // Open the media drawer and create a png upload - await page.locator('.field-type.upload .upload__toggler.doc-drawer__toggler').click() - await wait(1000) // TODO: Fix this. Need to wait a bit until the form in the drawer mounted, otherwise values sometimes disappear. This is an issue for all drawers + + await openDocDrawer(page, '.field-type.upload .upload__toggler.doc-drawer__toggler') + await page .locator('[id^=doc-drawer_uploads_1_] .file-field__upload input[type="file"]') .setInputFiles(path.resolve(dirname, './uploads/payload.png')) @@ -1957,7 +793,10 @@ describe('fields', () => { test('should clear selected upload', async () => { await uploadImage() await wait(1000) // TODO: Fix this. Need to wait a bit until the form in the drawer mounted, otherwise values sometimes disappear. This is an issue for all drawers - await page.locator('.field-type.upload .upload__toggler.doc-drawer__toggler').click() + + await openDocDrawer(page, '.field-type.upload .upload__toggler.doc-drawer__toggler') + + await wait(1000) await page .locator('[id^=doc-drawer_uploads_1_] .file-field__upload input[type="file"]') @@ -1973,8 +812,7 @@ describe('fields', () => { test('should select using the list drawer and restrict mimetype based on filterOptions', async () => { await uploadImage() - await page.locator('.field-type.upload .upload__toggler.list-drawer__toggler').click() - await wait(500) // TODO: Fix this. Need to wait a bit until the form in the drawer mounted, otherwise values sometimes disappear. This is an issue for all drawers + await openDocDrawer(page, '.field-type.upload .upload__toggler.list-drawer__toggler') const jpgImages = page.locator('[id^=list-drawer_1_] .upload-gallery img[src$=".jpg"]') await expect @@ -1996,7 +834,7 @@ describe('fields', () => { await wait(200) // open drawer - await page.locator('.field-type.upload .list-drawer__toggler').click() + await openDocDrawer(page, '.field-type.upload .list-drawer__toggler') // check title await expect(page.locator('.list-drawer__header-text')).toContainText('Uploads 3') }) @@ -2141,27 +979,3 @@ describe('fields', () => { }) }) }) - -async function createTextFieldDoc(overrides?: Partial): Promise { - return payload.create({ - collection: 'text-fields', - data: { - text: 'some text', - localizedText: 'some localized text', - ...overrides, - }, - }) as unknown as Promise -} - -async function createRelationshipFieldDoc( - relationship: RelationshipField['relationship'], - overrides?: Partial, -): Promise { - return payload.create({ - collection: 'relationship-fields', - data: { - relationship, - ...overrides, - }, - }) as unknown as Promise -} diff --git a/test/fields/int.spec.ts b/test/fields/int.spec.ts index ff7825009d..6070bea26d 100644 --- a/test/fields/int.spec.ts +++ b/test/fields/int.spec.ts @@ -112,6 +112,39 @@ describe('Fields', () => { // @ts-expect-error expect(localizedDoc.localizedHasMany.en).toEqual(localizedHasMany) }) + + it('should query hasMany in', async () => { + const hit = await payload.create({ + collection: 'text-fields', + data: { + text: 'required', + hasMany: ['one', 'five'], + }, + }) + + const miss = await payload.create({ + collection: 'text-fields', + data: { + text: 'required', + hasMany: ['two'], + }, + }) + + const { docs } = await payload.find({ + collection: 'text-fields', + where: { + hasMany: { + in: ['one'], + }, + }, + }) + + const hitResult = docs.find(({ id: findID }) => hit.id === findID) + const missResult = docs.find(({ id: findID }) => miss.id === findID) + + expect(hitResult).toBeDefined() + expect(missResult).toBeFalsy() + }) }) describe('relationship', () => { @@ -309,6 +342,37 @@ describe('Fields', () => { expect(Array.isArray(updatedDoc.selectHasMany)).toBe(true) expect(updatedDoc.selectHasMany).toEqual(['one', 'two']) }) + + it('should query hasMany in', async () => { + const hit = await payload.create({ + collection: 'select-fields', + data: { + selectHasMany: ['one', 'four'], + }, + }) + + const miss = await payload.create({ + collection: 'select-fields', + data: { + selectHasMany: ['three'], + }, + }) + + const { docs } = await payload.find({ + collection: 'select-fields', + where: { + selectHasMany: { + in: ['one'], + }, + }, + }) + + const hitResult = docs.find(({ id: findID }) => hit.id === findID) + const missResult = docs.find(({ id: findID }) => miss.id === findID) + + expect(hitResult).toBeDefined() + expect(missResult).toBeFalsy() + }) }) describe('number', () => { @@ -413,6 +477,37 @@ describe('Fields', () => { // @ts-expect-error expect(localizedDoc.localizedHasMany.en).toEqual(localizedHasMany) }) + + it('should query hasMany in', async () => { + const hit = await payload.create({ + collection: 'number-fields', + data: { + hasMany: [5, 10], + }, + }) + + const miss = await payload.create({ + collection: 'number-fields', + data: { + hasMany: [13], + }, + }) + + const { docs } = await payload.find({ + collection: 'number-fields', + where: { + hasMany: { + in: [5], + }, + }, + }) + + const hitResult = docs.find(({ id: findID }) => hit.id === findID) + const missResult = docs.find(({ id: findID }) => miss.id === findID) + + expect(hitResult).toBeDefined() + expect(missResult).toBeFalsy() + }) }) if (isMongoose(payload)) { diff --git a/test/fields/lexical.int.spec.ts b/test/fields/lexical.int.spec.ts index 86042cd374..d82755f6da 100644 --- a/test/fields/lexical.int.spec.ts +++ b/test/fields/lexical.int.spec.ts @@ -33,7 +33,6 @@ import { let payload: Payload let restClient: NextRESTClient -let token: string let createdArrayDocID: number | string = null let createdJPGDocID: number | string = null @@ -409,7 +408,7 @@ describe('Lexical', () => { const subEditorBlockNode: SerializedBlockNode = lexicalField.root .children[4] as SerializedBlockNode - const subEditor: SerializedEditorState = subEditorBlockNode.fields.richText + const subEditor: SerializedEditorState = subEditorBlockNode.fields.richTextField const subEditorRelationshipNode: SerializedRelationshipNode = subEditor.root .children[0] as SerializedRelationshipNode @@ -440,7 +439,7 @@ describe('Lexical', () => { const subEditorBlockNode: SerializedBlockNode = lexicalField.root .children[4] as SerializedBlockNode - const subEditor: SerializedEditorState = subEditorBlockNode.fields.richText + const subEditor: SerializedEditorState = subEditorBlockNode.fields.richTextField const subEditorRelationshipNode: SerializedRelationshipNode = subEditor.root .children[0] as SerializedRelationshipNode @@ -487,7 +486,7 @@ describe('Lexical', () => { const subEditorBlockNode: SerializedBlockNode = lexicalField.root .children[4] as SerializedBlockNode - const subEditor: SerializedEditorState = subEditorBlockNode.fields.richText + const subEditor: SerializedEditorState = subEditorBlockNode.fields.richTextField const subEditorRelationshipNode: SerializedRelationshipNode = subEditor.root .children[0] as SerializedRelationshipNode diff --git a/test/fields/payload-types.ts b/test/fields/payload-types.ts index 3db5186856..be677a8e2b 100644 --- a/test/fields/payload-types.ts +++ b/test/fields/payload-types.ts @@ -13,6 +13,12 @@ export type BlockColumns = | { text?: string | null + subArray?: + | { + requiredText: string + id?: string | null + }[] + | null id?: string | null }[] | null @@ -202,7 +208,7 @@ export interface User { hash?: string | null loginAttempts?: number | null lockUntil?: string | null - password: string | null + password?: string | null } /** * This interface was referenced by `Config`'s JSON-Schema @@ -247,12 +253,6 @@ export interface ArrayField { id?: string | null }[] | null - rowLabelAsFunction?: - | { - title?: string | null - id?: string | null - }[] - | null rowLabelAsComponent?: | { title?: string | null @@ -774,6 +774,7 @@ export interface IndexedField { text: string uniqueText?: string | null uniqueRequiredText: string + localizedUniqueRequiredText: string /** * @minItems 2 * @maxItems 2 @@ -1115,14 +1116,25 @@ export interface Upload { id: string text?: string | null media?: string | Upload | null - richText?: - | { + richText?: { + root: { + type: string + children: { + type: string + version: number [k: string]: unknown }[] - | null + direction: ('ltr' | 'rtl') | null + format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '' + indent: number + version: number + } + [k: string]: unknown + } | null updatedAt: string createdAt: string url?: string | null + thumbnailURL?: string | null filename?: string | null mimeType?: string | null filesize?: number | null @@ -1140,6 +1152,7 @@ export interface Uploads2 { updatedAt: string createdAt: string url?: string | null + thumbnailURL?: string | null filename?: string | null mimeType?: string | null filesize?: number | null @@ -1153,14 +1166,25 @@ export interface Uploads2 { export interface Uploads3 { id: string media?: string | Uploads3 | null - richText?: - | { + richText?: { + root: { + type: string + children: { + type: string + version: number [k: string]: unknown }[] - | null + direction: ('ltr' | 'rtl') | null + format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '' + indent: number + version: number + } + [k: string]: unknown + } | null updatedAt: string createdAt: string url?: string | null + thumbnailURL?: string | null filename?: string | null mimeType?: string | null filesize?: number | null diff --git a/test/generateTypes.ts b/test/generateTypes.ts index 28a05f9218..463c43a3d8 100644 --- a/test/generateTypes.ts +++ b/test/generateTypes.ts @@ -1,29 +1,41 @@ import fs from 'fs' import path from 'path' +import { generateTypes } from 'payload/node' -import { generateTypes } from '../packages/payload/src/bin/generateTypes.js' import { setTestEnvPaths } from './helpers/setTestEnvPaths.js' const [testConfigDir] = process.argv.slice(2) import { fileURLToPath } from 'url' + +import { load } from './loader/load.js' const filename = fileURLToPath(import.meta.url) const dirname = path.dirname(filename) +const loadConfig = async (configPath: string) => { + const configPromise = await load(configPath) + return configPromise.default +} + let testDir if (testConfigDir) { testDir = path.resolve(dirname, testConfigDir) + + const config = await loadConfig(path.resolve(testDir, 'config.ts')) + setTestEnvPaths(testDir) - generateTypes() + generateTypes(config) } else { // Generate types for entire directory testDir = dirname + const config = await loadConfig(path.resolve(testDir, 'config.ts')) + fs.readdirSync(dirname, { withFileTypes: true }) .filter((f) => f.isDirectory()) .forEach((dir) => { const suiteDir = path.resolve(testDir, dir.name) const configFound = setTestEnvPaths(suiteDir) - if (configFound) generateTypes() + if (configFound) generateTypes(config) }) } diff --git a/test/helpers.ts b/test/helpers.ts index f9fb38d65f..9da25609c3 100644 --- a/test/helpers.ts +++ b/test/helpers.ts @@ -13,6 +13,10 @@ type FirstRegisterArgs = { } type LoginArgs = { + data?: { + email: string + password: string + } page: Page serverURL: string } @@ -91,14 +95,24 @@ export async function firstRegister(args: FirstRegisterArgs): Promise { } export async function login(args: LoginArgs): Promise { - const { page, serverURL } = args + const { page, serverURL, data = devUser } = args - await page.goto(`${serverURL}/admin`) - await page.fill('#field-email', devUser.email) - await page.fill('#field-password', devUser.password) + await page.goto(`${serverURL}/admin/login`) + await page.waitForURL(`${serverURL}/admin/login`) + await wait(500) + await page.fill('#field-email', data.email) + await page.fill('#field-password', data.password) await wait(500) await page.click('[type=submit]') await page.waitForURL(`${serverURL}/admin`) + + await expect(() => expect(page.url()).not.toContain(`/admin/login`)).toPass({ + timeout: POLL_TOPASS_TIMEOUT, + }) + + await expect(() => expect(page.url()).not.toContain(`/admin/create-first-user`)).toPass({ + timeout: POLL_TOPASS_TIMEOUT, + }) } export async function saveDocHotkeyAndAssert(page: Page): Promise { @@ -130,6 +144,12 @@ export async function openNav(page: Page): Promise { await expect(page.locator('.template-default.template-default--nav-open')).toBeVisible() } +export async function openDocDrawer(page: Page, selector: string): Promise { + await wait(300) // wait for parent form state to initialize + await page.locator(selector).click({ delay: 100 }) + await wait(500) // wait for drawer form state to initialize +} + export async function closeNav(page: Page): Promise { if (!(await page.locator('.template-default.template-default--nav-open').isVisible())) return await page.locator('.nav-toggler >> visible=true').click() @@ -141,11 +161,10 @@ export async function openDocControls(page: Page): Promise { await expect(page.locator('.doc-controls__popup >> .popup__content')).toBeVisible() } -export async function changeLocale(page: Page, newLocale: string, skipURLCheck: boolean = false) { +export async function changeLocale(page: Page, newLocale: string) { await page.locator('.localizer >> button').first().click() await page - .locator(`.localizer`) - .locator(`.popup >> button`, { + .locator(`.localizer .popup.popup--active .popup-button-list button`, { hasText: newLocale, }) .first() @@ -153,11 +172,7 @@ export async function changeLocale(page: Page, newLocale: string, skipURLCheck: const regexPattern = new RegExp(`locale=${newLocale}`) - if (skipURLCheck) { - await wait(500) - } else { - await expect(page).toHaveURL(regexPattern) - } + await expect(page).toHaveURL(regexPattern) } export function exactText(text: string) { @@ -196,12 +211,25 @@ export const findTableCell = (page: Page, fieldName: string, rowTitle?: string): return cell } +export async function navigateToListCellLink(page: Page, selector = '.cell-id') { + const cellLink = page.locator(`${selector} a`).first() + const linkURL = await cellLink.getAttribute('href') + await cellLink.click() + await page.waitForURL(`**${linkURL}`) +} + export const findTableRow = (page: Page, title: string): Locator => { const row = page.locator(`tbody tr:has-text("${title}")`) expect(row).toBeTruthy() return row } +export async function switchTab(page: Page, selector: string) { + await page.locator(selector).click() + await wait(300) + await expect(page.locator(`${selector}.tabs-field__tab-button--active`)).toBeVisible() +} + /** * Throws an error when browser console error messages (with some exceptions) are thrown, thus resulting * in the e2e test failing. diff --git a/test/helpers/NextRESTClient.ts b/test/helpers/NextRESTClient.ts index 6b0886c482..fa262ec957 100644 --- a/test/helpers/NextRESTClient.ts +++ b/test/helpers/NextRESTClient.ts @@ -2,21 +2,20 @@ import type { SanitizedConfig } from 'payload/config' import type { Where } from 'payload/types' import type { ParsedQs } from 'qs' +import { + REST_DELETE as createDELETE, + REST_GET as createGET, + REST_PATCH as createPATCH, + REST_POST as createPOST, +} from '@payloadcms/next/routes' +import { GRAPHQL_POST as createGraphqlPOST } from '@payloadcms/next/routes' import QueryString from 'qs' -import { GRAPHQL_POST as createGraphqlPOST } from '../../packages/next/src/routes/graphql/index.js' -import { - DELETE as createDELETE, - GET as createGET, - PATCH as createPATCH, - POST as createPOST, -} from '../../packages/next/src/routes/rest/index.js' import { devUser } from '../credentials.js' type ValidPath = `/${string}` type RequestOptions = { auth?: boolean - file?: boolean query?: { depth?: number fallbackLocale?: string @@ -28,6 +27,10 @@ type RequestOptions = { } } +type FileArg = { + file?: Omit +} + function generateQueryString(query: RequestOptions['query'], params: ParsedQs): string { return QueryString.stringify( { @@ -67,12 +70,16 @@ export class NextRESTClient { this._GRAPHQL_POST = createGraphqlPOST(config) } - private buildHeaders(options: RequestInit & RequestOptions): Headers { + private buildHeaders(options: RequestInit & RequestOptions & FileArg): Headers { const defaultHeaders = { 'Content-Type': 'application/json', } const headers = new Headers({ - ...(options?.file ? {} : defaultHeaders), + ...(options?.file + ? { + 'Content-Length': options.file.size.toString(), + } + : defaultHeaders), ...(options?.headers || {}), }) @@ -141,7 +148,7 @@ export class NextRESTClient { return this._GRAPHQL_POST(request) } - async PATCH(path: ValidPath, options: RequestInit & RequestOptions): Promise { + async PATCH(path: ValidPath, options: RequestInit & RequestOptions & FileArg): Promise { const { url, slug, params } = this.generateRequestParts(path) const { query, ...rest } = options const queryParams = generateQueryString(query, params) @@ -156,11 +163,10 @@ export class NextRESTClient { async POST( path: ValidPath, - options: RequestInit & RequestOptions & { file?: boolean } = {}, + options: RequestInit & RequestOptions & FileArg = {}, ): Promise { const { url, slug, params } = this.generateRequestParts(path) const queryParams = generateQueryString({}, params) - const request = new Request(`${url}${queryParams}`, { ...options, method: 'POST', diff --git a/test/helpers/sdk/endpoint.ts b/test/helpers/sdk/endpoint.ts index 5974dc42f8..2dd5210edb 100644 --- a/test/helpers/sdk/endpoint.ts +++ b/test/helpers/sdk/endpoint.ts @@ -3,11 +3,11 @@ import type { Endpoint, PayloadHandler } from 'payload/config' import httpStatus from 'http-status' export const handler: PayloadHandler = async ({ payload, data, user }) => { - const method = String(data.method) + const operation = String(data.operation) - if (typeof payload[method] === 'function') { + if (typeof payload[operation] === 'function') { try { - const result = await payload[method]({ + const result = await payload[operation]({ ...(typeof data.args === 'object' ? data.args : {}), user, }) diff --git a/test/helpers/sdk/index.ts b/test/helpers/sdk/index.ts index 041481e3e9..5998f13a23 100644 --- a/test/helpers/sdk/index.ts +++ b/test/helpers/sdk/index.ts @@ -7,7 +7,9 @@ import type { FetchOptions, FindArgs, GeneratedTypes, + LoginArgs, UpdateArgs, + UpdateGlobalArgs, } from './types.js' type Args = { @@ -15,7 +17,7 @@ type Args = { } export class PayloadTestSDK> { - private fetch = async ({ jwt, reduceJSON, args, method }: FetchOptions): Promise => { + private fetch = async ({ jwt, reduceJSON, args, operation }: FetchOptions): Promise => { const headers: HeadersInit = { 'Content-Type': 'application/json', } @@ -27,7 +29,7 @@ export class PayloadTestSDK res.json()) @@ -41,7 +43,7 @@ export class PayloadTestSDK) => { return this.fetch({ - method: 'create', + operation: 'create', args, jwt, }) @@ -52,7 +54,7 @@ export class PayloadTestSDK) => { return this.fetch>({ - method: 'delete', + operation: 'delete', args, jwt, }) @@ -63,7 +65,18 @@ export class PayloadTestSDK) => { return this.fetch>({ - method: 'find', + operation: 'find', + args, + jwt, + }) + } + + login = async ({ + jwt, + ...args + }: LoginArgs) => { + return this.fetch({ + operation: 'login', args, jwt, }) @@ -71,7 +84,7 @@ export class PayloadTestSDK => { return this.fetch({ - method: 'sendEmail', + operation: 'sendEmail', args, jwt, }) @@ -84,7 +97,18 @@ export class PayloadTestSDK) => { return this.fetch({ - method: 'update', + operation: 'update', + args, + jwt, + }) + } + + updateGlobal = async ({ + jwt, + ...args + }: UpdateGlobalArgs) => { + return this.fetch({ + operation: 'updateGlobal', args, jwt, }) diff --git a/test/helpers/sdk/types.ts b/test/helpers/sdk/types.ts index f7317b5f30..4dbaaf7f48 100644 --- a/test/helpers/sdk/types.ts +++ b/test/helpers/sdk/types.ts @@ -25,7 +25,7 @@ export type GeneratedTypes = { export type FetchOptions = { args?: Record jwt?: string - method: 'create' | 'delete' | 'find' | 'sendEmail' | 'update' + operation: 'create' | 'delete' | 'find' | 'login' | 'sendEmail' | 'update' | 'updateGlobal' reduceJSON?: (json: any) => R } @@ -94,6 +94,14 @@ export type UpdateArgs< TSlug extends keyof TGeneratedTypes['collections'], > = UpdateByIDArgs | UpdateManyArgs +export type UpdateGlobalArgs< + TGeneratedTypes extends GeneratedTypes, + TSlug extends keyof TGeneratedTypes['globals'], +> = { + data: DeepPartial + slug: TSlug +} & BaseArgs + export type FindArgs< TGeneratedTypes extends GeneratedTypes, TSlug extends keyof TGeneratedTypes['collections'], @@ -114,6 +122,17 @@ export type FindArgs< where?: Where } & BaseArgs +export type LoginArgs< + TGeneratedTypes extends GeneratedTypes, + TSlug extends keyof TGeneratedTypes['collections'], +> = { + collection: TSlug + data: { + email: string + password: string + } +} & BaseArgs + export type DeleteArgs< TGeneratedTypes extends GeneratedTypes, TSlug extends keyof TGeneratedTypes['collections'], diff --git a/test/helpers/seed.ts b/test/helpers/seed.ts index 2dfb0fb532..8c0aaa0576 100644 --- a/test/helpers/seed.ts +++ b/test/helpers/seed.ts @@ -67,10 +67,10 @@ export async function seedDB({ /** * Restore uploads dir if it exists */ - if (uploadsDir && fs.existsSync(uploadsDirCache.path)) { + if (uploadsDir && fs.existsSync(uploadsDirCache[snapshotKey])) { // move all files from inside uploadsDirCacheFolder to uploadsDir await fs.promises - .readdir(uploadsDirCache.path, { withFileTypes: true }) + .readdir(uploadsDirCache[snapshotKey], { withFileTypes: true }) .then(async (files) => { for (const file of files) { if (file.isDirectory()) { @@ -78,12 +78,12 @@ export async function seedDB({ recursive: true, }) await fs.promises.copyFile( - path.join(uploadsDirCache.path, file.name), + path.join(uploadsDirCache[snapshotKey], file.name), path.join(uploadsDir, file.name), ) } else { await fs.promises.copyFile( - path.join(uploadsDirCache.path, file.name), + path.join(uploadsDirCache[snapshotKey], file.name), path.join(uploadsDir, file.name), ) } @@ -106,7 +106,6 @@ export async function seedDB({ if (isMongoose(_payload)) { await Promise.all([ ...collectionSlugs.map(async (collectionSlug) => { - // @ts-expect-error TODO: Type this better await _payload.db.collections[collectionSlug].createIndexes() }), ]) @@ -134,33 +133,37 @@ export async function seedDB({ * Cache uploads dir to a cache folder if uploadsDir exists */ if (!alwaysSeed && uploadsDir && fs.existsSync(uploadsDir)) { - if (!uploadsDirCache.path) { + if (!uploadsDirCache[snapshotKey]) { // Define new cache folder path to the OS temp directory (well a random folder inside it) - uploadsDirCache.path = path.join(os.tmpdir(), `payload-e2e-tests-uploads-cache`) + uploadsDirCache[snapshotKey] = path.join( + os.tmpdir(), + `${snapshotKey}`, + `payload-e2e-tests-uploads-cache`, + ) } // delete the cache folder if it exists - if (fs.existsSync(uploadsDirCache.path)) { - await fs.promises.rm(uploadsDirCache.path, { recursive: true }) + if (fs.existsSync(uploadsDirCache[snapshotKey])) { + await fs.promises.rm(uploadsDirCache[snapshotKey], { recursive: true }) } - await fs.promises.mkdir(uploadsDirCache.path, { recursive: true }) + await fs.promises.mkdir(uploadsDirCache[snapshotKey], { recursive: true }) // recursively move all files and directories from uploadsDir to uploadsDirCacheFolder await fs.promises .readdir(uploadsDir, { withFileTypes: true }) .then(async (files) => { for (const file of files) { if (file.isDirectory()) { - await fs.promises.mkdir(path.join(uploadsDirCache.path, file.name), { + await fs.promises.mkdir(path.join(uploadsDirCache[snapshotKey], file.name), { recursive: true, }) await fs.promises.copyFile( path.join(uploadsDir, file.name), - path.join(uploadsDirCache.path, file.name), + path.join(uploadsDirCache[snapshotKey], file.name), ) } else { await fs.promises.copyFile( path.join(uploadsDir, file.name), - path.join(uploadsDirCache.path, file.name), + path.join(uploadsDirCache[snapshotKey], file.name), ) } } diff --git a/test/helpers/snapshot.ts b/test/helpers/snapshot.ts index 9996611be4..e9cbc752bf 100644 --- a/test/helpers/snapshot.ts +++ b/test/helpers/snapshot.ts @@ -7,10 +7,8 @@ import { sql } from 'drizzle-orm' import { isMongoose } from './isMongoose.js' export const uploadsDirCache: { - path: null | string -} = { - path: null, -} + [key: string]: string +} = {} export const dbSnapshot = {} async function createMongooseSnapshot(collectionsObj, snapshotKey: string) { diff --git a/test/live-preview/app/live-preview/(pages)/[slug]/page.client.tsx b/test/live-preview/app/live-preview/(pages)/[slug]/page.client.tsx index 3abad9a7be..8bc88906f2 100644 --- a/test/live-preview/app/live-preview/(pages)/[slug]/page.client.tsx +++ b/test/live-preview/app/live-preview/(pages)/[slug]/page.client.tsx @@ -3,7 +3,7 @@ import { useLivePreview } from '@payloadcms/live-preview-react' import React from 'react' -import type { Page as PageType } from '../../../../test/live-preview/payload-types.js' +import type { Page as PageType } from '../../../../payload-types.js' import { PAYLOAD_SERVER_URL } from '../../_api/serverURL.js' import { Blocks } from '../../_components/Blocks/index.js' diff --git a/test/live-preview/app/live-preview/(pages)/[slug]/page.tsx b/test/live-preview/app/live-preview/(pages)/[slug]/page.tsx index 11d1bc8d18..8eee3e2bc1 100644 --- a/test/live-preview/app/live-preview/(pages)/[slug]/page.tsx +++ b/test/live-preview/app/live-preview/(pages)/[slug]/page.tsx @@ -1,7 +1,7 @@ import { notFound } from 'next/navigation.js' import React from 'react' -import type { Page } from '../../../../test/live-preview/payload-types.js' +import type { Page } from '../../../../payload-types.js' import { fetchDoc } from '../../_api/fetchDoc.js' import { fetchDocs } from '../../_api/fetchDocs.js' @@ -28,6 +28,7 @@ export default async function Page({ params: { slug = 'home' } }) { } export async function generateStaticParams() { + process.env.PAYLOAD_DROP_DATABASE = 'false' try { const pages = await fetchDocs('pages') return pages?.map(({ slug }) => slug) diff --git a/test/live-preview/app/live-preview/(pages)/posts/[slug]/page.tsx b/test/live-preview/app/live-preview/(pages)/posts/[slug]/page.tsx index c6476a1304..ea9a68c7b8 100644 --- a/test/live-preview/app/live-preview/(pages)/posts/[slug]/page.tsx +++ b/test/live-preview/app/live-preview/(pages)/posts/[slug]/page.tsx @@ -27,6 +27,7 @@ export default async function Post({ params: { slug = '' } }) { } export async function generateStaticParams() { + process.env.PAYLOAD_DROP_DATABASE = 'false' try { const posts = await fetchDocs('posts') return posts?.map(({ slug }) => slug) diff --git a/test/live-preview/e2e.spec.ts b/test/live-preview/e2e.spec.ts index 1c8371f194..02b0cb15cf 100644 --- a/test/live-preview/e2e.spec.ts +++ b/test/live-preview/e2e.spec.ts @@ -8,6 +8,7 @@ import { ensureAutoLoginAndCompilationIsDone, exactText, initPageConsoleErrorCatch, + navigateToListCellLink, saveDocAndAssert, } from '../helpers.js' import { AdminUrlUtil } from '../helpers/adminUrlUtil.js' @@ -26,25 +27,21 @@ describe('Live Preview', () => { const goToDoc = async (page: Page) => { await page.goto(url.list) - const linkToDoc = page.locator('tbody tr:first-child .cell-id a').first() - - await expect(() => expect(linkToDoc).toBeTruthy()).toPass({ timeout: POLL_TOPASS_TIMEOUT }) - const linkDocHref = await linkToDoc.getAttribute('href') - - await linkToDoc.click() - - await page.waitForURL(`**${linkDocHref}`) + await page.waitForURL(url.list) + await navigateToListCellLink(page) } const goToCollectionPreview = async (page: Page): Promise => { await goToDoc(page) await page.goto(`${page.url()}/preview`) + await page.waitForURL(`**/preview`) } const goToGlobalPreview = async (page: Page, slug: string): Promise => { const global = new AdminUrlUtil(serverURL, slug) const previewURL = `${global.global(slug)}/preview` await page.goto(previewURL) + await page.waitForURL(previewURL) } beforeAll(async ({ browser }) => { @@ -78,12 +75,9 @@ describe('Live Preview', () => { test('collection — has route', async () => { await goToDoc(page) - const url = page.url() await goToCollectionPreview(page) - await expect(() => expect(page.url()).toBe(`${url}/preview`)).toPass({ - timeout: POLL_TOPASS_TIMEOUT, - }) + await expect(page.locator('.live-preview')).toBeVisible() }) test('collection — renders iframe', async () => { @@ -127,6 +121,7 @@ describe('Live Preview', () => { test('global — has tab', async () => { const global = new AdminUrlUtil(serverURL, 'header') await page.goto(global.global('header')) + await page.waitForURL(global.global('header')) const docURL = page.url() const pathname = new URL(docURL).pathname @@ -169,17 +164,13 @@ describe('Live Preview', () => { test('properly measures iframe and displays size', async () => { await page.goto(url.create) + await page.waitForURL(url.create) await page.locator('#field-title').fill('Title 3') await page.locator('#field-slug').fill('slug-3') await saveDocAndAssert(page) - await goToCollectionPreview(page) - await expect(() => expect(page.url()).toContain('/preview')).toPass({ - timeout: POLL_TOPASS_TIMEOUT, - }) - const iframe = page.locator('iframe') // Measure the actual iframe size and compare it with the inputs rendered in the toolbar @@ -222,16 +213,13 @@ describe('Live Preview', () => { test('resizes iframe to specified breakpoint', async () => { await page.goto(url.create) + await page.waitForURL(url.create) await page.locator('#field-title').fill('Title 4') await page.locator('#field-slug').fill('slug-4') await saveDocAndAssert(page) await goToCollectionPreview(page) - await expect(() => expect(page.url()).toContain('/preview')).toPass({ - timeout: POLL_TOPASS_TIMEOUT, - }) - // Check that the breakpoint select is present const breakpointSelector = page.locator( '.live-preview-toolbar-controls__breakpoint button.popup-button', diff --git a/test/localization/config.ts b/test/localization/config.ts index 8172382cb2..4749f8b549 100644 --- a/test/localization/config.ts +++ b/test/localization/config.ts @@ -5,6 +5,7 @@ import { devUser } from '../credentials.js' import { ArrayCollection } from './collections/Array/index.js' import { NestedToArrayAndBlock } from './collections/NestedToArrayAndBlock/index.js' import { + blocksWithLocalizedSameName, defaultLocale, englishTitle, localizedPostsSlug, @@ -231,6 +232,37 @@ export default buildConfigWithDefaults({ }, ], }, + { + slug: blocksWithLocalizedSameName, + fields: [ + { + type: 'blocks', + name: 'blocks', + blocks: [ + { + slug: 'block_first', + fields: [ + { + name: 'title', + type: 'text', + localized: true, + }, + ], + }, + { + slug: 'block_second', + fields: [ + { + name: 'title', + type: 'text', + localized: true, + }, + ], + }, + ], + }, + ], + }, ], globals: [ { diff --git a/test/localization/e2e.spec.ts b/test/localization/e2e.spec.ts index 81c1bdb49c..b603d0b959 100644 --- a/test/localization/e2e.spec.ts +++ b/test/localization/e2e.spec.ts @@ -86,7 +86,7 @@ describe('Localization', () => { await fillValues({ description, title: spanishTitle }) await saveDocAndAssert(page) - await changeLocale(page, defaultLocale, true) + await changeLocale(page, defaultLocale) // Expect english title await expect(page.locator('#field-title')).toHaveValue(title) @@ -105,7 +105,7 @@ describe('Localization', () => { await saveDocAndAssert(page) // Change back to English - await changeLocale(page, defaultLocale, true) + await changeLocale(page, defaultLocale) // Localized field should not be populated await expect(page.locator('#field-title')).toBeEmpty() @@ -133,7 +133,7 @@ describe('Localization', () => { await saveDocAndAssert(page) // Change back to English - await changeLocale(page, defaultLocale, true) + await changeLocale(page, defaultLocale) // Localized field should not be populated await expect(page.locator('#field-title')).toBeEmpty() @@ -191,9 +191,9 @@ describe('Localization', () => { test('should duplicate localized checkbox correctly', async () => { await page.goto(url.create) - await page.waitForURL(`**${url.create}`) + await page.waitForURL(url.create) - //await changeLocale(page, defaultLocale, true) + await changeLocale(page, defaultLocale) await fillValues({ description, title: englishTitle }) await page.locator('#field-localizedCheckbox').click() @@ -207,7 +207,7 @@ describe('Localization', () => { await expect(page.locator('#field-localizedCheckbox')).not.toBeChecked() // duplicate doc - await changeLocale(page, defaultLocale, true) + await changeLocale(page, defaultLocale) await openDocControls(page) await page.locator('#action-duplicate').click() @@ -225,7 +225,7 @@ describe('Localization', () => { test('should duplicate even if missing some localized data', async () => { // create a localized required doc await page.goto(urlWithRequiredLocalizedFields.create) - await changeLocale(page, defaultLocale, true) + await changeLocale(page, defaultLocale) await page.locator('#field-title').fill(englishTitle) await page.locator('#field-layout .blocks-field__drawer-toggler').click() await page.locator('button[title="Text"]').click() diff --git a/test/localization/shared.ts b/test/localization/shared.ts index 3ad58dc1dc..dc7501efcc 100644 --- a/test/localization/shared.ts +++ b/test/localization/shared.ts @@ -16,3 +16,4 @@ export const relationshipLocalizedSlug = 'relationship-localized' export const withRequiredLocalizedFields = 'localized-required' export const localizedSortSlug = 'localized-sort' export const usersSlug = 'users' +export const blocksWithLocalizedSameName = 'blocks-same-name' diff --git a/test/playwright.config.ts b/test/playwright.config.ts index 09500f6eb9..3d7445ccb3 100644 --- a/test/playwright.config.ts +++ b/test/playwright.config.ts @@ -15,7 +15,7 @@ export default defineConfig({ // Look for test files in the "test" directory, relative to this configuration file testDir: '', testMatch: '*e2e.spec.ts', - timeout: 240000, // 4 minutes + timeout: 120000, use: { screenshot: 'only-on-failure', trace: 'retain-on-failure', @@ -25,4 +25,5 @@ export default defineConfig({ timeout: EXPECT_TIMEOUT, }, workers: 16, + maxFailures: process.env.CI ? 1 : undefined, }) diff --git a/test/plugin-cloud-storage/collections/Media.ts b/test/plugin-cloud-storage/collections/Media.ts index 4762fe3a7c..4d9acc2a62 100644 --- a/test/plugin-cloud-storage/collections/Media.ts +++ b/test/plugin-cloud-storage/collections/Media.ts @@ -3,7 +3,7 @@ import type { CollectionConfig } from 'payload/types' export const Media: CollectionConfig = { slug: 'media', upload: { - disableLocalStorage: true, // don't save me + disableLocalStorage: true, resizeOptions: { position: 'center', width: 200, diff --git a/test/plugin-cloud-storage/collections/MediaWithPrefix.ts b/test/plugin-cloud-storage/collections/MediaWithPrefix.ts new file mode 100644 index 0000000000..48a1659196 --- /dev/null +++ b/test/plugin-cloud-storage/collections/MediaWithPrefix.ts @@ -0,0 +1,9 @@ +import type { CollectionConfig } from 'payload/types' + +export const MediaWithPrefix: CollectionConfig = { + slug: 'media-with-prefix', + upload: { + disableLocalStorage: true, + }, + fields: [], +} diff --git a/test/plugin-cloud-storage/config.ts b/test/plugin-cloud-storage/config.ts index e43106efb1..d93f32dd18 100644 --- a/test/plugin-cloud-storage/config.ts +++ b/test/plugin-cloud-storage/config.ts @@ -1,20 +1,23 @@ import type { Adapter } from '@payloadcms/plugin-cloud-storage/types' import { cloudStorage } from '@payloadcms/plugin-cloud-storage' +import { azureBlobStorageAdapter } from '@payloadcms/plugin-cloud-storage/azure' +import { gcsAdapter } from '@payloadcms/plugin-cloud-storage/gcs' +import { s3Adapter } from '@payloadcms/plugin-cloud-storage/s3' import dotenv from 'dotenv' import path from 'path' -import { azureBlobStorageAdapter } from '../../packages/plugin-cloud-storage/src/adapters/azure/index.js' -import { gcsAdapter } from '../../packages/plugin-cloud-storage/src/adapters/gcs/index.js' -import { s3Adapter } from '../../packages/plugin-cloud-storage/src/adapters/s3/index.js' import { buildConfigWithDefaults } from '../buildConfigWithDefaults.js' import { devUser } from '../credentials.js' import { Media } from './collections/Media.js' +import { MediaWithPrefix } from './collections/MediaWithPrefix.js' import { Users } from './collections/Users.js' +import { mediaSlug, mediaWithPrefixSlug, prefix } from './shared.js' let adapter: Adapter let uploadOptions +// Load config to work with emulated services dotenv.config({ path: path.resolve(process.cwd(), './test/plugin-cloud-storage/.env.emulated'), }) @@ -84,7 +87,7 @@ if (process.env.PAYLOAD_PUBLIC_CLOUD_STORAGE_ADAPTER === 'r2') { } export default buildConfigWithDefaults({ - collections: [Media, Users], + collections: [Media, MediaWithPrefix, Users], onInit: async (payload) => { /*const client = new AWS.S3({ endpoint: process.env.S3_ENDPOINT, @@ -115,9 +118,13 @@ export default buildConfigWithDefaults({ plugins: [ cloudStorage({ collections: { - media: { + [mediaSlug]: { adapter, }, + [mediaWithPrefixSlug]: { + adapter, + prefix, + }, }, }), ], diff --git a/test/plugin-cloud-storage/int.spec.ts b/test/plugin-cloud-storage/int.spec.ts index 5149c094d4..b420c71a28 100644 --- a/test/plugin-cloud-storage/int.spec.ts +++ b/test/plugin-cloud-storage/int.spec.ts @@ -7,6 +7,7 @@ import { fileURLToPath } from 'url' import { describeIfInCIOrHasLocalstack } from '../helpers.js' import { initPayloadInt } from '../helpers/initPayloadInt.js' import configPromise from './config.js' +import { mediaSlug, mediaWithPrefixSlug, prefix } from './shared.js' const filename = fileURLToPath(import.meta.url) const dirname = path.dirname(filename) @@ -41,6 +42,7 @@ describe('@payloadcms/plugin-cloud-storage', () => { }) await createTestBucket() + await clearTestBucket() }) afterEach(async () => { @@ -49,14 +51,36 @@ describe('@payloadcms/plugin-cloud-storage', () => { it('can upload', async () => { const upload = await payload.create({ - collection: 'media', + collection: mediaSlug, data: {}, filePath: path.resolve(dirname, '../uploads/image.png'), }) expect(upload.id).toBeTruthy() - await verifyUploads(upload.id) + await verifyUploads({ + collectionSlug: mediaSlug, + uploadId: upload.id, + }) + + expect(upload.url).toEqual(`/api/${mediaSlug}/file/${upload.filename as string}`) + }) + + it('can upload with prefix', async () => { + const upload = await payload.create({ + collection: mediaWithPrefixSlug, + data: {}, + filePath: path.resolve(dirname, '../uploads/image.png'), + }) + + expect(upload.id).toBeTruthy() + + await verifyUploads({ + collectionSlug: mediaWithPrefixSlug, + uploadId: upload.id, + prefix, + }) + expect(upload.url).toEqual(`/api/${mediaWithPrefixSlug}/file/${String(upload.filename)}`) }) }) }) @@ -105,26 +129,42 @@ describe('@payloadcms/plugin-cloud-storage', () => { } } - async function verifyUploads(uploadId: number | string) { + async function verifyUploads({ + collectionSlug, + uploadId, + prefix = '', + }: { + collectionSlug: string + prefix?: string + uploadId: number | string + }) { + const uploadData = (await payload.findByID({ + collection: collectionSlug, + id: uploadId, + })) as unknown as { filename: string; sizes: Record } + + const fileKeys = Object.keys(uploadData.sizes || {}).map((key) => { + const rawFilename = uploadData.sizes[key].filename + return prefix ? `${prefix}/${rawFilename}` : rawFilename + }) + + fileKeys.push(`${prefix ? `${prefix}/` : ''}${uploadData.filename}`) try { - const uploadData = (await payload.findByID({ - collection: 'media', - id: uploadId, - })) as unknown as { filename: string; sizes: Record } - - const fileKeys = Object.keys(uploadData.sizes).map((key) => uploadData.sizes[key].filename) - fileKeys.push(uploadData.filename) - for (const key of fileKeys) { const { $metadata } = await client.send( new AWS.HeadObjectCommand({ Bucket: TEST_BUCKET, Key: key }), ) + if ($metadata.httpStatusCode !== 200) { + console.error('Error verifying uploads', key, $metadata) + throw new Error(`Error verifying uploads: ${key}, ${$metadata.httpStatusCode}`) + } + // Verify each size was properly uploaded expect($metadata.httpStatusCode).toBe(200) } } catch (error: unknown) { - console.error('Error verifying uploads:', error) + console.error('Error verifying uploads:', fileKeys, error) throw error } } diff --git a/test/plugin-cloud-storage/shared.ts b/test/plugin-cloud-storage/shared.ts new file mode 100644 index 0000000000..7d74b323ae --- /dev/null +++ b/test/plugin-cloud-storage/shared.ts @@ -0,0 +1,3 @@ +export const mediaSlug = 'media' +export const mediaWithPrefixSlug = 'media-with-prefix' +export const prefix = 'test-prefix' diff --git a/test/plugin-nested-docs/collections/Categories.ts b/test/plugin-nested-docs/collections/Categories.ts index a0c3fafe1c..e9b806801b 100644 --- a/test/plugin-nested-docs/collections/Categories.ts +++ b/test/plugin-nested-docs/collections/Categories.ts @@ -1,7 +1,7 @@ import type { CollectionConfig } from 'payload/types' -import { createBreadcrumbsField } from '../../../packages/plugin-nested-docs/src/fields/breadcrumbs.js' -import createParentField from '../../../packages/plugin-nested-docs/src/fields/parent.js' +import { createBreadcrumbsField } from '@payloadcms/plugin-nested-docs' +import { createParentField } from '@payloadcms/plugin-nested-docs' export const Categories: CollectionConfig = { access: { diff --git a/test/plugin-nested-docs/collections/Pages.ts b/test/plugin-nested-docs/collections/Pages.ts index ec458b7394..e3e713c00b 100644 --- a/test/plugin-nested-docs/collections/Pages.ts +++ b/test/plugin-nested-docs/collections/Pages.ts @@ -1,7 +1,6 @@ -// const payload = require('payload'); import type { CollectionConfig } from 'payload/types' -import populateFullTitle from './populateFullTitle.js' +import { populateFullTitle } from './populateFullTitle.js' export const Pages: CollectionConfig = { slug: 'pages', diff --git a/test/plugin-nested-docs/collections/populateFullTitle.ts b/test/plugin-nested-docs/collections/populateFullTitle.ts index f462222d0f..fcdb052b2e 100644 --- a/test/plugin-nested-docs/collections/populateFullTitle.ts +++ b/test/plugin-nested-docs/collections/populateFullTitle.ts @@ -11,7 +11,5 @@ export const generateFullTitle = (breadcrumbs: Array<{ label: string }>): string return undefined } -const populateFullTitle: FieldHook = ({ data, originalDoc }) => +export const populateFullTitle: FieldHook = ({ data, originalDoc }) => generateFullTitle(data?.breadcrumbs || originalDoc?.breadcrumbs) - -export default populateFullTitle diff --git a/test/plugin-nested-docs/config.ts b/test/plugin-nested-docs/config.ts index d024756ed3..dbef801fdf 100644 --- a/test/plugin-nested-docs/config.ts +++ b/test/plugin-nested-docs/config.ts @@ -1,4 +1,4 @@ -import nestedDocs from '@payloadcms/plugin-nested-docs' +import { nestedDocs } from '@payloadcms/plugin-nested-docs' import { buildConfigWithDefaults } from '../buildConfigWithDefaults.js' import { devUser } from '../credentials.js' diff --git a/test/plugin-nested-docs/e2e.spec.ts b/test/plugin-nested-docs/e2e.spec.ts index 433bd1c2a5..7fe9a70c56 100644 --- a/test/plugin-nested-docs/e2e.spec.ts +++ b/test/plugin-nested-docs/e2e.spec.ts @@ -4,12 +4,11 @@ import { expect, test } from '@playwright/test' import path from 'path' import { fileURLToPath } from 'url' -import type { Page as PayloadPage } from './payload-types.js' +import type { Config, Page as PayloadPage } from './payload-types.js' import { ensureAutoLoginAndCompilationIsDone, initPageConsoleErrorCatch } from '../helpers.js' import { AdminUrlUtil } from '../helpers/adminUrlUtil.js' -import { initPayloadE2E } from '../helpers/initPayloadE2E.js' - +import { initPayloadE2ENoConfig } from '../helpers/initPayloadE2ENoConfig.js' const filename = fileURLToPath(import.meta.url) const dirname = path.dirname(filename) @@ -23,7 +22,7 @@ let childId: string describe('Nested Docs Plugin', () => { beforeAll(async ({ browser }) => { - const { serverURL, payload } = await initPayloadE2E({ dirname }) + const { serverURL, payload } = await initPayloadE2ENoConfig({ dirname }) url = new AdminUrlUtil(serverURL, 'pages') const context = await browser.newContext() page = await context.newPage() diff --git a/test/plugin-nested-docs/payload-types.ts b/test/plugin-nested-docs/payload-types.ts index 4380c19f35..68fdad6ce9 100644 --- a/test/plugin-nested-docs/payload-types.ts +++ b/test/plugin-nested-docs/payload-types.ts @@ -1,9 +1,115 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * This file was automatically generated by Payload. + * DO NOT MODIFY IT BY HAND. Instead, modify your source Payload config, + * and re-run `payload generate:types` to regenerate this file. + */ + +export interface Config { + collections: { + pages: Page + categories: Category + users: User + 'payload-preferences': PayloadPreference + 'payload-migrations': PayloadMigration + } + globals: {} + locale: 'en' | 'es' | 'de' + user: User & { + collection: 'users' + } +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "pages". + */ export interface Page { id: string - parent?: string + title: string slug: string - _status?: 'draft' | 'published' - title?: string + fullTitle?: string | null + parent?: (string | null) | Page + breadcrumbs?: + | { + doc?: (string | null) | Page + url?: string | null + label?: string | null + id?: string | null + }[] + | null + updatedAt: string + createdAt: string + _status?: ('draft' | 'published') | null +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "categories". + */ +export interface Category { + id: string + name: string + categorization?: + | { + doc?: (string | null) | Category + url?: string | null + label?: string | null + test?: string | null + id?: string | null + }[] + | null + owner?: (string | null) | Category + updatedAt: string + createdAt: string +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "users". + */ +export interface User { + id: string + updatedAt: string + createdAt: string + email: string + resetPasswordToken?: string | null + resetPasswordExpiration?: string | null + salt?: string | null + hash?: string | null + loginAttempts?: number | null + lockUntil?: string | null + password?: string | null +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "payload-preferences". + */ +export interface PayloadPreference { + id: string + user: { + relationTo: 'users' + value: string | User + } + key?: string | null + value?: + | { + [k: string]: unknown + } + | unknown[] + | string + | number + | boolean + | null + updatedAt: string + createdAt: string +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "payload-migrations". + */ +export interface PayloadMigration { + id: string + name?: string | null + batch?: number | null updatedAt: string createdAt: string } diff --git a/test/plugin-seo/config.ts b/test/plugin-seo/config.ts index abfcce25b4..e59558a3a1 100644 --- a/test/plugin-seo/config.ts +++ b/test/plugin-seo/config.ts @@ -1,4 +1,6 @@ import { seo } from '@payloadcms/plugin-seo' +import { en } from '@payloadcms/translations/languages/en' +import { es } from '@payloadcms/translations/languages/es' import { buildConfigWithDefaults } from '../buildConfigWithDefaults.js' import { devUser } from '../credentials.js' @@ -10,6 +12,10 @@ import { seed } from './seed/index.js' export default buildConfigWithDefaults({ collections: [Users, Pages, Media], i18n: { + supportedLanguages: { + en, + es, + }, translations: { es: { 'plugin-seo': { @@ -35,10 +41,6 @@ export default buildConfigWithDefaults({ await seed(payload) }, plugins: [ - seo({ - collections: ['users'], - tabbedUI: true, - }), seo({ collections: ['pages'], fieldOverrides: { diff --git a/test/plugin-seo/e2e.spec.ts b/test/plugin-seo/e2e.spec.ts index 0dcda420df..553235d492 100644 --- a/test/plugin-seo/e2e.spec.ts +++ b/test/plugin-seo/e2e.spec.ts @@ -5,11 +5,11 @@ import path from 'path' import { getFileByPath } from 'payload/uploads' import { fileURLToPath } from 'url' -import type { Page as PayloadPage } from './payload-types.js' +import type { Config, Page as PayloadPage } from './payload-types.js' import { ensureAutoLoginAndCompilationIsDone, initPageConsoleErrorCatch } from '../helpers.js' import { AdminUrlUtil } from '../helpers/adminUrlUtil.js' -import { initPayloadE2E } from '../helpers/initPayloadE2E.js' +import { initPayloadE2ENoConfig } from '../helpers/initPayloadE2ENoConfig.js' import { mediaSlug } from './shared.js' const filename = fileURLToPath(import.meta.url) @@ -23,7 +23,7 @@ let id: string describe('SEO Plugin', () => { beforeAll(async ({ browser }) => { - const { serverURL, payload } = await initPayloadE2E({ dirname }) + const { serverURL, payload } = await initPayloadE2ENoConfig({ dirname }) url = new AdminUrlUtil(serverURL, 'pages') const context = await browser.newContext() diff --git a/test/runE2E.ts b/test/runE2E.ts index 81dba165e3..78da3ee816 100644 --- a/test/runE2E.ts +++ b/test/runE2E.ts @@ -53,14 +53,7 @@ if (!suiteName) { } else { // Run specific suite clearWebpackCache() - let suitePath: string - if (suiteName.includes('/')) { - // Used for fields/lexical.e2e.spec.ts which is run from CI as fields/lexical - const suiteNameSplit = suiteName.split('/') - suitePath = path.resolve(dirname, suiteNameSplit[0], suiteNameSplit[1] + '.e2e.spec.ts') - } else { - suitePath = path.resolve(dirname, suiteName, 'e2e.spec.ts') - } + const suitePath = path.resolve(dirname, suiteName, 'e2e.spec.ts').replaceAll('__', '/') executePlaywright(suitePath) } diff --git a/test/tsconfig.json b/test/tsconfig.json index 209f12718c..a5a128f02e 100644 --- a/test/tsconfig.json +++ b/test/tsconfig.json @@ -40,8 +40,9 @@ "@payloadcms/ui/scss": ["../packages/ui/src/scss.scss"], "@payloadcms/ui/scss/app.scss": ["../packages/ui/src/scss/app.scss"], "payload/types": ["../packages/payload/src/exports/types/index.ts"], - "@payloadcms/next/*": ["../packages/next/src/*"], - "@payloadcms/next": ["../packages/next/src/exports/*"], + "@payloadcms/next/*": [ + "./packages/next/src/exports/*.ts" + ], "@payload-config": ["./_community/config.ts"] } }, diff --git a/test/uploads/2mb.jpg b/test/uploads/2mb.jpg new file mode 100644 index 0000000000..3803d240dd Binary files /dev/null and b/test/uploads/2mb.jpg differ diff --git a/test/uploads/config.ts b/test/uploads/config.ts index 20321c1d22..17e2aeb578 100644 --- a/test/uploads/config.ts +++ b/test/uploads/config.ts @@ -452,6 +452,13 @@ export default buildConfigWithDefaults({ }, }, ], + upload: { + // debug: true, + abortOnLimit: true, + limits: { + fileSize: 2_000_000, // 2MB + }, + }, onInit: async (payload) => { const uploadsDir = path.resolve(dirname, './media') removeFiles(path.normalize(uploadsDir)) diff --git a/test/uploads/createStreamableFile.ts b/test/uploads/createStreamableFile.ts new file mode 100644 index 0000000000..496eb25fd9 --- /dev/null +++ b/test/uploads/createStreamableFile.ts @@ -0,0 +1,37 @@ +import { File } from 'buffer' +import NodeFormData from 'form-data' +import fs from 'fs' +import { open } from 'node:fs/promises' +import { basename } from 'node:path' + +import { getMimeType } from './getMimeType.js' + +export async function createStreamableFile( + path: string, +): Promise<{ file: File; handle: fs.promises.FileHandle }> { + const name = basename(path) + const handle = await open(path) + + const { type } = getMimeType(path) + + const file = new File([], name, { type }) + file.stream = () => handle.readableWebStream() + + const formDataNode = new NodeFormData() + formDataNode.append('file', fs.createReadStream(path)) + + const contentLength = await new Promise((resolve, reject) => { + formDataNode.getLength((err, length) => { + if (err) { + reject(err) + } else { + resolve(length) + } + }) + }) + + // Set correct size otherwise, fetch will encounter UND_ERR_REQ_CONTENT_LENGTH_MISMATCH + Object.defineProperty(file, 'size', { get: () => contentLength }) + + return { file, handle } +} diff --git a/test/uploads/e2e.spec.ts b/test/uploads/e2e.spec.ts index 0597406e7b..3a451d6daf 100644 --- a/test/uploads/e2e.spec.ts +++ b/test/uploads/e2e.spec.ts @@ -6,15 +6,17 @@ import path from 'path' import { wait } from 'payload/utilities' import { fileURLToPath } from 'url' -import type { Media } from './payload-types.js' +import type { PayloadTestSDK } from '../helpers/sdk/index.js' +import type { Config, Media } from './payload-types.js' import { ensureAutoLoginAndCompilationIsDone, initPageConsoleErrorCatch, + openDocDrawer, saveDocAndAssert, } from '../helpers.js' import { AdminUrlUtil } from '../helpers/adminUrlUtil.js' -import { initPayloadE2E } from '../helpers/initPayloadE2E.js' +import { initPayloadE2ENoConfig } from '../helpers/initPayloadE2ENoConfig.js' import { RESTClient } from '../helpers/rest.js' import { adminThumbnailFunctionSlug, @@ -28,7 +30,7 @@ const dirname = path.dirname(filename) const { beforeAll, describe } = test -let payload: Payload +let payload: PayloadTestSDK let client: RESTClient let serverURL: string let mediaURL: AdminUrlUtil @@ -43,7 +45,7 @@ describe('uploads', () => { let audioDoc: Media beforeAll(async ({ browser }) => { - ;({ payload, serverURL } = await initPayloadE2E({ dirname })) + ;({ payload, serverURL } = await initPayloadE2ENoConfig({ dirname })) client = new RESTClient(null, { defaultSlug: 'users', serverURL }) await client.login() @@ -203,7 +205,7 @@ describe('uploads', () => { await page.locator('.field-type:nth-of-type(2) .icon--x').click() // choose from existing - await page.locator('.list-drawer__toggler').click() + await openDocDrawer(page, '.list-drawer__toggler') await expect(page.locator('.cell-title')).toContainText('draft') }) @@ -213,14 +215,18 @@ describe('uploads', () => { await page.waitForURL(audioURL.edit(audioDoc.id)) // remove the selection and open the list drawer + await wait(500) // flake workaround await page.locator('.file-details__remove').click() - await page.locator('.upload__toggler.list-drawer__toggler').click() + + await openDocDrawer(page, '.upload__toggler.list-drawer__toggler') + const listDrawer = page.locator('[id^=list-drawer_1_]') await expect(listDrawer).toBeVisible() - // upload an image and try to select it - await listDrawer.locator('button.list-drawer__create-new-button.doc-drawer__toggler').click() + await openDocDrawer(page, 'button.list-drawer__create-new-button.doc-drawer__toggler') await expect(page.locator('[id^=doc-drawer_media_2_]')).toBeVisible() + + // upload an image and try to select it await page .locator('[id^=doc-drawer_media_2_] .file-field__upload input[type="file"]') .setInputFiles(path.resolve(dirname, './image.png')) @@ -235,6 +241,17 @@ describe('uploads', () => { ) }) + test('should throw error when file is larger than the limit and abortOnLimit is true', async () => { + await page.goto(mediaURL.create) + await page.setInputFiles('input[type="file"]', path.resolve(dirname, './2mb.jpg')) + + await wait(500) // TODO: Fix this + await page.click('#action-save', { delay: 100 }) + await expect(page.locator('.Toastify .Toastify__toast--error')).toContainText( + 'File size limit has been reached', + ) + }) + test('Should render adminThumbnail when using a function', async () => { await page.goto(adminThumbnailFunctionURL.list) await page.waitForURL(adminThumbnailFunctionURL.list) diff --git a/test/uploads/getMimeType.ts b/test/uploads/getMimeType.ts new file mode 100644 index 0000000000..908418d13e --- /dev/null +++ b/test/uploads/getMimeType.ts @@ -0,0 +1,32 @@ +import path from 'path' + +export const getMimeType = ( + filePath: string, +): { + filename: string + type: string +} => { + const ext = path.extname(filePath).slice(1) + let type: string + switch (ext) { + case 'png': + type = 'image/png' + break + case 'jpg': + type = 'image/jpeg' + break + case 'jpeg': + type = 'image/jpeg' + break + case 'svg': + type = 'image/svg+xml' + break + default: + type = 'image/png' + } + + return { + filename: path.basename(filePath), + type, + } +} diff --git a/test/uploads/int.spec.ts b/test/uploads/int.spec.ts index 4d61f6a288..189de748b3 100644 --- a/test/uploads/int.spec.ts +++ b/test/uploads/int.spec.ts @@ -1,7 +1,5 @@ import type { Payload } from 'payload' -import { File as FileBuffer } from 'buffer' -import NodeFormData from 'form-data' import fs from 'fs' import path from 'path' import { getFileByPath } from 'payload/uploads' @@ -13,6 +11,7 @@ import type { Enlarge, Media } from './payload-types.js' import { initPayloadInt } from '../helpers/initPayloadInt.js' import configPromise from './config.js' +import { createStreamableFile } from './createStreamableFile.js' import { enlargeSlug, mediaSlug, @@ -24,54 +23,6 @@ import { const filename = fileURLToPath(import.meta.url) const dirname = path.dirname(filename) - -const getMimeType = ( - filePath: string, -): { - filename: string - type: string -} => { - const ext = path.extname(filePath).slice(1) - let type: string - switch (ext) { - case 'png': - type = 'image/png' - break - case 'jpg': - type = 'image/jpeg' - break - case 'jpeg': - type = 'image/jpeg' - break - case 'svg': - type = 'image/svg+xml' - break - default: - type = 'image/png' - } - - return { - filename: path.basename(filePath), - type, - } -} -const bufferToFileBlob = async (filePath: string): Promise => - new Promise((resolve, reject) => { - fs.readFile(filePath, (err, data) => { - if (err) { - console.error(`Error reading file at ${filePath}:`, err) - reject(err) - return - } - - const { filename, type } = getMimeType(filePath) - - // Convert type FileBuffer > unknown > File - // The File type expects webkitRelativePath, we don't have that - resolve(new FileBuffer([data], filename, { type }) as unknown as File) - }) - }) - const stat = promisify(fs.stat) let restClient: NextRESTClient @@ -90,20 +41,22 @@ describe('Collections - Uploads', () => { } }) - describe('REST', () => { + describe('REST API', () => { describe('create', () => { it('creates from form data given a png', async () => { const formData = new FormData() const filePath = path.join(dirname, './image.png') - - formData.append('file', await bufferToFileBlob(filePath)) + const { file, handle } = await createStreamableFile(filePath) + formData.append('file', file) const response = await restClient.POST(`/${mediaSlug}`, { body: formData, - file: true, + file, }) const { doc } = await response.json() + await handle.close() + expect(response.status).toBe(201) const { sizes } = doc @@ -130,16 +83,20 @@ describe('Collections - Uploads', () => { }) it('creates from form data given an svg', async () => { - const formData = new FormData() const filePath = path.join(dirname, './image.svg') - formData.append('file', await bufferToFileBlob(filePath)) + const formData = new FormData() + const { file, handle } = await createStreamableFile(filePath) + formData.append('file', file) const response = await restClient.POST(`/${mediaSlug}`, { body: formData, - file: true, + file, }) + const { doc } = await response.json() + await handle.close() + expect(response.status).toBe(201) // Check for files @@ -151,100 +108,426 @@ describe('Collections - Uploads', () => { expect(doc.width).toBeDefined() expect(doc.height).toBeDefined() }) - }) - it('should have valid image url', async () => { - const formData = new FormData() - const fileBlob = await bufferToFileBlob(path.join(dirname, './image.svg')) - formData.append('file', fileBlob) + it('should have valid image url', async () => { + const formData = new FormData() + const filePath = path.join(dirname, './image.svg') + const { file, handle } = await createStreamableFile(filePath) + formData.append('file', file) - const response = await restClient.POST(`/${mediaSlug}`, { - body: formData, - file: true, + const response = await restClient.POST(`/${mediaSlug}`, { + body: formData, + file, + }) + const { doc } = await response.json() + + await handle.close() + + expect(response.status).toBe(201) + const expectedPath = path.join(dirname, './media') + expect(await fileExists(path.join(expectedPath, doc.filename))).toBe(true) + + expect(doc.url).not.toContain('undefined') }) - const { doc } = await response.json() - expect(response.status).toBe(201) - const expectedPath = path.join(dirname, './media') - expect(await fileExists(path.join(expectedPath, doc.filename))).toBe(true) + it('creates images that do not require all sizes', async () => { + const formData = new FormData() + const filePath = path.join(dirname, './small.png') + const { file, handle } = await createStreamableFile(filePath) + formData.append('file', file) - expect(doc.url).not.toContain('undefined') - }) + const response = await restClient.POST(`/${mediaSlug}`, { + body: formData, + file, + }) + const { doc } = await response.json() - it('creates images that do not require all sizes', async () => { - const formData = new FormData() - const fileBlob = await bufferToFileBlob(path.join(dirname, './small.png')) - formData.append('file', fileBlob) + await handle.close() - const response = await restClient.POST(`/${mediaSlug}`, { - body: formData, - file: true, + expect(response.status).toBe(201) + + const expectedPath = path.join(dirname, './media') + + // Check for files + expect(await fileExists(path.join(expectedPath, doc.filename))).toBe(true) + expect(await fileExists(path.join(expectedPath, 'small-640x480.png'))).toBe(false) + expect(await fileExists(path.join(expectedPath, doc.sizes.icon.filename))).toBe(true) + + // Check api response + expect(doc.sizes.tablet.filename).toBeNull() + expect(doc.sizes.icon.filename).toBeDefined() }) - const { doc } = await response.json() - expect(response.status).toBe(201) + it('creates images from a different format', async () => { + const formData = new FormData() + const filePath = path.join(dirname, './image.jpg') + const { file, handle } = await createStreamableFile(filePath) + formData.append('file', file) - const expectedPath = path.join(dirname, './media') + const response = await restClient.POST(`/${mediaSlug}`, { + body: formData, + file, + }) + const { doc } = await response.json() - // Check for files - expect(await fileExists(path.join(expectedPath, doc.filename))).toBe(true) - expect(await fileExists(path.join(expectedPath, 'small-640x480.png'))).toBe(false) - expect(await fileExists(path.join(expectedPath, doc.sizes.icon.filename))).toBe(true) + await handle.close() - // Check api response - expect(doc.sizes.tablet.filename).toBeNull() - expect(doc.sizes.icon.filename).toBeDefined() - }) + expect(response.status).toBe(201) - it('creates images from a different format', async () => { - const formData = new FormData() - const fileBlob = await bufferToFileBlob(path.join(dirname, './image.jpg')) - formData.append('file', fileBlob) + const expectedPath = path.join(dirname, './media') - const response = await restClient.POST(`/${mediaSlug}`, { - body: formData, - file: true, + // Check for files + expect(await fileExists(path.join(expectedPath, doc.filename))).toBe(true) + expect(await fileExists(path.join(expectedPath, doc.sizes.tablet.filename))).toBe(true) + + // Check api response + expect(doc.filename).toContain('.png') + expect(doc.mimeType).toEqual('image/png') + expect(doc.sizes.maintainedAspectRatio.filename).toContain('.png') + expect(doc.sizes.maintainedAspectRatio.mimeType).toContain('image/png') + expect(doc.sizes.differentFormatFromMainImage.filename).toContain('.jpg') + expect(doc.sizes.differentFormatFromMainImage.mimeType).toContain('image/jpeg') }) - const { doc } = await response.json() - expect(response.status).toBe(201) + it('creates media without storing a file', async () => { + const formData = new FormData() + const filePath = path.join(dirname, './unstored.png') + const { file, handle } = await createStreamableFile(filePath) + formData.append('file', file) - const expectedPath = path.join(dirname, './media') + // unstored media + const response = await restClient.POST(`/${unstoredMediaSlug}`, { + body: formData, + file, + }) + const { doc } = await response.json() - // Check for files - expect(await fileExists(path.join(expectedPath, doc.filename))).toBe(true) - expect(await fileExists(path.join(expectedPath, doc.sizes.tablet.filename))).toBe(true) + await handle.close() - // Check api response - expect(doc.filename).toContain('.png') - expect(doc.mimeType).toEqual('image/png') - expect(doc.sizes.maintainedAspectRatio.filename).toContain('.png') - expect(doc.sizes.maintainedAspectRatio.mimeType).toContain('image/png') - expect(doc.sizes.differentFormatFromMainImage.filename).toContain('.jpg') - expect(doc.sizes.differentFormatFromMainImage.mimeType).toContain('image/jpeg') - }) + expect(response.status).toBe(201) - it('creates media without storing a file', async () => { - const formData = new FormData() - const fileBlob = await bufferToFileBlob(path.join(dirname, './unstored.png')) - formData.append('file', fileBlob) + // Check for files + expect(await fileExists(path.join(dirname, './media', doc.filename))).toBe(false) - // unstored media - const response = await restClient.POST(`/${unstoredMediaSlug}`, { - body: formData, - file: true, + // Check api response + expect(doc.filename).toBeDefined() }) - const { doc } = await response.json() - - expect(response.status).toBe(201) - - // Check for files - expect(await fileExists(path.join(dirname, './media', doc.filename))).toBe(false) - - // Check api response - expect(doc.filename).toBeDefined() }) + describe('update', () => { + it('should replace image and delete old files - by ID', async () => { + const filePath = path.resolve(dirname, './image.png') + const file = await getFileByPath(filePath) + file.name = 'renamed.png' + + const mediaDoc = (await payload.create({ + collection: mediaSlug, + data: {}, + file, + })) as unknown as Media + + const formData = new FormData() + const filePath2 = path.resolve(dirname, './small.png') + const { file: file2, handle } = await createStreamableFile(filePath2) + formData.append('file', file2) + + const response = await restClient.PATCH(`/${mediaSlug}/${mediaDoc.id}`, { + body: formData, + file: file2, + }) + + await handle.close() + + expect(response.status).toBe(200) + + const expectedPath = path.join(dirname, './media') + + // Check that previously existing files were removed + expect(await fileExists(path.join(expectedPath, mediaDoc.filename))).toBe(false) + expect(await fileExists(path.join(expectedPath, mediaDoc.sizes.icon.filename))).toBe(false) + }) + + it('should replace image and delete old files - where query', async () => { + const filePath = path.resolve(dirname, './image.png') + const file = await getFileByPath(filePath) + file.name = 'renamed.png' + + const mediaDoc = (await payload.create({ + collection: mediaSlug, + data: {}, + file, + })) as unknown as Media + + const formData = new FormData() + const filePath2 = path.resolve(dirname, './small.png') + const { file: file2, handle } = await createStreamableFile(filePath2) + formData.append('file', file2) + + const response = await restClient.PATCH(`/${mediaSlug}`, { + body: formData, + file: file2, + query: { + where: { + id: { + equals: mediaDoc.id, + }, + }, + }, + }) + + await handle.close() + + expect(response.status).toBe(200) + + const expectedPath = path.join(dirname, './media') + + // Check that previously existing files were removed + expect(await fileExists(path.join(expectedPath, mediaDoc.filename))).toBe(false) + expect(await fileExists(path.join(expectedPath, mediaDoc.sizes.icon.filename))).toBe(false) + }) + }) + + describe('delete', () => { + it('should remove related files when deleting by ID', async () => { + const formData = new FormData() + const filePath = path.join(dirname, './image.png') + const { file, handle } = await createStreamableFile(filePath) + + formData.append('file', file) + + const { doc } = await restClient + .POST(`/${mediaSlug}`, { + body: formData, + file, + }) + .then((res) => res.json()) + + await handle.close() + + const response2 = await restClient.DELETE(`/${mediaSlug}/${doc.id}`) + expect(response2.status).toBe(200) + + expect(await fileExists(path.join(dirname, doc.filename))).toBe(false) + }) + + it('should remove all related files when deleting with where query', async () => { + const formData = new FormData() + const filePath = path.join(dirname, './image.png') + const { file, handle } = await createStreamableFile(filePath) + formData.append('file', file) + + const { doc } = await restClient + .POST(`/${mediaSlug}`, { + body: formData, + file, + }) + .then((res) => res.json()) + + await handle.close() + + const { errors } = await restClient + .DELETE(`/${mediaSlug}`, { + query: { + where: { + id: { + equals: doc.id, + }, + }, + }, + }) + .then((res) => res.json()) + + expect(errors).toHaveLength(0) + + expect(await fileExists(path.join(dirname, doc.filename))).toBe(false) + }) + }) + }) + + describe('Local API', () => { + describe('update', () => { + it('should remove existing media on re-upload - by ID', async () => { + // Create temp file + const filePath = path.resolve(dirname, './temp.png') + const file = await getFileByPath(filePath) + file.name = 'temp.png' + + const mediaDoc = (await payload.create({ + collection: mediaSlug, + data: {}, + file, + })) as unknown as Media + + const expectedPath = path.join(dirname, './media') + + // Check that the temp file was created + expect(await fileExists(path.join(expectedPath, mediaDoc.filename))).toBe(true) + + // Replace the temp file with a new one + const newFilePath = path.resolve(dirname, './temp-renamed.png') + const newFile = await getFileByPath(newFilePath) + newFile.name = 'temp-renamed.png' + + const updatedMediaDoc = (await payload.update({ + collection: mediaSlug, + id: mediaDoc.id, + file: newFile, + data: {}, + })) as unknown as Media + + // Check that the replacement file was created and the old one was removed + expect(await fileExists(path.join(expectedPath, updatedMediaDoc.filename))).toBe(true) + expect(await fileExists(path.join(expectedPath, mediaDoc.filename))).toBe(false) + }) + + it('should remove existing media on re-upload - where query', async () => { + // Create temp file + const filePath = path.resolve(dirname, './temp.png') + const file = await getFileByPath(filePath) + file.name = 'temp.png' + + const mediaDoc = (await payload.create({ + collection: mediaSlug, + data: {}, + file, + })) as unknown as Media + + const expectedPath = path.join(dirname, './media') + + // Check that the temp file was created + expect(await fileExists(path.join(expectedPath, mediaDoc.filename))).toBe(true) + + // Replace the temp file with a new one + const newFilePath = path.resolve(dirname, './temp-renamed.png') + const newFile = await getFileByPath(newFilePath) + newFile.name = 'temp-renamed-second.png' + + const updatedMediaDoc = (await payload.update({ + collection: mediaSlug, + where: { + id: { equals: mediaDoc.id }, + }, + file: newFile, + data: {}, + })) as unknown as { docs: Media[] } + + // Check that the replacement file was created and the old one was removed + expect(updatedMediaDoc.docs[0].filename).toEqual(newFile.name) + expect(await fileExists(path.join(expectedPath, updatedMediaDoc.docs[0].filename))).toBe( + true, + ) + expect(await fileExists(path.join(expectedPath, mediaDoc.filename))).toBe(false) + }) + + it('should remove sizes that do not pertain to the new image - by ID', async () => { + const filePath = path.resolve(dirname, './image.png') + const file = await getFileByPath(filePath) + const small = await getFileByPath(path.resolve(dirname, './small.png')) + + const { id } = await payload.create({ + collection: mediaSlug, + data: {}, + file, + }) + + const doc = (await payload.update({ + collection: mediaSlug, + id, + data: {}, + file: small, + })) as unknown as Media + + expect(doc.sizes.icon).toBeDefined() + expect(doc.sizes.tablet.width).toBeNull() + }) + + it('should remove sizes that do not pertain to the new image - where query', async () => { + const filePath = path.resolve(dirname, './image.png') + const file = await getFileByPath(filePath) + const small = await getFileByPath(path.resolve(dirname, './small.png')) + + const { id } = await payload.create({ + collection: mediaSlug, + data: {}, + file, + }) + + const doc = (await payload.update({ + collection: mediaSlug, + where: { + id: { equals: id }, + }, + data: {}, + file: small, + })) as unknown as { docs: Media[] } + + expect(doc.docs[0].sizes.icon).toBeDefined() + expect(doc.docs[0].sizes.tablet.width).toBeNull() + }) + + it('should allow removing file from upload relationship field - by ID', async () => { + const filePath = path.resolve(dirname, './image.png') + const file = await getFileByPath(filePath) + file.name = 'renamed.png' + + const { id } = await payload.create({ + collection: mediaSlug, + data: {}, + file, + }) + + const related = await payload.create({ + collection: relationSlug, + data: { + image: id, + }, + }) + + const doc = await payload.update({ + collection: relationSlug, + id: related.id, + data: { + image: null, + }, + }) + + expect(doc.image).toBeFalsy() + }) + + it('should allow update removing a relationship - where query', async () => { + const filePath = path.resolve(dirname, './image.png') + const file = await getFileByPath(filePath) + file.name = 'renamed.png' + + const { id } = await payload.create({ + collection: mediaSlug, + data: {}, + file, + }) + + const related = await payload.create({ + collection: relationSlug, + data: { + image: id, + }, + }) + + const doc = await payload.update({ + collection: relationSlug, + where: { + id: { equals: related.id }, + }, + data: { + image: null, + }, + }) + + expect(doc.docs[0].image).toBeFalsy() + }) + }) + }) + + describe('Image Manipulation', () => { it('should enlarge images if resize options `withoutEnlargement` is set to false', async () => { const small = await getFileByPath(path.resolve(dirname, './small.png')) @@ -318,8 +601,6 @@ describe('Collections - Uploads', () => { }) it('should not reduce images if resize options `withoutReduction` is set to true', async () => { - const formData = new NodeFormData() - formData.append('file', fs.createReadStream(path.join(dirname, './small.png'))) const small = await getFileByPath(path.resolve(dirname, './small.png')) const result = await payload.create({ @@ -359,294 +640,7 @@ describe('Collections - Uploads', () => { }) }) - it('update', async () => { - // Create image - const filePath = path.resolve(dirname, './image.png') - const file = await getFileByPath(filePath) - file.name = 'renamed.png' - - const mediaDoc = (await payload.create({ - collection: mediaSlug, - data: {}, - file, - })) as unknown as Media - - const formData = new FormData() - formData.append('file', await bufferToFileBlob(path.join(dirname, './small.png'))) - - const response = await restClient.PATCH(`/${mediaSlug}/${mediaDoc.id}`, { - body: formData, - file: true, - }) - - expect(response.status).toBe(200) - - const expectedPath = path.join(dirname, './media') - - // Check that previously existing files were removed - expect(await fileExists(path.join(expectedPath, mediaDoc.filename))).toBe(false) - expect(await fileExists(path.join(expectedPath, mediaDoc.sizes.icon.filename))).toBe(false) - }) - - it('update - update many', async () => { - // Create image - const filePath = path.resolve(dirname, './image.png') - const file = await getFileByPath(filePath) - file.name = 'renamed.png' - - const mediaDoc = (await payload.create({ - collection: mediaSlug, - data: {}, - file, - })) as unknown as Media - - const formData = new FormData() - formData.append('file', await bufferToFileBlob(path.join(dirname, './small.png'))) - - const response = await restClient.PATCH(`/${mediaSlug}`, { - body: formData, - file: true, - query: { - where: { - id: { - equals: mediaDoc.id, - }, - }, - }, - }) - - expect(response.status).toBe(200) - - const expectedPath = path.join(dirname, './media') - - // Check that previously existing files were removed - expect(await fileExists(path.join(expectedPath, mediaDoc.filename))).toBe(false) - expect(await fileExists(path.join(expectedPath, mediaDoc.sizes.icon.filename))).toBe(false) - }) - - it('should remove existing media on re-upload', async () => { - // Create temp file - const filePath = path.resolve(dirname, './temp.png') - const file = await getFileByPath(filePath) - file.name = 'temp.png' - - const mediaDoc = (await payload.create({ - collection: mediaSlug, - data: {}, - file, - })) as unknown as Media - - const expectedPath = path.join(dirname, './media') - - // Check that the temp file was created - expect(await fileExists(path.join(expectedPath, mediaDoc.filename))).toBe(true) - - // Replace the temp file with a new one - const newFilePath = path.resolve(dirname, './temp-renamed.png') - const newFile = await getFileByPath(newFilePath) - newFile.name = 'temp-renamed.png' - - const updatedMediaDoc = (await payload.update({ - collection: mediaSlug, - id: mediaDoc.id, - file: newFile, - data: {}, - })) as unknown as Media - - // Check that the replacement file was created and the old one was removed - expect(await fileExists(path.join(expectedPath, updatedMediaDoc.filename))).toBe(true) - expect(await fileExists(path.join(expectedPath, mediaDoc.filename))).toBe(false) - }) - - it('should remove existing media on re-upload - update many', async () => { - // Create temp file - const filePath = path.resolve(dirname, './temp.png') - const file = await getFileByPath(filePath) - file.name = 'temp.png' - - const mediaDoc = (await payload.create({ - collection: mediaSlug, - data: {}, - file, - })) as unknown as Media - - const expectedPath = path.join(dirname, './media') - - // Check that the temp file was created - expect(await fileExists(path.join(expectedPath, mediaDoc.filename))).toBe(true) - - // Replace the temp file with a new one - const newFilePath = path.resolve(dirname, './temp-renamed.png') - const newFile = await getFileByPath(newFilePath) - newFile.name = 'temp-renamed-second.png' - - const updatedMediaDoc = (await payload.update({ - collection: mediaSlug, - where: { - id: { equals: mediaDoc.id }, - }, - file: newFile, - data: {}, - })) as unknown as { docs: Media[] } - - // Check that the replacement file was created and the old one was removed - expect(updatedMediaDoc.docs[0].filename).toEqual(newFile.name) - expect(await fileExists(path.join(expectedPath, updatedMediaDoc.docs[0].filename))).toBe(true) - expect(await fileExists(path.join(expectedPath, mediaDoc.filename))).toBe(false) - }) - - it('should remove extra sizes on update', async () => { - const filePath = path.resolve(dirname, './image.png') - const file = await getFileByPath(filePath) - const small = await getFileByPath(path.resolve(dirname, './small.png')) - - const { id } = await payload.create({ - collection: mediaSlug, - data: {}, - file, - }) - - const doc = (await payload.update({ - collection: mediaSlug, - id, - data: {}, - file: small, - })) as unknown as Media - - expect(doc.sizes.icon).toBeDefined() - expect(doc.sizes.tablet.width).toBeNull() - }) - - it('should remove extra sizes on update - update many', async () => { - const filePath = path.resolve(dirname, './image.png') - const file = await getFileByPath(filePath) - const small = await getFileByPath(path.resolve(dirname, './small.png')) - - const { id } = await payload.create({ - collection: mediaSlug, - data: {}, - file, - }) - - const doc = (await payload.update({ - collection: mediaSlug, - where: { - id: { equals: id }, - }, - data: {}, - file: small, - })) as unknown as { docs: Media[] } - - expect(doc.docs[0].sizes.icon).toBeDefined() - expect(doc.docs[0].sizes.tablet.width).toBeNull() - }) - - it('should allow update removing a relationship', async () => { - const filePath = path.resolve(dirname, './image.png') - const file = await getFileByPath(filePath) - file.name = 'renamed.png' - - const { id } = await payload.create({ - collection: mediaSlug, - data: {}, - file, - }) - - const related = await payload.create({ - collection: relationSlug, - data: { - image: id, - }, - }) - - const doc = await payload.update({ - collection: relationSlug, - id: related.id, - data: { - image: null, - }, - }) - - expect(doc.image).toBeFalsy() - }) - - it('should allow update removing a relationship - update many', async () => { - const filePath = path.resolve(dirname, './image.png') - const file = await getFileByPath(filePath) - file.name = 'renamed.png' - - const { id } = await payload.create({ - collection: mediaSlug, - data: {}, - file, - }) - - const related = await payload.create({ - collection: relationSlug, - data: { - image: id, - }, - }) - - const doc = await payload.update({ - collection: relationSlug, - where: { - id: { equals: related.id }, - }, - data: { - image: null, - }, - }) - - expect(doc.docs[0].image).toBeFalsy() - }) - - it('delete', async () => { - const formData = new FormData() - formData.append('file', await bufferToFileBlob(path.join(dirname, './image.png'))) - - const { doc } = await restClient - .POST(`/${mediaSlug}`, { - body: formData, - file: true, - }) - .then((res) => res.json()) - - const response2 = await restClient.DELETE(`/${mediaSlug}/${doc.id}`) - expect(response2.status).toBe(200) - - expect(await fileExists(path.join(dirname, doc.filename))).toBe(false) - }) - - it('delete - update many', async () => { - const formData = new FormData() - formData.append('file', await bufferToFileBlob(path.join(dirname, './image.png'))) - - const { doc } = await restClient - .POST(`/${mediaSlug}`, { - body: formData, - file: true, - }) - .then((res) => res.json()) - - const { errors } = await restClient - .DELETE(`/${mediaSlug}`, { - query: { - where: { - id: { - equals: doc.id, - }, - }, - }, - }) - .then((res) => res.json()) - - expect(errors).toHaveLength(0) - - expect(await fileExists(path.join(dirname, doc.filename))).toBe(false) - }) - - describe('filesRequiredOnCreate', () => { + describe('Required Files', () => { // eslint-disable-next-line @typescript-eslint/require-await it('should allow file to be optional if filesRequiredOnCreate is false', async () => { const successfulCreate = await payload.create({ diff --git a/tsconfig.json b/tsconfig.json index f4411fe8cc..046160a5de 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -37,7 +37,7 @@ ], "paths": { "@payload-config": [ - "./test/_community/config.ts" + "./test/access-control/config.ts" ], "@payloadcms/live-preview": [ "./packages/live-preview/src" @@ -82,7 +82,7 @@ "./packages/ui/src/scss/app.scss" ], "@payloadcms/next/*": [ - "./packages/next/src/*" + "./packages/next/src/exports/*.ts" ], "@payloadcms/next": [ "./packages/next/src/exports/*" @@ -161,4 +161,4 @@ ".next/types/**/*.ts", "scripts/**/*.ts" ] -} +} \ No newline at end of file