diff --git a/.claude/workflows/localize.js b/.claude/workflows/localize.js new file mode 100644 index 0000000000..2a792c1798 --- /dev/null +++ b/.claude/workflows/localize.js @@ -0,0 +1,920 @@ +export const meta = { + name: "localize", + description: + "Localization pipeline for any target — file, folder, or sub-app: Scout → Extract+Wire → Composer → Verifier", + phases: [ + { + title: "Discovery", + detail: + "Transitive import scan, namespace inference, dedup map, 3rd-party audit, batch assignment", + }, + { + title: "Extract & Wire", + detail: + "Extract strings and replace hardcoded strings with t() calls in one pass per batch", + }, + { + title: "Locale Files", + detail: "Write en-US JSON + copy to 5 locales for manual translation", + }, + { + title: "Verify", + detail: "tsc, JSON validity, key parity, broken-key grep", + }, + ], +}; + +// ─── Args ───────────────────────────────────────────────────────────────────── +// args: { target: string | string[], namespace?: string, lazyLoadRoot?: string } +// namespace is OPTIONAL. If omitted, the Scout infers it from the target path(s) +// using the same home-namespace rule as the rest of the pipeline: +// src/apps//** → flat camelCase of (e.g. "active-preview" → "activePreview") +// src/shell/** → "shell" +// src/utility/** → "common" +// For ambiguous/mixed targets, the Scout uses judgment and reports its reasoning. +// If provided, namespace MUST be flat camelCase — e.g. "activePreview", NOT "active-preview". +// e.g. { target: "src/apps/active-preview", lazyLoadRoot: "src/apps/active-preview/Preview.js" } (namespace inferred) +// e.g. { namespace: "schema", target: "src/apps/schema/src", lazyLoadRoot: "src/apps/schema/src/app/index.tsx" } + +const resolvedArgs = typeof args === "string" ? JSON.parse(args) : args; + +if (!resolvedArgs || !resolvedArgs.target) { + throw new Error( + "args must include { target: string | string[], namespace?: string, lazyLoadRoot?: string }" + ); +} + +if (resolvedArgs.namespace && /[^a-zA-Z0-9]/.test(resolvedArgs.namespace)) { + throw new Error( + `namespace must be flat camelCase (no hyphens, dots, or underscores). Got: "${resolvedArgs.namespace}"` + ); +} + +const providedNs = resolvedArgs.namespace || null; +const targetPaths = Array.isArray(resolvedArgs.target) + ? resolvedArgs.target + : [resolvedArgs.target]; +const targetDisplay = targetPaths.join(", "); +const lazyLoadRoot = resolvedArgs.lazyLoadRoot || null; +const NON_EN_LOCALES = ["es-ES", "hi-IN", "zh-CN", "ru-RU", "nl-NL"]; +const ALL_LOCALES = ["en-US", "es-ES", "hi-IN", "zh-CN", "ru-RU", "nl-NL"]; + +// Maps each non-EN locale to its required CLDR plural forms. +// Value is the en-US form to use as the English placeholder for that form. +const PLURAL_SCAFFOLD = { + "es-ES": { _one: "_one", _many: "_other", _other: "_other" }, + "hi-IN": { _one: "_one", _other: "_other" }, + "zh-CN": { _other: "_other" }, + "ru-RU": { _one: "_one", _few: "_other", _many: "_other", _other: "_other" }, + "nl-NL": { _one: "_one", _other: "_other" }, +}; + +// ─── Schemas ────────────────────────────────────────────────────────────────── + +const SCOUT_SCHEMA = { + type: "object", + required: [ + "batches", + "existingKeyMap", + "thirdPartyFlags", + "needsLazyLoadPlumbing", + "resolvedNamespace", + ], + properties: { + batches: { + type: "array", + items: { + type: "object", + required: ["id", "files"], + properties: { + id: { type: "string" }, + files: { + type: "array", + items: { + type: "object", + required: [ + "path", + "concerns", + "estimatedLines", + "homeNamespace", + "crossNamespace", + ], + properties: { + path: { type: "string" }, + concerns: { + type: "array", + items: { + type: "string", + enum: [ + "jsx", + "stringProp", + "notify", + "moduleLevelMap", + "functionReturn", + "classComponent", + ], + }, + }, + estimatedLines: { type: "number" }, + homeNamespace: { type: "string" }, + crossNamespace: { type: "boolean" }, + notes: { type: "string" }, + }, + }, + }, + }, + }, + }, + existingKeyMap: { + type: "object", + additionalProperties: { type: "string" }, + description: + 'Map of lowercased+trimmed English string value → full qualified "namespace.key"', + }, + thirdPartyFlags: { + type: "array", + items: { + type: "object", + required: ["file", "component", "importSource", "category"], + properties: { + file: { type: "string" }, + component: { type: "string" }, + importSource: { type: "string" }, + stringProps: { type: "array", items: { type: "string" } }, + category: { + type: "string", + enum: ["extractable", "has-locale-api", "inaccessible"], + }, + reason: { type: "string" }, + }, + }, + }, + needsLazyLoadPlumbing: { type: "boolean" }, + discoveredLazyLoadRoot: { type: ["string", "null"] }, + resolvedNamespace: { + type: "string", + description: + "The flat camelCase namespace this pass targets — either the explicitly provided one, echoed back, or inferred from the target path(s)", + }, + namespaceReasoning: { + type: "string", + description: + "One-sentence explanation of how resolvedNamespace was inferred. Empty when namespace was explicitly provided.", + }, + }, +}; + +const EXTRACTION_SCHEMA = { + type: "object", + required: ["results"], + properties: { + results: { + type: "array", + items: { + type: "object", + required: ["filePath", "homeNamespace", "strings"], + properties: { + filePath: { type: "string" }, + homeNamespace: { type: "string" }, + strings: { + type: "array", + items: { + type: "object", + required: [ + "qualifiedKey", + "isNew", + "englishValue", + "usageType", + "hasInterpolation", + "isPluralizable", + ], + properties: { + // Full qualified key: "namespace.bareKey" — e.g. "common.save" or "schema.createField" + // For reused keys: the existing qualified key from existingKeyMap + // For new keys: "." — NO additional dots in the bareKey part + qualifiedKey: { type: "string" }, + isNew: { type: "boolean" }, + englishValue: { type: "string" }, + usageType: { + type: "string", + enum: [ + "jsx", + "stringProp", + "notify", + "moduleLevelMap", + "functionReturn", + ], + }, + hasInterpolation: { type: "boolean" }, + interpolationVars: { type: "array", items: { type: "string" } }, + isPluralizable: { type: "boolean" }, + lineNumber: { type: "number" }, + }, + }, + }, + }, + }, + }, + }, +}; + +const VERIFY_SCHEMA = { + type: "object", + required: [ + "tscPassed", + "jsonValid", + "keyParityPassed", + "brokenKeys", + "lazyLoadConfirmed", + "issues", + ], + properties: { + tscPassed: { type: "boolean" }, + tscErrors: { type: "array", items: { type: "string" } }, + jsonValid: { type: "boolean" }, + jsonErrors: { type: "array", items: { type: "string" } }, + keyParityPassed: { type: "boolean" }, + keyParityIssues: { type: "array", items: { type: "string" } }, + brokenKeys: { type: "array", items: { type: "string" } }, + lazyLoadConfirmed: { type: "boolean" }, + issues: { type: "array", items: { type: "string" } }, + }, +}; + +// ───────────────────────────────────────────────────────────────────────────── +// PHASE 1 — SCOUT +// ───────────────────────────────────────────────────────────────────────────── +phase("Discovery"); + +const scout = await agent( + ` +You are the Scout for a localization workflow. Your job is full discovery: build a complete, batched file list from the target path(s), including transitive imports. + +## Inputs +- Target namespace: ${ + providedNs + ? `"${providedNs}" (explicitly provided)` + : "not provided — resolve it yourself in STEP 0 below" + } +- Target paths: ${targetDisplay} +- Lazy-load root: ${lazyLoadRoot || "not provided"} +- Repo root: the root of this git repository (run \`git rev-parse --show-toplevel\` to resolve it if needed) + +--- + +## STEP 0 — Resolve the target namespace +${ + providedNs + ? `The target namespace was explicitly provided: "${providedNs}". Set resolvedNamespace to "${providedNs}" exactly and leave namespaceReasoning empty.` + : `No namespace was provided — infer it from the target path(s) below. Do NOT just camelCase the directory name: some app directories use a DIFFERENT namespace than their folder name (e.g. "content-editor" → namespace "content", "code-editor" → namespace "code"). Ground your answer in real precedent, in this order: + +1. Run \`grep -rho 't("[a-zA-Z]*\\.' | sort -u\` (and the single-quote variant, and \`i18n.t(\`) to see what namespace prefix is already in use nearby. +2. Cross-check against \`ls public/locales/en-US/\` — an existing \`.json\` file is strong evidence of the namespace already established for that area. +3. If the target is genuinely new (no existing t() calls nearby, no matching locale file) and lives directly under one of these roots, fall back to the mechanical rule: + - src/apps//** → flat camelCase of (e.g. "active-preview" → "activePreview") + - src/shell/** → "shell" + - src/utility/** → "common" +4. If the target path(s) don't cleanly match any of the above (e.g. a path outside src/apps|shell|utility, or multiple target paths spanning different apps), use judgment: pick whichever namespace is the true home of the primary user-facing strings — for a single file, that's whatever its closest siblings already use; for a folder/list spanning multiple homes, pick the one shared by the majority of files. + +Set resolvedNamespace to your chosen flat camelCase namespace, and set namespaceReasoning to a one-sentence explanation citing what you found (e.g. "sibling files in this dir already use content.* keys").` +} + +--- + +## STEP 1 — File enumeration +For each target path: +- If folder: run \`find -type f \\( -name '*.ts' -o -name '*.tsx' -o -name '*.js' \\)\` +- If file: include directly + +Deduplicate the combined seed list. + +--- + +## STEP 2 — Full transitive import graph traversal +For every file in the current set, parse its import statements (both static \`import\` and dynamic \`import()\`). +Resolve project-internal imports to absolute paths: +- Relative imports ('./…', '../…'): resolve from the importing file's directory +- Aliased imports ('shell/', 'apps/', 'utility/'): resolve from src/ under the repo root + +Add every resolved project-internal file not yet in the set, then recurse into it. +Stop only at node_modules — never follow third-party package imports. +There is NO depth limit. Keep expanding until no new project files are found. + +For each file, determine its HOME NAMESPACE: +- src/apps//src/** → "" (e.g. "schema", "media", "content") +- src/shell/** → "shell" +- src/utility/** → "common" +- anything else → "unknown" + +Mark files whose homeNamespace !== your resolvedNamespace (from STEP 0) as crossNamespace: true. + +--- + +## STEP 3 — Build existing-key dedup map +Read ONLY these files (the "shared" namespaces most likely to have reusable strings): +- public/locales/en-US/common.json +- public/locales/en-US/shell.json + +Build a map: lowercased+trimmed English string value → full qualified "namespace.key" +Example: { "save": "common.save", "cancel": "common.cancel", "search": "common.search" } + +Include only keys whose values are simple UI strings (not objects, not empty strings). + +--- + +## STEP 4 — Third-party component audit +For each file in the final set, find imports from node_modules. +For any 3rd-party component used in JSX with hardcoded string props (label=, placeholder=, title=, aria-label=, alt=, helperText=, noOptionsText=, loadingText=): +- "extractable": string prop can simply be wrapped in t() at the call site +- "has-locale-api": the library has its own locale/i18n system (MUI, react-i18next, etc.) — skip, already handled +- "inaccessible": the library renders strings internally with no locale API exposed — flag for user + +--- + +## STEP 5 — Skip rules + classify + assign batches +For each file, decide whether it has user-facing translatable strings. SKIP entirely if it only contains: +- DB-sourced values (model/field names from API, field-type identifiers like "one_to_one", "images") +- Brand names only (Zesty, Bynder, Google Analytics, Content One, "Zesty Manager") +- Technical tokens only (GUID/ZUID strings, HTML tag names, raw code snippets) +- Developer-facing only: throw new Error(…), console.log(…) +- Pure routing/config/logic with zero UI strings + +For kept files, classify CONCERNS (all that apply): +- jsx: JSX text nodes +- stringProp: string props (label, placeholder, title, aria-label, alt, helperText, tooltip, etc.) +- notify: notify() / dispatch(notify(…)) calls with user-visible messages +- moduleLevelMap: const/array defined at MODULE SCOPE (outside any function) containing UI label strings +- functionReturn: functions whose return value is a user-visible string (e.g. getLabel(), getErrorMessage()) +- classComponent: class extends React.Component + +BATCH ASSIGNMENT rules: +- SOLO (1 file per batch): estimatedLines > 150 OR concerns includes "moduleLevelMap" +- SMALL (3 files per batch): estimatedLines 50–150 OR concerns includes "notify" +- LARGE (6–8 files per batch): estimatedLines < 50 AND concerns only contains "jsx" and/or "stringProp" + +Give each batch a short id string: "solo-0", "solo-1", "small-0", "large-0", etc. + +--- + +## STEP 6 — Lazy-load plumbing check +${ + lazyLoadRoot + ? `Read ${lazyLoadRoot}. Check if it already has a local boundary AND a useTranslation(...) call for your resolvedNamespace (from STEP 0). If EITHER is missing, set needsLazyLoadPlumbing: true. Otherwise false. Set discoveredLazyLoadRoot: "${lazyLoadRoot}".` + : `Auto-discover the sub-app entry point. Check these candidates in order and stop at the first file that exists: +${targetPaths.map((p) => `- ${p}/index.tsx\n- ${p}/index.js`).join("\n")} +Read the first file found. Check if it has BOTH a boundary AND a useTranslation(...) call for your resolvedNamespace (from STEP 0). +If EITHER is missing, set needsLazyLoadPlumbing: true; otherwise false. +Set discoveredLazyLoadRoot to the path of the file you found, or null if none of the candidates exist.` +} + +--- + +Return the full structured result. +`, + { phase: "Discovery", schema: SCOUT_SCHEMA, effort: "high" } +); + +const ns = scout.resolvedNamespace; +if (!ns || /[^a-zA-Z0-9]/.test(ns)) { + throw new Error( + `Scout returned an invalid resolvedNamespace: "${ns}". Must be flat camelCase.` + ); +} +if (!providedNs) { + log( + `Namespace not provided — resolved to "${ns}"${ + scout.namespaceReasoning ? ` (${scout.namespaceReasoning})` : "" + }` + ); +} + +const totalFiles = scout.batches.reduce((n, b) => n + b.files.length, 0); +const crossFiles = scout.batches.reduce( + (n, b) => n + b.files.filter((f) => f.crossNamespace).length, + 0 +); +const inaccessibleCount = scout.thirdPartyFlags.filter( + (f) => f.category === "inaccessible" +).length; +log( + `Scout: ${ + scout.batches.length + } batches · ${totalFiles} files · ${crossFiles} cross-namespace · ${ + Object.keys(scout.existingKeyMap).length + } dedup entries · ${inaccessibleCount} inaccessible 3rd-party flags` +); + +// ───────────────────────────────────────────────────────────────────────────── +// PHASE 2 — EXTRACT & WIRE (1 per batch, parallel) +// ───────────────────────────────────────────────────────────────────────────── +phase("Extract & Wire"); + +const dedupMapJSON = JSON.stringify(scout.existingKeyMap); + +const extractionResults = await parallel( + scout.batches.map( + (batch) => () => + agent( + ` +You are an Extract-and-Wire agent for a localization pass on namespace "${ns}". +In a single pass per file: identify all user-facing strings, assign keys, then replace hardcoded strings with t() calls. + +## Your batch +${batch.files + .map( + (f) => + `- ${f.path} (homeNamespace: ${f.homeNamespace}, crossNamespace: ${ + f.crossNamespace + }, concerns: ${f.concerns.join(", ")}, ~${f.estimatedLines} lines${ + f.notes ? ", note: " + f.notes : "" + })` + ) + .join("\n")} + +## Existing-key dedup map (lowercased English value → full qualified key) +Before proposing any new key, check this map. If the string (lowercased + trimmed) matches an entry, reuse that key (isNew: false). +${dedupMapJSON} + +--- + +## PASS 1 — EXTRACTION (all files) + +Read EVERY file in your batch. For each user-facing string found: + +### 1. Check the dedup map first +If the string (lowercased, trimmed) exists in the dedup map → set qualifiedKey to that value, isNew: false. + +### 2. If not in the map — propose a new key +Format: "." +- homeNamespace: from the file's homeNamespace above +- flatCamelCaseKey: flat camelCase, NO dots, NO additional separators + Good: "schema.createField", "schema.deleteModelConfirm" + Bad: "schema.create.field" (extra dot), "schema.CreateField" (PascalCase) + +### 3. SKIP these — do NOT extract +- DB-sourced: model/field names returned by API, field-type identifiers (one_to_one, text, images, url_alias, etc.) +- Brand/product names: Zesty, Bynder, Google Analytics, Content One, "Zesty Manager" +- Technical tokens: GUID/ZUID values, HTML tag names (Script, Meta, Link), raw code/HTML snippets +- Developer-only: throw new Error(…), console.log/warn/error(…) +- Backend-generated role names, backend error messages passed through verbatim + +### 4. Interpolation +If a string has a runtime variable, use {{varName}} syntax in englishValue. +e.g. "Hello, {{name}}!" → hasInterpolation: true, interpolationVars: ["name"] + +### 5. Pluralization +If a string counts items ("1 field" / "N fields") → isPluralizable: true. +Use the singular form as englishValue. + +### 6. Cross-namespace files +For files where crossNamespace is true, still extract all strings — just use the file's homeNamespace in the qualifiedKey prefix, not "${ns}". + +--- + +## PASS 2 — WIRING (crossNamespace: false files only) + +For each file where crossNamespace is false AND it has at least one string to wire: +READ the file first, apply the changes below, then WRITE it back. + +### A. Imports +Add at the top if not already present: +- For React functional/class components: \`import { useTranslation } from 'react-i18next';\` +- For non-component modules (Redux thunks, store actions, plain utility functions with no JSX): \`import i18n from 'shell/i18n';\` +If the import already exists, do NOT add it again. + +### B. Hook — functional components only +Add inside the function body (NOT at module scope): +\`const { t } = useTranslation();\` +- NO namespace argument — the namespace is encoded in the key string itself +- If the hook is already declared in the function, do NOT add another one +- If the function already has \`const { t } = useTranslation()\` with a namespace arg, REMOVE the arg + +### C. String replacements +Use each string's qualifiedKey (e.g. "common.save" or "${ns}.createField") for the t() call: + +| Context | Before | After | +|---------|--------|-------| +| JSX text | \`\` | \`\` | +| String prop | \`label="Save"\` | \`label={t("common.save")}\` | +| notify() inside a component | \`notify({ message: "Saved!" })\` | \`notify({ message: t("${ns}.savedSuccessfully") })\` | +| notify() outside a component | \`notify({ message: "Saved!" })\` | \`notify({ message: i18n.t("${ns}.savedSuccessfully") })\` | +| With interpolation | \`"Hello {{name}}"\` | \`t("${ns}.key", { name: nameExpr })\` | +| Embedded markup | (text with , , links, code inline) | \`, link: }} />\` | + +**Trans rules — IMPORTANT:** + +1. **Never split a sentence into fragment keys.** If a sentence contains inline JSX elements (links, \`\`, \`\`, \`\`, etc.) mid-sentence, use a SINGLE \`Trans\` key for the whole sentence with the elements passed as named \`components\`. Do NOT create separate keys like \`bodyPre\`, \`linkText\`, \`bodyMid\`, \`bodyPost\` — translators lose context and word order breaks in other languages. + + Bad (fragment keys): + \`\`\`tsx + {t("${ns}.bodyPre")} {t("${ns}.linkText")} {t("${ns}.bodyPost")} + \`\`\` + + Good (single Trans key): + \`\`\`tsx + }} + /> + \`\`\` + with en-US value: \`"Visit our docs for more info."\` + +2. **Always make Trans self-closing.** Do NOT put JSX children inside \`\` with custom element names (e.g. \`\`). TypeScript treats lowercase JSX tags as HTML intrinsics and raises TS2339. Use the self-closing form \`\` and rely on the translation string for fallback content. + + Bad (causes TS2339): + \`\`\`tsx + }}> + Visit for more info. + + \`\`\` + + Good (self-closing): + \`\`\`tsx + }} /> + \`\`\` + +3. **Dynamic values inside Trans:** Pass them as \`values={{ varName: expr }}\`, then use \`{{varName}}\` in the translation string. Do not interpolate them into the component JSX. + +**Key rule — hook vs singleton:** +- Inside a React component (functional or class), use the hook's \`t()\` for ALL string calls — JSX, string props, event handlers, useEffect callbacks, useCallback, and notify() calls. The hook's \`t\` is a closure variable in scope throughout the entire component body, including every nested function and effect callback. NEVER import or use \`i18n\` (the singleton) inside a React component. +- Outside a React component (Redux thunks, store action creators, plain utility functions that are not React components), use \`i18n.t()\` (the singleton) because hooks cannot be called there. + +### D. Module-level maps (concerns includes "moduleLevelMap") +A const/array declared at MODULE SCOPE (outside any function) that contains UI label strings. +t() cannot run at module scope. Two options: + +Option A — Store key strings in the map, resolve inside the component: +\`\`\` +// Before: +const OPTIONS = [{ label: 'Create field', value: 'create' }] +// After: +const OPTIONS = [{ label: '${ns}.createField', value: 'create' }] +// In component: +const options = OPTIONS.map(o => ({ ...o, label: t(o.label) })) +\`\`\` + +Option B — Convert the const to a factory function: +\`\`\` +const getOptions = (t) => [{ label: t('${ns}.createField'), value: 'create' }] +// In component: +const options = getOptions(t) +\`\`\` + +Choose Option A when the map is imported by multiple files (safer, additive change). +Choose Option B when the map is used only in this file (cleaner). + +### E. Class components (concerns includes "classComponent") +\`\`\` +// Import: +import { withTranslation } from 'react-i18next'; +// Use in render: +const { t } = this.props; +// Export: +export default withTranslation()(MyClass); +\`\`\` + +### F. Components that mount in multiple apps (cross-namespace mounting) +If a component is imported by apps other than "${ns}" (i.e. it's a shared widget used outside its home sub-app): +\`const { t } = useTranslation("${ns}", { useSuspense: false });\` +The useSuspense: false prevents crashes when the namespace hasn't loaded yet in the host app. + +### G. Key format reminder +The qualifiedKey already contains the full t() argument: "common.save", "${ns}.createField", etc. +Use it verbatim: \`t("common.save")\` — do NOT add another prefix. + +### H. Preserve existing key-map constants +If the file imports a constant that stores translation keys (e.g. \`TARGET_ERRORS\`, \`FORM_LABELS\`, \`HTTP_CODE_OPTIONS\`) and the file previously used \`TARGET_ERRORS.unpublished\` etc., keep using those constant references — do NOT inline the key string. If the constant is not yet imported, add it to the existing import from its source file. + +### Safety checks before writing +- Do not create duplicate import statements +- Do not declare the useTranslation hook twice in the same function +- Do not break any existing imports or variable declarations +- Verify JSX is still syntactically valid after replacements + +--- + +Return a results array with one entry per file in your batch (even if a file has 0 strings, include it with an empty strings array). +`, + { + label: `extract-wire:${batch.id}`, + phase: "Extract & Wire", + schema: EXTRACTION_SCHEMA, + } + ) + ) +); + +const validExtractions = extractionResults.filter(Boolean); +const allFileResults = validExtractions.flatMap((e) => e.results); + +// Count new vs reused +let newCount = 0; +let reusedCount = 0; +for (const fr of allFileResults) { + for (const s of fr.strings) { + if (s.isNew) { + newCount++; + } else { + reusedCount++; + } + } +} + +// Cross-namespace files: extracted but not wired — surfaced in the final summary +const crossNsGaps = allFileResults.filter( + (fr) => fr.homeNamespace !== ns && fr.strings.length > 0 +); + +const filesWiredCount = allFileResults.filter( + (fr) => fr.homeNamespace === ns && fr.strings.length > 0 +).length; + +log( + `Extract & Wire: ${newCount} new strings · ${reusedCount} reused · ${filesWiredCount} files wired · ${crossNsGaps.length} cross-namespace gaps` +); + +// ───────────────────────────────────────────────────────────────────────────── +// PLUMBER (optional) — lazy-load plumbing for the sub-app root +// ───────────────────────────────────────────────────────────────────────────── +const effectiveLazyLoadRoot = lazyLoadRoot || scout.discoveredLazyLoadRoot; +if (effectiveLazyLoadRoot && scout.needsLazyLoadPlumbing) { + await agent( + ` +Add lazy-load plumbing to ${effectiveLazyLoadRoot} for the "${ns}" namespace. + +## The pattern +Create a two-layer structure so the namespace loads lazily and suspends only the sub-app subtree: + +\`\`\`tsx +import { Suspense } from "react"; // ← ALWAYS from "react", never from "@mui/material" +import { Box } from "@mui/material"; +import { useTranslation } from "react-i18next"; + +// Outer (exported) — owns the Suspense boundary +export const MyApp = () => ( + }> + + +); + +// Inner — triggers the namespace load; children use bare useTranslation() +const MyAppInner = () => { + useTranslation("${ns}"); // triggers lazy load, suspends until ready + // ... rest of the component +}; +\`\`\` + +## CRITICAL import rule +\`Suspense\` is a React built-in. It is exported from \`"react"\`, NOT from \`"@mui/material"\`. +Always write: \`import { Suspense } from "react";\` +Never write: \`import { Suspense } from "@mui/material";\` + +## Real examples from this codebase +- MediaApp in src/apps/media/src/app/index.tsx +- HomeApp in src/apps/home/app/index.tsx + +## Action +1. Read ${effectiveLazyLoadRoot} +2. Apply the minimal change to introduce this pattern +3. Do NOT add useTranslation("${ns}") to every child — only this one trigger point +4. Write the updated file +`, + { phase: "Extract & Wire", label: "wire:lazy-load-plumbing" } + ); +} + +// ───────────────────────────────────────────────────────────────────────────── +// PHASE 3 — LOCALE FILES (Composer writes en-US + copies to non-EN) +// ───────────────────────────────────────────────────────────────────────────── +phase("Locale Files"); + +// Build per-namespace key maps (bareKey → englishValue) from new strings only +// qualifiedKey format is "namespace.bareKey" so split on first dot +const keysByNs = {}; +const dupCheck = {}; + +for (const fr of allFileResults) { + for (const s of fr.strings) { + if (!s.isNew) { + continue; + } + const dotIdx = s.qualifiedKey.indexOf("."); + if (dotIdx === -1) { + continue; + } // malformed key, skip + const keyNs = s.qualifiedKey.slice(0, dotIdx); + const bareKey = s.qualifiedKey.slice(dotIdx + 1); + if (!keysByNs[keyNs]) { + keysByNs[keyNs] = {}; + } + // First-seen wins for duplicate bare keys within same namespace + if (dupCheck[s.qualifiedKey] === undefined) { + dupCheck[s.qualifiedKey] = s.englishValue; + if (s.isPluralizable) { + keysByNs[keyNs][bareKey + "_one"] = s.englishValue; + keysByNs[keyNs][bareKey + "_other"] = s.englishValue; + } else { + keysByNs[keyNs][bareKey] = s.englishValue; + } + } + } +} + +const affectedNamespaces = Object.keys(keysByNs); +const nsKeysJSON = JSON.stringify(keysByNs, null, 2); + +// Composer: write en-US files + copy new keys to non-EN locale files +await agent( + ` +You are the Composer. Write or update locale JSON files with newly extracted strings. + +## New keys by namespace (bareKey → English value) +${nsKeysJSON} + +## Part 1 — Write en-US files + +${affectedNamespaces + .map( + (keyNs) => ` +### ${keyNs} ${ + keyNs === ns + ? "(TARGET namespace — this is the primary pass)" + : "(FOREIGN namespace — merge only)" + } +File: public/locales/en-US/${keyNs}.json +Action: ${ + keyNs === ns + ? "CREATE or OVERWRITE this file with the keys above. If the file already has content, merge — add new keys, keep existing ones, do not remove anything." + : "READ the existing file first (it has prior content). MERGE these new keys in — add missing ones, do not overwrite or remove existing keys." + } +` + ) + .join("\n")} + +## Part 2 — Copy new keys to non-EN locale files + +For each of the following files, copy any key that exists in the corresponding en-US file but is missing from the locale file, using the en-US value as a placeholder (the user will translate manually). +Do NOT overwrite or remove keys that already exist in the locale file. +If a locale file does not exist yet, create it with the same content as the en-US file. + +Files to update: +${affectedNamespaces + .flatMap((keyNs) => + NON_EN_LOCALES.map((l) => `- public/locales/${l}/${keyNs}.json`) + ) + .join("\n")} + +## Plural scaffolding rules per locale +${JSON.stringify(PLURAL_SCAFFOLD, null, 2)} + +Each entry maps a target CLDR form → which en-US form to use as the English placeholder value. +A plural key is any key whose bare name ends in _one or _other in en-US. + +For each file above: +1. Read public/locales/en-US/.json (source of truth for keys) +2. Read the target locale file (may not exist, or may be {} or have prior keys) +3. For non-plural keys missing from the locale file: copy the en-US value as placeholder +4. For plural keys (base ends in _one/_other in en-US): scaffold ALL required CLDR forms for + this locale using the rules above. For each required form, use the mapped en-US form's value + as the placeholder. Do NOT copy forms that are not listed for this locale (e.g. zh-CN gets + _other only — do not copy _one). +5. Write the merged result +6. Confirm the written file parses as valid JSON + +After all writes, read back each en-US file you touched and confirm it parses as valid JSON. +`, + { phase: "Locale Files", label: "compose:all-locales", model: "haiku" } +); + +// ───────────────────────────────────────────────────────────────────────────── +// PHASE 4 — VERIFIER +// ───────────────────────────────────────────────────────────────────────────── +phase("Verify"); + +const affectedNsJSON = JSON.stringify(affectedNamespaces); + +const verify = await agent( + ` +Run all verification checks for the "${ns}" localization pass and return structured results. + +## Check 1: TypeScript +Run from the repository root (resolve it with \`git rev-parse --show-toplevel\` if needed): +\`npx tsc --noEmit\` +Record any errors (file, line, message). Set tscPassed: false if there are any errors. + +## Check 2: JSON validity +Parse each of these files and confirm they are valid JSON: +${ALL_LOCALES.flatMap((l) => + affectedNamespaces.map((keyNs) => `- public/locales/${l}/${keyNs}.json`) +).join("\n")} +Record any parse errors. Set jsonValid: false if any file fails. + +## Check 3: Key parity for the "${ns}" namespace +Compare keys across all 6 locale files for public/locales/*/${ns}.json. + +First, build the set of "plural family base names": for every key in any locale file, strip any trailing _one/_other/_few/_many/_zero/_two suffix to get the bare base name. A key belongs to a plural family if any locale file has a variant of that base with one of those suffixes. + +Rules: +- Non-plural keys (bare base name has no _one/_other/_few/_many/_zero/_two variant in ANY locale): must be identical in all 6 files. A key present in one locale but absent from another is a parity error. +- Plural families: each locale must have ALL of its required CLDR forms for every family that exists in en-US: + en-US / hi-IN / nl-NL: must have _one AND _other + es-ES: must have _one AND _many AND _other + ru-RU: must have _one AND _few AND _many AND _other + zh-CN: must have _other ONLY +- Locale-specific plural variants (e.g. ru-RU having _few/_many for a key whose en-US form is _one/_other) are EXPECTED and are NOT a parity error. Do NOT flag a locale for having more plural forms than en-US. +Record any parity issues. Set keyParityPassed: false if there are issues. + +## Check 4: Broken t() references +Search for all t() and i18n.t() calls using the "${ns}" namespace: +\`grep -rn 't("${ns}\\.' src/\` +\`grep -rn "t('${ns}\\." src/\` +\`grep -rn 'i18n.t("${ns}\\.' src/\` +\`grep -rn "i18n.t('${ns}\\." src/\` + +For each key found (e.g. "${ns}.someKey"), check that "someKey" exists in public/locales/en-US/${ns}.json. +List any broken references (key used in code but not in JSON). Add to brokenKeys array. + +## Check 5: Lazy-load plumbing +${ + effectiveLazyLoadRoot + ? `Read ${effectiveLazyLoadRoot} and confirm it has both a boundary AND a useTranslation("${ns}") call. Set lazyLoadConfirmed accordingly.` + : "Set lazyLoadConfirmed: true (no lazy-load root found or required for this run)." +} + +Return all results. For the issues array, include a one-line summary of each problem found. +`, + { phase: "Verify", schema: VERIFY_SCHEMA, effort: "high" } +); + +const verifyPassed = + verify.tscPassed && + verify.jsonValid && + verify.keyParityPassed && + verify.brokenKeys.length === 0; +log( + `Verify: tsc=${verify.tscPassed ? "✓" : "✗"} · JSON=${ + verify.jsonValid ? "✓" : "✗" + } · parity=${verify.keyParityPassed ? "✓" : "✗"} · brokenKeys=${ + verify.brokenKeys.length + } · overall=${verifyPassed ? "PASS" : "FAIL"}` +); + +// ───────────────────────────────────────────────────────────────────────────── +// SUMMARY + RETURN +// ───────────────────────────────────────────────────────────────────────────── +const inaccessibleFlags = scout.thirdPartyFlags.filter( + (f) => f.category === "inaccessible" +); + +const crossNamespaceGaps = crossNsGaps.map((fr) => ({ + file: fr.filePath, + homeNamespace: fr.homeNamespace, + stringCount: fr.strings.length, + followUp: `Workflow({ name: "localize", args: { namespace: "${fr.homeNamespace}", target: "${fr.filePath}" } })`, +})); + +const inaccessibleThirdParty = inaccessibleFlags.map((f) => ({ + file: f.file, + component: f.component, + library: f.importSource, + stringProps: f.stringProps || [], + reason: f.reason || "", +})); + +if (crossNamespaceGaps.length > 0) { + log( + `${crossNamespaceGaps.length} cross-namespace gap(s) — strings extracted but not wired: ` + + crossNamespaceGaps + .map( + (g) => + `${g.file} (${g.stringCount} strings, home: ${g.homeNamespace})` + ) + .join("; ") + ); +} + +if (inaccessibleThirdParty.length > 0) { + log( + `${inaccessibleThirdParty.length} inaccessible third-party string source(s) flagged for manual review: ` + + inaccessibleThirdParty + .map((f) => `${f.component} in ${f.file} (${f.library})`) + .join("; ") + ); +} + +if (!verifyPassed) { + log( + "Verify FAILED — see the returned object's `verify` field for tscErrors/keyParityIssues/brokenKeys." + ); +} + +return { + namespace: ns, + filesWired: filesWiredCount, + newKeys: newCount, + reusedKeys: reusedCount, + verifyPassed, + verify, + crossNamespaceGaps, + inaccessibleThirdParty, +}; diff --git a/.github/workflows/claude-auto-reviewer.yml b/.github/workflows/claude-auto-reviewer.yml index 22025c80cc..c651de083f 100644 --- a/.github/workflows/claude-auto-reviewer.yml +++ b/.github/workflows/claude-auto-reviewer.yml @@ -46,6 +46,10 @@ jobs: PR_NUMBER = ${{ github.event.pull_request.number }} REPORT_FILE = ${{ github.workspace }}/review-comment.md + Note: The PR branch is already checked out in the current working directory. + Localization compliance is reviewed separately by the "Claude Localization Reviewer" + workflow — don't duplicate that review here. + Read the diff (gh pr diff --repo ) and the checked-out source, and look only for, in priority order: 1. Bugs — logic errors, crashes, broken edge cases, regressions. diff --git a/.github/workflows/claude-localization-reviewer.yml b/.github/workflows/claude-localization-reviewer.yml new file mode 100644 index 0000000000..84dc7fc454 --- /dev/null +++ b/.github/workflows/claude-localization-reviewer.yml @@ -0,0 +1,242 @@ +name: Claude Localization Reviewer + +# Dedicated localization gap check for PRs into dev that touch source or locale files. +# 1. ci/scripts/check_localization_objective.js: deterministic checks — TypeScript +# errors, locale JSON validity, cross-locale key parity, broken t()/i18n.t() refs. +# 2. Claude reviews the diff for what only language/intent can catch: missed t() +# wiring, value-formatting violations, and translation quality. +# Posts inline PR comments plus a summary comment; fails on any finding. Each run posts a +# fresh summary comment (deliberately NOT updated in place) so the PR timeline shows the +# review history: "FAIL" → fix commits → "PASS" — mirrors claude-auto-reviewer.yml. + +on: + pull_request: + branches: [dev] + types: [opened, synchronize, reopened, ready_for_review] + +jobs: + verify: + # Fork PRs don't get ANTHROPIC_API_KEY; this uses pull_request (not pull_request_target). + if: >- + github.event.pull_request.draft == false && + github.event.pull_request.head.repo.full_name == github.repository + runs-on: ubuntu-latest + timeout-minutes: 15 + concurrency: + group: claude-localization-reviewer-${{ github.event.pull_request.number }} + cancel-in-progress: true + permissions: + contents: read + pull-requests: write + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + with: + fetch-depth: 1 + + # Skip everything below on PRs that don't touch translatable source or locale files. + - name: Detect relevant changes + id: changed + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + REPO: ${{ github.repository }} + PR: ${{ github.event.pull_request.number }} + run: | + set -euo pipefail + # `gh pr diff` hits GitHub's 300-file diff cap on large PRs; the paginated Files + # API doesn't. Cache the result — "Extract relevant diff" reuses this file. + gh api "repos/$REPO/pulls/$PR/files" --paginate > pr_files.json + jq -r '.[].filename' pr_files.json > changed_files.txt + if grep -qE '^src/.*\.(js|jsx|ts|tsx)$|^public/locales/' changed_files.txt; then + echo "relevant=true" >> "$GITHUB_OUTPUT" + else + echo "relevant=false" >> "$GITHUB_OUTPUT" + echo "No i18n-relevant files changed — skipping." + fi + + - name: Set up Node + if: steps.changed.outputs.relevant == 'true' + uses: actions/setup-node@v4.1.0 + with: + node-version: "22.19.0" + cache: "npm" + cache-dependency-path: package-lock.json + + - name: Install Dependencies + if: steps.changed.outputs.relevant == 'true' + run: npm install --legacy-peer-deps + + - name: Run TypeScript check + if: steps.changed.outputs.relevant == 'true' + run: npx tsc --noEmit --pretty false > tsc-output.txt 2>&1 || true + + - name: Run objective i18n checks + if: steps.changed.outputs.relevant == 'true' + run: node ci/scripts/check_localization_objective.js --changed-files changed_files.txt --tsc-output tsc-output.txt + + # Plain-text, pre-filtered diff capped so a huge PR can't blow context/cost. Source + # files claim the budget first (missed-string check), then locale files get what's + # left, round-robined across sub-apps/locales — see ci/scripts/build_localization_diff.js. + - name: Extract relevant diff + id: diff + if: steps.changed.outputs.relevant == 'true' + run: | + set -euo pipefail + node ci/scripts/build_localization_diff.js pr_files.json 200000 > i18n-relevant.diff 2> diff-stderr.txt + cat diff-stderr.txt + if grep -q "TRUNCATED" diff-stderr.txt; then + echo "::warning::i18n-relevant.diff was truncated to fit the review budget." + printf '\n\n[... diff truncated: this PR is too large to review in full — findings above are non-exhaustive ...]\n' >> i18n-relevant.diff + echo "truncated=true" >> "$GITHUB_OUTPUT" + else + echo "truncated=false" >> "$GITHUB_OUTPUT" + fi + + - uses: anthropics/claude-code-action@1dc994ee7a008f0ecc866d9ac23ef036b7229f84 # v1.0.127 + if: steps.changed.outputs.relevant == 'true' + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} + claude_args: | + --max-turns 50 + --allowedTools "Bash(gh pr view:*),Read,Write,Grep,Glob" + --model claude-sonnet-5 + prompt: | + REPO: ${{ github.repository }} + PR NUMBER: ${{ github.event.pull_request.number }} + REPORT_FILE: ${{ github.workspace }}/i18n-comment.md + DIFF_TRUNCATED: ${{ steps.diff.outputs.truncated }} + + The PR branch is already checked out. i18n-objective-results.json (in the workspace + root) holds deterministic findings already computed by a script — read it first; + never re-judge or second-guess those, just report them. + + Read CLAUDE.md's "Localization (i18next)" section for the full rules, then read + i18n-relevant.diff with the Read tool — it's the PR's diff, already pre-filtered to + only files under src/**/*.{js,jsx,ts,tsx} and public/locales/**, formatted as plain + `=== ===` sections. Never run `gh pr diff` or `gh api` to fetch the diff + yourself; this file is the full and only diff context you get. Some entries may say + "(no patch available — file too large for GitHub to diff)" — treat those as + un-reviewable, don't guess at their contents. If DIFF_TRUNCATED is "true", the PR was + too large to include in full — note this once in the report rather than silently + reviewing a partial diff as if it were complete. + + Review the diff for two things a script can't check: + + 1. Missed strings: new hardcoded user-facing copy (JSX text, string props, notify()/ + dispatch() messages, module-level string maps, class components) that should be + wired through t()/i18n.t() instead, per the "Where strings hide" and "What to SKIP" + rules. Also check value-formatting-rule violations in any changed + public/locales/*.json value (no decorative characters, no ALL CAPS, no HTML, no + hardcoded URLs). + 2. Translation quality: for every changed value in a non-English locale file + (public/locales/{es-ES,hi-IN,zh-CN,ru-RU,nl-NL}/*.json), confirm it reads as + grammatically correct in that language, and that it's an actual translation — not + the English string copied verbatim (ignoring {{var}} interpolations) or a stale + English placeholder. + + If something is genuinely ambiguous (can't tell if a string is UI copy vs. a + skippable data value, or a translation choice that's debatable rather than clearly + wrong), put it under Advisory, not Blocking — a later deterministic step turns every + Blocking bullet into an inline PR comment automatically, so Blocking is reserved for + confident, file/line-anchored findings only. + + Keep every bullet to one short sentence: what's wrong and the fix, nothing else. Avoid + long explanations — no rationale, no background, no multi-clause justification. This is + a PR comment, not an essay. + + Write the report to REPORT_FILE with the Write tool, in exactly this shape (keep both + HTML markers verbatim): + + + ## Localization Reviewer — + + + ### 🔴 Blocking + + + ### 🟡 Advisory + + + + + mirrors the Claude Auto Review workflow's terse verdict phrasing — + counts, not prose, and never a zero count segment: + ✅ No blockers + ✅ No blockers · 🟡 M advisory note(s) + 🔴 N blocker(s) · 🟡 M advisory note(s) — see inline comments + N is the number of Blocking bullets (0 if "None"), M the number of Advisory bullets. + Say "see inline comments" only when N > 0, since only Blocking bullets get posted as + inline comments — Advisory ones live only in this comment's body. + + FAIL if i18n-objective-results.json has "passed": false, OR you added anything under + Blocking. Otherwise PASS. This PASS/FAIL is the `` + marker used by the merge gate — independent of the human-readable verdict line above, + which reports counts rather than pass/fail. Write the marker exactly once, as the final + line — never quote it or the `` marker anywhere else in + the report. Do not post the summary comment yourself, and do not create any inline PR + comments yourself — later steps handle both from REPORT_FILE. + + # Always post a NEW summary comment (never update in place): each push's verdict lands + # in the PR timeline between the commits it reviewed, preserving the review history. + - name: Post Localization Reviewer comment + id: i18n + if: always() && steps.changed.outputs.relevant == 'true' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + REPO: ${{ github.repository }} + PR: ${{ github.event.pull_request.number }} + run: | + set -euo pipefail + FILE="$GITHUB_WORKSPACE/i18n-comment.md" + if [ ! -s "$FILE" ] || ! grep -q '' "$FILE"; then + echo "::warning::report file missing or malformed; the Localization Reviewer gate will fail." + echo "no_report=true" >> "$GITHUB_OUTPUT" + exit 0 + fi + BODY=$(cat "$FILE") + VERDICT=$(printf '%s' "$BODY" | grep -oiE '' \ + | grep -oiE '(PASS|FAIL)' | tail -n1 | tr '[:lower:]' '[:upper:]' || true) + if [ -z "$VERDICT" ]; then + echo "::warning::report has no usable localization-verdict marker; the gate will fail." + echo "no_report=true" >> "$GITHUB_OUTPUT" + exit 0 + fi + PAYLOAD=$(BODY="$BODY" python3 -c 'import os,json,sys; sys.stdout.write(json.dumps({"body": os.environ["BODY"]}))') + printf '%s' "$PAYLOAD" | gh api -X POST "repos/$REPO/issues/$PR/comments" --input - --silent + echo "Posted Localization Reviewer comment." + echo "verdict=${VERDICT:-}" >> "$GITHUB_OUTPUT" + + # Deterministic instead of relying on Claude to reliably call an inline-comment tool + # itself. Reusable: see ci/scripts/post_inline_comments.js. + - name: Post inline comments for Blocking findings + if: always() && steps.changed.outputs.relevant == 'true' && steps.i18n.outputs.no_report != 'true' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + node ci/scripts/post_inline_comments.js \ + --report i18n-comment.md \ + --section "### 🔴 Blocking" \ + --pr-files pr_files.json \ + --repo "${{ github.repository }}" \ + --pr "${{ github.event.pull_request.number }}" \ + --commit "${{ github.event.pull_request.head.sha }}" \ + --label "Localization Reviewer" + + - name: Localization Reviewer gate + if: always() && steps.changed.outputs.relevant == 'true' + run: | + V="${{ steps.i18n.outputs.verdict }}" + echo "Localization Reviewer verdict: ${V:-} (no_report=${{ steps.i18n.outputs.no_report || 'false' }})" + if [ "${{ steps.i18n.outputs.no_report }}" = "true" ]; then + echo "::error::No Localization Reviewer report was produced — check the workflow logs." + exit 1 + fi + if [ "$V" = "FAIL" ]; then + echo "::error::Localization Reviewer found a blocking issue — see its comment." + exit 1 + fi diff --git a/.gitignore b/.gitignore index 0cc37b4126..f17b365a71 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,7 @@ skills-lock.json .agents .playwright-mcp .claude/worktrees +.zed # negative-QA workflow runtime output (auth-state.json holds a session token) auth-state.json diff --git a/CLAUDE.md b/CLAUDE.md index 7471404521..2c667193af 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -158,9 +158,65 @@ Fixtures (`cypress/fixtures/`) seed instance/content/model JSON. Don't hand-roll **Use `uuidv4` for unique test data names, not timestamps.** Import `{ v4 as uuidv4 } from "uuid"` and append the result to test record names (e.g. `` `My Model | ${uuidv4()}` ``). UUIDs are collision-resistant across parallel runners; timestamps are not. Derive any dependent values (e.g. reference IDs) programmatically from the same constant rather than hardcoding expected strings. -## Code conventions +## Localization (i18next) -These are the in-use patterns. Match them when adding new code. +`manager-ui` is localized with **i18next + react-i18next** across 6 locales: `en-US` (fallback), `es-ES`, `hi-IN`, `zh-CN`, `ru-RU`, `nl-NL`. Hindi has almost no upstream support in third-party libs, so its bundles are hand-authored everywhere. + +### Architecture + +- **Config:** `src/shell/i18n/index.ts`, imported in `src/shell/index.js` before the React root renders; root is wrapped in ``. +- **Locale data:** `public/locales//.json`, served at `/locales/{{lng}}/{{ns}}.json`. +- **Key syntax:** config sets `nsSeparator: "."` + `keySeparator: false`. Keys are **qualified, flat camelCase strings** — `t("content.publishItem")`, `t("common.save")`. The namespace is the first dot-segment; the rest is one flat key. **Never nest JSON objects and never use a second dot** — a multi-dot key like `t("media.dateFilter.today")` resolves to a broken lookup and throws in dev. +- **Components** call `useTranslation()` with **no namespace argument** — the namespace lives in the key. (Exception: the per-sub-app root trigger below, and shared widgets that must self-load a namespace.) +- **Namespaces are all loaded eagerly at init**, not lazy-loaded per sub-app. `src/shell/i18n/index.ts`'s `ns:` array lists all 15 namespaces, so every namespace's locale JSON is fetched at boot regardless of which sub-app the user visits first. Each sub-app root still wraps a local `` and calls `useTranslation("")` once (canonical examples: `HomeApp` → `dashboard`, `ContentApp` → `content`, `MediaApp` → `media`), but that trigger is now effectively a no-op — kept intentionally rather than ripped out. **This is deliberate, not a bug:** true per-sub-app lazy-loading was tried and reverted because it caused crashes — a race condition where Redux-driven code (thunks/middleware calling `i18n.t()` outside of React, e.g. boot-time error notifications) could fire before the relevant sub-app's namespace had loaded, hitting the "namespace not loaded" throw path in `handleMissingKey`. The lazy-load perf gain was also minimal. Don't "fix" this back to lazy-loading without addressing that race first. +- **Missing keys:** **dev throws** (names the key + the `public/locales//.json` path; dev also disables the en-US fallback so gaps in _non-English_ locales surface). **Stage/prod** fall back to en-US and `Sentry.captureMessage` once per key. +- **Caching:** git hash is the cache-bust `defaultVersion`. Dev uses `HttpBackend` only (edit a JSON, refresh, see it — no stale localStorage). +- **MUI component labels are separate from i18next.** DataGrid/DatePicker/Autocomplete built-in labels localize through the theme, not `t()`: `src/shell/i18n/mui-locale.ts` exports `localizeTheme(theme, muiLocaleString)`; `LocalizedThemeProvider` (`src/shell/components/LocalizedThemeProvider.tsx`) re-runs it on language change via the `MUI_LOCALE` map (BCP 47 → MUI locale string). Adding a locale: add a `MUI_LOCALE` entry, verify the MUI string is a valid named export of `@mui/material/locale`, and if MUI X doesn't ship it, hand-author a bundle in `@zesty-io/material` (see that repo's `LOCALIZATION.md`). +- **Dates are separate from i18next.** Display strings go through `formatLocalized`/`formatDistanceToNowLocalized` (`src/shell/i18n/dates.ts`); MUI pickers take `adapterLocale={getDateFnsLocale(i18n.language)}`. **Keep machine formats locale-independent** — `yyyy-MM-dd`, API/CSV payloads, URL params, IndexedDB/search keys. Localizing these silently breaks storage/search. + +### Rules for translating new copy + +**Where strings hide (audit _all_ of these, not just JSX):** + +- JSX text + string props (`label`, `placeholder`, `title`, `aria-label`, `alt`). +- Functions that return strings (`getLabel`, `getErrorMessage`, …). +- Module-level object maps/arrays — `t()` can't run at module scope. Store i18n _keys_ in the map and resolve with `t()` inside the component (or move the lookup in). Verify the const isn't imported elsewhere before changing it. +- Strings passed as props — translate at the **call site**, not in the receiving component. +- `notify()` / `dispatch()` messages, including in **redux thunks and hooks** — a render-only scan misses these. In non-component modules/thunks use the **i18n singleton**: `import i18n from "shell/i18n"; i18n.t("ns.key")`. +- Class components → wrap with `withTranslation()`, use `this.props.t`. + +**What to SKIP (data / not UI copy):** + +- DB-sourced values: model/field labels, field-type identifiers (`one_to_one`), user content, backend-generated role names, passed-through backend error text. +- Brand/product names: Zesty, Bynder, Google Analytics, Content One, "Zesty Manager". Technical tokens: ZUID, HTML element names (Script/Meta/Link), code snippets, raw HTML attributes (`target=_blank`). +- Developer-facing: `throw new Error(...)` invariants, `console.*` logs. + +**Value formatting rules:** + +- **No decorative special characters** prefixing/suffixing the value — strip trailing colons, surrounding em-dashes, wrapping parentheses, `-- --` select-prompt decorations from JSON values; add them back in the component at every render site (`{"("}`, `` `— ${t(...)} —` ``). Violations: `"— None —"`, `"(optional)"`, `"({{count}} fields)"`. Not violations: `"Archives (zip)"` — the parenthetical is semantic content. Updating the JSON across 6 locales produces many more diff lines than the number of component edits — that ratio is expected. +- **No ALL CAPS values.** Apply `textTransform: "uppercase"` in the component instead (or rely on `variant="overline"` / MUI `Button`, which already uppercase). Two keys (`"Fields"` vs `"FIELDS"`) for the same concept is a dedup problem across locales. +- **No HTML in translation values.** Use `` in React; `{{var}}` interpolation only in thunks/`notify()`/`i18n.t()` (no `` outside render context). Since `escapeValue: false` is set, calling `t()` on a value containing raw tags (``, ``, custom placeholders) renders the tags as literal text instead of throwing — the mistake is silent. Keys whose value contains angle-bracket component placeholders **must** carry a `Rich` suffix (e.g. `shell.filterNoResultsRich`, `content.itemEditStatusSearchNoResultsTitleRich`) so it's obvious at the call site that only `` is safe, never `t()`. +- **No hardcoded URLs or asset paths** — use `{{var}}` and pass the value at the call site. + +**Which namespace a string belongs to:** the app dir the file physically lives in, _even when_ another app imports it — e.g. `src/shell/components/FieldType*` → `shell` (shared); a component under `src/apps/content-editor/src` → `content` even though schema/blocks import it. Namespace names must be **flat camelCase** (`activePreview`, not `active-preview`) — a hyphen is inconsistent with the key convention and easy to confuse with the `.` separator. A shared component that can mount in an app that doesn't load its home namespace should still self-load it: `useTranslation("", { useSuspense: false })` (non-suspense so it never crashes a tree without a Suspense boundary). Since all namespaces load eagerly at boot (see above), this is now belt-and-suspenders rather than strictly required, but keep the pattern for new shared components in case eager-loading is ever scoped back. Precedent: `FieldTypeMedia` (a `content` key) mounts in shell + schema. + +**Pluralization is mandatory: every CLDR form, every locale.** A plural key (`_one`, `_other`, …) used with `{ count }` **throws in dev for any missing category**. Forms differ per locale — define all of them: + +| Locale | Required forms | +| ------------------------- | --------------------------------- | +| `en-US`, `hi-IN`, `nl-NL` | `_one`, `_other` | +| `es-ES` | `_one`, `_many`, `_other` | +| `ru-RU` | `_one`, `_few`, `_many`, `_other` | +| `zh-CN` | `_other` | + +This is the **one exception** to strict key-parity across locales. A non-suffixed key used with `{count}` is fine (no inflection); Spanish `_many` usually equals `_other`; get exact suffixes via `i18n.services.pluralResolver.getSuffixes(tag)`. + +**Verification** (CI runs **no** typecheck/lint for this — do it yourself): `npx tsc --noEmit`; JSON valid; key parity across all 6 locales (non-plural keys identical; plural keys carry each locale's full CLDR set). + +### Tools + +- **`Workflow({ name: "localize", args: { target: "" } })`** — the paved path for localizing a new component or sub-app. Requires Claude Code (see README's "Localizing new copy" section for full usage, args, and cost caveats). Extracts strings, wires `t()`/`i18n.t()` calls, writes locale JSON, verifies. `namespace` is optional and inferred if omitted. Leaves English placeholders in the 5 non-English locales — translation is still a manual/QA step. +- **`npm run i18n:extract`** — runs `i18next-parser` (config: `i18next-parser.config.js`) as a lightweight, non-AI safety net. Statically finds `t()` calls and adds any keys missing from the locale JSON (seeded from an existing bare-key translation when one exists, per-locale — never an English leak into another locale). `keepRemoved: true` and `sort: true` are load-bearing: this codebase uses computed key lookups the parser can't statically resolve, and the locale files are kept alphabetically sorted. Safe to run repeatedly — a clean run is a no-op. - **New endpoints → RTK Query.** Extend an existing `src/shell/services/.ts` with a new `endpoints` builder and reuse `prepareHeaders` / `getResponseData` from `src/shell/services/util.js`. Don't write a new thunk for HTTP. The legacy `FETCH_RESOURCE` middleware in `src/shell/store/middleware/api.js` is still wired for existing call sites — don't add new ones. - **New slices → `createSlice`** from `@reduxjs/toolkit`. All current shell slices follow this pattern (`src/shell/store/{ui,users,releases,releaseMembers,media,...}`). Don't introduce hand-rolled switch reducers. diff --git a/README.md b/README.md index 838263dbb5..ab15154184 100644 --- a/README.md +++ b/README.md @@ -90,7 +90,7 @@ Open a second terminal `npm run start:test` Pull Cypress Screenshots `npm run ci:pull:screenshots` -### CI Parallelization +## CI Parallelization CI runs 5 parallel jobs using [cypress-split](https://github.com/bahmutov/cypress-split). Runners 0–3 split the general spec pool automatically using `SPLIT=4`. Runner 4 is dedicated to publish-related specs to prevent cross-runner interference — see `.github/workflows/ci.yaml` for details. To add more general runners, increment the matrix array and `SPLIT` together. @@ -110,6 +110,42 @@ If `timings.json` does not exist, cypress-split falls back to distributing by sp --- +## Localizing new copy + +**Requires [Claude Code](https://claude.com/claude-code).** This isn't an npm script or CLI binary — it's a `Workflow` script that only runs inside a Claude Code session, where it drives multiple AI subagents to do the extraction/wiring/verification. There's no equivalent for localizing new copy without it. + +**Mind your token usage.** Even a single small file fans out to several subagents (Discovery, one Extract & Wire agent per batch, Composer, Verifier) — a one-string component still used ~5 agents and ~350k tokens end to end in testing. Scope `target` to what you're actually adding (a component or a small folder) rather than a whole sub-app root unless you mean to re-run a full namespace pass, and prefer running it once per PR rather than repeatedly against overlapping targets. + +**You still have to translate manually.** The workflow only ever writes **English placeholder values** into the 5 non-English locale files — it does not translate. This is by design, not a gap: having every subagent in the pipeline also translate into 5 languages would meaningfully increase the token cost covered above for a step a human/QA pass needs to review anyway. After running it, open the diffed `public/locales//.json` files (everywhere but `en-US`) and replace the English placeholders with real translations (machine-assisted is fine, but flag for native/QA review per the Localization section of `CLAUDE.md`) before merging. + +New user-facing strings should go through the `localize` workflow rather than being wired up to i18next by hand — it extracts hardcoded strings, replaces them with `t()`/`` calls, writes/updates the locale JSON across all 6 languages, and verifies the result. The script lives at `.claude/workflows/localize.js`. + +To run it: open this repo in Claude Code and ask it to localize whatever you're adding (e.g. "localize src/apps/schema/src/app/components/NewThing.tsx"), or invoke the `Workflow` tool directly in the chat: + +```js +Workflow({ + name: "localize", + args: { target: "src/apps/schema/src/app/components/NewThing.tsx" }, +}); +``` + +**Args** (`target` is the only required one): + +- `target` — a file path, folder path, or array of paths to localize. The workflow follows the transitive import graph from here, so pointing it at a new component is enough; you don't need to enumerate its children. +- `namespace` _(optional)_ — the i18next namespace to target. If omitted, it's inferred from `target`'s location, grounded in what's already there (existing `t()` calls nearby, existing `public/locales/en-US/.json` files) rather than a naive folder-name guess — e.g. `src/apps/content-editor/**` correctly resolves to `content`, not `contentEditor`. +- `lazyLoadRoot` _(optional)_ — the sub-app entry point that owns the namespace's `` boundary, if the workflow can't auto-discover it. + +**What it does:** enumerates the target + its transitive imports, extracts every hardcoded string (JSX text, string props, `notify()` calls, module-level maps, class components), reuses existing `common`/`shell` keys where the English text already matches one, wires the `t()`/`i18n.t()` calls in place, writes `en-US/.json` and seeds the other 5 locales with English placeholders, then runs `tsc --noEmit`, JSON validity, key-parity, and broken-key-reference checks. + +**What it returns:** `{ namespace, filesWired, newKeys, reusedKeys, verifyPassed, verify, crossNamespaceGaps, inaccessibleThirdParty }`. + +- `crossNamespaceGaps` — files pulled in transitively that live in a _different_ namespace than the target: their strings are extracted into that namespace's JSON but left unwired, since wiring them under the wrong namespace would misattribute them. Each entry includes a ready-to-run follow-up, e.g. `Workflow({ name: "localize", args: { namespace: "shell", target: "src/shell/store/ui.ts" } })`. +- `inaccessibleThirdParty` — third-party components with hardcoded strings and no locale API; needs a manual call (wrap it, or accept it stays English). + +See the "Localization (i18next)" section of `CLAUDE.md` for the conventions this workflow enforces (key naming, pluralization/CLDR rules, what to skip, value-formatting rules). + +--- + ## Connect Manager-ui to Material Design System Connect to Zesty Material Design Systems diff --git a/ci/scripts/build_localization_diff.js b/ci/scripts/build_localization_diff.js new file mode 100644 index 0000000000..178b5b78ed --- /dev/null +++ b/ci/scripts/build_localization_diff.js @@ -0,0 +1,139 @@ +#!/usr/bin/env node +/* + * Builds the plain-text, i18n-relevant diff fed to Claude in the Localization Reviewer + * workflow, bounded to a byte budget so a huge PR can't blow context/cost. + * + * GitHub's Files API lists files in plain path order (locales/en-US first, then other + * locales, then src/* alphabetically) — taking the first N bytes of that order would + * exhaust the budget on whatever sorts first and miss everything else. + * + * Instead: source files (missed-strings check) claim the budget first, then locale + * files get what's left. Within each, round-robin across groups (sub-app dir for + * source, locale for locale files) instead of path order, so the cap samples broadly + * instead of exhausting one group. + * + * Usage: node ci/scripts/build_localization_diff.js > i18n-relevant.diff + * Prints "TRUNCATED" to stderr as the last line iff the output was cut short. + */ +const fs = require("fs"); + +const LOCALE_PRIORITY = ["es-ES", "hi-IN", "zh-CN", "ru-RU", "nl-NL", "en-US"]; + +function classify(filename) { + const srcMatch = filename.match(/^src\/apps\/([^/]+)\//); + if (srcMatch && /\.(js|jsx|ts|tsx)$/.test(filename)) { + return { + relevant: true, + category: 0, + group: srcMatch[1], + within: filename, + }; + } + if (/^src\/.*\.(js|jsx|ts|tsx)$/.test(filename)) { + return { relevant: true, category: 0, group: "shell", within: filename }; + } + const localeMatch = filename.match( + /^public\/locales\/([^/]+)\/([^/]+)\.json$/ + ); + if (localeMatch) { + const [, locale, ns] = localeMatch; + // Group by locale (not namespace) — translation-quality needs a sample from every + // language, not exhaustive namespace coverage of just the first-priority one. + return { relevant: true, category: 1, group: locale, within: ns }; + } + return { relevant: false }; +} + +function groupSortKey(category, group) { + if (category === 1) { + const i = LOCALE_PRIORITY.indexOf(group); + return i === -1 ? LOCALE_PRIORITY.length : i; + } + return group; // alphabetical by sub-app dir is fine — just needs to be deterministic +} + +// Round-robin across groups so a byte cap samples every group a little instead of +// exhausting itself on the first one in path order. +function interleaveByGroup(entries, category) { + const groups = new Map(); + for (const e of entries) { + if (!groups.has(e.group)) groups.set(e.group, []); + groups.get(e.group).push(e); + } + for (const list of groups.values()) { + list.sort((a, b) => + a.within < b.within ? -1 : a.within > b.within ? 1 : 0 + ); + } + + const groupNames = [...groups.keys()].sort((a, b) => { + const ka = groupSortKey(category, a); + const kb = groupSortKey(category, b); + return ka < kb ? -1 : ka > kb ? 1 : 0; + }); + const groupLists = groupNames.map((g) => groups.get(g)); + + const out = []; + let remaining = groupLists.reduce((n, l) => n + l.length, 0); + let i = 0; + while (remaining > 0) { + const list = groupLists[i % groupLists.length]; + if (list.length) { + out.push(list.shift()); + remaining--; + } + i++; + } + return out; +} + +function formatEntry(f) { + return `=== ${f.filename} ===\n${ + f.patch || "(no patch available — file too large for GitHub to diff)" + }\n`; +} + +// Appends formatted entries until byteBudget is spent; returns [text, truncated]. +function fillBudget(entries, byteBudget) { + let text = ""; + for (const f of entries) { + const next = formatEntry(f); + if (Buffer.byteLength(text + next, "utf8") > byteBudget) { + return [text, true]; + } + text += next; + } + return [text, false]; +} + +function main() { + const [, , inputFile, maxBytesArg] = process.argv; + const maxBytes = Number(maxBytesArg) || 200000; + const files = JSON.parse(fs.readFileSync(inputFile, "utf8")); + + const relevant = files + .map((f) => ({ ...f, ...classify(f.filename) })) + .filter((f) => f.relevant); + + const srcEntries = interleaveByGroup( + relevant.filter((f) => f.category === 0), + 0 + ); + const localeEntries = interleaveByGroup( + relevant.filter((f) => f.category === 1), + 1 + ); + + // Waterfall: source files claim the budget first; locale files get whatever's left, + // possibly nothing on a PR large enough that source changes alone exceed the cap. + const [srcText, srcTruncated] = fillBudget(srcEntries, maxBytes); + const remaining = maxBytes - Buffer.byteLength(srcText, "utf8"); + const [localeText, localeTruncated] = fillBudget(localeEntries, remaining); + + process.stdout.write(srcText + localeText); + if (srcTruncated || localeTruncated) { + process.stderr.write("TRUNCATED\n"); + } +} + +main(); diff --git a/ci/scripts/check_localization_objective.js b/ci/scripts/check_localization_objective.js new file mode 100644 index 0000000000..3ee5c5be40 --- /dev/null +++ b/ci/scripts/check_localization_objective.js @@ -0,0 +1,337 @@ +#!/usr/bin/env node +/* + * Deterministic i18n checks for a PR diff: JSON validity, cross-locale key parity + * (CLDR-plural-aware, per CLAUDE.md's pluralization table), broken t()/i18n.t() key + * references, and TypeScript errors scoped to files the PR actually touched. + * + * These mirror the same checks the `localize` skill's Verifier phase performs + * (.claude/workflows/localize.js), ported to a plain script so CI can gate on them + * without an LLM judgment call. + * + * Usage: + * node ci/scripts/check_localization_objective.js --changed-files --tsc-output + * --changed-files text file, one repo-relative path per line (from the PR Files API) + * --tsc-output text file capturing `npx tsc --noEmit --pretty false` output + * + * Writes i18n-objective-results.json to the current working directory and exits 0 + * regardless of findings — the caller decides what to do with `passed`. + */ +const fs = require("fs"); +const path = require("path"); + +const ROOT = process.cwd(); +const LOCALES = ["en-US", "es-ES", "hi-IN", "zh-CN", "ru-RU", "nl-NL"]; +const PLURAL_SUFFIXES = ["_one", "_other", "_few", "_many", "_zero", "_two"]; +const REQUIRED_PLURAL_FORMS = { + "en-US": ["_one", "_other"], + "hi-IN": ["_one", "_other"], + "nl-NL": ["_one", "_other"], + "es-ES": ["_one", "_many", "_other"], + "ru-RU": ["_one", "_few", "_many", "_other"], + "zh-CN": ["_other"], +}; + +// src/apps/ -> namespace, per CLAUDE.md's sub-app inventory + namespace rules. +const APP_NS_MAP = { + "content-editor": "content", + schema: "schema", + media: "media", + release: "release", + reports: "reports", + "code-editor": "code", + seo: "seo", + settings: "settings", + home: "dashboard", + leads: "leads", + studio: "studio", + marketplace: "marketplace", + blocks: "blocks", + "active-preview": "activePreview", +}; + +function parseArgs(argv) { + const out = {}; + for (let i = 0; i < argv.length; i++) { + if (argv[i] === "--changed-files") out.changedFiles = argv[++i]; + else if (argv[i] === "--tsc-output") out.tscOutput = argv[++i]; + } + return out; +} + +function readLines(filePath) { + if (!filePath || !fs.existsSync(filePath)) return []; + return fs + .readFileSync(filePath, "utf8") + .split("\n") + .map((l) => l.trim()) + .filter(Boolean); +} + +// A file's directory only tells us its "home" namespace by convention — the +// namespace its own strings would live in. It does NOT tell us every +// namespace the file actually references: a shared utility under +// src/utility/ (home namespace "shell") can still call i18n.t("common.foo"). +// So this returns the home namespace plus every namespace actually used in +// a t()/i18n.t() call within the file, unioned in main()'s affectedNamespaces. +const NAMESPACE_CALL_PATTERN = + /(?:i18n\.)?t\(\s*(["'])([A-Za-z][A-Za-z0-9]*)\.[A-Za-z0-9_]+\1/g; + +function namespacesForFile(filePath) { + const namespaces = new Set(); + + const localeMatch = filePath.match(/^public\/locales\/[^/]+\/([^/]+)\.json$/); + if (localeMatch) { + namespaces.add(localeMatch[1]); + return namespaces; + } + + const appMatch = filePath.match(/^src\/apps\/([^/]+)\//); + if (appMatch && APP_NS_MAP[appMatch[1]]) { + namespaces.add(APP_NS_MAP[appMatch[1]]); + } else if (/^src\/(shell|utility|engine)\//.test(filePath)) { + namespaces.add("shell"); + } + + let text; + try { + text = stripComments(fs.readFileSync(path.join(ROOT, filePath), "utf8")); + } catch { + return namespaces; + } + NAMESPACE_CALL_PATTERN.lastIndex = 0; + let m; + while ((m = NAMESPACE_CALL_PATTERN.exec(text))) { + namespaces.add(m[2]); + } + + return namespaces; +} + +function listSourceFiles(dir) { + const out = []; + let entries; + try { + entries = fs.readdirSync(dir, { withFileTypes: true }); + } catch { + return out; + } + for (const e of entries) { + const full = path.join(dir, e.name); + if (e.isDirectory()) out.push(...listSourceFiles(full)); + else if (/\.(js|jsx|ts|tsx)$/.test(e.name)) out.push(full); + } + return out; +} + +function escapeRegExp(s) { + return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); +} + +// Blanks out comment content (keeping newlines, so line numbers stay accurate) before +// scanning for t()/i18n.t() calls. Without this, example code inside a comment — +// e.g. `// child components use qualified keys (t("dashboard.key")) once it's in the +// store` — gets matched as a real call and reported as a broken key reference, even +// though nothing actually invokes it. +function stripComments(text) { + let stripped = text.replace(/\/\*[\s\S]*?\*\//g, (m) => + m.replace(/[^\n]/g, " ") + ); + // Strip both full-line (//) and trailing (code; // ...) line comments, skipping + // any // that appears inside a ' or " string literal (e.g. a URL). + stripped = stripped + .split("\n") + .map((line) => { + let inStr = null; + for (let i = 0; i < line.length - 1; i++) { + const ch = line[i]; + if (!inStr && (ch === '"' || ch === "'")) { + inStr = ch; + } else if (inStr && ch === inStr) { + let backslashes = 0; + while (line[i - 1 - backslashes] === "\\") backslashes++; + if (backslashes % 2 === 0) { + inStr = null; + } + } else if (!inStr && ch === "/" && line[i + 1] === "/") { + return line.slice(0, i); + } + } + return line; + }) + .join("\n"); + return stripped; +} + +function checkJsonAndParity(ns, findings) { + const localeData = {}; + let anyInvalid = false; + + for (const locale of LOCALES) { + const rel = `public/locales/${locale}/${ns}.json`; + const abs = path.join(ROOT, rel); + if (!fs.existsSync(abs)) { + localeData[locale] = {}; + continue; + } + try { + localeData[locale] = JSON.parse(fs.readFileSync(abs, "utf8")); + } catch (e) { + findings.push({ + kind: "json", + file: rel, + namespace: ns, + message: `Invalid JSON: ${e.message}`, + }); + localeData[locale] = {}; + anyInvalid = true; + } + } + if (anyInvalid) return; // parity is meaningless until the JSON itself is fixed + + const allKeys = new Set(); + for (const locale of LOCALES) { + Object.keys(localeData[locale]).forEach((k) => allKeys.add(k)); + } + + const pluralBases = new Set(); + for (const key of allKeys) { + for (const suffix of PLURAL_SUFFIXES) { + if (key.endsWith(suffix)) pluralBases.add(key.slice(0, -suffix.length)); + } + } + + for (const key of allKeys) { + const isPluralVariant = PLURAL_SUFFIXES.some( + (s) => key.endsWith(s) && pluralBases.has(key.slice(0, -s.length)) + ); + if (isPluralVariant) continue; + for (const locale of LOCALES) { + if (!(key in localeData[locale])) { + findings.push({ + kind: "parity", + file: `public/locales/${locale}/${ns}.json`, + namespace: ns, + message: `Key "${key}" is missing (present in other locales).`, + }); + } + } + } + + for (const base of pluralBases) { + for (const locale of LOCALES) { + for (const requiredSuffix of REQUIRED_PLURAL_FORMS[locale]) { + const fullKey = base + requiredSuffix; + if (!(fullKey in localeData[locale])) { + findings.push({ + kind: "parity", + file: `public/locales/${locale}/${ns}.json`, + namespace: ns, + message: `Required plural form "${fullKey}" is missing for locale ${locale}.`, + }); + } + } + } + } +} + +function checkBrokenKeys(ns, srcFiles, findings) { + const enPath = path.join(ROOT, `public/locales/en-US/${ns}.json`); + let enKeys; + try { + enKeys = new Set(Object.keys(JSON.parse(fs.readFileSync(enPath, "utf8")))); + } catch { + return; // already reported by checkJsonAndParity + } + + const pattern = new RegExp( + `(?:i18n\\.)?t\\(\\s*(["'])${escapeRegExp(ns)}\\.([A-Za-z0-9_]+)\\1`, + "g" + ); + + for (const file of srcFiles) { + const rel = path.relative(ROOT, file); + let text; + try { + text = stripComments(fs.readFileSync(file, "utf8")); + } catch { + continue; + } + text.split("\n").forEach((line, idx) => { + pattern.lastIndex = 0; + let m; + while ((m = pattern.exec(line))) { + const key = m[2]; + // A key used with `{ count }` resolves at runtime to a _one/_other/etc. + // suffixed variant, not the literal base — so check for either shape. + const isPluralBase = PLURAL_SUFFIXES.some((s) => enKeys.has(key + s)); + if (!enKeys.has(key) && !isPluralBase) { + findings.push({ + kind: "brokenKey", + file: rel, + line: idx + 1, + namespace: ns, + message: `t("${ns}.${key}") has no matching key in public/locales/en-US/${ns}.json.`, + }); + } + } + }); + } +} + +function checkTsc(tscOutputFile, changedFiles, findings) { + const changedSet = new Set(changedFiles.map((f) => path.normalize(f))); + const tscErrorPattern = /^(.+?)\((\d+),(\d+)\): error (TS\d+): (.+)$/; + + for (const line of readLines(tscOutputFile)) { + const m = line.match(tscErrorPattern); + if (!m) continue; + const [, file, lineNo, , code, message] = m; + const relFile = path.normalize(file); + if (!changedSet.has(relFile)) continue; // don't gate on pre-existing, unrelated errors + findings.push({ + kind: "tsc", + file: relFile, + line: Number(lineNo), + message: `${code}: ${message}`, + }); + } +} + +function writeResults(result) { + fs.writeFileSync( + path.join(ROOT, "i18n-objective-results.json"), + JSON.stringify(result, null, 2) + "\n" + ); + console.log( + `i18n objective checks: ${result.passed ? "PASS" : "FAIL"} (${ + result.findings.length + } finding(s))` + ); +} + +function main() { + const args = parseArgs(process.argv.slice(2)); + const changedFiles = readLines(args.changedFiles); + const findings = []; + + const affectedNamespaces = new Set(); + for (const f of changedFiles) { + for (const ns of namespacesForFile(f)) affectedNamespaces.add(ns); + } + + if (affectedNamespaces.size === 0) { + writeResults({ passed: true, findings: [] }); + return; + } + + const srcFiles = listSourceFiles(path.join(ROOT, "src")); + for (const ns of affectedNamespaces) { + checkJsonAndParity(ns, findings); + checkBrokenKeys(ns, srcFiles, findings); + } + checkTsc(args.tscOutput, changedFiles, findings); + + writeResults({ passed: findings.length === 0, findings }); +} + +main(); diff --git a/ci/scripts/post_inline_comments.js b/ci/scripts/post_inline_comments.js new file mode 100644 index 0000000000..3fdf6843f4 --- /dev/null +++ b/ci/scripts/post_inline_comments.js @@ -0,0 +1,149 @@ +#!/usr/bin/env node +/* + * Deterministically posts one inline PR review comment per finding bullet in a markdown + * report, instead of relying on a Claude agent to reliably call its own inline-comment tool. + * + * Generic by design — any Claude review workflow with a similarly-shaped report can reuse + * it. Assumes a section heading followed by bullets shaped `- \`path:line\` — message`; + * skips bullets that don't match (no location to anchor to), skips paths not in the PR's + * changed-file list (GitHub rejects comments outside the diff), and de-dupes against + * existing github-actions[bot] comments at the same path+line. + * + * Usage: + * node ci/scripts/post_inline_comments.js + * --report markdown file containing the section to parse + * --section exact section heading line to find, e.g. "### 🔴 Blocking" + * --pr-files cached `gh api .../pulls//files` response (for the + * changed-file allowlist) + * --repo + * --pr + * --commit PR head commit — comments anchor to this commit + * --label short prefix identifying the source, e.g. "Localization Reviewer" + */ +const fs = require("fs"); +const { execFileSync } = require("child_process"); + +function parseArgs(argv) { + const out = {}; + for (let i = 0; i < argv.length; i++) { + const key = argv[i]; + if (key.startsWith("--")) out[key.slice(2)] = argv[++i]; + } + return out; +} + +function extractBullets(reportText, sectionHeading) { + const start = reportText.indexOf(sectionHeading); + if (start === -1) return []; + const rest = reportText.slice(start + sectionHeading.length); + const nextSection = rest.indexOf("\n### "); + const section = nextSection === -1 ? rest : rest.slice(0, nextSection); + + const bullets = []; + for (const line of section.split("\n")) { + const m = line.match(/^-\s+`([^`:]+):(\d+)`\s+—\s+(.+)$/); + if (m) { + bullets.push({ path: m[1], line: Number(m[2]), message: m[3].trim() }); + } + } + return bullets; +} + +function gh(args, input) { + return execFileSync("gh", args, { + input, + encoding: "utf8", + maxBuffer: 1024 * 1024 * 20, + }); +} + +function main() { + const args = parseArgs(process.argv.slice(2)); + const required = [ + "report", + "section", + "pr-files", + "repo", + "pr", + "commit", + "label", + ]; + const missing = required.filter((k) => !args[k]); + if (missing.length) { + console.error( + `Missing required args: ${missing.map((k) => `--${k}`).join(", ")}` + ); + process.exit(1); + } + + const reportText = fs.readFileSync(args.report, "utf8"); + const bullets = extractBullets(reportText, args.section); + if (bullets.length === 0) { + console.log( + `No parseable bullets under "${args.section}" — nothing to inline-comment.` + ); + return; + } + + const prFiles = JSON.parse(fs.readFileSync(args["pr-files"], "utf8")); + const changedPaths = new Set(prFiles.map((f) => f.filename)); + + const existing = JSON.parse( + gh(["api", `repos/${args.repo}/pulls/${args.pr}/comments`, "--paginate"]) + ); + const existingKeys = new Set( + existing + .filter((c) => c.user && c.user.login === "github-actions[bot]") + .map((c) => `${c.path}:${c.line ?? c.original_line}`) + ); + + let posted = 0; + let skippedNotInDiff = 0; + let skippedDuplicate = 0; + let failed = 0; + + for (const b of bullets) { + const key = `${b.path}:${b.line}`; + if (!changedPaths.has(b.path)) { + console.log(`Skipping (file not in PR diff): ${key}`); + skippedNotInDiff++; + continue; + } + if (existingKeys.has(key)) { + console.log(`Skipping (already commented): ${key}`); + skippedDuplicate++; + continue; + } + const payload = JSON.stringify({ + body: `**${args.label}:** ${b.message}`, + commit_id: args.commit, + path: b.path, + line: b.line, + side: "RIGHT", + }); + try { + gh( + [ + "api", + "-X", + "POST", + `repos/${args.repo}/pulls/${args.pr}/comments`, + "--input", + "-", + ], + payload + ); + posted++; + } catch (e) { + console.log(`Failed to post inline comment for ${key}: ${e.message}`); + failed++; + } + } + + console.log( + `Inline comments: ${posted} posted, ${skippedNotInDiff} skipped (not in diff), ` + + `${skippedDuplicate} skipped (duplicate), ${failed} failed.` + ); +} + +main(); diff --git a/cypress/e2e/blocks/tests/blocks.spec.js b/cypress/e2e/blocks/tests/blocks.spec.js index 49b7f50260..81ec704f20 100644 --- a/cypress/e2e/blocks/tests/blocks.spec.js +++ b/cypress/e2e/blocks/tests/blocks.spec.js @@ -67,7 +67,7 @@ describe("All Blocks Tests", () => { AllBlocksPage.searchBlocksInput.find("input").clear(); AllBlocksPage.searchBlocksInput.type("Non Existent Block"); cy.contains( - "Your search “Non Existent Block” could not find any results" + 'Your search "Non Existent Block" could not find any results' ).should("exist"); }); diff --git a/cypress/e2e/code/all-files-page.spec.js b/cypress/e2e/code/all-files-page.spec.js index 78465de85c..56a21fdfe6 100644 --- a/cypress/e2e/code/all-files-page.spec.js +++ b/cypress/e2e/code/all-files-page.spec.js @@ -108,7 +108,7 @@ describe("All Files Page", () => { cy.getBySelector("NoResultsContainer").should("be.visible"); cy.getBySelector("NoResultsContainer").should( "contain.text", - `Your search “xxx---xxx---xxx” could not find any results`, + `Your search "xxx---xxx---xxx" could not find any results`, matchcase ); }); diff --git a/cypress/e2e/i18n/sub-app-translations.spec.js b/cypress/e2e/i18n/sub-app-translations.spec.js new file mode 100644 index 0000000000..90e9068a8e --- /dev/null +++ b/cypress/e2e/i18n/sub-app-translations.spec.js @@ -0,0 +1,274 @@ +// Smoke test: for each sub-app, confirm its landing route actually renders +// translated (non-English) text for a representative sample of locales, +// rather than a hardcoded English string or a broken/blank render caused by +// a missing translation key. +// +// Locale is driven entirely client-side (navigator.language + the +// "app_locale" localStorage key i18next-browser-languagedetector reads) so +// no shared server-side state is touched. This intentionally does NOT use +// a locale switcher UI -- locale selection is done in accounts-ui, not +// manager-ui. +// +// The shared Cypress test account has a persisted `prefs.locale`, and +// LoadInstance's boot logic (src/shell/components/load-instance/index.js) +// prefers that over navigator.language on every full page load: +// targetLocale = userLocale || toSupportedLocale(navigator.language) +// so the navigator.language override alone would get silently overridden +// after the GET .../users/:zuid fetchUser call resolves. Rather than mutate +// the real account's prefs (shared, would race other specs/CI runners), we +// intercept that response and strip `locale` from it so userLocale is falsy +// and the app falls through to navigator.language -- the real request still +// hits the backend, only what the app receives is edited. See +// src/shell/store/user.js (fetchUser) and src/shell/i18n/index.ts. +// +// Expected strings are read from the actual locale JSON at test time +// (instead of being duplicated as literals here), so this spec doesn't need +// to be updated when copy changes -- only when a key is renamed or removed. + +const LOCALES = ["es-ES", "zh-CN", "hi-IN"]; + +// One statically-rendered (seed-data-independent), data-cy'd, translated +// element per sub-app's landing route. +const SUB_APPS = [ + { + app: "blocks", + path: "/blocks", + ns: "blocks", + selector: "allBlocksTitle", + key: "allBlocksTitle", + }, + { + app: "schema", + path: "/schema", + ns: "schema", + selector: "create-model-button-all-models", + key: "createModel", + }, + // marketplace, content-editor, code-editor, and settings all render their sidebar + // header title through the shared AppSideBar component, hence the shared selector. + { + app: "marketplace", + path: "/apps", + ns: "marketplace", + selector: "appSidebarHeaderTitle", + key: "headerTitleApps", + }, + { + app: "content-editor", + path: "/content", + ns: "content", + selector: "appSidebarHeaderTitle", + key: "navContentTitle", + }, + { + app: "code-editor", + path: "/code", + ns: "code", + selector: "appSidebarHeaderTitle", + key: "headerTitle", + }, + { + app: "settings", + path: "/settings", + ns: "shell", + selector: "appSidebarHeaderTitle", + key: "navSettings", + }, + { + app: "media", + path: "/media", + ns: "common", + selector: "fileUploadButton", + key: "upload", + }, + { + app: "release", + path: "/release", + ns: "release", + selector: "release-createBtn", + key: "createRelease", + }, + { + app: "seo", + path: "/redirects", + ns: "common", + selector: "RedirectActionCreateButton", + key: "create", + }, + { + app: "home", + path: "/launchpad", + ns: "dashboard", + selector: "dashboardInstanceSummary", + key: "instanceSummary", + }, + // Assumes the dev instance has no lead submissions yet, which renders the + // GetStarted empty state instead of the leads table. + { + app: "leads", + path: "/leads", + ns: "leads", + selector: "leadsGetStartedHeading", + key: "captureLeadsOnYourInstance", + }, +]; + +function visitWithLocale(path, locale) { + // Strip the account's persisted locale pref from the fetchUser response so + // LoadInstance's boot logic falls through to navigator.language instead. + cy.intercept("GET", "**/users/*", (req) => { + req.continue((res) => { + const prefs = res.body?.data?.prefs; + if (typeof prefs !== "string") return; + try { + const parsed = JSON.parse(prefs); + delete parsed.locale; + res.body.data.prefs = JSON.stringify(parsed); + } catch { + // prefs wasn't valid JSON -- leave the response untouched. + } + }); + }); + + cy.visit(path, { + onBeforeLoad(win) { + Object.defineProperty(win.navigator, "language", { value: locale }); + Object.defineProperty(win.navigator, "languages", { value: [locale] }); + win.localStorage.setItem("app_locale", locale); + }, + }); +} + +// Inverse of visitWithLocale above: injects a locale into the fetchUser +// response's prefs instead of stripping it, so LoadInstance resolves to the +// DB preference (src/shell/components/load-instance/index.js:55-57 -- +// `userLocale || navigator.language`) rather than navigator.language. Clears +// any cached "app_locale" first so a pass can only be explained by the DB +// value actually driving the resolved language, not a stale local cache. +function visitWithDbLocale(path, dbLocale, navigatorLocale = "en-US") { + cy.intercept("GET", "**/users/*", (req) => { + req.continue((res) => { + const prefs = res.body?.data?.prefs; + if (typeof prefs !== "string") return; + try { + const parsed = JSON.parse(prefs); + parsed.locale = dbLocale; + res.body.data.prefs = JSON.stringify(parsed); + } catch { + // prefs wasn't valid JSON -- leave the response untouched. + } + }); + }); + + cy.visit(path, { + onBeforeLoad(win) { + Object.defineProperty(win.navigator, "language", { + value: navigatorLocale, + }); + Object.defineProperty(win.navigator, "languages", { + value: [navigatorLocale], + }); + win.localStorage.removeItem("app_locale"); + }, + }); +} + +describe("sub-app translations", () => { + // cy.blockLock() and cy.blockAnnouncements() are already applied globally + // for every test in cypress/support/e2e.js; only auth needs to happen here. + beforeEach(() => { + cy.login(); + }); + + SUB_APPS.forEach(({ app, path, ns, selector, key }) => { + LOCALES.forEach((locale) => { + it(`renders ${app} in ${locale}`, () => { + cy.readFile(`public/locales/${locale}/${ns}.json`).then((strings) => { + const expected = strings[key]; + expect(expected, `${ns}.${key} in ${locale}`).to.be.a("string").and + .not.be.empty; + + visitWithLocale(path, locale); + + cy.getBySelector(selector).should("contain.text", expected); + }); + }); + }); + }); + + // The matrix above always strips the DB pref so navigator.language wins, + // to stay independent of the shared test account's real prefs. These cover + // the DB-preference and persistence paths that strategy can't reach. + const contentEditor = SUB_APPS.find((a) => a.app === "content-editor"); + const schema = SUB_APPS.find((a) => a.app === "schema"); + + it("DB locale preference wins over navigator.language", () => { + cy.readFile(`public/locales/es-ES/${contentEditor.ns}.json`).then( + (strings) => { + const expected = strings[contentEditor.key]; + expect( + expected, + `${contentEditor.ns}.${contentEditor.key} in es-ES` + ).to.be.a("string").and.not.be.empty; + + visitWithDbLocale(contentEditor.path, "es-ES", "en-US"); + + cy.getBySelector(contentEditor.selector).should( + "contain.text", + expected + ); + } + ); + }); + + it("locale persists across in-app navigation", () => { + cy.readFile(`public/locales/es-ES/${contentEditor.ns}.json`).then( + (contentStrings) => { + cy.readFile(`public/locales/es-ES/${schema.ns}.json`).then( + (schemaStrings) => { + visitWithDbLocale(contentEditor.path, "es-ES", "en-US"); + cy.getBySelector(contentEditor.selector).should( + "contain.text", + contentStrings[contentEditor.key] + ); + + // Client-side route change -- LoadInstance stays mounted, no + // fetchUser refetch -- so this proves the resolved locale + // carries over rather than being re-derived per route. + cy.getBySelector("SchemaApp").click(); + + cy.getBySelector(schema.selector).should( + "contain.text", + schemaStrings[schema.key] + ); + } + ); + } + ); + }); + + it("locale persists across a page refresh", () => { + cy.readFile(`public/locales/es-ES/${contentEditor.ns}.json`).then( + (strings) => { + const expected = strings[contentEditor.key]; + + visitWithDbLocale(contentEditor.path, "es-ES", "en-US"); + cy.getBySelector(contentEditor.selector).should( + "contain.text", + expected + ); + + // navigator.language reverts to its real default on reload (the + // onBeforeLoad stub doesn't carry over) -- staying Spanish here only + // works if the cached app_locale + intercepted DB pref persisted, + // not because of the navigator stub. + cy.reload(); + + cy.getBySelector(contentEditor.selector).should( + "contain.text", + expected + ); + } + ); + }); +}); diff --git a/cypress/e2e/reports/activity-log/activity-log.spec.js b/cypress/e2e/reports/activity-log/activity-log.spec.js index 1518ce4612..f93d14a38f 100644 --- a/cypress/e2e/reports/activity-log/activity-log.spec.js +++ b/cypress/e2e/reports/activity-log/activity-log.spec.js @@ -251,7 +251,7 @@ describe("Reports > Activity Log > Home", () => { }); it("Displays Users Tab empty state", () => { cy.visit("/reports/activity-log/users?from=2099-01-01&to=2099-01-02"); - cy.contains("No Users Found"); + cy.contains("No users found"); }); it("Displays Timeline Tab empty state", () => { cy.visit("/reports/activity-log/timeline?from=2099-01-01&to=2099-01-02"); @@ -264,7 +264,7 @@ describe("Reports > Activity Log > Home", () => { it("Resets filters", () => { cy.visit("/reports/activity-log/resources?from=2099-01-01&to=2099-01-02"); - cy.contains("RESET FILTERS").click(); + cy.contains("Reset Filters").click(); const today = new Date(); const threeMonthsAgo = addMonths(today, -3); @@ -296,7 +296,7 @@ describe("Reports > Activity Log > Home", () => { cy.visit("/reports/activity-log/resources?from=2099-01-01&to=2099-01-02"); cy.wait("@request"); - cy.contains("RETRY").click(); + cy.contains("Retry").click(); cy.wait("@request"); }); }); diff --git a/cypress/e2e/settings/workflows.spec.js b/cypress/e2e/settings/workflows.spec.js index 18433b669e..2fbffbbc56 100644 --- a/cypress/e2e/settings/workflows.spec.js +++ b/cypress/e2e/settings/workflows.spec.js @@ -212,8 +212,7 @@ describe("Create New Status Label", { retries: 1 }, () => { expect(createdStatusLabel).to.include({ name: TEST_DATA.new.name, description: TEST_DATA.new.description, - color: colorMenu.find((color) => color?.label === TEST_DATA.new.color) - ?.value, + color: resolveColorValue(TEST_DATA.new.color), allowPublish: TEST_DATA.new.allowPublish, }); expect(createdStatusLabel.addPermissionRoles).to.have.lengthOf(1); @@ -285,9 +284,7 @@ describe("Edit Status Label", { retries: 1 }, () => { expect(updatedLabel).to.deep.include({ name: TEST_DATA.edited.name, description: TEST_DATA.edited.description, - color: colorMenu.find( - (color) => color?.label === TEST_DATA.edited.color - )?.value, + color: resolveColorValue(TEST_DATA.edited.color), }); } ); @@ -492,7 +489,7 @@ Cypress.Commands.add("createTestData", () => { method: "POST", body: { ...label, - color: colorMenu.find((color) => color?.label === label.color)?.value, + color: resolveColorValue(label.color), }, }); }); @@ -508,6 +505,15 @@ Cypress.Commands.add("getStatusLabels", () => { }); }); +// colorMenu's `label` is an i18n key (e.g. "settings.colorGrey"), not display +// text -- resolve TEST_DATA's plain color name ("Grey") to the matching entry +// the same way the app's key naming convention does. +function resolveColorValue(colorName) { + return colorMenu.find( + (color) => color?.label === `settings.color${colorName}` + )?.value; +} + function parseStatusLabels(statusLabels = []) { const { active, deactivated } = statusLabels.reduce( (acc, curr) => { diff --git a/etc/nginx.conf b/etc/nginx.conf index 007f1364dd..fcc8d6eed5 100644 --- a/etc/nginx.conf +++ b/etc/nginx.conf @@ -50,6 +50,10 @@ http { root /www; } + location ~ \.json$ { + add_header Cache-Control "no-cache"; + } + # Enforce HTTPS if ($http_x_forwarded_proto = "http") { return 301 https://$host$request_uri; diff --git a/i18next-parser.config.js b/i18next-parser.config.js new file mode 100644 index 0000000000..8cde328ec9 --- /dev/null +++ b/i18next-parser.config.js @@ -0,0 +1,59 @@ +const fs = require("fs"); +const path = require("path"); + +// Cache of each locale/namespace's on-disk catalog *before* this run +// overwrites it, so defaultValue can seed brand-new plural variants +// sensibly instead of falling back straight to the bare key name. +// +// Note: i18next-parser strips the plural suffix before calling defaultValue +// (it's applied later, when placing the entry) — `key` here is always the +// bare form, for every plural variant of a given call site. That's exactly +// what we want to look up: if a key already has a working non-suffixed +// value (e.g. "itemListSelectedCount": "{{count}} selected"), a brand-new +// `_one`/`_other` variant should seed from it, not from the literal key +// name — i18next prefers suffixed forms once they exist, so seeding with +// the key name would regress already-working pluralized UI text to showing +// the raw key to users. +const existingCatalogs = {}; +function readExistingCatalog(locale, namespace) { + const cacheKey = `${locale}/${namespace}`; + if (!(cacheKey in existingCatalogs)) { + const filePath = path.join( + __dirname, + "public/locales", + locale, + `${namespace}.json` + ); + try { + existingCatalogs[cacheKey] = JSON.parse( + fs.readFileSync(filePath, "utf8") + ); + } catch { + existingCatalogs[cacheKey] = {}; + } + } + return existingCatalogs[cacheKey]; +} + +module.exports = { + locales: ["en-US", "es-ES", "hi-IN", "zh-CN", "ru-RU", "nl-NL"], + defaultNamespace: "common", + defaultValue: (locale, namespace, key, value) => + value || readExistingCatalog(locale, namespace)[key] || key, + // Keep everything the parser can't statically resolve — e.g. computed keys + // like `t(APP_DISPLAY_KEY[name])` or the module-level key-map pattern from + // LOCALIZATION_PLAN.md. With `false` this parser would delete those entries + // since it can't see they're still referenced. + keepRemoved: true, + output: "public/locales/$LOCALE/$NAMESPACE.json", + input: ["src/**/*.{ts,tsx,js,jsx}"], + namespaceSeparator: ".", + keySeparator: false, + pluralSeparator: "_", + sort: true, + lexers: { + // Many .js files in this codebase contain JSX (class components, legacy + // views) — the default JavascriptLexer isn't JSX-aware, so override it. + js: [{ lexer: "JsxLexer" }], + }, +}; diff --git a/package-lock.json b/package-lock.json index 4abe163cd4..68424589b8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,7 +26,7 @@ "@sentry/tracing": "^7.120.4", "@tinymce/tinymce-react": "^4.3.0", "@welldone-software/why-did-you-render": "^6.1.1", - "@zesty-io/material": "^0.16.2", + "@zesty-io/material": "^0.16.3", "chart.js": "^3.8.0", "chartjs-adapter-date-fns": "^3.0.0", "chartjs-plugin-datalabels": "^2.0.0", @@ -36,6 +36,11 @@ "csv-parse": "^4.16.0", "date-fns-tz": "^1.3.8", "flatpickr": "^4.6.9", + "i18next": "^26.3.1", + "i18next-browser-languagedetector": "^8.2.1", + "i18next-chained-backend": "^5.0.4", + "i18next-http-backend": "^4.0.0", + "i18next-localstorage-backend": "^4.3.1", "idb-keyval": "^5.0.6", "ismounted": "^0.1.8", "js-beautify": "^1.14.0", @@ -53,6 +58,7 @@ "react-dom": "^18.0.0", "react-dropzone": "^14.2.2", "react-flatpickr": "^3.10.7", + "react-i18next": "^17.0.8", "react-measure": "^2.5.2", "react-monaco-editor": "^0.47.0", "react-number-format": "^5.3.1", @@ -111,6 +117,7 @@ "file-loader": "^6.2.0", "html-webpack-plugin": "^5.3.1", "husky": "^7.0.0", + "i18next-parser": "^9.4.0", "less": "^4.1.1", "less-loader": "^10.0.0", "mini-css-extract-plugin": "^2.0.0", @@ -2085,9 +2092,10 @@ } }, "node_modules/@babel/runtime": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.1.tgz", - "integrity": "sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", + "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -3315,6 +3323,19 @@ "react": ">=16.x" } }, + "node_modules/@gulpjs/to-absolute-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@gulpjs/to-absolute-glob/-/to-absolute-glob-4.0.0.tgz", + "integrity": "sha512-kjotm7XJrJ6v+7knhPaRgaT6q8F8K2jiafwYdNHLzmV0uGLuZY43FK6smNSHUPrhq5kX2slCUy+RGG/xGqmIKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-negated-glob": "^1.0.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/@hapi/hoek": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", @@ -5259,6 +5280,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/node": { "version": "22.15.14", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.14.tgz", @@ -5442,6 +5470,13 @@ "@types/node": "*" } }, + "node_modules/@types/symlink-or-copy": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/symlink-or-copy/-/symlink-or-copy-1.2.2.tgz", + "integrity": "sha512-MQ1AnmTLOncwEf9IVU+B2e4Hchrku5N67NkgcAHW0p3sdzPe0FNMANxEm6OJUzPniEQGkeT3OROLlCwZJLWFZA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/tinymce": { "version": "4.6.9", "resolved": "https://registry.npmjs.org/@types/tinymce/-/tinymce-4.6.9.tgz", @@ -5986,9 +6021,9 @@ "license": "MIT" }, "node_modules/@zesty-io/material": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@zesty-io/material/-/material-0.16.2.tgz", - "integrity": "sha512-yy4AV+rhJTw8QaZ+A4PVOZ6ffON/oqCcBou5dtxWlo13z15RIt/mWk+epog89wgCSSUSydcCNNAhNYRnoDvOhQ==", + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@zesty-io/material/-/material-0.16.3.tgz", + "integrity": "sha512-6DSgYEUbW75t3mGbdnsYLHa7iQ6ieEoS53nP5iMPQwyYiHaooNnC9FxWpErfsoM0doXXOggT/ZcGBUAyJ1fykA==", "license": "MIT", "dependencies": { "@emotion/react": "^11.14.0", @@ -6481,6 +6516,21 @@ "node": ">=10" } }, + "node_modules/b4a": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.8.1.tgz", + "integrity": "sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==", + "dev": true, + "license": "Apache-2.0", + "peerDependencies": { + "react-native-b4a": "*" + }, + "peerDependenciesMeta": { + "react-native-b4a": { + "optional": true + } + } + }, "node_modules/babel-loader": { "version": "8.4.1", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.4.1.tgz", @@ -6589,6 +6639,21 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "node_modules/bare-events": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.9.1.tgz", + "integrity": "sha512-Z0oHEHAFDZkffN8Qc39zNZjQlMDkPJRyyyZieU1VH7u8c5S+qHZ2S8ixdKIAxEjfHO7FJxXmJWgteOghVanIsg==", + "dev": true, + "license": "Apache-2.0", + "peerDependencies": { + "bare-abort-controller": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + } + } + }, "node_modules/base16": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", @@ -6672,6 +6737,43 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "node_modules/blob-util": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", @@ -6929,6 +7031,92 @@ "node": ">=8" } }, + "node_modules/broccoli-node-api": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/broccoli-node-api/-/broccoli-node-api-1.7.0.tgz", + "integrity": "sha512-QIqLSVJWJUVOhclmkmypJJH9u9s/aWH4+FH6Q6Ju5l+Io4dtwqdPUNmDfw40o6sxhbZHhqGujDJuHTML1wG8Yw==", + "dev": true, + "license": "MIT" + }, + "node_modules/broccoli-node-info": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/broccoli-node-info/-/broccoli-node-info-2.2.0.tgz", + "integrity": "sha512-VabSGRpKIzpmC+r+tJueCE5h8k6vON7EIMMWu6d/FyPdtijwLQ7QvzShEw+m3mHoDzUaj/kiZsDYrS8X2adsBg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "8.* || >= 10.*" + } + }, + "node_modules/broccoli-output-wrapper": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/broccoli-output-wrapper/-/broccoli-output-wrapper-3.2.5.tgz", + "integrity": "sha512-bQAtwjSrF4Nu0CK0JOy5OZqw9t5U0zzv2555EA/cF8/a8SLDTIetk9UgrtMVw7qKLKdSpOZ2liZNeZZDaKgayw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fs-extra": "^8.1.0", + "heimdalljs-logger": "^0.1.10", + "symlink-or-copy": "^1.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + } + }, + "node_modules/broccoli-output-wrapper/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/broccoli-output-wrapper/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/broccoli-output-wrapper/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/broccoli-plugin": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/broccoli-plugin/-/broccoli-plugin-4.0.7.tgz", + "integrity": "sha512-a4zUsWtA1uns1K7p9rExYVYG99rdKeGRymW0qOCNkvDPHQxVi3yVyJHhQbM3EZwdt2E0mnhr5e0c/bPpJ7p3Wg==", + "dev": true, + "license": "MIT", + "dependencies": { + "broccoli-node-api": "^1.7.0", + "broccoli-output-wrapper": "^3.2.5", + "fs-merger": "^3.2.1", + "promise-map-series": "^0.3.0", + "quick-temp": "^0.1.8", + "rimraf": "^3.0.2", + "symlink-or-copy": "^1.3.1" + }, + "engines": { + "node": "10.* || >= 12.*" + } + }, "node_modules/brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", @@ -7378,6 +7566,228 @@ "node": ">= 0.8.0" } }, + "node_modules/cheerio": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.2.0.tgz", + "integrity": "sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "encoding-sniffer": "^0.2.1", + "htmlparser2": "^10.1.0", + "parse5": "^7.3.0", + "parse5-htmlparser2-tree-adapter": "^7.1.0", + "parse5-parser-stream": "^7.1.2", + "undici": "^7.19.0", + "whatwg-mimetype": "^4.0.0" + }, + "engines": { + "node": ">=20.18.1" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cheerio-select/node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cheerio-select/node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/cheerio-select/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/cheerio-select/node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/cheerio-select/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/cheerio/node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/cheerio/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/cheerio/node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/cheerio/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/cheerio/node_modules/htmlparser2": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", + "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "entities": "^7.0.1" + } + }, + "node_modules/cheerio/node_modules/htmlparser2/node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/cheerio/node_modules/undici": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.29.0.tgz", + "integrity": "sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", @@ -7813,7 +8223,6 @@ "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true, - "optional": true, "engines": { "node": ">=0.1.90" } @@ -9272,6 +9681,20 @@ "node": ">= 0.8" } }, + "node_modules/encoding-sniffer": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz", + "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "^0.6.3", + "whatwg-encoding": "^3.1.1" + }, + "funding": { + "url": "https://github.com/fb55/encoding-sniffer?sponsor=1" + } + }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -9295,6 +9718,13 @@ "node": ">=10.13.0" } }, + "node_modules/ensure-posix-path": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ensure-posix-path/-/ensure-posix-path-1.1.1.tgz", + "integrity": "sha512-VWU0/zXzVbeJNXvME/5EmLuEj2TauvoaTz6aFYK1Z92JCBlDlZ3Gu0tuGR42kpW1754ywTs+QB0g5TP0oj9Zaw==", + "dev": true, + "license": "ISC" + }, "node_modules/entities": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", @@ -9330,6 +9760,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/eol": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/eol/-/eol-0.9.1.tgz", + "integrity": "sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==", + "dev": true, + "license": "MIT" + }, "node_modules/errno": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", @@ -9685,6 +10122,16 @@ "node": ">=0.8.x" } }, + "node_modules/events-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.7.0" + } + }, "node_modules/evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", @@ -9861,6 +10308,13 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true, + "license": "MIT" + }, "node_modules/fast-glob": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", @@ -10453,12 +10907,92 @@ "node": ">=10" } }, + "node_modules/fs-merger": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/fs-merger/-/fs-merger-3.2.1.tgz", + "integrity": "sha512-AN6sX12liy0JE7C2evclwoo0aCG3PFulLjrTLsJpWh/2mM+DinhpSGqYLbHBBbIW1PLRNcFhJG8Axtz8mQW3ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "broccoli-node-api": "^1.7.0", + "broccoli-node-info": "^2.1.0", + "fs-extra": "^8.0.1", + "fs-tree-diff": "^2.0.1", + "walk-sync": "^2.2.0" + } + }, + "node_modules/fs-merger/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-merger/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/fs-merger/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/fs-mkdirp-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-2.0.1.tgz", + "integrity": "sha512-UTOY+59K6IA94tec8Wjqm0FSh5OVudGNB0NL/P6fB3HiE3bYOY3VYBGijsnOHNkQSwC1FKkU77pmq7xp9CskLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.8", + "streamx": "^2.12.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/fs-readdir-recursive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", "dev": true }, + "node_modules/fs-tree-diff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fs-tree-diff/-/fs-tree-diff-2.0.1.tgz", + "integrity": "sha512-x+CfAZ/lJHQqwlD64pYM5QxWjzWhSjroaVsr8PW831zOApL55qPibed0c+xebaLWVr2BnHFoHdrwOv8pzt8R5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/symlink-or-copy": "^1.2.0", + "heimdalljs-logger": "^0.1.7", + "object-assign": "^4.1.0", + "path-posix": "^1.0.0", + "symlink-or-copy": "^1.1.8" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -10666,6 +11200,39 @@ "node": ">= 6" } }, + "node_modules/glob-stream": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-8.0.3.tgz", + "integrity": "sha512-fqZVj22LtFJkHODT+M4N1RJQ3TjnnQhfE9GwZI8qXscYarnhpip70poMldRnP8ipQ/w0B621kOhfc53/J9bd/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@gulpjs/to-absolute-glob": "^4.0.0", + "anymatch": "^3.1.3", + "fastq": "^1.13.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "is-negated-glob": "^1.0.0", + "normalize-path": "^3.0.0", + "streamx": "^2.12.5" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-stream/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/glob-to-regex.js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.0.1.tgz", @@ -10786,6 +11353,16 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, + "node_modules/gulp-sort": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/gulp-sort/-/gulp-sort-2.0.0.tgz", + "integrity": "sha512-MyTel3FXOdh1qhw1yKhpimQrAmur9q1X0ZigLmCOxouQD+BD3za9/89O+HfbgBQvvh4igEbp0/PUWO+VqGYG1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "through2": "^2.0.1" + } + }, "node_modules/handle-thing": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", @@ -10922,6 +11499,51 @@ "he": "bin/he" } }, + "node_modules/heimdalljs": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/heimdalljs/-/heimdalljs-0.2.6.tgz", + "integrity": "sha512-o9bd30+5vLBvBtzCPwwGqpry2+n0Hi6H1+qwt6y+0kwRHGGF8TFIhJPmnuM0xO97zaKrDZMwO/V56fAnn8m/tA==", + "dev": true, + "license": "MIT", + "dependencies": { + "rsvp": "~3.2.1" + } + }, + "node_modules/heimdalljs-logger": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/heimdalljs-logger/-/heimdalljs-logger-0.1.10.tgz", + "integrity": "sha512-pO++cJbhIufVI/fmB/u2Yty3KJD0TqNPecehFae0/eps0hkZ3b4Zc/PezUMOpYuHFQbA7FxHZxa305EhmjLj4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^2.2.0", + "heimdalljs": "^0.2.6" + } + }, + "node_modules/heimdalljs-logger/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/heimdalljs-logger/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/heimdalljs/node_modules/rsvp": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.2.1.tgz", + "integrity": "sha512-Rf4YVNYpKjZ6ASAmibcwTNciQ5Co5Ztq6iZPEykHpkoflnD/K5ryE/rHehFsTm4NJj8nKDhbi3eKBWGogmNnkg==", + "dev": true, + "license": "MIT" + }, "node_modules/history": { "version": "4.10.1", "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", @@ -11043,6 +11665,15 @@ "node": ">= 12" } }, + "node_modules/html-parse-stringify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-4.0.1.tgz", + "integrity": "sha512-0zHsZJrK7S3K2aucXWL6ycoYJ/iNtIcFHC/nYQgFklPtrv5LpJctIiSCroWZWeuoXvuyFdzp6KzjJQ+OT5MfFw==", + "license": "MIT", + "funding": { + "url": "https://locize.com" + } + }, "node_modules/html-webpack-plugin": { "version": "5.6.3", "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz", @@ -11249,12 +11880,651 @@ "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.1.0.tgz", "integrity": "sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==" }, + "node_modules/i18next": { + "version": "26.3.6", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-26.3.6.tgz", + "integrity": "sha512-Bu5Z2nAXgfVyM8xvW3jk9EKRIuX37PudsrBViThNFx7CR7aaYTpP01cxNB/E4c4UUzTDiAZRstEhsRfPOL/8xA==", + "funding": [ + { + "type": "individual", + "url": "https://www.locize.com/i18next" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + }, + { + "type": "individual", + "url": "https://www.locize.com" + } + ], + "license": "MIT", + "peerDependencies": { + "typescript": "^5 || ^6 || ^7" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/i18next-browser-languagedetector": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-8.2.1.tgz", + "integrity": "sha512-bZg8+4bdmaOiApD7N7BPT9W8MLZG+nPTOFlLiJiT8uzKXFjhxw4v2ierCXOwB5sFDMtuA5G4kgYZ0AznZxQ/cw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.2" + } + }, + "node_modules/i18next-chained-backend": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/i18next-chained-backend/-/i18next-chained-backend-5.0.6.tgz", + "integrity": "sha512-oYo86EnjkKs1+osKHCFyIi3Yw7UebEHxMgVOJ1OpgmpL4y9s46Zr9pJHpqWwlxK8Vt//cER9Sx2Tfmx3awrJQA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.4" + } + }, + "node_modules/i18next-http-backend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-4.0.1.tgz", + "integrity": "sha512-O+7MwPCJIKCu68vho8JtD1HF8QHyMPzoChIDFfYCrpaDqX6oq3RqASujnpKEdnNCEOb+kLMOHTNTcGKpj7B1BA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/i18next-localstorage-backend": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/i18next-localstorage-backend/-/i18next-localstorage-backend-4.3.2.tgz", + "integrity": "sha512-fBXOGTcUrS7ueD6W/I/+ruByGEiZlxjNU1xlRTCVtMzBqoPxH+xa1i/KXp3Gxy0gBQlX6Ni9WU06LXGLdJHIvg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.4" + } + }, + "node_modules/i18next-parser": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/i18next-parser/-/i18next-parser-9.4.0.tgz", + "integrity": "sha512-SLQJGDj/baBIB9ALmJVXSOXWh3Zn9+wH7J2IuQ4rvx8yuQYpUWitmt8cHFjj6FExjgr8dHfd1SGeQgkowXDO1Q==", + "deprecated": "Project is deprecated, use i18next-cli instead", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.25.0", + "broccoli-plugin": "^4.0.7", + "cheerio": "^1.0.0", + "colors": "^1.4.0", + "commander": "^12.1.0", + "eol": "^0.9.1", + "esbuild": "^0.25.0", + "fs-extra": "^11.2.0", + "gulp-sort": "^2.0.0", + "i18next": "^23.5.1 || ^24.2.0", + "js-yaml": "^4.1.0", + "lilconfig": "^3.1.3", + "rsvp": "^4.8.5", + "sort-keys": "^5.0.0", + "typescript": "^5.0.4", + "vinyl": "^3.0.0", + "vinyl-fs": "^4.0.0" + }, + "bin": { + "i18next": "bin/cli.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || ^22.0.0", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/i18next-parser/node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/i18next-parser/node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/i18next-parser/node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/i18next-parser/node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/i18next-parser/node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/i18next-parser/node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/i18next-parser/node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/i18next-parser/node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/i18next-parser/node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/i18next-parser/node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/i18next-parser/node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/i18next-parser/node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/i18next-parser/node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/i18next-parser/node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/i18next-parser/node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/i18next-parser/node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/i18next-parser/node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/i18next-parser/node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/i18next-parser/node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/i18next-parser/node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/i18next-parser/node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/i18next-parser/node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/i18next-parser/node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/i18next-parser/node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/i18next-parser/node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/i18next-parser/node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/i18next-parser/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/i18next-parser/node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "node_modules/i18next-parser/node_modules/fs-extra": { + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.4.0.tgz", + "integrity": "sha512-EQsFzMUJkCKGr1ePqlYADkIUmHW1s3ZXr5Yqy6wbGrfUCphpl2maM/kyOIRA2HpP3AaFQTZXD4ldjek+nccddA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/i18next-parser/node_modules/i18next": { + "version": "24.2.3", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-24.2.3.tgz", + "integrity": "sha512-lfbf80OzkocvX7nmZtu7nSTNbrTYR52sLWxPtlXX1zAhVw8WEnFk4puUkCR4B1dNQwbSpEHHHemcZu//7EcB7A==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://locize.com" + }, + { + "type": "individual", + "url": "https://locize.com/i18next.html" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + } + ], + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.26.10" + }, + "peerDependencies": { + "typescript": "^5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, - "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -11732,6 +13002,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-network-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", @@ -11978,6 +13258,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-weakmap": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", @@ -12514,6 +13804,16 @@ "node": "> 0.8" } }, + "node_modules/lead": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-4.0.0.tgz", + "integrity": "sha512-DpMa59o5uGUWWjruMp71e6knmwKU3jRBBn1kjuLWN9EeIOxNeSAwvHf03WIl8g/ZMR2oSQC9ej3yeLBwdDc/pg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/less": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/less/-/less-4.3.0.tgz", @@ -12579,6 +13879,19 @@ "immediate": "~3.0.5" } }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -12875,6 +14188,20 @@ "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==", "dev": true }, + "node_modules/matcher-collection": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/matcher-collection/-/matcher-collection-2.0.1.tgz", + "integrity": "sha512-daE62nS2ZQsDg9raM0IlZzLmI2u+7ZapXBwdoeBUKAYERPDDIc0qNqA8E0Rp2D+gspKR7BgIFP52GeujaGXWeQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@types/minimatch": "^3.0.3", + "minimatch": "^3.0.2" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -13308,6 +14635,16 @@ "node": ">=10" } }, + "node_modules/mktemp": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/mktemp/-/mktemp-2.0.3.tgz", + "integrity": "sha512-Bq72L2oi/isYSy0guN9ihNhAMQOyZEwts+Bezm/1U+wh8bQ+fVQ2ZiUoJJjceOMiiKv/BUrA0NF98jFc81CB6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "20 || 22 || 24" + } + }, "node_modules/module-definition": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-6.0.2.tgz", @@ -13669,6 +15006,19 @@ "node": ">=6" } }, + "node_modules/now-and-later": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-3.0.0.tgz", + "integrity": "sha512-pGO4pzSdaxhWTGkfSfHx3hVzJVslFPwBp2Myq9MYN/ChfJZF87ochMAXnvz6/58RJSf5ik2q9tXprBBrk2cpcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -14168,6 +15518,75 @@ "node": ">= 0.10" } }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", + "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "domhandler": "^5.0.3", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/parse5-parser-stream": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", + "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -14230,6 +15649,13 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "node_modules/path-posix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/path-posix/-/path-posix-1.0.0.tgz", + "integrity": "sha512-1gJ0WpNIiYcQydgg3Ed8KzvIqTsDpNwq+cjBCssvBtuTWjEqY1AW+i+OepiEMqDCzyro9B2sLAe4RBPajMYFiA==", + "dev": true, + "license": "ISC" + }, "node_modules/path-scurry": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", @@ -14691,6 +16117,16 @@ "asap": "~2.0.3" } }, + "node_modules/promise-map-series": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/promise-map-series/-/promise-map-series-0.3.0.tgz", + "integrity": "sha512-3npG2NGhTc8BWBolLLf8l/92OxMGaRLbqvIh9wjCHhDXNvk4zsxaTaCpiCunW09qWPrN2zeNSNwRLVBrQQtutA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "10.* || >= 12.*" + } + }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -14968,6 +16404,82 @@ } ] }, + "node_modules/quick-temp": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/quick-temp/-/quick-temp-0.1.9.tgz", + "integrity": "sha512-yI0h7tIhKVObn03kD+Ln9JFi4OljD28lfaOsTdfpTR0xzrhGOod+q66CjGafUqYX2juUfT9oHIGrTBBo22mkRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mktemp": "^2.0.1", + "rimraf": "^5.0.10", + "underscore.string": "~3.3.6" + } + }, + "node_modules/quick-temp/node_modules/brace-expansion": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz", + "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/quick-temp/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/quick-temp/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/quick-temp/node_modules/rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/quote-unquote": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/quote-unquote/-/quote-unquote-1.0.0.tgz", @@ -15191,6 +16703,33 @@ "react": ">=16, <=18" } }, + "node_modules/react-i18next": { + "version": "17.0.11", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-17.0.11.tgz", + "integrity": "sha512-cDtkXgxjuFTWUH6V+aQn1Ve5vDiUztCNPWW5GtSHDccsgRXO1nE6QFWCEmc1KAutrb3OUv87wFShJL5RhUwPXg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.29.2", + "html-parse-stringify": "^4.0.1", + "use-sync-external-store": "^1.6.0" + }, + "peerDependencies": { + "i18next": ">= 26.2.0", + "react": ">= 16.8.0", + "typescript": "^5 || ^6 || ^7" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, "node_modules/react-is": { "version": "19.1.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.1.0.tgz", @@ -15616,6 +17155,13 @@ "node": ">=4" } }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "dev": true, + "license": "ISC" + }, "node_modules/renderkid": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", @@ -15629,6 +17175,16 @@ "strip-ansi": "^6.0.1" } }, + "node_modules/replace-ext": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", + "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, "node_modules/request-progress": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", @@ -15803,6 +17359,19 @@ "node": ">=4" } }, + "node_modules/resolve-options": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-2.0.0.tgz", + "integrity": "sha512-/FopbmmFOQCfsCx77BRFdKOniglTiHumLgwvd6IDPihy1GKkadZbgQJBcTb2lMzSR1pndzd96b1nZrreZ7+9/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "value-or-function": "^4.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, "node_modules/resolve-pathname": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", @@ -15922,6 +17491,16 @@ "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.4.tgz", "integrity": "sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==" }, + "node_modules/rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "6.* || >= 7.*" + } + }, "node_modules/rtl-css-js": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/rtl-css-js/-/rtl-css-js-1.16.1.tgz", @@ -16763,6 +18342,35 @@ "websocket-driver": "^0.7.4" } }, + "node_modules/sort-keys": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-5.1.0.tgz", + "integrity": "sha512-aSbHV0DaBcr7u0PVHXzM6NbZNAtrr9sF6+Qfs9UUVG7Ll3jQ6hHi8F/xqIIcn2rvIVbr0v/2zyjSdwSV47AgLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-obj": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sort-keys/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -17097,6 +18705,16 @@ "duplexer": "~0.1.1" } }, + "node_modules/stream-composer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-composer/-/stream-composer-1.0.2.tgz", + "integrity": "sha512-bnBselmwfX5K10AH6L4c8+S5lgZMWI7ZYrz2rvYjCPB2DIMC4Ig8OpxGpNJSxRZ58oti7y1IcNvjBAz9vW5m4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "streamx": "^2.13.2" + } + }, "node_modules/stream-http": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", @@ -17109,6 +18727,18 @@ "xtend": "^4.0.2" } }, + "node_modules/streamx": { + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.28.0.tgz", + "integrity": "sha512-1Yowhzjf0ivGMrTIkY9hav5TxobO9qIVqUE41fiCGMGgc3CLlf4MY+9AHmZqBWgDTue0fY9zWjYFVyf6Diuobw==", + "dev": true, + "license": "MIT", + "dependencies": { + "events-universal": "^1.0.0", + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -17284,6 +18914,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/symlink-or-copy": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/symlink-or-copy/-/symlink-or-copy-1.3.1.tgz", + "integrity": "sha512-0K91MEXFpBUaywiwSSkmKjnGcasG/rVBXFLJz5DrgGabpYD6N+3yZrfD6uUIfpuTu65DZLHi7N8CizHc07BPZA==", + "dev": true, + "license": "MIT" + }, "node_modules/systeminformation": { "version": "5.33.1", "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.33.1.tgz", @@ -17325,6 +18962,16 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/teex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", + "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "streamx": "^2.12.5" + } + }, "node_modules/terser": { "version": "5.39.0", "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz", @@ -17363,6 +19010,16 @@ "node": ">=8" } }, + "node_modules/text-decoder": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.7.tgz", + "integrity": "sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "b4a": "^1.6.4" + } + }, "node_modules/thingies": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.5.0.tgz", @@ -17403,6 +19060,57 @@ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/through2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/through2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", @@ -17535,6 +19243,19 @@ "node": ">=8.0" } }, + "node_modules/to-through": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-3.0.0.tgz", + "integrity": "sha512-y8MN937s/HVhEoBU1SxfHC+wxCHkV1a9gW8eAdTadYh/bGyesZIVcbjI+mSpFbSVwQici/XjBjuUyri1dnXwBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "streamx": "^2.12.5" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/toggle-selection": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", @@ -17816,6 +19537,27 @@ "node": "*" } }, + "node_modules/underscore.string": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz", + "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "^1.1.1", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/underscore.string/node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/undici": { "version": "6.25.0", "resolved": "https://registry.npmjs.org/undici/-/undici-6.25.0.tgz", @@ -18026,9 +19768,10 @@ } }, "node_modules/use-sync-external-store": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", - "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "license": "MIT", "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } @@ -18080,6 +19823,16 @@ "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" }, + "node_modules/value-or-function": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-4.0.0.tgz", + "integrity": "sha512-aeVK81SIuT6aMJfNo9Vte8Dw0/FZINGBV8BfCraGtqVxIeLAEhJyoWs8SmvRVmXfGss2PmmOwZCuBPbZR+IYWg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.13.0" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -18104,6 +19857,90 @@ "extsprintf": "^1.2.0" } }, + "node_modules/vinyl": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.1.tgz", + "integrity": "sha512-0QwqXteBNXgnLCdWdvPQBX6FXRHtIH3VhJPTd5Lwn28tJXc34YqSCWUmkOvtJHBmB3gGoPtrOKk3Ts8/kEZ9aA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^2.1.2", + "remove-trailing-separator": "^1.1.0", + "replace-ext": "^2.0.0", + "teex": "^1.0.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/vinyl-contents": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vinyl-contents/-/vinyl-contents-2.0.0.tgz", + "integrity": "sha512-cHq6NnGyi2pZ7xwdHSW1v4Jfnho4TEGtxZHw01cmnc8+i7jgR6bRnED/LbrKan/Q7CvVLbnvA5OepnhbpjBZ5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^5.0.0", + "vinyl": "^3.0.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/vinyl-fs": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-4.0.2.tgz", + "integrity": "sha512-XRFwBLLTl8lRAOYiBqxY279wY46tVxLaRhSwo3GzKEuLz1giffsOquWWboD/haGf5lx+JyTigCFfe7DWHoARIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fs-mkdirp-stream": "^2.0.1", + "glob-stream": "^8.0.3", + "graceful-fs": "^4.2.11", + "iconv-lite": "^0.6.3", + "is-valid-glob": "^1.0.0", + "lead": "^4.0.0", + "normalize-path": "3.0.0", + "resolve-options": "^2.0.0", + "stream-composer": "^1.0.2", + "streamx": "^2.14.0", + "to-through": "^3.0.0", + "value-or-function": "^4.0.0", + "vinyl": "^3.0.1", + "vinyl-sourcemap": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/vinyl-sourcemap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-2.0.0.tgz", + "integrity": "sha512-BAEvWxbBUXvlNoFQVFVHpybBbjW1r03WhohJzJDSfgrrK5xVYIDTan6xN14DlyImShgDRv2gl9qhM6irVMsV0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "convert-source-map": "^2.0.0", + "graceful-fs": "^4.2.10", + "now-and-later": "^3.0.0", + "streamx": "^2.12.5", + "vinyl": "^3.0.0", + "vinyl-contents": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/vinyl/node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, "node_modules/vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", @@ -18135,6 +19972,22 @@ "node": ">=12.0.0" } }, + "node_modules/walk-sync": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/walk-sync/-/walk-sync-2.2.0.tgz", + "integrity": "sha512-IC8sL7aB4/ZgFcGI2T1LczZeFWZ06b3zoHH7jBPyHxOtIIz1jppWHjjEXkOFvFojBVAK9pV7g47xOZ4LW3QLfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimatch": "^3.0.3", + "ensure-posix-path": "^1.1.0", + "matcher-collection": "^2.0.0", + "minimatch": "^3.0.4" + }, + "engines": { + "node": "8.* || >= 10.*" + } + }, "node_modules/watchpack": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.2.tgz", @@ -18654,6 +20507,30 @@ "node": ">=0.8.0" } }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -20574,9 +22451,9 @@ } }, "@babel/runtime": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.1.tgz", - "integrity": "sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==" + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", + "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==" }, "@babel/template": { "version": "7.29.7", @@ -21343,6 +23220,15 @@ "prop-types": "^15.8.1" } }, + "@gulpjs/to-absolute-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@gulpjs/to-absolute-glob/-/to-absolute-glob-4.0.0.tgz", + "integrity": "sha512-kjotm7XJrJ6v+7knhPaRgaT6q8F8K2jiafwYdNHLzmV0uGLuZY43FK6smNSHUPrhq5kX2slCUy+RGG/xGqmIKA==", + "dev": true, + "requires": { + "is-negated-glob": "^1.0.0" + } + }, "@hapi/hoek": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", @@ -22487,6 +24373,12 @@ "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", "dev": true }, + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, "@types/node": { "version": "22.15.14", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.14.tgz", @@ -22654,6 +24546,12 @@ "@types/node": "*" } }, + "@types/symlink-or-copy": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/symlink-or-copy/-/symlink-or-copy-1.2.2.tgz", + "integrity": "sha512-MQ1AnmTLOncwEf9IVU+B2e4Hchrku5N67NkgcAHW0p3sdzPe0FNMANxEm6OJUzPniEQGkeT3OROLlCwZJLWFZA==", + "dev": true + }, "@types/tinymce": { "version": "4.6.9", "resolved": "https://registry.npmjs.org/@types/tinymce/-/tinymce-4.6.9.tgz", @@ -23067,9 +24965,9 @@ "dev": true }, "@zesty-io/material": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@zesty-io/material/-/material-0.16.2.tgz", - "integrity": "sha512-yy4AV+rhJTw8QaZ+A4PVOZ6ffON/oqCcBou5dtxWlo13z15RIt/mWk+epog89wgCSSUSydcCNNAhNYRnoDvOhQ==", + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@zesty-io/material/-/material-0.16.3.tgz", + "integrity": "sha512-6DSgYEUbW75t3mGbdnsYLHa7iQ6ieEoS53nP5iMPQwyYiHaooNnC9FxWpErfsoM0doXXOggT/ZcGBUAyJ1fykA==", "requires": { "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.0", @@ -23426,6 +25324,12 @@ } } }, + "b4a": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.8.1.tgz", + "integrity": "sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==", + "dev": true + }, "babel-loader": { "version": "8.4.1", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.4.1.tgz", @@ -23507,6 +25411,12 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "bare-events": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.9.1.tgz", + "integrity": "sha512-Z0oHEHAFDZkffN8Qc39zNZjQlMDkPJRyyyZieU1VH7u8c5S+qHZ2S8ixdKIAxEjfHO7FJxXmJWgteOghVanIsg==", + "dev": true + }, "base16": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", @@ -23555,6 +25465,29 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==" }, + "bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "dev": true, + "requires": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + } + } + }, "blob-util": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", @@ -23741,6 +25674,72 @@ "fill-range": "^7.1.1" } }, + "broccoli-node-api": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/broccoli-node-api/-/broccoli-node-api-1.7.0.tgz", + "integrity": "sha512-QIqLSVJWJUVOhclmkmypJJH9u9s/aWH4+FH6Q6Ju5l+Io4dtwqdPUNmDfw40o6sxhbZHhqGujDJuHTML1wG8Yw==", + "dev": true + }, + "broccoli-node-info": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/broccoli-node-info/-/broccoli-node-info-2.2.0.tgz", + "integrity": "sha512-VabSGRpKIzpmC+r+tJueCE5h8k6vON7EIMMWu6d/FyPdtijwLQ7QvzShEw+m3mHoDzUaj/kiZsDYrS8X2adsBg==", + "dev": true + }, + "broccoli-output-wrapper": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/broccoli-output-wrapper/-/broccoli-output-wrapper-3.2.5.tgz", + "integrity": "sha512-bQAtwjSrF4Nu0CK0JOy5OZqw9t5U0zzv2555EA/cF8/a8SLDTIetk9UgrtMVw7qKLKdSpOZ2liZNeZZDaKgayw==", + "dev": true, + "requires": { + "fs-extra": "^8.1.0", + "heimdalljs-logger": "^0.1.10", + "symlink-or-copy": "^1.2.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + } + } + }, + "broccoli-plugin": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/broccoli-plugin/-/broccoli-plugin-4.0.7.tgz", + "integrity": "sha512-a4zUsWtA1uns1K7p9rExYVYG99rdKeGRymW0qOCNkvDPHQxVi3yVyJHhQbM3EZwdt2E0mnhr5e0c/bPpJ7p3Wg==", + "dev": true, + "requires": { + "broccoli-node-api": "^1.7.0", + "broccoli-output-wrapper": "^3.2.5", + "fs-merger": "^3.2.1", + "promise-map-series": "^0.3.0", + "quick-temp": "^0.1.8", + "rimraf": "^3.0.2", + "symlink-or-copy": "^1.3.1" + } + }, "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", @@ -24069,6 +26068,156 @@ "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", "dev": true }, + "cheerio": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.2.0.tgz", + "integrity": "sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==", + "dev": true, + "requires": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "encoding-sniffer": "^0.2.1", + "htmlparser2": "^10.1.0", + "parse5": "^7.3.0", + "parse5-htmlparser2-tree-adapter": "^7.1.0", + "parse5-parser-stream": "^7.1.2", + "undici": "^7.19.0", + "whatwg-mimetype": "^4.0.0" + }, + "dependencies": { + "dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + } + }, + "domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0" + } + }, + "domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dev": true, + "requires": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + } + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true + }, + "htmlparser2": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", + "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "entities": "^7.0.1" + }, + "dependencies": { + "entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "dev": true + } + } + }, + "undici": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.29.0.tgz", + "integrity": "sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw==", + "dev": true + } + } + }, + "cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "dependencies": { + "css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + } + }, + "dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + } + }, + "domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0" + } + }, + "domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dev": true, + "requires": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + } + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true + } + } + }, "chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", @@ -24375,8 +26524,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "optional": true + "dev": true }, "combined-stream": { "version": "1.0.8", @@ -25459,6 +27607,16 @@ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "dev": true }, + "encoding-sniffer": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz", + "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==", + "dev": true, + "requires": { + "iconv-lite": "^0.6.3", + "whatwg-encoding": "^3.1.1" + } + }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -25478,6 +27636,12 @@ "tapable": "^2.3.3" } }, + "ensure-posix-path": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ensure-posix-path/-/ensure-posix-path-1.1.1.tgz", + "integrity": "sha512-VWU0/zXzVbeJNXvME/5EmLuEj2TauvoaTz6aFYK1Z92JCBlDlZ3Gu0tuGR42kpW1754ywTs+QB0g5TP0oj9Zaw==", + "dev": true + }, "entities": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", @@ -25496,6 +27660,12 @@ "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", "dev": true }, + "eol": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/eol/-/eol-0.9.1.tgz", + "integrity": "sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==", + "dev": true + }, "errno": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", @@ -25763,6 +27933,15 @@ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true }, + "events-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "dev": true, + "requires": { + "bare-events": "^2.7.0" + } + }, "evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", @@ -25908,6 +28087,12 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true + }, "fast-glob": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", @@ -26325,12 +28510,76 @@ "universalify": "^2.0.0" } }, + "fs-merger": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/fs-merger/-/fs-merger-3.2.1.tgz", + "integrity": "sha512-AN6sX12liy0JE7C2evclwoo0aCG3PFulLjrTLsJpWh/2mM+DinhpSGqYLbHBBbIW1PLRNcFhJG8Axtz8mQW3ug==", + "dev": true, + "requires": { + "broccoli-node-api": "^1.7.0", + "broccoli-node-info": "^2.1.0", + "fs-extra": "^8.0.1", + "fs-tree-diff": "^2.0.1", + "walk-sync": "^2.2.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + } + } + }, + "fs-mkdirp-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-2.0.1.tgz", + "integrity": "sha512-UTOY+59K6IA94tec8Wjqm0FSh5OVudGNB0NL/P6fB3HiE3bYOY3VYBGijsnOHNkQSwC1FKkU77pmq7xp9CskLw==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.8", + "streamx": "^2.12.0" + } + }, "fs-readdir-recursive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", "dev": true }, + "fs-tree-diff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fs-tree-diff/-/fs-tree-diff-2.0.1.tgz", + "integrity": "sha512-x+CfAZ/lJHQqwlD64pYM5QxWjzWhSjroaVsr8PW831zOApL55qPibed0c+xebaLWVr2BnHFoHdrwOv8pzt8R5A==", + "dev": true, + "requires": { + "@types/symlink-or-copy": "^1.2.0", + "heimdalljs-logger": "^0.1.7", + "object-assign": "^4.1.0", + "path-posix": "^1.0.0", + "symlink-or-copy": "^1.1.8" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -26473,6 +28722,33 @@ "is-glob": "^4.0.1" } }, + "glob-stream": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-8.0.3.tgz", + "integrity": "sha512-fqZVj22LtFJkHODT+M4N1RJQ3TjnnQhfE9GwZI8qXscYarnhpip70poMldRnP8ipQ/w0B621kOhfc53/J9bd/A==", + "dev": true, + "requires": { + "@gulpjs/to-absolute-glob": "^4.0.0", + "anymatch": "^3.1.3", + "fastq": "^1.13.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "is-negated-glob": "^1.0.0", + "normalize-path": "^3.0.0", + "streamx": "^2.12.5" + }, + "dependencies": { + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + } + } + }, "glob-to-regex.js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.0.1.tgz", @@ -26550,6 +28826,15 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, + "gulp-sort": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/gulp-sort/-/gulp-sort-2.0.0.tgz", + "integrity": "sha512-MyTel3FXOdh1qhw1yKhpimQrAmur9q1X0ZigLmCOxouQD+BD3za9/89O+HfbgBQvvh4igEbp0/PUWO+VqGYG1g==", + "dev": true, + "requires": { + "through2": "^2.0.1" + } + }, "handle-thing": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", @@ -26644,6 +28929,50 @@ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, + "heimdalljs": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/heimdalljs/-/heimdalljs-0.2.6.tgz", + "integrity": "sha512-o9bd30+5vLBvBtzCPwwGqpry2+n0Hi6H1+qwt6y+0kwRHGGF8TFIhJPmnuM0xO97zaKrDZMwO/V56fAnn8m/tA==", + "dev": true, + "requires": { + "rsvp": "~3.2.1" + }, + "dependencies": { + "rsvp": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.2.1.tgz", + "integrity": "sha512-Rf4YVNYpKjZ6ASAmibcwTNciQ5Co5Ztq6iZPEykHpkoflnD/K5ryE/rHehFsTm4NJj8nKDhbi3eKBWGogmNnkg==", + "dev": true + } + } + }, + "heimdalljs-logger": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/heimdalljs-logger/-/heimdalljs-logger-0.1.10.tgz", + "integrity": "sha512-pO++cJbhIufVI/fmB/u2Yty3KJD0TqNPecehFae0/eps0hkZ3b4Zc/PezUMOpYuHFQbA7FxHZxa305EhmjLj4g==", + "dev": true, + "requires": { + "debug": "^2.2.0", + "heimdalljs": "^0.2.6" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, "history": { "version": "4.10.1", "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", @@ -26762,6 +29091,11 @@ } } }, + "html-parse-stringify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-4.0.1.tgz", + "integrity": "sha512-0zHsZJrK7S3K2aucXWL6ycoYJ/iNtIcFHC/nYQgFklPtrv5LpJctIiSCroWZWeuoXvuyFdzp6KzjJQ+OT5MfFw==" + }, "html-webpack-plugin": { "version": "5.6.3", "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz", @@ -26896,12 +29230,314 @@ "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.1.0.tgz", "integrity": "sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==" }, + "i18next": { + "version": "26.3.6", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-26.3.6.tgz", + "integrity": "sha512-Bu5Z2nAXgfVyM8xvW3jk9EKRIuX37PudsrBViThNFx7CR7aaYTpP01cxNB/E4c4UUzTDiAZRstEhsRfPOL/8xA==" + }, + "i18next-browser-languagedetector": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-8.2.1.tgz", + "integrity": "sha512-bZg8+4bdmaOiApD7N7BPT9W8MLZG+nPTOFlLiJiT8uzKXFjhxw4v2ierCXOwB5sFDMtuA5G4kgYZ0AznZxQ/cw==", + "requires": { + "@babel/runtime": "^7.23.2" + } + }, + "i18next-chained-backend": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/i18next-chained-backend/-/i18next-chained-backend-5.0.6.tgz", + "integrity": "sha512-oYo86EnjkKs1+osKHCFyIi3Yw7UebEHxMgVOJ1OpgmpL4y9s46Zr9pJHpqWwlxK8Vt//cER9Sx2Tfmx3awrJQA==", + "requires": { + "@babel/runtime": "^7.28.4" + } + }, + "i18next-http-backend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-4.0.1.tgz", + "integrity": "sha512-O+7MwPCJIKCu68vho8JtD1HF8QHyMPzoChIDFfYCrpaDqX6oq3RqASujnpKEdnNCEOb+kLMOHTNTcGKpj7B1BA==" + }, + "i18next-localstorage-backend": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/i18next-localstorage-backend/-/i18next-localstorage-backend-4.3.2.tgz", + "integrity": "sha512-fBXOGTcUrS7ueD6W/I/+ruByGEiZlxjNU1xlRTCVtMzBqoPxH+xa1i/KXp3Gxy0gBQlX6Ni9WU06LXGLdJHIvg==", + "requires": { + "@babel/runtime": "^7.28.4" + } + }, + "i18next-parser": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/i18next-parser/-/i18next-parser-9.4.0.tgz", + "integrity": "sha512-SLQJGDj/baBIB9ALmJVXSOXWh3Zn9+wH7J2IuQ4rvx8yuQYpUWitmt8cHFjj6FExjgr8dHfd1SGeQgkowXDO1Q==", + "dev": true, + "requires": { + "@babel/runtime": "^7.25.0", + "broccoli-plugin": "^4.0.7", + "cheerio": "^1.0.0", + "colors": "^1.4.0", + "commander": "^12.1.0", + "eol": "^0.9.1", + "esbuild": "^0.25.0", + "fs-extra": "^11.2.0", + "gulp-sort": "^2.0.0", + "i18next": "^23.5.1 || ^24.2.0", + "js-yaml": "^4.1.0", + "lilconfig": "^3.1.3", + "rsvp": "^4.8.5", + "sort-keys": "^5.0.0", + "typescript": "^5.0.4", + "vinyl": "^3.0.0", + "vinyl-fs": "^4.0.0" + }, + "dependencies": { + "@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "dev": true, + "optional": true + }, + "@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "dev": true, + "optional": true + }, + "commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "dev": true + }, + "esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "dev": true, + "requires": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "fs-extra": { + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.4.0.tgz", + "integrity": "sha512-EQsFzMUJkCKGr1ePqlYADkIUmHW1s3ZXr5Yqy6wbGrfUCphpl2maM/kyOIRA2HpP3AaFQTZXD4ldjek+nccddA==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "i18next": { + "version": "24.2.3", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-24.2.3.tgz", + "integrity": "sha512-lfbf80OzkocvX7nmZtu7nSTNbrTYR52sLWxPtlXX1zAhVw8WEnFk4puUkCR4B1dNQwbSpEHHHemcZu//7EcB7A==", + "dev": true, + "requires": { + "@babel/runtime": "^7.26.10" + } + } + } + }, "iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, - "optional": true, "requires": { "safer-buffer": ">= 2.1.2 < 3.0.0" } @@ -27194,6 +29830,12 @@ "define-properties": "^1.1.3" } }, + "is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", + "dev": true + }, "is-network-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", @@ -27335,6 +29977,12 @@ "integrity": "sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==", "dev": true }, + "is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", + "dev": true + }, "is-weakmap": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", @@ -27720,6 +30368,12 @@ "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", "dev": true }, + "lead": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-4.0.0.tgz", + "integrity": "sha512-DpMa59o5uGUWWjruMp71e6knmwKU3jRBBn1kjuLWN9EeIOxNeSAwvHf03WIl8g/ZMR2oSQC9ej3yeLBwdDc/pg==", + "dev": true + }, "less": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/less/-/less-4.3.0.tgz", @@ -27764,6 +30418,12 @@ "immediate": "~3.0.5" } }, + "lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true + }, "lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -27988,6 +30648,16 @@ "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==", "dev": true }, + "matcher-collection": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/matcher-collection/-/matcher-collection-2.0.1.tgz", + "integrity": "sha512-daE62nS2ZQsDg9raM0IlZzLmI2u+7ZapXBwdoeBUKAYERPDDIc0qNqA8E0Rp2D+gspKR7BgIFP52GeujaGXWeQ==", + "dev": true, + "requires": { + "@types/minimatch": "^3.0.3", + "minimatch": "^3.0.2" + } + }, "math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -28267,6 +30937,12 @@ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true }, + "mktemp": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/mktemp/-/mktemp-2.0.3.tgz", + "integrity": "sha512-Bq72L2oi/isYSy0guN9ihNhAMQOyZEwts+Bezm/1U+wh8bQ+fVQ2ZiUoJJjceOMiiKv/BUrA0NF98jFc81CB6w==", + "dev": true + }, "module-definition": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-6.0.2.tgz", @@ -28507,6 +31183,15 @@ } } }, + "now-and-later": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-3.0.0.tgz", + "integrity": "sha512-pGO4pzSdaxhWTGkfSfHx3hVzJVslFPwBp2Myq9MYN/ChfJZF87ochMAXnvz6/58RJSf5ik2q9tXprBBrk2cpcg==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, "npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -28885,6 +31570,53 @@ "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", "dev": true }, + "parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dev": true, + "requires": { + "entities": "^6.0.0" + }, + "dependencies": { + "entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true + } + } + }, + "parse5-htmlparser2-tree-adapter": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", + "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", + "dev": true, + "requires": { + "domhandler": "^5.0.3", + "parse5": "^7.0.0" + }, + "dependencies": { + "domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0" + } + } + } + }, + "parse5-parser-stream": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", + "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", + "dev": true, + "requires": { + "parse5": "^7.0.0" + } + }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -28934,6 +31666,12 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "path-posix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/path-posix/-/path-posix-1.0.0.tgz", + "integrity": "sha512-1gJ0WpNIiYcQydgg3Ed8KzvIqTsDpNwq+cjBCssvBtuTWjEqY1AW+i+OepiEMqDCzyro9B2sLAe4RBPajMYFiA==", + "dev": true + }, "path-scurry": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", @@ -29261,6 +31999,12 @@ "asap": "~2.0.3" } }, + "promise-map-series": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/promise-map-series/-/promise-map-series-0.3.0.tgz", + "integrity": "sha512-3npG2NGhTc8BWBolLLf8l/92OxMGaRLbqvIh9wjCHhDXNvk4zsxaTaCpiCunW09qWPrN2zeNSNwRLVBrQQtutA==", + "dev": true + }, "prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -29506,6 +32250,60 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, + "quick-temp": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/quick-temp/-/quick-temp-0.1.9.tgz", + "integrity": "sha512-yI0h7tIhKVObn03kD+Ln9JFi4OljD28lfaOsTdfpTR0xzrhGOod+q66CjGafUqYX2juUfT9oHIGrTBBo22mkRA==", + "dev": true, + "requires": { + "mktemp": "^2.0.1", + "rimraf": "^5.0.10", + "underscore.string": "~3.3.6" + }, + "dependencies": { + "brace-expansion": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz", + "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + } + }, + "minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.2" + } + }, + "rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "dev": true, + "requires": { + "glob": "^10.3.7" + } + } + } + }, "quote-unquote": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/quote-unquote/-/quote-unquote-1.0.0.tgz", @@ -29669,6 +32467,16 @@ "prop-types": "^15.5.10" } }, + "react-i18next": { + "version": "17.0.11", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-17.0.11.tgz", + "integrity": "sha512-cDtkXgxjuFTWUH6V+aQn1Ve5vDiUztCNPWW5GtSHDccsgRXO1nE6QFWCEmc1KAutrb3OUv87wFShJL5RhUwPXg==", + "requires": { + "@babel/runtime": "^7.29.2", + "html-parse-stringify": "^4.0.1", + "use-sync-external-store": "^1.6.0" + } + }, "react-is": { "version": "19.1.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.1.0.tgz", @@ -29987,6 +32795,12 @@ "es6-error": "^4.0.1" } }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "dev": true + }, "renderkid": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", @@ -30000,6 +32814,12 @@ "strip-ansi": "^6.0.1" } }, + "replace-ext": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", + "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", + "dev": true + }, "request-progress": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", @@ -30122,6 +32942,15 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" }, + "resolve-options": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-2.0.0.tgz", + "integrity": "sha512-/FopbmmFOQCfsCx77BRFdKOniglTiHumLgwvd6IDPihy1GKkadZbgQJBcTb2lMzSR1pndzd96b1nZrreZ7+9/A==", + "dev": true, + "requires": { + "value-or-function": "^4.0.0" + } + }, "resolve-pathname": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", @@ -30202,6 +33031,12 @@ "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.4.tgz", "integrity": "sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==" }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, "rtl-css-js": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/rtl-css-js/-/rtl-css-js-1.16.1.tgz", @@ -30808,6 +33643,23 @@ "websocket-driver": "^0.7.4" } }, + "sort-keys": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-5.1.0.tgz", + "integrity": "sha512-aSbHV0DaBcr7u0PVHXzM6NbZNAtrr9sF6+Qfs9UUVG7Ll3jQ6hHi8F/xqIIcn2rvIVbr0v/2zyjSdwSV47AgLQ==", + "dev": true, + "requires": { + "is-plain-obj": "^4.0.0" + }, + "dependencies": { + "is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true + } + } + }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -31073,6 +33925,15 @@ "duplexer": "~0.1.1" } }, + "stream-composer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-composer/-/stream-composer-1.0.2.tgz", + "integrity": "sha512-bnBselmwfX5K10AH6L4c8+S5lgZMWI7ZYrz2rvYjCPB2DIMC4Ig8OpxGpNJSxRZ58oti7y1IcNvjBAz9vW5m4w==", + "dev": true, + "requires": { + "streamx": "^2.13.2" + } + }, "stream-http": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", @@ -31085,6 +33946,17 @@ "xtend": "^4.0.2" } }, + "streamx": { + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.28.0.tgz", + "integrity": "sha512-1Yowhzjf0ivGMrTIkY9hav5TxobO9qIVqUE41fiCGMGgc3CLlf4MY+9AHmZqBWgDTue0fY9zWjYFVyf6Diuobw==", + "dev": true, + "requires": { + "events-universal": "^1.0.0", + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" + } + }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -31201,6 +34073,12 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, + "symlink-or-copy": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/symlink-or-copy/-/symlink-or-copy-1.3.1.tgz", + "integrity": "sha512-0K91MEXFpBUaywiwSSkmKjnGcasG/rVBXFLJz5DrgGabpYD6N+3yZrfD6uUIfpuTu65DZLHi7N8CizHc07BPZA==", + "dev": true + }, "systeminformation": { "version": "5.33.1", "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.33.1.tgz", @@ -31213,6 +34091,15 @@ "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", "dev": true }, + "teex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", + "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", + "dev": true, + "requires": { + "streamx": "^2.12.5" + } + }, "terser": { "version": "5.39.0", "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz", @@ -31244,6 +34131,15 @@ "minimatch": "^3.0.4" } }, + "text-decoder": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.7.tgz", + "integrity": "sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==", + "dev": true, + "requires": { + "b4a": "^1.6.4" + } + }, "thingies": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.5.0.tgz", @@ -31267,6 +34163,54 @@ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, "thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", @@ -31368,6 +34312,15 @@ "is-number": "^7.0.0" } }, + "to-through": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-3.0.0.tgz", + "integrity": "sha512-y8MN937s/HVhEoBU1SxfHC+wxCHkV1a9gW8eAdTadYh/bGyesZIVcbjI+mSpFbSVwQici/XjBjuUyri1dnXwBw==", + "dev": true, + "requires": { + "streamx": "^2.12.5" + } + }, "toggle-selection": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", @@ -31547,6 +34500,24 @@ "integrity": "sha512-z6PJ8Lml+v3ichVojCiB8toQJBuwR42ySM4ezjXIqXK3M0HczmKQ3LF4rhU55PfD99KEEXQG6yb7iOMyvYuHew==", "dev": true }, + "underscore.string": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz", + "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==", + "dev": true, + "requires": { + "sprintf-js": "^1.1.1", + "util-deprecate": "^1.0.2" + }, + "dependencies": { + "sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true + } + } + }, "undici": { "version": "6.25.0", "resolved": "https://registry.npmjs.org/undici/-/undici-6.25.0.tgz", @@ -31684,9 +34655,9 @@ } }, "use-sync-external-store": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", - "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==" }, "util": { "version": "0.12.5", @@ -31729,6 +34700,12 @@ "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" }, + "value-or-function": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-4.0.0.tgz", + "integrity": "sha512-aeVK81SIuT6aMJfNo9Vte8Dw0/FZINGBV8BfCraGtqVxIeLAEhJyoWs8SmvRVmXfGss2PmmOwZCuBPbZR+IYWg==", + "dev": true + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -31746,6 +34723,72 @@ "extsprintf": "^1.2.0" } }, + "vinyl": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.1.tgz", + "integrity": "sha512-0QwqXteBNXgnLCdWdvPQBX6FXRHtIH3VhJPTd5Lwn28tJXc34YqSCWUmkOvtJHBmB3gGoPtrOKk3Ts8/kEZ9aA==", + "dev": true, + "requires": { + "clone": "^2.1.2", + "remove-trailing-separator": "^1.1.0", + "replace-ext": "^2.0.0", + "teex": "^1.0.1" + }, + "dependencies": { + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "dev": true + } + } + }, + "vinyl-contents": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vinyl-contents/-/vinyl-contents-2.0.0.tgz", + "integrity": "sha512-cHq6NnGyi2pZ7xwdHSW1v4Jfnho4TEGtxZHw01cmnc8+i7jgR6bRnED/LbrKan/Q7CvVLbnvA5OepnhbpjBZ5Q==", + "dev": true, + "requires": { + "bl": "^5.0.0", + "vinyl": "^3.0.0" + } + }, + "vinyl-fs": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-4.0.2.tgz", + "integrity": "sha512-XRFwBLLTl8lRAOYiBqxY279wY46tVxLaRhSwo3GzKEuLz1giffsOquWWboD/haGf5lx+JyTigCFfe7DWHoARIA==", + "dev": true, + "requires": { + "fs-mkdirp-stream": "^2.0.1", + "glob-stream": "^8.0.3", + "graceful-fs": "^4.2.11", + "iconv-lite": "^0.6.3", + "is-valid-glob": "^1.0.0", + "lead": "^4.0.0", + "normalize-path": "3.0.0", + "resolve-options": "^2.0.0", + "stream-composer": "^1.0.2", + "streamx": "^2.14.0", + "to-through": "^3.0.0", + "value-or-function": "^4.0.0", + "vinyl": "^3.0.1", + "vinyl-sourcemap": "^2.0.0" + } + }, + "vinyl-sourcemap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-2.0.0.tgz", + "integrity": "sha512-BAEvWxbBUXvlNoFQVFVHpybBbjW1r03WhohJzJDSfgrrK5xVYIDTan6xN14DlyImShgDRv2gl9qhM6irVMsV0Q==", + "dev": true, + "requires": { + "convert-source-map": "^2.0.0", + "graceful-fs": "^4.2.10", + "now-and-later": "^3.0.0", + "streamx": "^2.12.5", + "vinyl": "^3.0.0", + "vinyl-contents": "^2.0.0" + } + }, "vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", @@ -31770,6 +34813,18 @@ "rxjs": "^7.8.2" } }, + "walk-sync": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/walk-sync/-/walk-sync-2.2.0.tgz", + "integrity": "sha512-IC8sL7aB4/ZgFcGI2T1LczZeFWZ06b3zoHH7jBPyHxOtIIz1jppWHjjEXkOFvFojBVAK9pV7g47xOZ4LW3QLfg==", + "dev": true, + "requires": { + "@types/minimatch": "^3.0.3", + "ensure-posix-path": "^1.1.0", + "matcher-collection": "^2.0.0", + "minimatch": "^3.0.4" + } + }, "watchpack": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.2.tgz", @@ -32121,6 +35176,21 @@ "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true }, + "whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "dev": true, + "requires": { + "iconv-lite": "0.6.3" + } + }, + "whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true + }, "whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", diff --git a/package.json b/package.json index 0fba0cf267..a031644692 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ ], "scripts": { "cleanup": "cross-env echo 'FINISHED'", + "i18n:extract": "i18next", "build:local": "npm run task:clean && npm run task:webpack -- --node-env local", "build:dev": "npm run task:clean && npm run task:webpack -- --node-env development", "build:stage": "npm run task:clean && npm run task:webpack -- --node-env stage", @@ -54,7 +55,7 @@ "@sentry/tracing": "^7.120.4", "@tinymce/tinymce-react": "^4.3.0", "@welldone-software/why-did-you-render": "^6.1.1", - "@zesty-io/material": "^0.16.2", + "@zesty-io/material": "^0.16.3", "chart.js": "^3.8.0", "chartjs-adapter-date-fns": "^3.0.0", "chartjs-plugin-datalabels": "^2.0.0", @@ -64,6 +65,11 @@ "csv-parse": "^4.16.0", "date-fns-tz": "^1.3.8", "flatpickr": "^4.6.9", + "i18next": "^26.3.1", + "i18next-browser-languagedetector": "^8.2.1", + "i18next-chained-backend": "^5.0.4", + "i18next-http-backend": "^4.0.0", + "i18next-localstorage-backend": "^4.3.1", "idb-keyval": "^5.0.6", "ismounted": "^0.1.8", "js-beautify": "^1.14.0", @@ -81,6 +87,7 @@ "react-dom": "^18.0.0", "react-dropzone": "^14.2.2", "react-flatpickr": "^3.10.7", + "react-i18next": "^17.0.8", "react-measure": "^2.5.2", "react-monaco-editor": "^0.47.0", "react-number-format": "^5.3.1", @@ -139,6 +146,7 @@ "file-loader": "^6.2.0", "html-webpack-plugin": "^5.3.1", "husky": "^7.0.0", + "i18next-parser": "^9.4.0", "less": "^4.1.1", "less-loader": "^10.0.0", "mini-css-extract-plugin": "^2.0.0", diff --git a/public/locales/en-US/activePreview.json b/public/locales/en-US/activePreview.json new file mode 100644 index 0000000000..2bb1500fff --- /dev/null +++ b/public/locales/en-US/activePreview.json @@ -0,0 +1,16 @@ +{ + "disconnectedFromPreviewDomain": "Disconnected from preview domain", + "findingDomain": "Finding Domain", + "landscapeMode": "Landscape Mode", + "loadingRelatedItem": "Loading related item", + "meta": "Meta", + "noDevice": "No Device", + "noTemplate": "No Template", + "noTemplateSelected": "No template selected", + "resolveInvalidFields": "Resolve invalid field values to save and update preview", + "saveToUpdatePreview": "Save to Update Preview", + "saving": "Saving", + "sessionNotActive": "Your session is not active. Please login to Zesty.io", + "viewingMetaData": "Viewing meta data for the item at this route", + "web": "Web" +} diff --git a/public/locales/en-US/blocks.json b/public/locales/en-US/blocks.json new file mode 100644 index 0000000000..47326b2741 --- /dev/null +++ b/public/locales/en-US/blocks.json @@ -0,0 +1,28 @@ +{ + "addVariantsEmptyStateBody": "Add your variants here. Start by creating your first variant.", + "allBlocks": "All Blocks", + "allBlocksTitle": "All Blocks", + "blockImageAlt": "Block Image", + "createBlock": "Create Block", + "createVariantOf": "Create Variant of {{label}}", + "documentation": "Documentation", + "emptyItemsListAlt": "Empty Items List", + "emptyStateBody": "Block models define the structure of a block such as a hero, feature, testimonial, etc.", + "filterBlocks": "Filter Blocks", + "howToCreateBlock": "How to Create a Block", + "howToUseBlocks": "How to use Blocks", + "introToWebComponents": "Introduction to Web Components", + "noResultsAvailable": "No results available for \"{{filter}}\"", + "noSearchResultsAlt": "No search results", + "onboardingStep1Description": "Create and add editable blocks (e.g. Hero, Testimonial, Forms, etc.) to any existing page of your website with a few clicks", + "onboardingStep1Title": "Introducing Blocks", + "onboardingStep2Description": "Create a block model in Schema and define the editable fields. And then connect these fields in the code template for your block.", + "onboardingStep2Title": "How to Create a Block", + "onboardingStep3Description": "Variants of these blocks can be created in the Blocks app and added to webpages using a Block Content field or with Freestyle.", + "onboardingStep3Title": "Create & Add Block Variants to Any Web Page", + "searchBlocksPlaceholder": "Search Blocks", + "startByCreatingBlocks": "Start By Creating Blocks", + "startCreatingVariantsNow": "Start Creating Variants Now", + "takeProductTour": "Take Product Tour", + "variantName": "Variant Name" +} diff --git a/public/locales/en-US/code.json b/public/locales/en-US/code.json new file mode 100644 index 0000000000..f859304af7 --- /dev/null +++ b/public/locales/en-US/code.json @@ -0,0 +1,135 @@ +{ + "ajaxJsonDescription": "Parsley accessible file for creating endpoints or custom experiences. These files need to be named with a full path with an extension like /my/file/path.json. The file is accessible at hash-dev.preview.zesty.io/my/file/path.json. File types that can be used: css, html, json, js, xml, csv, tsv, xml, yaml, md, svg, rss, ics, vcf, xhtml.", + "allFiles": "All Files", + "apiDocs": "API Docs", + "apiErrorDeletingFile": "API error occured trying to delete file. {{fileName}}", + "apiErrorLoadingFileVersions": "API error loading file versions", + "auditTrailEmptyHint": "When this file is saved or published you will be able to see logs of when and by whom.", + "auditTrailLoadError": "Unable to load activity log", + "branch": "Branch", + "buildFasterBody": "Get started building dynamic websites and applications with , Zesty.io's templating language. Explore our interactive for a quick hands-on introduction, or learn more through our in-depth .", + "buildFasterHeading": "Build Faster, Build Smarter with Parsley!", + "changeCombineOrder": "Change combine and pre-process order", + "chooseFileType": "Choose a file type", + "closeDrawer": "Close Drawer {{metaShortcut}}", + "compilesToSiteCss": "Compiles to {{file}}", + "compilesToSiteJs": "Compiles to {{file}}", + "couldNotLoadFile": "Could not load {{fileType}} {{fileZUID}}", + "createFile": "Create File", + "createFileError": "Failed to create file {{name}}. {{error}}", + "createFileSuccess": "Created new file {{name}}", + "createNavType": "Create {{navType}}", + "createScript": "Create Script", + "createStylesheet": "Create Stylesheet", + "createView": "Create View", + "cssDescription": "A cascading stylesheet that is automatically concatenated into a single css file /main.css which is auto included in the head of webengine web pages. Sort Order of the concatenation can be controlled. No transpiling occurs.", + "deleteFile": "Delete File", + "deleteFileCdnWarning": "Deleting a file will remove it and trigger a CDN purge causing A production to update immediately.", + "deleteFileError": "Failed to delete file {{fileName}}. {{error}}", + "deleteFileLabel": "Delete File", + "developerResources": "Developer Resources", + "diffVersions": "Diff Versions", + "editItemContent": "Edit item content", + "editLinkedContent": "Edit Linked Content", + "editLinkedSchema": "Edit Linked Schema", + "editRelatedContent": "Edit Related Content", + "editRelatedModel": "Edit Related Model", + "errorSavingFileSortOrder": "We ran into an error saving the file sort order. This is most likely an issue on our end.", + "failedToLoadHeaders": "Failed to load headers. {{status}}", + "fetchDevFilesError": "Failed to load instance {{type}} dev files. {{status}} | {{error}}", + "fetchFileError": "Failed to load file. {{status}} | {{error}}", + "fetchFileVersionsError": "Unable to load file versions. {{status}}", + "fetchLiveFilesError": "Failed to load instance {{type}} live files. {{status}} | {{error}}", + "fileInformation": "File Information", + "fileListHeaderFileName": "File Name", + "fileListHeaderLastSaved": "Last Saved", + "fileLocked": "File Locked", + "fileLockedDescriptionRich": "{{firstName}} {{lastName}} is viewing {{name}} since {{formattedDate}} Unlock this item to ignore this warning and possibly overwrite {{firstName}}'s changes.", + "fileName": "File Name", + "fileNavHeaderSiteCss": "Site.css", + "fileNavHeaderSiteJs": "Site.js", + "fileNavHeaderViews": "Views", + "fileNavTooltipSiteCss": "Site.css is a dynamically created file from the instance stylesheet files", + "fileNavTooltipSiteJs": "Site.js is a dynamically created file from the instance JavaScript files", + "fileNavTooltipViews": "Views are template files that can render HTML or various other MIME types.", + "fileNotFound": "File could not be found. {{fileZUID}}", + "fileNotFoundToSave": "We were not able to find the file you are trying to save.", + "fileSortOrderSaved": "File sort order has been saved", + "fileType": "File Type", + "fileTypeChoose": "Choose a file type", + "fileTypeCss": "CSS File (css)", + "fileTypeCustom": "Custom File Type ({{extension}})", + "fileTypeCustomEndpoint": "Custom File Type/Endpoint (Mixed Extensions)", + "fileTypeJavaScript": "JavaScript File (js)", + "fileTypeLegacy": "Legacy File", + "fileTypeLess": "LESS File (less)", + "fileTypeModelView": "Model View", + "fileTypeScss": "SCSS File (scss/sass)", + "fileTypeSnippet": "Snippet (html)", + "fileZuid": "File ZUID", + "filterFiles": "Filter Files", + "findingFile": "Finding File", + "findingFileVersions": "Finding File Versions", + "headerTitle": "Code", + "instantJsonApi": "Instant JSON API", + "javascriptDescription": "A javascript file that is automatically concatenated into a the single /main.js file that is automatically loaded by webengine. No transpiling occurs.", + "lastEdited": "Last edited", + "learnMoreParsleySyntax": "Learn More Parsley Syntax", + "learnMoreProcessingFlows": "Learn More About Processing Flows", + "lessDescription": "Has access to settings > variables. A cascading stylesheet that is automatically concatenated into a the single /main.css. Sort Order of the concatenation and transpiling can be controlled.", + "linkedContent": "Linked Content", + "linkedContentDescription": "Shown are the three latest content entries from this view's linked model.", + "linkedSchemaBodyText": "Use the below Parsley syntax to reference this model's fields. This will dynamically link to the field's content.", + "linkedSchemaTitle": "{{fileName}}'s Related Model Schema", + "live": "Live", + "loadingFileInformation": "Loading file information", + "loadVersion": "Load Version", + "modelZuid": "Model ZUID", + "moreFileInformation": "More file information", + "mustProvideFileName": "You must provide a name for the new file", + "mustSelectFileType": "You must select a file type to create a new file", + "newRemoteVersionNotice": "There is a new remote version ahead of your local changes", + "noFilesFound": "No files found", + "noResultsFor": "No results for \"{{keyword}}\"", + "openDrawer": "Open Drawer {{metaShortcut}}", + "openForAdditionalFileInfo": "Open for additional file information", + "orderFilesBody": "The displayed order is the order in which files are processed and concatenated together into the dynamically created {{siteFile}} file.", + "orderFilesPublishWarning": "After ordering a publish has to occur to process the new order and make the change live.", + "orderFilesSaveOrder": "Save Order", + "orderFilesTitle": "Order {{typePathPart}}", + "pleaseAddLeadingSlash": "Please add leading slash in file path EX: /{{name}}", + "previewCssWebpage": "Preview CSS Webpage", + "previewFileWebpage": "Preview {{fileName}} Webpage", + "previewInstantJson": "Preview {{path}}", + "previewItemWebpage": "Preview Item Webpage", + "previewJavascriptWebpage": "Preview Javascript Webpage", + "previewJson": "Preview JSON", + "previewPathWebpage": "Preview {{path}} Webpage", + "publish": "Publish", + "publishedVersion": "Published: Version {{n}}", + "publishFileError": "Failed to publish file. {{status}} | {{error}}", + "publishFileShortcut": "Publish File {{shortcut}}", + "publishFileSuccess": "Published {{fileName}} version {{latestVersion}}", + "saveAndPublish": "Save & Publish", + "saveFileError": "Failed to save file. {{status}} | {{error}}", + "saveFileShortcut": "Save File {{shortcut}}", + "saveFileSuccess": "Saved {{fileName}}", + "saveVersion": "Save Version", + "scssDescription": "Has access to settings > variables. A cascading stylesheet that is automatically concatenated into a the single /main.css. Sort Order of the concatenation and transpiling can be controlled.", + "searchFiles": "Search Files", + "simplifyWorkflowBody": "Discover our streamlined workflows and boost your development efficiency. See how this works with our .", + "simplifyWorkflowHeading": "Simplify Your Workflow: Preprocessing Inside! 💻", + "snippetDescription": "Parsley accessible file meant to abstract common use of code, or for organizing file build. Examples: slider, footer, header. These can be used inside of each loops as well.", + "startingCodeEditor": "Starting Code Editor", + "unableToLoadFileLogs": "Unable to load Code file logs", + "unknown": "Unknown", + "unlock": "Unlock", + "unsavedChangesDetail": "You have unsaved changes that will be lost if you leave this page.", + "versionLabel": "Version {{n}}", + "versionPublishedByUser": "v{{n}} published {{date}} by {{user}}", + "versionSavedByUser": "v{{n}} saved {{date}} by {{user}}", + "viewingVersion": "Viewing: Version {{n}}", + "viewNotFound": "View Not Found", + "webEngineFileLink": "WebEngine {{fileName}} Link", + "webEngineLink": "WebEngine Link" +} diff --git a/public/locales/en-US/common.json b/public/locales/en-US/common.json new file mode 100644 index 0000000000..e44038a55b --- /dev/null +++ b/public/locales/en-US/common.json @@ -0,0 +1,74 @@ +{ + "add": "Add", + "apis": "APIs", + "back": "Back", + "cancel": "Cancel", + "clear": "Clear", + "code": "Code", + "codeFile": "Code File", + "codeFiles": "Code Files", + "comment": "Comment", + "content": "Content", + "contentItems": "Content Items", + "copied": "Copied", + "copy": "Copy", + "create": "Create", + "createdBy": "Created By", + "dateAfterValue": "After {{date}}", + "dateAtTime": "{{date}} at {{time}}", + "dateBeforeValue": "Before {{date}}", + "dateOnValue": "On {{date}}", + "delete": "Delete", + "dev": "Dev", + "discard": "Discard", + "domains": "Domains", + "done": "Done", + "edit": "Edit", + "getStarted": "Get Started", + "goBack": "Go Back", + "graphqlDocs": "GraphQL Docs", + "instanceApiDocs": "Instance API Docs", + "invalidDate": "Invalid Date", + "last12Months": "Last 12 months", + "last30Days": "Last 30 days", + "last3Months": "Last 3 months", + "last7Days": "Last 7 days", + "locales": "Locales", + "manage": "Manage", + "media": "Media", + "mediaItems": "Media Items", + "mediaRequests": "Media Requests", + "model": "Model", + "models": "Models", + "more": "More", + "name": "Name", + "next": "Next", + "no": "No", + "noUsersFound": "No users found", + "open": "Open", + "parsleyDocs": "Parsley Docs", + "platformDocs": "Platform Docs", + "preview": "Preview", + "prod": "Prod", + "remove": "Remove", + "replace": "Replace", + "reply": "Reply", + "save": "Save", + "search": "Search", + "searchAgain": "Search Again", + "sortNameAToZ": "Name (A to Z)", + "sortNameZToA": "Name (Z to A)", + "stage": "Stage", + "support": "Support", + "teams": "Teams", + "today": "Today", + "unsavedChanges": "Unsaved Changes", + "update": "Update", + "upload": "Upload", + "usage": "Usage", + "users": "Users", + "view": "View", + "webhooks": "Webhooks", + "yes": "Yes", + "yesterday": "Yesterday" +} diff --git a/public/locales/en-US/content.json b/public/locales/en-US/content.json new file mode 100644 index 0000000000..ca43ed8ac5 --- /dev/null +++ b/public/locales/en-US/content.json @@ -0,0 +1,730 @@ +{ + "addFieldsInSchemaButton": "Add Fields in Schema", + "addFieldsTitle": "Add Fields to Your Model", + "analyticsAuthenticateGoogle": "Authenticate with Google", + "analyticsAvgTimeLabel": "avg. time", + "analyticsBarCountry": "Country", + "analyticsBarSource": "Source", + "analyticsByDay": "{{type}} By Day", + "analyticsChangeAccount": "Change Google Account", + "analyticsChartAvgEngagement": "Avg. Engagement Time", + "analyticsColStats": "Stats", + "analyticsComparePage": "Compare Page", + "analyticsComparePageBody": "Please select a page you'd like to compare your current page against", + "analyticsConnectBody": "Learn where your pages traffic comes from and how it changes based on changes made to content. To start, please authenticate with the Google account your Google Analytics is connected to.", + "analyticsConnectedAccount": "You are currently connected to the following Google Account.", + "analyticsConnectedSubtitle": "Get ready to gain insights on how your content changes have impacted your page traffic and more!", + "analyticsConnectedTitle": "Congratulations {{name}}! You are successfully connected to Google Analytics", + "analyticsConnectErrorSubtitle": "This can because you may have selected a Google account that does not have Google Analytics setup.", + "analyticsConnectErrorTitle": "Oops, we were unable to successfully connect to Google Analytics", + "analyticsConnectTitle": "Connect to Google Analytics", + "analyticsContactSupport": "Contact Support", + "analyticsDashboard": "Dashboard", + "analyticsDisconnectAccount": "Disconnect Account", + "analyticsDisconnectBody": "Disconnecting will mean that you will not be able to view analytics for any content items in Zesty.", + "analyticsDisconnectTitle": "Disconnect Google Analytics Account?", + "analyticsGaSettings": "GA Settings", + "analyticsGoogleIconAlt": "Google Analytics Icon", + "analyticsItemMetaLine": "{{label}} • {{time}} • by {{user}}", + "analyticsItemNotExist": "This item does not exist in your instance", + "analyticsItemPublished": "Item Published", + "analyticsLearnMore": "Learn More", + "analyticsLegendNew": "New", + "analyticsLegendOther": "Other", + "analyticsLegendReturning": "Returning", + "analyticsMetricAvgDuration": "Avg. Duration", + "analyticsMetricAvgDurationDesc": "Session duration is the time frame during which there are users interactions occurring on the website.", + "analyticsMetricAvgEngagement": "Average Engagement Time", + "analyticsMetricAvgEngagementDesc": "Average engagement time is the average time that your website was in focus in a user's browser or a mobile app was in the foreground on a user's device.", + "analyticsMetricBounceRate": "Bounce Rate", + "analyticsMetricBounceRateDesc": "Bounce rate is the percentage of people who land on a page and leave without performing a specific action.", + "analyticsMetricConversions": "Conversions", + "analyticsMetricConversionsDesc": "A conversion is a user action that you count because you consider it important, such as a purchase, game level completion, or website or app scroll activity.", + "analyticsMetricEvents": "Events", + "analyticsMetricSessions": "Sessions", + "analyticsMetricSessionsDesc": "A session in Google Analytics is a period of time in which a user interacts with your website.", + "analyticsMetricViews": "Views", + "analyticsMetricViewsDesc": "A pageview is defined as a view of a page on your site that is being tracked by the Analytics tracking code. If a user clicks reload after reaching the page or navigates to a different page and then returns to the original page, then this is counted as an additional page view.", + "analyticsNewUsersDesc": "New users are users who have never visited your website or app before", + "analyticsNewUsersForRange": "New Users for the {{range}}", + "analyticsNewVsReturning": "New vs Returning Users", + "analyticsPageSettingsTitle": "Page Analytics Settings", + "analyticsPresetQuarterToDate": "Quarter to Date", + "analyticsPresetThisWeek": "This Week (Sun - Today)", + "analyticsPresetThisYear": "This Year (Jan - Today)", + "analyticsPropertiesCount": "{{count}} Properties", + "analyticsPropertiesCount_one": "{{count}} Property", + "analyticsPropertiesCount_other": "{{count}} Properties", + "analyticsRangeDayBeforeYesterday": "Day Before Yesterday", + "analyticsRangeLast12Months": "Last 12 Months", + "analyticsRangeLast14Days": "Last 14 Days", + "analyticsRangeLast30Days": "Last 30 Days", + "analyticsRangeLast3Months": "Last 3 Months", + "analyticsRangeLast7Days": "Last 7 Days", + "analyticsRangeLastQuarter": "Last Quarter", + "analyticsRangeLastWeek": "Last Week", + "analyticsRangeLastYear": "Last Year", + "analyticsRangePrior12Months": "Prior 12 Months", + "analyticsRangePrior14Days": "Prior 14 Days", + "analyticsRangePrior30Days": "Prior 30 Days", + "analyticsRangePrior3Months": "Prior 3 Months", + "analyticsRangePrior7Days": "Prior 7 Days", + "analyticsRangeThisQuarter": "This Quarter", + "analyticsRangeThisWeek": "This Week", + "analyticsRangeThisYear": "This Year", + "analyticsRecentPublishes": "Recent Publishes", + "analyticsReturningUsersDesc": "Returning users are users who have never visited your website or app before", + "analyticsReturningUsersForRange": "Returning Users for the {{range}}", + "analyticsSearchProperties": "Search Google Analytics Properties", + "analyticsSearchResults": "Search Results", + "analyticsSelectProperty": "Select a Google Analytics Property", + "analyticsSelectPropertyBody": "Please select the Google Analytics property you want to see analytics and insights for", + "analyticsSourceIncreased": "{{source}} users increased by {{percentage}}% — {{range}}", + "analyticsTabGainers": "Gainers", + "analyticsTabLatestPublishes": "Latest Publishes", + "analyticsTabLosers": "Losers", + "analyticsTabMostPopular": "Most Popular", + "analyticsTabRecentEdits": "Recent Edits", + "analyticsTotalSessions": "Total Sessions", + "analyticsTotalUsers": "Total Users", + "analyticsTryAgain": "Try Again", + "analyticsUnableToLoadMessage": "This may be due to a bad internet connection so please try again. If you are still unable to resolve this issue, please contact support.", + "analyticsUnableToLoadTitle": "Unable to Load Analytics Data", + "analyticsUsers": "Users", + "analyticsUsersBy": "Users By {{type}}", + "analyticsUsersLabel": "users", + "analyticsViewVersion": "View Version {{version}}", + "apiCodeIdLabel": "API / Parsley Code ID", + "apiCodeIdTooltip": "This will appear as the key in API responses.", + "blockCreateVariant": "Create Variant", + "blockSearchAgain": "Search Again", + "blockSearchNoResults": "Your search \"{{search}}\" could not find any results", + "blockSearchNoResultsHint": "Try adjusting your search. We suggest check all words are spelled correctly or try using different keywords.", + "blockSearchVariants": "Search variants", + "blocksReferencedInCodeOrFreestyle": "Blocks Referenced in Code or Freestyle", + "blockTabCode": "Code", + "blockTabInfo": "Info", + "blockTabVariants": "Variants", + "booleanHide": "Hide", + "booleanShow": "Show", + "browse": "Browse", + "closeInspectorPanelAriaLabel": "Close inspector panel", + "codeSampleBaseTemplate": "Base Template", + "codeSampleBaseTemplateTip": "Uses the base template for rendering the block. This is the default template applied when no specific template is selected.", + "codeSampleBaseTemplateVersion": "Base Template with Version", + "codeSampleBaseTemplateVersionTip": "Uses the base template for rendering the block with a specific version number. Adding the version parameter allows you to target a particular version of the template.", + "codeSampleBlockSelector": "Block Selector", + "codeSampleBlockSelectorTip": "Uses the value of a block selector field. Replace \"block_selector_field\" with the actual name of the block selector field during model creation.", + "codeSampleSpecificVariant": "Specific Block Variant", + "codeSampleSpecificVariantTip": "Uses a specific variant of the block. The variant parameter targets a particular variation of the block by its ZUID.", + "connectItem": "Connect Item", + "contentFetchResourceFailed": "Failed to fetch resource. {{status}}", + "contentSearchItemFailed": "Failed to search item: {{error}}", + "correctFieldsBeforeSaving_one": "Please correct the following {{count}} field before saving", + "correctFieldsBeforeSaving_other": "Please correct the following {{count}} fields before saving", + "csvImportColumnMismatch": "There's a column number mismatch on the CSV file", + "csvImportCreateItems": "Create Items", + "csvImportDuplicateColumns": "You have duplicated the use of these columns: {{columns}}", + "csvImportEmptyFile": "You have imported an empty CSV file", + "csvImportErrorsCount": "Errors {{count}}", + "csvImportErrorsCount_one": "Error {{count}}", + "csvImportErrorsCount_other": "Errors {{count}}", + "csvImportFailureCreating": "Failure creating item: {{error}}", + "csvImportImportedCount": "Imported {{count}} of {{total}}", + "csvImportImportedCount_one": "Imported {{count}} of {{total}}", + "csvImportImportedCount_other": "Imported {{count}} of {{total}}", + "csvImportNone": "none", + "csvImportNotCsvFile": "You selected a file that is not a CSV", + "csvImportOpenFile": "Open CSV File", + "csvImportResolveDuplicates": "You must resolve duplicate column conflicts", + "csvImportSelectPathPart": "You must select a column for Path Part", + "csvSettingsAllowedParams": "Allowed query parameters (comma-separated)", + "csvSettingsAllowedParamsDesc": "Only list comma-separated parameter names. Do not include values, ampersands, equals, or spaces.", + "csvSettingsAutoPriority": "Automatically Set Priority", + "csvSettingsCanonicalNotEnabled": "Canonical tags are not enabled. For more information, read", + "csvSettingsCanonicalOff": "Off", + "csvSettingsCanonicalOnAllow": "On - Allow certain parameters", + "csvSettingsCanonicalOnCustom": "On - Custom Path or Custom URL", + "csvSettingsCanonicalOnIgnore": "On (Ignores query parameters)", + "csvSettingsCustomPathDesc": "For Custom Paths: begin with a forward slash. For Custom URL: begin with http:// or https://", + "csvSettingsCustomPathLabel": "Custom Path Value or URL", + "csvSettingsMetaLinkText": "Meta Link Text", + "csvSettingsNoSitemap": "Do Not Display in Sitemap", + "csvSettingsParentZuid": "Parent ZUID", + "csvSettingsPathPart": "Path Part", + "currencyLocaleTooltip": "View this value in different currencies based upon your locale \"{{locale}}\"", + "deleteItemFailure": "Failure deleting item: {{statusText}}", + "deleteItemSuccess": "Successfully deleted item", + "disconnect": "Disconnect", + "editFieldButton": "Edit Field", + "editorTypeHtml": "HTML", + "editorTypeInline": "Inline", + "editorTypeMarkdown": "Markdown", + "editorTypeWysiwyg": "WYSIWYG", + "elementNotEditableHere": "This element can't be edited here.", + "emptyCreateModel": "Please create a new content model", + "errorPublishing": "Error publishing {{title}}", + "errorScheduling": "Error scheduling {{title}}", + "errorUnpublishing": "Error unpublishing {{title}}", + "errorUnschedulingVersion": "Error unscheduling version {{version}}", + "exceedingMaxLength_one": "Exceeding by {{count}} character.", + "exceedingMaxLength_other": "Exceeding by {{count}} characters.", + "failedFetchItemPublishing": "Failed to fetch item publishing: {{error}}", + "failedFetchItemPublishings": "{{status}}: Failed to fetch item publishings: {{error}}", + "failedFetchItemPublishingsError": "Failed to fetch item publishings: {{error}}", + "failedFetchModelPublishings": "Failed to fetch model items publishings: {{error}}", + "failedLoadingField": "Failed loading {{label}} field. Click here to view field schema.", + "fieldAddedOnLabel": "Field added on", + "fieldMetaArticleWriterDescription": "Long-form article content", + "fieldMetaBlockSelectorDescription": "A reusable content block", + "fieldMetaColorDescription": "A colour value", + "fieldMetaCurrencyDescription": "Monetary values", + "fieldMetaDateDescription": "A calendar date", + "fieldMetaDatetimeDescription": "A date and time", + "fieldMetaDropdownDescription": "A single choice from a list", + "fieldMetaImagesDescription": "Media from the asset library", + "fieldMetaInternalLinkDescription": "A link to another page", + "fieldMetaLinkDescription": "An external URL", + "fieldMetaMarkdownDescription": "Markdown-formatted text", + "fieldMetaNumberDescription": "Whole or decimal numbers", + "fieldMetaOneToManyDescription": "Links to related items", + "fieldMetaOneToOneDescription": "A link to one related item", + "fieldMetaRepeaterDescription": "A repeating group of fields", + "fieldMetaSortDescription": "A manual sort order", + "fieldMetaTextareaDescription": "Plain multi-line text", + "fieldMetaTextDescription": "Titles, names, and headings", + "fieldMetaUuidDescription": "A unique identifier", + "fieldMetaWysiwygDescription": "Rich text with formatting", + "fieldMetaYesNoDescription": "A true / false toggle", + "fieldTypeLabel": "{{type}} Field", + "fieldZuidLabel": "Field ZUID", + "fieldZuidTooltip": "Unique Hash assigned to each field. It can be used to access a field's information through our API.", + "footerTagline": "Agentic Studio by Content.One", + "hideDialogHideBody1": "This will shift the {{label}} content item from the pages section to the hidden items section below. We recommend only using this feature to declutter up your content navigation tree from items you do not access very often.", + "hideDialogHideBody2": "This will not hide any of your articles from your live website or app.", + "hideDialogHideButton": "Hide {{label}}", + "hideDialogHideTitle": "Hide {{label}}?", + "hideDialogUnhideBody": "This will shift the {{label}} content item from the Hidden Items section to the Pages section above.", + "hideDialogUnhideButton": "Unhide {{label}}", + "hideDialogUnhideTitle": "Unhide {{label}}?", + "invalidFieldValuesTitle": "Item cannot be saved due to invalid field values.", + "itemCreateAddNew": "Create & Add New", + "itemCreateCannotSaveError": "Cannot Save: {{error}}", + "itemCreateCreatedItem": "Created Item: {{name}}", + "itemCreateImproveWithAI": "Improve with AI", + "itemCreateLoading": "Creating New Item", + "itemCreatePublishAddNew": "Create, Publish & Add New", + "itemCreatePublishNow": "Create & Publish Now", + "itemCreateSchedulePublish": "Create & Schedule Publish", + "itemCreateSchedulePublishAddNew": "Create, Schedule Publish & Add New", + "itemCreateTitleItem": "Create {{label}} Item", + "itemCreateTitleVariant": "Create Variant", + "itemCreateUnknownIssue": "Unknown issue creating new item", + "itemEditActions": "Actions", + "itemEditAddStatus": "Add Status", + "itemEditAlsoPublishRelatedItems": "Also publish related items", + "itemEditAutomatedNavigationOrder": "Automated Navigation Order", + "itemEditAutomatedNavigationOrderTooltip": "Automated Navigation Order controls the output of the automated parsley {{navigation}} and {{sectionlinks}}. It can also be used in an each loop like: {{each items as items sort by z.sort}} calls.", + "itemEditAvailableInLoops": "Available in Loops", + "itemEditAvailableInLoopsTooltip": "Determines if this item will be available in Parsley loops. A common example of this is listing a blog post as an entry on an article listing page.", + "itemEditByUser": "by {{name}}", + "itemEditCannotPublishStatus": "Cannot Publish: \"{{title}}\". Does not have a status that allows publishing", + "itemEditCannotSaveTitle": "Cannot Save: {{title}}", + "itemEditCannotSaveTooManySelected": "Cannot save field. Please reduce the total number of items selected.", + "itemEditCannotSaveValueTooLong": "Cannot save field. Value is too long.", + "itemEditCannotSaveWithError": "Cannot Save: {{title}} - {{error}}", + "itemEditCdnDescription": "Force the CDN to refresh the cache for this item. CDN caching can take from a few seconds to minutes to occur as this re-caches the item across the entire global network.", + "itemEditCdnPurgeError": "There was an issue trying to purge the CDN cache", + "itemEditCdnPurgeSuccess": "The item has been purged from the CDN cache", + "itemEditCdnTitle": "CDN", + "itemEditCloseInfoBar": "Close Info Bar", + "itemEditContinueEditing": "Continue Editing", + "itemEditCreatedAt": "Created At", + "itemEditDeleteConfirmTitle": "Are you sure you want to delete the item:\n{{title}}", + "itemEditDeleteContentItemDescription": "Deleting this item will remove it from all locations throughout your site and make it unavailable to API requests. This cannot be undone.", + "itemEditDeleteContentItemTitle": "Delete Content Item", + "itemEditDeletedNotFound": "Item has been deleted", + "itemEditDeleteItem": "Delete Item", + "itemEditDeleteThing": "Delete {{thing}}", + "itemEditDeleteVariant": "Delete Variant", + "itemEditDeleteWidgetDescription": "Delete this content? Removing it from all locations throughout your site and making it unavailable to API requests.", + "itemEditDontSave": "Don't Save", + "itemEditDraftHistoryTitle": "Draft History", + "itemEditDraftPreviewVersion": "Draft Preview - v{{version}}", + "itemEditDuplicateContentItemTitle": "Duplicate Content Item", + "itemEditDuplicateDescription": "This will create and save a copy of this item immediately.", + "itemEditDuplicateFailed": "Failed to duplicate item.", + "itemEditDuplicateItem": "Duplicate Item", + "itemEditDuplicateVariant": "Duplicate Variant", + "itemEditEditCode": "Edit Code", + "itemEditEditStatuses": "Edit Statuses", + "itemEditFailedFetchNav": "Failed to fetch nav", + "itemEditFailedLoadFields": "Failed to load fields", + "itemEditFetchingPublishings": "Fetching Publishings", + "itemEditGoOffline": "Go Offline", + "itemEditGoOnline": "Go Online", + "itemEditInfoTitle": "Info", + "itemEditInstantApi": "Instant API", + "itemEditItem": "Item", + "itemEditItemLockedDescription": "{{name}} is viewing this item since {{viewedAt}}. Unlock this item to ignore this warning and possibly overwrite {{firstName}}'s changes.", + "itemEditItemLockedTitle": "Item Locked", + "itemEditLinksTitle": "Links", + "itemEditLive": "Live", + "itemEditLivePublished": "Live Published", + "itemEditManagePublishState": "Manage Publish State", + "itemEditManagePublishStatus": "Manage Publish Status", + "itemEditMetaAddImage": "Add Meta Image", + "itemEditMetaAddIncomingPath": "Add Incoming Path", + "itemEditMetaAdvancedSettings": "Advanced Settings", + "itemEditMetaAdvancedSettingsDescription": "Optimize your content item SEO further", + "itemEditMetaAiAssistedPrimary": "Yes, improve with AI Meta Data Assistant", + "itemEditMetaAiAssistedSecondary": "Our AI will scan your content and generate your meta data for you", + "itemEditMetaAiPromptDatasetSuffix": "with internal content search.", + "itemEditMetaAiPromptDescriptionPrefix": "Our AI Assistant will scan your content and improve your meta title and description to help", + "itemEditMetaAiPromptSeoSuffix": "improve search engine visibility.", + "itemEditMetaAiPromptTitle": "Have AI write your Meta Data?", + "itemEditMetaApiFailedTryAgain": "API failed to return data. Try again.", + "itemEditMetaApiFailedWithStatus": "API failed to return data {{status}}", + "itemEditMetaCanonicalAllowedParameters": "Allowed query parameters (comma-separated)", + "itemEditMetaCanonicalAllowedParametersDescription": "Only list comma-separated parameter names. Do not include values, ampersands, equals, or spaces.", + "itemEditMetaCanonicalAllowedParametersPlaceholder": "page,category", + "itemEditMetaCanonicalCustomPath": "Custom Path Value or URL", + "itemEditMetaCanonicalCustomPathDescription": "For Custom Paths: begin with a forward slash. For Custom URL: begin with http:// or https://", + "itemEditMetaCanonicalCustomPathPlaceholder": "/page/example/ or https://example.com/", + "itemEditMetaCanonicalEnableDocsLink": "Enabling Canonical Tags", + "itemEditMetaCanonicalNotEnabled": "Canonical tags are not enabled. For more information, read", + "itemEditMetaCanonicalOff": "Off", + "itemEditMetaCanonicalOnAllowParameters": "On - Allow certain parameters", + "itemEditMetaCanonicalOnCustomPath": "On - Custom Path or Custom URL", + "itemEditMetaCanonicalOnIgnoreQuery": "On (Ignores query parameters)", + "itemEditMetaCanonicalTag": "Canonical Tag", + "itemEditMetaCanonicalTagTooltip": "Canonical tags help search engines understand authoritative links and can help prevent duplicate content issues. Zesty.io auto-creates tags on demand based on your settings.", + "itemEditMetaContentAndMetaMatchedWords": "Content and Meta Matched Words", + "itemEditMetaCustomizeImage": "Customize Image", + "itemEditMetaDeleteRedirect": "Delete Redirect", + "itemEditMetaDescription": "Meta Description", + "itemEditMetaDescriptionFoundLeftGuillemet": "Found << character. These special characters are not allowed in meta descriptions.", + "itemEditMetaDescriptionFoundOeLigature": "Found OE ligature. These special characters are not allowed in meta descriptions.", + "itemEditMetaDescriptionFoundRightGuillemet": "Found >> character. These special characters are not allowed in meta descriptions.", + "itemEditMetaDescriptionFoundSmallOeLigature": "Found oe ligature. These special characters are not allowed in meta descriptions.", + "itemEditMetaDescriptionFoundSmartDoubleQuotes": "Found Microsoft Smart double quotes and/or apostrophe. These special characters are not allowed in meta descriptions because they may render incorrectly, where characters show up as replacement symbols or other odd symbols. Please use straight quotes instead.", + "itemEditMetaDescriptionFoundSmartSingleQuotes": "Found Microsoft Smart single quotes and/or apostrophe. These special characters are not allowed in meta descriptions because they may render incorrectly, where characters show up as replacement symbols or other odd symbols. Please use straight quotes instead.", + "itemEditMetaDescriptionPlaceholder": "This is the description search engines should use in their results", + "itemEditMetaDescriptionTooltip": "This description appears as text snippet below the title in search engine and social media previews. The ideal length for a meta description is 50 to 160 characters.", + "itemEditMetaEditRedirect": "Edit Redirect", + "itemEditMetaFilterWords": "Filter words", + "itemEditMetaHttpCode": "HTTP Code", + "itemEditMetaImage": "Meta Image", + "itemEditMetaImageFileExtensionsError": "Only files with the following extensions are allowed: .png, .jpg, .jpeg, .svg, .gif, .tif, .webp, .avif", + "itemEditMetaImageTooltip": "This image appears in search engine and social media previews. It is recommended that these images are at least 1200px by 630px and have a 1.91:1 aspect ratio.", + "itemEditMetaIncomingPath": "Incoming Path", + "itemEditMetaIncomingRedirects": "Incoming Redirects", + "itemEditMetaIncomingRedirectsDescription": "Manage redirects that point to this content item", + "itemEditMetaKeywords": "Meta Keywords", + "itemEditMetaKeywordsPlaceholder": "comma, separated, keywords", + "itemEditMetaKeywordsTooltip": "Keywords are comma separated words or phrases that describe your page. In 2011 Google denounced keywords; keywords are only used against your page ranking. Use them with caution.", + "itemEditMetaManualPrimary": "No, I will improve and edit it myself", + "itemEditMetaManualSecondary": "Perfect if you already know what you want your Meta Data to be", + "itemEditMetaMostMentionedWords": "Most Mentioned Words in Content Item", + "itemEditMetaMostMentionedWordsDescription": "Check that your focus keywords are occurring a minimum 2 times.", + "itemEditMetaNavigationLinkText": "Navigation Link Text", + "itemEditMetaNavigationLinkTextPlaceholder": "This text is used in application navigation", + "itemEditMetaNavigationLinkTextTooltip": "The title of this item that appears in the Zesty navigation and programmatically generated navigation within the Parsley navigation() function.", + "itemEditMetaNoMatchingWords": "No Matching Words", + "itemEditMetaNonFillerWords": "Non Filler Words", + "itemEditMetaNoRepeatedWords": "No words in your content item occur 2 or more times", + "itemEditMetaOgDescriptionTooltip": "This title appears in open graph social media previews (e.g. Facebook) below the title.", + "itemEditMetaOgTitleTooltip": "This title appears in open graph social media previews (e.g. Facebook).", + "itemEditMetaPageParent": "Page Parent", + "itemEditMetaPageParentTooltip": "Set what page this content item page will be nested under. This impacts automatically generated navigation and the URL structure for this page.", + "itemEditMetaParentMissing": "Page parent does not exist or has been deleted", + "itemEditMetaSeeLess": "See Less", + "itemEditMetaSeeMore": "See More", + "itemEditMetaSeoOpenGraphDescription": "Specify this page title and description. You can see how they will look in search engine results pages (SERPs) and social media content in the preview on the right.", + "itemEditMetaSeoOpenGraphSettings": "SEO & Open Graph Settings", + "itemEditMetaSitemapAutomaticallySetPriority": "Automatically Set Priority", + "itemEditMetaSitemapDoNotDisplay": "Do Not Display in Sitemap", + "itemEditMetaSitemapPriority": "Sitemap Priority", + "itemEditMetaSitemapPriorityTooltip": "Sitemap priority helps search engines understand how often they should crawl the pages on your site.", + "itemEditMetaTcDescriptionTooltip": "This title appears in Twitter Card social media previews below the title.", + "itemEditMetaTcTitleTooltip": "This title appears in Twitter Card social media previews.", + "itemEditMetaTitle": "Meta Title", + "itemEditMetaTitlePlaceholder": "This is the title search engines should use in their results", + "itemEditMetaTitleTooltip": "This title appears in search engine results and social media previews. The maximum amount of characters search engines show is 65, but your title can be longer.", + "itemEditMetaUniqueWords": "Unique Words", + "itemEditMetaUrlPathPart": "URL Path Part", + "itemEditMetaUrlPathPartTooltip": "Also known as a URL slug, it is the last part of the URL address that serves as a unique identifier of the page. They must be unique within your instance, lowercased, and cannot contain non alphanumeric characters. This helps ensure you create SEO friendly structured and crawlable URLs.", + "itemEditMetaUrlPathTaken": "This URL Path Part is already taken. Please enter a different URL Path part.", + "itemEditMetaUrlSettings": "URL Settings", + "itemEditMetaUrlSettingsDescription": "Define the URL of your web page", + "itemEditMetaWords": "Words", + "itemEditMissingRequiredData": "Missing Data in Required Fields", + "itemEditMoreOptions": "More Options", + "itemEditNoDraftActivityLogs": "No Activity Log edit logs for this content.", + "itemEditNoPermissionAddStatus": "Do not have permission to add this status", + "itemEditNoPermissionRemoveStatus": "Do not have permission to remove this status", + "itemEditNotFound": "Item not found", + "itemEditOffline": "Offline", + "itemEditOn": "on", + "itemEditOpenDuoMode": "Open DUO Mode", + "itemEditOpenInfoBar": "Open Info Bar", + "itemEditParsleyBehaviorsTitle": "Parsley Behaviors", + "itemEditPreviewPage": "Preview Page", + "itemEditPreviewVersion": "Preview {{version}}", + "itemEditProductionPreviewVersion": "Production Preview - v{{version}}", + "itemEditPublishHistoryTitle": "Publish History", + "itemEditPublishingErrorFallback": "An error occurred while publishing. Please try again.", + "itemEditPublishingZuid": "Publishing ZUID", + "itemEditPublishItem": "Publish Item", + "itemEditPublishRelatedItemsDescription": "This will publish all items selected in the list below", + "itemEditQuickShareTitle": "Quick Share", + "itemEditRefreshCachedItem": "Refresh Cached Item", + "itemEditRefreshingCachedItem": "Refreshing Cached Item", + "itemEditRenameVariant": "Rename Variant", + "itemEditRenameVariantDescription": "This will update the variant title that is shown to content editors", + "itemEditSaved": "Saved", + "itemEditSavedNotification": "Item Saved: {{title}}", + "itemEditSaveItem": "Save Item", + "itemEditSavePublishItem": "Save & Publish Item", + "itemEditScheduleUnpublish": "Schedule Unpublish", + "itemEditSearchStatus": "Search status", + "itemEditSelectFieldsForReview": "Select fields for review", + "itemEditSelectTeamMembers": "Select team members", + "itemEditSendEmail": "Send Email", + "itemEditStatusSearchNoResultsTitleRich": "Your search \"{{search}}\" could not find any results", + "itemEditSwitchOffDuoMode": "Switch off DUO Mode", + "itemEditSwitchOnDuoMode": "Switch on DUO Mode", + "itemEditTabAnalytics": "Analytics", + "itemEditTabFreestyle": "Freestyle", + "itemEditTabHeadTags": "Head Tags", + "itemEditTabPublishStatus": "Publish Status", + "itemEditTabRedirects": "Redirects", + "itemEditTabSeo": "SEO", + "itemEditTakeOffline": "Take Offline", + "itemEditUnlock": "Unlock", + "itemEditUnpublishContentItemTitle": "Unpublish Content Item", + "itemEditUnpublishDescription": "This will make it immediately unavailable on all of your platforms. You can always republish this item by clicking on the publish button.", + "itemEditUnpublishItem": "Unpublish Item", + "itemEditUnpublishNow": "Unpublish Now", + "itemEditUnpublishTitle": "Unpublish", + "itemEditUnpublishWidgetDescription": "By unpublishing this content it will no longer be served if the URL is requested. The URL will return a 404 not found response.", + "itemEditUnsavedChangesDescription": "You have unsaved changes that will be lost if you leave this page.", + "itemEditUnschedulePublish": "Unschedule Publish", + "itemEditVariant": "Variant", + "itemEditVariantTitle": "Variant Title", + "itemEditVersion": "Version", + "itemEditVersionPublished": "v{{version}} published {{on}}", + "itemEditVersionPublishedLabel": "v{{version}} Published", + "itemEditVersionPublishedOn": "v{{version}} published on", + "itemEditVersionSavedOn": "v{{version}} saved on", + "itemEditVersionScheduledLabel": "v{{version}} Scheduled", + "itemEditVersionScheduledToPublishOn": "v{{version}} scheduled to publish on", + "itemEditViewActivityLog": "View Activity Log", + "itemEditViewLanguages": "View Languages", + "itemEditViewVersions": "View Versions", + "itemEditWorkflowRequestFailed": "Failed sending workflow request on {{title}} to {{members}}", + "itemEditWorkflowRequestMessage": "Workflow request message", + "itemEditWorkflowRequestSent": "Sent workflow request on {{title}} to {{members}}", + "itemEditWorkflowRequestTitle": "Workflow Request", + "itemEditZuidTooltip": "Content items are always accessed relative to their model, so a model ZUID is required for each call.", + "itemListCopyZuid": "Copy ZUID", + "itemListDateCreated": "Date Created", + "itemListDateSaved": "Date Saved", + "itemListDeleteButton_one": "Delete Item ({{count}})", + "itemListDeleteButton_other": "Delete Items ({{count}})", + "itemListDeleteDescription_one": "Deleting this item will remove it from all locations throughout your site and make it unavailable to API requests. This cannot be undone.", + "itemListDeleteDescription_other": "Deleting these {{count}} items will remove them from all locations throughout your site and make them unavailable to API requests. This cannot be undone.", + "itemListDeleteTitle_one": "Delete {{count}} Item", + "itemListDeleteTitle_other": "Delete {{count}} Items", + "itemListEditModel": "Edit Model", + "itemListEditTemplate": "Edit Template", + "itemListEmptyDescription": "Add your content here. Start by creating your first item.", + "itemListEmptyTitle": "Start Creating Content Now", + "itemListErrorPublishing": "Error publishing items: {{error}}", + "itemListErrorSaving": "Error saving items: {{error}}", + "itemListExportCsv": "Export CSV", + "itemListFieldsLabel": "Fields", + "itemListFilterNoResultsBody": "Try adjusting your filters to find what you're looking for", + "itemListFilterNoResultsTitle": "No results that matched your filters could be found", + "itemListFilterPlaceholder": "Filter Items", + "itemListImportCsv": "Import CSV", + "itemListItemNotYetCreated": "Item not yet created", + "itemListLastPublished": "Last Published", + "itemListLastSaved": "Last Saved", + "itemListModelInvalid": "Invalid model \"{{modelZUID}}\"", + "itemListModelNotFound": "Model \"{{modelZUID}}\" not found", + "itemListNoSearchResultsAlt": "No search results", + "itemListPublish": "Publish", + "itemListPublishButton_one": "Publish Item ({{count}})", + "itemListPublishButton_other": "Publish Items ({{count}})", + "itemListPublishDescription_one": "This will make the following content item immediately available on all of your platforms. You can always unpublish this item later if needed.", + "itemListPublishDescription_other": "This will make the following {{count}} content items immediately available on all of your platforms. You can always unpublish these items later if needed.", + "itemListPublishItemsTooltip": "Publish Items", + "itemListPublishNow": "Publish Now", + "itemListPublishTitle_one": "Publish Changes to {{count}} Item", + "itemListPublishTitle_other": "Publish Changes to {{count}} Items", + "itemListResetFilters": "Reset Filters", + "itemListSaveItemsTooltip": "Save Items", + "itemListSavePublish": "Save & Publish", + "itemListSavePublishItemsTooltip": "Save & Publish Items", + "itemListSavePublishNow": "Save & Publish Now", + "itemListSaveSchedulePublish": "Save & Schedule Publish", + "itemListScheduleButton_one": "Schedule Publish ({{count}})", + "itemListScheduleButton_other": "Schedule Publish ({{count}})", + "itemListSchedulePastWarning": "Since the selected time is a current or past date, this will be immediately published.", + "itemListSchedulePublish": "Schedule Publish", + "itemListSchedulePublishOn": "Publish on", + "itemListScheduleSubtitle": "You can always cancel the scheduled publish later if needed", + "itemListScheduleTitle_one": "Schedule Publish of Changes to {{count}} Item", + "itemListScheduleTitle_other": "Schedule Publish of Changes to {{count}} Items", + "itemListSearchNoResultsBody": "Try adjusting your search. We suggest check all words are spelled correctly or try using different keywords.", + "itemListSearchNoResultsTitle": "Your filter \"{{search}}\" could not find any results", + "itemListSelectedCount": "{{count}} selected", + "itemListSelectedCount_one": "{{count}} selected", + "itemListSelectedCount_other": "{{count}} selected", + "itemListSortPrefix": "Sort: {{value}}", + "itemListStatus": "Status", + "itemListStatusNotPublished": "Not Published", + "itemListStatusPublished": "Published", + "itemListStatusScheduled": "Scheduled", + "itemListUpdateCount_one": "Update {{count}} Content Item", + "itemListUpdateCount_other": "Update {{count}} Content Items", + "itemListVersionByUser": "by {{name}}", + "itemListVersionColumnShort": "Vers.", + "itemListVersionPublishedOn": "v{{version}} published on", + "itemListVersionSavedOn": "v{{version}} saved on", + "itemListVersionScheduledOn": "v{{version}} scheduled to publish on", + "itemListViewQuickAccessApi": "View Quick Access API", + "itemListViewSiteGeneratorsApi": "View Site Generators API", + "itemListZuidColumn": "ZUID", + "linkCreateButton": "Create Link", + "linkCreateCreated": "Link Created: {{title}}", + "linkCreateUnableToCreate": "Unable to Create Link", + "linkEditCannotSaveEmptyTitle": "Empty Title", + "linkEditConfirmDelete": "Are you sure you want to delete this link?", + "linkEditDeleted": "Link Deleted: {{title}}", + "linkEditErrorDeleting": "Error deleting link", + "linkEditErrorSaving": "Error saving link", + "linkEditFailedLoading": "Failed loading link", + "linkEditLoading": "Loading Link", + "linkEditorErrorAddProtocol": "Please add a Link Protocol", + "linkEditorErrorAddTarget": "Please add a Link Target", + "linkEditorErrorAddTitle": "Please add a Link Title", + "linkEditorExternalLink": "External Link", + "linkEditorExternalUrl": "Provide an external URL to link to", + "linkEditorInternalLink": "Internal Link", + "linkEditorLinkTitle": "Link title", + "linkEditorSelectParent": "Select a parent for your link", + "linkEditorSelectTarget": "Select an item to link to", + "linkEditSaveChanges": "Save Changes", + "linkEditSaved": "Link Saved: {{title}}", + "mediaAddFromBynder": "Add from Bynder", + "mediaAddFromMedia": "Add from Media", + "mediaAddMoreFromMedia": "Add More from Media", + "mediaCopyFileUrl": "Copy File URL", + "mediaCopyZuid": "Copy ZUID", + "mediaCouldNotAdd": "Could not add {{filenames}}. {{errorMessage}}", + "mediaCouldNotReplace": "Could not replace. {{errorMessage}}", + "mediaDragAndDropRich": "Drag and drop your files here or", + "mediaDragDropFilesCompact": "Drag & Drop your files", + "mediaDropFilesHere": "Drop your files here", + "mediaDropToUpload": "Drop your files here to Upload", + "mediaEditFile": "Edit File", + "mediaMoreOptions": "More Options", + "mediaRemoveFile": "Remove File", + "mediaRename": "Rename", + "mediaRenameFile": "Rename File", + "mediaReplaceFile": "Replace File", + "mediaSwapFile": "Swap File", + "mediaTypeLabel": "Media Type", + "mediaUploadMedia": "Upload Media", + "minCharacterCounter_one": " (min. {{count}} character)", + "minCharacterCounter_other": " (min. {{count}} characters)", + "minMaxLabel": "Min: {{min}} | Max: {{max}}", + "missingMetaTitle": "is missing a meta title", + "navAddContentItem": "Add Content Item", + "navContentTitle": "Content", + "navCreateContent": "Create Content", + "navCreateDataset": "Create Dataset", + "navCreatePage": "Create Page", + "navDashboard": "Dashboard", + "navDatasetsInfo": "Datasets listed here do not have a parent content item and do not have URLs for the content items.", + "navErrorBody": "We're sorry we are unable to load your {{navName}}. Please refresh your page and try again.", + "navFilterItems": "Filter Items", + "navHideContent": "Hide Content", + "navLoadItemsFailed": "Failed to load content nav items.", + "navLoadRoleFailed": "Failed to load your user role.", + "navNoResultsFor": "No results available for \"{{keyword}}\"", + "navNoSearchResultsAlt": "No search results", + "navPagesInfo": "Pages include single page and multi page models with URLs. Datasets that have been parented also show in this navigation.", + "navReorderPages": "Reorder Pages", + "navResourceDatasets": "datasets", + "navResourceModels": "models", + "navSectionDatasets": "Datasets", + "navSectionHiddenItems": "Hidden Items", + "navSectionPages": "Pages", + "noFieldsAvailable": "No fields available", + "noFieldsDescriptionNoSchema": "This model ({{label}}) doesn't have any fields yet. To define the structure of your content items, please contact your Administrator to add fields to this model.", + "noFieldsDescriptionWithSchema": "This model ({{label}}) doesn't have any fields yet. To define the structure of your content items, go to your model and add fields.", + "noFieldsImageAlt": "No fields available", + "notFoundContactBodyRich": "If you believe you're missing a content item, please reach out to us at support@zesty.io and provide the following URL in your message", + "notFoundDeletedHeading": "This item has been deleted", + "notFoundImageAlt": "Not Found", + "publishedNow": "Published {{title}} now", + "redirectActiveHeader": "This Content Item is Currently Being Redirected", + "redirectActiveSubHeader": "This content item is currently set to redirect users to the destination URL below. Stopping the redirect will allow users to access this content at its original URL again once it is published.", + "redirectAddIncoming": "Add Incoming Redirect", + "redirectCode301": "301 - Permanent Redirect", + "redirectCode302": "302 - Temporary Redirect", + "redirectCreateButton": "Create Redirect", + "redirectCreatedOne": "1 Redirect Created", + "redirectDeletedOne": "1 Redirect Deleted", + "redirectDeletedPath": "Redirect Deleted: {{path}}", + "redirectDeleteForever": "Delete Forever", + "redirectDeleteTitle": "Delete Redirect", + "redirectDeleteWarning": "Deleting this redirect will remove it immediately from your site. This action cannot be undone.", + "redirectDontCreate": "Don't Create", + "redirectEnterUrlPlaceholder": "Enter URL (e.g. https://www.google.com/)", + "redirectErrorDeleting": "Error deleting redirect", + "redirectFilePathOnlyTooltip": "File Path Only", + "redirectInactiveSubHeader": "Once your redirect your content item, it will be unpublished and users won't be able to access this content item at its current URL. They'll be automatically sent to the destination URL you provide.", + "redirectMoreDetails": "More details", + "redirectNewPath": "New Path", + "redirectOldPath": "Old Path", + "redirectStopBody": "Stopping the redirect will allow users to access this content at its original URL again once it is published.", + "redirectStopRedirecting": "Stop Redirecting", + "redirectTargetLabel": "Redirect Target", + "redirectTargetPath": "Target Path", + "redirectThisContentItem": "Redirect this Content Item", + "redirectTypeColumn": "Redirect Type", + "redirectTypeInternal": "Internal", + "redirectTypeLabel": "Type", + "redirectTypeWildcard": "Wildcard", + "redirectValueCannotBeModified": "This value cannot be modified", + "reorderNavReturnToRoot": "Return to Root", + "reorderNavSaveChanges": "Save Changes", + "reorderNavSaved": "Changes have been saved", + "reorderNavSaveError": "Error saving changes", + "reorderNavTitle": "Change the order of items in your navigation", + "requiredFieldError": "Required Field. Please enter a value.", + "requiresMoreCharacters_one": "Requires {{count}} more character.", + "requiresMoreCharacters_other": "Requires {{count}} more characters.", + "scheduledPublish": "Scheduled {{title}} to publish on {{time}} in the {{timezone}} timezone", + "selectBlockVariant": "Please select a block variant.", + "selectedItemNotFound": "Selected item not found: {{value}}", + "selectPlaceholder": "Select", + "seoFieldMetaDescription": "Meta Description", + "seoFieldMetaKeywords": "Meta Keywords", + "seoFieldMetaTitle": "Meta Title", + "seoFieldNavigationTitle": "Navigation Title", + "seoFieldPageParent": "Page Parent", + "seoFieldUrlPathPart": "URL Path Part", + "slotLabelAltText": "Alt text", + "slotLabelAutoplay": "Autoplay", + "slotLabelLoopVideo": "Loop Video", + "slotLabelMuteVideo": "Mute Video", + "slotLabelOpenInNewTab": "Open in new tab", + "slotLabelSource": "Source", + "slotLabelUrl": "URL", + "slotLabelVideoControlVisibility": "Video Control Visibility", + "slotLabelVideoPoster": "Video Poster", + "studioAddLink": "Add Link", + "studioAgenticStudioBy": "Agentic Studio by", + "studioBackToElement": "Back to Element", + "studioBridgeError": "Bridge error", + "studioCannotSave": "Cannot Save: {{label}}", + "studioCannotSaveError": "Cannot Save: {{label}} - {{error}}", + "studioCannotSaveInvalid": "Cannot Save: {{label}} - missing or invalid data", + "studioCloseAriaLabel": "Close Studio preview", + "studioContentHint": "Select items on the canvas to make edits", + "studioEditInFreestyle": "Edit in Freestyle", + "studioEditInManager": "Edit in Zesty Manager", + "studioEditorAriaLabel": "Studio editor", + "studioFreestyleAlertBody": "Editing only available in Freestyle", + "studioFreestyleAlertDismissAriaLabel": "Dismiss Freestyle notice", + "studioFreestyleAlertTitle": "This layout was created in Freestyle", + "studioFullHint": "Select items on the canvas to edit them, or drag blocks to reorder the layout", + "studioInlineEditFailed": "Could not apply inline edit for this block.", + "studioInvalidUrl": "Invalid URL. Please check and try again.", + "studioItemPublished": "Published: {{label}}", + "studioItemSaved": "Item Saved: {{label}}", + "studioItemsPublishedCount_one": "Saved & published {{count}} item", + "studioItemsPublishedCount_other": "Saved & published {{count}} items", + "studioItemsSavedCount_one": "Saved {{count}} item", + "studioItemsSavedCount_other": "Saved {{count}} items", + "studioLayersEmptyState": "No layers found", + "studioLayersNodeElement": "element", + "studioLayersNodeField": "Field", + "studioLayersNodePage": "Page", + "studioLayersNodeText": "Text", + "studioLayersPanelTitle": "Layers", + "studioLayoutHint": "Drag blocks on the canvas to reorder the layout", + "studioLayoutPublishFailed": "Failed to save and publish layout.", + "studioLayoutPublishFailedNamed": "Failed to save and publish {{name}}.", + "studioLayoutSaved": "Saved {{files}}", + "studioLayoutSavedPublished": "Saved and published {{files}}", + "studioLayoutSaveFailed": "Failed to save layout.", + "studioLayoutSaveFailedNamed": "Failed to save {{name}}.", + "studioLinkedFromTooltip": "Linked from {{modelLabel}} · {{itemLabel}} ({{itemZUID}})", + "studioLinkFieldNotFound": "Field \"{{fieldName}}\" no longer exists", + "studioLinkFromOtherItem": "Link from other content item", + "studioLinkItemConfirm": "Link item", + "studioLinkItemContentItemLabel": "Content Item", + "studioLinkItemContentItemTooltip": "The field is read from this exact item, including its language.", + "studioLinkItemContentItemTooltipForItem": "The link points at this exact item, including its language. Only models with a page are listed.", + "studioLinkItemDialogCloseAriaLabel": "Close link item dialog", + "studioLinkItemDialogSubtitle": "Link to a content field on a specific content item", + "studioLinkItemDialogSubtitleForItem": "Link to the page of a specific content item", + "studioLinkItemDialogTitle": "Link other content item", + "studioLinkItemFieldLabel": "Field to connect", + "studioLinkItemFieldTooltip": "Only fields this element can render are listed.", + "studioLinkItemNoLinkableFields": "This item's model has no linkable fields.", + "studioLinkModelNotFound": "Model \"{{modelName}}\" no longer exists", + "studioLinkSectionLabel": "Link", + "studioLinkTargetLabel": "Target", + "studioLinkTo": "Link to", + "studioLinkUrlPlaceholder": "link url or id", + "studioModeContent": "Content", + "studioModeFull": "Full", + "studioModeLayout": "Layout", + "studioNoCmsItem": "No CMS item is associated with this path. Editing is disabled.", + "studioPreviewError": "Preview error: {{error}}", + "studioPreviewOnly": "Preview only", + "studioPublishPartialFailure_one": "Published {{published}} of {{count}} item — {{failed}} failed", + "studioPublishPartialFailure_other": "Published {{published}} of {{count}} items — {{failed}} failed", + "studioRemoveLinkAriaLabel": "Remove link", + "studioSaveAllButton": "Save All", + "studioSaveAndPublish": "Save and Publish", + "studioSaveAndPublishAllButton": "Save & Publish All", + "studioSaveChangeSectionContent": "Content", + "studioSaveChangeSectionLayout": "Layout", + "studioSaveChanges": "Save Changes", + "studioSaveChangesSubtitle": "Would you like to save or save and publish your changes?", + "studioSaveChangesTypeColumn": "Type", + "studioSaveChangesVersionColumn": "Vers.", + "studioSaveChangeTypeBlock": "Block", + "studioSaveChangeTypeCode": "Code", + "studioSaveChangeTypeContent": "Content", + "studioStaticEditNotSingleField": "This block can't be edited inline because its content is not a single connected field.", + "studioStaticEditRejected": "This block contains dynamic content and cannot be edited inline. Switch to Content mode to make edits.", + "studioUnsavedLayoutBody": "You have unsaved layout changes. Save them before continuing?", + "studioUnsavedLayoutTitle": "Unsaved layout changes", + "studioUntitledItem": "Untitled", + "studioViewAllRelatedFields": "View All Related Fields", + "tagArticle": "Article", + "tagAside": "Aside", + "tagDiv": "Div", + "tagFooter": "Footer", + "tagHeader": "Header", + "tagMain": "Main", + "tagNavigation": "Navigation", + "tagNone": "No Tag", + "tagSection": "Section", + "tagText": "Text", + "unpublished": "Unpublished {{title}}", + "unscheduledVersion": "Unscheduled version {{version}}", + "uuidAutoGeneratedPlaceholder": "UUID field values are auto-generated", + "valueMustBeBetween": "Value must be between {{min}} and {{max}}", + "viewModelActivityLog": "View Model Activity Log", + "yesNoMissingOptions": "The {{label}} field is missing option settings. Edit the field to add yes/no values." +} diff --git a/public/locales/en-US/dashboard.json b/public/locales/en-US/dashboard.json new file mode 100644 index 0000000000..4db413ea0a --- /dev/null +++ b/public/locales/en-US/dashboard.json @@ -0,0 +1,29 @@ +{ + "columnVersion": "Vers.", + "createCodeFile": "Create Code File", + "createContent": "Create Content", + "createModel": "Create Model", + "deleted": "Deleted", + "deltaLabel": "VS Prior {{count}} Days", + "deltaLabel_one": "VS Prior {{count}} Day", + "deltaLabel_other": "VS Prior {{count}} Days", + "emptyStateDescription": "There are no new items or edits made in the last 30 days. Start creating or editing content or models or code files to see recent files listed here.", + "emptyStateTitle": "Start Growing your Instance Today", + "greeting": "Good Morning, {{name}}", + "instanceSummary": "Here is your instance summary of the", + "itemsPublished": "Items Published", + "joinCommunity": "Join Our Community", + "lastNDays": "Last {{count}} days", + "lastNDays_one": "Last {{count}} day", + "lastNDays_other": "Last {{count}} days", + "lastNDaysInline": "last {{count}} days", + "lastNDaysInline_one": "last {{count}} day", + "lastNDaysInline_other": "last {{count}} days", + "missingMetaTitle": "Missing Meta Title", + "releaseNotes": "Release Notes", + "resources": "Resources", + "resourcesSubtitle": "Everything you need to get the best out of Zesty.", + "speedDialAriaLabel": "Instance speed dial", + "uploadMedia": "Upload Media", + "webRequests": "Web Requests" +} diff --git a/public/locales/en-US/leads.json b/public/locales/en-US/leads.json new file mode 100644 index 0000000000..e36afb678a --- /dev/null +++ b/public/locales/en-US/leads.json @@ -0,0 +1,27 @@ +{ + "captureLeadsOnYourInstance": "Capture leads on your instance", + "dateCreated": "Date Created", + "datePreset30Days": "30 Days", + "datePreset60Days": "60 Days", + "datePreset90Days": "90 Days", + "datePresetAll": "All", + "datePresetCustom": "Custom", + "endDate": "End Date", + "exportCsv": "Export CSV", + "exportCsvTitle": "Export CSV of lead data by selected filters", + "formGroup": "Form Group", + "formGroupAll": "All", + "getStartedBodyText": "By creating a form on your instance which includes the zlf input you can begin instantly capturing leads.", + "howToCreateALeadForm": "How to Create a Lead Form", + "learnMoreAbout": "Learn more about", + "modalTableHeaderKey": "Key", + "modalTableHeaderValue": "Value", + "notAvailable": "N/A", + "searchAcrossAllOfYourLeads": "Search across all of your leads", + "selectRelease": "Select release...", + "startDate": "Start Date", + "tableHeaderDate": "Date (system)", + "tableHeaderEmail": "Email", + "tableHeaderFormBody": "Form Body", + "tableHeaderFormGroup": "Form Group" +} diff --git a/public/locales/en-US/marketplace.json b/public/locales/en-US/marketplace.json new file mode 100644 index 0000000000..5859e32457 --- /dev/null +++ b/public/locales/en-US/marketplace.json @@ -0,0 +1,15 @@ +{ + "appNotInstalled": "The app \"{{zuid}}\" is not installed.", + "exploreMarketplace": "Explore Marketplace", + "googleAnalyticsLogoAlt": "Google Analytics Logo", + "googleChromeLogoAlt": "Google Chrome Logo", + "goToMarketplace": "Go to Marketplace", + "headerTitleApps": "Apps", + "installAppBody": "Install extensions, applications, and quick start modules to accelerate your Zesty project", + "microsoftLogoAlt": "Microsoft Logo", + "nodejsLogoAlt": "NodeJS Logo", + "npmLogoAlt": "NPM Logo", + "sidebarMarketplace": "Marketplace", + "visitMarketplace": "Visit Marketplace", + "zestyRocketLogoAlt": "Zesty Rocket logo" +} diff --git a/public/locales/en-US/media.json b/public/locales/en-US/media.json new file mode 100644 index 0000000000..404641cfa0 --- /dev/null +++ b/public/locales/en-US/media.json @@ -0,0 +1,215 @@ +{ + "allMediaTitle": "Recents", + "dateFilterAfter": "After", + "dateFilterBefore": "Before", + "dateFilterButtonLabel": "Date", + "dateFilterCustomRange": "Custom Range", + "dateFilterOn": "On", + "deletedFile": "Deleted file {{filename}}", + "deletedGroup": "Deleted group {{name}}", + "deleteFileModalDeleteButtonAria": "Delete Button", + "deleteFileModalDeleteButtonMultiple": "Delete ({{count}})", + "deleteFileModalDeleteButtonMultiple_one": "Delete ({{count}})", + "deleteFileModalDeleteButtonMultiple_other": "Delete ({{count}})", + "deleteFileModalTitleMultiple": "Delete {{count}} Files?", + "deleteFileModalTitleMultiple_one": "Delete {{count}} File?", + "deleteFileModalTitleMultiple_other": "Delete {{count}} Files?", + "deleteFileModalTitleSingle": "Delete File", + "deleteFileModalWarningMultiple": "You will not be able to recover these files.", + "deleteFileModalWarningSingle": "{{filename}} will be deleted forever", + "deleteFolderDialogConfirmButton": "Delete Folder", + "deleteFolderDialogMessage": "Deleting your folder will NOT delete the files in it. These files can still be found in All Media.", + "deleteFolderDialogTitle": "Delete Folder?", + "dropAreaAllMedia": "All Media", + "dropAreaUploadPrompt": "Upload files to {{location}}", + "editedFile": "Edited file {{filename}}", + "emptyStateDescription": "You can drag and drop files here or use the \"Upload\" button.", + "emptyStateTitle": "Start Uploading Now", + "failedCreatingGroup": "Failed creating group", + "failedDeletingFile": "Failed deleting file", + "failedDeletingGroup": "Failed deleting group", + "failedEditingBin": "Failed editing bin", + "failedEditingFile": "Failed editing file", + "failedEditingGroup": "Failed editing group", + "failedFetchBinFiles": "Failed to fetch bin files: {{error}}", + "failedFetchGroupFiles": "Failed to fetch group files: {{error}}", + "failedFetchGroups": "Failed to fetch groups: {{error}}", + "failedFileSearch": "Failed file search", + "failedLoadingBinFiles": "Failed loading bin files", + "failedLoadingBinGroups": "Failed loading bin groups", + "failedLoadingEcoBins": "Failed loading ecosystem media bins", + "failedLoadingGroupFiles": "Failed loading group files", + "failedLoadingInstanceBins": "Failed loading instance media bins", + "failedSearchFile": "Failed to search for file: {{error}}", + "fileModalContentCloseAria": "Close Icon", + "fileModalContentCloseTooltip": "Close Preview", + "fileModalContentCopyZuid": "Copy ZUID", + "fileModalContentDeleteAria": "Trash Button", + "fileModalContentDeleteFailed": "Failed to delete file", + "fileModalContentDeleteTooltip": "Delete File", + "fileModalContentFileUrlLabel": "File URL", + "fileModalContentLaunchOtfEditor": "Launch On the Fly Editor", + "fileModalContentMoveTo": "Move to", + "fileModalContentOpenSettingsAria": "Open settings menu", + "fileModalContentRenameMenuItem": "Rename", + "fileModalContentRenameTooltip": "Rename File", + "fileModalContentReplaceAria": "Replace File Button", + "fileModalContentReplaceTooltip": "Replace File", + "fileModalContentSaveTitleAria": "Save Title Button", + "fileModalContentTitleAria": "Title TextField", + "fileModalContentTitleHelper": "Can be used for alt-text and captions", + "fileModalContentTitleLabel": "Title", + "fileModalContentTitlePlaceholder": "Enter title", + "fileModalContentUpdatedOn": "Updated On", + "fileModalContentUploadedOn": "Uploaded On", + "fileModalContentZuidLabel": "ZUID", + "filetypeFilterArchives": "Archives (zip)", + "filetypeFilterAudio": "Audio", + "filetypeFilterButtonLabel": "File Type", + "filetypeFilterDocuments": "Documents", + "filetypeFilterFolders": "Folders", + "filetypeFilterFonts": "Fonts", + "filetypeFilterImages": "Images", + "filetypeFilterPdfs": "PDFs", + "filetypeFilterPresentations": "Presentations", + "filetypeFilterSpreadsheets": "Spreadsheets", + "filetypeFilterVideos": "Videos", + "fileTypeNotRecognized": "File type not recognized", + "folderMenuAddSubFolder": "Add Sub Folder", + "folderMenuHide": "Hide", + "folderMenuRename": "Rename", + "folderMenuShow": "Show", + "goToAllMedia": "Go to All Media", + "headerAddSubFolder": "Add Sub Folder", + "headerDeselectAll": "Deselect All", + "headerFilesSelected": "{{count}} Selected", + "headerFilesSelected_one": "{{count}} Selected", + "headerFilesSelected_other": "{{count}} Selected", + "headerFilesSelectedLimit": "{{count}} / {{limit}} Selected", + "headerFilesSelectedLimit_one": "{{count}} / {{limit}} Selected", + "headerFilesSelectedLimit_other": "{{count}} / {{limit}} Selected", + "headerMove": "Move", + "headerOpenFolderMenuAria": "Open folder menu", + "headerReplacementFileSelected": "Replacement File Selected", + "headerSelectAll": "Select All", + "headerSelectReplacementFile": "Select Replacement File", + "imageFilterAllTypes": "All Image Types", + "insightsMediaDateRangeButton": "Last {{days}} Days", + "insightsMediaDateRangeMenuItem": "Last {{days}} days", + "insightsMediaDeltaLabel": "from last {{days}} days", + "insightsMediaMediaBandwidth": "Media Bandwidth", + "insightsMediaTitle": "Insights", + "insightsTableColBandwidth": "Bandwidth", + "insightsTableColRequests": "Requests", + "insightsTableColType": "Type", + "matchesFound": "{{count}} matches found", + "matchesFound_one": "{{count}} match found", + "matchesFound_other": "{{count}} matches found", + "mediaAppFileNotFoundMessage": "We're sorry the file you requested could not be found. Please go back to the all media page.", + "mediaAppFileNotFoundTitle": "File Not Found", + "mediaGridFilesHeader": "Files", + "mediaGridFoldersHeader": "Folders", + "mediaListColAddedOn": "Added On", + "mediaListColType": "Type", + "moveFileDialogDestinationLabel": "Destination Folder", + "moveFileDialogMoveButton": "Move", + "moveFileDialogTitleMultiple": "Move {{count}} Files", + "moveFileDialogTitleMultiple_one": "Move {{count}} File", + "moveFileDialogTitleMultiple_other": "Move {{count}} Files", + "moveFileDialogTitleSingle": "Move files", + "newFolderDialogDefaultFolderName": "Untitled", + "newFolderDialogFolderNameLabel": "Folder Name", + "newFolderDialogNone": "None", + "newFolderDialogParentFolderLabel": "Parent Folder", + "newFolderDialogTitle": "New Folder", + "noResultsStateClearFilters": "Clear Filters", + "noResultsStateDescription": "Try adjusting the filters to find what you were looking for", + "noResultsStateTitleFiletype": "No {{filetype}} files were found", + "noResultsStateTitleFolders": "No folders were found", + "notFoundStateDefaultMessage": "We're sorry the folder you requested could not be found. Please go back to the all media page.", + "notFoundStateDefaultTitle": "Folder Not Found", + "notifyFailedCreateRecord": "Failed creating file record after signed url upload", + "notifyFailedSignedUrl": "Failed getting signed url for large file upload", + "notifyFailedUploadSignedUrl": "Failed uploading file to signed url", + "notifyFileReplaced": "File Replaced: {{filename}}", + "notifyFilesInProgress": "{{count}} files still in progress", + "notifyFilesInProgress_one": "{{count}} file still in progress", + "notifyFilesInProgress_other": "{{count}} files still in progress", + "notifyMetadataFailedMultiple": "Failed to update metadata of {{count}} files", + "notifyMetadataFailedMultiple_one": "Failed to update metadata of {{count}} file", + "notifyMetadataFailedMultiple_other": "Failed to update metadata of {{count}} files", + "notifyUploadedMultiple": "Successfully uploaded {{count}} files", + "notifyUploadedMultiple_one": "Successfully uploaded {{count}} file", + "notifyUploadedMultiple_other": "Successfully uploaded {{count}} files", + "notifyUploadedMultipleWithProgress": "Successfully uploaded {{count}} files...{{inProgress}} files still in progress", + "notifyUploadedMultipleWithProgress_one": "Successfully uploaded {{count}} file...{{inProgress}} files still in progress", + "notifyUploadedMultipleWithProgress_other": "Successfully uploaded {{count}} files...{{inProgress}} files still in progress", + "notifyUploadFailed": "Failed uploading file", + "notifyUploadFailedMultiple": "Failed to upload {{count}} files", + "notifyUploadFailedMultiple_one": "Failed to upload {{count}} file", + "notifyUploadFailedMultiple_other": "Failed to upload {{count}} files", + "notifyUploadSuccess": "Successfully uploaded file", + "otfEditorAutoPlaceholder": "Auto", + "otfEditorBlurLabel": "Blur", + "otfEditorCopyUrlLabel": "✨ Copy New URL with Applied Edits", + "otfEditorFitBounds": "Bounds", + "otfEditorFitCover": "Cover", + "otfEditorFitCrop": "Crop", + "otfEditorFitLabel": "Fit", + "otfEditorFitNone": "None", + "otfEditorHeightLabel": "Height", + "otfEditorOptimizeHigh": "High", + "otfEditorOptimizeLabel": "Optimize", + "otfEditorOptimizeLow": "Low", + "otfEditorOptimizeMedium": "Medium", + "otfEditorSaturationAria": "Saturation", + "otfEditorSaturationLabel": "Saturation", + "otfEditorTitle": "On The Fly Image Editor", + "otfEditorUnsavedWarning": "These changes will not be saved to the original file or file URL", + "otfEditorWidthLabel": "Width", + "renameFileModalNewNameLabel": "New File Name", + "renameFileModalTitle": "Rename File", + "renameFileModalWarning": "This will change the URL path and could break existing links referenced in production after a period of time.", + "renameFolderDialogNewFolderNameLabel": "New Folder Name", + "renameFolderDialogTitle": "Rename Folder", + "replaceFileModalNoPermissionSubtitle": "Contact the instance owner or administrators listed below to upgrade your role to Admin or Owner for the replace file capability.", + "replaceFileModalNoPermissionTitle": "You do not have permission to replace files in this instance.", + "replaceFileModalTitle": "Replace File", + "replaceFileModalWarning": "The original file will be deleted and replaced by its new file. This action cannot be undone and the file cannot be recovered. The file will retain its URL and ZUID.", + "searchEmptyStateDescription": "Try adjusting your search. We suggest checking all words are spelled correctly or try using different keywords", + "searchEmptyStateTitle": "Your search \"{{searchTerm}}\" could not find any results", + "sidebarFoldersDndErrorMessage": "Currently Zesty lacks the ability to allow you to move files between eco-bins. If you desire this feature please contact support@zesty.io.", + "sidebarFoldersDndErrorTitle": "Cannot move file to another eco-bin", + "sidebarFoldersHeader": "Folders", + "sidebarFoldersHiddenItems": "Hidden Items", + "sidebarFoldersOkButton": "Okay", + "sidebarFoldersSortLastCreated": "Last Created", + "sidebarInsertFromMedia": "Insert from Media", + "sidebarInsights": "Insights", + "sidebarRecents": "Recents", + "sidebarSearchPlaceholder": "Search Media", + "sortButtonLabel": "Sort: {{order}}", + "sortDateAdded": "Date Added", + "thumbnailContentCannotEditTooltip": "You cannot edit the file name", + "thumbnailContentTitlePlaceholderDisabled": "Please wait to add File Title", + "thumbnailContentTitlePlaceholderEditable": "Add File Title (for alt-text)", + "thumbnailCopyUrl": "Copy URL", + "uploadModalNounFile_one": "File", + "uploadModalNounFile_other": "Files", + "uploadModalNounReplacedFile_one": "Replaced File", + "uploadModalNounReplacedFile_other": "Replaced Files", + "uploadModalUploadedNoCount": "{{item}} Uploaded", + "uploadModalUploadedWithCount": "{{count}} {{item}} Uploaded", + "uploadModalUploadedWithCount_one": "{{count}} {{item}} Uploaded", + "uploadModalUploadedWithCount_other": "{{count}} {{item}} Uploaded", + "uploadModalUploadErrorHint": "Please check the file extensions and try again", + "uploadModalUploadErrorTitle": "Unfortunately, we had trouble uploading the {{count}} files", + "uploadModalUploadErrorTitle_one": "Unfortunately, we had trouble uploading the {{count}} file", + "uploadModalUploadErrorTitle_other": "Unfortunately, we had trouble uploading the {{count}} files", + "uploadModalUploadingNoCount": "{{item}} Uploading", + "uploadModalUploadingWithCount": "{{count}} {{item}} Uploading", + "uploadModalUploadingWithCount_one": "{{count}} {{item}} Uploading", + "uploadModalUploadingWithCount_other": "{{count}} {{item}} Uploading", + "uploadModalUploadMore": "Upload More", + "videoFilterAllTypes": "All Video Types" +} diff --git a/public/locales/en-US/release.json b/public/locales/en-US/release.json new file mode 100644 index 0000000000..e2a2131f8e --- /dev/null +++ b/public/locales/en-US/release.json @@ -0,0 +1,40 @@ +{ + "activateButton": "Activate Release App", + "activateSubtitle": "Publish groups of content at the same time.", + "createdAt": "Created At", + "createdOn": "{{time}} on {{date}}", + "createdRelease": "Created Release: {{name}}", + "createRelease": "Create Release", + "createReleaseButton": "Create Release", + "deletedRelease": "Deleted release {{name}}", + "deleteRelease": "Delete Release", + "deleteWarning": "Deleting a release is a permanent action.", + "errorMissingReleaseName": "Missing required release name", + "failedActivateReleases": "Failed to activate releases", + "failedCreatingRelease": "Failed creating a release", + "failedDeletingRelease": "Failed deleting release {{name}}", + "fieldReleaseDescription": "Release Description", + "fieldReleaseName": "Release Name", + "instructionBeginSearch": "Begin by searching for content you want to include in this release", + "instructionPublishAll": "Press the \"Publish All\" button to publish all the items listed in the release", + "instructionSelectItem": "Select an item from the search list to add it to this release", + "lang": "Lang", + "lastPublish": "Last Publish", + "live": "Live", + "loadingRelease": "Loading Release: {{name}}", + "members": "Members", + "missingItemMetaTitle": "Missing Item Meta Title", + "neverPublished": "Never published", + "publishAll": "Publish All", + "publishAllNoticeBody": "This will publish all members in this release. Purging all member URLs and related content.", + "publishedItems_one": "Published {{count}} item", + "publishedItems_other": "Published {{count}} items", + "publishing": "Publishing", + "releasesHeading": "Releases", + "searchPlaceholder": "Search by ZUID or Meta Title to include in your release", + "startingRelease": "Starting Release", + "startNewPublishPlan": "Start New Publish Plan", + "updatedReleaseMember": "Updated release ({{releaseName}}) member ({{itemTitle}}) to version {{version}}", + "versionNumber": "Version {{version}}", + "versionPublishedAgo": "Version {{version}} was published {{timeAgo}}" +} diff --git a/public/locales/en-US/reports.json b/public/locales/en-US/reports.json new file mode 100644 index 0000000000..e97b749f3a --- /dev/null +++ b/public/locales/en-US/reports.json @@ -0,0 +1,120 @@ +{ + "actionAddedStatus": "Added status: {{labels}}", + "actionBy": "by", + "actionCount_one": "{{count}} Action", + "actionCount_other": "{{count}} Actions", + "actionCreated": "Created", + "actionDeleted": "Deleted", + "actionInBy": "In {{itemSubtext}} by", + "actionModified": "Modified", + "actionPublished": "Published", + "actionRemovedStatus": "Removed status: {{labels}}", + "actions": "Actions", + "actionsByTitle": "Actions By", + "actionScheduledPublish": "Scheduled to Publish", + "actionScheduledPublishOn": "Scheduled to Publish on {{date}}", + "actionsLabel": "Actions", + "actionType": "Action Type", + "actionUnpublished": "Unpublished", + "activityByResource": "Activity By Resource", + "activityLog": "Activity Log", + "activityLogSubtitle": "Your instance timeline by resources and users", + "activityLogTitle": "Activity Log", + "affectedZUIDDeleted": "{{affectedZUID}} (Deleted)", + "affectedZUIDMissingMetaTitle": "{{affectedZUID}} (Missing Meta Title)", + "allResponseCodes": "All Response Codes", + "apiErrorMessage": "An error occurred loading the data", + "apiErrorRetry": "Retry", + "apiErrorTitle": "Whoops!", + "bandwidth": "Bandwidth", + "bandwidthBreakdown": "Bandwidth Breakdown", + "blockVariants": "Block Variants", + "cdnUrl": "CDN URL", + "codeFilesAndSnippets": "Code Files and Snippets", + "contentModel": "Content Model", + "created": "Created", + "date": "Date", + "deleted": "Deleted", + "deletedZuid": "{{zuid}} (Deleted)", + "deletedZUID": "{{zuid}} (Deleted)", + "emptyStateHint": "Try adjusting your filters to find what you're looking for.", + "failingNotFound": "Failing Not Found (404)", + "fieldPrefix": "Field {{message}}", + "fileName": "File Name", + "fileTypeDataset": "Headless Data Model", + "fileTypePageset": "Multi Page Model", + "fileTypeTemplateset": "Single Page Model", + "headTag": "Head Tag", + "htmlCssBandwidth": "HTML/CSS/Javascript Bandwidth", + "insightActions": "Actions", + "instanceZuid": "Instance ZUID", + "lastActionAt": "Last action @ {{time}}", + "lastActionAtContentModel": "Last action @ {{lastAction}} • Content Model", + "lastActionAtSettings": "Last action @ {{lastAction}} • Settings", + "lastUpdated": "Last Updated: {{date}}", + "leastActive": "Least Active", + "loadingMetrics": "Loading metrics", + "maliciousDeflected": "Malicious/Deflected (403)", + "mediaBandwidth": "Media Bandwidth", + "messageButton": "Message", + "metrics": "Metrics", + "metricsLoadError": "An error occured while loading metrics: {{message}}", + "missingMetaTitleZuid": "{{zuid}} (Missing Meta Title)", + "missingMetaTitleZUID": "{{zuid}} (Missing Meta Title)", + "modelTypeBlockVariant": "Block Variant", + "modelTypeHeadlessDataItem": "Headless Data Item", + "modelTypeMultiPageItem": "Multi Page Item", + "modelTypeSinglePageItem": "Single Page Item", + "modified": "Modified", + "mostActive": "Most Active", + "mostRecent": "Most Recent", + "mostRecentlyActive": "Most Recently Active", + "noInsightsFound": "No Insights Found", + "noLogsFound": "No Logs Found", + "noResourcesFound": "No Resources Found", + "oldestFirst": "Oldest First", + "other": "Other", + "pageRedirects": "Page Redirects (301)", + "pageRequests": "Page Requests", + "past30Days": "Past 30 days", + "past7Days": "Past 7 days", + "pastDay": "Past day", + "pastDayWeek": "Past Day Week", + "platformRequestBreakdown": "Platform Request Breakdown (Total)", + "published": "Published", + "publishes": "Publishes", + "redirectUrl": "Redirect URL", + "request": "Request", + "requests": "Requests", + "resources": "Resources", + "resourcesImpacted": "Resources Impacted", + "scheduled": "Scheduled", + "selectDateRange": "Select Date Range", + "settings": "Settings", + "successfulMediaRequests": "Successful Media Requests", + "successfulPageLoads": "Successful Page Loads (200)", + "tabInsights": "Insights", + "tabResources": "Resources", + "tabTimeline": "Timeline", + "tabUsers": "Users", + "top10ActiveUsers": "Top 10 Active Users", + "top301Redirects": "Top 301 Redirects", + "topFileNotFound": "Top File Not Found (404)", + "topMaliciousDeflected": "Top Malicous / Deflected Requests", + "topRequestedMedia": "Top Requested Media", + "topRequestedPages": "Top Requested Pages", + "totalBandwidth": "Total Bandwidth", + "totalRequests": "Total Requests", + "totalUsageBreakdown": "Total Usage Breakdown", + "unknownUser": "Unknown User", + "unpublished": "Unpublished", + "url": "URL", + "usageReport": "Usage Report", + "usageReportFor": "Usage Report for {{timePeriod}} {{unit}} : {{startDisplay}} - {{endDisplay}}", + "userAvatar": "{{name}} Avatar", + "userAvatarAlt": "{{firstName}} {{lastName}} Avatar", + "userEmailCopied": "User email copied to the clipboard", + "userListItemSecondary": "{{roleName}} • {{actionCount}} actions • Last action @ {{lastAction}}", + "userRole": "User Role", + "viewAuditTrailReport": "View Audit Trail Report" +} diff --git a/public/locales/en-US/schema.json b/public/locales/en-US/schema.json new file mode 100644 index 0000000000..d158dbc007 --- /dev/null +++ b/public/locales/en-US/schema.json @@ -0,0 +1,773 @@ +{ + "activityDetails": "Activity Details", + "activityDetailsSubtitle": "Learn when the model was created, updated, and by whom", + "addAnotherField": "Add Another Field", + "addAnotherFieldToModel": "Add Another Field to {{modelLabel}}", + "addField": "Add Field", + "addFieldsDescription": "Define the different fields that need to be a part of this model.", + "addFieldsHeading": "Add Fields", + "addFieldTitle": "Add {{name}} Field", + "addFieldToLabel": "Add field to {{label}}", + "addFieldToName": "Add Field to {{name}}", + "addOption": "Add Option", + "advanced": "Advanced", + "allModels": "All Models", + "allModelsHeading": "All Models", + "apiAccessDescription": "Zesty offers multiple APIs for accessing this content, each with unique benefits. Select one that best meets your needs.", + "apiAccessOptions": "API Access Options", + "apiBackendCodingDescription": "Zesty's REST API grants full access to Create, Read, Update, Delete, and Publish Commands. API can be accessed through direct API calls or from our Node SDK.", + "apiBestUsedFor": "Best used for", + "apiCustomEndpointsDescription": "Build any data type (JSON, XML, HTML, etc) and any hydration level with Zestyi.io Parsley and Webengine.", + "apiGraphqlDescription": "Flat object endpoints ideal for feeding GraphQL servers. Only accessible by traversing through the data on the model's GQL endpoint.", + "apiLabelBackendCoding": "Back-End Coding", + "apiLabelCustomEndpoints": "Custom Endpoints", + "apiLabelGraphql": "GraphQL", + "apiLabelQuickAccess": "Quick Access", + "apiLabelSiteGenerators": "Site Generators", + "apiLabelVisualLayout": "Visual Layout", + "apiParsleyReferenceId": "API/Parsley Reference ID", + "apiParsleyReferenceIdTooltip": "ID used for accessing this model through our API or Parsley", + "apiQuickAccessDescription": "gives access to full models Items or single items JSON endpoints with all kinds of information. Data requires manually hydration.", + "apiSiteGeneratorsDescription": "Zesty converts each URL to JSON with hydrated relationships and navigation information. Every content item added to this model has access to hydrated JSON URLs.", + "apiTagReadAndWrite": "Read and Write", + "apiTagReadOnly": "Read Only", + "apiUrlLabel": "API URL", + "apiUseApplicationsWithRouting": "Applications with routing", + "apiUseAppsOrHeadlessLayouts": "Apps or headless layouts", + "apiUseAutomation": "Automation", + "apiUseAutomationDesign": "Automation Design", + "apiUseContentExperiences": "Content Experiences", + "apiUseCustomApps": "Custom Apps", + "apiUseCustomContentHydration": "Custom Content Hydration", + "apiUseFullyPaintedHtmlViews": "Fully painted HTML views", + "apiUseGraphQlImplementations": "GraphQL Implementations", + "apiUseHeadlessApplets": "Headless Applets", + "apiUseHeadlessWebDevelopment": "Headless Web Development", + "apiUseMiddleware": "Middleware", + "apiUseMobileApplications": "Mobile Applications", + "apiUseSearch": "Search", + "apiUseUserGeneratedContent": "User Generated Content", + "apiVisualLayoutDescription": "Visual layout is accessible from rendered HTML or structured JSON from the toJSON endpoint.", + "blockGroup": "Block Group", + "booleanOptionsLabel": "Boolean Options", + "cannotCreateModelTitle": "Cannot Create Model", + "characterLimitDescription": "Set a minimum and/or maximum allowed number of characters", + "characterLimitLabel": "Limit Character Count", + "characterLimitMaxLabel": "Maximum character count (with spaces)", + "characterLimitMinLabel": "Minimum character count (with spaces)", + "clearFilters": "Clear Filters", + "comingSoon": "Coming Soon", + "commonFieldDescriptionLabel": "Description", + "commonFieldDescriptionTooltip": "Appears below the display label. Use this to provide instructions to content writers and API users.", + "commonFieldLabelLabel": "Display Label", + "commonFieldLabelTooltip": "The display name of the field seen in Schema.", + "commonFieldListLabel": "Add as column in table listing", + "commonFieldListSubLabel": "Shows field as a column in the table in the content view", + "commonFieldNameLabel": "API / Parsley Code ID", + "commonFieldNameTooltip": "This will appear in the API Responses", + "commonFieldRequiredLabel": "Required field", + "commonFieldRequiredSubLabel": "Ensures an item cannot be created if field is empty", + "commonFieldTooltipLabel": "Tooltip", + "commonFieldTooltipTooltip": "Tool tip displayed to content editors.", + "commonUses": "Common Uses", + "copyEmail": "Copy Email", + "copyFieldZuid": "Copy Field ZUID", + "copyFieldZUID": "Copy Field ZUID", + "copyModelZUID": "Copy Model ZUID", + "createdOn": "Created On", + "createModel": "Create Model", + "createModelButton": "Create Model", + "createModelTitle": "Create {{modelName}}", + "currencyFieldLabel": "Currency", + "currencyFieldPlaceholder": "Select a Currency", + "currencyFieldTooltip": "The selected currency code, symbol, and flag will be displayed for this field in the content item and can be accessed through the field settings via the API.", + "currencyFlagAlt": "{{countryCode}} flag", + "deactivatedFields": "Deactivated Fields", + "deactivatedFieldsDescription": "These fields can be re-activated at any time if you'd like to bring them back to the content model.", + "deactivateField": "Deactivate Field", + "deactivatingField": "Deactivating Field", + "defaultValue": "Default Value", + "defaultValueDescription": "Set a predefined value for this field", + "defaultValueHelperText": "Set a predefined value for this field", + "defaultValueLabel": "Default Value", + "deleteModel": "Delete Model", + "deleteModelCannotDeleteNotify": "Cannot Delete Model: {{modelLabel}}", + "deleteModelConfirmLabel": "Confirm by typing \"{{modelLabel}}\" below.", + "deleteModelFailedNotify": "Failed to delete model", + "deleteModelTitle": "Delete Model?", + "deleteModelWarning": "Deleting the \"{{modelLabel}}\" model will also delete all of it's content items. This cannot be undone.", + "descriptionLabel": "Description", + "descriptionPlaceholder": "What is this model going to be used for", + "descriptionTooltip": "Displays the purpose of the model to help content writers", + "displayNameLabel": "Display Name", + "displayNamePlaceholder": "e.g. Home Page, About Page, Contact Page, etc.", + "displayNameTooltip": "Name that is shown to content editors", + "dropdownOptionsLabel": "Dropdown Options", + "duplicate": "Duplicate", + "duplicateModel": "Duplicate Model", + "duplicateModelAlertBodyRich": "You're about to duplicate the {{label}} model with all of it's existing fields. No content items will be duplicated.", + "duplicateModelDescriptionLabel": "Description", + "duplicateModelDescriptionPlaceholder": "What is this model going to be used for", + "duplicateModelDisplayNameLabel": "Display Name", + "duplicateModelDisplayNamePlaceholder": "Duplicate of \"{{label}}\"", + "duplicateModelFailed": "Failed to duplicate model", + "duplicateModelListedDescription": "Listed models have their content items available to programmatic navigation calls.", + "duplicateModelListedLabel": "List this model", + "duplicateModelParentLabel": "Model Parent", + "duplicateModelParentPlaceholder": "Select", + "duplicateModelReferenceIdLabel": "Reference ID", + "duplicateModelReferenceIdPlaceholder": "Auto-Generated from Display Name", + "duplicateModelSubtitle": "As a {{type}} Model", + "duplicateModelTitle": "Duplicate {{label}} Model", + "editField": "Edit Field", + "editFieldTitle": "Edit {{label}}", + "editInCode": "Edit in Code", + "editTemplateFile": "Edit Template File", + "emptyStateBody": "Models define the structure of a content item such as a home page or an article similar to the examples of models you seen on the right.", + "emptyStateHeading": "Let's start by creating models", + "emptyStateLinkBestPractices": "Learn Best Practices for creating models", + "emptyStateLinkBuildingModels": "Read our guide on building models", + "endpointDevLabel": "Dev (latest version)", + "endpointProduction": "Production", + "enterLabel": "Enter Label", + "enterValue": "Enter Value", + "errorFieldIsRequired": "{{label}} is required", + "errorFieldReferenceExists": "A field with this API/Parsley Reference already exists", + "errorOptionValueExists": "An option with this value already exists", + "errorShortenToLess": "Shorten to less than {{maxLength}} characters ({{currentLength}}/{{maxLength}})", + "errorSystemReservedFieldName": "\"{{value}}\" is a System Reserved Field Name", + "extensionPresetAudios": "Audios", + "extensionPresetDocuments": "Documents", + "extensionPresetImages": "Images", + "extensionPresetPresentations": "Presentations", + "extensionPresetSpreadsheets": "Spreadsheets", + "extensionPresetVideos": "Videos", + "failedCreateField": "Failed to create the field", + "failedCreateModel": "Failed to create model", + "failedUpdateField": "Failed to update the field", + "faqBadge": "FAQ", + "fieldCategoryAdvanced": "Advanced", + "fieldCategoryDateAndTime": "Date & Time", + "fieldCategoryMedia": "Media", + "fieldCategoryNumeric": "Numeric", + "fieldCategoryRelationship": "Relationship", + "fieldCategoryText": "Text", + "fieldDeactivated": "\"{{label}}\" field is deactivated", + "fieldDescriptionBodyText": "A detailed text providing context or instructions for the form.", + "fieldDescriptionButtonContainerSubText": "Supporting text below the call-to-action buttons in the left section.", + "fieldDescriptionCompanyLogo": "The logo of the company the person represents.", + "fieldDescriptionCompanyName": "The name of the company the person represents.", + "fieldDescriptionCtaButton1TextLeftSection": "The text for the first call-to-action button in the left section.", + "fieldDescriptionCtaButton1TextNoSection": "The text for the first call-to-action button", + "fieldDescriptionCtaButton1Url": "The URL the first call-to-action button links to.", + "fieldDescriptionCtaButton2TextLeftSection": "The text for the second call-to-action button in the left section.", + "fieldDescriptionCtaButton2Url": "The URL the second call-to-action button links to.", + "fieldDescriptionCtaButtonTextFeatureSection": "The text for the call-to-action button in the feature section.", + "fieldDescriptionCtaButtonUrl": "The URL the call-to-action button links to.", + "fieldDescriptionFeatureIntroLink": "The URL linked to the introductory feature text.", + "fieldDescriptionFeatureIntroText": "A short introductory text for the feature section.", + "fieldDescriptionFormCtaButtonText": "The text for the call-to-action button on the form.", + "fieldDescriptionFormHeaderText": "A subheading or introduction for the contact form.", + "fieldDescriptionHeroImageFeatureSection": "The image displayed alongside the feature section.", + "fieldDescriptionHeroImageHeroSection": "The image displayed in the hero section.", + "fieldDescriptionHeroImageRight": "The image displayed on the right side of the hero section.", + "fieldDescriptionJobTitle": "The job title of the person providing the quote.", + "fieldDescriptionNameInput": "A label for the name input field.", + "fieldDescriptionPersonEmail": "The email address of the primary contact person.", + "fieldDescriptionPersonImage": "The image of the person providing the quote.", + "fieldDescriptionPersonName": "The name of the primary contact person.", + "fieldDescriptionPersonNameTestimonial": "The name of the person providing the quote.", + "fieldDescriptionPersonPhoto": "A photo of the primary contact person.", + "fieldDescriptionPersonTitle": "The title or role of the primary contact person.", + "fieldDescriptionPosition": "The person's position in their company.", + "fieldDescriptionQuote": "The testimonial or quote provided by a person.", + "fieldDescriptionStarRatingNumber": "A numerical rating displayed in the hero section.", + "fieldDescriptionStarRatingSubText": "Additional details about the star rating.", + "fieldDescriptionStarRatingTitle": "A title describing the star rating.", + "fieldDescriptionSubTitleFeatureSection": "The supporting text providing more detail about the feature.", + "fieldDescriptionSubTitleHeroSection": "The supporting text displayed below the title in the hero section.", + "fieldDescriptionSubTitleLeftSection": "The supporting text displayed below the title in the left section.", + "fieldDescriptionTitle": "The primary heading displayed in the left section.", + "fieldDescriptionTitleContactForm": "The main heading for the contact us form.", + "fieldDescriptionTitleFeatureSection": "The main heading for the feature section.", + "fieldDescriptionTitleHeroSection": "The primary heading displayed in the hero section.", + "fieldDescriptionTopCtaButtonText": "The text for the top call-to-action button.", + "fieldDescriptionTopCtaButtonUrl": "The URL the top call-to-action button links to.", + "fieldFormTabDetails": "Details", + "fieldFormTabLearn": "Learn", + "fieldFormTabRepeaterFields": "Fields", + "fieldFormTabRules": "Rules", + "fieldLabelBodyText": "Body Text", + "fieldLabelButtonContainerSubText": "Button Container Sub Text", + "fieldLabelCompanyLogo": "Company Logo", + "fieldLabelCompanyName": "Company Name", + "fieldLabelCtaButton1Text": "CTA Button 1 Text", + "fieldLabelCtaButton1Url": "CTA Button 1 URL", + "fieldLabelCtaButton2Text": "CTA Button 2 Text", + "fieldLabelCtaButton2Url": "CTA Button 2 URL", + "fieldLabelCtaButtonText": "CTA Button Text", + "fieldLabelCtaButtonUrl": "CTA Button URL", + "fieldLabelFeatureIntroLink": "Feature Intro Link", + "fieldLabelFeatureIntroText": "Feature Intro Text", + "fieldLabelFormCtaButtonText": "Form CTA Button Text", + "fieldLabelFormHeaderText": "Form Header Text", + "fieldLabelHeroImage": "Hero Image", + "fieldLabelJobTitle": "Job Title", + "fieldLabelPersonEmail": "Person Email", + "fieldLabelPersonImage": "Person Image", + "fieldLabelPersonName": "Person Name", + "fieldLabelPersonPhoto": "Person Photo", + "fieldLabelPersonTitle": "Person Title", + "fieldLabelPosition": "Position", + "fieldLabelQuote": "Quote", + "fieldLabelStarRatingNumber": "Star Rating Number", + "fieldLabelStarRatingSubText": "Star Rating Sub Text", + "fieldLabelStarRatingTitle": "Star Rating Title", + "fieldLabelSubTitle": "Sub Title", + "fieldLabelTitle": "Title", + "fieldLabelTopCtaButtonText": "Top CTA Button Text", + "fieldLabelTopCtaButtonUrl": "Top CTA Button URL", + "fieldListSearchPlaceholder": "Search Fields", + "fieldReactivated": "\"{{label}}\" field is reactivated", + "fields": "Fields", + "fieldToDisplayLabel": "Field to Display", + "fieldToDisplayPlaceholder": "Select a field", + "fieldTypeBlockSelectorCommonUse1": "Footer Section", + "fieldTypeBlockSelectorCommonUse2": "Block at the end of article", + "fieldTypeBlockSelectorCommonUse3": "Forms", + "fieldTypeBlockSelectorDescription": "The Block Selector field allows a user to select a unique variant of any block model they would like to see rendered on their page.", + "fieldTypeBlockSelectorName": "Block Selector", + "fieldTypeBlockSelectorProTip": "These are great to use when you want to use different end blocks at the end of different pages of the same model", + "fieldTypeBlockSelectorShortDesc": "Link to a variant of a block model", + "fieldTypeBlockSelectorSubHeader": "Link to a variant of a block model", + "fieldTypeBooleanCommonUse1": "To callout featured blog posts, products", + "fieldTypeBooleanCommonUse2": "Discounts in e-commerce products", + "fieldTypeBooleanCommonUse3": "To callout Badges such as \"Pro Author\"", + "fieldTypeBooleanCommonUse4": "To hide items", + "fieldTypeBooleanDescription": "This field is for when you want a field to only have two possible values. E.g. yes or no, true or false, featured or not featured, etc.", + "fieldTypeBooleanName": "Boolean", + "fieldTypeBooleanProTip": "Use boolean fields to filter out items you want to show in a collection of items.", + "fieldTypeBooleanShortDesc": "True or false", + "fieldTypeBooleanSubHeader": "Used to set true or false values", + "fieldTypeColorCommonUse1": "Background Colors", + "fieldTypeColorCommonUse2": "Border Colors", + "fieldTypeColorCommonUse3": "Font Colors", + "fieldTypeColorCommonUse4": "Change Colors of Category Tags", + "fieldTypeColorDescription": "This field is perfect for when you want to style different elements on your page such as background colors, text colors, borders, etc. Contributors will be given a color picker to select a color of their choice.", + "fieldTypeColorName": "Color", + "fieldTypeColorProTip": "Color pickers can be used to call out items in a unique way and allow a user to easily differentiate between items.", + "fieldTypeColorShortDesc": "Background colors, font colors, and more", + "fieldTypeColorSubHeader": "Used for Background colors, font colors, and more", + "fieldTypeCurrencyCommonUse1": "Cost Price of a Product or Service", + "fieldTypeCurrencyCommonUse2": "Selling Price of a Product or Service", + "fieldTypeCurrencyDescription": "This field is for when you want to store a cost, price, or account balance.", + "fieldTypeCurrencyName": "Currency", + "fieldTypeCurrencyProTip": "Use currency fields instead of number fields if you want to store prices.", + "fieldTypeCurrencyShortDesc": "Perfect for product prices", + "fieldTypeCurrencySubHeader": "Used for storing costs, prices, and balances", + "fieldTypeDateCommonUse1": "Birthdates", + "fieldTypeDateCommonUse2": "Anniversaries", + "fieldTypeDateCommonUse3": "Historical Dates", + "fieldTypeDateCommonUse4": "Release Dates", + "fieldTypeDateDescription": "This field is for when you want the input to be a past, present, or future date. You can customize whether a user can enter a day, month, or year or all 3.\n\n Zesty automatically tracks dates and times for date created, date published, and date modified so no additional fields need to be created for these.", + "fieldTypeDateName": "Date", + "fieldTypeDateProTip": "If you want to add a time to your date then use the date time field.", + "fieldTypeDateShortDesc": "Perfect for Birthdays, release dates, events, etc.", + "fieldTypeDateSubHeader": "Use for birthdays, release dates, events, etc.", + "fieldTypeDateTimeCommonUse1": "Event Start Times & End Times", + "fieldTypeDateTimeCommonUse2": "Shipment Time", + "fieldTypeDateTimeCommonUse3": "Deadlines", + "fieldTypeDateTimeDescription": "This field is for when you want the input to be a data and time. You can customize whether a user can enter a time, day, month, or year or all 4.\n\n Zesty automatically tracks dates and times for date created, date published, and date modified so no additional fields need to be created for these.", + "fieldTypeDateTimeName": "Date & Time", + "fieldTypeDateTimeProTip": "If you want to only have a date then use the date field.", + "fieldTypeDateTimeShortDesc": "Track dates along with specific times", + "fieldTypeDateTimeSubHeader": "Use to track dates along with specific times", + "fieldTypeDropdownCommonUse1": "Genders", + "fieldTypeDropdownCommonUse2": "Predefined Sizes", + "fieldTypeDropdownCommonUse3": "Languages", + "fieldTypeDropdownCommonUse4": "Company Departments", + "fieldTypeDropdownDescription": "This field is for when you want a user to choose a value from a dropdown menu of pre-defined options written by you. You can define these values in the field settings.", + "fieldTypeDropdownName": "Dropdown", + "fieldTypeDropdownProTip": "The values you add to a dropdown field will only be available to the model the field is added into. If you need values that reusable and accessible in multiple models, create a separate model for it and then a single or multi item relationship field to it.", + "fieldTypeDropdownShortDesc": "Select from a list of values", + "fieldTypeDropdownSubHeader": "Used to allow a user to select from a list of values", + "fieldTypeExternalUrlCommonUse1": "Link to affiliate sites (e.g. Amazon)", + "fieldTypeExternalUrlCommonUse2": "Link to Social Media Pages on Facebook, Instagram, etc.", + "fieldTypeExternalUrlCommonUse3": "Link to 3rd party services like Eventbrite for events or Doordash for Orders", + "fieldTypeExternalUrlDescription": "This field is great to store URLs to pages on external websites. These links can be displayed and clicked on by users.", + "fieldTypeExternalUrlName": "External URL", + "fieldTypeExternalUrlProTip": "You can also add links in rich text fields.", + "fieldTypeExternalUrlShortDesc": "Link to an external website", + "fieldTypeExternalUrlSubHeader": "Use this field to link to an external website", + "fieldTypeIntegrationCommonUse1": "Stats - Fetch external stats", + "fieldTypeIntegrationCommonUse2": "3rd Party Integration - Pull details from an external app", + "fieldTypeIntegrationCommonUse3": "Forms - Import external form submissions", + "fieldTypeIntegrationCommonUse4": "Import Content from another Zesty instance", + "fieldTypeIntegrationCommonUse5": "External CMS - Display content from an external CMS", + "fieldTypeIntegrationCommonUse6": "Spreadsheets - Pull spreadsheet data", + "fieldTypeIntegrationDescription": "This field allows users to fetch data from a JSON API, select entries and then add them to a content item. The data remains static until reselected. Ensuring controlled updates.", + "fieldTypeIntegrationName": "Integration", + "fieldTypeIntegrationProTip": "The data is stored as a JSON object and can be accessed headlessly or with Parsley for dynamic rendering in templates. ", + "fieldTypeIntegrationShortDesc": "Fetch and store data from APIs", + "fieldTypeIntegrationSubHeader": "Fetch and store data from APIs", + "fieldTypeInternalLinkCommonUse1": "Link to Internal Products", + "fieldTypeInternalLinkCommonUse2": "Link to Internal Articles", + "fieldTypeInternalLinkDescription": "Internal Link fields allow for the selection of an internal instance item from any schema. This can be useful for providing authors the ability to relate an item across an instance.", + "fieldTypeInternalLinkName": "Internal Link", + "fieldTypeInternalLinkProTip": "You can use External URL fields if you want to link to external websites.", + "fieldTypeInternalLinkShortDesc": "Link to an internal content item", + "fieldTypeInternalLinkSubHeader": "Use this field to link to an internal content item", + "fieldTypeMarkdownCommonUse1": "Blog Posts", + "fieldTypeMarkdownCommonUse2": "Articles", + "fieldTypeMarkdownCommonUse3": "Guides", + "fieldTypeMarkdownCommonUse4": "Lists", + "fieldTypeMarkdownCommonUse5": "Event Descriptions", + "fieldTypeMarkdownDescription": "This field provides a contributor a Github Flavored Markdown editor syntax for styling and structuring content.", + "fieldTypeMarkdownName": "Markdown", + "fieldTypeMarkdownProTip": "This field works great when you want to contributors to apply any styling and structure to text.", + "fieldTypeMarkdownShortDesc": "Light weight markup to format text", + "fieldTypeMarkdownSubHeader": "Light weight markup to format text", + "fieldTypeMediaCommonUse1": "Article Cover Images", + "fieldTypeMediaCommonUse2": "Profile Pictures of Authors or Team Members", + "fieldTypeMediaCommonUse3": "Product Galleries", + "fieldTypeMediaCommonUse4": "Illustrations and Icons", + "fieldTypeMediaCommonUse5": "Videos of demos, tutorials, company onboarding", + "fieldTypeMediaCommonUse6": "Background Images", + "fieldTypeMediaCommonUse7": "PDFs of whitepapers, ebooks, menus, maps, and more", + "fieldTypeMediaCommonUse8": "Powerpoint Presentations", + "fieldTypeMediaDescription": "This field allows a user to add one or more media files such as an image, video, document, presentation, etc. You can set the maximum number of files a user can upload and the maximum file size for each upload.", + "fieldTypeMediaName": "Media", + "fieldTypeMediaProTip": "You can also add media in-line in rich text fields.", + "fieldTypeMediaShortDesc": "Images, videos, PDFs, and other files", + "fieldTypeMediaSubHeader": "Use for images, videos, PDFs, and other files", + "fieldTypeMultiLineTextCommonUse1": "Sub Headings", + "fieldTypeMultiLineTextCommonUse2": "Article Summaries", + "fieldTypeMultiLineTextCommonUse3": "Product Descriptions", + "fieldTypeMultiLineTextCommonUse4": "Category Descriptions", + "fieldTypeMultiLineTextCommonUse5": "Author Bios", + "fieldTypeMultiLineTextDescription": "The Multi Line Text field is best for long text content that doesn't need special formatting or have links or media.", + "fieldTypeMultiLineTextName": "Multi Line Text", + "fieldTypeMultiLineTextProTip": "This field works great when you want to ensure that contributors cannot apply any styling to text.", + "fieldTypeMultiLineTextShortDesc": "Descriptions, summaries, and blurbs", + "fieldTypeMultiLineTextSubHeader": "Used for descriptions, summaries, and blurbs", + "fieldTypeNumberCommonUse1": "Quantity of Products in Inventory", + "fieldTypeNumberCommonUse2": "Rankings", + "fieldTypeNumberCommonUse3": "Ratings", + "fieldTypeNumberCommonUse4": "Weight", + "fieldTypeNumberCommonUse5": "Height", + "fieldTypeNumberDescription": "This field is for when you want the input to be a number.", + "fieldTypeNumberName": "Number", + "fieldTypeNumberProTip": "Number fields can hold both whole numbers and decimals.", + "fieldTypeNumberShortDesc": "Whole numbers and floats", + "fieldTypeNumberSubHeader": "Used for quantity, age, ratings, etc.", + "fieldTypeOneToManyCommonUse1": "To link an Article to Multiple Authors, Tags, or Categories", + "fieldTypeOneToManyCommonUse2": "To link an Author to Multiple Services", + "fieldTypeOneToManyDescription": "This field allows you to connect your model to another model and connect to multiple items instead of one.", + "fieldTypeOneToManyName": "One to Many Relationship", + "fieldTypeOneToManyProTip": "It's great to use this field when you find yourself or your team repeatedly typing in the same set of inputs such as author names. For example, it makes sense to create a model of Authors and connect to it since you will else have to else repeatedly type it in for each article.", + "fieldTypeOneToManyShortDesc": "Link to multiple content items of a model", + "fieldTypeOneToManySubHeader": "Use this field to link to multiple content items of a model", + "fieldTypeOneToOneCommonUse1": "To link an Article to a single Author or Category", + "fieldTypeOneToOneCommonUse2": "To link an Employee to a single service", + "fieldTypeOneToOneDescription": "This field is perfect for connecting your model to another model. For example, linking a blog to a category or an author.", + "fieldTypeOneToOneName": "One to One Relationship", + "fieldTypeOneToOneProTip": "It's great to use this field when you find yourself or your team repeatedly typing in the same set of inputs such as author names. For example, it makes sense to create a model of Authors and connect to it since you will else have to else repeatedly type it in for each article.", + "fieldTypeOneToOneShortDesc": "Link to one content item of a model", + "fieldTypeOneToOneSubHeader": "Use this field to link to one content item of a model", + "fieldTypeRepeaterCommonUse1": "Slides", + "fieldTypeRepeaterCommonUse2": "Testimonials", + "fieldTypeRepeaterCommonUse3": "Recipes", + "fieldTypeRepeaterCommonUse4": "Event Times", + "fieldTypeRepeaterDescription": "The Repeater Field allows you to create a group of fields for repeating content. Useful for multiple items, such as slides, team members, or FAQs.", + "fieldTypeRepeaterName": "Repeater", + "fieldTypeRepeaterProTip": "Use a Repeater Field to manage lists or sections with a shared structure but unique content like recipes or testimonials.", + "fieldTypeRepeaterShortDesc": "A repeating list of grouped fields", + "fieldTypeRepeaterSubHeader": "Used for groups of static fields", + "fieldTypeSingleLineTextCommonUse1": "Article Titles", + "fieldTypeSingleLineTextCommonUse2": "Author Names", + "fieldTypeSingleLineTextCommonUse3": "Event Names", + "fieldTypeSingleLineTextCommonUse4": "Category Labels", + "fieldTypeSingleLineTextCommonUse5": "Headings", + "fieldTypeSingleLineTextDescription": "The \"Single Line Text\" Field is best for short text content that doesn't need special formatting or have links or media.", + "fieldTypeSingleLineTextName": "Single Line Text", + "fieldTypeSingleLineTextProTip": "This field works great when you want to ensure that contributors cannot apply any styling to text.", + "fieldTypeSingleLineTextShortDesc": "Titles, names, and headings", + "fieldTypeSingleLineTextSubHeader": "Used for Titles, names, and headings", + "fieldTypeSortOrderCommonUse1": "Set the order of featured products", + "fieldTypeSortOrderCommonUse2": "Set the order of categories", + "fieldTypeSortOrderCommonUse3": "Set the order of videos of a course", + "fieldTypeSortOrderDescription": "There may be times when you want to sort data, not by name or date, but by a user-defined custom order. In such a scenario, you can add a sort order field which allows you to specify the order number of each content item.", + "fieldTypeSortOrderName": "Sort Order", + "fieldTypeSortOrderProTip": "You can change the default sort number with the plus and minus buttons in the content item view, as well as in the table view.", + "fieldTypeSortOrderShortDesc": "Add order to content items", + "fieldTypeSortOrderSubHeader": "Use to add order to content items", + "fieldTypeUuidCommonUse1": "Product ID", + "fieldTypeUuidCommonUse2": "Inventory ID", + "fieldTypeUuidCommonUse3": "Employee ID", + "fieldTypeUuidDescription": "The UUID field creates a unique alpha numeric string when an item is created. This is a helpful feature for analytics tracking, inventory management, user management, etc.", + "fieldTypeUuidName": "UUID", + "fieldTypeUuidProTip": "UUID are always unique and are non editable.", + "fieldTypeUuidShortDesc": "Generates unique, uneditable alphanumeric identifiers", + "fieldTypeUuidSubHeader": "Use to set unique ids to each content item", + "fieldTypeWysiwygCommonUse1": "Blog Posts", + "fieldTypeWysiwygCommonUse2": "Articles", + "fieldTypeWysiwygCommonUse3": "Guides", + "fieldTypeWysiwygCommonUse4": "Lists", + "fieldTypeWysiwygCommonUse5": "Event Descriptions", + "fieldTypeWysiwygDescription": "This field is best for long text content that has multiple headings, paragraphs, and in-line media such as videos, images, or links. You can also apply advanced text formatting such as bold, italics, and underline.", + "fieldTypeWysiwygName": "WYSIWYG", + "fieldTypeWysiwygProTip": "This field works great when you want to contributors to apply any styling and structure to text.", + "fieldTypeWysiwygShortDesc": "Long text content with links & images such as blogs", + "fieldTypeWysiwygSubHeader": "Long text content with links & images such as blogs", + "fieldValidationTitle": "Field Validation, Defaults, & More", + "fileExtensionsErrorMessageLabel": "File extensions error message", + "fileExtensionsLabel": "File Extensions", + "folderDeletedError": "The folder this was locked to has been deleted", + "formFieldApiCodeId": "API / Parsley Code ID", + "formFieldApiCodeIdTooltip": "This will appear in the API Responses", + "formFieldApiUrl": "API URL", + "formFieldBooleanOptions": "Boolean Options", + "formFieldCurrencyLabel": "Currency", + "formFieldCurrencyPlaceholder": "Select a Currency", + "formFieldCurrencyTooltip": "The selected currency code, symbol, and flag will be displayed for this field in the content item and can be accessed through the field settings via the API.", + "formFieldDefaultValue": "Default Value", + "formFieldDescriptionLabel": "Description", + "formFieldDescriptionTooltip": "Appears below the display label. Use this to provide instructions to content writers and API users.", + "formFieldDisplayLabel": "Display Label", + "formFieldDisplayLabelTooltip": "The display name of the field seen in Schema.", + "formFieldDropdownOptions": "Dropdown Options", + "formFieldFieldToDisplay": "Field to Display", + "formFieldFieldToDisplayPlaceholder": "Select a field", + "formFieldFileExtensions": "File Extensions", + "formFieldFileExtensionsErrorMessage": "File extensions error message", + "formFieldListLabel": "Add as column in table listing", + "formFieldListSubLabel": "Shows field as a column in the table in the content view", + "formFieldMaxCharLimit": "Maximum character count (with spaces)", + "formFieldMaxValue": "Maximum Value", + "formFieldMediaItemLimit": "Media Item Limit", + "formFieldMediaItemLimitTooltip": "Set the minimum media file limit to 1. It cannot go lower.", + "formFieldMinCharLimit": "Minimum character count (with spaces)", + "formFieldMinValue": "Minimum Value", + "formFieldReferenceModel": "Reference Model", + "formFieldReferenceModelPlaceholder": "Select a model", + "formFieldRegexMatchErrorMessage": "Regex Match Error Message", + "formFieldRegexMatchPattern": "Regex Match Pattern", + "formFieldRegexRestrictErrorMessage": "Regex Restrict Error Message", + "formFieldRegexRestrictPattern": "Regex Restrict Pattern", + "formFieldRequiredLabel": "Required field", + "formFieldRequiredSubLabel": "Ensures an item cannot be created if field is empty", + "formFieldSelectFolder": "Select Folder", + "formFieldTooltipLabel": "Tooltip", + "formFieldTooltipLabelTooltip": "Tool tip displayed to content editors.", + "goToAllModels": "Go to All Models", + "headerTitle": "Schema", + "headlessDescription": "Use Zesty as a headless back end with technologies such as NextJS, NuxtJS, React, Swift, Gatsby, Flutter, Angular, etc.", + "headlessModeDescription": "This is ideal for engineers who work fully outside of Zesty.io in technologies such as NextJS, NuxtJS, or Angular. When headless mode is on, all routes render as JavaScript object notation (JSON).\n\nNote: This change can be reverted later from General Settings", + "headlessSwitcherSubtitle": "You are currently in traditional web engine mode. Opt-in to change to Hybrid or Headless now. You can always change this from General Settings. Learn more", + "headlessSwitcherTitle": "Want to Access our Headless APIs?", + "howIsDataStored": "How is the Data Stored?", + "hybridDescription": "Hybrid is best of both worlds. Pages still render HTML at their routes, but they can also render JSON with a simple get parameter.", + "hybridModeDescription": "Hybrid is best of both worlds. Pages still render HTML at their routes, but they can also render JSON with a simple get parameter. For example /about/ would return HTML, but /about/?toJSON would return a fully hydrated JSON object of the about page.\n\nNote: This change can be reverted later from General Settings", + "inputRangeHelperText": "Set a minimum and/or maximum allowed value", + "inputRangeLabel": "Limit Input Range", + "inputRangeMaximum": "Maximum", + "inputRangeMinimum": "Minimum", + "integrationLimitItemRange": "Limit Item Range", + "integrationLimitItemRangeDescription": "Set a minimum and/or maximum number of items", + "lastUpdated": "Last Updated: {{date}}", + "lastUpdatedBy": "Last Updated By", + "lastUpdatedOn": "Last Updated On", + "learnBestPracticesModels": "Learn Best Practices for creating models", + "learnBlocksTutorial": "Learn Blocks basics with a tutorial", + "learnMore": "Learn More", + "limitCharacterCount": "Limit character count", + "limitCharacterCountDescription": "Specifies a minimum and/or maximum allowed number of characters", + "listThisModel": "List this model", + "listThisModelDescription": "Listed models have their content items available to programmatic navigation calls.", + "maxValueLabel": "Maximum Value", + "mediaItemLimitLabel": "Media Item Limit", + "mediaItemLimitTooltip": "Set the minimum media file limit to 1. It cannot go lower.", + "mediaRulesAddPresetLabel": "Add", + "mediaRulesAllowMultipleLabel": "Allow multiple files to be selected", + "mediaRulesAllowMultipleSubLabel": "Ensures multiple files can be uploaded instead of default of just 1 file", + "mediaRulesCustomErrorMessageLabel": "Custom Error Message *", + "mediaRulesExtensionsInputLabel": "Extensions *", + "mediaRulesFileExtensionsAllowedError": "Only files with the following extensions are allowed: {{extensions}}", + "mediaRulesLimitFileTypesLabel": "Limit File Types", + "mediaRulesLimitFileTypesSubLabel": "Ensures only certain file types can be accepted", + "mediaRulesLockFolderLabel": "Lock to a folder", + "mediaRulesLockFolderSubLabel": "Ensures files can only be selected from a specific folder", + "minValueLabel": "Minimum Value", + "modelDescriptionLabel": "Description", + "modelDescriptionTooltip": "Displays the purpose of the model to help content writers", + "modelDetailsSubtitle": "View and update the primary properties of your model", + "modelDetailsTitle": "Model Details", + "modelNameBlock": "Block", + "modelNameDataset": "Dataset", + "modelNameMultiPage": "Multi Page", + "modelNameSinglePage": "Single Page", + "modelNameTooltip": "Name that is shown to content editors", + "modelParent": "Model Parent", + "modelsTableColumnContentItems": "Content Items", + "modelsTableColumnFields": "Fields", + "modelsTableColumnName": "Name", + "modelsTableColumnType": "Model Type", + "modelsTableColumnUpdated": "Updated", + "modelType": "Model Type", + "modelTypeBlockDescription": "Creates a collection of entries with no URLs and a code template", + "modelTypeBlockExamples": "e.g. Heros, Features, Testimonials, etc.", + "modelTypeBlockName": "Block Model", + "modelTypeDataset": "dataset", + "modelTypeDatasetDescription": "Creates a collection of entries with no URLs and no code templates", + "modelTypeDatasetExamples": "e.g. Slides, FAQS, Brands, etc.", + "modelTypeDatasetName": "Dataset Model", + "modelTypeLabel": "{{modelType}} Model", + "modelTypeMultiPage": "multi page", + "modelTypeMultiPageDescription": "Creates a collection of pages with unique URLs and a code template", + "modelTypeMultiPageExamples": "e.g. Articles, Authors, Products, etc.", + "modelTypeMultiPageName": "Multi Page Model", + "modelTypeSinglePage": "single page", + "modelTypeSinglePageDescription": "Creates individual pages with unique URLs and a code template", + "modelTypeSinglePageExamples": "e.g. Home Page, About Page, etc.", + "modelTypeSinglePageName": "Single Page Model", + "needHelp": "Need help?", + "noActiveFieldsInModel": "There are no active fields in this model.", + "noFilterResultsHeader": "No models were found", + "noFilterResultsSubHeader": "Try adjusting the filters to find what you were looking for.", + "noMatchesFound": "No matches found.", + "noneValue": "None", + "noSearchResultsAlt": "No search results", + "noSearchResultsHeader": "Your search \"{{searchTerm}}\" could not find any results", + "noSearchResultsSubHeader": "Try adjusting your search. We suggest check all words are spelled correctly or try using different keywords.", + "notifyCannotCreateModel": "Cannot Create Model", + "notifyPleaseAddDisplayName": "Please Add Display Name", + "ogImageFieldDescription": "This field allows you to set an open graph image via the SEO tab. An Open Graph (OG) image is an image that appears on a social media post when a web page is shared.", + "ogImageFieldLabel": "Meta Image", + "openCodeApp": "Open Code App", + "openVisualLayout": "Open Visual Layout", + "optionalLabel": "optional", + "parentModel": "Parent Model", + "parentModelTooltip": "Selecting a parent affects default routing and content navigation in the UI", + "pleaseAddDisplayName": "Please Add Display Name", + "proTip": "Pro Tip", + "reactivateField": "Reactivate Field", + "reactivatingField": "Reactivating Field", + "readDocs": "Read Docs", + "readDocsModelTypes": "Read our docs about different model types and their uses", + "readFieldTypesGuide": "Read our guide on Field Types in Schema", + "referenceId": "Reference ID", + "referenceIdAlreadyInUse": "This Reference ID is already in use. Please enter a different one.", + "referenceIdLabel": "Reference ID", + "referenceIdPlaceholder": "Auto-Generated from Display Name", + "referenceIdTooltip": "ID used for accessing this model through our API or Parsley", + "referenceModelLabel": "Reference Model", + "referenceModelPlaceholder": "Select a model", + "regexCustomErrorMessage": "Custom Error Message *", + "regexCustomErrorMessageTooltip": "Displays if the user enters an input that does not meet the requirements", + "regexInvalidHelper": "Regex provided is not valid. Please review regex documentation on MDN.", + "regexKnowledgeRequired": "Knowledge of Regular Expressions (Regex) is required. Entering incorrect regex patterns may prevent content fields from accepting user inputs.", + "regexMatchErrorEmail": "Must be an email (e.g. hello@zesty.io)", + "regexMatchErrorMessageLabel": "Regex Match Error Message", + "regexMatchErrorSlug": "Must be a slug (e.g. everything-about-content-marketing)", + "regexMatchErrorUrl": "Must be a URL (e.g. https://www.google.com/)", + "regexMatchPatternLabel": "Regex Match Pattern", + "regexMatchSpecificPattern": "Match a specific pattern", + "regexNotMatchingPattern": "Not matching expected pattern", + "regexPattern": "Pattern", + "regexPatternMatchingRules": "Regex Pattern Matching Rules", + "regexPatternTooltip": "Enter a regular expression (regex) pattern - a sequence of characters used for pattern matching in strings", + "regexRestrictErrorEmail": "Cannot be an email (e.g. hello@zesty.io)", + "regexRestrictErrorMessageLabel": "Regex Restrict Error Message", + "regexRestrictErrorSlug": "Cannot be a slug (e.g. everything-about-content-marketing)", + "regexRestrictErrorUrl": "Cannot be a URL (e.g. https://www.google.com/)", + "regexRestrictPatternLabel": "Regex Restrict Pattern", + "regexRestrictSpecificPattern": "Restrict a specific pattern", + "regexSetMatchExpression": "Set the regular expression (e.g. email, URL, etc) the input should match", + "regexSetRestrictExpression": "Set the regular expression (e.g. email, URL, etc) the input should not match", + "regexType": "Type", + "regexTypeCustom": "Custom", + "regexTypeEmail": "Email", + "regexTypeSlug": "Slug", + "regexTypeTooltip": "Select from a list of preset Regex pattern types or write your own custom Regex pattern", + "regexTypeUrl": "URL", + "relatedModelDeletedError": "The model that this was related to has been deleted", + "relatedModels": "Related Models", + "relatedModelsDescription": "View the models, this model is connected to", + "removeField": "Remove Field", + "renameModel": "Rename Model", + "renameModelDescription": "This will update the model's Display Name and Reference ID that is shown to content editors & developers", + "renameModelDisplayNameLabel": "Display Name", + "renameModelDisplayNameTooltip": "Name that is shown to content editors", + "renameModelFailedNotify": "Failed to rename model", + "renameModelReferenceIdHelperText": "The Reference Name is used in custom code files and endpoints. Updating this value takes immediate effect in production. Please check with your developer before making changes.", + "renameModelReferenceIdLabel": "Reference ID", + "renameModelReferenceIdTooltip": "ID used for accessing this model through our API or Parsley", + "renameModelTitle": "Rename Model", + "repeaterDataStorageDescription": "Data is stored as a JSON array of objects, which can be accessed easily, both directly and through Parsley with each statement.", + "repeaterSubFieldCount_one": "{{count}} field", + "repeaterSubFieldCount_other": "{{count}} fields", + "restEndpointLabel": "Rest Endpoint (needs authentication bearer)", + "searchFieldTypesPlaceholder": "Search field types", + "searchModelsPlaceholder": "Search Models", + "searchVariants": "Search variants", + "selectBlockType": "Select a Block Type", + "selectedItemNotFound": "Selected item not found: {{value}}", + "selectFieldTypeTitle": "Select a Field Type", + "selectFolderLabel": "Select Folder", + "selectModelType": "Select Model Type", + "selectModelTypeSubtitle": "The model type you select affects how content items render in the interface and whether URLs and templates are created. Note: All Models can be used headless", + "selectParentTooltip": "Selecting a parent affects default routing and content navigation in the UI", + "selectPlaceholder": "Select", + "seoFieldLinkTitle": "SEO Link Title", + "seoFieldMetaDescription": "SEO Meta Description", + "seoFieldMetaKeywords": "SEO Meta Keywords", + "seoFieldMetaTitle": "SEO Meta Title", + "seoMetaFields": "SEO Meta Fields", + "seoMetaFieldsDescription": "Content models for single-page, multi-page and dataset models come with SEO meta fields that are accessible via API or Parsley. These fields are available to help with discovery on search and are used for mass search in the Zesty API. The value of these fields can be found under the meta key in the Instances API end point.", + "showSystemFields": "Show system fields", + "sortLastCreated": "Last Created", + "sortLastModified": "Last Modified", + "starterBlockBlankDescription": "A blank block", + "starterBlockBlankLabel": "Blank", + "starterBlockCodeTemplateLink": "Code Template", + "starterBlockContactUsFormDescription": "A simple contact us form to capture leads from any page", + "starterBlockContactUsFormLabel": "Contact Us Form", + "starterBlockCreateButton": "Create Block Model", + "starterBlockCreatingModelBody": "This may take a couple of minutes.", + "starterBlockCreatingModelHeading": "Creating Model", + "starterBlockDescriptionHeading": "Description", + "starterBlockDetailsHeading": "Details", + "starterBlockDisplayNameInUse": "Display name is already in use. Please use another display name.", + "starterBlockDisplayNameLabel": "Display Name", + "starterBlockDisplayNamePlaceholder": "e.g. Home Page, About Page, Contact Page, etc.", + "starterBlockDisplayNameTooltip": "Name that is shown to content editors", + "starterBlockFeatureSideBySideImageDescription": "A feature with text on the left and image on the right", + "starterBlockFeatureSideBySideImageLabel": "Feature Side By Side Image", + "starterBlockFieldsHeading": "Fields", + "starterBlockFormCodeTemplate": "Code Template", + "starterBlockFormCreateBlockModel": "Create Block Model", + "starterBlockFormCreatingModel": "Creating Model", + "starterBlockFormCreatingModelDescription": "This may take a couple of minutes.", + "starterBlockFormDescription": "Description", + "starterBlockFormDetails": "Details", + "starterBlockFormDisplayName": "Display Name", + "starterBlockFormDisplayNameInUse": "Display name is already in use. Please use another display name.", + "starterBlockFormDisplayNamePlaceholder": "e.g. Home Page, About Page, Contact Page, etc.", + "starterBlockFormDisplayNameTooltip": "Name that is shown to content editors", + "starterBlockFormFields": "Fields", + "starterBlockFormReferenceId": "Reference ID", + "starterBlockFormReferenceIdInUse": "Reference ID is already in use. Please use another Reference ID.", + "starterBlockFormReferenceIdPlaceholder": "Auto-Generated from Display Name", + "starterBlockFormReferenceIdTooltip": "ID used for accessing this model through our API or Parsley", + "starterBlockFormResources": "Resources", + "starterBlockFormSeeBootstrapTemplate": "See Bootstrap Template", + "starterBlockHeroImageBelowDescription": "A hero with text and CTA buttons on the top and an image below", + "starterBlockHeroImageBelowLabel": "Hero Image Below", + "starterBlockReferenceIdLabel": "Reference ID", + "starterBlockReferenceIdPlaceholder": "Auto-Generated from Display Name", + "starterBlockReferenceIdTooltip": "ID used for accessing this model through our API or Parsley", + "starterBlockRefIdInUse": "Reference ID is already in use. Please use another Reference ID.", + "starterBlockResourcesHeading": "Resources", + "starterBlockSeeBootstrapTemplate": "See Bootstrap Template", + "starterBlockSideBySideHeroImageDescription": "A hero with text and CTA buttons on the left and an image on the right", + "starterBlockSideBySideHeroImageLabel": "Side by Side Hero Image", + "starterBlockSingleTestimonialDescription": "A single testimonial quote with a person's name, image, and company details", + "starterBlockSingleTestimonialLabel": "Single Testimonial", + "starterBlocksSearchPlaceholder": "Search variants", + "starterBlocksSelectionSubtitle": "Start with a blank block or select from our selection of pre designed blocks", + "starterBlocksSelectionTitle": "Select a Block Type", + "starterBlocksSubtitle": "Start with a blank block or select from our selection of pre designed blocks", + "starterBlocksTutorialLink": "Learn Blocks basics with a tutorial", + "subFieldFormAddTitle": "Add {{name}} Field", + "subFieldFormEditTitle": "Edit {{label}}", + "subFieldFormTypeFieldLabel": "{{type}} Field", + "switchToHeadless": "Switch to Headless", + "switchToHybrid": "Switch to Hybrid", + "switchToMode": "Switch to {{mode}}", + "switchWebEngineModeTitle": "Switch Web Engine Mode to {{mode}}", + "systemFieldCreatedAt": "Created At", + "systemFieldItemZuid": "Item ZUID", + "systemFieldMasterZuid": "Master Zuid", + "systemFieldModelZuid": "Model ZUID", + "systemFields": "System Fields", + "systemFieldsDescription": "Each content item (child) of a model in Zesty comes included with non-editable system fields that represent the state of the content such as when it was created, updated, and the version. The value of these fields can be found under the meta key in the Instances API end point.", + "systemFieldUpdatedAt": "Updated At", + "systemFieldVersion": "Version", + "tabActivityLog": "Activity Log", + "tabDetails": "Details", + "tabFields": "Fields", + "tabInfo": "Info", + "tabLearn": "Learn", + "tabRules": "Rules", + "templateBlogDescription": "Perfect for blogging with title, body content, feature image, and category fields.", + "templateBlogTitle": "Blog", + "templateFileEmpty": "Template File is empty", + "templateFileEmptyBody": "Please add in the code for the block via the Code App.", + "templateLandingPageDescription": "A simple landing page with fields for a hero, feature, and footer section.", + "templateLandingPageTitle": "Landing Page", + "tooltipWhatIsAField": "What is a {{fieldName}} Field?", + "tooltipWhatIsAnField": "What is an {{fieldName}} Field?", + "typeTextArticleWriter": "Article Writer", + "typeTextBlockSelector": "Block Selector", + "typeTextBoolean": "Boolean", + "typeTextColor": "Color", + "typeTextCurrency": "Currency", + "typeTextDate": "Date", + "typeTextDatetime": "Date and Time", + "typeTextDropdown": "Dropdown", + "typeTextFiles": "Files", + "typeTextFontawesome": "Font Awesome", + "typeTextImages": "Media", + "typeTextIntegration": "Integration", + "typeTextInternalLink": "Internal Link", + "typeTextLink": "External URL", + "typeTextMarkdown": "Markdown", + "typeTextNumber": "Number", + "typeTextOneToMany": "One to Many", + "typeTextOneToOne": "One to One", + "typeTextRepeater": "Repeater", + "typeTextSort": "Sort Order", + "typeTextText": "Single Line Text", + "typeTextTextarea": "Multi Line Text", + "typeTextUuid": "UUID", + "typeTextWysiwygAdvanced": "WYSIWYG (Advanced)", + "typeTextWysiwygBasic": "WYSIWYG", + "uniqueField": "Unique Field", + "uniqueFieldDescription": "Ensures that multiple items can't have the same value for this field", + "updateBlockGroupDescription": "This affects what group the block is presented on in the All Blocks page in the Blocks App.", + "updateBlockGroupFailedNotify": "Failed to update block group", + "updateBlockGroupTitle": "Update Block Group", + "updated": "Updated", + "updateDescriptionDialogBody": "This will update the description of th model that is shown to content editors", + "updateDescriptionDialogTitle": "Update Description", + "updateDescriptionFailedNotify": "Failed to update description", + "updateDescriptionInputLabel": "Description", + "updateDescriptionInputPlaceholder": "What is this model going to be used for", + "updateDescriptionInputTooltip": "Displays the purpose of the model to help content writers", + "updateParentDialogBody": "Selecting a parent affects default routing and content navigation in the UI.", + "updateParentDialogTitle": "Update Model Parent", + "updateParentInputTooltip": "Selecting a parent affects default routing and content navigation in the UI", + "validationCannotBeLessThanMinValue": "Cannot be less than minimum value", + "validationCannotExceedMaxCharCount": "Cannot exceed maximum character count", + "validationCannotExceedMaxChars": "Cannot exceed {{maxLength}} characters", + "validationCannotExceedMaxValue": "Cannot exceed maximum value", + "validationFieldRequired": "This field is required", + "validationIncompleteApiConfig": "Incomplete API Configuration", + "validationInvalidNumber": "Invalid number", + "validationInvalidRegexPattern": "Invalid regex pattern", + "validationRequiredField": "Required Field. Please enter a value.", + "validationSelectCurrency": "Please select a currency", + "viewAllActivity": "View All Activity", + "viewContent": "View Content", + "viewEndpoints": "View Endpoints", + "viewVariants": "View Variants", + "whatIsAFieldType": "What is a {{fieldType}} Field?", + "whatIsAnFieldType": "What is an {{fieldType}} Field?", + "wizardCreatingModel": "Creating Model", + "wizardEnterContentEntry": "Enter a Content Entry", + "wizardSelectCollectionSubtitle": "Start from one of our many schema collections to better understand our product", + "wizardSelectCollectionTitle": "Select a Schema Collections", + "wizardSuccessHeading": "Your Models for Your {{title}} are Now Built!", + "zuidLabel": "ZUID", + "zuidTooltip": "Content items are always accessed relative to their model, so a model ZUID is required for each call." +} diff --git a/public/locales/en-US/seo.json b/public/locales/en-US/seo.json new file mode 100644 index 0000000000..dfc12d5408 --- /dev/null +++ b/public/locales/en-US/seo.json @@ -0,0 +1,117 @@ +{ + "addAllRedirects": "Add All Redirects", + "changeDialogBody": "This will be a 301 permanent redirect and will ensure visitors using the old path are seamlessly directed to the new path.", + "changeDialogCreateRedirect": "Create Redirect", + "changeDialogDontCreate": "Don't Create", + "changeDialogNewPath": "New Path", + "changeDialogOldPath": "Old Path", + "changeDialogRedirectCreated": "1 Redirect Created", + "changeDialogTitle": "URL Path Change Detected. Create Redirect from the old path to the new path?", + "closeImport": "Close Import", + "columnHttpCode": "HTTP Code", + "columnIncomingPath": "Incoming Path", + "columnTarget": "Target", + "columnType": "Type", + "createFormAddPath": "Add Path", + "createFormCreateAnotherRedirect": "Create Another Redirect", + "createFormCreateRedirect": "Create Redirect", + "createFormExternalUrlPlaceholder": "Enter URL (e.g. https://www.google.com/)", + "createFormFilePathOnlyTooltip": "File Path Only", + "createFormHttpCodeLabel": "HTTP Code", + "createFormIncomingPathLabel": "Incoming Path", + "createFormNotifyCreated_one": "{{count}} Redirect Created", + "createFormNotifyCreated_other": "{{count}} Redirects Created", + "createFormNotifySaved": "Redirect Saved: {{path}}", + "createFormPathPlaceholder": "/Enter URL path to redirect from", + "createFormRedirectTargetLabel": "Redirect Target", + "createFormTypeLabel": "Type", + "createFormValueCannotBeModified": "This value cannot be modified", + "createRedirectHeader": "Create Redirect", + "createRedirectIncomingPath": "Incoming paths are case-insensitive and trailing slashes are automatically handled", + "createRedirectSubHeader": "Your new redirects will go live immediately after they're created.", + "deleteRedirect": "Delete Redirect", + "deleteRedirectDescriptionPlural": "Deleting these {{count}} redirects for these incoming paths", + "deleteRedirectDescriptionPlural_one": "Deleting this {{count}} redirect for this incoming path", + "deleteRedirectDescriptionPlural_other": "Deleting these {{count}} redirects for these incoming paths", + "deleteRedirectDescriptionSingular": "Deleting this redirect for these incoming path", + "deleteRedirectDescriptionSuffix": "will remove them immediately from your site. This action cannot be undone.", + "deleteRedirectDescriptionSuffix_one": "will remove it immediately from your site. This action cannot be undone.", + "deleteRedirectDescriptionSuffix_other": "will remove them immediately from your site. This action cannot be undone.", + "deleteRedirectsButton": "Delete Redirects ({{count}})", + "deleteRedirectsButton_one": "Delete Redirect ({{count}})", + "deleteRedirectsButton_other": "Delete Redirects ({{count}})", + "deleteRedirectTitle_one": "Delete {{count}} Redirect", + "deleteRedirectTitle_other": "Delete {{count}} Redirects", + "editRedirect": "Edit Redirect", + "editRedirectHeader": "Edit Redirect", + "editRedirectIncomingPath": "Trailing slashes and casing variations in paths are automatically handled in WebEngine.", + "editRedirectSubHeader": "Changes you make will be immediately go live on saving", + "errorDeletingRedirects": "Error deleting redirects", + "errorDialogBody": "The following paths couldn't be saved as redirects.", + "errorDialogNotifyCreated_one": "{{count}} Redirect Created", + "errorDialogNotifyCreated_other": "{{count}} Redirects Created", + "errorDialogNotifySaved": "Redirect Saved: {{path}}", + "errorDialogTitle_one": "{{count}} Redirect couldn't be created", + "errorDialogTitle_other": "{{count}} Redirects couldn't be created", + "filterRedirects": "Filter Redirects", + "httpCode301Label": "301 - Permanent Redirect", + "httpCode301Permanent": "301 - Permanent", + "httpCode302Label": "302 - Temporary Redirect", + "httpCode302Temporary": "302 - Temporary", + "importCsvXml": "Import CSV/XML", + "importErrorDialogBodyRich": "The file format or structure doesn't match what we expected. Please check your CSV or XML file and refer to our <1>import guide in our docs for the correct format.", + "importErrorDialogHeader": "File Import Failed", + "importFileReadError": "Failed reading file: {{err}}", + "importInvalidFileSelected": "Invalid file selected", + "importMustBeCsv": "Import must be a CSV file", + "importRowCreated": "Created", + "importRowPreExisting": "Pre-Existing", + "importTableFrom": "From", + "importTableTo": "To", + "importTableType": "Type", + "importXmlSitemapSpec": "XML sitemap imports must follow the {{specUrl}} spec.", + "invalidUrlEnterValid": "Invalid URL. Please enter a valid URL.", + "loading": "Loading...", + "redirectButton": "Redirect", + "redirectCreateFailed": "Failed creating redirect", + "redirectCreateFailedFromPath": "Failed creating redirect from {{path}}. {{error}}", + "redirectCreateSuccess": "Created redirect", + "redirectDeleted_one": "{{count}} Redirect Deleted", + "redirectDeleted_other": "{{count}} Redirects Deleted", + "redirectQueryStringPlaceholder": "Redirect query string", + "redirectRemoveFailed": "Failed to remove SEO redirect", + "redirectsLoadFailed": "Failed to load redirects data", + "redirectTargetHasBeenDeleted": "Redirect Target has been", + "redirectTypeExternal": "External", + "redirectTypeInternal": "Internal", + "redirectTypeWildcard": "Wildcard", + "redirectUrl": "Redirect URL", + "searchForItem": "Search for item", + "selectAll": "Select All", + "selectedCount": "{{count}} Selected", + "selectedCount_one": "{{count}} Selected", + "selectedCount_other": "{{count}} Selected", + "sortHttpCode": "HTTP Code", + "sortIncomingPath": "Incoming Path", + "sortTarget": "Target", + "sortType": "Type", + "targetErrorInvalidUrl": "Invalid URL. Please enter a valid URL.", + "targetErrorUnpublished": "This item isn't published yet. Any incoming paths will lead to your 404 page until it goes live.", + "targetOptionExternalLabel": "External - link to an external webpage", + "targetOptionInternalLabel": "Internal - link to a published item within your instance", + "targetOptionWildcardLabel": "Wildcard - can handle multiple redirects with a single rule", + "tooltipCode301": "[301] - Permanent Redirect: Use this when content has moved permanently to a new location. Search engines will update their index.", + "tooltipCode302": "[302] - Temporary Redirect: Use this when content is temporarily located elsewhere, and you intend to move it back. Search engines typically don't update their index for the new location.", + "tooltipTargetTypeExternal": "External E.g. https://zesty.org/", + "tooltipTargetTypeInternal": "Internal E.g. /about", + "tooltipTargetTypeWildcard": "Wildcard E.g. /blog/*/*/", + "totalRedirects_one": "{{count}} Total Redirect", + "totalRedirects_other": "{{count}} Total Redirects", + "tryAgain": "Try Again", + "typeExternal": "External", + "typeFilterExternal": "External - link to an external webpage", + "typeFilterInternal": "Internal - linked to an item in this instance", + "typeFilterWildcard": "Wildcard - rule based redirects", + "typeInternal": "Internal", + "typeWildcard": "Wildcard" +} diff --git a/public/locales/en-US/settings.json b/public/locales/en-US/settings.json new file mode 100644 index 0000000000..0fbc2a237b --- /dev/null +++ b/public/locales/en-US/settings.json @@ -0,0 +1,183 @@ +{ + "activeStatuses": "Active Statuses", + "activeStatusesSubtitle": "Active statuses are available to be added and removed from content items.", + "AddLangCodeToPaths": "Add Default Lang-Code to Path", + "addStatusNotification": "Users who can add this status will be notified.", + "AjaxCorsAllowAnyOrigin": "Custom View Endpoints » CORS Allow Any Origin", + "AlwaysRedirectToHttps": "Always redirect to HTTPS", + "AutoIncludeJsInHead": "Automatically include JavaScript in head", + "AutomatedFeedXml": "Automated feed.xml", + "BaseDirectory": "Base Directory", + "BasicContentApiEnabled": "Access to Instant JSON API for content.", + "browseFontsTitle": "Browse Fonts", + "bynderAssetsDescription": "Streamline your workflow by giving your team easy access to your Bynder assets within Zesty", + "bynderAssetsHeading": "Use your Bynder Assets within Zesty", + "bynderChangePortal": "Change Bynder Portal", + "bynderConnect": "Connect to Bynder", + "bynderConnectedPortal": "Your instance is connected to the following Bynder Portal", + "bynderDisconnect": "Disconnect", + "bynderIntegration": "Bynder Integration", + "bynderLogoAlt": "Bynder logo", + "bynderPreviewAlt": "Bynder preview", + "CanonicalTagsEnabled": "Enable Canonical Tags", + "categoryAnalytics": "Analytics", + "categoryBlog": "Blog", + "categoryBynder": "Bynder", + "categoryContactForm": "Contact Form", + "categoryCustom": "Custom", + "categoryDeveloper": "Developer", + "categoryExporter": "Exporter", + "categoryExtensions": "Extensions", + "categoryForCustomEndpoint": "For Custom Endpoint", + "categoryGeneral": "General", + "categoryGroupby": "GroupBy", + "categoryI18n": "i18n", + "categoryIntegrations": "Integrations", + "categoryLogosection": "Logo Section", + "categoryLogoSection": "Logo Section", + "categoryOverrides": "Overrides", + "categoryPetdesk": "PetDesk", + "categoryProxy": "Proxy", + "categoryRouting": "Routing", + "categorySecurity": "Security", + "categorySeo": "SEO", + "categorySettingsSaved": "{{category}} Settings Saved", + "categorySitelink": "Sitelink", + "categorySocialLinks": "Social Links", + "categoryStripe": "Stripe", + "categoryTagManagers": "Tag Managers", + "categoryTwitter": "Twitter", + "categoryUps": "UPS", + "categoryVerification": "Verification", + "categoryYoutube": "YouTube", + "ClientKey": "GroupBy Client Key", + "Collection": "GroupBy Default Collection", + "color": "Color", + "colorBlue": "Blue", + "colorDeepPurple": "Deep Purple", + "colorGreen": "Green", + "colorGrey": "Grey", + "colorOrange": "Orange", + "colorPink": "Pink", + "colorPurple": "Purple", + "colorRed": "Red", + "colorRequired": "Color is required", + "colorRose": "Rose", + "colorYellow": "Yellow", + "confirmSaveDialogBody": "Your changes will take effect in production on the next re-render, cache expiration, or manual cache clear.", + "confirmSaveDialogTitle": "Save {{title}} Settings?", + "ContentSecurityPolicy": "Content-Security-Policy", + "createStatus": "Create Status", + "deactivatedStatuses": "Deactivated Statuses", + "deactivatedStatusesSubtitle": "These statuses can be re-activated at any time if you would like to add or remove them from content items.", + "deactivateStatus": "Deactivate Status", + "deactivateStatusBody": "Deactivating this status will remove it from all content items that currently have it. You can always reactivate this status in the future.", + "deactivateStatusLabel": "Deactivate Status", + "DefaultPage": "Default Language Page", + "deleteFontConfirm": "Do you really want to uninstall this font?", + "describeStatusDescription": "Describe what this status means in the context of your workflows", + "descriptionOptional": "Description (optional)", + "Dev": "Root URL to proxy file store", + "DisplayAdvertisingSupport": "Display Advertising Support", + "DntPolicy": "DNT on or off", + "editStatus": "Edit Status", + "editStatusTitle": "Edit {{name}}", + "errorOccurred": "An error occurred.", + "errorWithMessage": "Error: {{message}}", + "FeaturePolicy": "Feature-Policy", + "filterSettings": "Filter Settings", + "fontInstallError": "Failed to add {{family}} ({{variants}}): {{error}}", + "fontInstallSuccess": "Font \"{{family}} ({{variants}})\" has been installed", + "fontPreviewText": "This is a text example", + "fontUninstalled": "Font \"{{fontLabel}}\" has been uninstalled", + "fontUninstallFailed": "Failed to uninstall {{fontLabel}}: {{error}}", + "FriendlyPagination": "Friendly Pagination", + "GoogleAutoLinker": "Google Auto Linker", + "GoogleUrchinId": "Google Analytics ID", + "Gql": "Turns on Access to GraphQL Endpoints to Run an Apollo GQL Server", + "GqlOrigin": "GraphQL Allow Origin", + "GtmId": "Google Tag Manager ID", + "headTagsTitle": "Head Tags", + "Honeypot": "Form Honey Pot", + "installedFontsTitle": "Installed Fonts", + "instanceWwwDnsTooltip": "Activating the WWW setting requires DNS setup of both the apex domain and www sub-domain.", + "Live": "Root URL to proxy file store", + "LoadFontAwesome": "Load Font Awesome", + "MediaProxyUrl": "Media Proxy URL", + "nameRequired": "Name is required", + "navFontsBrowse": "Browse fonts", + "navFontsInstalled": "Installed fonts", + "navHeadTags": "Head Tags", + "navRobotsTxt": "Robots.txt", + "navWorkflows": "Workflows", + "noInstalledFonts": "No Installed Fonts", + "none": "None", + "noneOption": "None", + "noResultsFor": "No results for \"{{keyword}}\"", + "noSearchResultsAlt": "No Search Results", + "off": "Off", + "on": "On", + "OverwriteHead": "Overwrite Head File", + "PreferredDomainPrefix": "Always prepend WWW to my domain?", + "prev": "Prev", + "PreviewLock": "Preview Lock Protection", + "PreviewLockPassword": "Preview Lock Password", + "publishRequiresStatus": "Publishing content items requires this status to be applied.", + "publishRequiresStatusDescription": "This is a global setting and means content items cannot be published unless this status has been applied.", + "ReferrerPolicy": "Referrer-Policy", + "removeFontLabel": "Remove Font", + "removeFontVariant": "Remove {{variant}}", + "removeStatusNotification": "Users who can remove this status will be notified.", + "robotsFailedFetchSettings": "Failed to fetch settings", + "robotsFailedSaveSettings": "Failed saving robots.txt settings. {{err}}", + "robotsFindingSettings": "Finding robots.txt settings", + "robotsNonLiveDomainWarning": "Non-Live domains ALWAYS have robots.txt off to avoid being crawled by search engines. This include [hash]-dev.webengine.zesty.io, [hash]-dev.preview.zesty.io, and any registered domain set to the \"dev\" branch", + "RobotsOn": "Search Engine Crawlable?", + "robotsPublishEventWarning": "Changes will not be reflected until a publish event occurs.", + "robotsSettingsUpdated": "robots.txt file settings have been updated", + "RobotsText": "Robots Text", + "robotsTopBarTitle": "Robot.txt", + "SafeEmails": "Safe Email Send To List", + "saved": "Saved", + "saveSettingsTooltip": "Save Settings {{saveShortcut}}", + "searchFonts": "Search Fonts", + "searchFontsPlaceholder": "Search Fonts", + "searchStatuses": "Search Statuses", + "sectionFonts": "Fonts", + "sectionGlobalMetaSeo": "Global Meta & SEO", + "sectionInstanceSettings": "Instance Settings", + "sectionStyles": "Styles", + "sectionUserSettings": "User Settings", + "SendingEmail": "Sending Email", + "showDeactivated": "Show Deactivated", + "ShowDomainInTitle": "Show domain name in meta title?", + "ShowInTitle": "Show site name in meta title?", + "SiteProtocol": "HTTPS on?", + "statusDeactivated": "Status De-activated: {{name}}", + "statusDeactivateFailed": "Failed to deactivate status: {{name}}. Please try again.", + "statusDescriptionPlaceholder": "Ready for legal team to review for publishing", + "statusNamePlaceholder": "e.g. Needs Content Review", + "StrictTransportSecurity": "Strict-Transport-Security", + "styleCategoryBodyColorsSpacing": "Body Colors & Spacing", + "styleCategoryButtons": "Buttons", + "styleCategoryForms": "Forms", + "styleCategoryHtmlElements": "HTML Elements", + "styleCategoryInteractiveElements": "Interactive Elements", + "styleCategoryLinks": "Links", + "styleCategoryNavigation": "Navigation", + "styleCategoryResponsiveGrid": "Responsive Grid", + "styleCategorySidebar": "Sidebar", + "styleCategoryTypography": "Typography", + "styleCategoryUiStyling": "UI Styling", + "typeSomethingToPreview": "Type something to preview", + "unexpectedError": "An unexpected error occurred.", + "UniversalCode": "Use Google Universal Code", + "Url": "GroupBy Client Endpoint", + "whichRolesCanAdd": "Which roles can add this status?", + "whichRolesCanRemove": "Which roles can remove this status?", + "workflowsHeading": "Workflows", + "workflowsRestrictedDescription": "Contact the instance owner or administrators listed below to upgrade your role to Admin or Owner.", + "workflowsRestrictedTitle": "You need permission to view and edit workflows", + "XContentTypeOptions": "X-Content-Type-Options", + "XFrameOptions": "Header: X-Frame-Options" +} diff --git a/public/locales/en-US/shell.json b/public/locales/en-US/shell.json new file mode 100644 index 0000000000..fa29a464ec --- /dev/null +++ b/public/locales/en-US/shell.json @@ -0,0 +1,608 @@ +{ + "accessDenied": "Access Denied", + "accessDeniedImageAlt": "Page Not Found", + "accessDeniedRoleBody": "Your current role of {{role}} does not include access to the {{app}} App. To gain access, please contact the instance owner or one of the administrators listed below and request a role upgrade to gain access.", + "accountChangePassword": "Change Password", + "accountGetHelp": "Get Help", + "accountLogOut": "Log Out", + "accountPreferences": "Preferences", + "accountReadDocs": "Read Docs", + "accountViewAllInstances": "View All Instances", + "accountYourProfile": "Your Profile", + "addNewComment": "Add New Comment", + "advancedSearch": "Advanced Search", + "advancedSearchDescription": "As you and your team work together in Zesty, you'll create a searchable archive of content, models, and code files. Use the form below to find what you are looking for.", + "aiAssistantBeta": "AI Assistant Beta", + "aiDrawerPlaceholder": "Ask for anything, for example \"Cater my content to a specific audience\"", + "aiGeneratingContentStatus": "Our AI assistant is generating your content based on your parameters", + "aiMistakesWarning": "Our AI assistant can make mistakes. Please check important info.", + "aiOnlyInContentApp": "Only available in content app.", + "aiScanningMetaDescription": "Our AI assistant is scanning your content and generating your meta description based on your parameters", + "aiScanningMetaTitle": "Our AI assistant is scanning your content and generating your meta title based on your parameters", + "aiWriteContentSubtitle": "Use our AI assistant to write content for you", + "allInstances": "All Instances", + "alreadyPartOfInstance": "Already part of instance", + "announcementIgnore": "Ignore", + "announcementRead": "Read Announcement", + "announcementScheduleTraining": "Schedule Training", + "announcementShowVideo": "Show Video", + "anyLanguage": "Any Language", + "anyone": "Anyone", + "anyTime": "Any Time", + "anyType": "Any Type", + "appErrorBody": "This error has been sent to our team. Please reload our application to continue.", + "appErrorHeading": "Oops, something went wrong", + "appLoadingFailure": "App loading failure: {{message}}", + "applyAiSuggestion": "Apply", + "audiencePlaceholder": "e.g. Freelancers, Designers, .....", + "autoApply": "Auto apply", + "block": "Block", + "blockSelectorCreateVariant": "Create Variant", + "blockSelectorNoVariantsDescription": "To create a variant, please go to the Blocks App and select this model and click on the create variant button", + "blockSelectorNoVariantsTitle": "No variants have been created for the {{modelName}} Model", + "blockSelectorSearchVariants": "Search variants", + "blockSelectorSelectModel": "Select model", + "blockSelectorSelectModelFirst": "Please select a model first before selecting a variant", + "blockSelectorSelectVariant": "Select variant", + "blockSelectorUpdatedOnBy": "Updated on {{date}} by {{user}}", + "blockSelectorViewBlock": "View Block", + "cancelEsc": "Cancel (ESC)", + "cannotBeUndone": "This cannot be undone", + "characterLimit": "Character Limit", + "characterLimitTooltip": "Set a character limit to control the length of the generated text", + "clearAll": "Clear All", + "clearChat": "Clear Chat", + "code": "Code", + "collapseSidebar": "Collapse Sidebar", + "commentAddError": "Unable to add comment. Please check your internet connection and try again.", + "commentPlaceholder": "Reply or add others with @", + "confirmPublishBody": "This will immediately make v{{version}} of the {{item}} available on all of your platforms. You can always unpublish this item later if needed.", + "confirmPublishTitle": "Publish {{item}}", + "contactSupport": "Contact Support", + "contentGenerated": "Your Content is Generated!", + "contentItem": "Content Item", + "continueWith": "Continue with {{service}}", + "copyInstanceZUID": "Copy Instance ZUID", + "copyLink": "Copy Link", + "createContentItem": "Create Content Item", + "createContentItemSubtitle": "You can only create a content item for a pre-existing model", + "createdByTooltip": "Select a user from all users on the instance.", + "currencyFlagAlt": "{{country}} flag", + "currentlyLoggedInAs": "Currently logged in as {{email}}", + "customDateRange": "Custom date range", + "dateAfter": "After...", + "dateBefore": "Before...", + "dateLast14Days": "Last 14 days", + "dateModified": "Date Modified", + "dateModifiedTooltip": "Select the date range for which you want to see results for.", + "dateOn": "On...", + "dateRange": "Date range", + "dateRangeValue": "{{from}} to {{to}}", + "dateTimeInvalidTime": "Invalid Time", + "dateTimeStoredInUtc": "Stored in UTC as {{value}}", + "dateUpdated": "Date Updated", + "deleteCommentBody": "Deleting this comment will also remove all replies associated with it.", + "deleteCommentTitle": "Delete Comment?", + "deleteForever": "Delete Forever", + "describeAudience": "Describe your Audience", + "docs": "Docs", + "docsAddingImageAltText": "Adding Image Alt Text", + "docsAddingManagingContent": "Adding and Managing Content", + "docsAuditTrailOverview": "Audit Trail Overview", + "docsAuthApi": "Auth API Docs", + "docsBuildingSchema": "Building The Schema", + "docsCapturingFormData": "Capturing form data to Leads", + "docsCodeOverview": "Code Overview", + "docsContentEntry": "Content Entry, Drafts, and Publishing", + "docsContentOverview": "Content Overview", + "docsCreatingLeadForm": "Creating a Lead Form", + "docsEditorCodingBasics": "Editor and Coding Basics", + "docsGettingStarted": "Getting Started", + "docsGuides": "Guides", + "docsInstanceSettings": "Instance Settings", + "docsIntroduction": "Introduction", + "docsLeadsOverview": "Leads Overview", + "docsManageRedirects": "Manage Redirects", + "docsMediaOverview": "Media Overview", + "docsRedirectsOverview": "Redirects Overview", + "docsSchemaContentCode": "Schema, Content, and Code", + "docsSchemaOverview": "Schema Overview", + "docsSeoRedirects": "SEO Redirects", + "docsSettingsOverview": "Settings Overview", + "docsUploadMultipleImages": "How to upload multiple images", + "editorAddRemoveLink": "Add or remove link", + "editorAlignCenter": "Center align text", + "editorAlignJustify": "Justify align text", + "editorAlignLeft": "Left align text", + "editorAlignRight": "Right align text", + "editorBold": "Bold", + "editorChangeHeading": "Change Heading", + "editorChangeToBlockQuote": "Change to block quote", + "editorChangeToCodeBlock": "Change to code block", + "editorChangeToHeadingLevel": "Change to heading level {{level}}", + "editorChangeToParagraph": "Change to paragraph", + "editorEmbed": "Embed", + "editorEmbedContent": "Embed Content", + "editorEmbedIdLabel": "Enter unique {{service}} ID", + "editorFloatLeft": "Float left", + "editorFloatRight": "Float right", + "editorHeading": "Heading", + "editorHeadingLevel": "Heading {{level}}", + "editorIndent": "Indent", + "editorInsertCharacter": "Insert Character: {{char}}", + "editorInsertEmbed": "Insert Embed", + "editorInsertHorizontalRule": "Insert horizontal rule", + "editorInsertImage": "Insert image from media library", + "editorInsertLink": "Insert Link", + "editorInsertSpecialCharacter": "Insert special character", + "editorInsertTable": "Insert table", + "editorItalic": "Italic", + "editorLevel": "Level {{level}}", + "editorLinkNewWindow": "Open link in a new browser window?", + "editorLinkUrlLabel": "What url should this link to?", + "editorPromptColumns": "How many columns?", + "editorPromptEnterUrl": "Enter the URL", + "editorPromptRows": "How many rows?", + "editorRedo": "Redo last undone change", + "editorSpecialCharacter": "Special Character", + "editorToggleEmphasis": "Toggle emphasis", + "editorToggleStrikethrough": "Toggle strikethrough", + "editorToggleStrong": "Toggle strong", + "editorToggleSubscript": "Toggle subscript", + "editorToggleSuperscript": "Toggle superscript", + "editorToggleUnderline": "Toggle underline", + "editorUnderline": "Underline", + "editorUndo": "Undo last change", + "editorWrapInBlockQuote": "Wrap in block quote", + "editorWrapInBulletList": "Wrap in bullet list", + "editorWrapInOrderedList": "Wrap in ordered list", + "emailAddress": "Email Address", + "emailCommaSeparated": "Email, comma or space separated", + "enterTwoFactorOtp": "Enter Your 2FA OTP", + "enterValidEmail": "Please enter a valid email address.", + "errorParsingAiResponse": "Error parsing AI response. Please try again.", + "expandSidebar": "Expand Sidebar", + "failedAuthenticateAccount": "Failed to authenticate your account", + "failedCopyInstanceZUID": "Failed to copy instance ZUID", + "failedCreateField": "Failed to create field. {{error}}", + "failedFetchField": "Failed to fetch field: {{error}}", + "failedFetchHeadTags": "Failed to fetch head tags", + "failedFetchHeadTagsError": "Failed to fetch head tags: {{error}}", + "failedFetchModel": "Failed to fetch model: {{error}}", + "failedFetchModels": "Failed to fetch models", + "failedFetchRecentItems": "There was an issue fetching recent items: {{error}}", + "failedFetchUsers": "Failed to fetch users", + "failedLoadDomains": "Failed to load domains", + "failedLoadHeadTagFile": "Failed to load file. {{status}} | {{error}}", + "failedLoadInstancesList": "There was an issue loading your instances list", + "failedLoadUserRole": "Failed to load your user role for this instance.", + "failedRefreshCdnCache": "Failed to refresh the CDN cache", + "failedToLoadInstance": "Failed to load instance", + "failedUpdateFavicon": "Failed to update favicon", + "faviconUpdated": "Favicon updated", + "favorites": "Favorites", + "fieldRequiredError": "This field is required. Please enter a value.", + "filterNoResultsRich": "Your filter \"{{query}}\" could not find any results", + "findIn": "Find in {{app}}", + "flagAlt": "{{country}} flag", + "forbiddenLoadInstancesList": "You are forbidden from loading an instances list", + "forgotPassword": "Forgot Password?", + "geminiIconAlt": "Gemini Icon", + "geminiLogoAlt": "Gemini Logo", + "generate": "Generate", + "generateContent": "Generate Content", + "generatedContent": "Generated Content", + "generateMetaDescription": "Generate Meta Description", + "generateMetaDescriptionHelp": "Our AI will scan your content and generate your meta description for you based on your parameters set below", + "generateMetaTitle": "Generate Meta Title", + "generateMetaTitleHelp": "Our AI will scan your content and generate your meta title for you based on your parameters set below", + "generateSuggestions": "Generate Suggestions", + "generatingContent": "Generating Content", + "generatingMetaDescription": "Generating Meta Description", + "generatingMetaTitle": "Generating Meta Title", + "generationStopped": "Generation has been stopped", + "goToAccounts": "Go to Accounts", + "hasAccessTo": "Has access to", + "headCreateTag": "Create Head Tag", + "headLegacyNotice": "This instance has legacy head tags. If you want to edit or delete these, please contact support.", + "headNoTags": "No head tags have been created for this item.", + "headNotVersionedNotice": "Head tags are not versioned. Once saved they will take effect when the page(s) are next cached. Caching occurs on publish or every 24 hours.", + "headTagAddAttribute": "Add attribute", + "headTagAddAttributeTitle": "Add Tag Attribute", + "headTagAttributeLabel": "Attribute", + "headTagCreate": "Create head tag", + "headTagDeleteAttributeTitle": "Delete Tag Attribute", + "headTagDeleted": "Head tag deleted", + "headTagDeleteHeadTag": "Delete Head Tag", + "headTagDeleteTag": "Delete Tag", + "headTagLabel": "Tag", + "headTagNewCreated": "New head tag created", + "headTagSave": "Save head tag", + "headTagSortLabel": "Sort", + "headTagTypeNone": "None", + "headTagUpdateFailed": "Failed to update head tag. {{status}}", + "headTagUpdateSuccess": "Successfully updated head tag", + "headTagValueLabel": "Value", + "imageFieldLimit_one": "This field is limited to {{count}} image", + "imageFieldLimit_other": "This field is limited to {{count}} images", + "insert": "Insert", + "integrationAddDetail": "Add Detail", + "integrationAddDetailWithPlus": "+ Add Detail", + "integrationAddHeading": "Add Heading", + "integrationAddHttpHeader": "Add HTTP Header", + "integrationAddSubheading": "Add Subheading", + "integrationApiConfigurationSettings": "API Configuration Settings", + "integrationApiResponseArrayOfPrimitives": "API returned an array of {{kind}} values. Expected an array of objects.", + "integrationApiResponseEmptyArray": "API returned an empty array. Add at least one item to the response to configure display options.", + "integrationApiResponseNestedArrayNoSelectableKeys": "API returned an object whose nested arrays contain no selectable keys. Make sure at least one nested array item has scalar properties.", + "integrationApiResponseNoData": "API returned no data. Expected a JSON array of objects.", + "integrationApiResponseNoNestedArray": "API returned a single object with no array of objects nested inside. Expected either an array root or an object containing an array of objects.", + "integrationApiResponseNoSelectableKeys": "API returned an array of objects with no selectable keys. Make sure each object has at least one scalar property.", + "integrationApiResponseUnexpectedType": "API returned a {{type}}. Expected a JSON array of objects.", + "integrationApiUrl": "API URL", + "integrationApiUrlTooltip": "URL defining the external data source. Must return a JSON array of flat objects with a consistent shape.", + "integrationAuthenticationHeaders": "Authentication Headers", + "integrationCanReconfigureLater": "This can be re-configured later", + "integrationClassyCard": "Classy Card", + "integrationClassyCardDescription": "Display campaigns from Classy", + "integrationConfigureDisplayOptions": "Configure Display Options", + "integrationConfigureDisplayOptionsDescription": "Select which fields to display to content editors when they are editing items", + "integrationConnect": "Connect", + "integrationConnectingSecureConnection": "Please wait while we establish a secure connection", + "integrationConnectingToApiEndpoint": "Connecting to API Endpoint", + "integrationConnectionFailed": "Connection Failed", + "integrationConnectionFailedDescription": "We couldn't connect to the API endpoint you entered. This may be due to an unexpected structure, a missing or invalid URL, or incorrect custom headers.", + "integrationConnectionSuccessful": "Connection Successful", + "integrationConnectionSuccessfulDescription": "Your API is now securely linked and ready to be used.", + "integrationConnectToApi": "Connect to API", + "integrationConnectToApiDescription": "Establish a connection to an endpoint for users to select items from", + "integrationDataPath": "Data Path", + "integrationDetail": "Detail", + "integrationDetails": "Details", + "integrationDetailsCard": "Details Card", + "integrationDetailsCardDescription": "Display items with multiple details", + "integrationDisplayItemsAs": "Display Items as", + "integrationEditApiUrl": "Edit API URL", + "integrationEditDisplayOptions": "Edit Display Options", + "integrationHeading": "Heading", + "integrationHttpHeadersOptional": "HTTP Headers (optional)", + "integrationImageCard": "Image Card", + "integrationImageCardDescription": "Display items with an image, heading, and subheading.", + "integrationImageUrlDescription": "Image will only render if value selected is a URL", + "integrationInvalidResponseFormat": "Unsupported Response Format", + "integrationInvalidResponseFormatDescription": "The API connected, but its response can't be used to configure this field.", + "integrationInvalidUrlHelper": "Please enter a valid URL. e.g. https://api.example.org/items.json", + "integrationItemId": "Item ID", + "integrationItemIdNotUniqueWarning": "\"{{itemIdPath}}\" is not unique across the {{count}} sampled items — this can cause selections to be recognized incorrectly.", + "integrationItemIdNotUniqueWarning_one": "\"{{itemIdPath}}\" is not unique across the {{count}} sampled items — this can cause selections to be recognized incorrectly.", + "integrationItemIdNotUniqueWarning_other": "\"{{itemIdPath}}\" is not unique across the {{count}} sampled items — this can cause selections to be recognized incorrectly.", + "integrationItemIdToolTip": "Choose a value the API guarantees is unique for every item (e.g. a database ID) — not just one that looks unique in a small sample. A non-unique Item ID can cause selections to be recognized incorrectly.", + "integrationItemPreview": "Item Preview", + "integrationItemPreviewDescription": "How the items will appear to content editors", + "integrationKey": "Key", + "integrationKeyPathsMismatchWarning": "This endpoint returns a different structure. Existing saved items will display incorrectly and will need to be re-selected.", + "integrationKeyPreviewDescription": "Values previewed for the keys below are from the first item in the API response.", + "integrationLearnEndpointStructures": "Learn about endpoint structures we accept", + "integrationMuxCard": "MUX Card", + "integrationMuxCardDescription": "Display videos from MUX", + "integrationNotAvailable": "Not Available", + "integrationOptions": "Options", + "integrationOtherOptions": "Other Options", + "integrationRecommended": "Recommended", + "integrationReconfigure": "Reconfigure", + "integrationResyncValues": "Resync Values", + "integrationSaveChanges": "Save Changes", + "integrationSelectDataPath": "Select Data Path", + "integrationSelectDisplayType": "Select a Display Type", + "integrationSelectedCount_one": "{{count}} Selected", + "integrationSelectedCount_other": "{{count}} Selected", + "integrationSelectKeysToDisplay": "Select Keys to Display in Item", + "integrationSelectRemoteItems": "Select Remote Items", + "integrationSelectTitle": "Select {{title}}", + "integrationShopifyCard": "Shopify Card", + "integrationShopifyCardDescription": "Display Shopify product listings", + "integrationSimpleCard": "Simple Card", + "integrationSimpleCardDescription": "Display items with a heading", + "integrationStop": "Stop", + "integrationSubHeading": "Sub Heading", + "integrationTextCard": "Text Card", + "integrationTextCardDescription": "Display items with a heading and subheading", + "integrationThumbnail": "Thumbnail", + "integrationTryAgain": "Try Again", + "integrationValue": "Value", + "integrationVideoCard": "Video Card", + "integrationVideoCardDescription": "Display items with a video, heading, and subheading.", + "integrationViewJson": "View JSON", + "integrationViewRawJson": "View Raw JSON", + "integrationYoutubeCard": "Youtube Card", + "integrationYoutubeCardDescription": "Display videos from Youtube", + "internalExternalLink": "Internal/External Link", + "internalLinkNone": "None", + "internalLinkSearchPlaceholder": "Do not see the item you are looking for? Enter a term to search your API.", + "internetConnectionOff": "Internet connection is off", + "internetConnectionRestored": "Internet connection is restored", + "invalidUrlBody": "The URL you entered is invalid or does not exist. If you believe this is an error, contact us at", + "invalidUrlHeading": "Invalid URL. Please check your URL and try again.", + "invite": "Invite", + "inviteAs": "Invite as", + "inviteMorePeople": "Invite More People", + "invitePreviouslySent": "Invite previously sent", + "inviteSent": "Invite sent", + "invitesSentAsEmails": "These invites will be sent as emails", + "invitesSentPartial_one": "Invite sent to {{successCount}} out of {{totalCount}} user (via email)", + "invitesSentPartial_other": "Invites sent to {{successCount}} out of {{totalCount}} users (via email)", + "invitesSentSuccess_one": "Invite sent to {{count}} user (via email)", + "invitesSentSuccess_other": "Invites sent to {{count}} users (via email)", + "inviteUsers": "Invite Users", + "itemLowercase": "item", + "itemMissingMetaData": "Selected item is missing meta data", + "itemMissingMetaTitle": "Item missing meta title", + "keywords": "Keywords", + "keywordsExamplePlaceholder": "e.g. Hikes, snow", + "keywordsPlaceholder": "ex. Articles", + "keywordsToInclude": "Keywords to Include (separated by commas)", + "keywordsTooltip": "Enter a term or multiple terms that match part of the resource name.", + "language": "Language", + "languageGenerationTooltip": "Set the language in which you'd like the text to be generated.", + "languageTooltip": "Select the language for which you want to see results for.", + "learnMoreAbout": "Learn more about {{app}}", + "legacySearchCreatedByOn": "Created by {{name}} on {{date}}", + "legacySearchError": "Error searching for term: {{term}}", + "legacySearchFilterBy": "Filter By", + "legacySearchItemMissingMeta": "Item missing meta title", + "legacySearchNoResultsRich": "No results found for search term: {{term}}", + "legacySearchSearching": "Searching", + "legacySearchSortBy": "Sort By", + "legacySearchSortCreated": "Created", + "legacySearchSortDefault": "Default", + "legacySearchSortEdited": "Edited", + "legacySearchSortTitle": "Title", + "legacySearchSortUser": "User", + "legacySearchVersionEdited": "Version {{version}} was edited {{editedAgo}}", + "limit": "Limit", + "loadingLogoAlt": "Displaying Zesty.io logo while application loads", + "loginFailedContactSupport": "Login failed. Please contact support at {{email}}.", + "loginProblem": "There was a problem signing you in", + "loginRequestDeniedRedirecting": "Your login request was denied. Redirecting to login.", + "loginRequestExpiredRedirecting": "Your login request has expired. Redirecting to login.", + "loginRequestValidationIssueRedirecting": "It seems we had an issue validating this login request. Redirecting to login.", + "loginSubtitle": "Start empowering the world with content again", + "manageInstanceHeadTags": "Manage Instance Head Tags", + "markAsResolved": "Mark as Resolved", + "missingMetaTitle": "Missing Meta Title", + "missingModel": "Missing model: {{ZUID}}", + "modelsInSchema": "Models in Schema", + "moreOptions": "More Options", + "myNotifications": "My Notifications", + "navApps": "Apps", + "navAppTooltip": "{{name}} App", + "navBlocks": "Blocks", + "navigate": "Navigate", + "navLaunchpad": "Launchpad", + "navLeads": "Leads", + "navRedirects": "Redirects", + "navRelease": "Release", + "navReports": "Reports", + "navSchema": "Schema", + "navSettings": "Settings", + "navStudio": "Studio", + "needHelpContactSupport": "Need Help? Contact Support", + "noActionsTaken": "No actions taken", + "noFilterResults": "No results that matched your filters could be found", + "noFilterResultsSuggestion": "Try adjusting your filters to find what you're looking for", + "noInstancePermissionBody1": "Your account does not have permission to access this instance. Please contact the instance owner or administrator to be added.", + "noInstancePermissionBody2": "If you believe you should have access, ensure you're using the correct account.", + "noInvitePermissionBody": "Contact your instance owners or administrators listed below to change your role to Admin or Owner on this instance for user invitation privileges.", + "noInvitePermissionTitle": "You do not have permission to invite users", + "noPermissionImageAlt": "No Permission", + "noResultsFound": "No results found", + "noSearchResultsAlt": "No Search Results", + "notFoundImageAlt": "Not Found", + "onboardingCallAvatarAlt": "Sales Avatar", + "onboardingCallButton": "Schedule a call", + "onboardingCallTitle": "Schedule an onboarding call with our support team", + "openAiBadgeAlt": "OpenAI Badge", + "optionNumber": "Option {{number}}", + "or": "Or", + "password": "Password", + "pinnedTabs": "Pinned Tabs", + "publishItem": "Publish Item", + "publishItems": "Publish Items", + "recentlyModifiedItems": "Recently Modified {{items}}", + "recentlyUploadedItems": "Recently Uploaded {{items}}", + "recentSearches": "Recent Searches", + "refreshCdnCache": "Refresh CDN Cache", + "regenerate": "Regenerate", + "relationalAddExisting": "Add Existing {{label}}", + "relationalCopyZuid": "Copy ZUID", + "relationalCreateAddNew": "Create & Add New {{label}}", + "relationalDateSaved": "Date Saved", + "relationalDeletedItem": "{{zuid}} (Deleted)", + "relationalDeselectAll": "Deselect All", + "relationalDraftPreview": "Draft Preview - v{{version}}", + "relationalDragToReorder": "Drag and Drop to Reorder", + "relationalEditContentItem": "Edit Content Item", + "relationalFieldsHeading": "Fields", + "relationalFilterItems": "Filter Items", + "relationalImageAlt": "{{name}} image", + "relationalMoreOptions": "More Options", + "relationalProductionPreview": "Production Preview - v{{version}}", + "relationalPublishNow": "Publish Now", + "relationalReplace": "Replace", + "relationalReplaceItem": "Replace Item", + "relationalReplacementSelected": "Replacement Item Selected", + "relationalSchedulePublish": "Schedule Publish", + "relationalSelected": "{{value}} selected", + "relationalSelectField": "Select {{label}}", + "relationalSelectReplacement": "Select Replacement Item", + "relationalSortBy": "Sort: {{value}}", + "relationalSortCreatedBy": "Created By", + "relationalSortDateCreated": "Date Created", + "relationalSortDescription": "Description", + "relationalSortLastPublished": "Last Published", + "relationalSortLastSaved": "Last Saved", + "relationalSortStatus": "Status", + "relationalSortVersion": "Version", + "relationalStatusNotPublished": "Not Published", + "relationalStatusPublished": "Published", + "relationalStatusScheduled": "Scheduled", + "relationalVersionActionPublished": "published", + "relationalVersionActionSaved": "saved", + "relationalVersionActionScheduled": "scheduled to publish", + "relationalVersionTooltip": "v{{version}} {{action}} on {{date}} by {{publisher}}", + "relationalViewingSeeAll": "Viewing {{shown}} of {{total}} items. See All.", + "relationalViewingSeeLess": "Viewing {{shown}} of {{total}} items. See Less.", + "reloadApplication": "Reload Application", + "reopen": "Re-open", + "repeaterAddAnotherField": "Add another field", + "repeaterAddRowTo": "Add row to {{fieldName}}", + "repeaterCurrencyTooltip": "View this value in different currencies based upon your locale \"{{locale}}\"", + "repeaterEditRow": "Edit {{name}}", + "repeaterFieldLoadFailed": "Failed loading {{label}} field. Click here to view field schema.", + "repeaterMissingOptionsRich": "The {{label}} field is missing option settings. Edit the field to add yes/no values.", + "repeaterRemoveRow": "Remove Row", + "repeaterValueBetween": "Value must be between {{min}} and {{max}}", + "resetFilters": "Reset Filters", + "resourceType": "Resource Type", + "resourceTypeTooltip": "Use this filter when you want to only view search results for a single resource type such as a content item, model (schema), or code file.", + "resumeSession": "Resume Session", + "rightNow": "right now", + "roleAccessActivityLog": "Activity Log", + "roleAccessCode": "Code (Zesty IDE)", + "roleCanAccessMedia": "Can access media and add files, but they cannot delete files.", + "roleCannotDeleteUsers": "Cannot delete other users", + "roleCannotPublish": "Cannot publish content. To publish new content, contributors must submit a workflow request to a user with publishing access.", + "roleCanOnlyCreateEdit": "Can only create and edit content", + "saveFavicon": "Save Favicon", + "schedulePublishButton": "Schedule Publish", + "schedulePublishOnLabel": "Publish on", + "schedulePublishPastWarning": "Since the selected time is a current or past date, this will be immediately published.", + "schedulePublishSavedInfo": "v{{version}} saved {{distance}} by {{name}}", + "schedulePublishScheduledInfo": "v{{version}} is scheduled to publish on {{date}} in {{timezone}}.", + "schedulePublishTitleSchedule": "Schedule Publish", + "schedulePublishTitleUnschedule": "Unschedule Publish", + "schedulePublishUnscheduleButton": "Unschedule Publish", + "schedulePublishUnscheduleInfo": "This will enable the ability to schedule or publish other versions of this content item", + "searchIn": "Search in...", + "searchInstancePlaceholder": "Search Instance {{shortcut}}", + "searchInstances": "Search Instances", + "searchNoResults": "Your search “{{query}}” could not find any results", + "searchNoResultsRich": "Your search \"{{query}}\" could not find any results", + "searchNoResultsSuggestion": "Try adjusting your search. We suggest checking all words are spelled correctly or using different keywords.", + "searchPageByUser": " by {{user}}", + "searchPageCreated": "created {{date}}", + "searchPageResults_one": "{{count}} result", + "searchPageResults_other": "{{count}} results", + "searchPageResultsFor_one": "{{count}} result for \"{{query}}\"", + "searchPageResultsFor_other": "{{count}} results for \"{{query}}\"", + "searchTabs": "Search Tabs", + "searchUsers": "Search Users", + "seeAllNotifications": "See All Notifications", + "seeListBelow": "See list below", + "selectDateRange": "Select date range...", + "selectFilterPlaceholder": "Enter a term to filter this list", + "selectInstanceFavicon": "Select Instance Favicon", + "selectMetaDescription": "Select Meta Description", + "selectMetaDescriptionHelp": "Select 1 out of the 3 Meta Descriptions our AI has generated for you.", + "selectMetaTitle": "Select Meta Title", + "selectMetaTitleHelp": "Select 1 out of the 3 Meta Titles our AI has generated for you.", + "selectModel": "Select Model", + "selectModelError": "Please select a Model to proceed.", + "selectNoOptions": "No options found", + "selectPlaceholder": "Select", + "selectSearching": "Searching for matching items", + "sessionEndedRedirecting": "Your session ended. Redirecting to login.", + "sortMostRecentlyCreated": "Most Recently Created", + "sortMostRecentlyModified": "Most Recently Modified", + "sortValue": "Sort: {{value}}", + "stop": "Stop", + "storedAs": "Stored as {{value}}", + "switchAccount": "Switch Account", + "switchInstance": "Switch Instance", + "tabActivityLog": "Activity Log", + "tabActivityLogSuffix": "{{name}} - Activity Log", + "tabAllMedia": "All Media", + "tabCustomApp": "Custom App", + "tabFontsSuffix": "{{name}} Fonts", + "tabMetrics": "Metrics", + "tabNewItem": "New {{modelLabel}} Item", + "tabSearchResults": "{{appName}} Search Results", + "tabSettingsSuffix": "{{name}} Settings", + "tabsResults_one": "{{count}} Result", + "tabsResults_other": "{{count}} Results", + "tinymceBlockFormatting": "Block formatting", + "tinymceBlockquote": "Blockquote", + "tinymceBulletedList": "Bulleted List", + "tinymceCenterAlign": "Center Align", + "tinymceClose": "Close", + "tinymceConstrainProportions": "Constrain proportions", + "tinymceEmbedSocialMedia": "Embed Social Media", + "tinymceEmbedSocialMediaPost": "Embed a social media post", + "tinymceJustify": "Justify", + "tinymceLeftAlign": "Left Align", + "tinymceLists": "Lists", + "tinymceNumberedList": "Numbered List", + "tinymcePreformatted": "Preformatted", + "tinymceResizeImage": "Resize image", + "tinymceResizeImageDimensions": "Resize image dimensions", + "tinymceRightAlign": "Right Align", + "tinymceSaveItem": "Save item", + "tinymceSelectBynderMedia": "Select media from your Bynder assets", + "tinymceSelectUploadedMedia": "Select media from your uploaded assets", + "tinymceService": "Service", + "tinymceSlashBulletedList": "Bulleted list", + "tinymceSlashCodeBlock": "Code Block", + "tinymceSlashEmbedSocialMedia": "Embed Social Media", + "tinymceSlashEmoji": "Emoji", + "tinymceSlashHeading1": "Heading 1", + "tinymceSlashHeading2": "Heading 2", + "tinymceSlashHeading3": "Heading 3", + "tinymceSlashHeading4": "Heading 4", + "tinymceSlashHeading5": "Heading 5", + "tinymceSlashHeading6": "Heading 6", + "tinymceSlashImage": "Image", + "tinymceSlashLink": "Link", + "tinymceSlashNumberedList": "Numbered list", + "tinymceSlashParagraph": "Paragraph", + "tinymceSlashQuote": "Quote", + "tinymceSlashSpecialCharacter": "Special Character", + "tinymceSlashTable": "Table", + "tinymceSlashTime": "Time", + "tinymceSlashVideo": "Video", + "tinymceTextAlignment": "Text alignment", + "tinymceUniquePostId": "Unique Post ID", + "tone": "Tone", + "toneIntriguing": "Intriguing - Curious, mysterious, and thought-provoking", + "toneNameIntriguing": "Intriguing", + "toneNamePlayful": "Playful", + "toneNameProfessional": "Professional", + "toneNameSensational": "Sensational", + "toneNameSuccinct": "Succinct", + "tonePlayful": "Playful - Fun, light-hearted, and whimsical", + "toneProfessional": "Professional - Serious, formal, and authoritative", + "toneSensational": "Sensational - Bold, dramatic, and attention-grabbing", + "toneSuccinct": "Succinct - Clear, factual, with no hyperbole", + "toneTooltip": "Set the desired style and mood of the generated text", + "topic": "Topic", + "topicPlaceholder": "e.g. Hikes in Washington", + "trySwitchingAccount": "try switching to another account.", + "twoFactorCodeHelp": "You will receive this code on your phone.", + "unableToInviteUsers_one": "Unable to invite {{count}} user", + "unableToInviteUsers_other": "Unable to invite {{count}} users", + "unknownUser": "Unknown User", + "unpinAll": "Unpin All", + "unpinAllTabsTitle": "Unpin All Tabs in See More Menu?", + "unsavedChangesBody": "Please save or discard your changes before unpinning this tab", + "updateFavicon": "Update Favicon", + "uuidAutoGeneratedPlaceholder": "UUID field values are auto-generated", + "uuidFieldReadOnly": "This field cannot be edited", + "viewAllLogs": "View All Logs", + "viewOpenComment": "View Open Comment", + "viewSourceCommit": "View source code commit", + "viewWebEnginePreview": "View WebEngine Preview (Stage)", + "viewYourInstances": "View Your Instances", + "welcomeBack": "Hi, Welcome Back!", + "wordLimit": "Word Limit", + "wordLimitTooltip": "Set a word limit to control the length of the generated text", + "zestyAccountTitle": "Zesty Account" +} diff --git a/public/locales/es-ES/activePreview.json b/public/locales/es-ES/activePreview.json new file mode 100644 index 0000000000..91cb8b268e --- /dev/null +++ b/public/locales/es-ES/activePreview.json @@ -0,0 +1,16 @@ +{ + "disconnectedFromPreviewDomain": "Desconectado del dominio de vista previa", + "findingDomain": "Buscando dominio", + "landscapeMode": "Modo horizontal", + "loadingRelatedItem": "Cargando elemento relacionado", + "meta": "Meta", + "noDevice": "Sin dispositivo", + "noTemplate": "Sin plantilla", + "noTemplateSelected": "Ninguna plantilla seleccionada", + "resolveInvalidFields": "Resuelve los valores de los campos no válidos para guardar y actualizar la vista previa", + "saveToUpdatePreview": "Guarda para actualizar la vista previa", + "saving": "Guardando", + "sessionNotActive": "Tu sesión no está activa. Por favor, inicia sesión en Zesty.io", + "viewingMetaData": "Viendo los metadatos del elemento en esta ruta", + "web": "Web" +} diff --git a/public/locales/es-ES/blocks.json b/public/locales/es-ES/blocks.json new file mode 100644 index 0000000000..f636d9d662 --- /dev/null +++ b/public/locales/es-ES/blocks.json @@ -0,0 +1,28 @@ +{ + "addVariantsEmptyStateBody": "Añade tus variantes aquí. Comienza creando tu primera variante.", + "allBlocks": "Todos los bloques", + "allBlocksTitle": "Todos los bloques", + "blockImageAlt": "Imagen del bloque", + "createBlock": "Crear bloque", + "createVariantOf": "Crear variante de {{label}}", + "documentation": "Documentación", + "emptyItemsListAlt": "Lista de elementos vacía", + "emptyStateBody": "Los modelos de bloques definen la estructura de un bloque, como un hero, una característica, un testimonio, etc.", + "filterBlocks": "Filtrar bloques", + "howToCreateBlock": "Cómo crear un bloque", + "howToUseBlocks": "Cómo usar los Bloques", + "introToWebComponents": "Introducción a los Web Components", + "noResultsAvailable": "No hay resultados disponibles para \"{{filter}}\"", + "noSearchResultsAlt": "No hay resultados de búsqueda", + "onboardingStep1Description": "Crea y añade bloques editables (por ejemplo, Hero, Testimonios, Formularios, etc.) a cualquier página existente de tu sitio web con unos pocos clics", + "onboardingStep1Title": "Presentamos los Bloques", + "onboardingStep2Description": "Crea un modelo de bloque en Schema y define los campos editables. Luego, conecta estos campos en la plantilla de código de tu bloque.", + "onboardingStep2Title": "Cómo crear un bloque", + "onboardingStep3Description": "Se pueden crear variantes de estos bloques en la aplicación Blocks y añadirlas a las páginas web mediante un campo de contenido de bloque (Block Content) o con Freestyle.", + "onboardingStep3Title": "Crea y añade variantes de bloque a cualquier página web", + "searchBlocksPlaceholder": "Buscar bloques", + "startByCreatingBlocks": "Comienza creando bloques", + "startCreatingVariantsNow": "Comienza a crear variantes ahora", + "takeProductTour": "Hacer el recorrido por el producto", + "variantName": "Nombre de la variante" +} diff --git a/public/locales/es-ES/code.json b/public/locales/es-ES/code.json new file mode 100644 index 0000000000..e4a38406ed --- /dev/null +++ b/public/locales/es-ES/code.json @@ -0,0 +1,135 @@ +{ + "ajaxJsonDescription": "Archivo accesible mediante Parsley para crear endpoints o experiencias personalizadas. Estos archivos deben nombrarse con una ruta completa con una extensión como /mi/ruta/de/archivo.json. El archivo es accesible en hash-dev.preview.zesty.io/mi/ruta/de/archivo.json. Tipos de archivo que se pueden usar: css, html, json, js, xml, csv, tsv, xml, yaml, md, svg, rss, ics, vcf, xhtml.", + "allFiles": "Todos los archivos", + "apiDocs": "Documentación de la API", + "apiErrorDeletingFile": "Ocurrió un error de la API al intentar eliminar el archivo. {{fileName}}", + "apiErrorLoadingFileVersions": "Error de la API al cargar las versiones del archivo", + "auditTrailEmptyHint": "Cuando este archivo se guarde o se publique, podrás ver los registros de cuándo y por quién fue modificado.", + "auditTrailLoadError": "No se pudo cargar el registro de actividad", + "branch": "Rama", + "buildFasterBody": "Comienza a crear sitios web y aplicaciones dinámicas con , el lenguaje de plantillas de Zesty.io. Explora nuestro interactivo para una introducción práctica rápida, o aprende más a través de nuestra detallada.", + "buildFasterHeading": "¡Construye más rápido y de forma más inteligente con Parsley!", + "changeCombineOrder": "Cambiar el orden de combinación y preprocesamiento", + "chooseFileType": "Elige un tipo de archivo", + "closeDrawer": "Cerrar panel {{metaShortcut}}", + "compilesToSiteCss": "Se compila en {{file}}", + "compilesToSiteJs": "Se compila en {{file}}", + "couldNotLoadFile": "No se pudo cargar {{fileType}} {{fileZUID}}", + "createFile": "Crear archivo", + "createFileError": "Error al crear el archivo {{name}}. {{error}}", + "createFileSuccess": "Se ha creado el nuevo archivo {{name}}", + "createNavType": "Crear {{navType}}", + "createScript": "Crear script", + "createStylesheet": "Crear hoja de estilo", + "createView": "Crear vista", + "cssDescription": "Una hoja de estilo en cascada que se concatena automáticamente en un único archivo css /main.css, el cual se incluye automáticamente en el head de las páginas web de webengine. Se puede controlar el orden de ordenación de la concatenación. No se realiza transpilación.", + "deleteFile": "Eliminar archivo", + "deleteFileCdnWarning": "Eliminar un archivo lo borrará y activará una purga de la CDN, lo que hará que la producción se actualice inmediatamente.", + "deleteFileError": "Error al eliminar el archivo {{fileName}}. {{error}}", + "deleteFileLabel": "Eliminar archivo", + "developerResources": "Recursos para desarrolladores", + "diffVersions": "Comparar versiones (Diff)", + "editItemContent": "Editar contenido del elemento", + "editLinkedContent": "Editar contenido vinculado", + "editLinkedSchema": "Editar esquema vinculado", + "editRelatedContent": "Editar contenido relacionado", + "editRelatedModel": "Editar modelo relacionado", + "errorSavingFileSortOrder": "Tuvimos un problema al guardar el orden de ordenación de los archivos. Lo más probable es que sea un error de nuestro lado.", + "failedToLoadHeaders": "Error al cargar las cabeceras. {{status}}", + "fetchDevFilesError": "Error al cargar los archivos de desarrollo de la instancia {{type}}. {{status}} | {{error}}", + "fetchFileError": "Error al cargar el archivo. {{status}} | {{error}}", + "fetchFileVersionsError": "No se pudieron cargar las versiones del archivo. {{status}}", + "fetchLiveFilesError": "Error al cargar los archivos de producción de la instancia {{type}}. {{status}} | {{error}}", + "fileInformation": "Información del archivo", + "fileListHeaderFileName": "Nombre del archivo", + "fileListHeaderLastSaved": "Último guardado", + "fileLocked": "Archivo bloqueado", + "fileLockedDescriptionRich": "{{firstName}} {{lastName}} está viendo {{name}} desde {{formattedDate}}. Desbloquea este elemento para ignorar esta advertencia y posiblemente sobrescribir los cambios de {{firstName}}.", + "fileName": "Nombre del archivo", + "fileNavHeaderSiteCss": "Site.css", + "fileNavHeaderSiteJs": "Site.js", + "fileNavHeaderViews": "Vistas", + "fileNavTooltipSiteCss": "Site.css es un archivo creado dinámicamente a partir de los archivos de hojas de estilo de la instancia.", + "fileNavTooltipSiteJs": "Site.js es un archivo creado dinámicamente a partir de los archivos JavaScript de la instancia.", + "fileNavTooltipViews": "Las vistas son archivos de plantilla que pueden renderizar HTML u otros tipos MIME.", + "fileNotFound": "No se pudo encontrar el archivo. {{fileZUID}}", + "fileNotFoundToSave": "No pudimos encontrar el archivo que estás intentando guardar.", + "fileSortOrderSaved": "Se ha guardado el orden de ordenación de los archivos", + "fileType": "Tipo de archivo", + "fileTypeChoose": "Elige un tipo de archivo", + "fileTypeCss": "Archivo CSS (css)", + "fileTypeCustom": "Tipo de archivo personalizado ({{extension}})", + "fileTypeCustomEndpoint": "Tipo de archivo/Endpoint personalizado (extensiones mixtas)", + "fileTypeJavaScript": "Archivo JavaScript (js)", + "fileTypeLegacy": "Archivo heredado (Legacy)", + "fileTypeLess": "Archivo LESS (less)", + "fileTypeModelView": "Vista de modelo", + "fileTypeScss": "Archivo SCSS (scss/sass)", + "fileTypeSnippet": "Fragmento (html)", + "fileZuid": "ZUID del archivo", + "filterFiles": "Filtrar archivos", + "findingFile": "Buscando archivo", + "findingFileVersions": "Buscando versiones del archivo", + "headerTitle": "Código", + "instantJsonApi": "Instant JSON API", + "javascriptDescription": "Un archivo javascript que se concatena automáticamente en el archivo único /main.js cargado automáticamente por webengine. No se realiza transpilación.", + "lastEdited": "Última edición", + "learnMoreParsleySyntax": "Aprender más sobre la sintaxis de Parsley", + "learnMoreProcessingFlows": "Más información sobre los flujos de procesamiento", + "lessDescription": "Tiene acceso a settings > variables. Una hoja de estilo en cascada que se concatena automáticamente en el archivo único /main.css. Se puede controlar el orden de ordenación de la concatenación y la transpilación.", + "linkedContent": "Contenido vinculado", + "linkedContentDescription": "Se muestran las tres últimas entradas de contenido del modelo vinculado a esta vista.", + "linkedSchemaBodyText": "Utiliza la siguiente sintaxis de Parsley para hacer referencia a los campos de este modelo. Esto se vinculará dinámicamente al contenido del campo.", + "linkedSchemaTitle": "Esquema del modelo relacionado de {{fileName}}", + "live": "En vivo", + "loadingFileInformation": "Cargando información del archivo", + "loadVersion": "Cargar versión", + "modelZuid": "ZUID del modelo", + "moreFileInformation": "Más información del archivo", + "mustProvideFileName": "Debes proporcionar un nombre para el nuevo archivo", + "mustSelectFileType": "Debes seleccionar un tipo de archivo para crear un archivo nuevo", + "newRemoteVersionNotice": "Hay una nueva versión remota posterior a tus cambios locales", + "noFilesFound": "No se encontraron archivos", + "noResultsFor": "No hay resultados para \"{{keyword}}\"", + "openDrawer": "Abrir panel {{metaShortcut}}", + "openForAdditionalFileInfo": "Abrir para ver información adicional del archivo", + "orderFilesBody": "El orden mostrado es el orden en el que los archivos se procesan y se concatenan dentro del archivo {{siteFile}} creado dinámicamente.", + "orderFilesPublishWarning": "Después de ordenar, se debe realizar una publicación para procesar el nuevo orden y aplicar el cambio en vivo.", + "orderFilesSaveOrder": "Guardar orden", + "orderFilesTitle": "Ordenar {{typePathPart}}", + "pleaseAddLeadingSlash": "Por favor, añade una barra diagonal inicial en la ruta del archivo. Ej: /{{name}}", + "previewCssWebpage": "Vista previa de CSS", + "previewFileWebpage": "Vista previa de {{fileName}}", + "previewInstantJson": "Vista previa de {{path}}", + "previewItemWebpage": "Vista previa de la página del elemento", + "previewJavascriptWebpage": "Vista previa de JavaScript", + "previewJson": "Vista previa de JSON", + "previewPathWebpage": "Vista previa de {{path}}", + "publish": "Publicar", + "publishedVersion": "Publicado: Versión {{n}}", + "publishFileError": "Error al publicar el archivo. {{status}} | {{error}}", + "publishFileShortcut": "Publicar archivo {{shortcut}}", + "publishFileSuccess": "Se ha publicado {{fileName}} versión {{latestVersion}}", + "saveAndPublish": "Guardar y publicar", + "saveFileError": "Error al guardar el archivo. {{status}} | {{error}}", + "saveFileShortcut": "Guardar archivo {{shortcut}}", + "saveFileSuccess": "Se ha guardado {{fileName}}", + "saveVersion": "Guardar versión", + "scssDescription": "Tiene acceso a settings > variables. Una hoja de estilo en cascada que se concatena automáticamente en el archivo único /main.css. Se puede controlar el orden de ordenación de la concatenación y la transpilación.", + "searchFiles": "Buscar archivos", + "simplifyWorkflowBody": "Descubre nuestros flujos de trabajo optimizados y aumenta tu eficiencia de desarrollo. Mira cómo funciona con nuestro .", + "simplifyWorkflowHeading": "Simplifica tu flujo de trabajo: ¡Preprocesamiento integrado! 💻", + "snippetDescription": "Archivo accesible mediante Parsley destinado a abstraer el uso común de código o a organizar la estructura de los archivos. Ejemplos: slider, footer, header. Estos también se pueden usar dentro de bucles each.", + "startingCodeEditor": "Iniciando el editor de código", + "unableToLoadFileLogs": "No se pudieron cargar los registros del archivo de código", + "unknown": "Desconocido", + "unlock": "Desbloquear", + "unsavedChangesDetail": "Tienes cambios sin guardar que se perderán si sales de esta página.", + "versionLabel": "Versión {{n}}", + "versionPublishedByUser": "v{{n}} publicada el {{date}} por {{user}}", + "versionSavedByUser": "v{{n}} guardada el {{date}} por {{user}}", + "viewingVersion": "Viendo: Versión {{n}}", + "viewNotFound": "Vista no encontrada", + "webEngineFileLink": "Enlace de WebEngine {{fileName}}", + "webEngineLink": "Enlace de WebEngine" +} diff --git a/public/locales/es-ES/common.json b/public/locales/es-ES/common.json new file mode 100644 index 0000000000..97606c0030 --- /dev/null +++ b/public/locales/es-ES/common.json @@ -0,0 +1,74 @@ +{ + "add": "Añadir", + "apis": "APIs", + "back": "Volver", + "cancel": "Cancelar", + "clear": "Borrar", + "code": "Código", + "codeFile": "Archivo de código", + "codeFiles": "Archivos de código", + "comment": "Comentar", + "content": "Contenido", + "contentItems": "Elementos de contenido", + "copied": "Copiado", + "copy": "Copiar", + "create": "Crear", + "createdBy": "Creado por", + "dateAfterValue": "Después del {{date}}", + "dateAtTime": "el {{date}} a las {{time}}", + "dateBeforeValue": "Antes del {{date}}", + "dateOnValue": "El {{date}}", + "delete": "Eliminar", + "dev": "Dev", + "discard": "Descartar", + "domains": "Dominios", + "done": "Hecho", + "edit": "Editar", + "getStarted": "Comenzar", + "goBack": "Regresar", + "graphqlDocs": "Documentación de GraphQL", + "instanceApiDocs": "Documentación de la API de instancia", + "invalidDate": "Fecha no válida", + "last12Months": "Últimos 12 meses", + "last30Days": "Últimos 30 días", + "last3Months": "Últimos 3 meses", + "last7Days": "Últimos 7 días", + "locales": "Configuraciones regionales", + "manage": "Administrar", + "media": "Medios", + "mediaItems": "Elementos multimedia", + "mediaRequests": "Solicitudes multimedia", + "model": "Modelo", + "models": "Modelos", + "more": "Más", + "name": "Nombre", + "next": "Siguiente", + "no": "No", + "noUsersFound": "No se encontraron usuarios", + "open": "Abrir", + "parsleyDocs": "Documentación de Parsley", + "platformDocs": "Documentación de la plataforma", + "preview": "Vista previa", + "prod": "Prod", + "remove": "Quitar", + "replace": "Reemplazar", + "reply": "Responder", + "save": "Guardar", + "search": "Buscar", + "searchAgain": "Buscar de nuevo", + "sortNameAToZ": "Nombre (A a Z)", + "sortNameZToA": "Nombre (Z a A)", + "stage": "Fase de prueba", + "support": "Soporte", + "teams": "Equipos", + "today": "Hoy", + "unsavedChanges": "Cambios sin guardar", + "update": "Actualizar", + "upload": "Subir", + "usage": "Uso", + "users": "Usuarios", + "view": "Ver", + "webhooks": "Webhooks", + "yes": "Sí", + "yesterday": "Ayer" +} diff --git a/public/locales/es-ES/content.json b/public/locales/es-ES/content.json new file mode 100644 index 0000000000..59e4ded0da --- /dev/null +++ b/public/locales/es-ES/content.json @@ -0,0 +1,750 @@ +{ + "addFieldsInSchemaButton": "Añadir campos en el esquema", + "addFieldsTitle": "Añada campos a su modelo", + "analyticsAuthenticateGoogle": "Autenticarse con Google", + "analyticsAvgTimeLabel": "tiempo medio", + "analyticsBarCountry": "País", + "analyticsBarSource": "Fuente", + "analyticsByDay": "{{type}} por día", + "analyticsChangeAccount": "Cambiar cuenta de Google", + "analyticsChartAvgEngagement": "Tiempo medio de interacción", + "analyticsColStats": "Estadísticas", + "analyticsComparePage": "Comparar página", + "analyticsComparePageBody": "Selecciona una página con la que comparar tu página actual", + "analyticsConnectBody": "Descubre de dónde proviene el tráfico de tus páginas y cómo cambia según los cambios realizados en el contenido. Para empezar, autentícate con la cuenta de Google a la que está conectado tu Google Analytics.", + "analyticsConnectedAccount": "Actualmente estás conectado a la siguiente cuenta de Google.", + "analyticsConnectedSubtitle": "¡Prepárate para obtener información sobre cómo los cambios en tu contenido han afectado al tráfico de tus páginas y mucho más!", + "analyticsConnectedTitle": "¡Felicidades {{name}}! Te has conectado correctamente a Google Analytics", + "analyticsConnectErrorSubtitle": "Esto puede deberse a que hayas seleccionado una cuenta de Google que no tiene Google Analytics configurado.", + "analyticsConnectErrorTitle": "Vaya, no hemos podido conectarnos correctamente a Google Analytics", + "analyticsConnectTitle": "Conéctate a Google Analytics", + "analyticsContactSupport": "Contactar con soporte", + "analyticsDashboard": "Panel", + "analyticsDisconnectAccount": "Desconectar cuenta", + "analyticsDisconnectBody": "Desconectarte significará que no podrás ver analíticas de ningún elemento de contenido en Zesty.", + "analyticsDisconnectTitle": "¿Desconectar la cuenta de Google Analytics?", + "analyticsGaSettings": "Ajustes de GA", + "analyticsGoogleIconAlt": "Icono de Google Analytics", + "analyticsItemMetaLine": "{{label}} • {{time}} • por {{user}}", + "analyticsItemNotExist": "Este elemento no existe en tu instancia", + "analyticsItemPublished": "Elemento publicado", + "analyticsLearnMore": "Más información", + "analyticsLegendNew": "Nuevos", + "analyticsLegendOther": "Otros", + "analyticsLegendReturning": "Recurrentes", + "analyticsMetricAvgDuration": "Duración media", + "analyticsMetricAvgDurationDesc": "La duración de la sesión es el periodo de tiempo durante el cual hay interacciones de usuarios en el sitio web.", + "analyticsMetricAvgEngagement": "Tiempo medio de interacción", + "analyticsMetricAvgEngagementDesc": "El tiempo medio de interacción es el tiempo promedio durante el cual tu sitio web estuvo en primer plano en el navegador de un usuario o una app móvil estuvo en primer plano en el dispositivo de un usuario.", + "analyticsMetricBounceRate": "Tasa de rebote", + "analyticsMetricBounceRateDesc": "La tasa de rebote es el porcentaje de personas que llegan a una página y se van sin realizar una acción específica.", + "analyticsMetricConversions": "Conversiones", + "analyticsMetricConversionsDesc": "Una conversión es una acción del usuario que cuentas porque la consideras importante, como una compra, completar un nivel de un juego o el desplazamiento por un sitio web o una app.", + "analyticsMetricEvents": "Eventos", + "analyticsMetricSessions": "Sesiones", + "analyticsMetricSessionsDesc": "Una sesión en Google Analytics es un periodo de tiempo durante el cual un usuario interactúa con tu sitio web.", + "analyticsMetricViews": "Visualizaciones", + "analyticsMetricViewsDesc": "Una visualización de página se define como la vista de una página de tu sitio que está siendo rastreada por el código de seguimiento de Analytics. Si un usuario recarga la página tras llegar a ella, o navega a otra página y luego vuelve a la original, se cuenta como una visualización de página adicional.", + "analyticsNewUsersDesc": "Los usuarios nuevos son usuarios que nunca han visitado tu sitio web o app antes", + "analyticsNewUsersForRange": "Usuarios nuevos en {{range}}", + "analyticsNewVsReturning": "Usuarios nuevos vs. recurrentes", + "analyticsPageSettingsTitle": "Ajustes de analítica de página", + "analyticsPresetQuarterToDate": "Trimestre hasta la fecha", + "analyticsPresetThisWeek": "Esta semana (dom. - hoy)", + "analyticsPresetThisYear": "Este año (ene. - hoy)", + "analyticsPropertiesCount": "{{count}} propiedades", + "analyticsPropertiesCount_one": "{{count}} propiedad", + "analyticsPropertiesCount_many": "{{count}} propiedades", + "analyticsPropertiesCount_other": "{{count}} propiedades", + "analyticsRangeDayBeforeYesterday": "Anteayer", + "analyticsRangeLast12Months": "Últimos 12 meses", + "analyticsRangeLast14Days": "Últimos 14 días", + "analyticsRangeLast30Days": "Últimos 30 días", + "analyticsRangeLast3Months": "Últimos 3 meses", + "analyticsRangeLast7Days": "Últimos 7 días", + "analyticsRangeLastQuarter": "El trimestre pasado", + "analyticsRangeLastWeek": "La semana pasada", + "analyticsRangeLastYear": "El año pasado", + "analyticsRangePrior12Months": "12 meses anteriores", + "analyticsRangePrior14Days": "14 días anteriores", + "analyticsRangePrior30Days": "30 días anteriores", + "analyticsRangePrior3Months": "3 meses anteriores", + "analyticsRangePrior7Days": "7 días anteriores", + "analyticsRangeThisQuarter": "Este trimestre", + "analyticsRangeThisWeek": "Esta semana", + "analyticsRangeThisYear": "Este año", + "analyticsRecentPublishes": "Publicaciones recientes", + "analyticsReturningUsersDesc": "Los usuarios recurrentes son usuarios que nunca han visitado tu sitio web o app antes", + "analyticsReturningUsersForRange": "Usuarios recurrentes en {{range}}", + "analyticsSearchProperties": "Buscar propiedades de Google Analytics", + "analyticsSearchResults": "Resultados de búsqueda", + "analyticsSelectProperty": "Selecciona una propiedad de Google Analytics", + "analyticsSelectPropertyBody": "Selecciona la propiedad de Google Analytics de la que quieres ver analíticas e información", + "analyticsSourceIncreased": "Los usuarios de {{source}} aumentaron un {{percentage}}% — {{range}}", + "analyticsTabGainers": "En aumento", + "analyticsTabLatestPublishes": "Últimas publicaciones", + "analyticsTabLosers": "En descenso", + "analyticsTabMostPopular": "Más populares", + "analyticsTabRecentEdits": "Ediciones recientes", + "analyticsTotalSessions": "Sesiones totales", + "analyticsTotalUsers": "Usuarios totales", + "analyticsTryAgain": "Inténtalo de nuevo", + "analyticsUnableToLoadMessage": "Esto puede deberse a una mala conexión a internet, así que inténtalo de nuevo. Si sigues sin poder resolver el problema, ponte en contacto con el soporte.", + "analyticsUnableToLoadTitle": "No se pueden cargar los datos de analítica", + "analyticsUsers": "Usuarios", + "analyticsUsersBy": "Usuarios por {{type}}", + "analyticsUsersLabel": "usuarios", + "analyticsViewVersion": "Ver versión {{version}}", + "apiCodeIdLabel": "ID de código API / Parsley", + "apiCodeIdTooltip": "Aparecerá como la clave en las respuestas de la API.", + "blockCreateVariant": "Crear variante", + "blockSearchAgain": "Buscar de nuevo", + "blockSearchNoResults": "Tu búsqueda \"{{search}}\" no encontró ningún resultado", + "blockSearchNoResultsHint": "Prueba a ajustar tu búsqueda. Te sugerimos comprobar que todas las palabras estén escritas correctamente o usar otras palabras clave.", + "blockSearchVariants": "Buscar variantes", + "blocksReferencedInCodeOrFreestyle": "Bloques referenciados en código o Freestyle", + "blockTabCode": "Código", + "blockTabInfo": "Información", + "blockTabVariants": "Variantes", + "booleanHide": "Ocultar", + "booleanShow": "Mostrar", + "browse": "Explorar", + "closeInspectorPanelAriaLabel": "Cerrar panel del inspector", + "codeSampleBaseTemplate": "Plantilla base", + "codeSampleBaseTemplateTip": "Usa la plantilla base para representar el bloque. Es la plantilla predeterminada que se aplica cuando no se selecciona ninguna plantilla específica.", + "codeSampleBaseTemplateVersion": "Plantilla base con versión", + "codeSampleBaseTemplateVersionTip": "Usa la plantilla base para representar el bloque con un número de versión específico. Agregar el parámetro de versión te permite apuntar a una versión concreta de la plantilla.", + "codeSampleBlockSelector": "Selector de bloque", + "codeSampleBlockSelectorTip": "Usa el valor de un campo selector de bloque. Reemplaza \"block_selector_field\" con el nombre real del campo selector de bloque durante la creación del modelo.", + "codeSampleSpecificVariant": "Variante de bloque específica", + "codeSampleSpecificVariantTip": "Usa una variante específica del bloque. El parámetro de variante apunta a una variación concreta del bloque mediante su ZUID.", + "connectItem": "Conectar elemento", + "contentFetchResourceFailed": "Error al obtener el recurso. {{status}}", + "contentSearchItemFailed": "Error al buscar el elemento: {{error}}", + "correctFieldsBeforeSaving_one": "Corrija el siguiente {{count}} campo antes de guardar", + "correctFieldsBeforeSaving_many": "Corrija los siguientes {{count}} campos antes de guardar", + "correctFieldsBeforeSaving_other": "Corrija los siguientes {{count}} campos antes de guardar", + "csvImportColumnMismatch": "Hay un desajuste en el número de columnas del archivo CSV", + "csvImportCreateItems": "Crear elementos", + "csvImportDuplicateColumns": "Has duplicado el uso de estas columnas: {{columns}}", + "csvImportEmptyFile": "Has importado un archivo CSV vacío", + "csvImportErrorsCount": "Errores {{count}}", + "csvImportErrorsCount_one": "Error {{count}}", + "csvImportErrorsCount_many": "Errores {{count}}", + "csvImportErrorsCount_other": "Errores {{count}}", + "csvImportFailureCreating": "Error al crear el elemento: {{error}}", + "csvImportImportedCount": "Importados {{count}} de {{total}}", + "csvImportImportedCount_one": "Importados {{count}} de {{total}}", + "csvImportImportedCount_many": "Importados {{count}} de {{total}}", + "csvImportImportedCount_other": "Importados {{count}} de {{total}}", + "csvImportNone": "ninguno", + "csvImportNotCsvFile": "Has seleccionado un archivo que no es CSV", + "csvImportOpenFile": "Abrir archivo CSV", + "csvImportResolveDuplicates": "Debes resolver los conflictos de columnas duplicadas", + "csvImportSelectPathPart": "Debes seleccionar una columna para Path Part", + "csvSettingsAllowedParams": "Parámetros de consulta permitidos (separados por comas)", + "csvSettingsAllowedParamsDesc": "Indica solo nombres de parámetros separados por comas. No incluyas valores, ampersands, signos de igual ni espacios.", + "csvSettingsAutoPriority": "Establecer prioridad automáticamente", + "csvSettingsCanonicalNotEnabled": "Las etiquetas canónicas no están habilitadas. Para más información, lee", + "csvSettingsCanonicalOff": "Desactivado", + "csvSettingsCanonicalOnAllow": "Activado - Permitir ciertos parámetros", + "csvSettingsCanonicalOnCustom": "Activado - Ruta personalizada o URL personalizada", + "csvSettingsCanonicalOnIgnore": "Activado (ignora los parámetros de consulta)", + "csvSettingsCustomPathDesc": "Para rutas personalizadas: empieza con una barra inclinada. Para URL personalizadas: empieza con http:// o https://", + "csvSettingsCustomPathLabel": "Valor de ruta personalizada o URL", + "csvSettingsMetaLinkText": "Texto del enlace meta", + "csvSettingsNoSitemap": "No mostrar en el mapa del sitio", + "csvSettingsParentZuid": "ZUID del elemento padre", + "csvSettingsPathPart": "Parte de ruta", + "currencyLocaleTooltip": "Vea este valor en diferentes monedas según su configuración regional \"{{locale}}\"", + "deleteItemFailure": "Error al eliminar el elemento: {{statusText}}", + "deleteItemSuccess": "Elemento eliminado correctamente", + "disconnect": "Desconectar", + "editFieldButton": "Editar campo", + "editorTypeHtml": "HTML", + "editorTypeInline": "En línea", + "editorTypeMarkdown": "Markdown", + "editorTypeWysiwyg": "WYSIWYG", + "elementNotEditableHere": "Este elemento no se puede editar aquí.", + "emptyCreateModel": "Crea un nuevo modelo de contenido", + "errorPublishing": "Error al publicar {{title}}", + "errorScheduling": "Error al programar {{title}}", + "errorUnpublishing": "Error al anular la publicación de {{title}}", + "errorUnschedulingVersion": "Error al cancelar la programación de la versión {{version}}", + "exceedingMaxLength_one": "Excede por {{count}} carácter.", + "exceedingMaxLength_many": "Excede por {{count}} caracteres.", + "exceedingMaxLength_other": "Excede por {{count}} caracteres.", + "failedFetchItemPublishing": "Error al obtener la publicación del elemento: {{error}}", + "failedFetchItemPublishings": "{{status}}: Error al obtener las publicaciones del elemento: {{error}}", + "failedFetchItemPublishingsError": "Error al obtener las publicaciones del elemento: {{error}}", + "failedFetchModelPublishings": "Error al obtener las publicaciones de los elementos del modelo: {{error}}", + "failedLoadingField": "Error al cargar el campo {{label}}. Haga clic aquí para ver el esquema del campo.", + "fieldAddedOnLabel": "Campo añadido el", + "fieldMetaArticleWriterDescription": "Contenido de artículo extenso", + "fieldMetaBlockSelectorDescription": "Un bloque de contenido reutilizable", + "fieldMetaColorDescription": "Un valor de color", + "fieldMetaCurrencyDescription": "Valores monetarios", + "fieldMetaDateDescription": "Una fecha del calendario", + "fieldMetaDatetimeDescription": "Una fecha y hora", + "fieldMetaDropdownDescription": "Una única opción de una lista", + "fieldMetaImagesDescription": "Contenido multimedia de la biblioteca de recursos", + "fieldMetaInternalLinkDescription": "Un enlace a otra página", + "fieldMetaLinkDescription": "Una URL externa", + "fieldMetaMarkdownDescription": "Texto con formato Markdown", + "fieldMetaNumberDescription": "Números enteros o decimales", + "fieldMetaOneToManyDescription": "Enlaces a elementos relacionados", + "fieldMetaOneToOneDescription": "Un enlace a un elemento relacionado", + "fieldMetaRepeaterDescription": "Un grupo repetible de campos", + "fieldMetaSortDescription": "Un orden de clasificación manual", + "fieldMetaTextareaDescription": "Texto simple de varias líneas", + "fieldMetaTextDescription": "Títulos, nombres y encabezados", + "fieldMetaUuidDescription": "Un identificador único", + "fieldMetaWysiwygDescription": "Texto enriquecido con formato", + "fieldMetaYesNoDescription": "Un interruptor verdadero / falso", + "fieldTypeLabel": "Campo {{type}}", + "fieldZuidLabel": "ZUID del campo", + "fieldZuidTooltip": "Hash único asignado a cada campo. Se puede usar para acceder a la información de un campo a través de nuestra API.", + "footerTagline": "Agentic Studio por Content.One", + "hideDialogHideBody1": "Esto moverá el elemento de contenido {{label}} de la sección de páginas a la sección de elementos ocultos que aparece abajo. Te recomendamos usar esta función solo para despejar tu árbol de navegación de contenido de elementos que no consultas con frecuencia.", + "hideDialogHideBody2": "Esto no ocultará ninguno de tus artículos de tu sitio web o aplicación en producción.", + "hideDialogHideButton": "Ocultar {{label}}", + "hideDialogHideTitle": "¿Ocultar {{label}}?", + "hideDialogUnhideBody": "Esto moverá el elemento de contenido {{label}} de la sección de elementos ocultos a la sección de páginas que aparece arriba.", + "hideDialogUnhideButton": "Mostrar {{label}}", + "hideDialogUnhideTitle": "¿Mostrar {{label}}?", + "invalidFieldValuesTitle": "No se puede guardar el elemento debido a valores de campo no válidos.", + "itemCreateAddNew": "Crear y añadir nuevo", + "itemCreateCannotSaveError": "No se puede guardar: {{error}}", + "itemCreateCreatedItem": "Elemento creado: {{name}}", + "itemCreateImproveWithAI": "Mejorar con IA", + "itemCreateLoading": "Creando nuevo elemento", + "itemCreatePublishAddNew": "Crear, publicar y añadir nuevo", + "itemCreatePublishNow": "Crear y publicar ahora", + "itemCreateSchedulePublish": "Crear y programar publicación", + "itemCreateSchedulePublishAddNew": "Crear, programar publicación y añadir nuevo", + "itemCreateTitleItem": "Crear elemento de {{label}}", + "itemCreateTitleVariant": "Crear variante", + "itemCreateUnknownIssue": "Problema desconocido al crear el nuevo elemento", + "itemEditActions": "Acciones", + "itemEditAddStatus": "Agregar estado", + "itemEditAlsoPublishRelatedItems": "Publicar tambien los elementos relacionados", + "itemEditAutomatedNavigationOrder": "Orden de navegacion automatizada", + "itemEditAutomatedNavigationOrderTooltip": "El orden de navegacion automatizada controla la salida de parsley {{navigation}} y {{sectionlinks}} automatizados. Tambien se puede usar en un bucle each como: llamadas {{each items as items sort by z.sort}}.", + "itemEditAvailableInLoops": "Disponible en bucles", + "itemEditAvailableInLoopsTooltip": "Determina si este elemento estara disponible en bucles de Parsley. Un ejemplo comun es listar una publicacion de blog como entrada en una pagina de listado de articulos.", + "itemEditByUser": "por {{name}}", + "itemEditCannotPublishStatus": "No se puede publicar: \"{{title}}\". No tiene un estado que permita publicar", + "itemEditCannotSaveTitle": "No se puede guardar: {{title}}", + "itemEditCannotSaveTooManySelected": "No se puede guardar el campo. Reduce el numero total de elementos seleccionados.", + "itemEditCannotSaveValueTooLong": "No se puede guardar el campo. El valor es demasiado largo.", + "itemEditCannotSaveWithError": "No se puede guardar: {{title}} - {{error}}", + "itemEditCdnDescription": "Fuerza a la CDN a actualizar la cache de este elemento. La cache de CDN puede tardar de unos segundos a minutos mientras el elemento se vuelve a almacenar en toda la red global.", + "itemEditCdnPurgeError": "Hubo un problema al intentar purgar la cache de CDN", + "itemEditCdnPurgeSuccess": "El elemento se purgo de la cache de CDN", + "itemEditCdnTitle": "CDN", + "itemEditCloseInfoBar": "Cerrar barra de informacion", + "itemEditContinueEditing": "Continuar editando", + "itemEditCreatedAt": "Creado el", + "itemEditDeleteConfirmTitle": "¿Seguro que quieres eliminar el elemento:\n{{title}}?", + "itemEditDeleteContentItemDescription": "Eliminar este elemento lo quitara de todas las ubicaciones del sitio y hara que no este disponible para solicitudes de API. Esta accion no se puede deshacer.", + "itemEditDeleteContentItemTitle": "Eliminar elemento de contenido", + "itemEditDeletedNotFound": "El elemento se ha eliminado", + "itemEditDeleteItem": "Eliminar elemento", + "itemEditDeleteThing": "Eliminar {{thing}}", + "itemEditDeleteVariant": "Eliminar variante", + "itemEditDeleteWidgetDescription": "¿Eliminar este contenido? Se quitara de todas las ubicaciones del sitio y no estara disponible para solicitudes de API.", + "itemEditDontSave": "No guardar", + "itemEditDraftHistoryTitle": "Historial de borradores", + "itemEditDraftPreviewVersion": "Vista previa de borrador - v{{version}}", + "itemEditDuplicateContentItemTitle": "Duplicar elemento de contenido", + "itemEditDuplicateDescription": "Esto creara y guardara una copia de este elemento inmediatamente.", + "itemEditDuplicateFailed": "No se pudo duplicar el elemento.", + "itemEditDuplicateItem": "Duplicar elemento", + "itemEditDuplicateVariant": "Duplicar variante", + "itemEditEditCode": "Editar codigo", + "itemEditEditStatuses": "Editar estados", + "itemEditFailedFetchNav": "No se pudo obtener la navegacion", + "itemEditFailedLoadFields": "No se pudieron cargar los campos", + "itemEditFetchingPublishings": "Obteniendo publicaciones", + "itemEditGoOffline": "Desconectar", + "itemEditGoOnline": "Poner en linea", + "itemEditInfoTitle": "Información", + "itemEditInstantApi": "API instantanea", + "itemEditItem": "Elemento", + "itemEditItemLockedDescription": "{{name}} esta viendo este elemento desde {{viewedAt}}. Desbloquea este elemento para ignorar esta advertencia y posiblemente sobrescribir los cambios de {{firstName}}.", + "itemEditItemLockedTitle": "Elemento bloqueado", + "itemEditLinksTitle": "Enlaces", + "itemEditLive": "En vivo", + "itemEditLivePublished": "Publicado en vivo", + "itemEditManagePublishState": "Administrar estado de publicacion", + "itemEditManagePublishStatus": "Administrar estado de publicacion", + "itemEditMetaAddImage": "Agregar imagen meta", + "itemEditMetaAddIncomingPath": "Agregar ruta entrante", + "itemEditMetaAdvancedSettings": "Configuración avanzada", + "itemEditMetaAdvancedSettingsDescription": "Optimiza más el SEO de tu elemento de contenido", + "itemEditMetaAiAssistedPrimary": "Sí, mejorar con el asistente de metadatos de IA", + "itemEditMetaAiAssistedSecondary": "Nuestra IA analizará tu contenido y generará metadatos por ti", + "itemEditMetaAiPromptDatasetSuffix": "con la búsqueda interna de contenido.", + "itemEditMetaAiPromptDescriptionPrefix": "Nuestro asistente de IA analizará tu contenido y mejorará el título y la descripción meta para ayudar", + "itemEditMetaAiPromptSeoSuffix": "a mejorar la visibilidad en motores de búsqueda.", + "itemEditMetaAiPromptTitle": "¿Quieres que la IA escriba tus metadatos?", + "itemEditMetaApiFailedTryAgain": "La API no devolvió datos. Inténtalo de nuevo.", + "itemEditMetaApiFailedWithStatus": "La API no devolvió datos {{status}}", + "itemEditMetaCanonicalAllowedParameters": "Parámetros de consulta permitidos (separados por comas)", + "itemEditMetaCanonicalAllowedParametersDescription": "Indica solo nombres de parámetros separados por comas. No incluyas valores, ampersands, signos igual ni espacios.", + "itemEditMetaCanonicalAllowedParametersPlaceholder": "pagina,categoria", + "itemEditMetaCanonicalCustomPath": "Valor de ruta personalizada o URL", + "itemEditMetaCanonicalCustomPathDescription": "Para rutas personalizadas: comienza con una barra diagonal. Para URL personalizada: comienza con http:// o https://", + "itemEditMetaCanonicalCustomPathPlaceholder": "/pagina/ejemplo/ o https://ejemplo.com/", + "itemEditMetaCanonicalEnableDocsLink": "Habilitar etiquetas canónicas", + "itemEditMetaCanonicalNotEnabled": "Las etiquetas canónicas no están habilitadas. Para más información, lee", + "itemEditMetaCanonicalOff": "Desactivado", + "itemEditMetaCanonicalOnAllowParameters": "Activado - Permitir ciertos parámetros", + "itemEditMetaCanonicalOnCustomPath": "Activado - Ruta personalizada o URL personalizada", + "itemEditMetaCanonicalOnIgnoreQuery": "Activado (ignora parámetros de consulta)", + "itemEditMetaCanonicalTag": "Etiqueta canónica", + "itemEditMetaCanonicalTagTooltip": "Las etiquetas canónicas ayudan a los motores de búsqueda a entender los enlaces autoritativos y pueden prevenir problemas de contenido duplicado. Zesty.io crea etiquetas automáticamente bajo demanda según tu configuración.", + "itemEditMetaContentAndMetaMatchedWords": "Palabras coincidentes de contenido y meta", + "itemEditMetaCustomizeImage": "Personalizar imagen", + "itemEditMetaDeleteRedirect": "Eliminar redirección", + "itemEditMetaDescription": "Descripción meta", + "itemEditMetaDescriptionFoundLeftGuillemet": "Se encontró el carácter <<. Estos caracteres especiales no están permitidos en las descripciones meta.", + "itemEditMetaDescriptionFoundOeLigature": "Se encontró la ligadura OE. Estos caracteres especiales no están permitidos en las descripciones meta.", + "itemEditMetaDescriptionFoundRightGuillemet": "Se encontró el carácter >>. Estos caracteres especiales no están permitidos en las descripciones meta.", + "itemEditMetaDescriptionFoundSmallOeLigature": "Se encontró la ligadura oe. Estos caracteres especiales no están permitidos en las descripciones meta.", + "itemEditMetaDescriptionFoundSmartDoubleQuotes": "Se encontraron comillas dobles inteligentes de Microsoft o apóstrofo. Estos caracteres especiales no están permitidos en las descripciones meta porque pueden renderizarse incorrectamente. Usa comillas rectas.", + "itemEditMetaDescriptionFoundSmartSingleQuotes": "Se encontraron comillas simples inteligentes de Microsoft o apóstrofo. Estos caracteres especiales no están permitidos en las descripciones meta porque pueden renderizarse incorrectamente. Usa comillas rectas.", + "itemEditMetaDescriptionPlaceholder": "Esta es la descripción que los motores de búsqueda deben usar en sus resultados", + "itemEditMetaDescriptionTooltip": "Esta descripción aparece como fragmento de texto debajo del título en motores de búsqueda y vistas previas sociales. La longitud ideal es de 50 a 160 caracteres.", + "itemEditMetaEditRedirect": "Editar redirección", + "itemEditMetaFilterWords": "Filtrar palabras", + "itemEditMetaHttpCode": "Código HTTP", + "itemEditMetaImage": "Imagen meta", + "itemEditMetaImageFileExtensionsError": "Solo se permiten archivos con estas extensiones: .png, .jpg, .jpeg, .svg, .gif, .tif, .webp, .avif", + "itemEditMetaImageTooltip": "Esta imagen aparece en motores de búsqueda y vistas previas sociales. Se recomienda que tenga al menos 1200 px por 630 px y una relación de aspecto 1.91:1.", + "itemEditMetaIncomingPath": "Ruta entrante", + "itemEditMetaIncomingRedirects": "Redirecciones entrantes", + "itemEditMetaIncomingRedirectsDescription": "Gestiona redirecciones que apuntan a este elemento de contenido", + "itemEditMetaKeywords": "Palabras clave meta", + "itemEditMetaKeywordsPlaceholder": "palabras, clave, separadas", + "itemEditMetaKeywordsTooltip": "Las palabras clave son palabras o frases separadas por comas que describen tu página. En 2011 Google rechazó las palabras clave; solo se usan en contra del ranking de tu página. Úsalas con cuidado.", + "itemEditMetaManualPrimary": "No, lo mejoraré y editaré yo mismo", + "itemEditMetaManualSecondary": "Perfecto si ya sabes qué metadatos quieres", + "itemEditMetaMostMentionedWords": "Palabras más mencionadas en el elemento de contenido", + "itemEditMetaMostMentionedWordsDescription": "Comprueba que tus palabras clave principales aparezcan al menos 2 veces.", + "itemEditMetaNavigationLinkText": "Texto del enlace de navegación", + "itemEditMetaNavigationLinkTextPlaceholder": "Este texto se usa en la navegación de la aplicación", + "itemEditMetaNavigationLinkTextTooltip": "El título de este elemento que aparece en la navegación de Zesty y en la navegación generada programáticamente dentro de la función navigation() de Parsley.", + "itemEditMetaNoMatchingWords": "No hay palabras coincidentes", + "itemEditMetaNonFillerWords": "Palabras no de relleno", + "itemEditMetaNoRepeatedWords": "Ninguna palabra en tu elemento de contenido aparece 2 o más veces", + "itemEditMetaOgDescriptionTooltip": "Este título aparece en vistas previas sociales Open Graph (por ejemplo, Facebook) debajo del título.", + "itemEditMetaOgTitleTooltip": "Este título aparece en vistas previas sociales Open Graph (por ejemplo, Facebook).", + "itemEditMetaPageParent": "Página principal", + "itemEditMetaPageParentTooltip": "Define bajo qué página se anidará la página de este elemento de contenido. Esto afecta la navegación generada automáticamente y la estructura de URL de esta página.", + "itemEditMetaParentMissing": "La página principal no existe o fue eliminada", + "itemEditMetaSeeLess": "Ver menos", + "itemEditMetaSeeMore": "Ver más", + "itemEditMetaSeoOpenGraphDescription": "Especifica el título y la descripción de esta página. Puedes ver cómo se mostrarán en resultados de búsqueda (SERP) y contenido social en la vista previa de la derecha.", + "itemEditMetaSeoOpenGraphSettings": "Configuración SEO y Open Graph", + "itemEditMetaSitemapAutomaticallySetPriority": "Establecer prioridad automáticamente", + "itemEditMetaSitemapDoNotDisplay": "No mostrar en el sitemap", + "itemEditMetaSitemapPriority": "Prioridad del sitemap", + "itemEditMetaSitemapPriorityTooltip": "La prioridad del sitemap ayuda a los motores de búsqueda a entender con qué frecuencia deben rastrear las páginas de tu sitio.", + "itemEditMetaTcDescriptionTooltip": "Este título aparece en vistas previas sociales de Twitter Card debajo del título.", + "itemEditMetaTcTitleTooltip": "Este título aparece en vistas previas sociales de Twitter Card.", + "itemEditMetaTitle": "Título meta", + "itemEditMetaTitlePlaceholder": "Este es el título que los motores de búsqueda deben usar en sus resultados", + "itemEditMetaTitleTooltip": "Este título aparece en resultados de búsqueda y vistas previas sociales. Los motores de búsqueda muestran hasta 65 caracteres, pero el título puede ser más largo.", + "itemEditMetaUniqueWords": "Palabras únicas", + "itemEditMetaUrlPathPart": "Parte de ruta URL", + "itemEditMetaUrlPathPartTooltip": "También conocida como slug de URL, es la última parte de la dirección URL y sirve como identificador único de la página. Debe ser única en tu instancia, en minúsculas y sin caracteres no alfanuméricos. Esto ayuda a crear URL estructuradas y amigables para SEO.", + "itemEditMetaUrlPathTaken": "Esta parte de ruta URL ya está en uso. Ingresa una parte de ruta URL diferente.", + "itemEditMetaUrlSettings": "Configuración de URL", + "itemEditMetaUrlSettingsDescription": "Define la URL de tu página web", + "itemEditMetaWords": "Palabras", + "itemEditMissingRequiredData": "Faltan datos en campos obligatorios", + "itemEditMoreOptions": "Mas opciones", + "itemEditNoDraftActivityLogs": "No hay registros de edicion en el registro de actividad para este contenido.", + "itemEditNoPermissionAddStatus": "No tienes permiso para agregar este estado", + "itemEditNoPermissionRemoveStatus": "No tienes permiso para quitar este estado", + "itemEditNotFound": "Elemento no encontrado", + "itemEditOffline": "Sin conexion", + "itemEditOn": "el", + "itemEditOpenDuoMode": "Abrir modo DUO", + "itemEditOpenInfoBar": "Abrir barra de informacion", + "itemEditParsleyBehaviorsTitle": "Comportamientos de Parsley", + "itemEditPreviewPage": "Vista previa de pagina", + "itemEditPreviewVersion": "Vista previa {{version}}", + "itemEditProductionPreviewVersion": "Vista previa de produccion - v{{version}}", + "itemEditPublishHistoryTitle": "Historial de publicación", + "itemEditPublishingErrorFallback": "Ocurrio un error al publicar. Intentalo de nuevo.", + "itemEditPublishingZuid": "ZUID de publicacion", + "itemEditPublishItem": "Publicar elemento", + "itemEditPublishRelatedItemsDescription": "Esto publicara todos los elementos seleccionados en la lista siguiente", + "itemEditQuickShareTitle": "Compartir rápido", + "itemEditRefreshCachedItem": "Actualizar elemento en cache", + "itemEditRefreshingCachedItem": "Actualizando elemento en cache", + "itemEditRenameVariant": "Renombrar variante", + "itemEditRenameVariantDescription": "Esto actualizara el titulo de la variante que se muestra a los editores de contenido", + "itemEditSaved": "Guardado", + "itemEditSavedNotification": "Elemento guardado: {{title}}", + "itemEditSaveItem": "Guardar elemento", + "itemEditSavePublishItem": "Guardar y publicar elemento", + "itemEditScheduleUnpublish": "Programar anulacion de publicacion", + "itemEditSearchStatus": "Buscar estado", + "itemEditSelectFieldsForReview": "Seleccionar campos para revision", + "itemEditSelectTeamMembers": "Seleccionar miembros del equipo", + "itemEditSendEmail": "Enviar correo", + "itemEditStatusSearchNoResultsTitleRich": "Tu busqueda \"{{search}}\" no encontro resultados", + "itemEditSwitchOffDuoMode": "Desactivar modo DUO", + "itemEditSwitchOnDuoMode": "Activar modo DUO", + "itemEditTabAnalytics": "Analitica", + "itemEditTabFreestyle": "Estilo libre", + "itemEditTabHeadTags": "Etiquetas Head", + "itemEditTabPublishStatus": "Estado de publicacion", + "itemEditTabRedirects": "Redirecciones", + "itemEditTabSeo": "SEO", + "itemEditTakeOffline": "Desconectar", + "itemEditUnlock": "Desbloquear", + "itemEditUnpublishContentItemTitle": "Anular publicacion del elemento de contenido", + "itemEditUnpublishDescription": "Esto hara que no este disponible inmediatamente en todas tus plataformas. Siempre puedes volver a publicar este elemento haciendo clic en el boton de publicar.", + "itemEditUnpublishItem": "Anular publicacion del elemento", + "itemEditUnpublishNow": "Anular publicacion ahora", + "itemEditUnpublishTitle": "Anular publicación", + "itemEditUnpublishWidgetDescription": "Al anular la publicacion de este contenido, ya no se servira si se solicita la URL. La URL devolvera una respuesta 404 no encontrado.", + "itemEditUnsavedChangesDescription": "Tienes cambios sin guardar que se perderan si sales de esta pagina.", + "itemEditUnschedulePublish": "Cancelar publicacion programada", + "itemEditVariant": "Variante", + "itemEditVariantTitle": "Titulo de variante", + "itemEditVersion": "Versión", + "itemEditVersionPublished": "v{{version}} publicada {{on}}", + "itemEditVersionPublishedLabel": "v{{version}} publicada", + "itemEditVersionPublishedOn": "v{{version}} publicada el", + "itemEditVersionSavedOn": "v{{version}} guardada el", + "itemEditVersionScheduledLabel": "v{{version}} programada", + "itemEditVersionScheduledToPublishOn": "v{{version}} programada para publicarse el", + "itemEditViewActivityLog": "Ver registro de actividad", + "itemEditViewLanguages": "Ver idiomas", + "itemEditViewVersions": "Ver versiones", + "itemEditWorkflowRequestFailed": "No se pudo enviar la solicitud de flujo de trabajo en {{title}} a {{members}}", + "itemEditWorkflowRequestMessage": "Mensaje de solicitud de flujo de trabajo", + "itemEditWorkflowRequestSent": "Solicitud de flujo de trabajo enviada en {{title}} a {{members}}", + "itemEditWorkflowRequestTitle": "Solicitud de flujo de trabajo", + "itemEditZuidTooltip": "Los elementos de contenido siempre se acceden en relacion con su modelo, por lo que se requiere un ZUID de modelo para cada llamada.", + "itemListCopyZuid": "Copiar ZUID", + "itemListDateCreated": "Fecha de creación", + "itemListDateSaved": "Fecha de guardado", + "itemListDeleteButton_one": "Eliminar elemento ({{count}})", + "itemListDeleteButton_many": "Eliminar elementos ({{count}})", + "itemListDeleteButton_other": "Eliminar elementos ({{count}})", + "itemListDeleteDescription_one": "Eliminar este elemento lo quitará de todas las ubicaciones de tu sitio y hará que deje de estar disponible para las solicitudes de la API. Esta acción no se puede deshacer.", + "itemListDeleteDescription_many": "Eliminar estos {{count}} elementos los quitará de todas las ubicaciones de tu sitio y hará que dejen de estar disponibles para las solicitudes de la API. Esta acción no se puede deshacer.", + "itemListDeleteDescription_other": "Eliminar estos {{count}} elementos los quitará de todas las ubicaciones de tu sitio y hará que dejen de estar disponibles para las solicitudes de la API. Esta acción no se puede deshacer.", + "itemListDeleteTitle_one": "Eliminar {{count}} elemento", + "itemListDeleteTitle_many": "Eliminar {{count}} elementos", + "itemListDeleteTitle_other": "Eliminar {{count}} elementos", + "itemListEditModel": "Editar modelo", + "itemListEditTemplate": "Editar plantilla", + "itemListEmptyDescription": "Añade tu contenido aquí. Empieza creando tu primer elemento.", + "itemListEmptyTitle": "Empieza a crear contenido ahora", + "itemListErrorPublishing": "Error al publicar los elementos: {{error}}", + "itemListErrorSaving": "Error al guardar los elementos: {{error}}", + "itemListExportCsv": "Exportar CSV", + "itemListFieldsLabel": "Campos", + "itemListFilterNoResultsBody": "Prueba a ajustar tus filtros para encontrar lo que buscas", + "itemListFilterNoResultsTitle": "No se encontraron resultados que coincidan con tus filtros", + "itemListFilterPlaceholder": "Filtrar elementos", + "itemListImportCsv": "Importar CSV", + "itemListItemNotYetCreated": "El elemento aún no se ha creado", + "itemListLastPublished": "Última vez publicado", + "itemListLastSaved": "Última vez guardado", + "itemListModelInvalid": "Modelo \"{{modelZUID}}\" no válido", + "itemListModelNotFound": "Modelo \"{{modelZUID}}\" no encontrado", + "itemListNoSearchResultsAlt": "Sin resultados de búsqueda", + "itemListPublish": "Publicar", + "itemListPublishButton_one": "Publicar elemento ({{count}})", + "itemListPublishButton_many": "Publicar elementos ({{count}})", + "itemListPublishButton_other": "Publicar elementos ({{count}})", + "itemListPublishDescription_one": "Esto hará que el siguiente elemento de contenido esté disponible de inmediato en todas tus plataformas. Siempre puedes anular la publicación de este elemento más tarde si lo necesitas.", + "itemListPublishDescription_many": "Esto hará que los siguientes {{count}} elementos de contenido estén disponibles de inmediato en todas tus plataformas. Siempre puedes anular la publicación de estos elementos más tarde si lo necesitas.", + "itemListPublishDescription_other": "Esto hará que los siguientes {{count}} elementos de contenido estén disponibles de inmediato en todas tus plataformas. Siempre puedes anular la publicación de estos elementos más tarde si lo necesitas.", + "itemListPublishItemsTooltip": "Publicar elementos", + "itemListPublishNow": "Publicar ahora", + "itemListPublishTitle_one": "Publicar cambios en {{count}} elemento", + "itemListPublishTitle_many": "Publicar cambios en {{count}} elementos", + "itemListPublishTitle_other": "Publicar cambios en {{count}} elementos", + "itemListResetFilters": "Restablecer filtros", + "itemListSaveItemsTooltip": "Guardar elementos", + "itemListSavePublish": "Guardar y publicar", + "itemListSavePublishItemsTooltip": "Guardar y publicar elementos", + "itemListSavePublishNow": "Guardar y publicar ahora", + "itemListSaveSchedulePublish": "Guardar y programar publicación", + "itemListScheduleButton_one": "Programar publicación ({{count}})", + "itemListScheduleButton_many": "Programar publicación ({{count}})", + "itemListScheduleButton_other": "Programar publicación ({{count}})", + "itemListSchedulePastWarning": "Como la hora seleccionada es una fecha actual o pasada, se publicará de inmediato.", + "itemListSchedulePublish": "Programar publicación", + "itemListSchedulePublishOn": "Publicar el", + "itemListScheduleSubtitle": "Siempre puedes cancelar la publicación programada más tarde si lo necesitas", + "itemListScheduleTitle_one": "Programar la publicación de cambios en {{count}} elemento", + "itemListScheduleTitle_many": "Programar la publicación de cambios en {{count}} elementos", + "itemListScheduleTitle_other": "Programar la publicación de cambios en {{count}} elementos", + "itemListSearchNoResultsBody": "Prueba a ajustar tu búsqueda. Te sugerimos comprobar que todas las palabras estén bien escritas o probar con palabras clave diferentes.", + "itemListSearchNoResultsTitle": "Tu filtro \"{{search}}\" no encontró ningún resultado", + "itemListSelectedCount": "{{count}} seleccionados", + "itemListSelectedCount_one": "{{count}} seleccionados", + "itemListSelectedCount_many": "{{count}} seleccionados", + "itemListSelectedCount_other": "{{count}} seleccionados", + "itemListSortPrefix": "Ordenar: {{value}}", + "itemListStatus": "Estado", + "itemListStatusNotPublished": "No publicado", + "itemListStatusPublished": "Publicado", + "itemListStatusScheduled": "Programado", + "itemListUpdateCount_one": "Actualizar {{count}} elemento de contenido", + "itemListUpdateCount_many": "Actualizar {{count}} elementos de contenido", + "itemListUpdateCount_other": "Actualizar {{count}} elementos de contenido", + "itemListVersionByUser": "por {{name}}", + "itemListVersionColumnShort": "Ver.", + "itemListVersionPublishedOn": "v{{version}} publicada el", + "itemListVersionSavedOn": "v{{version}} guardada el", + "itemListVersionScheduledOn": "v{{version}} programada para publicarse el", + "itemListViewQuickAccessApi": "Ver API de acceso rápido", + "itemListViewSiteGeneratorsApi": "Ver API de generadores de sitios", + "itemListZuidColumn": "ZUID", + "linkCreateButton": "Crear enlace", + "linkCreateCreated": "Enlace creado: {{title}}", + "linkCreateUnableToCreate": "No se pudo crear el enlace", + "linkEditCannotSaveEmptyTitle": "Título vacío", + "linkEditConfirmDelete": "¿Seguro que quieres eliminar este enlace?", + "linkEditDeleted": "Enlace eliminado: {{title}}", + "linkEditErrorDeleting": "Error al eliminar el enlace", + "linkEditErrorSaving": "Error al guardar el enlace", + "linkEditFailedLoading": "Error al cargar el enlace", + "linkEditLoading": "Cargando enlace", + "linkEditorErrorAddProtocol": "Añade un protocolo de enlace", + "linkEditorErrorAddTarget": "Añade un destino de enlace", + "linkEditorErrorAddTitle": "Añade un título de enlace", + "linkEditorExternalLink": "Enlace externo", + "linkEditorExternalUrl": "Proporciona una URL externa a la que enlazar", + "linkEditorInternalLink": "Enlace interno", + "linkEditorLinkTitle": "Título del enlace", + "linkEditorSelectParent": "Selecciona un elemento padre para tu enlace", + "linkEditorSelectTarget": "Selecciona un elemento al que enlazar", + "linkEditSaveChanges": "Guardar cambios", + "linkEditSaved": "Enlace guardado: {{title}}", + "mediaAddFromBynder": "Añadir desde Bynder", + "mediaAddFromMedia": "Añadir desde Media", + "mediaAddMoreFromMedia": "Añadir más desde Media", + "mediaCopyFileUrl": "Copiar URL del archivo", + "mediaCopyZuid": "Copiar ZUID", + "mediaCouldNotAdd": "No se pudo añadir {{filenames}}. {{errorMessage}}", + "mediaCouldNotReplace": "No se pudo reemplazar. {{errorMessage}}", + "mediaDragAndDropRich": "Arrastra y suelta tus archivos aquí o", + "mediaDragDropFilesCompact": "Arrastra y suelta tus archivos", + "mediaDropFilesHere": "Suelta tus archivos aquí", + "mediaDropToUpload": "Suelta tus archivos aquí para subirlos", + "mediaEditFile": "Editar archivo", + "mediaMoreOptions": "Más opciones", + "mediaRemoveFile": "Quitar archivo", + "mediaRename": "Renombrar", + "mediaRenameFile": "Renombrar archivo", + "mediaReplaceFile": "Reemplazar archivo", + "mediaSwapFile": "Intercambiar archivo", + "mediaTypeLabel": "Tipo de medio", + "mediaUploadMedia": "Subir a Media", + "minCharacterCounter_one": " (mín. {{count}} carácter)", + "minCharacterCounter_many": " (mín. {{count}} caracteres)", + "minCharacterCounter_other": " (mín. {{count}} caracteres)", + "minMaxLabel": "Mín.: {{min}} | Máx.: {{max}}", + "missingMetaTitle": "no tiene metatítulo", + "navAddContentItem": "Añadir elemento de contenido", + "navContentTitle": "Contenido", + "navCreateContent": "Crear contenido", + "navCreateDataset": "Crear conjunto de datos", + "navCreatePage": "Crear página", + "navDashboard": "Panel", + "navDatasetsInfo": "Los conjuntos de datos que se muestran aquí no tienen un elemento de contenido principal ni URL para los elementos de contenido.", + "navErrorBody": "Lo sentimos, no pudimos cargar tus {{navName}}. Actualiza la página e inténtalo de nuevo.", + "navFilterItems": "Filtrar elementos", + "navHideContent": "Ocultar contenido", + "navLoadItemsFailed": "No se pudieron cargar los elementos de navegación de contenido.", + "navLoadRoleFailed": "No se pudo cargar tu rol de usuario.", + "navNoResultsFor": "No hay resultados disponibles para \"{{keyword}}\"", + "navNoSearchResultsAlt": "Sin resultados de búsqueda", + "navPagesInfo": "Las páginas incluyen modelos de una sola página y de varias páginas con URL. Los conjuntos de datos que tienen un elemento principal también aparecen en esta navegación.", + "navReorderPages": "Reordenar páginas", + "navResourceDatasets": "conjuntos de datos", + "navResourceModels": "modelos", + "navSectionDatasets": "Conjuntos de datos", + "navSectionHiddenItems": "Elementos ocultos", + "navSectionPages": "Páginas", + "noFieldsAvailable": "No hay campos disponibles", + "noFieldsDescriptionNoSchema": "Este modelo ({{label}}) aún no tiene campos. Para definir la estructura de sus elementos de contenido, póngase en contacto con su administrador para añadir campos a este modelo.", + "noFieldsDescriptionWithSchema": "Este modelo ({{label}}) aún no tiene campos. Para definir la estructura de sus elementos de contenido, vaya a su modelo y añada campos.", + "noFieldsImageAlt": "No hay campos disponibles", + "notFoundContactBodyRich": "Si crees que te falta un elemento de contenido, ponte en contacto con nosotros en support@zesty.io e incluye la siguiente URL en tu mensaje", + "notFoundDeletedHeading": "Este elemento ha sido eliminado", + "notFoundImageAlt": "No encontrado", + "publishedNow": "Se ha publicado {{title}} ahora", + "redirectActiveHeader": "Este elemento de contenido se está redirigiendo actualmente", + "redirectActiveSubHeader": "Este elemento de contenido está configurado actualmente para redirigir a los usuarios a la URL de destino que aparece debajo. Detener la redirección permitirá que los usuarios accedan de nuevo a este contenido en su URL original una vez que se publique.", + "redirectAddIncoming": "Añadir redirección entrante", + "redirectCode301": "301 - Redirección permanente", + "redirectCode302": "302 - Redirección temporal", + "redirectCreateButton": "Crear redirección", + "redirectCreatedOne": "1 redirección creada", + "redirectDeletedOne": "1 redirección eliminada", + "redirectDeletedPath": "Redirección eliminada: {{path}}", + "redirectDeleteForever": "Eliminar para siempre", + "redirectDeleteTitle": "Eliminar redirección", + "redirectDeleteWarning": "Eliminar esta redirección la quitará de inmediato de tu sitio. Esta acción no se puede deshacer.", + "redirectDontCreate": "No crear", + "redirectEnterUrlPlaceholder": "Introduce una URL (p. ej. https://www.google.com/)", + "redirectErrorDeleting": "Error al eliminar la redirección", + "redirectFilePathOnlyTooltip": "Solo ruta de archivo", + "redirectInactiveSubHeader": "Una vez que redirijas tu elemento de contenido, se despublicará y los usuarios no podrán acceder a él en su URL actual. Se les enviará automáticamente a la URL de destino que indiques.", + "redirectMoreDetails": "Más detalles", + "redirectNewPath": "Ruta nueva", + "redirectOldPath": "Ruta anterior", + "redirectStopBody": "Detener la redirección permitirá que los usuarios accedan de nuevo a este contenido en su URL original una vez que se publique.", + "redirectStopRedirecting": "Detener redirección", + "redirectTargetLabel": "Destino de la redirección", + "redirectTargetPath": "Ruta de destino", + "redirectThisContentItem": "Redirigir este elemento de contenido", + "redirectTypeColumn": "Tipo de redirección", + "redirectTypeInternal": "Interna", + "redirectTypeLabel": "Tipo", + "redirectTypeWildcard": "Comodín", + "redirectValueCannotBeModified": "Este valor no se puede modificar", + "reorderNavReturnToRoot": "Volver a la raíz", + "reorderNavSaveChanges": "Guardar cambios", + "reorderNavSaved": "Los cambios se han guardado", + "reorderNavSaveError": "Error al guardar los cambios", + "reorderNavTitle": "Cambia el orden de los elementos en tu navegación", + "requiredFieldError": "Campo obligatorio. Introduzca un valor.", + "requiresMoreCharacters_one": "Requiere {{count}} carácter más.", + "requiresMoreCharacters_many": "Requiere {{count}} caracteres más.", + "requiresMoreCharacters_other": "Requiere {{count}} caracteres más.", + "scheduledPublish": "Se ha programado la publicación de {{title}} para el {{time}} en la zona horaria {{timezone}}", + "selectBlockVariant": "Seleccione una variante de bloque.", + "selectedItemNotFound": "Elemento seleccionado no encontrado: {{value}}", + "selectPlaceholder": "Seleccionar", + "seoFieldMetaDescription": "Metadescripción", + "seoFieldMetaKeywords": "Palabras clave meta", + "seoFieldMetaTitle": "Metatítulo", + "seoFieldNavigationTitle": "Título de navegación", + "seoFieldPageParent": "Página principal", + "seoFieldUrlPathPart": "Parte de la ruta URL", + "slotLabelAltText": "Texto alternativo", + "slotLabelAutoplay": "Reproducción automática", + "slotLabelLoopVideo": "Repetir video", + "slotLabelMuteVideo": "Silenciar video", + "slotLabelOpenInNewTab": "Abrir en una pestaña nueva", + "slotLabelSource": "Fuente", + "slotLabelUrl": "URL", + "slotLabelVideoControlVisibility": "Visibilidad de controles de video", + "slotLabelVideoPoster": "Imagen de portada del video", + "studioAddLink": "Añadir enlace", + "studioAgenticStudioBy": "Agentic Studio por", + "studioBackToElement": "Volver al elemento", + "studioBridgeError": "Error de puente", + "studioCannotSave": "No se puede guardar: {{label}}", + "studioCannotSaveError": "No se puede guardar: {{label}} - {{error}}", + "studioCannotSaveInvalid": "No se puede guardar: {{label}} - datos faltantes o no válidos", + "studioCloseAriaLabel": "Cerrar vista previa de Studio", + "studioContentHint": "Selecciona elementos en el lienzo para realizar ediciones", + "studioEditInFreestyle": "Editar en Freestyle", + "studioEditInManager": "Editar en Zesty Manager", + "studioEditorAriaLabel": "Editor de Studio", + "studioFreestyleAlertBody": "Solo se puede editar en Freestyle", + "studioFreestyleAlertDismissAriaLabel": "Descartar aviso de Freestyle", + "studioFreestyleAlertTitle": "Este diseño se creó en Freestyle", + "studioFullHint": "Selecciona elementos en el lienzo para editarlos, o arrastra los bloques para reordenar el diseño", + "studioInlineEditFailed": "No se pudo aplicar la edición en línea para este bloque.", + "studioInvalidUrl": "URL no válida. Comprueba e inténtalo de nuevo.", + "studioItemPublished": "Publicado: {{label}}", + "studioItemSaved": "Elemento guardado: {{label}}", + "studioItemsPublishedCount_one": "Se guardó y publicó {{count}} elemento", + "studioItemsPublishedCount_many": "Se guardaron y publicaron {{count}} elementos", + "studioItemsPublishedCount_other": "Se guardaron y publicaron {{count}} elementos", + "studioItemsSavedCount_one": "Se guardó {{count}} elemento", + "studioItemsSavedCount_many": "Se guardaron {{count}} elementos", + "studioItemsSavedCount_other": "Se guardaron {{count}} elementos", + "studioLayersEmptyState": "No se encontraron capas", + "studioLayersNodeElement": "elemento", + "studioLayersNodeField": "Campo", + "studioLayersNodePage": "Página", + "studioLayersNodeText": "Texto", + "studioLayersPanelTitle": "Capas", + "studioLayoutHint": "Arrastra los bloques en el lienzo para reordenar el diseño", + "studioLayoutPublishFailed": "No se pudo guardar y publicar el diseño.", + "studioLayoutPublishFailedNamed": "No se pudo guardar y publicar {{name}}.", + "studioLayoutSaved": "Se guardó {{files}}", + "studioLayoutSavedPublished": "Se guardó y publicó {{files}}", + "studioLayoutSaveFailed": "No se pudo guardar el diseño.", + "studioLayoutSaveFailedNamed": "No se pudo guardar {{name}}.", + "studioLinkedFromTooltip": "Vinculado desde {{modelLabel}} · {{itemLabel}} ({{itemZUID}})", + "studioLinkFieldNotFound": "El campo \"{{fieldName}}\" ya no existe", + "studioLinkFromOtherItem": "Vincular desde otro elemento de contenido", + "studioLinkItemConfirm": "Vincular elemento", + "studioLinkItemContentItemLabel": "Elemento de contenido", + "studioLinkItemContentItemTooltip": "El campo se lee de este elemento exacto, incluido su idioma.", + "studioLinkItemContentItemTooltipForItem": "El enlace apunta a este elemento exacto, incluido su idioma. Solo se muestran los modelos con página.", + "studioLinkItemDialogCloseAriaLabel": "Cerrar el diálogo de vincular elemento", + "studioLinkItemDialogSubtitle": "Vincular a un campo de contenido de un elemento de contenido específico", + "studioLinkItemDialogSubtitleForItem": "Vincular a la página de un elemento de contenido específico", + "studioLinkItemDialogTitle": "Vincular otro elemento de contenido", + "studioLinkItemFieldLabel": "Campo para conectar", + "studioLinkItemFieldTooltip": "Solo se muestran los campos que este elemento puede renderizar.", + "studioLinkItemNoLinkableFields": "El modelo de este elemento no tiene campos vinculables.", + "studioLinkModelNotFound": "El modelo \"{{modelName}}\" ya no existe", + "studioLinkSectionLabel": "Enlace", + "studioLinkTargetLabel": "Destino", + "studioLinkTo": "Enlazar a", + "studioLinkUrlPlaceholder": "url o id del enlace", + "studioModeContent": "Contenido", + "studioModeFull": "Completo", + "studioModeLayout": "Diseño", + "studioNoCmsItem": "Ningún elemento del CMS está asociado a esta ruta. La edición está deshabilitada.", + "studioPreviewError": "Error de vista previa: {{error}}", + "studioPreviewOnly": "Solo vista previa", + "studioPublishPartialFailure_one": "Publicado {{published}} de {{count}} elemento — {{failed}} fallido", + "studioPublishPartialFailure_many": "Publicados {{published}} de {{count}} elementos — {{failed}} fallidos", + "studioPublishPartialFailure_other": "Publicados {{published}} de {{count}} elementos — {{failed}} fallidos", + "studioRemoveLinkAriaLabel": "Quitar enlace", + "studioSaveAllButton": "Guardar todo", + "studioSaveAndPublish": "Guardar y publicar", + "studioSaveAndPublishAllButton": "Guardar y publicar todo", + "studioSaveChangeSectionContent": "Contenido", + "studioSaveChangeSectionLayout": "Diseño", + "studioSaveChanges": "Guardar cambios", + "studioSaveChangesSubtitle": "¿Deseas guardar o guardar y publicar tus cambios?", + "studioSaveChangesTypeColumn": "Tipo", + "studioSaveChangesVersionColumn": "Vers.", + "studioSaveChangeTypeBlock": "Bloque", + "studioSaveChangeTypeCode": "Código", + "studioSaveChangeTypeContent": "Contenido", + "studioStaticEditNotSingleField": "Este bloque no se puede editar en línea porque su contenido no es un único campo conectado.", + "studioStaticEditRejected": "Este bloque contiene contenido dinámico y no se puede editar en línea. Cambia al modo Contenido para realizar ediciones.", + "studioUnsavedLayoutBody": "Tienes cambios de diseño sin guardar. ¿Guardarlos antes de continuar?", + "studioUnsavedLayoutTitle": "Cambios de diseño sin guardar", + "studioUntitledItem": "Sin título", + "studioViewAllRelatedFields": "Ver todos los campos relacionados", + "tagArticle": "Artículo", + "tagAside": "Aside", + "tagDiv": "Div", + "tagFooter": "Pie de página", + "tagHeader": "Encabezado", + "tagMain": "Principal", + "tagNavigation": "Navegación", + "tagNone": "Sin etiqueta", + "tagSection": "Sección", + "tagText": "Texto", + "unpublished": "Se ha anulado la publicación de {{title}}", + "unscheduledVersion": "Se ha cancelado la programación de la versión {{version}}", + "uuidAutoGeneratedPlaceholder": "Los valores del campo UUID se generan automáticamente", + "valueMustBeBetween": "El valor debe estar entre {{min}} y {{max}}", + "viewModelActivityLog": "Ver registro de actividad del modelo", + "yesNoMissingOptions": "Al campo {{label}} le faltan opciones de configuración. Edite el campo para añadir valores sí/no." +} diff --git a/public/locales/es-ES/dashboard.json b/public/locales/es-ES/dashboard.json new file mode 100644 index 0000000000..6e71352fad --- /dev/null +++ b/public/locales/es-ES/dashboard.json @@ -0,0 +1,32 @@ +{ + "columnVersion": "Vers.", + "createCodeFile": "Crear archivo de código", + "createContent": "Crear contenido", + "createModel": "Crear modelo", + "deleted": "Eliminado", + "deltaLabel": "VS {{count}} días anteriores", + "deltaLabel_one": "VS {{count}} día anterior", + "deltaLabel_many": "VS {{count}} días anteriores", + "deltaLabel_other": "VS {{count}} días anteriores", + "emptyStateDescription": "No ha habido elementos nuevos ni modificaciones en los últimos 30 días. Comienza a crear o editar contenido, modelos o archivos de código para ver los archivos recientes aquí.", + "emptyStateTitle": "Comienza a hacer crecer tu instancia hoy mismo", + "greeting": "Buenos días, {{name}}", + "instanceSummary": "Aquí está el resumen de tu instancia de los", + "itemsPublished": "Elementos publicados", + "joinCommunity": "Únete a nuestra comunidad", + "lastNDays": "Últimos {{count}} días", + "lastNDays_one": "Último {{count}} día", + "lastNDays_many": "Últimos {{count}} días", + "lastNDays_other": "Últimos {{count}} días", + "lastNDaysInline": "últimos {{count}} días", + "lastNDaysInline_one": "último {{count}} día", + "lastNDaysInline_many": "últimos {{count}} días", + "lastNDaysInline_other": "últimos {{count}} días", + "missingMetaTitle": "Falta el meta título", + "releaseNotes": "Notas de la versión", + "resources": "Recursos", + "resourcesSubtitle": "Todo lo que necesitas para aprovechar al máximo Zesty.", + "speedDialAriaLabel": "Marcación rápida de la instancia", + "uploadMedia": "Subir archivos multimedia", + "webRequests": "Solicitudes web" +} diff --git a/public/locales/es-ES/leads.json b/public/locales/es-ES/leads.json new file mode 100644 index 0000000000..2f978e3339 --- /dev/null +++ b/public/locales/es-ES/leads.json @@ -0,0 +1,27 @@ +{ + "captureLeadsOnYourInstance": "Captura leads en tu instancia", + "dateCreated": "Fecha de creación", + "datePreset30Days": "30 días", + "datePreset60Days": "60 días", + "datePreset90Days": "90 días", + "datePresetAll": "Todos", + "datePresetCustom": "Personalizado", + "endDate": "Fecha de fin", + "exportCsv": "Exportar CSV", + "exportCsvTitle": "Exportar CSV de datos de leads según los filtros seleccionados", + "formGroup": "Grupo de formulario", + "formGroupAll": "Todos", + "getStartedBodyText": "Al crear un formulario en tu instancia que incluya el campo zlf, puedes comenzar a capturar leads de inmediato.", + "howToCreateALeadForm": "Cómo crear un formulario de leads", + "learnMoreAbout": "Más información sobre", + "modalTableHeaderKey": "Clave", + "modalTableHeaderValue": "Valor", + "notAvailable": "N/D", + "searchAcrossAllOfYourLeads": "Buscar en todos tus leads", + "selectRelease": "Seleccionar versión...", + "startDate": "Fecha de inicio", + "tableHeaderDate": "Fecha (sistema)", + "tableHeaderEmail": "Correo electrónico", + "tableHeaderFormBody": "Cuerpo del formulario", + "tableHeaderFormGroup": "Grupo de formulario" +} diff --git a/public/locales/es-ES/marketplace.json b/public/locales/es-ES/marketplace.json new file mode 100644 index 0000000000..1cfd322135 --- /dev/null +++ b/public/locales/es-ES/marketplace.json @@ -0,0 +1,15 @@ +{ + "appNotInstalled": "La aplicación \"{{zuid}}\" no está instalada.", + "exploreMarketplace": "Explorar el Marketplace", + "googleAnalyticsLogoAlt": "Logotipo de Google Analytics", + "googleChromeLogoAlt": "Logotipo de Google Chrome", + "goToMarketplace": "Ir al Marketplace", + "headerTitleApps": "Aplicaciones", + "installAppBody": "Instala extensiones, aplicaciones y módulos de inicio rápido для acelerar tu proyecto de Zesty", + "microsoftLogoAlt": "Logotipo de Microsoft", + "nodejsLogoAlt": "Logotipo de NodeJS", + "npmLogoAlt": "Logotipo de NPM", + "sidebarMarketplace": "Marketplace", + "visitMarketplace": "Visitar el Marketplace", + "zestyRocketLogoAlt": "Logotipo de Zesty Rocket" +} diff --git a/public/locales/es-ES/media.json b/public/locales/es-ES/media.json new file mode 100644 index 0000000000..894338428a --- /dev/null +++ b/public/locales/es-ES/media.json @@ -0,0 +1,231 @@ +{ + "allMediaTitle": "Recientes", + "dateFilterAfter": "Después de", + "dateFilterBefore": "Antes de", + "dateFilterButtonLabel": "Fecha", + "dateFilterCustomRange": "Rango personalizado", + "dateFilterOn": "El", + "deletedFile": "Archivo eliminado: {{filename}}", + "deletedGroup": "Grupo eliminado: {{name}}", + "deleteFileModalDeleteButtonAria": "Botón eliminar", + "deleteFileModalDeleteButtonMultiple": "Eliminar ({{count}})", + "deleteFileModalDeleteButtonMultiple_one": "Eliminar ({{count}})", + "deleteFileModalDeleteButtonMultiple_many": "Eliminar ({{count}})", + "deleteFileModalDeleteButtonMultiple_other": "Eliminar ({{count}})", + "deleteFileModalTitleMultiple": "¿Eliminar {{count}} archivos?", + "deleteFileModalTitleMultiple_one": "¿Eliminar {{count}} archivo?", + "deleteFileModalTitleMultiple_many": "¿Eliminar {{count}} archivos?", + "deleteFileModalTitleMultiple_other": "¿Eliminar {{count}} archivos?", + "deleteFileModalTitleSingle": "Eliminar archivo", + "deleteFileModalWarningMultiple": "No podrás recuperar estos archivos.", + "deleteFileModalWarningSingle": "{{filename}} se eliminará para siempre", + "deleteFolderDialogConfirmButton": "Eliminar carpeta", + "deleteFolderDialogMessage": "Eliminar la carpeta NO eliminará los archivos que contiene. Estos archivos aún se podrán encontrar en Todos los archivos.", + "deleteFolderDialogTitle": "¿Eliminar carpeta?", + "dropAreaAllMedia": "Todos los archivos", + "dropAreaUploadPrompt": "Subir archivos a {{location}}", + "editedFile": "Archivo editado: {{filename}}", + "emptyStateDescription": "Puedes arrastrar y soltar archivos aquí o usar el botón \"Subir\".", + "emptyStateTitle": "Comienza a subir ahora", + "failedCreatingGroup": "Error al crear el grupo", + "failedDeletingFile": "Error al eliminar el archivo", + "failedDeletingGroup": "Error al eliminar el grupo", + "failedEditingBin": "Error al editar el contenedor", + "failedEditingFile": "Error al editar el archivo", + "failedEditingGroup": "Error al editar el grupo", + "failedFetchBinFiles": "Error al obtener los archivos del contenedor: {{error}}", + "failedFetchGroupFiles": "Error al obtener los archivos del grupo: {{error}}", + "failedFetchGroups": "Error al obtener los grupos: {{error}}", + "failedFileSearch": "Error en la búsqueda de archivos", + "failedLoadingBinFiles": "Error al cargar los archivos del contenedor", + "failedLoadingBinGroups": "Error al cargar los grupos de contenedores", + "failedLoadingEcoBins": "Error al cargar los contenedores de medios del ecosistema", + "failedLoadingGroupFiles": "Error al cargar los archivos del grupo", + "failedLoadingInstanceBins": "Error al cargar los contenedores de medios de la instancia", + "failedSearchFile": "Error al buscar el archivo: {{error}}", + "fileModalContentCloseAria": "Icono de cerrar", + "fileModalContentCloseTooltip": "Cerrar vista previa", + "fileModalContentCopyZuid": "Copiar ZUID", + "fileModalContentDeleteAria": "Botón de papelera", + "fileModalContentDeleteFailed": "Error al eliminar el archivo", + "fileModalContentDeleteTooltip": "Eliminar archivo", + "fileModalContentFileUrlLabel": "URL del archivo", + "fileModalContentLaunchOtfEditor": "Iniciar editor en tiempo real", + "fileModalContentMoveTo": "Mover a", + "fileModalContentOpenSettingsAria": "Abrir menú de configuración", + "fileModalContentRenameMenuItem": "Renombrar", + "fileModalContentRenameTooltip": "Renombrar archivo", + "fileModalContentReplaceAria": "Botón reemplazar archivo", + "fileModalContentReplaceTooltip": "Reemplazar archivo", + "fileModalContentSaveTitleAria": "Botón guardar título", + "fileModalContentTitleAria": "Campo de texto del título", + "fileModalContentTitleHelper": "Se puede usar para texto alternativo y subtítulos", + "fileModalContentTitleLabel": "Título", + "fileModalContentTitlePlaceholder": "Introducir título", + "fileModalContentUpdatedOn": "Actualizado el", + "fileModalContentUploadedOn": "Subido el", + "fileModalContentZuidLabel": "ZUID", + "filetypeFilterArchives": "Archivos (zip)", + "filetypeFilterAudio": "Audio", + "filetypeFilterButtonLabel": "Tipo de archivo", + "filetypeFilterDocuments": "Documentos", + "filetypeFilterFolders": "Carpetas", + "filetypeFilterFonts": "Fuentes", + "filetypeFilterImages": "Imágenes", + "filetypeFilterPdfs": "PDFs", + "filetypeFilterPresentations": "Presentaciones", + "filetypeFilterSpreadsheets": "Hojas de cálculo", + "filetypeFilterVideos": "Videos", + "fileTypeNotRecognized": "Tipo de archivo no reconocido", + "folderMenuAddSubFolder": "Añadir subcarpeta", + "folderMenuHide": "Ocultar", + "folderMenuRename": "Renombrar", + "folderMenuShow": "Mostrar", + "goToAllMedia": "Ir a todos los archivos", + "headerAddSubFolder": "Añadir subcarpeta", + "headerDeselectAll": "Deseleccionar todo", + "headerFilesSelected": "{{count}} seleccionado(s)", + "headerFilesSelected_one": "{{count}} seleccionado(s)", + "headerFilesSelected_many": "{{count}} seleccionado(s)", + "headerFilesSelected_other": "{{count}} seleccionado(s)", + "headerFilesSelectedLimit": "{{count}} / {{limit}} seleccionado(s)", + "headerFilesSelectedLimit_one": "{{count}} / {{limit}} seleccionado(s)", + "headerFilesSelectedLimit_many": "{{count}} / {{limit}} seleccionado(s)", + "headerFilesSelectedLimit_other": "{{count}} / {{limit}} seleccionado(s)", + "headerMove": "Mover", + "headerOpenFolderMenuAria": "Abrir menú de carpeta", + "headerReplacementFileSelected": "Archivo de reemplazo seleccionado", + "headerSelectAll": "Seleccionar todo", + "headerSelectReplacementFile": "Seleccionar archivo de reemplazo", + "imageFilterAllTypes": "Todos los tipos de imagen", + "insightsMediaDateRangeButton": "Últimos {{days}} días", + "insightsMediaDateRangeMenuItem": "Últimos {{days}} días", + "insightsMediaDeltaLabel": "desde los últimos {{days}} días", + "insightsMediaMediaBandwidth": "Ancho de banda de medios", + "insightsMediaTitle": "Estadísticas", + "insightsTableColBandwidth": "Ancho de banda", + "insightsTableColRequests": "Solicitudes", + "insightsTableColType": "Tipo", + "matchesFound": "Se encontraron {{count}} coincidencias", + "matchesFound_one": "Se encontró {{count}} coincidencia", + "matchesFound_many": "Se encontraron {{count}} coincidencias", + "matchesFound_other": "Se encontraron {{count}} coincidencias", + "mediaAppFileNotFoundMessage": "Lo sentimos, el archivo solicitado no se pudo encontrar. Por favor, vuelve a la página de todos los archivos.", + "mediaAppFileNotFoundTitle": "Archivo no encontrado", + "mediaGridFilesHeader": "Archivos", + "mediaGridFoldersHeader": "Carpetas", + "mediaListColAddedOn": "Añadido el", + "mediaListColType": "Tipo", + "moveFileDialogDestinationLabel": "Carpeta de destino", + "moveFileDialogMoveButton": "Mover", + "moveFileDialogTitleMultiple": "Mover {{count}} archivos", + "moveFileDialogTitleMultiple_one": "Mover {{count}} archivo", + "moveFileDialogTitleMultiple_many": "Mover {{count}} archivos", + "moveFileDialogTitleMultiple_other": "Mover {{count}} archivos", + "moveFileDialogTitleSingle": "Mover archivos", + "newFolderDialogDefaultFolderName": "Sin título", + "newFolderDialogFolderNameLabel": "Nombre de la carpeta", + "newFolderDialogNone": "Ninguno", + "newFolderDialogParentFolderLabel": "Carpeta superior", + "newFolderDialogTitle": "Nueva carpeta", + "noResultsStateClearFilters": "Borrar filtros", + "noResultsStateDescription": "Prueba a ajustar los filtros para encontrar lo que buscas", + "noResultsStateTitleFiletype": "No se encontraron archivos de tipo {{filetype}}", + "noResultsStateTitleFolders": "No se encontraron carpetas", + "notFoundStateDefaultMessage": "Lo sentimos, no se pudo encontrar la carpeta solicitada. Por favor, vuelve a la página de todos los archivos.", + "notFoundStateDefaultTitle": "Carpeta no encontrada", + "notifyFailedCreateRecord": "Error al crear el registro del archivo después de la carga de la URL firmada", + "notifyFailedSignedUrl": "Error al obtener la URL firmada para la carga de archivos grandes", + "notifyFailedUploadSignedUrl": "Error al cargar el archivo en la URL firmada", + "notifyFileReplaced": "Archivo reemplazado: {{filename}}", + "notifyFilesInProgress": "{{count}} archivos aún en progreso", + "notifyFilesInProgress_one": "{{count}} archivo aún en progreso", + "notifyFilesInProgress_many": "{{count}} archivos aún en progreso", + "notifyFilesInProgress_other": "{{count}} archivos aún en progreso", + "notifyMetadataFailedMultiple": "Error al actualizar los metadatos de {{count}} archivos", + "notifyMetadataFailedMultiple_one": "Error al actualizar los metadatos de {{count}} archivo", + "notifyMetadataFailedMultiple_many": "Error al actualizar los metadatos de {{count}} archivos", + "notifyMetadataFailedMultiple_other": "Error al actualizar los metadatos de {{count}} archivos", + "notifyUploadedMultiple": "Se cargaron correctamente {{count}} archivos", + "notifyUploadedMultiple_one": "Se cargó correctamente {{count}} archivo", + "notifyUploadedMultiple_many": "Se cargaron correctamente {{count}} archivos", + "notifyUploadedMultiple_other": "Se cargaron correctamente {{count}} archivos", + "notifyUploadedMultipleWithProgress": "Se cargaron correctamente {{count}} archivos... {{inProgress}} archivos aún en progreso", + "notifyUploadedMultipleWithProgress_one": "Se cargó correctamente {{count}} archivo... {{inProgress}} archivos aún en progreso", + "notifyUploadedMultipleWithProgress_many": "Se cargaron correctamente {{count}} archivos... {{inProgress}} archivos aún en progreso", + "notifyUploadedMultipleWithProgress_other": "Se cargaron correctamente {{count}} archivos... {{inProgress}} archivos aún en progreso", + "notifyUploadFailed": "Error al cargar el archivo", + "notifyUploadFailedMultiple": "Error al cargar {{count}} archivos", + "notifyUploadFailedMultiple_one": "Error al cargar {{count}} archivo", + "notifyUploadFailedMultiple_many": "Error al cargar {{count}} archivos", + "notifyUploadFailedMultiple_other": "Error al cargar {{count}} archivos", + "notifyUploadSuccess": "Archivo cargado correctamente", + "otfEditorAutoPlaceholder": "Automático", + "otfEditorBlurLabel": "Desenfocar", + "otfEditorCopyUrlLabel": "✨ Copiar nueva URL con los cambios aplicados", + "otfEditorFitBounds": "Límites", + "otfEditorFitCover": "Cubrir", + "otfEditorFitCrop": "Recortar", + "otfEditorFitLabel": "Ajustar", + "otfEditorFitNone": "Ninguno", + "otfEditorHeightLabel": "Alto", + "otfEditorOptimizeHigh": "Alta", + "otfEditorOptimizeLabel": "Optimizar", + "otfEditorOptimizeLow": "Baja", + "otfEditorOptimizeMedium": "Media", + "otfEditorSaturationAria": "Saturación", + "otfEditorSaturationLabel": "Saturación", + "otfEditorTitle": "Editor de imágenes en tiempo real", + "otfEditorUnsavedWarning": "Estos cambios no se guardarán en el archivo original ni en la URL del archivo", + "otfEditorWidthLabel": "Ancho", + "renameFileModalNewNameLabel": "Nuevo nombre de archivo", + "renameFileModalTitle": "Renombrar archivo", + "renameFileModalWarning": "Esto cambiará la ruta de la URL y podría romper los enlaces existentes referenciados en producción después de un tiempo.", + "renameFolderDialogNewFolderNameLabel": "Nuevo nombre de carpeta", + "renameFolderDialogTitle": "Renombrar carpeta", + "replaceFileModalNoPermissionSubtitle": "Contacta al propietario de la instancia o a los administradores listados a continuación para actualizar tu rol a Administrador o Propietario y obtener esta función.", + "replaceFileModalNoPermissionTitle": "No tienes permiso para reemplazar archivos en esta instancia.", + "replaceFileModalTitle": "Reemplazar archivo", + "replaceFileModalWarning": "El archivo original será eliminado y reemplazado por el nuevo. Esta acción no se puede deshacer y el archivo no se podrá recuperar. El archivo conservará su URL y ZUID.", + "searchEmptyStateDescription": "Intenta ajustar tu búsqueda. Sugerimos verificar que todas las palabras estén escritas correctamente o probar con palabras clave diferentes", + "searchEmptyStateTitle": "Tu búsqueda \"{{searchTerm}}\" no obtuvo resultados", + "sidebarFoldersDndErrorMessage": "Actualmente Zesty no permite mover archivos entre eco-contenedores. Si deseas esta función, ponte en contacto con support@zesty.io.", + "sidebarFoldersDndErrorTitle": "No se puede mover el archivo a otro eco-contenedor", + "sidebarFoldersHeader": "Carpetas", + "sidebarFoldersHiddenItems": "Elementos ocultos", + "sidebarFoldersOkButton": "Aceptar", + "sidebarFoldersSortLastCreated": "Último creado", + "sidebarInsertFromMedia": "Insertar desde archivos", + "sidebarInsights": "Estadísticas", + "sidebarRecents": "Recientes", + "sidebarSearchPlaceholder": "Buscar archivos", + "sortButtonLabel": "Ordenar: {{order}}", + "sortDateAdded": "Fecha de adición", + "thumbnailContentCannotEditTooltip": "No puedes editar el nombre del archivo", + "thumbnailContentTitlePlaceholderDisabled": "Por favor, espera para añadir el título del archivo", + "thumbnailContentTitlePlaceholderEditable": "Añadir título al archivo (para texto alternativo)", + "thumbnailCopyUrl": "Copiar URL", + "uploadModalNounFile_one": "archivo", + "uploadModalNounFile_many": "archivos", + "uploadModalNounFile_other": "archivos", + "uploadModalNounReplacedFile_one": "archivo reemplazado", + "uploadModalNounReplacedFile_many": "archivos reemplazados", + "uploadModalNounReplacedFile_other": "archivos reemplazados", + "uploadModalUploadedNoCount": "{{item}} subido", + "uploadModalUploadedWithCount": "{{count}} {{item}} subido(s)", + "uploadModalUploadedWithCount_one": "{{count}} {{item}} subido(s)", + "uploadModalUploadedWithCount_many": "{{count}} {{item}} subido(s)", + "uploadModalUploadedWithCount_other": "{{count}} {{item}} subido(s)", + "uploadModalUploadErrorHint": "Por favor, comprueba las extensiones de los archivos e inténtalo de nuevo", + "uploadModalUploadErrorTitle": "Desafortunadamente, tuvimos problemas para subir los {{count}} archivos", + "uploadModalUploadErrorTitle_one": "Desafortunadamente, tuvimos problemas para subir el {{count}} archivo", + "uploadModalUploadErrorTitle_many": "Desafortunadamente, tuvimos problemas para subir los {{count}} archivos", + "uploadModalUploadErrorTitle_other": "Desafortunadamente, tuvimos problemas para subir los {{count}} archivos", + "uploadModalUploadingNoCount": "Subiendo {{item}}", + "uploadModalUploadingWithCount": "Subiendo {{count}} {{item}}", + "uploadModalUploadingWithCount_one": "Subiendo {{count}} {{item}}", + "uploadModalUploadingWithCount_many": "Subiendo {{count}} {{item}}", + "uploadModalUploadingWithCount_other": "Subiendo {{count}} {{item}}", + "uploadModalUploadMore": "Subir más", + "videoFilterAllTypes": "Todos los tipos de video" +} diff --git a/public/locales/es-ES/release.json b/public/locales/es-ES/release.json new file mode 100644 index 0000000000..395351bbee --- /dev/null +++ b/public/locales/es-ES/release.json @@ -0,0 +1,41 @@ +{ + "activateButton": "Activar la aplicación de lanzamientos", + "activateSubtitle": "Publica grupos de contenido al mismo tiempo.", + "createdAt": "Creado el", + "createdOn": "{{time}} el {{date}}", + "createdRelease": "Versión creada: {{name}}", + "createRelease": "Crear lanzamiento", + "createReleaseButton": "Crear lanzamiento", + "deletedRelease": "Versión eliminada: {{name}}", + "deleteRelease": "Eliminar lanzamiento", + "deleteWarning": "Eliminar un lanzamiento es una acción permanente.", + "errorMissingReleaseName": "Falta el nombre obligatorio del lanzamiento", + "failedActivateReleases": "Error al activar las versiones", + "failedCreatingRelease": "Error al crear la versión", + "failedDeletingRelease": "Error al eliminar la versión {{name}}", + "fieldReleaseDescription": "Descripción del lanzamiento", + "fieldReleaseName": "Nombre del lanzamiento", + "instructionBeginSearch": "Comienza buscando el contenido que deseas incluir en este lanzamiento", + "instructionPublishAll": "Presiona el botón \"Publicar todo\" para publicar todos los elementos listados en el lanzamiento", + "instructionSelectItem": "Selecciona un elemento de la lista de búsqueda para añadirlo a este lanzamiento", + "lang": "Idioma", + "lastPublish": "Última publicación", + "live": "En vivo", + "loadingRelease": "Cargando lanzamiento: {{name}}", + "members": "Miembros", + "missingItemMetaTitle": "Falta el metatítulo del elemento", + "neverPublished": "Nunca publicado", + "publishAll": "Publicar todo", + "publishAllNoticeBody": "Esto publicará todos los miembros de este lanzamiento, purgando todas sus URL y el contenido relacionado.", + "publishedItems_one": "Se ha publicado {{count}} elemento", + "publishedItems_many": "Se han publicado {{count}} elementos", + "publishedItems_other": "Se han publicado {{count}} elementos", + "publishing": "Publicando", + "releasesHeading": "Lanzamientos (Releases)", + "searchPlaceholder": "Busca por ZUID o metatítulo para incluir en tu lanzamiento", + "startingRelease": "Iniciando lanzamiento", + "startNewPublishPlan": "Iniciar nuevo plan de publicación", + "updatedReleaseMember": "Se actualizó el elemento ({{itemTitle}}) de la versión ({{releaseName}}) a la versión {{version}}", + "versionNumber": "Versión {{version}}", + "versionPublishedAgo": "La versión {{version}} fue publicada {{timeAgo}}" +} diff --git a/public/locales/es-ES/reports.json b/public/locales/es-ES/reports.json new file mode 100644 index 0000000000..e3dac8b116 --- /dev/null +++ b/public/locales/es-ES/reports.json @@ -0,0 +1,121 @@ +{ + "actionAddedStatus": "Estado añadido: {{labels}}", + "actionBy": "por", + "actionCount_one": "{{count}} acción", + "actionCount_many": "{{count}} acciones", + "actionCount_other": "{{count}} acciones", + "actionCreated": "Creado", + "actionDeleted": "Eliminado", + "actionInBy": "En {{itemSubtext}} por", + "actionModified": "Modificado", + "actionPublished": "Publicado", + "actionRemovedStatus": "Estado eliminado: {{labels}}", + "actions": "Acciones", + "actionsByTitle": "Acciones por", + "actionScheduledPublish": "Programado para publicar", + "actionScheduledPublishOn": "Programado para publicar el {{date}}", + "actionsLabel": "Acciones", + "actionType": "Tipo de acción", + "actionUnpublished": "Despublicado", + "activityByResource": "Actividad por recurso", + "activityLog": "Registro de actividad", + "activityLogSubtitle": "Cronología de tu instancia por recursos y usuarios", + "activityLogTitle": "Registro de actividad", + "affectedZUIDDeleted": "{{affectedZUID}} (Eliminado)", + "affectedZUIDMissingMetaTitle": "{{affectedZUID}} (Falta el título meta)", + "allResponseCodes": "Todos los códigos de respuesta", + "apiErrorMessage": "Ocurrió un error al cargar los datos", + "apiErrorRetry": "Reintentar", + "apiErrorTitle": "¡Vaya!", + "bandwidth": "Ancho de banda", + "bandwidthBreakdown": "Desglose del ancho de banda", + "blockVariants": "Variantes de bloque", + "cdnUrl": "URL de la CDN", + "codeFilesAndSnippets": "Archivos de código y fragmentos", + "contentModel": "Modelo de contenido", + "created": "Creado", + "date": "Fecha", + "deleted": "Eliminado", + "deletedZuid": "{{zuid}} (Eliminado)", + "deletedZUID": "{{zuid}} (Eliminado)", + "emptyStateHint": "Prueba a ajustar los filtros para encontrar lo que buscas.", + "failingNotFound": "Errores de no encontrado (404)", + "fieldPrefix": "Campo {{message}}", + "fileName": "Nombre del archivo", + "fileTypeDataset": "Modelo de datos Headless", + "fileTypePageset": "Modelo de páginas múltiples", + "fileTypeTemplateset": "Modelo de página única", + "headTag": "Etiqueta Head", + "htmlCssBandwidth": "Ancho de banda de HTML/CSS/JavaScript", + "insightActions": "Acciones", + "instanceZuid": "ZUID de la instancia", + "lastActionAt": "Última acción el {{time}}", + "lastActionAtContentModel": "Última acción el {{lastAction}} • Modelo de contenido", + "lastActionAtSettings": "Última acción el {{lastAction}} • Configuración", + "lastUpdated": "Última actualización: {{date}}", + "leastActive": "Menos activo", + "loadingMetrics": "Cargando métricas", + "maliciousDeflected": "Maliciosas/Desviadas (403)", + "mediaBandwidth": "Ancho de banda de archivos multimedia", + "messageButton": "Mensaje", + "metrics": "Métricas", + "metricsLoadError": "Ocurrió un error al cargar las métricas: {{message}}", + "missingMetaTitleZuid": "{{zuid}} (Falta el título meta)", + "missingMetaTitleZUID": "{{zuid}} (Falta el título meta)", + "modelTypeBlockVariant": "Variante de bloque", + "modelTypeHeadlessDataItem": "Elemento de datos Headless", + "modelTypeMultiPageItem": "Elemento de páginas múltiples", + "modelTypeSinglePageItem": "Elemento de página única", + "modified": "Modificado", + "mostActive": "Más activo", + "mostRecent": "Más reciente", + "mostRecentlyActive": "Activo más recientemente", + "noInsightsFound": "No se encontraron análisis", + "noLogsFound": "No se encontraron registros", + "noResourcesFound": "No se encontraron recursos", + "oldestFirst": "Más antiguos primero", + "other": "Otros", + "pageRedirects": "Redirecciones de página (301)", + "pageRequests": "Solicitudes de página", + "past30Days": "Últimos 30 días", + "past7Days": "Últimos 7 días", + "pastDay": "Día anterior", + "pastDayWeek": "Semana del día anterior", + "platformRequestBreakdown": "Desglose de solicitudes de la plataforma (Total)", + "published": "Publicado", + "publishes": "Publicaciones", + "redirectUrl": "URL de redirección", + "request": "Solicitud", + "requests": "Solicitudes", + "resources": "Recursos", + "resourcesImpacted": "Recursos afectados", + "scheduled": "Programado", + "selectDateRange": "Seleccionar rango de fechas", + "settings": "Configuración", + "successfulMediaRequests": "Solicitudes multimedia correctas", + "successfulPageLoads": "Cargas de página correctas (200)", + "tabInsights": "Análisis", + "tabResources": "Recursos", + "tabTimeline": "Cronología", + "tabUsers": "Usuarios", + "top10ActiveUsers": "Top 10 usuarios más activos", + "top301Redirects": "Principales redirecciones 301", + "topFileNotFound": "Principales archivos no encontrados (404)", + "topMaliciousDeflected": "Principales solicitudes maliciosas / desviadas", + "topRequestedMedia": "Archivos multimedia más solicitados", + "topRequestedPages": "Páginas más solicitadas", + "totalBandwidth": "Ancho de banda total", + "totalRequests": "Total de solicitudes", + "totalUsageBreakdown": "Desglose del uso total", + "unknownUser": "Usuario desconocido", + "unpublished": "Despublicado", + "url": "URL", + "usageReport": "Informe de uso", + "usageReportFor": "Informe de uso de {{timePeriod}} {{unit}} : {{startDisplay}} - {{endDisplay}}", + "userAvatar": "Avatar de {{name}}", + "userAvatarAlt": "Avatar de {{firstName}} {{lastName}}", + "userEmailCopied": "Correo electrónico del usuario copiado al portapapeles", + "userListItemSecondary": "{{roleName}} • {{actionCount}} acciones • Última acción el {{lastAction}}", + "userRole": "Rol de usuario", + "viewAuditTrailReport": "Ver informe de pista de auditoría" +} diff --git a/public/locales/es-ES/schema.json b/public/locales/es-ES/schema.json new file mode 100644 index 0000000000..31b7dd4b89 --- /dev/null +++ b/public/locales/es-ES/schema.json @@ -0,0 +1,774 @@ +{ + "activityDetails": "Detalles de actividad", + "activityDetailsSubtitle": "Conoce cuándo se creó y actualizó el modelo y por quién", + "addAnotherField": "Añadir otro campo", + "addAnotherFieldToModel": "Añadir otro campo a {{modelLabel}}", + "addField": "Añadir campo", + "addFieldsDescription": "Define los diferentes campos que deben formar parte de este modelo.", + "addFieldsHeading": "Añadir campos", + "addFieldTitle": "Añadir campo {{name}}", + "addFieldToLabel": "Añadir campo a {{label}}", + "addFieldToName": "Añadir campo a {{name}}", + "addOption": "Añadir opción", + "advanced": "Avanzado", + "allModels": "Todos los modelos", + "allModelsHeading": "Todos los modelos", + "apiAccessDescription": "Zesty ofrece múltiples APIs para acceder a este contenido, cada una con ventajas únicas. Selecciona la que mejor se adapte a tus necesidades.", + "apiAccessOptions": "Opciones de acceso a la API", + "apiBackendCodingDescription": "La API REST de Zesty otorga acceso completo a los comandos Crear, Leer, Actualizar, Eliminar y Publicar. Se puede acceder a la API a través de llamadas directas a la API o desde nuestro SDK de Node.", + "apiBestUsedFor": "Ideal para", + "apiCustomEndpointsDescription": "Construye cualquier tipo de dato (JSON, XML, HTML, etc.) y cualquier nivel de hidratación con Parsley y Webengine de Zesty.io.", + "apiGraphqlDescription": "Endpoints de objetos planos ideales para alimentar servidores GraphQL. Solo accesible recorriendo los datos en el endpoint GQL del modelo.", + "apiLabelBackendCoding": "Programación de back-end", + "apiLabelCustomEndpoints": "Endpoints personalizados", + "apiLabelGraphql": "GraphQL", + "apiLabelQuickAccess": "Acceso rápido", + "apiLabelSiteGenerators": "Generadores de sitios", + "apiLabelVisualLayout": "Diseño visual", + "apiParsleyReferenceId": "ID de referencia API/Parsley", + "apiParsleyReferenceIdTooltip": "ID usado para acceder a este modelo a través de nuestra API o Parsley", + "apiQuickAccessDescription": "da acceso a endpoints JSON completos de elementos de modelos o elementos individuales con todo tipo de información. Los datos requieren hidratación manual.", + "apiSiteGeneratorsDescription": "Zesty convierte cada URL a JSON con relaciones hidratadas e información de navegación. Cada elemento de contenido añadido a este modelo tiene acceso a URLs JSON hidratadas.", + "apiTagReadAndWrite": "Lectura y escritura", + "apiTagReadOnly": "Solo lectura", + "apiUrlLabel": "URL de la API", + "apiUseApplicationsWithRouting": "Aplicaciones con enrutamiento", + "apiUseAppsOrHeadlessLayouts": "Aplicaciones o diseños headless", + "apiUseAutomation": "Automatización", + "apiUseAutomationDesign": "Diseño de automatización", + "apiUseContentExperiences": "Experiencias de contenido", + "apiUseCustomApps": "Aplicaciones personalizadas", + "apiUseCustomContentHydration": "Hidratación de contenido personalizado", + "apiUseFullyPaintedHtmlViews": "Vistas HTML completamente renderizadas", + "apiUseGraphQlImplementations": "Implementaciones GraphQL", + "apiUseHeadlessApplets": "Applets headless", + "apiUseHeadlessWebDevelopment": "Desarrollo web headless", + "apiUseMiddleware": "Middleware", + "apiUseMobileApplications": "Aplicaciones móviles", + "apiUseSearch": "Búsqueda", + "apiUseUserGeneratedContent": "Contenido generado por usuarios", + "apiVisualLayoutDescription": "El diseño visual es accesible desde HTML renderizado o JSON estructurado desde el endpoint toJSON.", + "blockGroup": "Grupo de bloques", + "booleanOptionsLabel": "Opciones booleanas", + "cannotCreateModelTitle": "No se puede crear el modelo", + "characterLimitDescription": "Establece un número mínimo y/o máximo permitido de caracteres", + "characterLimitLabel": "Limitar recuento de caracteres", + "characterLimitMaxLabel": "Recuento máximo de caracteres (con espacios)", + "characterLimitMinLabel": "Recuento mínimo de caracteres (con espacios)", + "clearFilters": "Limpiar filtros", + "comingSoon": "Próximamente", + "commonFieldDescriptionLabel": "Descripción", + "commonFieldDescriptionTooltip": "Aparece debajo de la etiqueta de pantalla. Úselo para proporcionar instrucciones a los escritores de contenido y usuarios de API.", + "commonFieldLabelLabel": "Etiqueta de pantalla", + "commonFieldLabelTooltip": "El nombre de pantalla del campo que se ve en el esquema.", + "commonFieldListLabel": "Agregar como columna en la lista de tabla", + "commonFieldListSubLabel": "Muestra el campo como una columna en la tabla en la vista de contenido", + "commonFieldNameLabel": "ID de código API / Parsley", + "commonFieldNameTooltip": "Esto aparecerá en las respuestas de la API", + "commonFieldRequiredLabel": "Campo requerido", + "commonFieldRequiredSubLabel": "Asegura que un elemento no pueda crearse si el campo está vacío", + "commonFieldTooltipLabel": "Información sobre herramientas", + "commonFieldTooltipTooltip": "Información sobre herramientas mostrada a los editores de contenido.", + "commonUses": "Usos comunes", + "copyEmail": "Copiar correo electrónico", + "copyFieldZuid": "Copiar ZUID del campo", + "copyFieldZUID": "Copiar ZUID del campo", + "copyModelZUID": "Copiar ZUID del modelo", + "createdOn": "Creado el", + "createModel": "Crear modelo", + "createModelButton": "Crear modelo", + "createModelTitle": "Crear {{modelName}}", + "currencyFieldLabel": "Moneda", + "currencyFieldPlaceholder": "Seleccionar una moneda", + "currencyFieldTooltip": "El código de moneda, símbolo y bandera seleccionados se mostrarán para este campo en el elemento de contenido y se puede acceder a través de la configuración del campo a través de la API.", + "currencyFlagAlt": "Bandera de {{countryCode}}", + "deactivatedFields": "Campos desactivados", + "deactivatedFieldsDescription": "Estos campos se pueden reactivar en cualquier momento si deseas recuperarlos en el modelo de contenido.", + "deactivateField": "Desactivar campo", + "deactivatingField": "Desactivando campo", + "defaultValue": "Valor predeterminado", + "defaultValueDescription": "Establece un valor predefinido para este campo", + "defaultValueHelperText": "Establece un valor predefinido para este campo", + "defaultValueLabel": "Valor predeterminado", + "deleteModel": "Eliminar modelo", + "deleteModelCannotDeleteNotify": "No se puede eliminar el modelo: {{modelLabel}}", + "deleteModelConfirmLabel": "Confirma escribiendo «{{modelLabel}}» a continuación.", + "deleteModelFailedNotify": "Error al eliminar el modelo", + "deleteModelTitle": "¿Eliminar modelo?", + "deleteModelWarning": "Eliminar el modelo «{{modelLabel}}» también eliminará todos sus elementos de contenido. Esto no se puede deshacer.", + "descriptionLabel": "Descripción", + "descriptionPlaceholder": "¿Para qué se va a usar este modelo?", + "descriptionTooltip": "Muestra el propósito del modelo para ayudar a los redactores de contenido", + "displayNameLabel": "Nombre de visualización", + "displayNamePlaceholder": "p.ej. Página de inicio, Página Acerca de, Página de contacto, etc.", + "displayNameTooltip": "Nombre que se muestra a los editores de contenido", + "dropdownOptionsLabel": "Opciones desplegables", + "duplicate": "Duplicar", + "duplicateModel": "Duplicar modelo", + "duplicateModelAlertBodyRich": "Estás a punto de duplicar el modelo {{label}} con todos sus campos existentes. No se duplicará ningún elemento de contenido.", + "duplicateModelDescriptionLabel": "Descripción", + "duplicateModelDescriptionPlaceholder": "¿Para qué se va a usar este modelo?", + "duplicateModelDisplayNameLabel": "Nombre de visualización", + "duplicateModelDisplayNamePlaceholder": "Duplicado de «{{label}}»", + "duplicateModelFailed": "Error al duplicar el modelo", + "duplicateModelListedDescription": "Los modelos listados tienen sus elementos de contenido disponibles para llamadas de navegación programática.", + "duplicateModelListedLabel": "Listar este modelo", + "duplicateModelParentLabel": "Modelo padre", + "duplicateModelParentPlaceholder": "Seleccionar", + "duplicateModelReferenceIdLabel": "ID de referencia", + "duplicateModelReferenceIdPlaceholder": "Generado automáticamente a partir del nombre de visualización", + "duplicateModelSubtitle": "Como modelo de tipo {{type}}", + "duplicateModelTitle": "Duplicar modelo {{label}}", + "editField": "Editar campo", + "editFieldTitle": "Editar {{label}}", + "editInCode": "Editar en código", + "editTemplateFile": "Editar archivo de plantilla", + "emptyStateBody": "Los modelos definen la estructura de un elemento de contenido como una página de inicio o un artículo, similar a los ejemplos de modelos que ves a la derecha.", + "emptyStateHeading": "Empecemos creando modelos", + "emptyStateLinkBestPractices": "Aprende las mejores prácticas para crear modelos", + "emptyStateLinkBuildingModels": "Lee nuestra guía sobre la construcción de modelos", + "endpointDevLabel": "Desarrollo (última versión)", + "endpointProduction": "Producción", + "enterLabel": "Introducir etiqueta", + "enterValue": "Introducir valor", + "errorFieldIsRequired": "{{label}} es obligatorio", + "errorFieldReferenceExists": "Ya existe un campo con esta referencia API/Parsley", + "errorOptionValueExists": "Ya existe una opción con este valor", + "errorShortenToLess": "Acorta a menos de {{maxLength}} caracteres ({{currentLength}}/{{maxLength}})", + "errorSystemReservedFieldName": "«{{value}}» es un nombre de campo reservado del sistema", + "extensionPresetAudios": "Audios", + "extensionPresetDocuments": "Documentos", + "extensionPresetImages": "Imágenes", + "extensionPresetPresentations": "Presentaciones", + "extensionPresetSpreadsheets": "Hojas de cálculo", + "extensionPresetVideos": "Vídeos", + "failedCreateField": "Error al crear el campo", + "failedCreateModel": "Error al crear el modelo", + "failedUpdateField": "Error al actualizar el campo", + "faqBadge": "FAQ", + "fieldCategoryAdvanced": "Avanzado", + "fieldCategoryDateAndTime": "Fecha y hora", + "fieldCategoryMedia": "Medios", + "fieldCategoryNumeric": "Numérico", + "fieldCategoryRelationship": "Relación", + "fieldCategoryText": "Texto", + "fieldDeactivated": "El campo «{{label}}» está desactivado", + "fieldDescriptionBodyText": "Un texto detallado que proporciona contexto o instrucciones para el formulario.", + "fieldDescriptionButtonContainerSubText": "Texto de apoyo debajo de los botones de llamada a la acción en la sección izquierda.", + "fieldDescriptionCompanyLogo": "El logotipo de la empresa que representa la persona.", + "fieldDescriptionCompanyName": "El nombre de la empresa que representa la persona.", + "fieldDescriptionCtaButton1TextLeftSection": "El texto del primer botón de llamada a la acción en la sección izquierda.", + "fieldDescriptionCtaButton1TextNoSection": "El texto del primer botón de llamada a la acción", + "fieldDescriptionCtaButton1Url": "La URL a la que enlaza el primer botón de llamada a la acción.", + "fieldDescriptionCtaButton2TextLeftSection": "El texto del segundo botón de llamada a la acción en la sección izquierda.", + "fieldDescriptionCtaButton2Url": "La URL a la que enlaza el segundo botón de llamada a la acción.", + "fieldDescriptionCtaButtonTextFeatureSection": "El texto del botón de llamada a la acción en la sección de funciones.", + "fieldDescriptionCtaButtonUrl": "La URL a la que enlaza el botón de llamada a la acción.", + "fieldDescriptionFeatureIntroLink": "La URL enlazada al texto introductorio de la función.", + "fieldDescriptionFeatureIntroText": "Un texto introductorio breve para la sección de funciones.", + "fieldDescriptionFormCtaButtonText": "El texto del botón de llamada a la acción en el formulario.", + "fieldDescriptionFormHeaderText": "Un subencabezado o introducción para el formulario de contacto.", + "fieldDescriptionHeroImageFeatureSection": "La imagen mostrada junto a la sección de funciones.", + "fieldDescriptionHeroImageHeroSection": "La imagen mostrada en la sección hero.", + "fieldDescriptionHeroImageRight": "La imagen mostrada en el lado derecho de la sección hero.", + "fieldDescriptionJobTitle": "El cargo de la persona que proporciona la cita.", + "fieldDescriptionNameInput": "Una etiqueta para el campo de entrada de nombre.", + "fieldDescriptionPersonEmail": "La dirección de correo electrónico de la persona de contacto principal.", + "fieldDescriptionPersonImage": "La imagen de la persona que proporciona la cita.", + "fieldDescriptionPersonName": "El nombre de la persona de contacto principal.", + "fieldDescriptionPersonNameTestimonial": "El nombre de la persona que proporciona la cita.", + "fieldDescriptionPersonPhoto": "Una foto de la persona de contacto principal.", + "fieldDescriptionPersonTitle": "El título o cargo de la persona de contacto principal.", + "fieldDescriptionPosition": "La posición de la persona en su empresa.", + "fieldDescriptionQuote": "El testimonio o cita proporcionado por una persona.", + "fieldDescriptionStarRatingNumber": "Una valoración numérica mostrada en la sección hero.", + "fieldDescriptionStarRatingSubText": "Detalles adicionales sobre la valoración con estrellas.", + "fieldDescriptionStarRatingTitle": "Un título que describe la valoración con estrellas.", + "fieldDescriptionSubTitleFeatureSection": "El texto de apoyo que proporciona más detalles sobre la función.", + "fieldDescriptionSubTitleHeroSection": "El texto de apoyo mostrado debajo del título en la sección hero.", + "fieldDescriptionSubTitleLeftSection": "El texto de apoyo mostrado debajo del título en la sección izquierda.", + "fieldDescriptionTitle": "El encabezado principal mostrado en la sección izquierda.", + "fieldDescriptionTitleContactForm": "El encabezado principal del formulario de contacto.", + "fieldDescriptionTitleFeatureSection": "El encabezado principal de la sección de funciones.", + "fieldDescriptionTitleHeroSection": "El encabezado principal mostrado en la sección hero.", + "fieldDescriptionTopCtaButtonText": "El texto del botón de llamada a la acción superior.", + "fieldDescriptionTopCtaButtonUrl": "La URL a la que enlaza el botón de llamada a la acción superior.", + "fieldFormTabDetails": "Detalles", + "fieldFormTabLearn": "Aprender", + "fieldFormTabRepeaterFields": "Campos", + "fieldFormTabRules": "Reglas", + "fieldLabelBodyText": "Texto del cuerpo", + "fieldLabelButtonContainerSubText": "Subtexto del contenedor de botones", + "fieldLabelCompanyLogo": "Logotipo de la empresa", + "fieldLabelCompanyName": "Nombre de la empresa", + "fieldLabelCtaButton1Text": "Texto del botón CTA 1", + "fieldLabelCtaButton1Url": "URL del botón CTA 1", + "fieldLabelCtaButton2Text": "Texto del botón CTA 2", + "fieldLabelCtaButton2Url": "URL del botón CTA 2", + "fieldLabelCtaButtonText": "Texto del botón CTA", + "fieldLabelCtaButtonUrl": "URL del botón CTA", + "fieldLabelFeatureIntroLink": "Enlace de introducción de la función", + "fieldLabelFeatureIntroText": "Texto de introducción de la función", + "fieldLabelFormCtaButtonText": "Texto del botón CTA del formulario", + "fieldLabelFormHeaderText": "Texto de encabezado del formulario", + "fieldLabelHeroImage": "Imagen hero", + "fieldLabelJobTitle": "Cargo", + "fieldLabelPersonEmail": "Correo electrónico de la persona", + "fieldLabelPersonImage": "Imagen de la persona", + "fieldLabelPersonName": "Nombre de la persona", + "fieldLabelPersonPhoto": "Foto de la persona", + "fieldLabelPersonTitle": "Título de la persona", + "fieldLabelPosition": "Posición", + "fieldLabelQuote": "Cita", + "fieldLabelStarRatingNumber": "Número de valoración con estrellas", + "fieldLabelStarRatingSubText": "Subtexto de valoración con estrellas", + "fieldLabelStarRatingTitle": "Título de valoración con estrellas", + "fieldLabelSubTitle": "Subtítulo", + "fieldLabelTitle": "Título", + "fieldLabelTopCtaButtonText": "Texto del botón CTA superior", + "fieldLabelTopCtaButtonUrl": "URL del botón CTA superior", + "fieldListSearchPlaceholder": "Buscar campos", + "fieldReactivated": "El campo «{{label}}» está reactivado", + "fields": "Campos", + "fieldToDisplayLabel": "Campo a mostrar", + "fieldToDisplayPlaceholder": "Seleccionar un campo", + "fieldTypeBlockSelectorCommonUse1": "Sección de pie de página", + "fieldTypeBlockSelectorCommonUse2": "Bloque al final del artículo", + "fieldTypeBlockSelectorCommonUse3": "Formularios", + "fieldTypeBlockSelectorDescription": "El campo Selector de Bloque permite a un usuario seleccionar una variante única de cualquier modelo de bloque que desee ver renderizado en su página.", + "fieldTypeBlockSelectorName": "Selector de Bloque", + "fieldTypeBlockSelectorProTip": "Son ideales cuando quieres usar diferentes bloques finales al final de diferentes páginas del mismo modelo", + "fieldTypeBlockSelectorShortDesc": "Enlazar a una variante de un modelo de bloque", + "fieldTypeBlockSelectorSubHeader": "Enlazar a una variante de un modelo de bloque", + "fieldTypeBooleanCommonUse1": "Para destacar entradas de blog o productos", + "fieldTypeBooleanCommonUse2": "Descuentos en productos de comercio electrónico", + "fieldTypeBooleanCommonUse3": "Para destacar insignias como «Autor Pro»", + "fieldTypeBooleanCommonUse4": "Para ocultar elementos", + "fieldTypeBooleanDescription": "Este campo es para cuando quieres que un campo solo tenga dos valores posibles. P.ej. sí o no, verdadero o falso, destacado o no destacado, etc.", + "fieldTypeBooleanName": "Booleano", + "fieldTypeBooleanProTip": "Usa campos booleanos para filtrar los elementos que quieres mostrar en una colección de elementos.", + "fieldTypeBooleanShortDesc": "Verdadero o falso", + "fieldTypeBooleanSubHeader": "Usado para establecer valores verdadero o falso", + "fieldTypeColorCommonUse1": "Colores de fondo", + "fieldTypeColorCommonUse2": "Colores de borde", + "fieldTypeColorCommonUse3": "Colores de fuente", + "fieldTypeColorCommonUse4": "Cambiar colores de etiquetas de categorías", + "fieldTypeColorDescription": "Este campo es perfecto para cuando quieres dar estilo a diferentes elementos de tu página como colores de fondo, colores de texto, bordes, etc. Los colaboradores dispondrán de un selector de color para elegir el color que prefieran.", + "fieldTypeColorName": "Color", + "fieldTypeColorProTip": "Los selectores de color se pueden usar para destacar elementos de forma única y permitir a un usuario diferenciar fácilmente entre elementos.", + "fieldTypeColorShortDesc": "Colores de fondo, colores de fuente y más", + "fieldTypeColorSubHeader": "Usado para colores de fondo, colores de fuente y más", + "fieldTypeCurrencyCommonUse1": "Precio de coste de un producto o servicio", + "fieldTypeCurrencyCommonUse2": "Precio de venta de un producto o servicio", + "fieldTypeCurrencyDescription": "Este campo es para cuando quieres almacenar un coste, precio o saldo de cuenta.", + "fieldTypeCurrencyName": "Moneda", + "fieldTypeCurrencyProTip": "Usa campos de moneda en lugar de campos numéricos si quieres almacenar precios.", + "fieldTypeCurrencyShortDesc": "Perfecto para precios de productos", + "fieldTypeCurrencySubHeader": "Usado para almacenar costes, precios y saldos", + "fieldTypeDateCommonUse1": "Fechas de nacimiento", + "fieldTypeDateCommonUse2": "Aniversarios", + "fieldTypeDateCommonUse3": "Fechas históricas", + "fieldTypeDateCommonUse4": "Fechas de lanzamiento", + "fieldTypeDateDescription": "Este campo es para cuando quieres que la entrada sea una fecha pasada, presente o futura. Puedes personalizar si un usuario puede introducir un día, mes o año o los 3.\n\n Zesty registra automáticamente las fechas y horas de creación, publicación y modificación, por lo que no es necesario crear campos adicionales para estos.", + "fieldTypeDateName": "Fecha", + "fieldTypeDateProTip": "Si quieres añadir una hora a tu fecha, usa el campo de fecha y hora.", + "fieldTypeDateShortDesc": "Perfecto para cumpleaños, fechas de lanzamiento, eventos, etc.", + "fieldTypeDateSubHeader": "Usado para cumpleaños, fechas de lanzamiento, eventos, etc.", + "fieldTypeDateTimeCommonUse1": "Horas de inicio y fin de eventos", + "fieldTypeDateTimeCommonUse2": "Hora de envío", + "fieldTypeDateTimeCommonUse3": "Plazos", + "fieldTypeDateTimeDescription": "Este campo es para cuando quieres que la entrada sea una fecha y hora. Puedes personalizar si un usuario puede introducir una hora, día, mes o año o los 4.\n\n Zesty registra automáticamente las fechas y horas de creación, publicación y modificación, por lo que no es necesario crear campos adicionales para estos.", + "fieldTypeDateTimeName": "Fecha y Hora", + "fieldTypeDateTimeProTip": "Si solo quieres tener una fecha, usa el campo de fecha.", + "fieldTypeDateTimeShortDesc": "Seguimiento de fechas junto con horas específicas", + "fieldTypeDateTimeSubHeader": "Usado para seguimiento de fechas junto con horas específicas", + "fieldTypeDropdownCommonUse1": "Géneros", + "fieldTypeDropdownCommonUse2": "Tallas predefinidas", + "fieldTypeDropdownCommonUse3": "Idiomas", + "fieldTypeDropdownCommonUse4": "Departamentos de empresa", + "fieldTypeDropdownDescription": "Este campo es para cuando quieres que un usuario elija un valor de un menú desplegable de opciones predefinidas escritas por ti. Puedes definir estos valores en la configuración del campo.", + "fieldTypeDropdownName": "Desplegable", + "fieldTypeDropdownProTip": "Los valores que añades a un campo desplegable solo estarán disponibles para el modelo en el que se añade el campo. Si necesitas valores reutilizables y accesibles en múltiples modelos, crea un modelo separado para ello y luego un campo de relación de uno o varios elementos hacia él.", + "fieldTypeDropdownShortDesc": "Seleccionar de una lista de valores", + "fieldTypeDropdownSubHeader": "Usado para permitir a un usuario seleccionar de una lista de valores", + "fieldTypeExternalUrlCommonUse1": "Enlazar a sitios afiliados (p.ej. Amazon)", + "fieldTypeExternalUrlCommonUse2": "Enlazar a páginas de redes sociales en Facebook, Instagram, etc.", + "fieldTypeExternalUrlCommonUse3": "Enlazar a servicios de terceros como Eventbrite para eventos o Doordash para pedidos", + "fieldTypeExternalUrlDescription": "Este campo es ideal para almacenar URLs de páginas en sitios web externos. Estos enlaces pueden ser mostrados y clicados por los usuarios.", + "fieldTypeExternalUrlName": "URL Externa", + "fieldTypeExternalUrlProTip": "También puedes añadir enlaces en campos de texto enriquecido.", + "fieldTypeExternalUrlShortDesc": "Enlazar a un sitio web externo", + "fieldTypeExternalUrlSubHeader": "Usa este campo para enlazar a un sitio web externo", + "fieldTypeIntegrationCommonUse1": "Estadísticas - Obtener estadísticas externas", + "fieldTypeIntegrationCommonUse2": "Integración de terceros - Obtener detalles de una aplicación externa", + "fieldTypeIntegrationCommonUse3": "Formularios - Importar envíos de formularios externos", + "fieldTypeIntegrationCommonUse4": "Importar contenido de otra instancia de Zesty", + "fieldTypeIntegrationCommonUse5": "CMS externo - Mostrar contenido de un CMS externo", + "fieldTypeIntegrationCommonUse6": "Hojas de cálculo - Extraer datos de hojas de cálculo", + "fieldTypeIntegrationDescription": "Este campo permite a los usuarios obtener datos de una API JSON, seleccionar entradas y luego añadirlas a un elemento de contenido. Los datos permanecen estáticos hasta que se vuelven a seleccionar, garantizando actualizaciones controladas.", + "fieldTypeIntegrationName": "Integración", + "fieldTypeIntegrationProTip": "Los datos se almacenan como un objeto JSON y se pueden acceder sin interfaz o con Parsley para renderizado dinámico en plantillas.", + "fieldTypeIntegrationShortDesc": "Obtener y almacenar datos de APIs", + "fieldTypeIntegrationSubHeader": "Obtener y almacenar datos de APIs", + "fieldTypeInternalLinkCommonUse1": "Enlazar a productos internos", + "fieldTypeInternalLinkCommonUse2": "Enlazar a artículos internos", + "fieldTypeInternalLinkDescription": "Los campos de Enlace Interno permiten seleccionar un elemento de instancia interno de cualquier esquema. Esto puede ser útil para que los autores puedan relacionar un elemento a través de una instancia.", + "fieldTypeInternalLinkName": "Enlace Interno", + "fieldTypeInternalLinkProTip": "Puedes usar campos de URL Externa si quieres enlazar a sitios web externos.", + "fieldTypeInternalLinkShortDesc": "Enlazar a un elemento de contenido interno", + "fieldTypeInternalLinkSubHeader": "Usa este campo para enlazar a un elemento de contenido interno", + "fieldTypeMarkdownCommonUse1": "Entradas de blog", + "fieldTypeMarkdownCommonUse2": "Artículos", + "fieldTypeMarkdownCommonUse3": "Guías", + "fieldTypeMarkdownCommonUse4": "Listas", + "fieldTypeMarkdownCommonUse5": "Descripciones de eventos", + "fieldTypeMarkdownDescription": "Este campo proporciona a los colaboradores un editor con sintaxis Markdown estilo GitHub para dar estilo y estructura al contenido.", + "fieldTypeMarkdownName": "Markdown", + "fieldTypeMarkdownProTip": "Este campo es ideal cuando quieres que los colaboradores puedan aplicar cualquier estilo y estructura al texto.", + "fieldTypeMarkdownShortDesc": "Marcado ligero para formatear texto", + "fieldTypeMarkdownSubHeader": "Marcado ligero para formatear texto", + "fieldTypeMediaCommonUse1": "Imágenes de portada de artículos", + "fieldTypeMediaCommonUse2": "Fotos de perfil de autores o miembros del equipo", + "fieldTypeMediaCommonUse3": "Galerías de productos", + "fieldTypeMediaCommonUse4": "Ilustraciones e iconos", + "fieldTypeMediaCommonUse5": "Vídeos de demos, tutoriales, incorporación a la empresa", + "fieldTypeMediaCommonUse6": "Imágenes de fondo", + "fieldTypeMediaCommonUse7": "PDFs de documentos técnicos, ebooks, menús, mapas y más", + "fieldTypeMediaCommonUse8": "Presentaciones de PowerPoint", + "fieldTypeMediaDescription": "Este campo permite a un usuario añadir uno o más archivos multimedia como una imagen, vídeo, documento, presentación, etc. Puedes establecer el número máximo de archivos que un usuario puede subir y el tamaño máximo de cada archivo.", + "fieldTypeMediaName": "Medios", + "fieldTypeMediaProTip": "También puedes añadir medios en línea en campos de texto enriquecido.", + "fieldTypeMediaShortDesc": "Imágenes, vídeos, PDFs y otros archivos", + "fieldTypeMediaSubHeader": "Usado para imágenes, vídeos, PDFs y otros archivos", + "fieldTypeMultiLineTextCommonUse1": "Subencabezados", + "fieldTypeMultiLineTextCommonUse2": "Resúmenes de artículos", + "fieldTypeMultiLineTextCommonUse3": "Descripciones de productos", + "fieldTypeMultiLineTextCommonUse4": "Descripciones de categorías", + "fieldTypeMultiLineTextCommonUse5": "Biografías de autores", + "fieldTypeMultiLineTextDescription": "El campo de Texto Multilínea es ideal para contenido de texto largo que no necesita formato especial ni tiene enlaces o medios.", + "fieldTypeMultiLineTextName": "Texto Multilínea", + "fieldTypeMultiLineTextProTip": "Este campo es ideal cuando quieres asegurarte de que los colaboradores no puedan aplicar ningún estilo al texto.", + "fieldTypeMultiLineTextShortDesc": "Descripciones, resúmenes y extractos", + "fieldTypeMultiLineTextSubHeader": "Usado para descripciones, resúmenes y extractos", + "fieldTypeNumberCommonUse1": "Cantidad de productos en inventario", + "fieldTypeNumberCommonUse2": "Rankings", + "fieldTypeNumberCommonUse3": "Valoraciones", + "fieldTypeNumberCommonUse4": "Peso", + "fieldTypeNumberCommonUse5": "Altura", + "fieldTypeNumberDescription": "Este campo es para cuando quieres que la entrada sea un número.", + "fieldTypeNumberName": "Número", + "fieldTypeNumberProTip": "Los campos numéricos pueden contener tanto números enteros como decimales.", + "fieldTypeNumberShortDesc": "Números enteros y decimales", + "fieldTypeNumberSubHeader": "Usado para cantidad, edad, valoraciones, etc.", + "fieldTypeOneToManyCommonUse1": "Para enlazar un artículo a múltiples autores, etiquetas o categorías", + "fieldTypeOneToManyCommonUse2": "Para enlazar un autor a múltiples servicios", + "fieldTypeOneToManyDescription": "Este campo te permite conectar tu modelo a otro modelo y conectarte a múltiples elementos en lugar de uno.", + "fieldTypeOneToManyName": "Relación Uno a Varios", + "fieldTypeOneToManyProTip": "Es ideal usar este campo cuando te encuentras a ti mismo o a tu equipo escribiendo repetidamente el mismo conjunto de entradas, como nombres de autores. Por ejemplo, tiene sentido crear un modelo de Autores y conectarlo, ya que de lo contrario tendrías que escribirlo repetidamente para cada artículo.", + "fieldTypeOneToManyShortDesc": "Enlazar a múltiples elementos de contenido de un modelo", + "fieldTypeOneToManySubHeader": "Usa este campo para enlazar a múltiples elementos de contenido de un modelo", + "fieldTypeOneToOneCommonUse1": "Para enlazar un artículo a un único autor o categoría", + "fieldTypeOneToOneCommonUse2": "Para enlazar un empleado a un único servicio", + "fieldTypeOneToOneDescription": "Este campo es perfecto para conectar tu modelo a otro modelo. Por ejemplo, enlazar un blog a una categoría o a un autor.", + "fieldTypeOneToOneName": "Relación Uno a Uno", + "fieldTypeOneToOneProTip": "Es ideal usar este campo cuando te encuentras a ti mismo o a tu equipo escribiendo repetidamente el mismo conjunto de entradas, como nombres de autores. Por ejemplo, tiene sentido crear un modelo de Autores y conectarlo, ya que de lo contrario tendrías que escribirlo repetidamente para cada artículo.", + "fieldTypeOneToOneShortDesc": "Enlazar a un elemento de contenido de un modelo", + "fieldTypeOneToOneSubHeader": "Usa este campo para enlazar a un elemento de contenido de un modelo", + "fieldTypeRepeaterCommonUse1": "Diapositivas", + "fieldTypeRepeaterCommonUse2": "Testimonios", + "fieldTypeRepeaterCommonUse3": "Recetas", + "fieldTypeRepeaterCommonUse4": "Horarios de eventos", + "fieldTypeRepeaterDescription": "El Campo Repetidor te permite crear un grupo de campos para contenido repetitivo. Útil para múltiples elementos, como diapositivas, miembros del equipo o preguntas frecuentes.", + "fieldTypeRepeaterName": "Repetidor", + "fieldTypeRepeaterProTip": "Usa un Campo Repetidor para gestionar listas o secciones con una estructura compartida pero contenido único, como recetas o testimonios.", + "fieldTypeRepeaterShortDesc": "Una lista repetida de campos agrupados", + "fieldTypeRepeaterSubHeader": "Usado para grupos de campos estáticos", + "fieldTypeSingleLineTextCommonUse1": "Títulos de artículos", + "fieldTypeSingleLineTextCommonUse2": "Nombres de autores", + "fieldTypeSingleLineTextCommonUse3": "Nombres de eventos", + "fieldTypeSingleLineTextCommonUse4": "Etiquetas de categorías", + "fieldTypeSingleLineTextCommonUse5": "Encabezados", + "fieldTypeSingleLineTextDescription": "El campo \"Texto de Una Línea\" es ideal para contenido de texto corto que no necesita formato especial ni tiene enlaces o medios.", + "fieldTypeSingleLineTextName": "Texto de Una Línea", + "fieldTypeSingleLineTextProTip": "Este campo es ideal cuando quieres asegurarte de que los colaboradores no puedan aplicar ningún estilo al texto.", + "fieldTypeSingleLineTextShortDesc": "Títulos, nombres y encabezados", + "fieldTypeSingleLineTextSubHeader": "Usado para títulos, nombres y encabezados", + "fieldTypeSortOrderCommonUse1": "Establecer el orden de los productos destacados", + "fieldTypeSortOrderCommonUse2": "Establecer el orden de las categorías", + "fieldTypeSortOrderCommonUse3": "Establecer el orden de los vídeos de un curso", + "fieldTypeSortOrderDescription": "Puede haber momentos en los que quieras ordenar datos, no por nombre o fecha, sino por un orden personalizado definido por el usuario. En tal escenario, puedes añadir un campo de orden de clasificación que te permite especificar el número de orden de cada elemento de contenido.", + "fieldTypeSortOrderName": "Orden de Clasificación", + "fieldTypeSortOrderProTip": "Puedes cambiar el número de ordenación predeterminado con los botones más y menos en la vista del elemento de contenido, así como en la vista de tabla.", + "fieldTypeSortOrderShortDesc": "Añadir orden a los elementos de contenido", + "fieldTypeSortOrderSubHeader": "Usado para añadir orden a los elementos de contenido", + "fieldTypeUuidCommonUse1": "ID de producto", + "fieldTypeUuidCommonUse2": "ID de inventario", + "fieldTypeUuidCommonUse3": "ID de empleado", + "fieldTypeUuidDescription": "El campo UUID crea una cadena alfanumérica única cuando se crea un elemento. Esta es una función útil para el seguimiento de análisis, gestión de inventario, gestión de usuarios, etc.", + "fieldTypeUuidName": "UUID", + "fieldTypeUuidProTip": "Los UUID son siempre únicos y no editables.", + "fieldTypeUuidShortDesc": "Genera identificadores alfanuméricos únicos e ineditables", + "fieldTypeUuidSubHeader": "Usado para establecer IDs únicos para cada elemento de contenido", + "fieldTypeWysiwygCommonUse1": "Entradas de blog", + "fieldTypeWysiwygCommonUse2": "Artículos", + "fieldTypeWysiwygCommonUse3": "Guías", + "fieldTypeWysiwygCommonUse4": "Listas", + "fieldTypeWysiwygCommonUse5": "Descripciones de eventos", + "fieldTypeWysiwygDescription": "Este campo es ideal para contenido de texto largo que tiene múltiples encabezados, párrafos y medios en línea como vídeos, imágenes o enlaces. También puedes aplicar formato de texto avanzado como negrita, cursiva y subrayado.", + "fieldTypeWysiwygName": "WYSIWYG", + "fieldTypeWysiwygProTip": "Este campo es ideal cuando quieres que los colaboradores puedan aplicar cualquier estilo y estructura al texto.", + "fieldTypeWysiwygShortDesc": "Contenido de texto largo con enlaces e imágenes como blogs", + "fieldTypeWysiwygSubHeader": "Contenido de texto largo con enlaces e imágenes como blogs", + "fieldValidationTitle": "Validación de campos, valores predeterminados y más", + "fileExtensionsErrorMessageLabel": "Mensaje de error de extensiones de archivo", + "fileExtensionsLabel": "Extensiones de archivo", + "folderDeletedError": "La carpeta a la que estaba bloqueado ha sido eliminada", + "formFieldApiCodeId": "ID de código API / Parsley", + "formFieldApiCodeIdTooltip": "Esto aparecerá en las respuestas de la API", + "formFieldApiUrl": "URL de API", + "formFieldBooleanOptions": "Opciones booleanas", + "formFieldCurrencyLabel": "Moneda", + "formFieldCurrencyPlaceholder": "Seleccionar una moneda", + "formFieldCurrencyTooltip": "El código de moneda, símbolo e indicador de país seleccionados se mostrarán para este campo en el elemento de contenido y se puede acceder a través de la configuración del campo mediante la API.", + "formFieldDefaultValue": "Valor predeterminado", + "formFieldDescriptionLabel": "Descripción", + "formFieldDescriptionTooltip": "Aparece debajo de la etiqueta de visualización. Úsala para proporcionar instrucciones a los redactores de contenido y usuarios de la API.", + "formFieldDisplayLabel": "Etiqueta de visualización", + "formFieldDisplayLabelTooltip": "El nombre de visualización del campo que se ve en el Esquema.", + "formFieldDropdownOptions": "Opciones del desplegable", + "formFieldFieldToDisplay": "Campo a mostrar", + "formFieldFieldToDisplayPlaceholder": "Seleccionar un campo", + "formFieldFileExtensions": "Extensiones de archivo", + "formFieldFileExtensionsErrorMessage": "Mensaje de error de extensiones de archivo", + "formFieldListLabel": "Añadir como columna en el listado de tabla", + "formFieldListSubLabel": "Muestra el campo como una columna en la tabla de la vista de contenido", + "formFieldMaxCharLimit": "Recuento máximo de caracteres (con espacios)", + "formFieldMaxValue": "Valor máximo", + "formFieldMediaItemLimit": "Límite de elementos multimedia", + "formFieldMediaItemLimitTooltip": "Establece el límite mínimo de archivos multimedia en 1. No puede ser menor.", + "formFieldMinCharLimit": "Recuento mínimo de caracteres (con espacios)", + "formFieldMinValue": "Valor mínimo", + "formFieldReferenceModel": "Modelo de referencia", + "formFieldReferenceModelPlaceholder": "Seleccionar un modelo", + "formFieldRegexMatchErrorMessage": "Mensaje de error de coincidencia regex", + "formFieldRegexMatchPattern": "Patrón de coincidencia regex", + "formFieldRegexRestrictErrorMessage": "Mensaje de error de restricción regex", + "formFieldRegexRestrictPattern": "Patrón de restricción regex", + "formFieldRequiredLabel": "Campo obligatorio", + "formFieldRequiredSubLabel": "Garantiza que no se puede crear un elemento si el campo está vacío", + "formFieldSelectFolder": "Seleccionar carpeta", + "formFieldTooltipLabel": "Información sobre herramientas", + "formFieldTooltipLabelTooltip": "Información sobre herramientas mostrada a los editores de contenido.", + "goToAllModels": "Ir a todos los modelos", + "headerTitle": "Esquema", + "headlessDescription": "Use Zesty como back end headless con tecnologías como NextJS, NuxtJS, React, Swift, Gatsby, Flutter, Angular, etc.", + "headlessModeDescription": "Esto es ideal para ingenieros que trabajan completamente fuera de Zesty.io con tecnologías como NextJS, NuxtJS o Angular. Cuando el modo headless está activado, todas las rutas se renderizan como notación de objetos JavaScript (JSON).\n\nNota: Este cambio se puede revertir más tarde desde Configuración general", + "headlessSwitcherSubtitle": "Actualmente estás en modo de motor web tradicional. Opta por cambiarte a Híbrido o Headless ahora. Siempre puedes cambiar esto desde Configuración general. Más información", + "headlessSwitcherTitle": "¿Quieres acceder a nuestras APIs headless?", + "howIsDataStored": "¿Cómo se almacenan los datos?", + "hybridDescription": "Híbrido es lo mejor de ambos mundos. Las páginas siguen renderizando HTML en sus rutas, pero también pueden renderizar JSON con un simple parámetro get.", + "hybridModeDescription": "Híbrido es lo mejor de ambos mundos. Las páginas siguen renderizando HTML en sus rutas, pero también pueden renderizar JSON con un simple parámetro get. Por ejemplo /sobre/ devolvería HTML, pero /sobre/?toJSON devolvería un objeto JSON completamente hidratado de la página acerca de.\n\nNota: Este cambio se puede revertir más tarde desde Configuración general", + "inputRangeHelperText": "Establece un valor mínimo y/o máximo permitido", + "inputRangeLabel": "Limitar rango de entrada", + "inputRangeMaximum": "Máximo", + "inputRangeMinimum": "Mínimo", + "integrationLimitItemRange": "Limitar rango de elementos", + "integrationLimitItemRangeDescription": "Establezca un número mínimo y/o máximo de elementos", + "lastUpdated": "Última actualización: {{date}}", + "lastUpdatedBy": "Última actualización por", + "lastUpdatedOn": "Última actualización el", + "learnBestPracticesModels": "Aprende las mejores prácticas para crear modelos", + "learnBlocksTutorial": "Aprende los conceptos básicos de los bloques con un tutorial", + "learnMore": "Más información", + "limitCharacterCount": "Limitar recuento de caracteres", + "limitCharacterCountDescription": "Especifica un número mínimo y/o máximo permitido de caracteres", + "listThisModel": "Listar este modelo", + "listThisModelDescription": "Los modelos listados tienen sus elementos de contenido disponibles para llamadas de navegación programática.", + "maxValueLabel": "Valor máximo", + "mediaItemLimitLabel": "Límite de elementos multimedia", + "mediaItemLimitTooltip": "Establezca el límite mínimo de archivos multimedia en 1. No puede ser menor.", + "mediaRulesAddPresetLabel": "Añadir", + "mediaRulesAllowMultipleLabel": "Permitir seleccionar múltiples archivos", + "mediaRulesAllowMultipleSubLabel": "Garantiza que se puedan cargar múltiples archivos en lugar del valor predeterminado de solo 1 archivo", + "mediaRulesCustomErrorMessageLabel": "Mensaje de error personalizado *", + "mediaRulesExtensionsInputLabel": "Extensiones *", + "mediaRulesFileExtensionsAllowedError": "Solo se permiten archivos con las siguientes extensiones: {{extensions}}", + "mediaRulesLimitFileTypesLabel": "Limitar tipos de archivo", + "mediaRulesLimitFileTypesSubLabel": "Garantiza que solo se puedan aceptar ciertos tipos de archivo", + "mediaRulesLockFolderLabel": "Bloquear a una carpeta", + "mediaRulesLockFolderSubLabel": "Garantiza que los archivos solo se puedan seleccionar de una carpeta específica", + "minValueLabel": "Valor mínimo", + "modelDescriptionLabel": "Descripción", + "modelDescriptionTooltip": "Muestra el propósito del modelo para ayudar a los redactores de contenido", + "modelDetailsSubtitle": "Ver y actualizar las propiedades principales de tu modelo", + "modelDetailsTitle": "Detalles del modelo", + "modelNameBlock": "Bloque", + "modelNameDataset": "Conjunto de datos", + "modelNameMultiPage": "Multipágina", + "modelNameSinglePage": "Página única", + "modelNameTooltip": "Nombre que se muestra a los editores de contenido", + "modelParent": "Modelo padre", + "modelsTableColumnContentItems": "Elementos de contenido", + "modelsTableColumnFields": "Campos", + "modelsTableColumnName": "Nombre", + "modelsTableColumnType": "Tipo de modelo", + "modelsTableColumnUpdated": "Actualizado", + "modelType": "Tipo de modelo", + "modelTypeBlockDescription": "Crea una colección de entradas sin URLs y con una plantilla de código", + "modelTypeBlockExamples": "p.ej. Heroes, Funciones, Testimonios, etc.", + "modelTypeBlockName": "Modelo de bloque", + "modelTypeDataset": "conjunto de datos", + "modelTypeDatasetDescription": "Crea una colección de entradas sin URLs ni plantillas de código", + "modelTypeDatasetExamples": "p.ej. Diapositivas, FAQs, Marcas, etc.", + "modelTypeDatasetName": "Modelo de conjunto de datos", + "modelTypeLabel": "Modelo {{modelType}}", + "modelTypeMultiPage": "multipágina", + "modelTypeMultiPageDescription": "Crea una colección de páginas con URLs únicas y una plantilla de código", + "modelTypeMultiPageExamples": "p.ej. Artículos, Autores, Productos, etc.", + "modelTypeMultiPageName": "Modelo multipágina", + "modelTypeSinglePage": "página única", + "modelTypeSinglePageDescription": "Crea páginas individuales con URLs únicas y una plantilla de código", + "modelTypeSinglePageExamples": "p.ej. Página de inicio, Página Acerca de, etc.", + "modelTypeSinglePageName": "Modelo de página única", + "needHelp": "¿Necesitas ayuda?", + "noActiveFieldsInModel": "No hay campos activos en este modelo.", + "noFilterResultsHeader": "No se encontraron modelos", + "noFilterResultsSubHeader": "Intenta ajustar los filtros para encontrar lo que buscabas.", + "noMatchesFound": "No se encontraron coincidencias.", + "noneValue": "Ninguno", + "noSearchResultsAlt": "Sin resultados de búsqueda", + "noSearchResultsHeader": "Tu búsqueda «{{searchTerm}}» no encontró ningún resultado", + "noSearchResultsSubHeader": "Intenta ajustar tu búsqueda. Te sugerimos comprobar que todas las palabras estén escritas correctamente o intentar usar palabras clave diferentes.", + "notifyCannotCreateModel": "No se puede crear el modelo", + "notifyPleaseAddDisplayName": "Por favor, añade un nombre de visualización", + "ogImageFieldDescription": "Este campo te permite establecer una imagen de Open Graph a través de la pestaña SEO. Una imagen de Open Graph (OG) es una imagen que aparece en una publicación de redes sociales cuando se comparte una página web.", + "ogImageFieldLabel": "Imagen meta", + "openCodeApp": "Abrir aplicación de código", + "openVisualLayout": "Abrir diseño visual", + "optionalLabel": "opcional", + "parentModel": "Modelo padre", + "parentModelTooltip": "Seleccionar un padre afecta el enrutamiento predeterminado y la navegación de contenido en la interfaz", + "pleaseAddDisplayName": "Por favor, añade el nombre de visualización", + "proTip": "Consejo profesional", + "reactivateField": "Reactivar campo", + "reactivatingField": "Reactivando campo", + "readDocs": "Leer documentación", + "readDocsModelTypes": "Lee nuestra documentación sobre los diferentes tipos de modelos y sus usos", + "readFieldTypesGuide": "Lee nuestra guía sobre tipos de campos en el esquema", + "referenceId": "ID de referencia", + "referenceIdAlreadyInUse": "Este ID de referencia ya está en uso. Por favor, introduce uno diferente.", + "referenceIdLabel": "ID de referencia", + "referenceIdPlaceholder": "Generado automáticamente a partir del nombre de visualización", + "referenceIdTooltip": "ID usado para acceder a este modelo a través de nuestra API o Parsley", + "referenceModelLabel": "Modelo de referencia", + "referenceModelPlaceholder": "Seleccionar un modelo", + "regexCustomErrorMessage": "Mensaje de error personalizado *", + "regexCustomErrorMessageTooltip": "Se muestra si el usuario introduce una entrada que no cumple los requisitos", + "regexInvalidHelper": "El regex proporcionado no es válido. Por favor, revisa la documentación de regex en MDN.", + "regexKnowledgeRequired": "Se requiere conocimiento de Expresiones Regulares (Regex). Introducir patrones regex incorrectos puede impedir que los campos de contenido acepten entradas de usuario.", + "regexMatchErrorEmail": "Debe ser un correo electrónico (p.ej. hola@zesty.io)", + "regexMatchErrorMessageLabel": "Mensaje de error de coincidencia Regex", + "regexMatchErrorSlug": "Debe ser un slug (p.ej. todo-sobre-marketing-de-contenidos)", + "regexMatchErrorUrl": "Debe ser una URL (p.ej. https://www.google.com/)", + "regexMatchPatternLabel": "Patrón de coincidencia Regex", + "regexMatchSpecificPattern": "Coincidir con un patrón específico", + "regexNotMatchingPattern": "No coincide con el patrón esperado", + "regexPattern": "Patrón", + "regexPatternMatchingRules": "Reglas de coincidencia de patrones regex", + "regexPatternTooltip": "Introduce un patrón de expresión regular (regex) - una secuencia de caracteres usada para la coincidencia de patrones en cadenas", + "regexRestrictErrorEmail": "No puede ser un correo electrónico (p.ej. hola@zesty.io)", + "regexRestrictErrorMessageLabel": "Mensaje de error de restricción Regex", + "regexRestrictErrorSlug": "No puede ser un slug (p.ej. todo-sobre-marketing-de-contenidos)", + "regexRestrictErrorUrl": "No puede ser una URL (p.ej. https://www.google.com/)", + "regexRestrictPatternLabel": "Patrón de restricción Regex", + "regexRestrictSpecificPattern": "Restringir un patrón específico", + "regexSetMatchExpression": "Establece la expresión regular (p.ej. correo electrónico, URL, etc.) con la que debe coincidir la entrada", + "regexSetRestrictExpression": "Establece la expresión regular (p.ej. correo electrónico, URL, etc.) con la que la entrada no debe coincidir", + "regexType": "Tipo", + "regexTypeCustom": "Personalizado", + "regexTypeEmail": "Correo electrónico", + "regexTypeSlug": "Slug", + "regexTypeTooltip": "Selecciona de una lista de tipos de patrones regex preestablecidos o escribe tu propio patrón regex personalizado", + "regexTypeUrl": "URL", + "relatedModelDeletedError": "El modelo al que estaba relacionado ha sido eliminado", + "relatedModels": "Modelos relacionados", + "relatedModelsDescription": "Ver los modelos con los que está conectado este modelo", + "removeField": "Eliminar campo", + "renameModel": "Renombrar modelo", + "renameModelDescription": "Esto actualizará el nombre de visualización y el ID de referencia del modelo que se muestra a los editores de contenido y desarrolladores", + "renameModelDisplayNameLabel": "Nombre de visualización", + "renameModelDisplayNameTooltip": "Nombre que se muestra a los editores de contenido", + "renameModelFailedNotify": "Error al renombrar el modelo", + "renameModelReferenceIdHelperText": "El nombre de referencia se usa en archivos de código personalizados y endpoints. Actualizar este valor tiene efecto inmediato en producción. Por favor, consulta con tu desarrollador antes de realizar cambios.", + "renameModelReferenceIdLabel": "ID de referencia", + "renameModelReferenceIdTooltip": "ID usado para acceder a este modelo a través de nuestra API o Parsley", + "renameModelTitle": "Renombrar modelo", + "repeaterDataStorageDescription": "Los datos se almacenan como un array JSON de objetos, a los que se puede acceder fácilmente, tanto directamente como a través de Parsley con la sentencia each.", + "repeaterSubFieldCount_one": "{{count}} campo", + "repeaterSubFieldCount_many": "{{count}} campos", + "repeaterSubFieldCount_other": "{{count}} campos", + "restEndpointLabel": "Endpoint REST (necesita token de autenticación)", + "searchFieldTypesPlaceholder": "Buscar tipos de campos", + "searchModelsPlaceholder": "Buscar modelos", + "searchVariants": "Buscar variantes", + "selectBlockType": "Selecciona un tipo de bloque", + "selectedItemNotFound": "Elemento seleccionado no encontrado: {{value}}", + "selectFieldTypeTitle": "Seleccionar un tipo de campo", + "selectFolderLabel": "Seleccionar carpeta", + "selectModelType": "Seleccionar tipo de modelo", + "selectModelTypeSubtitle": "El tipo de modelo que seleccionas afecta cómo se renderizan los elementos de contenido en la interfaz y si se crean URLs y plantillas. Nota: Todos los modelos se pueden usar de forma headless", + "selectParentTooltip": "Seleccionar un padre afecta el enrutamiento predeterminado y la navegación de contenido en la interfaz", + "selectPlaceholder": "Seleccionar", + "seoFieldLinkTitle": "Título de enlace SEO", + "seoFieldMetaDescription": "Meta descripción SEO", + "seoFieldMetaKeywords": "Palabras clave meta SEO", + "seoFieldMetaTitle": "Meta título SEO", + "seoMetaFields": "Campos meta SEO", + "seoMetaFieldsDescription": "Los modelos de contenido para modelos de página única, multipágina y conjunto de datos incluyen campos meta SEO accesibles a través de la API o Parsley. Estos campos están disponibles para ayudar con el descubrimiento en búsquedas y se usan para la búsqueda masiva en la API de Zesty. El valor de estos campos se puede encontrar bajo la clave meta en el endpoint de la API de instancias.", + "showSystemFields": "Mostrar campos del sistema", + "sortLastCreated": "Última creación", + "sortLastModified": "Última modificación", + "starterBlockBlankDescription": "Un bloque en blanco", + "starterBlockBlankLabel": "En blanco", + "starterBlockCodeTemplateLink": "Plantilla de código", + "starterBlockContactUsFormDescription": "Un sencillo formulario de contacto para capturar clientes potenciales desde cualquier página", + "starterBlockContactUsFormLabel": "Formulario de contacto", + "starterBlockCreateButton": "Crear modelo de bloque", + "starterBlockCreatingModelBody": "Esto puede tardar un par de minutos.", + "starterBlockCreatingModelHeading": "Creando modelo", + "starterBlockDescriptionHeading": "Descripción", + "starterBlockDetailsHeading": "Detalles", + "starterBlockDisplayNameInUse": "El nombre de visualización ya está en uso. Por favor, usa otro nombre de visualización.", + "starterBlockDisplayNameLabel": "Nombre de visualización", + "starterBlockDisplayNamePlaceholder": "p.ej. Página de inicio, Página Acerca de, Página de contacto, etc.", + "starterBlockDisplayNameTooltip": "Nombre que se muestra a los editores de contenido", + "starterBlockFeatureSideBySideImageDescription": "Una función con texto a la izquierda e imagen a la derecha", + "starterBlockFeatureSideBySideImageLabel": "Función con imagen lado a lado", + "starterBlockFieldsHeading": "Campos", + "starterBlockFormCodeTemplate": "Plantilla de código", + "starterBlockFormCreateBlockModel": "Crear modelo de bloque", + "starterBlockFormCreatingModel": "Creando modelo", + "starterBlockFormCreatingModelDescription": "Esto puede tardar un par de minutos.", + "starterBlockFormDescription": "Descripción", + "starterBlockFormDetails": "Detalles", + "starterBlockFormDisplayName": "Nombre para mostrar", + "starterBlockFormDisplayNameInUse": "El nombre para mostrar ya está en uso. Por favor, utiliza otro nombre para mostrar.", + "starterBlockFormDisplayNamePlaceholder": "ej. Página de inicio, Página de contacto, Quiénes somos, etc.", + "starterBlockFormDisplayNameTooltip": "Nombre que se muestra a los editores de contenido", + "starterBlockFormFields": "Campos", + "starterBlockFormReferenceId": "ID de referencia", + "starterBlockFormReferenceIdInUse": "El ID de referencia ya está en uso. Por favor, utiliza otro ID de referencia.", + "starterBlockFormReferenceIdPlaceholder": "Generado automáticamente a partir del nombre para mostrar", + "starterBlockFormReferenceIdTooltip": "ID utilizado para acceder a este modelo a través de nuestra API o Parsley", + "starterBlockFormResources": "Recursos", + "starterBlockFormSeeBootstrapTemplate": "Ver plantilla de Bootstrap", + "starterBlockHeroImageBelowDescription": "Un hero con texto y botones CTA en la parte superior y una imagen debajo", + "starterBlockHeroImageBelowLabel": "Imagen hero inferior", + "starterBlockReferenceIdLabel": "ID de referencia", + "starterBlockReferenceIdPlaceholder": "Generado automáticamente a partir del nombre de visualización", + "starterBlockReferenceIdTooltip": "ID usado para acceder a este modelo a través de nuestra API o Parsley", + "starterBlockRefIdInUse": "El ID de referencia ya está en uso. Por favor, usa otro ID de referencia.", + "starterBlockResourcesHeading": "Recursos", + "starterBlockSeeBootstrapTemplate": "Ver plantilla Bootstrap", + "starterBlockSideBySideHeroImageDescription": "Un hero con texto y botones CTA a la izquierda y una imagen a la derecha", + "starterBlockSideBySideHeroImageLabel": "Imagen hero lado a lado", + "starterBlockSingleTestimonialDescription": "Un único testimonio con el nombre, imagen y datos de empresa de una persona", + "starterBlockSingleTestimonialLabel": "Testimonio único", + "starterBlocksSearchPlaceholder": "Buscar variantes", + "starterBlocksSelectionSubtitle": "Empieza con un bloque en blanco o selecciona de nuestra selección de bloques prediseñados", + "starterBlocksSelectionTitle": "Seleccionar un tipo de bloque", + "starterBlocksSubtitle": "Comienza con un bloque en blanco o selecciona uno de nuestra selección de bloques prediseñados", + "starterBlocksTutorialLink": "Aprende los conceptos básicos de Blocks con un tutorial", + "subFieldFormAddTitle": "Añadir campo {{name}}", + "subFieldFormEditTitle": "Editar {{label}}", + "subFieldFormTypeFieldLabel": "Campo {{type}}", + "switchToHeadless": "Cambiar a Headless", + "switchToHybrid": "Cambiar a Híbrido", + "switchToMode": "Cambiar a {{mode}}", + "switchWebEngineModeTitle": "Cambiar modo del motor web a {{mode}}", + "systemFieldCreatedAt": "Creado en", + "systemFieldItemZuid": "ZUID del elemento", + "systemFieldMasterZuid": "ZUID maestro", + "systemFieldModelZuid": "ZUID del modelo", + "systemFields": "Campos del sistema", + "systemFieldsDescription": "Cada elemento de contenido (hijo) de un modelo en Zesty incluye campos del sistema no editables que representan el estado del contenido, como cuándo fue creado, actualizado y la versión. El valor de estos campos se puede encontrar bajo la clave meta en el endpoint de la API de instancias.", + "systemFieldUpdatedAt": "Actualizado en", + "systemFieldVersion": "Versión", + "tabActivityLog": "Registro de actividad", + "tabDetails": "Detalles", + "tabFields": "Campos", + "tabInfo": "Información", + "tabLearn": "Aprender", + "tabRules": "Reglas", + "templateBlogDescription": "Perfecto para blogs con campos de título, contenido del cuerpo, imagen destacada y categoría.", + "templateBlogTitle": "Blog", + "templateFileEmpty": "El archivo de plantilla está vacío", + "templateFileEmptyBody": "Por favor, añade el código del bloque a través de la aplicación de código.", + "templateLandingPageDescription": "Una sencilla página de aterrizaje con campos para una sección hero, de funciones y de pie de página.", + "templateLandingPageTitle": "Página de aterrizaje", + "tooltipWhatIsAField": "¿Qué es un campo {{fieldName}}?", + "tooltipWhatIsAnField": "¿Qué es un campo {{fieldName}}?", + "typeTextArticleWriter": "Redactor de Artículos", + "typeTextBlockSelector": "Selector de Bloque", + "typeTextBoolean": "Booleano", + "typeTextColor": "Color", + "typeTextCurrency": "Moneda", + "typeTextDate": "Fecha", + "typeTextDatetime": "Fecha y Hora", + "typeTextDropdown": "Desplegable", + "typeTextFiles": "Archivos", + "typeTextFontawesome": "Font Awesome", + "typeTextImages": "Medios", + "typeTextIntegration": "Integración", + "typeTextInternalLink": "Enlace Interno", + "typeTextLink": "URL Externa", + "typeTextMarkdown": "Markdown", + "typeTextNumber": "Número", + "typeTextOneToMany": "Uno a Varios", + "typeTextOneToOne": "Uno a Uno", + "typeTextRepeater": "Repetidor", + "typeTextSort": "Orden de Clasificación", + "typeTextText": "Texto de Una Línea", + "typeTextTextarea": "Texto Multilínea", + "typeTextUuid": "UUID", + "typeTextWysiwygAdvanced": "WYSIWYG (Avanzado)", + "typeTextWysiwygBasic": "WYSIWYG", + "uniqueField": "Campo único", + "uniqueFieldDescription": "Garantiza que múltiples elementos no puedan tener el mismo valor para este campo", + "updateBlockGroupDescription": "Esto afecta en qué grupo se presenta el bloque en la página Todos los bloques en la aplicación de bloques.", + "updateBlockGroupFailedNotify": "Error al actualizar el grupo de bloques", + "updateBlockGroupTitle": "Actualizar grupo de bloques", + "updated": "Actualizado", + "updateDescriptionDialogBody": "Esto actualizará la descripción del modelo que se muestra a los editores de contenido", + "updateDescriptionDialogTitle": "Actualizar descripción", + "updateDescriptionFailedNotify": "Error al actualizar la descripción", + "updateDescriptionInputLabel": "Descripción", + "updateDescriptionInputPlaceholder": "¿Para qué se va a usar este modelo?", + "updateDescriptionInputTooltip": "Muestra el propósito del modelo para ayudar a los redactores de contenido", + "updateParentDialogBody": "Seleccionar un padre afecta el enrutamiento predeterminado y la navegación de contenido en la interfaz.", + "updateParentDialogTitle": "Actualizar modelo padre", + "updateParentInputTooltip": "Seleccionar un padre afecta el enrutamiento predeterminado y la navegación de contenido en la interfaz", + "validationCannotBeLessThanMinValue": "No puede ser menor que el valor mínimo", + "validationCannotExceedMaxCharCount": "No puede exceder el recuento máximo de caracteres", + "validationCannotExceedMaxChars": "No puede exceder {{maxLength}} caracteres", + "validationCannotExceedMaxValue": "No puede exceder el valor máximo", + "validationFieldRequired": "Este campo es obligatorio", + "validationIncompleteApiConfig": "Configuración de API incompleta", + "validationInvalidNumber": "Número no válido", + "validationInvalidRegexPattern": "Patrón regex no válido", + "validationRequiredField": "Campo obligatorio. Por favor, introduce un valor.", + "validationSelectCurrency": "Por favor, selecciona una moneda", + "viewAllActivity": "Ver toda la actividad", + "viewContent": "Ver contenido", + "viewEndpoints": "Ver endpoints", + "viewVariants": "Ver variantes", + "whatIsAFieldType": "¿Qué es un campo {{fieldType}}?", + "whatIsAnFieldType": "¿Qué es un campo {{fieldType}}?", + "wizardCreatingModel": "Creando modelo", + "wizardEnterContentEntry": "Introducir una entrada de contenido", + "wizardSelectCollectionSubtitle": "Empieza desde una de nuestras muchas colecciones de esquemas para entender mejor nuestro producto", + "wizardSelectCollectionTitle": "Seleccionar una colección de esquemas", + "wizardSuccessHeading": "¡Tus modelos para {{title}} están ya creados!", + "zuidLabel": "ZUID", + "zuidTooltip": "Los elementos de contenido siempre se acceden en relación con su modelo, por lo que se requiere un ZUID de modelo para cada llamada." +} diff --git a/public/locales/es-ES/seo.json b/public/locales/es-ES/seo.json new file mode 100644 index 0000000000..558f6a290b --- /dev/null +++ b/public/locales/es-ES/seo.json @@ -0,0 +1,127 @@ +{ + "addAllRedirects": "Añadir Todas las Redirecciones", + "changeDialogBody": "Será una redirección permanente 301 y garantizará que los visitantes que usen la ruta antigua sean dirigidos sin problemas a la nueva.", + "changeDialogCreateRedirect": "Crear Redirección", + "changeDialogDontCreate": "No Crear", + "changeDialogNewPath": "Nueva ruta", + "changeDialogOldPath": "Ruta antigua", + "changeDialogRedirectCreated": "1 Redirección Creada", + "changeDialogTitle": "Cambio de ruta URL detectado. ¿Crear una redirección de la ruta antigua a la nueva?", + "closeImport": "Cerrar Importación", + "columnHttpCode": "Código HTTP", + "columnIncomingPath": "Ruta Entrante", + "columnTarget": "Destino", + "columnType": "Tipo", + "createFormAddPath": "Añadir Ruta", + "createFormCreateAnotherRedirect": "Crear Otra Redirección", + "createFormCreateRedirect": "Crear Redirección", + "createFormExternalUrlPlaceholder": "Introduce la URL (p. ej. https://www.google.com/)", + "createFormFilePathOnlyTooltip": "Solo Ruta de Archivo", + "createFormHttpCodeLabel": "Código HTTP", + "createFormIncomingPathLabel": "Ruta Entrante", + "createFormNotifyCreated_one": "{{count}} Redirección Creada", + "createFormNotifyCreated_many": "{{count}} Redirecciones Creadas", + "createFormNotifyCreated_other": "{{count}} Redirecciones Creadas", + "createFormNotifySaved": "Redirección Guardada: {{path}}", + "createFormPathPlaceholder": "/Introduce la ruta URL desde la que redirigir", + "createFormRedirectTargetLabel": "Destino de la Redirección", + "createFormTypeLabel": "Tipo", + "createFormValueCannotBeModified": "Este valor no se puede modificar", + "createRedirectHeader": "Crear Redirección", + "createRedirectIncomingPath": "Las rutas entrantes no distinguen entre mayúsculas y minúsculas y las barras finales se gestionan automáticamente", + "createRedirectSubHeader": "Tus nuevas redirecciones entrarán en vigor inmediatamente después de crearlas.", + "deleteRedirect": "Eliminar Redirección", + "deleteRedirectDescriptionPlural": "Eliminar estas {{count}} redirecciones para estas rutas entrantes", + "deleteRedirectDescriptionPlural_one": "Eliminar esta {{count}} redirección para esta ruta entrante", + "deleteRedirectDescriptionPlural_many": "Eliminar estas {{count}} redirecciones para estas rutas entrantes", + "deleteRedirectDescriptionPlural_other": "Eliminar estas {{count}} redirecciones para estas rutas entrantes", + "deleteRedirectDescriptionSingular": "Eliminar esta redirección para esta ruta entrante", + "deleteRedirectDescriptionSuffix": "las eliminará inmediatamente de tu sitio. Esta acción no se puede deshacer.", + "deleteRedirectDescriptionSuffix_one": "la eliminará inmediatamente de tu sitio. Esta acción no se puede deshacer.", + "deleteRedirectDescriptionSuffix_many": "las eliminará inmediatamente de tu sitio. Esta acción no se puede deshacer.", + "deleteRedirectDescriptionSuffix_other": "las eliminará inmediatamente de tu sitio. Esta acción no se puede deshacer.", + "deleteRedirectsButton": "Eliminar Redirecciones ({{count}})", + "deleteRedirectsButton_one": "Eliminar Redirección ({{count}})", + "deleteRedirectsButton_many": "Eliminar Redirecciones ({{count}})", + "deleteRedirectsButton_other": "Eliminar Redirecciones ({{count}})", + "deleteRedirectTitle_one": "Eliminar {{count}} Redirección", + "deleteRedirectTitle_many": "Eliminar {{count}} Redirecciones", + "deleteRedirectTitle_other": "Eliminar {{count}} Redirecciones", + "editRedirect": "Editar Redirección", + "editRedirectHeader": "Editar Redirección", + "editRedirectIncomingPath": "Las barras finales y las variaciones de mayúsculas en las rutas se gestionan automáticamente en WebEngine.", + "editRedirectSubHeader": "Los cambios que realices entrarán en vigor inmediatamente al guardar", + "errorDeletingRedirects": "Error al eliminar las redirecciones", + "errorDialogBody": "Las siguientes rutas no se pudieron guardar como redirecciones.", + "errorDialogNotifyCreated_one": "{{count}} Redirección Creada", + "errorDialogNotifyCreated_many": "{{count}} Redirecciones Creadas", + "errorDialogNotifyCreated_other": "{{count}} Redirecciones Creadas", + "errorDialogNotifySaved": "Redirección Guardada: {{path}}", + "errorDialogTitle_one": "No se pudo crear {{count}} Redirección", + "errorDialogTitle_many": "No se pudieron crear {{count}} Redirecciones", + "errorDialogTitle_other": "No se pudieron crear {{count}} Redirecciones", + "filterRedirects": "Filtrar Redirecciones", + "httpCode301Label": "301 - Redirección Permanente", + "httpCode301Permanent": "301 - Permanente", + "httpCode302Label": "302 - Redirección Temporal", + "httpCode302Temporary": "302 - Temporal", + "importCsvXml": "Importar CSV/XML", + "importErrorDialogBodyRich": "El formato o la estructura del archivo no coincide con lo esperado. Por favor, revisa tu archivo CSV o XML y consulta nuestra <1>guía de importación en nuestra documentación para conocer el formato correcto.", + "importErrorDialogHeader": "Error en la Importación del Archivo", + "importFileReadError": "Error al leer el archivo: {{err}}", + "importInvalidFileSelected": "Archivo seleccionado no válido", + "importMustBeCsv": "La importación debe ser un archivo CSV", + "importRowCreated": "Creado", + "importRowPreExisting": "Ya Existente", + "importTableFrom": "Desde", + "importTableTo": "Hacia", + "importTableType": "Tipo", + "importXmlSitemapSpec": "Las importaciones de mapas de sitio XML deben seguir la especificación {{specUrl}}", + "invalidUrlEnterValid": "URL no válida. Por favor, introduce una URL válida.", + "loading": "Cargando...", + "redirectButton": "Redirigir", + "redirectCreateFailed": "Error al crear la redirección", + "redirectCreateFailedFromPath": "Error al crear la redirección desde {{path}}. {{error}}", + "redirectCreateSuccess": "Redirección creada", + "redirectDeleted_one": "{{count}} Redirección Eliminada", + "redirectDeleted_many": "{{count}} Redirecciones Eliminadas", + "redirectDeleted_other": "{{count}} Redirecciones Eliminadas", + "redirectQueryStringPlaceholder": "Cadena de consulta de redirección", + "redirectRemoveFailed": "Error al eliminar la redirección SEO", + "redirectsLoadFailed": "Error al cargar los datos de redirecciones", + "redirectTargetHasBeenDeleted": "El Destino de la Redirección ha sido", + "redirectTypeExternal": "Externa", + "redirectTypeInternal": "Interna", + "redirectTypeWildcard": "Comodín", + "redirectUrl": "URL de Redirección", + "searchForItem": "Buscar elemento", + "selectAll": "Seleccionar Todo", + "selectedCount": "{{count}} Seleccionados", + "selectedCount_one": "{{count}} Seleccionados", + "selectedCount_many": "{{count}} Seleccionados", + "selectedCount_other": "{{count}} Seleccionados", + "sortHttpCode": "Código HTTP", + "sortIncomingPath": "Ruta Entrante", + "sortTarget": "Destino", + "sortType": "Tipo", + "targetErrorInvalidUrl": "URL no válida. Por favor, introduce una URL válida.", + "targetErrorUnpublished": "Este elemento aún no está publicado. Cualquier ruta entrante llevará a tu página 404 hasta que entre en vigor.", + "targetOptionExternalLabel": "Externa - enlace a una página web externa", + "targetOptionInternalLabel": "Interna - enlace a un elemento publicado dentro de tu instancia", + "targetOptionWildcardLabel": "Comodín - puede gestionar múltiples redirecciones con una sola regla", + "tooltipCode301": "[301] - Redirección Permanente: Úsalo cuando el contenido se ha trasladado permanentemente a una nueva ubicación. Los motores de búsqueda actualizarán su índice.", + "tooltipCode302": "[302] - Redirección Temporal: Úsalo cuando el contenido se encuentra temporalmente en otro lugar y tienes intención de devolverlo. Los motores de búsqueda normalmente no actualizan su índice para la nueva ubicación.", + "tooltipTargetTypeExternal": "Externa, p. ej. https://zesty.org/", + "tooltipTargetTypeInternal": "Interna, p. ej. /about", + "tooltipTargetTypeWildcard": "Comodín, p. ej. /blog/*/*/", + "totalRedirects_one": "{{count}} Redirección en Total", + "totalRedirects_many": "{{count}} Redirecciones en Total", + "totalRedirects_other": "{{count}} Redirecciones en Total", + "tryAgain": "Intentar de Nuevo", + "typeExternal": "Externa", + "typeFilterExternal": "Externa - enlace a una página web externa", + "typeFilterInternal": "Interna - vinculada a un elemento en esta instancia", + "typeFilterWildcard": "Comodín - redirecciones basadas en reglas", + "typeInternal": "Interna", + "typeWildcard": "Comodín" +} diff --git a/public/locales/es-ES/settings.json b/public/locales/es-ES/settings.json new file mode 100644 index 0000000000..d3db2f0205 --- /dev/null +++ b/public/locales/es-ES/settings.json @@ -0,0 +1,183 @@ +{ + "activeStatuses": "Estados activos", + "activeStatusesSubtitle": "Los estados activos están disponibles para ser añadidos o eliminados de los elementos de contenido.", + "AddLangCodeToPaths": "Añadir código de idioma predeterminado a la ruta", + "addStatusNotification": "Se notificará a los usuarios que puedan añadir este estado.", + "AjaxCorsAllowAnyOrigin": "Puntos de conexión de vista personalizada » Permitir cualquier origen (CORS)", + "AlwaysRedirectToHttps": "Redirigir siempre a HTTPS", + "AutoIncludeJsInHead": "Incluir JavaScript automáticamente en el head", + "AutomatedFeedXml": "feed.xml automatizado", + "BaseDirectory": "Directorio base", + "BasicContentApiEnabled": "Acceso a la Instant JSON API para contenido.", + "browseFontsTitle": "Explorar fuentes", + "bynderAssetsDescription": "Optimiza tu flujo de trabajo permitiendo que tu equipo acceda fácilmente a tus activos de Bynder dentro de Zesty", + "bynderAssetsHeading": "Utiliza tus activos de Bynder dentro de Zesty", + "bynderChangePortal": "Cambiar portal de Bynder", + "bynderConnect": "Conectar a Bynder", + "bynderConnectedPortal": "Tu instancia está conectada al siguiente portal de Bynder", + "bynderDisconnect": "Desconectar", + "bynderIntegration": "Integración con Bynder", + "bynderLogoAlt": "Logotipo de Bynder", + "bynderPreviewAlt": "Vista previa de Bynder", + "CanonicalTagsEnabled": "Habilitar etiquetas canónicas", + "categoryAnalytics": "Analítica", + "categoryBlog": "Blog", + "categoryBynder": "Bynder", + "categoryContactForm": "Formulario de contacto", + "categoryCustom": "Personalizado", + "categoryDeveloper": "Desarrollador", + "categoryExporter": "Exportador", + "categoryExtensions": "Extensiones", + "categoryForCustomEndpoint": "Para endpoint personalizado", + "categoryGeneral": "General", + "categoryGroupby": "GroupBy", + "categoryI18n": "i18n", + "categoryIntegrations": "Integraciones", + "categoryLogosection": "Sección del logotipo", + "categoryLogoSection": "Sección del logotipo", + "categoryOverrides": "Anulaciones", + "categoryPetdesk": "PetDesk", + "categoryProxy": "Proxy", + "categoryRouting": "Enrutamiento", + "categorySecurity": "Seguridad", + "categorySeo": "SEO", + "categorySettingsSaved": "Configuración de {{category}} guardada", + "categorySitelink": "Sitelink", + "categorySocialLinks": "Enlaces sociales", + "categoryStripe": "Stripe", + "categoryTagManagers": "Gestores de etiquetas", + "categoryTwitter": "Twitter", + "categoryUps": "UPS", + "categoryVerification": "Verificación", + "categoryYoutube": "YouTube", + "ClientKey": "Clave de cliente de GroupBy", + "Collection": "Colección predeterminada de GroupBy", + "color": "Color", + "colorBlue": "Azul", + "colorDeepPurple": "Púrpura intenso", + "colorGreen": "Verde", + "colorGrey": "Gris", + "colorOrange": "Naranja", + "colorPink": "Rosa", + "colorPurple": "Púrpura", + "colorRed": "Rojo", + "colorRequired": "El color es obligatorio", + "colorRose": "Rosa claro", + "colorYellow": "Amarillo", + "confirmSaveDialogBody": "Los cambios se aplicarán en producción en la próxima renderización, cuando expire la caché o tras una limpieza manual de la misma.", + "confirmSaveDialogTitle": "¿Guardar la configuración de {{title}}?", + "ContentSecurityPolicy": "Content-Security-Policy", + "createStatus": "Crear estado", + "deactivatedStatuses": "Estados desactivados", + "deactivatedStatusesSubtitle": "Estos estados se pueden reactivar en cualquier momento si deseas añadirlos o eliminarlos de los elementos de contenido.", + "deactivateStatus": "Desactivar estado", + "deactivateStatusBody": "Al desactivar este estado, se eliminará de todos los elementos de contenido que lo tengan asignado actualmente. Podrás volver a activarlo en el futuro.", + "deactivateStatusLabel": "Desactivar estado", + "DefaultPage": "Página de idioma predeterminado", + "deleteFontConfirm": "¿De verdad quieres desinstalar esta fuente?", + "describeStatusDescription": "Describe qué significa este estado en el contexto de tus flujos de trabajo", + "descriptionOptional": "Descripción (opcional)", + "Dev": "URL raíz del proxy de almacenamiento de archivos", + "DisplayAdvertisingSupport": "Compatibilidad con publicidad gráfica", + "DntPolicy": "DNT activado o desactivado", + "editStatus": "Editar estado", + "editStatusTitle": "Editar {{name}}", + "errorOccurred": "Ha ocurrido un error.", + "errorWithMessage": "Error: {{message}}", + "FeaturePolicy": "Feature-Policy", + "filterSettings": "Filtrar configuración", + "fontInstallError": "Error al añadir {{family}} ({{variants}}): {{error}}", + "fontInstallSuccess": "La fuente \"{{family}} ({{variants}})\" se ha instalado correctamente", + "fontPreviewText": "Esto es un ejemplo de texto", + "fontUninstalled": "La fuente \"{{fontLabel}}\" se ha desinstalado correctamente", + "fontUninstallFailed": "Error al desinstalar {{fontLabel}}: {{error}}", + "FriendlyPagination": "Paginación amigable", + "GoogleAutoLinker": "Google Auto Linker", + "GoogleUrchinId": "Google Analytics ID", + "Gql": "Activa el acceso a los endpoints de GraphQL para ejecutar un servidor Apollo GQL", + "GqlOrigin": "Permitir origen de GraphQL", + "GtmId": "Google Tag Manager ID", + "headTagsTitle": "Etiquetas Head", + "Honeypot": "Trampa antispam del formulario", + "installedFontsTitle": "Fuentes instaladas", + "instanceWwwDnsTooltip": "Activar la configuración WWW requiere la configuración DNS tanto del dominio raíz (apex) como del subdominio www.", + "Live": "URL raíz del proxy de almacenamiento de archivos", + "LoadFontAwesome": "Cargar Font Awesome", + "MediaProxyUrl": "URL del proxy de medios", + "nameRequired": "El nombre es obligatorio", + "navFontsBrowse": "Explorar fuentes", + "navFontsInstalled": "Fuentes instaladas", + "navHeadTags": "Etiquetas Head", + "navRobotsTxt": "Robots.txt", + "navWorkflows": "Flujos de trabajo", + "noInstalledFonts": "No hay fuentes instaladas", + "none": "Ninguno", + "noneOption": "Ninguno", + "noResultsFor": "No se encontraron resultados para \"{{keyword}}\"", + "noSearchResultsAlt": "Sin resultados de búsqueda", + "off": "Desactivado", + "on": "Activado", + "OverwriteHead": "Sobrescribir archivo Head", + "PreferredDomainPrefix": "¿Añadir siempre WWW a mi dominio?", + "prev": "Anterior", + "PreviewLock": "Protección de bloqueo de vista previa", + "PreviewLockPassword": "Contraseña de bloqueo de vista previa", + "publishRequiresStatus": "Para publicar elementos de contenido se requiere aplicar este estado.", + "publishRequiresStatusDescription": "Esta es una configuración global y significa que los elementos de contenido no se pueden publicar a menos que se haya aplicado este estado.", + "ReferrerPolicy": "Referrer-Policy", + "removeFontLabel": "Eliminar fuente", + "removeFontVariant": "Eliminar {{variant}}", + "removeStatusNotification": "Se notificará a los usuarios que puedan eliminar este estado.", + "robotsFailedFetchSettings": "Error al obtener la configuración", + "robotsFailedSaveSettings": "Error al guardar la configuración de robots.txt. {{err}}", + "robotsFindingSettings": "Buscando la configuración de robots.txt", + "robotsNonLiveDomainWarning": "Los dominios que no están en producción SIEMPRE tienen desactivado el archivo robots.txt para evitar que los motores de búsqueda los rastreen. Esto incluye [hash]-dev.webengine.zesty.io, [hash]-dev.preview.zesty.io y cualquier dominio registrado configurado en la rama \"dev\"", + "RobotsOn": "¿Rastreable por motores de búsqueda?", + "robotsPublishEventWarning": "Los cambios no se reflejarán hasta que se produzca un evento de publicación.", + "robotsSettingsUpdated": "Se ha actualizado la configuración del archivo robots.txt", + "RobotsText": "Texto de robots", + "robotsTopBarTitle": "Robots.txt", + "SafeEmails": "Lista de envío de correos seguros", + "saved": "Guardado", + "saveSettingsTooltip": "Guardar configuración {{saveShortcut}}", + "searchFonts": "Buscar fuentes", + "searchFontsPlaceholder": "Buscar fuentes", + "searchStatuses": "Buscar estados", + "sectionFonts": "Fuentes", + "sectionGlobalMetaSeo": "Meta global y SEO", + "sectionInstanceSettings": "Configuración de la instancia", + "sectionStyles": "Estilos", + "sectionUserSettings": "Configuración de usuario", + "SendingEmail": "Envío de correo electrónico", + "showDeactivated": "Mostrar desactivados", + "ShowDomainInTitle": "¿Mostrar el nombre de dominio en el título meta?", + "ShowInTitle": "¿Mostrar el nombre del sitio en el título meta?", + "SiteProtocol": "¿HTTPS activado?", + "statusDeactivated": "Estado desactivado: {{name}}", + "statusDeactivateFailed": "Error al desactivar el estado: {{name}}. Por favor, inténtalo de nuevo.", + "statusDescriptionPlaceholder": "Listo para que el equipo legal lo revise antes de publicar", + "statusNamePlaceholder": "p. ej., Necesita revisión de contenido", + "StrictTransportSecurity": "Strict-Transport-Security", + "styleCategoryBodyColorsSpacing": "Colores y espaciado de Body", + "styleCategoryButtons": "Botones", + "styleCategoryForms": "Formularios", + "styleCategoryHtmlElements": "Elementos HTML", + "styleCategoryInteractiveElements": "Elementos interactivos", + "styleCategoryLinks": "Enlaces", + "styleCategoryNavigation": "Navegación", + "styleCategoryResponsiveGrid": "Cuadrícula responsiva", + "styleCategorySidebar": "Barra lateral", + "styleCategoryTypography": "Tipografía", + "styleCategoryUiStyling": "Estilos de interfaz de usuario", + "typeSomethingToPreview": "Escribe algo para ver la vista previa", + "unexpectedError": "Ha ocurrido un error inesperado.", + "UniversalCode": "Use Google Universal Code", + "Url": "Endpoint de cliente de GroupBy", + "whichRolesCanAdd": "¿Qué roles pueden añadir este estado?", + "whichRolesCanRemove": "¿Qué roles pueden eliminar este estado?", + "workflowsHeading": "Flujos de trabajo", + "workflowsRestrictedDescription": "Ponte en contacto con el propietario de la instancia o con los administradores que aparecen a continuación para actualizar tu rol a Administrador o Propietario.", + "workflowsRestrictedTitle": "Necesitas permisos para ver y editar los flujos de trabajo", + "XContentTypeOptions": "X-Content-Type-Options", + "XFrameOptions": "Encabezado: X-Frame-Options" +} diff --git a/public/locales/es-ES/shell.json b/public/locales/es-ES/shell.json new file mode 100644 index 0000000000..2918135be0 --- /dev/null +++ b/public/locales/es-ES/shell.json @@ -0,0 +1,617 @@ +{ + "accessDenied": "Acceso denegado", + "accessDeniedImageAlt": "Página no encontrada", + "accessDeniedRoleBody": "Tu rol actual de {{role}} no incluye acceso a la aplicación {{app}}. Para obtener acceso, contacta al propietario de la instancia o a uno de los administradores que se muestran a continuación y solicita una mejora de rol.", + "accountChangePassword": "Cambiar contraseña", + "accountGetHelp": "Obtener ayuda", + "accountLogOut": "Cerrar sesión", + "accountPreferences": "Preferencias", + "accountReadDocs": "Leer documentación", + "accountViewAllInstances": "Ver todas las instancias", + "accountYourProfile": "Tu perfil", + "addNewComment": "Añadir nuevo comentario", + "advancedSearch": "Búsqueda avanzada", + "advancedSearchDescription": "A medida que tú y tu equipo trabajan juntos en Zesty, crearán un archivo de contenido, modelos y archivos de código que se puede buscar. Usa el formulario de abajo para encontrar lo que buscas.", + "aiAssistantBeta": "Asistente de IA Beta", + "aiDrawerPlaceholder": "Pregunta lo que quieras, por ejemplo \"Adapta mi contenido a una audiencia específica\"", + "aiGeneratingContentStatus": "Nuestro asistente de IA está generando tu contenido según tus parámetros", + "aiMistakesWarning": "Nuestro asistente de IA puede cometer errores. Comprueba la información importante.", + "aiOnlyInContentApp": "Solo disponible en la aplicación de contenido.", + "aiScanningMetaDescription": "Nuestro asistente de IA está analizando tu contenido y generando tu meta descripción según tus parámetros", + "aiScanningMetaTitle": "Nuestro asistente de IA está analizando tu contenido y generando tu meta título según tus parámetros", + "aiWriteContentSubtitle": "Usa nuestro asistente de IA para que escriba contenido por ti", + "allInstances": "Todas las instancias", + "alreadyPartOfInstance": "Ya forma parte de la instancia", + "announcementIgnore": "Ignorar", + "announcementRead": "Leer anuncio", + "announcementScheduleTraining": "Programar formación", + "announcementShowVideo": "Ver vídeo", + "anyLanguage": "Cualquier idioma", + "anyone": "Cualquiera", + "anyTime": "Cualquier momento", + "anyType": "Cualquier tipo", + "appErrorBody": "Este error se envió a nuestro equipo. Vuelve a cargar la aplicación para continuar.", + "appErrorHeading": "Vaya, algo salió mal", + "appLoadingFailure": "Error al cargar la aplicación: {{message}}", + "applyAiSuggestion": "Aplicar", + "audiencePlaceholder": "ej. Freelancers, Diseñadores, .....", + "autoApply": "Aplicar automáticamente", + "block": "Bloque", + "blockSelectorCreateVariant": "Crear variante", + "blockSelectorNoVariantsDescription": "Para crear una variante, ve a la app Blocks, selecciona este modelo y haz clic en el botón para crear variante", + "blockSelectorNoVariantsTitle": "No se han creado variantes para el modelo {{modelName}}", + "blockSelectorSearchVariants": "Buscar variantes", + "blockSelectorSelectModel": "Seleccionar modelo", + "blockSelectorSelectModelFirst": "Selecciona primero un modelo antes de seleccionar una variante", + "blockSelectorSelectVariant": "Seleccionar variante", + "blockSelectorUpdatedOnBy": "Actualizado el {{date}} por {{user}}", + "blockSelectorViewBlock": "Ver bloque", + "cancelEsc": "Cancelar (ESC)", + "cannotBeUndone": "Esto no se puede deshacer", + "characterLimit": "Límite de caracteres", + "characterLimitTooltip": "Establece un límite de caracteres para controlar la longitud del texto generado", + "clearAll": "Borrar todo", + "clearChat": "Borrar chat", + "code": "Código", + "collapseSidebar": "Contraer barra lateral", + "commentAddError": "No se pudo añadir el comentario. Comprueba tu conexión a internet e inténtalo de nuevo.", + "commentPlaceholder": "Responde o agrega a otros con @", + "confirmPublishBody": "Esto hará que la v{{version}} del {{item}} esté disponible de inmediato en todas tus plataformas. Siempre puedes dejar de publicar este elemento más tarde si es necesario.", + "confirmPublishTitle": "Publicar {{item}}", + "contactSupport": "Contactar con soporte", + "contentGenerated": "¡Tu contenido se ha generado!", + "contentItem": "Elemento de contenido", + "continueWith": "Continuar con {{service}}", + "copyInstanceZUID": "Copiar ZUID de la instancia", + "copyLink": "Copiar enlace", + "createContentItem": "Crear elemento de contenido", + "createContentItemSubtitle": "Solo puedes crear un elemento de contenido para un modelo preexistente", + "createdByTooltip": "Selecciona un usuario entre todos los usuarios de la instancia.", + "currencyFlagAlt": "Bandera de {{country}}", + "currentlyLoggedInAs": "Actualmente conectado como {{email}}", + "customDateRange": "Rango de fechas personalizado", + "dateAfter": "Después de...", + "dateBefore": "Antes de...", + "dateLast14Days": "Últimos 14 días", + "dateModified": "Fecha de modificación", + "dateModifiedTooltip": "Selecciona el rango de fechas para el que quieres ver resultados.", + "dateOn": "El...", + "dateRange": "Rango de fechas", + "dateRangeValue": "{{from}} a {{to}}", + "dateTimeInvalidTime": "Hora no válida", + "dateTimeStoredInUtc": "Almacenado en UTC como {{value}}", + "dateUpdated": "Fecha de actualización", + "deleteCommentBody": "Eliminar este comentario también eliminará todas las respuestas asociadas.", + "deleteCommentTitle": "¿Eliminar comentario?", + "deleteForever": "Eliminar permanentemente", + "describeAudience": "Describe tu audiencia", + "docs": "Documentación", + "docsAddingImageAltText": "Agregar texto alternativo a imágenes", + "docsAddingManagingContent": "Agregar y gestionar contenido", + "docsAuditTrailOverview": "Descripción general del registro de auditoría", + "docsAuthApi": "Documentación de la API de Auth", + "docsBuildingSchema": "Construir el esquema", + "docsCapturingFormData": "Capturar datos de formularios en Leads", + "docsCodeOverview": "Descripción general del código", + "docsContentEntry": "Entrada de contenido, borradores y publicación", + "docsContentOverview": "Descripción general del contenido", + "docsCreatingLeadForm": "Crear un formulario de leads", + "docsEditorCodingBasics": "Conceptos básicos del editor y la codificación", + "docsGettingStarted": "Primeros pasos", + "docsGuides": "Guías", + "docsInstanceSettings": "Configuración de la instancia", + "docsIntroduction": "Introducción", + "docsLeadsOverview": "Descripción general de leads", + "docsManageRedirects": "Gestionar redirecciones", + "docsMediaOverview": "Descripción general de medios", + "docsRedirectsOverview": "Descripción general de redirecciones", + "docsSchemaContentCode": "Esquema, contenido y código", + "docsSchemaOverview": "Descripción general del esquema", + "docsSeoRedirects": "Redirecciones SEO", + "docsSettingsOverview": "Descripción general de la configuración", + "docsUploadMultipleImages": "Cómo subir varias imágenes", + "editorAddRemoveLink": "Añadir o quitar enlace", + "editorAlignCenter": "Centrar texto", + "editorAlignJustify": "Justificar texto", + "editorAlignLeft": "Alinear texto a la izquierda", + "editorAlignRight": "Alinear texto a la derecha", + "editorBold": "Negrita", + "editorChangeHeading": "Cambiar encabezado", + "editorChangeToBlockQuote": "Cambiar a cita", + "editorChangeToCodeBlock": "Cambiar a bloque de código", + "editorChangeToHeadingLevel": "Cambiar a encabezado de nivel {{level}}", + "editorChangeToParagraph": "Cambiar a párrafo", + "editorEmbed": "Insertar", + "editorEmbedContent": "Insertar contenido", + "editorEmbedIdLabel": "Introduce el ID único de {{service}}", + "editorFloatLeft": "Flotar a la izquierda", + "editorFloatRight": "Flotar a la derecha", + "editorHeading": "Encabezado", + "editorHeadingLevel": "Encabezado {{level}}", + "editorIndent": "Sangría", + "editorInsertCharacter": "Insertar carácter: {{char}}", + "editorInsertEmbed": "Insertar incrustación", + "editorInsertHorizontalRule": "Insertar línea horizontal", + "editorInsertImage": "Insertar imagen desde la biblioteca multimedia", + "editorInsertLink": "Insertar enlace", + "editorInsertSpecialCharacter": "Insertar carácter especial", + "editorInsertTable": "Insertar tabla", + "editorItalic": "Cursiva", + "editorLevel": "Nivel {{level}}", + "editorLinkNewWindow": "¿Abrir el enlace en una nueva ventana del navegador?", + "editorLinkUrlLabel": "¿A qué URL debe enlazar?", + "editorPromptColumns": "¿Cuántas columnas?", + "editorPromptEnterUrl": "Introduce la URL", + "editorPromptRows": "¿Cuántas filas?", + "editorRedo": "Rehacer último cambio deshecho", + "editorSpecialCharacter": "Carácter especial", + "editorToggleEmphasis": "Alternar énfasis", + "editorToggleStrikethrough": "Alternar tachado", + "editorToggleStrong": "Alternar negrita", + "editorToggleSubscript": "Alternar subíndice", + "editorToggleSuperscript": "Alternar superíndice", + "editorToggleUnderline": "Alternar subrayado", + "editorUnderline": "Subrayado", + "editorUndo": "Deshacer último cambio", + "editorWrapInBlockQuote": "Convertir en cita", + "editorWrapInBulletList": "Convertir en lista con viñetas", + "editorWrapInOrderedList": "Convertir en lista numerada", + "emailAddress": "Correo electrónico", + "emailCommaSeparated": "Correo electrónico, separado por comas o espacios", + "enterTwoFactorOtp": "Introduce tu código OTP de 2FA", + "enterValidEmail": "Introduce una dirección de correo electrónico válida.", + "errorParsingAiResponse": "Error al analizar la respuesta de la IA. Inténtalo de nuevo.", + "expandSidebar": "Expandir barra lateral", + "failedAuthenticateAccount": "No se pudo autenticar tu cuenta", + "failedCopyInstanceZUID": "Error al copiar el ZUID de la instancia", + "failedCreateField": "Error al crear el campo. {{error}}", + "failedFetchField": "Error al obtener el campo: {{error}}", + "failedFetchHeadTags": "Error al obtener las etiquetas de cabecera (head tags)", + "failedFetchHeadTagsError": "Error al obtener las etiquetas de cabecera (head tags): {{error}}", + "failedFetchModel": "Error al obtener el modelo: {{error}}", + "failedFetchModels": "Error al obtener los modelos", + "failedFetchRecentItems": "Hubo un problema al obtener los elementos recientes: {{error}}", + "failedFetchUsers": "Error al obtener los usuarios", + "failedLoadDomains": "Error al cargar los dominios", + "failedLoadHeadTagFile": "Error al cargar el archivo. {{status}} | {{error}}", + "failedLoadInstancesList": "Hubo un problema al cargar la lista de instancias", + "failedLoadUserRole": "Error al cargar tu rol de usuario para esta instancia.", + "failedRefreshCdnCache": "Error al actualizar la caché de CDN", + "failedToLoadInstance": "Error al cargar la instancia", + "failedUpdateFavicon": "Error al actualizar el favicon", + "faviconUpdated": "Favicon actualizado", + "favorites": "Favoritos", + "fieldRequiredError": "Este campo es obligatorio. Introduce un valor.", + "filterNoResultsRich": "Tu filtro \"{{query}}\" no arrojó ningún resultado", + "findIn": "Buscar en {{app}}", + "flagAlt": "Bandera de {{country}}", + "forbiddenLoadInstancesList": "No tienes permiso para cargar la lista de instancias", + "forgotPassword": "¿Olvidaste tu contraseña?", + "geminiIconAlt": "Icono de Gemini", + "geminiLogoAlt": "Logo de Gemini", + "generate": "Generar", + "generateContent": "Generar contenido", + "generatedContent": "Contenido generado", + "generateMetaDescription": "Generar meta descripción", + "generateMetaDescriptionHelp": "Nuestra IA analizará tu contenido y generará tu meta descripción según los parámetros que establezcas a continuación", + "generateMetaTitle": "Generar meta título", + "generateMetaTitleHelp": "Nuestra IA analizará tu contenido y generará tu meta título según los parámetros que establezcas a continuación", + "generateSuggestions": "Generar sugerencias", + "generatingContent": "Generando contenido", + "generatingMetaDescription": "Generando meta descripción", + "generatingMetaTitle": "Generando meta título", + "generationStopped": "La generación se ha detenido", + "goToAccounts": "Ir a Cuentas", + "hasAccessTo": "Tiene acceso a", + "headCreateTag": "Crear etiqueta de cabecera", + "headLegacyNotice": "Esta instancia tiene etiquetas de cabecera heredadas. Si quieres editarlas o eliminarlas, ponte en contacto con soporte.", + "headNoTags": "No se han creado etiquetas de cabecera para este elemento.", + "headNotVersionedNotice": "Las etiquetas de cabecera no se versionan. Una vez guardadas, surtirán efecto cuando las páginas se almacenen en caché la próxima vez. El almacenamiento en caché ocurre al publicar o cada 24 horas.", + "headTagAddAttribute": "Añadir atributo", + "headTagAddAttributeTitle": "Añadir atributo de etiqueta", + "headTagAttributeLabel": "Atributo", + "headTagCreate": "Crear etiqueta de cabecera", + "headTagDeleteAttributeTitle": "Eliminar atributo de etiqueta", + "headTagDeleted": "Etiqueta de cabecera eliminada", + "headTagDeleteHeadTag": "Eliminar etiqueta de cabecera", + "headTagDeleteTag": "Eliminar etiqueta", + "headTagLabel": "Etiqueta", + "headTagNewCreated": "Nueva etiqueta de cabecera creada", + "headTagSave": "Guardar etiqueta de cabecera", + "headTagSortLabel": "Orden", + "headTagTypeNone": "Ninguno", + "headTagUpdateFailed": "No se pudo actualizar la etiqueta de cabecera. {{status}}", + "headTagUpdateSuccess": "Etiqueta de cabecera actualizada correctamente", + "headTagValueLabel": "Valor", + "imageFieldLimit_one": "Este campo está limitado a {{count}} imagen", + "imageFieldLimit_many": "Este campo está limitado a {{count}} imágenes", + "imageFieldLimit_other": "Este campo está limitado a {{count}} imágenes", + "insert": "Insertar", + "integrationAddDetail": "Agregar detalle", + "integrationAddDetailWithPlus": "+ Agregar detalle", + "integrationAddHeading": "Agregar encabezado", + "integrationAddHttpHeader": "Agregar encabezado HTTP", + "integrationAddSubheading": "Agregar subencabezado", + "integrationApiConfigurationSettings": "Configuración de API", + "integrationApiResponseArrayOfPrimitives": "La API devolvió un array de valores {{kind}}. Se esperaba un array de objetos.", + "integrationApiResponseEmptyArray": "La API devolvió un array vacío. Agrega al menos un elemento a la respuesta para configurar las opciones de visualización.", + "integrationApiResponseNestedArrayNoSelectableKeys": "La API devolvió un objeto cuyos arrays anidados no tienen claves seleccionables. Asegúrate de que al menos un elemento del array anidado tenga propiedades escalares.", + "integrationApiResponseNoData": "La API no devolvió datos. Se esperaba un array JSON de objetos.", + "integrationApiResponseNoNestedArray": "La API devolvió un único objeto sin ningún array de objetos anidado. Se esperaba una raíz de tipo array o un objeto que contenga un array de objetos.", + "integrationApiResponseNoSelectableKeys": "La API devolvió un array de objetos sin claves seleccionables. Asegúrate de que cada objeto tenga al menos una propiedad escalar.", + "integrationApiResponseUnexpectedType": "La API devolvió un valor de tipo {{type}}. Se esperaba un array JSON de objetos.", + "integrationApiUrl": "URL de API", + "integrationApiUrlTooltip": "URL que define la fuente de datos externa. Debe devolver un arreglo JSON de objetos planos con una estructura consistente.", + "integrationAuthenticationHeaders": "Encabezados de autenticación", + "integrationCanReconfigureLater": "Esto se puede reconfigurar más tarde", + "integrationClassyCard": "Tarjeta de Classy", + "integrationClassyCardDescription": "Muestra campañas de Classy", + "integrationConfigureDisplayOptions": "Configurar opciones de visualización", + "integrationConfigureDisplayOptionsDescription": "Selecciona qué campos mostrar a los editores de contenido cuando editan elementos", + "integrationConnect": "Conectar", + "integrationConnectingSecureConnection": "Espera mientras establecemos una conexión segura", + "integrationConnectingToApiEndpoint": "Conectando al endpoint de API", + "integrationConnectionFailed": "Error de conexión", + "integrationConnectionFailedDescription": "No pudimos conectarnos al endpoint de API que ingresaste. Puede deberse a una estructura inesperada, una URL faltante o no válida, o encabezados personalizados incorrectos.", + "integrationConnectionSuccessful": "Conexión exitosa", + "integrationConnectionSuccessfulDescription": "Tu API ya está vinculada de forma segura y lista para usarse.", + "integrationConnectToApi": "Conectar a la API", + "integrationConnectToApiDescription": "Establece una conexión con un endpoint para que los usuarios seleccionen elementos", + "integrationDataPath": "Ruta de datos", + "integrationDetail": "Detalle", + "integrationDetails": "Detalles", + "integrationDetailsCard": "Tarjeta de detalles", + "integrationDetailsCardDescription": "Muestra elementos con varios detalles", + "integrationDisplayItemsAs": "Mostrar elementos como", + "integrationEditApiUrl": "Editar URL de API", + "integrationEditDisplayOptions": "Editar opciones de visualización", + "integrationHeading": "Encabezado", + "integrationHttpHeadersOptional": "Encabezados HTTP (opcional)", + "integrationImageCard": "Tarjeta de imagen", + "integrationImageCardDescription": "Muestra elementos con una imagen, un encabezado y un subencabezado.", + "integrationImageUrlDescription": "La imagen solo se mostrará si el valor seleccionado es una URL", + "integrationInvalidResponseFormat": "Formato de respuesta no compatible", + "integrationInvalidResponseFormatDescription": "La API se conectó, pero su respuesta no se puede usar para configurar este campo.", + "integrationInvalidUrlHelper": "Ingresa una URL válida, p. ej. https://api.example.org/items.json", + "integrationItemId": "ID del elemento", + "integrationItemIdNotUniqueWarning": "\"{{itemIdPath}}\" no es único entre los {{count}} elementos de muestra — esto puede hacer que las selecciones se reconozcan de forma incorrecta.", + "integrationItemIdNotUniqueWarning_one": "\"{{itemIdPath}}\" no es único entre los {{count}} elementos de muestra — esto puede hacer que las selecciones se reconozcan de forma incorrecta.", + "integrationItemIdNotUniqueWarning_many": "\"{{itemIdPath}}\" no es único entre los {{count}} elementos de muestra — esto puede hacer que las selecciones se reconozcan de forma incorrecta.", + "integrationItemIdNotUniqueWarning_other": "\"{{itemIdPath}}\" no es único entre los {{count}} elementos de muestra — esto puede hacer que las selecciones se reconozcan de forma incorrecta.", + "integrationItemIdToolTip": "Elige un valor que la API garantice que sea único para cada elemento (por ejemplo, un ID de base de datos), no uno que solo parezca único en una muestra pequeña. Un ID de elemento no único puede hacer que las selecciones se reconozcan de forma incorrecta.", + "integrationItemPreview": "Vista previa del elemento", + "integrationItemPreviewDescription": "Cómo verán los elementos los editores de contenido", + "integrationKey": "Clave", + "integrationKeyPathsMismatchWarning": "Este endpoint devuelve una estructura diferente. Los elementos guardados existentes se mostrarán de forma incorrecta y deberán volver a seleccionarse.", + "integrationKeyPreviewDescription": "Los valores previsualizados para las claves de abajo provienen del primer elemento de la respuesta de API.", + "integrationLearnEndpointStructures": "Más información sobre las estructuras de endpoint que aceptamos", + "integrationMuxCard": "Tarjeta MUX", + "integrationMuxCardDescription": "Muestra videos de MUX", + "integrationNotAvailable": "No disponible", + "integrationOptions": "Opciones", + "integrationOtherOptions": "Otras opciones", + "integrationRecommended": "Recomendado", + "integrationReconfigure": "Reconfigurar", + "integrationResyncValues": "Resincronizar valores", + "integrationSaveChanges": "Guardar cambios", + "integrationSelectDataPath": "Seleccionar ruta de datos", + "integrationSelectDisplayType": "Seleccionar un tipo de visualización", + "integrationSelectedCount_one": "{{count}} seleccionado(s)", + "integrationSelectedCount_many": "{{count}} seleccionado(s)", + "integrationSelectedCount_other": "{{count}} seleccionado(s)", + "integrationSelectKeysToDisplay": "Seleccionar claves para mostrar en el elemento", + "integrationSelectRemoteItems": "Seleccionar elementos remotos", + "integrationSelectTitle": "Seleccionar {{title}}", + "integrationShopifyCard": "Tarjeta de Shopify", + "integrationShopifyCardDescription": "Muestra listados de productos de Shopify", + "integrationSimpleCard": "Tarjeta simple", + "integrationSimpleCardDescription": "Muestra elementos con un encabezado", + "integrationStop": "Detener", + "integrationSubHeading": "Subencabezado", + "integrationTextCard": "Tarjeta de texto", + "integrationTextCardDescription": "Muestra elementos con un encabezado y un subencabezado", + "integrationThumbnail": "Miniatura", + "integrationTryAgain": "Intentar de nuevo", + "integrationValue": "Valor", + "integrationVideoCard": "Tarjeta de video", + "integrationVideoCardDescription": "Muestra elementos con un video, un encabezado y un subencabezado.", + "integrationViewJson": "Ver JSON", + "integrationViewRawJson": "Ver JSON sin procesar", + "integrationYoutubeCard": "Tarjeta de Youtube", + "integrationYoutubeCardDescription": "Muestra videos de Youtube", + "internalExternalLink": "Enlace interno/externo", + "internalLinkNone": "Ninguno", + "internalLinkSearchPlaceholder": "¿No ves el elemento que buscas? Introduce un término para buscar en tu API.", + "internetConnectionOff": "La conexión a Internet está desactivada", + "internetConnectionRestored": "La conexión a Internet se restauró", + "invalidUrlBody": "La URL ingresada no es válida o no existe. Si cree que esto es un error, contáctenos en", + "invalidUrlHeading": "URL no válida. Verifique su URL e intente de nuevo.", + "invite": "Invitar", + "inviteAs": "Invitar como", + "inviteMorePeople": "Invitar a más personas", + "invitePreviouslySent": "Invitación enviada anteriormente", + "inviteSent": "Invitación enviada", + "invitesSentAsEmails": "Estas invitaciones se enviarán por correo electrónico", + "invitesSentPartial_one": "Invitación enviada a {{successCount}} de {{totalCount}} usuario (por correo electrónico)", + "invitesSentPartial_many": "Invitaciones enviadas a {{successCount}} de {{totalCount}} usuarios (por correo electrónico)", + "invitesSentPartial_other": "Invitaciones enviadas a {{successCount}} de {{totalCount}} usuarios (por correo electrónico)", + "invitesSentSuccess_one": "Invitación enviada a {{count}} usuario (por correo electrónico)", + "invitesSentSuccess_many": "Invitaciones enviadas a {{count}} usuarios (por correo electrónico)", + "invitesSentSuccess_other": "Invitaciones enviadas a {{count}} usuarios (por correo electrónico)", + "inviteUsers": "Invitar usuarios", + "itemLowercase": "elemento", + "itemMissingMetaData": "Al elemento seleccionado le faltan metadatos", + "itemMissingMetaTitle": "Al elemento le falta el metatítulo", + "keywords": "Palabras clave", + "keywordsExamplePlaceholder": "ej. Senderismo, nieve", + "keywordsPlaceholder": "ej. Articles", + "keywordsToInclude": "Palabras clave a incluir (separadas por comas)", + "keywordsTooltip": "Introduce uno o varios términos que coincidan con parte del nombre del recurso.", + "language": "Idioma", + "languageGenerationTooltip": "Define el idioma en el que quieres que se genere el texto.", + "languageTooltip": "Selecciona el idioma para el que quieres ver resultados.", + "learnMoreAbout": "Más información sobre {{app}}", + "legacySearchCreatedByOn": "Creado por {{name}} el {{date}}", + "legacySearchError": "Error al buscar el término: {{term}}", + "legacySearchFilterBy": "Filtrar por", + "legacySearchItemMissingMeta": "Al elemento le falta el meta título", + "legacySearchNoResultsRich": "No se encontraron resultados para el término de búsqueda: {{term}}", + "legacySearchSearching": "Buscando", + "legacySearchSortBy": "Ordenar por", + "legacySearchSortCreated": "Creado", + "legacySearchSortDefault": "Predeterminado", + "legacySearchSortEdited": "Editado", + "legacySearchSortTitle": "Título", + "legacySearchSortUser": "Usuario", + "legacySearchVersionEdited": "La versión {{version}} se editó {{editedAgo}}", + "limit": "Límite", + "loadingLogoAlt": "Mostrando el logotipo de Zesty.io mientras se carga la aplicación", + "loginFailedContactSupport": "Error al iniciar sesión. Contacta con soporte en {{email}}.", + "loginProblem": "Hubo un problema al iniciar sesión", + "loginRequestDeniedRedirecting": "Tu solicitud de inicio de sesión fue denegada. Redirigiendo al inicio de sesión.", + "loginRequestExpiredRedirecting": "Tu solicitud de inicio de sesión expiró. Redirigiendo al inicio de sesión.", + "loginRequestValidationIssueRedirecting": "Parece que tuvimos un problema al validar esta solicitud de inicio de sesión. Redirigiendo al inicio de sesión.", + "loginSubtitle": "Vuelve a potenciar el mundo con contenido", + "manageInstanceHeadTags": "Administrar etiquetas Head de la instancia", + "markAsResolved": "Marcar como resuelto", + "missingMetaTitle": "Falta el meta título", + "missingModel": "Falta el modelo: {{ZUID}}", + "modelsInSchema": "Modelos en el esquema", + "moreOptions": "Más opciones", + "myNotifications": "Mis notificaciones", + "navApps": "Aplicaciones", + "navAppTooltip": "Aplicación {{name}}", + "navBlocks": "Bloques", + "navigate": "Navegar", + "navLaunchpad": "Panel de inicio", + "navLeads": "Prospectos", + "navRedirects": "Redirecciones", + "navRelease": "Lanzamientos", + "navReports": "Informes", + "navSchema": "Esquema", + "navSettings": "Configuración", + "navStudio": "Studio", + "needHelpContactSupport": "¿Necesitas ayuda? Contacta con soporte", + "noActionsTaken": "No se realizaron acciones", + "noFilterResults": "No se encontraron resultados que coincidieran con tus filtros", + "noFilterResultsSuggestion": "Prueba ajustar tus filtros para encontrar lo que buscas", + "noInstancePermissionBody1": "Tu cuenta no tiene permiso para acceder a esta instancia. Contacta al propietario o administrador de la instancia para que te agregue.", + "noInstancePermissionBody2": "Si crees que deberías tener acceso, asegúrate de estar usando la cuenta correcta.", + "noInvitePermissionBody": "Contacta a los propietarios o administradores de la instancia que aparecen a continuación para cambiar tu rol a Administrador o Propietario en esta instancia y obtener permisos para invitar usuarios.", + "noInvitePermissionTitle": "No tienes permiso para invitar usuarios", + "noPermissionImageAlt": "Sin permiso", + "noResultsFound": "No se encontraron resultados", + "noSearchResultsAlt": "Sin resultados de búsqueda", + "notFoundImageAlt": "No encontrado", + "onboardingCallAvatarAlt": "Avatar de ventas", + "onboardingCallButton": "Programar una llamada", + "onboardingCallTitle": "Programa una llamada de incorporación con nuestro equipo de soporte", + "openAiBadgeAlt": "Insignia de OpenAI", + "optionNumber": "Opción {{number}}", + "or": "o", + "password": "Contraseña", + "pinnedTabs": "Pestañas fijadas", + "publishItem": "Publicar elemento", + "publishItems": "Publicar elementos", + "recentlyModifiedItems": "{{items}} modificados recientemente", + "recentlyUploadedItems": "{{items}} subidos recientemente", + "recentSearches": "Búsquedas recientes", + "refreshCdnCache": "Actualizar caché de CDN", + "regenerate": "Regenerar", + "relationalAddExisting": "Agregar {{label}} existente", + "relationalCopyZuid": "Copiar ZUID", + "relationalCreateAddNew": "Crear y agregar nuevo {{label}}", + "relationalDateSaved": "Fecha de guardado", + "relationalDeletedItem": "{{zuid}} (Eliminado)", + "relationalDeselectAll": "Deseleccionar todo", + "relationalDraftPreview": "Vista previa de borrador - v{{version}}", + "relationalDragToReorder": "Arrastra y suelta para reordenar", + "relationalEditContentItem": "Editar elemento de contenido", + "relationalFieldsHeading": "Campos", + "relationalFilterItems": "Filtrar elementos", + "relationalImageAlt": "Imagen de {{name}}", + "relationalMoreOptions": "Más opciones", + "relationalProductionPreview": "Vista previa de producción - v{{version}}", + "relationalPublishNow": "Publicar ahora", + "relationalReplace": "Reemplazar", + "relationalReplaceItem": "Reemplazar elemento", + "relationalReplacementSelected": "Elemento de reemplazo seleccionado", + "relationalSchedulePublish": "Programar publicación", + "relationalSelected": "{{value}} seleccionado", + "relationalSelectField": "Seleccionar {{label}}", + "relationalSelectReplacement": "Seleccionar elemento de reemplazo", + "relationalSortBy": "Ordenar: {{value}}", + "relationalSortCreatedBy": "Creado por", + "relationalSortDateCreated": "Fecha de creación", + "relationalSortDescription": "Descripción", + "relationalSortLastPublished": "Última publicación", + "relationalSortLastSaved": "Último guardado", + "relationalSortStatus": "Estado", + "relationalSortVersion": "Versión", + "relationalStatusNotPublished": "No publicado", + "relationalStatusPublished": "Publicado", + "relationalStatusScheduled": "Programado", + "relationalVersionActionPublished": "publicado", + "relationalVersionActionSaved": "guardado", + "relationalVersionActionScheduled": "programado para publicar", + "relationalVersionTooltip": "v{{version}} {{action}} el {{date}} por {{publisher}}", + "relationalViewingSeeAll": "Viendo {{shown}} de {{total}} elementos. Ver todos.", + "relationalViewingSeeLess": "Viendo {{shown}} de {{total}} elementos. Ver menos.", + "reloadApplication": "Volver a cargar la aplicación", + "reopen": "Reabrir", + "repeaterAddAnotherField": "Añadir otro campo", + "repeaterAddRowTo": "Añadir fila a {{fieldName}}", + "repeaterCurrencyTooltip": "Ver este valor en diferentes monedas según tu configuración regional \"{{locale}}\"", + "repeaterEditRow": "Editar {{name}}", + "repeaterFieldLoadFailed": "Error al cargar el campo {{label}}. Haga clic aquí para ver el esquema del campo.", + "repeaterMissingOptionsRich": "Al campo {{label}} le faltan los ajustes de opciones. Edita el campo para añadir valores sí/no.", + "repeaterRemoveRow": "Eliminar fila", + "repeaterValueBetween": "El valor debe estar entre {{min}} y {{max}}", + "resetFilters": "Restablecer filtros", + "resourceType": "Tipo de recurso", + "resourceTypeTooltip": "Usa este filtro cuando quieras ver resultados de búsqueda solo para un único tipo de recurso, como un elemento de contenido, un modelo (esquema) o un archivo de código.", + "resumeSession": "Reanudar sesión", + "rightNow": "ahora mismo", + "roleAccessActivityLog": "Registro de actividad", + "roleAccessCode": "Código (Zesty IDE)", + "roleCanAccessMedia": "Puede acceder a medios y agregar archivos, pero no puede eliminar archivos.", + "roleCannotDeleteUsers": "No puede eliminar a otros usuarios", + "roleCannotPublish": "No puede publicar contenido. Para publicar contenido nuevo, los colaboradores deben enviar una solicitud de flujo de trabajo a un usuario con acceso de publicación.", + "roleCanOnlyCreateEdit": "Solo puede crear y editar contenido", + "saveFavicon": "Guardar favicon", + "schedulePublishButton": "Programar publicación", + "schedulePublishOnLabel": "Publicar el", + "schedulePublishPastWarning": "Como la hora seleccionada es una fecha actual o pasada, esto se publicará inmediatamente.", + "schedulePublishSavedInfo": "v{{version}} guardada {{distance}} por {{name}}", + "schedulePublishScheduledInfo": "La v{{version}} está programada para publicarse el {{date}} en {{timezone}}.", + "schedulePublishTitleSchedule": "Programar publicación", + "schedulePublishTitleUnschedule": "Desprogramar publicación", + "schedulePublishUnscheduleButton": "Desprogramar publicación", + "schedulePublishUnscheduleInfo": "Esto habilitará la posibilidad de programar o publicar otras versiones de este elemento de contenido", + "searchIn": "Buscar en...", + "searchInstancePlaceholder": "Buscar en la instancia {{shortcut}}", + "searchInstances": "Buscar instancias", + "searchNoResults": "Tu búsqueda “{{query}}” no arrojó ningún resultado", + "searchNoResultsRich": "Tu búsqueda \"{{query}}\" no arrojó ningún resultado", + "searchNoResultsSuggestion": "Prueba ajustar tu búsqueda. Te sugerimos comprobar que todas las palabras estén bien escritas o intentar con palabras clave diferentes.", + "searchPageByUser": " por {{user}}", + "searchPageCreated": "creado {{date}}", + "searchPageResults_one": "{{count}} resultado", + "searchPageResults_many": "{{count}} resultados", + "searchPageResults_other": "{{count}} resultados", + "searchPageResultsFor_one": "{{count}} resultado para \"{{query}}\"", + "searchPageResultsFor_many": "{{count}} resultados para \"{{query}}\"", + "searchPageResultsFor_other": "{{count}} resultados para \"{{query}}\"", + "searchTabs": "Buscar pestañas", + "searchUsers": "Buscar usuarios", + "seeAllNotifications": "Ver todas las notificaciones", + "seeListBelow": "Consulta la lista a continuación", + "selectDateRange": "Selecciona el rango de fechas...", + "selectFilterPlaceholder": "Introduce un término para filtrar esta lista", + "selectInstanceFavicon": "Seleccionar favicon de la instancia", + "selectMetaDescription": "Seleccionar meta descripción", + "selectMetaDescriptionHelp": "Selecciona 1 de las 3 meta descripciones que nuestra IA ha generado para ti.", + "selectMetaTitle": "Seleccionar meta título", + "selectMetaTitleHelp": "Selecciona 1 de los 3 meta títulos que nuestra IA ha generado para ti.", + "selectModel": "Seleccionar modelo", + "selectModelError": "Por favor, selecciona un modelo para continuar.", + "selectNoOptions": "No se encontraron opciones", + "selectPlaceholder": "Seleccionar", + "selectSearching": "Buscando elementos coincidentes", + "sessionEndedRedirecting": "Tu sesión finalizó. Redirigiendo al inicio de sesión.", + "sortMostRecentlyCreated": "Creados más recientemente", + "sortMostRecentlyModified": "Modificados más recientemente", + "sortValue": "Ordenar: {{value}}", + "stop": "Detener", + "storedAs": "Almacenado como {{value}}", + "switchAccount": "Cambiar de cuenta", + "switchInstance": "Cambiar de instancia", + "tabActivityLog": "Registro de actividad", + "tabActivityLogSuffix": "{{name}} - Registro de actividad", + "tabAllMedia": "Todos los medios", + "tabCustomApp": "Aplicación personalizada", + "tabFontsSuffix": "Fuentes de {{name}}", + "tabMetrics": "Métricas", + "tabNewItem": "Nuevo elemento de {{modelLabel}}", + "tabSearchResults": "Resultados de búsqueda de {{appName}}", + "tabSettingsSuffix": "Configuración de {{name}}", + "tabsResults_one": "{{count}} resultado", + "tabsResults_many": "{{count}} resultados", + "tabsResults_other": "{{count}} resultados", + "tinymceBlockFormatting": "Formato de bloque", + "tinymceBlockquote": "Cita en bloque", + "tinymceBulletedList": "Lista con viñetas", + "tinymceCenterAlign": "Centrar", + "tinymceClose": "Cerrar", + "tinymceConstrainProportions": "Restringir proporciones", + "tinymceEmbedSocialMedia": "Incrustar redes sociales", + "tinymceEmbedSocialMediaPost": "Incrustar una publicación de redes sociales", + "tinymceJustify": "Justificar", + "tinymceLeftAlign": "Alinear a la izquierda", + "tinymceLists": "Listas", + "tinymceNumberedList": "Lista numerada", + "tinymcePreformatted": "Preformateado", + "tinymceResizeImage": "Redimensionar imagen", + "tinymceResizeImageDimensions": "Redimensionar dimensiones de imagen", + "tinymceRightAlign": "Alinear a la derecha", + "tinymceSaveItem": "Guardar elemento", + "tinymceSelectBynderMedia": "Seleccionar medios de tus recursos de Bynder", + "tinymceSelectUploadedMedia": "Seleccionar medios de tus recursos subidos", + "tinymceService": "Servicio", + "tinymceSlashBulletedList": "Lista con viñetas", + "tinymceSlashCodeBlock": "Bloque de código", + "tinymceSlashEmbedSocialMedia": "Incrustar redes sociales", + "tinymceSlashEmoji": "Emoji", + "tinymceSlashHeading1": "Encabezado 1", + "tinymceSlashHeading2": "Encabezado 2", + "tinymceSlashHeading3": "Encabezado 3", + "tinymceSlashHeading4": "Encabezado 4", + "tinymceSlashHeading5": "Encabezado 5", + "tinymceSlashHeading6": "Encabezado 6", + "tinymceSlashImage": "Imagen", + "tinymceSlashLink": "Enlace", + "tinymceSlashNumberedList": "Lista numerada", + "tinymceSlashParagraph": "Párrafo", + "tinymceSlashQuote": "Cita", + "tinymceSlashSpecialCharacter": "Carácter especial", + "tinymceSlashTable": "Tabla", + "tinymceSlashTime": "Hora", + "tinymceSlashVideo": "Video", + "tinymceTextAlignment": "Alineación de texto", + "tinymceUniquePostId": "ID único de publicación", + "tone": "Tono", + "toneIntriguing": "Intrigante - Curioso, misterioso y estimulante", + "toneNameIntriguing": "Intrigante", + "toneNamePlayful": "Desenfadado", + "toneNameProfessional": "Profesional", + "toneNameSensational": "Sensacional", + "toneNameSuccinct": "Conciso", + "tonePlayful": "Desenfadado - Divertido, alegre y caprichoso", + "toneProfessional": "Profesional - Serio, formal y autoritativo", + "toneSensational": "Sensacional - Audaz, dramático y llamativo", + "toneSuccinct": "Conciso - Claro, factual y sin exageraciones", + "toneTooltip": "Define el estilo y el tono deseados del texto generado", + "topic": "Tema", + "topicPlaceholder": "ej. Rutas de senderismo en Washington", + "trySwitchingAccount": "prueba cambiar a otra cuenta.", + "twoFactorCodeHelp": "Recibirás este código en tu teléfono.", + "unableToInviteUsers_one": "No se pudo invitar a {{count}} usuario", + "unableToInviteUsers_many": "No se pudo invitar a {{count}} usuarios", + "unableToInviteUsers_other": "No se pudo invitar a {{count}} usuarios", + "unknownUser": "Usuario desconocido", + "unpinAll": "Desfijar todo", + "unpinAllTabsTitle": "¿Desfijar todas las pestañas del menú Ver más?", + "unsavedChangesBody": "Guarde o descarte sus cambios antes de desanclar esta pestaña", + "updateFavicon": "Actualizar favicon", + "uuidAutoGeneratedPlaceholder": "Los valores del campo UUID se generan automáticamente", + "uuidFieldReadOnly": "Este campo no se puede editar", + "viewAllLogs": "Ver todos los registros", + "viewOpenComment": "Ver comentario abierto", + "viewSourceCommit": "Ver commit del código fuente", + "viewWebEnginePreview": "Ver vista previa de WebEngine (Stage)", + "viewYourInstances": "Ver tus instancias", + "welcomeBack": "Hola, bienvenido de nuevo", + "wordLimit": "Límite de palabras", + "wordLimitTooltip": "Establece un límite de palabras para controlar la longitud del texto generado", + "zestyAccountTitle": "Cuenta de Zesty" +} diff --git a/public/locales/hi-IN/activePreview.json b/public/locales/hi-IN/activePreview.json new file mode 100644 index 0000000000..1a915dfdc7 --- /dev/null +++ b/public/locales/hi-IN/activePreview.json @@ -0,0 +1,16 @@ +{ + "disconnectedFromPreviewDomain": "पूर्वावलोकन डोमेन (preview domain) से कनेक्शन टूट गया है", + "findingDomain": "डोमेन खोजा जा रहा है", + "landscapeMode": "लैंडस्केप मोड", + "loadingRelatedItem": "संबंधित आइटम लोड किया जा रहा है", + "meta": "मेटा", + "noDevice": "कोई डिवाइस नहीं", + "noTemplate": "कोई टेम्प्लेट नहीं", + "noTemplateSelected": "कोई टेम्प्लेट नहीं चुना गया", + "resolveInvalidFields": "सुरक्षित करने और पूर्वावलोकन को अपडेट करने के लिए अमान्य फ़ील्ड मानों को ठीक करें", + "saveToUpdatePreview": "पूर्वावलोकन अपडेट करने के लिए सुरक्षित करें", + "saving": "सुरक्षित किया जा रहा है", + "sessionNotActive": "आपका सत्र (session) सक्रिय नहीं है। कृपया Zesty.io में लॉग इन करें", + "viewingMetaData": "इस रूट पर मौजूद आइटम के लिए मेटा डेटा देखा जा रहा है", + "web": "वेब" +} diff --git a/public/locales/hi-IN/blocks.json b/public/locales/hi-IN/blocks.json new file mode 100644 index 0000000000..e0e81c4d47 --- /dev/null +++ b/public/locales/hi-IN/blocks.json @@ -0,0 +1,28 @@ +{ + "addVariantsEmptyStateBody": "अपने वेरिएंट यहाँ जोड़ें। अपना पहला वेरिएंट बनाकर शुरुआत करें।", + "allBlocks": "सभी ब्लॉक्स", + "allBlocksTitle": "सभी ब्लॉक्स", + "blockImageAlt": "ब्लॉक इमेज", + "createBlock": "ब्लॉक बनाएं", + "createVariantOf": "{{label}} का वेरिएंट बनाएं", + "documentation": "दस्तावेज़ (Documentation)", + "emptyItemsListAlt": "खाली आइटम सूची", + "emptyStateBody": "ब्लॉक मॉडल किसी ब्लॉक की संरचना को परिभाषित करते हैं जैसे कि हीरो सेक्शन, फ़ीचर, प्रशंसापत्र (testimonial) आदि।", + "filterBlocks": "ब्लॉक्स फ़िल्टर करें", + "howToCreateBlock": "ब्लॉक कैसे बनाएं", + "howToUseBlocks": "ब्लॉक्स का उपयोग कैसे करें", + "introToWebComponents": "वेब कंपोनेंट्स का परिचय", + "noResultsAvailable": "\"{{filter}}\" के लिए कोई परिणाम उपलब्ध नहीं है", + "noSearchResultsAlt": "कोई खोज परिणाम नहीं", + "onboardingStep1Description": "कुछ ही क्लिक में अपनी वेबसाइट के किसी भी मौजूदा पेज पर एडिट करने योग्य ब्लॉक्स (जैसे हीरो इमेज/सेक्शन, प्रशंसापत्र (Testimonial), फॉर्म आदि) बनाएं और जोड़ें", + "onboardingStep1Title": "ब्लॉक्स का परिचय", + "onboardingStep2Description": "Schema में एक ब्लॉक मॉडल बनाएं और एडिट करने योग्य फ़ील्ड्स को परिभाषित करें। और फिर इन फ़ील्ड्स को अपने ब्लॉक के लिए कोड टेम्प्लेट में कनेक्ट करें।", + "onboardingStep2Title": "ब्लॉक कैसे बनाएं", + "onboardingStep3Description": "इन ब्लॉक्स के वेरिएंट (variants) ब्लॉक्स ऐप में बनाए जा सकते हैं और ब्लॉक कंटेंट फ़ील्ड का उपयोग करके या फ्रीस्टाइल (Freestyle) के साथ वेबपेजों में जोड़े जा सकते हैं।", + "onboardingStep3Title": "किसी भी वेब पेज पर ब्लॉक वेरिएंट बनाएं और जोड़ें", + "searchBlocksPlaceholder": "ब्लॉक्स खोजें", + "startByCreatingBlocks": "ब्लॉक्स बनाकर शुरुआत करें", + "startCreatingVariantsNow": "अभी वेरिएंट बनाना शुरू करें", + "takeProductTour": "प्रोडक्ट टूर लें", + "variantName": "वेरिएंट का नाम" +} diff --git a/public/locales/hi-IN/code.json b/public/locales/hi-IN/code.json new file mode 100644 index 0000000000..65b573a00e --- /dev/null +++ b/public/locales/hi-IN/code.json @@ -0,0 +1,135 @@ +{ + "ajaxJsonDescription": "एंडपॉइंट या कस्टम अनुभव बनाने के लिए Parsley द्वारा एक्सेस की जा सकने वाली फ़ाइल। इन फ़ाइलों का नाम /my/file/path.json जैसे एक्सटेंशन के साथ पूरे पाथ में होना चाहिए। यह फ़ाइल hash-dev.preview.zesty.io/my/file/path.json पर सुलभ है। उपयोग किए जा सकने वाले फ़ाइल प्रकार: css, html, json, js, xml, csv, tsv, xml, yaml, md, svg, rss, ics, vcf, xhtml।", + "allFiles": "सभी फ़ाइलें", + "apiDocs": "API दस्तावेज़", + "apiErrorDeletingFile": "फ़ाइल को डिलीट करने का प्रयास करते समय API त्रुटि हुई। {{fileName}}", + "apiErrorLoadingFileVersions": "फ़ाइल के वर्ज़न लोड करते समय API त्रुटि", + "auditTrailEmptyHint": "जब यह फ़ाइल सुरक्षित या पब्लिश की जाएगी, तो आप देख पाएंगे कि इसे कब और किसके द्वारा बदला गया था।", + "auditTrailLoadError": "एक्टिविटी लॉग लोड करने में असमर्थ", + "branch": "ब्रांच", + "buildFasterBody": "Zesty.io की टेम्प्लेटिंग भाषा के साथ डायनेमिक वेबसाइट और एप्लिकेशन बनाना शुरू करें। त्वरित व्यावहारिक परिचय के लिए हमारे इंटरैक्टिव को एक्सप्लोर करें, या हमारे विस्तृत के माध्यम से अधिक जानें।", + "buildFasterHeading": "Parsley के साथ तेज़ी से और स्मार्ट तरीके से बनाएं!", + "changeCombineOrder": "कम्बाइन और प्री-प्रोसेस का क्रम बदलें", + "chooseFileType": "फ़ाइल का प्रकार चुनें", + "closeDrawer": "ड्रॉर बंद करें {{metaShortcut}}", + "compilesToSiteCss": "{{file}} में संकलित होता है", + "compilesToSiteJs": "{{file}} में संकलित होता है", + "couldNotLoadFile": "{{fileType}} {{fileZUID}} को लोड नहीं किया जा सका", + "createFile": "फ़ाइल बनाएं", + "createFileError": "फ़ाइल {{name}} बनाने में विफल। {{error}}", + "createFileSuccess": "नई फ़ाइल {{name}} बनाई गई", + "createNavType": "{{navType}} बनाएं", + "createScript": "स्क्रिप्ट बनाएं", + "createStylesheet": "स्टाइलशीट बनाएं", + "createView": "View बनाएं", + "cssDescription": "एक कैस्केडिंग स्टाइलशीट जो स्वचालित रूप से एक एकल css फ़ाइल /main.css में संयोजित हो जाती है, जो webengine वेब पेजों के head में ऑटो-शामिल होती है। संयोजन के सॉर्ट क्रम को नियंत्रित किया जा सकता है। कोई ट्रांसपाइलिंग नहीं होती है।", + "deleteFile": "फ़ाइल डिलीट करें", + "deleteFileCdnWarning": "किसी फ़ाइल को डिलीट करने से वह हट जाएगी और CDN पर्ज (purge) सक्रिय हो जाएगा, जिससे प्रोडक्शन तुरंत अपडेट हो जाएगा।", + "deleteFileError": "फ़ाइल {{fileName}} को डिलीट करने में विफल। {{error}}", + "deleteFileLabel": "फ़ाइल डिलीट करें", + "developerResources": "डेवलपर रिसोर्सेज", + "diffVersions": "वर्ज़न की तुलना करें (Diff)", + "editItemContent": "आइटम सामग्री संपादित करें", + "editLinkedContent": "लिंक किए गए कंटेंट को एडिट करें", + "editLinkedSchema": "लिंक किए गए स्कीमा को एडिट करें", + "editRelatedContent": "संबंधित कंटेंट को एडिट करें", + "editRelatedModel": "संबंधित मॉडल संपादित करें", + "errorSavingFileSortOrder": "फ़ाइल का सॉर्ट क्रम सुरक्षित करते समय हमें एक त्रुटि का सामना करना पड़ा। यह संभवतः हमारी ओर से एक समस्या है।", + "failedToLoadHeaders": "हेडर्स लोड करने में विफल। {{status}}", + "fetchDevFilesError": "इन्स्टेंस {{type}} की डेव फ़ाइलें लोड करने में विफल। {{status}} | {{error}}", + "fetchFileError": "फ़ाइल लोड करने में विफल। {{status}} | {{error}}", + "fetchFileVersionsError": "फ़ाइल के वर्ज़न लोड करने में असमर्थ। {{status}}", + "fetchLiveFilesError": "इन्स्टेंस {{type}} की लाइव फ़ाइलें लोड करने में विफल। {{status}} | {{error}}", + "fileInformation": "फ़ाइल की जानकारी", + "fileListHeaderFileName": "फ़ाइल का नाम", + "fileListHeaderLastSaved": "अंतिम सहेजा गया", + "fileLocked": "फ़ाइल लॉक है", + "fileLockedDescriptionRich": "{{firstName}} {{lastName}} {{formattedDate}} से {{name}} देख रहे हैं। इस चेतावनी को अनदेखा करने और संभवतः {{firstName}} के बदलावों को ओवरराइट करने के लिए इस आइटम को अनलॉक करें।", + "fileName": "फ़ाइल का नाम", + "fileNavHeaderSiteCss": "Site.css", + "fileNavHeaderSiteJs": "Site.js", + "fileNavHeaderViews": "दृश्य", + "fileNavTooltipSiteCss": "Site.css इन्स्टेंस की स्टाइलशीट फ़ाइलों से डायनेमिक रूप से बनाई गई एक फ़ाइल है", + "fileNavTooltipSiteJs": "Site.js इन्स्टेंस की JavaScript फ़ाइलों से डायनेमिक रूप से बनाई गई एक फ़ाइल है", + "fileNavTooltipViews": "Views ऐसी टेम्प्लेट फ़ाइलें हैं जो HTML या विभिन्न अन्य MIME प्रकारों को रेंडर कर सकती हैं।", + "fileNotFound": "फ़ाइल नहीं मिल सकी। {{fileZUID}}", + "fileNotFoundToSave": "हम उस फ़ाइल को ढूंढने में असमर्थ रहे जिसे आप सुरक्षित करने का प्रयास कर रहे हैं।", + "fileSortOrderSaved": "फ़ाइल का सॉर्ट क्रम सुरक्षित कर दिया गया है", + "fileType": "फ़ाइल का प्रकार", + "fileTypeChoose": "फ़ाइल का प्रकार चुनें", + "fileTypeCss": "CSS फ़ाइल (css)", + "fileTypeCustom": "कस्टम फ़ाइल प्रकार ({{extension}})", + "fileTypeCustomEndpoint": "कस्टम फ़ाइल प्रकार/एंडपॉइंट (मिश्रित एक्सटेंशन)", + "fileTypeJavaScript": "JavaScript फ़ाइल (js)", + "fileTypeLegacy": "लेगेसी फ़ाइल", + "fileTypeLess": "LESS फ़ाइल (less)", + "fileTypeModelView": "मॉडल व्यू", + "fileTypeScss": "SCSS फ़ाइल (scss/sass)", + "fileTypeSnippet": "स्निपेट (html)", + "fileZuid": "फ़ाइल ZUID", + "filterFiles": "फ़ाइलें फ़िल्टर करें", + "findingFile": "फ़ाइल खोजी जा रही है", + "findingFileVersions": "फ़ाइल के वर्ज़न खोजे जा रहे हैं", + "headerTitle": "कोड", + "instantJsonApi": "Instant JSON API", + "javascriptDescription": "एक javascript फ़ाइल जो स्वचालित रूप से एकल /main.js फ़ाइल में संयोजित हो जाती है जिसे webengine द्वारा स्वचालित रूप से लोड किया जाता है। कोई ट्रांसपाइलिंग नहीं होती है।", + "lastEdited": "अंतिम बार एडिट किया गया", + "learnMoreParsleySyntax": "Parsley सिंटैक्स के बारे में अधिक जानें", + "learnMoreProcessingFlows": "प्रोसेसिंग फ्लो के बारे में अधिक जानें", + "lessDescription": "इसकी पहुंच settings > variables तक है। एक कैस्केडिंग स्टाइलशीट जो स्वचालित रूप से एकल /main.css में संयोजित हो जाती है। संयोजन के सॉर्ट क्रम और ट्रांसपाइलिंग को नियंत्रित किया जा सकता है।", + "linkedContent": "लिंक किया गया कंटेंट", + "linkedContentDescription": "इस व्यू के लिंक किए गए मॉडल से तीन नवीनतम कंटेंट प्रविष्टियां दिखाई गई हैं।", + "linkedSchemaBodyText": "इस मॉडल के फ़ील्ड्स को संदर्भित करने के लिए नीचे दी गई Parsley सिंटैक्स का उपयोग करें। यह फ़ील्ड के कंटेंट से डायनेमिक रूप से लिंक हो जाएगा।", + "linkedSchemaTitle": "{{fileName}} का संबंधित मॉडल स्कीमा", + "live": "लाइव", + "loadingFileInformation": "फ़ाइल की जानकारी लोड हो रही है", + "loadVersion": "वर्ज़न लोड करें", + "modelZuid": "मॉडल ZUID", + "moreFileInformation": "अधिक फ़ाइल जानकारी", + "mustProvideFileName": "आपको नई फ़ाइल के लिए एक नाम देना होगा", + "mustSelectFileType": "नई फ़ाइल बनाने के लिए आपको फ़ाइल का प्रकार चुनना होगा", + "newRemoteVersionNotice": "आपके स्थानीय बदलावों से आगे एक नया रिमोट वर्ज़न उपलब्ध है", + "noFilesFound": "कोई फ़ाइल नहीं मिली", + "noResultsFor": "\"{{keyword}}\" के लिए कोई परिणाम नहीं", + "openDrawer": "ड्रॉर खोलें {{metaShortcut}}", + "openForAdditionalFileInfo": "अतिरिक्त फ़ाइल जानकारी के लिए खोलें", + "orderFilesBody": "दिखाया गया क्रम वह क्रम है जिसमें फ़ाइलों को प्रोसेस और एक साथ संयोजित किया जाता है डायनेमिक रूप से बनाई गई {{siteFile}} फ़ाइल में।", + "orderFilesPublishWarning": "क्रम बदलने के बाद, नए क्रम को प्रोसेस करने और बदलाव को लाइव करने के लिए पब्लिश करना आवश्यक है।", + "orderFilesSaveOrder": "क्रम सुरक्षित करें", + "orderFilesTitle": "{{typePathPart}} का क्रम बदलें", + "pleaseAddLeadingSlash": "कृपया फ़ाइल पाथ में शुरुआत में स्लैश जोड़ें जैसे: /{{name}}", + "previewCssWebpage": "CSS का पूर्वावलोकन", + "previewFileWebpage": "{{fileName}} का पूर्वावलोकन करें", + "previewInstantJson": "{{path}} का पूर्वावलोकन करें", + "previewItemWebpage": "आइटम वेबपेज का पूर्वावलोकन", + "previewJavascriptWebpage": "Javascript का पूर्वावलोकन", + "previewJson": "JSON का पूर्वावलोकन", + "previewPathWebpage": "{{path}} का पूर्वावलोकन करें", + "publish": "पब्लिश करें", + "publishedVersion": "पब्लिश किया गया: वर्ज़न {{n}}", + "publishFileError": "फ़ाइल पब्लिश करने में विफल। {{status}} | {{error}}", + "publishFileShortcut": "फ़ाइल पब्लिश करें {{shortcut}}", + "publishFileSuccess": "{{fileName}} का वर्ज़न {{latestVersion}} पब्लिश किया गया", + "saveAndPublish": "सुरक्षित करें और पब्लिश करें", + "saveFileError": "फ़ाइल सुरक्षित करने में विफल। {{status}} | {{error}}", + "saveFileShortcut": "फ़ाइल सुरक्षित करें {{shortcut}}", + "saveFileSuccess": "{{fileName}} को सुरक्षित किया गया", + "saveVersion": "वर्ज़न सुरक्षित करें", + "scssDescription": "इसकी पहुंच settings > variables तक है। एक कैस्केडिंग स्टाइलशीट जो स्वचालित रूप से एकल /main.css में संयोजित हो जाती है। संयोजन के सॉर्ट क्रम और ट्रांसपाइलिंग को नियंत्रित किया जा सकता है।", + "searchFiles": "फ़ाइलें खोजें", + "simplifyWorkflowBody": "हमारे सुव्यवस्थित वर्कफ़्लो खोजें और अपनी डेवलपमेंट दक्षता बढ़ाएं। देखें कि यह हमारे के साथ कैसे काम करता है।", + "simplifyWorkflowHeading": "अपने वर्कफ़्लो को सरल बनाएं: प्रीप्रोसेसिंग की सुविधा उपलब्ध! 💻", + "snippetDescription": "Parsley द्वारा एक्सेस की जा सकने वाली फ़ाइल जिसका उद्देश्य कोड के सामान्य उपयोग को संक्षिप्त करना या फ़ाइल निर्माण को व्यवस्थित करना है। उदाहरण: slider, footer, header। इन्हें each लूप के अंदर भी इस्तेमाल किया जा सकता है।", + "startingCodeEditor": "कोड एडिटर शुरू किया जा रहा है", + "unableToLoadFileLogs": "कोड फ़ाइल के लॉग लोड करने में असमर्थ", + "unknown": "अज्ञात", + "unlock": "अनलॉक करें", + "unsavedChangesDetail": "आपके पास कुछ असुरक्षित बदलाव हैं जो इस पेज को छोड़ने पर नष्ट हो जाएंगे।", + "versionLabel": "वर्ज़न {{n}}", + "versionPublishedByUser": "v{{n}} को {{date}} पर {{user}} द्वारा पब्लिश किया गया", + "versionSavedByUser": "v{{n}} को {{date}} पर {{user}} द्वारा सुरक्षित किया गया", + "viewingVersion": "देखा जा रहा है: वर्ज़न {{n}}", + "viewNotFound": "View नहीं मिला", + "webEngineFileLink": "WebEngine {{fileName}} लिंक", + "webEngineLink": "WebEngine लिंक" +} diff --git a/public/locales/hi-IN/common.json b/public/locales/hi-IN/common.json new file mode 100644 index 0000000000..59c27a6fa0 --- /dev/null +++ b/public/locales/hi-IN/common.json @@ -0,0 +1,74 @@ +{ + "add": "जोड़ें", + "apis": "APIs", + "back": "वापस", + "cancel": "रद्द करें", + "clear": "साफ़ करें", + "code": "कोड", + "codeFile": "कोड फ़ाइल", + "codeFiles": "कोड फ़ाइलें", + "comment": "टिप्पणी करें", + "content": "सामग्री", + "contentItems": "कंटेंट आइटम", + "copied": "कॉपी किया गया", + "copy": "कॉपी करें", + "create": "बनाएं", + "createdBy": "द्वारा बनाया गया", + "dateAfterValue": "{{date}} के बाद", + "dateAtTime": "{{date}} को {{time}} बजे", + "dateBeforeValue": "{{date}} से पहले", + "dateOnValue": "{{date}} को", + "delete": "डिलीट करें", + "dev": "डेव", + "discard": "खारिज करें", + "domains": "डोमेन", + "done": "हो गया", + "edit": "संपादित करें", + "getStarted": "शुरू करें", + "goBack": "वापस जाएं", + "graphqlDocs": "GraphQL दस्तावेज़", + "instanceApiDocs": "Instance API दस्तावेज़", + "invalidDate": "अमान्य तारीख", + "last12Months": "पिछले 12 महीने", + "last30Days": "पिछले 30 दिन", + "last3Months": "पिछले 3 महीने", + "last7Days": "पिछले 7 दिन", + "locales": "भाषा सेटिंग", + "manage": "प्रबंधित करें", + "media": "मीडिया", + "mediaItems": "मीडिया आइटम", + "mediaRequests": "मीडिया अनुरोध", + "model": "मॉडल", + "models": "मॉडल", + "more": "और", + "name": "नाम", + "next": "अगला", + "no": "नहीं", + "noUsersFound": "कोई उपयोगकर्ता नहीं मिला", + "open": "खोलें", + "parsleyDocs": "Parsley दस्तावेज़", + "platformDocs": "प्लेटफ़ॉर्म दस्तावेज़", + "preview": "पूर्वावलोकन", + "prod": "प्रोड", + "remove": "हटाएं", + "replace": "बदलें", + "reply": "जवाब दें", + "save": "सहेजें", + "search": "खोजें", + "searchAgain": "फिर से खोजें", + "sortNameAToZ": "नाम (A से Z)", + "sortNameZToA": "नाम (Z से A)", + "stage": "स्टेज", + "support": "सहायता", + "teams": "टीमें", + "today": "आज", + "unsavedChanges": "अनसहेजे परिवर्तन", + "update": "अपडेट करें", + "upload": "अपलोड करें", + "usage": "उपयोग", + "users": "उपयोगकर्ता", + "view": "देखें", + "webhooks": "वेबहुक", + "yes": "हाँ", + "yesterday": "कल" +} diff --git a/public/locales/hi-IN/content.json b/public/locales/hi-IN/content.json new file mode 100644 index 0000000000..5e8889be33 --- /dev/null +++ b/public/locales/hi-IN/content.json @@ -0,0 +1,730 @@ +{ + "addFieldsInSchemaButton": "स्कीमा में फ़ील्ड जोड़ें", + "addFieldsTitle": "अपने मॉडल में फ़ील्ड जोड़ें", + "analyticsAuthenticateGoogle": "Google से प्रमाणित करें", + "analyticsAvgTimeLabel": "औसत समय", + "analyticsBarCountry": "देश", + "analyticsBarSource": "स्रोत", + "analyticsByDay": "प्रतिदिन {{type}}", + "analyticsChangeAccount": "Google खाता बदलें", + "analyticsChartAvgEngagement": "औसत एंगेजमेंट समय", + "analyticsColStats": "आँकड़े", + "analyticsComparePage": "पेज की तुलना करें", + "analyticsComparePageBody": "कृपया वह पेज चुनें जिससे आप अपने वर्तमान पेज की तुलना करना चाहते हैं", + "analyticsConnectBody": "जानें कि आपके पेजों का ट्रैफ़िक कहाँ से आता है और कंटेंट में किए गए बदलावों के आधार पर यह कैसे बदलता है। शुरू करने के लिए, कृपया उस Google खाते से प्रमाणित करें जिससे आपका Google Analytics जुड़ा है।", + "analyticsConnectedAccount": "आप वर्तमान में निम्नलिखित Google खाते से कनेक्ट हैं।", + "analyticsConnectedSubtitle": "यह जानने के लिए तैयार हो जाइए कि आपके कंटेंट के बदलावों ने आपके पेज ट्रैफ़िक और बहुत कुछ पर कैसे असर डाला है!", + "analyticsConnectedTitle": "बधाई हो {{name}}! आप सफलतापूर्वक Google Analytics से कनेक्ट हो गए हैं", + "analyticsConnectErrorSubtitle": "ऐसा इसलिए हो सकता है क्योंकि आपने एक ऐसा Google खाता चुना हो जिसमें Google Analytics सेटअप नहीं है।", + "analyticsConnectErrorTitle": "ओह, हम Google Analytics से सफलतापूर्वक कनेक्ट नहीं कर सके", + "analyticsConnectTitle": "Google Analytics से कनेक्ट करें", + "analyticsContactSupport": "सहायता से संपर्क करें", + "analyticsDashboard": "डैशबोर्ड", + "analyticsDisconnectAccount": "खाता डिस्कनेक्ट करें", + "analyticsDisconnectBody": "डिस्कनेक्ट करने का मतलब है कि आप Zesty में किसी भी कंटेंट आइटम के लिए एनालिटिक्स नहीं देख पाएँगे।", + "analyticsDisconnectTitle": "Google Analytics खाता डिस्कनेक्ट करें?", + "analyticsGaSettings": "GA सेटिंग्स", + "analyticsGoogleIconAlt": "Google Analytics आइकन", + "analyticsItemMetaLine": "{{label}} • {{time}} • {{user}} द्वारा", + "analyticsItemNotExist": "यह आइटम आपके इंस्टेंस में मौजूद नहीं है", + "analyticsItemPublished": "आइटम प्रकाशित", + "analyticsLearnMore": "और जानें", + "analyticsLegendNew": "नए", + "analyticsLegendOther": "अन्य", + "analyticsLegendReturning": "लौटने वाले", + "analyticsMetricAvgDuration": "औसत अवधि", + "analyticsMetricAvgDurationDesc": "सत्र अवधि वह समयावधि है जिसके दौरान वेबसाइट पर उपयोगकर्ता इंटरैक्शन हो रहे होते हैं।", + "analyticsMetricAvgEngagement": "औसत एंगेजमेंट समय", + "analyticsMetricAvgEngagementDesc": "औसत एंगेजमेंट समय वह औसत समय है जिसके दौरान आपकी वेबसाइट उपयोगकर्ता के ब्राउज़र में फोकस में थी या कोई मोबाइल ऐप उपयोगकर्ता के डिवाइस पर अग्रभूमि में थी।", + "analyticsMetricBounceRate": "बाउंस दर", + "analyticsMetricBounceRateDesc": "बाउंस दर उन लोगों का प्रतिशत है जो किसी पेज पर आते हैं और कोई विशिष्ट क्रिया किए बिना चले जाते हैं।", + "analyticsMetricConversions": "रूपांतरण", + "analyticsMetricConversionsDesc": "रूपांतरण उपयोगकर्ता की एक ऐसी क्रिया है जिसे आप गिनते हैं क्योंकि आप उसे महत्वपूर्ण मानते हैं, जैसे खरीदारी, गेम लेवल पूरा करना, या वेबसाइट या ऐप स्क्रॉल गतिविधि।", + "analyticsMetricEvents": "इवेंट", + "analyticsMetricSessions": "सत्र", + "analyticsMetricSessionsDesc": "Google Analytics में एक सत्र वह समयावधि है जिसमें कोई उपयोगकर्ता आपकी वेबसाइट के साथ इंटरैक्ट करता है।", + "analyticsMetricViews": "व्यू", + "analyticsMetricViewsDesc": "एक पेजव्यू को आपके साइट के किसी पेज के व्यू के रूप में परिभाषित किया जाता है जिसे Analytics ट्रैकिंग कोड द्वारा ट्रैक किया जा रहा है। यदि कोई उपयोगकर्ता पेज पर पहुँचने के बाद रीलोड पर क्लिक करता है या किसी अन्य पेज पर जाता है और फिर मूल पेज पर लौटता है, तो इसे एक अतिरिक्त पेज व्यू के रूप में गिना जाता है।", + "analyticsNewUsersDesc": "नए उपयोगकर्ता वे उपयोगकर्ता हैं जिन्होंने पहले कभी आपकी वेबसाइट या ऐप पर विज़िट नहीं किया है", + "analyticsNewUsersForRange": "{{range}} के लिए नए उपयोगकर्ता", + "analyticsNewVsReturning": "नए बनाम लौटने वाले उपयोगकर्ता", + "analyticsPageSettingsTitle": "पेज एनालिटिक्स सेटिंग्स", + "analyticsPresetQuarterToDate": "तिमाही अब तक", + "analyticsPresetThisWeek": "इस सप्ताह (रवि - आज)", + "analyticsPresetThisYear": "इस वर्ष (जन - आज)", + "analyticsPropertiesCount": "{{count}} प्रॉपर्टी", + "analyticsPropertiesCount_one": "{{count}} प्रॉपर्टी", + "analyticsPropertiesCount_other": "{{count}} प्रॉपर्टीज़", + "analyticsRangeDayBeforeYesterday": "परसों", + "analyticsRangeLast12Months": "पिछले 12 महीने", + "analyticsRangeLast14Days": "पिछले 14 दिन", + "analyticsRangeLast30Days": "पिछले 30 दिन", + "analyticsRangeLast3Months": "पिछले 3 महीने", + "analyticsRangeLast7Days": "पिछले 7 दिन", + "analyticsRangeLastQuarter": "पिछली तिमाही", + "analyticsRangeLastWeek": "पिछले सप्ताह", + "analyticsRangeLastYear": "पिछले वर्ष", + "analyticsRangePrior12Months": "पूर्व 12 महीने", + "analyticsRangePrior14Days": "पूर्व 14 दिन", + "analyticsRangePrior30Days": "पूर्व 30 दिन", + "analyticsRangePrior3Months": "पूर्व 3 महीने", + "analyticsRangePrior7Days": "पूर्व 7 दिन", + "analyticsRangeThisQuarter": "इस तिमाही", + "analyticsRangeThisWeek": "इस सप्ताह", + "analyticsRangeThisYear": "इस वर्ष", + "analyticsRecentPublishes": "हाल की प्रकाशनाएँ", + "analyticsReturningUsersDesc": "लौटने वाले उपयोगकर्ता वे उपयोगकर्ता हैं जिन्होंने पहले कभी आपकी वेबसाइट या ऐप पर विज़िट नहीं किया है", + "analyticsReturningUsersForRange": "{{range}} के लिए लौटने वाले उपयोगकर्ता", + "analyticsSearchProperties": "Google Analytics प्रॉपर्टी खोजें", + "analyticsSearchResults": "खोज परिणाम", + "analyticsSelectProperty": "एक Google Analytics प्रॉपर्टी चुनें", + "analyticsSelectPropertyBody": "कृपया वह Google Analytics प्रॉपर्टी चुनें जिसके लिए आप एनालिटिक्स और अंतर्दृष्टि देखना चाहते हैं", + "analyticsSourceIncreased": "{{source}} उपयोगकर्ता {{percentage}}% बढ़े — {{range}}", + "analyticsTabGainers": "बढ़ते हुए", + "analyticsTabLatestPublishes": "नवीनतम प्रकाशन", + "analyticsTabLosers": "घटते हुए", + "analyticsTabMostPopular": "सबसे लोकप्रिय", + "analyticsTabRecentEdits": "हाल के संपादन", + "analyticsTotalSessions": "कुल सत्र", + "analyticsTotalUsers": "कुल उपयोगकर्ता", + "analyticsTryAgain": "पुनः प्रयास करें", + "analyticsUnableToLoadMessage": "यह खराब इंटरनेट कनेक्शन के कारण हो सकता है, इसलिए कृपया पुनः प्रयास करें। यदि आप फिर भी इस समस्या का समाधान नहीं कर पाते हैं, तो कृपया सहायता से संपर्क करें।", + "analyticsUnableToLoadTitle": "एनालिटिक्स डेटा लोड नहीं हो सका", + "analyticsUsers": "उपयोगकर्ता", + "analyticsUsersBy": "{{type}} के अनुसार उपयोगकर्ता", + "analyticsUsersLabel": "उपयोगकर्ता", + "analyticsViewVersion": "वर्शन {{version}} देखें", + "apiCodeIdLabel": "API / Parsley कोड ID", + "apiCodeIdTooltip": "यह API प्रतिक्रियाओं में कुंजी के रूप में दिखाई देगा।", + "blockCreateVariant": "वेरिएंट बनाएँ", + "blockSearchAgain": "फिर से खोजें", + "blockSearchNoResults": "आपकी खोज \"{{search}}\" को कोई परिणाम नहीं मिला", + "blockSearchNoResultsHint": "अपनी खोज समायोजित करने का प्रयास करें। हमारा सुझाव है कि जाँच लें कि सभी शब्द सही ढंग से लिखे गए हैं या अलग कीवर्ड आज़माएँ।", + "blockSearchVariants": "वेरिएंट खोजें", + "blocksReferencedInCodeOrFreestyle": "कोड या फ्रीस्टाइल में संदर्भित ब्लॉक", + "blockTabCode": "कोड", + "blockTabInfo": "जानकारी", + "blockTabVariants": "वेरिएंट", + "booleanHide": "छिपाएं", + "booleanShow": "दिखाएं", + "browse": "ब्राउज़ करें", + "closeInspectorPanelAriaLabel": "इंस्पेक्टर पैनल बंद करें", + "codeSampleBaseTemplate": "बेस टेम्पलेट", + "codeSampleBaseTemplateTip": "ब्लॉक को रेंडर करने के लिए बेस टेम्पलेट का उपयोग करता है। यह वह डिफ़ॉल्ट टेम्पलेट है जो तब लागू होता है जब कोई विशिष्ट टेम्पलेट चयनित नहीं होता।", + "codeSampleBaseTemplateVersion": "संस्करण के साथ बेस टेम्पलेट", + "codeSampleBaseTemplateVersionTip": "किसी विशिष्ट संस्करण संख्या के साथ ब्लॉक को रेंडर करने के लिए बेस टेम्पलेट का उपयोग करता है। संस्करण पैरामीटर जोड़ने से आप टेम्पलेट के किसी विशेष संस्करण को लक्षित कर सकते हैं।", + "codeSampleBlockSelector": "ब्लॉक चयनकर्ता", + "codeSampleBlockSelectorTip": "किसी ब्लॉक चयनकर्ता फ़ील्ड के मान का उपयोग करता है। मॉडल बनाते समय \"block_selector_field\" को ब्लॉक चयनकर्ता फ़ील्ड के वास्तविक नाम से बदलें।", + "codeSampleSpecificVariant": "विशिष्ट ब्लॉक वेरिएंट", + "codeSampleSpecificVariantTip": "ब्लॉक के किसी विशिष्ट वेरिएंट का उपयोग करता है। वेरिएंट पैरामीटर ब्लॉक के किसी विशेष रूपांतर को उसके ZUID द्वारा लक्षित करता है।", + "connectItem": "आइटम कनेक्ट करें", + "contentFetchResourceFailed": "संसाधन प्राप्त करने में विफल। {{status}}", + "contentSearchItemFailed": "आइटम खोजने में विफल: {{error}}", + "correctFieldsBeforeSaving_one": "सहेजने से पहले कृपया निम्नलिखित {{count}} फ़ील्ड ठीक करें", + "correctFieldsBeforeSaving_other": "सहेजने से पहले कृपया निम्नलिखित {{count}} फ़ील्ड्स ठीक करें", + "csvImportColumnMismatch": "CSV फ़ाइल में कॉलम संख्या का बेमेल है", + "csvImportCreateItems": "आइटम बनाएँ", + "csvImportDuplicateColumns": "आपने इन कॉलमों का उपयोग दोहरा दिया है: {{columns}}", + "csvImportEmptyFile": "आपने एक खाली CSV फ़ाइल इम्पोर्ट की है", + "csvImportErrorsCount": "त्रुटियाँ {{count}}", + "csvImportErrorsCount_one": "त्रुटि {{count}}", + "csvImportErrorsCount_other": "त्रुटियाँ {{count}}", + "csvImportFailureCreating": "आइटम बनाने में विफल: {{error}}", + "csvImportImportedCount": "{{total}} में से {{count}} इम्पोर्ट किए गए", + "csvImportImportedCount_one": "{{total}} में से {{count}} इम्पोर्ट किए गए", + "csvImportImportedCount_other": "{{total}} में से {{count}} इम्पोर्ट किए गए", + "csvImportNone": "कोई नहीं", + "csvImportNotCsvFile": "आपने एक ऐसी फ़ाइल चुनी है जो CSV नहीं है", + "csvImportOpenFile": "CSV फ़ाइल खोलें", + "csvImportResolveDuplicates": "आपको डुप्लिकेट कॉलम विरोधों को हल करना होगा", + "csvImportSelectPathPart": "आपको Path Part के लिए एक कॉलम चुनना होगा", + "csvSettingsAllowedParams": "अनुमत क्वेरी पैरामीटर (अल्पविराम से अलग)", + "csvSettingsAllowedParamsDesc": "केवल अल्पविराम से अलग किए गए पैरामीटर नाम सूचीबद्ध करें। मान, ऐम्परसैंड, बराबर चिह्न या रिक्त स्थान शामिल न करें।", + "csvSettingsAutoPriority": "प्राथमिकता स्वतः सेट करें", + "csvSettingsCanonicalNotEnabled": "कैनोनिकल टैग सक्षम नहीं हैं। अधिक जानकारी के लिए पढ़ें", + "csvSettingsCanonicalOff": "बंद", + "csvSettingsCanonicalOnAllow": "चालू - कुछ पैरामीटर की अनुमति दें", + "csvSettingsCanonicalOnCustom": "चालू - कस्टम पथ या कस्टम URL", + "csvSettingsCanonicalOnIgnore": "चालू (क्वेरी पैरामीटर अनदेखा करता है)", + "csvSettingsCustomPathDesc": "कस्टम पथ के लिए: फ़ॉरवर्ड स्लैश से शुरू करें। कस्टम URL के लिए: http:// या https:// से शुरू करें", + "csvSettingsCustomPathLabel": "कस्टम पथ मान या URL", + "csvSettingsMetaLinkText": "मेटा लिंक टेक्स्ट", + "csvSettingsNoSitemap": "साइटमैप में न दिखाएँ", + "csvSettingsParentZuid": "पैरेंट ZUID", + "csvSettingsPathPart": "पथ भाग", + "currencyLocaleTooltip": "अपनी लोकेल \"{{locale}}\" के आधार पर इस मान को विभिन्न मुद्राओं में देखें", + "deleteItemFailure": "आइटम हटाने में विफल: {{statusText}}", + "deleteItemSuccess": "आइटम सफलतापूर्वक हटा दिया गया", + "disconnect": "डिस्कनेक्ट करें", + "editFieldButton": "फ़ील्ड संपादित करें", + "editorTypeHtml": "HTML", + "editorTypeInline": "इनलाइन", + "editorTypeMarkdown": "Markdown", + "editorTypeWysiwyg": "WYSIWYG", + "elementNotEditableHere": "इस एलिमेंट को यहां एडिट नहीं किया जा सकता।", + "emptyCreateModel": "कृपया एक नया सामग्री मॉडल बनाएँ", + "errorPublishing": "{{title}} को प्रकाशित करने में त्रुटि", + "errorScheduling": "{{title}} को शेड्यूल करने में त्रुटि", + "errorUnpublishing": "{{title}} को अप्रकाशित करने में त्रुटि", + "errorUnschedulingVersion": "संस्करण {{version}} को अनशेड्यूल करने में त्रुटि", + "exceedingMaxLength_one": "{{count}} वर्ण से अधिक।", + "exceedingMaxLength_other": "{{count}} वर्णों से अधिक।", + "failedFetchItemPublishing": "आइटम प्रकाशन प्राप्त करने में विफल: {{error}}", + "failedFetchItemPublishings": "{{status}}: आइटम प्रकाशन प्राप्त करने में विफल: {{error}}", + "failedFetchItemPublishingsError": "आइटम प्रकाशन प्राप्त करने में विफल: {{error}}", + "failedFetchModelPublishings": "मॉडल आइटम प्रकाशन प्राप्त करने में विफल: {{error}}", + "failedLoadingField": "{{label}} फ़ील्ड लोड करने में विफल। फ़ील्ड स्कीमा देखने के लिए यहाँ क्लिक करें।", + "fieldAddedOnLabel": "फ़ील्ड जोड़ा गया", + "fieldMetaArticleWriterDescription": "लंबे फॉर्म का आर्टिकल कंटेंट", + "fieldMetaBlockSelectorDescription": "एक पुन: प्रयोज्य कंटेंट ब्लॉक", + "fieldMetaColorDescription": "एक कलर वैल्यू", + "fieldMetaCurrencyDescription": "मौद्रिक मान", + "fieldMetaDateDescription": "एक कैलेंडर तारीख", + "fieldMetaDatetimeDescription": "एक तारीख और समय", + "fieldMetaDropdownDescription": "लिस्ट में से एक विकल्प", + "fieldMetaImagesDescription": "एसेट लाइब्रेरी से मीडिया", + "fieldMetaInternalLinkDescription": "किसी अन्य पेज का लिंक", + "fieldMetaLinkDescription": "एक एक्सटर्नल URL", + "fieldMetaMarkdownDescription": "Markdown-फ़ॉर्मेटेड टेक्स्ट", + "fieldMetaNumberDescription": "पूर्ण या दशमलव संख्याएं", + "fieldMetaOneToManyDescription": "संबंधित आइटम्स के लिंक", + "fieldMetaOneToOneDescription": "एक संबंधित आइटम का लिंक", + "fieldMetaRepeaterDescription": "फ़ील्ड्स का एक दोहराया जाने वाला समूह", + "fieldMetaSortDescription": "एक मैनुअल सॉर्ट ऑर्डर", + "fieldMetaTextareaDescription": "सादा मल्टी-लाइन टेक्स्ट", + "fieldMetaTextDescription": "शीर्षक, नाम और हेडिंग", + "fieldMetaUuidDescription": "एक यूनीक आइडेंटिफ़ायर", + "fieldMetaWysiwygDescription": "फ़ॉर्मेटिंग वाला रिच टेक्स्ट", + "fieldMetaYesNoDescription": "एक ट्रू / फॉल्स टॉगल", + "fieldTypeLabel": "{{type}} फ़ील्ड", + "fieldZuidLabel": "फ़ील्ड ZUID", + "fieldZuidTooltip": "प्रत्येक फ़ील्ड को सौंपा गया अद्वितीय हैश। इसका उपयोग हमारे API के माध्यम से किसी फ़ील्ड की जानकारी तक पहुँचने के लिए किया जा सकता है।", + "footerTagline": "Agentic Studio बाय Content.One", + "hideDialogHideBody1": "इससे {{label}} सामग्री आइटम पेज अनुभाग से नीचे दिए गए छिपे हुए आइटम अनुभाग में चला जाएगा। हम इस सुविधा का उपयोग केवल उन आइटम से अपने सामग्री नेविगेशन ट्री को व्यवस्थित करने के लिए करने की सलाह देते हैं जिन्हें आप बहुत बार एक्सेस नहीं करते।", + "hideDialogHideBody2": "इससे आपकी लाइव वेबसाइट या ऐप से आपका कोई लेख नहीं छिपेगा।", + "hideDialogHideButton": "{{label}} छिपाएँ", + "hideDialogHideTitle": "{{label}} छिपाएँ?", + "hideDialogUnhideBody": "इससे {{label}} सामग्री आइटम छिपे हुए आइटम अनुभाग से ऊपर दिए गए पेज अनुभाग में चला जाएगा।", + "hideDialogUnhideButton": "{{label}} दिखाएँ", + "hideDialogUnhideTitle": "{{label}} दिखाएँ?", + "invalidFieldValuesTitle": "अमान्य फ़ील्ड मानों के कारण आइटम सहेजा नहीं जा सकता।", + "itemCreateAddNew": "बनाएँ और नया जोड़ें", + "itemCreateCannotSaveError": "सहेजा नहीं जा सका: {{error}}", + "itemCreateCreatedItem": "आइटम बनाया गया: {{name}}", + "itemCreateImproveWithAI": "AI से बेहतर बनाएँ", + "itemCreateLoading": "नया आइटम बनाया जा रहा है", + "itemCreatePublishAddNew": "बनाएँ, प्रकाशित करें और नया जोड़ें", + "itemCreatePublishNow": "बनाएँ और अभी प्रकाशित करें", + "itemCreateSchedulePublish": "बनाएँ और प्रकाशन शेड्यूल करें", + "itemCreateSchedulePublishAddNew": "बनाएँ, प्रकाशन शेड्यूल करें और नया जोड़ें", + "itemCreateTitleItem": "{{label}} आइटम बनाएँ", + "itemCreateTitleVariant": "वैरिएंट बनाएँ", + "itemCreateUnknownIssue": "नया आइटम बनाने में अज्ञात समस्या", + "itemEditActions": "कार्रवाइयां", + "itemEditAddStatus": "स्थिति जोड़ें", + "itemEditAlsoPublishRelatedItems": "संबंधित आइटम भी प्रकाशित करें", + "itemEditAutomatedNavigationOrder": "स्वचालित नेविगेशन क्रम", + "itemEditAutomatedNavigationOrderTooltip": "स्वचालित नेविगेशन क्रम automated parsley {{navigation}} और {{sectionlinks}} के आउटपुट को नियंत्रित करता है। इसे each loop में भी इस्तेमाल किया जा सकता है, जैसे: {{each items as items sort by z.sort}} calls.", + "itemEditAvailableInLoops": "लूप में उपलब्ध", + "itemEditAvailableInLoopsTooltip": "यह निर्धारित करता है कि यह आइटम Parsley loops में उपलब्ध होगा या नहीं। एक सामान्य उदाहरण है किसी blog post को article listing page पर entry के रूप में दिखाना।", + "itemEditByUser": "{{name}} द्वारा", + "itemEditCannotPublishStatus": "प्रकाशित नहीं किया जा सकता: \"{{title}}\"। इसमें प्रकाशन की अनुमति देने वाली स्थिति नहीं है", + "itemEditCannotSaveTitle": "सहेजा नहीं जा सकता: {{title}}", + "itemEditCannotSaveTooManySelected": "फ़ील्ड सहेजा नहीं जा सकता। कृपया चयनित आइटम की कुल संख्या कम करें।", + "itemEditCannotSaveValueTooLong": "फ़ील्ड सहेजा नहीं जा सकता। मान बहुत लंबा है।", + "itemEditCannotSaveWithError": "सहेजा नहीं जा सकता: {{title}} - {{error}}", + "itemEditCdnDescription": "इस आइटम के लिए CDN cache को refresh करने के लिए बाध्य करें। CDN caching में कुछ सेकंड से कुछ मिनट लग सकते हैं क्योंकि आइटम पूरी global network में फिर से cache होता है।", + "itemEditCdnPurgeError": "CDN cache purge करने का प्रयास करते समय समस्या हुई", + "itemEditCdnPurgeSuccess": "आइटम CDN cache से purge कर दिया गया है", + "itemEditCdnTitle": "CDN", + "itemEditCloseInfoBar": "जानकारी बार बंद करें", + "itemEditContinueEditing": "संपादन जारी रखें", + "itemEditCreatedAt": "बनाया गया", + "itemEditDeleteConfirmTitle": "क्या आप वाकई इस आइटम को हटाना चाहते हैं:\n{{title}}", + "itemEditDeleteContentItemDescription": "इस आइटम को हटाने से यह आपकी साइट के सभी स्थानों से हट जाएगा और API requests के लिए अनुपलब्ध हो जाएगा। इसे वापस नहीं किया जा सकता।", + "itemEditDeleteContentItemTitle": "सामग्री आइटम हटाएं", + "itemEditDeletedNotFound": "आइटम हटा दिया गया है", + "itemEditDeleteItem": "आइटम हटाएं", + "itemEditDeleteThing": "{{thing}} हटाएं", + "itemEditDeleteVariant": "वैरिएंट हटाएं", + "itemEditDeleteWidgetDescription": "यह सामग्री हटाएं? यह आपकी साइट के सभी स्थानों से हट जाएगी और API requests के लिए अनुपलब्ध हो जाएगी।", + "itemEditDontSave": "सहेजें नहीं", + "itemEditDraftHistoryTitle": "ड्राफ्ट इतिहास", + "itemEditDraftPreviewVersion": "ड्राफ्ट पूर्वावलोकन - v{{version}}", + "itemEditDuplicateContentItemTitle": "सामग्री आइटम डुप्लिकेट करें", + "itemEditDuplicateDescription": "यह तुरंत इस आइटम की एक प्रति बनाएगा और सहेजेगा।", + "itemEditDuplicateFailed": "आइटम डुप्लिकेट करने में विफल।", + "itemEditDuplicateItem": "आइटम डुप्लिकेट करें", + "itemEditDuplicateVariant": "वैरिएंट डुप्लिकेट करें", + "itemEditEditCode": "कोड संपादित करें", + "itemEditEditStatuses": "स्थितियां संपादित करें", + "itemEditFailedFetchNav": "नेविगेशन लोड करने में विफल", + "itemEditFailedLoadFields": "फ़ील्ड लोड करने में विफल", + "itemEditFetchingPublishings": "प्रकाशन लाए जा रहे हैं", + "itemEditGoOffline": "ऑफलाइन करें", + "itemEditGoOnline": "ऑनलाइन करें", + "itemEditInfoTitle": "जानकारी", + "itemEditInstantApi": "तत्काल API", + "itemEditItem": "आइटम", + "itemEditItemLockedDescription": "{{name}} इस आइटम को {{viewedAt}} से देख रहे हैं। इस चेतावनी को अनदेखा करने और संभवतः {{firstName}} के बदलावों को overwrite करने के लिए आइटम अनलॉक करें।", + "itemEditItemLockedTitle": "आइटम लॉक है", + "itemEditLinksTitle": "लिंक", + "itemEditLive": "लाइव", + "itemEditLivePublished": "लाइव प्रकाशित", + "itemEditManagePublishState": "प्रकाशन स्थिति प्रबंधित करें", + "itemEditManagePublishStatus": "प्रकाशन स्थिति प्रबंधित करें", + "itemEditMetaAddImage": "मेटा छवि जोड़ें", + "itemEditMetaAddIncomingPath": "इनकमिंग पाथ जोड़ें", + "itemEditMetaAdvancedSettings": "उन्नत सेटिंग्स", + "itemEditMetaAdvancedSettingsDescription": "अपने कंटेंट आइटम के SEO को और बेहतर करें", + "itemEditMetaAiAssistedPrimary": "हां, AI Meta Data Assistant से सुधारें", + "itemEditMetaAiAssistedSecondary": "हमारा AI आपके कंटेंट को स्कैन करेगा और आपके लिए मेटा डेटा बनाएगा", + "itemEditMetaAiPromptDatasetSuffix": "आंतरिक कंटेंट खोज में।", + "itemEditMetaAiPromptDescriptionPrefix": "हमारा AI Assistant आपके कंटेंट को स्कैन करेगा और आपके मेटा शीर्षक व विवरण को बेहतर करेगा ताकि मदद मिल सके", + "itemEditMetaAiPromptSeoSuffix": "सर्च इंजन दृश्यता सुधारने में।", + "itemEditMetaAiPromptTitle": "क्या AI आपका मेटा डेटा लिखे?", + "itemEditMetaApiFailedTryAgain": "API ने डेटा वापस नहीं किया। फिर कोशिश करें।", + "itemEditMetaApiFailedWithStatus": "API ने डेटा वापस नहीं किया {{status}}", + "itemEditMetaCanonicalAllowedParameters": "अनुमत क्वेरी पैरामीटर (कॉमा से अलग)", + "itemEditMetaCanonicalAllowedParametersDescription": "केवल कॉमा से अलग पैरामीटर नाम लिखें। मान, ampersand, बराबर चिह्न या स्पेस शामिल न करें।", + "itemEditMetaCanonicalAllowedParametersPlaceholder": "पेज,श्रेणी", + "itemEditMetaCanonicalCustomPath": "कस्टम पाथ मान या URL", + "itemEditMetaCanonicalCustomPathDescription": "कस्टम पाथ के लिए: फॉरवर्ड स्लैश से शुरू करें। कस्टम URL के लिए: http:// या https:// से शुरू करें", + "itemEditMetaCanonicalCustomPathPlaceholder": "/page/example/ या https://example.com/", + "itemEditMetaCanonicalEnableDocsLink": "Canonical Tags सक्षम करना", + "itemEditMetaCanonicalNotEnabled": "Canonical tags सक्षम नहीं हैं। अधिक जानकारी के लिए पढ़ें", + "itemEditMetaCanonicalOff": "बंद", + "itemEditMetaCanonicalOnAllowParameters": "चालू - कुछ पैरामीटर अनुमति दें", + "itemEditMetaCanonicalOnCustomPath": "चालू - कस्टम पाथ या कस्टम URL", + "itemEditMetaCanonicalOnIgnoreQuery": "चालू (क्वेरी पैरामीटर अनदेखा करता है)", + "itemEditMetaCanonicalTag": "कैनोनिकल टैग", + "itemEditMetaCanonicalTagTooltip": "Canonical tags सर्च इंजन को प्रामाणिक लिंक समझने में मदद करते हैं और डुप्लिकेट कंटेंट समस्याओं को रोक सकते हैं। Zesty.io आपकी सेटिंग्स के आधार पर मांग पर tags अपने आप बनाता है।", + "itemEditMetaContentAndMetaMatchedWords": "कंटेंट और मेटा मेल खाते शब्द", + "itemEditMetaCustomizeImage": "छवि अनुकूलित करें", + "itemEditMetaDeleteRedirect": "रीडायरेक्ट हटाएं", + "itemEditMetaDescription": "मेटा विवरण", + "itemEditMetaDescriptionFoundLeftGuillemet": "<< अक्षर मिला। ये विशेष अक्षर मेटा विवरणों में अनुमति नहीं हैं।", + "itemEditMetaDescriptionFoundOeLigature": "OE ligature मिला। ये विशेष अक्षर मेटा विवरणों में अनुमति नहीं हैं।", + "itemEditMetaDescriptionFoundRightGuillemet": ">> अक्षर मिला। ये विशेष अक्षर मेटा विवरणों में अनुमति नहीं हैं।", + "itemEditMetaDescriptionFoundSmallOeLigature": "oe ligature मिला। ये विशेष अक्षर मेटा विवरणों में अनुमति नहीं हैं।", + "itemEditMetaDescriptionFoundSmartDoubleQuotes": "Microsoft Smart double quotes या apostrophe मिला। ये विशेष अक्षर मेटा विवरणों में अनुमति नहीं हैं क्योंकि वे गलत रेंडर हो सकते हैं। कृपया सीधे quotes का उपयोग करें।", + "itemEditMetaDescriptionFoundSmartSingleQuotes": "Microsoft Smart single quotes या apostrophe मिला। ये विशेष अक्षर मेटा विवरणों में अनुमति नहीं हैं क्योंकि वे गलत रेंडर हो सकते हैं। कृपया सीधे quotes का उपयोग करें।", + "itemEditMetaDescriptionPlaceholder": "यह वह विवरण है जिसे सर्च इंजन अपने परिणामों में उपयोग करें", + "itemEditMetaDescriptionTooltip": "यह विवरण सर्च इंजन और सोशल मीडिया प्रीव्यू में शीर्षक के नीचे टेक्स्ट स्निपेट के रूप में दिखता है। मेटा विवरण की आदर्श लंबाई 50 से 160 अक्षर है।", + "itemEditMetaEditRedirect": "रीडायरेक्ट संपादित करें", + "itemEditMetaFilterWords": "शब्द फिल्टर करें", + "itemEditMetaHttpCode": "HTTP कोड", + "itemEditMetaImage": "मेटा छवि", + "itemEditMetaImageFileExtensionsError": "केवल इन एक्सटेंशन वाली फाइलें अनुमति हैं: .png, .jpg, .jpeg, .svg, .gif, .tif, .webp, .avif", + "itemEditMetaImageTooltip": "यह छवि सर्च इंजन और सोशल मीडिया प्रीव्यू में दिखाई देती है। अनुशंसित है कि ये छवियां कम से कम 1200px x 630px हों और 1.91:1 अनुपात रखें।", + "itemEditMetaIncomingPath": "इनकमिंग पाथ", + "itemEditMetaIncomingRedirects": "इनकमिंग रीडायरेक्ट", + "itemEditMetaIncomingRedirectsDescription": "इस कंटेंट आइटम की ओर इशारा करने वाले रीडायरेक्ट प्रबंधित करें", + "itemEditMetaKeywords": "मेटा कीवर्ड", + "itemEditMetaKeywordsPlaceholder": "कॉमा, से, अलग, कीवर्ड", + "itemEditMetaKeywordsTooltip": "कीवर्ड कॉमा से अलग शब्द या वाक्यांश हैं जो आपके पेज का वर्णन करते हैं। 2011 में Google ने कीवर्ड को अस्वीकार किया था; कीवर्ड केवल आपके पेज रैंकिंग के विरुद्ध उपयोग होते हैं। सावधानी से उपयोग करें।", + "itemEditMetaManualPrimary": "नहीं, मैं इसे स्वयं सुधारूंगा और संपादित करूंगा", + "itemEditMetaManualSecondary": "यदि आप पहले से जानते हैं कि आपको कौन सा मेटा डेटा चाहिए तो यह उपयुक्त है", + "itemEditMetaMostMentionedWords": "कंटेंट आइटम में सबसे अधिक उल्लेखित शब्द", + "itemEditMetaMostMentionedWordsDescription": "जांचें कि आपके फोकस कीवर्ड कम से कम 2 बार आ रहे हैं।", + "itemEditMetaNavigationLinkText": "नेविगेशन लिंक टेक्स्ट", + "itemEditMetaNavigationLinkTextPlaceholder": "यह टेक्स्ट एप्लिकेशन नेविगेशन में उपयोग होता है", + "itemEditMetaNavigationLinkTextTooltip": "इस आइटम का शीर्षक जो Zesty नेविगेशन और Parsley navigation() फ़ंक्शन में प्रोग्राम से बने नेविगेशन में दिखाई देता है।", + "itemEditMetaNoMatchingWords": "कोई मेल खाते शब्द नहीं", + "itemEditMetaNonFillerWords": "गैर-फिलर शब्द", + "itemEditMetaNoRepeatedWords": "आपके कंटेंट आइटम में कोई शब्द 2 या अधिक बार नहीं आता", + "itemEditMetaOgDescriptionTooltip": "यह शीर्षक Open Graph सोशल मीडिया प्रीव्यू (जैसे Facebook) में शीर्षक के नीचे दिखाई देता है।", + "itemEditMetaOgTitleTooltip": "यह शीर्षक Open Graph सोशल मीडिया प्रीव्यू (जैसे Facebook) में दिखाई देता है।", + "itemEditMetaPageParent": "पेज पैरेंट", + "itemEditMetaPageParentTooltip": "सेट करें कि इस कंटेंट आइटम का पेज किस पेज के नीचे नेस्ट होगा। यह अपने आप बनी नेविगेशन और इस पेज की URL संरचना को प्रभावित करता है।", + "itemEditMetaParentMissing": "पेज पैरेंट मौजूद नहीं है या हटाया जा चुका है", + "itemEditMetaSeeLess": "कम देखें", + "itemEditMetaSeeMore": "और देखें", + "itemEditMetaSeoOpenGraphDescription": "इस पेज का शीर्षक और विवरण तय करें। दाईं ओर प्रीव्यू में आप देख सकते हैं कि वे सर्च इंजन परिणाम पेज (SERP) और सोशल मीडिया कंटेंट में कैसे दिखेंगे।", + "itemEditMetaSeoOpenGraphSettings": "SEO और Open Graph सेटिंग्स", + "itemEditMetaSitemapAutomaticallySetPriority": "प्राथमिकता अपने आप सेट करें", + "itemEditMetaSitemapDoNotDisplay": "Sitemap में न दिखाएं", + "itemEditMetaSitemapPriority": "Sitemap प्राथमिकता", + "itemEditMetaSitemapPriorityTooltip": "Sitemap प्राथमिकता सर्च इंजन को यह समझने में मदद करती है कि उन्हें आपकी साइट के पेज कितनी बार crawl करने चाहिए।", + "itemEditMetaTcDescriptionTooltip": "यह शीर्षक Twitter Card सोशल मीडिया प्रीव्यू में शीर्षक के नीचे दिखाई देता है।", + "itemEditMetaTcTitleTooltip": "यह शीर्षक Twitter Card सोशल मीडिया प्रीव्यू में दिखाई देता है।", + "itemEditMetaTitle": "मेटा शीर्षक", + "itemEditMetaTitlePlaceholder": "यह वह शीर्षक है जिसे सर्च इंजन अपने परिणामों में उपयोग करें", + "itemEditMetaTitleTooltip": "यह शीर्षक सर्च इंजन परिणामों और सोशल मीडिया प्रीव्यू में दिखाई देता है। सर्च इंजन अधिकतम 65 अक्षर दिखाते हैं, लेकिन आपका शीर्षक लंबा हो सकता है।", + "itemEditMetaUniqueWords": "अद्वितीय शब्द", + "itemEditMetaUrlPathPart": "URL पाथ भाग", + "itemEditMetaUrlPathPartTooltip": "URL slug के रूप में भी जाना जाता है, यह URL पते का अंतिम भाग है जो पेज के अद्वितीय पहचानकर्ता के रूप में काम करता है। यह आपके instance में अद्वितीय, lowercase और गैर-अल्फान्यूमेरिक अक्षरों से मुक्त होना चाहिए। इससे SEO के अनुकूल संरचित URL बनाने में मदद मिलती है।", + "itemEditMetaUrlPathTaken": "यह URL पाथ भाग पहले से उपयोग में है। कृपया अलग URL पाथ भाग दर्ज करें।", + "itemEditMetaUrlSettings": "URL सेटिंग्स", + "itemEditMetaUrlSettingsDescription": "अपने वेब पेज का URL परिभाषित करें", + "itemEditMetaWords": "शब्द", + "itemEditMissingRequiredData": "आवश्यक फ़ील्ड में डेटा अनुपलब्ध है", + "itemEditMoreOptions": "अधिक विकल्प", + "itemEditNoDraftActivityLogs": "इस सामग्री के लिए कोई Activity Log edit logs नहीं हैं।", + "itemEditNoPermissionAddStatus": "आपको यह स्थिति जोड़ने की अनुमति नहीं है", + "itemEditNoPermissionRemoveStatus": "आपको यह स्थिति हटाने की अनुमति नहीं है", + "itemEditNotFound": "आइटम नहीं मिला", + "itemEditOffline": "ऑफलाइन", + "itemEditOn": "पर", + "itemEditOpenDuoMode": "DUO Mode खोलें", + "itemEditOpenInfoBar": "जानकारी बार खोलें", + "itemEditParsleyBehaviorsTitle": "Parsley व्यवहार", + "itemEditPreviewPage": "पेज पूर्वावलोकन", + "itemEditPreviewVersion": "पूर्वावलोकन {{version}}", + "itemEditProductionPreviewVersion": "प्रोडक्शन पूर्वावलोकन - v{{version}}", + "itemEditPublishHistoryTitle": "प्रकाशन इतिहास", + "itemEditPublishingErrorFallback": "प्रकाशित करते समय त्रुटि हुई। कृपया फिर कोशिश करें।", + "itemEditPublishingZuid": "प्रकाशन ZUID", + "itemEditPublishItem": "आइटम प्रकाशित करें", + "itemEditPublishRelatedItemsDescription": "यह नीचे दी गई सूची में चुने गए सभी आइटम प्रकाशित करेगा", + "itemEditQuickShareTitle": "त्वरित साझा करें", + "itemEditRefreshCachedItem": "Cached आइटम refresh करें", + "itemEditRefreshingCachedItem": "Cached आइटम refresh हो रहा है", + "itemEditRenameVariant": "वैरिएंट का नाम बदलें", + "itemEditRenameVariantDescription": "यह content editors को दिखाया जाने वाला variant title update करेगा", + "itemEditSaved": "सहेजा गया", + "itemEditSavedNotification": "आइटम सहेजा गया: {{title}}", + "itemEditSaveItem": "आइटम सहेजें", + "itemEditSavePublishItem": "आइटम सहेजें और प्रकाशित करें", + "itemEditScheduleUnpublish": "Unpublish schedule करें", + "itemEditSearchStatus": "स्थिति खोजें", + "itemEditSelectFieldsForReview": "समीक्षा के लिए फ़ील्ड चुनें", + "itemEditSelectTeamMembers": "टीम सदस्य चुनें", + "itemEditSendEmail": "ईमेल भेजें", + "itemEditStatusSearchNoResultsTitleRich": "आपकी खोज \"{{search}}\" से कोई परिणाम नहीं मिला", + "itemEditSwitchOffDuoMode": "DUO Mode बंद करें", + "itemEditSwitchOnDuoMode": "DUO Mode चालू करें", + "itemEditTabAnalytics": "विश्लेषण", + "itemEditTabFreestyle": "फ्रीस्टाइल", + "itemEditTabHeadTags": "हेड टैग", + "itemEditTabPublishStatus": "प्रकाशन स्थिति", + "itemEditTabRedirects": "रीडायरेक्ट", + "itemEditTabSeo": "SEO", + "itemEditTakeOffline": "ऑफलाइन करें", + "itemEditUnlock": "अनलॉक करें", + "itemEditUnpublishContentItemTitle": "सामग्री आइटम अप्रकाशित करें", + "itemEditUnpublishDescription": "यह इसे आपकी सभी platforms पर तुरंत अनुपलब्ध कर देगा। आप publish button पर क्लिक करके इस item को फिर से publish कर सकते हैं।", + "itemEditUnpublishItem": "आइटम अप्रकाशित करें", + "itemEditUnpublishNow": "अभी अप्रकाशित करें", + "itemEditUnpublishTitle": "अप्रकाशित करें", + "itemEditUnpublishWidgetDescription": "इस सामग्री को अप्रकाशित करने पर URL अनुरोध किए जाने पर यह अब serve नहीं होगी। URL 404 not found response लौटाएगा।", + "itemEditUnsavedChangesDescription": "आपके पास unsaved changes हैं जो इस page को छोड़ने पर खो जाएंगे।", + "itemEditUnschedulePublish": "Scheduled publish रद्द करें", + "itemEditVariant": "वैरिएंट", + "itemEditVariantTitle": "वैरिएंट शीर्षक", + "itemEditVersion": "संस्करण", + "itemEditVersionPublished": "v{{version}} प्रकाशित {{on}}", + "itemEditVersionPublishedLabel": "v{{version}} प्रकाशित", + "itemEditVersionPublishedOn": "v{{version}} को प्रकाशित किया गया", + "itemEditVersionSavedOn": "v{{version}} को सहेजा गया", + "itemEditVersionScheduledLabel": "v{{version}} scheduled", + "itemEditVersionScheduledToPublishOn": "v{{version}} को प्रकाशित करने के लिए scheduled", + "itemEditViewActivityLog": "Activity Log देखें", + "itemEditViewLanguages": "भाषाएं देखें", + "itemEditViewVersions": "संस्करण देखें", + "itemEditWorkflowRequestFailed": "{{title}} पर workflow request {{members}} को भेजने में विफल", + "itemEditWorkflowRequestMessage": "वर्कफ़्लो अनुरोध संदेश", + "itemEditWorkflowRequestSent": "{{title}} पर workflow request {{members}} को भेजी गई", + "itemEditWorkflowRequestTitle": "Workflow request", + "itemEditZuidTooltip": "Content items हमेशा अपने model के सापेक्ष access किए जाते हैं, इसलिए प्रत्येक call के लिए model ZUID आवश्यक है।", + "itemListCopyZuid": "ZUID कॉपी करें", + "itemListDateCreated": "बनाने की तारीख", + "itemListDateSaved": "सहेजने की तारीख", + "itemListDeleteButton_one": "आइटम हटाएँ ({{count}})", + "itemListDeleteButton_other": "आइटम्स हटाएँ ({{count}})", + "itemListDeleteDescription_one": "इस आइटम को हटाने से यह आपकी साइट के सभी स्थानों से हट जाएगा और API अनुरोधों के लिए अनुपलब्ध हो जाएगा। इसे पूर्ववत नहीं किया जा सकता।", + "itemListDeleteDescription_other": "इन {{count}} आइटम को हटाने से ये आपकी साइट के सभी स्थानों से हट जाएँगे और API अनुरोधों के लिए अनुपलब्ध हो जाएँगे। इसे पूर्ववत नहीं किया जा सकता।", + "itemListDeleteTitle_one": "{{count}} आइटम हटाएँ", + "itemListDeleteTitle_other": "{{count}} आइटम्स हटाएँ", + "itemListEditModel": "मॉडल संपादित करें", + "itemListEditTemplate": "टेम्पलेट संपादित करें", + "itemListEmptyDescription": "अपना कॉन्टेंट यहाँ जोड़ें। अपना पहला आइटम बनाकर शुरुआत करें।", + "itemListEmptyTitle": "अभी कॉन्टेंट बनाना शुरू करें", + "itemListErrorPublishing": "आइटम प्रकाशित करने में त्रुटि: {{error}}", + "itemListErrorSaving": "आइटम सहेजने में त्रुटि: {{error}}", + "itemListExportCsv": "CSV निर्यात करें", + "itemListFieldsLabel": "फ़ील्ड", + "itemListFilterNoResultsBody": "जो आप खोज रहे हैं उसे पाने के लिए अपने फ़िल्टर समायोजित करके देखें", + "itemListFilterNoResultsTitle": "आपके फ़िल्टर से मेल खाने वाला कोई परिणाम नहीं मिला", + "itemListFilterPlaceholder": "आइटम फ़िल्टर करें", + "itemListImportCsv": "CSV आयात करें", + "itemListItemNotYetCreated": "आइटम अभी तक नहीं बनाया गया", + "itemListLastPublished": "अंतिम बार प्रकाशित", + "itemListLastSaved": "अंतिम बार सहेजा गया", + "itemListModelInvalid": "अमान्य मॉडल \"{{modelZUID}}\"", + "itemListModelNotFound": "मॉडल \"{{modelZUID}}\" नहीं मिला", + "itemListNoSearchResultsAlt": "कोई खोज परिणाम नहीं", + "itemListPublish": "प्रकाशित करें", + "itemListPublishButton_one": "आइटम प्रकाशित करें ({{count}})", + "itemListPublishButton_other": "आइटम्स प्रकाशित करें ({{count}})", + "itemListPublishDescription_one": "इससे निम्नलिखित कॉन्टेंट आइटम आपके सभी प्लेटफ़ॉर्म पर तुरंत उपलब्ध हो जाएगा। ज़रूरत होने पर आप इस आइटम का प्रकाशन बाद में कभी भी रद्द कर सकते हैं।", + "itemListPublishDescription_other": "इससे निम्नलिखित {{count}} कॉन्टेंट आइटम आपके सभी प्लेटफ़ॉर्म पर तुरंत उपलब्ध हो जाएँगे। ज़रूरत होने पर आप इन आइटम का प्रकाशन बाद में कभी भी रद्द कर सकते हैं।", + "itemListPublishItemsTooltip": "आइटम प्रकाशित करें", + "itemListPublishNow": "अभी प्रकाशित करें", + "itemListPublishTitle_one": "{{count}} आइटम में बदलाव प्रकाशित करें", + "itemListPublishTitle_other": "{{count}} आइटम्स में बदलाव प्रकाशित करें", + "itemListResetFilters": "फ़िल्टर रीसेट करें", + "itemListSaveItemsTooltip": "आइटम सहेजें", + "itemListSavePublish": "सहेजें और प्रकाशित करें", + "itemListSavePublishItemsTooltip": "आइटम सहेजें और प्रकाशित करें", + "itemListSavePublishNow": "सहेजें और अभी प्रकाशित करें", + "itemListSaveSchedulePublish": "सहेजें और प्रकाशन निर्धारित करें", + "itemListScheduleButton_one": "प्रकाशन निर्धारित करें ({{count}})", + "itemListScheduleButton_other": "प्रकाशन निर्धारित करें ({{count}})", + "itemListSchedulePastWarning": "चूँकि चुना गया समय वर्तमान या बीती हुई तारीख है, इसे तुरंत प्रकाशित कर दिया जाएगा।", + "itemListSchedulePublish": "प्रकाशन निर्धारित करें", + "itemListSchedulePublishOn": "प्रकाशित करने की तारीख", + "itemListScheduleSubtitle": "ज़रूरत होने पर आप निर्धारित प्रकाशन को बाद में कभी भी रद्द कर सकते हैं", + "itemListScheduleTitle_one": "{{count}} आइटम में बदलावों का प्रकाशन निर्धारित करें", + "itemListScheduleTitle_other": "{{count}} आइटम्स में बदलावों का प्रकाशन निर्धारित करें", + "itemListSearchNoResultsBody": "अपनी खोज समायोजित करके देखें। हमारा सुझाव है कि सभी शब्दों की वर्तनी जाँच लें या अलग कीवर्ड आज़माएँ।", + "itemListSearchNoResultsTitle": "आपके फ़िल्टर \"{{search}}\" से कोई परिणाम नहीं मिला", + "itemListSelectedCount": "{{count}} चयनित", + "itemListSelectedCount_one": "{{count}} चयनित", + "itemListSelectedCount_other": "{{count}} चयनित", + "itemListSortPrefix": "क्रमबद्ध करें: {{value}}", + "itemListStatus": "स्थिति", + "itemListStatusNotPublished": "अप्रकाशित", + "itemListStatusPublished": "प्रकाशित", + "itemListStatusScheduled": "निर्धारित", + "itemListUpdateCount_one": "{{count}} कॉन्टेंट आइटम अपडेट करें", + "itemListUpdateCount_other": "{{count}} कॉन्टेंट आइटम्स अपडेट करें", + "itemListVersionByUser": "द्वारा {{name}}", + "itemListVersionColumnShort": "सं.", + "itemListVersionPublishedOn": "v{{version}} इस तारीख को प्रकाशित", + "itemListVersionSavedOn": "v{{version}} इस तारीख को सहेजी गई", + "itemListVersionScheduledOn": "v{{version}} इस तारीख को प्रकाशित होने के लिए निर्धारित", + "itemListViewQuickAccessApi": "क्विक एक्सेस API देखें", + "itemListViewSiteGeneratorsApi": "साइट जेनरेटर API देखें", + "itemListZuidColumn": "ZUID", + "linkCreateButton": "लिंक बनाएँ", + "linkCreateCreated": "लिंक बनाया गया: {{title}}", + "linkCreateUnableToCreate": "लिंक बनाने में असमर्थ", + "linkEditCannotSaveEmptyTitle": "खाली शीर्षक", + "linkEditConfirmDelete": "क्या आप वाकई इस लिंक को हटाना चाहते हैं?", + "linkEditDeleted": "लिंक हटाया गया: {{title}}", + "linkEditErrorDeleting": "लिंक हटाने में त्रुटि", + "linkEditErrorSaving": "लिंक सहेजने में त्रुटि", + "linkEditFailedLoading": "लिंक लोड करने में विफल", + "linkEditLoading": "लिंक लोड हो रहा है", + "linkEditorErrorAddProtocol": "कृपया एक लिंक प्रोटोकॉल जोड़ें", + "linkEditorErrorAddTarget": "कृपया एक लिंक लक्ष्य जोड़ें", + "linkEditorErrorAddTitle": "कृपया एक लिंक शीर्षक जोड़ें", + "linkEditorExternalLink": "बाहरी लिंक", + "linkEditorExternalUrl": "लिंक करने के लिए एक बाहरी URL प्रदान करें", + "linkEditorInternalLink": "आंतरिक लिंक", + "linkEditorLinkTitle": "लिंक शीर्षक", + "linkEditorSelectParent": "अपने लिंक के लिए एक पैरेंट चुनें", + "linkEditorSelectTarget": "लिंक करने के लिए एक आइटम चुनें", + "linkEditSaveChanges": "परिवर्तन सहेजें", + "linkEditSaved": "लिंक सहेजा गया: {{title}}", + "mediaAddFromBynder": "Bynder से जोड़ें", + "mediaAddFromMedia": "Media से जोड़ें", + "mediaAddMoreFromMedia": "Media से और जोड़ें", + "mediaCopyFileUrl": "फ़ाइल URL कॉपी करें", + "mediaCopyZuid": "ZUID कॉपी करें", + "mediaCouldNotAdd": "{{filenames}} नहीं जोड़ा जा सका। {{errorMessage}}", + "mediaCouldNotReplace": "बदला नहीं जा सका। {{errorMessage}}", + "mediaDragAndDropRich": "अपनी फ़ाइलें यहाँ खींचें और छोड़ें या", + "mediaDragDropFilesCompact": "अपनी फ़ाइलें खींचें और छोड़ें", + "mediaDropFilesHere": "अपनी फ़ाइलें यहाँ छोड़ें", + "mediaDropToUpload": "अपलोड करने के लिए अपनी फ़ाइलें यहाँ छोड़ें", + "mediaEditFile": "फ़ाइल संपादित करें", + "mediaMoreOptions": "अधिक विकल्प", + "mediaRemoveFile": "फ़ाइल हटाएं", + "mediaRename": "नाम बदलें", + "mediaRenameFile": "फ़ाइल का नाम बदलें", + "mediaReplaceFile": "फ़ाइल बदलें", + "mediaSwapFile": "फ़ाइल स्वैप करें", + "mediaTypeLabel": "मीडिया प्रकार", + "mediaUploadMedia": "Media अपलोड करें", + "minCharacterCounter_one": " (न्यूनतम {{count}} वर्ण)", + "minCharacterCounter_other": " (न्यूनतम {{count}} वर्ण)", + "minMaxLabel": "न्यूनतम: {{min}} | अधिकतम: {{max}}", + "missingMetaTitle": "में मेटा शीर्षक गायब है", + "navAddContentItem": "सामग्री आइटम जोड़ें", + "navContentTitle": "सामग्री", + "navCreateContent": "सामग्री बनाएँ", + "navCreateDataset": "डेटासेट बनाएँ", + "navCreatePage": "पेज बनाएँ", + "navDashboard": "डैशबोर्ड", + "navDatasetsInfo": "यहाँ सूचीबद्ध डेटासेट में कोई पैरेंट सामग्री आइटम नहीं है और सामग्री आइटम के लिए कोई URL नहीं है।", + "navErrorBody": "क्षमा करें, हम आपके {{navName}} लोड करने में असमर्थ हैं। कृपया अपना पेज रिफ़्रेश करें और पुनः प्रयास करें।", + "navFilterItems": "आइटम फ़िल्टर करें", + "navHideContent": "सामग्री छिपाएँ", + "navLoadItemsFailed": "सामग्री नेविगेशन आइटम लोड करने में विफल रहे।", + "navLoadRoleFailed": "आपकी उपयोगकर्ता भूमिका लोड करने में विफल रहे।", + "navNoResultsFor": "\"{{keyword}}\" के लिए कोई परिणाम उपलब्ध नहीं है", + "navNoSearchResultsAlt": "कोई खोज परिणाम नहीं", + "navPagesInfo": "पेज में URL वाले एकल-पेज और बहु-पेज मॉडल शामिल होते हैं। जिन डेटासेट को पैरेंट किया गया है वे भी इस नेविगेशन में दिखाई देते हैं।", + "navReorderPages": "पेज पुनः क्रमित करें", + "navResourceDatasets": "डेटासेट", + "navResourceModels": "मॉडल", + "navSectionDatasets": "डेटासेट", + "navSectionHiddenItems": "छिपे हुए आइटम", + "navSectionPages": "पेज", + "noFieldsAvailable": "कोई फ़ील्ड उपलब्ध नहीं", + "noFieldsDescriptionNoSchema": "इस मॉडल ({{label}}) में अभी तक कोई फ़ील्ड नहीं है। अपने कंटेंट आइटम की संरचना परिभाषित करने के लिए, कृपया इस मॉडल में फ़ील्ड जोड़ने हेतु अपने व्यवस्थापक से संपर्क करें।", + "noFieldsDescriptionWithSchema": "इस मॉडल ({{label}}) में अभी तक कोई फ़ील्ड नहीं है। अपने कंटेंट आइटम की संरचना परिभाषित करने के लिए, अपने मॉडल पर जाएँ और फ़ील्ड जोड़ें।", + "noFieldsImageAlt": "कोई फ़ील्ड उपलब्ध नहीं", + "notFoundContactBodyRich": "यदि आपको लगता है कि कोई कंटेंट आइटम गुम है, तो कृपया हमसे support@zesty.io पर संपर्क करें और अपने संदेश में निम्नलिखित URL शामिल करें", + "notFoundDeletedHeading": "यह आइटम हटा दिया गया है", + "notFoundImageAlt": "नहीं मिला", + "publishedNow": "{{title}} को अभी प्रकाशित किया गया", + "redirectActiveHeader": "यह कंटेंट आइटम वर्तमान में रीडायरेक्ट किया जा रहा है", + "redirectActiveSubHeader": "यह कंटेंट आइटम वर्तमान में उपयोगकर्ताओं को नीचे दी गई गंतव्य URL पर रीडायरेक्ट करने के लिए सेट है। रीडायरेक्ट रोकने पर, प्रकाशित होने के बाद उपयोगकर्ता फिर से इस कंटेंट को उसकी मूल URL पर देख सकेंगे।", + "redirectAddIncoming": "इनकमिंग रीडायरेक्ट जोड़ें", + "redirectCode301": "301 - स्थायी रीडायरेक्ट", + "redirectCode302": "302 - अस्थायी रीडायरेक्ट", + "redirectCreateButton": "रीडायरेक्ट बनाएँ", + "redirectCreatedOne": "1 रीडायरेक्ट बनाया गया", + "redirectDeletedOne": "1 रीडायरेक्ट हटाया गया", + "redirectDeletedPath": "रीडायरेक्ट हटाया गया: {{path}}", + "redirectDeleteForever": "हमेशा के लिए हटाएँ", + "redirectDeleteTitle": "रीडायरेक्ट हटाएँ", + "redirectDeleteWarning": "इस रीडायरेक्ट को हटाने पर यह तुरंत आपकी साइट से हटा दिया जाएगा। यह क्रिया पूर्ववत नहीं की जा सकती।", + "redirectDontCreate": "न बनाएँ", + "redirectEnterUrlPlaceholder": "URL दर्ज करें (उदा. https://www.google.com/)", + "redirectErrorDeleting": "रीडायरेक्ट हटाने में त्रुटि", + "redirectFilePathOnlyTooltip": "केवल फ़ाइल पथ", + "redirectInactiveSubHeader": "जब आप अपने कंटेंट आइटम को रीडायरेक्ट करेंगे, तो यह अप्रकाशित हो जाएगा और उपयोगकर्ता इसकी वर्तमान URL पर इस कंटेंट आइटम तक नहीं पहुँच पाएँगे। उन्हें स्वतः ही आपके द्वारा दी गई गंतव्य URL पर भेज दिया जाएगा।", + "redirectMoreDetails": "अधिक विवरण", + "redirectNewPath": "नया पथ", + "redirectOldPath": "पुराना पथ", + "redirectStopBody": "रीडायरेक्ट रोकने पर, प्रकाशित होने के बाद उपयोगकर्ता फिर से इस कंटेंट को उसकी मूल URL पर देख सकेंगे।", + "redirectStopRedirecting": "रीडायरेक्ट करना बंद करें", + "redirectTargetLabel": "रीडायरेक्ट लक्ष्य", + "redirectTargetPath": "लक्ष्य पथ", + "redirectThisContentItem": "इस कंटेंट आइटम को रीडायरेक्ट करें", + "redirectTypeColumn": "रीडायरेक्ट प्रकार", + "redirectTypeInternal": "आंतरिक", + "redirectTypeLabel": "प्रकार", + "redirectTypeWildcard": "वाइल्डकार्ड", + "redirectValueCannotBeModified": "यह मान संशोधित नहीं किया जा सकता", + "reorderNavReturnToRoot": "रूट पर लौटें", + "reorderNavSaveChanges": "परिवर्तन सहेजें", + "reorderNavSaved": "परिवर्तन सहेजे गए हैं", + "reorderNavSaveError": "परिवर्तन सहेजने में त्रुटि", + "reorderNavTitle": "अपने नेविगेशन में आइटम का क्रम बदलें", + "requiredFieldError": "आवश्यक फ़ील्ड। कृपया एक मान दर्ज करें।", + "requiresMoreCharacters_one": "{{count}} और वर्ण आवश्यक है।", + "requiresMoreCharacters_other": "{{count}} और वर्ण आवश्यक हैं।", + "scheduledPublish": "{{title}} को {{timezone}} टाइमज़ोन में {{time}} पर प्रकाशित करने के लिए शेड्यूल किया गया है", + "selectBlockVariant": "कृपया एक ब्लॉक वैरिएंट चुनें।", + "selectedItemNotFound": "चयनित आइटम नहीं मिला: {{value}}", + "selectPlaceholder": "चुनें", + "seoFieldMetaDescription": "मेटा विवरण", + "seoFieldMetaKeywords": "मेटा कीवर्ड", + "seoFieldMetaTitle": "मेटा शीर्षक", + "seoFieldNavigationTitle": "नेविगेशन शीर्षक", + "seoFieldPageParent": "मूल पृष्ठ", + "seoFieldUrlPathPart": "URL पथ भाग", + "slotLabelAltText": "Alt टेक्स्ट", + "slotLabelAutoplay": "ऑटोप्ले", + "slotLabelLoopVideo": "वीडियो लूप करें", + "slotLabelMuteVideo": "वीडियो म्यूट करें", + "slotLabelOpenInNewTab": "नए टैब में खोलें", + "slotLabelSource": "सोर्स", + "slotLabelUrl": "URL", + "slotLabelVideoControlVisibility": "वीडियो कंट्रोल विज़िबिलिटी", + "slotLabelVideoPoster": "वीडियो पोस्टर", + "studioAddLink": "लिंक जोड़ें", + "studioAgenticStudioBy": "Agentic Studio बाय", + "studioBackToElement": "एलिमेंट पर वापस जाएँ", + "studioBridgeError": "ब्रिज त्रुटि", + "studioCannotSave": "सहेजा नहीं जा सका: {{label}}", + "studioCannotSaveError": "सहेजा नहीं जा सका: {{label}} - {{error}}", + "studioCannotSaveInvalid": "सहेजा नहीं जा सका: {{label}} - डेटा अनुपस्थित या अमान्य है", + "studioCloseAriaLabel": "Studio पूर्वावलोकन बंद करें", + "studioContentHint": "संपादन करने के लिए कैनवास पर आइटम चुनें", + "studioEditInFreestyle": "Freestyle में संपादित करें", + "studioEditInManager": "Zesty Manager में संपादित करें", + "studioEditorAriaLabel": "Studio एडिटर", + "studioFreestyleAlertBody": "संपादन केवल Freestyle में उपलब्ध है", + "studioFreestyleAlertDismissAriaLabel": "Freestyle सूचना खारिज करें", + "studioFreestyleAlertTitle": "यह लेआउट Freestyle में बनाया गया था", + "studioFullHint": "आइटम संपादित करने के लिए कैनवास पर उन्हें चुनें, या लेआउट को पुनः क्रमित करने के लिए ब्लॉक खींचें", + "studioInlineEditFailed": "इस ब्लॉक के लिए इनलाइन संपादन लागू नहीं किया जा सका।", + "studioInvalidUrl": "अमान्य URL। कृपया जाँचें और पुनः प्रयास करें।", + "studioItemPublished": "प्रकाशित: {{label}}", + "studioItemSaved": "आइटम सहेजा गया: {{label}}", + "studioItemsPublishedCount_one": "{{count}} आइटम सहेजा और प्रकाशित किया गया", + "studioItemsPublishedCount_other": "{{count}} आइटम सहेजे और प्रकाशित किए गए", + "studioItemsSavedCount_one": "{{count}} आइटम सहेजा गया", + "studioItemsSavedCount_other": "{{count}} आइटम सहेजे गए", + "studioLayersEmptyState": "कोई लेयर नहीं मिली", + "studioLayersNodeElement": "एलिमेंट", + "studioLayersNodeField": "फ़ील्ड", + "studioLayersNodePage": "पेज", + "studioLayersNodeText": "टेक्स्ट", + "studioLayersPanelTitle": "लेयर्स (Layers)", + "studioLayoutHint": "लेआउट को पुनः क्रमित करने के लिए कैनवास पर ब्लॉक खींचें", + "studioLayoutPublishFailed": "लेआउट सहेजने और प्रकाशित करने में विफल रहे।", + "studioLayoutPublishFailedNamed": "{{name}} सहेजने और प्रकाशित करने में विफल रहे।", + "studioLayoutSaved": "{{files}} सहेजा गया", + "studioLayoutSavedPublished": "{{files}} सहेजा और प्रकाशित किया गया", + "studioLayoutSaveFailed": "लेआउट सहेजने में विफल रहे।", + "studioLayoutSaveFailedNamed": "{{name}} सहेजने में विफल रहे।", + "studioLinkedFromTooltip": "{{modelLabel}} · {{itemLabel}} ({{itemZUID}}) से लिंक किया गया", + "studioLinkFieldNotFound": "फ़ील्ड \"{{fieldName}}\" अब मौजूद नहीं है", + "studioLinkFromOtherItem": "किसी अन्य सामग्री आइटम से लिंक करें", + "studioLinkItemConfirm": "आइटम लिंक करें", + "studioLinkItemContentItemLabel": "सामग्री आइटम", + "studioLinkItemContentItemTooltip": "फ़ील्ड को इसी सटीक आइटम से पढ़ा जाता है, जिसमें इसकी भाषा भी शामिल है।", + "studioLinkItemContentItemTooltipForItem": "लिंक इस सटीक आइटम को इंगित करता है, जिसमें इसकी भाषा भी शामिल है। केवल उन मॉडलों को सूचीबद्ध किया गया है जिनका कोई पेज है।", + "studioLinkItemDialogCloseAriaLabel": "आइटम लिंक करें डायलॉग बंद करें", + "studioLinkItemDialogSubtitle": "किसी विशिष्ट सामग्री आइटम के सामग्री फ़ील्ड से लिंक करें", + "studioLinkItemDialogSubtitleForItem": "किसी विशिष्ट सामग्री आइटम के पेज से लिंक करें", + "studioLinkItemDialogTitle": "अन्य सामग्री आइटम लिंक करें", + "studioLinkItemFieldLabel": "कनेक्ट करने के लिए फ़ील्ड", + "studioLinkItemFieldTooltip": "केवल वे फ़ील्ड सूचीबद्ध हैं जिन्हें यह एलिमेंट रेंडर कर सकता है।", + "studioLinkItemNoLinkableFields": "इस आइटम के मॉडल में कोई लिंक करने योग्य फ़ील्ड नहीं है।", + "studioLinkModelNotFound": "मॉडल \"{{modelName}}\" अब मौजूद नहीं है", + "studioLinkSectionLabel": "लिंक", + "studioLinkTargetLabel": "लक्ष्य", + "studioLinkTo": "इससे लिंक करें", + "studioLinkUrlPlaceholder": "लिंक यूआरएल या आईडी", + "studioModeContent": "सामग्री", + "studioModeFull": "पूर्ण", + "studioModeLayout": "लेआउट", + "studioNoCmsItem": "इस पथ से कोई CMS आइटम संबद्ध नहीं है। संपादन अक्षम है।", + "studioPreviewError": "पूर्वावलोकन त्रुटि: {{error}}", + "studioPreviewOnly": "केवल पूर्वावलोकन", + "studioPublishPartialFailure_one": "{{count}} में से {{published}} आइटम प्रकाशित हुआ — {{failed}} विफल", + "studioPublishPartialFailure_other": "{{count}} में से {{published}} आइटम प्रकाशित हुए — {{failed}} विफल", + "studioRemoveLinkAriaLabel": "लिंक हटाएं", + "studioSaveAllButton": "सभी सहेजें", + "studioSaveAndPublish": "सहेजें और प्रकाशित करें", + "studioSaveAndPublishAllButton": "सभी सहेजें और प्रकाशित करें", + "studioSaveChangeSectionContent": "सामग्री", + "studioSaveChangeSectionLayout": "लेआउट", + "studioSaveChanges": "परिवर्तन सहेजें", + "studioSaveChangesSubtitle": "क्या आप अपने बदलाव सहेजना चाहेंगे या सहेजकर प्रकाशित करना चाहेंगे?", + "studioSaveChangesTypeColumn": "टाइप", + "studioSaveChangesVersionColumn": "वर्ज़न", + "studioSaveChangeTypeBlock": "ब्लॉक", + "studioSaveChangeTypeCode": "कोड", + "studioSaveChangeTypeContent": "सामग्री", + "studioStaticEditNotSingleField": "इस ब्लॉक को इनलाइन संपादित नहीं किया जा सकता क्योंकि इसकी सामग्री एक ही कनेक्टेड फ़ील्ड नहीं है।", + "studioStaticEditRejected": "इस ब्लॉक में डायनामिक सामग्री है और इसे इनलाइन संपादित नहीं किया जा सकता। संपादन के लिए Content मोड पर स्विच करें।", + "studioUnsavedLayoutBody": "आपके पास बिना सहेजे लेआउट परिवर्तन हैं। जारी रखने से पहले उन्हें सहेजें?", + "studioUnsavedLayoutTitle": "बिना सहेजे लेआउट परिवर्तन", + "studioUntitledItem": "बिना शीर्षक", + "studioViewAllRelatedFields": "सभी संबंधित फ़ील्ड देखें", + "tagArticle": "आर्टिकल", + "tagAside": "Aside", + "tagDiv": "Div", + "tagFooter": "फ़ुटर", + "tagHeader": "हेडर", + "tagMain": "मेन", + "tagNavigation": "नेविगेशन", + "tagNone": "कोई टैग नहीं", + "tagSection": "सेक्शन", + "tagText": "टेक्स्ट", + "unpublished": "{{title}} को अप्रकाशित (Unpublished) किया गया", + "unscheduledVersion": "संस्करण {{version}} को अनशेड्यूल किया गया", + "uuidAutoGeneratedPlaceholder": "UUID फ़ील्ड मान स्वतः उत्पन्न होते हैं", + "valueMustBeBetween": "मान {{min}} और {{max}} के बीच होना चाहिए", + "viewModelActivityLog": "मॉडल गतिविधि लॉग देखें", + "yesNoMissingOptions": "फ़ील्ड {{label}} में विकल्प सेटिंग्स गायब हैं। हाँ/नहीं मान जोड़ने के लिए फ़ील्ड संपादित करें।" +} diff --git a/public/locales/hi-IN/dashboard.json b/public/locales/hi-IN/dashboard.json new file mode 100644 index 0000000000..092daf22af --- /dev/null +++ b/public/locales/hi-IN/dashboard.json @@ -0,0 +1,29 @@ +{ + "columnVersion": "संस्करण", + "createCodeFile": "कोड फ़ाइल बनाएं", + "createContent": "सामग्री बनाएं", + "createModel": "मॉडल बनाएं", + "deleted": "हटाया गया", + "deltaLabel": "बनाम पिछले {{count}} दिन", + "deltaLabel_one": "बनाम पिछले {{count}} दिन", + "deltaLabel_other": "बनाम पिछले {{count}} दिन", + "emptyStateDescription": "पिछले 30 दिनों में कोई नया आइटम या संपादन नहीं किया गया है। हाल ही की फ़ाइलों को यहाँ देखने के लिए सामग्री, मॉडल या कोड फ़ाइलें बनाना या संपादित करना शुरू करें।", + "emptyStateTitle": "आज ही अपने इंस्टेंस को बढ़ाना शुरू करें", + "greeting": "शुभ प्रभात, {{name}}", + "instanceSummary": "यहाँ आपका इंस्टेंस सारांश है पिछले", + "itemsPublished": "प्रकाशित आइटम", + "joinCommunity": "हमारे समुदाय में शामिल हों", + "lastNDays": "पिछले {{count}} दिन", + "lastNDays_one": "पिछले {{count}} दिन", + "lastNDays_other": "पिछले {{count}} दिन", + "lastNDaysInline": "{{count}} दिनों का", + "lastNDaysInline_one": "{{count}} दिनों का", + "lastNDaysInline_other": "{{count}} दिनों का", + "missingMetaTitle": "मेटा शीर्षक गायब है", + "releaseNotes": "रिलिज़ नोट्स", + "resources": "संसाधन", + "resourcesSubtitle": "Zesty का सर्वोत्तम लाभ उठाने के लिए आपकी आवश्यकता की हर चीज़।", + "speedDialAriaLabel": "इंस्टेंस स्पीड डायल", + "uploadMedia": "मीडिया अपलोड करें", + "webRequests": "वेब अनुरोध" +} diff --git a/public/locales/hi-IN/leads.json b/public/locales/hi-IN/leads.json new file mode 100644 index 0000000000..5febd50267 --- /dev/null +++ b/public/locales/hi-IN/leads.json @@ -0,0 +1,27 @@ +{ + "captureLeadsOnYourInstance": "अपने इंस्टेंस पर लीड कैप्चर करें", + "dateCreated": "निर्माण तिथि", + "datePreset30Days": "30 दिन", + "datePreset60Days": "60 दिन", + "datePreset90Days": "90 दिन", + "datePresetAll": "सभी", + "datePresetCustom": "कस्टम", + "endDate": "समाप्ति तिथि", + "exportCsv": "CSV निर्यात करें", + "exportCsvTitle": "चयनित फ़िल्टर के अनुसार लीड डेटा का CSV निर्यात करें", + "formGroup": "फ़ॉर्म समूह", + "formGroupAll": "सभी", + "getStartedBodyText": "अपने इंस्टेंस पर एक फ़ॉर्म बनाकर जिसमें zlf इनपुट शामिल हो, आप तुरंत लीड कैप्चर करना शुरू कर सकते हैं।", + "howToCreateALeadForm": "लीड फ़ॉर्म कैसे बनाएं", + "learnMoreAbout": "अधिक जानें", + "modalTableHeaderKey": "कुंजी", + "modalTableHeaderValue": "मान", + "notAvailable": "उपलब्ध नहीं", + "searchAcrossAllOfYourLeads": "अपनी सभी लीड में खोजें", + "selectRelease": "रिलीज़ चुनें...", + "startDate": "प्रारंभ तिथि", + "tableHeaderDate": "तिथि (सिस्टम)", + "tableHeaderEmail": "ईमेल", + "tableHeaderFormBody": "फ़ॉर्म विवरण", + "tableHeaderFormGroup": "फ़ॉर्म समूह" +} diff --git a/public/locales/hi-IN/marketplace.json b/public/locales/hi-IN/marketplace.json new file mode 100644 index 0000000000..c3f3871bf1 --- /dev/null +++ b/public/locales/hi-IN/marketplace.json @@ -0,0 +1,15 @@ +{ + "appNotInstalled": "ऐप \"{{zuid}}\" इंस्टॉल नहीं है।", + "exploreMarketplace": "Marketplace एक्सप्लोर करें", + "googleAnalyticsLogoAlt": "Google Analytics का लोगो", + "googleChromeLogoAlt": "Google Chrome का लोगो", + "goToMarketplace": "Marketplace पर जाएं", + "headerTitleApps": "ऐप्स", + "installAppBody": "अपने Zesty प्रोजेक्ट को तेज़ बनाने के लिए एक्सटेंशन, एप्लिकेशन और क्विक स्टार्ट मॉड्यूल इंस्टॉल करें", + "microsoftLogoAlt": "Microsoft का लोगो", + "nodejsLogoAlt": "NodeJS का लोगो", + "npmLogoAlt": "NPM का लोगो", + "sidebarMarketplace": "Marketplace", + "visitMarketplace": "Marketplace पर जाएं", + "zestyRocketLogoAlt": "Zesty Rocket का लोगो" +} diff --git a/public/locales/hi-IN/media.json b/public/locales/hi-IN/media.json new file mode 100644 index 0000000000..6f990155c5 --- /dev/null +++ b/public/locales/hi-IN/media.json @@ -0,0 +1,215 @@ +{ + "allMediaTitle": "हालिया", + "dateFilterAfter": "के बाद", + "dateFilterBefore": "से पहले", + "dateFilterButtonLabel": "दिनांक", + "dateFilterCustomRange": "कस्टम सीमा", + "dateFilterOn": "को", + "deletedFile": "फ़ाइल {{filename}} हटाई गई", + "deletedGroup": "ग्रुप {{name}} हटाया गया", + "deleteFileModalDeleteButtonAria": "हटाएं बटन", + "deleteFileModalDeleteButtonMultiple": "हटाएं ({{count}})", + "deleteFileModalDeleteButtonMultiple_one": "हटाएं ({{count}})", + "deleteFileModalDeleteButtonMultiple_other": "हटाएं ({{count}})", + "deleteFileModalTitleMultiple": "{{count}} फ़ाइलें हटाएं?", + "deleteFileModalTitleMultiple_one": "{{count}} फ़ाइल हटाएं?", + "deleteFileModalTitleMultiple_other": "{{count}} फ़ाइलें हटाएं?", + "deleteFileModalTitleSingle": "फ़ाइल हटाएं", + "deleteFileModalWarningMultiple": "आप इन फ़ाइलों को वापस नहीं पा सकेंगे।", + "deleteFileModalWarningSingle": "{{filename}} हमेशा के लिए हटा दिया जाएगा", + "deleteFolderDialogConfirmButton": "फ़ोल्डर हटाएं", + "deleteFolderDialogMessage": "आपके फ़ोल्डर को हटाने से उसमें मौजूद फ़ाइलें डिलीट नहीं होंगी। ये फ़ाइलें अभी भी 'सभी मीडिया' में मिल सकती हैं।", + "deleteFolderDialogTitle": "फ़ोल्डर हटाएं?", + "dropAreaAllMedia": "सभी मीडिया", + "dropAreaUploadPrompt": "फ़ाइलों को {{location}} पर अपलोड करें", + "editedFile": "फ़ाइल {{filename}} संपादित की गई", + "emptyStateDescription": "आप फ़ाइलों को यहाँ ड्रैग और ड्रॉप कर सकते हैं या \"अपलोड\" बटन का उपयोग कर सकते हैं।", + "emptyStateTitle": "अभी अपलोड करना शुरू करें", + "failedCreatingGroup": "ग्रुप बनाने में विफल", + "failedDeletingFile": "फ़ाइल हटाने में विफल", + "failedDeletingGroup": "ग्रुप हटाने में विफल", + "failedEditingBin": "मीडिया बिन संपादित करने में विफल", + "failedEditingFile": "फ़ाइल संपादित करने में विफल", + "failedEditingGroup": "ग्रुप संपादित करने में विफल", + "failedFetchBinFiles": "बिन फ़ाइलें प्राप्त करने में विफल: {{error}}", + "failedFetchGroupFiles": "ग्रुप फ़ाइलें प्राप्त करने में विफल: {{error}}", + "failedFetchGroups": "ग्रुप प्राप्त करने में विफल: {{error}}", + "failedFileSearch": "फ़ाइल खोज विफल", + "failedLoadingBinFiles": "बिन फ़ाइलें लोड करने में विफल", + "failedLoadingBinGroups": "बिन ग्रुप लोड करने में विफल", + "failedLoadingEcoBins": "इकोसिस्टम मीडिया बिन लोड करने में विफल", + "failedLoadingGroupFiles": "ग्रुप फ़ाइलें लोड करने में विफल", + "failedLoadingInstanceBins": "इंस्टेंस मीडिया बिन लोड करने में विफल", + "failedSearchFile": "फ़ाइल खोजने में विफल: {{error}}", + "fileModalContentCloseAria": "बंद करें आइकन", + "fileModalContentCloseTooltip": "प्रिव्यू बंद करें", + "fileModalContentCopyZuid": "ZUID कॉपी करें", + "fileModalContentDeleteAria": "कचरा पेटी (ट्रैश) बटन", + "fileModalContentDeleteFailed": "फ़ाइल हटाने में विफल", + "fileModalContentDeleteTooltip": "फ़ाइल हटाएं", + "fileModalContentFileUrlLabel": "फ़ाइल URL", + "fileModalContentLaunchOtfEditor": "ऑन द फ्लाई एडिटर लॉन्च करें", + "fileModalContentMoveTo": "यहाँ स्थानांतरित करें", + "fileModalContentOpenSettingsAria": "सेटिंग्स मेनू खोलें", + "fileModalContentRenameMenuItem": "नाम बदलें", + "fileModalContentRenameTooltip": "फ़ाइल का नाम बदलें", + "fileModalContentReplaceAria": "फ़ाइल बदलें बटन", + "fileModalContentReplaceTooltip": "फ़ाइल बदलें", + "fileModalContentSaveTitleAria": "शीर्षक सहेजें बटन", + "fileModalContentTitleAria": "शीर्षक टेक्स्टफ़ील्ड", + "fileModalContentTitleHelper": "ऑल्ट-टेक्स्ट और कैप्शन के लिए उपयोग किया जा सकता है", + "fileModalContentTitleLabel": "शीर्षक", + "fileModalContentTitlePlaceholder": "शीर्षक दर्ज करें", + "fileModalContentUpdatedOn": "अपडेट किया गया तिथि", + "fileModalContentUploadedOn": "अपलोड किया गया तिथि", + "fileModalContentZuidLabel": "ZUID", + "filetypeFilterArchives": "अभिलेखागार (zip)", + "filetypeFilterAudio": "ऑडियो", + "filetypeFilterButtonLabel": "फ़ाइल प्रकार", + "filetypeFilterDocuments": "दस्तावेज़", + "filetypeFilterFolders": "फ़ोल्डर", + "filetypeFilterFonts": "फॉन्ट्स", + "filetypeFilterImages": "छवियां (इमेजेस)", + "filetypeFilterPdfs": "PDFs", + "filetypeFilterPresentations": "प्रस्तुतियां", + "filetypeFilterSpreadsheets": "स्प्रेडशीट्स", + "filetypeFilterVideos": "वीडियो", + "fileTypeNotRecognized": "फ़ाइल प्रकार की पहचान नहीं हुई", + "folderMenuAddSubFolder": "उप-फ़ोल्डर जोड़ें", + "folderMenuHide": "छिपाएं", + "folderMenuRename": "नाम बदलें", + "folderMenuShow": "दिखाएं", + "goToAllMedia": "सभी मीडिया पर जाएं", + "headerAddSubFolder": "उप-फ़ोल्डर जोड़ें", + "headerDeselectAll": "सभी को अचयनित करें", + "headerFilesSelected": "{{count}} चयनित", + "headerFilesSelected_one": "{{count}} चयनित", + "headerFilesSelected_other": "{{count}} चयनित", + "headerFilesSelectedLimit": "{{count}} / {{limit}} चयनित", + "headerFilesSelectedLimit_one": "{{count}} / {{limit}} चयनित", + "headerFilesSelectedLimit_other": "{{count}} / {{limit}} चयनित", + "headerMove": "स्थानांतरित करें", + "headerOpenFolderMenuAria": "फ़ोल्डर मेनू खोलें", + "headerReplacementFileSelected": "प्रतिस्थापन (रिप्लेसमेंट) फ़ाइल चुनी गई", + "headerSelectAll": "सभी चुनें", + "headerSelectReplacementFile": "प्रतिस्थापन फ़ाइल चुनें", + "imageFilterAllTypes": "सभी छवि प्रकार", + "insightsMediaDateRangeButton": "पिछले {{days}} दिन", + "insightsMediaDateRangeMenuItem": "पिछले {{days}} दिन", + "insightsMediaDeltaLabel": "पिछले {{days}} दिनों से", + "insightsMediaMediaBandwidth": "मीडिया बैंडविड्थ", + "insightsMediaTitle": "इनसाइट्स", + "insightsTableColBandwidth": "बैंडविड्थ", + "insightsTableColRequests": "अनुरोध (रिक्वेस्ट्स)", + "insightsTableColType": "प्रकार", + "matchesFound": "{{count}} मैच मिले", + "matchesFound_one": "{{count}} मैच मिला", + "matchesFound_other": "{{count}} मैच मिले", + "mediaAppFileNotFoundMessage": "हमें खेद है, आपके द्वारा अनुरोधित फ़ाइल नहीं मिल सकी। कृपया 'सभी मीडिया' पेज पर वापस जाएं।", + "mediaAppFileNotFoundTitle": "फ़ाइल नहीं मिली", + "mediaGridFilesHeader": "फ़ाइलें", + "mediaGridFoldersHeader": "फ़ोल्डर", + "mediaListColAddedOn": "जोड़ा गया तिथि", + "mediaListColType": "प्रकार", + "moveFileDialogDestinationLabel": "गंतव्य (डेस्टिनेशन) फ़ोल्डर", + "moveFileDialogMoveButton": "स्थानांतरित करें", + "moveFileDialogTitleMultiple": "{{count}} फ़ाइलें स्थानांतरित करें", + "moveFileDialogTitleMultiple_one": "{{count}} फ़ाइल स्थानांतरित करें", + "moveFileDialogTitleMultiple_other": "{{count}} फ़ाइलें स्थानांतरित करें", + "moveFileDialogTitleSingle": "फ़ाइलें स्थानांतरित करें", + "newFolderDialogDefaultFolderName": "बिना नाम का", + "newFolderDialogFolderNameLabel": "फ़ोल्डर का नाम", + "newFolderDialogNone": "कोई नहीं", + "newFolderDialogParentFolderLabel": "पैरेंट फ़ोल्डर", + "newFolderDialogTitle": "नया फ़ोल्डर", + "noResultsStateClearFilters": "फ़िल्टर्स हटाएं", + "noResultsStateDescription": "आप जो खोज रहे हैं उसे ढूंढने के लिए फ़िल्टर्स को बदलने का प्रयास करें", + "noResultsStateTitleFiletype": "कोई {{filetype}} फ़ाइलें नहीं मिलीं", + "noResultsStateTitleFolders": "कोई फ़ोल्डर नहीं मिला", + "notFoundStateDefaultMessage": "हमें खेद है, आपके द्वारा अनुरोधित फ़ोल्डर नहीं मिल सका। कृपया 'सभी मीडिया' पेज पर वापस जाएं।", + "notFoundStateDefaultTitle": "फ़ोल्डर नहीं मिला", + "notifyFailedCreateRecord": "साइन किए हुए URL अपलोड के बाद फ़ाइल रिकॉर्ड बनाने में विफल", + "notifyFailedSignedUrl": "बड़ी फ़ाइल अपलोड करने के लिए साइन किया हुआ (signed) URL प्राप्त करने में विफल", + "notifyFailedUploadSignedUrl": "साइन किए हुए URL पर फ़ाइल अपलोड करने में विफल", + "notifyFileReplaced": "फ़ाइल बदली गई: {{filename}}", + "notifyFilesInProgress": "{{count}} फ़ाइलें अभी भी प्रगति पर हैं", + "notifyFilesInProgress_one": "{{count}} फ़ाइल अभी भी प्रगति पर है", + "notifyFilesInProgress_other": "{{count}} फ़ाइलें अभी भी प्रगति पर हैं", + "notifyMetadataFailedMultiple": "{{count}} फ़ाइलों का मेटाडेटा अपडेट करने में विफल", + "notifyMetadataFailedMultiple_one": "{{count}} फ़ाइल का मेटाडेटा अपडेट करने में विफल", + "notifyMetadataFailedMultiple_other": "{{count}} फ़ाइलों का मेटाडेटा अपडेट करने में विफल", + "notifyUploadedMultiple": "{{count}} फ़ाइलें सफलतापूर्वक अपलोड की गईं", + "notifyUploadedMultiple_one": "{{count}} फ़ाइल सफलतापूर्वक अपलोड की गई", + "notifyUploadedMultiple_other": "{{count}} फ़ाइलें सफलतापूर्वक अपलोड की गईं", + "notifyUploadedMultipleWithProgress": "{{count}} फ़ाइलें सफलतापूर्वक अपलोड की गईं... {{inProgress}} फ़ाइलें अभी भी प्रगति पर हैं", + "notifyUploadedMultipleWithProgress_one": "{{count}} फ़ाइल सफलतापूर्वक अपलोड की गई... {{inProgress}} फ़ाइलें अभी भी प्रगति पर हैं", + "notifyUploadedMultipleWithProgress_other": "{{count}} फ़ाइलें सफलतापूर्वक अपलोड की गईं... {{inProgress}} फ़ाइलें अभी भी प्रगति पर हैं", + "notifyUploadFailed": "फ़ाइल अपलोड करने में विफल", + "notifyUploadFailedMultiple": "{{count}} फ़ाइलें अपलोड करने में विफल", + "notifyUploadFailedMultiple_one": "{{count}} फ़ाइल अपलोड करने में विफल", + "notifyUploadFailedMultiple_other": "{{count}} फ़ाइलें अपलोड करने में विफल", + "notifyUploadSuccess": "फ़ाइल सफलतापूर्वक अपलोड हो गई", + "otfEditorAutoPlaceholder": "ऑटो", + "otfEditorBlurLabel": "धुंधलापन (ब्लर)", + "otfEditorCopyUrlLabel": "✨ बदलावों के साथ नया URL कॉपी करें", + "otfEditorFitBounds": "बाउंड्स", + "otfEditorFitCover": "कवर", + "otfEditorFitCrop": "क्रॉप", + "otfEditorFitLabel": "फिट", + "otfEditorFitNone": "कोई नहीं", + "otfEditorHeightLabel": "ऊंचाई", + "otfEditorOptimizeHigh": "उच्च", + "otfEditorOptimizeLabel": "ऑप्टिमाइज़ करें", + "otfEditorOptimizeLow": "निम्न", + "otfEditorOptimizeMedium": "मध्यम", + "otfEditorSaturationAria": "सैचुरेशन", + "otfEditorSaturationLabel": "संतृप्ति (सैचुरेशन)", + "otfEditorTitle": "ऑन द फ्लाई इमेज एडिटर", + "otfEditorUnsavedWarning": "ये बदलाव मूल फ़ाइल या फ़ाइल URL में सहेजे नहीं जाएंगे", + "otfEditorWidthLabel": "चौड़ाई", + "renameFileModalNewNameLabel": "नया फ़ाइल नाम", + "renameFileModalTitle": "फ़ाइल का नाम बदलें", + "renameFileModalWarning": "इससे URL पाथ बदल जाएगा और कुछ समय बाद प्रोडक्शन में संदर्भित मौजूदा लिंक टूट सकते हैं।", + "renameFolderDialogNewFolderNameLabel": "नया फ़ोल्डर नाम", + "renameFolderDialogTitle": "फ़ोल्डर का नाम बदलें", + "replaceFileModalNoPermissionSubtitle": "फ़ाइल बदलने की क्षमता के लिए अपनी भूमिका को एडमिन या ओनर में अपग्रेड करने के लिए नीचे सूचीबद्ध इंस्टेंस ओनर या एडमिनिस्ट्रेटर्स से संपर्क करें।", + "replaceFileModalNoPermissionTitle": "आपके पास इस इंस्टेंस में फ़ाइलें बदलने की अनुमति नहीं है।", + "replaceFileModalTitle": "फ़ाइल बदलें", + "replaceFileModalWarning": "मूल फ़ाइल हटा दी जाएगी और उसकी जगह नई फ़ाइल ले लेगी। इस क्रिया को पूर्ववत नहीं किया जा सकता और फ़ाइल को पुनर्प्राप्त नहीं किया जा सकता। फ़ाइल अपना URL और ZUID बनाए रखेगी।", + "searchEmptyStateDescription": "अपनी खोज को बदलने का प्रयास करें। हम सुझाव देते हैं कि जांच लें कि सभी शब्दों की वर्तनी (स्पेलिंग) सही है या अलग कीवर्ड का उपयोग करें", + "searchEmptyStateTitle": "आपकी खोज \"{{searchTerm}}\" के लिए कोई परिणाम नहीं मिला", + "sidebarFoldersDndErrorMessage": "वर्तमान में Zesty में फ़ाइलों को इको-बिन्न के बीच स्थानांतरित करने की क्षमता नहीं है। यदि आप यह सुविधा चाहते हैं तो कृपया support@zesty.io पर संपर्क करें।", + "sidebarFoldersDndErrorTitle": "फ़ाइल को दूसरे इको-बिन में स्थानांतरित नहीं किया जा सकता", + "sidebarFoldersHeader": "फ़ोल्डर", + "sidebarFoldersHiddenItems": "छिपी हुई वस्तुएं", + "sidebarFoldersOkButton": "ठीक है", + "sidebarFoldersSortLastCreated": "अंतिम बार निर्मित", + "sidebarInsertFromMedia": "मीडिया से डालें", + "sidebarInsights": "इनसाइट्स", + "sidebarRecents": "हालिया", + "sidebarSearchPlaceholder": "मीडिया खोजें", + "sortButtonLabel": "क्रमबद्ध करें: {{order}}", + "sortDateAdded": "जोड़ने की तिथि", + "thumbnailContentCannotEditTooltip": "आप फ़ाइल का नाम संपादित नहीं कर सकते", + "thumbnailContentTitlePlaceholderDisabled": "कृपया फ़ाइल का शीर्षक जोड़ने के लिए प्रतीक्षा करें", + "thumbnailContentTitlePlaceholderEditable": "फ़ाइल का शीर्षक जोड़ें (ऑल्ट-टेक्स्ट के लिए)", + "thumbnailCopyUrl": "URL कॉपी करें", + "uploadModalNounFile_one": "फ़ाइल", + "uploadModalNounFile_other": "फ़ाइलें", + "uploadModalNounReplacedFile_one": "प्रतिस्थापित फ़ाइल", + "uploadModalNounReplacedFile_other": "प्रतिस्थापित फ़ाइलें", + "uploadModalUploadedNoCount": "{{item}} अपलोड हो गया", + "uploadModalUploadedWithCount": "{{count}} {{item}} अपलोड हो गया", + "uploadModalUploadedWithCount_one": "{{count}} {{item}} अपलोड हो गया", + "uploadModalUploadedWithCount_other": "{{count}} {{item}} अपलोड हो गया", + "uploadModalUploadErrorHint": "कृपया फ़ाइल एक्सटेंशन की जांच करें और पुन: प्रयास करें", + "uploadModalUploadErrorTitle": "दुर्भाग्य से, हमें इन {{count}} फ़ाइलों को अपलोड करने में समस्या हुई", + "uploadModalUploadErrorTitle_one": "दुर्भाग्य से, हमें इस {{count}} फ़ाइल को अपलोड करने में समस्या हुई", + "uploadModalUploadErrorTitle_other": "दुर्भाग्य से, हमें इन {{count}} फ़ाइलों को अपलोड करने में समस्या हुई", + "uploadModalUploadingNoCount": "{{item}} अपलोड हो रहा है", + "uploadModalUploadingWithCount": "{{count}} {{item}} अपलोड हो रहा है", + "uploadModalUploadingWithCount_one": "{{count}} {{item}} अपलोड हो रहा है", + "uploadModalUploadingWithCount_other": "{{count}} {{item}} अपलोड हो रहा है", + "uploadModalUploadMore": "और अपलोड करें", + "videoFilterAllTypes": "सभी वीडियो प्रकार" +} diff --git a/public/locales/hi-IN/release.json b/public/locales/hi-IN/release.json new file mode 100644 index 0000000000..4f39f4c4a3 --- /dev/null +++ b/public/locales/hi-IN/release.json @@ -0,0 +1,40 @@ +{ + "activateButton": "रिलीज़ ऐप सक्रिय करें", + "activateSubtitle": "कंटेंट के ग्रुप्स को एक ही समय में पब्लिश करें।", + "createdAt": "बनाने का समय", + "createdOn": "{{date}} को {{time}} बजे", + "createdRelease": "रिलीज़ बनाई गई: {{name}}", + "createRelease": "रिलीज़ बनाएं", + "createReleaseButton": "रिलीज़ बनाएं", + "deletedRelease": "रिलीज़ {{name}} हटाई गई", + "deleteRelease": "रिलीज़ डिलीट करें", + "deleteWarning": "रिलीज़ को डिलीट करना एक स्थायी क्रिया है और इसे वापस नहीं लिया जा सकता।", + "errorMissingReleaseName": "आवश्यक रिलीज़ नाम गायब है", + "failedActivateReleases": "रिलीज़ सक्रिय करने में विफल", + "failedCreatingRelease": "रिलीज़ बनाने में विफल", + "failedDeletingRelease": "रिलीज़ {{name}} हटाने में विफल", + "fieldReleaseDescription": "रिलीज़ का विवरण", + "fieldReleaseName": "रिलीज़ का नाम", + "instructionBeginSearch": "उस कंटेंट को खोजकर शुरुआत करें जिसे आप इस रिलीज़ में शामिल करना चाहते हैं", + "instructionPublishAll": "रिलीज़ में सूचीबद्ध सभी आइटम पब्लिश करने के लिए \"सभी पब्लिश करें\" बटन दबाएं", + "instructionSelectItem": "इस रिलीज़ में जोड़ने के लिए खोज सूची से एक आइटम चुनें", + "lang": "भाषा", + "lastPublish": "अंतिम बार पब्लिश किया गया", + "live": "लाइव", + "loadingRelease": "रिलीज़ लोड हो रही है: {{name}}", + "members": "सदस्य", + "missingItemMetaTitle": "आइटम का मेटा टाइटल गायब है", + "neverPublished": "कभी पब्लिश नहीं किया गया", + "publishAll": "सभी पब्लिश करें", + "publishAllNoticeBody": "यह इस रिलीज़ के सभी सदस्यों को पब्लिश कर देगा। सभी सदस्य URLs और संबंधित कंटेंट को पर्ज (purge) कर दिया जाएगा।", + "publishedItems_one": "{{count}} आइटम पब्लिश किया गया", + "publishedItems_other": "{{count}} आइटम पब्लिश किए गए", + "publishing": "पब्लिश किया जा रहा है", + "releasesHeading": "रिलीज़", + "searchPlaceholder": "अपनी रिलीज़ में शामिल करने के लिए ZUID या मेटा टाइटल द्वारा खोजें", + "startingRelease": "रिलीज़ शुरू की जा रही है", + "startNewPublishPlan": "नई पब्लिश योजना शुरू करें", + "updatedReleaseMember": "रिलीज़ ({{releaseName}}) के सदस्य ({{itemTitle}}) को वर्ज़न {{version}} में अपडेट किया गया", + "versionNumber": "वर्ज़न {{version}}", + "versionPublishedAgo": "वर्ज़न {{version}} को {{timeAgo}} पहले पब्लिश किया गया था" +} diff --git a/public/locales/hi-IN/reports.json b/public/locales/hi-IN/reports.json new file mode 100644 index 0000000000..fca40b611b --- /dev/null +++ b/public/locales/hi-IN/reports.json @@ -0,0 +1,120 @@ +{ + "actionAddedStatus": "स्थिति जोड़ी गई: {{labels}}", + "actionBy": "द्वारा", + "actionCount_one": "{{count}} कार्रवाई", + "actionCount_other": "{{count}} कार्रवाइयाँ", + "actionCreated": "बनाया गया", + "actionDeleted": "हटाया गया", + "actionInBy": "{{itemSubtext}} में इनके द्वारा", + "actionModified": "संशोधित किया गया", + "actionPublished": "प्रकाशित किया गया", + "actionRemovedStatus": "स्थिति हटाई गई: {{labels}}", + "actions": "कार्रवाइयाँ", + "actionsByTitle": "कार्रवाइयाँ इनके द्वारा", + "actionScheduledPublish": "प्रकाशित करने के लिए शेड्यूल किया गया", + "actionScheduledPublishOn": "{{date}} को प्रकाशित करने के लिए शेड्यूल किया गया", + "actionsLabel": "कार्रवाइयाँ", + "actionType": "कार्रवाई का प्रकार", + "actionUnpublished": "अप्रकाशित किया गया", + "activityByResource": "संसाधन के अनुसार गतिविधि", + "activityLog": "गतिविधि लॉग", + "activityLogSubtitle": "संसाधनों और उपयोगकर्ताओं के अनुसार आपके इंस्टेंस की टाइमलाइन", + "activityLogTitle": "गतिविधि लॉग", + "affectedZUIDDeleted": "{{affectedZUID}} (हटाया गया)", + "affectedZUIDMissingMetaTitle": "{{affectedZUID}} (मेटा शीर्षक गायब है)", + "allResponseCodes": "सभी रिस्पॉन्स कोड", + "apiErrorMessage": "डेटा लोड करते समय एक त्रुटि हुई", + "apiErrorRetry": "पुनः प्रयास करें", + "apiErrorTitle": "ओह!", + "bandwidth": "बैंडविड्थ", + "bandwidthBreakdown": "बैंडविड्थ का विवरण", + "blockVariants": "ब्लॉक वेरिएंट", + "cdnUrl": "CDN URL", + "codeFilesAndSnippets": "कोड फ़ाइलें और स्निपेट", + "contentModel": "कंटेंट मॉडल", + "created": "बनाया गया", + "date": "तारीख", + "deleted": "हटाया गया", + "deletedZuid": "{{zuid}} (हटाया गया)", + "deletedZUID": "{{zuid}} (हटाया गया)", + "emptyStateHint": "आप जो ढूंढ रहे हैं उसे खोजने के लिए अपने फ़िल्टर बदलने का प्रयास करें।", + "failingNotFound": "विफल - नहीं मिला (404)", + "fieldPrefix": "फ़ील्ड {{message}}", + "fileName": "फ़ाइल का नाम", + "fileTypeDataset": "हेडलेस डेटा मॉडल", + "fileTypePageset": "मल्टी पेज मॉडल", + "fileTypeTemplateset": "सिंगल पेज मॉडल", + "headTag": "Head टैग", + "htmlCssBandwidth": "HTML/CSS/Javascript बैंडविड्थ", + "insightActions": "कार्रवाइयाँ", + "instanceZuid": "इंस्टेंस ZUID", + "lastActionAt": "अंतिम कार्रवाई @ {{time}}", + "lastActionAtContentModel": "अंतिम कार्रवाई @ {{lastAction}} • कंटेंट मॉडल", + "lastActionAtSettings": "अंतिम कार्रवाई @ {{lastAction}} • सेटिंग्स", + "lastUpdated": "अंतिम अपडेट: {{date}}", + "leastActive": "सबसे कम सक्रिय", + "loadingMetrics": "मेट्रिक्स लोड हो रहे हैं", + "maliciousDeflected": "दुर्भावनापूर्ण/रोके गए (403)", + "mediaBandwidth": "मीडिया बैंडविड्थ", + "messageButton": "संदेश भेजें", + "metrics": "मेट्रिक्स", + "metricsLoadError": "मेट्रिक्स लोड करते समय एक त्रुटि आई: {{message}}", + "missingMetaTitleZuid": "{{zuid}} (मेटा शीर्षक गायब है)", + "missingMetaTitleZUID": "{{zuid}} (मेटा शीर्षक गायब है)", + "modelTypeBlockVariant": "ब्लॉक वेरिएंट", + "modelTypeHeadlessDataItem": "हेडलेस डेटा आइटम", + "modelTypeMultiPageItem": "मल्टी पेज आइटम", + "modelTypeSinglePageItem": "सिंगल पेज आइटम", + "modified": "संशोधित किया गया", + "mostActive": "सबसे सक्रिय", + "mostRecent": "सबसे नए", + "mostRecentlyActive": "हाल ही में सक्रिय", + "noInsightsFound": "कोई इनसाइट नहीं मिली", + "noLogsFound": "कोई लॉग नहीं मिला", + "noResourcesFound": "कोई संसाधन नहीं मिला", + "oldestFirst": "पुराने सबसे पहले", + "other": "अन्य", + "pageRedirects": "पेज रीडायरेक्ट (301)", + "pageRequests": "पेज अनुरोध", + "past30Days": "पिछले 30 दिन", + "past7Days": "पिछले 7 दिन", + "pastDay": "पिछला दिन", + "pastDayWeek": "पिछले दिन का हफ्ता", + "platformRequestBreakdown": "प्लेटफ़ॉर्म अनुरोध विवरण (कुल)", + "published": "प्रकाशित किया गया", + "publishes": "प्रकाशन", + "redirectUrl": "रीडायरेक्ट URL", + "request": "अनुरोध", + "requests": "अनुरोध", + "resources": "संसाधन", + "resourcesImpacted": "प्रभावित संसाधन", + "scheduled": "शेड्यूल किया गया", + "selectDateRange": "तारीख सीमा चुनें", + "settings": "सेटिंग्स", + "successfulMediaRequests": "सफल मीडिया अनुरोध", + "successfulPageLoads": "सफल पेज लोड (200)", + "tabInsights": "इनसाइट्स", + "tabResources": "संसाधन", + "tabTimeline": "टाइमलाइन", + "tabUsers": "उपयोगकर्ता", + "top10ActiveUsers": "शीर्ष 10 सक्रिय उपयोगकर्ता", + "top301Redirects": "शीर्ष 301 रीडायरेक्ट", + "topFileNotFound": "शीर्ष फ़ाइलें जो नहीं मिलीं (404)", + "topMaliciousDeflected": "शीर्ष दुर्भावनापूर्ण / रोके गए अनुरोध", + "topRequestedMedia": "सबसे ज़्यादा अनुरोध किया गया मीडिया", + "topRequestedPages": "सबसे ज़्यादा अनुरोध किए गए पेज", + "totalBandwidth": "कुल बैंडविड्थ", + "totalRequests": "कुल अनुरोध", + "totalUsageBreakdown": "कुल उपयोग का विवरण", + "unknownUser": "अज्ञात उपयोगकर्ता", + "unpublished": "अप्रकाशित किया गया", + "url": "URL", + "usageReport": "उपयोग रिपोर्ट", + "usageReportFor": "{{timePeriod}} {{unit}} की उपयोग रिपोर्ट : {{startDisplay}} - {{endDisplay}}", + "userAvatar": "{{name}} का अवतार", + "userAvatarAlt": "{{firstName}} {{lastName}} का अवतार", + "userEmailCopied": "उपयोगकर्ता का ईमेल क्लिपबोर्ड पर कॉपी किया गया", + "userListItemSecondary": "{{roleName}} • {{actionCount}} कार्रवाइयाँ • अंतिम कार्रवाई @ {{lastAction}}", + "userRole": "उपयोगकर्ता की भूमिका", + "viewAuditTrailReport": "ऑडिट ट्रेल रिपोर्ट देखें" +} diff --git a/public/locales/hi-IN/schema.json b/public/locales/hi-IN/schema.json new file mode 100644 index 0000000000..bf70b47e13 --- /dev/null +++ b/public/locales/hi-IN/schema.json @@ -0,0 +1,773 @@ +{ + "activityDetails": "गतिविधि विवरण", + "activityDetailsSubtitle": "जानें कि मॉडल कब बनाया गया, अपडेट किया गया, और किसके द्वारा", + "addAnotherField": "एक और फ़ील्ड जोड़ें", + "addAnotherFieldToModel": "{{modelLabel}} में एक और फ़ील्ड जोड़ें", + "addField": "फ़ील्ड जोड़ें", + "addFieldsDescription": "इस मॉडल का हिस्सा बनने वाले विभिन्न फ़ील्ड परिभाषित करें।", + "addFieldsHeading": "फ़ील्ड जोड़ें", + "addFieldTitle": "{{name}} फ़ील्ड जोड़ें", + "addFieldToLabel": "{{label}} में फ़ील्ड जोड़ें", + "addFieldToName": "{{name}} में फ़ील्ड जोड़ें", + "addOption": "विकल्प जोड़ें", + "advanced": "उन्नत", + "allModels": "सभी मॉडल", + "allModelsHeading": "सभी मॉडल", + "apiAccessDescription": "Zesty इस सामग्री तक पहुंचने के लिए कई API प्रदान करता है, जिनमें से प्रत्येक के अनूठे लाभ हैं। वह चुनें जो आपकी आवश्यकताओं को सबसे अच्छी तरह पूरा करे।", + "apiAccessOptions": "API एक्सेस विकल्प", + "apiBackendCodingDescription": "Zesty का REST API Create, Read, Update, Delete और Publish कमांड तक पूर्ण पहुंच देता है। API को सीधे API कॉल या हमारे Node SDK के माध्यम से एक्सेस किया जा सकता है।", + "apiBestUsedFor": "सर्वश्रेष्ठ उपयोग के लिए", + "apiCustomEndpointsDescription": "Zesty.io Parsley और Webengine के साथ किसी भी डेटा प्रकार (JSON, XML, HTML आदि) और किसी भी हाइड्रेशन स्तर का निर्माण करें।", + "apiGraphqlDescription": "GraphQL सर्वर फ़ीड करने के लिए आदर्श फ्लैट ऑब्जेक्ट एंडपॉइंट। मॉडल के GQL एंडपॉइंट पर डेटा को ट्रैवर्स करके ही एक्सेस किया जा सकता है।", + "apiLabelBackendCoding": "बैक-एंड कोडिंग", + "apiLabelCustomEndpoints": "कस्टम एंडपॉइंट", + "apiLabelGraphql": "GraphQL", + "apiLabelQuickAccess": "त्वरित पहुंच", + "apiLabelSiteGenerators": "साइट जनरेटर", + "apiLabelVisualLayout": "विजुअल लेआउट", + "apiParsleyReferenceId": "API/Parsley संदर्भ ID", + "apiParsleyReferenceIdTooltip": "हमारे API या Parsley के माध्यम से इस मॉडल को एक्सेस करने के लिए उपयोग की जाने वाली ID", + "apiQuickAccessDescription": "सभी प्रकार की जानकारी के साथ पूर्ण मॉडल आइटम या एकल आइटम JSON एंडपॉइंट तक पूर्ण पहुंच देता है। डेटा को मैन्युअल हाइड्रेशन की आवश्यकता होती है।", + "apiSiteGeneratorsDescription": "Zesty प्रत्येक URL को हाइड्रेटेड संबंधों और नेविगेशन जानकारी के साथ JSON में परिवर्तित करता है। इस मॉडल में जोड़े गए प्रत्येक सामग्री आइटम में हाइड्रेटेड JSON URL तक पहुंच होती है।", + "apiTagReadAndWrite": "पढ़ें और लिखें", + "apiTagReadOnly": "केवल पढ़ें", + "apiUrlLabel": "API URL", + "apiUseApplicationsWithRouting": "रूटिंग के साथ एप्लिकेशन", + "apiUseAppsOrHeadlessLayouts": "ऐप या हेडलेस लेआउट", + "apiUseAutomation": "स्वचालन", + "apiUseAutomationDesign": "स्वचालन डिज़ाइन", + "apiUseContentExperiences": "सामग्री अनुभव", + "apiUseCustomApps": "कस्टम ऐप", + "apiUseCustomContentHydration": "कस्टम सामग्री हाइड्रेशन", + "apiUseFullyPaintedHtmlViews": "पूरी तरह से पेंट किए गए HTML व्यू", + "apiUseGraphQlImplementations": "GraphQL कार्यान्वयन", + "apiUseHeadlessApplets": "हेडलेस एप्लेट", + "apiUseHeadlessWebDevelopment": "हेडलेस वेब डेवलपमेंट", + "apiUseMiddleware": "मिडलवेयर", + "apiUseMobileApplications": "मोबाइल एप्लिकेशन", + "apiUseSearch": "खोज", + "apiUseUserGeneratedContent": "उपयोगकर्ता-निर्मित सामग्री", + "apiVisualLayoutDescription": "Visual layout रेंडर किए गए HTML या toJSON एंडपॉइंट से संरचित JSON से एक्सेस किया जा सकता है।", + "blockGroup": "ब्लॉक समूह", + "booleanOptionsLabel": "बूलियन विकल्प", + "cannotCreateModelTitle": "मॉडल नहीं बनाया जा सकता", + "characterLimitDescription": "न्यूनतम और/या अधिकतम अनुमत वर्णों की संख्या निर्धारित करें", + "characterLimitLabel": "वर्ण संख्या सीमित करें", + "characterLimitMaxLabel": "अधिकतम वर्ण संख्या (रिक्त स्थान सहित)", + "characterLimitMinLabel": "न्यूनतम वर्ण संख्या (रिक्त स्थान सहित)", + "clearFilters": "फ़िल्टर साफ़ करें", + "comingSoon": "जल्द आ रहा है", + "commonFieldDescriptionLabel": "विवरण", + "commonFieldDescriptionTooltip": "प्रदर्शन लेबल के नीचे दिखाई देता है। सामग्री लेखकों और API उपयोगकर्ताओं को निर्देश प्रदान करने के लिए इसका उपयोग करें।", + "commonFieldLabelLabel": "प्रदर्शन लेबल", + "commonFieldLabelTooltip": "स्कीमा में दिखाई देने वाले फ़ील्ड का प्रदर्शन नाम।", + "commonFieldListLabel": "तालिका सूची में कॉलम के रूप में जोड़ें", + "commonFieldListSubLabel": "सामग्री दृश्य में तालिका में फ़ील्ड को कॉलम के रूप में दिखाता है", + "commonFieldNameLabel": "API / Parsley कोड ID", + "commonFieldNameTooltip": "यह API प्रतिक्रियाओं में दिखाई देगा", + "commonFieldRequiredLabel": "आवश्यक फ़ील्ड", + "commonFieldRequiredSubLabel": "सुनिश्चित करता है कि अगर फ़ील्ड खाली है तो कोई आइटम नहीं बनाया जा सकता", + "commonFieldTooltipLabel": "टूलटिप", + "commonFieldTooltipTooltip": "सामग्री संपादकों को दिखाया गया टूलटिप।", + "commonUses": "सामान्य उपयोग", + "copyEmail": "ईमेल कॉपी करें", + "copyFieldZuid": "फ़ील्ड ZUID कॉपी करें", + "copyFieldZUID": "फ़ील्ड ZUID कॉपी करें", + "copyModelZUID": "मॉडल ZUID कॉपी करें", + "createdOn": "बनाया गया", + "createModel": "मॉडल बनाएं", + "createModelButton": "मॉडल बनाएं", + "createModelTitle": "{{modelName}} बनाएं", + "currencyFieldLabel": "मुद्रा", + "currencyFieldPlaceholder": "एक मुद्रा चुनें", + "currencyFieldTooltip": "चयनित मुद्रा कोड, प्रतीक और ध्वज सामग्री आइटम में इस फ़ील्ड के लिए प्रदर्शित किए जाएंगे और API के माध्यम से फ़ील्ड सेटिंग्स से एक्सेस किया जा सकता है।", + "currencyFlagAlt": "{{countryCode}} ध्वज", + "deactivatedFields": "निष्क्रिय फ़ील्ड", + "deactivatedFieldsDescription": "इन फ़ील्ड को किसी भी समय पुनः सक्रिय किया जा सकता है यदि आप उन्हें सामग्री मॉडल में वापस लाना चाहते हैं।", + "deactivateField": "फ़ील्ड निष्क्रिय करें", + "deactivatingField": "फ़ील्ड निष्क्रिय की जा रही है", + "defaultValue": "डिफ़ॉल्ट मान", + "defaultValueDescription": "इस फ़ील्ड के लिए एक पूर्व-निर्धारित मान सेट करें", + "defaultValueHelperText": "इस फ़ील्ड के लिए एक पूर्व-निर्धारित मान सेट करें", + "defaultValueLabel": "डिफ़ॉल्ट मान", + "deleteModel": "मॉडल हटाएं", + "deleteModelCannotDeleteNotify": "मॉडल नहीं हटाया जा सकता: {{modelLabel}}", + "deleteModelConfirmLabel": "नीचे \"{{modelLabel}}\" टाइप करके पुष्टि करें।", + "deleteModelFailedNotify": "मॉडल हटाने में विफल", + "deleteModelTitle": "मॉडल हटाएं?", + "deleteModelWarning": "\"{{modelLabel}}\" मॉडल हटाने से उसके सभी सामग्री आइटम भी हट जाएंगे। यह पूर्ववत नहीं किया जा सकता।", + "descriptionLabel": "विवरण", + "descriptionPlaceholder": "यह मॉडल किस लिए उपयोग होगा", + "descriptionTooltip": "सामग्री लेखकों की मदद के लिए मॉडल का उद्देश्य प्रदर्शित करता है", + "displayNameLabel": "प्रदर्शन नाम", + "displayNamePlaceholder": "जैसे होम पेज, अबाउट पेज, कॉन्टैक्ट पेज आदि।", + "displayNameTooltip": "सामग्री संपादकों को दिखाया जाने वाला नाम", + "dropdownOptionsLabel": "ड्रॉपडाउन विकल्प", + "duplicate": "नकल बनाएं", + "duplicateModel": "मॉडल की नकल बनाएं", + "duplicateModelAlertBodyRich": "आप {{label}} मॉडल की उसके सभी मौजूदा फ़ील्ड के साथ नकल बनाने वाले हैं। कोई भी सामग्री आइटम नकल नहीं किया जाएगा।", + "duplicateModelDescriptionLabel": "विवरण", + "duplicateModelDescriptionPlaceholder": "यह मॉडल किस लिए उपयोग होगा", + "duplicateModelDisplayNameLabel": "प्रदर्शन नाम", + "duplicateModelDisplayNamePlaceholder": "\"{{label}}\" की नकल", + "duplicateModelFailed": "मॉडल की नकल बनाने में विफल", + "duplicateModelListedDescription": "सूचीबद्ध मॉडलों के सामग्री आइटम प्रोग्रामेटिक नेविगेशन कॉल के लिए उपलब्ध होते हैं।", + "duplicateModelListedLabel": "इस मॉडल को सूचीबद्ध करें", + "duplicateModelParentLabel": "मॉडल पैरेंट", + "duplicateModelParentPlaceholder": "चुनें", + "duplicateModelReferenceIdLabel": "संदर्भ ID", + "duplicateModelReferenceIdPlaceholder": "प्रदर्शन नाम से स्वतः-उत्पन्न", + "duplicateModelSubtitle": "{{type}} मॉडल के रूप में", + "duplicateModelTitle": "{{label}} मॉडल की नकल बनाएं", + "editField": "फ़ील्ड संपादित करें", + "editFieldTitle": "{{label}} संपादित करें", + "editInCode": "कोड में संपादित करें", + "editTemplateFile": "टेम्पलेट फ़ाइल संपादित करें", + "emptyStateBody": "मॉडल सामग्री आइटम की संरचना परिभाषित करते हैं जैसे होम पेज या लेख, दाईं ओर दिखाए गए मॉडल के उदाहरणों के समान।", + "emptyStateHeading": "मॉडल बनाकर शुरू करते हैं", + "emptyStateLinkBestPractices": "मॉडल बनाने के सर्वोत्तम अभ्यास सीखें", + "emptyStateLinkBuildingModels": "मॉडल बनाने पर हमारी गाइड पढ़ें", + "endpointDevLabel": "Dev (नवीनतम संस्करण)", + "endpointProduction": "प्रोडक्शन", + "enterLabel": "लेबल दर्ज करें", + "enterValue": "मान दर्ज करें", + "errorFieldIsRequired": "{{label}} आवश्यक है", + "errorFieldReferenceExists": "इस API/Parsley संदर्भ के साथ एक फ़ील्ड पहले से मौजूद है", + "errorOptionValueExists": "इस मान के साथ एक विकल्प पहले से मौजूद है", + "errorShortenToLess": "{{maxLength}} वर्णों से कम करें ({{currentLength}}/{{maxLength}})", + "errorSystemReservedFieldName": "\"{{value}}\" एक सिस्टम आरक्षित फ़ील्ड नाम है", + "extensionPresetAudios": "ऑडियो", + "extensionPresetDocuments": "दस्तावेज़", + "extensionPresetImages": "छवियाँ", + "extensionPresetPresentations": "प्रस्तुतियाँ", + "extensionPresetSpreadsheets": "स्प्रेडशीट", + "extensionPresetVideos": "वीडियो", + "failedCreateField": "फ़ील्ड बनाने में विफल", + "failedCreateModel": "मॉडल बनाने में विफल", + "failedUpdateField": "फ़ील्ड अपडेट करने में विफल", + "faqBadge": "FAQ", + "fieldCategoryAdvanced": "उन्नत", + "fieldCategoryDateAndTime": "दिनांक और समय", + "fieldCategoryMedia": "मीडिया", + "fieldCategoryNumeric": "संख्यात्मक", + "fieldCategoryRelationship": "संबंध", + "fieldCategoryText": "पाठ", + "fieldDeactivated": "\"{{label}}\" फ़ील्ड निष्क्रिय की गई", + "fieldDescriptionBodyText": "फ़ॉर्म के लिए संदर्भ या निर्देश प्रदान करने वाला विस्तृत पाठ।", + "fieldDescriptionButtonContainerSubText": "बाएं सेक्शन में कॉल-टू-एक्शन बटन के नीचे सहायक पाठ।", + "fieldDescriptionCompanyLogo": "व्यक्ति जिस कंपनी का प्रतिनिधित्व करता है उसका लोगो।", + "fieldDescriptionCompanyName": "व्यक्ति जिस कंपनी का प्रतिनिधित्व करता है उसका नाम।", + "fieldDescriptionCtaButton1TextLeftSection": "बाएं सेक्शन में पहले कॉल-टू-एक्शन बटन का पाठ।", + "fieldDescriptionCtaButton1TextNoSection": "पहले कॉल-टू-एक्शन बटन का पाठ", + "fieldDescriptionCtaButton1Url": "पहला कॉल-टू-एक्शन बटन जिस URL से लिंक होता है।", + "fieldDescriptionCtaButton2TextLeftSection": "बाएं सेक्शन में दूसरे कॉल-टू-एक्शन बटन का पाठ।", + "fieldDescriptionCtaButton2Url": "दूसरा कॉल-टू-एक्शन बटन जिस URL से लिंक होता है।", + "fieldDescriptionCtaButtonTextFeatureSection": "फ़ीचर सेक्शन में कॉल-टू-एक्शन बटन का पाठ।", + "fieldDescriptionCtaButtonUrl": "कॉल-टू-एक्शन बटन जिस URL से लिंक होता है।", + "fieldDescriptionFeatureIntroLink": "परिचय फ़ीचर पाठ से जुड़ा URL।", + "fieldDescriptionFeatureIntroText": "फ़ीचर सेक्शन के लिए एक संक्षिप्त परिचय पाठ।", + "fieldDescriptionFormCtaButtonText": "फ़ॉर्म पर कॉल-टू-एक्शन बटन का पाठ।", + "fieldDescriptionFormHeaderText": "संपर्क फ़ॉर्म के लिए एक उप-शीर्षक या परिचय।", + "fieldDescriptionHeroImageFeatureSection": "फ़ीचर सेक्शन के साथ प्रदर्शित छवि।", + "fieldDescriptionHeroImageHeroSection": "हीरो सेक्शन में प्रदर्शित छवि।", + "fieldDescriptionHeroImageRight": "हीरो सेक्शन की दाईं ओर प्रदर्शित छवि।", + "fieldDescriptionJobTitle": "उद्धरण देने वाले व्यक्ति का नौकरी पद।", + "fieldDescriptionNameInput": "नाम इनपुट फ़ील्ड के लिए एक लेबल।", + "fieldDescriptionPersonEmail": "प्राथमिक संपर्क व्यक्ति का ईमेल पता।", + "fieldDescriptionPersonImage": "उद्धरण देने वाले व्यक्ति की छवि।", + "fieldDescriptionPersonName": "प्राथमिक संपर्क व्यक्ति का नाम।", + "fieldDescriptionPersonNameTestimonial": "उद्धरण देने वाले व्यक्ति का नाम।", + "fieldDescriptionPersonPhoto": "प्राथमिक संपर्क व्यक्ति की फ़ोटो।", + "fieldDescriptionPersonTitle": "प्राथमिक संपर्क व्यक्ति का पद या भूमिका।", + "fieldDescriptionPosition": "कंपनी में व्यक्ति का पद।", + "fieldDescriptionQuote": "किसी व्यक्ति द्वारा दिया गया प्रशंसापत्र या उद्धरण।", + "fieldDescriptionStarRatingNumber": "हीरो सेक्शन में प्रदर्शित संख्यात्मक रेटिंग।", + "fieldDescriptionStarRatingSubText": "स्टार रेटिंग के बारे में अतिरिक्त विवरण।", + "fieldDescriptionStarRatingTitle": "स्टार रेटिंग का वर्णन करने वाला शीर्षक।", + "fieldDescriptionSubTitleFeatureSection": "फ़ीचर के बारे में अधिक विवरण प्रदान करने वाला सहायक पाठ।", + "fieldDescriptionSubTitleHeroSection": "हीरो सेक्शन में शीर्षक के नीचे प्रदर्शित सहायक पाठ।", + "fieldDescriptionSubTitleLeftSection": "बाएं सेक्शन में शीर्षक के नीचे प्रदर्शित सहायक पाठ।", + "fieldDescriptionTitle": "बाएं सेक्शन में प्रदर्शित मुख्य हेडिंग।", + "fieldDescriptionTitleContactForm": "संपर्क फ़ॉर्म के लिए मुख्य हेडिंग।", + "fieldDescriptionTitleFeatureSection": "फ़ीचर सेक्शन के लिए मुख्य हेडिंग।", + "fieldDescriptionTitleHeroSection": "हीरो सेक्शन में प्रदर्शित मुख्य हेडिंग।", + "fieldDescriptionTopCtaButtonText": "शीर्ष कॉल-टू-एक्शन बटन का पाठ।", + "fieldDescriptionTopCtaButtonUrl": "शीर्ष कॉल-टू-एक्शन बटन जिस URL से लिंक होता है।", + "fieldFormTabDetails": "विवरण", + "fieldFormTabLearn": "सीखें", + "fieldFormTabRepeaterFields": "फ़ील्ड", + "fieldFormTabRules": "नियम", + "fieldLabelBodyText": "मुख्य पाठ", + "fieldLabelButtonContainerSubText": "बटन कंटेनर उप-पाठ", + "fieldLabelCompanyLogo": "कंपनी का लोगो", + "fieldLabelCompanyName": "कंपनी का नाम", + "fieldLabelCtaButton1Text": "CTA बटन 1 पाठ", + "fieldLabelCtaButton1Url": "CTA बटन 1 URL", + "fieldLabelCtaButton2Text": "CTA बटन 2 पाठ", + "fieldLabelCtaButton2Url": "CTA बटन 2 URL", + "fieldLabelCtaButtonText": "CTA बटन पाठ", + "fieldLabelCtaButtonUrl": "CTA बटन URL", + "fieldLabelFeatureIntroLink": "फ़ीचर परिचय लिंक", + "fieldLabelFeatureIntroText": "फ़ीचर परिचय पाठ", + "fieldLabelFormCtaButtonText": "फ़ॉर्म CTA बटन पाठ", + "fieldLabelFormHeaderText": "फ़ॉर्म हेडर पाठ", + "fieldLabelHeroImage": "हीरो छवि", + "fieldLabelJobTitle": "नौकरी का पद", + "fieldLabelPersonEmail": "व्यक्ति का ईमेल", + "fieldLabelPersonImage": "व्यक्ति की छवि", + "fieldLabelPersonName": "व्यक्ति का नाम", + "fieldLabelPersonPhoto": "व्यक्ति की फ़ोटो", + "fieldLabelPersonTitle": "व्यक्ति का पद", + "fieldLabelPosition": "पद", + "fieldLabelQuote": "उद्धरण", + "fieldLabelStarRatingNumber": "स्टार रेटिंग संख्या", + "fieldLabelStarRatingSubText": "स्टार रेटिंग उप-पाठ", + "fieldLabelStarRatingTitle": "स्टार रेटिंग शीर्षक", + "fieldLabelSubTitle": "उप-शीर्षक", + "fieldLabelTitle": "शीर्षक", + "fieldLabelTopCtaButtonText": "शीर्ष CTA बटन पाठ", + "fieldLabelTopCtaButtonUrl": "शीर्ष CTA बटन URL", + "fieldListSearchPlaceholder": "फ़ील्ड खोजें", + "fieldReactivated": "\"{{label}}\" फ़ील्ड पुनः सक्रिय की गई", + "fields": "फ़ील्ड", + "fieldToDisplayLabel": "प्रदर्शित करने के लिए फ़ील्ड", + "fieldToDisplayPlaceholder": "एक फ़ील्ड चुनें", + "fieldTypeBlockSelectorCommonUse1": "फुटर सेक्शन", + "fieldTypeBlockSelectorCommonUse2": "लेख के अंत में ब्लॉक", + "fieldTypeBlockSelectorCommonUse3": "फ़ॉर्म", + "fieldTypeBlockSelectorDescription": "ब्लॉक सेलेक्टर फ़ील्ड उपयोगकर्ता को किसी भी ब्लॉक मॉडल का एक अनूठा वेरिएंट चुनने की अनुमति देती है जिसे वे अपने पेज पर रेंडर देखना चाहते हैं।", + "fieldTypeBlockSelectorName": "ब्लॉक सेलेक्टर", + "fieldTypeBlockSelectorProTip": "ये तब उपयोग करने के लिए उत्तम हैं जब आप एक ही मॉडल के विभिन्न पेजों के अंत में अलग-अलग एंड ब्लॉक उपयोग करना चाहते हैं।", + "fieldTypeBlockSelectorShortDesc": "किसी ब्लॉक मॉडल के एक वेरिएंट से लिंक करें", + "fieldTypeBlockSelectorSubHeader": "किसी ब्लॉक मॉडल के एक वेरिएंट से लिंक करें", + "fieldTypeBooleanCommonUse1": "फ़ीचर्ड ब्लॉग पोस्ट, उत्पादों को हाइलाइट करने के लिए", + "fieldTypeBooleanCommonUse2": "ई-कॉमर्स उत्पादों में छूट", + "fieldTypeBooleanCommonUse3": "\"प्रो लेखक\" जैसे बैज को हाइलाइट करने के लिए", + "fieldTypeBooleanCommonUse4": "आइटम छिपाने के लिए", + "fieldTypeBooleanDescription": "यह फ़ील्ड तब उपयोग की जाती है जब आप चाहते हैं कि किसी फ़ील्ड में केवल दो संभावित मूल्य हों। जैसे हाँ या नहीं, सही या गलत, फ़ीचर्ड या नहीं आदि।", + "fieldTypeBooleanName": "बूलियन", + "fieldTypeBooleanProTip": "बूलियन फ़ील्ड का उपयोग आइटम के संग्रह में दिखाने वाले आइटम को फ़िल्टर करने के लिए करें।", + "fieldTypeBooleanShortDesc": "सही या गलत", + "fieldTypeBooleanSubHeader": "सही या गलत मान सेट करने के लिए उपयोग किया जाता है", + "fieldTypeColorCommonUse1": "बैकग्राउंड रंग", + "fieldTypeColorCommonUse2": "बॉर्डर रंग", + "fieldTypeColorCommonUse3": "फ़ॉन्ट रंग", + "fieldTypeColorCommonUse4": "श्रेणी टैग के रंग बदलें", + "fieldTypeColorDescription": "यह फ़ील्ड तब आदर्श है जब आप अपने पेज पर विभिन्न तत्वों जैसे बैकग्राउंड रंग, टेक्स्ट रंग, बॉर्डर आदि को स्टाइल करना चाहते हों। योगदानकर्ताओं को अपनी पसंद का रंग चुनने के लिए कलर पिकर मिलेगा।", + "fieldTypeColorName": "रंग", + "fieldTypeColorProTip": "कलर पिकर का उपयोग आइटम को अनूठे तरीके से हाइलाइट करने और उपयोगकर्ता को आइटम के बीच आसानी से भेद करने में मदद करने के लिए किया जा सकता है।", + "fieldTypeColorShortDesc": "बैकग्राउंड रंग, फ़ॉन्ट रंग और अधिक", + "fieldTypeColorSubHeader": "बैकग्राउंड रंग, फ़ॉन्ट रंग और अधिक के लिए उपयोग किया जाता है", + "fieldTypeCurrencyCommonUse1": "किसी उत्पाद या सेवा का लागत मूल्य", + "fieldTypeCurrencyCommonUse2": "किसी उत्पाद या सेवा का बिक्री मूल्य", + "fieldTypeCurrencyDescription": "यह फ़ील्ड तब उपयोग की जाती है जब आप लागत, मूल्य या खाता शेष संग्रहीत करना चाहते हैं।", + "fieldTypeCurrencyName": "मुद्रा", + "fieldTypeCurrencyProTip": "यदि आप मूल्य संग्रहीत करना चाहते हैं तो संख्या फ़ील्ड के बजाय मुद्रा फ़ील्ड का उपयोग करें।", + "fieldTypeCurrencyShortDesc": "उत्पाद मूल्यों के लिए आदर्श", + "fieldTypeCurrencySubHeader": "लागत, मूल्य और शेष राशि संग्रहीत करने के लिए उपयोग किया जाता है", + "fieldTypeDateCommonUse1": "जन्म तिथियां", + "fieldTypeDateCommonUse2": "वर्षगांठ", + "fieldTypeDateCommonUse3": "ऐतिहासिक तिथियां", + "fieldTypeDateCommonUse4": "रिलीज़ तिथियां", + "fieldTypeDateDescription": "यह फ़ील्ड तब उपयोग की जाती है जब आप चाहते हैं कि इनपुट एक भूतकाल, वर्तमान या भविष्य की तारीख हो। आप अनुकूलित कर सकते हैं कि उपयोगकर्ता दिन, महीना या वर्ष या तीनों दर्ज करे।\n\n Zesty स्वचालित रूप से बनाने की तारीख, प्रकाशित तारीख और संशोधित तारीख को ट्रैक करता है इसलिए इनके लिए अतिरिक्त फ़ील्ड बनाने की आवश्यकता नहीं है।", + "fieldTypeDateName": "दिनांक", + "fieldTypeDateProTip": "यदि आप तारीख के साथ समय भी जोड़ना चाहते हैं तो दिनांक और समय फ़ील्ड का उपयोग करें।", + "fieldTypeDateShortDesc": "जन्मदिन, रिलीज़ तिथियां, इवेंट आदि के लिए आदर्श", + "fieldTypeDateSubHeader": "जन्मदिन, रिलीज़ तिथियां, इवेंट आदि के लिए उपयोग करें", + "fieldTypeDateTimeCommonUse1": "इवेंट प्रारंभ और समाप्ति समय", + "fieldTypeDateTimeCommonUse2": "शिपमेंट समय", + "fieldTypeDateTimeCommonUse3": "समय सीमाएं", + "fieldTypeDateTimeDescription": "यह फ़ील्ड तब उपयोग की जाती है जब आप चाहते हैं कि इनपुट एक तारीख और समय हो। आप अनुकूलित कर सकते हैं कि उपयोगकर्ता समय, दिन, महीना या वर्ष या चारों दर्ज करे।\n\n Zesty स्वचालित रूप से बनाने की तारीख, प्रकाशित तारीख और संशोधित तारीख को ट्रैक करता है इसलिए इनके लिए अतिरिक्त फ़ील्ड बनाने की आवश्यकता नहीं है।", + "fieldTypeDateTimeName": "दिनांक और समय", + "fieldTypeDateTimeProTip": "यदि आप केवल तारीख चाहते हैं तो दिनांक फ़ील्ड का उपयोग करें।", + "fieldTypeDateTimeShortDesc": "विशिष्ट समय के साथ तिथियां ट्रैक करें", + "fieldTypeDateTimeSubHeader": "विशिष्ट समय के साथ तिथियां ट्रैक करने के लिए उपयोग करें", + "fieldTypeDropdownCommonUse1": "लिंग", + "fieldTypeDropdownCommonUse2": "पूर्व-निर्धारित आकार", + "fieldTypeDropdownCommonUse3": "भाषाएं", + "fieldTypeDropdownCommonUse4": "कंपनी विभाग", + "fieldTypeDropdownDescription": "यह फ़ील्ड तब उपयोग की जाती है जब आप चाहते हैं कि उपयोगकर्ता आपके द्वारा लिखे गए पूर्व-निर्धारित विकल्पों की ड्रॉपडाउन मेनू से एक मूल्य चुने। आप फ़ील्ड सेटिंग में ये मूल्य परिभाषित कर सकते हैं।", + "fieldTypeDropdownName": "ड्रॉपडाउन", + "fieldTypeDropdownProTip": "ड्रॉपडाउन फ़ील्ड में जोड़े गए मूल्य केवल उस मॉडल में उपलब्ध होंगे जिसमें फ़ील्ड जोड़ी गई है। यदि आपको ऐसे मूल्य चाहिए जो पुन: उपयोगी और अनेक मॉडलों में उपलब्ध हों, तो उसके लिए एक अलग मॉडल बनाएं और फिर उसमें एकल या बहु आइटम संबंध फ़ील्ड जोड़ें।", + "fieldTypeDropdownShortDesc": "मूल्यों की सूची से चुनें", + "fieldTypeDropdownSubHeader": "उपयोगकर्ता को मूल्यों की सूची से चुनने की अनुमति देने के लिए उपयोग किया जाता है", + "fieldTypeExternalUrlCommonUse1": "एफ़िलिएट साइटों से लिंक (जैसे Amazon)", + "fieldTypeExternalUrlCommonUse2": "Facebook, Instagram आदि पर सोशल मीडिया पेजों से लिंक", + "fieldTypeExternalUrlCommonUse3": "इवेंट के लिए Eventbrite या ऑर्डर के लिए Doordash जैसी तृतीय-पक्ष सेवाओं से लिंक", + "fieldTypeExternalUrlDescription": "यह फ़ील्ड बाहरी वेबसाइटों के पेजों के URL संग्रहीत करने के लिए उत्तम है। इन लिंक को उपयोगकर्ता देख और क्लिक कर सकते हैं।", + "fieldTypeExternalUrlName": "बाहरी URL", + "fieldTypeExternalUrlProTip": "आप रिच टेक्स्ट फ़ील्ड में भी लिंक जोड़ सकते हैं।", + "fieldTypeExternalUrlShortDesc": "किसी बाहरी वेबसाइट से लिंक करें", + "fieldTypeExternalUrlSubHeader": "किसी बाहरी वेबसाइट से लिंक करने के लिए इस फ़ील्ड का उपयोग करें", + "fieldTypeIntegrationCommonUse1": "आँकड़े - बाहरी आँकड़े लाएं", + "fieldTypeIntegrationCommonUse2": "तृतीय-पक्ष एकीकरण - बाहरी ऐप से विवरण लाएं", + "fieldTypeIntegrationCommonUse3": "फ़ॉर्म - बाहरी फ़ॉर्म सबमिशन आयात करें", + "fieldTypeIntegrationCommonUse4": "किसी अन्य Zesty इंस्टेंस से सामग्री आयात करें", + "fieldTypeIntegrationCommonUse5": "बाहरी CMS - बाहरी CMS से सामग्री प्रदर्शित करें", + "fieldTypeIntegrationCommonUse6": "स्प्रेडशीट - स्प्रेडशीट डेटा लाएं", + "fieldTypeIntegrationDescription": "यह फ़ील्ड उपयोगकर्ताओं को JSON API से डेटा लाने, प्रविष्टियां चुनने और उन्हें सामग्री आइटम में जोड़ने की अनुमति देती है। डेटा स्थिर रहता है जब तक पुनः चयनित न किया जाए, जिससे नियंत्रित अपडेट सुनिश्चित होते हैं।", + "fieldTypeIntegrationName": "एकीकरण", + "fieldTypeIntegrationProTip": "डेटा JSON ऑब्जेक्ट के रूप में संग्रहीत होता है और टेम्पलेट में गतिशील रेंडरिंग के लिए हेडलेस या Parsley के माध्यम से एक्सेस किया जा सकता है।", + "fieldTypeIntegrationShortDesc": "API से डेटा लाएं और संग्रहीत करें", + "fieldTypeIntegrationSubHeader": "API से डेटा लाएं और संग्रहीत करें", + "fieldTypeInternalLinkCommonUse1": "आंतरिक उत्पादों से लिंक करें", + "fieldTypeInternalLinkCommonUse2": "आंतरिक लेखों से लिंक करें", + "fieldTypeInternalLinkDescription": "आंतरिक लिंक फ़ील्ड किसी भी स्कीमा से इंस्टेंस के आंतरिक आइटम का चयन करने की अनुमति देती है। यह लेखकों को किसी इंस्टेंस में आइटम को आपस में जोड़ने की क्षमता देने के लिए उपयोगी है।", + "fieldTypeInternalLinkName": "आंतरिक लिंक", + "fieldTypeInternalLinkProTip": "यदि आप बाहरी वेबसाइटों से लिंक करना चाहते हैं तो बाहरी URL फ़ील्ड का उपयोग करें।", + "fieldTypeInternalLinkShortDesc": "किसी आंतरिक सामग्री आइटम से लिंक करें", + "fieldTypeInternalLinkSubHeader": "किसी आंतरिक सामग्री आइटम से लिंक करने के लिए इस फ़ील्ड का उपयोग करें", + "fieldTypeMarkdownCommonUse1": "ब्लॉग पोस्ट", + "fieldTypeMarkdownCommonUse2": "लेख", + "fieldTypeMarkdownCommonUse3": "गाइड", + "fieldTypeMarkdownCommonUse4": "सूचियाँ", + "fieldTypeMarkdownCommonUse5": "इवेंट विवरण", + "fieldTypeMarkdownDescription": "यह फ़ील्ड योगदानकर्ता को सामग्री को स्टाइल और संरचित करने के लिए Github Flavored Markdown एडिटर सिंटैक्स प्रदान करती है।", + "fieldTypeMarkdownName": "Markdown", + "fieldTypeMarkdownProTip": "यह फ़ील्ड तब बहुत उपयोगी होती है जब आप चाहते हैं कि योगदानकर्ता पाठ पर कोई भी शैली और संरचना लागू कर सकें।", + "fieldTypeMarkdownShortDesc": "पाठ को फ़ॉर्मेट करने के लिए हल्का मार्कअप", + "fieldTypeMarkdownSubHeader": "पाठ को फ़ॉर्मेट करने के लिए हल्का मार्कअप", + "fieldTypeMediaCommonUse1": "लेख कवर छवियाँ", + "fieldTypeMediaCommonUse2": "लेखकों या टीम सदस्यों की प्रोफ़ाइल तस्वीरें", + "fieldTypeMediaCommonUse3": "उत्पाद गैलरी", + "fieldTypeMediaCommonUse4": "चित्र और आइकन", + "fieldTypeMediaCommonUse5": "डेमो, ट्यूटोरियल, कंपनी ऑनबोर्डिंग के वीडियो", + "fieldTypeMediaCommonUse6": "बैकग्राउंड छवियाँ", + "fieldTypeMediaCommonUse7": "श्वेतपत्र, ई-बुक, मेनू, मानचित्र आदि के PDF", + "fieldTypeMediaCommonUse8": "PowerPoint प्रस्तुतियाँ", + "fieldTypeMediaDescription": "यह फ़ील्ड उपयोगकर्ता को एक या अधिक मीडिया फ़ाइलें जैसे चित्र, वीडियो, दस्तावेज़, प्रस्तुति आदि जोड़ने की अनुमति देती है। आप अधिकतम फ़ाइल संख्या और प्रत्येक अपलोड के लिए अधिकतम फ़ाइल आकार निर्धारित कर सकते हैं।", + "fieldTypeMediaName": "मीडिया", + "fieldTypeMediaProTip": "आप रिच टेक्स्ट फ़ील्ड में भी इनलाइन मीडिया जोड़ सकते हैं।", + "fieldTypeMediaShortDesc": "छवियाँ, वीडियो, PDF और अन्य फ़ाइलें", + "fieldTypeMediaSubHeader": "छवियों, वीडियो, PDF और अन्य फ़ाइलों के लिए उपयोग करें", + "fieldTypeMultiLineTextCommonUse1": "उप-शीर्षक", + "fieldTypeMultiLineTextCommonUse2": "लेख सारांश", + "fieldTypeMultiLineTextCommonUse3": "उत्पाद विवरण", + "fieldTypeMultiLineTextCommonUse4": "श्रेणी विवरण", + "fieldTypeMultiLineTextCommonUse5": "लेखक परिचय", + "fieldTypeMultiLineTextDescription": "बहु पंक्ति पाठ फ़ील्ड लंबी टेक्स्ट सामग्री के लिए सबसे उपयुक्त है जिसे विशेष फ़ॉर्मेटिंग, लिंक या मीडिया की आवश्यकता नहीं है।", + "fieldTypeMultiLineTextName": "बहु पंक्ति पाठ", + "fieldTypeMultiLineTextProTip": "यह फ़ील्ड तब बहुत उपयोगी होती है जब आप यह सुनिश्चित करना चाहते हैं कि योगदानकर्ता पाठ पर कोई शैली लागू न कर सकें।", + "fieldTypeMultiLineTextShortDesc": "विवरण, सारांश और संक्षिप्त विवरण", + "fieldTypeMultiLineTextSubHeader": "विवरण, सारांश और संक्षिप्त विवरण के लिए उपयोग किया जाता है", + "fieldTypeNumberCommonUse1": "इन्वेंटरी में उत्पादों की मात्रा", + "fieldTypeNumberCommonUse2": "रैंकिंग", + "fieldTypeNumberCommonUse3": "रेटिंग", + "fieldTypeNumberCommonUse4": "वज़न", + "fieldTypeNumberCommonUse5": "ऊंचाई", + "fieldTypeNumberDescription": "यह फ़ील्ड तब उपयोग की जाती है जब आप चाहते हैं कि इनपुट एक संख्या हो।", + "fieldTypeNumberName": "संख्या", + "fieldTypeNumberProTip": "संख्या फ़ील्ड पूर्णांक और दशमलव दोनों संख्याएं रख सकती है।", + "fieldTypeNumberShortDesc": "पूर्णांक और दशमलव संख्याएं", + "fieldTypeNumberSubHeader": "मात्रा, आयु, रेटिंग आदि के लिए उपयोग किया जाता है", + "fieldTypeOneToManyCommonUse1": "किसी लेख को अनेक लेखकों, टैग या श्रेणियों से लिंक करने के लिए", + "fieldTypeOneToManyCommonUse2": "किसी लेखक को अनेक सेवाओं से लिंक करने के लिए", + "fieldTypeOneToManyDescription": "यह फ़ील्ड आपको अपने मॉडल को किसी अन्य मॉडल से जोड़ने और एक के बजाय अनेक आइटम से कनेक्ट करने की अनुमति देती है।", + "fieldTypeOneToManyName": "एक-से-अनेक संबंध", + "fieldTypeOneToManyProTip": "यह फ़ील्ड तब उपयोगी है जब आप या आपकी टीम बार-बार एक ही इनपुट जैसे लेखक के नाम टाइप करते हों। उदाहरण के लिए, लेखकों का एक मॉडल बनाना और उसे कनेक्ट करना समझदारी है क्योंकि अन्यथा आपको प्रत्येक लेख के लिए बार-बार टाइप करना होगा।", + "fieldTypeOneToManyShortDesc": "किसी मॉडल के अनेक सामग्री आइटम से लिंक करें", + "fieldTypeOneToManySubHeader": "किसी मॉडल के अनेक सामग्री आइटम से लिंक करने के लिए इस फ़ील्ड का उपयोग करें", + "fieldTypeOneToOneCommonUse1": "किसी लेख को एकल लेखक या श्रेणी से लिंक करने के लिए", + "fieldTypeOneToOneCommonUse2": "किसी कर्मचारी को एकल सेवा से लिंक करने के लिए", + "fieldTypeOneToOneDescription": "यह फ़ील्ड आपके मॉडल को किसी अन्य मॉडल से जोड़ने के लिए आदर्श है। उदाहरण के लिए, किसी ब्लॉग को किसी श्रेणी या लेखक से लिंक करना।", + "fieldTypeOneToOneName": "एक-से-एक संबंध", + "fieldTypeOneToOneProTip": "यह फ़ील्ड तब उपयोगी है जब आप या आपकी टीम बार-बार एक ही इनपुट जैसे लेखक के नाम टाइप करते हों। उदाहरण के लिए, लेखकों का एक मॉडल बनाना और उसे कनेक्ट करना समझदारी है क्योंकि अन्यथा आपको प्रत्येक लेख के लिए बार-बार टाइप करना होगा।", + "fieldTypeOneToOneShortDesc": "किसी मॉडल के एक सामग्री आइटम से लिंक करें", + "fieldTypeOneToOneSubHeader": "किसी मॉडल के एक सामग्री आइटम से लिंक करने के लिए इस फ़ील्ड का उपयोग करें", + "fieldTypeRepeaterCommonUse1": "स्लाइड", + "fieldTypeRepeaterCommonUse2": "प्रशंसापत्र", + "fieldTypeRepeaterCommonUse3": "रेसिपी", + "fieldTypeRepeaterCommonUse4": "इवेंट समय", + "fieldTypeRepeaterDescription": "रिपीटर फ़ील्ड आपको दोहराई जाने वाली सामग्री के लिए फ़ील्ड का एक समूह बनाने की अनुमति देती है। अनेक आइटम जैसे स्लाइड, टीम सदस्य या FAQ के लिए उपयोगी।", + "fieldTypeRepeaterName": "रिपीटर", + "fieldTypeRepeaterProTip": "रिपीटर फ़ील्ड का उपयोग उन सूचियों या सेक्शन को प्रबंधित करने के लिए करें जिनकी साझा संरचना लेकिन अनूठी सामग्री हो जैसे रेसिपी या प्रशंसापत्र।", + "fieldTypeRepeaterShortDesc": "समूहित फ़ील्ड की दोहराई जाने वाली सूची", + "fieldTypeRepeaterSubHeader": "स्थैतिक फ़ील्ड के समूहों के लिए उपयोग किया जाता है", + "fieldTypeSingleLineTextCommonUse1": "लेख शीर्षक", + "fieldTypeSingleLineTextCommonUse2": "लेखक के नाम", + "fieldTypeSingleLineTextCommonUse3": "इवेंट के नाम", + "fieldTypeSingleLineTextCommonUse4": "श्रेणी लेबल", + "fieldTypeSingleLineTextCommonUse5": "हेडिंग", + "fieldTypeSingleLineTextDescription": "\"एकल पंक्ति पाठ\" फ़ील्ड छोटी टेक्स्ट सामग्री के लिए सबसे उपयुक्त है जिसे विशेष फ़ॉर्मेटिंग, लिंक या मीडिया की आवश्यकता नहीं है।", + "fieldTypeSingleLineTextName": "एकल पंक्ति पाठ", + "fieldTypeSingleLineTextProTip": "यह फ़ील्ड तब बहुत उपयोगी होती है जब आप यह सुनिश्चित करना चाहते हैं कि योगदानकर्ता पाठ पर कोई शैली लागू न कर सकें।", + "fieldTypeSingleLineTextShortDesc": "शीर्षक, नाम और हेडिंग", + "fieldTypeSingleLineTextSubHeader": "शीर्षक, नाम और हेडिंग के लिए उपयोग किया जाता है", + "fieldTypeSortOrderCommonUse1": "फ़ीचर्ड उत्पादों का क्रम निर्धारित करें", + "fieldTypeSortOrderCommonUse2": "श्रेणियों का क्रम निर्धारित करें", + "fieldTypeSortOrderCommonUse3": "किसी कोर्स के वीडियो का क्रम निर्धारित करें", + "fieldTypeSortOrderDescription": "कभी-कभी आप नाम या तारीख से नहीं, बल्कि उपयोगकर्ता-निर्धारित कस्टम क्रम से डेटा सॉर्ट करना चाहते हैं। ऐसे में आप एक क्रम फ़ील्ड जोड़ सकते हैं जो आपको प्रत्येक सामग्री आइटम का क्रम संख्या निर्दिष्ट करने की अनुमति देती है।", + "fieldTypeSortOrderName": "क्रम", + "fieldTypeSortOrderProTip": "आप सामग्री आइटम व्यू में तथा टेबल व्यू में प्लस और माइनस बटन से डिफ़ॉल्ट क्रम संख्या बदल सकते हैं।", + "fieldTypeSortOrderShortDesc": "सामग्री आइटम में क्रम जोड़ें", + "fieldTypeSortOrderSubHeader": "सामग्री आइटम में क्रम जोड़ने के लिए उपयोग करें", + "fieldTypeUuidCommonUse1": "उत्पाद ID", + "fieldTypeUuidCommonUse2": "इन्वेंटरी ID", + "fieldTypeUuidCommonUse3": "कर्मचारी ID", + "fieldTypeUuidDescription": "UUID फ़ील्ड आइटम बनाने पर एक अनूठी अल्फ़ान्यूमेरिक स्ट्रिंग बनाती है। यह एनालिटिक्स ट्रैकिंग, इन्वेंटरी प्रबंधन, उपयोगकर्ता प्रबंधन आदि के लिए एक सहायक सुविधा है।", + "fieldTypeUuidName": "UUID", + "fieldTypeUuidProTip": "UUID हमेशा अनूठे होते हैं और संपादन योग्य नहीं होते।", + "fieldTypeUuidShortDesc": "अनूठे, अपरिवर्तनीय अल्फ़ान्यूमेरिक पहचानकर्ता उत्पन्न करता है", + "fieldTypeUuidSubHeader": "प्रत्येक सामग्री आइटम को अनूठे ID देने के लिए उपयोग करें", + "fieldTypeWysiwygCommonUse1": "ब्लॉग पोस्ट", + "fieldTypeWysiwygCommonUse2": "लेख", + "fieldTypeWysiwygCommonUse3": "गाइड", + "fieldTypeWysiwygCommonUse4": "सूचियाँ", + "fieldTypeWysiwygCommonUse5": "इवेंट विवरण", + "fieldTypeWysiwygDescription": "यह फ़ील्ड लंबी टेक्स्ट सामग्री के लिए सबसे उपयुक्त है जिसमें अनेक हेडिंग, पैराग्राफ और इनलाइन मीडिया जैसे वीडियो, चित्र या लिंक हों। आप बोल्ड, इटैलिक और अंडरलाइन जैसी उन्नत टेक्स्ट फ़ॉर्मेटिंग भी लागू कर सकते हैं।", + "fieldTypeWysiwygName": "WYSIWYG", + "fieldTypeWysiwygProTip": "यह फ़ील्ड तब बहुत उपयोगी होती है जब आप चाहते हैं कि योगदानकर्ता पाठ पर कोई भी शैली और संरचना लागू कर सकें।", + "fieldTypeWysiwygShortDesc": "लंबी टेक्स्ट सामग्री जिसमें लिंक और छवियां हों जैसे ब्लॉग", + "fieldTypeWysiwygSubHeader": "लंबी टेक्स्ट सामग्री जिसमें लिंक और छवियां हों जैसे ब्लॉग", + "fieldValidationTitle": "फ़ील्ड सत्यापन, डिफ़ॉल्ट और अधिक", + "fileExtensionsErrorMessageLabel": "फ़ाइल एक्सटेंशन त्रुटि संदेश", + "fileExtensionsLabel": "फ़ाइल एक्सटेंशन", + "folderDeletedError": "जिस फ़ोल्डर से यह लॉक था वह हटा दिया गया है", + "formFieldApiCodeId": "API / Parsley कोड ID", + "formFieldApiCodeIdTooltip": "यह API प्रतिक्रियाओं में दिखाई देगा", + "formFieldApiUrl": "API URL", + "formFieldBooleanOptions": "बूलियन विकल्प", + "formFieldCurrencyLabel": "मुद्रा", + "formFieldCurrencyPlaceholder": "मुद्रा चुनें", + "formFieldCurrencyTooltip": "चयनित मुद्रा कोड, प्रतीक और ध्वज सामग्री आइटम में इस फ़ील्ड के लिए प्रदर्शित होगा और API के माध्यम से फ़ील्ड सेटिंग से एक्सेस किया जा सकता है।", + "formFieldDefaultValue": "डिफ़ॉल्ट मान", + "formFieldDescriptionLabel": "विवरण", + "formFieldDescriptionTooltip": "प्रदर्शन लेबल के नीचे दिखाई देता है। सामग्री लेखकों और API उपयोगकर्ताओं को निर्देश देने के लिए इसका उपयोग करें।", + "formFieldDisplayLabel": "प्रदर्शन लेबल", + "formFieldDisplayLabelTooltip": "Schema में दिखने वाला फ़ील्ड का प्रदर्शन नाम।", + "formFieldDropdownOptions": "ड्रॉपडाउन विकल्प", + "formFieldFieldToDisplay": "प्रदर्शित करने के लिए फ़ील्ड", + "formFieldFieldToDisplayPlaceholder": "एक फ़ील्ड चुनें", + "formFieldFileExtensions": "फ़ाइल एक्सटेंशन", + "formFieldFileExtensionsErrorMessage": "फ़ाइल एक्सटेंशन त्रुटि संदेश", + "formFieldListLabel": "टेबल सूची में कॉलम के रूप में जोड़ें", + "formFieldListSubLabel": "सामग्री व्यू में टेबल में फ़ील्ड को कॉलम के रूप में दिखाता है", + "formFieldMaxCharLimit": "अधिकतम वर्ण संख्या (रिक्त स्थान सहित)", + "formFieldMaxValue": "अधिकतम मान", + "formFieldMediaItemLimit": "मीडिया आइटम सीमा", + "formFieldMediaItemLimitTooltip": "न्यूनतम मीडिया फ़ाइल सीमा 1 पर सेट करें। यह इससे कम नहीं हो सकती।", + "formFieldMinCharLimit": "न्यूनतम वर्ण संख्या (रिक्त स्थान सहित)", + "formFieldMinValue": "न्यूनतम मान", + "formFieldReferenceModel": "संदर्भ मॉडल", + "formFieldReferenceModelPlaceholder": "एक मॉडल चुनें", + "formFieldRegexMatchErrorMessage": "Regex मिलान त्रुटि संदेश", + "formFieldRegexMatchPattern": "Regex मिलान पैटर्न", + "formFieldRegexRestrictErrorMessage": "Regex प्रतिबंध त्रुटि संदेश", + "formFieldRegexRestrictPattern": "Regex प्रतिबंध पैटर्न", + "formFieldRequiredLabel": "आवश्यक फ़ील्ड", + "formFieldRequiredSubLabel": "सुनिश्चित करता है कि फ़ील्ड खाली होने पर कोई आइटम नहीं बनाया जा सके", + "formFieldSelectFolder": "फ़ोल्डर चुनें", + "formFieldTooltipLabel": "टूलटिप", + "formFieldTooltipLabelTooltip": "सामग्री संपादकों को दिखाया जाने वाला टूल टिप।", + "goToAllModels": "सभी मॉडल पर जाएँ", + "headerTitle": "Schema", + "headlessDescription": "Zesty को NextJS, NuxtJS, React, Swift, Gatsby, Flutter, Angular, आदि जैसी तकनीकों के साथ हेडलेस बैक एंड के रूप में उपयोग करें।", + "headlessModeDescription": "यह उन इंजीनियरों के लिए आदर्श है जो NextJS, NuxtJS या Angular जैसी तकनीकों में Zesty.io के बाहर काम करते हैं। जब हेडलेस मोड चालू होता है, तो सभी रूट JavaScript ऑब्जेक्ट नोटेशन (JSON) के रूप में रेंडर होते हैं।\n\nनोट: यह बदलाव बाद में General Settings से वापस किया जा सकता है", + "headlessSwitcherSubtitle": "आप वर्तमान में पारंपरिक वेब इंजन मोड में हैं। अभी Hybrid या Headless में बदलने के लिए ऑप्ट-इन करें। आप इसे General Settings से बदल सकते हैं। और जानें", + "headlessSwitcherTitle": "हमारे हेडलेस API तक पहुंचना चाहते हैं?", + "howIsDataStored": "डेटा कैसे संग्रहीत होता है?", + "hybridDescription": "Hybrid दोनों दुनियाओं का सर्वश्रेष्ठ है। पेज अभी भी अपने रूट पर HTML रेंडर करते हैं, लेकिन एक सरल get पैरामीटर के साथ JSON भी रेंडर कर सकते हैं।", + "hybridModeDescription": "Hybrid दोनों दुनियाओं का सर्वश्रेष्ठ है। पेज अभी भी अपने रूट पर HTML रेंडर करते हैं, लेकिन एक सरल get पैरामीटर के साथ JSON भी रेंडर कर सकते हैं। उदाहरण के लिए /about/ HTML लौटाएगा, लेकिन /about/?toJSON about पेज का पूरी तरह से हाइड्रेटेड JSON ऑब्जेक्ट लौटाएगा।\n\nनोट: यह बदलाव बाद में General Settings से वापस किया जा सकता है", + "inputRangeHelperText": "न्यूनतम और/या अधिकतम अनुमत मान सेट करें", + "inputRangeLabel": "इनपुट रेंज सीमित करें", + "inputRangeMaximum": "अधिकतम", + "inputRangeMinimum": "न्यूनतम", + "integrationLimitItemRange": "आइटम रेंज सीमित करें", + "integrationLimitItemRangeDescription": "आइटम की न्यूनतम और/या अधिकतम संख्या सेट करें", + "lastUpdated": "अंतिम अपडेट: {{date}}", + "lastUpdatedBy": "अंतिम अपडेट किसने किया", + "lastUpdatedOn": "अंतिम अपडेट", + "learnBestPracticesModels": "मॉडल बनाने के सर्वोत्तम अभ्यास सीखें", + "learnBlocksTutorial": "एक ट्यूटोरियल के साथ ब्लॉक्स की बुनियादी बातें सीखें", + "learnMore": "और जानें", + "limitCharacterCount": "वर्ण संख्या सीमित करें", + "limitCharacterCountDescription": "न्यूनतम और/या अधिकतम अनुमत वर्णों की संख्या निर्दिष्ट करें", + "listThisModel": "इस मॉडल को सूचीबद्ध करें", + "listThisModelDescription": "सूचीबद्ध मॉडलों के सामग्री आइटम प्रोग्रामेटिक नेविगेशन कॉल के लिए उपलब्ध होते हैं।", + "maxValueLabel": "अधिकतम मान", + "mediaItemLimitLabel": "मीडिया आइटम सीमा", + "mediaItemLimitTooltip": "न्यूनतम मीडिया फ़ाइल सीमा 1 पर सेट करें। यह इससे कम नहीं हो सकती।", + "mediaRulesAddPresetLabel": "जोड़ें", + "mediaRulesAllowMultipleLabel": "अनेक फ़ाइलें चुनने की अनुमति दें", + "mediaRulesAllowMultipleSubLabel": "डिफ़ॉल्ट 1 फ़ाइल के बजाय अनेक फ़ाइलें अपलोड करने की अनुमति देता है", + "mediaRulesCustomErrorMessageLabel": "कस्टम त्रुटि संदेश *", + "mediaRulesExtensionsInputLabel": "एक्सटेंशन *", + "mediaRulesFileExtensionsAllowedError": "केवल निम्नलिखित एक्सटेंशन वाली फ़ाइलें स्वीकार की जाती हैं: {{extensions}}", + "mediaRulesLimitFileTypesLabel": "फ़ाइल प्रकार सीमित करें", + "mediaRulesLimitFileTypesSubLabel": "सुनिश्चित करता है कि केवल कुछ फ़ाइल प्रकार ही स्वीकार किए जा सकें", + "mediaRulesLockFolderLabel": "एक फ़ोल्डर में लॉक करें", + "mediaRulesLockFolderSubLabel": "सुनिश्चित करता है कि फ़ाइलें केवल एक विशिष्ट फ़ोल्डर से ही चुनी जा सकें", + "minValueLabel": "न्यूनतम मान", + "modelDescriptionLabel": "विवरण", + "modelDescriptionTooltip": "सामग्री लेखकों की मदद के लिए मॉडल का उद्देश्य प्रदर्शित करता है", + "modelDetailsSubtitle": "अपने मॉडल के प्राथमिक गुण देखें और अपडेट करें", + "modelDetailsTitle": "मॉडल विवरण", + "modelNameBlock": "ब्लॉक", + "modelNameDataset": "डेटासेट", + "modelNameMultiPage": "बहु पेज", + "modelNameSinglePage": "एकल पेज", + "modelNameTooltip": "सामग्री संपादकों को दिखाया जाने वाला नाम", + "modelParent": "मॉडल पैरेंट", + "modelsTableColumnContentItems": "सामग्री आइटम", + "modelsTableColumnFields": "फ़ील्ड", + "modelsTableColumnName": "नाम", + "modelsTableColumnType": "मॉडल प्रकार", + "modelsTableColumnUpdated": "अपडेट किया गया", + "modelType": "मॉडल प्रकार", + "modelTypeBlockDescription": "बिना URL और कोड टेम्पलेट के प्रविष्टियों का संग्रह बनाता है", + "modelTypeBlockExamples": "जैसे हीरो, फ़ीचर, प्रशंसापत्र आदि।", + "modelTypeBlockName": "ब्लॉक मॉडल", + "modelTypeDataset": "डेटासेट", + "modelTypeDatasetDescription": "बिना URL और कोड टेम्पलेट के प्रविष्टियों का संग्रह बनाता है", + "modelTypeDatasetExamples": "जैसे स्लाइड, FAQ, ब्रांड आदि।", + "modelTypeDatasetName": "डेटासेट मॉडल", + "modelTypeLabel": "{{modelType}} मॉडल", + "modelTypeMultiPage": "बहु पेज", + "modelTypeMultiPageDescription": "अनूठे URL और कोड टेम्पलेट के साथ पेजों का संग्रह बनाता है", + "modelTypeMultiPageExamples": "जैसे लेख, लेखक, उत्पाद आदि।", + "modelTypeMultiPageName": "बहु पेज मॉडल", + "modelTypeSinglePage": "एकल पेज", + "modelTypeSinglePageDescription": "अनूठे URL और कोड टेम्पलेट के साथ व्यक्तिगत पेज बनाता है", + "modelTypeSinglePageExamples": "जैसे होम पेज, अबाउट पेज आदि।", + "modelTypeSinglePageName": "एकल पेज मॉडल", + "needHelp": "मदद चाहिए?", + "noActiveFieldsInModel": "इस मॉडल में कोई सक्रिय फ़ील्ड नहीं है।", + "noFilterResultsHeader": "कोई मॉडल नहीं मिला", + "noFilterResultsSubHeader": "आप जो खोज रहे थे उसे ढूंढने के लिए फ़िल्टर समायोजित करने का प्रयास करें।", + "noMatchesFound": "कोई मेल नहीं मिला।", + "noneValue": "कोई नहीं", + "noSearchResultsAlt": "कोई खोज परिणाम नहीं", + "noSearchResultsHeader": "आपकी खोज \"{{searchTerm}}\" के लिए कोई परिणाम नहीं मिला", + "noSearchResultsSubHeader": "अपनी खोज को समायोजित करने का प्रयास करें। हम सुझाव देते हैं कि सभी शब्द सही ढंग से लिखे गए हैं या अलग-अलग कीवर्ड का उपयोग करने का प्रयास करें।", + "notifyCannotCreateModel": "मॉडल नहीं बनाया जा सकता", + "notifyPleaseAddDisplayName": "कृपया प्रदर्शन नाम जोड़ें", + "ogImageFieldDescription": "यह फ़ील्ड आपको SEO टैब के माध्यम से एक ओपन ग्राफ़ छवि सेट करने की अनुमति देती है। ओपन ग्राफ़ (OG) छवि वह छवि है जो सोशल मीडिया पोस्ट पर दिखाई देती है जब एक वेब पेज शेयर किया जाता है।", + "ogImageFieldLabel": "मेटा छवि", + "openCodeApp": "Code App खोलें", + "openVisualLayout": "Visual Layout खोलें", + "optionalLabel": "वैकल्पिक", + "parentModel": "पैरेंट मॉडल", + "parentModelTooltip": "पैरेंट चुनना डिफ़ॉल्ट रूटिंग और UI में सामग्री नेविगेशन को प्रभावित करता है", + "pleaseAddDisplayName": "कृपया प्रदर्शन नाम जोड़ें", + "proTip": "प्रो टिप", + "reactivateField": "फ़ील्ड पुनः सक्रिय करें", + "reactivatingField": "फ़ील्ड पुनः सक्रिय की जा रही है", + "readDocs": "दस्तावेज़ पढ़ें", + "readDocsModelTypes": "विभिन्न मॉडल प्रकारों और उनके उपयोग के बारे में हमारे दस्तावेज़ पढ़ें", + "readFieldTypesGuide": "Schema में फ़ील्ड प्रकारों पर हमारी गाइड पढ़ें", + "referenceId": "संदर्भ ID", + "referenceIdAlreadyInUse": "यह संदर्भ ID पहले से उपयोग में है। कृपया एक अलग ID दर्ज करें।", + "referenceIdLabel": "संदर्भ ID", + "referenceIdPlaceholder": "प्रदर्शन नाम से स्वतः-उत्पन्न", + "referenceIdTooltip": "हमारे API या Parsley के माध्यम से इस मॉडल को एक्सेस करने के लिए उपयोग की जाने वाली ID", + "referenceModelLabel": "संदर्भ मॉडल", + "referenceModelPlaceholder": "एक मॉडल चुनें", + "regexCustomErrorMessage": "कस्टम त्रुटि संदेश *", + "regexCustomErrorMessageTooltip": "यदि उपयोगकर्ता ऐसा इनपुट दर्ज करता है जो आवश्यकताओं को पूरा नहीं करता तो प्रदर्शित होता है", + "regexInvalidHelper": "दिया गया Regex मान्य नहीं है। कृपया MDN पर regex दस्तावेज़ की समीक्षा करें।", + "regexKnowledgeRequired": "Regular Expressions (Regex) का ज्ञान आवश्यक है। गलत regex पैटर्न दर्ज करने से सामग्री फ़ील्ड उपयोगकर्ता इनपुट स्वीकार नहीं कर सकतीं।", + "regexMatchErrorEmail": "एक ईमेल होना चाहिए (जैसे hello@zesty.io)", + "regexMatchErrorMessageLabel": "Regex मिलान त्रुटि संदेश", + "regexMatchErrorSlug": "एक स्लग होना चाहिए (जैसे everything-about-content-marketing)", + "regexMatchErrorUrl": "एक URL होना चाहिए (जैसे https://www.google.com/)", + "regexMatchPatternLabel": "Regex मिलान पैटर्न", + "regexMatchSpecificPattern": "एक विशिष्ट पैटर्न से मेल करें", + "regexNotMatchingPattern": "अपेक्षित पैटर्न से मेल नहीं खाता", + "regexPattern": "पैटर्न", + "regexPatternMatchingRules": "Regex पैटर्न मिलान नियम", + "regexPatternTooltip": "एक नियमित अभिव्यक्ति (regex) पैटर्न दर्ज करें - स्ट्रिंग में पैटर्न मिलान के लिए उपयोग किए जाने वाले वर्णों का एक क्रम", + "regexRestrictErrorEmail": "ईमेल नहीं हो सकता (जैसे hello@zesty.io)", + "regexRestrictErrorMessageLabel": "Regex प्रतिबंध त्रुटि संदेश", + "regexRestrictErrorSlug": "स्लग नहीं हो सकता (जैसे everything-about-content-marketing)", + "regexRestrictErrorUrl": "URL नहीं हो सकता (जैसे https://www.google.com/)", + "regexRestrictPatternLabel": "Regex प्रतिबंध पैटर्न", + "regexRestrictSpecificPattern": "एक विशिष्ट पैटर्न को प्रतिबंधित करें", + "regexSetMatchExpression": "नियमित अभिव्यक्ति (जैसे ईमेल, URL आदि) सेट करें जिससे इनपुट मेल खाना चाहिए", + "regexSetRestrictExpression": "नियमित अभिव्यक्ति (जैसे ईमेल, URL आदि) सेट करें जिससे इनपुट मेल नहीं खाना चाहिए", + "regexType": "प्रकार", + "regexTypeCustom": "कस्टम", + "regexTypeEmail": "ईमेल", + "regexTypeSlug": "स्लग", + "regexTypeTooltip": "प्रीसेट Regex पैटर्न प्रकारों की सूची से चुनें या अपना कस्टम Regex पैटर्न लिखें", + "regexTypeUrl": "URL", + "relatedModelDeletedError": "जिस मॉडल से यह संबंधित था वह हटा दिया गया है", + "relatedModels": "संबंधित मॉडल", + "relatedModelsDescription": "वे मॉडल देखें जिनसे यह मॉडल जुड़ा हुआ है", + "removeField": "फ़ील्ड हटाएं", + "renameModel": "मॉडल का नाम बदलें", + "renameModelDescription": "यह मॉडल का प्रदर्शन नाम और संदर्भ ID अपडेट करेगा जो सामग्री संपादकों और डेवलपर्स को दिखाया जाता है", + "renameModelDisplayNameLabel": "प्रदर्शन नाम", + "renameModelDisplayNameTooltip": "सामग्री संपादकों को दिखाया जाने वाला नाम", + "renameModelFailedNotify": "मॉडल का नाम बदलने में विफल", + "renameModelReferenceIdHelperText": "संदर्भ नाम कस्टम कोड फ़ाइलों और एंडपॉइंट में उपयोग किया जाता है। इस मूल्य को अपडेट करने पर यह प्रोडक्शन में तुरंत प्रभावी होता है। कृपया बदलाव करने से पहले अपने डेवलपर से जांच करें।", + "renameModelReferenceIdLabel": "संदर्भ ID", + "renameModelReferenceIdTooltip": "हमारे API या Parsley के माध्यम से इस मॉडल को एक्सेस करने के लिए उपयोग की जाने वाली ID", + "renameModelTitle": "मॉडल का नाम बदलें", + "repeaterDataStorageDescription": "डेटा ऑब्जेक्ट के JSON सरणी के रूप में संग्रहीत होता है, जिसे सीधे और each स्टेटमेंट के साथ Parsley के माध्यम से आसानी से एक्सेस किया जा सकता है।", + "repeaterSubFieldCount_one": "{{count}} फ़ील्ड", + "repeaterSubFieldCount_other": "{{count}} फ़ील्ड्स", + "restEndpointLabel": "REST एंडपॉइंट (प्रमाणीकरण बेयरर आवश्यक)", + "searchFieldTypesPlaceholder": "फ़ील्ड प्रकार खोजें", + "searchModelsPlaceholder": "मॉडल खोजें", + "searchVariants": "वेरिएंट खोजें", + "selectBlockType": "ब्लॉक का प्रकार चुनें", + "selectedItemNotFound": "चयनित आइटम नहीं मिला: {{value}}", + "selectFieldTypeTitle": "फ़ील्ड प्रकार चुनें", + "selectFolderLabel": "फ़ोल्डर चुनें", + "selectModelType": "मॉडल प्रकार चुनें", + "selectModelTypeSubtitle": "आपके द्वारा चुना गया मॉडल प्रकार प्रभावित करता है कि इंटरफ़ेस में सामग्री आइटम कैसे रेंडर होते हैं और URL और टेम्पलेट बनाए जाते हैं या नहीं। नोट: सभी मॉडल हेडलेस उपयोग किए जा सकते हैं", + "selectParentTooltip": "पैरेंट चुनना डिफ़ॉल्ट रूटिंग और UI में सामग्री नेविगेशन को प्रभावित करता है", + "selectPlaceholder": "चुनें", + "seoFieldLinkTitle": "SEO लिंक शीर्षक", + "seoFieldMetaDescription": "SEO मेटा विवरण", + "seoFieldMetaKeywords": "SEO मेटा कीवर्ड", + "seoFieldMetaTitle": "SEO मेटा शीर्षक", + "seoMetaFields": "SEO मेटा फ़ील्ड", + "seoMetaFieldsDescription": "एकल-पेज, बहु-पेज और डेटासेट मॉडलों के लिए सामग्री मॉडल में SEO मेटा फ़ील्ड होते हैं जो API या Parsley के माध्यम से एक्सेस किए जा सकते हैं। ये फ़ील्ड खोज पर खोज में मदद करने के लिए उपलब्ध हैं और Zesty API में बड़े पैमाने पर खोज के लिए उपयोग की जाती हैं। इन फ़ील्ड का मूल्य Instances API एंडपॉइंट में meta key के तहत पाया जा सकता है।", + "showSystemFields": "सिस्टम फ़ील्ड दिखाएं", + "sortLastCreated": "अंतिम बनाया गया", + "sortLastModified": "अंतिम संशोधित", + "starterBlockBlankDescription": "एक खाली ब्लॉक", + "starterBlockBlankLabel": "खाली", + "starterBlockCodeTemplateLink": "कोड टेम्पलेट", + "starterBlockContactUsFormDescription": "किसी भी पेज से लीड कैप्चर करने के लिए एक सरल संपर्क फ़ॉर्म", + "starterBlockContactUsFormLabel": "संपर्क फ़ॉर्म", + "starterBlockCreateButton": "ब्लॉक मॉडल बनाएं", + "starterBlockCreatingModelBody": "इसमें कुछ मिनट लग सकते हैं।", + "starterBlockCreatingModelHeading": "मॉडल बनाया जा रहा है", + "starterBlockDescriptionHeading": "विवरण", + "starterBlockDetailsHeading": "विवरण", + "starterBlockDisplayNameInUse": "प्रदर्शन नाम पहले से उपयोग में है। कृपया कोई अन्य प्रदर्शन नाम उपयोग करें।", + "starterBlockDisplayNameLabel": "प्रदर्शन नाम", + "starterBlockDisplayNamePlaceholder": "जैसे होम पेज, अबाउट पेज, कॉन्टैक्ट पेज आदि।", + "starterBlockDisplayNameTooltip": "सामग्री संपादकों को दिखाया जाने वाला नाम", + "starterBlockFeatureSideBySideImageDescription": "बाईं ओर टेक्स्ट और दाईं ओर छवि वाला फ़ीचर", + "starterBlockFeatureSideBySideImageLabel": "फ़ीचर साइड बाय साइड इमेज", + "starterBlockFieldsHeading": "फ़ील्ड", + "starterBlockFormCodeTemplate": "कोड टेम्प्लेट", + "starterBlockFormCreateBlockModel": "ब्लॉक मॉडल बनाएं", + "starterBlockFormCreatingModel": "मॉडल बनाया जा रहा है", + "starterBlockFormCreatingModelDescription": "इसमें कुछ मिनट लग सकते हैं।", + "starterBlockFormDescription": "विवरण", + "starterBlockFormDetails": "विवरण", + "starterBlockFormDisplayName": "दिखाया जाने वाला नाम (Display Name)", + "starterBlockFormDisplayNameInUse": "यह नाम पहले से ही उपयोग में है। कृपया किसी अन्य नाम का उपयोग करें।", + "starterBlockFormDisplayNamePlaceholder": "जैसे: होम पेज, हमारे बारे में, संपर्क पेज, आदि।", + "starterBlockFormDisplayNameTooltip": "वह नाम जो कंटेंट एडिटर्स को दिखाई देता है", + "starterBlockFormFields": "फ़ील्ड्स", + "starterBlockFormReferenceId": "रेफरेंस ID", + "starterBlockFormReferenceIdInUse": "यह रेफरेंस ID पहले से ही उपयोग में है। कृपया किसी अन्य रेफरेंस ID का उपयोग करें।", + "starterBlockFormReferenceIdPlaceholder": "दिखाए जाने वाले नाम से स्वचालित रूप से जनरेट होगा", + "starterBlockFormReferenceIdTooltip": "हमारी API या Parsley के माध्यम से इस मॉडल तक पहुँचने के लिए उपयोग की जाने वाली ID", + "starterBlockFormResources": "संसाधन (Resources)", + "starterBlockFormSeeBootstrapTemplate": "Bootstrap टेम्प्लेट देखें", + "starterBlockHeroImageBelowDescription": "ऊपर टेक्स्ट और CTA बटन तथा नीचे एक छवि वाला हीरो", + "starterBlockHeroImageBelowLabel": "नीचे हीरो इमेज", + "starterBlockReferenceIdLabel": "संदर्भ ID", + "starterBlockReferenceIdPlaceholder": "प्रदर्शन नाम से स्वतः-उत्पन्न", + "starterBlockReferenceIdTooltip": "हमारे API या Parsley के माध्यम से इस मॉडल को एक्सेस करने के लिए उपयोग की जाने वाली ID", + "starterBlockRefIdInUse": "संदर्भ ID पहले से उपयोग में है। कृपया कोई अन्य संदर्भ ID उपयोग करें।", + "starterBlockResourcesHeading": "संसाधन", + "starterBlockSeeBootstrapTemplate": "Bootstrap टेम्पलेट देखें", + "starterBlockSideBySideHeroImageDescription": "बाईं ओर टेक्स्ट और CTA बटन तथा दाईं ओर एक छवि वाला हीरो", + "starterBlockSideBySideHeroImageLabel": "साइड बाय साइड हीरो इमेज", + "starterBlockSingleTestimonialDescription": "एक व्यक्ति के नाम, छवि और कंपनी विवरण के साथ एकल प्रशंसापत्र उद्धरण", + "starterBlockSingleTestimonialLabel": "एकल प्रशंसापत्र", + "starterBlocksSearchPlaceholder": "वेरिएंट खोजें", + "starterBlocksSelectionSubtitle": "एक खाली ब्लॉक से शुरू करें या हमारे पूर्व-डिज़ाइन किए गए ब्लॉक के चयन से चुनें", + "starterBlocksSelectionTitle": "एक ब्लॉक प्रकार चुनें", + "starterBlocksSubtitle": "एक खाली ब्लॉक से शुरुआत करें या हमारे पहले से डिज़ाइन किए गए ब्लॉक्स के चयन में से चुनें", + "starterBlocksTutorialLink": "ट्यूटोरियल के साथ ब्लॉक की मूल बातें सीखें", + "subFieldFormAddTitle": "{{name}} फ़ील्ड जोड़ें", + "subFieldFormEditTitle": "{{label}} संपादित करें", + "subFieldFormTypeFieldLabel": "{{type}} फ़ील्ड", + "switchToHeadless": "Headless में स्विच करें", + "switchToHybrid": "Hybrid में स्विच करें", + "switchToMode": "{{mode}} में स्विच करें", + "switchWebEngineModeTitle": "वेब इंजन मोड को {{mode}} में बदलें", + "systemFieldCreatedAt": "बनाया गया", + "systemFieldItemZuid": "आइटम ZUID", + "systemFieldMasterZuid": "मास्टर ZUID", + "systemFieldModelZuid": "मॉडल ZUID", + "systemFields": "सिस्टम फ़ील्ड", + "systemFieldsDescription": "Zesty में किसी मॉडल का प्रत्येक सामग्री आइटम (चाइल्ड) गैर-संपादन योग्य सिस्टम फ़ील्ड के साथ आता है जो सामग्री की स्थिति जैसे कि बनाने का समय, अपडेट का समय और संस्करण को दर्शाता है। इन फ़ील्ड का मूल्य Instances API एंडपॉइंट में meta key के तहत पाया जा सकता है।", + "systemFieldUpdatedAt": "अपडेट किया गया", + "systemFieldVersion": "संस्करण", + "tabActivityLog": "गतिविधि लॉग", + "tabDetails": "विवरण", + "tabFields": "फ़ील्ड", + "tabInfo": "जानकारी", + "tabLearn": "सीखें", + "tabRules": "नियम", + "templateBlogDescription": "शीर्षक, मुख्य सामग्री, फ़ीचर छवि और श्रेणी फ़ील्ड के साथ ब्लॉगिंग के लिए आदर्श।", + "templateBlogTitle": "ब्लॉग", + "templateFileEmpty": "टेम्पलेट फ़ाइल खाली है", + "templateFileEmptyBody": "कृपया Code App के माध्यम से ब्लॉक के लिए कोड जोड़ें।", + "templateLandingPageDescription": "हीरो, फ़ीचर और फुटर सेक्शन के लिए फ़ील्ड के साथ एक सरल लैंडिंग पेज।", + "templateLandingPageTitle": "लैंडिंग पेज", + "tooltipWhatIsAField": "{{fieldName}} फ़ील्ड क्या है?", + "tooltipWhatIsAnField": "{{fieldName}} फ़ील्ड क्या है?", + "typeTextArticleWriter": "आर्टिकल राइटर", + "typeTextBlockSelector": "ब्लॉक सेलेक्टर", + "typeTextBoolean": "बूलियन", + "typeTextColor": "रंग", + "typeTextCurrency": "मुद्रा", + "typeTextDate": "दिनांक", + "typeTextDatetime": "दिनांक और समय", + "typeTextDropdown": "ड्रॉपडाउन", + "typeTextFiles": "फ़ाइलें", + "typeTextFontawesome": "Font Awesome", + "typeTextImages": "मीडिया", + "typeTextIntegration": "एकीकरण", + "typeTextInternalLink": "आंतरिक लिंक", + "typeTextLink": "बाहरी URL", + "typeTextMarkdown": "Markdown", + "typeTextNumber": "संख्या", + "typeTextOneToMany": "एक से अनेक", + "typeTextOneToOne": "एक से एक", + "typeTextRepeater": "रिपीटर", + "typeTextSort": "क्रम", + "typeTextText": "एकल पंक्ति पाठ", + "typeTextTextarea": "बहु पंक्ति पाठ", + "typeTextUuid": "UUID", + "typeTextWysiwygAdvanced": "WYSIWYG (उन्नत)", + "typeTextWysiwygBasic": "WYSIWYG", + "uniqueField": "अनूठी फ़ील्ड", + "uniqueFieldDescription": "सुनिश्चित करता है कि अनेक आइटम में इस फ़ील्ड के लिए एक ही मान नहीं हो सकता", + "updateBlockGroupDescription": "यह प्रभावित करता है कि Blocks App में All Blocks पेज पर ब्लॉक किस समूह में प्रस्तुत किया जाता है।", + "updateBlockGroupFailedNotify": "ब्लॉक समूह अपडेट करने में विफल", + "updateBlockGroupTitle": "ब्लॉक समूह अपडेट करें", + "updated": "अपडेट किया गया", + "updateDescriptionDialogBody": "यह मॉडल का विवरण अपडेट करेगा जो सामग्री संपादकों को दिखाया जाता है", + "updateDescriptionDialogTitle": "विवरण अपडेट करें", + "updateDescriptionFailedNotify": "विवरण अपडेट करने में विफल", + "updateDescriptionInputLabel": "विवरण", + "updateDescriptionInputPlaceholder": "यह मॉडल किस लिए उपयोग होगा", + "updateDescriptionInputTooltip": "सामग्री लेखकों की मदद के लिए मॉडल का उद्देश्य प्रदर्शित करता है", + "updateParentDialogBody": "पैरेंट चुनना डिफ़ॉल्ट रूटिंग और UI में सामग्री नेविगेशन को प्रभावित करता है।", + "updateParentDialogTitle": "मॉडल पैरेंट अपडेट करें", + "updateParentInputTooltip": "पैरेंट चुनना डिफ़ॉल्ट रूटिंग और UI में सामग्री नेविगेशन को प्रभावित करता है", + "validationCannotBeLessThanMinValue": "न्यूनतम मान से कम नहीं हो सकता", + "validationCannotExceedMaxCharCount": "अधिकतम वर्ण संख्या से अधिक नहीं हो सकता", + "validationCannotExceedMaxChars": "{{maxLength}} वर्णों से अधिक नहीं हो सकता", + "validationCannotExceedMaxValue": "अधिकतम मान से अधिक नहीं हो सकता", + "validationFieldRequired": "यह फ़ील्ड आवश्यक है", + "validationIncompleteApiConfig": "अधूरी API कॉन्फ़िगरेशन", + "validationInvalidNumber": "अमान्य संख्या", + "validationInvalidRegexPattern": "अमान्य regex पैटर्न", + "validationRequiredField": "आवश्यक फ़ील्ड। कृपया एक मान दर्ज करें।", + "validationSelectCurrency": "कृपया एक मुद्रा चुनें", + "viewAllActivity": "सभी गतिविधि देखें", + "viewContent": "सामग्री देखें", + "viewEndpoints": "एंडपॉइंट देखें", + "viewVariants": "वेरिएंट देखें", + "whatIsAFieldType": "{{fieldType}} फ़ील्ड क्या है?", + "whatIsAnFieldType": "{{fieldType}} फ़ील्ड क्या है?", + "wizardCreatingModel": "मॉडल बनाया जा रहा है", + "wizardEnterContentEntry": "एक सामग्री प्रविष्टि दर्ज करें", + "wizardSelectCollectionSubtitle": "हमारे उत्पाद को बेहतर समझने के लिए हमारे कई schema संग्रहों में से एक से शुरू करें", + "wizardSelectCollectionTitle": "एक Schema संग्रह चुनें", + "wizardSuccessHeading": "आपके {{title}} के लिए मॉडल अब बन गए हैं!", + "zuidLabel": "ZUID", + "zuidTooltip": "सामग्री आइटम हमेशा उनके मॉडल के सापेक्ष एक्सेस किए जाते हैं, इसलिए प्रत्येक कॉल के लिए एक मॉडल ZUID आवश्यक है।" +} diff --git a/public/locales/hi-IN/seo.json b/public/locales/hi-IN/seo.json new file mode 100644 index 0000000000..63428ed728 --- /dev/null +++ b/public/locales/hi-IN/seo.json @@ -0,0 +1,117 @@ +{ + "addAllRedirects": "सभी पुनर्निर्देशन जोड़ें", + "changeDialogBody": "यह एक 301 स्थायी पुनर्निर्देशन होगा और सुनिश्चित करेगा कि पुराने पथ का उपयोग करने वाले विज़िटर नए पथ पर निर्बाध रूप से निर्देशित हों।", + "changeDialogCreateRedirect": "पुनर्निर्देशन बनाएं", + "changeDialogDontCreate": "न बनाएं", + "changeDialogNewPath": "नया पथ", + "changeDialogOldPath": "पुराना पथ", + "changeDialogRedirectCreated": "1 पुनर्निर्देशन बनाया गया", + "changeDialogTitle": "URL पथ परिवर्तन का पता चला। पुराने पथ से नए पथ पर पुनर्निर्देशन बनाएं?", + "closeImport": "आयात बंद करें", + "columnHttpCode": "HTTP कोड", + "columnIncomingPath": "आने वाला पथ", + "columnTarget": "लक्ष्य", + "columnType": "प्रकार", + "createFormAddPath": "पथ जोड़ें", + "createFormCreateAnotherRedirect": "अन्य पुनर्निर्देशन बनाएं", + "createFormCreateRedirect": "पुनर्निर्देशन बनाएं", + "createFormExternalUrlPlaceholder": "URL दर्ज करें (जैसे https://www.google.com/)", + "createFormFilePathOnlyTooltip": "केवल फ़ाइल पथ", + "createFormHttpCodeLabel": "HTTP कोड", + "createFormIncomingPathLabel": "आने वाला पथ", + "createFormNotifyCreated_one": "{{count}} पुनर्निर्देशन बनाया गया", + "createFormNotifyCreated_other": "{{count}} पुनर्निर्देशन बनाए गए", + "createFormNotifySaved": "पुनर्निर्देशन सहेजा गया: {{path}}", + "createFormPathPlaceholder": "/पुनर्निर्देशित करने के लिए URL पथ दर्ज करें", + "createFormRedirectTargetLabel": "पुनर्निर्देशन लक्ष्य", + "createFormTypeLabel": "प्रकार", + "createFormValueCannotBeModified": "यह मान संशोधित नहीं किया जा सकता", + "createRedirectHeader": "पुनर्निर्देशन बनाएं", + "createRedirectIncomingPath": "आने वाले पथ केस-असंवेदनशील होते हैं और अनुगामी स्लैश स्वचालित रूप से संभाले जाते हैं", + "createRedirectSubHeader": "आपके नए पुनर्निर्देशन बनने के तुरंत बाद लाइव हो जाएंगे।", + "deleteRedirect": "पुनर्निर्देशन हटाएं", + "deleteRedirectDescriptionPlural": "इन आने वाले पथों के लिए इन {{count}} पुनर्निर्देशनों को हटाना", + "deleteRedirectDescriptionPlural_one": "इन आने वाले पथों के लिए इन {{count}} पुनर्निर्देशनों को हटाना", + "deleteRedirectDescriptionPlural_other": "इन आने वाले पथों के लिए इन {{count}} पुनर्निर्देशनों को हटाना", + "deleteRedirectDescriptionSingular": "इस आने वाले पथ के लिए इस पुनर्निर्देशन को हटाना", + "deleteRedirectDescriptionSuffix": "इन्हें आपकी साइट से तुरंत हटा देगा। यह क्रिया पूर्ववत नहीं की जा सकती।", + "deleteRedirectDescriptionSuffix_one": "इसे आपकी साइट से तुरंत हटा देगा। यह क्रिया पूर्ववत नहीं की जा सकती।", + "deleteRedirectDescriptionSuffix_other": "इन्हें आपकी साइट से तुरंत हटा देगा। यह क्रिया पूर्ववत नहीं की जा सकती।", + "deleteRedirectsButton": "पुनर्निर्देशन हटाएं ({{count}})", + "deleteRedirectsButton_one": "पुनर्निर्देशन हटाएं ({{count}})", + "deleteRedirectsButton_other": "पुनर्निर्देशन हटाएं ({{count}})", + "deleteRedirectTitle_one": "{{count}} पुनर्निर्देशन हटाएं", + "deleteRedirectTitle_other": "{{count}} पुनर्निर्देशन हटाएं", + "editRedirect": "पुनर्निर्देशन संपादित करें", + "editRedirectHeader": "पुनर्निर्देशन संपादित करें", + "editRedirectIncomingPath": "पथों में अनुगामी स्लैश और केसिंग भिन्नताएं WebEngine में स्वचालित रूप से संभाली जाती हैं।", + "editRedirectSubHeader": "आपके द्वारा किए गए बदलाव सहेजने के तुरंत बाद लाइव हो जाएंगे", + "errorDeletingRedirects": "पुनर्निर्देशन हटाने में त्रुटि", + "errorDialogBody": "निम्नलिखित पथों को पुनर्निर्देशन के रूप में सहेजा नहीं जा सका।", + "errorDialogNotifyCreated_one": "{{count}} पुनर्निर्देशन बनाया गया", + "errorDialogNotifyCreated_other": "{{count}} पुनर्निर्देशन बनाए गए", + "errorDialogNotifySaved": "पुनर्निर्देशन सहेजा गया: {{path}}", + "errorDialogTitle_one": "{{count}} पुनर्निर्देशन नहीं बनाया जा सका", + "errorDialogTitle_other": "{{count}} पुनर्निर्देशन नहीं बनाए जा सके", + "filterRedirects": "पुनर्निर्देशन फ़िल्टर करें", + "httpCode301Label": "301 - स्थायी पुनर्निर्देशन", + "httpCode301Permanent": "301 - स्थायी", + "httpCode302Label": "302 - अस्थायी पुनर्निर्देशन", + "httpCode302Temporary": "302 - अस्थायी", + "importCsvXml": "CSV/XML आयात करें", + "importErrorDialogBodyRich": "फ़ाइल प्रारूप या संरचना हमारी अपेक्षा से मेल नहीं खाती। कृपया अपनी CSV या XML फ़ाइल जांचें और सही प्रारूप के लिए हमारे दस्तावेज़ों में <1>आयात मार्गदर्शिका देखें।", + "importErrorDialogHeader": "फ़ाइल आयात विफल", + "importFileReadError": "फ़ाइल पढ़ने में विफल: {{err}}", + "importInvalidFileSelected": "अमान्य फ़ाइल चुनी गई", + "importMustBeCsv": "आयात एक CSV फ़ाइल होनी चाहिए", + "importRowCreated": "बनाया गया", + "importRowPreExisting": "पहले से मौजूद", + "importTableFrom": "से", + "importTableTo": "तक", + "importTableType": "प्रकार", + "importXmlSitemapSpec": "XML साइटमैप आयात {{specUrl}} विनिर्देश का पालन करना चाहिए।", + "invalidUrlEnterValid": "अमान्य URL। कृपया एक वैध URL दर्ज करें।", + "loading": "लोड हो रहा है...", + "redirectButton": "पुनर्निर्देशित करें", + "redirectCreateFailed": "पुनर्निर्देशन बनाने में विफल", + "redirectCreateFailedFromPath": "{{path}} से पुनर्निर्देशन बनाने में विफल। {{error}}", + "redirectCreateSuccess": "पुनर्निर्देशन बनाया गया", + "redirectDeleted_one": "{{count}} पुनर्निर्देशन हटाया गया", + "redirectDeleted_other": "{{count}} पुनर्निर्देशन हटाए गए", + "redirectQueryStringPlaceholder": "पुनर्निर्देशन क्वेरी स्ट्रिंग", + "redirectRemoveFailed": "SEO पुनर्निर्देशन हटाने में विफल", + "redirectsLoadFailed": "पुनर्निर्देशन डेटा लोड करने में विफल", + "redirectTargetHasBeenDeleted": "पुनर्निर्देशन लक्ष्य हटाया जा चुका है", + "redirectTypeExternal": "बाहरी", + "redirectTypeInternal": "आंतरिक", + "redirectTypeWildcard": "वाइल्डकार्ड", + "redirectUrl": "पुनर्निर्देशन URL", + "searchForItem": "आइटम खोजें", + "selectAll": "सभी चुनें", + "selectedCount": "{{count}} चुने गए", + "selectedCount_one": "{{count}} चुने गए", + "selectedCount_other": "{{count}} चुने गए", + "sortHttpCode": "HTTP कोड", + "sortIncomingPath": "आने वाला पथ", + "sortTarget": "लक्ष्य", + "sortType": "प्रकार", + "targetErrorInvalidUrl": "अमान्य URL। कृपया एक वैध URL दर्ज करें।", + "targetErrorUnpublished": "यह आइटम अभी तक प्रकाशित नहीं हुआ है। सभी आने वाले पथ लाइव होने तक आपके 404 पेज पर ले जाएंगे।", + "targetOptionExternalLabel": "बाहरी - किसी बाहरी वेबपेज से लिंक करें", + "targetOptionInternalLabel": "आंतरिक - अपने इंस्टेंस में किसी प्रकाशित आइटम से लिंक करें", + "targetOptionWildcardLabel": "वाइल्डकार्ड - एकल नियम से अनेक पुनर्निर्देशन संभाल सकता है", + "tooltipCode301": "[301] - स्थायी पुनर्निर्देशन: जब सामग्री स्थायी रूप से नए स्थान पर स्थानांतरित हो जाए तब इसका उपयोग करें। खोज इंजन अपना इंडेक्स अपडेट कर देंगे।", + "tooltipCode302": "[302] - अस्थायी पुनर्निर्देशन: जब सामग्री अस्थायी रूप से अन्यत्र हो और आप उसे वापस लाने का इरादा रखते हों तब इसका उपयोग करें। खोज इंजन आमतौर पर नए स्थान के लिए अपना इंडेक्स अपडेट नहीं करते।", + "tooltipTargetTypeExternal": "बाहरी जैसे https://zesty.org/", + "tooltipTargetTypeInternal": "आंतरिक जैसे /about", + "tooltipTargetTypeWildcard": "वाइल्डकार्ड जैसे /blog/*/*/", + "totalRedirects_one": "{{count}} कुल पुनर्निर्देशन", + "totalRedirects_other": "{{count}} कुल पुनर्निर्देशन", + "tryAgain": "पुनः प्रयास करें", + "typeExternal": "बाहरी", + "typeFilterExternal": "बाहरी - किसी बाहरी वेबपेज से लिंक", + "typeFilterInternal": "आंतरिक - इस इंस्टेंस के किसी आइटम से लिंक", + "typeFilterWildcard": "वाइल्डकार्ड - नियम आधारित पुनर्निर्देशन", + "typeInternal": "आंतरिक", + "typeWildcard": "वाइल्डकार्ड" +} diff --git a/public/locales/hi-IN/settings.json b/public/locales/hi-IN/settings.json new file mode 100644 index 0000000000..121fe678b6 --- /dev/null +++ b/public/locales/hi-IN/settings.json @@ -0,0 +1,183 @@ +{ + "activeStatuses": "सक्रिय स्टेटस", + "activeStatusesSubtitle": "सामग्री आइटमों (content items) में सक्रिय स्टेटस जोड़ने और हटाने के लिए उपलब्ध हैं।", + "AddLangCodeToPaths": "पाथ में डिफ़ॉल्ट लैंग-कोड जोड़ें (Add Lang-Code to Path)", + "addStatusNotification": "जो यूज़र्स इस स्टेटस को जोड़ सकते हैं, उन्हें सूचित किया जाएगा।", + "AjaxCorsAllowAnyOrigin": "कस्टम व्यू एंडपॉइंट्स » किसी भी ऑरिजिन की अनुमति दें (CORS)", + "AlwaysRedirectToHttps": "हमेशा HTTPS पर रीडायरेक्ट करें", + "AutoIncludeJsInHead": "head में स्वचालित रूप से JavaScript शामिल करें", + "AutomatedFeedXml": "स्वचालित feed.xml", + "BaseDirectory": "बेस डायरेक्टरी (Base Directory)", + "BasicContentApiEnabled": "कंटेंट के लिए Instant JSON API तक एक्सेस।", + "browseFontsTitle": "फ़ॉन्ट्स ब्राउज़ करें", + "bynderAssetsDescription": "अपनी टीम को Zesty के भीतर आपके Bynder एसेट्स तक आसान पहुंच देकर अपने कार्यप्रवाह को सुव्यवस्थित करें", + "bynderAssetsHeading": "Zesty के भीतर अपने Bynder एसेट्स का उपयोग करें", + "bynderChangePortal": "Bynder पोर्टल बदलें", + "bynderConnect": "Bynder से कनेक्ट करें", + "bynderConnectedPortal": "आपका इंस्टेंस निम्नलिखित Bynder पोर्टल से जुड़ा हुआ है", + "bynderDisconnect": "डिस्कनेक्ट करें", + "bynderIntegration": "Bynder इंटीग्रेशन", + "bynderLogoAlt": "Bynder लोगो", + "bynderPreviewAlt": "Bynder पूर्वावलोकन", + "CanonicalTagsEnabled": "कैनोनिकल टैग सक्षम करें (Canonical Tags)", + "categoryAnalytics": "एनालिटिक्स (Analytics)", + "categoryBlog": "ब्लॉग (Blog)", + "categoryBynder": "Bynder", + "categoryContactForm": "संपर्क फ़ॉर्म (Contact Form)", + "categoryCustom": "कस्टम (Custom)", + "categoryDeveloper": "डेवलपर (Developer)", + "categoryExporter": "एक्सपोर्टर (Exporter)", + "categoryExtensions": "एक्सटेंशन (Extensions)", + "categoryForCustomEndpoint": "कस्टम एंडपॉइंट के लिए (Custom Endpoint)", + "categoryGeneral": "सामान्य (General)", + "categoryGroupby": "GroupBy", + "categoryI18n": "i18n", + "categoryIntegrations": "इंटीग्रेशन (Integrations)", + "categoryLogosection": "लोगो सेक्शन (Logo Section)", + "categoryLogoSection": "लोगो सेक्शन (Logo Section)", + "categoryOverrides": "ओवरराइड्स (Overrides)", + "categoryPetdesk": "PetDesk", + "categoryProxy": "प्रॉक्सी (Proxy)", + "categoryRouting": "रूटिंग (Routing)", + "categorySecurity": "सुरक्षा (Security)", + "categorySeo": "एसईओ (SEO)", + "categorySettingsSaved": "{{category}} सेटिंग्स सहेज ली गईं", + "categorySitelink": "Sitelink", + "categorySocialLinks": "सोशल लिंक्स (Social Links)", + "categoryStripe": "Stripe", + "categoryTagManagers": "टैग मैनेजर्स (Tag Managers)", + "categoryTwitter": "Twitter", + "categoryUps": "UPS", + "categoryVerification": "सत्यापन (Verification)", + "categoryYoutube": "YouTube", + "ClientKey": "GroupBy क्लाइंट की (Client Key)", + "Collection": "GroupBy डिफ़ॉल्ट कलेक्शन (Default Collection)", + "color": "रंग", + "colorBlue": "नीला", + "colorDeepPurple": "गहरा बैंगनी", + "colorGreen": "हरा", + "colorGrey": "स्लेटी (ग्रे)", + "colorOrange": "नारंगी", + "colorPink": "गुलाबी", + "colorPurple": "बैंगनी", + "colorRed": "लाल", + "colorRequired": "रंग अनिवार्य है", + "colorRose": "गुलाबी (रोज़)", + "colorYellow": "पीला", + "confirmSaveDialogBody": "आपके बदलाव अगली बार री-रेंडर होने, कैशे समाप्त होने या मैन्युअल रूप से कैशे साफ़ करने पर प्रोडक्शन में प्रभावी होंगे।", + "confirmSaveDialogTitle": "क्या {{title}} सेटिंग्स सहेजें?", + "ContentSecurityPolicy": "Content-Security-Policy", + "createStatus": "स्टेटस बनाएं", + "deactivatedStatuses": "निष्क्रिय किए गए स्टेटस", + "deactivatedStatusesSubtitle": "यदि आप इन्हें सामग्री आइटमों में जोड़ना या हटाना चाहते हैं, तो इन स्टेटस को किसी भी समय पुन: सक्रिय किया जा सकता है।", + "deactivateStatus": "स्टेटस निष्क्रिय करें", + "deactivateStatusBody": "इस स्टेटस को निष्क्रिय करने से यह उन सभी सामग्री आइटमों से हट जाएगा जिनमें वर्तमान में यह लागू है। आप भविष्य में इस स्टेटस को कभी भी पुन: सक्रिय कर सकते हैं।", + "deactivateStatusLabel": "स्टेटस निष्क्रिय करें", + "DefaultPage": "डिफ़ॉल्ट भाषा पेज (Default Language Page)", + "deleteFontConfirm": "क्या आप वाकई इस फ़ॉन्ट को अनइंस्टॉल करना चाहते हैं?", + "describeStatusDescription": "वर्णन करें कि आपके कार्यप्रवाह के संदर्भ में इस स्टेटस का क्या अर्थ है", + "descriptionOptional": "विवरण (वैकल्पिक)", + "Dev": "प्रॉक्सी फ़ाइल स्टोर का रूट URL", + "DisplayAdvertisingSupport": "डिस्प्ले एडवरटाइज़िंग सपोर्ट (Display Advertising Support)", + "DntPolicy": "DNT चालू या बंद", + "editStatus": "स्टेटस संपादित करें", + "editStatusTitle": "{{name}} संपादित करें", + "errorOccurred": "एक त्रुटि हुई।", + "errorWithMessage": "त्रुटि (Error): {{message}}", + "FeaturePolicy": "Feature-Policy", + "filterSettings": "फ़िल्टर सेटिंग्स", + "fontInstallError": "{{family}} ({{variants}}) जोड़ने में विफल: {{error}}", + "fontInstallSuccess": "फ़ॉन्ट \"{{family}} ({{variants}})\" इंस्टॉल हो गया है", + "fontPreviewText": "यह टेक्स्ट का एक उदाहरण है", + "fontUninstalled": "फ़ॉन्ट \"{{fontLabel}}\" अनइंस्टॉल कर दिया गया है", + "fontUninstallFailed": "{{fontLabel}} को अनइंस्टॉल करने में विफल: {{error}}", + "FriendlyPagination": "फ्रेंडली पेजिनेशन (Friendly Pagination)", + "GoogleAutoLinker": "Google Auto Linker", + "GoogleUrchinId": "Google Analytics ID", + "Gql": "Apollo GQL सर्वर चलाने के लिए GraphQL एंडपॉइंट्स तक एक्सेस चालू करता है", + "GqlOrigin": "GraphQL अनुमत ऑरिजिन (Allow Origin)", + "GtmId": "Google Tag Manager ID", + "headTagsTitle": "हेड टैग्स (Head Tags)", + "Honeypot": "फ़ॉर्म हनी पॉट (Honey Pot)", + "installedFontsTitle": "इंस्टॉल किए गए फ़ॉन्ट", + "instanceWwwDnsTooltip": "WWW सेटिंग को सक्रिय करने के लिए एपेक्स (apex) डोमेन और www सब-डोमेन दोनों के DNS सेटअप की आवश्यकता होती है।", + "Live": "प्रॉक्सी फ़ाइल स्टोर का रूट URL", + "LoadFontAwesome": "Font Awesome लोड करें", + "MediaProxyUrl": "मीडिया प्रॉक्सी URL", + "nameRequired": "नाम अनिवार्य है", + "navFontsBrowse": "फ़ॉन्ट्स ब्राउज़ करें", + "navFontsInstalled": "इंस्टॉल किए गए फ़ॉन्ट", + "navHeadTags": "हेड टैग्स (Head Tags)", + "navRobotsTxt": "Robots.txt", + "navWorkflows": "कार्यप्रवाह (Workflows)", + "noInstalledFonts": "कोई फ़ॉन्ट इंस्टॉल नहीं है", + "none": "कोई नहीं", + "noneOption": "कोई नहीं", + "noResultsFor": "\"{{keyword}}\" के लिए कोई परिणाम नहीं मिले", + "noSearchResultsAlt": "खोज के कोई परिणाम नहीं", + "off": "बंद", + "on": "चालू", + "OverwriteHead": "Head फ़ाइल ओवरराइट करें (Overwrite)", + "PreferredDomainPrefix": "हमेशा मेरे डोमेन में WWW जोड़ें?", + "prev": "पिछला", + "PreviewLock": "प्रीव्यू लॉक प्रोटेक्शन (Preview Lock Protection)", + "PreviewLockPassword": "प्रीव्यू लॉक पासवर्ड (Preview Lock Password)", + "publishRequiresStatus": "सामग्री आइटम प्रकाशित करने के लिए यह स्टेटस लागू होना आवश्यक है।", + "publishRequiresStatusDescription": "यह एक ग्लोबल सेटिंग है और इसका मतलब है कि सामग्री आइटम तब तक प्रकाशित नहीं किए जा सकते जब तक यह स्टेटस लागू नहीं किया जाता।", + "ReferrerPolicy": "Referrer-Policy", + "removeFontLabel": "फ़ॉन्ट हटाएं", + "removeFontVariant": "{{variant}} हटाएं", + "removeStatusNotification": "जो यूज़र्स इस स्टेटस को हटा सकते हैं, उन्हें सूचित किया जाएगा।", + "robotsFailedFetchSettings": "सेटिंग्स लोड करने में विफल", + "robotsFailedSaveSettings": "robots.txt सेटिंग्स सहेजने में विफल। {{err}}", + "robotsFindingSettings": "robots.txt सेटिंग्स खोजी जा रही हैं", + "robotsNonLiveDomainWarning": "सर्च इंजनों द्वारा क्रॉल किए जाने से बचने के लिए नॉन-लाइव (Non-Live) डोमेन पर robots.txt हमेशा बंद रहता है। इसमें [hash]-dev.webengine.zesty.io, [hash]-dev.preview.zesty.io, और \"dev\" ब्रांच पर सेट कोई भी रजिस्टर्ड डोमेन शामिल है।", + "RobotsOn": "सर्च इंजन क्रॉल कर सकते हैं?", + "robotsPublishEventWarning": "जब तक कोई पब्लिश इवेंट (प्रकाशन) नहीं होता, तब तक बदलाव दिखाई नहीं देंगे।", + "robotsSettingsUpdated": "robots.txt फ़ाइल सेटिंग्स अपडेट कर दी गई हैं", + "RobotsText": "रोबोट्स टेक्स्ट (Robots Text)", + "robotsTopBarTitle": "Robot.txt", + "SafeEmails": "सेफ ईमेल भेजने की सूची (Safe Email Send To List)", + "saved": "सहेज लिया गया", + "saveSettingsTooltip": "सेटिंग्स सहेजें {{saveShortcut}}", + "searchFonts": "फ़ॉन्ट्स खोजें", + "searchFontsPlaceholder": "फ़ॉन्ट्स खोजें", + "searchStatuses": "स्टेटस खोजें", + "sectionFonts": "फ़ॉन्ट्स", + "sectionGlobalMetaSeo": "ग्लोबल मेटा और एसईओ (SEO)", + "sectionInstanceSettings": "इंस्टेंस सेटिंग्स", + "sectionStyles": "स्टाइल्स", + "sectionUserSettings": "यूज़र सेटिंग्स", + "SendingEmail": "ईमेल भेजना (Sending Email)", + "showDeactivated": "निष्क्रिय किए गए दिखाएं", + "ShowDomainInTitle": "मेटा टाइटल में डोमेन नाम दिखाएं?", + "ShowInTitle": "मेटा टाइटल में साइट का नाम दिखाएं?", + "SiteProtocol": "HTTPS चालू है?", + "statusDeactivated": "स्टेटस निष्क्रिय किया गया: {{name}}", + "statusDeactivateFailed": "स्टेटस निष्क्रिय करने में विफल: {{name}}। कृपया पुनः प्रयास करें।", + "statusDescriptionPlaceholder": "प्रकाशन के लिए कानूनी टीम द्वारा समीक्षा के लिए तैयार", + "statusNamePlaceholder": "जैसे: सामग्री समीक्षा की आवश्यकता है", + "StrictTransportSecurity": "Strict-Transport-Security", + "styleCategoryBodyColorsSpacing": "Body कलर और स्पेसिंग (Colors & Spacing)", + "styleCategoryButtons": "बटन (Buttons)", + "styleCategoryForms": "फ़ॉर्म (Forms)", + "styleCategoryHtmlElements": "HTML एलिमेंट्स (Elements)", + "styleCategoryInteractiveElements": "इंटरैक्टिव एलिमेंट्स (Interactive Elements)", + "styleCategoryLinks": "लिंक्स (Links)", + "styleCategoryNavigation": "नेविगेशन (Navigation)", + "styleCategoryResponsiveGrid": "रेस्पॉन्सिव ग्रिड (Responsive Grid)", + "styleCategorySidebar": "साइडबार (Sidebar)", + "styleCategoryTypography": "टाइपोग्राफी (Typography)", + "styleCategoryUiStyling": "UI स्टाइलिंग (Styling)", + "typeSomethingToPreview": "पूर्वावलोकन देखने के लिए कुछ टाइप करें", + "unexpectedError": "एक अप्रत्याशित त्रुटि हुई।", + "UniversalCode": "Use Google Universal Code", + "Url": "GroupBy क्लाइंट एंडपॉइंट (Client Endpoint)", + "whichRolesCanAdd": "कौन सी भूमिकाएं इस स्टेटस को जोड़ सकती हैं?", + "whichRolesCanRemove": "कौन सी भूमिकाएं इस स्टेटस को हटा सकती हैं?", + "workflowsHeading": "कार्यप्रवाह (Workflows)", + "workflowsRestrictedDescription": "अपनी भूमिका (Role) को एडमिन या ओनर में अपग्रेड करने के लिए नीचे सूचीबद्ध इंस्टेंस ओनर या एडमिनिस्ट्रेटर्स से संपर्क करें।", + "workflowsRestrictedTitle": "कार्यप्रवाह देखने और संपादित करने के लिए आपको अनुमति की आवश्यकता है", + "XContentTypeOptions": "X-Content-Type-Options", + "XFrameOptions": "हेडर: X-Frame-Options" +} diff --git a/public/locales/hi-IN/shell.json b/public/locales/hi-IN/shell.json new file mode 100644 index 0000000000..5b68809c29 --- /dev/null +++ b/public/locales/hi-IN/shell.json @@ -0,0 +1,608 @@ +{ + "accessDenied": "एक्सेस अस्वीकृत", + "accessDeniedImageAlt": "पृष्ठ नहीं मिला", + "accessDeniedRoleBody": "आपकी वर्तमान भूमिका {{role}} में {{app}} ऐप का एक्सेस शामिल नहीं है। एक्सेस पाने के लिए, कृपया इंस्टेंस के मालिक या नीचे सूचीबद्ध किसी एक प्रशासक से संपर्क करें और भूमिका अपग्रेड का अनुरोध करें।", + "accountChangePassword": "पासवर्ड बदलें", + "accountGetHelp": "सहायता प्राप्त करें", + "accountLogOut": "लॉग आउट", + "accountPreferences": "प्राथमिकताएं", + "accountReadDocs": "दस्तावेज़ पढ़ें", + "accountViewAllInstances": "सभी इंस्टेंस देखें", + "accountYourProfile": "आपकी प्रोफ़ाइल", + "addNewComment": "नया कमेंट जोड़ें", + "advancedSearch": "उन्नत खोज", + "advancedSearchDescription": "जैसे-जैसे आप और आपकी टीम Zesty में मिलकर काम करते हैं, आप कंटेंट, मॉडल और कोड फ़ाइलों का एक खोजने योग्य संग्रह बनाएंगे। आप जो खोज रहे हैं उसे ढूंढने के लिए नीचे दिए गए फ़ॉर्म का उपयोग करें।", + "aiAssistantBeta": "AI सहायक बीटा", + "aiDrawerPlaceholder": "कुछ भी पूछें, उदाहरण के लिए \"मेरे कंटेंट को किसी विशिष्ट दर्शक के अनुरूप बनाएं\"", + "aiGeneratingContentStatus": "हमारा AI सहायक आपके पैरामीटर के आधार पर आपका कंटेंट जनरेट कर रहा है", + "aiMistakesWarning": "हमारा AI सहायक गलतियाँ कर सकता है। कृपया महत्वपूर्ण जानकारी जाँच लें।", + "aiOnlyInContentApp": "केवल कंटेंट ऐप में उपलब्ध है।", + "aiScanningMetaDescription": "हमारा AI सहायक आपके कंटेंट को स्कैन कर रहा है और आपके पैरामीटर के आधार पर आपका मेटा विवरण जनरेट कर रहा है", + "aiScanningMetaTitle": "हमारा AI सहायक आपके कंटेंट को स्कैन कर रहा है और आपके पैरामीटर के आधार पर आपका मेटा शीर्षक जनरेट कर रहा है", + "aiWriteContentSubtitle": "अपने लिए कंटेंट लिखवाने के लिए हमारे AI सहायक का उपयोग करें", + "allInstances": "सभी इंस्टेंस", + "alreadyPartOfInstance": "पहले से ही इंस्टेंस का हिस्सा है", + "announcementIgnore": "अनदेखा करें", + "announcementRead": "घोषणा पढ़ें", + "announcementScheduleTraining": "प्रशिक्षण शेड्यूल करें", + "announcementShowVideo": "वीडियो दिखाएं", + "anyLanguage": "कोई भी भाषा", + "anyone": "कोई भी", + "anyTime": "कभी भी", + "anyType": "कोई भी प्रकार", + "appErrorBody": "यह त्रुटि हमारी टीम को भेज दी गई है। जारी रखने के लिए कृपया एप्लिकेशन फिर से लोड करें।", + "appErrorHeading": "ओह, कुछ गलत हो गया", + "appLoadingFailure": "ऐप लोड विफलता: {{message}}", + "applyAiSuggestion": "लागू करें", + "audiencePlaceholder": "उदा. Freelancers, Designers, .....", + "autoApply": "स्वतः लागू करें", + "block": "ब्लॉक", + "blockSelectorCreateVariant": "वेरिएंट बनाएं", + "blockSelectorNoVariantsDescription": "वेरिएंट बनाने के लिए Blocks ऐप पर जाएं, यह मॉडल चुनें, और create variant बटन पर क्लिक करें", + "blockSelectorNoVariantsTitle": "{{modelName}} मॉडल के लिए कोई वेरिएंट नहीं बनाए गए हैं", + "blockSelectorSearchVariants": "वेरिएंट खोजें", + "blockSelectorSelectModel": "मॉडल चुनें", + "blockSelectorSelectModelFirst": "वेरिएंट चुनने से पहले कृपया मॉडल चुनें", + "blockSelectorSelectVariant": "वेरिएंट चुनें", + "blockSelectorUpdatedOnBy": "{{date}} को {{user}} द्वारा अपडेट किया गया", + "blockSelectorViewBlock": "ब्लॉक देखें", + "cancelEsc": "रद्द करें (ESC)", + "cannotBeUndone": "इसे पूर्ववत नहीं किया जा सकता", + "characterLimit": "वर्ण सीमा", + "characterLimitTooltip": "जनरेट किए गए टेक्स्ट की लंबाई नियंत्रित करने के लिए वर्ण सीमा सेट करें", + "clearAll": "सभी साफ़ करें", + "clearChat": "चैट साफ़ करें", + "code": "कोड", + "collapseSidebar": "साइडबार समेटें", + "commentAddError": "टिप्पणी जोड़ने में असमर्थ। कृपया अपना इंटरनेट कनेक्शन जांचें और पुनः प्रयास करें।", + "commentPlaceholder": "जवाब दें या @ से अन्य लोगों को जोड़ें", + "confirmPublishBody": "इससे {{item}} का v{{version}} तुरंत आपके सभी प्लेटफ़ॉर्म पर उपलब्ध हो जाएगा। आवश्यकता होने पर आप बाद में इस आइटम को कभी भी अप्रकाशित कर सकते हैं।", + "confirmPublishTitle": "{{item}} प्रकाशित करें", + "contactSupport": "सहायता से संपर्क करें", + "contentGenerated": "आपका कंटेंट जनरेट हो गया है!", + "contentItem": "कंटेंट आइटम", + "continueWith": "{{service}} के साथ जारी रखें", + "copyInstanceZUID": "इंस्टेंस ZUID कॉपी करें", + "copyLink": "लिंक कॉपी करें", + "createContentItem": "सामग्री आइटम बनाएं", + "createContentItemSubtitle": "आप केवल पहले से मौजूद मॉडल के लिए ही सामग्री आइटम बना सकते हैं", + "createdByTooltip": "इंस्टेंस के सभी उपयोगकर्ताओं में से एक उपयोगकर्ता चुनें।", + "currencyFlagAlt": "{{country}} का ध्वज", + "currentlyLoggedInAs": "वर्तमान में {{email}} के रूप में लॉग इन हैं", + "customDateRange": "कस्टम दिनांक सीमा", + "dateAfter": "इसके बाद...", + "dateBefore": "इससे पहले...", + "dateLast14Days": "पिछले 14 दिन", + "dateModified": "संशोधन तिथि", + "dateModifiedTooltip": "वह दिनांक सीमा चुनें जिसके लिए आप परिणाम देखना चाहते हैं।", + "dateOn": "को...", + "dateRange": "दिनांक सीमा", + "dateRangeValue": "{{from}} से {{to}} तक", + "dateTimeInvalidTime": "अमान्य समय", + "dateTimeStoredInUtc": "UTC में {{value}} के रूप में संग्रहीत", + "dateUpdated": "अपडेट की तारीख", + "deleteCommentBody": "इस कमेंट को हटाने से इससे जुड़े सभी उत्तर भी हट जाएंगे।", + "deleteCommentTitle": "कमेंट हटाएं?", + "deleteForever": "हमेशा के लिए हटाएं", + "describeAudience": "अपने दर्शकों का वर्णन करें", + "docs": "दस्तावेज़", + "docsAddingImageAltText": "इमेज ऑल्ट टेक्स्ट जोड़ना", + "docsAddingManagingContent": "कंटेंट जोड़ना और प्रबंधित करना", + "docsAuditTrailOverview": "ऑडिट ट्रेल अवलोकन", + "docsAuthApi": "Auth API दस्तावेज़", + "docsBuildingSchema": "स्कीमा बनाना", + "docsCapturingFormData": "फ़ॉर्म डेटा को लीड्स में कैप्चर करना", + "docsCodeOverview": "कोड अवलोकन", + "docsContentEntry": "कंटेंट प्रविष्टि, ड्राफ्ट और प्रकाशन", + "docsContentOverview": "कंटेंट अवलोकन", + "docsCreatingLeadForm": "लीड फ़ॉर्म बनाना", + "docsEditorCodingBasics": "एडिटर और कोडिंग की मूल बातें", + "docsGettingStarted": "शुरुआत करना", + "docsGuides": "गाइड", + "docsInstanceSettings": "इंस्टेंस सेटिंग्स", + "docsIntroduction": "परिचय", + "docsLeadsOverview": "लीड्स अवलोकन", + "docsManageRedirects": "रीडायरेक्ट प्रबंधित करें", + "docsMediaOverview": "मीडिया अवलोकन", + "docsRedirectsOverview": "रीडायरेक्ट अवलोकन", + "docsSchemaContentCode": "स्कीमा, कंटेंट और कोड", + "docsSchemaOverview": "स्कीमा अवलोकन", + "docsSeoRedirects": "SEO रीडायरेक्ट", + "docsSettingsOverview": "सेटिंग्स अवलोकन", + "docsUploadMultipleImages": "एकाधिक इमेज कैसे अपलोड करें", + "editorAddRemoveLink": "लिंक जोड़ें या हटाएं", + "editorAlignCenter": "टेक्स्ट केंद्र में संरेखित करें", + "editorAlignJustify": "टेक्स्ट जस्टिफ़ाई करें", + "editorAlignLeft": "टेक्स्ट बाएं संरेखित करें", + "editorAlignRight": "टेक्स्ट दाएं संरेखित करें", + "editorBold": "बोल्ड", + "editorChangeHeading": "शीर्षक बदलें", + "editorChangeToBlockQuote": "ब्लॉक उद्धरण में बदलें", + "editorChangeToCodeBlock": "कोड ब्लॉक में बदलें", + "editorChangeToHeadingLevel": "शीर्षक स्तर {{level}} में बदलें", + "editorChangeToParagraph": "पैराग्राफ़ में बदलें", + "editorEmbed": "एम्बेड करें", + "editorEmbedContent": "सामग्री एम्बेड करें", + "editorEmbedIdLabel": "अद्वितीय {{service}} ID दर्ज करें", + "editorFloatLeft": "बाएं फ़्लोट करें", + "editorFloatRight": "दाएं फ़्लोट करें", + "editorHeading": "शीर्षक", + "editorHeadingLevel": "शीर्षक {{level}}", + "editorIndent": "इंडेंट", + "editorInsertCharacter": "वर्ण डालें: {{char}}", + "editorInsertEmbed": "एम्बेड डालें", + "editorInsertHorizontalRule": "क्षैतिज रेखा डालें", + "editorInsertImage": "मीडिया लाइब्रेरी से छवि डालें", + "editorInsertLink": "लिंक डालें", + "editorInsertSpecialCharacter": "विशेष वर्ण डालें", + "editorInsertTable": "तालिका डालें", + "editorItalic": "इटैलिक", + "editorLevel": "स्तर {{level}}", + "editorLinkNewWindow": "क्या लिंक को नई ब्राउज़र विंडो में खोलें?", + "editorLinkUrlLabel": "यह लिंक किस URL पर ले जाना चाहिए?", + "editorPromptColumns": "कितने कॉलम?", + "editorPromptEnterUrl": "URL दर्ज करें", + "editorPromptRows": "कितनी पंक्तियाँ?", + "editorRedo": "अंतिम पूर्ववत परिवर्तन फिर से करें", + "editorSpecialCharacter": "विशेष वर्ण", + "editorToggleEmphasis": "ज़ोर टॉगल करें", + "editorToggleStrikethrough": "स्ट्राइकथ्रू टॉगल करें", + "editorToggleStrong": "बोल्ड टॉगल करें", + "editorToggleSubscript": "सबस्क्रिप्ट टॉगल करें", + "editorToggleSuperscript": "सुपरस्क्रिप्ट टॉगल करें", + "editorToggleUnderline": "रेखांकन टॉगल करें", + "editorUnderline": "रेखांकन", + "editorUndo": "अंतिम परिवर्तन पूर्ववत करें", + "editorWrapInBlockQuote": "ब्लॉक उद्धरण में लपेटें", + "editorWrapInBulletList": "बुलेट सूची में लपेटें", + "editorWrapInOrderedList": "क्रमित सूची में लपेटें", + "emailAddress": "ईमेल पता", + "emailCommaSeparated": "ईमेल, कॉमा या स्पेस से अलग", + "enterTwoFactorOtp": "अपना 2FA OTP दर्ज करें", + "enterValidEmail": "कृपया एक मान्य ईमेल पता दर्ज करें।", + "errorParsingAiResponse": "AI प्रतिक्रिया पार्स करने में त्रुटि। कृपया फिर से प्रयास करें।", + "expandSidebar": "साइडबार का विस्तार करें", + "failedAuthenticateAccount": "आपके खाते को प्रमाणित नहीं किया जा सका", + "failedCopyInstanceZUID": "इंस्टेंस ZUID कॉपी करने में विफल", + "failedCreateField": "फ़ील्ड बनाने में विफल। {{error}}", + "failedFetchField": "फ़ील्ड प्राप्त करने में विफल: {{error}}", + "failedFetchHeadTags": "हेड टैग प्राप्त करने में विफल", + "failedFetchHeadTagsError": "हेड टैग प्राप्त करने में विफल: {{error}}", + "failedFetchModel": "मॉडल प्राप्त करने में विफल: {{error}}", + "failedFetchModels": "मॉडल प्राप्त करने में विफल", + "failedFetchRecentItems": "हाल के आइटम प्राप्त करने में समस्या हुई: {{error}}", + "failedFetchUsers": "उपयोगकर्ता प्राप्त करने में विफल", + "failedLoadDomains": "डोमेन लोड करने में विफल", + "failedLoadHeadTagFile": "फ़ाइल लोड करने में विफल। {{status}} | {{error}}", + "failedLoadInstancesList": "आपकी इंस्टेंस सूची लोड करने में समस्या हुई", + "failedLoadUserRole": "इस इंस्टेंस के लिए आपकी उपयोगकर्ता भूमिका लोड करने में विफल।", + "failedRefreshCdnCache": "CDN कैश रीफ्रेश करने में विफल", + "failedToLoadInstance": "इंस्टेंस लोड करने में विफल", + "failedUpdateFavicon": "फ़ेविकॉन अपडेट करने में विफल", + "faviconUpdated": "फ़ेविकॉन अपडेट हो गया", + "favorites": "पसंदीदा", + "fieldRequiredError": "यह फ़ील्ड आवश्यक है। कृपया एक मान दर्ज करें।", + "filterNoResultsRich": "आपके फ़िल्टर \"{{query}}\" के लिए कोई परिणाम नहीं मिला", + "findIn": "{{app}} में खोजें", + "flagAlt": "{{country}} ध्वज", + "forbiddenLoadInstancesList": "आपको इंस्टेंस सूची लोड करने की अनुमति नहीं है", + "forgotPassword": "पासवर्ड भूल गए?", + "geminiIconAlt": "Gemini आइकन", + "geminiLogoAlt": "Gemini लोगो", + "generate": "जनरेट करें", + "generateContent": "कंटेंट जनरेट करें", + "generatedContent": "जनरेट किया गया कंटेंट", + "generateMetaDescription": "मेटा विवरण जनरेट करें", + "generateMetaDescriptionHelp": "हमारी AI आपके कंटेंट को स्कैन करेगी और नीचे सेट किए गए आपके पैरामीटर के आधार पर आपका मेटा विवरण जनरेट करेगी", + "generateMetaTitle": "मेटा शीर्षक जनरेट करें", + "generateMetaTitleHelp": "हमारी AI आपके कंटेंट को स्कैन करेगी और नीचे सेट किए गए आपके पैरामीटर के आधार पर आपका मेटा शीर्षक जनरेट करेगी", + "generateSuggestions": "सुझाव जनरेट करें", + "generatingContent": "कंटेंट जनरेट हो रहा है", + "generatingMetaDescription": "मेटा विवरण जनरेट हो रहा है", + "generatingMetaTitle": "मेटा शीर्षक जनरेट हो रहा है", + "generationStopped": "जनरेशन रोक दिया गया है", + "goToAccounts": "खातों पर जाएं", + "hasAccessTo": "इन तक पहुंच है", + "headCreateTag": "हेड टैग बनाएं", + "headLegacyNotice": "इस इंस्टेंस में लेगेसी हेड टैग हैं। यदि आप इन्हें संपादित या हटाना चाहते हैं, तो कृपया सहायता से संपर्क करें।", + "headNoTags": "इस आइटम के लिए कोई हेड टैग नहीं बनाया गया है।", + "headNotVersionedNotice": "हेड टैग संस्करणित नहीं होते। एक बार सहेजे जाने पर वे तब प्रभावी होंगे जब पृष्ठ अगली बार कैश किए जाएंगे। कैशिंग प्रकाशन पर या हर 24 घंटे में होती है।", + "headTagAddAttribute": "विशेषता जोड़ें", + "headTagAddAttributeTitle": "टैग विशेषता जोड़ें", + "headTagAttributeLabel": "विशेषता", + "headTagCreate": "हेड टैग बनाएं", + "headTagDeleteAttributeTitle": "टैग विशेषता हटाएं", + "headTagDeleted": "हेड टैग हटाया गया", + "headTagDeleteHeadTag": "हेड टैग हटाएं", + "headTagDeleteTag": "टैग हटाएं", + "headTagLabel": "टैग", + "headTagNewCreated": "नया हेड टैग बनाया गया", + "headTagSave": "हेड टैग सहेजें", + "headTagSortLabel": "क्रम", + "headTagTypeNone": "कोई नहीं", + "headTagUpdateFailed": "हेड टैग अपडेट करने में विफल। {{status}}", + "headTagUpdateSuccess": "हेड टैग सफलतापूर्वक अपडेट किया गया", + "headTagValueLabel": "मान", + "imageFieldLimit_one": "यह फ़ील्ड {{count}} छवि तक सीमित है", + "imageFieldLimit_other": "यह फ़ील्ड {{count}} छवियों तक सीमित है", + "insert": "सम्मिलित करें", + "integrationAddDetail": "विवरण जोड़ें", + "integrationAddDetailWithPlus": "+ विवरण जोड़ें", + "integrationAddHeading": "हेडिंग जोड़ें", + "integrationAddHttpHeader": "HTTP हेडर जोड़ें", + "integrationAddSubheading": "सबहेडिंग जोड़ें", + "integrationApiConfigurationSettings": "API कॉन्फ़िगरेशन सेटिंग्स", + "integrationApiResponseArrayOfPrimitives": "API ने {{kind}} वैल्यू का एक array रिटर्न किया। ऑब्जेक्ट्स का array अपेक्षित था।", + "integrationApiResponseEmptyArray": "API ने एक खाली array रिटर्न किया। डिस्प्ले विकल्प कॉन्फ़िगर करने के लिए प्रतिक्रिया में कम से कम एक आइटम जोड़ें।", + "integrationApiResponseNestedArrayNoSelectableKeys": "API ने ऐसा ऑब्जेक्ट रिटर्न किया जिसके नेस्टेड arrays में कोई चयन योग्य keys नहीं हैं। सुनिश्चित करें कि कम से कम एक नेस्टेड array आइटम में स्केलर प्रॉपर्टीज़ हों।", + "integrationApiResponseNoData": "API ने कोई डेटा रिटर्न नहीं किया। ऑब्जेक्ट्स का एक JSON array अपेक्षित था।", + "integrationApiResponseNoNestedArray": "API ने एक एकल ऑब्जेक्ट रिटर्न किया जिसके अंदर ऑब्जेक्ट्स का कोई नेस्टेड array नहीं है। या तो array रूट, या ऑब्जेक्ट्स का array रखने वाला ऑब्जेक्ट अपेक्षित था।", + "integrationApiResponseNoSelectableKeys": "API ने ऑब्जेक्ट्स का एक array रिटर्न किया जिसमें कोई चयन योग्य keys नहीं हैं। सुनिश्चित करें कि प्रत्येक ऑब्जेक्ट में कम से कम एक स्केलर प्रॉपर्टी हो।", + "integrationApiResponseUnexpectedType": "API ने {{type}} टाइप की वैल्यू रिटर्न की। ऑब्जेक्ट्स का एक JSON array अपेक्षित था।", + "integrationApiUrl": "API URL", + "integrationApiUrlTooltip": "बाहरी डेटा स्रोत को परिभाषित करने वाला URL। इसे समान संरचना वाले फ्लैट ऑब्जेक्ट्स की JSON array लौटानी चाहिए।", + "integrationAuthenticationHeaders": "प्रमाणीकरण हेडर", + "integrationCanReconfigureLater": "इसे बाद में फिर से कॉन्फ़िगर किया जा सकता है", + "integrationClassyCard": "Classy कार्ड", + "integrationClassyCardDescription": "Classy से अभियान दिखाएं", + "integrationConfigureDisplayOptions": "डिस्प्ले विकल्प कॉन्फ़िगर करें", + "integrationConfigureDisplayOptionsDescription": "चुनें कि आइटम संपादित करते समय कंटेंट एडिटर्स को कौन से फ़ील्ड दिखाने हैं", + "integrationConnect": "कनेक्ट करें", + "integrationConnectingSecureConnection": "कृपया प्रतीक्षा करें, हम सुरक्षित कनेक्शन स्थापित कर रहे हैं", + "integrationConnectingToApiEndpoint": "API endpoint से कनेक्ट हो रहा है", + "integrationConnectionFailed": "कनेक्शन विफल", + "integrationConnectionFailedDescription": "आपके द्वारा दर्ज API endpoint से कनेक्ट नहीं हो सका। यह अनपेक्षित संरचना, अनुपलब्ध या अमान्य URL, या गलत कस्टम हेडर के कारण हो सकता है।", + "integrationConnectionSuccessful": "कनेक्शन सफल", + "integrationConnectionSuccessfulDescription": "आपकी API अब सुरक्षित रूप से लिंक है और उपयोग के लिए तैयार है।", + "integrationConnectToApi": "API से कनेक्ट करें", + "integrationConnectToApiDescription": "उपयोगकर्ताओं को आइटम चुनने के लिए एक endpoint से कनेक्शन स्थापित करें", + "integrationDataPath": "डेटा पथ", + "integrationDetail": "विवरण", + "integrationDetails": "विवरण", + "integrationDetailsCard": "विवरण कार्ड", + "integrationDetailsCardDescription": "कई विवरणों वाले आइटम दिखाएं", + "integrationDisplayItemsAs": "आइटम इस रूप में दिखाएं", + "integrationEditApiUrl": "API URL संपादित करें", + "integrationEditDisplayOptions": "डिस्प्ले विकल्प संपादित करें", + "integrationHeading": "हेडिंग", + "integrationHttpHeadersOptional": "HTTP हेडर (वैकल्पिक)", + "integrationImageCard": "इमेज कार्ड", + "integrationImageCardDescription": "इमेज, हेडिंग और सबहेडिंग वाले आइटम दिखाएं।", + "integrationImageUrlDescription": "इमेज केवल तब रेंडर होगी जब चुना गया मान URL हो", + "integrationInvalidResponseFormat": "असमर्थित प्रतिक्रिया फ़ॉर्मेट", + "integrationInvalidResponseFormatDescription": "API कनेक्ट हो गया, लेकिन इसकी प्रतिक्रिया का उपयोग इस फ़ील्ड को कॉन्फ़िगर करने के लिए नहीं किया जा सकता।", + "integrationInvalidUrlHelper": "कृपया मान्य URL दर्ज करें, जैसे https://api.example.org/items.json", + "integrationItemId": "आइटम ID", + "integrationItemIdNotUniqueWarning": "\"{{itemIdPath}}\" नमूने के {{count}} आइटम में अद्वितीय नहीं है — इससे चयन गलत तरीके से पहचाने जा सकते हैं।", + "integrationItemIdNotUniqueWarning_one": "\"{{itemIdPath}}\" नमूने के {{count}} आइटम में अद्वितीय नहीं है — इससे चयन गलत तरीके से पहचाने जा सकते हैं।", + "integrationItemIdNotUniqueWarning_other": "\"{{itemIdPath}}\" नमूने के {{count}} आइटम में अद्वितीय नहीं है — इससे चयन गलत तरीके से पहचाने जा सकते हैं।", + "integrationItemIdToolTip": "ऐसा मान चुनें जिसे API हर आइटम के लिए अद्वितीय होने की गारंटी देता है (जैसे, एक डेटाबेस ID), न कि ऐसा मान जो केवल छोटे नमूने में अद्वितीय दिखता हो। गैर-अद्वितीय आइटम ID के कारण चयन गलत तरीके से पहचाने जा सकते हैं।", + "integrationItemPreview": "आइटम पूर्वावलोकन", + "integrationItemPreviewDescription": "कंटेंट एडिटर्स को आइटम कैसे दिखाई देंगे", + "integrationKey": "कुंजी", + "integrationKeyPathsMismatchWarning": "यह endpoint एक अलग संरचना लौटाता है। मौजूदा सहेजे गए आइटम गलत तरीके से दिखेंगे और उन्हें फिर से चुनना होगा।", + "integrationKeyPreviewDescription": "नीचे दी गई कुंजियों के लिए पूर्वावलोकित मान API response के पहले आइटम से हैं।", + "integrationLearnEndpointStructures": "हम जिन endpoint संरचनाओं को स्वीकार करते हैं उनके बारे में जानें", + "integrationMuxCard": "MUX कार्ड", + "integrationMuxCardDescription": "MUX से वीडियो दिखाएं", + "integrationNotAvailable": "उपलब्ध नहीं", + "integrationOptions": "विकल्प", + "integrationOtherOptions": "अन्य विकल्प", + "integrationRecommended": "अनुशंसित", + "integrationReconfigure": "फिर से कॉन्फ़िगर करें", + "integrationResyncValues": "मान फिर से सिंक करें", + "integrationSaveChanges": "परिवर्तन सहेजें", + "integrationSelectDataPath": "डेटा पथ चुनें", + "integrationSelectDisplayType": "डिस्प्ले प्रकार चुनें", + "integrationSelectedCount_one": "{{count}} चयनित", + "integrationSelectedCount_other": "{{count}} चयनित", + "integrationSelectKeysToDisplay": "आइटम में दिखाने के लिए कुंजियां चुनें", + "integrationSelectRemoteItems": "रिमोट आइटम चुनें", + "integrationSelectTitle": "{{title}} चुनें", + "integrationShopifyCard": "Shopify कार्ड", + "integrationShopifyCardDescription": "Shopify उत्पाद सूचियां दिखाएं", + "integrationSimpleCard": "सरल कार्ड", + "integrationSimpleCardDescription": "हेडिंग वाले आइटम दिखाएं", + "integrationStop": "रोकें", + "integrationSubHeading": "सबहेडिंग", + "integrationTextCard": "टेक्स्ट कार्ड", + "integrationTextCardDescription": "हेडिंग और सबहेडिंग वाले आइटम दिखाएं", + "integrationThumbnail": "थंबनेल", + "integrationTryAgain": "फिर से प्रयास करें", + "integrationValue": "मान", + "integrationVideoCard": "वीडियो कार्ड", + "integrationVideoCardDescription": "वीडियो, हेडिंग और सबहेडिंग वाले आइटम दिखाएं।", + "integrationViewJson": "JSON देखें", + "integrationViewRawJson": "कच्चा JSON देखें", + "integrationYoutubeCard": "Youtube कार्ड", + "integrationYoutubeCardDescription": "Youtube से वीडियो दिखाएं", + "internalExternalLink": "आंतरिक/बाहरी लिंक", + "internalLinkNone": "कोई नहीं", + "internalLinkSearchPlaceholder": "जो आइटम आप खोज रहे हैं वह नहीं दिख रहा? अपने API में खोजने के लिए एक शब्द दर्ज करें।", + "internetConnectionOff": "इंटरनेट कनेक्शन बंद है", + "internetConnectionRestored": "इंटरनेट कनेक्शन बहाल हो गया है", + "invalidUrlBody": "आपके द्वारा दर्ज किया गया URL अमान्य है या मौजूद नहीं है। यदि आपको लगता है कि यह एक त्रुटि है, तो हमसे यहां संपर्क करें", + "invalidUrlHeading": "अमान्य URL। कृपया अपना URL जांचें और पुनः प्रयास करें।", + "invite": "आमंत्रित करें", + "inviteAs": "इस रूप में आमंत्रित करें", + "inviteMorePeople": "और लोगों को आमंत्रित करें", + "invitePreviouslySent": "आमंत्रण पहले भेजा जा चुका है", + "inviteSent": "आमंत्रण भेजा गया", + "invitesSentAsEmails": "ये आमंत्रण ईमेल के रूप में भेजे जाएंगे", + "invitesSentPartial_one": "{{totalCount}} उपयोगकर्ता में से {{successCount}} को आमंत्रण भेजा गया (ईमेल द्वारा)", + "invitesSentPartial_other": "{{totalCount}} उपयोगकर्ताओं में से {{successCount}} को आमंत्रण भेजे गए (ईमेल द्वारा)", + "invitesSentSuccess_one": "{{count}} उपयोगकर्ता को आमंत्रण भेजा गया (ईमेल द्वारा)", + "invitesSentSuccess_other": "{{count}} उपयोगकर्ताओं को आमंत्रण भेजे गए (ईमेल द्वारा)", + "inviteUsers": "उपयोगकर्ताओं को आमंत्रित करें", + "itemLowercase": "आइटम", + "itemMissingMetaData": "चयनित आइटम में मेटा डेटा गायब है", + "itemMissingMetaTitle": "आइटम में मेटा शीर्षक नहीं है", + "keywords": "कीवर्ड", + "keywordsExamplePlaceholder": "उदा. Hikes, snow", + "keywordsPlaceholder": "उदा. Articles", + "keywordsToInclude": "शामिल करने के लिए कीवर्ड (कॉमा से अलग)", + "keywordsTooltip": "एक या एकाधिक शब्द दर्ज करें जो संसाधन के नाम के भाग से मेल खाते हों।", + "language": "भाषा", + "languageGenerationTooltip": "वह भाषा सेट करें जिसमें आप टेक्स्ट जनरेट करना चाहते हैं।", + "languageTooltip": "वह भाषा चुनें जिसके लिए आप परिणाम देखना चाहते हैं।", + "learnMoreAbout": "{{app}} के बारे में और जानें", + "legacySearchCreatedByOn": "{{name}} द्वारा {{date}} को निर्मित", + "legacySearchError": "शब्द खोजने में त्रुटि: {{term}}", + "legacySearchFilterBy": "इसके अनुसार फ़िल्टर करें", + "legacySearchItemMissingMeta": "आइटम में मेटा शीर्षक अनुपलब्ध है", + "legacySearchNoResultsRich": "खोज शब्द के लिए कोई परिणाम नहीं मिला: {{term}}", + "legacySearchSearching": "खोज रहे हैं", + "legacySearchSortBy": "इसके अनुसार क्रमबद्ध करें", + "legacySearchSortCreated": "निर्मित", + "legacySearchSortDefault": "डिफ़ॉल्ट", + "legacySearchSortEdited": "संपादित", + "legacySearchSortTitle": "शीर्षक", + "legacySearchSortUser": "उपयोगकर्ता", + "legacySearchVersionEdited": "संस्करण {{version}} को {{editedAgo}} संपादित किया गया", + "limit": "सीमा", + "loadingLogoAlt": "एप्लिकेशन लोड होने के दौरान Zesty.io लोगो प्रदर्शित किया जा रहा है", + "loginFailedContactSupport": "लॉगिन विफल रहा। कृपया {{email}} पर सहायता से संपर्क करें।", + "loginProblem": "आपको साइन इन करने में समस्या हुई", + "loginRequestDeniedRedirecting": "आपका लॉगिन अनुरोध अस्वीकार कर दिया गया। लॉगिन पर रीडायरेक्ट किया जा रहा है।", + "loginRequestExpiredRedirecting": "आपका लॉगिन अनुरोध समाप्त हो गया है। लॉगिन पर रीडायरेक्ट किया जा रहा है।", + "loginRequestValidationIssueRedirecting": "ऐसा लगता है कि इस लॉगिन अनुरोध को सत्यापित करने में समस्या हुई। लॉगिन पर रीडायरेक्ट किया जा रहा है।", + "loginSubtitle": "फिर से दुनिया को कंटेंट से सशक्त बनाना शुरू करें", + "manageInstanceHeadTags": "इंस्टेंस हेड टैग प्रबंधित करें", + "markAsResolved": "हल किया गया चिह्नित करें", + "missingMetaTitle": "मेटा शीर्षक अनुपलब्ध", + "missingModel": "अनुपलब्ध मॉडल: {{ZUID}}", + "modelsInSchema": "स्कीमा में मॉडल", + "moreOptions": "अधिक विकल्प", + "myNotifications": "मेरी सूचनाएं", + "navApps": "ऐप्स", + "navAppTooltip": "{{name}} ऐप", + "navBlocks": "ब्लॉक्स", + "navigate": "नेविगेट करें", + "navLaunchpad": "लॉन्चपैड", + "navLeads": "लीड्स", + "navRedirects": "रीडायरेक्ट", + "navRelease": "रिलीज़", + "navReports": "रिपोर्ट", + "navSchema": "स्कीमा", + "navSettings": "सेटिंग्स", + "navStudio": "स्टूडियो", + "needHelpContactSupport": "मदद चाहिए? सहायता से संपर्क करें", + "noActionsTaken": "कोई कार्रवाई नहीं की गई", + "noFilterResults": "आपके फ़िल्टर से मेल खाने वाले कोई परिणाम नहीं मिले", + "noFilterResultsSuggestion": "जो आप ढूंढ रहे हैं उसे पाने के लिए अपने फ़िल्टर समायोजित करके देखें", + "noInstancePermissionBody1": "आपके खाते के पास इस इंस्टेंस तक पहुंचने की अनुमति नहीं है। जोड़े जाने के लिए कृपया इंस्टेंस के मालिक या प्रशासक से संपर्क करें।", + "noInstancePermissionBody2": "यदि आपको लगता है कि आपके पास एक्सेस होना चाहिए, तो सुनिश्चित करें कि आप सही खाते का उपयोग कर रहे हैं।", + "noInvitePermissionBody": "उपयोगकर्ता आमंत्रण विशेषाधिकारों के लिए इस इंस्टेंस पर अपनी भूमिका Admin या Owner में बदलवाने के लिए नीचे सूचीबद्ध इंस्टेंस मालिकों या प्रशासकों से संपर्क करें।", + "noInvitePermissionTitle": "आपके पास उपयोगकर्ताओं को आमंत्रित करने की अनुमति नहीं है", + "noPermissionImageAlt": "कोई अनुमति नहीं", + "noResultsFound": "कोई परिणाम नहीं मिला", + "noSearchResultsAlt": "कोई खोज परिणाम नहीं", + "notFoundImageAlt": "नहीं मिला", + "onboardingCallAvatarAlt": "सेल्स अवतार", + "onboardingCallButton": "कॉल शेड्यूल करें", + "onboardingCallTitle": "हमारी सहायता टीम के साथ एक ऑनबोर्डिंग कॉल शेड्यूल करें", + "openAiBadgeAlt": "OpenAI बैज", + "optionNumber": "विकल्प {{number}}", + "or": "या", + "password": "पासवर्ड", + "pinnedTabs": "पिन किए गए टैब", + "publishItem": "आइटम प्रकाशित करें", + "publishItems": "आइटम प्रकाशित करें", + "recentlyModifiedItems": "हाल ही में संशोधित {{items}}", + "recentlyUploadedItems": "हाल ही में अपलोड किए गए {{items}}", + "recentSearches": "हाल की खोजें", + "refreshCdnCache": "CDN कैश रीफ्रेश करें", + "regenerate": "फिर से जनरेट करें", + "relationalAddExisting": "मौजूदा {{label}} जोड़ें", + "relationalCopyZuid": "ZUID कॉपी करें", + "relationalCreateAddNew": "नया {{label}} बनाएं और जोड़ें", + "relationalDateSaved": "सहेजने की तारीख", + "relationalDeletedItem": "{{zuid}} (हटाया गया)", + "relationalDeselectAll": "सभी अचयनित करें", + "relationalDraftPreview": "ड्राफ़्ट पूर्वावलोकन - v{{version}}", + "relationalDragToReorder": "क्रम बदलने के लिए खींचें और छोड़ें", + "relationalEditContentItem": "सामग्री आइटम संपादित करें", + "relationalFieldsHeading": "फ़ील्ड", + "relationalFilterItems": "आइटम फ़िल्टर करें", + "relationalImageAlt": "{{name}} छवि", + "relationalMoreOptions": "अधिक विकल्प", + "relationalProductionPreview": "प्रोडक्शन पूर्वावलोकन - v{{version}}", + "relationalPublishNow": "अभी प्रकाशित करें", + "relationalReplace": "बदलें", + "relationalReplaceItem": "आइटम बदलें", + "relationalReplacementSelected": "प्रतिस्थापन आइटम चयनित", + "relationalSchedulePublish": "प्रकाशन शेड्यूल करें", + "relationalSelected": "{{value}} चयनित", + "relationalSelectField": "{{label}} चुनें", + "relationalSelectReplacement": "प्रतिस्थापन आइटम चुनें", + "relationalSortBy": "क्रमबद्ध करें: {{value}}", + "relationalSortCreatedBy": "द्वारा बनाया गया", + "relationalSortDateCreated": "बनाने की तारीख", + "relationalSortDescription": "विवरण", + "relationalSortLastPublished": "अंतिम प्रकाशित", + "relationalSortLastSaved": "अंतिम सहेजा गया", + "relationalSortStatus": "स्थिति", + "relationalSortVersion": "संस्करण", + "relationalStatusNotPublished": "प्रकाशित नहीं", + "relationalStatusPublished": "प्रकाशित", + "relationalStatusScheduled": "शेड्यूल किया गया", + "relationalVersionActionPublished": "प्रकाशित", + "relationalVersionActionSaved": "सहेजा गया", + "relationalVersionActionScheduled": "प्रकाशन के लिए शेड्यूल किया गया", + "relationalVersionTooltip": "v{{version}} {{date}} को {{publisher}} द्वारा {{action}}", + "relationalViewingSeeAll": "{{total}} में से {{shown}} आइटम देख रहे हैं. सभी देखें.", + "relationalViewingSeeLess": "{{total}} में से {{shown}} आइटम देख रहे हैं. कम देखें.", + "reloadApplication": "एप्लिकेशन फिर से लोड करें", + "reopen": "फिर से खोलें", + "repeaterAddAnotherField": "एक और फ़ील्ड जोड़ें", + "repeaterAddRowTo": "{{fieldName}} में पंक्ति जोड़ें", + "repeaterCurrencyTooltip": "अपनी स्थानीय सेटिंग \"{{locale}}\" के आधार पर इस मान को विभिन्न मुद्राओं में देखें", + "repeaterEditRow": "{{name}} संपादित करें", + "repeaterFieldLoadFailed": "{{label}} फ़ील्ड लोड करने में विफल। फ़ील्ड Schema देखने के लिए यहां क्लिक करें।", + "repeaterMissingOptionsRich": "{{label}} फ़ील्ड में विकल्प सेटिंग्स मौजूद नहीं हैं। हाँ/नहीं मान जोड़ने के लिए फ़ील्ड संपादित करें।", + "repeaterRemoveRow": "पंक्ति हटाएं", + "repeaterValueBetween": "मान {{min}} और {{max}} के बीच होना चाहिए", + "resetFilters": "फ़िल्टर रीसेट करें", + "resourceType": "संसाधन प्रकार", + "resourceTypeTooltip": "इस फ़िल्टर का उपयोग तब करें जब आप केवल एक ही संसाधन प्रकार के लिए खोज परिणाम देखना चाहते हों, जैसे कोई कंटेंट आइटम, मॉडल (स्कीमा), या कोड फ़ाइल।", + "resumeSession": "सत्र फिर से शुरू करें", + "rightNow": "अभी", + "roleAccessActivityLog": "गतिविधि लॉग", + "roleAccessCode": "कोड (Zesty IDE)", + "roleCanAccessMedia": "मीडिया तक पहुंच सकते हैं और फ़ाइलें जोड़ सकते हैं, लेकिन फ़ाइलें हटा नहीं सकते।", + "roleCannotDeleteUsers": "अन्य उपयोगकर्ताओं को हटा नहीं सकते", + "roleCannotPublish": "कंटेंट प्रकाशित नहीं कर सकते। नया कंटेंट प्रकाशित करने के लिए, योगदानकर्ताओं को प्रकाशन एक्सेस वाले उपयोगकर्ता को वर्कफ़्लो अनुरोध भेजना होगा।", + "roleCanOnlyCreateEdit": "केवल कंटेंट बना और संपादित कर सकते हैं", + "saveFavicon": "फ़ेविकॉन सहेजें", + "schedulePublishButton": "प्रकाशन निर्धारित करें", + "schedulePublishOnLabel": "इस पर प्रकाशित करें", + "schedulePublishPastWarning": "चूँकि चयनित समय वर्तमान या बीती हुई तारीख है, इसे तुरंत प्रकाशित कर दिया जाएगा।", + "schedulePublishSavedInfo": "v{{version}} {{name}} द्वारा {{distance}} सहेजी गई", + "schedulePublishScheduledInfo": "v{{version}} {{timezone}} में {{date}} को प्रकाशित होने के लिए निर्धारित है।", + "schedulePublishTitleSchedule": "प्रकाशन निर्धारित करें", + "schedulePublishTitleUnschedule": "प्रकाशन अनिर्धारित करें", + "schedulePublishUnscheduleButton": "प्रकाशन अनिर्धारित करें", + "schedulePublishUnscheduleInfo": "इससे इस कंटेंट आइटम के अन्य संस्करणों को निर्धारित या प्रकाशित करने की क्षमता सक्षम हो जाएगी", + "searchIn": "इसमें खोजें...", + "searchInstancePlaceholder": "इंस्टेंस खोजें {{shortcut}}", + "searchInstances": "इंस्टेंस खोजें", + "searchNoResults": "आपकी खोज “{{query}}” के लिए कोई परिणाम नहीं मिला", + "searchNoResultsRich": "आपकी खोज \"{{query}}\" के लिए कोई परिणाम नहीं मिला", + "searchNoResultsSuggestion": "अपनी खोज को समायोजित करके देखें। हमारा सुझाव है कि जांच लें कि सभी शब्दों की वर्तनी सही है या अलग कीवर्ड का उपयोग करें।", + "searchPageByUser": " {{user}} द्वारा", + "searchPageCreated": "बनाया गया {{date}}", + "searchPageResults_one": "{{count}} परिणाम", + "searchPageResults_other": "{{count}} परिणाम", + "searchPageResultsFor_one": "\"{{query}}\" के लिए {{count}} परिणाम", + "searchPageResultsFor_other": "\"{{query}}\" के लिए {{count}} परिणाम", + "searchTabs": "टैब खोजें", + "searchUsers": "उपयोगकर्ता खोजें", + "seeAllNotifications": "सभी सूचनाएं देखें", + "seeListBelow": "नीचे सूची देखें", + "selectDateRange": "दिनांक सीमा चुनें...", + "selectFilterPlaceholder": "इस सूची को फ़िल्टर करने के लिए एक शब्द दर्ज करें", + "selectInstanceFavicon": "इंस्टेंस फ़ेविकॉन चुनें", + "selectMetaDescription": "मेटा विवरण चुनें", + "selectMetaDescriptionHelp": "हमारी AI द्वारा आपके लिए जनरेट किए गए 3 मेटा विवरणों में से 1 चुनें।", + "selectMetaTitle": "मेटा शीर्षक चुनें", + "selectMetaTitleHelp": "हमारी AI द्वारा आपके लिए जनरेट किए गए 3 मेटा शीर्षकों में से 1 चुनें।", + "selectModel": "मॉडल चुनें", + "selectModelError": "आगे बढ़ने के लिए कृपया एक मॉडल चुनें।", + "selectNoOptions": "कोई विकल्प नहीं मिला", + "selectPlaceholder": "चुनें", + "selectSearching": "मेल खाते आइटम खोजे जा रहे हैं", + "sessionEndedRedirecting": "आपका सत्र समाप्त हो गया। लॉगिन पर रीडायरेक्ट किया जा रहा है।", + "sortMostRecentlyCreated": "हाल ही में बनाए गए", + "sortMostRecentlyModified": "हाल ही में संशोधित", + "sortValue": "क्रमबद्ध करें: {{value}}", + "stop": "रोकें", + "storedAs": "{{value}} के रूप में संग्रहीत", + "switchAccount": "खाता बदलें", + "switchInstance": "इंस्टेंस बदलें", + "tabActivityLog": "गतिविधि लॉग", + "tabActivityLogSuffix": "{{name}} - गतिविधि लॉग", + "tabAllMedia": "सभी मीडिया", + "tabCustomApp": "कस्टम ऐप", + "tabFontsSuffix": "{{name}} फ़ॉन्ट्स", + "tabMetrics": "मेट्रिक्स", + "tabNewItem": "नया {{modelLabel}} आइटम", + "tabSearchResults": "{{appName}} खोज परिणाम", + "tabSettingsSuffix": "{{name}} सेटिंग्स", + "tabsResults_one": "{{count}} परिणाम", + "tabsResults_other": "{{count}} परिणाम", + "tinymceBlockFormatting": "ब्लॉक फ़ॉर्मेटिंग", + "tinymceBlockquote": "ब्लॉककोट", + "tinymceBulletedList": "बुलेट सूची", + "tinymceCenterAlign": "केंद्र में संरेखित करें", + "tinymceClose": "बंद करें", + "tinymceConstrainProportions": "अनुपात सीमित करें", + "tinymceEmbedSocialMedia": "सोशल मीडिया एम्बेड करें", + "tinymceEmbedSocialMediaPost": "सोशल मीडिया पोस्ट एम्बेड करें", + "tinymceJustify": "जस्टिफाई", + "tinymceLeftAlign": "बाएं संरेखित करें", + "tinymceLists": "सूचियां", + "tinymceNumberedList": "क्रमांकित सूची", + "tinymcePreformatted": "पूर्वप्रारूपित", + "tinymceResizeImage": "इमेज का आकार बदलें", + "tinymceResizeImageDimensions": "इमेज dimensions का आकार बदलें", + "tinymceRightAlign": "दाएं संरेखित करें", + "tinymceSaveItem": "आइटम सहेजें", + "tinymceSelectBynderMedia": "अपने Bynder assets से मीडिया चुनें", + "tinymceSelectUploadedMedia": "अपने अपलोड किए गए assets से मीडिया चुनें", + "tinymceService": "सेवा", + "tinymceSlashBulletedList": "बुलेट सूची", + "tinymceSlashCodeBlock": "कोड ब्लॉक", + "tinymceSlashEmbedSocialMedia": "सोशल मीडिया एम्बेड करें", + "tinymceSlashEmoji": "Emoji", + "tinymceSlashHeading1": "हेडिंग 1", + "tinymceSlashHeading2": "हेडिंग 2", + "tinymceSlashHeading3": "हेडिंग 3", + "tinymceSlashHeading4": "हेडिंग 4", + "tinymceSlashHeading5": "हेडिंग 5", + "tinymceSlashHeading6": "हेडिंग 6", + "tinymceSlashImage": "इमेज", + "tinymceSlashLink": "लिंक", + "tinymceSlashNumberedList": "क्रमांकित सूची", + "tinymceSlashParagraph": "पैराग्राफ", + "tinymceSlashQuote": "उद्धरण", + "tinymceSlashSpecialCharacter": "विशेष अक्षर", + "tinymceSlashTable": "टेबल", + "tinymceSlashTime": "समय", + "tinymceSlashVideo": "वीडियो", + "tinymceTextAlignment": "टेक्स्ट संरेखण", + "tinymceUniquePostId": "अद्वितीय पोस्ट ID", + "tone": "टोन", + "toneIntriguing": "दिलचस्प - जिज्ञासु, रहस्यमय और विचारोत्तेजक", + "toneNameIntriguing": "दिलचस्प", + "toneNamePlayful": "चंचल", + "toneNameProfessional": "पेशेवर", + "toneNameSensational": "सनसनीखेज", + "toneNameSuccinct": "संक्षिप्त", + "tonePlayful": "चंचल - मज़ेदार, हल्का-फुल्का और सनकी", + "toneProfessional": "पेशेवर - गंभीर, औपचारिक और आधिकारिक", + "toneSensational": "सनसनीखेज - साहसिक, नाटकीय और ध्यान खींचने वाला", + "toneSuccinct": "संक्षिप्त - स्पष्ट, तथ्यात्मक, बिना अतिशयोक्ति के", + "toneTooltip": "जनरेट किए गए टेक्स्ट की वांछित शैली और मनोदशा सेट करें", + "topic": "विषय", + "topicPlaceholder": "उदा. Hikes in Washington", + "trySwitchingAccount": "किसी अन्य खाते पर स्विच करके देखें।", + "twoFactorCodeHelp": "आपको यह कोड अपने फोन पर प्राप्त होगा।", + "unableToInviteUsers_one": "{{count}} उपयोगकर्ता को आमंत्रित नहीं किया जा सका", + "unableToInviteUsers_other": "{{count}} उपयोगकर्ताओं को आमंत्रित नहीं किया जा सका", + "unknownUser": "अज्ञात उपयोगकर्ता", + "unpinAll": "सभी अनपिन करें", + "unpinAllTabsTitle": "अधिक देखें मेनू में सभी टैब अनपिन करें?", + "unsavedChangesBody": "कृपया इस टैब को अनपिन करने से पहले अपने परिवर्तनों को सहेजें या छोड़ दें", + "updateFavicon": "फ़ेविकॉन अपडेट करें", + "uuidAutoGeneratedPlaceholder": "UUID फ़ील्ड मान स्वतः उत्पन्न होते हैं", + "uuidFieldReadOnly": "यह फ़ील्ड संपादित नहीं किया जा सकता", + "viewAllLogs": "सभी लॉग देखें", + "viewOpenComment": "खुला कमेंट देखें", + "viewSourceCommit": "सोर्स कोड कमिट देखें", + "viewWebEnginePreview": "WebEngine पूर्वावलोकन (स्टेज) देखें", + "viewYourInstances": "अपने इंस्टेंस देखें", + "welcomeBack": "नमस्ते, फिर से स्वागत है!", + "wordLimit": "शब्द सीमा", + "wordLimitTooltip": "जनरेट किए गए टेक्स्ट की लंबाई नियंत्रित करने के लिए शब्द सीमा सेट करें", + "zestyAccountTitle": "Zesty खाता" +} diff --git a/public/locales/nl-NL/activePreview.json b/public/locales/nl-NL/activePreview.json new file mode 100644 index 0000000000..1fe0b9bb95 --- /dev/null +++ b/public/locales/nl-NL/activePreview.json @@ -0,0 +1,16 @@ +{ + "disconnectedFromPreviewDomain": "Verbinding met voorvertoningsdomein verbroken", + "findingDomain": "Domein zoeken", + "landscapeMode": "Liggende modus", + "loadingRelatedItem": "Gerelateerd item laden", + "meta": "Meta", + "noDevice": "Geen apparaat", + "noTemplate": "Geen sjabloon", + "noTemplateSelected": "Geen sjabloon geselecteerd", + "resolveInvalidFields": "Los ongeldige veldwaarden op om op te slaan en de voorvertoning bij te werken", + "saveToUpdatePreview": "Opslaan om voorvertoning bij te werken", + "saving": "Opslaan...", + "sessionNotActive": "Je sessie is niet actief. Meld je aan bij Zesty.io", + "viewingMetaData": "Metagegevens bekijken voor het item op deze route", + "web": "Web" +} diff --git a/public/locales/nl-NL/blocks.json b/public/locales/nl-NL/blocks.json new file mode 100644 index 0000000000..7517d1e9e9 --- /dev/null +++ b/public/locales/nl-NL/blocks.json @@ -0,0 +1,28 @@ +{ + "addVariantsEmptyStateBody": "Voeg hier je varianten toe. Begin met het maken van je eerste variant.", + "allBlocks": "Alle blokken", + "allBlocksTitle": "Alle blokken", + "blockImageAlt": "Blokafbeelding", + "createBlock": "Blok aanmaken", + "createVariantOf": "Variant maken van {{label}}", + "documentation": "Documentatie", + "emptyItemsListAlt": "Lege lijst met items", + "emptyStateBody": "Blokmodellen bepalen de structuur van een blok, zoals een hero, feature, testimonial, etc.", + "filterBlocks": "Blokken filteren", + "howToCreateBlock": "Hoe maak je een blok aan?", + "howToUseBlocks": "Hoe gebruik je Blokken?", + "introToWebComponents": "Inleiding tot Web Components", + "noResultsAvailable": "Geen resultaten beschikbaar voor \"{{filter}}\"", + "noSearchResultsAlt": "Geen zoekresultaten", + "onboardingStep1Description": "Maak en voeg bewerkbare blokken toe (bijv. Hero, Testimonial, Formulieren, etc.) aan elke bestaande pagina van je website met een paar klikken", + "onboardingStep1Title": "Introductie van Blokken", + "onboardingStep2Description": "Maak een blokmodel aan in Schema en definieer de bewerkbare velden. Verbind deze velden vervolgens in de codesjabloon van je blok.", + "onboardingStep2Title": "Hoe maak je een blok aan?", + "onboardingStep3Description": "Varianten van deze blokken kunnen worden aangemaakt in de Blocks-app en aan webpagina's worden toegevoegd met behulp van een Block Content-veld of met Freestyle.", + "onboardingStep3Title": "Blokvarianten maken & toevoegen aan elke webpagina", + "searchBlocksPlaceholder": "Blokken zoeken", + "startByCreatingBlocks": "Begin met het maken van blokken", + "startCreatingVariantsNow": "Begin nu met het maken van varianten", + "takeProductTour": "Volg de producttour", + "variantName": "Variantnaam" +} diff --git a/public/locales/nl-NL/code.json b/public/locales/nl-NL/code.json new file mode 100644 index 0000000000..bad1af5e43 --- /dev/null +++ b/public/locales/nl-NL/code.json @@ -0,0 +1,135 @@ +{ + "ajaxJsonDescription": "Via Parsley toegankelijk bestand voor het maken van endpoints of aangepaste ervaringen. Deze bestanden moeten worden benoemd met een volledig pad met een extensie zoals /mijn/bestands/pad.json. Het bestand is toegankelijk via hash-dev.preview.zesty.io/mijn/bestands/pad.json. Bestandstypen die kunnen worden gebruikt: css, html, json, js, xml, csv, tsv, xml, yaml, md, svg, rss, ics, vcf, xhtml.", + "allFiles": "Alle bestanden", + "apiDocs": "API-documentatie", + "apiErrorDeletingFile": "Er is een API-fout opgetreden bij het verwijderen van het bestand. {{fileName}}", + "apiErrorLoadingFileVersions": "API-fout bij het laden van bestandsversies", + "auditTrailEmptyHint": "Wanneer dit bestand wordt opgeslagen of gepubliceerd, kun je hier logboeken zien van wanneer en door wie dit is gedaan.", + "auditTrailLoadError": "Niet in staat om het activiteitenlogboek te laden", + "branch": "Branch", + "buildFasterBody": "Ga aan de slag met het bouwen van dynamische websites en applicaties met , de sjabloontaal van Zesty.io. Ontdek onze interactieve voor een snelle praktijkgerichte introductie, of lees meer in onze diepgaande .", + "buildFasterHeading": "Bouw sneller en slimmer met Parsley!", + "changeCombineOrder": "Volgorde van combineren en voorverwerken wijzigen", + "chooseFileType": "Kies een bestandstype", + "closeDrawer": "Lade sluiten {{metaShortcut}}", + "compilesToSiteCss": "Compileert naar {{file}}", + "compilesToSiteJs": "Compileert naar {{file}}", + "couldNotLoadFile": "Kon {{fileType}} {{fileZUID}} niet laden", + "createFile": "Bestand aanmaken", + "createFileError": "Aanmaken van bestand {{name}} mislukt. {{error}}", + "createFileSuccess": "Nieuw bestand {{name}} aangemaakt", + "createNavType": "{{navType}} aanmaken", + "createScript": "Script aanmaken", + "createStylesheet": "Stylesheet aanmaken", + "createView": "View aanmaken", + "cssDescription": "A cascading stylesheet die automatisch wordt samengevoegd in een enkel css-bestand /main.css, dat automatisch wordt opgenomen in de head van webengine-webpagina's. De sorteervolgorde van de samenvoeging kan worden beheerd. Er vindt geen transpilatie plaats.", + "deleteFile": "Bestand verwijderen", + "deleteFileCdnWarning": "Als je een bestand verwijdert, wordt het definitief verwijderd en wordt er een CDN-opschoning (purge) geactiveerd, waardoor de productieomgeving onmiddellijk wordt bijgewerkt.", + "deleteFileError": "Verwijderen van bestand {{fileName}} mislukt. {{error}}", + "deleteFileLabel": "Bestand verwijderen", + "developerResources": "Bronnen voor ontwikkelaars", + "diffVersions": "Versies vergelijken (Diff)", + "editItemContent": "Item-inhoud bewerken", + "editLinkedContent": "Gekoppelde inhoud bewerken", + "editLinkedSchema": "Gekoppeld schema bewerken", + "editRelatedContent": "Gerelateerde inhoud bewerken", + "editRelatedModel": "Gerelateerd model bewerken", + "errorSavingFileSortOrder": "Er is een fout opgetreden bij het opslaan van de sorteervolgorde. Dit ligt hoogstwaarschijnlijk aan onze kant.", + "failedToLoadHeaders": "Laden van headers mislukt. {{status}}", + "fetchDevFilesError": "Laden van instantie {{type}} ontwikkelingsbestanden mislukt. {{status}} | {{error}}", + "fetchFileError": "Laden van bestand mislukt. {{status}} | {{error}}", + "fetchFileVersionsError": "Niet in staat om bestandsversies te laden. {{status}}", + "fetchLiveFilesError": "Laden van instantie {{type}} live-bestanden mislukt. {{status}} | {{error}}", + "fileInformation": "Bestandsinformatie", + "fileListHeaderFileName": "Bestandsnaam", + "fileListHeaderLastSaved": "Laatst opgeslagen", + "fileLocked": "Bestand vergrendeld", + "fileLockedDescriptionRich": "{{firstName}} {{lastName}} bekijkt {{name}} sinds {{formattedDate}}. Ontgrendel dit item om deze waarschuwing te negeren en eventueel de wijzigingen van {{firstName}} te overschrijven.", + "fileName": "Bestandsnaam", + "fileNavHeaderSiteCss": "Site.css", + "fileNavHeaderSiteJs": "Site.js", + "fileNavHeaderViews": "Weergaven", + "fileNavTooltipSiteCss": "Site.css is een dynamisch gegenereerd bestand op basis van de stylesheet-bestanden van de instantie", + "fileNavTooltipSiteJs": "Site.js is een dynamisch gegenereerd bestand op basis van de JavaScript-bestanden van de instantie", + "fileNavTooltipViews": "Views zijn sjabloonbestanden die HTML of verschillende andere MIME-typen kunnen herleiden.", + "fileNotFound": "Bestand kon niet worden gevonden. {{fileZUID}}", + "fileNotFoundToSave": "We hebben het bestand dat je probeert op te slaan niet kunnen vinden.", + "fileSortOrderSaved": "Sorteervolgorde van bestanden is opgeslagen", + "fileType": "Bestandstype", + "fileTypeChoose": "Kies een bestandstype", + "fileTypeCss": "CSS-bestand (css)", + "fileTypeCustom": "Aangepast bestandstype ({{extension}})", + "fileTypeCustomEndpoint": "Aangepast bestandstype/endpoint (gemengde extensies)", + "fileTypeJavaScript": "JavaScript-bestand (js)", + "fileTypeLegacy": "Verouderd bestand (Legacy)", + "fileTypeLess": "LESS-bestand (less)", + "fileTypeModelView": "Model View", + "fileTypeScss": "SCSS-bestand (scss/sass)", + "fileTypeSnippet": "Snippet (html)", + "fileZuid": "Bestand ZUID", + "filterFiles": "Bestanden filteren", + "findingFile": "Bestand zoeken", + "findingFileVersions": "Bestandsversies zoeken", + "headerTitle": "Code", + "instantJsonApi": "Instant JSON API", + "javascriptDescription": "Een javascript-bestand dat automatisch wordt samengevoegd in het enkele bestand /main.js dat automatisch door webengine wordt geladen. Er vindt geen transpilatie plaats.", + "lastEdited": "Laatst bewerkt", + "learnMoreParsleySyntax": "Meer informatie over Parsley-syntaxis", + "learnMoreProcessingFlows": "Meer informatie over verwerkingsstromen", + "lessDescription": "Heeft toegang zu settings > variables. A cascading stylesheet die automatisch wordt samengevoegd in het enkele bestand /main.css. De sorteervolgorde van de samenvoeging en transpilatie kan worden beheerd.", + "linkedContent": "Gekoppelde inhoud", + "linkedContentDescription": "Hieronder worden de drie nieuwste inhoudsitems getoond van het model dat aan deze view is gekoppeld.", + "linkedSchemaBodyText": "Gebruik de onderstaande Parsley-syntaxis om naar de velden van dit model te verwijzen. Dit zal dynamisch linken naar de inhoud van het veld.", + "linkedSchemaTitle": "Gerelateerd modelschema van {{fileName}}", + "live": "Live", + "loadingFileInformation": "Bestandsinformatie laden", + "loadVersion": "Versie laden", + "modelZuid": "Model ZUID", + "moreFileInformation": "Meer bestandsinformatie", + "mustProvideFileName": "Je moet een naam opgeven voor het nieuwe bestand", + "mustSelectFileType": "Je moet een bestandstype selecteren om een nieuw bestand aan te maken", + "newRemoteVersionNotice": "Er is een nieuwe externe versie die nieuwer is dan je lokale wijzigingen", + "noFilesFound": "Geen bestanden gevonden", + "noResultsFor": "Geen resultaten voor \"{{keyword}}\"", + "openDrawer": "Lade openen {{metaShortcut}}", + "openForAdditionalFileInfo": "Openen voor aanvullende bestandsinformatie", + "orderFilesBody": "De weergegeven volgorde is de volgorde waarin bestanden worden verwerkt en samengevoegd tot het dynamisch aangemaakte {{siteFile}}-bestand.", + "orderFilesPublishWarning": "Na het wijzigen van de volgorde moet er een publicatie plaatsvinden om de nieuwe volgorde te verwerken en de wijziging live te zetten.", + "orderFilesSaveOrder": "Volgorde opslaan", + "orderFilesTitle": "Volgorde van {{typePathPart}} wijzigen", + "pleaseAddLeadingSlash": "Voeg een schuine streep (slash) toe aan het begin van het bestandspad. BIJV: /{{name}}", + "previewCssWebpage": "Voorbeeld CSS-pagina", + "previewFileWebpage": "Voorbeeld van {{fileName}}", + "previewInstantJson": "Voorbeeld van {{path}}", + "previewItemWebpage": "Voorbeeld van item-webpagina", + "previewJavascriptWebpage": "Voorbeeld Javascript-pagina", + "previewJson": "JSON-voorbeeld", + "previewPathWebpage": "Voorbeeld van {{path}}", + "publish": "Publiceren", + "publishedVersion": "Gepubliceerd: Versie {{n}}", + "publishFileError": "Publiceren van bestand mislukt. {{status}} | {{error}}", + "publishFileShortcut": "Bestand publiceren {{shortcut}}", + "publishFileSuccess": "{{fileName}} versie {{latestVersion}} gepubliceerd", + "saveAndPublish": "Opslaan & Publiceren", + "saveFileError": "Opslaan van bestand mislukt. {{status}} | {{error}}", + "saveFileShortcut": "Bestand opslaan {{shortcut}}", + "saveFileSuccess": "{{fileName}} opgeslagen", + "saveVersion": "Versie opslaan", + "scssDescription": "Heeft toegang zu settings > variables. A cascading stylesheet die automatisch wordt samengevoegd in het enkele bestand /main.css. De sorteervolgorde van de samenvoeging en transpilatie kan worden beheerd.", + "searchFiles": "Bestanden zoeken", + "simplifyWorkflowBody": "Ontdek onze gestroomlijnde workflows en verhoog je efficiëntie tijdens het ontwikkelen. Bekijk hoe dit werkt met onze .", + "simplifyWorkflowHeading": "Vereenvoudig je workflow: Ingebouwde voorverwerking! 💻", + "snippetDescription": "Een via Parsley toegankelijk bestand dat bedoeld is om veelgebruikte code te abstraheren of om de bestandsopbouw te organiseren. Voorbeelden: slider, footer, header. Deze kunnen ook binnen each-loops worden gebruikt.", + "startingCodeEditor": "Code-editor starten", + "unableToLoadFileLogs": "Niet in staat om de logboeken van het codebestand te laden", + "unknown": "Onbekend", + "unlock": "Ontgrendelen", + "unsavedChangesDetail": "Je hebt onopgeslagen wijzigingen die verloren gaan als je deze pagina verlaat.", + "versionLabel": "Versie {{n}}", + "versionPublishedByUser": "v{{n}} gepubliceerd op {{date}} door {{user}}", + "versionSavedByUser": "v{{n}} opgeslagen op {{date}} door {{user}}", + "viewingVersion": "Weergave: Versie {{n}}", + "viewNotFound": "View niet gevonden", + "webEngineFileLink": "WebEngine {{fileName}}-link", + "webEngineLink": "WebEngine-link" +} diff --git a/public/locales/nl-NL/common.json b/public/locales/nl-NL/common.json new file mode 100644 index 0000000000..337bdc3088 --- /dev/null +++ b/public/locales/nl-NL/common.json @@ -0,0 +1,74 @@ +{ + "add": "Toevoegen", + "apis": "API's", + "back": "Terug", + "cancel": "Annuleren", + "clear": "Wissen", + "code": "Code", + "codeFile": "Codebestand", + "codeFiles": "Codebestanden", + "comment": "Reageren", + "content": "Inhoud", + "contentItems": "Inhoudsitems", + "copied": "Gekopieerd", + "copy": "Kopiëren", + "create": "Aanmaken", + "createdBy": "Aangemaakt door", + "dateAfterValue": "Na {{date}}", + "dateAtTime": "op {{date}} om {{time}}", + "dateBeforeValue": "Vóór {{date}}", + "dateOnValue": "Op {{date}}", + "delete": "Verwijderen", + "dev": "Dev", + "discard": "Verwerpen", + "domains": "Domeinen", + "done": "Gereed", + "edit": "Bewerken", + "getStarted": "Aan de slag", + "goBack": "Ga terug", + "graphqlDocs": "GraphQL-documentatie", + "instanceApiDocs": "Instance API-documentatie", + "invalidDate": "Ongeldige datum", + "last12Months": "Laatste 12 maanden", + "last30Days": "Laatste 30 dagen", + "last3Months": "Laatste 3 maanden", + "last7Days": "Laatste 7 dagen", + "locales": "Taalinstellingen", + "manage": "Beheren", + "media": "Media", + "mediaItems": "Media-items", + "mediaRequests": "Mediaverzoeken", + "model": "Model", + "models": "Modellen", + "more": "Meer", + "name": "Naam", + "next": "Volgende", + "no": "Nee", + "noUsersFound": "Geen gebruikers gevonden", + "open": "Openen", + "parsleyDocs": "Parsley-documentatie", + "platformDocs": "Platformdocumentatie", + "preview": "Voorbeeld", + "prod": "Prod", + "remove": "Verwijderen", + "replace": "Vervangen", + "reply": "Beantwoorden", + "save": "Opslaan", + "search": "Zoeken", + "searchAgain": "Opnieuw zoeken", + "sortNameAToZ": "Naam (A tot Z)", + "sortNameZToA": "Naam (Z tot A)", + "stage": "Testomgeving", + "support": "Ondersteuning", + "teams": "Teams", + "today": "Vandaag", + "unsavedChanges": "Niet-opgeslagen wijzigingen", + "update": "Bijwerken", + "upload": "Uploaden", + "usage": "Gebruik", + "users": "Gebruikers", + "view": "Bekijken", + "webhooks": "Webhooks", + "yes": "Ja", + "yesterday": "Gisteren" +} diff --git a/public/locales/nl-NL/content.json b/public/locales/nl-NL/content.json new file mode 100644 index 0000000000..7293b09326 --- /dev/null +++ b/public/locales/nl-NL/content.json @@ -0,0 +1,730 @@ +{ + "addFieldsInSchemaButton": "Velden toevoegen in schema", + "addFieldsTitle": "Velden aan uw model toevoegen", + "analyticsAuthenticateGoogle": "Authenticeren met Google", + "analyticsAvgTimeLabel": "gem. tijd", + "analyticsBarCountry": "Land", + "analyticsBarSource": "Bron", + "analyticsByDay": "{{type}} per dag", + "analyticsChangeAccount": "Google-account wijzigen", + "analyticsChartAvgEngagement": "Gem. interactietijd", + "analyticsColStats": "Statistieken", + "analyticsComparePage": "Pagina vergelijken", + "analyticsComparePageBody": "Selecteer een pagina waarmee je je huidige pagina wilt vergelijken", + "analyticsConnectBody": "Ontdek waar het verkeer van je pagina's vandaan komt en hoe het verandert op basis van wijzigingen in je content. Authenticeer om te beginnen met het Google-account waaraan je Google Analytics is gekoppeld.", + "analyticsConnectedAccount": "Je bent momenteel verbonden met het volgende Google-account.", + "analyticsConnectedSubtitle": "Maak je klaar om inzichten te krijgen in hoe je contentwijzigingen je paginaverkeer en meer hebben beïnvloed!", + "analyticsConnectedTitle": "Gefeliciteerd {{name}}! Je bent succesvol verbonden met Google Analytics", + "analyticsConnectErrorSubtitle": "Dit kan komen doordat je een Google-account hebt geselecteerd waarvoor Google Analytics niet is ingesteld.", + "analyticsConnectErrorTitle": "Oeps, het is ons niet gelukt om succesvol verbinding te maken met Google Analytics", + "analyticsConnectTitle": "Verbinden met Google Analytics", + "analyticsContactSupport": "Contact opnemen met support", + "analyticsDashboard": "Dashboard", + "analyticsDisconnectAccount": "Account loskoppelen", + "analyticsDisconnectBody": "Loskoppelen betekent dat je voor geen enkel content-item in Zesty analyses kunt bekijken.", + "analyticsDisconnectTitle": "Google Analytics-account loskoppelen?", + "analyticsGaSettings": "GA-instellingen", + "analyticsGoogleIconAlt": "Google Analytics-pictogram", + "analyticsItemMetaLine": "{{label}} • {{time}} • door {{user}}", + "analyticsItemNotExist": "Dit item bestaat niet in je instance", + "analyticsItemPublished": "Item gepubliceerd", + "analyticsLearnMore": "Meer informatie", + "analyticsLegendNew": "Nieuw", + "analyticsLegendOther": "Overige", + "analyticsLegendReturning": "Terugkerend", + "analyticsMetricAvgDuration": "Gem. duur", + "analyticsMetricAvgDurationDesc": "Sessieduur is het tijdsbestek waarin er gebruikersinteracties op de website plaatsvinden.", + "analyticsMetricAvgEngagement": "Gemiddelde interactietijd", + "analyticsMetricAvgEngagementDesc": "Gemiddelde interactietijd is de gemiddelde tijd dat je website in focus was in de browser van een gebruiker of dat een mobiele app op de voorgrond stond op het apparaat van een gebruiker.", + "analyticsMetricBounceRate": "Bouncepercentage", + "analyticsMetricBounceRateDesc": "Het bouncepercentage is het percentage mensen dat op een pagina belandt en weggaat zonder een specifieke actie uit te voeren.", + "analyticsMetricConversions": "Conversies", + "analyticsMetricConversionsDesc": "Een conversie is een gebruikersactie die je meetelt omdat je deze belangrijk vindt, zoals een aankoop, het voltooien van een gamelevel of scrollactiviteit op een website of app.", + "analyticsMetricEvents": "Gebeurtenissen", + "analyticsMetricSessions": "Sessies", + "analyticsMetricSessionsDesc": "Een sessie in Google Analytics is een periode waarin een gebruiker interactie heeft met je website.", + "analyticsMetricViews": "Weergaven", + "analyticsMetricViewsDesc": "Een paginaweergave wordt gedefinieerd als een weergave van een pagina op je site die wordt bijgehouden door de Analytics-trackingcode. Als een gebruiker na het bereiken van de pagina op herladen klikt, of naar een andere pagina navigeert en vervolgens terugkeert naar de oorspronkelijke pagina, dan telt dit als een extra paginaweergave.", + "analyticsNewUsersDesc": "Nieuwe gebruikers zijn gebruikers die je website of app nog nooit eerder hebben bezocht", + "analyticsNewUsersForRange": "Nieuwe gebruikers voor {{range}}", + "analyticsNewVsReturning": "Nieuwe vs. terugkerende gebruikers", + "analyticsPageSettingsTitle": "Instellingen pagina-analyse", + "analyticsPresetQuarterToDate": "Kwartaal tot nu", + "analyticsPresetThisWeek": "Deze week (zo - vandaag)", + "analyticsPresetThisYear": "Dit jaar (jan - vandaag)", + "analyticsPropertiesCount": "{{count}} properties", + "analyticsPropertiesCount_one": "{{count}} property", + "analyticsPropertiesCount_other": "{{count}} properties", + "analyticsRangeDayBeforeYesterday": "Eergisteren", + "analyticsRangeLast12Months": "Afgelopen 12 maanden", + "analyticsRangeLast14Days": "Afgelopen 14 dagen", + "analyticsRangeLast30Days": "Afgelopen 30 dagen", + "analyticsRangeLast3Months": "Afgelopen 3 maanden", + "analyticsRangeLast7Days": "Afgelopen 7 dagen", + "analyticsRangeLastQuarter": "Vorig kwartaal", + "analyticsRangeLastWeek": "Vorige week", + "analyticsRangeLastYear": "Vorig jaar", + "analyticsRangePrior12Months": "Vorige 12 maanden", + "analyticsRangePrior14Days": "Vorige 14 dagen", + "analyticsRangePrior30Days": "Vorige 30 dagen", + "analyticsRangePrior3Months": "Vorige 3 maanden", + "analyticsRangePrior7Days": "Vorige 7 dagen", + "analyticsRangeThisQuarter": "Dit kwartaal", + "analyticsRangeThisWeek": "Deze week", + "analyticsRangeThisYear": "Dit jaar", + "analyticsRecentPublishes": "Recente publicaties", + "analyticsReturningUsersDesc": "Terugkerende gebruikers zijn gebruikers die je website of app nog nooit eerder hebben bezocht", + "analyticsReturningUsersForRange": "Terugkerende gebruikers voor {{range}}", + "analyticsSearchProperties": "Google Analytics-properties zoeken", + "analyticsSearchResults": "Zoekresultaten", + "analyticsSelectProperty": "Selecteer een Google Analytics-property", + "analyticsSelectPropertyBody": "Selecteer de Google Analytics-property waarvoor je analyses en inzichten wilt zien", + "analyticsSourceIncreased": "{{source}}-gebruikers namen toe met {{percentage}}% — {{range}}", + "analyticsTabGainers": "Stijgers", + "analyticsTabLatestPublishes": "Laatste publicaties", + "analyticsTabLosers": "Dalers", + "analyticsTabMostPopular": "Populairst", + "analyticsTabRecentEdits": "Recente bewerkingen", + "analyticsTotalSessions": "Totaal aantal sessies", + "analyticsTotalUsers": "Totaal aantal gebruikers", + "analyticsTryAgain": "Opnieuw proberen", + "analyticsUnableToLoadMessage": "Dit kan komen door een slechte internetverbinding, dus probeer het opnieuw. Als je het probleem nog steeds niet kunt oplossen, neem dan contact op met support.", + "analyticsUnableToLoadTitle": "Kan analysegegevens niet laden", + "analyticsUsers": "Gebruikers", + "analyticsUsersBy": "Gebruikers per {{type}}", + "analyticsUsersLabel": "gebruikers", + "analyticsViewVersion": "Versie {{version}} weergeven", + "apiCodeIdLabel": "API / Parsley code-ID", + "apiCodeIdTooltip": "Dit verschijnt als de sleutel in API-antwoorden.", + "blockCreateVariant": "Variant maken", + "blockSearchAgain": "Opnieuw zoeken", + "blockSearchNoResults": "Je zoekopdracht \"{{search}}\" heeft geen resultaten opgeleverd", + "blockSearchNoResultsHint": "Pas je zoekopdracht aan. We raden aan te controleren of alle woorden correct gespeld zijn of andere zoekwoorden te proberen.", + "blockSearchVariants": "Varianten zoeken", + "blocksReferencedInCodeOrFreestyle": "Blokken waarnaar verwezen wordt in code of Freestyle", + "blockTabCode": "Code", + "blockTabInfo": "Info", + "blockTabVariants": "Varianten", + "booleanHide": "Verbergen", + "booleanShow": "Weergeven", + "browse": "Bladeren", + "closeInspectorPanelAriaLabel": "Inspectorpaneel sluiten", + "codeSampleBaseTemplate": "Basissjabloon", + "codeSampleBaseTemplateTip": "Gebruikt het basissjabloon om het blok weer te geven. Dit is het standaardsjabloon dat wordt toegepast wanneer geen specifiek sjabloon is geselecteerd.", + "codeSampleBaseTemplateVersion": "Basissjabloon met versie", + "codeSampleBaseTemplateVersionTip": "Gebruikt het basissjabloon om het blok weer te geven met een specifiek versienummer. Door de versieparameter toe te voegen, kun je een bepaalde versie van het sjabloon targeten.", + "codeSampleBlockSelector": "Blokkiezer", + "codeSampleBlockSelectorTip": "Gebruikt de waarde van een blokkiezerveld. Vervang \"block_selector_field\" door de werkelijke naam van het blokkiezerveld tijdens het maken van het model.", + "codeSampleSpecificVariant": "Specifieke blokvariant", + "codeSampleSpecificVariantTip": "Gebruikt een specifieke variant van het blok. De variantparameter richt zich via de ZUID op een bepaalde variatie van het blok.", + "connectItem": "Item koppelen", + "contentFetchResourceFailed": "Kan resource niet ophalen. {{status}}", + "contentSearchItemFailed": "Kan item niet zoeken: {{error}}", + "correctFieldsBeforeSaving_one": "Corrigeer het volgende {{count}} veld voordat u opslaat", + "correctFieldsBeforeSaving_other": "Corrigeer de volgende {{count}} velden voordat u opslaat", + "csvImportColumnMismatch": "Er is een verschil in het aantal kolommen in het CSV-bestand", + "csvImportCreateItems": "Items aanmaken", + "csvImportDuplicateColumns": "Je hebt het gebruik van deze kolommen gedupliceerd: {{columns}}", + "csvImportEmptyFile": "Je hebt een leeg CSV-bestand geïmporteerd", + "csvImportErrorsCount": "Fouten {{count}}", + "csvImportErrorsCount_one": "Fout {{count}}", + "csvImportErrorsCount_other": "Fouten {{count}}", + "csvImportFailureCreating": "Aanmaken van item mislukt: {{error}}", + "csvImportImportedCount": "{{count}} van {{total}} geïmporteerd", + "csvImportImportedCount_one": "{{count}} van {{total}} geïmporteerd", + "csvImportImportedCount_other": "{{count}} van {{total}} geïmporteerd", + "csvImportNone": "geen", + "csvImportNotCsvFile": "Je hebt een bestand geselecteerd dat geen CSV is", + "csvImportOpenFile": "CSV-bestand openen", + "csvImportResolveDuplicates": "Je moet conflicten met dubbele kolommen oplossen", + "csvImportSelectPathPart": "Je moet een kolom selecteren voor Path Part", + "csvSettingsAllowedParams": "Toegestane queryparameters (komma-gescheiden)", + "csvSettingsAllowedParamsDesc": "Vermeld alleen komma-gescheiden parameternamen. Neem geen waarden, ampersands, isgelijktekens of spaties op.", + "csvSettingsAutoPriority": "Prioriteit automatisch instellen", + "csvSettingsCanonicalNotEnabled": "Canonical tags zijn niet ingeschakeld. Lees voor meer informatie", + "csvSettingsCanonicalOff": "Uit", + "csvSettingsCanonicalOnAllow": "Aan - bepaalde parameters toestaan", + "csvSettingsCanonicalOnCustom": "Aan - aangepast pad of aangepaste URL", + "csvSettingsCanonicalOnIgnore": "Aan (negeert queryparameters)", + "csvSettingsCustomPathDesc": "Voor aangepaste paden: begin met een slash. Voor aangepaste URL's: begin met http:// of https://", + "csvSettingsCustomPathLabel": "Aangepaste padwaarde of URL", + "csvSettingsMetaLinkText": "Meta-linktekst", + "csvSettingsNoSitemap": "Niet weergeven in sitemap", + "csvSettingsParentZuid": "Bovenliggende ZUID", + "csvSettingsPathPart": "Padonderdeel", + "currencyLocaleTooltip": "Bekijk deze waarde in verschillende valuta's op basis van uw landinstelling \"{{locale}}\"", + "deleteItemFailure": "Item verwijderen mislukt: {{statusText}}", + "deleteItemSuccess": "Item succesvol verwijderd", + "disconnect": "Loskoppelen", + "editFieldButton": "Veld bewerken", + "editorTypeHtml": "HTML", + "editorTypeInline": "Inline", + "editorTypeMarkdown": "Markdown", + "editorTypeWysiwyg": "WYSIWYG", + "elementNotEditableHere": "Dit element kan hier niet worden bewerkt.", + "emptyCreateModel": "Maak een nieuw contentmodel", + "errorPublishing": "Fout bij publiceren van {{title}}", + "errorScheduling": "Fout bij inplannen van {{title}}", + "errorUnpublishing": "Fout bij ongedaan maken van publicatie van {{title}}", + "errorUnschedulingVersion": "Fout bij annuleren van inplanning voor versie {{version}}", + "exceedingMaxLength_one": "{{count}} teken te veel.", + "exceedingMaxLength_other": "{{count}} tekens te veel.", + "failedFetchItemPublishing": "Ophalen van itempublicatie mislukt: {{error}}", + "failedFetchItemPublishings": "{{status}}: Ophalen van itempublicaties mislukt: {{error}}", + "failedFetchItemPublishingsError": "Ophalen van itempublicaties mislukt: {{error}}", + "failedFetchModelPublishings": "Ophalen van model-itempublicaties mislukt: {{error}}", + "failedLoadingField": "Laden van veld {{label}} mislukt. Klik hier om het veldschema te bekijken.", + "fieldAddedOnLabel": "Veld toegevoegd op", + "fieldMetaArticleWriterDescription": "Uitgebreide artikelinhoud", + "fieldMetaBlockSelectorDescription": "Een herbruikbaar contentblok", + "fieldMetaColorDescription": "Een kleurwaarde", + "fieldMetaCurrencyDescription": "Monetaire waarden", + "fieldMetaDateDescription": "Een kalenderdatum", + "fieldMetaDatetimeDescription": "Een datum en tijd", + "fieldMetaDropdownDescription": "Eén keuze uit een lijst", + "fieldMetaImagesDescription": "Media uit de mediabibliotheek", + "fieldMetaInternalLinkDescription": "Een link naar een andere pagina", + "fieldMetaLinkDescription": "Een externe URL", + "fieldMetaMarkdownDescription": "Tekst met Markdown-opmaak", + "fieldMetaNumberDescription": "Gehele of decimale getallen", + "fieldMetaOneToManyDescription": "Links naar gerelateerde items", + "fieldMetaOneToOneDescription": "Een link naar één gerelateerd item", + "fieldMetaRepeaterDescription": "Een herhalende groep velden", + "fieldMetaSortDescription": "Een handmatige sorteervolgorde", + "fieldMetaTextareaDescription": "Eenvoudige tekst met meerdere regels", + "fieldMetaTextDescription": "Titels, namen en koppen", + "fieldMetaUuidDescription": "Een unieke identificatie", + "fieldMetaWysiwygDescription": "Opgemaakte tekst", + "fieldMetaYesNoDescription": "Een ja / nee-schakelaar", + "fieldTypeLabel": "{{type}}-veld", + "fieldZuidLabel": "Veld-ZUID", + "fieldZuidTooltip": "Unieke hash die aan elk veld is toegewezen. Deze kan worden gebruikt om via onze API toegang te krijgen tot de informatie van een veld.", + "footerTagline": "Agentic Studio door Content.One", + "hideDialogHideBody1": "Hiermee wordt het content-item {{label}} verplaatst van het paginagedeelte naar het gedeelte met verborgen items hieronder. We raden aan deze functie alleen te gebruiken om je content-navigatieboom op te ruimen met items die je niet vaak gebruikt.", + "hideDialogHideBody2": "Hiermee worden geen artikelen verborgen op je live website of app.", + "hideDialogHideButton": "{{label}} verbergen", + "hideDialogHideTitle": "{{label}} verbergen?", + "hideDialogUnhideBody": "Hiermee wordt het content-item {{label}} verplaatst van het gedeelte met verborgen items naar het paginagedeelte hierboven.", + "hideDialogUnhideButton": "{{label}} weergeven", + "hideDialogUnhideTitle": "{{label}} weergeven?", + "invalidFieldValuesTitle": "Item kan niet worden opgeslagen vanwege ongeldige veldwaarden.", + "itemCreateAddNew": "Aanmaken en nieuw toevoegen", + "itemCreateCannotSaveError": "Kan niet opslaan: {{error}}", + "itemCreateCreatedItem": "Item aangemaakt: {{name}}", + "itemCreateImproveWithAI": "Verbeteren met AI", + "itemCreateLoading": "Nieuw item aanmaken", + "itemCreatePublishAddNew": "Aanmaken, publiceren en nieuw toevoegen", + "itemCreatePublishNow": "Aanmaken en nu publiceren", + "itemCreateSchedulePublish": "Aanmaken en publicatie plannen", + "itemCreateSchedulePublishAddNew": "Aanmaken, publicatie plannen en nieuw toevoegen", + "itemCreateTitleItem": "{{label}}-item aanmaken", + "itemCreateTitleVariant": "Variant aanmaken", + "itemCreateUnknownIssue": "Onbekend probleem bij het aanmaken van een nieuw item", + "itemEditActions": "Acties", + "itemEditAddStatus": "Status toevoegen", + "itemEditAlsoPublishRelatedItems": "Ook gerelateerde items publiceren", + "itemEditAutomatedNavigationOrder": "Automatische navigatievolgorde", + "itemEditAutomatedNavigationOrderTooltip": "Automatische navigatievolgorde bepaalt de uitvoer van de automatische parsley {{navigation}} en {{sectionlinks}}. Dit kan ook worden gebruikt in een each-loop, zoals: {{each items as items sort by z.sort}} calls.", + "itemEditAvailableInLoops": "Beschikbaar in loops", + "itemEditAvailableInLoopsTooltip": "Bepaalt of dit item beschikbaar is in Parsley-loops. Een veelvoorkomend voorbeeld is een blogbericht als item op een artikellijstpagina tonen.", + "itemEditByUser": "door {{name}}", + "itemEditCannotPublishStatus": "Kan niet publiceren: \"{{title}}\". Heeft geen status die publiceren toestaat", + "itemEditCannotSaveTitle": "Kan niet opslaan: {{title}}", + "itemEditCannotSaveTooManySelected": "Kan veld niet opslaan. Verminder het totale aantal geselecteerde items.", + "itemEditCannotSaveValueTooLong": "Kan veld niet opslaan. Waarde is te lang.", + "itemEditCannotSaveWithError": "Kan niet opslaan: {{title}} - {{error}}", + "itemEditCdnDescription": "Forceer de CDN om de cache voor dit item te vernieuwen. CDN-caching kan enkele seconden tot minuten duren terwijl het item opnieuw wordt gecachet over het hele wereldwijde netwerk.", + "itemEditCdnPurgeError": "Er was een probleem bij het legen van de CDN-cache", + "itemEditCdnPurgeSuccess": "Het item is uit de CDN-cache verwijderd", + "itemEditCdnTitle": "CDN", + "itemEditCloseInfoBar": "Infobalk sluiten", + "itemEditContinueEditing": "Doorgaan met bewerken", + "itemEditCreatedAt": "Aangemaakt op", + "itemEditDeleteConfirmTitle": "Weet je zeker dat je het item wilt verwijderen:\n{{title}}", + "itemEditDeleteContentItemDescription": "Als je dit item verwijdert, wordt het van alle locaties op je site verwijderd en is het niet meer beschikbaar voor API-verzoeken. Dit kan niet ongedaan worden gemaakt.", + "itemEditDeleteContentItemTitle": "Contentitem verwijderen", + "itemEditDeletedNotFound": "Item is verwijderd", + "itemEditDeleteItem": "Item verwijderen", + "itemEditDeleteThing": "{{thing}} verwijderen", + "itemEditDeleteVariant": "Variant verwijderen", + "itemEditDeleteWidgetDescription": "Deze content verwijderen? Deze wordt van alle locaties op je site verwijderd en is niet meer beschikbaar voor API-verzoeken.", + "itemEditDontSave": "Niet opslaan", + "itemEditDraftHistoryTitle": "Conceptgeschiedenis", + "itemEditDraftPreviewVersion": "Conceptvoorbeeld - v{{version}}", + "itemEditDuplicateContentItemTitle": "Contentitem dupliceren", + "itemEditDuplicateDescription": "Dit maakt direct een kopie van dit item en slaat die op.", + "itemEditDuplicateFailed": "Item dupliceren mislukt.", + "itemEditDuplicateItem": "Item dupliceren", + "itemEditDuplicateVariant": "Variant dupliceren", + "itemEditEditCode": "Code bewerken", + "itemEditEditStatuses": "Statussen bewerken", + "itemEditFailedFetchNav": "Navigatie ophalen mislukt", + "itemEditFailedLoadFields": "Velden laden mislukt", + "itemEditFetchingPublishings": "Publicaties ophalen", + "itemEditGoOffline": "Offline halen", + "itemEditGoOnline": "Online zetten", + "itemEditInfoTitle": "Informatie", + "itemEditInstantApi": "Directe API", + "itemEditItem": "Onderdeel", + "itemEditItemLockedDescription": "{{name}} bekijkt dit item sinds {{viewedAt}}. Ontgrendel dit item om deze waarschuwing te negeren en mogelijk de wijzigingen van {{firstName}} te overschrijven.", + "itemEditItemLockedTitle": "Item vergrendeld", + "itemEditLinksTitle": "Links", + "itemEditLive": "Actief", + "itemEditLivePublished": "Live gepubliceerd", + "itemEditManagePublishState": "Publicatiestatus beheren", + "itemEditManagePublishStatus": "Publicatiestatus beheren", + "itemEditMetaAddImage": "Meta-afbeelding toevoegen", + "itemEditMetaAddIncomingPath": "Inkomend pad toevoegen", + "itemEditMetaAdvancedSettings": "Geavanceerde instellingen", + "itemEditMetaAdvancedSettingsDescription": "Optimaliseer de SEO van je contentitem verder", + "itemEditMetaAiAssistedPrimary": "Ja, verbeteren met AI Meta Data Assistant", + "itemEditMetaAiAssistedSecondary": "Onze AI scant je content en genereert je metadata", + "itemEditMetaAiPromptDatasetSuffix": "met interne contentzoekfunctie.", + "itemEditMetaAiPromptDescriptionPrefix": "Onze AI Assistant scant je content en verbetert je metatitel en beschrijving om te helpen", + "itemEditMetaAiPromptSeoSuffix": "de zichtbaarheid in zoekmachines te verbeteren.", + "itemEditMetaAiPromptTitle": "AI je metadata laten schrijven?", + "itemEditMetaApiFailedTryAgain": "API heeft geen gegevens teruggegeven. Probeer opnieuw.", + "itemEditMetaApiFailedWithStatus": "API heeft geen gegevens teruggegeven {{status}}", + "itemEditMetaCanonicalAllowedParameters": "Toegestane queryparameters (komma-gescheiden)", + "itemEditMetaCanonicalAllowedParametersDescription": "Vermeld alleen parameternamen gescheiden door komma. Neem geen waarden, ampersands, gelijktekens of spaties op.", + "itemEditMetaCanonicalAllowedParametersPlaceholder": "pagina,categorie", + "itemEditMetaCanonicalCustomPath": "Aangepaste padwaarde of URL", + "itemEditMetaCanonicalCustomPathDescription": "Voor aangepaste paden: begin met een slash. Voor aangepaste URL: begin met http:// of https://", + "itemEditMetaCanonicalCustomPathPlaceholder": "/pagina/voorbeeld/ of https://voorbeeld.com/", + "itemEditMetaCanonicalEnableDocsLink": "Canonical tags inschakelen", + "itemEditMetaCanonicalNotEnabled": "Canonical tags zijn niet ingeschakeld. Lees voor meer informatie", + "itemEditMetaCanonicalOff": "Uit", + "itemEditMetaCanonicalOnAllowParameters": "Aan - bepaalde parameters toestaan", + "itemEditMetaCanonicalOnCustomPath": "Aan - aangepast pad of aangepaste URL", + "itemEditMetaCanonicalOnIgnoreQuery": "Aan (negeert queryparameters)", + "itemEditMetaCanonicalTag": "Canonical tag", + "itemEditMetaCanonicalTagTooltip": "Canonical tags helpen zoekmachines gezaghebbende links te begrijpen en kunnen dubbele content voorkomen. Zesty.io maakt tags automatisch op aanvraag op basis van je instellingen.", + "itemEditMetaContentAndMetaMatchedWords": "Overeenkomende woorden in content en meta", + "itemEditMetaCustomizeImage": "Afbeelding aanpassen", + "itemEditMetaDeleteRedirect": "Redirect verwijderen", + "itemEditMetaDescription": "Metabeschrijving", + "itemEditMetaDescriptionFoundLeftGuillemet": "Teken << gevonden. Deze speciale tekens zijn niet toegestaan in metabeschrijvingen.", + "itemEditMetaDescriptionFoundOeLigature": "OE-ligatuur gevonden. Deze speciale tekens zijn niet toegestaan in metabeschrijvingen.", + "itemEditMetaDescriptionFoundRightGuillemet": "Teken >> gevonden. Deze speciale tekens zijn niet toegestaan in metabeschrijvingen.", + "itemEditMetaDescriptionFoundSmallOeLigature": "oe-ligatuur gevonden. Deze speciale tekens zijn niet toegestaan in metabeschrijvingen.", + "itemEditMetaDescriptionFoundSmartDoubleQuotes": "Slimme dubbele aanhalingstekens van Microsoft of apostrof gevonden. Deze speciale tekens zijn niet toegestaan in metabeschrijvingen omdat ze verkeerd kunnen worden weergegeven. Gebruik rechte aanhalingstekens.", + "itemEditMetaDescriptionFoundSmartSingleQuotes": "Slimme enkele aanhalingstekens van Microsoft of apostrof gevonden. Deze speciale tekens zijn niet toegestaan in metabeschrijvingen omdat ze verkeerd kunnen worden weergegeven. Gebruik rechte aanhalingstekens.", + "itemEditMetaDescriptionPlaceholder": "Dit is de beschrijving die zoekmachines in hun resultaten moeten gebruiken", + "itemEditMetaDescriptionTooltip": "Deze beschrijving verschijnt als tekstfragment onder de titel in zoekmachines en socialmediavoorbeelden. De ideale lengte voor een metabeschrijving is 50 tot 160 tekens.", + "itemEditMetaEditRedirect": "Redirect bewerken", + "itemEditMetaFilterWords": "Woorden filteren", + "itemEditMetaHttpCode": "HTTP-code", + "itemEditMetaImage": "Meta-afbeelding", + "itemEditMetaImageFileExtensionsError": "Alleen bestanden met de volgende extensies zijn toegestaan: .png, .jpg, .jpeg, .svg, .gif, .tif, .webp, .avif", + "itemEditMetaImageTooltip": "Deze afbeelding verschijnt in zoekmachines en socialmediavoorbeelden. Aanbevolen is minimaal 1200px bij 630px met een verhouding van 1.91:1.", + "itemEditMetaIncomingPath": "Inkomend pad", + "itemEditMetaIncomingRedirects": "Inkomende redirects", + "itemEditMetaIncomingRedirectsDescription": "Beheer redirects die naar dit contentitem verwijzen", + "itemEditMetaKeywords": "Meta-trefwoorden", + "itemEditMetaKeywordsPlaceholder": "komma, gescheiden, trefwoorden", + "itemEditMetaKeywordsTooltip": "Trefwoorden zijn door komma gescheiden woorden of zinnen die je pagina beschrijven. In 2011 wees Google trefwoorden af; trefwoorden worden alleen tegen je paginaranking gebruikt. Gebruik ze voorzichtig.", + "itemEditMetaManualPrimary": "Nee, ik verbeter en bewerk het zelf", + "itemEditMetaManualSecondary": "Perfect als je al weet welke metadata je wilt", + "itemEditMetaMostMentionedWords": "Meest genoemde woorden in contentitem", + "itemEditMetaMostMentionedWordsDescription": "Controleer of je focus-trefwoorden minimaal 2 keer voorkomen.", + "itemEditMetaNavigationLinkText": "Navigatielinktekst", + "itemEditMetaNavigationLinkTextPlaceholder": "Deze tekst wordt gebruikt in applicatienavigatie", + "itemEditMetaNavigationLinkTextTooltip": "De titel van dit item die verschijnt in de Zesty-navigatie en in programmatisch gegenereerde navigatie binnen de Parsley navigation()-functie.", + "itemEditMetaNoMatchingWords": "Geen overeenkomende woorden", + "itemEditMetaNonFillerWords": "Niet-vulwoorden", + "itemEditMetaNoRepeatedWords": "Geen woorden in je contentitem komen 2 of meer keer voor", + "itemEditMetaOgDescriptionTooltip": "Deze titel verschijnt in Open Graph-socialmediavoorbeelden (bijv. Facebook) onder de titel.", + "itemEditMetaOgTitleTooltip": "Deze titel verschijnt in Open Graph-socialmediavoorbeelden (bijv. Facebook).", + "itemEditMetaPageParent": "Bovenliggende pagina", + "itemEditMetaPageParentTooltip": "Stel in onder welke pagina de pagina van dit contentitem wordt genest. Dit beïnvloedt automatisch gegenereerde navigatie en de URL-structuur voor deze pagina.", + "itemEditMetaParentMissing": "Bovenliggende pagina bestaat niet of is verwijderd", + "itemEditMetaSeeLess": "Minder weergeven", + "itemEditMetaSeeMore": "Meer weergeven", + "itemEditMetaSeoOpenGraphDescription": "Geef de titel en beschrijving van deze pagina op. Rechts zie je hoe ze eruitzien in zoekresultaten (SERP) en socialmediacontent.", + "itemEditMetaSeoOpenGraphSettings": "SEO- en Open Graph-instellingen", + "itemEditMetaSitemapAutomaticallySetPriority": "Prioriteit automatisch instellen", + "itemEditMetaSitemapDoNotDisplay": "Niet weergeven in sitemap", + "itemEditMetaSitemapPriority": "Sitemapprioriteit", + "itemEditMetaSitemapPriorityTooltip": "Sitemapprioriteit helpt zoekmachines te begrijpen hoe vaak ze de paginas op je site moeten crawlen.", + "itemEditMetaTcDescriptionTooltip": "Deze titel verschijnt in Twitter Card-socialmediavoorbeelden onder de titel.", + "itemEditMetaTcTitleTooltip": "Deze titel verschijnt in Twitter Card-socialmediavoorbeelden.", + "itemEditMetaTitle": "Metatitel", + "itemEditMetaTitlePlaceholder": "Dit is de titel die zoekmachines in hun resultaten moeten gebruiken", + "itemEditMetaTitleTooltip": "Deze titel verschijnt in zoekresultaten en socialmediavoorbeelden. Zoekmachines tonen maximaal 65 tekens, maar je titel mag langer zijn.", + "itemEditMetaUniqueWords": "Unieke woorden", + "itemEditMetaUrlPathPart": "URL-paddeel", + "itemEditMetaUrlPathPartTooltip": "Ook bekend als URL-slug: het laatste deel van het URL-adres dat als unieke identificatie van de pagina dient. Het moet uniek zijn binnen je instantie, kleine letters gebruiken en mag geen niet-alfanumerieke tekens bevatten. Dit helpt SEO-vriendelijke gestructureerde URLs te maken.", + "itemEditMetaUrlPathTaken": "Dit URL-paddeel is al in gebruik. Voer een ander URL-paddeel in.", + "itemEditMetaUrlSettings": "URL-instellingen", + "itemEditMetaUrlSettingsDescription": "Definieer de URL van je webpagina", + "itemEditMetaWords": "Woorden", + "itemEditMissingRequiredData": "Ontbrekende gegevens in verplichte velden", + "itemEditMoreOptions": "Meer opties", + "itemEditNoDraftActivityLogs": "Geen bewerkingslogs in het activiteitenlogboek voor deze content.", + "itemEditNoPermissionAddStatus": "Je hebt geen toestemming om deze status toe te voegen", + "itemEditNoPermissionRemoveStatus": "Je hebt geen toestemming om deze status te verwijderen", + "itemEditNotFound": "Item niet gevonden", + "itemEditOffline": "Niet actief", + "itemEditOn": "op", + "itemEditOpenDuoMode": "DUO-modus openen", + "itemEditOpenInfoBar": "Infobalk openen", + "itemEditParsleyBehaviorsTitle": "Parsley-gedrag", + "itemEditPreviewPage": "Paginavoorbeeld", + "itemEditPreviewVersion": "Voorbeeld {{version}}", + "itemEditProductionPreviewVersion": "Productievoorbeeld - v{{version}}", + "itemEditPublishHistoryTitle": "Publicatiegeschiedenis", + "itemEditPublishingErrorFallback": "Er is een fout opgetreden tijdens het publiceren. Probeer het opnieuw.", + "itemEditPublishingZuid": "Publicatie-ZUID", + "itemEditPublishItem": "Item publiceren", + "itemEditPublishRelatedItemsDescription": "Dit publiceert alle items die in de onderstaande lijst zijn geselecteerd", + "itemEditQuickShareTitle": "Snel delen", + "itemEditRefreshCachedItem": "Gecachet item vernieuwen", + "itemEditRefreshingCachedItem": "Gecachet item wordt vernieuwd", + "itemEditRenameVariant": "Variant hernoemen", + "itemEditRenameVariantDescription": "Dit werkt de varianttitel bij die aan contenteditors wordt getoond", + "itemEditSaved": "Opgeslagen", + "itemEditSavedNotification": "Item opgeslagen: {{title}}", + "itemEditSaveItem": "Item opslaan", + "itemEditSavePublishItem": "Item opslaan en publiceren", + "itemEditScheduleUnpublish": "Depublicatie plannen", + "itemEditSearchStatus": "Status zoeken", + "itemEditSelectFieldsForReview": "Velden selecteren voor review", + "itemEditSelectTeamMembers": "Teamleden selecteren", + "itemEditSendEmail": "E-mail verzenden", + "itemEditStatusSearchNoResultsTitleRich": "Je zoekopdracht \"{{search}}\" heeft geen resultaten gevonden", + "itemEditSwitchOffDuoMode": "DUO-modus uitschakelen", + "itemEditSwitchOnDuoMode": "DUO-modus inschakelen", + "itemEditTabAnalytics": "Analyses", + "itemEditTabFreestyle": "Vrije stijl", + "itemEditTabHeadTags": "Head-tags", + "itemEditTabPublishStatus": "Publicatiestatus", + "itemEditTabRedirects": "Omleidingen", + "itemEditTabSeo": "SEO", + "itemEditTakeOffline": "Offline halen", + "itemEditUnlock": "Ontgrendelen", + "itemEditUnpublishContentItemTitle": "Contentitem depubliceren", + "itemEditUnpublishDescription": "Dit maakt het direct onbeschikbaar op al je platforms. Je kunt dit item altijd opnieuw publiceren door op de publicatieknop te klikken.", + "itemEditUnpublishItem": "Item depubliceren", + "itemEditUnpublishNow": "Nu depubliceren", + "itemEditUnpublishTitle": "Depubliceren", + "itemEditUnpublishWidgetDescription": "Door deze content te depubliceren wordt deze niet langer geserveerd als de URL wordt opgevraagd. De URL retourneert een 404 niet gevonden-response.", + "itemEditUnsavedChangesDescription": "Je hebt niet-opgeslagen wijzigingen die verloren gaan als je deze pagina verlaat.", + "itemEditUnschedulePublish": "Geplande publicatie annuleren", + "itemEditVariant": "Varianttype", + "itemEditVariantTitle": "Varianttitel", + "itemEditVersion": "Versie", + "itemEditVersionPublished": "v{{version}} gepubliceerd {{on}}", + "itemEditVersionPublishedLabel": "v{{version}} gepubliceerd", + "itemEditVersionPublishedOn": "v{{version}} gepubliceerd op", + "itemEditVersionSavedOn": "v{{version}} opgeslagen op", + "itemEditVersionScheduledLabel": "v{{version}} gepland", + "itemEditVersionScheduledToPublishOn": "v{{version}} gepland om te publiceren op", + "itemEditViewActivityLog": "Activiteitenlogboek bekijken", + "itemEditViewLanguages": "Talen bekijken", + "itemEditViewVersions": "Versies bekijken", + "itemEditWorkflowRequestFailed": "Workflowverzoek voor {{title}} verzenden naar {{members}} mislukt", + "itemEditWorkflowRequestMessage": "Bericht voor workflowverzoek", + "itemEditWorkflowRequestSent": "Workflowverzoek voor {{title}} verzonden naar {{members}}", + "itemEditWorkflowRequestTitle": "Workflowverzoek", + "itemEditZuidTooltip": "Contentitems worden altijd relatief tot hun model benaderd, dus voor elke call is een model-ZUID vereist.", + "itemListCopyZuid": "ZUID kopiëren", + "itemListDateCreated": "Aanmaakdatum", + "itemListDateSaved": "Opslagdatum", + "itemListDeleteButton_one": "Item verwijderen ({{count}})", + "itemListDeleteButton_other": "Items verwijderen ({{count}})", + "itemListDeleteDescription_one": "Als je dit item verwijdert, wordt het van alle locaties op je site verwijderd en is het niet meer beschikbaar voor API-verzoeken. Dit kan niet ongedaan worden gemaakt.", + "itemListDeleteDescription_other": "Als je deze {{count}} items verwijdert, worden ze van alle locaties op je site verwijderd en zijn ze niet meer beschikbaar voor API-verzoeken. Dit kan niet ongedaan worden gemaakt.", + "itemListDeleteTitle_one": "{{count}} item verwijderen", + "itemListDeleteTitle_other": "{{count}} items verwijderen", + "itemListEditModel": "Model bewerken", + "itemListEditTemplate": "Sjabloon bewerken", + "itemListEmptyDescription": "Voeg hier je content toe. Begin met het maken van je eerste item.", + "itemListEmptyTitle": "Begin nu met het maken van content", + "itemListErrorPublishing": "Fout bij het publiceren van items: {{error}}", + "itemListErrorSaving": "Fout bij het opslaan van items: {{error}}", + "itemListExportCsv": "CSV exporteren", + "itemListFieldsLabel": "Velden", + "itemListFilterNoResultsBody": "Pas je filters aan om te vinden wat je zoekt", + "itemListFilterNoResultsTitle": "Er zijn geen resultaten gevonden die aan je filters voldoen", + "itemListFilterPlaceholder": "Items filteren", + "itemListImportCsv": "CSV importeren", + "itemListItemNotYetCreated": "Item nog niet aangemaakt", + "itemListLastPublished": "Laatst gepubliceerd", + "itemListLastSaved": "Laatst opgeslagen", + "itemListModelInvalid": "Ongeldig model \"{{modelZUID}}\"", + "itemListModelNotFound": "Model \"{{modelZUID}}\" niet gevonden", + "itemListNoSearchResultsAlt": "Geen zoekresultaten", + "itemListPublish": "Publiceren", + "itemListPublishButton_one": "Item publiceren ({{count}})", + "itemListPublishButton_other": "Items publiceren ({{count}})", + "itemListPublishDescription_one": "Hierdoor wordt het volgende content-item direct beschikbaar op al je platforms. Je kunt de publicatie van dit item later altijd nog ongedaan maken als dat nodig is.", + "itemListPublishDescription_other": "Hierdoor worden de volgende {{count}} content-items direct beschikbaar op al je platforms. Je kunt de publicatie van deze items later altijd nog ongedaan maken als dat nodig is.", + "itemListPublishItemsTooltip": "Items publiceren", + "itemListPublishNow": "Nu publiceren", + "itemListPublishTitle_one": "Wijzigingen in {{count}} item publiceren", + "itemListPublishTitle_other": "Wijzigingen in {{count}} items publiceren", + "itemListResetFilters": "Filters opnieuw instellen", + "itemListSaveItemsTooltip": "Items opslaan", + "itemListSavePublish": "Opslaan en publiceren", + "itemListSavePublishItemsTooltip": "Items opslaan en publiceren", + "itemListSavePublishNow": "Opslaan en nu publiceren", + "itemListSaveSchedulePublish": "Opslaan en publicatie plannen", + "itemListScheduleButton_one": "Publicatie plannen ({{count}})", + "itemListScheduleButton_other": "Publicatie plannen ({{count}})", + "itemListSchedulePastWarning": "Omdat het geselecteerde tijdstip een huidige of verleden datum is, wordt dit direct gepubliceerd.", + "itemListSchedulePublish": "Publicatie plannen", + "itemListSchedulePublishOn": "Publiceren op", + "itemListScheduleSubtitle": "Je kunt de geplande publicatie later altijd nog annuleren als dat nodig is", + "itemListScheduleTitle_one": "Publicatie van wijzigingen in {{count}} item plannen", + "itemListScheduleTitle_other": "Publicatie van wijzigingen in {{count}} items plannen", + "itemListSearchNoResultsBody": "Probeer je zoekopdracht aan te passen. We raden aan te controleren of alle woorden correct gespeld zijn of andere zoekwoorden te proberen.", + "itemListSearchNoResultsTitle": "Je filter \"{{search}}\" heeft geen resultaten gevonden", + "itemListSelectedCount": "{{count}} geselecteerd", + "itemListSelectedCount_one": "{{count}} geselecteerd", + "itemListSelectedCount_other": "{{count}} geselecteerd", + "itemListSortPrefix": "Sorteren: {{value}}", + "itemListStatus": "Toestand", + "itemListStatusNotPublished": "Niet gepubliceerd", + "itemListStatusPublished": "Gepubliceerd", + "itemListStatusScheduled": "Gepland", + "itemListUpdateCount_one": "{{count}} content-item bijwerken", + "itemListUpdateCount_other": "{{count}} content-items bijwerken", + "itemListVersionByUser": "door {{name}}", + "itemListVersionColumnShort": "Versie", + "itemListVersionPublishedOn": "v{{version}} gepubliceerd op", + "itemListVersionSavedOn": "v{{version}} opgeslagen op", + "itemListVersionScheduledOn": "v{{version}} gepland voor publicatie op", + "itemListViewQuickAccessApi": "Quick Access API bekijken", + "itemListViewSiteGeneratorsApi": "Site Generators API bekijken", + "itemListZuidColumn": "ZUID", + "linkCreateButton": "Link aanmaken", + "linkCreateCreated": "Link aangemaakt: {{title}}", + "linkCreateUnableToCreate": "Kan link niet aanmaken", + "linkEditCannotSaveEmptyTitle": "Lege titel", + "linkEditConfirmDelete": "Weet je zeker dat je deze link wilt verwijderen?", + "linkEditDeleted": "Link verwijderd: {{title}}", + "linkEditErrorDeleting": "Fout bij het verwijderen van de link", + "linkEditErrorSaving": "Fout bij het opslaan van de link", + "linkEditFailedLoading": "Link laden mislukt", + "linkEditLoading": "Link laden", + "linkEditorErrorAddProtocol": "Voeg een linkprotocol toe", + "linkEditorErrorAddTarget": "Voeg een linkdoel toe", + "linkEditorErrorAddTitle": "Voeg een linktitel toe", + "linkEditorExternalLink": "Externe link", + "linkEditorExternalUrl": "Geef een externe URL op om naar te linken", + "linkEditorInternalLink": "Interne link", + "linkEditorLinkTitle": "Linktitel", + "linkEditorSelectParent": "Selecteer een bovenliggend item voor je link", + "linkEditorSelectTarget": "Selecteer een item om naar te linken", + "linkEditSaveChanges": "Wijzigingen opslaan", + "linkEditSaved": "Link opgeslagen: {{title}}", + "mediaAddFromBynder": "Toevoegen vanuit Bynder", + "mediaAddFromMedia": "Toevoegen vanuit Media", + "mediaAddMoreFromMedia": "Meer toevoegen vanuit Media", + "mediaCopyFileUrl": "Bestand-URL kopiëren", + "mediaCopyZuid": "ZUID kopiëren", + "mediaCouldNotAdd": "Kan {{filenames}} niet toevoegen. {{errorMessage}}", + "mediaCouldNotReplace": "Kan niet vervangen. {{errorMessage}}", + "mediaDragAndDropRich": "Sleep je bestanden hierheen of", + "mediaDragDropFilesCompact": "Sleep en zet je bestanden neer", + "mediaDropFilesHere": "Zet je bestanden hier neer", + "mediaDropToUpload": "Zet je bestanden hier neer om te uploaden", + "mediaEditFile": "Bestand bewerken", + "mediaMoreOptions": "Meer opties", + "mediaRemoveFile": "Bestand verwijderen", + "mediaRename": "Naam wijzigen", + "mediaRenameFile": "Bestand hernoemen", + "mediaReplaceFile": "Bestand vervangen", + "mediaSwapFile": "Bestand verwisselen", + "mediaTypeLabel": "Mediatype", + "mediaUploadMedia": "Uploaden naar Media", + "minCharacterCounter_one": " (min. {{count}} teken)", + "minCharacterCounter_other": " (min. {{count}} tekens)", + "minMaxLabel": "Min.: {{min}} | Max.: {{max}}", + "missingMetaTitle": "heeft geen metatitel", + "navAddContentItem": "Content-item toevoegen", + "navContentTitle": "Content", + "navCreateContent": "Content maken", + "navCreateDataset": "Dataset maken", + "navCreatePage": "Pagina maken", + "navDashboard": "Dashboard", + "navDatasetsInfo": "De hier vermelde datasets hebben geen bovenliggend content-item en geen URL's voor de content-items.", + "navErrorBody": "Sorry, we kunnen je {{navName}} niet laden. Vernieuw de pagina en probeer het opnieuw.", + "navFilterItems": "Items filteren", + "navHideContent": "Content verbergen", + "navLoadItemsFailed": "Kan content-navigatie-items niet laden.", + "navLoadRoleFailed": "Kan je gebruikersrol niet laden.", + "navNoResultsFor": "Geen resultaten beschikbaar voor \"{{keyword}}\"", + "navNoSearchResultsAlt": "Geen zoekresultaten", + "navPagesInfo": "Pagina's omvatten modellen met één en meerdere pagina's met URL's. Datasets met een bovenliggend item worden ook in deze navigatie weergegeven.", + "navReorderPages": "Pagina's herordenen", + "navResourceDatasets": "datasets", + "navResourceModels": "modellen", + "navSectionDatasets": "Datasets", + "navSectionHiddenItems": "Verborgen items", + "navSectionPages": "Pagina's", + "noFieldsAvailable": "Geen velden beschikbaar", + "noFieldsDescriptionNoSchema": "Dit model ({{label}}) heeft nog geen velden. Om de structuur van uw content-items te bepalen, neemt u contact op met uw beheerder om velden aan dit model toe te voegen.", + "noFieldsDescriptionWithSchema": "Dit model ({{label}}) heeft nog geen velden. Om de structuur van uw content-items te bepalen, gaat u naar uw model en voegt u velden toe.", + "noFieldsImageAlt": "Geen velden beschikbaar", + "notFoundContactBodyRich": "Als je denkt dat er een content-item ontbreekt, neem dan contact met ons op via support@zesty.io en vermeld de volgende URL in je bericht", + "notFoundDeletedHeading": "Dit item is verwijderd", + "notFoundImageAlt": "Niet gevonden", + "publishedNow": "{{title}} nu gepubliceerd", + "redirectActiveHeader": "Dit content-item wordt momenteel omgeleid", + "redirectActiveSubHeader": "Dit content-item is momenteel ingesteld om gebruikers om te leiden naar de onderstaande bestemmings-URL. Door de omleiding te stoppen, kunnen gebruikers dit content weer benaderen via de originele URL zodra het is gepubliceerd.", + "redirectAddIncoming": "Inkomende omleiding toevoegen", + "redirectCode301": "301 - Permanente omleiding", + "redirectCode302": "302 - Tijdelijke omleiding", + "redirectCreateButton": "Omleiding aanmaken", + "redirectCreatedOne": "1 omleiding aangemaakt", + "redirectDeletedOne": "1 omleiding verwijderd", + "redirectDeletedPath": "Omleiding verwijderd: {{path}}", + "redirectDeleteForever": "Definitief verwijderen", + "redirectDeleteTitle": "Omleiding verwijderen", + "redirectDeleteWarning": "Het verwijderen van deze omleiding verwijdert deze direct van je site. Deze actie kan niet ongedaan worden gemaakt.", + "redirectDontCreate": "Niet aanmaken", + "redirectEnterUrlPlaceholder": "Voer een URL in (bijv. https://www.google.com/)", + "redirectErrorDeleting": "Fout bij het verwijderen van de omleiding", + "redirectFilePathOnlyTooltip": "Alleen bestandspad", + "redirectInactiveSubHeader": "Zodra je je content-item omleidt, wordt het gedepubliceerd en kunnen gebruikers het niet meer benaderen via de huidige URL. Ze worden automatisch naar de door jou opgegeven bestemmings-URL gestuurd.", + "redirectMoreDetails": "Meer details", + "redirectNewPath": "Nieuw pad", + "redirectOldPath": "Oud pad", + "redirectStopBody": "Door de omleiding te stoppen, kunnen gebruikers dit content weer benaderen via de originele URL zodra het is gepubliceerd.", + "redirectStopRedirecting": "Omleiden stoppen", + "redirectTargetLabel": "Omleidingsbestemming", + "redirectTargetPath": "Bestemmingspad", + "redirectThisContentItem": "Dit content-item omleiden", + "redirectTypeColumn": "Omleidingstype", + "redirectTypeInternal": "Intern", + "redirectTypeLabel": "Type", + "redirectTypeWildcard": "Wildcard", + "redirectValueCannotBeModified": "Deze waarde kan niet worden gewijzigd", + "reorderNavReturnToRoot": "Terug naar hoofdniveau", + "reorderNavSaveChanges": "Wijzigingen opslaan", + "reorderNavSaved": "Wijzigingen zijn opgeslagen", + "reorderNavSaveError": "Fout bij het opslaan van wijzigingen", + "reorderNavTitle": "Wijzig de volgorde van items in je navigatie", + "requiredFieldError": "Verplicht veld. Voer een waarde in.", + "requiresMoreCharacters_one": "Nog {{count}} teken vereist.", + "requiresMoreCharacters_other": "Nog {{count}} tekens vereist.", + "scheduledPublish": "{{title}} ingepland voor publicatie op {{time}} in de tijdzone {{timezone}}", + "selectBlockVariant": "Selecteer een blokvariant.", + "selectedItemNotFound": "Geselecteerd item niet gevonden: {{value}}", + "selectPlaceholder": "Selecteren", + "seoFieldMetaDescription": "Metabeschrijving", + "seoFieldMetaKeywords": "Metatrefwoorden", + "seoFieldMetaTitle": "Metatitel", + "seoFieldNavigationTitle": "Navigatietitel", + "seoFieldPageParent": "Bovenliggende pagina", + "seoFieldUrlPathPart": "URL-padgedeelte", + "slotLabelAltText": "Alt-tekst", + "slotLabelAutoplay": "Automatisch afspelen", + "slotLabelLoopVideo": "Video herhalen", + "slotLabelMuteVideo": "Video dempen", + "slotLabelOpenInNewTab": "Openen in nieuw tabblad", + "slotLabelSource": "Bron", + "slotLabelUrl": "URL", + "slotLabelVideoControlVisibility": "Zichtbaarheid videobediening", + "slotLabelVideoPoster": "Videoposter", + "studioAddLink": "Link toevoegen", + "studioAgenticStudioBy": "Agentic Studio door", + "studioBackToElement": "Terug naar element", + "studioBridgeError": "Bridge-fout", + "studioCannotSave": "Kan niet opslaan: {{label}}", + "studioCannotSaveError": "Kan niet opslaan: {{label}} - {{error}}", + "studioCannotSaveInvalid": "Kan niet opslaan: {{label}} - ontbrekende of ongeldige gegevens", + "studioCloseAriaLabel": "Studio-voorbeeld sluiten", + "studioContentHint": "Selecteer items op het canvas om bewerkingen te maken", + "studioEditInFreestyle": "Bewerken in Freestyle", + "studioEditInManager": "Bewerken in Zesty Manager", + "studioEditorAriaLabel": "Studio-editor", + "studioFreestyleAlertBody": "Bewerken alleen mogelijk in Freestyle", + "studioFreestyleAlertDismissAriaLabel": "Freestyle-melding sluiten", + "studioFreestyleAlertTitle": "Deze lay-out is gemaakt in Freestyle", + "studioFullHint": "Selecteer items op het canvas om ze te bewerken, of sleep blokken om de lay-out opnieuw te ordenen", + "studioInlineEditFailed": "Kan inline bewerking voor dit blok niet toepassen.", + "studioInvalidUrl": "Ongeldige URL. Controleer het en probeer het opnieuw.", + "studioItemPublished": "Gepubliceerd: {{label}}", + "studioItemSaved": "Item opgeslagen: {{label}}", + "studioItemsPublishedCount_one": "{{count}} item opgeslagen en gepubliceerd", + "studioItemsPublishedCount_other": "{{count}} items opgeslagen en gepubliceerd", + "studioItemsSavedCount_one": "{{count}} item opgeslagen", + "studioItemsSavedCount_other": "{{count}} items opgeslagen", + "studioLayersEmptyState": "Geen lagen gevonden", + "studioLayersNodeElement": "element", + "studioLayersNodeField": "Veld", + "studioLayersNodePage": "Pagina", + "studioLayersNodeText": "Tekst", + "studioLayersPanelTitle": "Lagen", + "studioLayoutHint": "Sleep blokken op het canvas om de lay-out opnieuw te ordenen", + "studioLayoutPublishFailed": "Kan lay-out niet opslaan en publiceren.", + "studioLayoutPublishFailedNamed": "Kan {{name}} niet opslaan en publiceren.", + "studioLayoutSaved": "{{files}} opgeslagen", + "studioLayoutSavedPublished": "{{files}} opgeslagen en gepubliceerd", + "studioLayoutSaveFailed": "Kan lay-out niet opslaan.", + "studioLayoutSaveFailedNamed": "Kan {{name}} niet opslaan.", + "studioLinkedFromTooltip": "Gekoppeld vanaf {{modelLabel}} · {{itemLabel}} ({{itemZUID}})", + "studioLinkFieldNotFound": "Veld \"{{fieldName}}\" bestaat niet meer", + "studioLinkFromOtherItem": "Koppelen vanaf ander content-item", + "studioLinkItemConfirm": "Item koppelen", + "studioLinkItemContentItemLabel": "Content-item", + "studioLinkItemContentItemTooltip": "Het veld wordt gelezen van dit exacte item, inclusief de taal ervan.", + "studioLinkItemContentItemTooltipForItem": "De link verwijst naar dit exacte item, inclusief de taal. Alleen modellen met een pagina worden vermeld.", + "studioLinkItemDialogCloseAriaLabel": "Dialoogvenster item koppelen sluiten", + "studioLinkItemDialogSubtitle": "Koppelen aan een contentveld van een specifiek content-item", + "studioLinkItemDialogSubtitleForItem": "Linken naar de pagina van een specifiek content-item", + "studioLinkItemDialogTitle": "Ander content-item koppelen", + "studioLinkItemFieldLabel": "Veld om te koppelen", + "studioLinkItemFieldTooltip": "Alleen velden die dit element kan weergeven worden vermeld.", + "studioLinkItemNoLinkableFields": "Het model van dit item heeft geen koppelbare velden.", + "studioLinkModelNotFound": "Model \"{{modelName}}\" bestaat niet meer", + "studioLinkSectionLabel": "Link", + "studioLinkTargetLabel": "Doel", + "studioLinkTo": "Linken naar", + "studioLinkUrlPlaceholder": "link-URL of ID", + "studioModeContent": "Inhoud", + "studioModeFull": "Volledig", + "studioModeLayout": "Lay-out", + "studioNoCmsItem": "Er is geen CMS-item aan dit pad gekoppeld. Bewerken is uitgeschakeld.", + "studioPreviewError": "Voorbeeldfout: {{error}}", + "studioPreviewOnly": "Alleen voorbeeld", + "studioPublishPartialFailure_one": "{{published}} van {{count}} item gepubliceerd — {{failed}} mislukt", + "studioPublishPartialFailure_other": "{{published}} van {{count}} items gepubliceerd — {{failed}} mislukt", + "studioRemoveLinkAriaLabel": "Link verwijderen", + "studioSaveAllButton": "Alles opslaan", + "studioSaveAndPublish": "Opslaan en publiceren", + "studioSaveAndPublishAllButton": "Alles opslaan en publiceren", + "studioSaveChangeSectionContent": "Inhoud", + "studioSaveChangeSectionLayout": "Lay-out", + "studioSaveChanges": "Wijzigingen opslaan", + "studioSaveChangesSubtitle": "Wil je je wijzigingen opslaan, of opslaan en publiceren?", + "studioSaveChangesTypeColumn": "Type", + "studioSaveChangesVersionColumn": "Vers.", + "studioSaveChangeTypeBlock": "Blok", + "studioSaveChangeTypeCode": "Code", + "studioSaveChangeTypeContent": "Inhoud", + "studioStaticEditNotSingleField": "Dit blok kan niet inline worden bewerkt omdat de inhoud niet uit één gekoppeld veld bestaat.", + "studioStaticEditRejected": "Dit blok bevat dynamische inhoud en kan niet inline worden bewerkt. Schakel naar de modus Content om te bewerken.", + "studioUnsavedLayoutBody": "Je hebt niet-opgeslagen lay-outwijzigingen. Wil je ze opslaan voordat je doorgaat?", + "studioUnsavedLayoutTitle": "Niet-opgeslagen lay-outwijzigingen", + "studioUntitledItem": "Naamloos", + "studioViewAllRelatedFields": "Alle gerelateerde velden weergeven", + "tagArticle": "Artikel", + "tagAside": "Aside", + "tagDiv": "Div", + "tagFooter": "Voettekst", + "tagHeader": "Koptekst", + "tagMain": "Hoofdgedeelte", + "tagNavigation": "Navigatie", + "tagNone": "Geen tag", + "tagSection": "Sectie", + "tagText": "Tekst", + "unpublished": "Publicatie van {{title}} ongedaan gemaakt", + "unscheduledVersion": "Inplanning van versie {{version}} geannuleerd", + "uuidAutoGeneratedPlaceholder": "UUID-veldwaarden worden automatisch gegenereerd", + "valueMustBeBetween": "Waarde moet tussen {{min}} en {{max}} liggen", + "viewModelActivityLog": "Activiteitenlogboek van model bekijken", + "yesNoMissingOptions": "Voor het veld {{label}} ontbreken optie-instellingen. Bewerk het veld om ja/nee-waarden toe te voegen." +} diff --git a/public/locales/nl-NL/dashboard.json b/public/locales/nl-NL/dashboard.json new file mode 100644 index 0000000000..1ac5b70366 --- /dev/null +++ b/public/locales/nl-NL/dashboard.json @@ -0,0 +1,29 @@ +{ + "columnVersion": "Vers.", + "createCodeFile": "Codebestand maken", + "createContent": "Inhoud maken", + "createModel": "Model maken", + "deleted": "Verwijderd", + "deltaLabel": "VS voorafgaande {{count}} dagen", + "deltaLabel_one": "VS voorafgaande {{count}} dag", + "deltaLabel_other": "VS voorafgaande {{count}} dagen", + "emptyStateDescription": "Er zijn de afgelopen 30 dagen geen nieuwe items gemaakt of bewerkingen uitgevoerd. Begin met het maken of bewerken van inhoud, modellen of codebestanden om recente bestanden hier te zien.", + "emptyStateTitle": "Begin vandaag nog met het uitbreiden van uw instantie", + "greeting": "Goedemorgen, {{name}}", + "instanceSummary": "Hier is uw instantie-overzicht van de", + "itemsPublished": "Gepubliceerde items", + "joinCommunity": "Word lid van onze community", + "lastNDays": "Afgelopen {{count}} dagen", + "lastNDays_one": "Afgelopen {{count}} dag", + "lastNDays_other": "Afgelopen {{count}} dagen", + "lastNDaysInline": "afgelopen {{count}} dagen", + "lastNDaysInline_one": "afgelopen {{count}} dag", + "lastNDaysInline_other": "afgelopen {{count}} dagen", + "missingMetaTitle": "Ontbrekende metatitel", + "releaseNotes": "Release-opmerkingen", + "resources": "Bronnen", + "resourcesSubtitle": "Alles wat u nodig heeft om het beste uit Zesty te halen.", + "speedDialAriaLabel": "Sneltoetsen instantie", + "uploadMedia": "Media uploaden", + "webRequests": "Webverzoeken" +} diff --git a/public/locales/nl-NL/leads.json b/public/locales/nl-NL/leads.json new file mode 100644 index 0000000000..d4920c7440 --- /dev/null +++ b/public/locales/nl-NL/leads.json @@ -0,0 +1,27 @@ +{ + "captureLeadsOnYourInstance": "Leg leads vast op uw instantie", + "dateCreated": "Aanmaakdatum", + "datePreset30Days": "30 Dagen", + "datePreset60Days": "60 Dagen", + "datePreset90Days": "90 Dagen", + "datePresetAll": "Alles", + "datePresetCustom": "Aangepast", + "endDate": "Einddatum", + "exportCsv": "Exporteer CSV", + "exportCsvTitle": "Exporteer CSV van leadgegevens op basis van geselecteerde filters", + "formGroup": "Formuliergroep", + "formGroupAll": "Alle", + "getStartedBodyText": "Door een formulier op uw instantie te maken dat de zlf-invoer bevat, kunt u direct beginnen met het vastleggen van leads.", + "howToCreateALeadForm": "Hoe maak je een leadformulier", + "learnMoreAbout": "Meer informatie over", + "modalTableHeaderKey": "Sleutel", + "modalTableHeaderValue": "Waarde", + "notAvailable": "N/A", + "searchAcrossAllOfYourLeads": "Zoek door al uw leads", + "selectRelease": "Selecteer release...", + "startDate": "Startdatum", + "tableHeaderDate": "Datum (systeem)", + "tableHeaderEmail": "E-mail", + "tableHeaderFormBody": "Formulierinhoud", + "tableHeaderFormGroup": "Formuliergroep" +} diff --git a/public/locales/nl-NL/marketplace.json b/public/locales/nl-NL/marketplace.json new file mode 100644 index 0000000000..fd4530de0e --- /dev/null +++ b/public/locales/nl-NL/marketplace.json @@ -0,0 +1,15 @@ +{ + "appNotInstalled": "De app \"{{zuid}}\" is niet geïnstalleerd.", + "exploreMarketplace": "Marketplace verkennen", + "googleAnalyticsLogoAlt": "Google Analytics-logo", + "googleChromeLogoAlt": "Google Chrome-logo", + "goToMarketplace": "Ga naar Marketplace", + "headerTitleApps": "Apps", + "installAppBody": "Installeer extensies, applicaties en snelstartmodules om je Zesty-project te versnellen", + "microsoftLogoAlt": "Microsoft-logo", + "nodejsLogoAlt": "NodeJS-logo", + "npmLogoAlt": "NPM-logo", + "sidebarMarketplace": "Marketplace", + "visitMarketplace": "Bezoek Marketplace", + "zestyRocketLogoAlt": "Zesty Rocket-logo" +} diff --git a/public/locales/nl-NL/media.json b/public/locales/nl-NL/media.json new file mode 100644 index 0000000000..959a34c29b --- /dev/null +++ b/public/locales/nl-NL/media.json @@ -0,0 +1,215 @@ +{ + "allMediaTitle": "Recente items", + "dateFilterAfter": "Na", + "dateFilterBefore": "Voor", + "dateFilterButtonLabel": "Datum", + "dateFilterCustomRange": "Aangepast bereik", + "dateFilterOn": "Op", + "deletedFile": "Bestand {{filename}} verwijderd", + "deletedGroup": "Groep {{name}} verwijderd", + "deleteFileModalDeleteButtonAria": "Verwijderknop", + "deleteFileModalDeleteButtonMultiple": "Verwijderen ({{count}})", + "deleteFileModalDeleteButtonMultiple_one": "Verwijderen ({{count}})", + "deleteFileModalDeleteButtonMultiple_other": "Verwijderen ({{count}})", + "deleteFileModalTitleMultiple": "{{count}} bestanden verwijderen?", + "deleteFileModalTitleMultiple_one": "{{count}} bestand verwijderen?", + "deleteFileModalTitleMultiple_other": "{{count}} bestanden verwijderen?", + "deleteFileModalTitleSingle": "Bestand verwijderen", + "deleteFileModalWarningMultiple": "U kunt deze bestanden niet meer herstellen.", + "deleteFileModalWarningSingle": "{{filename}} zal permanent worden verwijderd", + "deleteFolderDialogConfirmButton": "Map verwijderen", + "deleteFolderDialogMessage": "Als u de map verwijdert, worden de bestanden daarin NIET verwijderd. Deze bestanden zijn nog steeds te vinden in Alle Media.", + "deleteFolderDialogTitle": "Map verwijderen?", + "dropAreaAllMedia": "Alle Media", + "dropAreaUploadPrompt": "Upload bestanden naar {{location}}", + "editedFile": "Bestand {{filename}} bewerkt", + "emptyStateDescription": "U kunt hier bestanden naartoe slepen of de knop \"Uploaden\" gebruiken.", + "emptyStateTitle": "Begin nu met uploaden", + "failedCreatingGroup": "Aanmaken van groep mislukt", + "failedDeletingFile": "Verwijderen van bestand mislukt", + "failedDeletingGroup": "Verwijderen van groep mislukt", + "failedEditingBin": "Bewerken van mediabak mislukt", + "failedEditingFile": "Bewerken van bestand mislukt", + "failedEditingGroup": "Bewerken van groep mislukt", + "failedFetchBinFiles": "Ophalen van mediabakbestanden mislukt: {{error}}", + "failedFetchGroupFiles": "Ophalen van groepsbestanden mislukt: {{error}}", + "failedFetchGroups": "Ophalen van groepen mislukt: {{error}}", + "failedFileSearch": "Bestandszoekopdracht mislukt", + "failedLoadingBinFiles": "Laden van mediabakbestanden mislukt", + "failedLoadingBinGroups": "Laden van mediabakgroepen mislukt", + "failedLoadingEcoBins": "Laden van ecosysteem-mediabakken mislukt", + "failedLoadingGroupFiles": "Laden van groepsbestanden mislukt", + "failedLoadingInstanceBins": "Laden van instantie-mediabakken mislukt", + "failedSearchFile": "Zoeken naar bestand mislukt: {{error}}", + "fileModalContentCloseAria": "Sluitpictogram", + "fileModalContentCloseTooltip": "Voorbeeld sluiten", + "fileModalContentCopyZuid": "ZUID kopiëren", + "fileModalContentDeleteAria": "Prullenbakknop", + "fileModalContentDeleteFailed": "Verwijderen van bestand mislukt", + "fileModalContentDeleteTooltip": "Bestand verwijderen", + "fileModalContentFileUrlLabel": "Bestands-URL", + "fileModalContentLaunchOtfEditor": "On the Fly Editor starten", + "fileModalContentMoveTo": "Verplaatsen naar", + "fileModalContentOpenSettingsAria": "Instellingenmenu openen", + "fileModalContentRenameMenuItem": "Naam wijzigen", + "fileModalContentRenameTooltip": "Bestandsnaam wijzigen", + "fileModalContentReplaceAria": "Knop bestand vervangen", + "fileModalContentReplaceTooltip": "Bestand vervangen", + "fileModalContentSaveTitleAria": "Knop titel opslaan", + "fileModalContentTitleAria": "Titel tekstveld", + "fileModalContentTitleHelper": "Kan worden gebruikt voor alt-tekst en bijschriften", + "fileModalContentTitleLabel": "Titel", + "fileModalContentTitlePlaceholder": "Voer titel in", + "fileModalContentUpdatedOn": "Bijgewerkt op", + "fileModalContentUploadedOn": "Geüpload op", + "fileModalContentZuidLabel": "ZUID", + "filetypeFilterArchives": "Archieven (zip)", + "filetypeFilterAudio": "Audio", + "filetypeFilterButtonLabel": "Bestandstype", + "filetypeFilterDocuments": "Documenten", + "filetypeFilterFolders": "Mappen", + "filetypeFilterFonts": "Lettertypen", + "filetypeFilterImages": "Afbeeldingen", + "filetypeFilterPdfs": "Pdf's", + "filetypeFilterPresentations": "Presentaties", + "filetypeFilterSpreadsheets": "Spreadsheets", + "filetypeFilterVideos": "Video's", + "fileTypeNotRecognized": "Bestandstype niet herkend", + "folderMenuAddSubFolder": "Submap toevoegen", + "folderMenuHide": "Verbergen", + "folderMenuRename": "Naam wijzigen", + "folderMenuShow": "Toonen", + "goToAllMedia": "Ga naar Alle Media", + "headerAddSubFolder": "Submap toevoegen", + "headerDeselectAll": "Alles deselecteren", + "headerFilesSelected": "{{count}} geselecteerd", + "headerFilesSelected_one": "{{count}} geselecteerd", + "headerFilesSelected_other": "{{count}} geselecteerd", + "headerFilesSelectedLimit": "{{count}} / {{limit}} geselecteerd", + "headerFilesSelectedLimit_one": "{{count}} / {{limit}} geselecteerd", + "headerFilesSelectedLimit_other": "{{count}} / {{limit}} geselecteerd", + "headerMove": "Verplaatsen", + "headerOpenFolderMenuAria": "Mapmenu openen", + "headerReplacementFileSelected": "Vervangend bestand geselecteerd", + "headerSelectAll": "Alles selecteren", + "headerSelectReplacementFile": "Selecteer vervangend bestand", + "imageFilterAllTypes": "Alle afbeeldingstypen", + "insightsMediaDateRangeButton": "Laatste {{days}} dagen", + "insightsMediaDateRangeMenuItem": "Laatste {{days}} dagen", + "insightsMediaDeltaLabel": "t.o.v. laatste {{days}} dagen", + "insightsMediaMediaBandwidth": "Mediabandbreedte", + "insightsMediaTitle": "Inzichten", + "insightsTableColBandwidth": "Bandbreedte", + "insightsTableColRequests": "Verzoeken", + "insightsTableColType": "Type", + "matchesFound": "{{count}} resultaten gevonden", + "matchesFound_one": "{{count}} resultaat gevonden", + "matchesFound_other": "{{count}} resultaten gevonden", + "mediaAppFileNotFoundMessage": "Sorry, het opgevraagde bestand kon niet worden gevonden. Ga terug naar de pagina Alle Media.", + "mediaAppFileNotFoundTitle": "Bestand niet gevonden", + "mediaGridFilesHeader": "Bestanden", + "mediaGridFoldersHeader": "Mappen", + "mediaListColAddedOn": "Toegevoegd op", + "mediaListColType": "Type", + "moveFileDialogDestinationLabel": "Doelmap", + "moveFileDialogMoveButton": "Verplaatsen", + "moveFileDialogTitleMultiple": "{{count}} bestanden verplaatsen", + "moveFileDialogTitleMultiple_one": "{{count}} bestand verplaatsen", + "moveFileDialogTitleMultiple_other": "{{count}} bestanden verplaatsen", + "moveFileDialogTitleSingle": "Bestanden verplaatsen", + "newFolderDialogDefaultFolderName": "Naamloos", + "newFolderDialogFolderNameLabel": "Mapnaam", + "newFolderDialogNone": "Geen", + "newFolderDialogParentFolderLabel": "Bovenliggende map", + "newFolderDialogTitle": "Nieuwe map", + "noResultsStateClearFilters": "Filters wissen", + "noResultsStateDescription": "Probeer de filters aan te passen om te vinden wat u zoekt", + "noResultsStateTitleFiletype": "Geen {{filetype}}-bestanden gevonden", + "noResultsStateTitleFolders": "Geen mappen gevonden", + "notFoundStateDefaultMessage": "Sorry, de opgevraagde map kon niet worden gevonden. Ga terug naar de pagina Alle Media.", + "notFoundStateDefaultTitle": "Map niet gevonden", + "notifyFailedCreateRecord": "Aanmaken van bestandsrecord na uploaden via ondertekende URL mislukt", + "notifyFailedSignedUrl": "Ophalen van ondertekende URL voor uploaden van groot bestand mislukt", + "notifyFailedUploadSignedUrl": "Uploaden van bestand naar ondertekende URL mislukt", + "notifyFileReplaced": "Bestand vervangen: {{filename}}", + "notifyFilesInProgress": "{{count}} bestanden nog in behandeling", + "notifyFilesInProgress_one": "{{count}} bestand nog in behandeling", + "notifyFilesInProgress_other": "{{count}} bestanden nog in behandeling", + "notifyMetadataFailedMultiple": "Bijwerken van metadata van {{count}} bestanden mislukt", + "notifyMetadataFailedMultiple_one": "Bijwerken van metadata van {{count}} bestand mislukt", + "notifyMetadataFailedMultiple_other": "Bijwerken van metadata van {{count}} bestanden mislukt", + "notifyUploadedMultiple": "Succesvol {{count}} bestanden geüpload", + "notifyUploadedMultiple_one": "Succesvol {{count}} bestand geüpload", + "notifyUploadedMultiple_other": "Succesvol {{count}} bestanden geüpload", + "notifyUploadedMultipleWithProgress": "Succesvol {{count}} bestanden geüpload... {{inProgress}} bestanden nog in behandeling", + "notifyUploadedMultipleWithProgress_one": "Succesvol {{count}} bestand geüpload... {{inProgress}} bestanden nog in behandeling", + "notifyUploadedMultipleWithProgress_other": "Succesvol {{count}} bestanden geüpload... {{inProgress}} bestanden nog in behandeling", + "notifyUploadFailed": "Uploaden van bestand mislukt", + "notifyUploadFailedMultiple": "Uploaden van {{count}} bestanden mislukt", + "notifyUploadFailedMultiple_one": "Uploaden van {{count}} bestand mislukt", + "notifyUploadFailedMultiple_other": "Uploaden van {{count}} bestanden mislukt", + "notifyUploadSuccess": "Bestand succesvol geüpload", + "otfEditorAutoPlaceholder": "Auto", + "otfEditorBlurLabel": "Vervagen", + "otfEditorCopyUrlLabel": "✨ Kopieer nieuwe URL met toegepaste bewerkingen", + "otfEditorFitBounds": "Binnen grenzen", + "otfEditorFitCover": "Vullend", + "otfEditorFitCrop": "Bijsnijden", + "otfEditorFitLabel": "Passend maken", + "otfEditorFitNone": "Geen", + "otfEditorHeightLabel": "Hoogte", + "otfEditorOptimizeHigh": "Hoog", + "otfEditorOptimizeLabel": "Optimaliseren", + "otfEditorOptimizeLow": "Laag", + "otfEditorOptimizeMedium": "Gemiddeld", + "otfEditorSaturationAria": "Verzadiging", + "otfEditorSaturationLabel": "Verzadiging", + "otfEditorTitle": "On The Fly Afbeeldingseditor", + "otfEditorUnsavedWarning": "Deze wijzigingen worden niet opgeslagen in het originele bestand of de originele bestands-URL", + "otfEditorWidthLabel": "Breedte", + "renameFileModalNewNameLabel": "Nieuwe bestandsnaam", + "renameFileModalTitle": "Bestandsnaam wijzigen", + "renameFileModalWarning": "Dit verandert het URL-pad en kan na verloop van tijd bestaande links in productie verbreken.", + "renameFolderDialogNewFolderNameLabel": "Nieuwe mapnaam", + "renameFolderDialogTitle": "Mapnaam wijzigen", + "replaceFileModalNoPermissionSubtitle": "Neem contact op met de eigenaar van de instantie of de hieronder vermelde beheerders om uw rol te upgraden naar Admin of Owner voor de mogelijkheid om bestanden te vervangen.", + "replaceFileModalNoPermissionTitle": "U hebt geen toestemming om bestanden te vervangen in deze instantie.", + "replaceFileModalTitle": "Bestand vervangen", + "replaceFileModalWarning": "Het originele bestand wordt verwijderd och vervangen door het nieuwe bestand. Deze actie kan niet ongedaan worden gemaakt en het bestand kan niet worden hersteld. Het bestand behoudt zijn URL en ZUID.", + "searchEmptyStateDescription": "Probeer uw zoekopdracht aan te passen. We raden u aan te controleren of alle woorden correct zijn gespeld of andere trefwoorden te gebruiken", + "searchEmptyStateTitle": "Uw zoekopdracht \"{{searchTerm}}\" heeft geen resultaten opgeleverd", + "sidebarFoldersDndErrorMessage": "Momenteel biedt Zesty niet de mogelijkheid om bestanden tussen eco-bins te verplaatsen. Als u deze functie wenst, neem dan contact op met support@zesty.io.", + "sidebarFoldersDndErrorTitle": "Kan bestand niet naar een andere eco-bin verplaatsen", + "sidebarFoldersHeader": "Mappen", + "sidebarFoldersHiddenItems": "Verborgen items", + "sidebarFoldersOkButton": "Oké", + "sidebarFoldersSortLastCreated": "Laatst aangemaakt", + "sidebarInsertFromMedia": "Invoegen vanuit Media", + "sidebarInsights": "Inzichten", + "sidebarRecents": "Recente items", + "sidebarSearchPlaceholder": "Media zoeken", + "sortButtonLabel": "Sorteren: {{order}}", + "sortDateAdded": "Datum toegevoegd", + "thumbnailContentCannotEditTooltip": "U kunt de bestandsnaam niet bewerken", + "thumbnailContentTitlePlaceholderDisabled": "Wacht even met het toevoegen van de bestandstitel", + "thumbnailContentTitlePlaceholderEditable": "Bestandstitel toevoegen (voor alt-tekst)", + "thumbnailCopyUrl": "URL kopiëren", + "uploadModalNounFile_one": "Bestand", + "uploadModalNounFile_other": "Bestanden", + "uploadModalNounReplacedFile_one": "Vervangen bestand", + "uploadModalNounReplacedFile_other": "Vervangen bestanden", + "uploadModalUploadedNoCount": "{{item}} geüpload", + "uploadModalUploadedWithCount": "{{count}} {{item}} geüpload", + "uploadModalUploadedWithCount_one": "{{count}} {{item}} geüpload", + "uploadModalUploadedWithCount_other": "{{count}} {{item}} geüpload", + "uploadModalUploadErrorHint": "Controleer de bestandsextensies en probeer het opnieuw", + "uploadModalUploadErrorTitle": "Helaas ondervonden we problemen bij het uploaden van de {{count}} bestanden", + "uploadModalUploadErrorTitle_one": "Helaas ondervonden we problemen bij het uploaden van het {{count}} bestand", + "uploadModalUploadErrorTitle_other": "Helaas ondervonden we problemen bij het uploaden van de {{count}} bestanden", + "uploadModalUploadingNoCount": "{{item}} aan het uploaden", + "uploadModalUploadingWithCount": "{{count}} {{item}} aan het uploaden", + "uploadModalUploadingWithCount_one": "{{count}} {{item}} aan het uploaden", + "uploadModalUploadingWithCount_other": "{{count}} {{item}} aan het uploaden", + "uploadModalUploadMore": "Meer uploaden", + "videoFilterAllTypes": "Alle videotypen" +} diff --git a/public/locales/nl-NL/release.json b/public/locales/nl-NL/release.json new file mode 100644 index 0000000000..a3bee7eafe --- /dev/null +++ b/public/locales/nl-NL/release.json @@ -0,0 +1,40 @@ +{ + "activateButton": "Release-app activeren", + "activateSubtitle": "Publiceer groepen inhoud tegelijkertijd.", + "createdAt": "Aangemaakt op", + "createdOn": "{{time}} op {{date}}", + "createdRelease": "Release aangemaakt: {{name}}", + "createRelease": "Release aanmaken", + "createReleaseButton": "Release aanmaken", + "deletedRelease": "Release {{name}} verwijderd", + "deleteRelease": "Release verwijderen", + "deleteWarning": "Het verwijderen van een release is een permanente actie.", + "errorMissingReleaseName": "Verplichte releasenaam ontbreekt", + "failedActivateReleases": "Activeren van releases mislukt", + "failedCreatingRelease": "Aanmaken van een release mislukt", + "failedDeletingRelease": "Verwijderen van release {{name}} mislukt", + "fieldReleaseDescription": "Releasebeschrijving", + "fieldReleaseName": "Reasenaam", + "instructionBeginSearch": "Begin met het zoeken naar inhoud die je in deze release wilt opnemen", + "instructionPublishAll": "Druk op de knop \"Alles publiceren\" om alle items in de release te publiceren", + "instructionSelectItem": "Selecteer een item uit de zoeklijst om het aan deze release toe te voegen", + "lang": "Taal", + "lastPublish": "Laatste publicatie", + "live": "Live", + "loadingRelease": "Release laden: {{name}}", + "members": "Onderdelen", + "missingItemMetaTitle": "Metatitel van item ontbreekt", + "neverPublished": "Nooit gepubliceerd", + "publishAll": "Alles publiceren", + "publishAllNoticeBody": "Dit publiceert alle onderdelen in deze release. Alle URL's van onderdelen en gerelateerde inhoud worden opgeschoond (purged).", + "publishedItems_one": "{{count}} item gepubliceerd", + "publishedItems_other": "{{count}} items gepubliceerd", + "publishing": "Publiceren...", + "releasesHeading": "Releases", + "searchPlaceholder": "Zoek op ZUID of metatitel om op te nemen in je release", + "startingRelease": "Release starten", + "startNewPublishPlan": "Nieuw publicatieplan starten", + "updatedReleaseMember": "Release ({{releaseName}}) lid ({{itemTitle}}) bijgewerkt naar versie {{version}}", + "versionNumber": "Versie {{version}}", + "versionPublishedAgo": "Versie {{version}} is {{timeAgo}} gepubliceerd" +} diff --git a/public/locales/nl-NL/reports.json b/public/locales/nl-NL/reports.json new file mode 100644 index 0000000000..9319c940d5 --- /dev/null +++ b/public/locales/nl-NL/reports.json @@ -0,0 +1,120 @@ +{ + "actionAddedStatus": "Status toegevoegd: {{labels}}", + "actionBy": "door", + "actionCount_one": "{{count}} actie", + "actionCount_other": "{{count}} acties", + "actionCreated": "Aangemaakt", + "actionDeleted": "Verwijderd", + "actionInBy": "In {{itemSubtext}} door", + "actionModified": "Gewijzigd", + "actionPublished": "Gepubliceerd", + "actionRemovedStatus": "Status verwijderd: {{labels}}", + "actions": "Acties", + "actionsByTitle": "Acties door", + "actionScheduledPublish": "Ingepland voor publicatie", + "actionScheduledPublishOn": "Ingepland voor publicatie op {{date}}", + "actionsLabel": "Acties", + "actionType": "Actietype", + "actionUnpublished": "Niet gepubliceerd", + "activityByResource": "Activiteit per resource", + "activityLog": "Activiteitenlogboek", + "activityLogSubtitle": "De tijdlijn van je instance per resource en gebruiker", + "activityLogTitle": "Activiteitenlogboek", + "affectedZUIDDeleted": "{{affectedZUID}} (Verwijderd)", + "affectedZUIDMissingMetaTitle": "{{affectedZUID}} (Metatitel ontbreekt)", + "allResponseCodes": "Alle responscodes", + "apiErrorMessage": "Er is een fout opgetreden bij het laden van de gegevens", + "apiErrorRetry": "Opnieuw proberen", + "apiErrorTitle": "Oeps!", + "bandwidth": "Bandbreedte", + "bandwidthBreakdown": "Overzicht van bandbreedte", + "blockVariants": "Blokvarianten", + "cdnUrl": "CDN-URL", + "codeFilesAndSnippets": "Codebestanden en snippets", + "contentModel": "Contentmodel", + "created": "Aangemaakt", + "date": "Datum", + "deleted": "Verwijderd", + "deletedZuid": "{{zuid}} (Verwijderd)", + "deletedZUID": "{{zuid}} (Verwijderd)", + "emptyStateHint": "Pas je filters aan om te vinden wat je zoekt.", + "failingNotFound": "Mislukt/Niet gevonden (404)", + "fieldPrefix": "Veld {{message}}", + "fileName": "Bestandsnaam", + "fileTypeDataset": "Headless datamodel", + "fileTypePageset": "Model voor meerdere pagina's", + "fileTypeTemplateset": "Model voor enkele pagina", + "headTag": "Head-tag", + "htmlCssBandwidth": "HTML/CSS/JavaScript-bandbreedte", + "insightActions": "Acties", + "instanceZuid": "Instance ZUID", + "lastActionAt": "Laatste actie om {{time}}", + "lastActionAtContentModel": "Laatste actie om {{lastAction}} • Contentmodel", + "lastActionAtSettings": "Laatste actie om {{lastAction}} • Instellingen", + "lastUpdated": "Laatst bijgewerkt: {{date}}", + "leastActive": "Minst actief", + "loadingMetrics": "Statistieken laden", + "maliciousDeflected": "Kwaadaardig/Afgeweerd (403)", + "mediaBandwidth": "Media-bandbreedte", + "messageButton": "Bericht sturen", + "metrics": "Statistieken", + "metricsLoadError": "Er is een fout opgetreden bij het laden van de statistieken: {{message}}", + "missingMetaTitleZuid": "{{zuid}} (Metatitel ontbreekt)", + "missingMetaTitleZUID": "{{zuid}} (Metatitel ontbreekt)", + "modelTypeBlockVariant": "Blokvariant", + "modelTypeHeadlessDataItem": "Headless data-item", + "modelTypeMultiPageItem": "Item for meerdere pagina's", + "modelTypeSinglePageItem": "Item voor enkele pagina", + "modified": "Gewijzigd", + "mostActive": "Meest actief", + "mostRecent": "Meest recent", + "mostRecentlyActive": "Meest recent actief", + "noInsightsFound": "Geen inzichten gevonden", + "noLogsFound": "Geen logs gevonden", + "noResourcesFound": "Geen resources gevonden", + "oldestFirst": "Oudste eerst", + "other": "Overig", + "pageRedirects": "Pagina-omleidingen (301)", + "pageRequests": "Paginaverzoeken", + "past30Days": "Afgelopen 30 dagen", + "past7Days": "Afgelopen 7 dagen", + "pastDay": "Afgelopen dag", + "pastDayWeek": "Week van de afgelopen dag", + "platformRequestBreakdown": "Overzicht van platformverzoeken (Totaal)", + "published": "Gepubliceerd", + "publishes": "Publicaties", + "redirectUrl": "Omleidings-URL", + "request": "Verzoek", + "requests": "Verzoeken", + "resources": "Resources", + "resourcesImpacted": "Beïnvloede resources", + "scheduled": "Ingepland", + "selectDateRange": "Selecteer datumbereik", + "settings": "Instellingen", + "successfulMediaRequests": "Succesvolle mediaverzoeken", + "successfulPageLoads": "Succesvol geladen pagina's (200)", + "tabInsights": "Inzichten", + "tabResources": "Resources", + "tabTimeline": "Tijdlijn", + "tabUsers": "Gebruikers", + "top10ActiveUsers": "Top 10 actieve gebruikers", + "top301Redirects": "Meest voorkomende 301-omleidingen", + "topFileNotFound": "Meest niet gevonden bestanden (404)", + "topMaliciousDeflected": "Meest voorkomende kwaadaardige / afgeweerde verzoeken", + "topRequestedMedia": "Meest aangevraagde media", + "topRequestedPages": "Meest aangevraagde pagina's", + "totalBandwidth": "Totale bandbreedte", + "totalRequests": "Totaal aantal verzoeken", + "totalUsageBreakdown": "Overzicht van totaal verbruik", + "unknownUser": "Onbekende gebruiker", + "unpublished": "Niet gepubliceerd", + "url": "URL", + "usageReport": "Verbruiksrapport", + "usageReportFor": "Verbruiksrapport voor {{timePeriod}} {{unit}} : {{startDisplay}} - {{endDisplay}}", + "userAvatar": "Avatar van {{name}}", + "userAvatarAlt": "Avatar van {{firstName}} {{lastName}}", + "userEmailCopied": "E-mailadres van gebruiker naar klembord gekopieerd", + "userListItemSecondary": "{{roleName}} • {{actionCount}} acties • Laatste actie om {{lastAction}}", + "userRole": "Gebruikersrol", + "viewAuditTrailReport": "Audit trail-rapport bekijken" +} diff --git a/public/locales/nl-NL/schema.json b/public/locales/nl-NL/schema.json new file mode 100644 index 0000000000..b835c16beb --- /dev/null +++ b/public/locales/nl-NL/schema.json @@ -0,0 +1,773 @@ +{ + "activityDetails": "Activiteitdetails", + "activityDetailsSubtitle": "Bekijk wanneer het model is aangemaakt, bijgewerkt en door wie", + "addAnotherField": "Nog een veld toevoegen", + "addAnotherFieldToModel": "Nog een veld toevoegen aan {{modelLabel}}", + "addField": "Veld toevoegen", + "addFieldsDescription": "Definieer de verschillende velden die deel moeten uitmaken van dit model.", + "addFieldsHeading": "Velden toevoegen", + "addFieldTitle": "{{name}}-veld toevoegen", + "addFieldToLabel": "Veld toevoegen aan {{label}}", + "addFieldToName": "Veld toevoegen aan {{name}}", + "addOption": "Optie toevoegen", + "advanced": "Geavanceerd", + "allModels": "Alle modellen", + "allModelsHeading": "Alle modellen", + "apiAccessDescription": "Zesty biedt meerdere API's voor toegang tot deze inhoud, elk met unieke voordelen. Selecteer degene die het beste bij uw behoeften past.", + "apiAccessOptions": "API-toegangsopties", + "apiBackendCodingDescription": "De REST API van Zesty biedt volledige toegang tot aanmaken, lezen, bijwerken, verwijderen en publiceren. De API is toegankelijk via directe API-aanroepen of via onze Node SDK.", + "apiBestUsedFor": "Het beste gebruikt voor", + "apiCustomEndpointsDescription": "Bouw elk gegevenstype (JSON, XML, HTML, enz.) en elk hydratieniveau met Zesty.io Parsley en Webengine.", + "apiGraphqlDescription": "Platte objecteindpunten die ideaal zijn voor het voeden van GraphQL-servers. Alleen toegankelijk door de gegevens te doorlopen via het GQL-eindpunt van het model.", + "apiLabelBackendCoding": "Back-end programmering", + "apiLabelCustomEndpoints": "Aangepaste endpoints", + "apiLabelGraphql": "GraphQL", + "apiLabelQuickAccess": "Snelle toegang", + "apiLabelSiteGenerators": "Site-generators", + "apiLabelVisualLayout": "Visuele lay-out", + "apiParsleyReferenceId": "API/Parsley-referentie-ID", + "apiParsleyReferenceIdTooltip": "ID gebruikt voor toegang tot dit model via onze API of Parsley", + "apiQuickAccessDescription": "biedt toegang tot volledige modellen Items of enkelvoudige items JSON-eindpunten met allerlei informatie. Gegevens vereisen handmatige hydratie.", + "apiSiteGeneratorsDescription": "Zesty converteert elke URL naar JSON met gehydrateerde relaties en navigatie-informatie. Elk inhoudsitem dat aan dit model wordt toegevoegd, heeft toegang tot gehydrateerde JSON-URL's.", + "apiTagReadAndWrite": "Lezen en schrijven", + "apiTagReadOnly": "Alleen lezen", + "apiUrlLabel": "API URL", + "apiUseApplicationsWithRouting": "Applicaties met routering", + "apiUseAppsOrHeadlessLayouts": "Apps of headless lay-outs", + "apiUseAutomation": "Automatisering", + "apiUseAutomationDesign": "Automatiseringsontwerp", + "apiUseContentExperiences": "Inhoudservaringen", + "apiUseCustomApps": "Aangepaste apps", + "apiUseCustomContentHydration": "Aangepaste inhoudshydratie", + "apiUseFullyPaintedHtmlViews": "Volledig gerenderde HTML-weergaven", + "apiUseGraphQlImplementations": "GraphQL-implementaties", + "apiUseHeadlessApplets": "Headless-applets", + "apiUseHeadlessWebDevelopment": "Headless webontwikkeling", + "apiUseMiddleware": "Middleware", + "apiUseMobileApplications": "Mobiele applicaties", + "apiUseSearch": "Zoeken", + "apiUseUserGeneratedContent": "Door gebruikers gegenereerde inhoud", + "apiVisualLayoutDescription": "Visuele lay-out is toegankelijk vanuit gerenderde HTML of gestructureerde JSON van het toJSON-eindpunt.", + "blockGroup": "Blokgroep", + "booleanOptionsLabel": "Booleaanse opties", + "cannotCreateModelTitle": "Kan model niet aanmaken", + "characterLimitDescription": "Stel een minimaal en/of maximaal toegestaan aantal tekens in", + "characterLimitLabel": "Tekentelling beperken", + "characterLimitMaxLabel": "Maximaal aantal tekens (inclusief spaties)", + "characterLimitMinLabel": "Minimaal aantal tekens (inclusief spaties)", + "clearFilters": "Filters wissen", + "comingSoon": "Binnenkort beschikbaar", + "commonFieldDescriptionLabel": "Beschrijving", + "commonFieldDescriptionTooltip": "Verschijnt onder de weergavenaam. Gebruik dit om instructies te geven aan contentschrijvers en API-gebruikers.", + "commonFieldLabelLabel": "Weergavenaam", + "commonFieldLabelTooltip": "De weergavenaam van het veld in het Schema.", + "commonFieldListLabel": "Toevoegen als kolom in de tabellijst", + "commonFieldListSubLabel": "Toont het veld als een kolom in de tabel in de inhoudsweergave", + "commonFieldNameLabel": "API / Parsley Code ID", + "commonFieldNameTooltip": "Dit wordt weergegeven in de API-reacties", + "commonFieldRequiredLabel": "Verplicht veld", + "commonFieldRequiredSubLabel": "Zorgt ervoor dat een item niet kan worden aangemaakt als het veld leeg is", + "commonFieldTooltipLabel": "Tooltip", + "commonFieldTooltipTooltip": "Tooltip die wordt weergegeven aan contenteditors.", + "commonUses": "Veelvoorkomende toepassingen", + "copyEmail": "E-mail kopiëren", + "copyFieldZuid": "Veld ZUID kopiëren", + "copyFieldZUID": "Veld ZUID kopiëren", + "copyModelZUID": "Model ZUID kopiëren", + "createdOn": "Aangemaakt op", + "createModel": "Model aanmaken", + "createModelButton": "Model aanmaken", + "createModelTitle": "{{modelName}} aanmaken", + "currencyFieldLabel": "Valuta", + "currencyFieldPlaceholder": "Selecteer een valuta", + "currencyFieldTooltip": "De geselecteerde valutacode, het symbool en de vlag worden weergegeven voor dit veld in het inhoudsitem en kunnen worden geopend via de veldinstellingen via de API.", + "currencyFlagAlt": "Vlag van {{countryCode}}", + "deactivatedFields": "Gedeactiveerde velden", + "deactivatedFieldsDescription": "Deze velden kunnen op elk gewenst moment opnieuw worden geactiveerd als u ze terug wilt brengen in het inhoudsmodel.", + "deactivateField": "Veld deactiveren", + "deactivatingField": "Veld deactiveren", + "defaultValue": "Standaardwaarde", + "defaultValueDescription": "Stel een vooraf gedefinieerde waarde in voor dit veld", + "defaultValueHelperText": "Stel een vooraf gedefinieerde waarde in voor dit veld", + "defaultValueLabel": "Standaardwaarde", + "deleteModel": "Model verwijderen", + "deleteModelCannotDeleteNotify": "Kan model niet verwijderen: {{modelLabel}}", + "deleteModelConfirmLabel": "Bevestig door \"{{modelLabel}}\" hieronder te typen.", + "deleteModelFailedNotify": "Verwijderen van model mislukt", + "deleteModelTitle": "Model verwijderen?", + "deleteModelWarning": "Het verwijderen van het model \"{{modelLabel}}\" verwijdert ook alle inhoudsitems. Dit kan niet ongedaan worden gemaakt.", + "descriptionLabel": "Beschrijving", + "descriptionPlaceholder": "Waarvoor wordt dit model gebruikt", + "descriptionTooltip": "Geeft het doel van het model weer om inhoudsschrijvers te helpen", + "displayNameLabel": "Weergavenaam", + "displayNamePlaceholder": "bijv. Startpagina, Over ons-pagina, Contactpagina, enz.", + "displayNameTooltip": "Naam die wordt weergegeven aan inhoudsredacteuren", + "dropdownOptionsLabel": "Vervolgkeuze-opties", + "duplicate": "Dupliceren", + "duplicateModel": "Model dupliceren", + "duplicateModelAlertBodyRich": "U staat op het punt het model {{label}} te dupliceren met alle bestaande velden. Er worden geen inhoudsitems gedupliceerd.", + "duplicateModelDescriptionLabel": "Beschrijving", + "duplicateModelDescriptionPlaceholder": "Waarvoor wordt dit model gebruikt", + "duplicateModelDisplayNameLabel": "Weergavenaam", + "duplicateModelDisplayNamePlaceholder": "Duplicaat van \"{{label}}\"", + "duplicateModelFailed": "Het dupliceren van het model is mislukt", + "duplicateModelListedDescription": "Vermelde modellen hebben hun inhoudsitems beschikbaar voor programmatische navigatie-aanroepen.", + "duplicateModelListedLabel": "Dit model vermelden", + "duplicateModelParentLabel": "Modelbovenliggende", + "duplicateModelParentPlaceholder": "Selecteer", + "duplicateModelReferenceIdLabel": "Referentie-ID", + "duplicateModelReferenceIdPlaceholder": "Automatisch gegenereerd vanuit weergavenaam", + "duplicateModelSubtitle": "Als een {{type}}-model", + "duplicateModelTitle": "{{label}}-model dupliceren", + "editField": "Veld bewerken", + "editFieldTitle": "{{label}} bewerken", + "editInCode": "Bewerken in code", + "editTemplateFile": "Sjabloonbestand bewerken", + "emptyStateBody": "Modellen definiëren de structuur van een inhoudsitem, zoals een startpagina of een artikel, vergelijkbaar met de voorbeeldmodellen die u rechts ziet.", + "emptyStateHeading": "Laten we beginnen met het aanmaken van modellen", + "emptyStateLinkBestPractices": "Leer best practices voor het aanmaken van modellen", + "emptyStateLinkBuildingModels": "Lees onze gids over het bouwen van modellen", + "endpointDevLabel": "Dev (nieuwste versie)", + "endpointProduction": "Productie", + "enterLabel": "Label invoeren", + "enterValue": "Waarde invoeren", + "errorFieldIsRequired": "{{label}} is verplicht", + "errorFieldReferenceExists": "Er bestaat al een veld met deze API/Parsley-referentie", + "errorOptionValueExists": "Er bestaat al een optie met deze waarde", + "errorShortenToLess": "Verkort tot minder dan {{maxLength}} tekens ({{currentLength}}/{{maxLength}})", + "errorSystemReservedFieldName": "\"{{value}}\" is een door het systeem gereserveerde veldnaam", + "extensionPresetAudios": "Audio", + "extensionPresetDocuments": "Documenten", + "extensionPresetImages": "Afbeeldingen", + "extensionPresetPresentations": "Presentaties", + "extensionPresetSpreadsheets": "Spreadsheets", + "extensionPresetVideos": "Video's", + "failedCreateField": "Aanmaken van veld mislukt", + "failedCreateModel": "Aanmaken van model mislukt", + "failedUpdateField": "Bijwerken van veld mislukt", + "faqBadge": "FAQ", + "fieldCategoryAdvanced": "Geavanceerd", + "fieldCategoryDateAndTime": "Datum en tijd", + "fieldCategoryMedia": "Media", + "fieldCategoryNumeric": "Numeriek", + "fieldCategoryRelationship": "Relatie", + "fieldCategoryText": "Tekst", + "fieldDeactivated": "Veld \"{{label}}\" is gedeactiveerd", + "fieldDescriptionBodyText": "Een gedetailleerde tekst die context of instructies voor het formulier biedt.", + "fieldDescriptionButtonContainerSubText": "Ondersteunende tekst onder de call-to-action-knoppen in de linkerkolom.", + "fieldDescriptionCompanyLogo": "Het logo van het bedrijf dat de persoon vertegenwoordigt.", + "fieldDescriptionCompanyName": "De naam van het bedrijf dat de persoon vertegenwoordigt.", + "fieldDescriptionCtaButton1TextLeftSection": "De tekst voor de eerste call-to-action-knop in de linkerkolom.", + "fieldDescriptionCtaButton1TextNoSection": "De tekst voor de eerste call-to-action-knop.", + "fieldDescriptionCtaButton1Url": "De URL waarnaar de eerste call-to-action-knop verwijst.", + "fieldDescriptionCtaButton2TextLeftSection": "De tekst voor de tweede call-to-action-knop in de linkerkolom.", + "fieldDescriptionCtaButton2Url": "De URL waarnaar de tweede call-to-action-knop verwijst.", + "fieldDescriptionCtaButtonTextFeatureSection": "De tekst voor de call-to-action-knop in de featuresectie.", + "fieldDescriptionCtaButtonUrl": "De URL waarnaar de call-to-action-knop verwijst.", + "fieldDescriptionFeatureIntroLink": "De URL gekoppeld aan de inleidende featuretekst.", + "fieldDescriptionFeatureIntroText": "Een korte inleidende tekst voor de featuresectie.", + "fieldDescriptionFormCtaButtonText": "De tekst voor de call-to-action-knop op het formulier.", + "fieldDescriptionFormHeaderText": "Een subkop of inleiding voor het contactformulier.", + "fieldDescriptionHeroImageFeatureSection": "De afbeelding weergegeven naast de featuresectie.", + "fieldDescriptionHeroImageHeroSection": "De afbeelding weergegeven in de herosectie.", + "fieldDescriptionHeroImageRight": "De afbeelding weergegeven aan de rechterkant van de herosectie.", + "fieldDescriptionJobTitle": "De functietitel van de persoon die het citaat geeft.", + "fieldDescriptionNameInput": "Een label voor het naamingevoerveld.", + "fieldDescriptionPersonEmail": "Het e-mailadres van de primaire contactpersoon.", + "fieldDescriptionPersonImage": "De afbeelding van de persoon die het citaat geeft.", + "fieldDescriptionPersonName": "De naam van de primaire contactpersoon.", + "fieldDescriptionPersonNameTestimonial": "De naam van de persoon die het citaat geeft.", + "fieldDescriptionPersonPhoto": "Een foto van de primaire contactpersoon.", + "fieldDescriptionPersonTitle": "De titel of rol van de primaire contactpersoon.", + "fieldDescriptionPosition": "De positie van de persoon in zijn bedrijf.", + "fieldDescriptionQuote": "De getuigenis of het citaat van een persoon.", + "fieldDescriptionStarRatingNumber": "Een numerieke beoordeling weergegeven in de herosectie.", + "fieldDescriptionStarRatingSubText": "Aanvullende details over de sterbeoordeling.", + "fieldDescriptionStarRatingTitle": "Een titel die de sterbeoordeling beschrijft.", + "fieldDescriptionSubTitleFeatureSection": "De ondersteunende tekst die meer detail over de feature biedt.", + "fieldDescriptionSubTitleHeroSection": "De ondersteunende tekst weergegeven onder de titel in de herosectie.", + "fieldDescriptionSubTitleLeftSection": "De ondersteunende tekst weergegeven onder de titel in de linkerkolom.", + "fieldDescriptionTitle": "De primaire kop weergegeven in de linkerkolom.", + "fieldDescriptionTitleContactForm": "De hoofdkop voor het contactformulier.", + "fieldDescriptionTitleFeatureSection": "De hoofdkop voor de featuresectie.", + "fieldDescriptionTitleHeroSection": "De primaire kop weergegeven in de herosectie.", + "fieldDescriptionTopCtaButtonText": "De tekst voor de bovenste call-to-action-knop.", + "fieldDescriptionTopCtaButtonUrl": "De URL waarnaar de bovenste call-to-action-knop verwijst.", + "fieldFormTabDetails": "Details", + "fieldFormTabLearn": "Leren", + "fieldFormTabRepeaterFields": "Velden", + "fieldFormTabRules": "Regels", + "fieldLabelBodyText": "Hoofdtekst", + "fieldLabelButtonContainerSubText": "Subtekst knopcontainer", + "fieldLabelCompanyLogo": "Bedrijfslogo", + "fieldLabelCompanyName": "Bedrijfsnaam", + "fieldLabelCtaButton1Text": "CTA-knoptekst 1", + "fieldLabelCtaButton1Url": "CTA-knop-URL 1", + "fieldLabelCtaButton2Text": "CTA-knoptekst 2", + "fieldLabelCtaButton2Url": "CTA-knop-URL 2", + "fieldLabelCtaButtonText": "CTA-knoptekst", + "fieldLabelCtaButtonUrl": "CTA-knop-URL", + "fieldLabelFeatureIntroLink": "Inleidende link feature", + "fieldLabelFeatureIntroText": "Inleidende tekst feature", + "fieldLabelFormCtaButtonText": "CTA-knoptekst formulier", + "fieldLabelFormHeaderText": "Formulierkopregel", + "fieldLabelHeroImage": "Hero-afbeelding", + "fieldLabelJobTitle": "Functietitel", + "fieldLabelPersonEmail": "E-mailadres persoon", + "fieldLabelPersonImage": "Afbeelding persoon", + "fieldLabelPersonName": "Persoonsnaam", + "fieldLabelPersonPhoto": "Foto persoon", + "fieldLabelPersonTitle": "Persoonsfunctie", + "fieldLabelPosition": "Positie", + "fieldLabelQuote": "Citaat", + "fieldLabelStarRatingNumber": "Sterbeoordelingsgetal", + "fieldLabelStarRatingSubText": "Subtekst sterbeoordeling", + "fieldLabelStarRatingTitle": "Sterbeoordeling titel", + "fieldLabelSubTitle": "Ondertitel", + "fieldLabelTitle": "Titel", + "fieldLabelTopCtaButtonText": "Bovenste CTA-knoptekst", + "fieldLabelTopCtaButtonUrl": "Bovenste CTA-knop-URL", + "fieldListSearchPlaceholder": "Velden zoeken", + "fieldReactivated": "Veld \"{{label}}\" is opnieuw geactiveerd", + "fields": "Velden", + "fieldToDisplayLabel": "Te weergeven veld", + "fieldToDisplayPlaceholder": "Selecteer een veld", + "fieldTypeBlockSelectorCommonUse1": "Voettekstsectie", + "fieldTypeBlockSelectorCommonUse2": "Blok aan het einde van een artikel", + "fieldTypeBlockSelectorCommonUse3": "Formulieren", + "fieldTypeBlockSelectorDescription": "Het veld Blokselector biedt een gebruiker de mogelijkheid om een unieke variant te selecteren van elk blokmodel dat hij op zijn pagina wil weergeven.", + "fieldTypeBlockSelectorName": "Blokselector", + "fieldTypeBlockSelectorProTip": "Dit is ideaal wanneer u verschillende eindblokken wilt gebruiken aan het einde van verschillende pagina's van hetzelfde model.", + "fieldTypeBlockSelectorShortDesc": "Koppelen aan een variant van een blokmodel", + "fieldTypeBlockSelectorSubHeader": "Koppelen aan een variant van een blokmodel", + "fieldTypeBooleanCommonUse1": "Uitgelichte blogberichten of producten markeren", + "fieldTypeBooleanCommonUse2": "Kortingen in e-commerceproducten", + "fieldTypeBooleanCommonUse3": "Badges markeren zoals \"Pro-auteur\"", + "fieldTypeBooleanCommonUse4": "Items verbergen", + "fieldTypeBooleanDescription": "Dit veld is bedoeld wanneer u wilt dat een veld slechts twee mogelijke waarden heeft. Bijv. ja of nee, waar of onwaar, uitgelicht of niet uitgelicht, enz.", + "fieldTypeBooleanName": "Boolean", + "fieldTypeBooleanProTip": "Gebruik booleaanse velden om items te filteren die u in een verzameling wilt weergeven.", + "fieldTypeBooleanShortDesc": "Waar of onwaar", + "fieldTypeBooleanSubHeader": "Gebruikt voor het instellen van waar- of onwaarwaarden", + "fieldTypeColorCommonUse1": "Achtergrondkleuren", + "fieldTypeColorCommonUse2": "Randkleuren", + "fieldTypeColorCommonUse3": "Lettertypekleuren", + "fieldTypeColorCommonUse4": "Kleuren van categorielabels wijzigen", + "fieldTypeColorDescription": "Dit veld is perfect wanneer u verschillende elementen op uw pagina wilt opmaken, zoals achtergrondkleuren, tekstkleuren, randen, enz. Bijdragers krijgen een kleurenkiezer om een kleur naar keuze te selecteren.", + "fieldTypeColorName": "Kleur", + "fieldTypeColorProTip": "Kleurenkiezers kunnen worden gebruikt om items op een unieke manier te markeren en een gebruiker in staat te stellen items eenvoudig van elkaar te onderscheiden.", + "fieldTypeColorShortDesc": "Achtergrondkleuren, lettertypekleuren en meer", + "fieldTypeColorSubHeader": "Gebruikt voor achtergrondkleuren, lettertypekleuren en meer", + "fieldTypeCurrencyCommonUse1": "Kostprijs van een product of dienst", + "fieldTypeCurrencyCommonUse2": "Verkoopprijs van een product of dienst", + "fieldTypeCurrencyDescription": "Dit veld is bedoeld wanneer u een kostprijs, verkoopprijs of saldo wilt opslaan.", + "fieldTypeCurrencyName": "Valuta", + "fieldTypeCurrencyProTip": "Gebruik valutavelden in plaats van getalvelden als u prijzen wilt opslaan.", + "fieldTypeCurrencyShortDesc": "Perfect voor productprijzen", + "fieldTypeCurrencySubHeader": "Gebruikt voor het opslaan van kosten, prijzen en saldi", + "fieldTypeDateCommonUse1": "Geboortedatums", + "fieldTypeDateCommonUse2": "Jubileums", + "fieldTypeDateCommonUse3": "Historische datums", + "fieldTypeDateCommonUse4": "Releasedatums", + "fieldTypeDateDescription": "Dit veld is bedoeld wanneer u wilt dat de invoer een datum uit het verleden, heden of de toekomst is. U kunt aanpassen of een gebruiker een dag, maand, jaar of alle drie kan invoeren.\n\n Zesty houdt datums en tijden automatisch bij voor de aanmaakdatum, publicatiedatum en wijzigingsdatum, zodat er geen aanvullende velden voor hoeven te worden aangemaakt.", + "fieldTypeDateName": "Datum", + "fieldTypeDateProTip": "Als u een tijd aan uw datum wilt toevoegen, gebruik dan het veld Datum en tijd.", + "fieldTypeDateShortDesc": "Perfect voor verjaardagen, releasedatums, evenementen, enz.", + "fieldTypeDateSubHeader": "Gebruikt voor verjaardagen, releasedatums, evenementen, enz.", + "fieldTypeDateTimeCommonUse1": "Begin- en eindtijden van evenementen", + "fieldTypeDateTimeCommonUse2": "Verzendtijdstip", + "fieldTypeDateTimeCommonUse3": "Deadlines", + "fieldTypeDateTimeDescription": "Dit veld is bedoeld wanneer u wilt dat de invoer een datum en tijd is. U kunt aanpassen of een gebruiker een tijd, dag, maand, jaar of alle vier kan invoeren.\n\n Zesty houdt datums en tijden automatisch bij voor de aanmaakdatum, publicatiedatum en wijzigingsdatum, zodat er geen aanvullende velden voor hoeven te worden aangemaakt.", + "fieldTypeDateTimeName": "Datum en tijd", + "fieldTypeDateTimeProTip": "Als u alleen een datum wilt, gebruik dan het datumveld.", + "fieldTypeDateTimeShortDesc": "Datums bijhouden samen met specifieke tijden", + "fieldTypeDateTimeSubHeader": "Gebruikt voor het bijhouden van datums samen met specifieke tijden", + "fieldTypeDropdownCommonUse1": "Geslachten", + "fieldTypeDropdownCommonUse2": "Vooraf gedefinieerde maten", + "fieldTypeDropdownCommonUse3": "Talen", + "fieldTypeDropdownCommonUse4": "Bedrijfsafdelingen", + "fieldTypeDropdownDescription": "Dit veld is bedoeld wanneer u wilt dat een gebruiker een waarde kiest uit een vervolgkeuzelijst met door u vooraf gedefinieerde opties. U kunt deze waarden definiëren in de veldinstellingen.", + "fieldTypeDropdownName": "Vervolgkeuzelijst", + "fieldTypeDropdownProTip": "De waarden die u aan een vervolgkeuzelijstveld toevoegt, zijn alleen beschikbaar voor het model waaraan het veld is toegevoegd. Als u waarden nodig heeft die herbruikbaar en toegankelijk zijn in meerdere modellen, maak dan een apart model aan en gebruik een relatiefield om ernaar te verwijzen.", + "fieldTypeDropdownShortDesc": "Selecteren uit een lijst met waarden", + "fieldTypeDropdownSubHeader": "Gebruikt om een gebruiker te laten selecteren uit een lijst met waarden", + "fieldTypeExternalUrlCommonUse1": "Koppelen aan affiliatesites (bijv. Amazon)", + "fieldTypeExternalUrlCommonUse2": "Koppelen aan socialemediapagina's op Facebook, Instagram, enz.", + "fieldTypeExternalUrlCommonUse3": "Koppelen aan diensten van derden zoals Eventbrite voor evenementen of Doordash voor bestellingen", + "fieldTypeExternalUrlDescription": "Dit veld is ideaal voor het opslaan van URL's naar pagina's op externe websites. Deze links kunnen door gebruikers worden weergegeven en aangeklikt.", + "fieldTypeExternalUrlName": "Externe URL", + "fieldTypeExternalUrlProTip": "U kunt ook links toevoegen in rich-tekstvelden.", + "fieldTypeExternalUrlShortDesc": "Koppelen aan een externe website", + "fieldTypeExternalUrlSubHeader": "Gebruik dit veld om te koppelen aan een externe website", + "fieldTypeIntegrationCommonUse1": "Statistieken - Externe statistieken ophalen", + "fieldTypeIntegrationCommonUse2": "Integratie van derden - Details ophalen uit een externe app", + "fieldTypeIntegrationCommonUse3": "Formulieren - Externe formulierinzendingen importeren", + "fieldTypeIntegrationCommonUse4": "Inhoud importeren vanuit een andere Zesty-instantie", + "fieldTypeIntegrationCommonUse5": "Extern CMS - Inhoud weergeven vanuit een extern CMS", + "fieldTypeIntegrationCommonUse6": "Spreadsheets - Spreadsheetgegevens ophalen", + "fieldTypeIntegrationDescription": "Met dit veld kunnen gebruikers gegevens ophalen uit een JSON API, vermeldingen selecteren en deze aan een inhoudsitem toevoegen. De gegevens blijven statisch totdat ze opnieuw worden geselecteerd, wat gecontroleerde updates garandeert.", + "fieldTypeIntegrationName": "Integratie", + "fieldTypeIntegrationProTip": "De gegevens worden opgeslagen als een JSON-object en kunnen headless of via Parsley worden benaderd voor dynamische weergave in sjablonen.", + "fieldTypeIntegrationShortDesc": "Gegevens ophalen en opslaan vanuit API's", + "fieldTypeIntegrationSubHeader": "Gegevens ophalen en opslaan vanuit API's", + "fieldTypeInternalLinkCommonUse1": "Koppelen aan interne producten", + "fieldTypeInternalLinkCommonUse2": "Koppelen aan interne artikelen", + "fieldTypeInternalLinkDescription": "Interne koppelingsvelden bieden de mogelijkheid om een intern instantie-item uit een willekeurig schema te selecteren. Dit is handig voor auteurs die een item overal in de instantie kunnen relateren.", + "fieldTypeInternalLinkName": "Interne koppeling", + "fieldTypeInternalLinkProTip": "U kunt externe URL-velden gebruiken als u wilt koppelen aan externe websites.", + "fieldTypeInternalLinkShortDesc": "Koppelen aan een intern inhoudsitem", + "fieldTypeInternalLinkSubHeader": "Gebruik dit veld om te koppelen aan een intern inhoudsitem", + "fieldTypeMarkdownCommonUse1": "Blogberichten", + "fieldTypeMarkdownCommonUse2": "Artikelen", + "fieldTypeMarkdownCommonUse3": "Gidsen", + "fieldTypeMarkdownCommonUse4": "Lijsten", + "fieldTypeMarkdownCommonUse5": "Evenementbeschrijvingen", + "fieldTypeMarkdownDescription": "Dit veld biedt bijdragers een editor met Github Flavored Markdown-syntaxis voor het opmaken en structureren van inhoud.", + "fieldTypeMarkdownName": "Markdown", + "fieldTypeMarkdownProTip": "Dit veld werkt uitstekend wanneer u wilt dat bijdragers opmaak en structuur aan de tekst kunnen toepassen.", + "fieldTypeMarkdownShortDesc": "Lichtgewicht opmaaktaal voor het opmaken van tekst", + "fieldTypeMarkdownSubHeader": "Lichtgewicht opmaaktaal voor het opmaken van tekst", + "fieldTypeMediaCommonUse1": "Omslagafbeeldingen voor artikelen", + "fieldTypeMediaCommonUse2": "Profielfoto's van auteurs of teamleden", + "fieldTypeMediaCommonUse3": "Productgalerijen", + "fieldTypeMediaCommonUse4": "Illustraties en iconen", + "fieldTypeMediaCommonUse5": "Video's van demo's, tutorials en bedrijfsonboarding", + "fieldTypeMediaCommonUse6": "Achtergrondafbeeldingen", + "fieldTypeMediaCommonUse7": "Pdf's van whitepapers, e-books, menu's, kaarten en meer", + "fieldTypeMediaCommonUse8": "PowerPoint-presentaties", + "fieldTypeMediaDescription": "Met dit veld kan een gebruiker een of meer mediabestanden toevoegen, zoals een afbeelding, video, document, presentatie, enzovoort. U kunt het maximale aantal bestanden dat een gebruiker kan uploaden en de maximale bestandsgrootte per upload instellen.", + "fieldTypeMediaName": "Media", + "fieldTypeMediaProTip": "U kunt ook media inline toevoegen in rich-tekstvelden.", + "fieldTypeMediaShortDesc": "Afbeeldingen, video's, pdf's en andere bestanden", + "fieldTypeMediaSubHeader": "Gebruikt voor afbeeldingen, video's, pdf's en andere bestanden", + "fieldTypeMultiLineTextCommonUse1": "Subkoppen", + "fieldTypeMultiLineTextCommonUse2": "Artikelsamenvattingen", + "fieldTypeMultiLineTextCommonUse3": "Productbeschrijvingen", + "fieldTypeMultiLineTextCommonUse4": "Categoriebeschrijvingen", + "fieldTypeMultiLineTextCommonUse5": "Auteursbio's", + "fieldTypeMultiLineTextDescription": "Het veld Tekst op meerdere regels is het meest geschikt voor lange tekstinhoud die geen speciale opmaak, links of media vereist.", + "fieldTypeMultiLineTextName": "Tekst op meerdere regels", + "fieldTypeMultiLineTextProTip": "Dit veld werkt uitstekend wanneer u wilt voorkomen dat bijdragers opmaak op de tekst toepassen.", + "fieldTypeMultiLineTextShortDesc": "Beschrijvingen, samenvattingen en teasers", + "fieldTypeMultiLineTextSubHeader": "Gebruikt voor beschrijvingen, samenvattingen en teasers", + "fieldTypeNumberCommonUse1": "Hoeveelheid producten in de voorraad", + "fieldTypeNumberCommonUse2": "Rangschikkingen", + "fieldTypeNumberCommonUse3": "Beoordelingen", + "fieldTypeNumberCommonUse4": "Gewicht", + "fieldTypeNumberCommonUse5": "Hoogte", + "fieldTypeNumberDescription": "Dit veld is bedoeld wanneer u wilt dat de invoer een getal is.", + "fieldTypeNumberName": "Getal", + "fieldTypeNumberProTip": "Getalvelden kunnen zowel gehele getallen als decimalen bevatten.", + "fieldTypeNumberShortDesc": "Gehele getallen en kommagetallen", + "fieldTypeNumberSubHeader": "Gebruikt voor hoeveelheid, leeftijd, beoordelingen, enz.", + "fieldTypeOneToManyCommonUse1": "Een artikel koppelen aan meerdere auteurs, tags of categorieën", + "fieldTypeOneToManyCommonUse2": "Een auteur koppelen aan meerdere diensten", + "fieldTypeOneToManyDescription": "Met dit veld kunt u uw model verbinden met een ander model en meerdere items selecteren in plaats van één.", + "fieldTypeOneToManyName": "Een-op-veel-relatie", + "fieldTypeOneToManyProTip": "Dit veld is ideaal wanneer u of uw team herhaaldelijk dezelfde invoer typt, zoals auteursnamen. Het is dan handiger om een model van auteurs te maken en er een koppeling mee te maken, zodat u dit niet bij elk artikel opnieuw hoeft in te typen.", + "fieldTypeOneToManyShortDesc": "Koppelen aan meerdere inhoudsitems van een model", + "fieldTypeOneToManySubHeader": "Gebruik dit veld om te koppelen aan meerdere inhoudsitems van een model", + "fieldTypeOneToOneCommonUse1": "Een artikel koppelen aan één auteur of categorie", + "fieldTypeOneToOneCommonUse2": "Een medewerker koppelen aan één dienst", + "fieldTypeOneToOneDescription": "Dit veld is perfect voor het verbinden van uw model met een ander model. Bijvoorbeeld het koppelen van een blog aan een categorie of een auteur.", + "fieldTypeOneToOneName": "Een-op-een-relatie", + "fieldTypeOneToOneProTip": "Dit veld is ideaal wanneer u of uw team herhaaldelijk dezelfde invoer typt, zoals auteursnamen. Het is dan handiger om een model van auteurs te maken en er een koppeling mee te maken, zodat u dit niet bij elk artikel opnieuw hoeft in te typen.", + "fieldTypeOneToOneShortDesc": "Koppelen aan één inhoudsitem van een model", + "fieldTypeOneToOneSubHeader": "Gebruik dit veld om te koppelen aan één inhoudsitem van een model", + "fieldTypeRepeaterCommonUse1": "Dia's", + "fieldTypeRepeaterCommonUse2": "Getuigenissen", + "fieldTypeRepeaterCommonUse3": "Recepten", + "fieldTypeRepeaterCommonUse4": "Evenementtijden", + "fieldTypeRepeaterDescription": "Het veld Herhaler biedt u de mogelijkheid om een groep velden te maken voor herhalende inhoud. Handig voor meerdere items, zoals dia's, teamleden of FAQ's.", + "fieldTypeRepeaterName": "Herhaler", + "fieldTypeRepeaterProTip": "Gebruik een herhaalveld voor het beheren van lijsten of secties met een gemeenschappelijke structuur maar unieke inhoud, zoals recepten of getuigenissen.", + "fieldTypeRepeaterShortDesc": "Een herhalende lijst van gegroepeerde velden", + "fieldTypeRepeaterSubHeader": "Gebruikt voor groepen van statische velden", + "fieldTypeSingleLineTextCommonUse1": "Artikeltitels", + "fieldTypeSingleLineTextCommonUse2": "Auteursnamen", + "fieldTypeSingleLineTextCommonUse3": "Evenementnamen", + "fieldTypeSingleLineTextCommonUse4": "Categorielabels", + "fieldTypeSingleLineTextCommonUse5": "Koppen", + "fieldTypeSingleLineTextDescription": "Het veld \"Tekst op één regel\" is het meest geschikt voor korte tekstinhoud die geen speciale opmaak, links of media vereist.", + "fieldTypeSingleLineTextName": "Tekst op één regel", + "fieldTypeSingleLineTextProTip": "Dit veld werkt uitstekend wanneer u wilt voorkomen dat bijdragers opmaak op de tekst toepassen.", + "fieldTypeSingleLineTextShortDesc": "Titels, namen en koppen", + "fieldTypeSingleLineTextSubHeader": "Gebruikt voor titels, namen en koppen", + "fieldTypeSortOrderCommonUse1": "De volgorde van uitgelichte producten instellen", + "fieldTypeSortOrderCommonUse2": "De volgorde van categorieën instellen", + "fieldTypeSortOrderCommonUse3": "De volgorde van video's van een cursus instellen", + "fieldTypeSortOrderDescription": "Er zijn situaties waarbij u gegevens wilt sorteren, niet op naam of datum, maar op een door de gebruiker gedefinieerde aangepaste volgorde. In zo'n geval kunt u een veld voor sorteervolgorde toevoegen waarmee u het volgordenummer van elk inhoudsitem kunt opgeven.", + "fieldTypeSortOrderName": "Sorteervolgorde", + "fieldTypeSortOrderProTip": "U kunt het standaard sorteernummer wijzigen met de plus- en minusknoppen in de weergave van het inhoudsitem en in de tabelweergave.", + "fieldTypeSortOrderShortDesc": "Volgorde aan inhoudsitems toevoegen", + "fieldTypeSortOrderSubHeader": "Gebruikt voor het toevoegen van volgorde aan inhoudsitems", + "fieldTypeUuidCommonUse1": "Product-ID", + "fieldTypeUuidCommonUse2": "Voorraad-ID", + "fieldTypeUuidCommonUse3": "Medewerkers-ID", + "fieldTypeUuidDescription": "Het UUID-veld maakt een unieke alfanumerieke reeks aan wanneer een item wordt aangemaakt. Dit is handig voor analyticstracking, voorraadbeheer, gebruikersbeheer, enz.", + "fieldTypeUuidName": "UUID", + "fieldTypeUuidProTip": "UUID's zijn altijd uniek en niet bewerkbaar.", + "fieldTypeUuidShortDesc": "Genereert unieke, niet-bewerkbare alfanumerieke identifiers", + "fieldTypeUuidSubHeader": "Gebruikt voor het instellen van unieke id's voor elk inhoudsitem", + "fieldTypeWysiwygCommonUse1": "Blogberichten", + "fieldTypeWysiwygCommonUse2": "Artikelen", + "fieldTypeWysiwygCommonUse3": "Gidsen", + "fieldTypeWysiwygCommonUse4": "Lijsten", + "fieldTypeWysiwygCommonUse5": "Evenementbeschrijvingen", + "fieldTypeWysiwygDescription": "Dit veld is het meest geschikt voor lange tekstinhoud met meerdere koppen, alinea's en inline media zoals video's, afbeeldingen of links. U kunt ook geavanceerde tekstopmaak toepassen zoals vet, cursief en onderstrepen.", + "fieldTypeWysiwygName": "WYSIWYG", + "fieldTypeWysiwygProTip": "Dit veld werkt uitstekend wanneer u wilt dat bijdragers opmaak en structuur aan de tekst kunnen toepassen.", + "fieldTypeWysiwygShortDesc": "Lange tekstinhoud met links en afbeeldingen, zoals blogs", + "fieldTypeWysiwygSubHeader": "Lange tekstinhoud met links en afbeeldingen, zoals blogs", + "fieldValidationTitle": "Veldvalidatie, standaardwaarden en meer", + "fileExtensionsErrorMessageLabel": "Foutmelding bestandsextensies", + "fileExtensionsLabel": "Bestandsextensies", + "folderDeletedError": "De map waaraan dit was vergrendeld, is verwijderd", + "formFieldApiCodeId": "API / Parsley-code-ID", + "formFieldApiCodeIdTooltip": "Dit verschijnt in de API-reacties.", + "formFieldApiUrl": "API-URL", + "formFieldBooleanOptions": "Booleaanse opties", + "formFieldCurrencyLabel": "Valuta", + "formFieldCurrencyPlaceholder": "Selecteer een valuta", + "formFieldCurrencyTooltip": "De geselecteerde valutacode, het symbool en de vlag worden weergegeven voor dit veld in het inhoudsitem en zijn toegankelijk via de veldinstellingen via de API.", + "formFieldDefaultValue": "Standaardwaarde", + "formFieldDescriptionLabel": "Beschrijving", + "formFieldDescriptionTooltip": "Verschijnt onder het weergavelabel. Gebruik dit om instructies te geven aan inhoudsschrijvers en API-gebruikers.", + "formFieldDisplayLabel": "Weergavelabel", + "formFieldDisplayLabelTooltip": "De weergavenaam van het veld zoals te zien in Schema.", + "formFieldDropdownOptions": "Vervolgkeuzeopties", + "formFieldFieldToDisplay": "Weer te geven veld", + "formFieldFieldToDisplayPlaceholder": "Selecteer een veld", + "formFieldFileExtensions": "Bestandsextensies", + "formFieldFileExtensionsErrorMessage": "Foutmelding bestandsextensies", + "formFieldListLabel": "Als kolom toevoegen in tabeloverzicht", + "formFieldListSubLabel": "Toont het veld als een kolom in de tabel in de inhoudsweergave", + "formFieldMaxCharLimit": "Maximaal aantal tekens (inclusief spaties)", + "formFieldMaxValue": "Maximumwaarde", + "formFieldMediaItemLimit": "Limiet voor media-items", + "formFieldMediaItemLimitTooltip": "Stel de minimale limiet voor mediabestanden in op 1. Deze kan niet lager worden ingesteld.", + "formFieldMinCharLimit": "Minimaal aantal tekens (inclusief spaties)", + "formFieldMinValue": "Minimumwaarde", + "formFieldReferenceModel": "Referentiemodel", + "formFieldReferenceModelPlaceholder": "Selecteer een model", + "formFieldRegexMatchErrorMessage": "Foutmelding bij regex-overeenkomst", + "formFieldRegexMatchPattern": "Regex-overeenkomstpatroon", + "formFieldRegexRestrictErrorMessage": "Foutmelding bij regex-beperking", + "formFieldRegexRestrictPattern": "Regex-beperkingspatroon", + "formFieldRequiredLabel": "Verplicht veld", + "formFieldRequiredSubLabel": "Zorgt ervoor dat een item niet kan worden aangemaakt als het veld leeg is", + "formFieldSelectFolder": "Map selecteren", + "formFieldTooltipLabel": "Knopinfo", + "formFieldTooltipLabelTooltip": "Knopinfo weergegeven aan inhoudsredacteuren.", + "goToAllModels": "Ga naar alle modellen", + "headerTitle": "Schema", + "headlessDescription": "Gebruik Zesty als headless back-end met technologieën zoals NextJS, NuxtJS, React, Swift, Gatsby, Flutter, Angular, enz.", + "headlessModeDescription": "Dit is ideaal voor engineers die volledig buiten Zesty.io werken in technologieën zoals NextJS, NuxtJS of Angular. Wanneer de headless-modus is ingeschakeld, renderen alle routes als JavaScript Object Notation (JSON).\n\nOpmerking: Deze wijziging kan later worden teruggedraaid via Algemene instellingen", + "headlessSwitcherSubtitle": "U bevindt zich momenteel in de traditionele webengine-modus. Meld u aan om nu over te schakelen naar Hybrid of Headless. U kunt dit altijd wijzigen via Algemene instellingen. Meer informatie", + "headlessSwitcherTitle": "Wilt u onze headless API's gebruiken?", + "howIsDataStored": "Hoe worden de gegevens opgeslagen?", + "hybridDescription": "Hybrid combineert het beste van twee werelden. Pagina's renderen nog steeds HTML op hun routes, maar ze kunnen ook JSON renderen met een eenvoudige get-parameter.", + "hybridModeDescription": "Hybrid combineert het beste van twee werelden. Pagina's renderen nog steeds HTML op hun routes, maar ze kunnen ook JSON renderen met een eenvoudige get-parameter. Zo geeft /over/ HTML terug, maar /over/?toJSON geeft een volledig gehydrateerd JSON-object van de over-pagina terug.\n\nOpmerking: Deze wijziging kan later worden teruggedraaid via Algemene instellingen", + "inputRangeHelperText": "Stel een minimale en/of maximale toegestane waarde in", + "inputRangeLabel": "Invoerbereik beperken", + "inputRangeMaximum": "Maximum", + "inputRangeMinimum": "Minimum", + "integrationLimitItemRange": "Itembereik beperken", + "integrationLimitItemRangeDescription": "Stel een minimum en/of maximum aantal items in", + "lastUpdated": "Laatst bijgewerkt: {{date}}", + "lastUpdatedBy": "Laatst bijgewerkt door", + "lastUpdatedOn": "Laatst bijgewerkt op", + "learnBestPracticesModels": "Leer best practices voor het aanmaken van modellen", + "learnBlocksTutorial": "Leer de basisprincipes van blokken met een handleiding", + "learnMore": "Meer informatie", + "limitCharacterCount": "Tekentelling beperken", + "limitCharacterCountDescription": "Geeft een minimaal en/of maximaal toegestaan aantal tekens op", + "listThisModel": "Dit model vermelden", + "listThisModelDescription": "Vermelde modellen hebben hun inhoudsitems beschikbaar voor programmatische navigatie-aanroepen.", + "maxValueLabel": "Maximumwaarde", + "mediaItemLimitLabel": "Limiet media-items", + "mediaItemLimitTooltip": "Stel de minimale mediabewerkingslimiet in op 1. Dit kan niet lager.", + "mediaRulesAddPresetLabel": "Toevoegen", + "mediaRulesAllowMultipleLabel": "Meerdere bestanden toestaan om te selecteren", + "mediaRulesAllowMultipleSubLabel": "Zorgt ervoor dat meerdere bestanden kunnen worden geüpload in plaats van de standaard van slechts 1 bestand", + "mediaRulesCustomErrorMessageLabel": "Aangepaste foutmelding *", + "mediaRulesExtensionsInputLabel": "Extensies *", + "mediaRulesFileExtensionsAllowedError": "Alleen bestanden met de volgende extensies zijn toegestaan: {{extensions}}", + "mediaRulesLimitFileTypesLabel": "Bestandstypen beperken", + "mediaRulesLimitFileTypesSubLabel": "Zorgt ervoor dat alleen bepaalde bestandstypen worden geaccepteerd", + "mediaRulesLockFolderLabel": "Vergrendelen op een map", + "mediaRulesLockFolderSubLabel": "Zorgt ervoor dat bestanden alleen geselecteerd kunnen worden uit een specifieke map", + "minValueLabel": "Minimumwaarde", + "modelDescriptionLabel": "Beschrijving", + "modelDescriptionTooltip": "Geeft het doel van het model weer om inhoudsschrijvers te helpen", + "modelDetailsSubtitle": "De primaire eigenschappen van uw model bekijken en bijwerken", + "modelDetailsTitle": "Modeldetails", + "modelNameBlock": "Blok", + "modelNameDataset": "Dataset", + "modelNameMultiPage": "Meerpagina", + "modelNameSinglePage": "Enkelpagina", + "modelNameTooltip": "Naam die wordt weergegeven aan inhoudsredacteuren", + "modelParent": "Modelbovenliggende", + "modelsTableColumnContentItems": "Contentelementen", + "modelsTableColumnFields": "Velden", + "modelsTableColumnName": "Naam", + "modelsTableColumnType": "Modeltype", + "modelsTableColumnUpdated": "Bijgewerkt", + "modelType": "Modeltype", + "modelTypeBlockDescription": "Maakt een verzameling vermeldingen aan zonder URL's en met een codesjabloon", + "modelTypeBlockExamples": "bijv. Hero's, Features, Getuigenissen, enz.", + "modelTypeBlockName": "Blokmodel", + "modelTypeDataset": "dataset", + "modelTypeDatasetDescription": "Maakt een verzameling vermeldingen aan zonder URL's en zonder codesjablonen", + "modelTypeDatasetExamples": "bijv. Dia's, FAQ's, Merken, enz.", + "modelTypeDatasetName": "Datasetmodel", + "modelTypeLabel": "{{modelType}}-model", + "modelTypeMultiPage": "meerpagina", + "modelTypeMultiPageDescription": "Maakt een verzameling pagina's aan met unieke URL's en een codesjabloon", + "modelTypeMultiPageExamples": "bijv. Artikelen, Auteurs, Producten, enz.", + "modelTypeMultiPageName": "Meerpaginamodel", + "modelTypeSinglePage": "enkelpagina", + "modelTypeSinglePageDescription": "Maakt afzonderlijke pagina's aan met unieke URL's en een codesjabloon", + "modelTypeSinglePageExamples": "bijv. Startpagina, Over ons-pagina, enz.", + "modelTypeSinglePageName": "Enkelpaginamodel", + "needHelp": "Hulp nodig?", + "noActiveFieldsInModel": "Er zijn geen actieve velden in dit model.", + "noFilterResultsHeader": "Geen modellen gevonden", + "noFilterResultsSubHeader": "Pas de filters aan om te vinden wat u zocht.", + "noMatchesFound": "Geen resultaten gevonden.", + "noneValue": "Geen", + "noSearchResultsAlt": "Geen zoekresultaten", + "noSearchResultsHeader": "Uw zoekopdracht \"{{searchTerm}}\" heeft geen resultaten opgeleverd", + "noSearchResultsSubHeader": "Pas uw zoekopdracht aan. Controleer of alle woorden correct zijn gespeld of probeer andere zoekwoorden.", + "notifyCannotCreateModel": "Kan model niet aanmaken", + "notifyPleaseAddDisplayName": "Voeg een weergavenaam toe", + "ogImageFieldDescription": "Met dit veld kunt u een Open Graph-afbeelding instellen via het SEO-tabblad. Een Open Graph (OG)-afbeelding is een afbeelding die verschijnt in een social-mediabericht wanneer een webpagina wordt gedeeld.", + "ogImageFieldLabel": "Meta-afbeelding", + "openCodeApp": "Code-app openen", + "openVisualLayout": "Visuele lay-out openen", + "optionalLabel": "optioneel", + "parentModel": "Bovenliggend model", + "parentModelTooltip": "Het selecteren van een bovenliggend element beïnvloedt de standaardroutering en inhoudsnavigatie in de gebruikersinterface", + "pleaseAddDisplayName": "Voeg een weergavenaam toe", + "proTip": "Pro-tip", + "reactivateField": "Veld opnieuw activeren", + "reactivatingField": "Veld opnieuw activeren", + "readDocs": "Documentatie lezen", + "readDocsModelTypes": "Lees onze documentatie over de verschillende modeltypen en hun gebruik", + "readFieldTypesGuide": "Lees onze gids over veldtypen in Schema", + "referenceId": "Referentie-ID", + "referenceIdAlreadyInUse": "Dit referentie-ID is al in gebruik. Voer een andere in.", + "referenceIdLabel": "Referentie-ID", + "referenceIdPlaceholder": "Automatisch gegenereerd vanuit weergavenaam", + "referenceIdTooltip": "ID gebruikt voor toegang tot dit model via onze API of Parsley", + "referenceModelLabel": "Referentiemodel", + "referenceModelPlaceholder": "Selecteer een model", + "regexCustomErrorMessage": "Aangepaste foutmelding *", + "regexCustomErrorMessageTooltip": "Wordt weergegeven als de gebruiker een invoer invoert die niet aan de vereisten voldoet", + "regexInvalidHelper": "De opgegeven regex is niet geldig. Raadpleeg de regex-documentatie op MDN.", + "regexKnowledgeRequired": "Kennis van reguliere expressies (Regex) is vereist. Het invoeren van onjuiste regex-patronen kan voorkomen dat inhoudesvelden gebruikersinvoer accepteren.", + "regexMatchErrorEmail": "Moet een e-mailadres zijn (bijv. hallo@zesty.io)", + "regexMatchErrorMessageLabel": "Foutmelding Regex-overeenkomst", + "regexMatchErrorSlug": "Moet een slug zijn (bijv. alles-over-contentmarketing)", + "regexMatchErrorUrl": "Moet een URL zijn (bijv. https://www.google.com/)", + "regexMatchPatternLabel": "Regex-overeenkomstpatroon", + "regexMatchSpecificPattern": "Overeenkomst met een specifiek patroon", + "regexNotMatchingPattern": "Komt niet overeen met het verwachte patroon", + "regexPattern": "Patroon", + "regexPatternMatchingRules": "Regels voor regex-patroonovereenkomst", + "regexPatternTooltip": "Voer een reguliere expressie (regex) patroon in — een reeks tekens voor patroonovereenkomst in tekenreeksen", + "regexRestrictErrorEmail": "Mag geen e-mailadres zijn (bijv. hallo@zesty.io)", + "regexRestrictErrorMessageLabel": "Foutmelding Regex-beperking", + "regexRestrictErrorSlug": "Mag geen slug zijn (bijv. alles-over-contentmarketing)", + "regexRestrictErrorUrl": "Mag geen URL zijn (bijv. https://www.google.com/)", + "regexRestrictPatternLabel": "Regex-beperkingspatroon", + "regexRestrictSpecificPattern": "Een specifiek patroon beperken", + "regexSetMatchExpression": "Stel de reguliere expressie (bijv. e-mail, URL, enz.) in waarmee de invoer moet overeenkomen", + "regexSetRestrictExpression": "Stel de reguliere expressie (bijv. e-mail, URL, enz.) in waarmee de invoer niet mag overeenkomen", + "regexType": "Type", + "regexTypeCustom": "Aangepast", + "regexTypeEmail": "E-mail", + "regexTypeSlug": "Slug", + "regexTypeTooltip": "Selecteer uit een lijst met vooraf ingestelde regex-patroontypen of schrijf uw eigen aangepaste regex-patroon", + "regexTypeUrl": "URL", + "relatedModelDeletedError": "Het model waarmee dit was gerelateerd, is verwijderd", + "relatedModels": "Gerelateerde modellen", + "relatedModelsDescription": "Bekijk de modellen waarmee dit model is verbonden", + "removeField": "Veld verwijderen", + "renameModel": "Model hernoemen", + "renameModelDescription": "Dit werkt de weergavenaam en referentie-ID van het model bij die worden weergegeven aan inhoudsredacteuren en ontwikkelaars", + "renameModelDisplayNameLabel": "Weergavenaam", + "renameModelDisplayNameTooltip": "Naam die wordt weergegeven aan inhoudsredacteuren", + "renameModelFailedNotify": "Hernoemen van model mislukt", + "renameModelReferenceIdHelperText": "De referentienaam wordt gebruikt in aangepaste codebestanden en eindpunten. Het bijwerken van deze waarde heeft onmiddellijk effect in productie. Raadpleeg uw ontwikkelaar voordat u wijzigingen aanbrengt.", + "renameModelReferenceIdLabel": "Referentie-ID", + "renameModelReferenceIdTooltip": "ID gebruikt voor toegang tot dit model via onze API of Parsley", + "renameModelTitle": "Model hernoemen", + "repeaterDataStorageDescription": "Gegevens worden opgeslagen als een JSON-array van objecten, die eenvoudig toegankelijk zijn, zowel direct als via Parsley met de each-opdracht.", + "repeaterSubFieldCount_one": "{{count}} veld", + "repeaterSubFieldCount_other": "{{count}} velden", + "restEndpointLabel": "REST-eindpunt (vereist authenticatiebearer)", + "searchFieldTypesPlaceholder": "Veldtypen zoeken", + "searchModelsPlaceholder": "Modellen zoeken", + "searchVariants": "Varianten zoeken", + "selectBlockType": "Selecteer een bloktype", + "selectedItemNotFound": "Geselecteerd item niet gevonden: {{value}}", + "selectFieldTypeTitle": "Selecteer een veldtype", + "selectFolderLabel": "Map selecteren", + "selectModelType": "Selecteer modeltype", + "selectModelTypeSubtitle": "Het modeltype dat u selecteert, bepaalt hoe inhoudsitems worden weergegeven in de interface en of URL's en sjablonen worden aangemaakt. Opmerking: Alle modellen kunnen headless worden gebruikt", + "selectParentTooltip": "Het selecteren van een bovenliggend element beïnvloedt de standaardroutering en inhoudsnavigatie in de gebruikersinterface", + "selectPlaceholder": "Selecteer", + "seoFieldLinkTitle": "SEO-linktitel", + "seoFieldMetaDescription": "SEO-metabeschrijving", + "seoFieldMetaKeywords": "SEO-metazoekwoorden", + "seoFieldMetaTitle": "SEO-metatitel", + "seoMetaFields": "SEO-metavelden", + "seoMetaFieldsDescription": "Inhoudsmodellen voor enkelpagina-, meerpagina- en datasetmodellen worden geleverd met SEO-metavelden die toegankelijk zijn via API of Parsley. Deze velden zijn beschikbaar om de vindbaarheid in zoekmachines te verbeteren en worden gebruikt voor massaal zoeken in de Zesty API. De waarde van deze velden is te vinden onder de meta-sleutel in het Instances API-eindpunt.", + "showSystemFields": "Systeemvelden weergeven", + "sortLastCreated": "Laatst aangemaakt", + "sortLastModified": "Laatst gewijzigd", + "starterBlockBlankDescription": "Een leeg blok", + "starterBlockBlankLabel": "Leeg", + "starterBlockCodeTemplateLink": "Codesjabloon", + "starterBlockContactUsFormDescription": "Een eenvoudig contactformulier voor het verzamelen van leads van elke pagina", + "starterBlockContactUsFormLabel": "Contactformulier", + "starterBlockCreateButton": "Blokmodel aanmaken", + "starterBlockCreatingModelBody": "Dit kan een paar minuten duren.", + "starterBlockCreatingModelHeading": "Model aanmaken", + "starterBlockDescriptionHeading": "Beschrijving", + "starterBlockDetailsHeading": "Details", + "starterBlockDisplayNameInUse": "Weergavenaam is al in gebruik. Gebruik een andere weergavenaam.", + "starterBlockDisplayNameLabel": "Weergavenaam", + "starterBlockDisplayNamePlaceholder": "bijv. Startpagina, Over ons-pagina, Contactpagina, enz.", + "starterBlockDisplayNameTooltip": "Naam die wordt weergegeven aan inhoudsredacteuren", + "starterBlockFeatureSideBySideImageDescription": "Een feature met tekst links en een afbeelding rechts", + "starterBlockFeatureSideBySideImageLabel": "Feature naast afbeelding", + "starterBlockFieldsHeading": "Velden", + "starterBlockFormCodeTemplate": "Codesjabloon", + "starterBlockFormCreateBlockModel": "Blokmodel aanmaken", + "starterBlockFormCreatingModel": "Model aanmaken...", + "starterBlockFormCreatingModelDescription": "Dit kan een paar minuten duren.", + "starterBlockFormDescription": "Beschrijving", + "starterBlockFormDetails": "Details", + "starterBlockFormDisplayName": "Weergavenaam", + "starterBlockFormDisplayNameInUse": "Deze weergavenaam is al in gebruik. Kies een andere weergavenaam.", + "starterBlockFormDisplayNamePlaceholder": "bijv. Homepagina, Over ons-pagina, Contactpagina, etc.", + "starterBlockFormDisplayNameTooltip": "Naam die wordt getoond aan contentredacteuren", + "starterBlockFormFields": "Velden", + "starterBlockFormReferenceId": "Referentie-ID", + "starterBlockFormReferenceIdInUse": "Deze referentie-ID is al in gebruik. Kies een andere referentie-ID.", + "starterBlockFormReferenceIdPlaceholder": "Automatisch gegenereerd op basis van weergavenaam", + "starterBlockFormReferenceIdTooltip": "ID die wordt gebruikt om toegang te krijgen zu dit model via onze API of Parsley", + "starterBlockFormResources": "Bronnen", + "starterBlockFormSeeBootstrapTemplate": "Bekijk Bootstrap-sjabloon", + "starterBlockHeroImageBelowDescription": "Een hero met tekst en CTA-knoppen bovenaan en een afbeelding eronder", + "starterBlockHeroImageBelowLabel": "Hero-afbeelding hieronder", + "starterBlockReferenceIdLabel": "Referentie-ID", + "starterBlockReferenceIdPlaceholder": "Automatisch gegenereerd vanuit weergavenaam", + "starterBlockReferenceIdTooltip": "ID gebruikt voor toegang tot dit model via onze API of Parsley", + "starterBlockRefIdInUse": "Referentie-ID is al in gebruik. Gebruik een andere referentie-ID.", + "starterBlockResourcesHeading": "Bronnen", + "starterBlockSeeBootstrapTemplate": "Bootstrap-sjabloon bekijken", + "starterBlockSideBySideHeroImageDescription": "Een hero met tekst en CTA-knoppen links en een afbeelding rechts", + "starterBlockSideBySideHeroImageLabel": "Hero-afbeelding naast elkaar", + "starterBlockSingleTestimonialDescription": "Een enkele getuigeniscitaat met de naam, afbeelding en bedrijfsgegevens van een persoon", + "starterBlockSingleTestimonialLabel": "Enkele getuigenis", + "starterBlocksSearchPlaceholder": "Varianten zoeken", + "starterBlocksSelectionSubtitle": "Begin met een leeg blok of selecteer uit onze selectie van vooraf ontworpen blokken", + "starterBlocksSelectionTitle": "Selecteer een bloktype", + "starterBlocksSubtitle": "Begin met een leeg blok of kies uit onze selectie van vooraf ontworpen blokken", + "starterBlocksTutorialLink": "Leer de basisprincipes van blokken met een tutorial", + "subFieldFormAddTitle": "{{name}}-veld toevoegen", + "subFieldFormEditTitle": "{{label}} bewerken", + "subFieldFormTypeFieldLabel": "{{type}}-veld", + "switchToHeadless": "Overschakelen naar Headless", + "switchToHybrid": "Overschakelen naar Hybrid", + "switchToMode": "Overschakelen naar {{mode}}", + "switchWebEngineModeTitle": "Webengine-modus overschakelen naar {{mode}}", + "systemFieldCreatedAt": "Aangemaakt op", + "systemFieldItemZuid": "Item ZUID", + "systemFieldMasterZuid": "Master ZUID", + "systemFieldModelZuid": "Model ZUID", + "systemFields": "Systeemvelden", + "systemFieldsDescription": "Elk inhoudsitem (kind) van een model in Zesty wordt geleverd met niet-bewerkbare systeemvelden die de toestand van de inhoud weergeven, zoals wanneer het is aangemaakt, bijgewerkt en de versie. De waarde van deze velden is te vinden onder de meta-sleutel in het Instances API-eindpunt.", + "systemFieldUpdatedAt": "Bijgewerkt op", + "systemFieldVersion": "Versie", + "tabActivityLog": "Activiteitenlogboek", + "tabDetails": "Details", + "tabFields": "Velden", + "tabInfo": "Info", + "tabLearn": "Leren", + "tabRules": "Regels", + "templateBlogDescription": "Perfect voor bloggen met velden voor titel, hoofdinhoud, uitgelichte afbeelding en categorie.", + "templateBlogTitle": "Blog", + "templateFileEmpty": "Sjabloonbestand is leeg", + "templateFileEmptyBody": "Voeg de code voor het blok toe via de Code-app.", + "templateLandingPageDescription": "Een eenvoudige landingspagina met velden voor een hero-, feature- en voettekstsectie.", + "templateLandingPageTitle": "Landingspagina", + "tooltipWhatIsAField": "Wat is een {{fieldName}}-veld?", + "tooltipWhatIsAnField": "Wat is een {{fieldName}}-veld?", + "typeTextArticleWriter": "Artikelschrijver", + "typeTextBlockSelector": "Blokselector", + "typeTextBoolean": "Boolean", + "typeTextColor": "Kleur", + "typeTextCurrency": "Valuta", + "typeTextDate": "Datum", + "typeTextDatetime": "Datum en tijd", + "typeTextDropdown": "Vervolgkeuzelijst", + "typeTextFiles": "Bestanden", + "typeTextFontawesome": "Font Awesome", + "typeTextImages": "Media", + "typeTextIntegration": "Integratie", + "typeTextInternalLink": "Interne koppeling", + "typeTextLink": "Externe URL", + "typeTextMarkdown": "Markdown", + "typeTextNumber": "Getal", + "typeTextOneToMany": "Een op veel", + "typeTextOneToOne": "Een op één", + "typeTextRepeater": "Herhaler", + "typeTextSort": "Sorteervolgorde", + "typeTextText": "Tekst op één regel", + "typeTextTextarea": "Tekst op meerdere regels", + "typeTextUuid": "UUID", + "typeTextWysiwygAdvanced": "WYSIWYG (Geavanceerd)", + "typeTextWysiwygBasic": "WYSIWYG", + "uniqueField": "Uniek veld", + "uniqueFieldDescription": "Zorgt ervoor dat meerdere items niet dezelfde waarde voor dit veld kunnen hebben", + "updateBlockGroupDescription": "Dit bepaalt in welke groep het blok wordt weergegeven op de pagina Alle blokken in de Blokken-app.", + "updateBlockGroupFailedNotify": "Bijwerken van blokgroep mislukt", + "updateBlockGroupTitle": "Blokgroep bijwerken", + "updated": "Bijgewerkt", + "updateDescriptionDialogBody": "Dit werkt de beschrijving van het model bij die wordt weergegeven aan inhoudsredacteuren", + "updateDescriptionDialogTitle": "Beschrijving bijwerken", + "updateDescriptionFailedNotify": "Bijwerken van beschrijving mislukt", + "updateDescriptionInputLabel": "Beschrijving", + "updateDescriptionInputPlaceholder": "Waarvoor wordt dit model gebruikt", + "updateDescriptionInputTooltip": "Geeft het doel van het model weer om inhoudsschrijvers te helpen", + "updateParentDialogBody": "Het selecteren van een bovenliggend element beïnvloedt de standaardroutering en inhoudsnavigatie in de gebruikersinterface.", + "updateParentDialogTitle": "Bovenliggend model bijwerken", + "updateParentInputTooltip": "Het selecteren van een bovenliggend element beïnvloedt de standaardroutering en inhoudsnavigatie in de gebruikersinterface", + "validationCannotBeLessThanMinValue": "Mag niet minder zijn dan de minimumwaarde", + "validationCannotExceedMaxCharCount": "Mag het maximale aantal tekens niet overschrijden", + "validationCannotExceedMaxChars": "Mag niet meer dan {{maxLength}} tekens bevatten", + "validationCannotExceedMaxValue": "Mag de maximumwaarde niet overschrijden", + "validationFieldRequired": "Dit veld is verplicht", + "validationIncompleteApiConfig": "Onvolledige API-configuratie", + "validationInvalidNumber": "Ongeldig getal", + "validationInvalidRegexPattern": "Ongeldig regex-patroon", + "validationRequiredField": "Verplicht veld. Voer een waarde in.", + "validationSelectCurrency": "Selecteer een valuta", + "viewAllActivity": "Alle activiteiten bekijken", + "viewContent": "Inhoud bekijken", + "viewEndpoints": "Eindpunten bekijken", + "viewVariants": "Varianten bekijken", + "whatIsAFieldType": "Wat is een {{fieldType}}-veld?", + "whatIsAnFieldType": "Wat is een {{fieldType}}-veld?", + "wizardCreatingModel": "Model aanmaken", + "wizardEnterContentEntry": "Een inhoudsinvoer invoeren", + "wizardSelectCollectionSubtitle": "Begin vanuit een van onze vele schemacollecties om ons product beter te leren kennen", + "wizardSelectCollectionTitle": "Selecteer een schemacollectie", + "wizardSuccessHeading": "Uw modellen voor uw {{title}} zijn nu gebouwd!", + "zuidLabel": "ZUID", + "zuidTooltip": "Inhoudsitems zijn altijd toegankelijk ten opzichte van hun model, dus een model ZUID is vereist voor elke aanroep." +} diff --git a/public/locales/nl-NL/seo.json b/public/locales/nl-NL/seo.json new file mode 100644 index 0000000000..ecb19ca430 --- /dev/null +++ b/public/locales/nl-NL/seo.json @@ -0,0 +1,117 @@ +{ + "addAllRedirects": "Alle Omleidingen Toevoegen", + "changeDialogBody": "Dit wordt een permanente 301-omleiding en zorgt ervoor dat bezoekers die het oude pad gebruiken naadloos naar het nieuwe pad worden doorgestuurd.", + "changeDialogCreateRedirect": "Omleiding Aanmaken", + "changeDialogDontCreate": "Niet Aanmaken", + "changeDialogNewPath": "Nieuw pad", + "changeDialogOldPath": "Oud pad", + "changeDialogRedirectCreated": "1 Omleiding Aangemaakt", + "changeDialogTitle": "Wijziging URL-pad gedetecteerd. Omleiding aanmaken van het oude pad naar het nieuwe pad?", + "closeImport": "Import Sluiten", + "columnHttpCode": "HTTP-code", + "columnIncomingPath": "Inkomend Pad", + "columnTarget": "Doel", + "columnType": "Type", + "createFormAddPath": "Pad Toevoegen", + "createFormCreateAnotherRedirect": "Nog een Omleiding Aanmaken", + "createFormCreateRedirect": "Omleiding Aanmaken", + "createFormExternalUrlPlaceholder": "Voer URL in (bijv. https://www.google.com/)", + "createFormFilePathOnlyTooltip": "Alleen Bestandspad", + "createFormHttpCodeLabel": "HTTP-code", + "createFormIncomingPathLabel": "Inkomend Pad", + "createFormNotifyCreated_one": "{{count}} Omleiding Aangemaakt", + "createFormNotifyCreated_other": "{{count}} Omleidingen Aangemaakt", + "createFormNotifySaved": "Omleiding Opgeslagen: {{path}}", + "createFormPathPlaceholder": "/Voer het URL-pad in om van door te sturen", + "createFormRedirectTargetLabel": "Omleidingsdoel", + "createFormTypeLabel": "Type", + "createFormValueCannotBeModified": "Deze waarde kan niet worden gewijzigd", + "createRedirectHeader": "Omleiding Aanmaken", + "createRedirectIncomingPath": "Inkomende paden zijn hoofdletterongevoelig en afsluitende slashes worden automatisch verwerkt", + "createRedirectSubHeader": "Uw nieuwe omleidingen worden direct actief nadat ze zijn aangemaakt.", + "deleteRedirect": "Omleiding Verwijderen", + "deleteRedirectDescriptionPlural": "Het verwijderen van deze {{count}} omleidingen voor deze inkomende paden", + "deleteRedirectDescriptionPlural_one": "Het verwijderen van deze {{count}} omleiding voor dit inkomende pad", + "deleteRedirectDescriptionPlural_other": "Het verwijderen van deze {{count}} omleidingen voor deze inkomende paden", + "deleteRedirectDescriptionSingular": "Het verwijderen van deze omleiding voor dit inkomende pad", + "deleteRedirectDescriptionSuffix": "verwijdert ze direct van uw site. Deze actie kan niet ongedaan worden gemaakt.", + "deleteRedirectDescriptionSuffix_one": "verwijdert het direct van uw site. Deze actie kan niet ongedaan worden gemaakt.", + "deleteRedirectDescriptionSuffix_other": "verwijdert ze direct van uw site. Deze actie kan niet ongedaan worden gemaakt.", + "deleteRedirectsButton": "Omleidingen Verwijderen ({{count}})", + "deleteRedirectsButton_one": "Omleiding Verwijderen ({{count}})", + "deleteRedirectsButton_other": "Omleidingen Verwijderen ({{count}})", + "deleteRedirectTitle_one": "{{count}} Omleiding Verwijderen", + "deleteRedirectTitle_other": "{{count}} Omleidingen Verwijderen", + "editRedirect": "Omleiding Bewerken", + "editRedirectHeader": "Omleiding Bewerken", + "editRedirectIncomingPath": "Afsluitende slashes en hoofdlettervariaties in paden worden automatisch verwerkt in WebEngine.", + "editRedirectSubHeader": "Wijzigingen die u aanbrengt worden direct actief bij het opslaan", + "errorDeletingRedirects": "Fout bij het verwijderen van omleidingen", + "errorDialogBody": "De volgende paden konden niet worden opgeslagen als omleidingen.", + "errorDialogNotifyCreated_one": "{{count}} Omleiding Aangemaakt", + "errorDialogNotifyCreated_other": "{{count}} Omleidingen Aangemaakt", + "errorDialogNotifySaved": "Omleiding Opgeslagen: {{path}}", + "errorDialogTitle_one": "{{count}} Omleiding kon niet worden aangemaakt", + "errorDialogTitle_other": "{{count}} Omleidingen konden niet worden aangemaakt", + "filterRedirects": "Omleidingen Filteren", + "httpCode301Label": "301 - Permanente Omleiding", + "httpCode301Permanent": "301 - Permanent", + "httpCode302Label": "302 - Tijdelijke Omleiding", + "httpCode302Temporary": "302 - Tijdelijk", + "importCsvXml": "CSV/XML Importeren", + "importErrorDialogBodyRich": "Het bestandsformaat of de structuur komt niet overeen met wat werd verwacht. Controleer uw CSV- of XML-bestand en raadpleeg onze <1>importgids in onze documentatie voor het juiste formaat.", + "importErrorDialogHeader": "Bestandsimport Mislukt", + "importFileReadError": "Bestand lezen mislukt: {{err}}", + "importInvalidFileSelected": "Ongeldig bestand geselecteerd", + "importMustBeCsv": "Import moet een CSV-bestand zijn", + "importRowCreated": "Aangemaakt", + "importRowPreExisting": "Reeds Bestaand", + "importTableFrom": "Van", + "importTableTo": "Naar", + "importTableType": "Type", + "importXmlSitemapSpec": "XML-sitemap-imports moeten de {{specUrl}} specificatie volgen.", + "invalidUrlEnterValid": "Ongeldige URL. Voer een geldige URL in.", + "loading": "Laden...", + "redirectButton": "Omleiden", + "redirectCreateFailed": "Omleiding aanmaken mislukt", + "redirectCreateFailedFromPath": "Omleiding aanmaken vanuit {{path}} mislukt. {{error}}", + "redirectCreateSuccess": "Omleiding aangemaakt", + "redirectDeleted_one": "{{count}} Omleiding Verwijderd", + "redirectDeleted_other": "{{count}} Omleidingen Verwijderd", + "redirectQueryStringPlaceholder": "Omleidingsqueryreeks", + "redirectRemoveFailed": "SEO-omleiding verwijderen mislukt", + "redirectsLoadFailed": "Laden van omleidingsgegevens mislukt", + "redirectTargetHasBeenDeleted": "Omleidingsdoel is", + "redirectTypeExternal": "Extern", + "redirectTypeInternal": "Intern", + "redirectTypeWildcard": "Wildcard", + "redirectUrl": "Omleidings-URL", + "searchForItem": "Zoek naar item", + "selectAll": "Alles Selecteren", + "selectedCount": "{{count}} Geselecteerd", + "selectedCount_one": "{{count}} Geselecteerd", + "selectedCount_other": "{{count}} Geselecteerd", + "sortHttpCode": "HTTP-code", + "sortIncomingPath": "Inkomend Pad", + "sortTarget": "Doel", + "sortType": "Type", + "targetErrorInvalidUrl": "Ongeldige URL. Voer een geldige URL in.", + "targetErrorUnpublished": "Dit item is nog niet gepubliceerd. Inkomende paden leiden naar uw 404-pagina totdat het live gaat.", + "targetOptionExternalLabel": "Extern - koppeling naar een externe webpagina", + "targetOptionInternalLabel": "Intern - koppeling naar een gepubliceerd item in uw instantie", + "targetOptionWildcardLabel": "Wildcard - kan meerdere omleidingen afhandelen met één regel", + "tooltipCode301": "[301] - Permanente Omleiding: Gebruik dit wanneer inhoud permanent naar een nieuwe locatie is verplaatst. Zoekmachines zullen hun index bijwerken.", + "tooltipCode302": "[302] - Tijdelijke Omleiding: Gebruik dit wanneer inhoud tijdelijk elders staat en u van plan bent het terug te verplaatsen. Zoekmachines werken hun index doorgaans niet bij voor de nieuwe locatie.", + "tooltipTargetTypeExternal": "Extern bijv. https://zesty.org/", + "tooltipTargetTypeInternal": "Intern bijv. /over-ons", + "tooltipTargetTypeWildcard": "Wildcard bijv. /blog/*/*/", + "totalRedirects_one": "{{count}} Totaal Omleiding", + "totalRedirects_other": "{{count}} Totaal Omleidingen", + "tryAgain": "Opnieuw Proberen", + "typeExternal": "Extern", + "typeFilterExternal": "Extern - koppeling naar een externe webpagina", + "typeFilterInternal": "Intern - gekoppeld aan een item in deze instantie", + "typeFilterWildcard": "Wildcard - regelgebaseerde omleidingen", + "typeInternal": "Intern", + "typeWildcard": "Wildcard" +} diff --git a/public/locales/nl-NL/settings.json b/public/locales/nl-NL/settings.json new file mode 100644 index 0000000000..4ad0ad6c41 --- /dev/null +++ b/public/locales/nl-NL/settings.json @@ -0,0 +1,183 @@ +{ + "activeStatuses": "Actieve statussen", + "activeStatusesSubtitle": "Actieve statussen kunnen worden toegevoegd aan en verwijderd uit inhoudsitems.", + "AddLangCodeToPaths": "Standaard taalcode toevoegen aan pad", + "addStatusNotification": "Gebruikers die deze status kunnen toevoegen, ontvangen een melding.", + "AjaxCorsAllowAnyOrigin": "Aangepaste view-endpoints » Alle origins toestaan (CORS)", + "AlwaysRedirectToHttps": "Altijd doorverwijzen naar HTTPS", + "AutoIncludeJsInHead": "JavaScript automatisch opnemen in de head", + "AutomatedFeedXml": "Geautomatiseerd feed.xml", + "BaseDirectory": "Basismap", + "BasicContentApiEnabled": "Toegang tot de Instant JSON API voor content.", + "browseFontsTitle": "Bladeren door lettertypen", + "bynderAssetsDescription": "Stroomlijn je workflow door je team eenvoudig toegang te geven al je Bynder-assets binnen Zesty", + "bynderAssetsHeading": "Gebruik je Bynder-assets binnen Zesty", + "bynderChangePortal": "Bynder-portal wijzigen", + "bynderConnect": "Verbinden met Bynder", + "bynderConnectedPortal": "Jouw instantie is verbonden met de volgende Bynder-portal", + "bynderDisconnect": "Verbinding verbreken", + "bynderIntegration": "Bynder-integratie", + "bynderLogoAlt": "Bynder-logo", + "bynderPreviewAlt": "Bynder-voorbeeld", + "CanonicalTagsEnabled": "Canonieke tags inschakelen", + "categoryAnalytics": "Analytics", + "categoryBlog": "Blog", + "categoryBynder": "Bynder", + "categoryContactForm": "Contactformulier", + "categoryCustom": "Aangepast", + "categoryDeveloper": "Ontwikkelaar", + "categoryExporter": "Exporteur", + "categoryExtensions": "Extensies", + "categoryForCustomEndpoint": "Voor aangepast endpoint", + "categoryGeneral": "Algemeen", + "categoryGroupby": "GroupBy", + "categoryI18n": "i18n", + "categoryIntegrations": "Integraties", + "categoryLogosection": "Logo-sectie", + "categoryLogoSection": "Logo-sectie", + "categoryOverrides": "Overschrijvingen", + "categoryPetdesk": "PetDesk", + "categoryProxy": "Proxy", + "categoryRouting": "Routing", + "categorySecurity": "Beveiliging", + "categorySeo": "SEO", + "categorySettingsSaved": "{{category}}-instellingen opgeslagen", + "categorySitelink": "Sitelink", + "categorySocialLinks": "Sociale links", + "categoryStripe": "Stripe", + "categoryTagManagers": "Tagbeheerders", + "categoryTwitter": "Twitter", + "categoryUps": "UPS", + "categoryVerification": "Verificatie", + "categoryYoutube": "YouTube", + "ClientKey": "GroupBy-clientsleutel", + "Collection": "Standaard GroupBy-collectie", + "color": "Kleur", + "colorBlue": "Blauw", + "colorDeepPurple": "Donkerpaars", + "colorGreen": "Groen", + "colorGrey": "Grijs", + "colorOrange": "Oranje", + "colorPink": "Roze", + "colorPurple": "Paars", + "colorRed": "Rood", + "colorRequired": "Kleur is verplicht", + "colorRose": "Rosé", + "colorYellow": "Geel", + "confirmSaveDialogBody": "Je wijzigingen worden in productie genomen bij de volgende her-rendering, het verlopen van de cache of een handmatige cache-opschoning.", + "confirmSaveDialogTitle": "{{title}}-instellingen opslaan?", + "ContentSecurityPolicy": "Content-Security-Policy", + "createStatus": "Status aanmaken", + "deactivatedStatuses": "Gedeactiveerde statussen", + "deactivatedStatusesSubtitle": "Deze statussen kunnen op elk gewenst moment opnieuw worden geactiveerd als je ze wilt toevoegen aan of verwijderen uit inhoudsitems.", + "deactivateStatus": "Status deactiveren", + "deactivateStatusBody": "Als je deze status deactiveert, wordt deze verwijderd uit alle inhoudsitems die deze status momenteel hebben. Je kunt deze status in de toekomst altijd weer activeren.", + "deactivateStatusLabel": "Status deactiveren", + "DefaultPage": "Standaardtaalpagina", + "deleteFontConfirm": "Weet je zeker dat je dit lettertype wilt deïnstalleren?", + "describeStatusDescription": "Beschrijf wat deze status betekent binnen de context van je workflows", + "descriptionOptional": "Beschrijving (optioneel)", + "Dev": "Root-URL naar proxy-bestandsopslag", + "DisplayAdvertisingSupport": "Ondersteuning voor display-advertenties", + "DntPolicy": "DNT aan of uit", + "editStatus": "Status bewerken", + "editStatusTitle": "{{name}} bewerken", + "errorOccurred": "Er is een fout opgetreden.", + "errorWithMessage": "Fout: {{message}}", + "FeaturePolicy": "Feature-Policy", + "filterSettings": "Instellingen filteren", + "fontInstallError": "Toevoegen van {{family}} ({{variants}}) mislukt: {{error}}", + "fontInstallSuccess": "Lettertype \"{{family}} ({{variants}})\" is geïnstalleerd", + "fontPreviewText": "Dit is een voorbeeldtekst", + "fontUninstalled": "Lettertype \"{{fontLabel}}\" is gedeïnstalleerd", + "fontUninstallFailed": "Deïnstalleren van {{fontLabel}} mislukt: {{error}}", + "FriendlyPagination": "Vriendelijke paginering", + "GoogleAutoLinker": "Google Auto Linker", + "GoogleUrchinId": "Google Analytics ID", + "Gql": "Schakelt toegang tot GraphQL-endpoints in om een Apollo GQL-server te draaien", + "GqlOrigin": "GraphQL toegestane origin", + "GtmId": "Google Tag Manager ID", + "headTagsTitle": "Head-tags", + "Honeypot": "Honeypot van het formulier", + "installedFontsTitle": "Geïnstalleerde lettertypen", + "instanceWwwDnsTooltip": "Het activeren van de WWW-instelling vereist een DNS-configuratie van zowel het hoofddomein (apex) als het www-subdomein.", + "Live": "Root-URL naar proxy-bestandsopslag", + "LoadFontAwesome": "Font Awesome laden", + "MediaProxyUrl": "Media-proxy-URL", + "nameRequired": "Naam is verplicht", + "navFontsBrowse": "Lettertypen bladeren", + "navFontsInstalled": "Geïnstalleerde lettertypen", + "navHeadTags": "Head-tags", + "navRobotsTxt": "Robots.txt", + "navWorkflows": "Workflows", + "noInstalledFonts": "Geen geïnstalleerde lettertypen", + "none": "Geen", + "noneOption": "Geen", + "noResultsFor": "Geen resultaten voor \"{{keyword}}\"", + "noSearchResultsAlt": "Geen zoekresultaten", + "off": "Uit", + "on": "Aan", + "OverwriteHead": "Head-bestand overschrijven", + "PreferredDomainPrefix": "Altijd WWW toevoegen aan mijn domein?", + "prev": "Vorige", + "PreviewLock": "Voorvertoningsvergrendeling", + "PreviewLockPassword": "Wachtwoord voor voorvertoningsvergrendeling", + "publishRequiresStatus": "Het publiceren van inhoudsitems vereist dat deze status is toegepast.", + "publishRequiresStatusDescription": "Dit is een globale instelling. Dit betekent dat inhoudsitems niet kunnen worden gepubliceerd tenzij deze status is toegepast.", + "ReferrerPolicy": "Referrer-Policy", + "removeFontLabel": "Lettertype verwijderen", + "removeFontVariant": "Verwijder {{variant}}", + "removeStatusNotification": "Gebruikers die deze status kunnen verwijderen, ontvangen een melding.", + "robotsFailedFetchSettings": "Ophalen van instellingen mislukt", + "robotsFailedSaveSettings": "Opslaan van robots.txt-instellingen mislukt. {{err}}", + "robotsFindingSettings": "Robots.txt-instellingen zoeken", + "robotsNonLiveDomainWarning": "Niet-live domeinen hebben robots.txt ALTIJD uitgeschakeld om te voorkomen dat ze door zoekmachines worden gecrawld. Dit geldt ook voor [hash]-dev.webengine.zesty.io, [hash]-dev.preview.zesty.io en elk geregistreerd domein dat is ingesteld op de \"dev\"-branch", + "RobotsOn": "Doorzoekbaar door zoekmachines?", + "robotsPublishEventWarning": "Wijzigingen worden pas doorgevoerd zodra er een publicatie plaatsvindt.", + "robotsSettingsUpdated": "Instellingen voor het robots.txt-bestand zijn bijgewerkt", + "RobotsText": "Robots-tekst", + "robotsTopBarTitle": "Robots.txt", + "SafeEmails": "Lijst met veilige e-mails om naartoe te sturen", + "saved": "Opgeslagen", + "saveSettingsTooltip": "Instellingen opslaan {{saveShortcut}}", + "searchFonts": "Lettertypen zoeken", + "searchFontsPlaceholder": "Lettertypen zoeken", + "searchStatuses": "Statussen zoeken", + "sectionFonts": "Lettertypen", + "sectionGlobalMetaSeo": "Globale meta & SEO", + "sectionInstanceSettings": "Instantie-instellingen", + "sectionStyles": "Stijlen", + "sectionUserSettings": "Gebruikersinstellingen", + "SendingEmail": "E-mail verzenden", + "showDeactivated": "Toon gedeactiveerde", + "ShowDomainInTitle": "Domeinnaam weergeven in meta-titel?", + "ShowInTitle": "Sitenaam weergeven in meta-titel?", + "SiteProtocol": "HTTPS aan?", + "statusDeactivated": "Status gedeactiveerd: {{name}}", + "statusDeactivateFailed": "Deactiveren van status mislukt: {{name}}. Probeer het slubblief opnieuw.", + "statusDescriptionPlaceholder": "Gereed voor beoordeling door het juridische team voor publicatie", + "statusNamePlaceholder": "bijv. Inhoudsbeoordeling vereist", + "StrictTransportSecurity": "Strict-Transport-Security", + "styleCategoryBodyColorsSpacing": "Kleuren en afstand van Body", + "styleCategoryButtons": "Knoppen", + "styleCategoryForms": "Formulieren", + "styleCategoryHtmlElements": "HTML-elementen", + "styleCategoryInteractiveElements": "Interactieve elementen", + "styleCategoryLinks": "Links", + "styleCategoryNavigation": "Navigatie", + "styleCategoryResponsiveGrid": "Responsief raster", + "styleCategorySidebar": "Zijbalk", + "styleCategoryTypography": "Typografie", + "styleCategoryUiStyling": "UI-styling", + "typeSomethingToPreview": "Typ iets om een voorbeeld te zien", + "unexpectedError": "Er is een onverwachte fout opgetreden.", + "UniversalCode": "Use Google Universal Code", + "Url": "GroupBy-clientendpoint", + "whichRolesCanAdd": "Welke rollen mogen deze status toevoegen?", + "whichRolesCanRemove": "Welke rollen mogen deze status verwijderen?", + "workflowsHeading": "Workflows", + "workflowsRestrictedDescription": "Neem contact op met de beheerder of de eigenaar van de instantie hieronder om je rol bij te werken naar Beheerder of Eigenaar.", + "workflowsRestrictedTitle": "Je hebt geen rechten om workflows te bekijken en te bewerken", + "XContentTypeOptions": "X-Content-Type-Options", + "XFrameOptions": "Header: X-Frame-Options" +} diff --git a/public/locales/nl-NL/shell.json b/public/locales/nl-NL/shell.json new file mode 100644 index 0000000000..88010615cc --- /dev/null +++ b/public/locales/nl-NL/shell.json @@ -0,0 +1,608 @@ +{ + "accessDenied": "Toegang geweigerd", + "accessDeniedImageAlt": "Pagina niet gevonden", + "accessDeniedRoleBody": "Je huidige rol {{role}} biedt geen toegang tot de {{app}}-app. Neem voor toegang contact op met de eigenaar van de instantie of een van de hieronder vermelde beheerders en vraag een rolupgrade aan.", + "accountChangePassword": "Wachtwoord wijzigen", + "accountGetHelp": "Hulp krijgen", + "accountLogOut": "Uitloggen", + "accountPreferences": "Voorkeuren", + "accountReadDocs": "Documentatie lezen", + "accountViewAllInstances": "Alle instanties bekijken", + "accountYourProfile": "Je profiel", + "addNewComment": "Nieuw commentaar toevoegen", + "advancedSearch": "Geavanceerd zoeken", + "advancedSearchDescription": "Terwijl jij en je team samenwerken in Zesty, bouw je een doorzoekbaar archief van inhoud, modellen en codebestanden op. Gebruik het onderstaande formulier om te vinden wat je zoekt.", + "aiAssistantBeta": "AI-assistent bèta", + "aiDrawerPlaceholder": "Vraag wat je wilt, bijvoorbeeld \"Stem mijn inhoud af op een specifiek publiek\"", + "aiGeneratingContentStatus": "Onze AI-assistent genereert je inhoud op basis van je parameters", + "aiMistakesWarning": "Onze AI-assistent kan fouten maken. Controleer belangrijke informatie.", + "aiOnlyInContentApp": "Alleen beschikbaar in de content-app.", + "aiScanningMetaDescription": "Onze AI-assistent scant je inhoud en genereert je metabeschrijving op basis van je parameters", + "aiScanningMetaTitle": "Onze AI-assistent scant je inhoud en genereert je metatitel op basis van je parameters", + "aiWriteContentSubtitle": "Gebruik onze AI-assistent om inhoud voor je te schrijven", + "allInstances": "Alle instanties", + "alreadyPartOfInstance": "Maakt al deel uit van de instantie", + "announcementIgnore": "Negeren", + "announcementRead": "Aankondiging lezen", + "announcementScheduleTraining": "Training plannen", + "announcementShowVideo": "Video tonen", + "anyLanguage": "Elke taal", + "anyone": "Iedereen", + "anyTime": "Elk moment", + "anyType": "Elk type", + "appErrorBody": "Deze fout is naar ons team verzonden. Laad de applicatie opnieuw om door te gaan.", + "appErrorHeading": "Oeps, er is iets misgegaan", + "appLoadingFailure": "App laden mislukt: {{message}}", + "applyAiSuggestion": "Toepassen", + "audiencePlaceholder": "bijv. Freelancers, Designers, .....", + "autoApply": "Automatisch toepassen", + "block": "Blok", + "blockSelectorCreateVariant": "Variant maken", + "blockSelectorNoVariantsDescription": "Ga naar de Blocks-app, selecteer dit model en klik op de knop om een variant te maken", + "blockSelectorNoVariantsTitle": "Er zijn geen varianten gemaakt voor het model {{modelName}}", + "blockSelectorSearchVariants": "Varianten zoeken", + "blockSelectorSelectModel": "Model selecteren", + "blockSelectorSelectModelFirst": "Selecteer eerst een model voordat je een variant selecteert", + "blockSelectorSelectVariant": "Variant selecteren", + "blockSelectorUpdatedOnBy": "Bijgewerkt op {{date}} door {{user}}", + "blockSelectorViewBlock": "Blok bekijken", + "cancelEsc": "Annuleren (ESC)", + "cannotBeUndone": "Dit kan niet ongedaan worden gemaakt", + "characterLimit": "Tekenlimiet", + "characterLimitTooltip": "Stel een tekenlimiet in om de lengte van de gegenereerde tekst te bepalen", + "clearAll": "Alles wissen", + "clearChat": "Chat wissen", + "code": "Code", + "collapseSidebar": "Zijbalk inklappen", + "commentAddError": "Kan opmerking niet toevoegen. Controleer je internetverbinding en probeer het opnieuw.", + "commentPlaceholder": "Reageer of voeg anderen toe met @", + "confirmPublishBody": "Hiermee wordt v{{version}} van het {{item}} direct beschikbaar op al je platforms. Je kunt dit item later altijd weer depubliceren indien nodig.", + "confirmPublishTitle": "{{item}} publiceren", + "contactSupport": "Contact opnemen met support", + "contentGenerated": "Je inhoud is gegenereerd!", + "contentItem": "Inhoudsitem", + "continueWith": "Doorgaan met {{service}}", + "copyInstanceZUID": "Instantie ZUID kopiëren", + "copyLink": "Link kopiëren", + "createContentItem": "Inhoudsitem maken", + "createContentItemSubtitle": "U kunt alleen een inhoudsitem maken voor een reeds bestaand model", + "createdByTooltip": "Selecteer een gebruiker uit alle gebruikers van de instantie.", + "currencyFlagAlt": "Vlag van {{country}}", + "currentlyLoggedInAs": "Momenteel ingelogd als {{email}}", + "customDateRange": "Aangepast datumbereik", + "dateAfter": "Na...", + "dateBefore": "Vóór...", + "dateLast14Days": "Laatste 14 dagen", + "dateModified": "Wijzigingsdatum", + "dateModifiedTooltip": "Selecteer het datumbereik waarvoor je resultaten wilt zien.", + "dateOn": "Op...", + "dateRange": "Datumbereik", + "dateRangeValue": "{{from}} tot {{to}}", + "dateTimeInvalidTime": "Ongeldige tijd", + "dateTimeStoredInUtc": "Opgeslagen in UTC als {{value}}", + "dateUpdated": "Datum bijgewerkt", + "deleteCommentBody": "Als u dit commentaar verwijdert, worden ook alle bijbehorende reacties verwijderd.", + "deleteCommentTitle": "Commentaar verwijderen?", + "deleteForever": "Permanent verwijderen", + "describeAudience": "Beschrijf je doelgroep", + "docs": "Documentatie", + "docsAddingImageAltText": "Alt-tekst aan afbeeldingen toevoegen", + "docsAddingManagingContent": "Inhoud toevoegen en beheren", + "docsAuditTrailOverview": "Overzicht van audittrail", + "docsAuthApi": "Auth API-documentatie", + "docsBuildingSchema": "Het schema bouwen", + "docsCapturingFormData": "Formuliergegevens vastleggen in Leads", + "docsCodeOverview": "Code-overzicht", + "docsContentEntry": "Inhoud invoeren, concepten en publiceren", + "docsContentOverview": "Overzicht van inhoud", + "docsCreatingLeadForm": "Een leadformulier maken", + "docsEditorCodingBasics": "Editor- en codeerbasis", + "docsGettingStarted": "Aan de slag", + "docsGuides": "Handleidingen", + "docsInstanceSettings": "Instantie-instellingen", + "docsIntroduction": "Inleiding", + "docsLeadsOverview": "Leads-overzicht", + "docsManageRedirects": "Omleidingen beheren", + "docsMediaOverview": "Media-overzicht", + "docsRedirectsOverview": "Overzicht van omleidingen", + "docsSchemaContentCode": "Schema, inhoud en code", + "docsSchemaOverview": "Schema-overzicht", + "docsSeoRedirects": "SEO-omleidingen", + "docsSettingsOverview": "Instellingenoverzicht", + "docsUploadMultipleImages": "Hoe meerdere afbeeldingen uploaden", + "editorAddRemoveLink": "Link toevoegen of verwijderen", + "editorAlignCenter": "Tekst centreren", + "editorAlignJustify": "Tekst uitvullen", + "editorAlignLeft": "Tekst links uitlijnen", + "editorAlignRight": "Tekst rechts uitlijnen", + "editorBold": "Vet", + "editorChangeHeading": "Kop wijzigen", + "editorChangeToBlockQuote": "Wijzigen naar blokcitaat", + "editorChangeToCodeBlock": "Wijzigen naar codeblok", + "editorChangeToHeadingLevel": "Wijzigen naar kopniveau {{level}}", + "editorChangeToParagraph": "Wijzigen naar alinea", + "editorEmbed": "Insluiten", + "editorEmbedContent": "Inhoud insluiten", + "editorEmbedIdLabel": "Voer de unieke {{service}}-ID in", + "editorFloatLeft": "Links zweven", + "editorFloatRight": "Rechts zweven", + "editorHeading": "Kop", + "editorHeadingLevel": "Kop {{level}}", + "editorIndent": "Inspringen", + "editorInsertCharacter": "Teken invoegen: {{char}}", + "editorInsertEmbed": "Insluiting invoegen", + "editorInsertHorizontalRule": "Horizontale lijn invoegen", + "editorInsertImage": "Afbeelding invoegen uit mediabibliotheek", + "editorInsertLink": "Link invoegen", + "editorInsertSpecialCharacter": "Speciaal teken invoegen", + "editorInsertTable": "Tabel invoegen", + "editorItalic": "Cursief", + "editorLevel": "Niveau {{level}}", + "editorLinkNewWindow": "Link openen in een nieuw browservenster?", + "editorLinkUrlLabel": "Naar welke URL moet deze link verwijzen?", + "editorPromptColumns": "Hoeveel kolommen?", + "editorPromptEnterUrl": "Voer de URL in", + "editorPromptRows": "Hoeveel rijen?", + "editorRedo": "Laatste ongedaan gemaakte wijziging opnieuw uitvoeren", + "editorSpecialCharacter": "Speciaal teken", + "editorToggleEmphasis": "Nadruk in-/uitschakelen", + "editorToggleStrikethrough": "Doorhalen in-/uitschakelen", + "editorToggleStrong": "Vet in-/uitschakelen", + "editorToggleSubscript": "Subscript in-/uitschakelen", + "editorToggleSuperscript": "Superscript in-/uitschakelen", + "editorToggleUnderline": "Onderstreping in-/uitschakelen", + "editorUnderline": "Onderstrepen", + "editorUndo": "Laatste wijziging ongedaan maken", + "editorWrapInBlockQuote": "In blokcitaat plaatsen", + "editorWrapInBulletList": "In opsommingslijst plaatsen", + "editorWrapInOrderedList": "In genummerde lijst plaatsen", + "emailAddress": "E-mailadres", + "emailCommaSeparated": "E-mail, gescheiden door komma's of spaties", + "enterTwoFactorOtp": "Voer je 2FA-OTP in", + "enterValidEmail": "Voer een geldig e-mailadres in.", + "errorParsingAiResponse": "Fout bij het verwerken van het AI-antwoord. Probeer het opnieuw.", + "expandSidebar": "Zijbalk uitklappen", + "failedAuthenticateAccount": "Kan je account niet verifiëren", + "failedCopyInstanceZUID": "Kopiëren van instantie ZUID mislukt", + "failedCreateField": "Aanmaken van veld mislukt. {{error}}", + "failedFetchField": "Ophalen van veld mislukt: {{error}}", + "failedFetchHeadTags": "Ophalen van head-tags mislukt", + "failedFetchHeadTagsError": "Ophalen van head-tags mislukt: {{error}}", + "failedFetchModel": "Ophalen van model mislukt: {{error}}", + "failedFetchModels": "Ophalen van modellen mislukt", + "failedFetchRecentItems": "Er was een probleem bij het ophalen van recente items: {{error}}", + "failedFetchUsers": "Ophalen van gebruikers mislukt", + "failedLoadDomains": "Laden van domeinen mislukt", + "failedLoadHeadTagFile": "Laden van bestand mislukt. {{status}} | {{error}}", + "failedLoadInstancesList": "Er was een probleem bij het laden van uw instantielijst", + "failedLoadUserRole": "Laden van uw gebruikersrol voor deze instantie mislukt.", + "failedRefreshCdnCache": "Vernieuwen van CDN-cache mislukt", + "failedToLoadInstance": "Kan instance niet laden", + "failedUpdateFavicon": "Bijwerken van favicon mislukt", + "faviconUpdated": "Favicon bijgewerkt", + "favorites": "Favorieten", + "fieldRequiredError": "Dit veld is verplicht. Voer een waarde in.", + "filterNoResultsRich": "Je filter \"{{query}}\" heeft geen resultaten opgeleverd", + "findIn": "Zoeken in {{app}}", + "flagAlt": "Vlag van {{country}}", + "forbiddenLoadInstancesList": "U heeft geen toegang tot het laden van een instantielijst", + "forgotPassword": "Wachtwoord vergeten?", + "geminiIconAlt": "Gemini-pictogram", + "geminiLogoAlt": "Gemini-logo", + "generate": "Genereren", + "generateContent": "Inhoud genereren", + "generatedContent": "Gegenereerde inhoud", + "generateMetaDescription": "Metabeschrijving genereren", + "generateMetaDescriptionHelp": "Onze AI scant je inhoud en genereert je metabeschrijving op basis van de onderstaande parameters", + "generateMetaTitle": "Metatitel genereren", + "generateMetaTitleHelp": "Onze AI scant je inhoud en genereert je metatitel op basis van de onderstaande parameters", + "generateSuggestions": "Suggesties genereren", + "generatingContent": "Inhoud genereren", + "generatingMetaDescription": "Metabeschrijving genereren", + "generatingMetaTitle": "Metatitel genereren", + "generationStopped": "Generatie is gestopt", + "goToAccounts": "Ga naar Accounts", + "hasAccessTo": "Heeft toegang tot", + "headCreateTag": "Head-tag maken", + "headLegacyNotice": "Deze instance heeft verouderde head-tags. Als je deze wilt bewerken of verwijderen, neem dan contact op met support.", + "headNoTags": "Er zijn geen head-tags gemaakt voor dit item.", + "headNotVersionedNotice": "Head-tags worden niet geversioneerd. Eenmaal opgeslagen worden ze van kracht wanneer de pagina('s) de volgende keer in de cache worden geplaatst. Caching gebeurt bij publicatie of elke 24 uur.", + "headTagAddAttribute": "Attribuut toevoegen", + "headTagAddAttributeTitle": "Tag-attribuut toevoegen", + "headTagAttributeLabel": "Attribuut", + "headTagCreate": "Head-tag maken", + "headTagDeleteAttributeTitle": "Tag-attribuut verwijderen", + "headTagDeleted": "Head-tag verwijderd", + "headTagDeleteHeadTag": "Head-tag verwijderen", + "headTagDeleteTag": "Tag verwijderen", + "headTagLabel": "Tag", + "headTagNewCreated": "Nieuwe head-tag aangemaakt", + "headTagSave": "Head-tag opslaan", + "headTagSortLabel": "Sorteren", + "headTagTypeNone": "Geen", + "headTagUpdateFailed": "Kan head-tag niet bijwerken. {{status}}", + "headTagUpdateSuccess": "Head-tag succesvol bijgewerkt", + "headTagValueLabel": "Waarde", + "imageFieldLimit_one": "Dit veld is beperkt tot {{count}} afbeelding", + "imageFieldLimit_other": "Dit veld is beperkt tot {{count}} afbeeldingen", + "insert": "Invoegen", + "integrationAddDetail": "Detail toevoegen", + "integrationAddDetailWithPlus": "+ Detail toevoegen", + "integrationAddHeading": "Kop toevoegen", + "integrationAddHttpHeader": "HTTP-header toevoegen", + "integrationAddSubheading": "Subkop toevoegen", + "integrationApiConfigurationSettings": "API-configuratie-instellingen", + "integrationApiResponseArrayOfPrimitives": "De API gaf een array van {{kind}}-waarden terug. Er werd een array van objecten verwacht.", + "integrationApiResponseEmptyArray": "De API gaf een lege array terug. Voeg minstens één item toe aan de respons om weergaveopties te configureren.", + "integrationApiResponseNestedArrayNoSelectableKeys": "De API gaf een object terug waarvan de geneste arrays geen selecteerbare keys bevatten. Zorg dat minstens één item in de geneste array scalaire eigenschappen heeft.", + "integrationApiResponseNoData": "De API gaf geen data terug. Er werd een JSON-array van objecten verwacht.", + "integrationApiResponseNoNestedArray": "De API gaf één object terug zonder geneste array van objecten. Er werd een array als root verwacht, of een object dat een array van objecten bevat.", + "integrationApiResponseNoSelectableKeys": "De API gaf een array van objecten terug zonder selecteerbare keys. Zorg dat elk object minstens één scalaire eigenschap heeft.", + "integrationApiResponseUnexpectedType": "De API gaf een waarde van het type {{type}} terug. Er werd een JSON-array van objecten verwacht.", + "integrationApiUrl": "API-URL", + "integrationApiUrlTooltip": "URL die de externe databron definieert. Moet een JSON-array met platte objecten met een consistente structuur retourneren.", + "integrationAuthenticationHeaders": "Authenticatieheaders", + "integrationCanReconfigureLater": "Dit kan later opnieuw worden geconfigureerd", + "integrationClassyCard": "Classy-kaart", + "integrationClassyCardDescription": "Toon campagnes van Classy", + "integrationConfigureDisplayOptions": "Weergaveopties configureren", + "integrationConfigureDisplayOptionsDescription": "Selecteer welke velden contenteditors zien wanneer ze items bewerken", + "integrationConnect": "Verbinden", + "integrationConnectingSecureConnection": "Even geduld terwijl we een beveiligde verbinding maken", + "integrationConnectingToApiEndpoint": "Verbinden met API-endpoint", + "integrationConnectionFailed": "Verbinding mislukt", + "integrationConnectionFailedDescription": "We konden geen verbinding maken met het ingevoerde API-endpoint. Dit kan komen door een onverwachte structuur, een ontbrekende of ongeldige URL, of onjuiste aangepaste headers.", + "integrationConnectionSuccessful": "Verbinding geslaagd", + "integrationConnectionSuccessfulDescription": "Je API is nu veilig gekoppeld en klaar voor gebruik.", + "integrationConnectToApi": "Verbinden met API", + "integrationConnectToApiDescription": "Maak verbinding met een endpoint waar gebruikers items uit kunnen selecteren", + "integrationDataPath": "Datapad", + "integrationDetail": "Detail", + "integrationDetails": "Details", + "integrationDetailsCard": "Detailkaart", + "integrationDetailsCardDescription": "Toon items met meerdere details", + "integrationDisplayItemsAs": "Items weergeven als", + "integrationEditApiUrl": "API-URL bewerken", + "integrationEditDisplayOptions": "Weergaveopties bewerken", + "integrationHeading": "Kop", + "integrationHttpHeadersOptional": "HTTP-headers (optioneel)", + "integrationImageCard": "Afbeeldingskaart", + "integrationImageCardDescription": "Toon items met een afbeelding, kop en subkop.", + "integrationImageUrlDescription": "Afbeelding wordt alleen weergegeven als de geselecteerde waarde een URL is", + "integrationInvalidResponseFormat": "Niet-ondersteund antwoordformaat", + "integrationInvalidResponseFormatDescription": "De API is verbonden, maar het antwoord kan niet worden gebruikt om dit veld te configureren.", + "integrationInvalidUrlHelper": "Voer een geldige URL in, bijv. https://api.example.org/items.json", + "integrationItemId": "Item-ID", + "integrationItemIdNotUniqueWarning": "\"{{itemIdPath}}\" is niet uniek binnen de {{count}} steekproefitems — dit kan ertoe leiden dat selecties verkeerd worden herkend.", + "integrationItemIdNotUniqueWarning_one": "\"{{itemIdPath}}\" is niet uniek binnen de {{count}} steekproefitems — dit kan ertoe leiden dat selecties verkeerd worden herkend.", + "integrationItemIdNotUniqueWarning_other": "\"{{itemIdPath}}\" is niet uniek binnen de {{count}} steekproefitems — dit kan ertoe leiden dat selecties verkeerd worden herkend.", + "integrationItemIdToolTip": "Kies een waarde waarvan de API garandeert dat deze uniek is voor elk item (bijvoorbeeld een database-ID), niet slechts een waarde die uniek lijkt in een kleine steekproef. Een niet-unieke item-ID kan ertoe leiden dat selecties verkeerd worden herkend.", + "integrationItemPreview": "Itemvoorbeeld", + "integrationItemPreviewDescription": "Hoe items aan contenteditors worden weergegeven", + "integrationKey": "Sleutel", + "integrationKeyPathsMismatchWarning": "Dit endpoint retourneert een andere structuur. Bestaande opgeslagen items worden onjuist weergegeven en moeten opnieuw worden geselecteerd.", + "integrationKeyPreviewDescription": "Voorbeeldwaarden voor de onderstaande sleutels komen uit het eerste item in de API-respons.", + "integrationLearnEndpointStructures": "Lees meer over endpointstructuren die we accepteren", + "integrationMuxCard": "MUX-kaart", + "integrationMuxCardDescription": "Toon video’s van MUX", + "integrationNotAvailable": "Niet beschikbaar", + "integrationOptions": "Opties", + "integrationOtherOptions": "Andere opties", + "integrationRecommended": "Aanbevolen", + "integrationReconfigure": "Opnieuw configureren", + "integrationResyncValues": "Waarden opnieuw synchroniseren", + "integrationSaveChanges": "Wijzigingen opslaan", + "integrationSelectDataPath": "Datapad selecteren", + "integrationSelectDisplayType": "Selecteer een weergavetype", + "integrationSelectedCount_one": "{{count}} geselecteerd", + "integrationSelectedCount_other": "{{count}} geselecteerd", + "integrationSelectKeysToDisplay": "Selecteer sleutels om in item weer te geven", + "integrationSelectRemoteItems": "Externe items selecteren", + "integrationSelectTitle": "{{title}} selecteren", + "integrationShopifyCard": "Shopify-kaart", + "integrationShopifyCardDescription": "Toon Shopify-productvermeldingen", + "integrationSimpleCard": "Eenvoudige kaart", + "integrationSimpleCardDescription": "Toon items met een kop", + "integrationStop": "Stoppen", + "integrationSubHeading": "Subkop", + "integrationTextCard": "Tekstkaart", + "integrationTextCardDescription": "Toon items met een kop en subkop", + "integrationThumbnail": "Miniatuur", + "integrationTryAgain": "Opnieuw proberen", + "integrationValue": "Waarde", + "integrationVideoCard": "Videokaart", + "integrationVideoCardDescription": "Toon items met een video, kop en subkop.", + "integrationViewJson": "JSON bekijken", + "integrationViewRawJson": "Ruwe JSON bekijken", + "integrationYoutubeCard": "Youtube-kaart", + "integrationYoutubeCardDescription": "Toon video’s van Youtube", + "internalExternalLink": "Interne/externe link", + "internalLinkNone": "Geen", + "internalLinkSearchPlaceholder": "Ziet u het gewenste item niet? Voer een term in om in uw API te zoeken.", + "internetConnectionOff": "Internetverbinding is uitgeschakeld", + "internetConnectionRestored": "Internetverbinding is hersteld", + "invalidUrlBody": "De ingevoerde URL is ongeldig of bestaat niet. Als u denkt dat dit een fout is, neem dan contact met ons op via", + "invalidUrlHeading": "Ongeldige URL. Controleer uw URL en probeer het opnieuw.", + "invite": "Uitnodigen", + "inviteAs": "Uitnodigen als", + "inviteMorePeople": "Meer mensen uitnodigen", + "invitePreviouslySent": "Uitnodiging eerder verzonden", + "inviteSent": "Uitnodiging verzonden", + "invitesSentAsEmails": "Deze uitnodigingen worden als e-mails verzonden", + "invitesSentPartial_one": "Uitnodiging verzonden naar {{successCount}} van {{totalCount}} gebruiker (via e-mail)", + "invitesSentPartial_other": "Uitnodigingen verzonden naar {{successCount}} van {{totalCount}} gebruikers (via e-mail)", + "invitesSentSuccess_one": "Uitnodiging verzonden naar {{count}} gebruiker (via e-mail)", + "invitesSentSuccess_other": "Uitnodigingen verzonden naar {{count}} gebruikers (via e-mail)", + "inviteUsers": "Gebruikers uitnodigen", + "itemLowercase": "item", + "itemMissingMetaData": "Geselecteerd item mist metadata", + "itemMissingMetaTitle": "Item mist metatitel", + "keywords": "Trefwoorden", + "keywordsExamplePlaceholder": "bijv. Hikes, snow", + "keywordsPlaceholder": "bijv. Articles", + "keywordsToInclude": "Op te nemen trefwoorden (gescheiden door komma's)", + "keywordsTooltip": "Voer een of meerdere termen in die overeenkomen met een deel van de resourcenaam.", + "language": "Taal", + "languageGenerationTooltip": "Stel de taal in waarin je de tekst wilt laten genereren.", + "languageTooltip": "Selecteer de taal waarvoor je resultaten wilt zien.", + "learnMoreAbout": "Meer informatie over {{app}}", + "legacySearchCreatedByOn": "Aangemaakt door {{name}} op {{date}}", + "legacySearchError": "Fout bij het zoeken naar term: {{term}}", + "legacySearchFilterBy": "Filteren op", + "legacySearchItemMissingMeta": "Item mist metatitel", + "legacySearchNoResultsRich": "Geen resultaten gevonden voor zoekterm: {{term}}", + "legacySearchSearching": "Zoeken", + "legacySearchSortBy": "Sorteren op", + "legacySearchSortCreated": "Aangemaakt", + "legacySearchSortDefault": "Standaard", + "legacySearchSortEdited": "Bewerkt", + "legacySearchSortTitle": "Titel", + "legacySearchSortUser": "Gebruiker", + "legacySearchVersionEdited": "Versie {{version}} is {{editedAgo}} bewerkt", + "limit": "Limiet", + "loadingLogoAlt": "Zesty.io-logo wordt weergegeven terwijl de applicatie laadt", + "loginFailedContactSupport": "Inloggen mislukt. Neem contact op met support via {{email}}.", + "loginProblem": "Er is een probleem opgetreden bij het aanmelden", + "loginRequestDeniedRedirecting": "Je inlogverzoek is geweigerd. Je wordt doorgestuurd naar de login.", + "loginRequestExpiredRedirecting": "Je inlogverzoek is verlopen. Je wordt doorgestuurd naar de login.", + "loginRequestValidationIssueRedirecting": "Het lijkt erop dat er een probleem was bij het valideren van dit inlogverzoek. Je wordt doorgestuurd naar de login.", + "loginSubtitle": "Begin de wereld opnieuw te versterken met content", + "manageInstanceHeadTags": "Instantie Head-tags beheren", + "markAsResolved": "Markeren als opgelost", + "missingMetaTitle": "Metatitel ontbreekt", + "missingModel": "Model ontbreekt: {{ZUID}}", + "modelsInSchema": "Modellen in schema", + "moreOptions": "Meer opties", + "myNotifications": "Mijn meldingen", + "navApps": "Apps", + "navAppTooltip": "{{name}}-app", + "navBlocks": "Blokken", + "navigate": "Navigeren", + "navLaunchpad": "Startscherm", + "navLeads": "Leads", + "navRedirects": "Doorverwijzingen", + "navRelease": "Releases", + "navReports": "Rapporten", + "navSchema": "Schema", + "navSettings": "Instellingen", + "navStudio": "Studio", + "needHelpContactSupport": "Hulp nodig? Neem contact op met support", + "noActionsTaken": "Geen acties uitgevoerd", + "noFilterResults": "Er zijn geen resultaten gevonden die overeenkomen met je filters", + "noFilterResultsSuggestion": "Pas je filters aan om te vinden wat je zoekt", + "noInstancePermissionBody1": "Je account heeft geen toestemming om toegang te krijgen tot deze instantie. Neem contact op met de eigenaar of beheerder van de instantie om te worden toegevoegd.", + "noInstancePermissionBody2": "Als je denkt dat je toegang zou moeten hebben, controleer dan of je het juiste account gebruikt.", + "noInvitePermissionBody": "Neem contact op met de hieronder vermelde instantie-eigenaren of beheerders om je rol voor deze instantie te wijzigen naar Admin of Owner voor rechten om gebruikers uit te nodigen.", + "noInvitePermissionTitle": "Je hebt geen toestemming om gebruikers uit te nodigen", + "noPermissionImageAlt": "Geen toestemming", + "noResultsFound": "Geen resultaten gevonden", + "noSearchResultsAlt": "Geen zoekresultaten", + "notFoundImageAlt": "Niet gevonden", + "onboardingCallAvatarAlt": "Sales-avatar", + "onboardingCallButton": "Een gesprek plannen", + "onboardingCallTitle": "Plan een onboardingsgesprek met ons supportteam", + "openAiBadgeAlt": "OpenAI-badge", + "optionNumber": "Optie {{number}}", + "or": "Of", + "password": "Wachtwoord", + "pinnedTabs": "Vastgezette tabbladen", + "publishItem": "Item publiceren", + "publishItems": "Items publiceren", + "recentlyModifiedItems": "Recent gewijzigde {{items}}", + "recentlyUploadedItems": "Recent geüploade {{items}}", + "recentSearches": "Recente zoekopdrachten", + "refreshCdnCache": "CDN-cache vernieuwen", + "regenerate": "Opnieuw genereren", + "relationalAddExisting": "Bestaande {{label}} toevoegen", + "relationalCopyZuid": "ZUID kopiëren", + "relationalCreateAddNew": "Nieuwe {{label}} maken en toevoegen", + "relationalDateSaved": "Opslagdatum", + "relationalDeletedItem": "{{zuid}} (Verwijderd)", + "relationalDeselectAll": "Alles deselecteren", + "relationalDraftPreview": "Conceptvoorbeeld - v{{version}}", + "relationalDragToReorder": "Sleep om de volgorde te wijzigen", + "relationalEditContentItem": "Content-item bewerken", + "relationalFieldsHeading": "Velden", + "relationalFilterItems": "Items filteren", + "relationalImageAlt": "{{name}} afbeelding", + "relationalMoreOptions": "Meer opties", + "relationalProductionPreview": "Productievoorbeeld - v{{version}}", + "relationalPublishNow": "Nu publiceren", + "relationalReplace": "Vervangen", + "relationalReplaceItem": "Item vervangen", + "relationalReplacementSelected": "Vervangingsitem geselecteerd", + "relationalSchedulePublish": "Publicatie plannen", + "relationalSelected": "{{value}} geselecteerd", + "relationalSelectField": "{{label}} selecteren", + "relationalSelectReplacement": "Vervangingsitem selecteren", + "relationalSortBy": "Sorteren: {{value}}", + "relationalSortCreatedBy": "Gemaakt door", + "relationalSortDateCreated": "Aanmaakdatum", + "relationalSortDescription": "Beschrijving", + "relationalSortLastPublished": "Laatst gepubliceerd", + "relationalSortLastSaved": "Laatst opgeslagen", + "relationalSortStatus": "Status", + "relationalSortVersion": "Versie", + "relationalStatusNotPublished": "Niet gepubliceerd", + "relationalStatusPublished": "Gepubliceerd", + "relationalStatusScheduled": "Gepland", + "relationalVersionActionPublished": "gepubliceerd", + "relationalVersionActionSaved": "opgeslagen", + "relationalVersionActionScheduled": "gepland om te publiceren", + "relationalVersionTooltip": "v{{version}} {{action}} op {{date}} door {{publisher}}", + "relationalViewingSeeAll": "{{shown}} van {{total}} items weergegeven. Alles weergeven.", + "relationalViewingSeeLess": "{{shown}} van {{total}} items weergegeven. Minder weergeven.", + "reloadApplication": "Applicatie opnieuw laden", + "reopen": "Heropenen", + "repeaterAddAnotherField": "Nog een veld toevoegen", + "repeaterAddRowTo": "Rij toevoegen aan {{fieldName}}", + "repeaterCurrencyTooltip": "Bekijk deze waarde in verschillende valuta's op basis van je landinstelling \"{{locale}}\"", + "repeaterEditRow": "{{name}} bewerken", + "repeaterFieldLoadFailed": "Laden van veld {{label}} mislukt. Klik hier om het veldschema te bekijken.", + "repeaterMissingOptionsRich": "Voor het veld {{label}} ontbreken de optie-instellingen. Bewerk het veld om ja/nee-waarden toe te voegen.", + "repeaterRemoveRow": "Rij verwijderen", + "repeaterValueBetween": "Waarde moet tussen {{min}} en {{max}} liggen", + "resetFilters": "Filters resetten", + "resourceType": "Resourcetype", + "resourceTypeTooltip": "Gebruik dit filter als je alleen zoekresultaten voor één resourcetype wilt zien, zoals een inhoudsitem, model (schema) of codebestand.", + "resumeSession": "Sessie hervatten", + "rightNow": "nu", + "roleAccessActivityLog": "Activiteitenlogboek", + "roleAccessCode": "Code (Zesty IDE)", + "roleCanAccessMedia": "Heeft toegang tot media en kan bestanden toevoegen, maar kan geen bestanden verwijderen.", + "roleCannotDeleteUsers": "Kan andere gebruikers niet verwijderen", + "roleCannotPublish": "Kan geen inhoud publiceren. Om nieuwe inhoud te publiceren, moeten bijdragers een workflowverzoek indienen bij een gebruiker met publicatietoegang.", + "roleCanOnlyCreateEdit": "Kan alleen inhoud maken en bewerken", + "saveFavicon": "Favicon opslaan", + "schedulePublishButton": "Publicatie plannen", + "schedulePublishOnLabel": "Publiceren op", + "schedulePublishPastWarning": "Omdat het geselecteerde tijdstip een huidige of verleden datum is, wordt dit onmiddellijk gepubliceerd.", + "schedulePublishSavedInfo": "v{{version}} opgeslagen {{distance}} door {{name}}", + "schedulePublishScheduledInfo": "v{{version}} staat gepland om te publiceren op {{date}} in {{timezone}}.", + "schedulePublishTitleSchedule": "Publicatie plannen", + "schedulePublishTitleUnschedule": "Publicatie annuleren", + "schedulePublishUnscheduleButton": "Publicatie annuleren", + "schedulePublishUnscheduleInfo": "Hiermee kun je andere versies van dit content-item plannen of publiceren", + "searchIn": "Zoeken in...", + "searchInstancePlaceholder": "Instantie doorzoeken {{shortcut}}", + "searchInstances": "Instanties zoeken", + "searchNoResults": "Je zoekopdracht “{{query}}” heeft geen resultaten opgeleverd", + "searchNoResultsRich": "Je zoekopdracht \"{{query}}\" heeft geen resultaten opgeleverd", + "searchNoResultsSuggestion": "Probeer je zoekopdracht aan te passen. We raden aan om te controleren of alle woorden correct zijn gespeld of andere zoektermen te gebruiken.", + "searchPageByUser": " door {{user}}", + "searchPageCreated": "aangemaakt {{date}}", + "searchPageResults_one": "{{count}} resultaat", + "searchPageResults_other": "{{count}} resultaten", + "searchPageResultsFor_one": "{{count}} resultaat voor \"{{query}}\"", + "searchPageResultsFor_other": "{{count}} resultaten voor \"{{query}}\"", + "searchTabs": "Tabbladen zoeken", + "searchUsers": "Gebruikers zoeken", + "seeAllNotifications": "Alle meldingen bekijken", + "seeListBelow": "Bekijk de lijst hieronder", + "selectDateRange": "Selecteer datumbereik...", + "selectFilterPlaceholder": "Voer een term in om deze lijst te filteren", + "selectInstanceFavicon": "Instantie-favicon selecteren", + "selectMetaDescription": "Metabeschrijving selecteren", + "selectMetaDescriptionHelp": "Selecteer 1 van de 3 metabeschrijvingen die onze AI voor je heeft gegenereerd.", + "selectMetaTitle": "Metatitel selecteren", + "selectMetaTitleHelp": "Selecteer 1 van de 3 metatitels die onze AI voor je heeft gegenereerd.", + "selectModel": "Model selecteren", + "selectModelError": "Selecteer een model om door te gaan.", + "selectNoOptions": "Geen opties gevonden", + "selectPlaceholder": "Selecteren", + "selectSearching": "Zoeken naar overeenkomende items", + "sessionEndedRedirecting": "Je sessie is beëindigd. Je wordt doorgestuurd naar de login.", + "sortMostRecentlyCreated": "Meest recent aangemaakt", + "sortMostRecentlyModified": "Meest recent gewijzigd", + "sortValue": "Sorteren: {{value}}", + "stop": "Stoppen", + "storedAs": "Opgeslagen als {{value}}", + "switchAccount": "Account wisselen", + "switchInstance": "Instantie wisselen", + "tabActivityLog": "Activiteitenlogboek", + "tabActivityLogSuffix": "{{name}} - Activiteitenlogboek", + "tabAllMedia": "Alle media", + "tabCustomApp": "Aangepaste app", + "tabFontsSuffix": "{{name}} Lettertypen", + "tabMetrics": "Statistieken", + "tabNewItem": "Nieuw {{modelLabel}}-item", + "tabSearchResults": "{{appName}} Zoekresultaten", + "tabSettingsSuffix": "{{name}} Instellingen", + "tabsResults_one": "{{count}} resultaat", + "tabsResults_other": "{{count}} resultaten", + "tinymceBlockFormatting": "Blokopmaak", + "tinymceBlockquote": "Citaatblok", + "tinymceBulletedList": "Lijst met opsommingstekens", + "tinymceCenterAlign": "Centreren", + "tinymceClose": "Sluiten", + "tinymceConstrainProportions": "Verhoudingen beperken", + "tinymceEmbedSocialMedia": "Sociale media insluiten", + "tinymceEmbedSocialMediaPost": "Een socialmediapost insluiten", + "tinymceJustify": "Uitvullen", + "tinymceLeftAlign": "Links uitlijnen", + "tinymceLists": "Lijsten", + "tinymceNumberedList": "Genummerde lijst", + "tinymcePreformatted": "Voorgeformatteerd", + "tinymceResizeImage": "Afbeelding verkleinen", + "tinymceResizeImageDimensions": "Afbeeldingsafmetingen wijzigen", + "tinymceRightAlign": "Rechts uitlijnen", + "tinymceSaveItem": "Item opslaan", + "tinymceSelectBynderMedia": "Selecteer media uit je Bynder-assets", + "tinymceSelectUploadedMedia": "Selecteer media uit je geuploade assets", + "tinymceService": "Service", + "tinymceSlashBulletedList": "Lijst met opsommingstekens", + "tinymceSlashCodeBlock": "Codeblok", + "tinymceSlashEmbedSocialMedia": "Sociale media insluiten", + "tinymceSlashEmoji": "Emoji", + "tinymceSlashHeading1": "Kop 1", + "tinymceSlashHeading2": "Kop 2", + "tinymceSlashHeading3": "Kop 3", + "tinymceSlashHeading4": "Kop 4", + "tinymceSlashHeading5": "Kop 5", + "tinymceSlashHeading6": "Kop 6", + "tinymceSlashImage": "Afbeelding", + "tinymceSlashLink": "Link", + "tinymceSlashNumberedList": "Genummerde lijst", + "tinymceSlashParagraph": "Alinea", + "tinymceSlashQuote": "Citaat", + "tinymceSlashSpecialCharacter": "Speciaal teken", + "tinymceSlashTable": "Tabel", + "tinymceSlashTime": "Tijd", + "tinymceSlashVideo": "Video", + "tinymceTextAlignment": "Tekstuitlijning", + "tinymceUniquePostId": "Unieke post-ID", + "tone": "Toon", + "toneIntriguing": "Intrigerend - Nieuwsgierig, mysterieus en prikkelend", + "toneNameIntriguing": "Intrigerend", + "toneNamePlayful": "Speels", + "toneNameProfessional": "Professioneel", + "toneNameSensational": "Sensationeel", + "toneNameSuccinct": "Beknopt", + "tonePlayful": "Speels - Leuk, luchtig en grillig", + "toneProfessional": "Professioneel - Serieus, formeel en gezaghebbend", + "toneSensational": "Sensationeel - Gedurfd, dramatisch en opvallend", + "toneSuccinct": "Beknopt - Helder, feitelijk, zonder overdrijving", + "toneTooltip": "Stel de gewenste stijl en toon van de gegenereerde tekst in", + "topic": "Onderwerp", + "topicPlaceholder": "bijv. Hikes in Washington", + "trySwitchingAccount": "probeer over te schakelen naar een ander account.", + "twoFactorCodeHelp": "Je ontvangt deze code op je telefoon.", + "unableToInviteUsers_one": "Kan {{count}} gebruiker niet uitnodigen", + "unableToInviteUsers_other": "Kan {{count}} gebruikers niet uitnodigen", + "unknownUser": "Onbekende gebruiker", + "unpinAll": "Alles losmaken", + "unpinAllTabsTitle": "Alle tabbladen in het menu Meer weergeven losmaken?", + "unsavedChangesBody": "Sla uw wijzigingen op of werp ze weg voordat u dit tabblad losmaakt", + "updateFavicon": "Favicon bijwerken", + "uuidAutoGeneratedPlaceholder": "UUID-veldwaarden worden automatisch gegenereerd", + "uuidFieldReadOnly": "Dit veld kan niet worden bewerkt", + "viewAllLogs": "Alle logs bekijken", + "viewOpenComment": "Open commentaar bekijken", + "viewSourceCommit": "Broncode-commit bekijken", + "viewWebEnginePreview": "WebEngine-voorbeeld bekijken (Stage)", + "viewYourInstances": "Bekijk je instanties", + "welcomeBack": "Hallo, welkom terug!", + "wordLimit": "Woordlimiet", + "wordLimitTooltip": "Stel een woordlimiet in om de lengte van de gegenereerde tekst te bepalen", + "zestyAccountTitle": "Zesty-account" +} diff --git a/public/locales/ru-RU/activePreview.json b/public/locales/ru-RU/activePreview.json new file mode 100644 index 0000000000..dcf7a72607 --- /dev/null +++ b/public/locales/ru-RU/activePreview.json @@ -0,0 +1,16 @@ +{ + "disconnectedFromPreviewDomain": "Соединение с доменом предварительного просмотра разорвано", + "findingDomain": "Поиск домена", + "landscapeMode": "Альбомный режим", + "loadingRelatedItem": "Загрузка связанного элемента", + "meta": "Мета", + "noDevice": "Нет устройства", + "noTemplate": "Нет шаблона", + "noTemplateSelected": "Шаблон не выбран", + "resolveInvalidFields": "Исправьте неверные значения полей, чтобы сохранить изменения и обновить предпросмотр", + "saveToUpdatePreview": "Сохраните, чтобы обновить предпросмотр", + "saving": "Сохранение", + "sessionNotActive": "Ваша сессия неактивна. Пожалуйста, войдите в систему Zesty.io", + "viewingMetaData": "Просмотр метаданных для элемента по этому маршруту", + "web": "Веб" +} diff --git a/public/locales/ru-RU/blocks.json b/public/locales/ru-RU/blocks.json new file mode 100644 index 0000000000..6967adf11f --- /dev/null +++ b/public/locales/ru-RU/blocks.json @@ -0,0 +1,28 @@ +{ + "addVariantsEmptyStateBody": "Добавляйте свои варианты здесь. Начните с создания первого варианта.", + "allBlocks": "Все блоки", + "allBlocksTitle": "Все блоки", + "blockImageAlt": "Изображение блока", + "createBlock": "Создать блок", + "createVariantOf": "Создать вариант для {{label}}", + "documentation": "Документация", + "emptyItemsListAlt": "Список элементов пуст", + "emptyStateBody": "Модели блоков определяют структуру блока, такого как баннер (hero), блок преимуществ (feature), отзыв (testimonial) и т. д.", + "filterBlocks": "Фильтровать блоки", + "howToCreateBlock": "Как создать блок", + "howToUseBlocks": "Как использовать Блоки", + "introToWebComponents": "Введение в Web Components", + "noResultsAvailable": "Нет результатов по запросу \"{{filter}}\"", + "noSearchResultsAlt": "Ничего не найдено", + "onboardingStep1Description": "Создавайте и добавляйте редактируемые блоки (например, баннеры (Hero), отзывы, формы и т. д.) на любую существующую страницу вашего сайта всего в несколько кликов", + "onboardingStep1Title": "Представляем Блоки", + "onboardingStep2Description": "Создайте модель блока в Schema и определите редактируемые поля. Затем свяжите эти поля в шаблоне кода вашего блока.", + "onboardingStep2Title": "Как создать блок", + "onboardingStep3Description": "Варианты этих блоков можно создавать в приложении Blocks и добавлять на веб-страницы с помощью поля контента блока (Block Content) или через Freestyle.", + "onboardingStep3Title": "Создавайте и добавляйте варианты блоков на любую веб-страницу", + "searchBlocksPlaceholder": "Поиск блоков", + "startByCreatingBlocks": "Начните с создания блоков", + "startCreatingVariantsNow": "Начать создание вариантов прямо сейчас", + "takeProductTour": "Пройти тур по продукту", + "variantName": "Название варианта" +} diff --git a/public/locales/ru-RU/code.json b/public/locales/ru-RU/code.json new file mode 100644 index 0000000000..32d605e6b2 --- /dev/null +++ b/public/locales/ru-RU/code.json @@ -0,0 +1,135 @@ +{ + "ajaxJsonDescription": "Доступный через Parsley файл для создания эндпоинтов или кастомного функционала. Эти файлы должны быть именованы с указанием полного пути и расширения, например /my/file/path.json. Файл доступен по адресу hash-dev.preview.zesty.io/my/file/path.json. Типы файлов, которые можно использовать: css, html, json, js, xml, csv, tsv, xml, yaml, md, svg, rss, ics, vcf, xhtml.", + "allFiles": "Все файлы", + "apiDocs": "Документация API", + "apiErrorDeletingFile": "Произошла ошибка API при попытке удалить файл. {{fileName}}", + "apiErrorLoadingFileVersions": "Ошибка API при загрузке версий файла", + "auditTrailEmptyHint": "Когда этот файл будет сохранен или опубликован, вы сможете увидеть здесь логи о том, когда и кем вносились изменения.", + "auditTrailLoadError": "Не удалось загрузить лог активности", + "branch": "Ветка (Branch)", + "buildFasterBody": "Начните создавать динамические веб-сайты и приложения с помощью , языка шаблонов Zesty.io. Изучите наш интерактивный инструмент для быстрого практического ознакомления или узнайте больше из нашей подробной .", + "buildFasterHeading": "Создавайте быстрее и умнее с помощью Parsley!", + "changeCombineOrder": "Изменить порядок объединения и препроцессинга", + "chooseFileType": "Выберите тип файла", + "closeDrawer": "Закрыть панель {{metaShortcut}}", + "compilesToSiteCss": "Компилируется в {{file}}", + "compilesToSiteJs": "Компилируется в {{file}}", + "couldNotLoadFile": "Не удалось загрузить {{fileType}} {{fileZUID}}", + "createFile": "Создать файл", + "createFileError": "Не удалось создать файл {{name}}. {{error}}", + "createFileSuccess": "Создан новый файл {{name}}", + "createNavType": "Создать {{navType}}", + "createScript": "Создать скрипт", + "createStylesheet": "Создать таблицу стилей", + "createView": "Создать представление (View)", + "cssDescription": "Каскадная таблица стилей, которая автоматически объединяется в один css-файл /main.css, автоматически подключаемый в тег head веб-страниц webengine. Порядком сортировки при объединении можно управлять. Транспиляция не происходит.", + "deleteFile": "Удалить файл", + "deleteFileCdnWarning": "Удаление файла приведет к его окончательному стиранию и запустит очистку CDN, что повлечет за собой мгновенное обновление рабочей среды (production).", + "deleteFileError": "Не удалось удалить файл {{fileName}}. {{error}}", + "deleteFileLabel": "Удалить файл", + "developerResources": "Ресурсы для разработчиков", + "diffVersions": "Сравнить версии (Diff)", + "editItemContent": "Редактировать содержимое элемента", + "editLinkedContent": "Редактировать связанный контент", + "editLinkedSchema": "Редактировать связанную схему", + "editRelatedContent": "Редактировать связанный контент", + "editRelatedModel": "Редактировать связанную модель", + "errorSavingFileSortOrder": "Произошла ошибка при сохранении порядка сортировки файлов. Скорее всего, это проблема с нашей стороны.", + "failedToLoadHeaders": "Не удалось загрузить заголовки. {{status}}", + "fetchDevFilesError": "Не удалось загрузить файлы разработки инстанса {{type}}. {{status}} | {{error}}", + "fetchFileError": "Не удалось загрузить файл. {{status}} | {{error}}", + "fetchFileVersionsError": "Не удалось загрузить версии файла. {{status}}", + "fetchLiveFilesError": "Не удалось загрузить рабочие (live) файлы инстанса {{type}}. {{status}} | {{error}}", + "fileInformation": "Информация о файле", + "fileListHeaderFileName": "Имя файла", + "fileListHeaderLastSaved": "Последнее сохранение", + "fileLocked": "Файл заблокирован", + "fileLockedDescriptionRich": "Пользователь {{firstName}} {{lastName}} просматривает {{name}} с {{formattedDate}}. Разблокируйте этот элемент, чтобы проигнорировать это предупреждение и, возможно, перезаписать изменения, сделанные {{firstName}}.", + "fileName": "Имя файла", + "fileNavHeaderSiteCss": "Site.css", + "fileNavHeaderSiteJs": "Site.js", + "fileNavHeaderViews": "Представления", + "fileNavTooltipSiteCss": "Site.css — это динамически создаваемый файл из файлов стилей инстанса", + "fileNavTooltipSiteJs": "Site.js — это динамически создаваемый файл из JavaScript-файлов инстанса", + "fileNavTooltipViews": "Представления (Views) — это файлы шаблонов, которые могут отображать HTML или другие типы MIME.", + "fileNotFound": "Файл не найден. {{fileZUID}}", + "fileNotFoundToSave": "Нам не удалось найти файл, который вы пытаетесь сохранить.", + "fileSortOrderSaved": "Порядок сортировки файлов сохранен", + "fileType": "Тип файла", + "fileTypeChoose": "Выберите тип файла", + "fileTypeCss": "Файл CSS (css)", + "fileTypeCustom": "Пользовательский тип файла ({{extension}})", + "fileTypeCustomEndpoint": "Пользовательский тип файла / Эндпоинт (смешанные расширения)", + "fileTypeJavaScript": "Файл JavaScript (js)", + "fileTypeLegacy": "Устаревший файл (Legacy)", + "fileTypeLess": "Файл LESS (less)", + "fileTypeModelView": "Представление модели (Model View)", + "fileTypeScss": "Файл SCSS (scss/sass)", + "fileTypeSnippet": "Фрагмент кода / Сниппет (html)", + "fileZuid": "ZUID файла", + "filterFiles": "Фильтровать файлы", + "findingFile": "Поиск файла", + "findingFileVersions": "Поиск версий файла", + "headerTitle": "Код", + "instantJsonApi": "Instant JSON API", + "javascriptDescription": "Файл javascript, который автоматически объединяется в один файл /main.js, автоматически загружаемый webengine. Транспиляция не происходит.", + "lastEdited": "Последнее редактирование", + "learnMoreParsleySyntax": "Узнать больше о синтаксисе Parsley", + "learnMoreProcessingFlows": "Узнайте больше о потоках обработки", + "lessDescription": "Имеет доступ к settings > variables. Каскадная таблица стилей, которая автоматически объединяется в один файл /main.css. Порядком сортировки при объединении и транспиляцией можно управлять.", + "linkedContent": "Связанный контент", + "linkedContentDescription": "Показаны три последние записи контента из связанной модели этого представления.", + "linkedSchemaBodyText": "Используйте приведенный ниже синтаксис Parsley для ссылки на поля этой модели. Это динамически свяжет поле с его содержимым.", + "linkedSchemaTitle": "Схема связанной модели для {{fileName}}", + "live": "В эфире / Live", + "loadingFileInformation": "Загрузка информации о файле", + "loadVersion": "Загрузить версию", + "modelZuid": "ZUID модели", + "moreFileInformation": "Дополнительная информация о файле", + "mustProvideFileName": "Необходимо указать имя для нового файла", + "mustSelectFileType": "Вы должны выбрать тип файла, чтобы создать новый файл", + "newRemoteVersionNotice": "Доступна новая удаленная версия, которая опережает ваши локальные изменения", + "noFilesFound": "Файлы не найдены", + "noResultsFor": "Нет результатов по запросу \"{{keyword}}\"", + "openDrawer": "Открыть панель {{metaShortcut}}", + "openForAdditionalFileInfo": "Открыть для получения дополнительной информации о файле", + "orderFilesBody": "Отображаемый порядок — это порядок, в котором файлы обрабатываются и объединяются вместе в динамически создаваемый файл {{siteFile}}.", + "orderFilesPublishWarning": "После изменения порядка необходимо выполнить публикацию, чтобы применить новый порядок и сделать изменения доступными на сайте.", + "orderFilesSaveOrder": "Сохранить порядок", + "orderFilesTitle": "Упорядочить {{typePathPart}}", + "pleaseAddLeadingSlash": "Пожалуйста, добавьте косую черту в начале пути к файлу. Пример: /{{name}}", + "previewCssWebpage": "Предпросмотр CSS", + "previewFileWebpage": "Предпросмотр {{fileName}}", + "previewInstantJson": "Предпросмотр {{path}}", + "previewItemWebpage": "Предпросмотр страницы элемента", + "previewJavascriptWebpage": "Предпросмотр Javascript", + "previewJson": "Предварительный просмотр JSON", + "previewPathWebpage": "Предпросмотр {{path}}", + "publish": "Опубликовать", + "publishedVersion": "Опубликовано: Версия {{n}}", + "publishFileError": "Не удалось опубликовать файл. {{status}} | {{error}}", + "publishFileShortcut": "Опубликовать файл {{shortcut}}", + "publishFileSuccess": "Файл {{fileName}} версии {{latestVersion}} опубликован", + "saveAndPublish": "Сохранить и опубликовать", + "saveFileError": "Не удалось сохранить файл. {{status}} | {{error}}", + "saveFileShortcut": "Сохранить файл {{shortcut}}", + "saveFileSuccess": "Файл {{fileName}} сохранен", + "saveVersion": "Сохранить версию", + "scssDescription": "Имеет доступ к settings > variables. Каскадная таблица стилей, которая автоматически объединяется в один файл /main.css. Порядком сортировки при объединении и транспиляцией можно управлять.", + "searchFiles": "Поиск файлов", + "simplifyWorkflowBody": "Откройте для себя наши оптимизированные рабочие процессы и повысьте эффективность разработки. Посмотрите, как это работает с нашей .", + "simplifyWorkflowHeading": "Упростите свой рабочий процесс: препроцессинг уже внутри! 💻", + "snippetDescription": "Доступный через Parsley файл, предназначенный для абстрагирования часто используемого кода или организации сборки файлов. Примеры: слайдер, футер, хедер. Их также можно использовать внутри циклов each.", + "startingCodeEditor": "Запуск редактора кода", + "unableToLoadFileLogs": "Не удалось загрузить логи файла кода", + "unknown": "Неизвестно", + "unlock": "Разблокировать", + "unsavedChangesDetail": "У вас есть несохраненные изменения, которые будут потеряны, если вы покинете эту страницу.", + "versionLabel": "Версия {{n}}", + "versionPublishedByUser": "v{{n}} опубликована {{date}} пользователем {{user}}", + "versionSavedByUser": "v{{n}} сохранена {{date}} пользователем {{user}}", + "viewingVersion": "Просмотр: Версия {{n}}", + "viewNotFound": "Представление не найдено", + "webEngineFileLink": "Ссылка WebEngine {{fileName}}", + "webEngineLink": "Ссылка WebEngine" +} diff --git a/public/locales/ru-RU/common.json b/public/locales/ru-RU/common.json new file mode 100644 index 0000000000..e65ee43c9f --- /dev/null +++ b/public/locales/ru-RU/common.json @@ -0,0 +1,74 @@ +{ + "add": "Добавить", + "apis": "API", + "back": "Назад", + "cancel": "Отмена", + "clear": "Очистить", + "code": "Код", + "codeFile": "Файл кода", + "codeFiles": "Файлы кода", + "comment": "Комментировать", + "content": "Контент", + "contentItems": "Элементы контента", + "copied": "Скопировано", + "copy": "Копировать", + "create": "Создать", + "createdBy": "Создано", + "dateAfterValue": "После {{date}}", + "dateAtTime": "{{date}}, {{time}}", + "dateBeforeValue": "До {{date}}", + "dateOnValue": "{{date}}", + "delete": "Удалить", + "dev": "Дев", + "discard": "Отменить", + "domains": "Домены", + "done": "Готово", + "edit": "Редактировать", + "getStarted": "Начало работы", + "goBack": "Вернуться", + "graphqlDocs": "Документация GraphQL", + "instanceApiDocs": "Документация Instance API", + "invalidDate": "Недопустимая дата", + "last12Months": "Последние 12 месяцев", + "last30Days": "Последние 30 дней", + "last3Months": "Последние 3 месяца", + "last7Days": "Последние 7 дней", + "locales": "Языковые настройки", + "manage": "Управлять", + "media": "Медиа", + "mediaItems": "Медиа-элементы", + "mediaRequests": "Медиа-запросы", + "model": "Модель", + "models": "Модели", + "more": "Ещё", + "name": "Имя", + "next": "Далее", + "no": "Нет", + "noUsersFound": "Пользователи не найдены", + "open": "Открыть", + "parsleyDocs": "Документация Parsley", + "platformDocs": "Документация платформы", + "preview": "Предпросмотр", + "prod": "Прод", + "remove": "Убрать", + "replace": "Заменить", + "reply": "Ответить", + "save": "Сохранить", + "search": "Поиск", + "searchAgain": "Искать снова", + "sortNameAToZ": "Имя (А-Я)", + "sortNameZToA": "Имя (Я-А)", + "stage": "Тестовая среда", + "support": "Поддержка", + "teams": "Команды", + "today": "Сегодня", + "unsavedChanges": "Несохранённые изменения", + "update": "Обновить", + "upload": "Загрузить", + "usage": "Использование", + "users": "Пользователи", + "view": "Просмотр", + "webhooks": "Вебхуки", + "yes": "Да", + "yesterday": "Вчера" +} diff --git a/public/locales/ru-RU/content.json b/public/locales/ru-RU/content.json new file mode 100644 index 0000000000..a17e6968ee --- /dev/null +++ b/public/locales/ru-RU/content.json @@ -0,0 +1,770 @@ +{ + "addFieldsInSchemaButton": "Добавить поля в схеме", + "addFieldsTitle": "Добавьте поля в вашу модель", + "analyticsAuthenticateGoogle": "Войти через Google", + "analyticsAvgTimeLabel": "ср. время", + "analyticsBarCountry": "Страна", + "analyticsBarSource": "Источник", + "analyticsByDay": "{{type}} по дням", + "analyticsChangeAccount": "Сменить аккаунт Google", + "analyticsChartAvgEngagement": "Ср. время взаимодействия", + "analyticsColStats": "Статистика", + "analyticsComparePage": "Сравнить страницу", + "analyticsComparePageBody": "Выберите страницу, с которой вы хотите сравнить текущую страницу", + "analyticsConnectBody": "Узнайте, откуда приходит трафик ваших страниц и как он меняется в зависимости от изменений в контенте. Чтобы начать, выполните вход с помощью аккаунта Google, к которому подключён ваш Google Analytics.", + "analyticsConnectedAccount": "Сейчас вы подключены к следующему аккаунту Google.", + "analyticsConnectedSubtitle": "Приготовьтесь получить аналитику о том, как изменения вашего контента повлияли на трафик ваших страниц и многое другое!", + "analyticsConnectedTitle": "Поздравляем, {{name}}! Вы успешно подключились к Google Analytics", + "analyticsConnectErrorSubtitle": "Это может быть связано с тем, что вы выбрали аккаунт Google, в котором не настроен Google Analytics.", + "analyticsConnectErrorTitle": "Упс, нам не удалось успешно подключиться к Google Analytics", + "analyticsConnectTitle": "Подключиться к Google Analytics", + "analyticsContactSupport": "Связаться с поддержкой", + "analyticsDashboard": "Панель управления", + "analyticsDisconnectAccount": "Отключить аккаунт", + "analyticsDisconnectBody": "Отключение означает, что вы не сможете просматривать аналитику ни для одного элемента контента в Zesty.", + "analyticsDisconnectTitle": "Отключить аккаунт Google Analytics?", + "analyticsGaSettings": "Настройки GA", + "analyticsGoogleIconAlt": "Значок Google Analytics", + "analyticsItemMetaLine": "{{label}} • {{time}} • автор: {{user}}", + "analyticsItemNotExist": "Этот элемент не существует в вашем экземпляре", + "analyticsItemPublished": "Элемент опубликован", + "analyticsLearnMore": "Подробнее", + "analyticsLegendNew": "Новые", + "analyticsLegendOther": "Другое", + "analyticsLegendReturning": "Вернувшиеся", + "analyticsMetricAvgDuration": "Средняя длительность", + "analyticsMetricAvgDurationDesc": "Длительность сеанса — это период времени, в течение которого на сайте происходят взаимодействия пользователей.", + "analyticsMetricAvgEngagement": "Среднее время взаимодействия", + "analyticsMetricAvgEngagementDesc": "Среднее время взаимодействия — это среднее время, в течение которого ваш сайт был в фокусе в браузере пользователя или мобильное приложение было на переднем плане на устройстве пользователя.", + "analyticsMetricBounceRate": "Показатель отказов", + "analyticsMetricBounceRateDesc": "Показатель отказов — это процент людей, которые попадают на страницу и уходят, не выполнив определённого действия.", + "analyticsMetricConversions": "Конверсии", + "analyticsMetricConversionsDesc": "Конверсия — это действие пользователя, которое вы учитываете, потому что считаете его важным, например покупка, прохождение уровня игры или прокрутка сайта либо приложения.", + "analyticsMetricEvents": "События", + "analyticsMetricSessions": "Сеансы", + "analyticsMetricSessionsDesc": "Сеанс в Google Analytics — это период времени, в течение которого пользователь взаимодействует с вашим сайтом.", + "analyticsMetricViews": "Просмотры", + "analyticsMetricViewsDesc": "Просмотр страницы определяется как просмотр страницы вашего сайта, отслеживаемой кодом отслеживания Analytics. Если пользователь нажимает «обновить» после перехода на страницу или переходит на другую страницу, а затем возвращается на исходную, это засчитывается как дополнительный просмотр страницы.", + "analyticsNewUsersDesc": "Новые пользователи — это пользователи, которые ранее никогда не посещали ваш сайт или приложение", + "analyticsNewUsersForRange": "Новые пользователи за {{range}}", + "analyticsNewVsReturning": "Новые и вернувшиеся пользователи", + "analyticsPageSettingsTitle": "Настройки аналитики страниц", + "analyticsPresetQuarterToDate": "Квартал до текущей даты", + "analyticsPresetThisWeek": "Эта неделя (вс - сегодня)", + "analyticsPresetThisYear": "Этот год (янв - сегодня)", + "analyticsPropertiesCount": "Ресурсов: {{count}}", + "analyticsPropertiesCount_one": "Ресурс: {{count}}", + "analyticsPropertiesCount_few": "Ресурса: {{count}}", + "analyticsPropertiesCount_many": "Ресурсов: {{count}}", + "analyticsPropertiesCount_other": "Ресурса: {{count}}", + "analyticsRangeDayBeforeYesterday": "Позавчера", + "analyticsRangeLast12Months": "Последние 12 месяцев", + "analyticsRangeLast14Days": "Последние 14 дней", + "analyticsRangeLast30Days": "Последние 30 дней", + "analyticsRangeLast3Months": "Последние 3 месяца", + "analyticsRangeLast7Days": "Последние 7 дней", + "analyticsRangeLastQuarter": "Прошлый квартал", + "analyticsRangeLastWeek": "Прошлая неделя", + "analyticsRangeLastYear": "Прошлый год", + "analyticsRangePrior12Months": "Предыдущие 12 месяцев", + "analyticsRangePrior14Days": "Предыдущие 14 дней", + "analyticsRangePrior30Days": "Предыдущие 30 дней", + "analyticsRangePrior3Months": "Предыдущие 3 месяца", + "analyticsRangePrior7Days": "Предыдущие 7 дней", + "analyticsRangeThisQuarter": "Этот квартал", + "analyticsRangeThisWeek": "Эта неделя", + "analyticsRangeThisYear": "Этот год", + "analyticsRecentPublishes": "Недавние публикации", + "analyticsReturningUsersDesc": "Вернувшиеся пользователи — это пользователи, которые ранее никогда не посещали ваш сайт или приложение", + "analyticsReturningUsersForRange": "Вернувшиеся пользователи за {{range}}", + "analyticsSearchProperties": "Поиск ресурсов Google Analytics", + "analyticsSearchResults": "Результаты поиска", + "analyticsSelectProperty": "Выберите ресурс Google Analytics", + "analyticsSelectPropertyBody": "Выберите ресурс Google Analytics, для которого вы хотите видеть аналитику и сведения", + "analyticsSourceIncreased": "Пользователей из {{source}} стало больше на {{percentage}}% — {{range}}", + "analyticsTabGainers": "Растущие", + "analyticsTabLatestPublishes": "Последние публикации", + "analyticsTabLosers": "Падающие", + "analyticsTabMostPopular": "Самые популярные", + "analyticsTabRecentEdits": "Недавние изменения", + "analyticsTotalSessions": "Всего сеансов", + "analyticsTotalUsers": "Всего пользователей", + "analyticsTryAgain": "Повторить попытку", + "analyticsUnableToLoadMessage": "Возможно, это связано с плохим интернет-соединением, поэтому повторите попытку. Если вам по-прежнему не удаётся решить эту проблему, обратитесь в службу поддержки.", + "analyticsUnableToLoadTitle": "Не удалось загрузить данные аналитики", + "analyticsUsers": "Пользователи", + "analyticsUsersBy": "Пользователи по: {{type}}", + "analyticsUsersLabel": "пользователей", + "analyticsViewVersion": "Показать версию {{version}}", + "apiCodeIdLabel": "ID кода API / Parsley", + "apiCodeIdTooltip": "Будет отображаться как ключ в ответах API.", + "blockCreateVariant": "Создать вариант", + "blockSearchAgain": "Искать снова", + "blockSearchNoResults": "По вашему запросу «{{search}}» ничего не найдено", + "blockSearchNoResultsHint": "Попробуйте изменить запрос. Рекомендуем проверить правильность написания всех слов или использовать другие ключевые слова.", + "blockSearchVariants": "Искать варианты", + "blocksReferencedInCodeOrFreestyle": "Блоки, используемые в коде или Freestyle", + "blockTabCode": "Код", + "blockTabInfo": "Информация", + "blockTabVariants": "Варианты", + "booleanHide": "Скрыть", + "booleanShow": "Показать", + "browse": "Обзор", + "closeInspectorPanelAriaLabel": "Закрыть панель инспектора", + "codeSampleBaseTemplate": "Базовый шаблон", + "codeSampleBaseTemplateTip": "Использует базовый шаблон для отрисовки блока. Это шаблон по умолчанию, применяемый, когда не выбран конкретный шаблон.", + "codeSampleBaseTemplateVersion": "Базовый шаблон с версией", + "codeSampleBaseTemplateVersionTip": "Использует базовый шаблон для отрисовки блока с конкретным номером версии. Добавление параметра версии позволяет указать определённую версию шаблона.", + "codeSampleBlockSelector": "Селектор блока", + "codeSampleBlockSelectorTip": "Использует значение поля-селектора блока. Замените \"block_selector_field\" фактическим именем поля-селектора блока при создании модели.", + "codeSampleSpecificVariant": "Определённый вариант блока", + "codeSampleSpecificVariantTip": "Использует определённый вариант блока. Параметр варианта указывает конкретную вариацию блока по его ZUID.", + "connectItem": "Подключить элемент", + "contentFetchResourceFailed": "Не удалось получить ресурс. {{status}}", + "contentSearchItemFailed": "Не удалось найти элемент: {{error}}", + "correctFieldsBeforeSaving_one": "Исправьте следующее {{count}} поле перед сохранением", + "correctFieldsBeforeSaving_few": "Исправьте следующие {{count}} поля перед сохранением", + "correctFieldsBeforeSaving_many": "Исправьте следующие {{count}} полей перед сохранением", + "correctFieldsBeforeSaving_other": "Исправьте следующие {{count}} поля перед сохранением", + "csvImportColumnMismatch": "Несоответствие количества столбцов в CSV-файле", + "csvImportCreateItems": "Создать элементы", + "csvImportDuplicateColumns": "Вы продублировали использование этих столбцов: {{columns}}", + "csvImportEmptyFile": "Вы импортировали пустой CSV-файл", + "csvImportErrorsCount": "Ошибки {{count}}", + "csvImportErrorsCount_one": "Ошибка {{count}}", + "csvImportErrorsCount_few": "Ошибки {{count}}", + "csvImportErrorsCount_many": "Ошибок {{count}}", + "csvImportErrorsCount_other": "Ошибки {{count}}", + "csvImportFailureCreating": "Не удалось создать элемент: {{error}}", + "csvImportImportedCount": "Импортировано {{count}} из {{total}}", + "csvImportImportedCount_one": "Импортировано {{count}} из {{total}}", + "csvImportImportedCount_few": "Импортировано {{count}} из {{total}}", + "csvImportImportedCount_many": "Импортировано {{count}} из {{total}}", + "csvImportImportedCount_other": "Импортировано {{count}} из {{total}}", + "csvImportNone": "нет", + "csvImportNotCsvFile": "Вы выбрали файл, который не является CSV", + "csvImportOpenFile": "Открыть CSV-файл", + "csvImportResolveDuplicates": "Вы должны устранить конфликты дублирующихся столбцов", + "csvImportSelectPathPart": "Вы должны выбрать столбец для Path Part", + "csvSettingsAllowedParams": "Разрешённые параметры запроса (через запятую)", + "csvSettingsAllowedParamsDesc": "Указывайте только имена параметров через запятую. Не включайте значения, амперсанды, знаки равенства или пробелы.", + "csvSettingsAutoPriority": "Автоматически установить приоритет", + "csvSettingsCanonicalNotEnabled": "Канонические теги не включены. Подробнее читайте", + "csvSettingsCanonicalOff": "Выключено", + "csvSettingsCanonicalOnAllow": "Включено - разрешить определённые параметры", + "csvSettingsCanonicalOnCustom": "Включено - пользовательский путь или URL", + "csvSettingsCanonicalOnIgnore": "Включено (игнорирует параметры запроса)", + "csvSettingsCustomPathDesc": "Для пользовательских путей: начните с косой черты. Для пользовательских URL: начните с http:// или https://", + "csvSettingsCustomPathLabel": "Пользовательское значение пути или URL", + "csvSettingsMetaLinkText": "Текст мета-ссылки", + "csvSettingsNoSitemap": "Не отображать в карте сайта", + "csvSettingsParentZuid": "ZUID родителя", + "csvSettingsPathPart": "Часть пути", + "currencyLocaleTooltip": "Просмотр этого значения в разных валютах в зависимости от вашей локали \"{{locale}}\"", + "deleteItemFailure": "Ошибка удаления элемента: {{statusText}}", + "deleteItemSuccess": "Элемент успешно удален", + "disconnect": "Отключить", + "editFieldButton": "Редактировать поле", + "editorTypeHtml": "HTML", + "editorTypeInline": "Встроенный", + "editorTypeMarkdown": "Markdown", + "editorTypeWysiwyg": "WYSIWYG", + "elementNotEditableHere": "Этот элемент нельзя редактировать здесь.", + "emptyCreateModel": "Создайте новую модель контента", + "errorPublishing": "Ошибка при публикации «{{title}}»", + "errorScheduling": "Ошибка при планировании публикации «{{title}}»", + "errorUnpublishing": "Ошибка при отмене публикации «{{title}}»", + "errorUnschedulingVersion": "Ошибка при отмене планирования версии {{version}}", + "exceedingMaxLength_one": "Превышение на {{count}} символ.", + "exceedingMaxLength_few": "Превышение на {{count}} символа.", + "exceedingMaxLength_many": "Превышение на {{count}} символов.", + "exceedingMaxLength_other": "Превышение на {{count}} символа.", + "failedFetchItemPublishing": "Не удалось загрузить данные о публикации элемента: {{error}}", + "failedFetchItemPublishings": "{{status}}: Не удалось загрузить данные о публикациях элемента: {{error}}", + "failedFetchItemPublishingsError": "Не удалось загрузить данные о публикациях элемента: {{error}}", + "failedFetchModelPublishings": "Не удалось загрузить данные о публикациях элементов модели: {{error}}", + "failedLoadingField": "Не удалось загрузить поле {{label}}. Нажмите здесь, чтобы просмотреть схему поля.", + "fieldAddedOnLabel": "Поле добавлено", + "fieldMetaArticleWriterDescription": "Развёрнутый контент статьи", + "fieldMetaBlockSelectorDescription": "Повторно используемый блок контента", + "fieldMetaColorDescription": "Значение цвета", + "fieldMetaCurrencyDescription": "Денежные значения", + "fieldMetaDateDescription": "Календарная дата", + "fieldMetaDatetimeDescription": "Дата и время", + "fieldMetaDropdownDescription": "Один вариант из списка", + "fieldMetaImagesDescription": "Медиа из библиотеки ресурсов", + "fieldMetaInternalLinkDescription": "Ссылка на другую страницу", + "fieldMetaLinkDescription": "Внешний URL", + "fieldMetaMarkdownDescription": "Текст в формате Markdown", + "fieldMetaNumberDescription": "Целые или дробные числа", + "fieldMetaOneToManyDescription": "Ссылки на связанные элементы", + "fieldMetaOneToOneDescription": "Ссылка на один связанный элемент", + "fieldMetaRepeaterDescription": "Повторяющаяся группа полей", + "fieldMetaSortDescription": "Порядок ручной сортировки", + "fieldMetaTextareaDescription": "Обычный многострочный текст", + "fieldMetaTextDescription": "Заголовки, названия и подзаголовки", + "fieldMetaUuidDescription": "Уникальный идентификатор", + "fieldMetaWysiwygDescription": "Форматированный текст", + "fieldMetaYesNoDescription": "Переключатель да / нет", + "fieldTypeLabel": "Поле {{type}}", + "fieldZuidLabel": "ZUID поля", + "fieldZuidTooltip": "Уникальный хеш, присвоенный каждому полю. Его можно использовать для доступа к информации о поле через наш API.", + "footerTagline": "Agentic Studio от Content.One", + "hideDialogHideBody1": "Это переместит элемент контента {{label}} из раздела страниц в раздел скрытых элементов ниже. Мы рекомендуем использовать эту функцию только для того, чтобы убрать из дерева навигации контента элементы, к которым вы обращаетесь нечасто.", + "hideDialogHideBody2": "Это не скроет ваши статьи на действующем сайте или в приложении.", + "hideDialogHideButton": "Скрыть {{label}}", + "hideDialogHideTitle": "Скрыть {{label}}?", + "hideDialogUnhideBody": "Это переместит элемент контента {{label}} из раздела скрытых элементов в раздел страниц выше.", + "hideDialogUnhideButton": "Показать {{label}}", + "hideDialogUnhideTitle": "Показать {{label}}?", + "invalidFieldValuesTitle": "Невозможно сохранить элемент из-за недопустимых значений полей.", + "itemCreateAddNew": "Создать и добавить новый", + "itemCreateCannotSaveError": "Не удалось сохранить: {{error}}", + "itemCreateCreatedItem": "Элемент создан: {{name}}", + "itemCreateImproveWithAI": "Улучшить с помощью ИИ", + "itemCreateLoading": "Создание нового элемента", + "itemCreatePublishAddNew": "Создать, опубликовать и добавить новый", + "itemCreatePublishNow": "Создать и опубликовать сейчас", + "itemCreateSchedulePublish": "Создать и запланировать публикацию", + "itemCreateSchedulePublishAddNew": "Создать, запланировать публикацию и добавить новый", + "itemCreateTitleItem": "Создать элемент «{{label}}»", + "itemCreateTitleVariant": "Создать вариант", + "itemCreateUnknownIssue": "Неизвестная ошибка при создании нового элемента", + "itemEditActions": "Действия", + "itemEditAddStatus": "Добавить статус", + "itemEditAlsoPublishRelatedItems": "Также опубликовать связанные элементы", + "itemEditAutomatedNavigationOrder": "Автоматический порядок навигации", + "itemEditAutomatedNavigationOrderTooltip": "Автоматический порядок навигации управляет выводом автоматических parsley {{navigation}} и {{sectionlinks}}. Его также можно использовать в цикле each, например: вызовы {{each items as items sort by z.sort}}.", + "itemEditAvailableInLoops": "Доступно в циклах", + "itemEditAvailableInLoopsTooltip": "Определяет, будет ли этот элемент доступен в циклах Parsley. Типичный пример — отображение записи блога как элемента на странице списка статей.", + "itemEditByUser": "от {{name}}", + "itemEditCannotPublishStatus": "Нельзя опубликовать: \"{{title}}\". Нет статуса, разрешающего публикацию", + "itemEditCannotSaveTitle": "Не удается сохранить: {{title}}", + "itemEditCannotSaveTooManySelected": "Не удается сохранить поле. Уменьшите общее количество выбранных элементов.", + "itemEditCannotSaveValueTooLong": "Не удается сохранить поле. Значение слишком длинное.", + "itemEditCannotSaveWithError": "Не удается сохранить: {{title}} - {{error}}", + "itemEditCdnDescription": "Принудительно обновляет кэш CDN для этого элемента. Кэширование CDN может занять от нескольких секунд до нескольких минут, пока элемент повторно кэшируется во всей глобальной сети.", + "itemEditCdnPurgeError": "Возникла проблема при очистке кэша CDN", + "itemEditCdnPurgeSuccess": "Элемент очищен из кэша CDN", + "itemEditCdnTitle": "CDN", + "itemEditCloseInfoBar": "Закрыть информационную панель", + "itemEditContinueEditing": "Продолжить редактирование", + "itemEditCreatedAt": "Создано", + "itemEditDeleteConfirmTitle": "Вы уверены, что хотите удалить элемент:\n{{title}}", + "itemEditDeleteContentItemDescription": "Удаление этого элемента удалит его из всех мест на сайте и сделает недоступным для API-запросов. Это действие нельзя отменить.", + "itemEditDeleteContentItemTitle": "Удалить элемент контента", + "itemEditDeletedNotFound": "Элемент был удален", + "itemEditDeleteItem": "Удалить элемент", + "itemEditDeleteThing": "Удалить {{thing}}", + "itemEditDeleteVariant": "Удалить вариант", + "itemEditDeleteWidgetDescription": "Удалить этот контент? Он будет удален из всех мест на сайте и станет недоступным для API-запросов.", + "itemEditDontSave": "Не сохранять", + "itemEditDraftHistoryTitle": "История черновиков", + "itemEditDraftPreviewVersion": "Предпросмотр черновика - v{{version}}", + "itemEditDuplicateContentItemTitle": "Дублировать элемент контента", + "itemEditDuplicateDescription": "Это немедленно создаст и сохранит копию этого элемента.", + "itemEditDuplicateFailed": "Не удалось дублировать элемент.", + "itemEditDuplicateItem": "Дублировать элемент", + "itemEditDuplicateVariant": "Дублировать вариант", + "itemEditEditCode": "Редактировать код", + "itemEditEditStatuses": "Редактировать статусы", + "itemEditFailedFetchNav": "Не удалось загрузить навигацию", + "itemEditFailedLoadFields": "Не удалось загрузить поля", + "itemEditFetchingPublishings": "Загрузка публикаций", + "itemEditGoOffline": "Снять с публикации", + "itemEditGoOnline": "Опубликовать онлайн", + "itemEditInfoTitle": "Информация", + "itemEditInstantApi": "Мгновенный API", + "itemEditItem": "Элемент", + "itemEditItemLockedDescription": "{{name}} просматривает этот элемент с {{viewedAt}}. Разблокируйте элемент, чтобы игнорировать предупреждение и, возможно, перезаписать изменения {{firstName}}.", + "itemEditItemLockedTitle": "Элемент заблокирован", + "itemEditLinksTitle": "Ссылки", + "itemEditLive": "Опубликовано", + "itemEditLivePublished": "Опубликовано онлайн", + "itemEditManagePublishState": "Управлять состоянием публикации", + "itemEditManagePublishStatus": "Управлять статусом публикации", + "itemEditMetaAddImage": "Добавить мета-изображение", + "itemEditMetaAddIncomingPath": "Добавить входящий путь", + "itemEditMetaAdvancedSettings": "Расширенные настройки", + "itemEditMetaAdvancedSettingsDescription": "Дополнительно оптимизируйте SEO элемента контента", + "itemEditMetaAiAssistedPrimary": "Да, улучшить с помощью AI Meta Data Assistant", + "itemEditMetaAiAssistedSecondary": "ИИ просканирует ваш контент и создаст метаданные за вас", + "itemEditMetaAiPromptDatasetSuffix": "для внутреннего поиска по контенту.", + "itemEditMetaAiPromptDescriptionPrefix": "AI Assistant просканирует ваш контент и улучшит мета-заголовок и описание, чтобы помочь", + "itemEditMetaAiPromptSeoSuffix": "улучшить видимость в поисковых системах.", + "itemEditMetaAiPromptTitle": "Поручить ИИ написать метаданные?", + "itemEditMetaApiFailedTryAgain": "API не вернул данные. Повторите попытку.", + "itemEditMetaApiFailedWithStatus": "API не вернул данные {{status}}", + "itemEditMetaCanonicalAllowedParameters": "Разрешенные параметры запроса (через запятую)", + "itemEditMetaCanonicalAllowedParametersDescription": "Укажите только имена параметров через запятую. Не добавляйте значения, амперсанды, знаки равенства или пробелы.", + "itemEditMetaCanonicalAllowedParametersPlaceholder": "stranitsa,kategoriya", + "itemEditMetaCanonicalCustomPath": "Пользовательское значение пути или URL", + "itemEditMetaCanonicalCustomPathDescription": "Для пользовательских путей: начинайте с косой черты. Для пользовательского URL: начинайте с http:// или https://", + "itemEditMetaCanonicalCustomPathPlaceholder": "/page/example/ или https://example.com/", + "itemEditMetaCanonicalEnableDocsLink": "Включение канонических тегов", + "itemEditMetaCanonicalNotEnabled": "Канонические теги не включены. Подробнее читайте", + "itemEditMetaCanonicalOff": "Выкл.", + "itemEditMetaCanonicalOnAllowParameters": "Вкл. - разрешить определенные параметры", + "itemEditMetaCanonicalOnCustomPath": "Вкл. - пользовательский путь или URL", + "itemEditMetaCanonicalOnIgnoreQuery": "Вкл. (игнорирует параметры запроса)", + "itemEditMetaCanonicalTag": "Канонический тег", + "itemEditMetaCanonicalTagTooltip": "Канонические теги помогают поисковым системам понимать авторитетные ссылки и предотвращать проблемы с дублирующимся контентом. Zesty.io автоматически создает теги по требованию на основе ваших настроек.", + "itemEditMetaContentAndMetaMatchedWords": "Совпадающие слова контента и метаданных", + "itemEditMetaCustomizeImage": "Настроить изображение", + "itemEditMetaDeleteRedirect": "Удалить редирект", + "itemEditMetaDescription": "Мета-описание", + "itemEditMetaDescriptionFoundLeftGuillemet": "Найден символ <<. Эти специальные символы не разрешены в мета-описаниях.", + "itemEditMetaDescriptionFoundOeLigature": "Найдена лигатура OE. Эти специальные символы не разрешены в мета-описаниях.", + "itemEditMetaDescriptionFoundRightGuillemet": "Найден символ >>. Эти специальные символы не разрешены в мета-описаниях.", + "itemEditMetaDescriptionFoundSmallOeLigature": "Найдена лигатура oe. Эти специальные символы не разрешены в мета-описаниях.", + "itemEditMetaDescriptionFoundSmartDoubleQuotes": "Найдены умные двойные кавычки Microsoft или апостроф. Эти специальные символы не разрешены в мета-описаниях, так как могут отображаться некорректно. Используйте прямые кавычки.", + "itemEditMetaDescriptionFoundSmartSingleQuotes": "Найдены умные одинарные кавычки Microsoft или апостроф. Эти специальные символы не разрешены в мета-описаниях, так как могут отображаться некорректно. Используйте прямые кавычки.", + "itemEditMetaDescriptionPlaceholder": "Это описание поисковые системы должны использовать в результатах", + "itemEditMetaDescriptionTooltip": "Это описание отображается как фрагмент текста под заголовком в поисковых системах и предпросмотрах соцсетей. Идеальная длина мета-описания — от 50 до 160 символов.", + "itemEditMetaEditRedirect": "Редактировать редирект", + "itemEditMetaFilterWords": "Фильтровать слова", + "itemEditMetaHttpCode": "HTTP-код", + "itemEditMetaImage": "Мета-изображение", + "itemEditMetaImageFileExtensionsError": "Разрешены только файлы со следующими расширениями: .png, .jpg, .jpeg, .svg, .gif, .tif, .webp, .avif", + "itemEditMetaImageTooltip": "Это изображение отображается в поисковых системах и предпросмотрах соцсетей. Рекомендуемый размер — не менее 1200px на 630px с соотношением 1.91:1.", + "itemEditMetaIncomingPath": "Входящий путь", + "itemEditMetaIncomingRedirects": "Входящие редиректы", + "itemEditMetaIncomingRedirectsDescription": "Управляйте редиректами, которые указывают на этот элемент контента", + "itemEditMetaKeywords": "Мета-ключевые слова", + "itemEditMetaKeywordsPlaceholder": "ключевые, слова, через, запятую", + "itemEditMetaKeywordsTooltip": "Ключевые слова — это слова или фразы через запятую, описывающие страницу. В 2011 году Google отказался от ключевых слов; они используются только против рейтинга страницы. Используйте их осторожно.", + "itemEditMetaManualPrimary": "Нет, я улучшу и отредактирую сам", + "itemEditMetaManualSecondary": "Подходит, если вы уже знаете, какими должны быть метаданные", + "itemEditMetaMostMentionedWords": "Самые упоминаемые слова в элементе контента", + "itemEditMetaMostMentionedWordsDescription": "Проверьте, что ваши ключевые слова встречаются минимум 2 раза.", + "itemEditMetaNavigationLinkText": "Текст ссылки навигации", + "itemEditMetaNavigationLinkTextPlaceholder": "Этот текст используется в навигации приложения", + "itemEditMetaNavigationLinkTextTooltip": "Заголовок этого элемента, который отображается в навигации Zesty и программно создаваемой навигации в функции Parsley navigation().", + "itemEditMetaNoMatchingWords": "Нет совпадающих слов", + "itemEditMetaNonFillerWords": "Не служебные слова", + "itemEditMetaNoRepeatedWords": "В элементе контента нет слов, встречающихся 2 или более раз", + "itemEditMetaOgDescriptionTooltip": "Этот заголовок отображается в предпросмотрах Open Graph в соцсетях (например, Facebook) под заголовком.", + "itemEditMetaOgTitleTooltip": "Этот заголовок отображается в предпросмотрах Open Graph в соцсетях (например, Facebook).", + "itemEditMetaPageParent": "Родительская страница", + "itemEditMetaPageParentTooltip": "Укажите, под какой страницей будет вложена страница этого элемента контента. Это влияет на автоматически созданную навигацию и структуру URL этой страницы.", + "itemEditMetaParentMissing": "Родительская страница не существует или была удалена", + "itemEditMetaSeeLess": "Показать меньше", + "itemEditMetaSeeMore": "Показать больше", + "itemEditMetaSeoOpenGraphDescription": "Укажите заголовок и описание этой страницы. В предпросмотре справа можно увидеть, как они будут выглядеть в результатах поиска (SERP) и социальных публикациях.", + "itemEditMetaSeoOpenGraphSettings": "Настройки SEO и Open Graph", + "itemEditMetaSitemapAutomaticallySetPriority": "Автоматически задать приоритет", + "itemEditMetaSitemapDoNotDisplay": "Не показывать в sitemap", + "itemEditMetaSitemapPriority": "Приоритет sitemap", + "itemEditMetaSitemapPriorityTooltip": "Приоритет sitemap помогает поисковым системам понимать, как часто следует сканировать страницы вашего сайта.", + "itemEditMetaTcDescriptionTooltip": "Этот заголовок отображается в предпросмотрах Twitter Card под заголовком.", + "itemEditMetaTcTitleTooltip": "Этот заголовок отображается в предпросмотрах Twitter Card.", + "itemEditMetaTitle": "Мета-заголовок", + "itemEditMetaTitlePlaceholder": "Это заголовок, который поисковые системы должны использовать в результатах", + "itemEditMetaTitleTooltip": "Этот заголовок отображается в результатах поиска и предпросмотрах соцсетей. Поисковые системы показывают максимум 65 символов, но заголовок может быть длиннее.", + "itemEditMetaUniqueWords": "Уникальные слова", + "itemEditMetaUrlPathPart": "Часть URL-пути", + "itemEditMetaUrlPathPartTooltip": "Также известна как URL slug — последняя часть URL-адреса, которая служит уникальным идентификатором страницы. Она должна быть уникальной в вашем экземпляре, в нижнем регистре и без неалфавитно-цифровых символов. Это помогает создавать SEO-дружественные структурированные URL.", + "itemEditMetaUrlPathTaken": "Эта часть URL-пути уже занята. Введите другую часть URL-пути.", + "itemEditMetaUrlSettings": "Настройки URL", + "itemEditMetaUrlSettingsDescription": "Определите URL вашей веб-страницы", + "itemEditMetaWords": "Слова", + "itemEditMissingRequiredData": "Отсутствуют данные в обязательных полях", + "itemEditMoreOptions": "Дополнительные параметры", + "itemEditNoDraftActivityLogs": "Нет записей редактирования в журнале активности для этого контента.", + "itemEditNoPermissionAddStatus": "Нет разрешения добавить этот статус", + "itemEditNoPermissionRemoveStatus": "Нет разрешения удалить этот статус", + "itemEditNotFound": "Элемент не найден", + "itemEditOffline": "Не опубликовано", + "itemEditOn": "в", + "itemEditOpenDuoMode": "Открыть режим DUO", + "itemEditOpenInfoBar": "Открыть информационную панель", + "itemEditParsleyBehaviorsTitle": "Поведение Parsley", + "itemEditPreviewPage": "Предпросмотр страницы", + "itemEditPreviewVersion": "Предпросмотр {{version}}", + "itemEditProductionPreviewVersion": "Предпросмотр production - v{{version}}", + "itemEditPublishHistoryTitle": "История публикаций", + "itemEditPublishingErrorFallback": "При публикации произошла ошибка. Попробуйте еще раз.", + "itemEditPublishingZuid": "ZUID публикации", + "itemEditPublishItem": "Опубликовать элемент", + "itemEditPublishRelatedItemsDescription": "Будут опубликованы все элементы, выбранные в списке ниже", + "itemEditQuickShareTitle": "Быстрая отправка", + "itemEditRefreshCachedItem": "Обновить кэшированный элемент", + "itemEditRefreshingCachedItem": "Обновление кэшированного элемента", + "itemEditRenameVariant": "Переименовать вариант", + "itemEditRenameVariantDescription": "Это обновит заголовок варианта, который показывается редакторам контента", + "itemEditSaved": "Сохранено", + "itemEditSavedNotification": "Элемент сохранен: {{title}}", + "itemEditSaveItem": "Сохранить элемент", + "itemEditSavePublishItem": "Сохранить и опубликовать элемент", + "itemEditScheduleUnpublish": "Запланировать снятие с публикации", + "itemEditSearchStatus": "Поиск статуса", + "itemEditSelectFieldsForReview": "Выберите поля для проверки", + "itemEditSelectTeamMembers": "Выберите участников команды", + "itemEditSendEmail": "Отправить email", + "itemEditStatusSearchNoResultsTitleRich": "По запросу \"{{search}}\" ничего не найдено", + "itemEditSwitchOffDuoMode": "Выключить режим DUO", + "itemEditSwitchOnDuoMode": "Включить режим DUO", + "itemEditTabAnalytics": "Аналитика", + "itemEditTabFreestyle": "Свободный режим", + "itemEditTabHeadTags": "Head-теги", + "itemEditTabPublishStatus": "Статус публикации", + "itemEditTabRedirects": "Редиректы", + "itemEditTabSeo": "SEO", + "itemEditTakeOffline": "Снять с публикации", + "itemEditUnlock": "Разблокировать", + "itemEditUnpublishContentItemTitle": "Снять элемент контента с публикации", + "itemEditUnpublishDescription": "Элемент немедленно станет недоступен на всех ваших платформах. Вы всегда можете снова опубликовать его, нажав кнопку публикации.", + "itemEditUnpublishItem": "Снять элемент с публикации", + "itemEditUnpublishNow": "Снять с публикации сейчас", + "itemEditUnpublishTitle": "Снять с публикации", + "itemEditUnpublishWidgetDescription": "После снятия с публикации этот контент больше не будет отдаваться при запросе URL. URL вернет ответ 404 Not Found.", + "itemEditUnsavedChangesDescription": "У вас есть несохраненные изменения, которые будут потеряны, если вы покинете эту страницу.", + "itemEditUnschedulePublish": "Отменить запланированную публикацию", + "itemEditVariant": "Вариант", + "itemEditVariantTitle": "Заголовок варианта", + "itemEditVersion": "Версия", + "itemEditVersionPublished": "v{{version}} опубликована {{on}}", + "itemEditVersionPublishedLabel": "v{{version}} опубликована", + "itemEditVersionPublishedOn": "v{{version}} опубликована", + "itemEditVersionSavedOn": "v{{version}} сохранена", + "itemEditVersionScheduledLabel": "v{{version}} запланирована", + "itemEditVersionScheduledToPublishOn": "v{{version}} запланирована к публикации", + "itemEditViewActivityLog": "Просмотреть журнал активности", + "itemEditViewLanguages": "Просмотреть языки", + "itemEditViewVersions": "Просмотреть версии", + "itemEditWorkflowRequestFailed": "Не удалось отправить запрос рабочего процесса для {{title}} пользователям {{members}}", + "itemEditWorkflowRequestMessage": "Сообщение запроса рабочего процесса", + "itemEditWorkflowRequestSent": "Запрос рабочего процесса для {{title}} отправлен пользователям {{members}}", + "itemEditWorkflowRequestTitle": "Запрос рабочего процесса", + "itemEditZuidTooltip": "Элементы контента всегда доступны относительно своей модели, поэтому для каждого вызова требуется ZUID модели.", + "itemListCopyZuid": "Скопировать ZUID", + "itemListDateCreated": "Дата создания", + "itemListDateSaved": "Дата сохранения", + "itemListDeleteButton_one": "Удалить элемент ({{count}})", + "itemListDeleteButton_few": "Удалить элементы ({{count}})", + "itemListDeleteButton_many": "Удалить элементы ({{count}})", + "itemListDeleteButton_other": "Удалить элементы ({{count}})", + "itemListDeleteDescription_one": "Удаление этого элемента уберёт его со всех страниц вашего сайта и сделает недоступным для запросов API. Это действие нельзя отменить.", + "itemListDeleteDescription_few": "Удаление этих {{count}} элементов уберёт их со всех страниц вашего сайта и сделает недоступными для запросов API. Это действие нельзя отменить.", + "itemListDeleteDescription_many": "Удаление этих {{count}} элементов уберёт их со всех страниц вашего сайта и сделает недоступными для запросов API. Это действие нельзя отменить.", + "itemListDeleteDescription_other": "Удаление этих {{count}} элементов уберёт их со всех страниц вашего сайта и сделает недоступными для запросов API. Это действие нельзя отменить.", + "itemListDeleteTitle_one": "Удалить {{count}} элемент", + "itemListDeleteTitle_few": "Удалить {{count}} элемента", + "itemListDeleteTitle_many": "Удалить {{count}} элементов", + "itemListDeleteTitle_other": "Удалить {{count}} элемента", + "itemListEditModel": "Редактировать модель", + "itemListEditTemplate": "Редактировать шаблон", + "itemListEmptyDescription": "Добавьте свой контент здесь. Начните с создания первого элемента.", + "itemListEmptyTitle": "Начните создавать контент прямо сейчас", + "itemListErrorPublishing": "Ошибка при публикации элементов: {{error}}", + "itemListErrorSaving": "Ошибка при сохранении элементов: {{error}}", + "itemListExportCsv": "Экспорт CSV", + "itemListFieldsLabel": "Поля", + "itemListFilterNoResultsBody": "Попробуйте изменить фильтры, чтобы найти нужное", + "itemListFilterNoResultsTitle": "Не найдено результатов, соответствующих вашим фильтрам", + "itemListFilterPlaceholder": "Фильтровать элементы", + "itemListImportCsv": "Импорт CSV", + "itemListItemNotYetCreated": "Элемент ещё не создан", + "itemListLastPublished": "Последняя публикация", + "itemListLastSaved": "Последнее сохранение", + "itemListModelInvalid": "Недопустимая модель «{{modelZUID}}»", + "itemListModelNotFound": "Модель «{{modelZUID}}» не найдена", + "itemListNoSearchResultsAlt": "Нет результатов поиска", + "itemListPublish": "Опубликовать", + "itemListPublishButton_one": "Опубликовать элемент ({{count}})", + "itemListPublishButton_few": "Опубликовать элементы ({{count}})", + "itemListPublishButton_many": "Опубликовать элементы ({{count}})", + "itemListPublishButton_other": "Опубликовать элементы ({{count}})", + "itemListPublishDescription_one": "Это сделает следующий элемент контента немедленно доступным на всех ваших платформах. Вы всегда можете отменить публикацию этого элемента позже, если потребуется.", + "itemListPublishDescription_few": "Это сделает следующие {{count}} элемента контента немедленно доступными на всех ваших платформах. Вы всегда можете отменить публикацию этих элементов позже, если потребуется.", + "itemListPublishDescription_many": "Это сделает следующие {{count}} элементов контента немедленно доступными на всех ваших платформах. Вы всегда можете отменить публикацию этих элементов позже, если потребуется.", + "itemListPublishDescription_other": "Это сделает следующие {{count}} элементов контента немедленно доступными на всех ваших платформах. Вы всегда можете отменить публикацию этих элементов позже, если потребуется.", + "itemListPublishItemsTooltip": "Опубликовать элементы", + "itemListPublishNow": "Опубликовать сейчас", + "itemListPublishTitle_one": "Опубликовать изменения в {{count}} элементе", + "itemListPublishTitle_few": "Опубликовать изменения в {{count}} элементах", + "itemListPublishTitle_many": "Опубликовать изменения в {{count}} элементах", + "itemListPublishTitle_other": "Опубликовать изменения в {{count}} элементах", + "itemListResetFilters": "Сбросить фильтры", + "itemListSaveItemsTooltip": "Сохранить элементы", + "itemListSavePublish": "Сохранить и опубликовать", + "itemListSavePublishItemsTooltip": "Сохранить и опубликовать элементы", + "itemListSavePublishNow": "Сохранить и опубликовать сейчас", + "itemListSaveSchedulePublish": "Сохранить и запланировать публикацию", + "itemListScheduleButton_one": "Запланировать публикацию ({{count}})", + "itemListScheduleButton_few": "Запланировать публикацию ({{count}})", + "itemListScheduleButton_many": "Запланировать публикацию ({{count}})", + "itemListScheduleButton_other": "Запланировать публикацию ({{count}})", + "itemListSchedulePastWarning": "Поскольку выбрано текущее или прошедшее время, публикация произойдёт немедленно.", + "itemListSchedulePublish": "Запланировать публикацию", + "itemListSchedulePublishOn": "Опубликовать", + "itemListScheduleSubtitle": "Вы всегда можете отменить запланированную публикацию позже, если потребуется", + "itemListScheduleTitle_one": "Запланировать публикацию изменений в {{count}} элементе", + "itemListScheduleTitle_few": "Запланировать публикацию изменений в {{count}} элементах", + "itemListScheduleTitle_many": "Запланировать публикацию изменений в {{count}} элементах", + "itemListScheduleTitle_other": "Запланировать публикацию изменений в {{count}} элементах", + "itemListSearchNoResultsBody": "Попробуйте изменить поисковый запрос. Рекомендуем проверить правильность написания всех слов или использовать другие ключевые слова.", + "itemListSearchNoResultsTitle": "По вашему фильтру «{{search}}» ничего не найдено", + "itemListSelectedCount": "Выбрано: {{count}}", + "itemListSelectedCount_one": "Выбрано: {{count}}", + "itemListSelectedCount_few": "Выбрано: {{count}}", + "itemListSelectedCount_many": "Выбрано: {{count}}", + "itemListSelectedCount_other": "Выбрано: {{count}}", + "itemListSortPrefix": "Сортировка: {{value}}", + "itemListStatus": "Статус", + "itemListStatusNotPublished": "Не опубликовано", + "itemListStatusPublished": "Опубликовано", + "itemListStatusScheduled": "Запланировано", + "itemListUpdateCount_one": "Обновить {{count}} элемент контента", + "itemListUpdateCount_few": "Обновить {{count}} элемента контента", + "itemListUpdateCount_many": "Обновить {{count}} элементов контента", + "itemListUpdateCount_other": "Обновить {{count}} элемента контента", + "itemListVersionByUser": "пользователем {{name}}", + "itemListVersionColumnShort": "Вер.", + "itemListVersionPublishedOn": "v{{version}} опубликована", + "itemListVersionSavedOn": "v{{version}} сохранена", + "itemListVersionScheduledOn": "v{{version}} запланирована к публикации", + "itemListViewQuickAccessApi": "Просмотреть API быстрого доступа", + "itemListViewSiteGeneratorsApi": "Просмотреть API генераторов сайтов", + "itemListZuidColumn": "ZUID", + "linkCreateButton": "Создать ссылку", + "linkCreateCreated": "Ссылка создана: {{title}}", + "linkCreateUnableToCreate": "Не удалось создать ссылку", + "linkEditCannotSaveEmptyTitle": "Пустой заголовок", + "linkEditConfirmDelete": "Вы уверены, что хотите удалить эту ссылку?", + "linkEditDeleted": "Ссылка удалена: {{title}}", + "linkEditErrorDeleting": "Ошибка при удалении ссылки", + "linkEditErrorSaving": "Ошибка при сохранении ссылки", + "linkEditFailedLoading": "Не удалось загрузить ссылку", + "linkEditLoading": "Загрузка ссылки", + "linkEditorErrorAddProtocol": "Добавьте протокол ссылки", + "linkEditorErrorAddTarget": "Добавьте цель ссылки", + "linkEditorErrorAddTitle": "Добавьте заголовок ссылки", + "linkEditorExternalLink": "Внешняя ссылка", + "linkEditorExternalUrl": "Укажите внешний URL для ссылки", + "linkEditorInternalLink": "Внутренняя ссылка", + "linkEditorLinkTitle": "Заголовок ссылки", + "linkEditorSelectParent": "Выберите родительский элемент для ссылки", + "linkEditorSelectTarget": "Выберите элемент для ссылки", + "linkEditSaveChanges": "Сохранить изменения", + "linkEditSaved": "Ссылка сохранена: {{title}}", + "mediaAddFromBynder": "Добавить из Bynder", + "mediaAddFromMedia": "Добавить из Media", + "mediaAddMoreFromMedia": "Добавить ещё из Media", + "mediaCopyFileUrl": "Копировать URL файла", + "mediaCopyZuid": "Копировать ZUID", + "mediaCouldNotAdd": "Не удалось добавить {{filenames}}. {{errorMessage}}", + "mediaCouldNotReplace": "Не удалось заменить. {{errorMessage}}", + "mediaDragAndDropRich": "Перетащите файлы сюда или", + "mediaDragDropFilesCompact": "Перетащите ваши файлы", + "mediaDropFilesHere": "Перетащите файлы сюда", + "mediaDropToUpload": "Перетащите файлы сюда для загрузки", + "mediaEditFile": "Редактировать файл", + "mediaMoreOptions": "Дополнительные параметры", + "mediaRemoveFile": "Убрать файл", + "mediaRename": "Переименовать", + "mediaRenameFile": "Переименовать файл", + "mediaReplaceFile": "Заменить файл", + "mediaSwapFile": "Поменять файл", + "mediaTypeLabel": "Тип медиа", + "mediaUploadMedia": "Загрузить в Media", + "minCharacterCounter_one": " (мин. {{count}} символ)", + "minCharacterCounter_few": " (мин. {{count}} символа)", + "minCharacterCounter_many": " (мин. {{count}} символов)", + "minCharacterCounter_other": " (мин. {{count}} символа)", + "minMaxLabel": "Мин.: {{min}} | Макс.: {{max}}", + "missingMetaTitle": "не имеет метазаголовка", + "navAddContentItem": "Добавить элемент контента", + "navContentTitle": "Контент", + "navCreateContent": "Создать контент", + "navCreateDataset": "Создать набор данных", + "navCreatePage": "Создать страницу", + "navDashboard": "Панель управления", + "navDatasetsInfo": "Наборы данных, перечисленные здесь, не имеют родительского элемента контента и не имеют URL-адресов для элементов контента.", + "navErrorBody": "Извините, нам не удалось загрузить ваши {{navName}}. Обновите страницу и попробуйте снова.", + "navFilterItems": "Фильтровать элементы", + "navHideContent": "Скрыть контент", + "navLoadItemsFailed": "Не удалось загрузить элементы навигации контента.", + "navLoadRoleFailed": "Не удалось загрузить вашу роль пользователя.", + "navNoResultsFor": "Нет результатов для «{{keyword}}»", + "navNoSearchResultsAlt": "Нет результатов поиска", + "navPagesInfo": "Страницы включают одностраничные и многостраничные модели с URL-адресами. Наборы данных, у которых есть родительский элемент, также отображаются в этой навигации.", + "navReorderPages": "Изменить порядок страниц", + "navResourceDatasets": "наборы данных", + "navResourceModels": "модели", + "navSectionDatasets": "Наборы данных", + "navSectionHiddenItems": "Скрытые элементы", + "navSectionPages": "Страницы", + "noFieldsAvailable": "Нет доступных полей", + "noFieldsDescriptionNoSchema": "В этой модели ({{label}}) пока нет полей. Чтобы определить структуру элементов контента, обратитесь к администратору для добавления полей в эту модель.", + "noFieldsDescriptionWithSchema": "В этой модели ({{label}}) пока нет полей. Чтобы определить структуру элементов контента, перейдите к вашей модели и добавьте поля.", + "noFieldsImageAlt": "Нет доступных полей", + "notFoundContactBodyRich": "Если вы считаете, что элемент контента отсутствует, свяжитесь с нами по адресу support@zesty.io и укажите следующий URL в своём сообщении", + "notFoundDeletedHeading": "Этот элемент был удалён", + "notFoundImageAlt": "Не найдено", + "publishedNow": "Элемент «{{title}}» опубликован", + "redirectActiveHeader": "Этот элемент контента в настоящее время перенаправляется", + "redirectActiveSubHeader": "Этот элемент контента сейчас настроен на перенаправление пользователей на указанный ниже целевой URL. Остановка перенаправления позволит пользователям снова получить доступ к этому контенту по его исходному URL после публикации.", + "redirectAddIncoming": "Добавить входящее перенаправление", + "redirectCode301": "301 - Постоянное перенаправление", + "redirectCode302": "302 - Временное перенаправление", + "redirectCreateButton": "Создать перенаправление", + "redirectCreatedOne": "Создано 1 перенаправление", + "redirectDeletedOne": "Удалено 1 перенаправление", + "redirectDeletedPath": "Перенаправление удалено: {{path}}", + "redirectDeleteForever": "Удалить навсегда", + "redirectDeleteTitle": "Удалить перенаправление", + "redirectDeleteWarning": "Удаление этого перенаправления немедленно уберёт его с вашего сайта. Это действие нельзя отменить.", + "redirectDontCreate": "Не создавать", + "redirectEnterUrlPlaceholder": "Введите URL (напр. https://www.google.com/)", + "redirectErrorDeleting": "Ошибка при удалении перенаправления", + "redirectFilePathOnlyTooltip": "Только путь к файлу", + "redirectInactiveSubHeader": "После перенаправления элемента контента он будет снят с публикации, и пользователи не смогут получить к нему доступ по его текущему URL. Они будут автоматически отправлены на указанный вами целевой URL.", + "redirectMoreDetails": "Подробнее", + "redirectNewPath": "Новый путь", + "redirectOldPath": "Старый путь", + "redirectStopBody": "Остановка перенаправления позволит пользователям снова получить доступ к этому контенту по его исходному URL после публикации.", + "redirectStopRedirecting": "Остановить перенаправление", + "redirectTargetLabel": "Цель перенаправления", + "redirectTargetPath": "Целевой путь", + "redirectThisContentItem": "Перенаправить этот элемент контента", + "redirectTypeColumn": "Тип перенаправления", + "redirectTypeInternal": "Внутренний", + "redirectTypeLabel": "Тип", + "redirectTypeWildcard": "Подстановочный", + "redirectValueCannotBeModified": "Это значение нельзя изменить", + "reorderNavReturnToRoot": "Вернуться к корню", + "reorderNavSaveChanges": "Сохранить изменения", + "reorderNavSaved": "Изменения сохранены", + "reorderNavSaveError": "Ошибка при сохранении изменений", + "reorderNavTitle": "Измените порядок элементов в навигации", + "requiredFieldError": "Обязательное поле. Введите значение.", + "requiresMoreCharacters_one": "Требуется ещё {{count}} символ.", + "requiresMoreCharacters_few": "Требуется ещё {{count}} символа.", + "requiresMoreCharacters_many": "Требуется ещё {{count}} символов.", + "requiresMoreCharacters_other": "Требуется ещё {{count}} символа.", + "scheduledPublish": "Публикация «{{title}}» запланирована на {{time}} в часовом поясе {{timezone}}", + "selectBlockVariant": "Выберите вариант блока.", + "selectedItemNotFound": "Выбранный элемент не найден: {{value}}", + "selectPlaceholder": "Выбрать", + "seoFieldMetaDescription": "Метаописание", + "seoFieldMetaKeywords": "Метаключевые слова", + "seoFieldMetaTitle": "Метазаголовок", + "seoFieldNavigationTitle": "Навигационный заголовок", + "seoFieldPageParent": "Родительская страница", + "seoFieldUrlPathPart": "Часть пути URL", + "slotLabelAltText": "Альтернативный текст", + "slotLabelAutoplay": "Автовоспроизведение", + "slotLabelLoopVideo": "Зациклить видео", + "slotLabelMuteVideo": "Отключить звук видео", + "slotLabelOpenInNewTab": "Открывать в новой вкладке", + "slotLabelSource": "Источник", + "slotLabelUrl": "URL", + "slotLabelVideoControlVisibility": "Видимость элементов управления видео", + "slotLabelVideoPoster": "Постер видео", + "studioAddLink": "Добавить ссылку", + "studioAgenticStudioBy": "Agentic Studio от", + "studioBackToElement": "Назад к элементу", + "studioBridgeError": "Ошибка моста", + "studioCannotSave": "Не удалось сохранить: {{label}}", + "studioCannotSaveError": "Не удалось сохранить: {{label}} - {{error}}", + "studioCannotSaveInvalid": "Не удалось сохранить: {{label}} - отсутствуют или недействительны данные", + "studioCloseAriaLabel": "Закрыть предпросмотр Studio", + "studioContentHint": "Выбирайте элементы на холсте, чтобы вносить изменения", + "studioEditInFreestyle": "Редактировать в Freestyle", + "studioEditInManager": "Редактировать в Zesty Manager", + "studioEditorAriaLabel": "Редактор Studio", + "studioFreestyleAlertBody": "Редактирование доступно только в Freestyle", + "studioFreestyleAlertDismissAriaLabel": "Закрыть уведомление о Freestyle", + "studioFreestyleAlertTitle": "Этот макет был создан в Freestyle", + "studioFullHint": "Выбирайте элементы на холсте, чтобы редактировать их, или перетаскивайте блоки, чтобы изменить порядок макета", + "studioInlineEditFailed": "Не удалось применить редактирование на месте для этого блока.", + "studioInvalidUrl": "Недействительный URL. Проверьте и попробуйте снова.", + "studioItemPublished": "Опубликовано: {{label}}", + "studioItemSaved": "Элемент сохранён: {{label}}", + "studioItemsPublishedCount_one": "Сохранено и опубликовано {{count}} элемент", + "studioItemsPublishedCount_few": "Сохранено и опубликовано {{count}} элемента", + "studioItemsPublishedCount_many": "Сохранено и опубликовано {{count}} элементов", + "studioItemsPublishedCount_other": "Сохранено и опубликовано {{count}} элемента", + "studioItemsSavedCount_one": "Сохранено {{count}} элемент", + "studioItemsSavedCount_few": "Сохранено {{count}} элемента", + "studioItemsSavedCount_many": "Сохранено {{count}} элементов", + "studioItemsSavedCount_other": "Сохранено {{count}} элемента", + "studioLayersEmptyState": "Слои не найдены", + "studioLayersNodeElement": "элемент", + "studioLayersNodeField": "Поле", + "studioLayersNodePage": "Страница", + "studioLayersNodeText": "Текст", + "studioLayersPanelTitle": "Слои", + "studioLayoutHint": "Перетаскивайте блоки на холсте, чтобы изменить порядок макета", + "studioLayoutPublishFailed": "Не удалось сохранить и опубликовать макет.", + "studioLayoutPublishFailedNamed": "Не удалось сохранить и опубликовать {{name}}.", + "studioLayoutSaved": "Сохранено: {{files}}", + "studioLayoutSavedPublished": "Сохранено и опубликовано: {{files}}", + "studioLayoutSaveFailed": "Не удалось сохранить макет.", + "studioLayoutSaveFailedNamed": "Не удалось сохранить {{name}}.", + "studioLinkedFromTooltip": "Связано с {{modelLabel}} · {{itemLabel}} ({{itemZUID}})", + "studioLinkFieldNotFound": "Поле \"{{fieldName}}\" больше не существует", + "studioLinkFromOtherItem": "Связать с другим элементом контента", + "studioLinkItemConfirm": "Связать элемент", + "studioLinkItemContentItemLabel": "Элемент контента", + "studioLinkItemContentItemTooltip": "Поле считывается именно из этого элемента, включая его язык.", + "studioLinkItemContentItemTooltipForItem": "Ссылка указывает на этот конкретный элемент, включая его язык. Перечислены только модели со страницей.", + "studioLinkItemDialogCloseAriaLabel": "Закрыть диалог связывания элемента", + "studioLinkItemDialogSubtitle": "Связать с полем контента на конкретном элементе контента", + "studioLinkItemDialogSubtitleForItem": "Ссылка на страницу конкретного элемента контента", + "studioLinkItemDialogTitle": "Связать другой элемент контента", + "studioLinkItemFieldLabel": "Поле для подключения", + "studioLinkItemFieldTooltip": "Отображаются только поля, которые может отобразить этот элемент.", + "studioLinkItemNoLinkableFields": "У модели этого элемента нет полей, доступных для связывания.", + "studioLinkModelNotFound": "Модель \"{{modelName}}\" больше не существует", + "studioLinkSectionLabel": "Ссылка", + "studioLinkTargetLabel": "Цель", + "studioLinkTo": "Ссылка на", + "studioLinkUrlPlaceholder": "URL-адрес или ID ссылки", + "studioModeContent": "Контент", + "studioModeFull": "Полный", + "studioModeLayout": "Макет", + "studioNoCmsItem": "С этим путём не связан ни один элемент CMS. Редактирование отключено.", + "studioPreviewError": "Ошибка предпросмотра: {{error}}", + "studioPreviewOnly": "Только просмотр", + "studioPublishPartialFailure_one": "Опубликовано {{published}} из {{count}} элемента — {{failed}} не удалось", + "studioPublishPartialFailure_few": "Опубликовано {{published}} из {{count}} элементов — {{failed}} не удалось", + "studioPublishPartialFailure_many": "Опубликовано {{published}} из {{count}} элементов — {{failed}} не удалось", + "studioPublishPartialFailure_other": "Опубликовано {{published}} из {{count}} элементов — {{failed}} не удалось", + "studioRemoveLinkAriaLabel": "Удалить ссылку", + "studioSaveAllButton": "Сохранить всё", + "studioSaveAndPublish": "Сохранить и опубликовать", + "studioSaveAndPublishAllButton": "Сохранить и опубликовать всё", + "studioSaveChangeSectionContent": "Контент", + "studioSaveChangeSectionLayout": "Макет", + "studioSaveChanges": "Сохранить изменения", + "studioSaveChangesSubtitle": "Хотите сохранить или сохранить и опубликовать изменения?", + "studioSaveChangesTypeColumn": "Тип", + "studioSaveChangesVersionColumn": "Верс.", + "studioSaveChangeTypeBlock": "Блок", + "studioSaveChangeTypeCode": "Код", + "studioSaveChangeTypeContent": "Контент", + "studioStaticEditNotSingleField": "Этот блок нельзя редактировать на месте, потому что его содержимое не является одним связанным полем.", + "studioStaticEditRejected": "Этот блок содержит динамический контент и не может быть отредактирован на месте. Переключитесь в режим «Контент», чтобы вносить изменения.", + "studioUnsavedLayoutBody": "У вас есть несохранённые изменения макета. Сохранить их перед продолжением?", + "studioUnsavedLayoutTitle": "Несохранённые изменения макета", + "studioUntitledItem": "Без названия", + "studioViewAllRelatedFields": "Показать все связанные поля", + "tagArticle": "Статья", + "tagAside": "Aside", + "tagDiv": "Div", + "tagFooter": "Подвал", + "tagHeader": "Шапка", + "tagMain": "Основной блок", + "tagNavigation": "Навигация", + "tagNone": "Без тега", + "tagSection": "Раздел", + "tagText": "Текст", + "unpublished": "Публикация «{{title}}» отменена", + "unscheduledVersion": "Планирование публикации версии {{version}} отменено", + "uuidAutoGeneratedPlaceholder": "Значения поля UUID генерируются автоматически", + "valueMustBeBetween": "Значение должно быть от {{min}} до {{max}}", + "viewModelActivityLog": "Просмотреть журнал активности модели", + "yesNoMissingOptions": "В поле {{label}} отсутствуют настройки параметров. Отредактируйте поле, чтобы добавить значения да/нет." +} diff --git a/public/locales/ru-RU/dashboard.json b/public/locales/ru-RU/dashboard.json new file mode 100644 index 0000000000..d48921f081 --- /dev/null +++ b/public/locales/ru-RU/dashboard.json @@ -0,0 +1,35 @@ +{ + "columnVersion": "Верс.", + "createCodeFile": "Создать файл кода", + "createContent": "Создать контент", + "createModel": "Создать модель", + "deleted": "Удалено", + "deltaLabel": "По сравнению с пред. {{count}} дн.", + "deltaLabel_one": "По сравнению с пред. {{count}} дн.", + "deltaLabel_few": "По сравнению с пред. {{count}} дн.", + "deltaLabel_many": "По сравнению с пред. {{count}} дн.", + "deltaLabel_other": "По сравнению с пред. {{count}} дн.", + "emptyStateDescription": "За последние 30 дней не было создано новых элементов и не вносились изменения. Начните создавать или редактировать контент, модели или файлы кода, чтобы увидеть недавние файлы здесь.", + "emptyStateTitle": "Начните развивать свой инстанс уже сегодня", + "greeting": "Доброе утро, {{name}}", + "instanceSummary": "Вот сводка вашего инстанса за", + "itemsPublished": "Опубликованные элементы", + "joinCommunity": "Присоединяйтесь к нашему сообществу", + "lastNDays": "Последние {{count}} дней", + "lastNDays_one": "Последний {{count}} день", + "lastNDays_few": "Последние {{count}} дня", + "lastNDays_many": "Последние {{count}} дней", + "lastNDays_other": "Последние {{count}} дня", + "lastNDaysInline": "последние {{count}} дн.", + "lastNDaysInline_one": "последние {{count}} дн.", + "lastNDaysInline_few": "последние {{count}} дн.", + "lastNDaysInline_many": "последние {{count}} дн.", + "lastNDaysInline_other": "последние {{count}} дн.", + "missingMetaTitle": "Отсутствует мета-заголовок", + "releaseNotes": "Примечания к релизу", + "resources": "Ресурсы", + "resourcesSubtitle": "Все, что вам нужно, чтобы получить максимум от Zesty.", + "speedDialAriaLabel": "Быстрый набор инстанса", + "uploadMedia": "Загрузить медиа", + "webRequests": "Веб-запросы" +} diff --git a/public/locales/ru-RU/leads.json b/public/locales/ru-RU/leads.json new file mode 100644 index 0000000000..e7594b9f1f --- /dev/null +++ b/public/locales/ru-RU/leads.json @@ -0,0 +1,27 @@ +{ + "captureLeadsOnYourInstance": "Собирайте лиды на вашем экземпляре", + "dateCreated": "Дата создания", + "datePreset30Days": "30 дней", + "datePreset60Days": "60 дней", + "datePreset90Days": "90 дней", + "datePresetAll": "Все", + "datePresetCustom": "Произвольный", + "endDate": "Дата окончания", + "exportCsv": "Экспортировать CSV", + "exportCsvTitle": "Экспортировать CSV данных лидов по выбранным фильтрам", + "formGroup": "Группа форм", + "formGroupAll": "Все", + "getStartedBodyText": "Создав форму на вашем экземпляре, включающую поле ввода zlf, вы сможете мгновенно начать сбор лидов.", + "howToCreateALeadForm": "Как создать форму для сбора лидов", + "learnMoreAbout": "Узнайте больше о", + "modalTableHeaderKey": "Ключ", + "modalTableHeaderValue": "Значение", + "notAvailable": "Н/Д", + "searchAcrossAllOfYourLeads": "Поиск по всем вашим лидам", + "selectRelease": "Выберите релиз...", + "startDate": "Дата начала", + "tableHeaderDate": "Дата (система)", + "tableHeaderEmail": "Email", + "tableHeaderFormBody": "Тело формы", + "tableHeaderFormGroup": "Группа форм" +} diff --git a/public/locales/ru-RU/marketplace.json b/public/locales/ru-RU/marketplace.json new file mode 100644 index 0000000000..aee516f840 --- /dev/null +++ b/public/locales/ru-RU/marketplace.json @@ -0,0 +1,15 @@ +{ + "appNotInstalled": "Приложение «{{zuid}}» не установлено.", + "exploreMarketplace": "Обзор Marketplace", + "googleAnalyticsLogoAlt": "Логотип Google Analytics", + "googleChromeLogoAlt": "Логотип Google Chrome", + "goToMarketplace": "Перейти в Marketplace", + "headerTitleApps": "Приложения", + "installAppBody": "Устанавливайте расширения, приложения и модули быстрого старта, чтобы ускорить работу над вашим проектом Zesty", + "microsoftLogoAlt": "Логотип Microsoft", + "nodejsLogoAlt": "Логотип NodeJS", + "npmLogoAlt": "Логотип NPM", + "sidebarMarketplace": "Marketplace", + "visitMarketplace": "Посетить Marketplace", + "zestyRocketLogoAlt": "Логотип Zesty Rocket" +} diff --git a/public/locales/ru-RU/media.json b/public/locales/ru-RU/media.json new file mode 100644 index 0000000000..84d73732ea --- /dev/null +++ b/public/locales/ru-RU/media.json @@ -0,0 +1,247 @@ +{ + "allMediaTitle": "Недавние", + "dateFilterAfter": "После", + "dateFilterBefore": "До", + "dateFilterButtonLabel": "Дата", + "dateFilterCustomRange": "Свой диапазон", + "dateFilterOn": "В этот день", + "deletedFile": "Файл {{filename}} удалён", + "deletedGroup": "Группа {{name}} удалена", + "deleteFileModalDeleteButtonAria": "Кнопка удаления", + "deleteFileModalDeleteButtonMultiple": "Удалить ({{count}})", + "deleteFileModalDeleteButtonMultiple_one": "Удалить ({{count}})", + "deleteFileModalDeleteButtonMultiple_few": "Удалить ({{count}})", + "deleteFileModalDeleteButtonMultiple_many": "Удалить ({{count}})", + "deleteFileModalDeleteButtonMultiple_other": "Удалить ({{count}})", + "deleteFileModalTitleMultiple": "Удалить файлы ({{count}})?", + "deleteFileModalTitleMultiple_one": "Удалить файл ({{count}})?", + "deleteFileModalTitleMultiple_few": "Удалить файла ({{count}})?", + "deleteFileModalTitleMultiple_many": "Удалить файлов ({{count}})?", + "deleteFileModalTitleMultiple_other": "Удалить файла ({{count}})?", + "deleteFileModalTitleSingle": "Удалить файл", + "deleteFileModalWarningMultiple": "Вы не сможете восстановить эти файлы.", + "deleteFileModalWarningSingle": "{{filename}} будет удален навсегда", + "deleteFolderDialogConfirmButton": "Удалить папку", + "deleteFolderDialogMessage": "Удаление папки НЕ приведет к удалению файлов в ней. Эти файлы по-прежнему можно найти в разделе «Все медиафайлы».", + "deleteFolderDialogTitle": "Удалить папку?", + "dropAreaAllMedia": "Все медиафайлы", + "dropAreaUploadPrompt": "Загрузить файлы в {{location}}", + "editedFile": "Файл {{filename}} изменён", + "emptyStateDescription": "Вы можете перетащить файлы сюда или использовать кнопку «Загрузить».", + "emptyStateTitle": "Начните загрузку прямо сейчас", + "failedCreatingGroup": "Не удалось создать группу", + "failedDeletingFile": "Не удалось удалить файл", + "failedDeletingGroup": "Не удалось удалить группу", + "failedEditingBin": "Не удалось изменить медиабин", + "failedEditingFile": "Не удалось изменить файл", + "failedEditingGroup": "Не удалось изменить группу", + "failedFetchBinFiles": "Не удалось получить файлы медиабина: {{error}}", + "failedFetchGroupFiles": "Не удалось получить файлы группы: {{error}}", + "failedFetchGroups": "Не удалось получить группы: {{error}}", + "failedFileSearch": "Ошибка поиска файлов", + "failedLoadingBinFiles": "Не удалось загрузить файлы медиабина", + "failedLoadingBinGroups": "Не удалось загрузить группы медиабинов", + "failedLoadingEcoBins": "Не удалось загрузить медиабины экосистемы", + "failedLoadingGroupFiles": "Не удалось загрузить файлы группы", + "failedLoadingInstanceBins": "Не удалось загрузить медиабины инстанции", + "failedSearchFile": "Не удалось выполнить поиск файла: {{error}}", + "fileModalContentCloseAria": "Иконка закрытия", + "fileModalContentCloseTooltip": "Закрыть предпросмотр", + "fileModalContentCopyZuid": "Скопировать ZUID", + "fileModalContentDeleteAria": "Кнопка корзины", + "fileModalContentDeleteFailed": "Не удалось удалить файл", + "fileModalContentDeleteTooltip": "Удалить файл", + "fileModalContentFileUrlLabel": "URL файла", + "fileModalContentLaunchOtfEditor": "Запустить редактор «на лету»", + "fileModalContentMoveTo": "Переместить в", + "fileModalContentOpenSettingsAria": "Открыть меню настроек", + "fileModalContentRenameMenuItem": "Переименовать", + "fileModalContentRenameTooltip": "Переименовать файл", + "fileModalContentReplaceAria": "Кнопка замены файла", + "fileModalContentReplaceTooltip": "Заменить файл", + "fileModalContentSaveTitleAria": "Кнопка сохранения названия", + "fileModalContentTitleAria": "Текстовое поле названия", + "fileModalContentTitleHelper": "Может использоваться для альт-текста (alt) и подписей", + "fileModalContentTitleLabel": "Название", + "fileModalContentTitlePlaceholder": "Введите название", + "fileModalContentUpdatedOn": "Обновлено", + "fileModalContentUploadedOn": "Загружено", + "fileModalContentZuidLabel": "ZUID", + "filetypeFilterArchives": "Архивы (zip)", + "filetypeFilterAudio": "Аудио", + "filetypeFilterButtonLabel": "Тип файла", + "filetypeFilterDocuments": "Документы", + "filetypeFilterFolders": "Папки", + "filetypeFilterFonts": "Шрифты", + "filetypeFilterImages": "Изображения", + "filetypeFilterPdfs": "PDF", + "filetypeFilterPresentations": "Презентации", + "filetypeFilterSpreadsheets": "Таблицы", + "filetypeFilterVideos": "Видео", + "fileTypeNotRecognized": "Тип файла не распознан", + "folderMenuAddSubFolder": "Добавить подпапку", + "folderMenuHide": "Скрыть", + "folderMenuRename": "Переименовать", + "folderMenuShow": "Показать", + "goToAllMedia": "Перейти во все медиафайлы", + "headerAddSubFolder": "Добавить подпапку", + "headerDeselectAll": "Снять выделение со всех", + "headerFilesSelected": "Выбрано: {{count}}", + "headerFilesSelected_one": "Выбрано: {{count}}", + "headerFilesSelected_few": "Выбрано: {{count}}", + "headerFilesSelected_many": "Выбрано: {{count}}", + "headerFilesSelected_other": "Выбрано: {{count}}", + "headerFilesSelectedLimit": "Выбрано: {{count}} / {{limit}}", + "headerFilesSelectedLimit_one": "Выбрано: {{count}} / {{limit}}", + "headerFilesSelectedLimit_few": "Выбрано: {{count}} / {{limit}}", + "headerFilesSelectedLimit_many": "Выбрано: {{count}} / {{limit}}", + "headerFilesSelectedLimit_other": "Выбрано: {{count}} / {{limit}}", + "headerMove": "Переместить", + "headerOpenFolderMenuAria": "Открыть меню папки", + "headerReplacementFileSelected": "Выбран файл для замены", + "headerSelectAll": "Выбрать все", + "headerSelectReplacementFile": "Выберите файл для замены", + "imageFilterAllTypes": "Все типы изображений", + "insightsMediaDateRangeButton": "Последние {{days}} дней", + "insightsMediaDateRangeMenuItem": "Последние {{days}} дней", + "insightsMediaDeltaLabel": "по сравнению с последними {{days}} днями", + "insightsMediaMediaBandwidth": "Пропускная способность медиа", + "insightsMediaTitle": "Аналитика", + "insightsTableColBandwidth": "Трафик", + "insightsTableColRequests": "Запросы", + "insightsTableColType": "Тип", + "matchesFound": "Найдено совпадений: {{count}}", + "matchesFound_one": "Найдено совпадение: {{count}}", + "matchesFound_few": "Найдено совпадения: {{count}}", + "matchesFound_many": "Найдено совпадений: {{count}}", + "matchesFound_other": "Найдено совпадения: {{count}}", + "mediaAppFileNotFoundMessage": "К сожалению, запрашиваемый файл не найден. Пожалуйста, вернитесь на страницу всех медиафайлов.", + "mediaAppFileNotFoundTitle": "Файл не найден", + "mediaGridFilesHeader": "Файлы", + "mediaGridFoldersHeader": "Папки", + "mediaListColAddedOn": "Добавлено", + "mediaListColType": "Тип", + "moveFileDialogDestinationLabel": "Папка назначения", + "moveFileDialogMoveButton": "Переместить", + "moveFileDialogTitleMultiple": "Переместить {{count}} файл(-ов)", + "moveFileDialogTitleMultiple_one": "Переместить {{count}} файл", + "moveFileDialogTitleMultiple_few": "Переместить {{count}} файла", + "moveFileDialogTitleMultiple_many": "Переместить {{count}} файлов", + "moveFileDialogTitleMultiple_other": "Переместить {{count}} файла", + "moveFileDialogTitleSingle": "Переместить файлы", + "newFolderDialogDefaultFolderName": "Без названия", + "newFolderDialogFolderNameLabel": "Имя папки", + "newFolderDialogNone": "Нет", + "newFolderDialogParentFolderLabel": "Родительская папка", + "newFolderDialogTitle": "Новая папка", + "noResultsStateClearFilters": "Сбросить фильтры", + "noResultsStateDescription": "Попробуйте изменить настройки фильтров, чтобы найти то, что вы искали", + "noResultsStateTitleFiletype": "Файлы типа {{filetype}} не найдены", + "noResultsStateTitleFolders": "Папки не найдены", + "notFoundStateDefaultMessage": "К сожалению, запрашиваемая папка не найдена. Пожалуйста, вернитесь на страницу всех медиафайлов.", + "notFoundStateDefaultTitle": "Папка не найдена", + "notifyFailedCreateRecord": "Не удалось создать запись о файле после загрузки по подписанному URL", + "notifyFailedSignedUrl": "Не удалось получить подbacker подписанный URL для загрузки большого файла", + "notifyFailedUploadSignedUrl": "Не удалось загрузить файл по подписанному URL", + "notifyFileReplaced": "Файл заменен: {{filename}}", + "notifyFilesInProgress": "Файлов в процессе обработки: {{count}}", + "notifyFilesInProgress_one": "Файл в процессе обработки: {{count}}", + "notifyFilesInProgress_few": "Файла в процессе обработки: {{count}}", + "notifyFilesInProgress_many": "Файлов в процессе обработки: {{count}}", + "notifyFilesInProgress_other": "Файла в процессе обработки: {{count}}", + "notifyMetadataFailedMultiple": "Не удалось обновить метаданные {{count}} файлов", + "notifyMetadataFailedMultiple_one": "Не удалось обновить метаданные {{count}} файла", + "notifyMetadataFailedMultiple_few": "Не удалось обновить метаданные {{count}} файлов", + "notifyMetadataFailedMultiple_many": "Не удалось обновить метаданные {{count}} файлов", + "notifyMetadataFailedMultiple_other": "Не удалось обновить метаданные {{count}} файлов", + "notifyUploadedMultiple": "Успешно загружено файлов: {{count}}", + "notifyUploadedMultiple_one": "Успешно загружен файл: {{count}}", + "notifyUploadedMultiple_few": "Успешно загружено файла: {{count}}", + "notifyUploadedMultiple_many": "Успешно загружено файлов: {{count}}", + "notifyUploadedMultiple_other": "Успешно загружено файла: {{count}}", + "notifyUploadedMultipleWithProgress": "Успешно загружено файлов: {{count}}... Еще в процессе: {{inProgress}}", + "notifyUploadedMultipleWithProgress_one": "Успешно загружен файл: {{count}}... Еще в процессе: {{inProgress}}", + "notifyUploadedMultipleWithProgress_few": "Успешно загружено файла: {{count}}... Еще в процессе: {{inProgress}}", + "notifyUploadedMultipleWithProgress_many": "Успешно загружено файлов: {{count}}... Еще в процессе: {{inProgress}}", + "notifyUploadedMultipleWithProgress_other": "Успешно загружено файла: {{count}}... Еще в процессе: {{inProgress}}", + "notifyUploadFailed": "Не удалось загрузить файл", + "notifyUploadFailedMultiple": "Не удалось загрузить файлов: {{count}}", + "notifyUploadFailedMultiple_one": "Не удалось загрузить файл: {{count}}", + "notifyUploadFailedMultiple_few": "Не удалось загрузить файла: {{count}}", + "notifyUploadFailedMultiple_many": "Не удалось загрузить файлов: {{count}}", + "notifyUploadFailedMultiple_other": "Не удалось загрузить файла: {{count}}", + "notifyUploadSuccess": "Файл успешно загружен", + "otfEditorAutoPlaceholder": "Авто", + "otfEditorBlurLabel": "Размытие", + "otfEditorCopyUrlLabel": "✨ Скопировать новый URL с изменениями", + "otfEditorFitBounds": "В границы", + "otfEditorFitCover": "Заполнение", + "otfEditorFitCrop": "Обрезка", + "otfEditorFitLabel": "Вписать", + "otfEditorFitNone": "Нет", + "otfEditorHeightLabel": "Высота", + "otfEditorOptimizeHigh": "Высокая", + "otfEditorOptimizeLabel": "Оптимизация", + "otfEditorOptimizeLow": "Низкая", + "otfEditorOptimizeMedium": "Средняя", + "otfEditorSaturationAria": "Насыщенность", + "otfEditorSaturationLabel": "Насыщенность", + "otfEditorTitle": "Редактор изображений «на лету»", + "otfEditorUnsavedWarning": "Эти изменения не будут сохранены в исходном файле или по исходному URL файла", + "otfEditorWidthLabel": "Ширина", + "renameFileModalNewNameLabel": "Новое имя файла", + "renameFileModalTitle": "Переименовать файл", + "renameFileModalWarning": "Это изменит URL-путь и через некоторое время может нарушить работу существующих ссылок в продакшене.", + "renameFolderDialogNewFolderNameLabel": "Новое имя папки", + "renameFolderDialogTitle": "Переименовать папку", + "replaceFileModalNoPermissionSubtitle": "Свяжитесь с владельцем инстанса или администраторами, указанными ниже, чтобы повысить вашу роль до Администратора или Владельца для возможности замены файлов.", + "replaceFileModalNoPermissionTitle": "У вас нет прав для замены файлов в этом инстансе.", + "replaceFileModalTitle": "Заменить файл", + "replaceFileModalWarning": "Исходный файл будет удален и заменен новым файлом. Это действие нельзя отменить, а файл нельзя восстановить. Файл сохранит свой URL и ZUID.", + "searchEmptyStateDescription": "Попробуйте изменить параметры поиска. Рекомендуем проверить правильность написания слов или использовать другие ключевые слова", + "searchEmptyStateTitle": "По вашему запросу «{{searchTerm}}» ничего не найдено", + "sidebarFoldersDndErrorMessage": "В настоящее время в Zesty отсутствует возможность перемещения файлов между эко-корзинами. Если вам нужна эта функция, пожалуйста, свяжитесь с support@zesty.io.", + "sidebarFoldersDndErrorTitle": "Не удалось переместить файл в другую эко-корзину", + "sidebarFoldersHeader": "Папки", + "sidebarFoldersHiddenItems": "Скрытые элементы", + "sidebarFoldersOkButton": "ОК", + "sidebarFoldersSortLastCreated": "Последние созданные", + "sidebarInsertFromMedia": "Вставить из медиафайлов", + "sidebarInsights": "Аналитика", + "sidebarRecents": "Недавние", + "sidebarSearchPlaceholder": "Поиск медиафайлов", + "sortButtonLabel": "Сортировка: {{order}}", + "sortDateAdded": "Дата добавления", + "thumbnailContentCannotEditTooltip": "Вы не можете редактировать имя файла", + "thumbnailContentTitlePlaceholderDisabled": "Пожалуйста, подождите, чтобы добавить название файла", + "thumbnailContentTitlePlaceholderEditable": "Добавить название файла (для альт-текста)", + "thumbnailCopyUrl": "Скопировать URL", + "uploadModalNounFile_one": "файл", + "uploadModalNounFile_few": "файла", + "uploadModalNounFile_many": "файлов", + "uploadModalNounFile_other": "файлов", + "uploadModalNounReplacedFile_one": "замененный файл", + "uploadModalNounReplacedFile_few": "замененных файла", + "uploadModalNounReplacedFile_many": "замененных файлов", + "uploadModalNounReplacedFile_other": "замененных файлов", + "uploadModalUploadedNoCount": "Загружено: {{item}}", + "uploadModalUploadedWithCount": "Загружено {{item}}: {{count}}", + "uploadModalUploadedWithCount_one": "Загружено {{item}}: {{count}}", + "uploadModalUploadedWithCount_few": "Загружено {{item}}: {{count}}", + "uploadModalUploadedWithCount_many": "Загружено {{item}}: {{count}}", + "uploadModalUploadedWithCount_other": "Загружено {{item}}: {{count}}", + "uploadModalUploadErrorHint": "Пожалуйста, проверьте расширения файлов и попробуйте еще раз", + "uploadModalUploadErrorTitle": "К сожалению, возникли проблемы с загрузкой файлов ({{count}})", + "uploadModalUploadErrorTitle_one": "К сожалению, возникли проблемы с загрузкой файла ({{count}})", + "uploadModalUploadErrorTitle_few": "К сожалению, возникли проблемы с загрузкой файлов ({{count}})", + "uploadModalUploadErrorTitle_many": "К сожалению, возникли проблемы с загрузкой файлов ({{count}})", + "uploadModalUploadErrorTitle_other": "К сожалению, возникли проблемы с загрузкой файлов ({{count}})", + "uploadModalUploadingNoCount": "Загружается: {{item}}", + "uploadModalUploadingWithCount": "Загружается {{item}}: {{count}}", + "uploadModalUploadingWithCount_one": "Загружается {{item}}: {{count}}", + "uploadModalUploadingWithCount_few": "Загружается {{item}}: {{count}}", + "uploadModalUploadingWithCount_many": "Загружается {{item}}: {{count}}", + "uploadModalUploadingWithCount_other": "Загружается {{item}}: {{count}}", + "uploadModalUploadMore": "Загрузить еще", + "videoFilterAllTypes": "Все типы видео" +} diff --git a/public/locales/ru-RU/release.json b/public/locales/ru-RU/release.json new file mode 100644 index 0000000000..dfa01acc1a --- /dev/null +++ b/public/locales/ru-RU/release.json @@ -0,0 +1,42 @@ +{ + "activateButton": "Активировать приложение релизов", + "activateSubtitle": "Публикуйте группы контента одновременно.", + "createdAt": "Дата создания", + "createdOn": "{{date}}, {{time}}", + "createdRelease": "Релиз создан: {{name}}", + "createRelease": "Создать релиз", + "createReleaseButton": "Создать релиз", + "deletedRelease": "Релиз {{name}} удалён", + "deleteRelease": "Удалить релиз", + "deleteWarning": "Удаление релиза — это необратимое действие.", + "errorMissingReleaseName": "Отсутствует обязательное название релиза", + "failedActivateReleases": "Не удалось активировать релизы", + "failedCreatingRelease": "Не удалось создать релиз", + "failedDeletingRelease": "Не удалось удалить релиз {{name}}", + "fieldReleaseDescription": "Описание релиза", + "fieldReleaseName": "Название релиза", + "instructionBeginSearch": "Начните с поиска контента, который вы хотите включить в этот релиз", + "instructionPublishAll": "Нажмите кнопку «Опубликовать все», чтобы опубликовать все элементы, указанные в релизе", + "instructionSelectItem": "Выберите элемент из списка поиска, чтобы добавить его в этот релиз", + "lang": "Язык", + "lastPublish": "Последняя публикация", + "live": "В эфире / Live", + "loadingRelease": "Загрузка релиза: {{name}}", + "members": "Элементы / Участники", + "missingItemMetaTitle": "Отсутствует мета-заголовок элемента", + "neverPublished": "Ни разу не публиковалось", + "publishAll": "Опубликовать все", + "publishAllNoticeBody": "Это приведет к публикации всех элементов в данном релизе. Все URL-адреса элементов и связанный контент будут очищены в CDN (purged).", + "publishedItems_one": "Опубликован {{count}} элемент", + "publishedItems_few": "Опубликовано {{count}} элемента", + "publishedItems_many": "Опубликовано {{count}} элементов", + "publishedItems_other": "Опубликовано {{count}} элемента", + "publishing": "Публикация...", + "releasesHeading": "Релизы", + "searchPlaceholder": "Ищите по ZUID или мета-заголовку, чтобы включить в свой релиз", + "startingRelease": "Запуск релиза", + "startNewPublishPlan": "Запустить новый план публикации", + "updatedReleaseMember": "Участник релиза ({{releaseName}}) ({{itemTitle}}) обновлён до версии {{version}}", + "versionNumber": "Версия {{version}}", + "versionPublishedAgo": "Версия {{version}} была опубликована {{timeAgo}}" +} diff --git a/public/locales/ru-RU/reports.json b/public/locales/ru-RU/reports.json new file mode 100644 index 0000000000..9568973a5a --- /dev/null +++ b/public/locales/ru-RU/reports.json @@ -0,0 +1,122 @@ +{ + "actionAddedStatus": "Добавлен статус: {{labels}}", + "actionBy": "исполнитель", + "actionCount_one": "{{count}} действие", + "actionCount_few": "{{count}} действия", + "actionCount_many": "{{count}} действий", + "actionCount_other": "{{count}} действия", + "actionCreated": "Создано", + "actionDeleted": "Удалено", + "actionInBy": "В {{itemSubtext}}, исполнитель", + "actionModified": "Изменено", + "actionPublished": "Опубликовано", + "actionRemovedStatus": "Удален статус: {{labels}}", + "actions": "Действия", + "actionsByTitle": "Действия выполнил", + "actionScheduledPublish": "Запланировано к публикации", + "actionScheduledPublishOn": "Публикация запланирована на {{date}}", + "actionsLabel": "Действия", + "actionType": "Тип действия", + "actionUnpublished": "Снято с публикации", + "activityByResource": "Активность по ресурсам", + "activityLog": "Журнал активности", + "activityLogSubtitle": "Хронология вашего инстанса по ресурсам и пользователям", + "activityLogTitle": "Журнал активности", + "affectedZUIDDeleted": "{{affectedZUID}} (Удалено)", + "affectedZUIDMissingMetaTitle": "{{affectedZUID}} (Отсутствует мета-заголовок)", + "allResponseCodes": "Все коды ответов", + "apiErrorMessage": "Произошла ошибка при загрузке данных", + "apiErrorRetry": "Повторить", + "apiErrorTitle": "Ой!", + "bandwidth": "Пропускная способность", + "bandwidthBreakdown": "Детализация пропускной способности", + "blockVariants": "Варианты блоков", + "cdnUrl": "URL-адрес CDN", + "codeFilesAndSnippets": "Файлы кода и фрагменты", + "contentModel": "Модель контента", + "created": "Создано", + "date": "Дата", + "deleted": "Удалено", + "deletedZuid": "{{zuid}} (Удалено)", + "deletedZUID": "{{zuid}} (Удалено)", + "emptyStateHint": "Попробуйте изменить фильтры, чтобы найти то, что вы ищете.", + "failingNotFound": "Ошибка: Не найдено (404)", + "fieldPrefix": "Поле {{message}}", + "fileName": "Имя файла", + "fileTypeDataset": "Модель данных Headless", + "fileTypePageset": "Модель нескольких страниц", + "fileTypeTemplateset": "Модель одной страницы", + "headTag": "Тег Head", + "htmlCssBandwidth": "Пропускная способность HTML/CSS/Javascript", + "insightActions": "Действия", + "instanceZuid": "ZUID инстанса", + "lastActionAt": "Последнее действие в {{time}}", + "lastActionAtContentModel": "Последнее действие в {{lastAction}} • Модель контента", + "lastActionAtSettings": "Последнее действие в {{lastAction}} • Настройки", + "lastUpdated": "Последнее обновление: {{date}}", + "leastActive": "Наименее активные", + "loadingMetrics": "Загрузка метрик", + "maliciousDeflected": "Вредоносные/отклоненные (403)", + "mediaBandwidth": "Пропускная способность медиафайлов", + "messageButton": "Написать", + "metrics": "Метрики", + "metricsLoadError": "Произошла ошибка при загрузке метрик: {{message}}", + "missingMetaTitleZuid": "{{zuid}} (Отсутствует мета-заголовок)", + "missingMetaTitleZUID": "{{zuid}} (Отсутствует мета-заголовок)", + "modelTypeBlockVariant": "Вариант блока", + "modelTypeHeadlessDataItem": "Элемент данных Headless", + "modelTypeMultiPageItem": "Элемент нескольких страниц", + "modelTypeSinglePageItem": "Элемент одной страницы", + "modified": "Изменено", + "mostActive": "Самые активные", + "mostRecent": "Сначала новые", + "mostRecentlyActive": "Активные за последнее время", + "noInsightsFound": "Аналитика не найдена", + "noLogsFound": "Журналы не найдены", + "noResourcesFound": "Ресурсы не найдены", + "oldestFirst": "Сначала старые", + "other": "Другое", + "pageRedirects": "Перенаправления страниц (301)", + "pageRequests": "Запросы страниц", + "past30Days": "Последние 30 дней", + "past7Days": "Последние 7 дней", + "pastDay": "Прошедший день", + "pastDayWeek": "Неделя прошедшего дня", + "platformRequestBreakdown": "Детализация запросов платформы (всего)", + "published": "Опубликовано", + "publishes": "Публикации", + "redirectUrl": "URL перенаправления", + "request": "Запрос", + "requests": "Запросы", + "resources": "Ресурсы", + "resourcesImpacted": "Затронутые ресурсы", + "scheduled": "Запланировано", + "selectDateRange": "Выберите диапазон дат", + "settings": "Настройки", + "successfulMediaRequests": "Успешные медиа-запросы", + "successfulPageLoads": "Успешные загрузки страниц (200)", + "tabInsights": "Аналитика", + "tabResources": "Ресурсы", + "tabTimeline": "Хронология", + "tabUsers": "Пользователи", + "top10ActiveUsers": "Топ-10 активных пользователей", + "top301Redirects": "Популярные перенаправления 301", + "topFileNotFound": "Популярные ненайденные файлы (404)", + "topMaliciousDeflected": "Популярные вредоносные / отклоненные запросы", + "topRequestedMedia": "Самые запрашиваемые медиафайлы", + "topRequestedPages": "Самые запрашиваемые страницы", + "totalBandwidth": "Общая пропускная способность", + "totalRequests": "Всего запросов", + "totalUsageBreakdown": "Детализация общего использования", + "unknownUser": "Неизвестный пользователь", + "unpublished": "Снято с публикации", + "url": "URL", + "usageReport": "Отчёт об использовании", + "usageReportFor": "Отчет об использовании за {{timePeriod}} {{unit}} : {{startDisplay}} - {{endDisplay}}", + "userAvatar": "Аватар пользователя {{name}}", + "userAvatarAlt": "Аватар пользователя {{firstName}} {{lastName}}", + "userEmailCopied": "Email пользователя скопирован в буфер обмена", + "userListItemSecondary": "{{roleName}} • {{actionCount}} действий • Последнее действие в {{lastAction}}", + "userRole": "Роль пользователя", + "viewAuditTrailReport": "Просмотреть отчет журнала аудита" +} diff --git a/public/locales/ru-RU/schema.json b/public/locales/ru-RU/schema.json new file mode 100644 index 0000000000..9497ffb37f --- /dev/null +++ b/public/locales/ru-RU/schema.json @@ -0,0 +1,775 @@ +{ + "activityDetails": "Подробности активности", + "activityDetailsSubtitle": "Узнайте, когда и кем была создана и обновлена модель", + "addAnotherField": "Добавить ещё одно поле", + "addAnotherFieldToModel": "Добавить ещё одно поле в {{modelLabel}}", + "addField": "Добавить поле", + "addFieldsDescription": "Определите различные поля, которые должны быть частью этой модели.", + "addFieldsHeading": "Добавить поля", + "addFieldTitle": "Добавить поле {{name}}", + "addFieldToLabel": "Добавить поле в {{label}}", + "addFieldToName": "Добавить поле в {{name}}", + "addOption": "Добавить параметр", + "advanced": "Расширенные", + "allModels": "Все модели", + "allModelsHeading": "Все модели", + "apiAccessDescription": "Zesty предлагает несколько API для доступа к этому контенту, каждый с уникальными преимуществами. Выберите тот, который наилучшим образом соответствует вашим потребностям.", + "apiAccessOptions": "Варианты доступа к API", + "apiBackendCodingDescription": "REST API Zesty предоставляет полный доступ к командам создания, чтения, обновления, удаления и публикации. Доступ к API можно получить через прямые вызовы API или через наш Node SDK.", + "apiBestUsedFor": "Лучше всего подходит для", + "apiCustomEndpointsDescription": "Создавайте любые типы данных (JSON, XML, HTML и т.д.) и любой уровень гидратации с помощью Parsley и Webengine от Zesty.io.", + "apiGraphqlDescription": "Плоские конечные точки объектов, идеально подходящие для GraphQL-серверов. Доступны только через обход данных на конечной точке GQL модели.", + "apiLabelBackendCoding": "Бэкэнд-программирование", + "apiLabelCustomEndpoints": "Пользовательские эндпоинты", + "apiLabelGraphql": "GraphQL", + "apiLabelQuickAccess": "Быстрый доступ", + "apiLabelSiteGenerators": "Генераторы сайтов", + "apiLabelVisualLayout": "Визуальный макет", + "apiParsleyReferenceId": "Идентификатор-ссылка API/Parsley", + "apiParsleyReferenceIdTooltip": "Идентификатор для доступа к этой модели через API или Parsley", + "apiQuickAccessDescription": "предоставляет доступ к полным JSON-конечным точкам элементов моделей или отдельных элементов со всевозможной информацией. Данные требуют ручной гидратации.", + "apiSiteGeneratorsDescription": "Zesty преобразует каждый URL в JSON с гидратированными связями и навигационной информацией. Каждый элемент контента, добавленный в эту модель, имеет доступ к гидратированным JSON URL.", + "apiTagReadAndWrite": "Чтение и запись", + "apiTagReadOnly": "Только чтение", + "apiUrlLabel": "URL API", + "apiUseApplicationsWithRouting": "Приложения с маршрутизацией", + "apiUseAppsOrHeadlessLayouts": "Приложения или headless-макеты", + "apiUseAutomation": "Автоматизация", + "apiUseAutomationDesign": "Проектирование автоматизации", + "apiUseContentExperiences": "Контент-опыт", + "apiUseCustomApps": "Пользовательские приложения", + "apiUseCustomContentHydration": "Пользовательская гидратация контента", + "apiUseFullyPaintedHtmlViews": "Полностью отрисованные HTML-представления", + "apiUseGraphQlImplementations": "Реализации GraphQL", + "apiUseHeadlessApplets": "Headless-апплеты", + "apiUseHeadlessWebDevelopment": "Headless-веб-разработка", + "apiUseMiddleware": "Промежуточное ПО", + "apiUseMobileApplications": "Мобильные приложения", + "apiUseSearch": "Поиск", + "apiUseUserGeneratedContent": "Пользовательский контент", + "apiVisualLayoutDescription": "Визуальный макет доступен из отрисованного HTML или структурированного JSON из конечной точки toJSON.", + "blockGroup": "Группа блоков", + "booleanOptionsLabel": "Булевы параметры", + "cannotCreateModelTitle": "Не удаётся создать модель", + "characterLimitDescription": "Задайте минимально и/или максимально допустимое количество символов", + "characterLimitLabel": "Ограничение количества символов", + "characterLimitMaxLabel": "Максимальное количество символов (с пробелами)", + "characterLimitMinLabel": "Минимальное количество символов (с пробелами)", + "clearFilters": "Очистить фильтры", + "comingSoon": "Скоро", + "commonFieldDescriptionLabel": "Описание", + "commonFieldDescriptionTooltip": "Отображается ниже отображаемого названия. Используйте для предоставления инструкций авторам контента и пользователям API.", + "commonFieldLabelLabel": "Отображаемое название", + "commonFieldLabelTooltip": "Отображаемое имя поля, видимое в схеме.", + "commonFieldListLabel": "Добавить как столбец в таблицу", + "commonFieldListSubLabel": "Показывает поле как столбец в таблице в представлении контента", + "commonFieldNameLabel": "Идентификатор API / Parsley", + "commonFieldNameTooltip": "Это будет отображаться в ответах API", + "commonFieldRequiredLabel": "Обязательное поле", + "commonFieldRequiredSubLabel": "Гарантирует, что элемент не может быть создан, если поле пустое", + "commonFieldTooltipLabel": "Подсказка", + "commonFieldTooltipTooltip": "Подсказка, отображаемая редакторам контента.", + "commonUses": "Распространённые применения", + "copyEmail": "Скопировать email", + "copyFieldZuid": "Скопировать ZUID поля", + "copyFieldZUID": "Скопировать ZUID поля", + "copyModelZUID": "Скопировать Zuid модели", + "createdOn": "Создано", + "createModel": "Создать модель", + "createModelButton": "Создать модель", + "createModelTitle": "Создать {{modelName}}", + "currencyFieldLabel": "Валюта", + "currencyFieldPlaceholder": "Выберите валюту", + "currencyFieldTooltip": "Выбранный код валюты, символ и флаг будут отображаться для этого поля в элементе контента и могут быть доступны через настройки поля через API.", + "currencyFlagAlt": "Флаг {{countryCode}}", + "deactivatedFields": "Деактивированные поля", + "deactivatedFieldsDescription": "Эти поля можно повторно активировать в любое время, если вы захотите вернуть их в модель контента.", + "deactivateField": "Деактивировать поле", + "deactivatingField": "Деактивация поля", + "defaultValue": "Значение по умолчанию", + "defaultValueDescription": "Задайте предопределённое значение для этого поля", + "defaultValueHelperText": "Задайте предопределённое значение для этого поля", + "defaultValueLabel": "Значение по умолчанию", + "deleteModel": "Удалить модель", + "deleteModelCannotDeleteNotify": "Невозможно удалить модель: {{modelLabel}}", + "deleteModelConfirmLabel": "Подтвердите, введя «{{modelLabel}}» ниже.", + "deleteModelFailedNotify": "Не удалось удалить модель", + "deleteModelTitle": "Удалить модель?", + "deleteModelWarning": "Удаление модели «{{modelLabel}}» также удалит все её элементы контента. Это действие нельзя отменить.", + "descriptionLabel": "Описание", + "descriptionPlaceholder": "Для чего будет использоваться эта модель", + "descriptionTooltip": "Отображает цель модели для помощи авторам контента", + "displayNameLabel": "Отображаемое имя", + "displayNamePlaceholder": "например: Главная страница, Страница «О нас», Страница контактов и т.д.", + "displayNameTooltip": "Имя, отображаемое редакторам контента", + "dropdownOptionsLabel": "Параметры выпадающего списка", + "duplicate": "Дублировать", + "duplicateModel": "Дублировать модель", + "duplicateModelAlertBodyRich": "Вы собираетесь дублировать модель {{label}} со всеми её существующими полями. Элементы контента дублированы не будут.", + "duplicateModelDescriptionLabel": "Описание", + "duplicateModelDescriptionPlaceholder": "Для чего будет использоваться эта модель", + "duplicateModelDisplayNameLabel": "Отображаемое имя", + "duplicateModelDisplayNamePlaceholder": "Копия «{{label}}»", + "duplicateModelFailed": "Не удалось дублировать модель", + "duplicateModelListedDescription": "Включённые в список модели делают свои элементы контента доступными для программных вызовов навигации.", + "duplicateModelListedLabel": "Включить модель в список", + "duplicateModelParentLabel": "Родительская модель", + "duplicateModelParentPlaceholder": "Выбрать", + "duplicateModelReferenceIdLabel": "Идентификатор-ссылка", + "duplicateModelReferenceIdPlaceholder": "Автоматически генерируется из отображаемого имени", + "duplicateModelSubtitle": "Как модель типа {{type}}", + "duplicateModelTitle": "Дублировать модель {{label}}", + "editField": "Редактировать поле", + "editFieldTitle": "Редактировать {{label}}", + "editInCode": "Редактировать в коде", + "editTemplateFile": "Редактировать файл шаблона", + "emptyStateBody": "Модели определяют структуру элемента контента, например главной страницы или статьи, подобно примерам моделей, которые вы видите справа.", + "emptyStateHeading": "Начните с создания моделей", + "emptyStateLinkBestPractices": "Изучайте лучшие практики создания моделей", + "emptyStateLinkBuildingModels": "Читайте наше руководство по созданию моделей", + "endpointDevLabel": "Dev (последняя версия)", + "endpointProduction": "Продакшн", + "enterLabel": "Введите ярлык", + "enterValue": "Введите значение", + "errorFieldIsRequired": "{{label}} обязательно для заполнения", + "errorFieldReferenceExists": "Поле с такой ссылкой API/Parsley уже существует", + "errorOptionValueExists": "Параметр с таким значением уже существует", + "errorShortenToLess": "Сократите до менее чем {{maxLength}} символов ({{currentLength}}/{{maxLength}})", + "errorSystemReservedFieldName": "«{{value}}» является зарезервированным системным именем поля", + "extensionPresetAudios": "Аудио", + "extensionPresetDocuments": "Документы", + "extensionPresetImages": "Изображения", + "extensionPresetPresentations": "Презентации", + "extensionPresetSpreadsheets": "Таблицы", + "extensionPresetVideos": "Видео", + "failedCreateField": "Не удалось создать поле", + "failedCreateModel": "Не удалось создать модель", + "failedUpdateField": "Не удалось обновить поле", + "faqBadge": "ЧЗВ", + "fieldCategoryAdvanced": "Расширенные", + "fieldCategoryDateAndTime": "Дата и время", + "fieldCategoryMedia": "Медиа", + "fieldCategoryNumeric": "Числовые", + "fieldCategoryRelationship": "Связи", + "fieldCategoryText": "Текст", + "fieldDeactivated": "Поле «{{label}}» деактивировано", + "fieldDescriptionBodyText": "Подробный текст с контекстом или инструкциями для формы.", + "fieldDescriptionButtonContainerSubText": "Вспомогательный текст под кнопками призыва к действию в левой секции.", + "fieldDescriptionCompanyLogo": "Логотип компании, которую представляет человек.", + "fieldDescriptionCompanyName": "Название компании, которую представляет человек.", + "fieldDescriptionCtaButton1TextLeftSection": "Текст первой кнопки призыва к действию в левой секции.", + "fieldDescriptionCtaButton1TextNoSection": "Текст первой кнопки призыва к действию.", + "fieldDescriptionCtaButton1Url": "URL, на который ведёт первая кнопка призыва к действию.", + "fieldDescriptionCtaButton2TextLeftSection": "Текст второй кнопки призыва к действию в левой секции.", + "fieldDescriptionCtaButton2Url": "URL, на который ведёт вторая кнопка призыва к действию.", + "fieldDescriptionCtaButtonTextFeatureSection": "Текст кнопки призыва к действию в секции функций.", + "fieldDescriptionCtaButtonUrl": "URL, на который ведёт кнопка призыва к действию.", + "fieldDescriptionFeatureIntroLink": "URL, привязанный к вводному тексту функции.", + "fieldDescriptionFeatureIntroText": "Короткий вводный текст для секции функций.", + "fieldDescriptionFormCtaButtonText": "Текст кнопки призыва к действию на форме.", + "fieldDescriptionFormHeaderText": "Подзаголовок или введение для контактной формы.", + "fieldDescriptionHeroImageFeatureSection": "Изображение, отображаемое рядом с секцией функций.", + "fieldDescriptionHeroImageHeroSection": "Изображение, отображаемое в секции героя.", + "fieldDescriptionHeroImageRight": "Изображение, отображаемое в правой части секции героя.", + "fieldDescriptionJobTitle": "Должность человека, предоставляющего цитату.", + "fieldDescriptionNameInput": "Ярлык для поля ввода имени.", + "fieldDescriptionPersonEmail": "Адрес электронной почты основного контактного лица.", + "fieldDescriptionPersonImage": "Изображение человека, предоставляющего цитату.", + "fieldDescriptionPersonName": "Имя основного контактного лица.", + "fieldDescriptionPersonNameTestimonial": "Имя человека, предоставляющего цитату.", + "fieldDescriptionPersonPhoto": "Фото основного контактного лица.", + "fieldDescriptionPersonTitle": "Должность или роль основного контактного лица.", + "fieldDescriptionPosition": "Позиция человека в его компании.", + "fieldDescriptionQuote": "Отзыв или цитата от человека.", + "fieldDescriptionStarRatingNumber": "Числовой рейтинг, отображаемый в секции героя.", + "fieldDescriptionStarRatingSubText": "Дополнительная информация о рейтинге со звёздами.", + "fieldDescriptionStarRatingTitle": "Заголовок, описывающий рейтинг со звёздами.", + "fieldDescriptionSubTitleFeatureSection": "Вспомогательный текст с подробным описанием функции.", + "fieldDescriptionSubTitleHeroSection": "Вспомогательный текст, отображаемый под заголовком в секции героя.", + "fieldDescriptionSubTitleLeftSection": "Вспомогательный текст, отображаемый под заголовком в левой секции.", + "fieldDescriptionTitle": "Основной заголовок, отображаемый в левой секции.", + "fieldDescriptionTitleContactForm": "Основной заголовок формы обратной связи.", + "fieldDescriptionTitleFeatureSection": "Основной заголовок секции функций.", + "fieldDescriptionTitleHeroSection": "Основной заголовок, отображаемый в секции героя.", + "fieldDescriptionTopCtaButtonText": "Текст верхней кнопки призыва к действию.", + "fieldDescriptionTopCtaButtonUrl": "URL, на который ведёт верхняя кнопка призыва к действию.", + "fieldFormTabDetails": "Подробности", + "fieldFormTabLearn": "Обучение", + "fieldFormTabRepeaterFields": "Поля", + "fieldFormTabRules": "Правила", + "fieldLabelBodyText": "Текст основного содержимого", + "fieldLabelButtonContainerSubText": "Подтекст контейнера кнопок", + "fieldLabelCompanyLogo": "Логотип компании", + "fieldLabelCompanyName": "Название компании", + "fieldLabelCtaButton1Text": "Текст кнопки CTA 1", + "fieldLabelCtaButton1Url": "URL кнопки CTA 1", + "fieldLabelCtaButton2Text": "Текст кнопки CTA 2", + "fieldLabelCtaButton2Url": "URL кнопки CTA 2", + "fieldLabelCtaButtonText": "Текст кнопки CTA", + "fieldLabelCtaButtonUrl": "URL кнопки CTA", + "fieldLabelFeatureIntroLink": "Вводная ссылка функции", + "fieldLabelFeatureIntroText": "Вводный текст функции", + "fieldLabelFormCtaButtonText": "Текст кнопки CTA формы", + "fieldLabelFormHeaderText": "Заголовок формы", + "fieldLabelHeroImage": "Изображение героя", + "fieldLabelJobTitle": "Должность", + "fieldLabelPersonEmail": "Email контактного лица", + "fieldLabelPersonImage": "Изображение человека", + "fieldLabelPersonName": "Имя контактного лица", + "fieldLabelPersonPhoto": "Фото контактного лица", + "fieldLabelPersonTitle": "Должность контактного лица", + "fieldLabelPosition": "Позиция", + "fieldLabelQuote": "Цитата", + "fieldLabelStarRatingNumber": "Числовой рейтинг со звёздами", + "fieldLabelStarRatingSubText": "Дополнительный текст рейтинга", + "fieldLabelStarRatingTitle": "Заголовок рейтинга со звёздами", + "fieldLabelSubTitle": "Подзаголовок", + "fieldLabelTitle": "Заголовок", + "fieldLabelTopCtaButtonText": "Текст верхней кнопки CTA", + "fieldLabelTopCtaButtonUrl": "URL верхней кнопки CTA", + "fieldListSearchPlaceholder": "Поиск полей", + "fieldReactivated": "Поле «{{label}}» повторно активировано", + "fields": "Поля", + "fieldToDisplayLabel": "Поле для отображения", + "fieldToDisplayPlaceholder": "Выберите поле", + "fieldTypeBlockSelectorCommonUse1": "Секция нижнего колонтитула", + "fieldTypeBlockSelectorCommonUse2": "Блок в конце статьи", + "fieldTypeBlockSelectorCommonUse3": "Формы", + "fieldTypeBlockSelectorDescription": "Поле «Выбор блока» позволяет пользователю выбрать уникальный вариант любой блочной модели для отображения на странице.", + "fieldTypeBlockSelectorName": "Выбор блока", + "fieldTypeBlockSelectorProTip": "Отлично подходит для использования разных конечных блоков на разных страницах одной модели.", + "fieldTypeBlockSelectorShortDesc": "Ссылка на вариант блочной модели", + "fieldTypeBlockSelectorSubHeader": "Ссылка на вариант блочной модели", + "fieldTypeBooleanCommonUse1": "Выделение рекомендуемых записей блога, товаров", + "fieldTypeBooleanCommonUse2": "Скидки в товарах электронной коммерции", + "fieldTypeBooleanCommonUse3": "Выделение значков, например «Опытный автор»", + "fieldTypeBooleanCommonUse4": "Скрытие элементов", + "fieldTypeBooleanDescription": "Это поле используется, когда поле должно иметь только два возможных значения: да или нет, истина или ложь, рекомендуемый или нет и т.д.", + "fieldTypeBooleanName": "Булево значение", + "fieldTypeBooleanProTip": "Используйте булевы поля для фильтрации элементов, которые нужно отображать в коллекции.", + "fieldTypeBooleanShortDesc": "Истина или ложь", + "fieldTypeBooleanSubHeader": "Используется для установки значений «истина» или «ложь»", + "fieldTypeColorCommonUse1": "Цвета фона", + "fieldTypeColorCommonUse2": "Цвета рамок", + "fieldTypeColorCommonUse3": "Цвета шрифтов", + "fieldTypeColorCommonUse4": "Изменение цветов тегов категорий", + "fieldTypeColorDescription": "Это поле идеально подходит для стилизации различных элементов страницы: цвета фона, цвета текста, рамок и т.д. Редакторам будет предоставлен выборщик цвета.", + "fieldTypeColorName": "Цвет", + "fieldTypeColorProTip": "Выборщики цвета позволяют выделять элементы уникальным образом и упрощают различие между ними.", + "fieldTypeColorShortDesc": "Цвета фона, цвета шрифта и прочее", + "fieldTypeColorSubHeader": "Используется для цветов фона, шрифтов и прочего", + "fieldTypeCurrencyCommonUse1": "Себестоимость товара или услуги", + "fieldTypeCurrencyCommonUse2": "Цена продажи товара или услуги", + "fieldTypeCurrencyDescription": "Это поле используется для хранения стоимости, цены или баланса счёта.", + "fieldTypeCurrencyName": "Валюта", + "fieldTypeCurrencyProTip": "Используйте поля валюты вместо числовых полей для хранения цен.", + "fieldTypeCurrencyShortDesc": "Идеально для цен на товары", + "fieldTypeCurrencySubHeader": "Используется для хранения стоимостей, цен и балансов", + "fieldTypeDateCommonUse1": "Даты рождения", + "fieldTypeDateCommonUse2": "Годовщины", + "fieldTypeDateCommonUse3": "Исторические даты", + "fieldTypeDateCommonUse4": "Даты выпуска", + "fieldTypeDateDescription": "Это поле используется, когда требуется ввести прошедшую, настоящую или будущую дату. Можно настроить, будет ли пользователь вводить день, месяц или год, или все три значения.\n\n Zesty автоматически отслеживает даты и время создания, публикации и изменения, поэтому дополнительные поля для этого создавать не нужно.", + "fieldTypeDateName": "Дата", + "fieldTypeDateProTip": "Если нужно добавить время к дате, используйте поле «Дата и время».", + "fieldTypeDateShortDesc": "Идеально для дней рождения, дат выпуска, мероприятий и т.д.", + "fieldTypeDateSubHeader": "Используется для дней рождения, дат выпуска, мероприятий и т.д.", + "fieldTypeDateTimeCommonUse1": "Время начала и окончания мероприятий", + "fieldTypeDateTimeCommonUse2": "Время отправки", + "fieldTypeDateTimeCommonUse3": "Сроки", + "fieldTypeDateTimeDescription": "Это поле используется, когда требуется ввести дату и время. Можно настроить, будет ли пользователь вводить время, день, месяц или год, или все четыре значения.\n\n Zesty автоматически отслеживает даты и время создания, публикации и изменения, поэтому дополнительные поля для этого создавать не нужно.", + "fieldTypeDateTimeName": "Дата и время", + "fieldTypeDateTimeProTip": "Если нужна только дата без времени, используйте поле «Дата».", + "fieldTypeDateTimeShortDesc": "Отслеживание дат вместе с конкретным временем", + "fieldTypeDateTimeSubHeader": "Используется для отслеживания дат вместе с конкретным временем", + "fieldTypeDropdownCommonUse1": "Пол", + "fieldTypeDropdownCommonUse2": "Стандартные размеры", + "fieldTypeDropdownCommonUse3": "Языки", + "fieldTypeDropdownCommonUse4": "Отделы компании", + "fieldTypeDropdownDescription": "Это поле используется, когда нужно предложить пользователю выбрать значение из выпадающего меню с заранее заданными вами параметрами. Эти значения можно задать в настройках поля.", + "fieldTypeDropdownName": "Выпадающий список", + "fieldTypeDropdownProTip": "Значения, добавленные в поле выпадающего списка, будут доступны только в той модели, в которую добавлено поле. Если значения должны быть многократно используемыми и доступными в нескольких моделях, создайте для них отдельную модель и используйте поле связи «один к одному» или «один ко многим».", + "fieldTypeDropdownShortDesc": "Выбор из списка значений", + "fieldTypeDropdownSubHeader": "Используется для выбора пользователем из списка значений", + "fieldTypeExternalUrlCommonUse1": "Ссылки на партнёрские сайты (например, Amazon)", + "fieldTypeExternalUrlCommonUse2": "Ссылки на страницы в социальных сетях: Facebook, Instagram и т.д.", + "fieldTypeExternalUrlCommonUse3": "Ссылки на сторонние сервисы: Eventbrite для мероприятий или Doordash для заказов", + "fieldTypeExternalUrlDescription": "Это поле отлично подходит для хранения URL-адресов страниц на внешних сайтах. Такие ссылки могут отображаться и открываться пользователями.", + "fieldTypeExternalUrlName": "Внешний URL", + "fieldTypeExternalUrlProTip": "Ссылки также можно добавлять непосредственно в поля с форматированным текстом.", + "fieldTypeExternalUrlShortDesc": "Ссылка на внешний сайт", + "fieldTypeExternalUrlSubHeader": "Используйте это поле для ссылки на внешний сайт", + "fieldTypeIntegrationCommonUse1": "Статистика — получение внешних данных", + "fieldTypeIntegrationCommonUse2": "Интеграция с третьими сторонами — получение данных из внешнего приложения", + "fieldTypeIntegrationCommonUse3": "Формы — импорт ответов из внешних форм", + "fieldTypeIntegrationCommonUse4": "Импорт контента из другого экземпляра Zesty", + "fieldTypeIntegrationCommonUse5": "Внешняя CMS — отображение контента из внешней CMS", + "fieldTypeIntegrationCommonUse6": "Таблицы — загрузка данных из таблиц", + "fieldTypeIntegrationDescription": "Это поле позволяет пользователям получать данные из JSON API, выбирать записи и добавлять их в элемент контента. Данные остаются статичными до повторного выбора, обеспечивая контролируемые обновления.", + "fieldTypeIntegrationName": "Интеграция", + "fieldTypeIntegrationProTip": "Данные хранятся в виде JSON-объекта и доступны в режиме headless или через Parsley для динамической отрисовки в шаблонах.", + "fieldTypeIntegrationShortDesc": "Получение и хранение данных из API", + "fieldTypeIntegrationSubHeader": "Получение и хранение данных из API", + "fieldTypeInternalLinkCommonUse1": "Ссылки на внутренние продукты", + "fieldTypeInternalLinkCommonUse2": "Ссылки на внутренние статьи", + "fieldTypeInternalLinkDescription": "Поля внутренних ссылок позволяют выбрать внутренний элемент экземпляра из любой схемы. Это удобно для того, чтобы авторы могли связывать элементы внутри экземпляра.", + "fieldTypeInternalLinkName": "Внутренняя ссылка", + "fieldTypeInternalLinkProTip": "Для ссылок на внешние сайты используйте поля «Внешний URL».", + "fieldTypeInternalLinkShortDesc": "Ссылка на внутренний элемент контента", + "fieldTypeInternalLinkSubHeader": "Используйте это поле для ссылки на внутренний элемент контента", + "fieldTypeMarkdownCommonUse1": "Публикации в блоге", + "fieldTypeMarkdownCommonUse2": "Статьи", + "fieldTypeMarkdownCommonUse3": "Руководства", + "fieldTypeMarkdownCommonUse4": "Списки", + "fieldTypeMarkdownCommonUse5": "Описания мероприятий", + "fieldTypeMarkdownDescription": "Это поле предоставляет редактору синтаксис Markdown в стиле GitHub для оформления и структурирования контента.", + "fieldTypeMarkdownName": "Markdown", + "fieldTypeMarkdownProTip": "Это поле отлично подходит, когда нужно дать редакторам возможность применять любые стили и структурировать текст.", + "fieldTypeMarkdownShortDesc": "Лёгкая разметка для форматирования текста", + "fieldTypeMarkdownSubHeader": "Лёгкая разметка для форматирования текста", + "fieldTypeMediaCommonUse1": "Обложки статей", + "fieldTypeMediaCommonUse2": "Фотографии авторов или сотрудников", + "fieldTypeMediaCommonUse3": "Галереи продуктов", + "fieldTypeMediaCommonUse4": "Иллюстрации и иконки", + "fieldTypeMediaCommonUse5": "Видеодемонстрации, обучающие видео, введение в компанию", + "fieldTypeMediaCommonUse6": "Фоновые изображения", + "fieldTypeMediaCommonUse7": "PDF-файлы: официальные документы, электронные книги, меню, карты и прочее", + "fieldTypeMediaCommonUse8": "Презентации PowerPoint", + "fieldTypeMediaDescription": "Это поле позволяет пользователю добавлять один или несколько медиафайлов: изображения, видео, документы, презентации и т.д. Можно задать максимальное количество файлов и максимальный размер каждого из них.", + "fieldTypeMediaName": "Медиа", + "fieldTypeMediaProTip": "Также можно добавлять медиафайлы непосредственно в поля с форматированным текстом.", + "fieldTypeMediaShortDesc": "Изображения, видео, PDF и другие файлы", + "fieldTypeMediaSubHeader": "Используется для изображений, видео, PDF и других файлов", + "fieldTypeMultiLineTextCommonUse1": "Подзаголовки", + "fieldTypeMultiLineTextCommonUse2": "Краткие изложения статей", + "fieldTypeMultiLineTextCommonUse3": "Описания продуктов", + "fieldTypeMultiLineTextCommonUse4": "Описания категорий", + "fieldTypeMultiLineTextCommonUse5": "Биографии авторов", + "fieldTypeMultiLineTextDescription": "Поле «Многострочный текст» лучше всего подходит для длинного текстового контента, которому не требуется специальное форматирование, ссылки или медиафайлы.", + "fieldTypeMultiLineTextName": "Многострочный текст", + "fieldTypeMultiLineTextProTip": "Это поле отлично подходит, когда нужно запретить редакторам применять стили к тексту.", + "fieldTypeMultiLineTextShortDesc": "Описания, резюме и краткие анонсы", + "fieldTypeMultiLineTextSubHeader": "Используется для описаний, резюме и кратких анонсов", + "fieldTypeNumberCommonUse1": "Количество товаров на складе", + "fieldTypeNumberCommonUse2": "Рейтинги", + "fieldTypeNumberCommonUse3": "Оценки", + "fieldTypeNumberCommonUse4": "Вес", + "fieldTypeNumberCommonUse5": "Рост", + "fieldTypeNumberDescription": "Это поле используется, когда требуется числовое значение.", + "fieldTypeNumberName": "Число", + "fieldTypeNumberProTip": "Числовые поля могут хранить как целые числа, так и десятичные.", + "fieldTypeNumberShortDesc": "Целые числа и числа с плавающей точкой", + "fieldTypeNumberSubHeader": "Используется для количества, возраста, оценок и т.д.", + "fieldTypeOneToManyCommonUse1": "Привязка статьи к нескольким авторам, тегам или категориям", + "fieldTypeOneToManyCommonUse2": "Привязка автора к нескольким направлениям деятельности", + "fieldTypeOneToManyDescription": "Это поле позволяет связать вашу модель с другой моделью и подключить несколько элементов вместо одного.", + "fieldTypeOneToManyName": "Связь «один ко многим»", + "fieldTypeOneToManyProTip": "Это поле удобно использовать, когда вы или ваша команда постоянно вводите одни и те же данные, например имена авторов. Например, имеет смысл создать модель «Авторы» и связаться с ней, чтобы не вводить данные вручную для каждой статьи.", + "fieldTypeOneToManyShortDesc": "Ссылка на несколько элементов контента модели", + "fieldTypeOneToManySubHeader": "Используйте это поле для ссылки на несколько элементов контента модели", + "fieldTypeOneToOneCommonUse1": "Привязка статьи к одному автору или категории", + "fieldTypeOneToOneCommonUse2": "Привязка сотрудника к одному направлению деятельности", + "fieldTypeOneToOneDescription": "Это поле идеально подходит для связи вашей модели с другой моделью. Например, для привязки блога к категории или автору.", + "fieldTypeOneToOneName": "Связь «один к одному»", + "fieldTypeOneToOneProTip": "Это поле удобно использовать, когда вы или ваша команда постоянно вводите одни и те же данные, например имена авторов. Например, имеет смысл создать модель «Авторы» и связаться с ней, чтобы не вводить данные вручную для каждой статьи.", + "fieldTypeOneToOneShortDesc": "Ссылка на один элемент контента модели", + "fieldTypeOneToOneSubHeader": "Используйте это поле для ссылки на один элемент контента модели", + "fieldTypeRepeaterCommonUse1": "Слайды", + "fieldTypeRepeaterCommonUse2": "Отзывы", + "fieldTypeRepeaterCommonUse3": "Рецепты", + "fieldTypeRepeaterCommonUse4": "Расписание мероприятий", + "fieldTypeRepeaterDescription": "Поле «Повторитель» позволяет создать группу полей для повторяющегося контента. Подходит для нескольких элементов, таких как слайды, члены команды или ответы на часто задаваемые вопросы.", + "fieldTypeRepeaterName": "Повторитель", + "fieldTypeRepeaterProTip": "Используйте поле «Повторитель» для управления списками или разделами с общей структурой, но уникальным содержимым, например рецептами или отзывами.", + "fieldTypeRepeaterShortDesc": "Повторяющийся список сгруппированных полей", + "fieldTypeRepeaterSubHeader": "Используется для групп статических полей", + "fieldTypeSingleLineTextCommonUse1": "Заголовки статей", + "fieldTypeSingleLineTextCommonUse2": "Имена авторов", + "fieldTypeSingleLineTextCommonUse3": "Названия мероприятий", + "fieldTypeSingleLineTextCommonUse4": "Метки категорий", + "fieldTypeSingleLineTextCommonUse5": "Заголовки", + "fieldTypeSingleLineTextDescription": "Поле «Однострочный текст» лучше всего подходит для короткого текстового контента, которому не требуется специальное форматирование, ссылки или медиафайлы.", + "fieldTypeSingleLineTextName": "Однострочный текст", + "fieldTypeSingleLineTextProTip": "Это поле отлично подходит, когда нужно запретить редакторам применять стили к тексту.", + "fieldTypeSingleLineTextShortDesc": "Заголовки, имена и подписи", + "fieldTypeSingleLineTextSubHeader": "Используется для заголовков, имён и подписей", + "fieldTypeSortOrderCommonUse1": "Порядок рекомендуемых товаров", + "fieldTypeSortOrderCommonUse2": "Порядок категорий", + "fieldTypeSortOrderCommonUse3": "Порядок видео в курсе", + "fieldTypeSortOrderDescription": "Иногда нужно сортировать данные не по имени или дате, а по произвольному пользовательскому порядку. В таком случае можно добавить поле порядка сортировки, которое позволяет задать порядковый номер каждого элемента контента.", + "fieldTypeSortOrderName": "Порядок сортировки", + "fieldTypeSortOrderProTip": "Значение по умолчанию можно изменить с помощью кнопок «плюс» и «минус» в виде элемента контента, а также в табличном виде.", + "fieldTypeSortOrderShortDesc": "Добавление порядка к элементам контента", + "fieldTypeSortOrderSubHeader": "Используется для упорядочивания элементов контента", + "fieldTypeUuidCommonUse1": "Идентификатор продукта", + "fieldTypeUuidCommonUse2": "Идентификатор запаса", + "fieldTypeUuidCommonUse3": "Идентификатор сотрудника", + "fieldTypeUuidDescription": "Поле UUID создаёт уникальную буквенно-цифровую строку при создании элемента. Это полезная функция для отслеживания аналитики, управления запасами, управления пользователями и т.д.", + "fieldTypeUuidName": "UUID", + "fieldTypeUuidProTip": "UUID всегда уникальны и не редактируются.", + "fieldTypeUuidShortDesc": "Создаёт уникальные нередактируемые буквенно-цифровые идентификаторы", + "fieldTypeUuidSubHeader": "Используется для присвоения уникальных идентификаторов каждому элементу контента", + "fieldTypeWysiwygCommonUse1": "Публикации в блоге", + "fieldTypeWysiwygCommonUse2": "Статьи", + "fieldTypeWysiwygCommonUse3": "Руководства", + "fieldTypeWysiwygCommonUse4": "Списки", + "fieldTypeWysiwygCommonUse5": "Описания мероприятий", + "fieldTypeWysiwygDescription": "Это поле лучше всего подходит для длинного текстового контента с несколькими заголовками, абзацами и встроенными медиафайлами: видео, изображениями или ссылками. Также можно применять расширенное форматирование: жирный шрифт, курсив и подчёркивание.", + "fieldTypeWysiwygName": "WYSIWYG", + "fieldTypeWysiwygProTip": "Это поле отлично подходит, когда нужно дать редакторам возможность применять любые стили и структурировать текст.", + "fieldTypeWysiwygShortDesc": "Длинный текст со ссылками и изображениями, например блоги", + "fieldTypeWysiwygSubHeader": "Длинный текст со ссылками и изображениями, например блоги", + "fieldValidationTitle": "Валидация поля, значения по умолчанию и прочее", + "fileExtensionsErrorMessageLabel": "Сообщение об ошибке расширений файлов", + "fileExtensionsLabel": "Расширения файлов", + "folderDeletedError": "Папка, к которой это было привязано, была удалена", + "formFieldApiCodeId": "API / Parsley Code ID", + "formFieldApiCodeIdTooltip": "Будет отображаться в ответах API.", + "formFieldApiUrl": "URL API", + "formFieldBooleanOptions": "Параметры булева поля", + "formFieldCurrencyLabel": "Валюта", + "formFieldCurrencyPlaceholder": "Выберите валюту", + "formFieldCurrencyTooltip": "Выбранный код валюты, символ и флаг будут отображаться для этого поля в элементе контента и доступны через настройки поля посредством API.", + "formFieldDefaultValue": "Значение по умолчанию", + "formFieldDescriptionLabel": "Описание", + "formFieldDescriptionTooltip": "Отображается под отображаемым ярлыком. Используйте это для предоставления инструкций авторам контента и пользователям API.", + "formFieldDisplayLabel": "Отображаемый ярлык", + "formFieldDisplayLabelTooltip": "Отображаемое имя поля в разделе «Схема».", + "formFieldDropdownOptions": "Параметры выпадающего списка", + "formFieldFieldToDisplay": "Отображаемое поле", + "formFieldFieldToDisplayPlaceholder": "Выберите поле", + "formFieldFileExtensions": "Расширения файлов", + "formFieldFileExtensionsErrorMessage": "Сообщение об ошибке расширений файлов", + "formFieldListLabel": "Добавить как столбец в таблицу", + "formFieldListSubLabel": "Отображает поле как столбец в таблице в представлении контента", + "formFieldMaxCharLimit": "Максимальное количество символов (с пробелами)", + "formFieldMaxValue": "Максимальное значение", + "formFieldMediaItemLimit": "Ограничение медиафайлов", + "formFieldMediaItemLimitTooltip": "Установите минимальное ограничение медиафайлов равным 1. Ниже этого значения оно не может быть.", + "formFieldMinCharLimit": "Минимальное количество символов (с пробелами)", + "formFieldMinValue": "Минимальное значение", + "formFieldReferenceModel": "Модель-ссылка", + "formFieldReferenceModelPlaceholder": "Выберите модель", + "formFieldRegexMatchErrorMessage": "Сообщение об ошибке совпадения Regex", + "formFieldRegexMatchPattern": "Шаблон совпадения Regex", + "formFieldRegexRestrictErrorMessage": "Сообщение об ошибке ограничения Regex", + "formFieldRegexRestrictPattern": "Шаблон ограничения Regex", + "formFieldRequiredLabel": "Обязательное поле", + "formFieldRequiredSubLabel": "Запрещает создание элемента, если поле пустое", + "formFieldSelectFolder": "Выбрать папку", + "formFieldTooltipLabel": "Подсказка", + "formFieldTooltipLabelTooltip": "Подсказка, отображаемая редакторам контента.", + "goToAllModels": "Перейти ко всем моделям", + "headerTitle": "Схема", + "headlessDescription": "Используйте Zesty как бэкенд без интерфейса с такими технологиями, как NextJS, NuxtJS, React, Swift, Gatsby, Flutter, Angular и др.", + "headlessModeDescription": "Это идеально для разработчиков, которые работают полностью вне Zesty.io с технологиями такими как NextJS, NuxtJS или Angular. Когда включён режим headless, все маршруты отображаются как JSON.\n\nПримечание: это изменение можно отменить позже в общих настройках", + "headlessSwitcherSubtitle": "Сейчас вы находитесь в режиме традиционного веб-движка. Выберите переход на гибридный режим или headless прямо сейчас. Это всегда можно изменить в общих настройках. Подробнее", + "headlessSwitcherTitle": "Хотите использовать наши headless API?", + "howIsDataStored": "Как хранятся данные?", + "hybridDescription": "Hybrid — лучшее из обоих миров. Страницы по-прежнему отображают HTML по своим маршрутам, но также могут отображать JSON с помощью простого параметра GET.", + "hybridModeDescription": "Hybrid — лучшее из обоих миров. Страницы по-прежнему отображают HTML по своим маршрутам, но также могут отображать JSON с помощью простого параметра GET. Например, /about/ вернёт HTML, а /about/?toJSON вернёт полностью гидратированный JSON-объект страницы «О нас».\n\nПримечание: это изменение можно отменить позже в общих настройках", + "inputRangeHelperText": "Задайте минимально и/или максимально допустимое значение", + "inputRangeLabel": "Ограничение диапазона ввода", + "inputRangeMaximum": "Максимум", + "inputRangeMinimum": "Минимум", + "integrationLimitItemRange": "Ограничить диапазон элементов", + "integrationLimitItemRangeDescription": "Установите минимальное и/или максимальное количество элементов", + "lastUpdated": "Последнее обновление: {{date}}", + "lastUpdatedBy": "Последнее обновление выполнено", + "lastUpdatedOn": "Последнее обновление", + "learnBestPracticesModels": "Изучайте лучшие практики создания моделей", + "learnBlocksTutorial": "Изучите основы работы с блоками с помощью обучающего руководства", + "learnMore": "Подробнее", + "limitCharacterCount": "Ограничение количества символов", + "limitCharacterCountDescription": "Задаёт минимально и/или максимально допустимое количество символов", + "listThisModel": "Включить модель в список", + "listThisModelDescription": "Включённые в список модели делают свои элементы контента доступными для программных вызовов навигации.", + "maxValueLabel": "Максимальное значение", + "mediaItemLimitLabel": "Ограничение медиаэлементов", + "mediaItemLimitTooltip": "Установите минимальный предел медиафайлов на 1. Ниже не может быть.", + "mediaRulesAddPresetLabel": "Добавить", + "mediaRulesAllowMultipleLabel": "Разрешить выбор нескольких файлов", + "mediaRulesAllowMultipleSubLabel": "Позволяет загружать несколько файлов вместо одного по умолчанию", + "mediaRulesCustomErrorMessageLabel": "Пользовательское сообщение об ошибке *", + "mediaRulesExtensionsInputLabel": "Расширения *", + "mediaRulesFileExtensionsAllowedError": "Допускаются только файлы со следующими расширениями: {{extensions}}", + "mediaRulesLimitFileTypesLabel": "Ограничить типы файлов", + "mediaRulesLimitFileTypesSubLabel": "Обеспечивает приём только определённых типов файлов", + "mediaRulesLockFolderLabel": "Привязать к папке", + "mediaRulesLockFolderSubLabel": "Обеспечивает выбор файлов только из определённой папки", + "minValueLabel": "Минимальное значение", + "modelDescriptionLabel": "Описание", + "modelDescriptionTooltip": "Отображает цель модели для помощи авторам контента", + "modelDetailsSubtitle": "Просматривайте и обновляйте основные свойства модели", + "modelDetailsTitle": "Сведения о модели", + "modelNameBlock": "Блок", + "modelNameDataset": "Набор данных", + "modelNameMultiPage": "Мультистраница", + "modelNameSinglePage": "Одиночная страница", + "modelNameTooltip": "Имя, отображаемое редакторам контента", + "modelParent": "Родительская модель", + "modelsTableColumnContentItems": "Элементы контента", + "modelsTableColumnFields": "Поля", + "modelsTableColumnName": "Название", + "modelsTableColumnType": "Тип модели", + "modelsTableColumnUpdated": "Обновлено", + "modelType": "Тип модели", + "modelTypeBlockDescription": "Создаёт коллекцию записей без URL, но с шаблоном кода", + "modelTypeBlockExamples": "например: Герои, Функции, Отзывы и т.д.", + "modelTypeBlockName": "Блочная модель", + "modelTypeDataset": "набор данных", + "modelTypeDatasetDescription": "Создаёт коллекцию записей без URL и шаблонов кода", + "modelTypeDatasetExamples": "например: Слайды, ЧЗВ, Бренды и т.д.", + "modelTypeDatasetName": "Модель набора данных", + "modelTypeLabel": "Модель {{modelType}}", + "modelTypeMultiPage": "мультистраница", + "modelTypeMultiPageDescription": "Создаёт коллекцию страниц с уникальными URL и шаблоном кода", + "modelTypeMultiPageExamples": "например: Статьи, Авторы, Продукты и т.д.", + "modelTypeMultiPageName": "Модель мультистраницы", + "modelTypeSinglePage": "одиночная страница", + "modelTypeSinglePageDescription": "Создаёт отдельные страницы с уникальными URL и шаблоном кода", + "modelTypeSinglePageExamples": "например: Главная страница, Страница «О нас» и т.д.", + "modelTypeSinglePageName": "Модель одиночной страницы", + "needHelp": "Нужна помощь?", + "noActiveFieldsInModel": "В этой модели нет активных полей.", + "noFilterResultsHeader": "Модели не найдены", + "noFilterResultsSubHeader": "Попробуйте скорректировать фильтры для поиска нужного.", + "noMatchesFound": "Совпадений не найдено.", + "noneValue": "Нет", + "noSearchResultsAlt": "Результатов поиска нет", + "noSearchResultsHeader": "По вашему запросу «{{searchTerm}}» ничего не найдено", + "noSearchResultsSubHeader": "Попробуйте скорректировать поиск. Мы рекомендуем проверить правильность написания слов или попробовать другие ключевые слова.", + "notifyCannotCreateModel": "Невозможно создать модель", + "notifyPleaseAddDisplayName": "Пожалуйста, добавьте отображаемое имя", + "ogImageFieldDescription": "Это поле позволяет задать изображение Open Graph через вкладку SEO. Изображение Open Graph (OG) — это изображение, которое отображается в публикации в социальных сетях при публикации веб-страницы.", + "ogImageFieldLabel": "Мета-изображение", + "openCodeApp": "Открыть приложение «Код»", + "openVisualLayout": "Открыть визуальный макет", + "optionalLabel": "необязательно", + "parentModel": "Родительская модель", + "parentModelTooltip": "Выбор родительской модели влияет на маршрутизацию по умолчанию и навигацию по контенту в интерфейсе", + "pleaseAddDisplayName": "Пожалуйста, добавьте отображаемое имя", + "proTip": "Совет профессионала", + "reactivateField": "Повторно активировать поле", + "reactivatingField": "Повторная активация поля", + "readDocs": "Читать документацию", + "readDocsModelTypes": "Читайте нашу документацию о различных типах моделей и их использовании", + "readFieldTypesGuide": "Читайте наше руководство по типам полей в схеме", + "referenceId": "Идентификатор-ссылка", + "referenceIdAlreadyInUse": "Этот идентификатор-ссылка уже используется. Пожалуйста, введите другой.", + "referenceIdLabel": "Идентификатор-ссылка", + "referenceIdPlaceholder": "Автоматически генерируется из отображаемого имени", + "referenceIdTooltip": "Идентификатор для доступа к этой модели через API или Parsley", + "referenceModelLabel": "Модель ссылки", + "referenceModelPlaceholder": "Выберите модель", + "regexCustomErrorMessage": "Пользовательское сообщение об ошибке *", + "regexCustomErrorMessageTooltip": "Отображается, если пользователь вводит данные, не соответствующие требованиям", + "regexInvalidHelper": "Предоставленное регулярное выражение недействительно. Пожалуйста, обратитесь к документации по regex на MDN.", + "regexKnowledgeRequired": "Требуется знание регулярных выражений (Regex). Ввод неверных шаблонов Regex может помешать полям контента принимать пользовательский ввод.", + "regexMatchErrorEmail": "Должен быть email (например, hello@zesty.io)", + "regexMatchErrorMessageLabel": "Сообщение об ошибке совпадения Regex", + "regexMatchErrorSlug": "Должен быть слаг (например, everything-about-content-marketing)", + "regexMatchErrorUrl": "Должен быть URL (например, https://www.google.com/)", + "regexMatchPatternLabel": "Шаблон совпадения Regex", + "regexMatchSpecificPattern": "Совпадение с определённым шаблоном", + "regexNotMatchingPattern": "Не соответствует ожидаемому шаблону", + "regexPattern": "Шаблон", + "regexPatternMatchingRules": "Правила сопоставления шаблонов Regex", + "regexPatternTooltip": "Введите шаблон регулярного выражения (regex) — последовательность символов для сопоставления шаблонов в строках", + "regexRestrictErrorEmail": "Не должен быть email (например, hello@zesty.io)", + "regexRestrictErrorMessageLabel": "Сообщение об ошибке ограничения Regex", + "regexRestrictErrorSlug": "Не должен быть слаг (например, everything-about-content-marketing)", + "regexRestrictErrorUrl": "Не должен быть URL (например, https://www.google.com/)", + "regexRestrictPatternLabel": "Шаблон ограничения Regex", + "regexRestrictSpecificPattern": "Ограничение определённого шаблона", + "regexSetMatchExpression": "Задайте регулярное выражение (например, email, URL и т.д.), которому должен соответствовать ввод", + "regexSetRestrictExpression": "Задайте регулярное выражение (например, email, URL и т.д.), которому ввод не должен соответствовать", + "regexType": "Тип", + "regexTypeCustom": "Пользовательский", + "regexTypeEmail": "Email", + "regexTypeSlug": "Слаг", + "regexTypeTooltip": "Выберите из списка предустановленных типов шаблонов Regex или напишите свой собственный шаблон", + "regexTypeUrl": "URL", + "relatedModelDeletedError": "Связанная модель была удалена", + "relatedModels": "Связанные модели", + "relatedModelsDescription": "Посмотреть модели, с которыми связана данная модель", + "removeField": "Удалить поле", + "renameModel": "Переименовать модель", + "renameModelDescription": "Это обновит отображаемое имя и идентификатор-ссылку модели, видимые редакторам контента и разработчикам", + "renameModelDisplayNameLabel": "Отображаемое имя", + "renameModelDisplayNameTooltip": "Имя, отображаемое редакторам контента", + "renameModelFailedNotify": "Не удалось переименовать модель", + "renameModelReferenceIdHelperText": "Имя-ссылка используется в пользовательских файлах кода и конечных точках. Обновление этого значения немедленно вступит в силу в производственной среде. Пожалуйста, согласуйте с вашим разработчиком перед внесением изменений.", + "renameModelReferenceIdLabel": "Идентификатор-ссылка", + "renameModelReferenceIdTooltip": "Идентификатор для доступа к этой модели через API или Parsley", + "renameModelTitle": "Переименовать модель", + "repeaterDataStorageDescription": "Данные хранятся в виде массива JSON-объектов, к которым можно легко обращаться как напрямую, так и через Parsley с помощью оператора each.", + "repeaterSubFieldCount_one": "{{count}} поле", + "repeaterSubFieldCount_few": "{{count}} поля", + "repeaterSubFieldCount_many": "{{count}} полей", + "repeaterSubFieldCount_other": "{{count}} полей", + "restEndpointLabel": "REST конечная точка (требует токен авторизации)", + "searchFieldTypesPlaceholder": "Поиск типов полей", + "searchModelsPlaceholder": "Поиск моделей", + "searchVariants": "Поиск вариантов", + "selectBlockType": "Выберите тип блока", + "selectedItemNotFound": "Выбранный элемент не найден: {{value}}", + "selectFieldTypeTitle": "Выберите тип поля", + "selectFolderLabel": "Выбрать папку", + "selectModelType": "Выберите тип модели", + "selectModelTypeSubtitle": "Выбранный тип модели влияет на то, как элементы контента отображаются в интерфейсе и создаются ли URL и шаблоны. Примечание: все модели можно использовать в режиме headless", + "selectParentTooltip": "Выбор родительской модели влияет на маршрутизацию по умолчанию и навигацию по контенту в интерфейсе", + "selectPlaceholder": "Выбрать", + "seoFieldLinkTitle": "SEO-заголовок ссылки", + "seoFieldMetaDescription": "SEO-мета-описание", + "seoFieldMetaKeywords": "SEO-мета-ключевые слова", + "seoFieldMetaTitle": "SEO-мета-заголовок", + "seoMetaFields": "SEO-мета-поля", + "seoMetaFieldsDescription": "Модели контента для одностраничных, многостраничных и наборных моделей включают SEO-мета-поля, доступные через API или Parsley. Эти поля помогают с обнаружением в поисковых системах и используются для массового поиска в API Zesty. Значения этих полей находятся под ключом meta в конечной точке API экземпляров.", + "showSystemFields": "Показать системные поля", + "sortLastCreated": "Последние созданные", + "sortLastModified": "Последние изменённые", + "starterBlockBlankDescription": "Пустой блок", + "starterBlockBlankLabel": "Пустой", + "starterBlockCodeTemplateLink": "Шаблон кода", + "starterBlockContactUsFormDescription": "Простая форма обратной связи для сбора лидов с любой страницы", + "starterBlockContactUsFormLabel": "Форма обратной связи", + "starterBlockCreateButton": "Создать блочную модель", + "starterBlockCreatingModelBody": "Это может занять несколько минут.", + "starterBlockCreatingModelHeading": "Создание модели", + "starterBlockDescriptionHeading": "Описание", + "starterBlockDetailsHeading": "Подробности", + "starterBlockDisplayNameInUse": "Отображаемое имя уже используется. Пожалуйста, используйте другое.", + "starterBlockDisplayNameLabel": "Отображаемое имя", + "starterBlockDisplayNamePlaceholder": "например: Главная страница, Страница «О нас», Страница контактов и т.д.", + "starterBlockDisplayNameTooltip": "Имя, отображаемое редакторам контента", + "starterBlockFeatureSideBySideImageDescription": "Функция с текстом слева и изображением справа", + "starterBlockFeatureSideBySideImageLabel": "Функция с изображением рядом", + "starterBlockFieldsHeading": "Поля", + "starterBlockFormCodeTemplate": "Шаблон кода", + "starterBlockFormCreateBlockModel": "Создать модель блока", + "starterBlockFormCreatingModel": "Создание модели", + "starterBlockFormCreatingModelDescription": "Это может занять пару минут.", + "starterBlockFormDescription": "Описание", + "starterBlockFormDetails": "Детали", + "starterBlockFormDisplayName": "Отображаемое имя", + "starterBlockFormDisplayNameInUse": "Это отображаемое имя уже используется. Пожалуйста, укажите другое.", + "starterBlockFormDisplayNamePlaceholder": "например, Главная страница, О нас, Контакты и т. д.", + "starterBlockFormDisplayNameTooltip": "Имя, которое видят редакторы контента", + "starterBlockFormFields": "Поля", + "starterBlockFormReferenceId": "Идентификатор (Reference ID)", + "starterBlockFormReferenceIdInUse": "Этот идентификатор (Reference ID) уже используется. Пожалуйста, укажите другой.", + "starterBlockFormReferenceIdPlaceholder": "Создается автоматически из отображаемого имени", + "starterBlockFormReferenceIdTooltip": "ID, используемый для доступа к этой модели через наше API или Parsley", + "starterBlockFormResources": "Ресурсы", + "starterBlockFormSeeBootstrapTemplate": "Посмотреть шаблон Bootstrap", + "starterBlockHeroImageBelowDescription": "Герой с текстом и кнопками призыва к действию сверху и изображением снизу", + "starterBlockHeroImageBelowLabel": "Изображение героя снизу", + "starterBlockReferenceIdLabel": "Идентификатор-ссылка", + "starterBlockReferenceIdPlaceholder": "Автоматически генерируется из отображаемого имени", + "starterBlockReferenceIdTooltip": "Идентификатор для доступа к этой модели через API или Parsley", + "starterBlockRefIdInUse": "Идентификатор-ссылка уже используется. Пожалуйста, используйте другой.", + "starterBlockResourcesHeading": "Ресурсы", + "starterBlockSeeBootstrapTemplate": "Посмотреть шаблон Bootstrap", + "starterBlockSideBySideHeroImageDescription": "Герой с текстом и кнопками призыва к действию слева и изображением справа", + "starterBlockSideBySideHeroImageLabel": "Герой с изображением рядом", + "starterBlockSingleTestimonialDescription": "Одна цитата-отзыв с именем человека, изображением и сведениями о компании", + "starterBlockSingleTestimonialLabel": "Одиночный отзыв", + "starterBlocksSearchPlaceholder": "Поиск вариантов", + "starterBlocksSelectionSubtitle": "Начните с пустого блока или выберите из нашей коллекции готовых дизайнерских блоков", + "starterBlocksSelectionTitle": "Выберите тип блока", + "starterBlocksSubtitle": "Начните с чистого листа или выберите блок из нашей коллекции готовых дизайнов", + "starterBlocksTutorialLink": "Узнайте основы Blocks с помощью обучающего материала", + "subFieldFormAddTitle": "Добавить поле {{name}}", + "subFieldFormEditTitle": "Редактировать {{label}}", + "subFieldFormTypeFieldLabel": "Поле {{type}}", + "switchToHeadless": "Переключиться на Headless", + "switchToHybrid": "Переключиться на Hybrid", + "switchToMode": "Переключиться на {{mode}}", + "switchWebEngineModeTitle": "Переключить режим веб-движка на {{mode}}", + "systemFieldCreatedAt": "Дата создания", + "systemFieldItemZuid": "ZUID элемента", + "systemFieldMasterZuid": "Master ZUID", + "systemFieldModelZuid": "ZUID модели", + "systemFields": "Системные поля", + "systemFieldsDescription": "Каждый элемент контента (дочерний) модели в Zesty содержит нередактируемые системные поля, отражающие состояние контента: время создания, обновления и версию. Значения этих полей находятся под ключом meta в конечной точке API экземпляров.", + "systemFieldUpdatedAt": "Дата обновления", + "systemFieldVersion": "Версия", + "tabActivityLog": "Журнал активности", + "tabDetails": "Подробности", + "tabFields": "Поля", + "tabInfo": "Информация", + "tabLearn": "Обучение", + "tabRules": "Правила", + "templateBlogDescription": "Идеально подходит для ведения блога с полями для заголовка, основного контента, главного изображения и категории.", + "templateBlogTitle": "Блог", + "templateFileEmpty": "Файл шаблона пустой", + "templateFileEmptyBody": "Пожалуйста, добавьте код для блока через приложение «Код».", + "templateLandingPageDescription": "Простая целевая страница с полями для секций «герой», «функции» и нижнего колонтитула.", + "templateLandingPageTitle": "Целевая страница", + "tooltipWhatIsAField": "Что такое поле {{fieldName}}?", + "tooltipWhatIsAnField": "Что такое поле {{fieldName}}?", + "typeTextArticleWriter": "Редактор статей", + "typeTextBlockSelector": "Выбор блока", + "typeTextBoolean": "Булево значение", + "typeTextColor": "Цвет", + "typeTextCurrency": "Валюта", + "typeTextDate": "Дата", + "typeTextDatetime": "Дата и время", + "typeTextDropdown": "Выпадающий список", + "typeTextFiles": "Файлы", + "typeTextFontawesome": "Font Awesome", + "typeTextImages": "Медиа", + "typeTextIntegration": "Интеграция", + "typeTextInternalLink": "Внутренняя ссылка", + "typeTextLink": "Внешний URL", + "typeTextMarkdown": "Markdown", + "typeTextNumber": "Число", + "typeTextOneToMany": "Один ко многим", + "typeTextOneToOne": "Один к одному", + "typeTextRepeater": "Повторитель", + "typeTextSort": "Порядок сортировки", + "typeTextText": "Однострочный текст", + "typeTextTextarea": "Многострочный текст", + "typeTextUuid": "UUID", + "typeTextWysiwygAdvanced": "WYSIWYG (расширенный)", + "typeTextWysiwygBasic": "WYSIWYG", + "uniqueField": "Уникальное поле", + "uniqueFieldDescription": "Обеспечивает невозможность наличия одинакового значения в этом поле у нескольких элементов", + "updateBlockGroupDescription": "Это влияет на то, в какой группе блок отображается на странице «Все блоки» в приложении «Блоки».", + "updateBlockGroupFailedNotify": "Не удалось обновить группу блоков", + "updateBlockGroupTitle": "Обновить группу блоков", + "updated": "Обновлено", + "updateDescriptionDialogBody": "Это обновит описание модели, отображаемое редакторам контента", + "updateDescriptionDialogTitle": "Обновить описание", + "updateDescriptionFailedNotify": "Не удалось обновить описание", + "updateDescriptionInputLabel": "Описание", + "updateDescriptionInputPlaceholder": "Для чего будет использоваться эта модель", + "updateDescriptionInputTooltip": "Отображает цель модели для помощи авторам контента", + "updateParentDialogBody": "Выбор родительской модели влияет на маршрутизацию по умолчанию и навигацию по контенту в интерфейсе.", + "updateParentDialogTitle": "Обновить родительскую модель", + "updateParentInputTooltip": "Выбор родительской модели влияет на маршрутизацию по умолчанию и навигацию по контенту в интерфейсе", + "validationCannotBeLessThanMinValue": "Не может быть меньше минимального значения", + "validationCannotExceedMaxCharCount": "Не может превышать максимальное количество символов", + "validationCannotExceedMaxChars": "Не может превышать {{maxLength}} символов", + "validationCannotExceedMaxValue": "Не может превышать максимальное значение", + "validationFieldRequired": "Это поле обязательно для заполнения", + "validationIncompleteApiConfig": "Неполная конфигурация API", + "validationInvalidNumber": "Недопустимое число", + "validationInvalidRegexPattern": "Недопустимый шаблон Regex", + "validationRequiredField": "Обязательное поле. Пожалуйста, введите значение.", + "validationSelectCurrency": "Пожалуйста, выберите валюту", + "viewAllActivity": "Посмотреть всю активность", + "viewContent": "Посмотреть контент", + "viewEndpoints": "Посмотреть конечные точки", + "viewVariants": "Посмотреть варианты", + "whatIsAFieldType": "Что такое поле {{fieldType}}?", + "whatIsAnFieldType": "Что такое поле {{fieldType}}?", + "wizardCreatingModel": "Создание модели", + "wizardEnterContentEntry": "Введите запись контента", + "wizardSelectCollectionSubtitle": "Начните с одной из наших многочисленных коллекций схем, чтобы лучше понять наш продукт", + "wizardSelectCollectionTitle": "Выберите коллекцию схем", + "wizardSuccessHeading": "Ваши модели для {{title}} теперь построены!", + "zuidLabel": "ZUID", + "zuidTooltip": "Элементы контента всегда доступны относительно своей модели, поэтому для каждого вызова требуется ZUID модели." +} diff --git a/public/locales/ru-RU/seo.json b/public/locales/ru-RU/seo.json new file mode 100644 index 0000000000..3a60edcae1 --- /dev/null +++ b/public/locales/ru-RU/seo.json @@ -0,0 +1,137 @@ +{ + "addAllRedirects": "Добавить все перенаправления", + "changeDialogBody": "Это будет постоянное перенаправление 301, обеспечивающее бесшовный переход посетителей со старого пути на новый.", + "changeDialogCreateRedirect": "Создать перенаправление", + "changeDialogDontCreate": "Не создавать", + "changeDialogNewPath": "Новый путь", + "changeDialogOldPath": "Старый путь", + "changeDialogRedirectCreated": "1 перенаправление создано", + "changeDialogTitle": "Обнаружено изменение пути URL. Создать перенаправление со старого пути на новый?", + "closeImport": "Закрыть импорт", + "columnHttpCode": "HTTP-код", + "columnIncomingPath": "Входящий путь", + "columnTarget": "Цель", + "columnType": "Тип", + "createFormAddPath": "Добавить путь", + "createFormCreateAnotherRedirect": "Создать ещё одно перенаправление", + "createFormCreateRedirect": "Создать перенаправление", + "createFormExternalUrlPlaceholder": "Введите URL (например https://www.google.com/)", + "createFormFilePathOnlyTooltip": "Только путь к файлу", + "createFormHttpCodeLabel": "HTTP-код", + "createFormIncomingPathLabel": "Входящий путь", + "createFormNotifyCreated_one": "{{count}} перенаправление создано", + "createFormNotifyCreated_few": "{{count}} перенаправления созданы", + "createFormNotifyCreated_many": "{{count}} перенаправлений создано", + "createFormNotifyCreated_other": "{{count}} перенаправления созданы", + "createFormNotifySaved": "Перенаправление сохранено: {{path}}", + "createFormPathPlaceholder": "/Введите путь URL для перенаправления", + "createFormRedirectTargetLabel": "Цель перенаправления", + "createFormTypeLabel": "Тип", + "createFormValueCannotBeModified": "Это значение нельзя изменить", + "createRedirectHeader": "Создать перенаправление", + "createRedirectIncomingPath": "Входящие пути нечувствительны к регистру, завершающие слеши обрабатываются автоматически", + "createRedirectSubHeader": "Новые перенаправления вступят в силу сразу после создания.", + "deleteRedirect": "Удалить перенаправление", + "deleteRedirectDescriptionPlural": "Удаление {{count}} перенаправлений для этих входящих путей", + "deleteRedirectDescriptionPlural_one": "Удаление {{count}} перенаправления для этого входящего пути", + "deleteRedirectDescriptionPlural_few": "Удаление {{count}} перенаправлений для этих входящих путей", + "deleteRedirectDescriptionPlural_many": "Удаление {{count}} перенаправлений для этих входящих путей", + "deleteRedirectDescriptionPlural_other": "Удаление {{count}} перенаправлений для этих входящих путей", + "deleteRedirectDescriptionSingular": "Удаление этого перенаправления для данного входящего пути", + "deleteRedirectDescriptionSuffix": "немедленно удалит их с вашего сайта. Это действие нельзя отменить.", + "deleteRedirectDescriptionSuffix_one": "немедленно удалит его с вашего сайта. Это действие нельзя отменить.", + "deleteRedirectDescriptionSuffix_few": "немедленно удалит их с вашего сайта. Это действие нельзя отменить.", + "deleteRedirectDescriptionSuffix_many": "немедленно удалит их с вашего сайта. Это действие нельзя отменить.", + "deleteRedirectDescriptionSuffix_other": "немедленно удалит их с вашего сайта. Это действие нельзя отменить.", + "deleteRedirectsButton": "Удалить перенаправления ({{count}})", + "deleteRedirectsButton_one": "Удалить перенаправление ({{count}})", + "deleteRedirectsButton_few": "Удалить перенаправления ({{count}})", + "deleteRedirectsButton_many": "Удалить перенаправления ({{count}})", + "deleteRedirectsButton_other": "Удалить перенаправления ({{count}})", + "deleteRedirectTitle_one": "Удалить {{count}} перенаправление", + "deleteRedirectTitle_few": "Удалить {{count}} перенаправления", + "deleteRedirectTitle_many": "Удалить {{count}} перенаправлений", + "deleteRedirectTitle_other": "Удалить {{count}} перенаправления", + "editRedirect": "Редактировать перенаправление", + "editRedirectHeader": "Редактировать перенаправление", + "editRedirectIncomingPath": "Завершающие слеши и варианты написания путей автоматически обрабатываются в WebEngine.", + "editRedirectSubHeader": "Изменения вступят в силу немедленно после сохранения", + "errorDeletingRedirects": "Ошибка удаления перенаправлений", + "errorDialogBody": "Следующие пути не удалось сохранить в качестве перенаправлений.", + "errorDialogNotifyCreated_one": "{{count}} перенаправление создано", + "errorDialogNotifyCreated_few": "{{count}} перенаправления созданы", + "errorDialogNotifyCreated_many": "{{count}} перенаправлений создано", + "errorDialogNotifyCreated_other": "{{count}} перенаправления созданы", + "errorDialogNotifySaved": "Перенаправление сохранено: {{path}}", + "errorDialogTitle_one": "{{count}} перенаправление не удалось создать", + "errorDialogTitle_few": "{{count}} перенаправления не удалось создать", + "errorDialogTitle_many": "{{count}} перенаправлений не удалось создать", + "errorDialogTitle_other": "{{count}} перенаправления не удалось создать", + "filterRedirects": "Фильтровать перенаправления", + "httpCode301Label": "301 - Постоянное перенаправление", + "httpCode301Permanent": "301 - Постоянное", + "httpCode302Label": "302 - Временное перенаправление", + "httpCode302Temporary": "302 - Временное", + "importCsvXml": "Импорт CSV/XML", + "importErrorDialogBodyRich": "Формат или структура файла не соответствует ожидаемому. Пожалуйста, проверьте CSV или XML файл и обратитесь к нашему <1>руководству по импорту в документации для правильного формата.", + "importErrorDialogHeader": "Ошибка импорта файла", + "importFileReadError": "Ошибка чтения файла: {{err}}", + "importInvalidFileSelected": "Выбран недопустимый файл", + "importMustBeCsv": "Импорт должен быть CSV-файлом", + "importRowCreated": "Создано", + "importRowPreExisting": "Уже существующее", + "importTableFrom": "Откуда", + "importTableTo": "Куда", + "importTableType": "Тип", + "importXmlSitemapSpec": "Импорт XML-карты сайта должен соответствовать спецификации {{specUrl}}", + "invalidUrlEnterValid": "Недействительный URL. Пожалуйста, введите корректный URL.", + "loading": "Загрузка...", + "redirectButton": "Перенаправить", + "redirectCreateFailed": "Не удалось создать перенаправление", + "redirectCreateFailedFromPath": "Не удалось создать перенаправление с пути {{path}}. {{error}}", + "redirectCreateSuccess": "Перенаправление создано", + "redirectDeleted_one": "{{count}} перенаправление удалено", + "redirectDeleted_few": "{{count}} перенаправления удалены", + "redirectDeleted_many": "{{count}} перенаправлений удалено", + "redirectDeleted_other": "{{count}} перенаправления удалены", + "redirectQueryStringPlaceholder": "Строка запроса перенаправления", + "redirectRemoveFailed": "Не удалось удалить SEO-перенаправление", + "redirectsLoadFailed": "Не удалось загрузить данные перенаправлений", + "redirectTargetHasBeenDeleted": "Цель перенаправления была", + "redirectTypeExternal": "Внешний", + "redirectTypeInternal": "Внутренний", + "redirectTypeWildcard": "Шаблонный", + "redirectUrl": "URL перенаправления", + "searchForItem": "Найти элемент", + "selectAll": "Выбрать все", + "selectedCount": "{{count}} выбрано", + "selectedCount_one": "{{count}} выбрано", + "selectedCount_few": "{{count}} выбрано", + "selectedCount_many": "{{count}} выбрано", + "selectedCount_other": "{{count}} выбрано", + "sortHttpCode": "HTTP-код", + "sortIncomingPath": "Входящий путь", + "sortTarget": "Цель", + "sortType": "Тип", + "targetErrorInvalidUrl": "Недействительный URL. Пожалуйста, введите корректный URL.", + "targetErrorUnpublished": "Этот элемент ещё не опубликован. Любые входящие пути будут вести на страницу 404 до его публикации.", + "targetOptionExternalLabel": "Внешний — ссылка на внешнюю веб-страницу", + "targetOptionInternalLabel": "Внутренний — ссылка на опубликованный элемент в вашем экземпляре", + "targetOptionWildcardLabel": "Шаблонный — обработка нескольких перенаправлений одним правилом", + "tooltipCode301": "[301] - Постоянное перенаправление: используйте, когда контент был перемещён на новое место навсегда. Поисковые системы обновят свой индекс.", + "tooltipCode302": "[302] - Временное перенаправление: используйте, когда контент временно находится в другом месте и вы планируете вернуть его обратно. Поисковые системы обычно не обновляют индекс для нового местоположения.", + "tooltipTargetTypeExternal": "Внешний, например https://zesty.org/", + "tooltipTargetTypeInternal": "Внутренний, например /about", + "tooltipTargetTypeWildcard": "Шаблонный, например /blog/*/*/", + "totalRedirects_one": "{{count}} перенаправление всего", + "totalRedirects_few": "{{count}} перенаправления всего", + "totalRedirects_many": "{{count}} перенаправлений всего", + "totalRedirects_other": "{{count}} перенаправления всего", + "tryAgain": "Попробовать снова", + "typeExternal": "Внешний", + "typeFilterExternal": "Внешний — ссылка на внешнюю веб-страницу", + "typeFilterInternal": "Внутренний — привязан к элементу в этом экземпляре", + "typeFilterWildcard": "Шаблонный — перенаправления на основе правил", + "typeInternal": "Внутренний", + "typeWildcard": "Шаблонный" +} diff --git a/public/locales/ru-RU/settings.json b/public/locales/ru-RU/settings.json new file mode 100644 index 0000000000..a22cb8e032 --- /dev/null +++ b/public/locales/ru-RU/settings.json @@ -0,0 +1,183 @@ +{ + "activeStatuses": "Активные статусы", + "activeStatusesSubtitle": "Активные статусы доступны для добавления и удаления в элементах контента.", + "AddLangCodeToPaths": "Добавлять код языка по умолчанию к пути", + "addStatusNotification": "Пользователи, имеющие право добавлять этот статус, получат уведомление.", + "AjaxCorsAllowAnyOrigin": "Пользовательские конечные точки просмотра » Разрешить любой источник (CORS)", + "AlwaysRedirectToHttps": "Всегда перенаправлять на HTTPS", + "AutoIncludeJsInHead": "Автоматически включать JavaScript в head", + "AutomatedFeedXml": "Автоматический feed.xml", + "BaseDirectory": "Базовый каталог", + "BasicContentApiEnabled": "Доступ к Instant JSON API для контента.", + "browseFontsTitle": "Обзор шрифтов", + "bynderAssetsDescription": "Оптимизируйте рабочий процесс, предоставив команде удобный доступ к медиафайлам Bynder прямо в интерфейсе Zesty", + "bynderAssetsHeading": "Используйте медиафайлы Bynder внутри Zesty", + "bynderChangePortal": "Изменить портал Bynder", + "bynderConnect": "Подключиться к Bynder", + "bynderConnectedPortal": "Ваш инстанс подключен к следующему порталу Bynder", + "bynderDisconnect": "Отключить", + "bynderIntegration": "Интеграция с Bynder", + "bynderLogoAlt": "Логотип Bynder", + "bynderPreviewAlt": "Предпросмотр Bynder", + "CanonicalTagsEnabled": "Включить канонические теги", + "categoryAnalytics": "Аналитика", + "categoryBlog": "Блог", + "categoryBynder": "Bynder", + "categoryContactForm": "Контактная форма", + "categoryCustom": "Пользовательский", + "categoryDeveloper": "Разработчик", + "categoryExporter": "Экспортер", + "categoryExtensions": "Расширения", + "categoryForCustomEndpoint": "Для пользовательского эндпоинта", + "categoryGeneral": "Общие", + "categoryGroupby": "GroupBy", + "categoryI18n": "i18n", + "categoryIntegrations": "Интеграции", + "categoryLogosection": "Раздел логотипа", + "categoryLogoSection": "Раздел логотипа", + "categoryOverrides": "Переопределения", + "categoryPetdesk": "PetDesk", + "categoryProxy": "Прокси", + "categoryRouting": "Маршрутизация", + "categorySecurity": "Безопасность", + "categorySeo": "SEO", + "categorySettingsSaved": "Настройки категории «{{category}}» сохранены", + "categorySitelink": "Sitelink", + "categorySocialLinks": "Ссылки на социальные сети", + "categoryStripe": "Stripe", + "categoryTagManagers": "Менеджеры тегов", + "categoryTwitter": "Twitter", + "categoryUps": "UPS", + "categoryVerification": "Верификация", + "categoryYoutube": "YouTube", + "ClientKey": "Клиентский ключ GroupBy", + "Collection": "Коллекция по умолчанию GroupBy", + "color": "Цвет", + "colorBlue": "Синий", + "colorDeepPurple": "Темно-пурпурный", + "colorGreen": "Зеленый", + "colorGrey": "Серый", + "colorOrange": "Оранжевый", + "colorPink": "Розовый", + "colorPurple": "Пурпурный", + "colorRed": "Красный", + "colorRequired": "Цвет обязателен", + "colorRose": "Розовый (Rose)", + "colorYellow": "Желтый", + "confirmSaveDialogBody": "Ваши изменения вступят в силу на продакшене при следующем рендеринге, истечении срока действия кэша или ручной очистке кэша.", + "confirmSaveDialogTitle": "Сохранить настройки «{{title}}»?", + "ContentSecurityPolicy": "Content-Security-Policy", + "createStatus": "Создать статус", + "deactivatedStatuses": "Деактивированные статусы", + "deactivatedStatusesSubtitle": "Эти статусы можно активировать повторно в любое время, если вы захотите снова добавлять или удалять их в элементах контента.", + "deactivateStatus": "Деактивировать статус", + "deactivateStatusBody": "Деактивация этого статуса удалит его из всех элементов контента, к которым он применен в данный момент. Вы всегда сможете активировать его снова в будущем.", + "deactivateStatusLabel": "Деактивировать статус", + "DefaultPage": "Страница языка по умолчанию", + "deleteFontConfirm": "Вы действительно хотите удалить этот шрифт?", + "describeStatusDescription": "Опишите, что означает этот статус в контексте ваших рабочих процессов", + "descriptionOptional": "Описание (необязательно)", + "Dev": "Корневой URL для прокси хранилища файлов", + "DisplayAdvertisingSupport": "Поддержка медийной рекламы", + "DntPolicy": "DNT включен или отключен", + "editStatus": "Редактировать статус", + "editStatusTitle": "Редактировать {{name}}", + "errorOccurred": "Произошла ошибка.", + "errorWithMessage": "Ошибка: {{message}}", + "FeaturePolicy": "Feature-Policy", + "filterSettings": "Фильтр настроек", + "fontInstallError": "Не удалось добавить {{family}} ({{variants}}): {{error}}", + "fontInstallSuccess": "Шрифт «{{family}} ({{variants}})» успешно установлен", + "fontPreviewText": "Это пример текста для предпросмотра", + "fontUninstalled": "Шрифт «{{fontLabel}}» успешно удален", + "fontUninstallFailed": "Не удалось удалить {{fontLabel}}: {{error}}", + "FriendlyPagination": "Удобная пагинация", + "GoogleAutoLinker": "Google Auto Linker", + "GoogleUrchinId": "Google Analytics ID", + "Gql": "Включает доступ к конечным точкам GraphQL для запуска сервера Apollo GQL", + "GqlOrigin": "Разрешенный источник GraphQL", + "GtmId": "Google Tag Manager ID", + "headTagsTitle": "Теги Head", + "Honeypot": "Honeypot формы", + "installedFontsTitle": "Установленные шрифты", + "instanceWwwDnsTooltip": "Активация настройки WWW требует настройки DNS как для основного (apex) домена, так и для поддомена www.", + "Live": "Корневой URL для прокси хранилища файлов", + "LoadFontAwesome": "Загружать Font Awesome", + "MediaProxyUrl": "URL медиапрокси", + "nameRequired": "Имя обязательно для заполнения", + "navFontsBrowse": "Обзор шрифтов", + "navFontsInstalled": "Установленные шрифты", + "navHeadTags": "Теги Head", + "navRobotsTxt": "Robots.txt", + "navWorkflows": "Рабочие процессы", + "noInstalledFonts": "Нет установленных шрифтов", + "none": "Нет", + "noneOption": "Не выбрано", + "noResultsFor": "Нет результатов по запросу «{{keyword}}»", + "noSearchResultsAlt": "Ничего не найдено", + "off": "Выкл.", + "on": "Вкл.", + "OverwriteHead": "Перезаписать файл Head", + "PreferredDomainPrefix": "Всегда добавлять WWW к моему домену?", + "prev": "Назад", + "PreviewLock": "Защита блокировки предпросмотра", + "PreviewLockPassword": "Пароль блокировки предпросмотра", + "publishRequiresStatus": "Для публикации элементов контента требуется обязательное применение этого статуса.", + "publishRequiresStatusDescription": "Это глобальная настройка. Это значит, что элементы контента не могут быть опубликованы, пока к ним не будет применен данный статус.", + "ReferrerPolicy": "Referrer-Policy", + "removeFontLabel": "Удалить шрифт", + "removeFontVariant": "Удалить вариант {{variant}}", + "removeStatusNotification": "Пользователи, имеющие право удалять этот статус, получат уведомление.", + "robotsFailedFetchSettings": "Не удалось загрузить настройки", + "robotsFailedSaveSettings": "Не удалось сохранить настройки robots.txt. {{err}}", + "robotsFindingSettings": "Поиск настроек robots.txt", + "robotsNonLiveDomainWarning": "Для неопубликованных (non-live) доменов robots.txt ВСЕГДА отключен, чтобы избежать индексации поисковыми роботами. Это относится к [hash]-dev.webengine.zesty.io, [hash]-dev.preview.zesty.io и любым зарегистрированным доменам, привязанным к ветке «dev»", + "RobotsOn": "Доступен для индексации поисковыми системами?", + "robotsPublishEventWarning": "Изменения не вступят в силу до тех пор, пока не произойдет событие публикации.", + "robotsSettingsUpdated": "Настройки файла robots.txt успешно обновлены", + "RobotsText": "Текст robots", + "robotsTopBarTitle": "Robot.txt", + "SafeEmails": "Список безопасных email-адресов для отправки", + "saved": "Сохранено", + "saveSettingsTooltip": "Сохранить настройки {{saveShortcut}}", + "searchFonts": "Поиск шрифтов", + "searchFontsPlaceholder": "Поиск шрифтов", + "searchStatuses": "Поиск статусов", + "sectionFonts": "Шрифты", + "sectionGlobalMetaSeo": "Глобальные метатеги и SEO", + "sectionInstanceSettings": "Настройки инстанса", + "sectionStyles": "Стили", + "sectionUserSettings": "Настройки пользователя", + "SendingEmail": "Отправка email", + "showDeactivated": "Показать деактивированные", + "ShowDomainInTitle": "Показывать имя домена в мета-заголовке?", + "ShowInTitle": "Показывать название сайта в мета-заголовке?", + "SiteProtocol": "HTTPS включен?", + "statusDeactivated": "Статус деактивирован: {{name}}", + "statusDeactivateFailed": "Не удалось деактивировать статус: {{name}}. Пожалуйста, попробуйте еще раз.", + "statusDescriptionPlaceholder": "Готово к проверке юридическим отделом перед публикацией", + "statusNamePlaceholder": "например, Требуется проверка контента", + "StrictTransportSecurity": "Strict-Transport-Security", + "styleCategoryBodyColorsSpacing": "Цвета и отступы Body", + "styleCategoryButtons": "Кнопки", + "styleCategoryForms": "Формы", + "styleCategoryHtmlElements": "HTML-элементы", + "styleCategoryInteractiveElements": "Интерактивные элементы", + "styleCategoryLinks": "Ссылки", + "styleCategoryNavigation": "Навигация", + "styleCategoryResponsiveGrid": "Адаптивная сетка", + "styleCategorySidebar": "Боковая панель", + "styleCategoryTypography": "Типографика", + "styleCategoryUiStyling": "Стилизация интерфейса", + "typeSomethingToPreview": "Введите текст для предпросмотра", + "unexpectedError": "Произошла непредвиденная ошибка.", + "UniversalCode": "Use Google Universal Code", + "Url": "Конечная точка клиента GroupBy", + "whichRolesCanAdd": "Какие роли могут добавлять этот статус?", + "whichRolesCanRemove": "Какие роли могут удалять этот статус?", + "workflowsHeading": "Рабочие процессы", + "workflowsRestrictedDescription": "Свяжитесь с владельцем инстанса или администраторами, указанными ниже, чтобы повысить вашу роль до Администратора или Владельца.", + "workflowsRestrictedTitle": "У вас нет прав для просмотра и редактирования рабочих процессов", + "XContentTypeOptions": "X-Content-Type-Options", + "XFrameOptions": "Заголовок: X-Frame-Options" +} diff --git a/public/locales/ru-RU/shell.json b/public/locales/ru-RU/shell.json new file mode 100644 index 0000000000..5d0938b0de --- /dev/null +++ b/public/locales/ru-RU/shell.json @@ -0,0 +1,626 @@ +{ + "accessDenied": "Доступ запрещён", + "accessDeniedImageAlt": "Страница не найдена", + "accessDeniedRoleBody": "Ваша текущая роль {{role}} не включает доступ к приложению {{app}}. Чтобы получить доступ, обратитесь к владельцу инстанса или к одному из администраторов, перечисленных ниже, и запросите повышение роли.", + "accountChangePassword": "Изменить пароль", + "accountGetHelp": "Получить помощь", + "accountLogOut": "Выйти", + "accountPreferences": "Настройки", + "accountReadDocs": "Читать документацию", + "accountViewAllInstances": "Просмотреть все инстансы", + "accountYourProfile": "Ваш профиль", + "addNewComment": "Добавить новый комментарий", + "advancedSearch": "Расширенный поиск", + "advancedSearchDescription": "По мере совместной работы в Zesty вы и ваша команда создаёте архив контента, моделей и файлов кода с возможностью поиска. Используйте форму ниже, чтобы найти нужное.", + "aiAssistantBeta": "ИИ-ассистент (бета)", + "aiDrawerPlaceholder": "Спросите что угодно, например «Адаптируй мой контент под определённую аудиторию»", + "aiGeneratingContentStatus": "Наш ИИ-ассистент создаёт ваш контент на основе ваших параметров", + "aiMistakesWarning": "Наш ИИ-ассистент может ошибаться. Проверяйте важную информацию.", + "aiOnlyInContentApp": "Доступно только в приложении контента.", + "aiScanningMetaDescription": "Наш ИИ-ассистент анализирует ваш контент и создаёт мета-описание на основе ваших параметров", + "aiScanningMetaTitle": "Наш ИИ-ассистент анализирует ваш контент и создаёт мета-заголовок на основе ваших параметров", + "aiWriteContentSubtitle": "Используйте нашего ИИ-ассистента, чтобы он написал контент за вас", + "allInstances": "Все инстансы", + "alreadyPartOfInstance": "Уже состоит в инстансе", + "announcementIgnore": "Игнорировать", + "announcementRead": "Читать объявление", + "announcementScheduleTraining": "Запланировать обучение", + "announcementShowVideo": "Показать видео", + "anyLanguage": "Любой язык", + "anyone": "Кто угодно", + "anyTime": "Любое время", + "anyType": "Любой тип", + "appErrorBody": "Эта ошибка отправлена нашей команде. Перезагрузите приложение, чтобы продолжить.", + "appErrorHeading": "Упс, что-то пошло не так", + "appLoadingFailure": "Ошибка загрузки приложения: {{message}}", + "applyAiSuggestion": "Применить", + "audiencePlaceholder": "напр. Freelancers, Designers, .....", + "autoApply": "Автоприменение", + "block": "Блок", + "blockSelectorCreateVariant": "Создать вариант", + "blockSelectorNoVariantsDescription": "Чтобы создать вариант, перейдите в приложение Blocks, выберите эту модель и нажмите кнопку создания варианта", + "blockSelectorNoVariantsTitle": "Для модели {{modelName}} еще не созданы варианты", + "blockSelectorSearchVariants": "Поиск вариантов", + "blockSelectorSelectModel": "Выберите модель", + "blockSelectorSelectModelFirst": "Сначала выберите модель, затем выберите вариант", + "blockSelectorSelectVariant": "Выберите вариант", + "blockSelectorUpdatedOnBy": "Обновлено {{date}} пользователем {{user}}", + "blockSelectorViewBlock": "Просмотреть блок", + "cancelEsc": "Отмена (ESC)", + "cannotBeUndone": "Это действие нельзя отменить", + "characterLimit": "Лимит символов", + "characterLimitTooltip": "Установите лимит символов, чтобы контролировать длину генерируемого текста", + "clearAll": "Очистить всё", + "clearChat": "Очистить чат", + "code": "Код", + "collapseSidebar": "Свернуть боковую панель", + "commentAddError": "Не удалось добавить комментарий. Проверьте подключение к интернету и повторите попытку.", + "commentPlaceholder": "Ответьте или добавьте других через @", + "confirmPublishBody": "Это немедленно сделает v{{version}} {{item}} доступной на всех ваших платформах. При необходимости вы всегда сможете отменить публикацию этого элемента позже.", + "confirmPublishTitle": "Опубликовать {{item}}", + "contactSupport": "Связаться с техподдержкой", + "contentGenerated": "Ваш контент создан!", + "contentItem": "Элемент контента", + "continueWith": "Продолжить с {{service}}", + "copyInstanceZUID": "Копировать ZUID инстанса", + "copyLink": "Скопировать ссылку", + "createContentItem": "Создать элемент контента", + "createContentItemSubtitle": "Вы можете создать элемент контента только для уже существующей модели", + "createdByTooltip": "Выберите пользователя из всех пользователей инстанса.", + "currencyFlagAlt": "Флаг {{country}}", + "currentlyLoggedInAs": "Вы вошли как {{email}}", + "customDateRange": "Произвольный диапазон дат", + "dateAfter": "После...", + "dateBefore": "До...", + "dateLast14Days": "Последние 14 дней", + "dateModified": "Дата изменения", + "dateModifiedTooltip": "Выберите диапазон дат, за который вы хотите видеть результаты.", + "dateOn": "В дату...", + "dateRange": "Диапазон дат", + "dateRangeValue": "{{from}} — {{to}}", + "dateTimeInvalidTime": "Недопустимое время", + "dateTimeStoredInUtc": "Сохранено в UTC как {{value}}", + "dateUpdated": "Дата обновления", + "deleteCommentBody": "Удаление этого комментария также приведет к удалению всех связанных с ним ответов.", + "deleteCommentTitle": "Удалить комментарий?", + "deleteForever": "Удалить навсегда", + "describeAudience": "Опишите вашу аудиторию", + "docs": "Документация", + "docsAddingImageAltText": "Добавление alt-текста к изображениям", + "docsAddingManagingContent": "Добавление и управление контентом", + "docsAuditTrailOverview": "Обзор журнала аудита", + "docsAuthApi": "Документация Auth API", + "docsBuildingSchema": "Построение схемы", + "docsCapturingFormData": "Сбор данных форм в лиды", + "docsCodeOverview": "Обзор кода", + "docsContentEntry": "Ввод контента, черновики и публикация", + "docsContentOverview": "Обзор контента", + "docsCreatingLeadForm": "Создание формы лида", + "docsEditorCodingBasics": "Основы редактора и кодирования", + "docsGettingStarted": "Начало работы", + "docsGuides": "Руководства", + "docsInstanceSettings": "Настройки инстанса", + "docsIntroduction": "Введение", + "docsLeadsOverview": "Обзор лидов", + "docsManageRedirects": "Управление перенаправлениями", + "docsMediaOverview": "Обзор медиа", + "docsRedirectsOverview": "Обзор перенаправлений", + "docsSchemaContentCode": "Схема, контент и код", + "docsSchemaOverview": "Обзор схемы", + "docsSeoRedirects": "SEO-перенаправления", + "docsSettingsOverview": "Обзор настроек", + "docsUploadMultipleImages": "Как загрузить несколько изображений", + "editorAddRemoveLink": "Добавить или удалить ссылку", + "editorAlignCenter": "Выровнять текст по центру", + "editorAlignJustify": "Выровнять текст по ширине", + "editorAlignLeft": "Выровнять текст по левому краю", + "editorAlignRight": "Выровнять текст по правому краю", + "editorBold": "Полужирный", + "editorChangeHeading": "Изменить заголовок", + "editorChangeToBlockQuote": "Сделать цитатой", + "editorChangeToCodeBlock": "Сделать блоком кода", + "editorChangeToHeadingLevel": "Сделать заголовком уровня {{level}}", + "editorChangeToParagraph": "Сделать абзацем", + "editorEmbed": "Встроить", + "editorEmbedContent": "Встроить контент", + "editorEmbedIdLabel": "Введите уникальный ID {{service}}", + "editorFloatLeft": "Обтекание слева", + "editorFloatRight": "Обтекание справа", + "editorHeading": "Заголовок", + "editorHeadingLevel": "Заголовок {{level}}", + "editorIndent": "Отступ", + "editorInsertCharacter": "Вставить символ: {{char}}", + "editorInsertEmbed": "Вставить встраивание", + "editorInsertHorizontalRule": "Вставить горизонтальную линию", + "editorInsertImage": "Вставить изображение из медиатеки", + "editorInsertLink": "Вставить ссылку", + "editorInsertSpecialCharacter": "Вставить специальный символ", + "editorInsertTable": "Вставить таблицу", + "editorItalic": "Курсив", + "editorLevel": "Уровень {{level}}", + "editorLinkNewWindow": "Открывать ссылку в новом окне браузера?", + "editorLinkUrlLabel": "На какой URL должна вести эта ссылка?", + "editorPromptColumns": "Сколько столбцов?", + "editorPromptEnterUrl": "Введите URL", + "editorPromptRows": "Сколько строк?", + "editorRedo": "Повторить отменённое изменение", + "editorSpecialCharacter": "Специальный символ", + "editorToggleEmphasis": "Переключить выделение", + "editorToggleStrikethrough": "Переключить зачёркивание", + "editorToggleStrong": "Переключить полужирный", + "editorToggleSubscript": "Переключить нижний индекс", + "editorToggleSuperscript": "Переключить верхний индекс", + "editorToggleUnderline": "Переключить подчёркивание", + "editorUnderline": "Подчёркивание", + "editorUndo": "Отменить последнее изменение", + "editorWrapInBlockQuote": "Обернуть в цитату", + "editorWrapInBulletList": "Обернуть в маркированный список", + "editorWrapInOrderedList": "Обернуть в нумерованный список", + "emailAddress": "Адрес эл. почты", + "emailCommaSeparated": "Эл. почта, через запятую или пробел", + "enterTwoFactorOtp": "Введите OTP для 2FA", + "enterValidEmail": "Введите действительный адрес электронной почты.", + "errorParsingAiResponse": "Ошибка при разборе ответа ИИ. Попробуйте ещё раз.", + "expandSidebar": "Развернуть боковую панель", + "failedAuthenticateAccount": "Не удалось аутентифицировать вашу учетную запись", + "failedCopyInstanceZUID": "Не удалось скопировать ZUID инстанса", + "failedCreateField": "Не удалось создать поле. {{error}}", + "failedFetchField": "Не удалось загрузить поле: {{error}}", + "failedFetchHeadTags": "Не удалось загрузить head-теги", + "failedFetchHeadTagsError": "Не удалось загрузить head-теги: {{error}}", + "failedFetchModel": "Не удалось загрузить модель: {{error}}", + "failedFetchModels": "Не удалось загрузить модели", + "failedFetchRecentItems": "Возникла проблема при получении недавних элементов: {{error}}", + "failedFetchUsers": "Не удалось загрузить пользователей", + "failedLoadDomains": "Не удалось загрузить домены", + "failedLoadHeadTagFile": "Не удалось загрузить файл. {{status}} | {{error}}", + "failedLoadInstancesList": "Возникла проблема при загрузке списка инстанций", + "failedLoadUserRole": "Не удалось загрузить вашу роль пользователя для этой инстанции.", + "failedRefreshCdnCache": "Не удалось обновить кэш CDN", + "failedToLoadInstance": "Не удалось загрузить инстанс", + "failedUpdateFavicon": "Не удалось обновить фавикон", + "faviconUpdated": "Фавикон обновлен", + "favorites": "Избранное", + "fieldRequiredError": "Это поле обязательно. Введите значение.", + "filterNoResultsRich": "По вашему фильтру «{{query}}» ничего не найдено", + "findIn": "Найти в {{app}}", + "flagAlt": "Флаг {{country}}", + "forbiddenLoadInstancesList": "Вам запрещено загружать список инстанций", + "forgotPassword": "Забыли пароль?", + "geminiIconAlt": "Значок Gemini", + "geminiLogoAlt": "Логотип Gemini", + "generate": "Сгенерировать", + "generateContent": "Создать контент", + "generatedContent": "Сгенерированный контент", + "generateMetaDescription": "Создать мета-описание", + "generateMetaDescriptionHelp": "Наш ИИ проанализирует ваш контент и создаст мета-описание на основе заданных ниже параметров", + "generateMetaTitle": "Создать мета-заголовок", + "generateMetaTitleHelp": "Наш ИИ проанализирует ваш контент и создаст мета-заголовок на основе заданных ниже параметров", + "generateSuggestions": "Сгенерировать предложения", + "generatingContent": "Генерация контента", + "generatingMetaDescription": "Генерация мета-описания", + "generatingMetaTitle": "Генерация мета-заголовка", + "generationStopped": "Генерация остановлена", + "goToAccounts": "Перейти к аккаунтам", + "hasAccessTo": "Имеет доступ к", + "headCreateTag": "Создать head-тег", + "headLegacyNotice": "В этом инстансе есть устаревшие head-теги. Если вы хотите изменить или удалить их, обратитесь в службу поддержки.", + "headNoTags": "Для этого элемента не создано ни одного head-тега.", + "headNotVersionedNotice": "Head-теги не версионируются. После сохранения они вступят в силу при следующем кэшировании страниц. Кэширование происходит при публикации или каждые 24 часа.", + "headTagAddAttribute": "Добавить атрибут", + "headTagAddAttributeTitle": "Добавить атрибут тега", + "headTagAttributeLabel": "Атрибут", + "headTagCreate": "Создать head-тег", + "headTagDeleteAttributeTitle": "Удалить атрибут тега", + "headTagDeleted": "Head-тег удалён", + "headTagDeleteHeadTag": "Удалить head-тег", + "headTagDeleteTag": "Удалить тег", + "headTagLabel": "Тег", + "headTagNewCreated": "Новый head-тег создан", + "headTagSave": "Сохранить head-тег", + "headTagSortLabel": "Порядок", + "headTagTypeNone": "Нет", + "headTagUpdateFailed": "Не удалось обновить head-тег. {{status}}", + "headTagUpdateSuccess": "Head-тег успешно обновлён", + "headTagValueLabel": "Значение", + "imageFieldLimit_one": "Это поле ограничено {{count}} изображением", + "imageFieldLimit_few": "Это поле ограничено {{count}} изображениями", + "imageFieldLimit_many": "Это поле ограничено {{count}} изображениями", + "imageFieldLimit_other": "Это поле ограничено {{count}} изображениями", + "insert": "Вставить", + "integrationAddDetail": "Добавить деталь", + "integrationAddDetailWithPlus": "+ Добавить деталь", + "integrationAddHeading": "Добавить заголовок", + "integrationAddHttpHeader": "Добавить HTTP-заголовок", + "integrationAddSubheading": "Добавить подзаголовок", + "integrationApiConfigurationSettings": "Настройки конфигурации API", + "integrationApiResponseArrayOfPrimitives": "API вернул массив значений типа {{kind}}. Ожидался массив объектов.", + "integrationApiResponseEmptyArray": "API вернул пустой массив. Добавьте в ответ хотя бы один элемент, чтобы настроить параметры отображения.", + "integrationApiResponseNestedArrayNoSelectableKeys": "API вернул объект, во вложенных массивах которого нет доступных для выбора ключей. Убедитесь, что хотя бы один элемент вложенного массива содержит скалярные свойства.", + "integrationApiResponseNoData": "API не вернул данные. Ожидался JSON-массив объектов.", + "integrationApiResponseNoNestedArray": "API вернул один объект без вложенного массива объектов. Ожидался либо массив в корне, либо объект, содержащий массив объектов.", + "integrationApiResponseNoSelectableKeys": "API вернул массив объектов без доступных для выбора ключей. Убедитесь, что у каждого объекта есть хотя бы одно скалярное свойство.", + "integrationApiResponseUnexpectedType": "API вернул значение типа {{type}}. Ожидался JSON-массив объектов.", + "integrationApiUrl": "URL API", + "integrationApiUrlTooltip": "URL, определяющий внешний источник данных. Должен возвращать JSON-массив плоских объектов с согласованной структурой.", + "integrationAuthenticationHeaders": "Заголовки аутентификации", + "integrationCanReconfigureLater": "Это можно перенастроить позже", + "integrationClassyCard": "Карточка Classy", + "integrationClassyCardDescription": "Показывать кампании из Classy", + "integrationConfigureDisplayOptions": "Настроить параметры отображения", + "integrationConfigureDisplayOptionsDescription": "Выберите поля, которые будут видны редакторам контента при редактировании элементов", + "integrationConnect": "Подключить", + "integrationConnectingSecureConnection": "Подождите, пока мы устанавливаем безопасное подключение", + "integrationConnectingToApiEndpoint": "Подключение к API endpoint", + "integrationConnectionFailed": "Не удалось подключиться", + "integrationConnectionFailedDescription": "Не удалось подключиться к указанному API endpoint. Причиной может быть неожиданная структура, отсутствующий или недопустимый URL либо неверные пользовательские заголовки.", + "integrationConnectionSuccessful": "Подключение выполнено", + "integrationConnectionSuccessfulDescription": "Ваш API теперь безопасно подключен и готов к использованию.", + "integrationConnectToApi": "Подключиться к API", + "integrationConnectToApiDescription": "Установите подключение к endpoint, из которого пользователи смогут выбирать элементы", + "integrationDataPath": "Путь к данным", + "integrationDetail": "Деталь", + "integrationDetails": "Детали", + "integrationDetailsCard": "Карточка деталей", + "integrationDetailsCardDescription": "Показывать элементы с несколькими деталями", + "integrationDisplayItemsAs": "Отображать элементы как", + "integrationEditApiUrl": "Изменить URL API", + "integrationEditDisplayOptions": "Изменить параметры отображения", + "integrationHeading": "Заголовок", + "integrationHttpHeadersOptional": "HTTP-заголовки (необязательно)", + "integrationImageCard": "Карточка изображения", + "integrationImageCardDescription": "Показывать элементы с изображением, заголовком и подзаголовком.", + "integrationImageUrlDescription": "Изображение будет отображаться, только если выбранное значение является URL", + "integrationInvalidResponseFormat": "Неподдерживаемый формат ответа", + "integrationInvalidResponseFormatDescription": "API подключён, но его ответ нельзя использовать для настройки этого поля.", + "integrationInvalidUrlHelper": "Введите допустимый URL, например https://api.example.org/items.json", + "integrationItemId": "ID элемента", + "integrationItemIdNotUniqueWarning": "\"{{itemIdPath}}\" не уникален среди {{count}} выбранных элементов — это может привести к неправильному распознаванию выбора.", + "integrationItemIdNotUniqueWarning_one": "\"{{itemIdPath}}\" не уникален среди {{count}} выбранных элементов — это может привести к неправильному распознаванию выбора.", + "integrationItemIdNotUniqueWarning_few": "\"{{itemIdPath}}\" не уникален среди {{count}} выбранных элементов — это может привести к неправильному распознаванию выбора.", + "integrationItemIdNotUniqueWarning_many": "\"{{itemIdPath}}\" не уникален среди {{count}} выбранных элементов — это может привести к неправильному распознаванию выбора.", + "integrationItemIdNotUniqueWarning_other": "\"{{itemIdPath}}\" не уникален среди {{count}} выбранных элементов — это может привести к неправильному распознаванию выбора.", + "integrationItemIdToolTip": "Выберите значение, уникальность которого для каждого элемента гарантирует API (например, ID базы данных), а не значение, которое просто выглядит уникальным на небольшой выборке. Неуникальный ID элемента может привести к неправильному распознаванию выбора.", + "integrationItemPreview": "Предпросмотр элемента", + "integrationItemPreviewDescription": "Как элементы будут отображаться для редакторов контента", + "integrationKey": "Ключ", + "integrationKeyPathsMismatchWarning": "Этот endpoint возвращает другую структуру. Существующие сохранённые элементы будут отображаться некорректно, и их нужно будет выбрать заново.", + "integrationKeyPreviewDescription": "Значения для ключей ниже берутся из первого элемента в ответе API.", + "integrationLearnEndpointStructures": "Узнайте о структурах endpoint, которые мы принимаем", + "integrationMuxCard": "Карточка MUX", + "integrationMuxCardDescription": "Показывать видео из MUX", + "integrationNotAvailable": "Недоступно", + "integrationOptions": "Параметры", + "integrationOtherOptions": "Другие параметры", + "integrationRecommended": "Рекомендуется", + "integrationReconfigure": "Перенастроить", + "integrationResyncValues": "Повторно синхронизировать значения", + "integrationSaveChanges": "Сохранить изменения", + "integrationSelectDataPath": "Выберите путь к данным", + "integrationSelectDisplayType": "Выберите тип отображения", + "integrationSelectedCount_one": "Выбрано: {{count}}", + "integrationSelectedCount_few": "Выбрано: {{count}}", + "integrationSelectedCount_many": "Выбрано: {{count}}", + "integrationSelectedCount_other": "Выбрано: {{count}}", + "integrationSelectKeysToDisplay": "Выберите ключи для отображения в элементе", + "integrationSelectRemoteItems": "Выбрать удаленные элементы", + "integrationSelectTitle": "Выбрать {{title}}", + "integrationShopifyCard": "Карточка Shopify", + "integrationShopifyCardDescription": "Показывать списки товаров Shopify", + "integrationSimpleCard": "Простая карточка", + "integrationSimpleCardDescription": "Показывать элементы с заголовком", + "integrationStop": "Остановить", + "integrationSubHeading": "Подзаголовок", + "integrationTextCard": "Текстовая карточка", + "integrationTextCardDescription": "Показывать элементы с заголовком и подзаголовком", + "integrationThumbnail": "Миниатюра", + "integrationTryAgain": "Повторить", + "integrationValue": "Значение", + "integrationVideoCard": "Карточка видео", + "integrationVideoCardDescription": "Показывать элементы с видео, заголовком и подзаголовком.", + "integrationViewJson": "Просмотреть JSON", + "integrationViewRawJson": "Просмотреть исходный JSON", + "integrationYoutubeCard": "Карточка Youtube", + "integrationYoutubeCardDescription": "Показывать видео из Youtube", + "internalExternalLink": "Внутренняя/Внешняя ссылка", + "internalLinkNone": "Нет", + "internalLinkSearchPlaceholder": "Не видите нужный элемент? Введите запрос для поиска в вашем API.", + "internetConnectionOff": "Интернет-соединение отключено", + "internetConnectionRestored": "Интернет-соединение восстановлено", + "invalidUrlBody": "Введенный вами URL-адрес недействителен или не существует. Если вы считаете, что это ошибка, свяжитесь с нами по адресу", + "invalidUrlHeading": "Неверный URL-адрес. Пожалуйста, проверьте URL-адрес и попробуйте еще раз.", + "invite": "Пригласить", + "inviteAs": "Пригласить как", + "inviteMorePeople": "Пригласить еще людей", + "invitePreviouslySent": "Приглашение уже отправлено", + "inviteSent": "Приглашение отправлено", + "invitesSentAsEmails": "Эти приглашения будут отправлены по электронной почте", + "invitesSentPartial_one": "Приглашение отправлено {{successCount}} из {{totalCount}} пользователя (по эл. почте)", + "invitesSentPartial_few": "Приглашения отправлены {{successCount}} из {{totalCount}} пользователей (по эл. почте)", + "invitesSentPartial_many": "Приглашения отправлены {{successCount}} из {{totalCount}} пользователей (по эл. почте)", + "invitesSentPartial_other": "Приглашения отправлены {{successCount}} из {{totalCount}} пользователей (по эл. почте)", + "invitesSentSuccess_one": "Приглашение отправлено {{count}} пользователю (по эл. почте)", + "invitesSentSuccess_few": "Приглашения отправлены {{count}} пользователям (по эл. почте)", + "invitesSentSuccess_many": "Приглашения отправлены {{count}} пользователям (по эл. почте)", + "invitesSentSuccess_other": "Приглашения отправлены {{count}} пользователям (по эл. почте)", + "inviteUsers": "Пригласить пользователей", + "itemLowercase": "элемента", + "itemMissingMetaData": "У выбранного элемента отсутствуют метаданные", + "itemMissingMetaTitle": "У элемента отсутствует мета-заголовок", + "keywords": "Ключевые слова", + "keywordsExamplePlaceholder": "напр. Hikes, snow", + "keywordsPlaceholder": "напр. Articles", + "keywordsToInclude": "Ключевые слова для включения (через запятую)", + "keywordsTooltip": "Введите один или несколько терминов, совпадающих с частью имени ресурса.", + "language": "Язык", + "languageGenerationTooltip": "Укажите язык, на котором должен быть сгенерирован текст.", + "languageTooltip": "Выберите язык, для которого вы хотите видеть результаты.", + "learnMoreAbout": "Подробнее о {{app}}", + "legacySearchCreatedByOn": "Создано {{name}} {{date}}", + "legacySearchError": "Ошибка поиска по запросу: {{term}}", + "legacySearchFilterBy": "Фильтровать по", + "legacySearchItemMissingMeta": "У элемента отсутствует мета-заголовок", + "legacySearchNoResultsRich": "По запросу ничего не найдено: {{term}}", + "legacySearchSearching": "Поиск", + "legacySearchSortBy": "Сортировать по", + "legacySearchSortCreated": "Создано", + "legacySearchSortDefault": "По умолчанию", + "legacySearchSortEdited": "Изменено", + "legacySearchSortTitle": "Заголовок", + "legacySearchSortUser": "Пользователь", + "legacySearchVersionEdited": "Версия {{version}} была изменена {{editedAgo}}", + "limit": "Лимит", + "loadingLogoAlt": "Отображение логотипа Zesty.io во время загрузки приложения", + "loginFailedContactSupport": "Не удалось войти. Обратитесь в поддержку: {{email}}.", + "loginProblem": "Возникла проблема со входом", + "loginRequestDeniedRedirecting": "Ваш запрос на вход был отклонен. Перенаправляем на страницу входа.", + "loginRequestExpiredRedirecting": "Срок действия вашего запроса на вход истек. Перенаправляем на страницу входа.", + "loginRequestValidationIssueRedirecting": "Похоже, возникла проблема при проверке этого запроса на вход. Перенаправляем на страницу входа.", + "loginSubtitle": "Снова начните усиливать мир с помощью контента", + "manageInstanceHeadTags": "Управление тегами Head инстанса", + "markAsResolved": "Отметить как решённое", + "missingMetaTitle": "Отсутствует мета-заголовок", + "missingModel": "Модель не найдена: {{ZUID}}", + "modelsInSchema": "Модели в схеме", + "moreOptions": "Дополнительные параметры", + "myNotifications": "Мои уведомления", + "navApps": "Приложения", + "navAppTooltip": "Приложение {{name}}", + "navBlocks": "Блоки", + "navigate": "Перейти", + "navLaunchpad": "Лаунчпад", + "navLeads": "Лиды", + "navRedirects": "Перенаправления", + "navRelease": "Релизы", + "navReports": "Отчёты", + "navSchema": "Схема", + "navSettings": "Настройки", + "navStudio": "Студия", + "needHelpContactSupport": "Нужна помощь? Свяжитесь с поддержкой", + "noActionsTaken": "Действия не выполнялись", + "noFilterResults": "Не найдено результатов, соответствующих вашим фильтрам", + "noFilterResultsSuggestion": "Попробуйте изменить фильтры, чтобы найти нужное", + "noInstancePermissionBody1": "У вашей учётной записи нет прав доступа к этому инстансу. Обратитесь к владельцу или администратору инстанса, чтобы вас добавили.", + "noInstancePermissionBody2": "Если вы считаете, что у вас должен быть доступ, убедитесь, что вы используете правильную учётную запись.", + "noInvitePermissionBody": "Свяжитесь с владельцами или администраторами инстанса, указанными ниже, чтобы изменить вашу роль на Admin или Owner в этом инстансе и получить права на приглашение пользователей.", + "noInvitePermissionTitle": "У вас нет разрешения приглашать пользователей", + "noPermissionImageAlt": "Нет доступа", + "noResultsFound": "Результаты не найдены", + "noSearchResultsAlt": "Нет результатов поиска", + "notFoundImageAlt": "Не найдено", + "onboardingCallAvatarAlt": "Аватар отдела продаж", + "onboardingCallButton": "Запланировать звонок", + "onboardingCallTitle": "Запланируйте ознакомительный звонок с нашей службой поддержки", + "openAiBadgeAlt": "Значок OpenAI", + "optionNumber": "Вариант {{number}}", + "or": "или", + "password": "Пароль", + "pinnedTabs": "Закреплённые вкладки", + "publishItem": "Опубликовать элемент", + "publishItems": "Опубликовать элементы", + "recentlyModifiedItems": "Недавно изменённые {{items}}", + "recentlyUploadedItems": "Недавно загруженные {{items}}", + "recentSearches": "Недавние запросы", + "refreshCdnCache": "Обновить кэш CDN", + "regenerate": "Сгенерировать заново", + "relationalAddExisting": "Добавить существующий {{label}}", + "relationalCopyZuid": "Скопировать ZUID", + "relationalCreateAddNew": "Создать и добавить новый {{label}}", + "relationalDateSaved": "Дата сохранения", + "relationalDeletedItem": "{{zuid}} (Удалено)", + "relationalDeselectAll": "Снять выделение", + "relationalDraftPreview": "Предпросмотр черновика - v{{version}}", + "relationalDragToReorder": "Перетащите для изменения порядка", + "relationalEditContentItem": "Редактировать элемент контента", + "relationalFieldsHeading": "Поля", + "relationalFilterItems": "Фильтровать элементы", + "relationalImageAlt": "Изображение {{name}}", + "relationalMoreOptions": "Дополнительно", + "relationalProductionPreview": "Предпросмотр продакшена - v{{version}}", + "relationalPublishNow": "Опубликовать сейчас", + "relationalReplace": "Заменить", + "relationalReplaceItem": "Заменить элемент", + "relationalReplacementSelected": "Элемент для замены выбран", + "relationalSchedulePublish": "Запланировать публикацию", + "relationalSelected": "{{value}} выбрано", + "relationalSelectField": "Выбрать {{label}}", + "relationalSelectReplacement": "Выберите элемент для замены", + "relationalSortBy": "Сортировка: {{value}}", + "relationalSortCreatedBy": "Создал", + "relationalSortDateCreated": "Дата создания", + "relationalSortDescription": "Описание", + "relationalSortLastPublished": "Последняя публикация", + "relationalSortLastSaved": "Последнее сохранение", + "relationalSortStatus": "Статус", + "relationalSortVersion": "Версия", + "relationalStatusNotPublished": "Не опубликовано", + "relationalStatusPublished": "Опубликовано", + "relationalStatusScheduled": "Запланировано", + "relationalVersionActionPublished": "опубликовано", + "relationalVersionActionSaved": "сохранено", + "relationalVersionActionScheduled": "запланировано к публикации", + "relationalVersionTooltip": "v{{version}} {{action}} {{date}} пользователем {{publisher}}", + "relationalViewingSeeAll": "Показано {{shown}} из {{total}} элементов. Показать все.", + "relationalViewingSeeLess": "Показано {{shown}} из {{total}} элементов. Свернуть.", + "reloadApplication": "Перезагрузить приложение", + "reopen": "Открыть заново", + "repeaterAddAnotherField": "Добавить ещё поле", + "repeaterAddRowTo": "Добавить строку в {{fieldName}}", + "repeaterCurrencyTooltip": "Просматривайте это значение в разных валютах в зависимости от вашей локали \"{{locale}}\"", + "repeaterEditRow": "Изменить {{name}}", + "repeaterFieldLoadFailed": "Не удалось загрузить поле {{label}}. Нажмите здесь, чтобы посмотреть схему поля.", + "repeaterMissingOptionsRich": "В поле {{label}} отсутствуют настройки вариантов. Измените поле, чтобы добавить значения да/нет.", + "repeaterRemoveRow": "Удалить строку", + "repeaterValueBetween": "Значение должно быть между {{min}} и {{max}}", + "resetFilters": "Сбросить фильтры", + "resourceType": "Тип ресурса", + "resourceTypeTooltip": "Используйте этот фильтр, если хотите видеть результаты поиска только для одного типа ресурса, например элемента контента, модели (схемы) или файла кода.", + "resumeSession": "Возобновить сеанс", + "rightNow": "прямо сейчас", + "roleAccessActivityLog": "Журнал активности", + "roleAccessCode": "Код (Zesty IDE)", + "roleCanAccessMedia": "Может получать доступ к медиа и добавлять файлы, но не может удалять файлы.", + "roleCannotDeleteUsers": "Не может удалять других пользователей", + "roleCannotPublish": "Не может публиковать контент. Чтобы опубликовать новый контент, участники должны отправить запрос рабочего процесса пользователю с правом публикации.", + "roleCanOnlyCreateEdit": "Может только создавать и редактировать контент", + "saveFavicon": "Сохранить фавикон", + "schedulePublishButton": "Запланировать публикацию", + "schedulePublishOnLabel": "Опубликовать", + "schedulePublishPastWarning": "Поскольку выбранное время является текущей или прошедшей датой, публикация произойдёт немедленно.", + "schedulePublishSavedInfo": "v{{version}} сохранена {{distance}} пользователем {{name}}", + "schedulePublishScheduledInfo": "v{{version}} запланирована к публикации {{date}} в {{timezone}}.", + "schedulePublishTitleSchedule": "Запланировать публикацию", + "schedulePublishTitleUnschedule": "Отменить запланированную публикацию", + "schedulePublishUnscheduleButton": "Отменить публикацию", + "schedulePublishUnscheduleInfo": "Это позволит планировать или публиковать другие версии этого элемента контента", + "searchIn": "Искать в...", + "searchInstancePlaceholder": "Поиск по инстансу {{shortcut}}", + "searchInstances": "Поиск инстансов", + "searchNoResults": "По вашему запросу «{{query}}» ничего не найдено", + "searchNoResultsRich": "По вашему запросу «{{query}}» ничего не найдено", + "searchNoResultsSuggestion": "Попробуйте изменить запрос. Рекомендуем проверить правописание всех слов или использовать другие ключевые слова.", + "searchPageByUser": " от {{user}}", + "searchPageCreated": "создано {{date}}", + "searchPageResults_one": "{{count}} результат", + "searchPageResults_few": "{{count}} результата", + "searchPageResults_many": "{{count}} результатов", + "searchPageResults_other": "{{count}} результатов", + "searchPageResultsFor_one": "{{count}} результат для «{{query}}»", + "searchPageResultsFor_few": "{{count}} результата для «{{query}}»", + "searchPageResultsFor_many": "{{count}} результатов для «{{query}}»", + "searchPageResultsFor_other": "{{count}} результатов для «{{query}}»", + "searchTabs": "Поиск вкладок", + "searchUsers": "Поиск пользователей", + "seeAllNotifications": "Смотреть все уведомления", + "seeListBelow": "Смотрите список ниже", + "selectDateRange": "Выберите диапазон дат...", + "selectFilterPlaceholder": "Введите слово для фильтрации этого списка", + "selectInstanceFavicon": "Выбрать фавикон инстанса", + "selectMetaDescription": "Выбрать мета-описание", + "selectMetaDescriptionHelp": "Выберите 1 из 3 мета-описаний, созданных нашим ИИ для вас.", + "selectMetaTitle": "Выбрать мета-заголовок", + "selectMetaTitleHelp": "Выберите 1 из 3 мета-заголовков, созданных нашим ИИ для вас.", + "selectModel": "Выбрать модель", + "selectModelError": "Пожалуйста, выберите модель, чтобы продолжить.", + "selectNoOptions": "Варианты не найдены", + "selectPlaceholder": "Выбрать", + "selectSearching": "Поиск подходящих элементов", + "sessionEndedRedirecting": "Ваш сеанс завершен. Перенаправляем на страницу входа.", + "sortMostRecentlyCreated": "Недавно созданные", + "sortMostRecentlyModified": "Недавно изменённые", + "sortValue": "Сортировка: {{value}}", + "stop": "Остановить", + "storedAs": "Сохранено как {{value}}", + "switchAccount": "Сменить учётную запись", + "switchInstance": "Сменить инстанс", + "tabActivityLog": "Журнал активности", + "tabActivityLogSuffix": "{{name}} — Журнал активности", + "tabAllMedia": "Все медиафайлы", + "tabCustomApp": "Кастомное приложение", + "tabFontsSuffix": "Шрифты {{name}}", + "tabMetrics": "Метрики", + "tabNewItem": "Новый элемент {{modelLabel}}", + "tabSearchResults": "Результаты поиска {{appName}}", + "tabSettingsSuffix": "Настройки {{name}}", + "tabsResults_one": "{{count}} результат", + "tabsResults_few": "{{count}} результата", + "tabsResults_many": "{{count}} результатов", + "tabsResults_other": "{{count}} результата", + "tinymceBlockFormatting": "Форматирование блока", + "tinymceBlockquote": "Цитата блоком", + "tinymceBulletedList": "Маркированный список", + "tinymceCenterAlign": "По центру", + "tinymceClose": "Закрыть", + "tinymceConstrainProportions": "Сохранять пропорции", + "tinymceEmbedSocialMedia": "Встроить соцсети", + "tinymceEmbedSocialMediaPost": "Встроить публикацию из соцсетей", + "tinymceJustify": "По ширине", + "tinymceLeftAlign": "По левому краю", + "tinymceLists": "Списки", + "tinymceNumberedList": "Нумерованный список", + "tinymcePreformatted": "Форматированный текст", + "tinymceResizeImage": "Изменить размер изображения", + "tinymceResizeImageDimensions": "Изменить размеры изображения", + "tinymceRightAlign": "По правому краю", + "tinymceSaveItem": "Сохранить элемент", + "tinymceSelectBynderMedia": "Выберите медиа из ресурсов Bynder", + "tinymceSelectUploadedMedia": "Выберите медиа из загруженных ресурсов", + "tinymceService": "Сервис", + "tinymceSlashBulletedList": "Маркированный список", + "tinymceSlashCodeBlock": "Блок кода", + "tinymceSlashEmbedSocialMedia": "Встроить соцсети", + "tinymceSlashEmoji": "Emoji", + "tinymceSlashHeading1": "Заголовок 1", + "tinymceSlashHeading2": "Заголовок 2", + "tinymceSlashHeading3": "Заголовок 3", + "tinymceSlashHeading4": "Заголовок 4", + "tinymceSlashHeading5": "Заголовок 5", + "tinymceSlashHeading6": "Заголовок 6", + "tinymceSlashImage": "Изображение", + "tinymceSlashLink": "Ссылка", + "tinymceSlashNumberedList": "Нумерованный список", + "tinymceSlashParagraph": "Абзац", + "tinymceSlashQuote": "Цитата", + "tinymceSlashSpecialCharacter": "Специальный символ", + "tinymceSlashTable": "Таблица", + "tinymceSlashTime": "Время", + "tinymceSlashVideo": "Видео", + "tinymceTextAlignment": "Выравнивание текста", + "tinymceUniquePostId": "Уникальный ID публикации", + "tone": "Тон", + "toneIntriguing": "Интригующий — любопытный, загадочный и заставляющий задуматься", + "toneNameIntriguing": "Интригующий", + "toneNamePlayful": "Игривый", + "toneNameProfessional": "Профессиональный", + "toneNameSensational": "Сенсационный", + "toneNameSuccinct": "Лаконичный", + "tonePlayful": "Игривый — весёлый, лёгкий и причудливый", + "toneProfessional": "Профессиональный — серьёзный, формальный и авторитетный", + "toneSensational": "Сенсационный — смелый, драматичный и привлекающий внимание", + "toneSuccinct": "Лаконичный — ясный, фактический, без преувеличений", + "toneTooltip": "Задайте желаемый стиль и настроение генерируемого текста", + "topic": "Тема", + "topicPlaceholder": "напр. Hikes in Washington", + "trySwitchingAccount": "попробуйте переключиться на другую учётную запись.", + "twoFactorCodeHelp": "Вы получите этот код на свой телефон.", + "unableToInviteUsers_one": "Не удалось пригласить {{count}} пользователя", + "unableToInviteUsers_few": "Не удалось пригласить {{count}} пользователей", + "unableToInviteUsers_many": "Не удалось пригласить {{count}} пользователей", + "unableToInviteUsers_other": "Не удалось пригласить {{count}} пользователей", + "unknownUser": "Неизвестный пользователь", + "unpinAll": "Открепить все", + "unpinAllTabsTitle": "Открепить все вкладки в меню «Показать ещё»?", + "unsavedChangesBody": "Пожалуйста, сохраните или отмените изменения перед откреплением этой вкладки", + "updateFavicon": "Обновить фавикон", + "uuidAutoGeneratedPlaceholder": "Значения поля UUID генерируются автоматически", + "uuidFieldReadOnly": "Это поле нельзя редактировать", + "viewAllLogs": "Смотреть все журналы", + "viewOpenComment": "Просмотреть открытый комментарий", + "viewSourceCommit": "Просмотреть коммит исходного кода", + "viewWebEnginePreview": "Просмотреть предпросмотр WebEngine (Stage)", + "viewYourInstances": "Просмотреть ваши инстансы", + "welcomeBack": "Здравствуйте, с возвращением!", + "wordLimit": "Лимит слов", + "wordLimitTooltip": "Установите лимит слов, чтобы контролировать длину генерируемого текста", + "zestyAccountTitle": "Аккаунт Zesty" +} diff --git a/public/locales/zh-CN/activePreview.json b/public/locales/zh-CN/activePreview.json new file mode 100644 index 0000000000..20623d0b13 --- /dev/null +++ b/public/locales/zh-CN/activePreview.json @@ -0,0 +1,16 @@ +{ + "disconnectedFromPreviewDomain": "已断开与预览域名的连接", + "findingDomain": "正在查找域名", + "landscapeMode": "横屏模式", + "loadingRelatedItem": "正在加载相关项目", + "meta": "元数据 (Meta)", + "noDevice": "无设备", + "noTemplate": "无模板", + "noTemplateSelected": "未选择模板", + "resolveInvalidFields": "请修正无效的字段值以保存并更新预览", + "saveToUpdatePreview": "保存以更新预览", + "saving": "正在保存", + "sessionNotActive": "您的登录会话已失效。请登录 Zesty.io", + "viewingMetaData": "正在查看该路由下项目的元数据 (Meta Data)", + "web": "网页 (Web)" +} diff --git a/public/locales/zh-CN/blocks.json b/public/locales/zh-CN/blocks.json new file mode 100644 index 0000000000..f0cdaf41eb --- /dev/null +++ b/public/locales/zh-CN/blocks.json @@ -0,0 +1,28 @@ +{ + "addVariantsEmptyStateBody": "在此处添加您的变体。从创建您的第一个变体开始。", + "allBlocks": "所有区块", + "allBlocksTitle": "所有区块", + "blockImageAlt": "区块图片", + "createBlock": "创建区块", + "createVariantOf": "创建 {{label}} 的变体", + "documentation": "核心文档", + "emptyItemsListAlt": "空项目列表", + "emptyStateBody": "区块模型定义了区块的结构,例如 Hero 主视觉、功能特性、客户见证等。", + "filterBlocks": "过滤区块", + "howToCreateBlock": "如何创建区块", + "howToUseBlocks": "如何使用区块功能", + "introToWebComponents": "Web 组件简介", + "noResultsAvailable": "未找到与 \"{{filter}}\" 相关的结果", + "noSearchResultsAlt": "无搜索结果", + "onboardingStep1Description": "只需点击几下,即可创建可编辑的区块(如 Hero 主视觉、客户见证、表单等)并添加到网站的任何现有页面中", + "onboardingStep1Title": "区块 (Blocks) 功能简介", + "onboardingStep2Description": "在 Schema 中创建一个区块模型并定义可编辑的字段。然后,在区块的代码模板中连接这些字段。", + "onboardingStep2Title": "如何创建区块", + "onboardingStep3Description": "可以在 Blocks 应用中创建这些区块的变体 (Variants),并通过区块内容 (Block Content) 字段或 Freestyle 将其添加到网页中。", + "onboardingStep3Title": "创建区块变体并添加到任意网页", + "searchBlocksPlaceholder": "搜索区块", + "startByCreatingBlocks": "从创建区块开始", + "startCreatingVariantsNow": "立即开始创建变体", + "takeProductTour": "进行产品导览", + "variantName": "变体名称" +} diff --git a/public/locales/zh-CN/code.json b/public/locales/zh-CN/code.json new file mode 100644 index 0000000000..c247b3c1bd --- /dev/null +++ b/public/locales/zh-CN/code.json @@ -0,0 +1,135 @@ +{ + "ajaxJsonDescription": "可通过 Parsley 访问的文件,用于创建端点或自定义体验。这些文件需要使用完整路径加扩展名来命名,如 /my/file/path.json。该文件可通过 hash-dev.preview.zesty.io/my/file/path.json 进行访问。可以使用的文件类型包括:css, html, json, js, xml, csv, tsv, xml, yaml, md, svg, rss, ics, vcf, xhtml。", + "allFiles": "所有文件", + "apiDocs": "API 文档", + "apiErrorDeletingFile": "尝试删除文件时发生 API 错误。{{fileName}}", + "apiErrorLoadingFileVersions": "加载文件版本时发生 API 错误", + "auditTrailEmptyHint": "当此文件被保存或发布时,您将能够在这里看到何时由谁进行了修改的日志。", + "auditTrailLoadError": "无法加载活动日志", + "branch": "分支", + "buildFasterBody": "开始使用 Zesty.io 的模板语言 构建动态网站和应用程序。探索我们的交互式 以获得快速的操作介绍,或者通过我们深入的 了解更多信息。", + "buildFasterHeading": "利用 Parsley,构建更快、更智能!", + "changeCombineOrder": "更改合并与预处理顺序", + "chooseFileType": "请选择文件类型", + "closeDrawer": "关闭抽屉栏 {{metaShortcut}}", + "compilesToSiteCss": "编译为 {{file}}", + "compilesToSiteJs": "编译为 {{file}}", + "couldNotLoadFile": "无法加载 {{fileType}} {{fileZUID}}", + "createFile": "创建文件", + "createFileError": "创建文件 {{name}} 失败。{{error}}", + "createFileSuccess": "已创建新文件 {{name}}", + "createNavType": "创建 {{navType}}", + "createScript": "创建脚本", + "createStylesheet": "创建样式表", + "createView": "创建视图", + "cssDescription": "层叠样式表,会自动拼接成一个单独的 css 文件 /main.css,并自动包含在 webengine 网页的 head 中。可以控制拼接的排序顺序。不进行转译。", + "deleteFile": "删除文件", + "deleteFileCdnWarning": "删除文件会将其移除并触发 CDN 刷新(purge),从而立即使生产环境完成更新。", + "deleteFileError": "删除文件 {{fileName}} 失败。{{error}}", + "deleteFileLabel": "删除文件", + "developerResources": "开发者资源", + "diffVersions": "对比版本 (Diff)", + "editItemContent": "编辑项目内容", + "editLinkedContent": "编辑关联内容", + "editLinkedSchema": "编辑关联架构", + "editRelatedContent": "编辑相关内容", + "editRelatedModel": "编辑关联模型", + "errorSavingFileSortOrder": "我们在保存文件排序顺序时遇到了错误。这很可能是由于我们系统的问题引起的。", + "failedToLoadHeaders": "加载请求头失败。{{status}}", + "fetchDevFilesError": "无法加载实例 {{type}} 的开发文件。{{status}} | {{error}}", + "fetchFileError": "无法加载文件。{{status}} | {{error}}", + "fetchFileVersionsError": "无法加载文件版本。{{status}}", + "fetchLiveFilesError": "无法加载实例 {{type}} 的生产文件。{{status}} | {{error}}", + "fileInformation": "文件信息", + "fileListHeaderFileName": "文件名称", + "fileListHeaderLastSaved": "最后保存", + "fileLocked": "文件已被锁定", + "fileLockedDescriptionRich": "自 {{formattedDate}} 以来,{{firstName}} {{lastName}} 正在查看 {{name}}。解锁此项将忽略此警告,并可能覆盖 {{firstName}} 的更改。", + "fileName": "文件名称", + "fileNavHeaderSiteCss": "Site.css", + "fileNavHeaderSiteJs": "Site.js", + "fileNavHeaderViews": "视图", + "fileNavTooltipSiteCss": "Site.css 是根据实例样式表文件动态创建的文件", + "fileNavTooltipSiteJs": "Site.js 是根据实例 JavaScript 文件动态创建的文件", + "fileNavTooltipViews": "视图是可渲染 HTML 或各种其他 MIME 类型的模板文件。", + "fileNotFound": "找不到文件。{{fileZUID}}", + "fileNotFoundToSave": "我们无法找到您尝试保存的文件。", + "fileSortOrderSaved": "文件排序顺序已保存", + "fileType": "文件类型", + "fileTypeChoose": "请选择文件类型", + "fileTypeCss": "CSS 文件 (css)", + "fileTypeCustom": "自定义文件类型 ({{extension}})", + "fileTypeCustomEndpoint": "自定义文件类型/端点 (混合扩展名)", + "fileTypeJavaScript": "JavaScript 文件 (js)", + "fileTypeLegacy": "历史遗留文件", + "fileTypeLess": "LESS 文件 (less)", + "fileTypeModelView": "模型视图", + "fileTypeScss": "SCSS 文件 (scss/sass)", + "fileTypeSnippet": "代码片段 (html)", + "fileZuid": "文件 ZUID", + "filterFiles": "过滤文件", + "findingFile": "正在查找文件", + "findingFileVersions": "正在查找文件版本", + "headerTitle": "代码", + "instantJsonApi": "Instant JSON API", + "javascriptDescription": "JavaScript 文件,会自动拼接成单个 /main.js 文件,并由 webengine 自动加载。不进行转译。", + "lastEdited": "最后编辑于", + "learnMoreParsleySyntax": "了解更多 Parsley 语法", + "learnMoreProcessingFlows": "了解更多关于处理流程的信息", + "lessDescription": "可以访问 settings > variables(设置 > 变量)。层叠样式表,会自动拼接成单个 /main.css。可以控制拼接的排序顺序和转译。", + "linkedContent": "关联内容", + "linkedContentDescription": "下方显示的是此视图关联模型的最新三条内容条目。", + "linkedSchemaBodyText": "使用下方的 Parsley 语法来引用该模型的字段。这将动态链接到字段的内容。", + "linkedSchemaTitle": "{{fileName}} 的相关模型架构", + "live": "生产环境", + "loadingFileInformation": "正在加载文件信息", + "loadVersion": "加载版本", + "modelZuid": "模型 ZUID", + "moreFileInformation": "更多文件信息", + "mustProvideFileName": "您必须为新文件指定名称", + "mustSelectFileType": "您必须选择文件类型才能创建新文件", + "newRemoteVersionNotice": "存在比您的本地更改更新的远程版本", + "noFilesFound": "未找到任何文件", + "noResultsFor": "未找到与 \"{{keyword}}\" 相关的结果", + "openDrawer": "打开抽屉栏 {{metaShortcut}}", + "openForAdditionalFileInfo": "打开以获取其他文件信息", + "orderFilesBody": "显示的顺序即为文件被处理并拼接到动态创建的 {{siteFile}} 文件中的顺序。", + "orderFilesPublishWarning": "排序之后必须执行发布,才能处理新顺序并使更改生效。", + "orderFilesSaveOrder": "保存顺序", + "orderFilesTitle": "对 {{typePathPart}} 排序", + "pleaseAddLeadingSlash": "请在文件路径前添加斜杠,例如:/{{name}}", + "previewCssWebpage": "预览 CSS 页面", + "previewFileWebpage": "预览 {{fileName}}", + "previewInstantJson": "预览 {{path}}", + "previewItemWebpage": "预览项目网页", + "previewJavascriptWebpage": "预览 Javascript 页面", + "previewJson": "预览 JSON", + "previewPathWebpage": "预览 {{path}}", + "publish": "发布", + "publishedVersion": "已发布:版本 {{n}}", + "publishFileError": "发布文件失败。{{status}} | {{error}}", + "publishFileShortcut": "发布文件 {{shortcut}}", + "publishFileSuccess": "已发布 {{fileName}} 的版本 {{latestVersion}}", + "saveAndPublish": "保存并发布", + "saveFileError": "保存文件失败。{{status}} | {{error}}", + "saveFileShortcut": "保存文件 {{shortcut}}", + "saveFileSuccess": "已保存 {{fileName}}", + "saveVersion": "保存版本", + "scssDescription": "可以访问 settings > variables(设置 > 变量)。层叠样式表,会自动拼接成单个 /main.css。可以控制拼接的排序顺序和转译。", + "searchFiles": "搜索文件", + "simplifyWorkflowBody": "探索我们精简的工作流程,并提升您的开发效率。通过我们的 了解它的工作原理。", + "simplifyWorkflowHeading": "简化您的工作流程:内置预处理功能!💻", + "snippetDescription": "可通过 Parsley 访问的文件,用于抽象通用代码或组织文件构建。例如:slider(滑块)、footer(页脚)、header(页眉)。这些也可以在 each 循环内部使用。", + "startingCodeEditor": "正在启动代码编辑器", + "unableToLoadFileLogs": "无法加载代码文件日志", + "unknown": "未知", + "unlock": "解锁", + "unsavedChangesDetail": "您有未保存的更改,如果离开此页面,这些更改将会丢失。", + "versionLabel": "版本 {{n}}", + "versionPublishedByUser": "v{{n}} 已于 {{date}} 由 {{user}} 发布", + "versionSavedByUser": "v{{n}} 已于 {{date}} 由 {{user}} 保存", + "viewingVersion": "正在查看:版本 {{n}}", + "viewNotFound": "未找到视图", + "webEngineFileLink": "WebEngine {{fileName}} 链接", + "webEngineLink": "WebEngine 链接" +} diff --git a/public/locales/zh-CN/common.json b/public/locales/zh-CN/common.json new file mode 100644 index 0000000000..8c4c86aa7e --- /dev/null +++ b/public/locales/zh-CN/common.json @@ -0,0 +1,74 @@ +{ + "add": "添加", + "apis": "API", + "back": "返回", + "cancel": "取消", + "clear": "清除", + "code": "代码", + "codeFile": "代码文件", + "codeFiles": "代码文件", + "comment": "评论", + "content": "内容", + "contentItems": "内容项", + "copied": "已复制", + "copy": "复制", + "create": "创建", + "createdBy": "创建人", + "dateAfterValue": "晚于 {{date}}", + "dateAtTime": "在 {{date}} {{time}}", + "dateBeforeValue": "早于 {{date}}", + "dateOnValue": "在 {{date}}", + "delete": "删除", + "dev": "开发", + "discard": "丢弃", + "domains": "域", + "done": "完成", + "edit": "编辑", + "getStarted": "快速开始", + "goBack": "返回上一页", + "graphqlDocs": "GraphQL 文档", + "instanceApiDocs": "Instance API 文档", + "invalidDate": "无效日期", + "last12Months": "最近 12 个月", + "last30Days": "最近 30 天", + "last3Months": "最近 3 个月", + "last7Days": "最近 7 天", + "locales": "语言设置", + "manage": "管理", + "media": "媒体", + "mediaItems": "媒体项", + "mediaRequests": "媒体请求", + "model": "模型", + "models": "模型", + "more": "更多", + "name": "名称", + "next": "下一步", + "no": "否", + "noUsersFound": "未找到用户", + "open": "打开", + "parsleyDocs": "Parsley 文档", + "platformDocs": "平台文档", + "preview": "预览", + "prod": "生产", + "remove": "移除", + "replace": "替换", + "reply": "回复", + "save": "保存", + "search": "搜索", + "searchAgain": "重新搜索", + "sortNameAToZ": "名称(A 到 Z)", + "sortNameZToA": "名称(Z 到 A)", + "stage": "测试环境", + "support": "支持", + "teams": "团队", + "today": "今天", + "unsavedChanges": "未保存的更改", + "update": "更新", + "upload": "上传", + "usage": "使用情况", + "users": "用户", + "view": "查看", + "webhooks": "Webhooks", + "yes": "是", + "yesterday": "昨天" +} diff --git a/public/locales/zh-CN/content.json b/public/locales/zh-CN/content.json new file mode 100644 index 0000000000..181f131ec4 --- /dev/null +++ b/public/locales/zh-CN/content.json @@ -0,0 +1,710 @@ +{ + "addFieldsInSchemaButton": "在架构中添加字段", + "addFieldsTitle": "为您的模型添加字段", + "analyticsAuthenticateGoogle": "使用 Google 进行身份验证", + "analyticsAvgTimeLabel": "平均时间", + "analyticsBarCountry": "国家/地区", + "analyticsBarSource": "来源", + "analyticsByDay": "每日{{type}}", + "analyticsChangeAccount": "更改 Google 账户", + "analyticsChartAvgEngagement": "平均互动时间", + "analyticsColStats": "统计数据", + "analyticsComparePage": "比较页面", + "analyticsComparePageBody": "请选择您想要与当前页面进行比较的页面", + "analyticsConnectBody": "了解您的页面流量来自何处,以及它如何随内容更改而变化。要开始,请使用与您的 Google Analytics 相关联的 Google 账户进行身份验证。", + "analyticsConnectedAccount": "您当前已连接到以下 Google 账户。", + "analyticsConnectedSubtitle": "准备好深入了解您的内容更改如何影响您的页面流量以及更多信息吧!", + "analyticsConnectedTitle": "恭喜 {{name}}!您已成功连接到 Google Analytics", + "analyticsConnectErrorSubtitle": "这可能是因为您选择的 Google 账户未设置 Google Analytics。", + "analyticsConnectErrorTitle": "哎呀,我们无法成功连接到 Google Analytics", + "analyticsConnectTitle": "连接到 Google Analytics", + "analyticsContactSupport": "联系支持", + "analyticsDashboard": "仪表板", + "analyticsDisconnectAccount": "断开账户连接", + "analyticsDisconnectBody": "断开连接意味着您将无法在 Zesty 中查看任何内容项目的分析数据。", + "analyticsDisconnectTitle": "断开 Google Analytics 账户连接?", + "analyticsGaSettings": "GA 设置", + "analyticsGoogleIconAlt": "Google Analytics 图标", + "analyticsItemMetaLine": "{{label}} • {{time}} • 由 {{user}}", + "analyticsItemNotExist": "此项目在您的实例中不存在", + "analyticsItemPublished": "项目已发布", + "analyticsLearnMore": "了解更多", + "analyticsLegendNew": "新用户", + "analyticsLegendOther": "其他", + "analyticsLegendReturning": "回访用户", + "analyticsMetricAvgDuration": "平均时长", + "analyticsMetricAvgDurationDesc": "会话时长是网站上发生用户交互的时间段。", + "analyticsMetricAvgEngagement": "平均互动时间", + "analyticsMetricAvgEngagementDesc": "平均互动时间是您的网站在用户浏览器中处于焦点状态,或移动应用在用户设备上处于前台状态的平均时间。", + "analyticsMetricBounceRate": "跳出率", + "analyticsMetricBounceRateDesc": "跳出率是指访问某个页面后未执行特定操作就离开的人的百分比。", + "analyticsMetricConversions": "转化", + "analyticsMetricConversionsDesc": "转化是您认为重要而进行计数的用户操作,例如购买、完成游戏关卡,或网站或应用的滚动活动。", + "analyticsMetricEvents": "事件", + "analyticsMetricSessions": "会话", + "analyticsMetricSessionsDesc": "Google Analytics 中的会话是指用户与您的网站进行交互的一段时间。", + "analyticsMetricViews": "浏览量", + "analyticsMetricViewsDesc": "页面浏览量定义为对您网站上某个由 Analytics 跟踪代码跟踪的页面的查看。如果用户在到达页面后点击重新加载,或导航到其他页面后又返回原始页面,则这将被计为额外的页面浏览量。", + "analyticsNewUsersDesc": "新用户是指以前从未访问过您的网站或应用的用户", + "analyticsNewUsersForRange": "{{range}}的新用户", + "analyticsNewVsReturning": "新用户与回访用户", + "analyticsPageSettingsTitle": "页面分析设置", + "analyticsPresetQuarterToDate": "本季度至今", + "analyticsPresetThisWeek": "本周(周日 - 今天)", + "analyticsPresetThisYear": "今年(1 月 - 今天)", + "analyticsPropertiesCount": "{{count}} 个媒体资源", + "analyticsPropertiesCount_other": "{{count}} 个媒体资源", + "analyticsRangeDayBeforeYesterday": "前天", + "analyticsRangeLast12Months": "过去 12 个月", + "analyticsRangeLast14Days": "过去 14 天", + "analyticsRangeLast30Days": "过去 30 天", + "analyticsRangeLast3Months": "过去 3 个月", + "analyticsRangeLast7Days": "过去 7 天", + "analyticsRangeLastQuarter": "上季度", + "analyticsRangeLastWeek": "上周", + "analyticsRangeLastYear": "去年", + "analyticsRangePrior12Months": "之前 12 个月", + "analyticsRangePrior14Days": "之前 14 天", + "analyticsRangePrior30Days": "之前 30 天", + "analyticsRangePrior3Months": "之前 3 个月", + "analyticsRangePrior7Days": "之前 7 天", + "analyticsRangeThisQuarter": "本季度", + "analyticsRangeThisWeek": "本周", + "analyticsRangeThisYear": "今年", + "analyticsRecentPublishes": "最近发布", + "analyticsReturningUsersDesc": "回访用户是指以前从未访问过您的网站或应用的用户", + "analyticsReturningUsersForRange": "{{range}}的回访用户", + "analyticsSearchProperties": "搜索 Google Analytics 媒体资源", + "analyticsSearchResults": "搜索结果", + "analyticsSelectProperty": "选择一个 Google Analytics 媒体资源", + "analyticsSelectPropertyBody": "请选择您想要查看分析和数据洞察的 Google Analytics 媒体资源", + "analyticsSourceIncreased": "{{source}} 用户增加了 {{percentage}}% — {{range}}", + "analyticsTabGainers": "上升项", + "analyticsTabLatestPublishes": "最新发布", + "analyticsTabLosers": "下降项", + "analyticsTabMostPopular": "最受欢迎", + "analyticsTabRecentEdits": "最近编辑", + "analyticsTotalSessions": "总会话数", + "analyticsTotalUsers": "用户总数", + "analyticsTryAgain": "重试", + "analyticsUnableToLoadMessage": "这可能是由于网络连接不佳,请重试。如果您仍然无法解决此问题,请联系支持。", + "analyticsUnableToLoadTitle": "无法加载分析数据", + "analyticsUsers": "用户", + "analyticsUsersBy": "按{{type}}划分的用户", + "analyticsUsersLabel": "用户", + "analyticsViewVersion": "查看版本 {{version}}", + "apiCodeIdLabel": "API / Parsley 代码 ID", + "apiCodeIdTooltip": "这将作为 API 响应中的键显示。", + "blockCreateVariant": "创建变体", + "blockSearchAgain": "重新搜索", + "blockSearchNoResults": "您的搜索 “{{search}}” 未找到任何结果", + "blockSearchNoResultsHint": "请尝试调整搜索。我们建议检查所有单词拼写是否正确,或尝试使用不同的关键字。", + "blockSearchVariants": "搜索变体", + "blocksReferencedInCodeOrFreestyle": "代码或 Freestyle 中引用的区块", + "blockTabCode": "代码", + "blockTabInfo": "信息", + "blockTabVariants": "变体", + "booleanHide": "隐藏", + "booleanShow": "显示", + "browse": "浏览", + "closeInspectorPanelAriaLabel": "关闭检查器面板", + "codeSampleBaseTemplate": "基础模板", + "codeSampleBaseTemplateTip": "使用基础模板渲染该块。这是未选择特定模板时应用的默认模板。", + "codeSampleBaseTemplateVersion": "带版本的基础模板", + "codeSampleBaseTemplateVersionTip": "使用基础模板以特定版本号渲染该块。添加版本参数可让您定位模板的特定版本。", + "codeSampleBlockSelector": "块选择器", + "codeSampleBlockSelectorTip": "使用块选择器字段的值。在创建模型时,将 \"block_selector_field\" 替换为块选择器字段的实际名称。", + "codeSampleSpecificVariant": "特定块变体", + "codeSampleSpecificVariantTip": "使用该块的特定变体。变体参数通过 ZUID 定位块的特定变体。", + "connectItem": "连接项目", + "contentFetchResourceFailed": "获取资源失败。{{status}}", + "contentSearchItemFailed": "搜索项目失败:{{error}}", + "correctFieldsBeforeSaving_other": "保存前请更正以下 {{count}} 个字段", + "csvImportColumnMismatch": "CSV 文件的列数不匹配", + "csvImportCreateItems": "创建项目", + "csvImportDuplicateColumns": "您重复使用了这些列:{{columns}}", + "csvImportEmptyFile": "您导入了一个空的 CSV 文件", + "csvImportErrorsCount": "错误 {{count}}", + "csvImportErrorsCount_other": "错误 {{count}}", + "csvImportFailureCreating": "创建项目失败:{{error}}", + "csvImportImportedCount": "已导入 {{total}} 个中的 {{count}} 个", + "csvImportImportedCount_other": "已导入 {{total}} 个中的 {{count}} 个", + "csvImportNone": "无", + "csvImportNotCsvFile": "您选择的文件不是 CSV 文件", + "csvImportOpenFile": "打开 CSV 文件", + "csvImportResolveDuplicates": "您必须解决重复列冲突", + "csvImportSelectPathPart": "您必须为 Path Part 选择一列", + "csvSettingsAllowedParams": "允许的查询参数(以逗号分隔)", + "csvSettingsAllowedParamsDesc": "仅列出以逗号分隔的参数名称。请勿包含值、与号、等号或空格。", + "csvSettingsAutoPriority": "自动设置优先级", + "csvSettingsCanonicalNotEnabled": "规范标签未启用。如需更多信息,请阅读", + "csvSettingsCanonicalOff": "关闭", + "csvSettingsCanonicalOnAllow": "开启 - 允许某些参数", + "csvSettingsCanonicalOnCustom": "开启 - 自定义路径或自定义 URL", + "csvSettingsCanonicalOnIgnore": "开启(忽略查询参数)", + "csvSettingsCustomPathDesc": "对于自定义路径:以正斜杠开头。对于自定义 URL:以 http:// 或 https:// 开头", + "csvSettingsCustomPathLabel": "自定义路径值或 URL", + "csvSettingsMetaLinkText": "Meta 链接文本", + "csvSettingsNoSitemap": "不在站点地图中显示", + "csvSettingsParentZuid": "父级 ZUID", + "csvSettingsPathPart": "路径部分", + "currencyLocaleTooltip": "根据您的区域设置 \"{{locale}}\" 以不同货币查看此值", + "deleteItemFailure": "删除项目失败:{{statusText}}", + "deleteItemSuccess": "项目删除成功", + "disconnect": "断开连接", + "editFieldButton": "编辑字段", + "editorTypeHtml": "HTML", + "editorTypeInline": "内联", + "editorTypeMarkdown": "Markdown", + "editorTypeWysiwyg": "WYSIWYG", + "elementNotEditableHere": "此元素无法在此处编辑。", + "emptyCreateModel": "请创建一个新的内容模型", + "errorPublishing": "发布“{{title}}”时出错", + "errorScheduling": "排期发布“{{title}}”时出错", + "errorUnpublishing": "取消发布“{{title}}”时出错", + "errorUnschedulingVersion": "取消版本 {{version}} 的排期发布时出错", + "exceedingMaxLength_other": "超出 {{count}} 个字符。", + "failedFetchItemPublishing": "获取项目发布状态失败:{{error}}", + "failedFetchItemPublishings": "{{status}}:获取项目多个发布状态失败:{{error}}", + "failedFetchItemPublishingsError": "获取项目多个发布状态失败:{{error}}", + "failedFetchModelPublishings": "获取模型内项目的多个发布状态失败:{{error}}", + "failedLoadingField": "加载字段 {{label}} 失败。点击此处查看字段架构。", + "fieldAddedOnLabel": "字段添加于", + "fieldMetaArticleWriterDescription": "长篇文章内容", + "fieldMetaBlockSelectorDescription": "可复用的内容块", + "fieldMetaColorDescription": "颜色值", + "fieldMetaCurrencyDescription": "货币值", + "fieldMetaDateDescription": "日历日期", + "fieldMetaDatetimeDescription": "日期和时间", + "fieldMetaDropdownDescription": "从列表中选择一项", + "fieldMetaImagesDescription": "来自素材库的媒体", + "fieldMetaInternalLinkDescription": "指向其他页面的链接", + "fieldMetaLinkDescription": "外部 URL", + "fieldMetaMarkdownDescription": "Markdown 格式的文本", + "fieldMetaNumberDescription": "整数或小数", + "fieldMetaOneToManyDescription": "指向相关项目的链接", + "fieldMetaOneToOneDescription": "指向一个相关项目的链接", + "fieldMetaRepeaterDescription": "可重复的字段组", + "fieldMetaSortDescription": "手动排序顺序", + "fieldMetaTextareaDescription": "纯多行文本", + "fieldMetaTextDescription": "标题、名称和标题文字", + "fieldMetaUuidDescription": "唯一标识符", + "fieldMetaWysiwygDescription": "带格式的富文本", + "fieldMetaYesNoDescription": "是 / 否开关", + "fieldTypeLabel": "{{type}} 字段", + "fieldZuidLabel": "字段 ZUID", + "fieldZuidTooltip": "分配给每个字段的唯一哈希值。可用于通过我们的 API 访问字段的信息。", + "footerTagline": "Agentic Studio 来自 Content.One", + "hideDialogHideBody1": "这会将 {{label}} 内容项从页面部分移动到下方的隐藏项目部分。我们建议仅使用此功能来整理内容导航树,移除您不常访问的项目。", + "hideDialogHideBody2": "这不会从您的实时网站或应用中隐藏任何文章。", + "hideDialogHideButton": "隐藏 {{label}}", + "hideDialogHideTitle": "隐藏 {{label}}?", + "hideDialogUnhideBody": "这会将 {{label}} 内容项从隐藏项目部分移动到上方的页面部分。", + "hideDialogUnhideButton": "取消隐藏 {{label}}", + "hideDialogUnhideTitle": "取消隐藏 {{label}}?", + "invalidFieldValuesTitle": "由于字段值无效,无法保存该项目。", + "itemCreateAddNew": "创建并新增", + "itemCreateCannotSaveError": "无法保存:{{error}}", + "itemCreateCreatedItem": "已创建项目:{{name}}", + "itemCreateImproveWithAI": "用 AI 改进", + "itemCreateLoading": "正在创建新项目", + "itemCreatePublishAddNew": "创建、发布并新增", + "itemCreatePublishNow": "创建并立即发布", + "itemCreateSchedulePublish": "创建并安排发布", + "itemCreateSchedulePublishAddNew": "创建、安排发布并新增", + "itemCreateTitleItem": "创建{{label}}项目", + "itemCreateTitleVariant": "创建变体", + "itemCreateUnknownIssue": "创建新项目时出现未知问题", + "itemEditActions": "操作", + "itemEditAddStatus": "添加状态", + "itemEditAlsoPublishRelatedItems": "同时发布相关项目", + "itemEditAutomatedNavigationOrder": "自动导航顺序", + "itemEditAutomatedNavigationOrderTooltip": "自动导航顺序控制自动 parsley {{navigation}} 和 {{sectionlinks}} 的输出。也可以在 each 循环中使用,例如:{{each items as items sort by z.sort}} 调用。", + "itemEditAvailableInLoops": "可用于循环", + "itemEditAvailableInLoopsTooltip": "确定此项目是否可用于 Parsley 循环。常见示例是在文章列表页中将博客文章列为一个条目。", + "itemEditByUser": "由 {{name}}", + "itemEditCannotPublishStatus": "无法发布:“{{title}}”。没有允许发布的状态", + "itemEditCannotSaveTitle": "无法保存:{{title}}", + "itemEditCannotSaveTooManySelected": "无法保存字段。请减少所选项目总数。", + "itemEditCannotSaveValueTooLong": "无法保存字段。值太长。", + "itemEditCannotSaveWithError": "无法保存:{{title}} - {{error}}", + "itemEditCdnDescription": "强制 CDN 刷新此项目的缓存。CDN 缓存可能需要几秒到几分钟,因为此项目会在整个全球网络中重新缓存。", + "itemEditCdnPurgeError": "尝试清除 CDN 缓存时出现问题", + "itemEditCdnPurgeSuccess": "该项目已从 CDN 缓存中清除", + "itemEditCdnTitle": "CDN", + "itemEditCloseInfoBar": "关闭信息栏", + "itemEditContinueEditing": "继续编辑", + "itemEditCreatedAt": "创建时间", + "itemEditDeleteConfirmTitle": "确定要删除此项目吗:\n{{title}}", + "itemEditDeleteContentItemDescription": "删除此项目会将其从整个站点的所有位置移除,并使其无法通过 API 请求访问。此操作无法撤销。", + "itemEditDeleteContentItemTitle": "删除内容项目", + "itemEditDeletedNotFound": "项目已被删除", + "itemEditDeleteItem": "删除项目", + "itemEditDeleteThing": "删除 {{thing}}", + "itemEditDeleteVariant": "删除变体", + "itemEditDeleteWidgetDescription": "删除此内容?它将从整个站点的所有位置移除,并无法通过 API 请求访问。", + "itemEditDontSave": "不保存", + "itemEditDraftHistoryTitle": "草稿历史", + "itemEditDraftPreviewVersion": "草稿预览 - v{{version}}", + "itemEditDuplicateContentItemTitle": "复制内容项目", + "itemEditDuplicateDescription": "这将立即创建并保存此项目的副本。", + "itemEditDuplicateFailed": "复制项目失败。", + "itemEditDuplicateItem": "复制项目", + "itemEditDuplicateVariant": "复制变体", + "itemEditEditCode": "编辑代码", + "itemEditEditStatuses": "编辑状态", + "itemEditFailedFetchNav": "获取导航失败", + "itemEditFailedLoadFields": "加载字段失败", + "itemEditFetchingPublishings": "正在获取发布记录", + "itemEditGoOffline": "下线", + "itemEditGoOnline": "上线", + "itemEditInfoTitle": "信息", + "itemEditInstantApi": "即时 API", + "itemEditItem": "项目", + "itemEditItemLockedDescription": "{{name}} 自 {{viewedAt}} 起正在查看此项目。解锁此项目会忽略此警告,并可能覆盖 {{firstName}} 的更改。", + "itemEditItemLockedTitle": "项目已锁定", + "itemEditLinksTitle": "链接", + "itemEditLive": "在线", + "itemEditLivePublished": "已在线发布", + "itemEditManagePublishState": "管理发布状态", + "itemEditManagePublishStatus": "管理发布状态", + "itemEditMetaAddImage": "添加元图像", + "itemEditMetaAddIncomingPath": "添加传入路径", + "itemEditMetaAdvancedSettings": "高级设置", + "itemEditMetaAdvancedSettingsDescription": "进一步优化内容项的 SEO", + "itemEditMetaAiAssistedPrimary": "是,使用 AI 元数据助手改进", + "itemEditMetaAiAssistedSecondary": "AI 将扫描你的内容并为你生成元数据", + "itemEditMetaAiPromptDatasetSuffix": "改进内部内容搜索。", + "itemEditMetaAiPromptDescriptionPrefix": "AI 助手将扫描你的内容并改进元标题和描述,以帮助", + "itemEditMetaAiPromptSeoSuffix": "提升搜索引擎可见性。", + "itemEditMetaAiPromptTitle": "让 AI 编写你的元数据?", + "itemEditMetaApiFailedTryAgain": "API 未返回数据。请重试。", + "itemEditMetaApiFailedWithStatus": "API 未返回数据 {{status}}", + "itemEditMetaCanonicalAllowedParameters": "允许的查询参数(逗号分隔)", + "itemEditMetaCanonicalAllowedParametersDescription": "只列出以逗号分隔的参数名称。不要包含值、& 符号、等号或空格。", + "itemEditMetaCanonicalAllowedParametersPlaceholder": "页面,类别", + "itemEditMetaCanonicalCustomPath": "自定义路径值或 URL", + "itemEditMetaCanonicalCustomPathDescription": "自定义路径:以斜杠开头。自定义 URL:以 http:// 或 https:// 开头", + "itemEditMetaCanonicalCustomPathPlaceholder": "/page/example/ 或 https://example.com/", + "itemEditMetaCanonicalEnableDocsLink": "启用规范标签", + "itemEditMetaCanonicalNotEnabled": "规范标签未启用。更多信息请阅读", + "itemEditMetaCanonicalOff": "关闭", + "itemEditMetaCanonicalOnAllowParameters": "开启 - 允许某些参数", + "itemEditMetaCanonicalOnCustomPath": "开启 - 自定义路径或自定义 URL", + "itemEditMetaCanonicalOnIgnoreQuery": "开启(忽略查询参数)", + "itemEditMetaCanonicalTag": "规范标签", + "itemEditMetaCanonicalTagTooltip": "规范标签帮助搜索引擎理解权威链接,并可帮助避免重复内容问题。Zesty.io 会根据你的设置按需自动创建标签。", + "itemEditMetaContentAndMetaMatchedWords": "内容与元数据匹配词", + "itemEditMetaCustomizeImage": "自定义图像", + "itemEditMetaDeleteRedirect": "删除重定向", + "itemEditMetaDescription": "元描述", + "itemEditMetaDescriptionFoundLeftGuillemet": "发现 << 字符。元描述中不允许使用这些特殊字符。", + "itemEditMetaDescriptionFoundOeLigature": "发现 OE 连字。元描述中不允许使用这些特殊字符。", + "itemEditMetaDescriptionFoundRightGuillemet": "发现 >> 字符。元描述中不允许使用这些特殊字符。", + "itemEditMetaDescriptionFoundSmallOeLigature": "发现 oe 连字。元描述中不允许使用这些特殊字符。", + "itemEditMetaDescriptionFoundSmartDoubleQuotes": "发现 Microsoft 智能双引号或撇号。元描述中不允许使用这些特殊字符,因为它们可能无法正确呈现。请使用直引号。", + "itemEditMetaDescriptionFoundSmartSingleQuotes": "发现 Microsoft 智能单引号或撇号。元描述中不允许使用这些特殊字符,因为它们可能无法正确呈现。请使用直引号。", + "itemEditMetaDescriptionPlaceholder": "这是搜索引擎应在结果中使用的描述", + "itemEditMetaDescriptionTooltip": "此描述会作为标题下方的文本片段显示在搜索引擎和社交媒体预览中。元描述的理想长度为 50 到 160 个字符。", + "itemEditMetaEditRedirect": "编辑重定向", + "itemEditMetaFilterWords": "筛选词语", + "itemEditMetaHttpCode": "HTTP 代码", + "itemEditMetaImage": "元图像", + "itemEditMetaImageFileExtensionsError": "仅允许使用以下扩展名的文件:.png、.jpg、.jpeg、.svg、.gif、.tif、.webp、.avif", + "itemEditMetaImageTooltip": "此图像会显示在搜索引擎和社交媒体预览中。建议图像至少为 1200px x 630px,并使用 1.91:1 宽高比。", + "itemEditMetaIncomingPath": "传入路径", + "itemEditMetaIncomingRedirects": "传入重定向", + "itemEditMetaIncomingRedirectsDescription": "管理指向此内容项的重定向", + "itemEditMetaKeywords": "元关键词", + "itemEditMetaKeywordsPlaceholder": "逗号, 分隔, 关键词", + "itemEditMetaKeywordsTooltip": "关键词是描述页面的逗号分隔词语或短语。Google 已在 2011 年否定关键词;关键词只会影响页面排名。请谨慎使用。", + "itemEditMetaManualPrimary": "不,我会自己改进和编辑", + "itemEditMetaManualSecondary": "如果你已经知道想要的元数据,这很合适", + "itemEditMetaMostMentionedWords": "内容项中最常提到的词", + "itemEditMetaMostMentionedWordsDescription": "检查你的重点关键词是否至少出现 2 次。", + "itemEditMetaNavigationLinkText": "导航链接文本", + "itemEditMetaNavigationLinkTextPlaceholder": "此文本用于应用导航", + "itemEditMetaNavigationLinkTextTooltip": "此项在 Zesty 导航中显示的标题,也用于 Parsley navigation() 函数生成的导航。", + "itemEditMetaNoMatchingWords": "没有匹配词", + "itemEditMetaNonFillerWords": "非填充词", + "itemEditMetaNoRepeatedWords": "内容项中没有出现 2 次或更多的词", + "itemEditMetaOgDescriptionTooltip": "此标题显示在 Open Graph 社交媒体预览(如 Facebook)的标题下方。", + "itemEditMetaOgTitleTooltip": "此标题显示在 Open Graph 社交媒体预览中(如 Facebook)。", + "itemEditMetaPageParent": "父页面", + "itemEditMetaPageParentTooltip": "设置此内容项页面将嵌套在哪个页面下。这会影响自动生成的导航和此页面的 URL 结构。", + "itemEditMetaParentMissing": "父页面不存在或已被删除", + "itemEditMetaSeeLess": "查看更少", + "itemEditMetaSeeMore": "查看更多", + "itemEditMetaSeoOpenGraphDescription": "指定此页面的标题和描述。你可以在右侧预览中查看它们在搜索引擎结果页 (SERP) 和社交内容中的显示效果。", + "itemEditMetaSeoOpenGraphSettings": "SEO 和 Open Graph 设置", + "itemEditMetaSitemapAutomaticallySetPriority": "自动设置优先级", + "itemEditMetaSitemapDoNotDisplay": "不在站点地图中显示", + "itemEditMetaSitemapPriority": "站点地图优先级", + "itemEditMetaSitemapPriorityTooltip": "站点地图优先级帮助搜索引擎了解应多久抓取一次你网站上的页面。", + "itemEditMetaTcDescriptionTooltip": "此标题显示在 Twitter Card 社交媒体预览的标题下方。", + "itemEditMetaTcTitleTooltip": "此标题显示在 Twitter Card 社交媒体预览中。", + "itemEditMetaTitle": "元标题", + "itemEditMetaTitlePlaceholder": "这是搜索引擎应在结果中使用的标题", + "itemEditMetaTitleTooltip": "此标题会显示在搜索引擎结果和社交媒体预览中。搜索引擎最多显示 65 个字符,但标题可以更长。", + "itemEditMetaUniqueWords": "唯一词", + "itemEditMetaUrlPathPart": "URL 路径部分", + "itemEditMetaUrlPathPartTooltip": "也称为 URL slug,是 URL 地址的最后一部分,用作页面的唯一标识。它必须在你的实例中唯一、使用小写,并且不能包含非字母数字字符。这有助于创建对 SEO 友好的结构化 URL。", + "itemEditMetaUrlPathTaken": "此 URL 路径部分已被使用。请输入不同的 URL 路径部分。", + "itemEditMetaUrlSettings": "URL 设置", + "itemEditMetaUrlSettingsDescription": "定义网页的 URL", + "itemEditMetaWords": "词语", + "itemEditMissingRequiredData": "必填字段缺少数据", + "itemEditMoreOptions": "更多选项", + "itemEditNoDraftActivityLogs": "此内容没有活动日志编辑记录。", + "itemEditNoPermissionAddStatus": "没有添加此状态的权限", + "itemEditNoPermissionRemoveStatus": "没有移除此状态的权限", + "itemEditNotFound": "未找到项目", + "itemEditOffline": "离线", + "itemEditOn": "于", + "itemEditOpenDuoMode": "打开 DUO 模式", + "itemEditOpenInfoBar": "打开信息栏", + "itemEditParsleyBehaviorsTitle": "Parsley 行为", + "itemEditPreviewPage": "预览页面", + "itemEditPreviewVersion": "预览 {{version}}", + "itemEditProductionPreviewVersion": "生产预览 - v{{version}}", + "itemEditPublishHistoryTitle": "发布历史", + "itemEditPublishingErrorFallback": "发布时发生错误。请重试。", + "itemEditPublishingZuid": "发布 ZUID", + "itemEditPublishItem": "发布项目", + "itemEditPublishRelatedItemsDescription": "这将发布下方列表中选中的所有项目", + "itemEditQuickShareTitle": "快速分享", + "itemEditRefreshCachedItem": "刷新缓存项目", + "itemEditRefreshingCachedItem": "正在刷新缓存项目", + "itemEditRenameVariant": "重命名变体", + "itemEditRenameVariantDescription": "这将更新显示给内容编辑者的变体标题", + "itemEditSaved": "已保存", + "itemEditSavedNotification": "项目已保存:{{title}}", + "itemEditSaveItem": "保存项目", + "itemEditSavePublishItem": "保存并发布项目", + "itemEditScheduleUnpublish": "计划取消发布", + "itemEditSearchStatus": "搜索状态", + "itemEditSelectFieldsForReview": "选择要审阅的字段", + "itemEditSelectTeamMembers": "选择团队成员", + "itemEditSendEmail": "发送电子邮件", + "itemEditStatusSearchNoResultsTitleRich": "你的搜索 “{{search}}” 未找到任何结果", + "itemEditSwitchOffDuoMode": "关闭 DUO 模式", + "itemEditSwitchOnDuoMode": "打开 DUO 模式", + "itemEditTabAnalytics": "分析", + "itemEditTabFreestyle": "自由样式", + "itemEditTabHeadTags": "Head 标签", + "itemEditTabPublishStatus": "发布状态", + "itemEditTabRedirects": "重定向", + "itemEditTabSeo": "SEO", + "itemEditTakeOffline": "下线", + "itemEditUnlock": "解锁", + "itemEditUnpublishContentItemTitle": "取消发布内容项目", + "itemEditUnpublishDescription": "这将使其立即在所有平台上不可用。你随时可以点击发布按钮重新发布此项目。", + "itemEditUnpublishItem": "取消发布项目", + "itemEditUnpublishNow": "立即取消发布", + "itemEditUnpublishTitle": "取消发布", + "itemEditUnpublishWidgetDescription": "取消发布此内容后,如果请求该 URL,将不再提供内容。该 URL 将返回 404 未找到响应。", + "itemEditUnsavedChangesDescription": "你有未保存的更改;如果离开此页面,这些更改将丢失。", + "itemEditUnschedulePublish": "取消计划发布", + "itemEditVariant": "变体", + "itemEditVariantTitle": "变体标题", + "itemEditVersion": "版本", + "itemEditVersionPublished": "v{{version}} 已发布 {{on}}", + "itemEditVersionPublishedLabel": "v{{version}} 已发布", + "itemEditVersionPublishedOn": "v{{version}} 发布于", + "itemEditVersionSavedOn": "v{{version}} 保存于", + "itemEditVersionScheduledLabel": "v{{version}} 已计划", + "itemEditVersionScheduledToPublishOn": "v{{version}} 计划发布于", + "itemEditViewActivityLog": "查看活动日志", + "itemEditViewLanguages": "查看语言", + "itemEditViewVersions": "查看版本", + "itemEditWorkflowRequestFailed": "未能将 {{title}} 的工作流请求发送给 {{members}}", + "itemEditWorkflowRequestMessage": "工作流请求消息", + "itemEditWorkflowRequestSent": "已将 {{title}} 的工作流请求发送给 {{members}}", + "itemEditWorkflowRequestTitle": "工作流请求", + "itemEditZuidTooltip": "内容项目始终相对于其模型访问,因此每次调用都需要模型 ZUID。", + "itemListCopyZuid": "复制 ZUID", + "itemListDateCreated": "创建日期", + "itemListDateSaved": "保存日期", + "itemListDeleteButton_other": "删除项目({{count}})", + "itemListDeleteDescription_other": "删除这 {{count}} 个项目将把它们从您站点的所有位置移除,并使其无法用于 API 请求。此操作无法撤销。", + "itemListDeleteTitle_other": "删除 {{count}} 个项目", + "itemListEditModel": "编辑模型", + "itemListEditTemplate": "编辑模板", + "itemListEmptyDescription": "在此添加您的内容。先创建您的第一个项目。", + "itemListEmptyTitle": "立即开始创建内容", + "itemListErrorPublishing": "发布项目时出错:{{error}}", + "itemListErrorSaving": "保存项目时出错:{{error}}", + "itemListExportCsv": "导出 CSV", + "itemListFieldsLabel": "字段", + "itemListFilterNoResultsBody": "请尝试调整筛选条件以找到您要查找的内容", + "itemListFilterNoResultsTitle": "找不到与您的筛选条件匹配的结果", + "itemListFilterPlaceholder": "筛选项目", + "itemListImportCsv": "导入 CSV", + "itemListItemNotYetCreated": "项目尚未创建", + "itemListLastPublished": "最后发布", + "itemListLastSaved": "最后保存", + "itemListModelInvalid": "无效的模型“{{modelZUID}}”", + "itemListModelNotFound": "未找到模型“{{modelZUID}}”", + "itemListNoSearchResultsAlt": "无搜索结果", + "itemListPublish": "发布", + "itemListPublishButton_other": "发布项目({{count}})", + "itemListPublishDescription_other": "这将使以下 {{count}} 个内容项目立即在您的所有平台上可用。如有需要,您随时可以稍后取消发布这些项目。", + "itemListPublishItemsTooltip": "发布项目", + "itemListPublishNow": "立即发布", + "itemListPublishTitle_other": "发布对 {{count}} 个项目的更改", + "itemListResetFilters": "重置筛选条件", + "itemListSaveItemsTooltip": "保存项目", + "itemListSavePublish": "保存并发布", + "itemListSavePublishItemsTooltip": "保存并发布项目", + "itemListSavePublishNow": "保存并立即发布", + "itemListSaveSchedulePublish": "保存并排定发布", + "itemListScheduleButton_other": "排定发布({{count}})", + "itemListSchedulePastWarning": "由于所选时间为当前或过去的日期,将立即发布。", + "itemListSchedulePublish": "排定发布", + "itemListSchedulePublishOn": "发布时间", + "itemListScheduleSubtitle": "如有需要,您随时可以取消排定的发布", + "itemListScheduleTitle_other": "排定发布对 {{count}} 个项目的更改", + "itemListSearchNoResultsBody": "请尝试调整搜索。我们建议检查所有单词拼写是否正确,或尝试使用不同的关键字。", + "itemListSearchNoResultsTitle": "您的筛选条件 “{{search}}” 未能找到任何结果", + "itemListSelectedCount": "已选择 {{count}} 项", + "itemListSelectedCount_other": "已选择 {{count}} 项", + "itemListSortPrefix": "排序:{{value}}", + "itemListStatus": "状态", + "itemListStatusNotPublished": "未发布", + "itemListStatusPublished": "已发布", + "itemListStatusScheduled": "已排定", + "itemListUpdateCount_other": "更新 {{count}} 个内容项目", + "itemListVersionByUser": "由 {{name}}", + "itemListVersionColumnShort": "版本", + "itemListVersionPublishedOn": "v{{version}} 发布于", + "itemListVersionSavedOn": "v{{version}} 保存于", + "itemListVersionScheduledOn": "v{{version}} 已排定发布于", + "itemListViewQuickAccessApi": "查看快速访问 API", + "itemListViewSiteGeneratorsApi": "查看站点生成器 API", + "itemListZuidColumn": "ZUID", + "linkCreateButton": "创建链接", + "linkCreateCreated": "链接已创建:{{title}}", + "linkCreateUnableToCreate": "无法创建链接", + "linkEditCannotSaveEmptyTitle": "标题为空", + "linkEditConfirmDelete": "确定要删除此链接吗?", + "linkEditDeleted": "链接已删除:{{title}}", + "linkEditErrorDeleting": "删除链接时出错", + "linkEditErrorSaving": "保存链接时出错", + "linkEditFailedLoading": "加载链接失败", + "linkEditLoading": "正在加载链接", + "linkEditorErrorAddProtocol": "请添加链接协议", + "linkEditorErrorAddTarget": "请添加链接目标", + "linkEditorErrorAddTitle": "请添加链接标题", + "linkEditorExternalLink": "外部链接", + "linkEditorExternalUrl": "提供要链接到的外部 URL", + "linkEditorInternalLink": "内部链接", + "linkEditorLinkTitle": "链接标题", + "linkEditorSelectParent": "为您的链接选择一个父项", + "linkEditorSelectTarget": "选择要链接到的项目", + "linkEditSaveChanges": "保存更改", + "linkEditSaved": "链接已保存:{{title}}", + "mediaAddFromBynder": "从 Bynder 添加", + "mediaAddFromMedia": "从 Media 添加", + "mediaAddMoreFromMedia": "从 Media 添加更多", + "mediaCopyFileUrl": "复制文件 URL", + "mediaCopyZuid": "复制 ZUID", + "mediaCouldNotAdd": "无法添加 {{filenames}}。{{errorMessage}}", + "mediaCouldNotReplace": "无法替换。{{errorMessage}}", + "mediaDragAndDropRich": "将文件拖放到此处 或", + "mediaDragDropFilesCompact": "拖放您的文件", + "mediaDropFilesHere": "将文件拖放到此处", + "mediaDropToUpload": "将文件拖放到此处以上传", + "mediaEditFile": "编辑文件", + "mediaMoreOptions": "更多选项", + "mediaRemoveFile": "移除文件", + "mediaRename": "重命名", + "mediaRenameFile": "重命名文件", + "mediaReplaceFile": "替换文件", + "mediaSwapFile": "更换文件", + "mediaTypeLabel": "媒体类型", + "mediaUploadMedia": "上传到 Media", + "minCharacterCounter_other": "(最少 {{count}} 个字符)", + "minMaxLabel": "最小值:{{min}} | 最大值:{{max}}", + "missingMetaTitle": "缺少元标题", + "navAddContentItem": "添加内容项", + "navContentTitle": "内容", + "navCreateContent": "创建内容", + "navCreateDataset": "创建数据集", + "navCreatePage": "创建页面", + "navDashboard": "仪表板", + "navDatasetsInfo": "此处列出的数据集没有父内容项,其内容项也没有 URL。", + "navErrorBody": "抱歉,我们无法加载您的{{navName}}。请刷新页面后重试。", + "navFilterItems": "筛选项目", + "navHideContent": "隐藏内容", + "navLoadItemsFailed": "无法加载内容导航项。", + "navLoadRoleFailed": "无法加载您的用户角色。", + "navNoResultsFor": "没有与“{{keyword}}”匹配的结果", + "navNoSearchResultsAlt": "无搜索结果", + "navPagesInfo": "页面包括带有 URL 的单页和多页模型。已设置父级的数据集也会显示在此导航中。", + "navReorderPages": "重新排序页面", + "navResourceDatasets": "数据集", + "navResourceModels": "模型", + "navSectionDatasets": "数据集", + "navSectionHiddenItems": "隐藏的项目", + "navSectionPages": "页面", + "noFieldsAvailable": "没有可用字段", + "noFieldsDescriptionNoSchema": "此模型({{label}})尚无任何字段。要定义内容项的结构,请联系您的管理员为此模型添加字段。", + "noFieldsDescriptionWithSchema": "此模型({{label}})尚无任何字段。要定义内容项的结构,请前往您的模型并添加字段。", + "noFieldsImageAlt": "无可用字段", + "notFoundContactBodyRich": "如果您认为缺少某个内容项目,请通过 support@zesty.io 联系我们,并在邮件中提供以下 URL", + "notFoundDeletedHeading": "此项目已被删除", + "notFoundImageAlt": "未找到", + "publishedNow": "已立即发布“{{title}}”", + "redirectActiveHeader": "此内容项目当前正在被重定向", + "redirectActiveSubHeader": "此内容项目当前设置为将用户重定向到下面的目标 URL。停止重定向后,发布后用户将可以再次通过其原始 URL 访问此内容。", + "redirectAddIncoming": "添加传入重定向", + "redirectCode301": "301 - 永久重定向", + "redirectCode302": "302 - 临时重定向", + "redirectCreateButton": "创建重定向", + "redirectCreatedOne": "已创建 1 个重定向", + "redirectDeletedOne": "已删除 1 个重定向", + "redirectDeletedPath": "已删除重定向:{{path}}", + "redirectDeleteForever": "永久删除", + "redirectDeleteTitle": "删除重定向", + "redirectDeleteWarning": "删除此重定向将立即将其从您的站点中移除。此操作无法撤销。", + "redirectDontCreate": "不创建", + "redirectEnterUrlPlaceholder": "输入 URL(例如 https://www.google.com/)", + "redirectErrorDeleting": "删除重定向时出错", + "redirectFilePathOnlyTooltip": "仅文件路径", + "redirectInactiveSubHeader": "重定向内容项目后,它将被取消发布,用户将无法通过其当前 URL 访问此内容项目。他们将被自动发送到您提供的目标 URL。", + "redirectMoreDetails": "更多详情", + "redirectNewPath": "新路径", + "redirectOldPath": "旧路径", + "redirectStopBody": "停止重定向后,发布后用户将可以再次通过其原始 URL 访问此内容。", + "redirectStopRedirecting": "停止重定向", + "redirectTargetLabel": "重定向目标", + "redirectTargetPath": "目标路径", + "redirectThisContentItem": "重定向此内容项目", + "redirectTypeColumn": "重定向类型", + "redirectTypeInternal": "内部", + "redirectTypeLabel": "类型", + "redirectTypeWildcard": "通配符", + "redirectValueCannotBeModified": "此值无法修改", + "reorderNavReturnToRoot": "返回根目录", + "reorderNavSaveChanges": "保存更改", + "reorderNavSaved": "更改已保存", + "reorderNavSaveError": "保存更改时出错", + "reorderNavTitle": "更改导航中项目的顺序", + "requiredFieldError": "必填字段。请输入一个值。", + "requiresMoreCharacters_other": "还需要 {{count}} 个字符。", + "scheduledPublish": "已排期将在 {{timezone}} 时区的 {{time}} 发布“{{title}}”", + "selectBlockVariant": "请选择一个区块变体。", + "selectedItemNotFound": "未找到所选项目:{{value}}", + "selectPlaceholder": "选择", + "seoFieldMetaDescription": "元描述", + "seoFieldMetaKeywords": "元关键词", + "seoFieldMetaTitle": "元标题", + "seoFieldNavigationTitle": "导航标题", + "seoFieldPageParent": "父页面", + "seoFieldUrlPathPart": "URL 路径部分", + "slotLabelAltText": "替代文本", + "slotLabelAutoplay": "自动播放", + "slotLabelLoopVideo": "循环播放视频", + "slotLabelMuteVideo": "静音视频", + "slotLabelOpenInNewTab": "在新标签页中打开", + "slotLabelSource": "来源", + "slotLabelUrl": "URL", + "slotLabelVideoControlVisibility": "视频控件可见性", + "slotLabelVideoPoster": "视频封面", + "studioAddLink": "添加链接", + "studioAgenticStudioBy": "Agentic Studio 来自", + "studioBackToElement": "返回元素", + "studioBridgeError": "桥接错误", + "studioCannotSave": "无法保存:{{label}}", + "studioCannotSaveError": "无法保存:{{label}} - {{error}}", + "studioCannotSaveInvalid": "无法保存:{{label}} - 数据缺失或无效", + "studioCloseAriaLabel": "关闭 Studio 预览", + "studioContentHint": "在画布上选择项目以进行编辑", + "studioEditInFreestyle": "在 Freestyle 中编辑", + "studioEditInManager": "在 Zesty Manager 中编辑", + "studioEditorAriaLabel": "Studio 编辑器", + "studioFreestyleAlertBody": "仅可在 Freestyle 中编辑", + "studioFreestyleAlertDismissAriaLabel": "关闭 Freestyle 提示", + "studioFreestyleAlertTitle": "此布局是在 Freestyle 中创建的", + "studioFullHint": "在画布上选择项目进行编辑,或拖动块以重新排列布局", + "studioInlineEditFailed": "无法对此块应用内联编辑。", + "studioInvalidUrl": "URL 无效。请检查后重试。", + "studioItemPublished": "已发布:{{label}}", + "studioItemSaved": "项目已保存:{{label}}", + "studioItemsPublishedCount_other": "已保存并发布 {{count}} 个项目", + "studioItemsSavedCount_other": "已保存 {{count}} 个项目", + "studioLayersEmptyState": "未找到图层", + "studioLayersNodeElement": "元素", + "studioLayersNodeField": "字段", + "studioLayersNodePage": "页面", + "studioLayersNodeText": "文本", + "studioLayersPanelTitle": "图层", + "studioLayoutHint": "在画布上拖动块以重新排列布局", + "studioLayoutPublishFailed": "无法保存并发布布局。", + "studioLayoutPublishFailedNamed": "无法保存并发布 {{name}}。", + "studioLayoutSaved": "已保存 {{files}}", + "studioLayoutSavedPublished": "已保存并发布 {{files}}", + "studioLayoutSaveFailed": "无法保存布局。", + "studioLayoutSaveFailedNamed": "无法保存 {{name}}。", + "studioLinkedFromTooltip": "链接自 {{modelLabel}} · {{itemLabel}} ({{itemZUID}})", + "studioLinkFieldNotFound": "字段 \"{{fieldName}}\" 已不存在", + "studioLinkFromOtherItem": "从其他内容项链接", + "studioLinkItemConfirm": "链接项目", + "studioLinkItemContentItemLabel": "内容项", + "studioLinkItemContentItemTooltip": "该字段将从这个确切的内容项中读取,包括其语言。", + "studioLinkItemContentItemTooltipForItem": "该链接指向此确切项目,包括其语言。仅列出具有页面的模型。", + "studioLinkItemDialogCloseAriaLabel": "关闭链接项对话框", + "studioLinkItemDialogSubtitle": "链接到特定内容项上的内容字段", + "studioLinkItemDialogSubtitleForItem": "链接到特定内容项的页面", + "studioLinkItemDialogTitle": "链接其他内容项", + "studioLinkItemFieldLabel": "要连接的字段", + "studioLinkItemFieldTooltip": "仅列出此元素可以渲染的字段。", + "studioLinkItemNoLinkableFields": "此内容项的模型没有可链接的字段。", + "studioLinkModelNotFound": "模型 \"{{modelName}}\" 已不存在", + "studioLinkSectionLabel": "链接", + "studioLinkTargetLabel": "目标", + "studioLinkTo": "链接到", + "studioLinkUrlPlaceholder": "链接网址或 ID", + "studioModeContent": "内容", + "studioModeFull": "完整", + "studioModeLayout": "布局", + "studioNoCmsItem": "没有 CMS 项目与此路径关联。编辑已禁用。", + "studioPreviewError": "预览错误:{{error}}", + "studioPreviewOnly": "仅预览", + "studioPublishPartialFailure_other": "已发布 {{count}} 个项目中的 {{published}} 个 — {{failed}} 个失败", + "studioRemoveLinkAriaLabel": "移除链接", + "studioSaveAllButton": "保存全部", + "studioSaveAndPublish": "保存并发布", + "studioSaveAndPublishAllButton": "保存并发布全部", + "studioSaveChangeSectionContent": "内容", + "studioSaveChangeSectionLayout": "布局", + "studioSaveChanges": "保存更改", + "studioSaveChangesSubtitle": "你想保存,还是保存并发布你的更改?", + "studioSaveChangesTypeColumn": "类型", + "studioSaveChangesVersionColumn": "版本", + "studioSaveChangeTypeBlock": "区块", + "studioSaveChangeTypeCode": "代码", + "studioSaveChangeTypeContent": "内容", + "studioStaticEditNotSingleField": "此块无法内联编辑,因为其内容不是单个已连接的字段。", + "studioStaticEditRejected": "此块包含动态内容,无法内联编辑。请切换到内容模式进行编辑。", + "studioUnsavedLayoutBody": "您有未保存的布局更改。是否在继续前保存?", + "studioUnsavedLayoutTitle": "未保存的布局更改", + "studioUntitledItem": "未命名", + "studioViewAllRelatedFields": "查看所有相关字段", + "tagArticle": "文章", + "tagAside": "Aside", + "tagDiv": "Div", + "tagFooter": "页脚", + "tagHeader": "页眉", + "tagMain": "主区域", + "tagNavigation": "导航", + "tagNone": "无标签", + "tagSection": "区块", + "tagText": "文本", + "unpublished": "已取消发布“{{title}}”", + "unscheduledVersion": "已取消版本 {{version}} 的排期发布", + "uuidAutoGeneratedPlaceholder": "UUID 字段值为自动生成", + "valueMustBeBetween": "值必须介于 {{min}} 和 {{max}} 之间", + "viewModelActivityLog": "查看模型活动日志", + "yesNoMissingOptions": "字段 {{label}} 缺少选项设置。请编辑该字段以添加是/否值。" +} diff --git a/public/locales/zh-CN/dashboard.json b/public/locales/zh-CN/dashboard.json new file mode 100644 index 0000000000..5f0ac4dabb --- /dev/null +++ b/public/locales/zh-CN/dashboard.json @@ -0,0 +1,26 @@ +{ + "columnVersion": "版本", + "createCodeFile": "创建代码文件", + "createContent": "创建内容", + "createModel": "创建模型", + "deleted": "已删除", + "deltaLabel": "对比前 {{count}} 天", + "deltaLabel_other": "对比前 {{count}} 天", + "emptyStateDescription": "过去 30 天内没有任何新项目或修改。开始创建或编辑内容、模型或代码文件,即可在此处查看最近的文件。", + "emptyStateTitle": "立即开始扩展您的实例", + "greeting": "早上好,{{name}}", + "instanceSummary": "这是您的实例摘要,涵盖", + "itemsPublished": "已发布项目", + "joinCommunity": "加入我们的社区", + "lastNDays": "过去 {{count}} 天", + "lastNDays_other": "过去 {{count}} 天", + "lastNDaysInline": "过去 {{count}} 天", + "lastNDaysInline_other": "过去 {{count}} 天", + "missingMetaTitle": "缺失 Meta 标题", + "releaseNotes": "版本说明", + "resources": "资源", + "resourcesSubtitle": "充分利用 Zesty 所需的一切内容。", + "speedDialAriaLabel": "实例快捷菜单", + "uploadMedia": "上传媒体", + "webRequests": "Web 请求" +} diff --git a/public/locales/zh-CN/leads.json b/public/locales/zh-CN/leads.json new file mode 100644 index 0000000000..4d1452cf1c --- /dev/null +++ b/public/locales/zh-CN/leads.json @@ -0,0 +1,27 @@ +{ + "captureLeadsOnYourInstance": "在您的实例中捕获线索", + "dateCreated": "创建日期", + "datePreset30Days": "30天", + "datePreset60Days": "60天", + "datePreset90Days": "90天", + "datePresetAll": "全部", + "datePresetCustom": "自定义", + "endDate": "结束日期", + "exportCsv": "导出CSV", + "exportCsvTitle": "按所选过滤条件导出线索数据的CSV", + "formGroup": "表单组", + "formGroupAll": "全部", + "getStartedBodyText": "通过在您的实例上创建包含zlf输入的表单,您可以立即开始捕获线索。", + "howToCreateALeadForm": "如何创建线索表单", + "learnMoreAbout": "了解更多关于", + "modalTableHeaderKey": "键", + "modalTableHeaderValue": "值", + "notAvailable": "N/A", + "searchAcrossAllOfYourLeads": "搜索所有线索", + "selectRelease": "选择版本...", + "startDate": "开始日期", + "tableHeaderDate": "日期(系统)", + "tableHeaderEmail": "电子邮件", + "tableHeaderFormBody": "表单内容", + "tableHeaderFormGroup": "表单组" +} diff --git a/public/locales/zh-CN/marketplace.json b/public/locales/zh-CN/marketplace.json new file mode 100644 index 0000000000..03906c26f9 --- /dev/null +++ b/public/locales/zh-CN/marketplace.json @@ -0,0 +1,15 @@ +{ + "appNotInstalled": "未安装应用 \"{{zuid}}\"。", + "exploreMarketplace": "探索 Marketplace", + "googleAnalyticsLogoAlt": "谷歌分析 (Google Analytics) 图标", + "googleChromeLogoAlt": "谷歌浏览器 (Google Chrome) 图标", + "goToMarketplace": "前往 Marketplace", + "headerTitleApps": "应用中心", + "installAppBody": "安装扩展、应用程序和快速启动模块,以加速您的 Zesty 项目", + "microsoftLogoAlt": "微软 (Microsoft) 图标", + "nodejsLogoAlt": "NodeJS 图标", + "npmLogoAlt": "NPM 图标", + "sidebarMarketplace": "Marketplace", + "visitMarketplace": "访问 Marketplace", + "zestyRocketLogoAlt": "Zesty Rocket 图标" +} diff --git a/public/locales/zh-CN/media.json b/public/locales/zh-CN/media.json new file mode 100644 index 0000000000..cf6ae598aa --- /dev/null +++ b/public/locales/zh-CN/media.json @@ -0,0 +1,201 @@ +{ + "allMediaTitle": "最近使用", + "dateFilterAfter": "在...之后", + "dateFilterBefore": "在...之前", + "dateFilterButtonLabel": "日期", + "dateFilterCustomRange": "自定义范围", + "dateFilterOn": "在", + "deletedFile": "已删除文件 {{filename}}", + "deletedGroup": "已删除分组 {{name}}", + "deleteFileModalDeleteButtonAria": "删除按钮", + "deleteFileModalDeleteButtonMultiple": "删除 ({{count}})", + "deleteFileModalDeleteButtonMultiple_other": "删除 ({{count}})", + "deleteFileModalTitleMultiple": "删除 {{count}} 个文件?", + "deleteFileModalTitleMultiple_other": "删除 {{count}} 个文件?", + "deleteFileModalTitleSingle": "删除文件", + "deleteFileModalWarningMultiple": "删除后您将无法恢复这些文件。", + "deleteFileModalWarningSingle": "{{filename}} 将被永久删除", + "deleteFolderDialogConfirmButton": "删除文件夹", + "deleteFolderDialogMessage": "删除文件夹不会删除其中的文件。这些文件仍然可以在“所有媒体”中找到。", + "deleteFolderDialogTitle": "删除文件夹?", + "dropAreaAllMedia": "所有媒体", + "dropAreaUploadPrompt": "上传文件到 {{location}}", + "editedFile": "已编辑文件 {{filename}}", + "emptyStateDescription": "您可以将文件拖放到此处,或使用“上传”按钮。", + "emptyStateTitle": "立即开始上传", + "failedCreatingGroup": "创建分组失败", + "failedDeletingFile": "删除文件失败", + "failedDeletingGroup": "删除分组失败", + "failedEditingBin": "编辑媒体库失败", + "failedEditingFile": "编辑文件失败", + "failedEditingGroup": "编辑分组失败", + "failedFetchBinFiles": "获取媒体库文件失败:{{error}}", + "failedFetchGroupFiles": "获取分组文件失败:{{error}}", + "failedFetchGroups": "获取分组失败:{{error}}", + "failedFileSearch": "文件搜索失败", + "failedLoadingBinFiles": "加载媒体库文件失败", + "failedLoadingBinGroups": "加载媒体库分组失败", + "failedLoadingEcoBins": "加载生态系统媒体库失败", + "failedLoadingGroupFiles": "加载分组文件失败", + "failedLoadingInstanceBins": "加载实例媒体库失败", + "failedSearchFile": "搜索文件失败:{{error}}", + "fileModalContentCloseAria": "关闭图标", + "fileModalContentCloseTooltip": "关闭预览", + "fileModalContentCopyZuid": "复制 ZUID", + "fileModalContentDeleteAria": "垃圾桶按钮", + "fileModalContentDeleteFailed": "删除文件失败", + "fileModalContentDeleteTooltip": "删除文件", + "fileModalContentFileUrlLabel": "文件 URL", + "fileModalContentLaunchOtfEditor": "启动实时编辑器", + "fileModalContentMoveTo": "移动至", + "fileModalContentOpenSettingsAria": "打开设置菜单", + "fileModalContentRenameMenuItem": "重命名", + "fileModalContentRenameTooltip": "重命名文件", + "fileModalContentReplaceAria": "替换文件按钮", + "fileModalContentReplaceTooltip": "替换文件", + "fileModalContentSaveTitleAria": "保存标题按钮", + "fileModalContentTitleAria": "标题文本框", + "fileModalContentTitleHelper": "可用作替代文本 (alt-text) 和说明文字", + "fileModalContentTitleLabel": "标题", + "fileModalContentTitlePlaceholder": "输入标题", + "fileModalContentUpdatedOn": "更新于", + "fileModalContentUploadedOn": "上传于", + "fileModalContentZuidLabel": "ZUID", + "filetypeFilterArchives": "压缩包 (zip)", + "filetypeFilterAudio": "音频", + "filetypeFilterButtonLabel": "文件类型", + "filetypeFilterDocuments": "文档", + "filetypeFilterFolders": "文件夹", + "filetypeFilterFonts": "字体", + "filetypeFilterImages": "图片", + "filetypeFilterPdfs": "PDF 文档", + "filetypeFilterPresentations": "演示文稿", + "filetypeFilterSpreadsheets": "电子表格", + "filetypeFilterVideos": "视频", + "fileTypeNotRecognized": "无法识别的文件类型", + "folderMenuAddSubFolder": "添加子文件夹", + "folderMenuHide": "隐藏", + "folderMenuRename": "重命名", + "folderMenuShow": "显示", + "goToAllMedia": "前往所有媒体", + "headerAddSubFolder": "添加子文件夹", + "headerDeselectAll": "取消全选", + "headerFilesSelected": "已选择 {{count}} 个项目", + "headerFilesSelected_other": "已选择 {{count}} 个项目", + "headerFilesSelectedLimit": "已选择 {{count}} / {{limit}} 个项目", + "headerFilesSelectedLimit_other": "已选择 {{count}} / {{limit}} 个项目", + "headerMove": "移动", + "headerOpenFolderMenuAria": "打开文件夹菜单", + "headerReplacementFileSelected": "已选择替换文件", + "headerSelectAll": "全选", + "headerSelectReplacementFile": "选择替换文件", + "imageFilterAllTypes": "所有图片类型", + "insightsMediaDateRangeButton": "最近 {{days}} 天", + "insightsMediaDateRangeMenuItem": "最近 {{days}} 天", + "insightsMediaDeltaLabel": "相比最近 {{days}} 天", + "insightsMediaMediaBandwidth": "媒体带宽", + "insightsMediaTitle": "洞察分析", + "insightsTableColBandwidth": "带宽", + "insightsTableColRequests": "请求数", + "insightsTableColType": "类型", + "matchesFound": "找到 {{count}} 个匹配项", + "matchesFound_other": "找到 {{count}} 个匹配项", + "mediaAppFileNotFoundMessage": "很抱歉,无法找到您请求的文件。请返回所有媒体页面。", + "mediaAppFileNotFoundTitle": "未找到文件", + "mediaGridFilesHeader": "文件", + "mediaGridFoldersHeader": "文件夹", + "mediaListColAddedOn": "添加于", + "mediaListColType": "类型", + "moveFileDialogDestinationLabel": "目标文件夹", + "moveFileDialogMoveButton": "移动", + "moveFileDialogTitleMultiple": "移动 {{count}} 个文件", + "moveFileDialogTitleMultiple_other": "移动 {{count}} 个文件", + "moveFileDialogTitleSingle": "移动文件", + "newFolderDialogDefaultFolderName": "未命名文件夹", + "newFolderDialogFolderNameLabel": "文件夹名称", + "newFolderDialogNone": "无", + "newFolderDialogParentFolderLabel": "父文件夹", + "newFolderDialogTitle": "新建文件夹", + "noResultsStateClearFilters": "清除筛选条件", + "noResultsStateDescription": "尝试调整筛选条件来查找您需要的内容", + "noResultsStateTitleFiletype": "未找到 {{filetype}} 文件", + "noResultsStateTitleFolders": "未找到任何文件夹", + "notFoundStateDefaultMessage": "很抱歉,无法找到您请求的文件夹。请返回所有媒体页面。", + "notFoundStateDefaultTitle": "未找到文件夹", + "notifyFailedCreateRecord": "签名 URL 上传后创建文件记录失败", + "notifyFailedSignedUrl": "获取大文件上传的签名 URL 失败", + "notifyFailedUploadSignedUrl": "上传文件到签名 URL 失败", + "notifyFileReplaced": "文件已替换:{{filename}}", + "notifyFilesInProgress": "仍有 {{count}} 个文件正在处理中", + "notifyFilesInProgress_other": "仍有 {{count}} 个文件正在处理中", + "notifyMetadataFailedMultiple": "更新 {{count}} 个文件的元数据失败", + "notifyMetadataFailedMultiple_other": "更新 {{count}} 个文件的元数据失败", + "notifyUploadedMultiple": "成功上传了 {{count}} 个文件", + "notifyUploadedMultiple_other": "成功上传了 {{count}} 个文件", + "notifyUploadedMultipleWithProgress": "成功上传了 {{count}} 个文件... 仍有 {{inProgress}} 个文件正在处理中", + "notifyUploadedMultipleWithProgress_other": "成功上传了 {{count}} 个文件... 仍有 {{inProgress}} 个文件正在处理中", + "notifyUploadFailed": "上传文件失败", + "notifyUploadFailedMultiple": "上传 {{count}} 个文件失败", + "notifyUploadFailedMultiple_other": "上传 {{count}} 个文件失败", + "notifyUploadSuccess": "文件上传成功", + "otfEditorAutoPlaceholder": "自动", + "otfEditorBlurLabel": "模糊度", + "otfEditorCopyUrlLabel": "✨ 复制应用编辑后的新 URL", + "otfEditorFitBounds": "边界限制", + "otfEditorFitCover": "覆盖", + "otfEditorFitCrop": "裁剪", + "otfEditorFitLabel": "适应方式", + "otfEditorFitNone": "无", + "otfEditorHeightLabel": "高度", + "otfEditorOptimizeHigh": "高", + "otfEditorOptimizeLabel": "优化", + "otfEditorOptimizeLow": "低", + "otfEditorOptimizeMedium": "中", + "otfEditorSaturationAria": "饱和度", + "otfEditorSaturationLabel": "饱和度", + "otfEditorTitle": "实时图片编辑器 (On The Fly)", + "otfEditorUnsavedWarning": "这些更改不会保存到原始文件或原始文件 URL 中", + "otfEditorWidthLabel": "宽度", + "renameFileModalNewNameLabel": "新文件名称", + "renameFileModalTitle": "重命名文件", + "renameFileModalWarning": "这会更改 URL 路径,并在一段时间后可能会破坏生产环境中引用的现有链接。", + "renameFolderDialogNewFolderNameLabel": "新文件夹名称", + "renameFolderDialogTitle": "重命名文件夹", + "replaceFileModalNoPermissionSubtitle": "请联系下面列出的实例所有者或管理员,将您的角色升级为管理员或所有者,以获取替换文件的能力。", + "replaceFileModalNoPermissionTitle": "您没有在此实例中替换文件的权限。", + "replaceFileModalTitle": "替换文件", + "replaceFileModalWarning": "原始文件将被删除并被新文件替换。此操作无法撤销,且文件无法恢复。该文件将保留其原始 URL 和 ZUID。", + "searchEmptyStateDescription": "尝试调整您的搜索内容。建议检查所有单词拼写是否正确,或尝试使用不同的关键词", + "searchEmptyStateTitle": "您的搜索“{{searchTerm}}”没有找到任何结果", + "sidebarFoldersDndErrorMessage": "目前 Zesty 尚不支持在 eco-bin 之间移动文件。如果您需要此功能,请联系 support@zesty.io。", + "sidebarFoldersDndErrorTitle": "无法将文件移动到另一个 eco-bin", + "sidebarFoldersHeader": "文件夹", + "sidebarFoldersHiddenItems": "隐藏项目", + "sidebarFoldersOkButton": "确定", + "sidebarFoldersSortLastCreated": "最新创建", + "sidebarInsertFromMedia": "从媒体插入", + "sidebarInsights": "洞察分析", + "sidebarRecents": "最近使用", + "sidebarSearchPlaceholder": "搜索媒体", + "sortButtonLabel": "排序方式: {{order}}", + "sortDateAdded": "添加日期", + "thumbnailContentCannotEditTooltip": "您无法编辑文件名称", + "thumbnailContentTitlePlaceholderDisabled": "请稍候以添加文件标题", + "thumbnailContentTitlePlaceholderEditable": "添加文件标题 (用于替代文本)", + "thumbnailCopyUrl": "复制 URL", + "uploadModalNounFile_one": "文件", + "uploadModalNounFile_other": "文件", + "uploadModalNounReplacedFile_one": "替换的文件", + "uploadModalNounReplacedFile_other": "替换的文件", + "uploadModalUploadedNoCount": "已上传{{item}}", + "uploadModalUploadedWithCount": "已上传 {{count}} 个{{item}}", + "uploadModalUploadedWithCount_other": "已上传 {{count}} 个{{item}}", + "uploadModalUploadErrorHint": "请检查文件扩展名并重试", + "uploadModalUploadErrorTitle": "遗憾的是,我们在上传这 {{count}} 个文件时遇到了问题", + "uploadModalUploadErrorTitle_other": "遗憾的是,我们在上传这 {{count}} 个文件时遇到了问题", + "uploadModalUploadingNoCount": "正在上传{{item}}", + "uploadModalUploadingWithCount": "正在上传 {{count}} 个{{item}}", + "uploadModalUploadingWithCount_other": "正在上传 {{count}} 个{{item}}", + "uploadModalUploadMore": "上传更多", + "videoFilterAllTypes": "所有视频类型" +} diff --git a/public/locales/zh-CN/release.json b/public/locales/zh-CN/release.json new file mode 100644 index 0000000000..5a066944ef --- /dev/null +++ b/public/locales/zh-CN/release.json @@ -0,0 +1,39 @@ +{ + "activateButton": "启用发布应用", + "activateSubtitle": "同时发布多组内容。", + "createdAt": "创建时间", + "createdOn": "于 {{date}} {{time}}", + "createdRelease": "已创建发布:{{name}}", + "createRelease": "创建发布", + "createReleaseButton": "创建发布", + "deletedRelease": "已删除发布 {{name}}", + "deleteRelease": "删除发布", + "deleteWarning": "删除发布是一个永久性的操作,无法撤销。", + "errorMissingReleaseName": "缺少必填的发布名称", + "failedActivateReleases": "激活发布失败", + "failedCreatingRelease": "创建发布失败", + "failedDeletingRelease": "删除发布 {{name}} 失败", + "fieldReleaseDescription": "发布说明", + "fieldReleaseName": "发布名称", + "instructionBeginSearch": "首先搜索您想要包含在此次发布中的内容", + "instructionPublishAll": "点击“全部发布”按钮以发布该版本中列出的所有项目", + "instructionSelectItem": "从搜索列表中选择一个项目以将其添加到此次发布中", + "lang": "语言", + "lastPublish": "上次发布时间", + "live": "发布 / 线上", + "loadingRelease": "正在加载发布:{{name}}", + "members": "成员项目", + "missingItemMetaTitle": "缺失项目的 Meta 标题", + "neverPublished": "从未发布", + "publishAll": "全部发布", + "publishAllNoticeBody": "这将发布此次发布中的所有成员,并清除所有成员的 URL 及相关内容(Purge)。", + "publishedItems_other": "已发布 {{count}} 个项目", + "publishing": "正在发布...", + "releasesHeading": "发布版本 (Releases)", + "searchPlaceholder": "通过 ZUID 或 Meta 标题搜索以包含在您的发布中", + "startingRelease": "正在启动发布", + "startNewPublishPlan": "启动新发布计划", + "updatedReleaseMember": "已将发布 ({{releaseName}}) 的成员 ({{itemTitle}}) 更新至版本 {{version}}", + "versionNumber": "版本 {{version}}", + "versionPublishedAgo": "版本 {{version}} 已于 {{timeAgo}} 发布" +} diff --git a/public/locales/zh-CN/reports.json b/public/locales/zh-CN/reports.json new file mode 100644 index 0000000000..0e9b5e4d1a --- /dev/null +++ b/public/locales/zh-CN/reports.json @@ -0,0 +1,119 @@ +{ + "actionAddedStatus": "已添加状态:{{labels}}", + "actionBy": "操作人", + "actionCount_other": "{{count}} 个操作", + "actionCreated": "已创建", + "actionDeleted": "已删除", + "actionInBy": "在 {{itemSubtext}} 中,操作人", + "actionModified": "已修改", + "actionPublished": "已发布", + "actionRemovedStatus": "已移除状态:{{labels}}", + "actions": "操作", + "actionsByTitle": "操作人", + "actionScheduledPublish": "已排期发布", + "actionScheduledPublishOn": "已排期于 {{date}} 发布", + "actionsLabel": "操作", + "actionType": "操作类型", + "actionUnpublished": "已取消发布", + "activityByResource": "按资源的活动", + "activityLog": "活动日志", + "activityLogSubtitle": "按资源和用户划分的实例时间线", + "activityLogTitle": "活动日志", + "affectedZUIDDeleted": "{{affectedZUID}} (已删除)", + "affectedZUIDMissingMetaTitle": "{{affectedZUID}} (缺少 Meta 标题)", + "allResponseCodes": "所有响应代码", + "apiErrorMessage": "加载数据时出错", + "apiErrorRetry": "重试", + "apiErrorTitle": "哎呀!", + "bandwidth": "带宽", + "bandwidthBreakdown": "带宽细分", + "blockVariants": "区块变体", + "cdnUrl": "CDN URL", + "codeFilesAndSnippets": "代码文件和片段", + "contentModel": "内容模型", + "created": "已创建", + "date": "日期", + "deleted": "已删除", + "deletedZuid": "{{zuid}} (已删除)", + "deletedZUID": "{{zuid}} (已删除)", + "emptyStateHint": "尝试调整筛选条件以找到您需要的内容。", + "failingNotFound": "失败未找到 (404)", + "fieldPrefix": "字段 {{message}}", + "fileName": "文件名", + "fileTypeDataset": "Headless 数据模型", + "fileTypePageset": "多页模型", + "fileTypeTemplateset": "单页模型", + "headTag": "Head 标签", + "htmlCssBandwidth": "HTML/CSS/JavaScript 带宽", + "insightActions": "操作", + "instanceZuid": "实例 ZUID", + "lastActionAt": "最后操作于 {{time}}", + "lastActionAtContentModel": "最后操作于 {{lastAction}} • 内容模型", + "lastActionAtSettings": "最后操作于 {{lastAction}} • 设置", + "lastUpdated": "最后更新:{{date}}", + "leastActive": "最不活跃", + "loadingMetrics": "正在加载指标", + "maliciousDeflected": "恶意/已防御 (403)", + "mediaBandwidth": "媒体带宽", + "messageButton": "发消息", + "metrics": "指标", + "metricsLoadError": "加载指标时出错:{{message}}", + "missingMetaTitleZuid": "{{zuid}} (缺少 Meta 标题)", + "missingMetaTitleZUID": "{{zuid}} (缺少 Meta 标题)", + "modelTypeBlockVariant": "区块变体", + "modelTypeHeadlessDataItem": "Headless 数据项", + "modelTypeMultiPageItem": "多页项", + "modelTypeSinglePageItem": "单页项", + "modified": "已修改", + "mostActive": "最活跃", + "mostRecent": "最新优先", + "mostRecentlyActive": "近期最活跃", + "noInsightsFound": "未找到洞察", + "noLogsFound": "未找到日志", + "noResourcesFound": "未找到资源", + "oldestFirst": "最早优先", + "other": "其他", + "pageRedirects": "页面重定向 (301)", + "pageRequests": "页面请求", + "past30Days": "过去 30 天", + "past7Days": "过去 7 天", + "pastDay": "前一天", + "pastDayWeek": "前一天所在周", + "platformRequestBreakdown": "平台请求细分(总计)", + "published": "已发布", + "publishes": "发布次数", + "redirectUrl": "重定向 URL", + "request": "请求", + "requests": "请求数", + "resources": "资源", + "resourcesImpacted": "受影响的资源", + "scheduled": "已排期", + "selectDateRange": "选择日期范围", + "settings": "设置", + "successfulMediaRequests": "成功的媒体请求", + "successfulPageLoads": "成功加载的页面 (200)", + "tabInsights": "洞察", + "tabResources": "资源", + "tabTimeline": "时间线", + "tabUsers": "用户", + "top10ActiveUsers": "前 10 名活跃用户", + "top301Redirects": "301 重定向排行", + "topFileNotFound": "未找到的文件排行 (404)", + "topMaliciousDeflected": "恶意/已防御请求排行", + "topRequestedMedia": "最常请求的媒体", + "topRequestedPages": "最常请求的页面", + "totalBandwidth": "总带宽", + "totalRequests": "总请求数", + "totalUsageBreakdown": "总使用量细分", + "unknownUser": "未知用户", + "unpublished": "已取消发布", + "url": "URL", + "usageReport": "使用报告", + "usageReportFor": "{{timePeriod}} {{unit}} 的使用报告:{{startDisplay}} - {{endDisplay}}", + "userAvatar": "{{name}} 的头像", + "userAvatarAlt": "{{firstName}} {{lastName}} 的头像", + "userEmailCopied": "用户邮箱已复制到剪贴板", + "userListItemSecondary": "{{roleName}} • {{actionCount}} 个操作 • 最后操作于 {{lastAction}}", + "userRole": "用户角色", + "viewAuditTrailReport": "查看审计追踪报告" +} diff --git a/public/locales/zh-CN/schema.json b/public/locales/zh-CN/schema.json new file mode 100644 index 0000000000..be1143c2ba --- /dev/null +++ b/public/locales/zh-CN/schema.json @@ -0,0 +1,773 @@ +{ + "activityDetails": "活动详情", + "activityDetailsSubtitle": "了解模型的创建和更新时间及操作人", + "addAnotherField": "添加另一个字段", + "addAnotherFieldToModel": "向 {{modelLabel}} 添加另一个字段", + "addField": "添加字段", + "addFieldsDescription": "定义需要成为此模型一部分的不同字段。", + "addFieldsHeading": "添加字段", + "addFieldTitle": "添加 {{name}} 字段", + "addFieldToLabel": "向 {{label}} 添加字段", + "addFieldToName": "向 {{name}} 添加字段", + "addOption": "添加选项", + "advanced": "高级", + "allModels": "所有模型", + "allModelsHeading": "所有模型", + "apiAccessDescription": "Zesty 提供多种用于访问此内容的 API,每种都有其独特的优势。选择最符合您需求的一种。", + "apiAccessOptions": "API 访问选项", + "apiBackendCodingDescription": "Zesty 的 REST API 授予对创建、读取、更新、删除和发布命令的完全访问权限。API 可以通过直接 API 调用或通过 Node SDK 访问。", + "apiBestUsedFor": "最适合用于", + "apiCustomEndpointsDescription": "使用 Zesty.io Parsley 和 Webengine 构建任何数据类型(JSON、XML、HTML 等)和任何水合级别。", + "apiGraphqlDescription": "非常适合为 GraphQL 服务器提供数据的扁平对象端点。只能通过遍历模型的 GQL 端点上的数据来访问。", + "apiLabelBackendCoding": "后端编程", + "apiLabelCustomEndpoints": "自定义端点", + "apiLabelGraphql": "GraphQL", + "apiLabelQuickAccess": "快速访问", + "apiLabelSiteGenerators": "网站生成器", + "apiLabelVisualLayout": "可视化布局", + "apiParsleyReferenceId": "API/Parsley 参考 ID", + "apiParsleyReferenceIdTooltip": "用于通过 API 或 Parsley 访问此模型的 ID", + "apiQuickAccessDescription": "提供对完整模型项目或单个项目 JSON 端点(包含各种信息)的访问。数据需要手动水合。", + "apiSiteGeneratorsDescription": "Zesty 将每个 URL 转换为带有水合关联和导航信息的 JSON。添加到此模型的每个内容项都可以访问水合 JSON URL。", + "apiTagReadAndWrite": "读写", + "apiTagReadOnly": "只读", + "apiUrlLabel": "API URL", + "apiUseApplicationsWithRouting": "带路由的应用程序", + "apiUseAppsOrHeadlessLayouts": "应用或无头布局", + "apiUseAutomation": "自动化", + "apiUseAutomationDesign": "自动化设计", + "apiUseContentExperiences": "内容体验", + "apiUseCustomApps": "自定义应用", + "apiUseCustomContentHydration": "自定义内容水合", + "apiUseFullyPaintedHtmlViews": "完全渲染的 HTML 视图", + "apiUseGraphQlImplementations": "GraphQL 实现", + "apiUseHeadlessApplets": "无头小程序", + "apiUseHeadlessWebDevelopment": "无头 Web 开发", + "apiUseMiddleware": "中间件", + "apiUseMobileApplications": "移动应用程序", + "apiUseSearch": "搜索", + "apiUseUserGeneratedContent": "用户生成内容", + "apiVisualLayoutDescription": "可视布局可从渲染的 HTML 或 toJSON 端点的结构化 JSON 中访问。", + "blockGroup": "区块组", + "booleanOptionsLabel": "布尔选项", + "cannotCreateModelTitle": "无法创建模型", + "characterLimitDescription": "设置允许的最小和/或最大字符数", + "characterLimitLabel": "限制字符数", + "characterLimitMaxLabel": "最大字符数(含空格)", + "characterLimitMinLabel": "最小字符数(含空格)", + "clearFilters": "清除筛选", + "comingSoon": "即将推出", + "commonFieldDescriptionLabel": "描述", + "commonFieldDescriptionTooltip": "显示在显示标签下方。用于为内容编写者和 API 用户提供说明。", + "commonFieldLabelLabel": "显示标签", + "commonFieldLabelTooltip": "在 Schema 中显示的字段名称。", + "commonFieldListLabel": "作为表格列表中的列添加", + "commonFieldListSubLabel": "在内容视图的表格中将字段显示为列", + "commonFieldNameLabel": "API / Parsley 代码 ID", + "commonFieldNameTooltip": "这将出现在 API 响应中", + "commonFieldRequiredLabel": "必填字段", + "commonFieldRequiredSubLabel": "确保如果字段为空则无法创建项目", + "commonFieldTooltipLabel": "工具提示", + "commonFieldTooltipTooltip": "显示给内容编辑者的工具提示。", + "commonUses": "常见用途", + "copyEmail": "复制邮箱", + "copyFieldZuid": "复制字段 ZUID", + "copyFieldZUID": "复制字段 ZUID", + "copyModelZUID": "复制模型 ZUID", + "createdOn": "创建于", + "createModel": "创建模型", + "createModelButton": "创建模型", + "createModelTitle": "创建 {{modelName}}", + "currencyFieldLabel": "货币", + "currencyFieldPlaceholder": "选择货币", + "currencyFieldTooltip": "所选货币代码、符号和标志将在内容项中显示,并可通过 API 的字段设置访问。", + "currencyFlagAlt": "{{countryCode}} 国旗", + "deactivatedFields": "已停用字段", + "deactivatedFieldsDescription": "如果您想将这些字段恢复到内容模型中,可以随时重新激活它们。", + "deactivateField": "停用字段", + "deactivatingField": "正在停用字段", + "defaultValue": "默认值", + "defaultValueDescription": "为此字段设置预定义值", + "defaultValueHelperText": "为此字段设置预定义值", + "defaultValueLabel": "默认值", + "deleteModel": "删除模型", + "deleteModelCannotDeleteNotify": "无法删除模型:{{modelLabel}}", + "deleteModelConfirmLabel": "通过在下方输入 \"{{modelLabel}}\" 进行确认。", + "deleteModelFailedNotify": "删除模型失败", + "deleteModelTitle": "删除模型?", + "deleteModelWarning": "删除 \"{{modelLabel}}\" 模型也将删除其所有内容项。此操作无法撤销。", + "descriptionLabel": "描述", + "descriptionPlaceholder": "此模型将用于什么", + "descriptionTooltip": "向内容编写者显示模型的用途", + "displayNameLabel": "显示名称", + "displayNamePlaceholder": "例如:首页、关于页面、联系页面等", + "displayNameTooltip": "向内容编辑者显示的名称", + "dropdownOptionsLabel": "下拉选项", + "duplicate": "复制", + "duplicateModel": "复制模型", + "duplicateModelAlertBodyRich": "您即将复制 {{label}} 模型及其所有现有字段。不会复制任何内容项。", + "duplicateModelDescriptionLabel": "描述", + "duplicateModelDescriptionPlaceholder": "此模型将用于什么", + "duplicateModelDisplayNameLabel": "显示名称", + "duplicateModelDisplayNamePlaceholder": "\"{{label}}\" 的副本", + "duplicateModelFailed": "复制模型失败", + "duplicateModelListedDescription": "已列出的模型的内容项可通过程序化导航调用获取。", + "duplicateModelListedLabel": "列出此模型", + "duplicateModelParentLabel": "模型父级", + "duplicateModelParentPlaceholder": "选择", + "duplicateModelReferenceIdLabel": "参考 ID", + "duplicateModelReferenceIdPlaceholder": "从显示名称自动生成", + "duplicateModelSubtitle": "作为 {{type}} 模型", + "duplicateModelTitle": "复制 {{label}} 模型", + "editField": "编辑字段", + "editFieldTitle": "编辑 {{label}}", + "editInCode": "在代码中编辑", + "editTemplateFile": "编辑模板文件", + "emptyStateBody": "模型定义了内容项的结构,例如首页或文章,类似于您在右侧看到的模型示例。", + "emptyStateHeading": "让我们从创建模型开始", + "emptyStateLinkBestPractices": "了解创建模型的最佳实践", + "emptyStateLinkBuildingModels": "阅读我们的模型构建指南", + "endpointDevLabel": "开发版(最新版本)", + "endpointProduction": "生产环境", + "enterLabel": "输入标签", + "enterValue": "输入值", + "errorFieldIsRequired": "{{label}} 为必填项", + "errorFieldReferenceExists": "已存在具有此 API/Parsley 参考的字段", + "errorOptionValueExists": "已存在具有此值的选项", + "errorShortenToLess": "缩短至少于 {{maxLength}} 个字符({{currentLength}}/{{maxLength}})", + "errorSystemReservedFieldName": "\"{{value}}\" 是系统保留字段名称", + "extensionPresetAudios": "音频", + "extensionPresetDocuments": "文档", + "extensionPresetImages": "图片", + "extensionPresetPresentations": "演示文稿", + "extensionPresetSpreadsheets": "电子表格", + "extensionPresetVideos": "视频", + "failedCreateField": "创建字段失败", + "failedCreateModel": "创建模型失败", + "failedUpdateField": "更新字段失败", + "faqBadge": "常见问题", + "fieldCategoryAdvanced": "高级", + "fieldCategoryDateAndTime": "日期和时间", + "fieldCategoryMedia": "媒体", + "fieldCategoryNumeric": "数字", + "fieldCategoryRelationship": "关联", + "fieldCategoryText": "文本", + "fieldDeactivated": "\"{{label}}\" 字段已停用", + "fieldDescriptionBodyText": "提供表单背景或说明的详细文字。", + "fieldDescriptionButtonContainerSubText": "左侧区域号召性用语按钮下方的辅助文字。", + "fieldDescriptionCompanyLogo": "该人所代表的公司标志。", + "fieldDescriptionCompanyName": "该人所代表的公司名称。", + "fieldDescriptionCtaButton1TextLeftSection": "左侧区域第一个号召性用语按钮的文字。", + "fieldDescriptionCtaButton1TextNoSection": "第一个号召性用语按钮的文字", + "fieldDescriptionCtaButton1Url": "第一个号召性用语按钮链接到的 URL。", + "fieldDescriptionCtaButton2TextLeftSection": "左侧区域第二个号召性用语按钮的文字。", + "fieldDescriptionCtaButton2Url": "第二个号召性用语按钮链接到的 URL。", + "fieldDescriptionCtaButtonTextFeatureSection": "功能区域号召性用语按钮的文字。", + "fieldDescriptionCtaButtonUrl": "号召性用语按钮链接到的 URL。", + "fieldDescriptionFeatureIntroLink": "链接到功能介绍文字的 URL。", + "fieldDescriptionFeatureIntroText": "功能区域的简短介绍文字。", + "fieldDescriptionFormCtaButtonText": "表单上号召性用语按钮的文字。", + "fieldDescriptionFormHeaderText": "联系表单的副标题或介绍。", + "fieldDescriptionHeroImageFeatureSection": "显示在功能区域旁边的图片。", + "fieldDescriptionHeroImageHeroSection": "显示在主图区域的图片。", + "fieldDescriptionHeroImageRight": "显示在主图区域右侧的图片。", + "fieldDescriptionJobTitle": "提供引用的人的职位。", + "fieldDescriptionNameInput": "姓名输入字段的标签。", + "fieldDescriptionPersonEmail": "主要联系人的电子邮件地址。", + "fieldDescriptionPersonImage": "提供引用的人的图片。", + "fieldDescriptionPersonName": "主要联系人的姓名。", + "fieldDescriptionPersonNameTestimonial": "提供引用的人的姓名。", + "fieldDescriptionPersonPhoto": "主要联系人的照片。", + "fieldDescriptionPersonTitle": "主要联系人的职称或角色。", + "fieldDescriptionPosition": "该人在其公司中的职务。", + "fieldDescriptionQuote": "某人提供的推荐语或引用。", + "fieldDescriptionStarRatingNumber": "在主图区域显示的数字评分。", + "fieldDescriptionStarRatingSubText": "关于星级评分的附加详情。", + "fieldDescriptionStarRatingTitle": "描述星级评分的标题。", + "fieldDescriptionSubTitleFeatureSection": "提供功能更多详情的辅助文字。", + "fieldDescriptionSubTitleHeroSection": "显示在主图区域标题下方的辅助文字。", + "fieldDescriptionSubTitleLeftSection": "显示在左侧区域标题下方的辅助文字。", + "fieldDescriptionTitle": "显示在左侧区域的主标题。", + "fieldDescriptionTitleContactForm": "联系表单的主标题。", + "fieldDescriptionTitleFeatureSection": "功能区域的主标题。", + "fieldDescriptionTitleHeroSection": "显示在主图区域的主标题。", + "fieldDescriptionTopCtaButtonText": "顶部号召性用语按钮的文字。", + "fieldDescriptionTopCtaButtonUrl": "顶部号召性用语按钮链接到的 URL。", + "fieldFormTabDetails": "详情", + "fieldFormTabLearn": "学习", + "fieldFormTabRepeaterFields": "字段", + "fieldFormTabRules": "规则", + "fieldLabelBodyText": "正文", + "fieldLabelButtonContainerSubText": "按钮容器副文字", + "fieldLabelCompanyLogo": "公司标志", + "fieldLabelCompanyName": "公司名称", + "fieldLabelCtaButton1Text": "CTA 按钮 1 文字", + "fieldLabelCtaButton1Url": "CTA 按钮 1 URL", + "fieldLabelCtaButton2Text": "CTA 按钮 2 文字", + "fieldLabelCtaButton2Url": "CTA 按钮 2 URL", + "fieldLabelCtaButtonText": "CTA 按钮文字", + "fieldLabelCtaButtonUrl": "CTA 按钮 URL", + "fieldLabelFeatureIntroLink": "功能介绍链接", + "fieldLabelFeatureIntroText": "功能介绍文字", + "fieldLabelFormCtaButtonText": "表单 CTA 按钮文字", + "fieldLabelFormHeaderText": "表单标题文字", + "fieldLabelHeroImage": "主图", + "fieldLabelJobTitle": "职位", + "fieldLabelPersonEmail": "联系人邮箱", + "fieldLabelPersonImage": "人物图片", + "fieldLabelPersonName": "联系人姓名", + "fieldLabelPersonPhoto": "联系人照片", + "fieldLabelPersonTitle": "联系人职称", + "fieldLabelPosition": "职务", + "fieldLabelQuote": "引用", + "fieldLabelStarRatingNumber": "星级评分数字", + "fieldLabelStarRatingSubText": "星级评分副文字", + "fieldLabelStarRatingTitle": "星级评分标题", + "fieldLabelSubTitle": "副标题", + "fieldLabelTitle": "标题", + "fieldLabelTopCtaButtonText": "顶部 CTA 按钮文字", + "fieldLabelTopCtaButtonUrl": "顶部 CTA 按钮 URL", + "fieldListSearchPlaceholder": "搜索字段", + "fieldReactivated": "\"{{label}}\" 字段已重新激活", + "fields": "字段", + "fieldToDisplayLabel": "要显示的字段", + "fieldToDisplayPlaceholder": "选择字段", + "fieldTypeBlockSelectorCommonUse1": "页脚部分", + "fieldTypeBlockSelectorCommonUse2": "文章末尾的区块", + "fieldTypeBlockSelectorCommonUse3": "表单", + "fieldTypeBlockSelectorDescription": "区块选择器字段允许用户选择他们希望在页面上渲染的任何区块模型的唯一变体。", + "fieldTypeBlockSelectorName": "区块选择器", + "fieldTypeBlockSelectorProTip": "当您希望在同一模型的不同页面末尾使用不同的结尾区块时,这些非常有用。", + "fieldTypeBlockSelectorShortDesc": "链接到区块模型的变体", + "fieldTypeBlockSelectorSubHeader": "链接到区块模型的变体", + "fieldTypeBooleanCommonUse1": "标记精选博客文章、产品", + "fieldTypeBooleanCommonUse2": "电商产品折扣", + "fieldTypeBooleanCommonUse3": "标记徽章,如\"专业作者\"", + "fieldTypeBooleanCommonUse4": "隐藏项目", + "fieldTypeBooleanDescription": "当您希望字段只有两个可能值时,请使用此字段。例如:是或否、真或假、精选或未精选等。", + "fieldTypeBooleanName": "布尔值", + "fieldTypeBooleanProTip": "使用布尔字段可以过滤出要在内容集合中显示的项目。", + "fieldTypeBooleanShortDesc": "真或假", + "fieldTypeBooleanSubHeader": "用于设置真或假的值", + "fieldTypeColorCommonUse1": "背景颜色", + "fieldTypeColorCommonUse2": "边框颜色", + "fieldTypeColorCommonUse3": "字体颜色", + "fieldTypeColorCommonUse4": "更改分类标签的颜色", + "fieldTypeColorDescription": "当您想要为页面上的不同元素(如背景颜色、文字颜色、边框等)设置样式时,此字段非常适合。贡献者将获得一个颜色选择器来选择他们喜欢的颜色。", + "fieldTypeColorName": "颜色", + "fieldTypeColorProTip": "颜色选择器可用于以独特的方式突出显示项目,并让用户轻松区分不同项目。", + "fieldTypeColorShortDesc": "背景颜色、字体颜色等", + "fieldTypeColorSubHeader": "用于背景颜色、字体颜色等", + "fieldTypeCurrencyCommonUse1": "产品或服务的成本价", + "fieldTypeCurrencyCommonUse2": "产品或服务的销售价格", + "fieldTypeCurrencyDescription": "当您想要存储成本、价格或账户余额时,请使用此字段。", + "fieldTypeCurrencyName": "货币", + "fieldTypeCurrencyProTip": "如果要存储价格,请使用货币字段而不是数字字段。", + "fieldTypeCurrencyShortDesc": "非常适合产品价格", + "fieldTypeCurrencySubHeader": "用于存储成本、价格和余额", + "fieldTypeDateCommonUse1": "出生日期", + "fieldTypeDateCommonUse2": "周年纪念日", + "fieldTypeDateCommonUse3": "历史日期", + "fieldTypeDateCommonUse4": "发布日期", + "fieldTypeDateDescription": "当您希望输入为过去、现在或未来的日期时,请使用此字段。您可以自定义用户是否可以输入日、月、年或全部三项。\n\n Zesty 会自动追踪创建日期、发布日期和修改日期的日期和时间,因此无需为这些内容创建额外字段。", + "fieldTypeDateName": "日期", + "fieldTypeDateProTip": "如果想在日期中添加时间,请使用日期时间字段。", + "fieldTypeDateShortDesc": "非常适合生日、发布日期、活动等", + "fieldTypeDateSubHeader": "用于生日、发布日期、活动等", + "fieldTypeDateTimeCommonUse1": "活动开始和结束时间", + "fieldTypeDateTimeCommonUse2": "发货时间", + "fieldTypeDateTimeCommonUse3": "截止日期", + "fieldTypeDateTimeDescription": "当您希望输入为日期和时间时,请使用此字段。您可以自定义用户是否可以输入时间、日、月、年或全部四项。\n\n Zesty 会自动追踪创建日期、发布日期和修改日期的日期和时间,因此无需为这些内容创建额外字段。", + "fieldTypeDateTimeName": "日期和时间", + "fieldTypeDateTimeProTip": "如果只想要日期,请使用日期字段。", + "fieldTypeDateTimeShortDesc": "追踪日期及具体时间", + "fieldTypeDateTimeSubHeader": "用于追踪日期及具体时间", + "fieldTypeDropdownCommonUse1": "性别", + "fieldTypeDropdownCommonUse2": "预定义尺寸", + "fieldTypeDropdownCommonUse3": "语言", + "fieldTypeDropdownCommonUse4": "公司部门", + "fieldTypeDropdownDescription": "当您希望用户从您预定义的下拉菜单选项中选择值时,请使用此字段。您可以在字段设置中定义这些值。", + "fieldTypeDropdownName": "下拉菜单", + "fieldTypeDropdownProTip": "您添加到下拉字段的值只能在该字段所在的模型中使用。如果您需要在多个模型中可重用和可访问的值,请为其创建一个单独的模型,然后使用单项或多项关联字段连接到它。", + "fieldTypeDropdownShortDesc": "从值列表中选择", + "fieldTypeDropdownSubHeader": "用于允许用户从值列表中选择", + "fieldTypeExternalUrlCommonUse1": "链接到联盟网站(如 Amazon)", + "fieldTypeExternalUrlCommonUse2": "链接到 Facebook、Instagram 等社交媒体页面", + "fieldTypeExternalUrlCommonUse3": "链接到第三方服务,如活动用 Eventbrite 或订单用 Doordash", + "fieldTypeExternalUrlDescription": "此字段非常适合存储外部网站页面的 URL。这些链接可以被用户查看和点击。", + "fieldTypeExternalUrlName": "外部 URL", + "fieldTypeExternalUrlProTip": "您也可以在富文本字段中添加链接。", + "fieldTypeExternalUrlShortDesc": "链接到外部网站", + "fieldTypeExternalUrlSubHeader": "使用此字段链接到外部网站", + "fieldTypeIntegrationCommonUse1": "统计数据 - 获取外部统计数据", + "fieldTypeIntegrationCommonUse2": "第三方集成 - 从外部应用获取详情", + "fieldTypeIntegrationCommonUse3": "表单 - 导入外部表单提交", + "fieldTypeIntegrationCommonUse4": "从另一个 Zesty 实例导入内容", + "fieldTypeIntegrationCommonUse5": "外部 CMS - 显示来自外部 CMS 的内容", + "fieldTypeIntegrationCommonUse6": "电子表格 - 提取电子表格数据", + "fieldTypeIntegrationDescription": "此字段允许用户从 JSON API 获取数据,选择条目并将其添加到内容项中。数据在重新选择之前保持静态,确保受控更新。", + "fieldTypeIntegrationName": "集成", + "fieldTypeIntegrationProTip": "数据以 JSON 对象形式存储,可以通过无头方式或使用 Parsley 在模板中进行动态渲染来访问。", + "fieldTypeIntegrationShortDesc": "从 API 获取和存储数据", + "fieldTypeIntegrationSubHeader": "从 API 获取和存储数据", + "fieldTypeInternalLinkCommonUse1": "链接到内部产品", + "fieldTypeInternalLinkCommonUse2": "链接到内部文章", + "fieldTypeInternalLinkDescription": "内部链接字段允许从任何模式中选择内部实例项目。这对于为作者提供在实例中关联项目的能力非常有用。", + "fieldTypeInternalLinkName": "内部链接", + "fieldTypeInternalLinkProTip": "如果您想链接到外部网站,可以使用外部 URL 字段。", + "fieldTypeInternalLinkShortDesc": "链接到内部内容项", + "fieldTypeInternalLinkSubHeader": "使用此字段链接到内部内容项", + "fieldTypeMarkdownCommonUse1": "博客文章", + "fieldTypeMarkdownCommonUse2": "文章", + "fieldTypeMarkdownCommonUse3": "指南", + "fieldTypeMarkdownCommonUse4": "列表", + "fieldTypeMarkdownCommonUse5": "活动描述", + "fieldTypeMarkdownDescription": "此字段为贡献者提供 Github 风格的 Markdown 编辑器语法,用于样式化和组织内容。", + "fieldTypeMarkdownName": "Markdown", + "fieldTypeMarkdownProTip": "当您希望贡献者对文本应用任何样式和结构时,此字段非常有用。", + "fieldTypeMarkdownShortDesc": "轻量级标记语言,用于格式化文本", + "fieldTypeMarkdownSubHeader": "轻量级标记语言,用于格式化文本", + "fieldTypeMediaCommonUse1": "文章封面图片", + "fieldTypeMediaCommonUse2": "作者或团队成员的头像", + "fieldTypeMediaCommonUse3": "产品图库", + "fieldTypeMediaCommonUse4": "插图和图标", + "fieldTypeMediaCommonUse5": "演示、教程、公司入职培训的视频", + "fieldTypeMediaCommonUse6": "背景图片", + "fieldTypeMediaCommonUse7": "白皮书、电子书、菜单、地图等的 PDF", + "fieldTypeMediaCommonUse8": "PowerPoint 演示文稿", + "fieldTypeMediaDescription": "此字段允许用户添加一个或多个媒体文件,如图片、视频、文档、演示文稿等。您可以设置用户可上传的最大文件数量和每次上传的最大文件大小。", + "fieldTypeMediaName": "媒体", + "fieldTypeMediaProTip": "您也可以在富文本字段中内嵌添加媒体。", + "fieldTypeMediaShortDesc": "图片、视频、PDF 及其他文件", + "fieldTypeMediaSubHeader": "用于图片、视频、PDF 及其他文件", + "fieldTypeMultiLineTextCommonUse1": "副标题", + "fieldTypeMultiLineTextCommonUse2": "文章摘要", + "fieldTypeMultiLineTextCommonUse3": "产品描述", + "fieldTypeMultiLineTextCommonUse4": "分类描述", + "fieldTypeMultiLineTextCommonUse5": "作者简介", + "fieldTypeMultiLineTextDescription": "多行文本字段最适合不需要特殊格式、链接或媒体的长文本内容。", + "fieldTypeMultiLineTextName": "多行文本", + "fieldTypeMultiLineTextProTip": "当您希望确保内容贡献者无法对文本应用任何样式时,此字段非常有用。", + "fieldTypeMultiLineTextShortDesc": "描述、摘要和简介", + "fieldTypeMultiLineTextSubHeader": "用于描述、摘要和简介", + "fieldTypeNumberCommonUse1": "库存产品数量", + "fieldTypeNumberCommonUse2": "排名", + "fieldTypeNumberCommonUse3": "评分", + "fieldTypeNumberCommonUse4": "重量", + "fieldTypeNumberCommonUse5": "高度", + "fieldTypeNumberDescription": "当您希望输入为数字时,请使用此字段。", + "fieldTypeNumberName": "数字", + "fieldTypeNumberProTip": "数字字段可以保存整数和小数。", + "fieldTypeNumberShortDesc": "整数和浮点数", + "fieldTypeNumberSubHeader": "用于数量、年龄、评分等", + "fieldTypeOneToManyCommonUse1": "将文章链接到多个作者、标签或分类", + "fieldTypeOneToManyCommonUse2": "将作者链接到多个服务", + "fieldTypeOneToManyDescription": "此字段允许您将模型连接到另一个模型,并连接多个项目而不是一个。", + "fieldTypeOneToManyName": "一对多关联", + "fieldTypeOneToManyProTip": "当您发现自己或团队反复输入相同的内容(如作者姓名)时,使用此字段非常有效。例如,创建一个作者模型并与之连接是合理的,否则每篇文章都需要重复输入。", + "fieldTypeOneToManyShortDesc": "链接到模型的多个内容项", + "fieldTypeOneToManySubHeader": "使用此字段链接到模型的多个内容项", + "fieldTypeOneToOneCommonUse1": "将文章链接到单个作者或分类", + "fieldTypeOneToOneCommonUse2": "将员工链接到单个服务", + "fieldTypeOneToOneDescription": "此字段非常适合将您的模型与另一个模型连接。例如,将博客链接到分类或作者。", + "fieldTypeOneToOneName": "一对一关联", + "fieldTypeOneToOneProTip": "当您发现自己或团队反复输入相同的内容(如作者姓名)时,使用此字段非常有效。例如,创建一个作者模型并与之连接是合理的,否则每篇文章都需要重复输入。", + "fieldTypeOneToOneShortDesc": "链接到模型的一个内容项", + "fieldTypeOneToOneSubHeader": "使用此字段链接到模型的一个内容项", + "fieldTypeRepeaterCommonUse1": "幻灯片", + "fieldTypeRepeaterCommonUse2": "推荐语", + "fieldTypeRepeaterCommonUse3": "食谱", + "fieldTypeRepeaterCommonUse4": "活动时间", + "fieldTypeRepeaterDescription": "重复器字段允许您为重复内容创建一组字段。适用于多个项目,如幻灯片、团队成员或常见问题解答。", + "fieldTypeRepeaterName": "重复器", + "fieldTypeRepeaterProTip": "使用重复器字段来管理具有共享结构但内容唯一的列表或部分,如食谱或推荐语。", + "fieldTypeRepeaterShortDesc": "分组字段的重复列表", + "fieldTypeRepeaterSubHeader": "用于静态字段组", + "fieldTypeSingleLineTextCommonUse1": "文章标题", + "fieldTypeSingleLineTextCommonUse2": "作者姓名", + "fieldTypeSingleLineTextCommonUse3": "活动名称", + "fieldTypeSingleLineTextCommonUse4": "分类标签", + "fieldTypeSingleLineTextCommonUse5": "标题", + "fieldTypeSingleLineTextDescription": "\"单行文本\"字段最适合不需要特殊格式、链接或媒体的短文本内容。", + "fieldTypeSingleLineTextName": "单行文本", + "fieldTypeSingleLineTextProTip": "当您希望确保内容贡献者无法对文本应用任何样式时,此字段非常有用。", + "fieldTypeSingleLineTextShortDesc": "标题、名称和标题栏", + "fieldTypeSingleLineTextSubHeader": "用于标题、名称和标题栏", + "fieldTypeSortOrderCommonUse1": "设置精选产品的顺序", + "fieldTypeSortOrderCommonUse2": "设置分类的顺序", + "fieldTypeSortOrderCommonUse3": "设置课程视频的顺序", + "fieldTypeSortOrderDescription": "有时您可能希望按用户自定义顺序对数据进行排序,而不是按名称或日期。在这种情况下,您可以添加排序顺序字段,该字段允许您为每个内容项指定顺序编号。", + "fieldTypeSortOrderName": "排序顺序", + "fieldTypeSortOrderProTip": "您可以在内容项视图以及表格视图中使用加减按钮更改默认排序编号。", + "fieldTypeSortOrderShortDesc": "为内容项添加顺序", + "fieldTypeSortOrderSubHeader": "用于为内容项添加顺序", + "fieldTypeUuidCommonUse1": "产品 ID", + "fieldTypeUuidCommonUse2": "库存 ID", + "fieldTypeUuidCommonUse3": "员工 ID", + "fieldTypeUuidDescription": "UUID 字段在创建项目时会生成一个唯一的字母数字字符串。这对于分析追踪、库存管理、用户管理等非常有用。", + "fieldTypeUuidName": "UUID", + "fieldTypeUuidProTip": "UUID 始终唯一且不可编辑。", + "fieldTypeUuidShortDesc": "生成唯一的、不可编辑的字母数字标识符", + "fieldTypeUuidSubHeader": "用于为每个内容项设置唯一 ID", + "fieldTypeWysiwygCommonUse1": "博客文章", + "fieldTypeWysiwygCommonUse2": "文章", + "fieldTypeWysiwygCommonUse3": "指南", + "fieldTypeWysiwygCommonUse4": "列表", + "fieldTypeWysiwygCommonUse5": "活动描述", + "fieldTypeWysiwygDescription": "此字段最适合包含多个标题、段落以及内嵌媒体(如视频、图片或链接)的长文本内容。您还可以应用高级文本格式,如粗体、斜体和下划线。", + "fieldTypeWysiwygName": "WYSIWYG", + "fieldTypeWysiwygProTip": "当您希望贡献者对文本应用任何样式和结构时,此字段非常有用。", + "fieldTypeWysiwygShortDesc": "包含链接和图片的长文本内容,如博客", + "fieldTypeWysiwygSubHeader": "包含链接和图片的长文本内容,如博客", + "fieldValidationTitle": "字段验证、默认值及更多", + "fileExtensionsErrorMessageLabel": "文件扩展名错误消息", + "fileExtensionsLabel": "文件扩展名", + "folderDeletedError": "此项目锁定到的文件夹已被删除", + "formFieldApiCodeId": "API / Parsley 代码 ID", + "formFieldApiCodeIdTooltip": "这将出现在 API 响应中", + "formFieldApiUrl": "API URL", + "formFieldBooleanOptions": "布尔选项", + "formFieldCurrencyLabel": "货币", + "formFieldCurrencyPlaceholder": "选择货币", + "formFieldCurrencyTooltip": "所选货币代码、符号和国旗将在内容项的此字段中显示,并可通过 API 的字段设置访问。", + "formFieldDefaultValue": "默认值", + "formFieldDescriptionLabel": "描述", + "formFieldDescriptionTooltip": "显示在显示标签下方。用于为内容编写者和 API 用户提供说明。", + "formFieldDisplayLabel": "显示标签", + "formFieldDisplayLabelTooltip": "在模式中显示的字段名称。", + "formFieldDropdownOptions": "下拉选项", + "formFieldFieldToDisplay": "要显示的字段", + "formFieldFieldToDisplayPlaceholder": "选择字段", + "formFieldFileExtensions": "文件扩展名", + "formFieldFileExtensionsErrorMessage": "文件扩展名错误消息", + "formFieldListLabel": "作为表格列表中的列添加", + "formFieldListSubLabel": "在内容视图的表格中将字段显示为列", + "formFieldMaxCharLimit": "最大字符数(含空格)", + "formFieldMaxValue": "最大值", + "formFieldMediaItemLimit": "媒体项目限制", + "formFieldMediaItemLimitTooltip": "将最小媒体文件限制设置为 1。不能更低。", + "formFieldMinCharLimit": "最小字符数(含空格)", + "formFieldMinValue": "最小值", + "formFieldReferenceModel": "参考模型", + "formFieldReferenceModelPlaceholder": "选择模型", + "formFieldRegexMatchErrorMessage": "正则表达式匹配错误消息", + "formFieldRegexMatchPattern": "正则表达式匹配模式", + "formFieldRegexRestrictErrorMessage": "正则表达式限制错误消息", + "formFieldRegexRestrictPattern": "正则表达式限制模式", + "formFieldRequiredLabel": "必填字段", + "formFieldRequiredSubLabel": "确保如果字段为空,则无法创建项目", + "formFieldSelectFolder": "选择文件夹", + "formFieldTooltipLabel": "工具提示", + "formFieldTooltipLabelTooltip": "显示给内容编辑者的工具提示。", + "goToAllModels": "前往所有模型", + "headerTitle": "模式", + "headlessDescription": "将 Zesty 用作无头后端,支持 NextJS、NuxtJS、React、Swift、Gatsby、Flutter、Angular 等技术。", + "headlessModeDescription": "这非常适合完全在 Zesty.io 之外使用 NextJS、NuxtJS 或 Angular 等技术的工程师。当无头模式开启时,所有路由都以 JavaScript 对象表示法(JSON)渲染。\n\n注意:此更改可以稍后从通用设置中恢复", + "headlessSwitcherSubtitle": "您目前处于传统 Web 引擎模式。立即选择切换到混合或无头模式。您可以随时从通用设置中更改此项。了解更多", + "headlessSwitcherTitle": "想要访问我们的无头 API?", + "howIsDataStored": "数据是如何存储的?", + "hybridDescription": "混合模式兼取两者之优。页面仍在其路由处渲染 HTML,但也可以通过简单的 GET 参数渲染 JSON。", + "hybridModeDescription": "混合模式兼取两者之优。页面仍在其路由处渲染 HTML,但也可以通过简单的 GET 参数渲染 JSON。例如 /about/ 将返回 HTML,但 /about/?toJSON 将返回关于页面的完全水合 JSON 对象。\n\n注意:此更改可以稍后从通用设置中恢复", + "inputRangeHelperText": "设置允许的最小和/或最大值", + "inputRangeLabel": "限制输入范围", + "inputRangeMaximum": "最大值", + "inputRangeMinimum": "最小值", + "integrationLimitItemRange": "限制项目范围", + "integrationLimitItemRangeDescription": "设置项目的最小和/或最大数量", + "lastUpdated": "最后更新:{{date}}", + "lastUpdatedBy": "最后更新人", + "lastUpdatedOn": "最后更新于", + "learnBestPracticesModels": "了解创建模型的最佳实践", + "learnBlocksTutorial": "通过教程学习区块的基础知识", + "learnMore": "了解更多", + "limitCharacterCount": "限制字符数", + "limitCharacterCountDescription": "指定允许的最小和/或最大字符数", + "listThisModel": "列出此模型", + "listThisModelDescription": "已列出的模型的内容项可通过程序化导航调用获取。", + "maxValueLabel": "最大值", + "mediaItemLimitLabel": "媒体项目限制", + "mediaItemLimitTooltip": "将最小媒体文件限制设置为 1。不能更低。", + "mediaRulesAddPresetLabel": "添加", + "mediaRulesAllowMultipleLabel": "允许选择多个文件", + "mediaRulesAllowMultipleSubLabel": "确保可以上传多个文件,而不是默认的仅 1 个文件", + "mediaRulesCustomErrorMessageLabel": "自定义错误消息 *", + "mediaRulesExtensionsInputLabel": "扩展名 *", + "mediaRulesFileExtensionsAllowedError": "只允许以下扩展名的文件:{{extensions}}", + "mediaRulesLimitFileTypesLabel": "限制文件类型", + "mediaRulesLimitFileTypesSubLabel": "确保只接受特定文件类型", + "mediaRulesLockFolderLabel": "锁定到文件夹", + "mediaRulesLockFolderSubLabel": "确保只能从特定文件夹选择文件", + "minValueLabel": "最小值", + "modelDescriptionLabel": "描述", + "modelDescriptionTooltip": "向内容编写者显示模型的用途", + "modelDetailsSubtitle": "查看和更新模型的主要属性", + "modelDetailsTitle": "模型详情", + "modelNameBlock": "区块", + "modelNameDataset": "数据集", + "modelNameMultiPage": "多页面", + "modelNameSinglePage": "单页面", + "modelNameTooltip": "向内容编辑者显示的名称", + "modelParent": "模型父级", + "modelsTableColumnContentItems": "内容条目", + "modelsTableColumnFields": "字段", + "modelsTableColumnName": "名称", + "modelsTableColumnType": "模型类型", + "modelsTableColumnUpdated": "已更新", + "modelType": "模型类型", + "modelTypeBlockDescription": "创建没有 URL 但有代码模板的条目集合", + "modelTypeBlockExamples": "例如:主图、功能区、推荐语等", + "modelTypeBlockName": "区块模型", + "modelTypeDataset": "数据集", + "modelTypeDatasetDescription": "创建没有 URL 和代码模板的条目集合", + "modelTypeDatasetExamples": "例如:幻灯片、常见问题、品牌等", + "modelTypeDatasetName": "数据集模型", + "modelTypeLabel": "{{modelType}} 模型", + "modelTypeMultiPage": "多页面", + "modelTypeMultiPageDescription": "创建具有唯一 URL 和代码模板的页面集合", + "modelTypeMultiPageExamples": "例如:文章、作者、产品等", + "modelTypeMultiPageName": "多页面模型", + "modelTypeSinglePage": "单页面", + "modelTypeSinglePageDescription": "创建具有唯一 URL 和代码模板的独立页面", + "modelTypeSinglePageExamples": "例如:首页、关于页面等", + "modelTypeSinglePageName": "单页面模型", + "needHelp": "需要帮助?", + "noActiveFieldsInModel": "此模型中没有活跃字段。", + "noFilterResultsHeader": "未找到任何模型", + "noFilterResultsSubHeader": "请尝试调整筛选条件以查找所需内容。", + "noMatchesFound": "未找到匹配项。", + "noneValue": "无", + "noSearchResultsAlt": "无搜索结果", + "noSearchResultsHeader": "您搜索的 \"{{searchTerm}}\" 未找到任何结果", + "noSearchResultsSubHeader": "请尝试调整搜索条件。建议检查所有单词拼写是否正确,或尝试使用不同的关键词。", + "notifyCannotCreateModel": "无法创建模型", + "notifyPleaseAddDisplayName": "请添加显示名称", + "ogImageFieldDescription": "此字段允许您通过 SEO 选项卡设置开放图谱图片。开放图谱(OG)图片是在社交媒体上分享网页时出现的图片。", + "ogImageFieldLabel": "元图片", + "openCodeApp": "打开代码应用", + "openVisualLayout": "打开视觉布局", + "optionalLabel": "可选", + "parentModel": "父级模型", + "parentModelTooltip": "选择父级会影响 UI 中的默认路由和内容导航", + "pleaseAddDisplayName": "请添加显示名称", + "proTip": "专业提示", + "reactivateField": "重新激活字段", + "reactivatingField": "正在重新激活字段", + "readDocs": "阅读文档", + "readDocsModelTypes": "阅读我们关于不同模型类型及其用途的文档", + "readFieldTypesGuide": "阅读我们关于模式中字段类型的指南", + "referenceId": "参考 ID", + "referenceIdAlreadyInUse": "此参考 ID 已被使用,请输入其他 ID。", + "referenceIdLabel": "参考 ID", + "referenceIdPlaceholder": "从显示名称自动生成", + "referenceIdTooltip": "用于通过 API 或 Parsley 访问此模型的 ID", + "referenceModelLabel": "参考模型", + "referenceModelPlaceholder": "选择模型", + "regexCustomErrorMessage": "自定义错误消息 *", + "regexCustomErrorMessageTooltip": "当用户输入不符合要求的内容时显示", + "regexInvalidHelper": "提供的正则表达式无效。请查阅 MDN 上的正则表达式文档。", + "regexKnowledgeRequired": "需要具备正则表达式(Regex)知识。输入错误的正则表达式模式可能导致内容字段无法接受用户输入。", + "regexMatchErrorEmail": "必须是电子邮件(例如 hello@zesty.io)", + "regexMatchErrorMessageLabel": "正则表达式匹配错误消息", + "regexMatchErrorSlug": "必须是 slug(例如 everything-about-content-marketing)", + "regexMatchErrorUrl": "必须是 URL(例如 https://www.google.com/)", + "regexMatchPatternLabel": "正则表达式匹配模式", + "regexMatchSpecificPattern": "匹配特定模式", + "regexNotMatchingPattern": "不符合预期模式", + "regexPattern": "模式", + "regexPatternMatchingRules": "正则表达式模式匹配规则", + "regexPatternTooltip": "输入正则表达式(regex)模式——用于字符串模式匹配的字符序列", + "regexRestrictErrorEmail": "不能是电子邮件(例如 hello@zesty.io)", + "regexRestrictErrorMessageLabel": "正则表达式限制错误消息", + "regexRestrictErrorSlug": "不能是 slug(例如 everything-about-content-marketing)", + "regexRestrictErrorUrl": "不能是 URL(例如 https://www.google.com/)", + "regexRestrictPatternLabel": "正则表达式限制模式", + "regexRestrictSpecificPattern": "限制特定模式", + "regexSetMatchExpression": "设置输入应匹配的正则表达式(例如电子邮件、URL 等)", + "regexSetRestrictExpression": "设置输入不应匹配的正则表达式(例如电子邮件、URL 等)", + "regexType": "类型", + "regexTypeCustom": "自定义", + "regexTypeEmail": "电子邮件", + "regexTypeSlug": "Slug", + "regexTypeTooltip": "从预设正则表达式模式类型列表中选择,或编写自定义正则表达式模式", + "regexTypeUrl": "URL", + "relatedModelDeletedError": "与此关联的模型已被删除", + "relatedModels": "相关模型", + "relatedModelsDescription": "查看此模型连接到的模型", + "removeField": "删除字段", + "renameModel": "重命名模型", + "renameModelDescription": "这将更新模型的显示名称和参考 ID,这些信息将向内容编辑者和开发者显示", + "renameModelDisplayNameLabel": "显示名称", + "renameModelDisplayNameTooltip": "向内容编辑者显示的名称", + "renameModelFailedNotify": "重命名模型失败", + "renameModelReferenceIdHelperText": "参考名称用于自定义代码文件和端点。更新此值会立即在生产环境中生效。在进行更改之前,请与您的开发者确认。", + "renameModelReferenceIdLabel": "参考 ID", + "renameModelReferenceIdTooltip": "用于通过 API 或 Parsley 访问此模型的 ID", + "renameModelTitle": "重命名模型", + "repeaterDataStorageDescription": "数据以 JSON 对象数组形式存储,可以通过 Parsley 的 each 语句直接和轻松地访问。", + "repeaterSubFieldCount_one": "{{count}} 个字段", + "repeaterSubFieldCount_other": "{{count}} 个字段", + "restEndpointLabel": "REST 端点(需要身份验证令牌)", + "searchFieldTypesPlaceholder": "搜索字段类型", + "searchModelsPlaceholder": "搜索模型", + "searchVariants": "搜索变体", + "selectBlockType": "选择区块类型", + "selectedItemNotFound": "未找到所选项目:{{value}}", + "selectFieldTypeTitle": "选择字段类型", + "selectFolderLabel": "选择文件夹", + "selectModelType": "选择模型类型", + "selectModelTypeSubtitle": "您选择的模型类型会影响内容项在界面中的渲染方式以及是否创建 URL 和模板。注意:所有模型均可无头使用", + "selectParentTooltip": "选择父级会影响 UI 中的默认路由和内容导航", + "selectPlaceholder": "选择", + "seoFieldLinkTitle": "SEO 链接标题", + "seoFieldMetaDescription": "SEO 元描述", + "seoFieldMetaKeywords": "SEO 元关键词", + "seoFieldMetaTitle": "SEO 元标题", + "seoMetaFields": "SEO 元字段", + "seoMetaFieldsDescription": "单页面、多页面和数据集模型的内容模型附带 SEO 元字段,可通过 API 或 Parsley 访问。这些字段可帮助搜索发现,并用于 Zesty API 中的批量搜索。这些字段的值可在 实例 API 端点meta 键下找到。", + "showSystemFields": "显示系统字段", + "sortLastCreated": "最近创建", + "sortLastModified": "最近修改", + "starterBlockBlankDescription": "一个空白区块", + "starterBlockBlankLabel": "空白", + "starterBlockCodeTemplateLink": "代码模板", + "starterBlockContactUsFormDescription": "一个简单的联系表单,可从任意页面捕获潜在客户", + "starterBlockContactUsFormLabel": "联系我们表单", + "starterBlockCreateButton": "创建区块模型", + "starterBlockCreatingModelBody": "这可能需要几分钟。", + "starterBlockCreatingModelHeading": "正在创建模型", + "starterBlockDescriptionHeading": "描述", + "starterBlockDetailsHeading": "详情", + "starterBlockDisplayNameInUse": "显示名称已被使用,请使用其他显示名称。", + "starterBlockDisplayNameLabel": "显示名称", + "starterBlockDisplayNamePlaceholder": "例如:首页、关于页面、联系页面等", + "starterBlockDisplayNameTooltip": "向内容编辑者显示的名称", + "starterBlockFeatureSideBySideImageDescription": "左侧包含文字,右侧包含图片的功能区块", + "starterBlockFeatureSideBySideImageLabel": "功能左右并排图片", + "starterBlockFieldsHeading": "字段", + "starterBlockFormCodeTemplate": "代码模板", + "starterBlockFormCreateBlockModel": "创建区块模型", + "starterBlockFormCreatingModel": "正在创建模型", + "starterBlockFormCreatingModelDescription": "这可能需要几分钟的时间。", + "starterBlockFormDescription": "描述说明", + "starterBlockFormDetails": "详情", + "starterBlockFormDisplayName": "显示名称", + "starterBlockFormDisplayNameInUse": "该显示名称已被使用。请更换其他显示名称。", + "starterBlockFormDisplayNamePlaceholder": "例如:首页、关于我们、联系我们等", + "starterBlockFormDisplayNameTooltip": "展示给内容编辑人员看到的名称", + "starterBlockFormFields": "字段列表", + "starterBlockFormReferenceId": "引用 ID (Reference ID)", + "starterBlockFormReferenceIdInUse": "该引用 ID 已被使用。请更换其他引用 ID。", + "starterBlockFormReferenceIdPlaceholder": "根据显示名称自动生成", + "starterBlockFormReferenceIdTooltip": "用于通过我们的 API 或 Parsley 访问此模型的 ID", + "starterBlockFormResources": "资源中心", + "starterBlockFormSeeBootstrapTemplate": "查看 Bootstrap 模板", + "starterBlockHeroImageBelowDescription": "顶部包含文字和 CTA 按钮,下方包含图片的主图区块", + "starterBlockHeroImageBelowLabel": "下方主图", + "starterBlockReferenceIdLabel": "参考 ID", + "starterBlockReferenceIdPlaceholder": "从显示名称自动生成", + "starterBlockReferenceIdTooltip": "用于通过 API 或 Parsley 访问此模型的 ID", + "starterBlockRefIdInUse": "参考 ID 已被使用,请使用其他参考 ID。", + "starterBlockResourcesHeading": "资源", + "starterBlockSeeBootstrapTemplate": "查看 Bootstrap 模板", + "starterBlockSideBySideHeroImageDescription": "左侧包含文字和 CTA 按钮,右侧包含图片的主图区块", + "starterBlockSideBySideHeroImageLabel": "左右并排主图", + "starterBlockSingleTestimonialDescription": "包含人名、图片和公司详情的单个推荐引用", + "starterBlockSingleTestimonialLabel": "单个推荐语", + "starterBlocksSearchPlaceholder": "搜索变体", + "starterBlocksSelectionSubtitle": "从空白区块开始,或从我们精选的预设计区块中选择", + "starterBlocksSelectionTitle": "选择区块类型", + "starterBlocksSubtitle": "从空白区块开始,或从我们精选的预设区块中进行选择", + "starterBlocksTutorialLink": "通过教程学习区块基础知识", + "subFieldFormAddTitle": "添加 {{name}} 字段", + "subFieldFormEditTitle": "编辑 {{label}}", + "subFieldFormTypeFieldLabel": "{{type}} 字段", + "switchToHeadless": "切换到无头模式", + "switchToHybrid": "切换到混合模式", + "switchToMode": "切换到 {{mode}}", + "switchWebEngineModeTitle": "将 Web 引擎模式切换到 {{mode}}", + "systemFieldCreatedAt": "创建时间", + "systemFieldItemZuid": "项目 ZUID", + "systemFieldMasterZuid": "主 ZUID", + "systemFieldModelZuid": "模型 ZUID", + "systemFields": "系统字段", + "systemFieldsDescription": "Zesty 中模型的每个内容项(子项)都包含不可编辑的系统字段,这些字段表示内容的状态,例如创建时间、更新时间和版本。这些字段的值可在 实例 API 端点meta 键下找到。", + "systemFieldUpdatedAt": "更新时间", + "systemFieldVersion": "版本", + "tabActivityLog": "活动日志", + "tabDetails": "详情", + "tabFields": "字段", + "tabInfo": "信息", + "tabLearn": "学习", + "tabRules": "规则", + "templateBlogDescription": "非常适合博客,包含标题、正文内容、特色图片和分类字段。", + "templateBlogTitle": "博客", + "templateFileEmpty": "模板文件为空", + "templateFileEmptyBody": "请通过代码应用为区块添加代码。", + "templateLandingPageDescription": "一个简单的着陆页,包含主图、功能区和页脚部分的字段。", + "templateLandingPageTitle": "着陆页", + "tooltipWhatIsAField": "什么是 {{fieldName}} 字段?", + "tooltipWhatIsAnField": "什么是 {{fieldName}} 字段?", + "typeTextArticleWriter": "文章编写器", + "typeTextBlockSelector": "区块选择器", + "typeTextBoolean": "布尔值", + "typeTextColor": "颜色", + "typeTextCurrency": "货币", + "typeTextDate": "日期", + "typeTextDatetime": "日期和时间", + "typeTextDropdown": "下拉菜单", + "typeTextFiles": "文件", + "typeTextFontawesome": "Font Awesome", + "typeTextImages": "媒体", + "typeTextIntegration": "集成", + "typeTextInternalLink": "内部链接", + "typeTextLink": "外部 URL", + "typeTextMarkdown": "Markdown", + "typeTextNumber": "数字", + "typeTextOneToMany": "一对多", + "typeTextOneToOne": "一对一", + "typeTextRepeater": "重复器", + "typeTextSort": "排序顺序", + "typeTextText": "单行文本", + "typeTextTextarea": "多行文本", + "typeTextUuid": "UUID", + "typeTextWysiwygAdvanced": "WYSIWYG(高级)", + "typeTextWysiwygBasic": "WYSIWYG", + "uniqueField": "唯一字段", + "uniqueFieldDescription": "确保多个项目不能对此字段具有相同的值", + "updateBlockGroupDescription": "这会影响区块在区块应用程序的所有区块页面中所呈现的组别。", + "updateBlockGroupFailedNotify": "更新区块组失败", + "updateBlockGroupTitle": "更新区块组", + "updated": "已更新", + "updateDescriptionDialogBody": "这将更新向内容编辑者显示的模型描述", + "updateDescriptionDialogTitle": "更新描述", + "updateDescriptionFailedNotify": "更新描述失败", + "updateDescriptionInputLabel": "描述", + "updateDescriptionInputPlaceholder": "此模型将用于什么", + "updateDescriptionInputTooltip": "向内容编写者显示模型的用途", + "updateParentDialogBody": "选择父级会影响 UI 中的默认路由和内容导航。", + "updateParentDialogTitle": "更新模型父级", + "updateParentInputTooltip": "选择父级会影响 UI 中的默认路由和内容导航", + "validationCannotBeLessThanMinValue": "不能小于最小值", + "validationCannotExceedMaxCharCount": "不能超过最大字符数", + "validationCannotExceedMaxChars": "不能超过 {{maxLength}} 个字符", + "validationCannotExceedMaxValue": "不能超过最大值", + "validationFieldRequired": "此字段为必填项", + "validationIncompleteApiConfig": "API 配置不完整", + "validationInvalidNumber": "无效数字", + "validationInvalidRegexPattern": "无效的正则表达式模式", + "validationRequiredField": "必填字段。请输入值。", + "validationSelectCurrency": "请选择货币", + "viewAllActivity": "查看所有活动", + "viewContent": "查看内容", + "viewEndpoints": "查看端点", + "viewVariants": "查看变体", + "whatIsAFieldType": "什么是 {{fieldType}} 字段?", + "whatIsAnFieldType": "什么是 {{fieldType}} 字段?", + "wizardCreatingModel": "正在创建模型", + "wizardEnterContentEntry": "输入内容条目", + "wizardSelectCollectionSubtitle": "从我们众多的模式集合中选择,以更好地了解我们的产品", + "wizardSelectCollectionTitle": "选择模式集合", + "wizardSuccessHeading": "您的 {{title}} 模型已构建完成!", + "zuidLabel": "ZUID", + "zuidTooltip": "内容项始终相对于其模型进行访问,因此每次调用都需要模型 ZUID。" +} diff --git a/public/locales/zh-CN/seo.json b/public/locales/zh-CN/seo.json new file mode 100644 index 0000000000..a0edc4e631 --- /dev/null +++ b/public/locales/zh-CN/seo.json @@ -0,0 +1,107 @@ +{ + "addAllRedirects": "添加所有重定向", + "changeDialogBody": "这将是一个 301 永久重定向,确保使用旧路径的访客被无缝引导至新路径。", + "changeDialogCreateRedirect": "创建重定向", + "changeDialogDontCreate": "不创建", + "changeDialogNewPath": "新路径", + "changeDialogOldPath": "旧路径", + "changeDialogRedirectCreated": "已创建 1 个重定向", + "changeDialogTitle": "检测到 URL 路径更改。是否从旧路径创建重定向到新路径?", + "closeImport": "关闭导入", + "columnHttpCode": "HTTP 状态码", + "columnIncomingPath": "传入路径", + "columnTarget": "目标", + "columnType": "类型", + "createFormAddPath": "添加路径", + "createFormCreateAnotherRedirect": "再创建一个重定向", + "createFormCreateRedirect": "创建重定向", + "createFormExternalUrlPlaceholder": "输入 URL(例如 https://www.google.com/)", + "createFormFilePathOnlyTooltip": "仅文件路径", + "createFormHttpCodeLabel": "HTTP 状态码", + "createFormIncomingPathLabel": "传入路径", + "createFormNotifyCreated_other": "已创建 {{count}} 个重定向", + "createFormNotifySaved": "重定向已保存:{{path}}", + "createFormPathPlaceholder": "/输入要重定向的 URL 路径", + "createFormRedirectTargetLabel": "重定向目标", + "createFormTypeLabel": "类型", + "createFormValueCannotBeModified": "此值无法修改", + "createRedirectHeader": "创建重定向", + "createRedirectIncomingPath": "传入路径不区分大小写,结尾斜杠将自动处理", + "createRedirectSubHeader": "新建的重定向在创建后将立即生效。", + "deleteRedirect": "删除重定向", + "deleteRedirectDescriptionPlural": "删除这 {{count}} 个传入路径的重定向", + "deleteRedirectDescriptionPlural_other": "删除这 {{count}} 个传入路径的重定向", + "deleteRedirectDescriptionSingular": "删除此传入路径的重定向", + "deleteRedirectDescriptionSuffix": "将立即从您的网站中移除。此操作无法撤销。", + "deleteRedirectDescriptionSuffix_other": "将立即从您的网站中移除。此操作无法撤销。", + "deleteRedirectsButton": "删除重定向({{count}})", + "deleteRedirectsButton_other": "删除重定向({{count}})", + "deleteRedirectTitle_other": "删除 {{count}} 个重定向", + "editRedirect": "编辑重定向", + "editRedirectHeader": "编辑重定向", + "editRedirectIncomingPath": "WebEngine 会自动处理路径中的结尾斜杠和大小写变体。", + "editRedirectSubHeader": "所做的更改将在保存后立即生效", + "errorDeletingRedirects": "删除重定向时出错", + "errorDialogBody": "以下路径无法保存为重定向。", + "errorDialogNotifyCreated_other": "已创建 {{count}} 个重定向", + "errorDialogNotifySaved": "重定向已保存:{{path}}", + "errorDialogTitle_other": "{{count}} 个重定向无法创建", + "filterRedirects": "筛选重定向", + "httpCode301Label": "301 - 永久重定向", + "httpCode301Permanent": "301 - 永久", + "httpCode302Label": "302 - 临时重定向", + "httpCode302Temporary": "302 - 临时", + "importCsvXml": "导入 CSV/XML", + "importErrorDialogBodyRich": "文件格式或结构与预期不符。请检查您的 CSV 或 XML 文件,并参考文档中的<1>导入指南以了解正确格式。", + "importErrorDialogHeader": "文件导入失败", + "importFileReadError": "读取文件失败:{{err}}", + "importInvalidFileSelected": "所选文件无效", + "importMustBeCsv": "导入文件必须为 CSV 格式", + "importRowCreated": "已创建", + "importRowPreExisting": "已存在", + "importTableFrom": "来源", + "importTableTo": "目标", + "importTableType": "类型", + "importXmlSitemapSpec": "XML 站点地图导入必须遵循 {{specUrl}} 规范。", + "invalidUrlEnterValid": "无效的 URL。请输入有效的 URL。", + "loading": "加载中...", + "redirectButton": "重定向", + "redirectCreateFailed": "创建重定向失败", + "redirectCreateFailedFromPath": "从 {{path}} 创建重定向失败。{{error}}", + "redirectCreateSuccess": "已创建重定向", + "redirectDeleted_other": "已删除 {{count}} 个重定向", + "redirectQueryStringPlaceholder": "重定向查询字符串", + "redirectRemoveFailed": "删除 SEO 重定向失败", + "redirectsLoadFailed": "加载重定向数据失败", + "redirectTargetHasBeenDeleted": "重定向目标已被", + "redirectTypeExternal": "外部", + "redirectTypeInternal": "内部", + "redirectTypeWildcard": "通配符", + "redirectUrl": "重定向 URL", + "searchForItem": "搜索内容项", + "selectAll": "全选", + "selectedCount": "已选择 {{count}} 个", + "selectedCount_other": "已选择 {{count}} 个", + "sortHttpCode": "HTTP 状态码", + "sortIncomingPath": "传入路径", + "sortTarget": "目标", + "sortType": "类型", + "targetErrorInvalidUrl": "无效的 URL。请输入有效的 URL。", + "targetErrorUnpublished": "此内容尚未发布。在其上线之前,所有传入路径都将导向您的 404 页面。", + "targetOptionExternalLabel": "外部 - 链接到外部网页", + "targetOptionInternalLabel": "内部 - 链接到实例中已发布的内容项", + "targetOptionWildcardLabel": "通配符 - 使用单条规则处理多个重定向", + "tooltipCode301": "[301] - 永久重定向:当内容已永久移至新位置时使用。搜索引擎将更新其索引。", + "tooltipCode302": "[302] - 临时重定向:当内容暂时位于其他位置且您打算将其移回时使用。搜索引擎通常不会更新新位置的索引。", + "tooltipTargetTypeExternal": "外部,例如 https://zesty.org/", + "tooltipTargetTypeInternal": "内部,例如 /about", + "tooltipTargetTypeWildcard": "通配符,例如 /blog/*/*/", + "totalRedirects_other": "共 {{count}} 个重定向", + "tryAgain": "重试", + "typeExternal": "外部", + "typeFilterExternal": "外部 - 链接到外部网页", + "typeFilterInternal": "内部 - 链接到此实例中的内容项", + "typeFilterWildcard": "通配符 - 基于规则的重定向", + "typeInternal": "内部", + "typeWildcard": "通配符" +} diff --git a/public/locales/zh-CN/settings.json b/public/locales/zh-CN/settings.json new file mode 100644 index 0000000000..6af613bcb8 --- /dev/null +++ b/public/locales/zh-CN/settings.json @@ -0,0 +1,183 @@ +{ + "activeStatuses": "启用中的状态", + "activeStatusesSubtitle": "启用中的状态可用于在内容项中进行添加或移除。", + "AddLangCodeToPaths": "在路径中添加默认语言代码", + "addStatusNotification": "拥有添加此状态权限的用户将会收到通知。", + "AjaxCorsAllowAnyOrigin": "自定义视图端点 » 允许任意来源 (CORS)", + "AlwaysRedirectToHttps": "始终重定向到 HTTPS", + "AutoIncludeJsInHead": "自动在 head 中包含 JavaScript", + "AutomatedFeedXml": "自动生成 feed.xml", + "BaseDirectory": "基础目录", + "BasicContentApiEnabled": "访问 Instant JSON API 以获取内容。", + "browseFontsTitle": "浏览字体", + "bynderAssetsDescription": "让您的团队在 Zesty 内部轻松访问 Bynder 资产,从而简化工作流程", + "bynderAssetsHeading": "在 Zesty 中使用您的 Bynder 资产", + "bynderChangePortal": "更改 Bynder 门户网站", + "bynderConnect": "连接到 Bynder", + "bynderConnectedPortal": "您的实例已连接到以下 Bynder 门户网站", + "bynderDisconnect": "断开连接", + "bynderIntegration": "Bynder 集成", + "bynderLogoAlt": "Bynder 标志", + "bynderPreviewAlt": "Bynder 预览", + "CanonicalTagsEnabled": "启用规范标签", + "categoryAnalytics": "分析", + "categoryBlog": "博客", + "categoryBynder": "Bynder", + "categoryContactForm": "联系表单", + "categoryCustom": "自定义", + "categoryDeveloper": "开发者", + "categoryExporter": "导出器", + "categoryExtensions": "扩展", + "categoryForCustomEndpoint": "自定义端点", + "categoryGeneral": "通用", + "categoryGroupby": "GroupBy", + "categoryI18n": "i18n", + "categoryIntegrations": "集成", + "categoryLogosection": "徽标区域", + "categoryLogoSection": "徽标区域", + "categoryOverrides": "覆盖项", + "categoryPetdesk": "PetDesk", + "categoryProxy": "代理", + "categoryRouting": "路由", + "categorySecurity": "安全", + "categorySeo": "SEO", + "categorySettingsSaved": "{{category}} 设置已保存", + "categorySitelink": "Sitelink", + "categorySocialLinks": "社交链接", + "categoryStripe": "Stripe", + "categoryTagManagers": "标签管理器", + "categoryTwitter": "Twitter", + "categoryUps": "UPS", + "categoryVerification": "验证", + "categoryYoutube": "YouTube", + "ClientKey": "GroupBy 客户端密钥", + "Collection": "GroupBy 默认集合", + "color": "颜色", + "colorBlue": "蓝色", + "colorDeepPurple": "深紫色", + "colorGreen": "绿色", + "colorGrey": "灰色", + "colorOrange": "橙色", + "colorPink": "粉红色", + "colorPurple": "紫色", + "colorRed": "红色", + "colorRequired": "颜色为必填项", + "colorRose": "玫瑰红", + "colorYellow": "黄色", + "confirmSaveDialogBody": "您的更改将在下一次重新渲染、缓存过期或手动清除缓存时在生产环境中生效。", + "confirmSaveDialogTitle": "是否保存 {{title}} 设置?", + "ContentSecurityPolicy": "Content-Security-Policy", + "createStatus": "创建状态", + "deactivatedStatuses": "已停用的状态", + "deactivatedStatusesSubtitle": "如果您想在内容项中添加或移除这些状态,可以随时重新激活它们。", + "deactivateStatus": "停用状态", + "deactivateStatusBody": "停用此状态会将其从当前所有带有该状态的内容项中移除。您将来随时可以重新激活此状态。", + "deactivateStatusLabel": "停用状态", + "DefaultPage": "默认语言页面", + "deleteFontConfirm": "您确定要卸载此字体吗?", + "describeStatusDescription": "描述该状态在您的工作流语境中所代表的含义", + "descriptionOptional": "描述(选填)", + "Dev": "代理文件存储的根 URL", + "DisplayAdvertisingSupport": "支持展示广告", + "DntPolicy": "DNT 开启或关闭", + "editStatus": "编辑状态", + "editStatusTitle": "编辑 {{name}}", + "errorOccurred": "发生了一个错误。", + "errorWithMessage": "错误: {{message}}", + "FeaturePolicy": "Feature-Policy", + "filterSettings": "筛选设置", + "fontInstallError": "添加 {{family}} ({{variants}}) 失败: {{error}}", + "fontInstallSuccess": "字体“{{family}} ({{variants}})”已成功安装", + "fontPreviewText": "这是一段示例文字", + "fontUninstalled": "字体“{{fontLabel}}”已成功卸载", + "fontUninstallFailed": "卸载 {{fontLabel}} 失败: {{error}}", + "FriendlyPagination": "友好分页", + "GoogleAutoLinker": "Google Auto Linker", + "GoogleUrchinId": "Google Analytics ID", + "Gql": "启用对 GraphQL 端点的访问,以运行 Apollo GQL 服务器", + "GqlOrigin": "允许的 GraphQL 来源", + "GtmId": "Google Tag Manager ID", + "headTagsTitle": "Head 标签", + "Honeypot": "表单蜜罐", + "installedFontsTitle": "已安装字体", + "instanceWwwDnsTooltip": "激活 WWW 设置需要对主域名(apex)和 www 子域名进行 DNS 设置。", + "Live": "代理文件存储的根 URL", + "LoadFontAwesome": "加载 Font Awesome", + "MediaProxyUrl": "媒体代理 URL", + "nameRequired": "名称为必填项", + "navFontsBrowse": "浏览字体", + "navFontsInstalled": "已安装字体", + "navHeadTags": "Head 标签", + "navRobotsTxt": "Robots.txt", + "navWorkflows": "工作流", + "noInstalledFonts": "暂无已安装字体", + "none": "无", + "noneOption": "无", + "noResultsFor": "没有找到与“{{keyword}}”相关的结果", + "noSearchResultsAlt": "无搜索结果", + "off": "关闭", + "on": "开启", + "OverwriteHead": "覆盖 Head 文件", + "PreferredDomainPrefix": "始终在我的域名前添加 WWW?", + "prev": "上一页", + "PreviewLock": "预览锁定保护", + "PreviewLockPassword": "预览锁定密码", + "publishRequiresStatus": "发布内容项必须应用此状态。", + "publishRequiresStatusDescription": "这是一项全局设置,意味着除非已应用此状态,否则内容项无法被发布。", + "ReferrerPolicy": "Referrer-Policy", + "removeFontLabel": "移除字体", + "removeFontVariant": "移除 {{variant}}", + "removeStatusNotification": "拥有移除此状态权限的用户将会收到通知。", + "robotsFailedFetchSettings": "获取设置失败", + "robotsFailedSaveSettings": "保存 robots.txt 设置失败。{{err}}", + "robotsFindingSettings": "正在查找 robots.txt 设置", + "robotsNonLiveDomainWarning": "非生产(Non-Live)域名将始终关闭 robots.txt,以避免被搜索引擎抓取。这包括 [hash]-dev.webengine.zesty.io、[hash]-dev.preview.zesty.io 以及任何设置为 “dev” 分支 simulation 的注册域名", + "RobotsOn": "可被搜索引擎抓取?", + "robotsPublishEventWarning": "在触发发布事件之前,更改不会生效。", + "robotsSettingsUpdated": "robots.txt 文件设置已更新", + "RobotsText": "Robots 文本", + "robotsTopBarTitle": "Robot.txt", + "SafeEmails": "安全邮件发送列表", + "saved": "已保存", + "saveSettingsTooltip": "保存设置 {{saveShortcut}}", + "searchFonts": "搜索字体", + "searchFontsPlaceholder": "搜索字体", + "searchStatuses": "搜索状态", + "sectionFonts": "字体", + "sectionGlobalMetaSeo": "全局 Meta 与 SEO", + "sectionInstanceSettings": "实例设置", + "sectionStyles": "样式", + "sectionUserSettings": "用户设置", + "SendingEmail": "发送邮件", + "showDeactivated": "显示已停用项", + "ShowDomainInTitle": "在 meta 标题中显示域名?", + "ShowInTitle": "在 meta 标题中显示网站名称?", + "SiteProtocol": "HTTPS 已开启?", + "statusDeactivated": "状态已停用: {{name}}", + "statusDeactivateFailed": "停用状态失败: {{name}}。请重试。", + "statusDescriptionPlaceholder": "已准备好提交给法务团队进行发布前审核", + "statusNamePlaceholder": "例如:需要内容审核", + "StrictTransportSecurity": "Strict-Transport-Security", + "styleCategoryBodyColorsSpacing": "Body 颜色与间距", + "styleCategoryButtons": "按钮", + "styleCategoryForms": "表单", + "styleCategoryHtmlElements": "HTML 元素", + "styleCategoryInteractiveElements": "交互元素", + "styleCategoryLinks": "链接", + "styleCategoryNavigation": "导航", + "styleCategoryResponsiveGrid": "响应式网格", + "styleCategorySidebar": "侧边栏", + "styleCategoryTypography": "字体排版", + "styleCategoryUiStyling": "界面样式", + "typeSomethingToPreview": "输入内容以预览效果", + "unexpectedError": "发生了未预期的错误。", + "UniversalCode": "Use Google Universal Code", + "Url": "GroupBy 客户端端点", + "whichRolesCanAdd": "哪些角色可以添加此状态?", + "whichRolesCanRemove": "哪些角色可以移除此状态?", + "workflowsHeading": "工作流", + "workflowsRestrictedDescription": "请联系下方列出的实例所有者或管理员,将您的角色升级为“管理员”或“所有者”。", + "workflowsRestrictedTitle": "您需要相关权限才能查看和编辑工作流", + "XContentTypeOptions": "X-Content-Type-Options", + "XFrameOptions": "标头:X-Frame-Options" +} diff --git a/public/locales/zh-CN/shell.json b/public/locales/zh-CN/shell.json new file mode 100644 index 0000000000..5ba5b34322 --- /dev/null +++ b/public/locales/zh-CN/shell.json @@ -0,0 +1,604 @@ +{ + "accessDenied": "访问被拒绝", + "accessDeniedImageAlt": "页面未找到", + "accessDeniedRoleBody": "您当前的角色 {{role}} 不包含对 {{app}} 应用的访问权限。要获得访问权限,请联系实例所有者或下方列出的管理员之一,并请求升级角色。", + "accountChangePassword": "修改密码", + "accountGetHelp": "获取帮助", + "accountLogOut": "退出登录", + "accountPreferences": "偏好设置", + "accountReadDocs": "阅读文档", + "accountViewAllInstances": "查看所有实例", + "accountYourProfile": "您的个人资料", + "addNewComment": "添加新评论", + "advancedSearch": "高级搜索", + "advancedSearchDescription": "随着您和您的团队在 Zesty 中协作,您将创建一个可搜索的内容、模型和代码文件存档。使用下方的表单查找您需要的内容。", + "aiAssistantBeta": "AI 助手 Beta", + "aiDrawerPlaceholder": "随便问,例如“让我的内容面向特定受众”", + "aiGeneratingContentStatus": "我们的 AI 助手正在根据您的参数生成内容", + "aiMistakesWarning": "我们的 AI 助手可能会出错。请核对重要信息。", + "aiOnlyInContentApp": "仅在内容应用中可用。", + "aiScanningMetaDescription": "我们的 AI 助手正在扫描您的内容,并根据您的参数生成元描述", + "aiScanningMetaTitle": "我们的 AI 助手正在扫描您的内容,并根据您的参数生成元标题", + "aiWriteContentSubtitle": "使用我们的 AI 助手为您撰写内容", + "allInstances": "所有实例", + "alreadyPartOfInstance": "已是实例成员", + "announcementIgnore": "忽略", + "announcementRead": "阅读公告", + "announcementScheduleTraining": "安排培训", + "announcementShowVideo": "观看视频", + "anyLanguage": "任意语言", + "anyone": "任何人", + "anyTime": "任意时间", + "anyType": "任意类型", + "appErrorBody": "此错误已发送给我们的团队。请重新加载应用程序以继续。", + "appErrorHeading": "糟糕,出了点问题", + "appLoadingFailure": "应用加载失败:{{message}}", + "applyAiSuggestion": "应用", + "audiencePlaceholder": "例如 Freelancers、Designers……", + "autoApply": "自动应用", + "block": "区块", + "blockSelectorCreateVariant": "创建变体", + "blockSelectorNoVariantsDescription": "要创建变体,请前往 Blocks 应用,选择此模型,然后点击创建变体按钮", + "blockSelectorNoVariantsTitle": "{{modelName}} 模型尚未创建任何变体", + "blockSelectorSearchVariants": "搜索变体", + "blockSelectorSelectModel": "选择模型", + "blockSelectorSelectModelFirst": "请选择模型后再选择变体", + "blockSelectorSelectVariant": "选择变体", + "blockSelectorUpdatedOnBy": "{{user}} 于 {{date}} 更新", + "blockSelectorViewBlock": "查看区块", + "cancelEsc": "取消 (ESC)", + "cannotBeUndone": "此操作无法撤销", + "characterLimit": "字符限制", + "characterLimitTooltip": "设置字符限制以控制生成文本的长度", + "clearAll": "全部清除", + "clearChat": "清除聊天", + "code": "代码", + "collapseSidebar": "折叠侧边栏", + "commentAddError": "无法添加评论。请检查您的网络连接并重试。", + "commentPlaceholder": "回复或使用 @ 添加他人", + "confirmPublishBody": "这将立即在您的所有平台上发布{{item}}的 v{{version}}。如有需要,您随时可以稍后取消发布此项。", + "confirmPublishTitle": "发布{{item}}", + "contactSupport": "联系支持", + "contentGenerated": "您的内容已生成!", + "contentItem": "内容项", + "continueWith": "继续使用 {{service}}", + "copyInstanceZUID": "复制实例 ZUID", + "copyLink": "复制链接", + "createContentItem": "创建内容项目", + "createContentItemSubtitle": "您只能为现有的模型创建内容项目", + "createdByTooltip": "从实例的所有用户中选择一个用户。", + "currencyFlagAlt": "{{country}} 国旗", + "currentlyLoggedInAs": "当前以 {{email}} 登录", + "customDateRange": "自定义日期范围", + "dateAfter": "晚于……", + "dateBefore": "早于……", + "dateLast14Days": "最近 14 天", + "dateModified": "修改日期", + "dateModifiedTooltip": "选择您想要查看结果的日期范围。", + "dateOn": "在某天……", + "dateRange": "日期范围", + "dateRangeValue": "{{from}} 至 {{to}}", + "dateTimeInvalidTime": "无效时间", + "dateTimeStoredInUtc": "以 UTC 存储为 {{value}}", + "dateUpdated": "更新日期", + "deleteCommentBody": "删除此评论也将移除与其相关的所有回复。", + "deleteCommentTitle": "删除评论?", + "deleteForever": "永久删除", + "describeAudience": "描述您的受众", + "docs": "文档", + "docsAddingImageAltText": "添加图片替代文本", + "docsAddingManagingContent": "添加和管理内容", + "docsAuditTrailOverview": "审计追踪概览", + "docsAuthApi": "Auth API 文档", + "docsBuildingSchema": "构建架构", + "docsCapturingFormData": "将表单数据捕获到线索", + "docsCodeOverview": "代码概览", + "docsContentEntry": "内容录入、草稿与发布", + "docsContentOverview": "内容概览", + "docsCreatingLeadForm": "创建线索表单", + "docsEditorCodingBasics": "编辑器与编码基础", + "docsGettingStarted": "入门", + "docsGuides": "指南", + "docsInstanceSettings": "实例设置", + "docsIntroduction": "简介", + "docsLeadsOverview": "线索概览", + "docsManageRedirects": "管理重定向", + "docsMediaOverview": "媒体概览", + "docsRedirectsOverview": "重定向概览", + "docsSchemaContentCode": "架构、内容与代码", + "docsSchemaOverview": "架构概览", + "docsSeoRedirects": "SEO 重定向", + "docsSettingsOverview": "设置概览", + "docsUploadMultipleImages": "如何上传多张图片", + "editorAddRemoveLink": "添加或移除链接", + "editorAlignCenter": "居中对齐文本", + "editorAlignJustify": "两端对齐文本", + "editorAlignLeft": "左对齐文本", + "editorAlignRight": "右对齐文本", + "editorBold": "加粗", + "editorChangeHeading": "更改标题", + "editorChangeToBlockQuote": "更改为引用块", + "editorChangeToCodeBlock": "更改为代码块", + "editorChangeToHeadingLevel": "更改为标题级别 {{level}}", + "editorChangeToParagraph": "更改为段落", + "editorEmbed": "嵌入", + "editorEmbedContent": "嵌入内容", + "editorEmbedIdLabel": "输入唯一的 {{service}} ID", + "editorFloatLeft": "左浮动", + "editorFloatRight": "右浮动", + "editorHeading": "标题", + "editorHeadingLevel": "标题 {{level}}", + "editorIndent": "缩进", + "editorInsertCharacter": "插入字符:{{char}}", + "editorInsertEmbed": "插入嵌入内容", + "editorInsertHorizontalRule": "插入水平线", + "editorInsertImage": "从媒体库插入图片", + "editorInsertLink": "插入链接", + "editorInsertSpecialCharacter": "插入特殊字符", + "editorInsertTable": "插入表格", + "editorItalic": "斜体", + "editorLevel": "级别 {{level}}", + "editorLinkNewWindow": "在新浏览器窗口中打开链接?", + "editorLinkUrlLabel": "此链接应指向哪个 URL?", + "editorPromptColumns": "多少列?", + "editorPromptEnterUrl": "输入 URL", + "editorPromptRows": "多少行?", + "editorRedo": "重做上次撤销的更改", + "editorSpecialCharacter": "特殊字符", + "editorToggleEmphasis": "切换强调", + "editorToggleStrikethrough": "切换删除线", + "editorToggleStrong": "切换加粗", + "editorToggleSubscript": "切换下标", + "editorToggleSuperscript": "切换上标", + "editorToggleUnderline": "切换下划线", + "editorUnderline": "下划线", + "editorUndo": "撤销上次更改", + "editorWrapInBlockQuote": "包裹为引用块", + "editorWrapInBulletList": "包裹为项目符号列表", + "editorWrapInOrderedList": "包裹为编号列表", + "emailAddress": "电子邮件地址", + "emailCommaSeparated": "电子邮件,以逗号或空格分隔", + "enterTwoFactorOtp": "输入你的 2FA OTP", + "enterValidEmail": "请输入有效的电子邮件地址。", + "errorParsingAiResponse": "解析 AI 响应时出错。请重试。", + "expandSidebar": "展开侧边栏", + "failedAuthenticateAccount": "无法验证你的账户", + "failedCopyInstanceZUID": "复制实例 ZUID 失败", + "failedCreateField": "创建字段失败。{{error}}", + "failedFetchField": "获取字段失败:{{error}}", + "failedFetchHeadTags": "获取头部标签失败", + "failedFetchHeadTagsError": "获取头部标签失败:{{error}}", + "failedFetchModel": "获取模型失败:{{error}}", + "failedFetchModels": "获取模型失败", + "failedFetchRecentItems": "获取最近项目时出现问题:{{error}}", + "failedFetchUsers": "获取用户失败", + "failedLoadDomains": "加载域名失败", + "failedLoadHeadTagFile": "加载文件失败。{{status}} | {{error}}", + "failedLoadInstancesList": "加载您的实例列表时出现问题", + "failedLoadUserRole": "加载您在此实例中的用户角色失败。", + "failedRefreshCdnCache": "刷新 CDN 缓存失败", + "failedToLoadInstance": "加载实例失败", + "failedUpdateFavicon": "更新 Favicon 失败", + "faviconUpdated": "Favicon 已更新", + "favorites": "收藏夹", + "fieldRequiredError": "此字段为必填项。请输入一个值。", + "filterNoResultsRich": "您的筛选 “{{query}}” 未找到任何结果", + "findIn": "在{{app}}中查找", + "flagAlt": "{{country}} 国旗", + "forbiddenLoadInstancesList": "您无权加载实例列表", + "forgotPassword": "忘记密码?", + "geminiIconAlt": "Gemini 图标", + "geminiLogoAlt": "Gemini 徽标", + "generate": "生成", + "generateContent": "生成内容", + "generatedContent": "已生成的内容", + "generateMetaDescription": "生成元描述", + "generateMetaDescriptionHelp": "我们的 AI 将扫描您的内容,并根据您在下方设置的参数为您生成元描述", + "generateMetaTitle": "生成元标题", + "generateMetaTitleHelp": "我们的 AI 将扫描您的内容,并根据您在下方设置的参数为您生成元标题", + "generateSuggestions": "生成建议", + "generatingContent": "正在生成内容", + "generatingMetaDescription": "正在生成元描述", + "generatingMetaTitle": "正在生成元标题", + "generationStopped": "生成已停止", + "goToAccounts": "前往账户", + "hasAccessTo": "可访问", + "headCreateTag": "创建头部标签", + "headLegacyNotice": "此实例包含旧版头部标签。如果您想编辑或删除它们,请联系支持团队。", + "headNoTags": "尚未为此项目创建头部标签。", + "headNotVersionedNotice": "头部标签不进行版本控制。保存后,它们将在页面下次缓存时生效。缓存在发布时或每 24 小时进行一次。", + "headTagAddAttribute": "添加属性", + "headTagAddAttributeTitle": "添加标签属性", + "headTagAttributeLabel": "属性", + "headTagCreate": "创建头部标签", + "headTagDeleteAttributeTitle": "删除标签属性", + "headTagDeleted": "已删除头部标签", + "headTagDeleteHeadTag": "删除头部标签", + "headTagDeleteTag": "删除标签", + "headTagLabel": "标签", + "headTagNewCreated": "已创建新的头部标签", + "headTagSave": "保存头部标签", + "headTagSortLabel": "排序", + "headTagTypeNone": "无", + "headTagUpdateFailed": "更新头部标签失败。{{status}}", + "headTagUpdateSuccess": "头部标签更新成功", + "headTagValueLabel": "值", + "imageFieldLimit_other": "此字段最多限制 {{count}} 张图片", + "insert": "插入", + "integrationAddDetail": "添加详情", + "integrationAddDetailWithPlus": "+ 添加详情", + "integrationAddHeading": "添加标题", + "integrationAddHttpHeader": "添加 HTTP 标头", + "integrationAddSubheading": "添加副标题", + "integrationApiConfigurationSettings": "API 配置设置", + "integrationApiResponseArrayOfPrimitives": "API 返回了一个 {{kind}} 类型值的数组。应为对象数组。", + "integrationApiResponseEmptyArray": "API 返回了一个空数组。请至少在响应中添加一项,以便配置显示选项。", + "integrationApiResponseNestedArrayNoSelectableKeys": "API 返回的对象中,嵌套数组没有可选择的键。请确保至少有一个嵌套数组项包含标量属性。", + "integrationApiResponseNoData": "API 未返回任何数据。应为对象的 JSON 数组。", + "integrationApiResponseNoNestedArray": "API 返回了一个不包含嵌套对象数组的单一对象。应为数组根,或包含对象数组的对象。", + "integrationApiResponseNoSelectableKeys": "API 返回的对象数组中没有可选择的键。请确保每个对象至少有一个标量属性。", + "integrationApiResponseUnexpectedType": "API 返回了一个 {{type}} 类型的值。应为对象的 JSON 数组。", + "integrationApiUrl": "API URL", + "integrationApiUrlTooltip": "定义外部数据源的 URL。必须返回结构一致的扁平对象 JSON 数组。", + "integrationAuthenticationHeaders": "身份验证标头", + "integrationCanReconfigureLater": "稍后可以重新配置", + "integrationClassyCard": "Classy 卡片", + "integrationClassyCardDescription": "显示来自 Classy 的活动", + "integrationConfigureDisplayOptions": "配置显示选项", + "integrationConfigureDisplayOptionsDescription": "选择内容编辑者编辑项目时要显示的字段", + "integrationConnect": "连接", + "integrationConnectingSecureConnection": "请稍候,我们正在建立安全连接", + "integrationConnectingToApiEndpoint": "正在连接到 API endpoint", + "integrationConnectionFailed": "连接失败", + "integrationConnectionFailedDescription": "无法连接到你输入的 API endpoint。这可能是由于结构异常、URL 缺失或无效,或自定义标头不正确。", + "integrationConnectionSuccessful": "连接成功", + "integrationConnectionSuccessfulDescription": "你的 API 已安全关联并可使用。", + "integrationConnectToApi": "连接到 API", + "integrationConnectToApiDescription": "建立到 endpoint 的连接,供用户选择项目", + "integrationDataPath": "数据路径", + "integrationDetail": "详情", + "integrationDetails": "详情", + "integrationDetailsCard": "详情卡片", + "integrationDetailsCardDescription": "显示带多个详情的项目", + "integrationDisplayItemsAs": "项目显示为", + "integrationEditApiUrl": "编辑 API URL", + "integrationEditDisplayOptions": "编辑显示选项", + "integrationHeading": "标题", + "integrationHttpHeadersOptional": "HTTP 标头(可选)", + "integrationImageCard": "图片卡片", + "integrationImageCardDescription": "显示带图片、标题和副标题的项目。", + "integrationImageUrlDescription": "仅当所选值为 URL 时才会渲染图片", + "integrationInvalidResponseFormat": "不支持的响应格式", + "integrationInvalidResponseFormatDescription": "API 已连接,但其响应无法用于配置此字段。", + "integrationInvalidUrlHelper": "请输入有效的 URL,例如 https://api.example.org/items.json", + "integrationItemId": "项目 ID", + "integrationItemIdNotUniqueWarning": "\"{{itemIdPath}}\" 在抽样的 {{count}} 个项目中并不唯一 — 这可能导致选择被错误识别。", + "integrationItemIdNotUniqueWarning_other": "\"{{itemIdPath}}\" 在抽样的 {{count}} 个项目中并不唯一 — 这可能导致选择被错误识别。", + "integrationItemIdToolTip": "请选择一个 API 保证对每个项目都唯一的值(例如数据库 ID),而不是仅在小样本中看起来唯一的值。项目 ID 不唯一可能导致选择被错误识别。", + "integrationItemPreview": "项目预览", + "integrationItemPreviewDescription": "项目将如何呈现给内容编辑者", + "integrationKey": "键", + "integrationKeyPathsMismatchWarning": "此 endpoint 返回的结构不同。现有已保存的项目将显示不正确,需要重新选择。", + "integrationKeyPreviewDescription": "下面键的预览值来自 API 响应中的第一个项目。", + "integrationLearnEndpointStructures": "了解我们接受的 endpoint 结构", + "integrationMuxCard": "MUX 卡片", + "integrationMuxCardDescription": "显示来自 MUX 的视频", + "integrationNotAvailable": "不可用", + "integrationOptions": "选项", + "integrationOtherOptions": "其他选项", + "integrationRecommended": "推荐", + "integrationReconfigure": "重新配置", + "integrationResyncValues": "重新同步值", + "integrationSaveChanges": "保存更改", + "integrationSelectDataPath": "选择数据路径", + "integrationSelectDisplayType": "选择显示类型", + "integrationSelectedCount_other": "已选择 {{count}} 个", + "integrationSelectKeysToDisplay": "选择要在项目中显示的键", + "integrationSelectRemoteItems": "选择远程项目", + "integrationSelectTitle": "选择 {{title}}", + "integrationShopifyCard": "Shopify 卡片", + "integrationShopifyCardDescription": "显示 Shopify 产品列表", + "integrationSimpleCard": "简单卡片", + "integrationSimpleCardDescription": "显示带标题的项目", + "integrationStop": "停止", + "integrationSubHeading": "副标题", + "integrationTextCard": "文本卡片", + "integrationTextCardDescription": "显示带标题和副标题的项目", + "integrationThumbnail": "缩略图", + "integrationTryAgain": "重试", + "integrationValue": "值", + "integrationVideoCard": "视频卡片", + "integrationVideoCardDescription": "显示带视频、标题和副标题的项目。", + "integrationViewJson": "查看 JSON", + "integrationViewRawJson": "查看原始 JSON", + "integrationYoutubeCard": "Youtube 卡片", + "integrationYoutubeCardDescription": "显示来自 Youtube 的视频", + "internalExternalLink": "内部/外部链接", + "internalLinkNone": "无", + "internalLinkSearchPlaceholder": "没有看到您要找的项目?输入关键词以搜索您的 API。", + "internetConnectionOff": "互联网连接已断开", + "internetConnectionRestored": "互联网连接已恢复", + "invalidUrlBody": "您输入的 URL 无效或不存在。如果您认为这是一个错误,请联系我们", + "invalidUrlHeading": "无效的 URL。请检查您的 URL 并重试。", + "invite": "邀请", + "inviteAs": "邀请身份", + "inviteMorePeople": "邀请更多人", + "invitePreviouslySent": "邀请之前已发送", + "inviteSent": "邀请已发送", + "invitesSentAsEmails": "这些邀请将以电子邮件形式发送", + "invitesSentPartial_one": "已通过电子邮件向 {{totalCount}} 个用户中的 {{successCount}} 个发送邀请", + "invitesSentPartial_other": "已通过电子邮件向 {{totalCount}} 个用户中的 {{successCount}} 个发送邀请", + "invitesSentSuccess_one": "已通过电子邮件向 {{count}} 个用户发送邀请", + "invitesSentSuccess_other": "已通过电子邮件向 {{count}} 个用户发送邀请", + "inviteUsers": "邀请用户", + "itemLowercase": "项", + "itemMissingMetaData": "所选项缺少元数据", + "itemMissingMetaTitle": "项目缺少元标题", + "keywords": "关键词", + "keywordsExamplePlaceholder": "例如 Hikes、snow", + "keywordsPlaceholder": "例如 Articles", + "keywordsToInclude": "要包含的关键词(用逗号分隔)", + "keywordsTooltip": "输入与资源名称部分匹配的一个或多个词语。", + "language": "语言", + "languageGenerationTooltip": "设置您希望生成文本所用的语言。", + "languageTooltip": "选择您想要查看结果的语言。", + "learnMoreAbout": "了解有关 {{app}} 的更多信息", + "legacySearchCreatedByOn": "由 {{name}} 于 {{date}} 创建", + "legacySearchError": "搜索词时出错:{{term}}", + "legacySearchFilterBy": "筛选方式", + "legacySearchItemMissingMeta": "项目缺少元标题", + "legacySearchNoResultsRich": "未找到搜索词的结果:{{term}}", + "legacySearchSearching": "正在搜索", + "legacySearchSortBy": "排序方式", + "legacySearchSortCreated": "创建时间", + "legacySearchSortDefault": "默认", + "legacySearchSortEdited": "编辑时间", + "legacySearchSortTitle": "标题", + "legacySearchSortUser": "用户", + "legacySearchVersionEdited": "版本 {{version}} 于 {{editedAgo}}编辑", + "limit": "限制", + "loadingLogoAlt": "应用程序加载时显示 Zesty.io 徽标", + "loginFailedContactSupport": "登录失败。请通过 {{email}} 联系支持。", + "loginProblem": "登录时出现问题", + "loginRequestDeniedRedirecting": "你的登录请求被拒绝。正在重定向到登录页。", + "loginRequestExpiredRedirecting": "你的登录请求已过期。正在重定向到登录页。", + "loginRequestValidationIssueRedirecting": "验证此登录请求时似乎出现问题。正在重定向到登录页。", + "loginSubtitle": "继续用内容赋能世界", + "manageInstanceHeadTags": "管理实例 Head 标签", + "markAsResolved": "标记为已解决", + "missingMetaTitle": "缺少元标题", + "missingModel": "缺少模型:{{ZUID}}", + "modelsInSchema": "架构中的模型", + "moreOptions": "更多选项", + "myNotifications": "我的通知", + "navApps": "应用", + "navAppTooltip": "{{name}}应用", + "navBlocks": "区块", + "navigate": "前往", + "navLaunchpad": "启动台", + "navLeads": "线索", + "navRedirects": "重定向", + "navRelease": "发布", + "navReports": "报告", + "navSchema": "架构", + "navSettings": "设置", + "navStudio": "工作室", + "needHelpContactSupport": "需要帮助?联系支持", + "noActionsTaken": "未执行任何操作", + "noFilterResults": "未找到符合筛选条件的结果", + "noFilterResultsSuggestion": "请尝试调整筛选条件以找到您要查找的内容", + "noInstancePermissionBody1": "您的账户没有访问此实例的权限。请联系实例所有者或管理员将您添加进来。", + "noInstancePermissionBody2": "如果您认为自己应该有访问权限,请确保使用的是正确的账户。", + "noInvitePermissionBody": "请联系下方列出的实例所有者或管理员,将你在此实例中的角色更改为 Admin 或 Owner,以获得邀请用户的权限。", + "noInvitePermissionTitle": "你没有邀请用户的权限", + "noPermissionImageAlt": "无权限", + "noResultsFound": "未找到结果", + "noSearchResultsAlt": "无搜索结果", + "notFoundImageAlt": "未找到", + "onboardingCallAvatarAlt": "销售头像", + "onboardingCallButton": "安排通话", + "onboardingCallTitle": "与我们的支持团队安排入门通话", + "openAiBadgeAlt": "OpenAI 徽章", + "optionNumber": "选项 {{number}}", + "or": "或", + "password": "密码", + "pinnedTabs": "已固定标签页", + "publishItem": "发布项", + "publishItems": "发布项", + "recentlyModifiedItems": "最近修改的{{items}}", + "recentlyUploadedItems": "最近上传的{{items}}", + "recentSearches": "最近搜索", + "refreshCdnCache": "刷新 CDN 缓存", + "regenerate": "重新生成", + "relationalAddExisting": "添加现有的{{label}}", + "relationalCopyZuid": "复制 ZUID", + "relationalCreateAddNew": "创建并添加新的{{label}}", + "relationalDateSaved": "保存日期", + "relationalDeletedItem": "{{zuid}}(已删除)", + "relationalDeselectAll": "取消全选", + "relationalDraftPreview": "草稿预览 - v{{version}}", + "relationalDragToReorder": "拖放以重新排序", + "relationalEditContentItem": "编辑内容项目", + "relationalFieldsHeading": "字段", + "relationalFilterItems": "筛选项目", + "relationalImageAlt": "{{name}} 图片", + "relationalMoreOptions": "更多选项", + "relationalProductionPreview": "生产环境预览 - v{{version}}", + "relationalPublishNow": "立即发布", + "relationalReplace": "替换", + "relationalReplaceItem": "替换项目", + "relationalReplacementSelected": "已选择替换项目", + "relationalSchedulePublish": "计划发布", + "relationalSelected": "已选择 {{value}}", + "relationalSelectField": "选择{{label}}", + "relationalSelectReplacement": "选择替换项目", + "relationalSortBy": "排序:{{value}}", + "relationalSortCreatedBy": "创建者", + "relationalSortDateCreated": "创建日期", + "relationalSortDescription": "描述", + "relationalSortLastPublished": "最近发布", + "relationalSortLastSaved": "最近保存", + "relationalSortStatus": "状态", + "relationalSortVersion": "版本", + "relationalStatusNotPublished": "未发布", + "relationalStatusPublished": "已发布", + "relationalStatusScheduled": "已计划", + "relationalVersionActionPublished": "已发布", + "relationalVersionActionSaved": "已保存", + "relationalVersionActionScheduled": "已计划发布", + "relationalVersionTooltip": "v{{version}} 由 {{publisher}} 于 {{date}} {{action}}", + "relationalViewingSeeAll": "正在查看 {{total}} 个项目中的 {{shown}} 个。查看全部。", + "relationalViewingSeeLess": "正在查看 {{total}} 个项目中的 {{shown}} 个。收起。", + "reloadApplication": "重新加载应用程序", + "reopen": "重新打开", + "repeaterAddAnotherField": "添加另一个字段", + "repeaterAddRowTo": "向 {{fieldName}} 添加行", + "repeaterCurrencyTooltip": "根据你的区域设置 \"{{locale}}\" 以不同货币查看此值", + "repeaterEditRow": "编辑 {{name}}", + "repeaterFieldLoadFailed": "加载 {{label}} 字段失败。点击此处查看字段模式。", + "repeaterMissingOptionsRich": "{{label}} 字段缺少选项设置。请编辑该字段以添加是/否值。", + "repeaterRemoveRow": "删除行", + "repeaterValueBetween": "值必须介于 {{min}} 和 {{max}} 之间", + "resetFilters": "重置筛选条件", + "resourceType": "资源类型", + "resourceTypeTooltip": "当您只想查看单一资源类型(例如内容项、模型(架构)或代码文件)的搜索结果时,请使用此筛选器。", + "resumeSession": "恢复会话", + "rightNow": "刚刚", + "roleAccessActivityLog": "活动日志", + "roleAccessCode": "代码 (Zesty IDE)", + "roleCanAccessMedia": "可以访问媒体并添加文件,但无法删除文件。", + "roleCannotDeleteUsers": "无法删除其他用户", + "roleCannotPublish": "无法发布内容。要发布新内容,贡献者必须向具有发布权限的用户提交工作流请求。", + "roleCanOnlyCreateEdit": "只能创建和编辑内容", + "saveFavicon": "保存 Favicon", + "schedulePublishButton": "定时发布", + "schedulePublishOnLabel": "发布于", + "schedulePublishPastWarning": "由于所选时间为当前或过去的日期,此内容将立即发布。", + "schedulePublishSavedInfo": "v{{version}} 由 {{name}} 于 {{distance}}保存", + "schedulePublishScheduledInfo": "v{{version}} 已计划于 {{date}}({{timezone}})发布。", + "schedulePublishTitleSchedule": "定时发布", + "schedulePublishTitleUnschedule": "取消定时发布", + "schedulePublishUnscheduleButton": "取消定时发布", + "schedulePublishUnscheduleInfo": "这将允许定时或发布此内容项的其他版本", + "searchIn": "搜索范围……", + "searchInstancePlaceholder": "搜索实例 {{shortcut}}", + "searchInstances": "搜索实例", + "searchNoResults": "您的搜索“{{query}}”未找到任何结果", + "searchNoResultsRich": "您的搜索 “{{query}}” 未找到任何结果", + "searchNoResultsSuggestion": "请尝试调整您的搜索。我们建议检查所有单词的拼写是否正确,或尝试使用其他关键词。", + "searchPageByUser": ",由 {{user}}", + "searchPageCreated": "创建于 {{date}}", + "searchPageResults_one": "{{count}} 个结果", + "searchPageResults_other": "{{count}} 个结果", + "searchPageResultsFor_one": "“{{query}}”有 {{count}} 个结果", + "searchPageResultsFor_other": "“{{query}}”有 {{count}} 个结果", + "searchTabs": "搜索标签页", + "searchUsers": "搜索用户", + "seeAllNotifications": "查看所有通知", + "seeListBelow": "请查看下方列表", + "selectDateRange": "选择日期范围……", + "selectFilterPlaceholder": "输入关键词以筛选此列表", + "selectInstanceFavicon": "选择实例 Favicon", + "selectMetaDescription": "选择元描述", + "selectMetaDescriptionHelp": "从我们的 AI 为您生成的 3 个元描述中选择 1 个。", + "selectMetaTitle": "选择元标题", + "selectMetaTitleHelp": "从我们的 AI 为您生成的 3 个元标题中选择 1 个。", + "selectModel": "选择模型", + "selectModelError": "请选择一个模型以继续。", + "selectNoOptions": "未找到选项", + "selectPlaceholder": "选择", + "selectSearching": "正在搜索匹配项", + "sessionEndedRedirecting": "你的会话已结束。正在重定向到登录页。", + "sortMostRecentlyCreated": "最近创建", + "sortMostRecentlyModified": "最近修改", + "sortValue": "排序:{{value}}", + "stop": "停止", + "storedAs": "存储为 {{value}}", + "switchAccount": "切换账户", + "switchInstance": "切换实例", + "tabActivityLog": "活动日志", + "tabActivityLogSuffix": "{{name}} - 活动日志", + "tabAllMedia": "所有媒体", + "tabCustomApp": "自定义应用", + "tabFontsSuffix": "{{name}} 字体", + "tabMetrics": "指标", + "tabNewItem": "新建 {{modelLabel}} 项目", + "tabSearchResults": "{{appName}} 搜索结果", + "tabSettingsSuffix": "{{name}} 设置", + "tabsResults_other": "{{count}} 个结果", + "tinymceBlockFormatting": "块格式", + "tinymceBlockquote": "引用块", + "tinymceBulletedList": "项目符号列表", + "tinymceCenterAlign": "居中对齐", + "tinymceClose": "关闭", + "tinymceConstrainProportions": "约束比例", + "tinymceEmbedSocialMedia": "嵌入社交媒体", + "tinymceEmbedSocialMediaPost": "嵌入社交媒体帖子", + "tinymceJustify": "两端对齐", + "tinymceLeftAlign": "左对齐", + "tinymceLists": "列表", + "tinymceNumberedList": "编号列表", + "tinymcePreformatted": "预格式化", + "tinymceResizeImage": "调整图片大小", + "tinymceResizeImageDimensions": "调整图片尺寸", + "tinymceRightAlign": "右对齐", + "tinymceSaveItem": "保存项目", + "tinymceSelectBynderMedia": "从 Bynder 资源中选择媒体", + "tinymceSelectUploadedMedia": "从已上传资源中选择媒体", + "tinymceService": "服务", + "tinymceSlashBulletedList": "项目符号列表", + "tinymceSlashCodeBlock": "代码块", + "tinymceSlashEmbedSocialMedia": "嵌入社交媒体", + "tinymceSlashEmoji": "Emoji", + "tinymceSlashHeading1": "标题 1", + "tinymceSlashHeading2": "标题 2", + "tinymceSlashHeading3": "标题 3", + "tinymceSlashHeading4": "标题 4", + "tinymceSlashHeading5": "标题 5", + "tinymceSlashHeading6": "标题 6", + "tinymceSlashImage": "图片", + "tinymceSlashLink": "链接", + "tinymceSlashNumberedList": "编号列表", + "tinymceSlashParagraph": "段落", + "tinymceSlashQuote": "引用", + "tinymceSlashSpecialCharacter": "特殊字符", + "tinymceSlashTable": "表格", + "tinymceSlashTime": "时间", + "tinymceSlashVideo": "视频", + "tinymceTextAlignment": "文本对齐", + "tinymceUniquePostId": "唯一帖子 ID", + "tone": "语气", + "toneIntriguing": "引人入胜 - 好奇、神秘且发人深省", + "toneNameIntriguing": "引人入胜", + "toneNamePlayful": "俏皮", + "toneNameProfessional": "专业", + "toneNameSensational": "轰动", + "toneNameSuccinct": "简洁", + "tonePlayful": "俏皮 - 有趣、轻松且异想天开", + "toneProfessional": "专业 - 严肃、正式且权威", + "toneSensational": "轰动 - 大胆、戏剧化且吸引眼球", + "toneSuccinct": "简洁 - 清晰、真实、不夸张", + "toneTooltip": "设置生成文本所需的风格和情绪", + "topic": "主题", + "topicPlaceholder": "例如 Hikes in Washington", + "trySwitchingAccount": "请尝试切换到其他账户。", + "twoFactorCodeHelp": "你将在手机上收到此代码。", + "unableToInviteUsers_one": "无法邀请 {{count}} 个用户", + "unableToInviteUsers_other": "无法邀请 {{count}} 个用户", + "unknownUser": "未知用户", + "unpinAll": "取消固定全部", + "unpinAllTabsTitle": "取消固定“查看更多”菜单中的所有标签页?", + "unsavedChangesBody": "在取消固定此标签页之前,请保存或放弃您的更改", + "updateFavicon": "更新 Favicon", + "uuidAutoGeneratedPlaceholder": "UUID 字段值为自动生成", + "uuidFieldReadOnly": "此字段无法编辑", + "viewAllLogs": "查看所有日志", + "viewOpenComment": "查看打开的评论", + "viewSourceCommit": "查看源代码提交", + "viewWebEnginePreview": "查看 WebEngine 预览 (Stage)", + "viewYourInstances": "查看您的实例", + "welcomeBack": "你好,欢迎回来!", + "wordLimit": "字数限制", + "wordLimitTooltip": "设置字数限制以控制生成文本的长度", + "zestyAccountTitle": "Zesty 账户" +} diff --git a/public/offline.html b/public/offline.html index 0c7c26a980..09d2d6ccaa 100644 --- a/public/offline.html +++ b/public/offline.html @@ -1,5 +1,5 @@ - + Zesty.io Instance Manager diff --git a/src/apps/active-preview/Preview.js b/src/apps/active-preview/Preview.js index e853d19fc0..e91019e581 100644 --- a/src/apps/active-preview/Preview.js +++ b/src/apps/active-preview/Preview.js @@ -1,4 +1,7 @@ -import { useEffect, useRef, useState } from "react"; +import { Suspense, useEffect, useRef, useState } from "react"; +import i18n from "./i18n"; +import { toSupportedLocale } from "shell/i18n"; +import { useTranslation } from "react-i18next"; import { Button, Link, @@ -28,7 +31,7 @@ import { useLocalStorage } from "react-use"; // import { Meta } from "./components/Meta"; import { JSONPreview } from "./components/JSONPreview"; -import { Frame, templates } from "./components/Frame"; +import { Frame, getTemplates } from "./components/Frame"; import api from "./api"; @@ -66,6 +69,18 @@ function isInIframe() { } export function Preview(props) { + return ( + } + > + + + ); +} + +function PreviewInner(props) { + const { t } = useTranslation("activePreview"); + const templates = getTemplates(t); const ZUID = window.location.host.split(".")[0]; if (!ZUID) { throw new Error("Invalid host for active preview"); @@ -127,6 +142,14 @@ export function Preview(props) { } if (msg.data.source === "zesty") { + if (msg.data.locale) { + // Preload before switching so changeLanguage is always a cache-hit + // and never triggers a re-suspend that would reset component state. + const safeLocale = toSupportedLocale(msg.data.locale); + i18n + .loadLanguages(safeLocale) + .then(() => i18n.changeLanguage(safeLocale)); + } if (msg.data.previewUrl) { setPreviewUrl(msg.data.previewUrl); } @@ -155,6 +178,10 @@ export function Preview(props) { } window.addEventListener("message", receiveMessage); + window.parent.postMessage( + { source: "zesty", action: "ready" }, + window.location.origin + ); return () => window.removeEventListener("message", receiveMessage); }, []); @@ -229,7 +256,7 @@ export function Preview(props) { > - Saving + {t("activePreview.saving")} ); @@ -240,8 +267,8 @@ export function Preview(props) {

{!authenticated - ? "Your session is not active. Please login to Zesty.io" - : "Disconnected from preview domain"} + ? t("activePreview.sessionNotActive") + : t("activePreview.disconnectedFromPreviewDomain")}

); @@ -275,8 +302,12 @@ export function Preview(props) { ) : ( - - Preview + + {t("common.preview")} )} @@ -354,7 +385,7 @@ export function Preview(props) { selected={device === "fullscreen"} onClick={() => selectTemplate("fullscreen")} > - No Device + {t("activePreview.noDevice")} {Object.keys(templates) .slice(1) @@ -376,7 +407,7 @@ export function Preview(props) { onChange={(event) => setRotate(event.target.checked)} /> } - label="Landscape Mode" + label={t("activePreview.landscapeMode")} labelPlacement="start" sx={{ mt: 2, @@ -449,8 +480,8 @@ export function Preview(props) { {hasErrors - ? "Resolve invalid field values to save and update preview" - : "Save to Update Preview"} + ? t("activePreview.resolveInvalidFields") + : t("activePreview.saveToUpdatePreview")} {!hasErrors && ( )} diff --git a/src/apps/active-preview/components/Frame/Frame.js b/src/apps/active-preview/components/Frame/Frame.js index 9e8c55f8f0..b6dfd69b8c 100644 --- a/src/apps/active-preview/components/Frame/Frame.js +++ b/src/apps/active-preview/components/Frame/Frame.js @@ -1,4 +1,5 @@ import { Fragment, useState, useEffect } from "react"; +import { useTranslation } from "react-i18next"; import cx from "classnames"; import { Box, CircularProgress, Typography } from "@mui/material"; import iphone14 from "../../../../../public/images/iphone-14.png"; @@ -11,122 +12,42 @@ import pixel7cam from "../../../../../public/images/pixel-7-camera.png"; import styles from "./Frame.less"; -const LoadingComponent = ({ noDomain }) => ( - - - {!noDomain && ( - - Finding Domain - - )} - -); -export function Frame(props) { - const [frameLoading, setFrameLoading] = useState(true); - const [routePath, setRoutePath] = useState(""); - const loading = props?.isLoading || frameLoading; - - useEffect(() => { - setFrameLoading(true); - setRoutePath(`${props?.domain}${props?.route}`); - }, [props?.domain, props?.route, props?.device]); - +const LoadingComponent = ({ noDomain }) => { + const { t } = useTranslation(); return ( - - {props.device === "fullscreen" ? ( - <> -