mirror of
https://github.com/stablyai/orca.git
synced 2026-10-31 09:07:40 +00:00
fix(i18n): resolve count strings with each language's plural rules (#34693)
* fix(i18n): resolve count strings with each language's plural rules translate() now resolves a literal _one/_other key passed a numeric count through its plural family, so i18next picks the CLDR form for the active language or plugin pack. Built-in catalogs fill missing plural categories (e.g. many in es/fr/pt) from _other so large counts stay in-language. _one strings that hardcoded 1 now interpolate the count. Closes #12106 * fix(i18n): pass value0 to fullCoverage_one so one-form languages interpolate the count Languages with a single plural category (ja/ko/zh) now resolve count 1 to fullCoverage_other, which interpolates {{value0}}. --------- Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
This commit is contained in:
@@ -28,12 +28,12 @@ function fileCountLabel(count: number): string {
|
||||
? translate(
|
||||
'auto.components.right.sidebar.AiVaultScanProgressStrip.fileCount_one',
|
||||
'{{value0}} file',
|
||||
{ value0 }
|
||||
{ value0, count }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.right.sidebar.AiVaultScanProgressStrip.fileCount_other',
|
||||
'{{value0}} files',
|
||||
{ value0 }
|
||||
{ value0, count }
|
||||
)
|
||||
}
|
||||
|
||||
@@ -43,12 +43,12 @@ function databaseCountLabel(count: number): string {
|
||||
? translate(
|
||||
'auto.components.right.sidebar.AiVaultScanProgressStrip.databaseCount_one',
|
||||
'{{value0}} database',
|
||||
{ value0 }
|
||||
{ value0, count }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.right.sidebar.AiVaultScanProgressStrip.databaseCount_other',
|
||||
'{{value0}} databases',
|
||||
{ value0 }
|
||||
{ value0, count }
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -123,12 +123,13 @@ export function ComputerUsePane(): React.JSX.Element {
|
||||
: missingCount === 1
|
||||
? translate(
|
||||
'auto.components.settings.computerUseSummary.permissionsRequired_one',
|
||||
'1 permission required before agents can operate app windows.'
|
||||
'{{value0}} permission required before agents can operate app windows.',
|
||||
{ value0: missingCount, count: missingCount }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.settings.computerUseSummary.permissionsRequired_other',
|
||||
'{{value0}} permissions required before agents can operate app windows.',
|
||||
{ value0: missingCount }
|
||||
{ value0: missingCount, count: missingCount }
|
||||
)
|
||||
|
||||
useEffect(() => {
|
||||
|
||||
@@ -47,12 +47,13 @@ function getAgentCoverageSummary(props: {
|
||||
return totalCount === 1
|
||||
? translate(
|
||||
'auto.components.settings.OrchestrationSkillAgentCoverage.fullCoverage_one',
|
||||
'All 1 detected agent has the skill.'
|
||||
'All 1 detected agent has the skill.',
|
||||
{ value0: totalCount, count: totalCount }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.settings.OrchestrationSkillAgentCoverage.fullCoverage_other',
|
||||
'All {{value0}} detected agents have the skill.',
|
||||
{ value0: totalCount }
|
||||
{ value0: totalCount, count: totalCount }
|
||||
)
|
||||
}
|
||||
if (noCoverage) {
|
||||
|
||||
@@ -149,12 +149,13 @@ export function WarpThemeImportModal({
|
||||
{preview.themes.length === 1
|
||||
? translate(
|
||||
'auto.components.settings.WarpThemeImportModal.found_theme_one',
|
||||
'Found 1 theme'
|
||||
'Found {{value0}} theme',
|
||||
{ value0: preview.themes.length, count: preview.themes.length }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.settings.WarpThemeImportModal.found_theme_other',
|
||||
'Found {{value0}} themes',
|
||||
{ value0: preview.themes.length }
|
||||
{ value0: preview.themes.length, count: preview.themes.length }
|
||||
)}
|
||||
{preview.sourceLabel
|
||||
? translate(
|
||||
@@ -319,13 +320,14 @@ export function WarpThemeImportModal({
|
||||
{selectedCount === 1
|
||||
? translate(
|
||||
'auto.components.settings.WarpThemeImportModal.import_theme_one',
|
||||
'Import 1 Theme'
|
||||
'Import {{value0}} Theme',
|
||||
{ value0: selectedCount, count: selectedCount }
|
||||
)
|
||||
: selectedCount > 0
|
||||
? translate(
|
||||
'auto.components.settings.WarpThemeImportModal.import_theme_other',
|
||||
'Import {{value0}} Themes',
|
||||
{ value0: selectedCount }
|
||||
{ value0: selectedCount, count: selectedCount }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.settings.WarpThemeImportModal.import_themes',
|
||||
|
||||
@@ -131,13 +131,13 @@ export function useWarpThemeImport(
|
||||
overflowCount === 1
|
||||
? translate(
|
||||
'auto.components.settings.useWarpThemeImport.over_limit_one',
|
||||
'Importing these themes would exceed the {{value0}} custom terminal theme limit. Deselect 1 new theme and try again.',
|
||||
{ value0: MAX_TERMINAL_CUSTOM_THEMES }
|
||||
'Importing these themes would exceed the {{value0}} custom terminal theme limit. Deselect {{value1}} new theme and try again.',
|
||||
{ value0: MAX_TERMINAL_CUSTOM_THEMES, value1: overflowCount, count: overflowCount }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.settings.useWarpThemeImport.over_limit_other',
|
||||
'Importing these themes would exceed the {{value0}} custom terminal theme limit. Deselect {{value1}} new themes and try again.',
|
||||
{ value0: MAX_TERMINAL_CUSTOM_THEMES, value1: overflowCount }
|
||||
{ value0: MAX_TERMINAL_CUSTOM_THEMES, value1: overflowCount, count: overflowCount }
|
||||
)
|
||||
)
|
||||
return
|
||||
@@ -157,12 +157,13 @@ export function useWarpThemeImport(
|
||||
count === 1
|
||||
? translate(
|
||||
'auto.components.settings.useWarpThemeImport.imported_one',
|
||||
'Imported 1 theme'
|
||||
'Imported {{value0}} theme',
|
||||
{ value0: count, count }
|
||||
)
|
||||
: translate(
|
||||
'auto.components.settings.useWarpThemeImport.imported_other',
|
||||
'Imported {{value0}} themes',
|
||||
{ value0: count }
|
||||
{ value0: count, count }
|
||||
)
|
||||
)
|
||||
// Reveal new themes that otherwise remain below the built-in list.
|
||||
|
||||
@@ -45,7 +45,7 @@ export function DeleteWorktreeDirtyChangeHint({
|
||||
? changeCount === 1
|
||||
? translate(
|
||||
'auto.components.sidebar.DeleteWorktreeDirtyChangeHint.changeCount_one',
|
||||
'1 uncommitted or untracked change',
|
||||
'{{count}} uncommitted or untracked change',
|
||||
{ count: changeCount }
|
||||
)
|
||||
: translate(
|
||||
|
||||
@@ -102,7 +102,7 @@ export default function ImportedWorktreesVisibilityLine({
|
||||
hiddenCount === 1
|
||||
? translate(
|
||||
'auto.components.sidebar.ImportedWorktreesVisibilityLine.keepHiddenAriaLabel_one',
|
||||
'Keep 1 discovered worktree hidden for {{repo}}; recover from the project menu',
|
||||
'Keep {{count}} discovered worktree hidden for {{repo}}; recover from the project menu',
|
||||
{ count: hiddenCount, repo: repoScopeLabel }
|
||||
)
|
||||
: translate(
|
||||
@@ -120,7 +120,7 @@ export default function ImportedWorktreesVisibilityLine({
|
||||
? hiddenCount === 1
|
||||
? translate(
|
||||
'auto.components.sidebar.ImportedWorktreesVisibilityLine.hidingInRepo_one',
|
||||
'Hiding 1 discovered worktree in {{repo}}',
|
||||
'Hiding {{count}} discovered worktree in {{repo}}',
|
||||
{ count: hiddenCount, repo: repoScopeLabel }
|
||||
)
|
||||
: translate(
|
||||
@@ -131,7 +131,7 @@ export default function ImportedWorktreesVisibilityLine({
|
||||
: hiddenCount === 1
|
||||
? translate(
|
||||
'auto.components.sidebar.ImportedWorktreesVisibilityLine.hiding_one',
|
||||
'Hiding 1 discovered worktree',
|
||||
'Hiding {{count}} discovered worktree',
|
||||
{ count: hiddenCount }
|
||||
)
|
||||
: translate(
|
||||
|
||||
@@ -270,7 +270,7 @@ function SetupScriptPromptCard(): React.JSX.Element | null {
|
||||
? skippedCount === 1
|
||||
? translate(
|
||||
'auto.components.sidebar.SetupScriptPromptCard.savedWithSkippedFields_one',
|
||||
'1 unsupported field skipped. Saved the setup command.',
|
||||
'{{count}} unsupported field skipped. Saved the setup command.',
|
||||
{ count: skippedCount }
|
||||
)
|
||||
: translate(
|
||||
|
||||
@@ -4,7 +4,7 @@ export function deleteWorkspacesCountLabel(count: number): string {
|
||||
return count === 1
|
||||
? translate(
|
||||
'auto.components.sidebar.workspaceBatchActionLabels.deleteCount_one',
|
||||
'Delete 1 Workspace',
|
||||
'Delete {{count}} Workspace',
|
||||
{ count }
|
||||
)
|
||||
: translate(
|
||||
@@ -18,7 +18,7 @@ function sleepWorkspacesCountLabel(count: number): string {
|
||||
return count === 1
|
||||
? translate(
|
||||
'auto.components.sidebar.workspaceBatchActionLabels.sleepCount_one',
|
||||
'Sleep 1 Workspace',
|
||||
'Sleep {{count}} Workspace',
|
||||
{ count }
|
||||
)
|
||||
: translate(
|
||||
|
||||
+12
-12
@@ -308,9 +308,9 @@
|
||||
"syncedServerSingular": "Synced {{count}} server"
|
||||
},
|
||||
"WarpThemeImportModal": {
|
||||
"found_theme_one": "Found 1 theme",
|
||||
"found_theme_one": "Found {{value0}} theme",
|
||||
"found_theme_other": "Found {{value0}} themes",
|
||||
"import_theme_one": "Import 1 Theme",
|
||||
"import_theme_one": "Import {{value0}} Theme",
|
||||
"import_theme_other": "Import {{value0}} Themes"
|
||||
},
|
||||
"agent-awake-copy": {
|
||||
@@ -387,7 +387,7 @@
|
||||
}
|
||||
},
|
||||
"computerUseSummary": {
|
||||
"permissionsRequired_one": "1 permission required before agents can operate app windows.",
|
||||
"permissionsRequired_one": "{{value0}} permission required before agents can operate app windows.",
|
||||
"permissionsRequired_other": "{{value0}} permissions required before agents can operate app windows."
|
||||
},
|
||||
"sshHostServer": {
|
||||
@@ -427,23 +427,23 @@
|
||||
}
|
||||
},
|
||||
"useWarpThemeImport": {
|
||||
"imported_one": "Imported 1 theme",
|
||||
"imported_one": "Imported {{value0}} theme",
|
||||
"imported_other": "Imported {{value0}} themes",
|
||||
"over_limit_one": "Importing these themes would exceed the {{value0}} custom terminal theme limit. Deselect 1 new theme and try again.",
|
||||
"over_limit_one": "Importing these themes would exceed the {{value0}} custom terminal theme limit. Deselect {{value1}} new theme and try again.",
|
||||
"over_limit_other": "Importing these themes would exceed the {{value0}} custom terminal theme limit. Deselect {{value1}} new themes and try again."
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"DeleteWorktreeDirtyChangeHint": {
|
||||
"changeCount_one": "1 uncommitted or untracked change",
|
||||
"changeCount_one": "{{count}} uncommitted or untracked change",
|
||||
"changeCount_other": "{{count}} uncommitted or untracked changes"
|
||||
},
|
||||
"ImportedWorktreesVisibilityLine": {
|
||||
"hidingInRepo_one": "Hiding 1 discovered worktree in {{repo}}",
|
||||
"hidingInRepo_one": "Hiding {{count}} discovered worktree in {{repo}}",
|
||||
"hidingInRepo_other": "Hiding {{count}} discovered worktrees in {{repo}}",
|
||||
"hiding_one": "Hiding 1 discovered worktree",
|
||||
"hiding_one": "Hiding {{count}} discovered worktree",
|
||||
"hiding_other": "Hiding {{count}} discovered worktrees",
|
||||
"keepHiddenAriaLabel_one": "Keep 1 discovered worktree hidden for {{repo}}; recover from the project menu",
|
||||
"keepHiddenAriaLabel_one": "Keep {{count}} discovered worktree hidden for {{repo}}; recover from the project menu",
|
||||
"keepHiddenAriaLabel_other": "Keep {{count}} discovered worktrees hidden for {{repo}}; recover from the project menu"
|
||||
},
|
||||
"PreservedBranchBatchReviewDialog": {
|
||||
@@ -451,7 +451,7 @@
|
||||
"a0f9863597_other": "Force Delete {{count}} Branches"
|
||||
},
|
||||
"SetupScriptPromptCard": {
|
||||
"savedWithSkippedFields_one": "1 unsupported field skipped. Saved the setup command.",
|
||||
"savedWithSkippedFields_one": "{{count}} unsupported field skipped. Saved the setup command.",
|
||||
"savedWithSkippedFields_other": "{{count}} unsupported fields skipped. Saved the setup command."
|
||||
},
|
||||
"preserved": {
|
||||
@@ -473,9 +473,9 @@
|
||||
}
|
||||
},
|
||||
"workspaceBatchActionLabels": {
|
||||
"deleteCount_one": "Delete 1 Workspace",
|
||||
"deleteCount_one": "Delete {{count}} Workspace",
|
||||
"deleteCount_other": "Delete {{count}} Workspaces",
|
||||
"sleepCount_one": "Sleep 1 Workspace",
|
||||
"sleepCount_one": "Sleep {{count}} Workspace",
|
||||
"sleepCount_other": "Sleep {{count}} Workspaces"
|
||||
}
|
||||
},
|
||||
|
||||
@@ -40,12 +40,13 @@ function localeCatalogUrl(language: string): string | undefined {
|
||||
return Object.entries(NON_DEFAULT_LOCALE_URLS).find(([name]) => name === language)?.[1]
|
||||
}
|
||||
|
||||
async function loadLocaleCatalog(url: string): Promise<Record<string, unknown>> {
|
||||
async function loadLocaleCatalog(language: string, url: string): Promise<Record<string, unknown>> {
|
||||
const response = await fetch(url, { cache: 'no-cache' })
|
||||
if (!response.ok) {
|
||||
throw new Error(`Language catalog request failed: ${response.status}`)
|
||||
}
|
||||
return response.json()
|
||||
const categories = new Intl.PluralRules(language).resolvedOptions().pluralCategories
|
||||
return withPluralCategoriesFromOther(await response.json(), categories)
|
||||
}
|
||||
|
||||
const lazyLocaleBackend: BackendModule = {
|
||||
@@ -58,7 +59,7 @@ const lazyLocaleBackend: BackendModule = {
|
||||
callback(null, false)
|
||||
return
|
||||
}
|
||||
loadLocaleCatalog(url).then(
|
||||
loadLocaleCatalog(language, url).then(
|
||||
(catalog) => callback(null, catalog),
|
||||
(error) => callback(error instanceof Error ? error : new Error(String(error)), false)
|
||||
)
|
||||
@@ -98,8 +99,12 @@ const getPluralRule = pluralResolver.getRule.bind(pluralResolver)
|
||||
pluralResolver.getRule = (code: string, options?: { ordinal?: boolean }) =>
|
||||
getPluralRule(pluralLocaleByResourceLanguage.get(code) ?? code, options)
|
||||
|
||||
const PLURAL_SUFFIX_RE = /_(zero|one|two|few|many|other)$/
|
||||
|
||||
export function translate(key: string, fallback: string, options?: TOptions): string {
|
||||
const value = i18n.t(key, { defaultValue: fallback, ...options })
|
||||
// Callers name a literal `_one`/`_other` key for extraction; with a count, let CLDR pick the form.
|
||||
const resolvedKey = typeof options?.count === 'number' ? key.replace(PLURAL_SUFFIX_RE, '') : key
|
||||
const value = i18n.t(resolvedKey, { defaultValue: fallback, ...options })
|
||||
return isPseudoLocalizationLocale(i18n.language) ? pseudoLocalizeString(value) : value
|
||||
}
|
||||
|
||||
@@ -112,7 +117,7 @@ export async function loadRendererUiLanguage(language: UiLanguage): Promise<stri
|
||||
: resourceLanguage
|
||||
const url = localeCatalogUrl(locale)
|
||||
if (url && !i18n.hasResourceBundle(locale, 'translation')) {
|
||||
const catalog = await withTimeout(loadLocaleCatalog(url), 5000, null)
|
||||
const catalog = await withTimeout(loadLocaleCatalog(locale, url), 5000, null)
|
||||
if (catalog === null) {
|
||||
throw new Error('Language catalog unavailable')
|
||||
}
|
||||
@@ -154,7 +159,7 @@ export function resolveRendererResourceLanguage(language: string): string {
|
||||
return pluginLanguagePacks.find((pack) => pack.id === language)?.resourceLanguage ?? language
|
||||
}
|
||||
|
||||
// Packs translated from English often ship only _one/_other; reuse _other so few/many stay in-language.
|
||||
// Catalogs translated from English often ship only _one/_other; reuse _other so few/many stay in-language.
|
||||
function withPluralCategoriesFromOther(
|
||||
catalog: Record<string, unknown>,
|
||||
categories: readonly string[]
|
||||
|
||||
@@ -5374,7 +5374,7 @@
|
||||
"loadedChangedPaths": "Loaded changed paths",
|
||||
"unresolvedConflict": "Unresolved conflict",
|
||||
"moreLoadedPaths": "and {{value0}} more loaded paths",
|
||||
"changeCount_one": "1 uncommitted or untracked change",
|
||||
"changeCount_one": "{{count}} uncommitted or untracked change",
|
||||
"changeCount_other": "{{count}} uncommitted or untracked changes",
|
||||
"changes": "Uncommitted or untracked changes"
|
||||
},
|
||||
@@ -5403,11 +5403,11 @@
|
||||
"294de4aeb2": "Show fewer",
|
||||
"collapseAriaLabel": "Collapse hidden worktrees for {{repo}}",
|
||||
"expandAriaLabel": "Expand hidden worktrees for {{repo}}",
|
||||
"hiding_one": "Hiding 1 discovered worktree",
|
||||
"hiding_one": "Hiding {{count}} discovered worktree",
|
||||
"hiding_other": "Hiding {{count}} discovered worktrees",
|
||||
"hidingInRepo_one": "Hiding 1 discovered worktree in {{repo}}",
|
||||
"hidingInRepo_one": "Hiding {{count}} discovered worktree in {{repo}}",
|
||||
"hidingInRepo_other": "Hiding {{count}} discovered worktrees in {{repo}}",
|
||||
"keepHiddenAriaLabel_one": "Keep 1 discovered worktree hidden for {{repo}}; recover from the project menu",
|
||||
"keepHiddenAriaLabel_one": "Keep {{count}} discovered worktree hidden for {{repo}}; recover from the project menu",
|
||||
"keepHiddenAriaLabel_other": "Keep {{count}} discovered worktrees hidden for {{repo}}; recover from the project menu",
|
||||
"keepHiddenTooltip": "Keep hidden - recover from the project menu",
|
||||
"repoOnHost": "{{repo}} on {{host}}"
|
||||
@@ -5502,7 +5502,7 @@
|
||||
"d9f2db2738": "project's settings",
|
||||
"a5bb8c5135": "Saved in this",
|
||||
"savedSetupCommand": "Saved the setup command.",
|
||||
"savedWithSkippedFields_one": "1 unsupported field skipped. Saved the setup command.",
|
||||
"savedWithSkippedFields_one": "{{count}} unsupported field skipped. Saved the setup command.",
|
||||
"savedWithSkippedFields_other": "{{count}} unsupported fields skipped. Saved the setup command."
|
||||
},
|
||||
"SetupScriptPromptCardViews": {
|
||||
@@ -6568,11 +6568,11 @@
|
||||
"markUnread": "Mark unread"
|
||||
},
|
||||
"workspaceBatchActionLabels": {
|
||||
"deleteCount_one": "Delete 1 Workspace",
|
||||
"deleteCount_one": "Delete {{count}} Workspace",
|
||||
"deleteCount_other": "Delete {{count}} Workspaces",
|
||||
"deleteSelected": "Delete Selected",
|
||||
"sleep": "Sleep",
|
||||
"sleepCount_one": "Sleep 1 Workspace",
|
||||
"sleepCount_one": "Sleep {{count}} Workspace",
|
||||
"sleepCount_other": "Sleep {{count}} Workspaces"
|
||||
},
|
||||
"addRepoBusyLabels": {
|
||||
@@ -7433,7 +7433,7 @@
|
||||
"choose_file": "Choose File",
|
||||
"choose_folder": "Choose Folder",
|
||||
"loading": "Loading Warp themes...",
|
||||
"found_theme_one": "Found 1 theme",
|
||||
"found_theme_one": "Found {{value0}} theme",
|
||||
"found_theme_other": "Found {{value0}} themes",
|
||||
"found_in_source": " in {{value0}}",
|
||||
"clear_all": "Clear all",
|
||||
@@ -7446,16 +7446,16 @@
|
||||
"skipped_files": "Skipped files",
|
||||
"more_skipped_files": "{{value0}} more skipped files.",
|
||||
"cancel": "Cancel",
|
||||
"import_theme_one": "Import 1 Theme",
|
||||
"import_theme_one": "Import {{value0}} Theme",
|
||||
"import_theme_other": "Import {{value0}} Themes",
|
||||
"import_themes": "Import Themes"
|
||||
},
|
||||
"useWarpThemeImport": {
|
||||
"unknown_error": "Unknown error",
|
||||
"imported_one": "Imported 1 theme",
|
||||
"imported_one": "Imported {{value0}} theme",
|
||||
"imported_other": "Imported {{value0}} themes",
|
||||
"import_failed": "Failed to import themes",
|
||||
"over_limit_one": "Importing these themes would exceed the {{value0}} custom terminal theme limit. Deselect 1 new theme and try again.",
|
||||
"over_limit_one": "Importing these themes would exceed the {{value0}} custom terminal theme limit. Deselect {{value1}} new theme and try again.",
|
||||
"over_limit_other": "Importing these themes would exceed the {{value0}} custom terminal theme limit. Deselect {{value1}} new themes and try again."
|
||||
},
|
||||
"YamlThemeImportButton": {
|
||||
@@ -10777,7 +10777,7 @@
|
||||
"readyTitle": "Computer Use is ready.",
|
||||
"readyDescription": "Agents can inspect and operate app windows when you ask.",
|
||||
"permissionsTitle": "Finish setup to use local apps.",
|
||||
"permissionsRequired_one": "1 permission required before agents can operate app windows.",
|
||||
"permissionsRequired_one": "{{value0}} permission required before agents can operate app windows.",
|
||||
"permissionsRequired_other": "{{value0}} permissions required before agents can operate app windows."
|
||||
},
|
||||
"providerAccountScope": {
|
||||
|
||||
@@ -5067,7 +5067,7 @@
|
||||
"loadedChangedPaths": "Rutas modificadas cargadas",
|
||||
"unresolvedConflict": "Conflicto sin resolver",
|
||||
"moreLoadedPaths": "y {{value0}} rutas cargadas más",
|
||||
"changeCount_one": "1 cambio sin confirmar o sin seguimiento",
|
||||
"changeCount_one": "{{count}} cambio sin confirmar o sin seguimiento",
|
||||
"changeCount_other": "{{count}} cambios sin confirmar o sin seguimiento",
|
||||
"changes": "Cambios sin confirmar o sin seguimiento"
|
||||
},
|
||||
@@ -5096,11 +5096,11 @@
|
||||
"294de4aeb2": "Mostrar menos",
|
||||
"collapseAriaLabel": "Contraer worktrees ocultos de {{repo}}",
|
||||
"expandAriaLabel": "Expandir worktrees ocultos de {{repo}}",
|
||||
"hiding_one": "Ocultando 1 worktree detectado",
|
||||
"hiding_one": "Ocultando {{count}} worktree detectado",
|
||||
"hiding_other": "Ocultando {{count}} worktrees detectados",
|
||||
"hidingInRepo_one": "Ocultando 1 worktree detectado en {{repo}}",
|
||||
"hidingInRepo_one": "Ocultando {{count}} worktree detectado en {{repo}}",
|
||||
"hidingInRepo_other": "Ocultando {{count}} worktrees detectados en {{repo}}",
|
||||
"keepHiddenAriaLabel_one": "Mantener oculto 1 worktree detectado de {{repo}}; recupéralo desde el menú del proyecto",
|
||||
"keepHiddenAriaLabel_one": "Mantener oculto {{count}} worktree detectado de {{repo}}; recupéralo desde el menú del proyecto",
|
||||
"keepHiddenAriaLabel_other": "Mantener ocultos {{count}} worktrees detectados de {{repo}}; recupéralos desde el menú del proyecto",
|
||||
"keepHiddenTooltip": "Mantener oculto: recupéralo desde el menú del proyecto",
|
||||
"repoOnHost": "{{repo}} en {{host}}"
|
||||
@@ -5195,7 +5195,7 @@
|
||||
"d9f2db2738": "ajustes del proyecto",
|
||||
"a5bb8c5135": "Guardado en este",
|
||||
"savedSetupCommand": "Se guardó el comando de configuración.",
|
||||
"savedWithSkippedFields_one": "Se omitió 1 campo no compatible. Se guardó el comando de configuración.",
|
||||
"savedWithSkippedFields_one": "Se omitió {{count}} campo no compatible. Se guardó el comando de configuración.",
|
||||
"savedWithSkippedFields_other": "Se omitieron {{count}} campos no compatibles. Se guardó el comando de configuración."
|
||||
},
|
||||
"SetupScriptPromptCardViews": {
|
||||
@@ -6277,11 +6277,11 @@
|
||||
"markUnread": "Marcar como no leído"
|
||||
},
|
||||
"workspaceBatchActionLabels": {
|
||||
"deleteCount_one": "Eliminar 1 espacio de trabajo",
|
||||
"deleteCount_one": "Eliminar {{count}} espacio de trabajo",
|
||||
"deleteCount_other": "Eliminar {{count}} espacios de trabajo",
|
||||
"deleteSelected": "Eliminar seleccionados",
|
||||
"sleep": "Suspender",
|
||||
"sleepCount_one": "Suspender 1 espacio de trabajo",
|
||||
"sleepCount_one": "Suspender {{count}} espacio de trabajo",
|
||||
"sleepCount_other": "Suspender {{count}} espacios de trabajo"
|
||||
},
|
||||
"addRepoBusyLabels": {
|
||||
@@ -10344,7 +10344,7 @@
|
||||
"choose_file": "Elegir archivo",
|
||||
"choose_folder": "Elegir carpeta",
|
||||
"loading": "Cargando temas de Warp...",
|
||||
"found_theme_one": "Se encontró 1 tema",
|
||||
"found_theme_one": "Se encontró {{value0}} tema",
|
||||
"found_theme_other": "Se encontraron {{value0}} temas",
|
||||
"found_in_source": " en {{value0}}",
|
||||
"clear_all": "Borrar selección",
|
||||
@@ -10357,16 +10357,16 @@
|
||||
"skipped_files": "Archivos omitidos",
|
||||
"more_skipped_files": "{{value0}} archivos omitidos más.",
|
||||
"cancel": "Cancelar",
|
||||
"import_theme_one": "Importar 1 tema",
|
||||
"import_theme_one": "Importar {{value0}} tema",
|
||||
"import_theme_other": "Importar {{value0}} temas",
|
||||
"import_themes": "Importar temas"
|
||||
},
|
||||
"useWarpThemeImport": {
|
||||
"unknown_error": "Error desconocido",
|
||||
"imported_one": "Se importó 1 tema",
|
||||
"imported_one": "Se importó {{value0}} tema",
|
||||
"imported_other": "Se importaron {{value0}} temas",
|
||||
"import_failed": "No se pudieron importar los temas",
|
||||
"over_limit_one": "Importar estos temas superaría el límite de {{value0}} temas personalizados de terminal. Deselecciona 1 tema nuevo e inténtalo de nuevo.",
|
||||
"over_limit_one": "Importar estos temas superaría el límite de {{value0}} temas personalizados de terminal. Deselecciona {{value1}} tema nuevo e inténtalo de nuevo.",
|
||||
"over_limit_other": "Importar estos temas superaría el límite de {{value0}} temas personalizados de terminal. Deselecciona {{value1}} temas nuevos e inténtalo de nuevo."
|
||||
},
|
||||
"YamlThemeImportButton": {
|
||||
@@ -10484,7 +10484,7 @@
|
||||
}
|
||||
},
|
||||
"computerUseSummary": {
|
||||
"permissionsRequired_one": "Se requiere 1 permiso antes de que los agentes puedan operar ventanas de apps.",
|
||||
"permissionsRequired_one": "Se requiere {{value0}} permiso antes de que los agentes puedan operar ventanas de apps.",
|
||||
"permissionsRequired_other": "Se requieren {{value0}} permisos antes de que los agentes puedan operar ventanas de apps.",
|
||||
"checkingTitle": "Comprobando el acceso a Computer Use.",
|
||||
"checkingDescription": "Orca está comprobando los permisos de privacidad de macOS para el helper de Computer Use.",
|
||||
|
||||
@@ -5259,7 +5259,7 @@
|
||||
"loadedChangedPaths": "Chemins modifiés chargés",
|
||||
"unresolvedConflict": "Conflit non résolu",
|
||||
"moreLoadedPaths": "et {{value0}} autres chemins chargés",
|
||||
"changeCount_one": "1 modification non commitée ou non suivie",
|
||||
"changeCount_one": "{{count}} modification non commitée ou non suivie",
|
||||
"changeCount_other": "{{count}} modifications non commitées ou non suivies",
|
||||
"changes": "Modifications non commitées ou non suivies"
|
||||
},
|
||||
@@ -5288,11 +5288,11 @@
|
||||
"294de4aeb2": "Afficher moins",
|
||||
"collapseAriaLabel": "Réduire les worktrees masqués de {{repo}}",
|
||||
"expandAriaLabel": "Développer les worktrees masqués de {{repo}}",
|
||||
"hiding_one": "1 worktree détecté masqué",
|
||||
"hiding_one": "{{count}} worktree détecté masqué",
|
||||
"hiding_other": "{{count}} worktrees détectés masqués",
|
||||
"hidingInRepo_one": "1 worktree détecté masqué dans {{repo}}",
|
||||
"hidingInRepo_one": "{{count}} worktree détecté masqué dans {{repo}}",
|
||||
"hidingInRepo_other": "{{count}} worktrees détectés masqués dans {{repo}}",
|
||||
"keepHiddenAriaLabel_one": "Garder 1 worktree détecté masqué pour {{repo}} ; récupérez-le depuis le menu du projet",
|
||||
"keepHiddenAriaLabel_one": "Garder {{count}} worktree détecté masqué pour {{repo}} ; récupérez-le depuis le menu du projet",
|
||||
"keepHiddenAriaLabel_other": "Garder {{count}} worktrees détectés masqués pour {{repo}} ; récupérez-les depuis le menu du projet",
|
||||
"keepHiddenTooltip": "Garder masqué - récupérable depuis le menu du projet",
|
||||
"repoOnHost": "{{repo}} sur {{host}}"
|
||||
@@ -5387,7 +5387,7 @@
|
||||
"d9f2db2738": "paramètres du projet",
|
||||
"a5bb8c5135": "Enregistré dans les",
|
||||
"savedSetupCommand": "Commande de setup enregistrée.",
|
||||
"savedWithSkippedFields_one": "1 champ non pris en charge ignoré. Commande de setup enregistrée.",
|
||||
"savedWithSkippedFields_one": "{{count}} champ non pris en charge ignoré. Commande de setup enregistrée.",
|
||||
"savedWithSkippedFields_other": "{{count}} champs non pris en charge ignorés. Commande de setup enregistrée."
|
||||
},
|
||||
"SetupScriptPromptCardViews": {
|
||||
@@ -6454,11 +6454,11 @@
|
||||
"markUnread": "Marquer comme non lu"
|
||||
},
|
||||
"workspaceBatchActionLabels": {
|
||||
"deleteCount_one": "Supprimer 1 espace de travail",
|
||||
"deleteCount_one": "Supprimer {{count}} espace de travail",
|
||||
"deleteCount_other": "Supprimer {{count}} espaces de travail",
|
||||
"deleteSelected": "Supprimer la sélection",
|
||||
"sleep": "Mettre en veille",
|
||||
"sleepCount_one": "Mettre en veille 1 espace de travail",
|
||||
"sleepCount_one": "Mettre en veille {{count}} espace de travail",
|
||||
"sleepCount_other": "Mettre en veille {{count}} espaces de travail"
|
||||
},
|
||||
"addRepoBusyLabels": {
|
||||
@@ -7319,7 +7319,7 @@
|
||||
"choose_file": "Choisir un fichier",
|
||||
"choose_folder": "Choisir un dossier",
|
||||
"loading": "Chargement des thèmes Warp...",
|
||||
"found_theme_one": "1 thème trouvé",
|
||||
"found_theme_one": "{{value0}} thème trouvé",
|
||||
"found_theme_other": "{{value0}} thèmes trouvés",
|
||||
"found_in_source": " dans {{value0}}",
|
||||
"clear_all": "Tout effacer",
|
||||
@@ -7332,16 +7332,16 @@
|
||||
"skipped_files": "Fichiers ignorés",
|
||||
"more_skipped_files": "{{value0}} autres fichiers ignorés.",
|
||||
"cancel": "Annuler",
|
||||
"import_theme_one": "Importer 1 thème",
|
||||
"import_theme_one": "Importer {{value0}} thème",
|
||||
"import_theme_other": "Importer {{value0}} thèmes",
|
||||
"import_themes": "Importer des thèmes"
|
||||
},
|
||||
"useWarpThemeImport": {
|
||||
"unknown_error": "Erreur inconnue",
|
||||
"imported_one": "1 thème importé",
|
||||
"imported_one": "{{value0}} thème importé",
|
||||
"imported_other": "{{value0}} thèmes importés",
|
||||
"import_failed": "Échec de l'importation des thèmes",
|
||||
"over_limit_one": "Importer ces thèmes dépasserait la limite de {{value0}} thèmes de terminal personnalisés. Désélectionnez 1 nouveau thème et réessayez.",
|
||||
"over_limit_one": "Importer ces thèmes dépasserait la limite de {{value0}} thèmes de terminal personnalisés. Désélectionnez {{value1}} nouveau thème et réessayez.",
|
||||
"over_limit_other": "Importer ces thèmes dépasserait la limite de {{value0}} thèmes de terminal personnalisés. Désélectionnez {{value1}} nouveaux thèmes et réessayez."
|
||||
},
|
||||
"YamlThemeImportButton": {
|
||||
@@ -10658,7 +10658,7 @@
|
||||
"readyTitle": "Computer Use est prêt.",
|
||||
"readyDescription": "Les agents peuvent inspecter et manipuler des fenêtres d'applications à votre demande.",
|
||||
"permissionsTitle": "Terminez la configuration pour utiliser les applications locales.",
|
||||
"permissionsRequired_one": "1 autorisation requise avant que les agents puissent manipuler des fenêtres d'applications.",
|
||||
"permissionsRequired_one": "{{value0}} autorisation requise avant que les agents puissent manipuler des fenêtres d'applications.",
|
||||
"permissionsRequired_other": "{{value0}} autorisations requises avant que les agents puissent manipuler des fenêtres d'applications."
|
||||
},
|
||||
"providerAccountScope": {
|
||||
|
||||
@@ -5033,7 +5033,7 @@
|
||||
"loadedChangedPaths": "読み込まれた変更済みパス",
|
||||
"unresolvedConflict": "未解決の競合",
|
||||
"moreLoadedPaths": "ほかに読み込まれたパスが{{value0}}件",
|
||||
"changeCount_one": "未コミットまたは未追跡の変更: 1 件",
|
||||
"changeCount_one": "未コミットまたは未追跡の変更: {{count}} 件",
|
||||
"changeCount_other": "未コミットまたは未追跡の変更: {{count}} 件",
|
||||
"changes": "未コミットまたは未追跡の変更があります"
|
||||
},
|
||||
@@ -5062,11 +5062,11 @@
|
||||
"294de4aeb2": "表示数を減らす",
|
||||
"collapseAriaLabel": "{{repo}} の非表示のワークツリー一覧を折りたたむ",
|
||||
"expandAriaLabel": "{{repo}} の非表示のワークツリー一覧を展開",
|
||||
"hiding_one": "1 件のワークツリーを非表示中",
|
||||
"hiding_one": "{{count}} 件のワークツリーを非表示中",
|
||||
"hiding_other": "{{count}} 件のワークツリーを非表示中",
|
||||
"hidingInRepo_one": "{{repo}} の 1 件のワークツリーを非表示中",
|
||||
"hidingInRepo_one": "{{repo}} の {{count}} 件のワークツリーを非表示中",
|
||||
"hidingInRepo_other": "{{repo}} の {{count}} 件のワークツリーを非表示中",
|
||||
"keepHiddenAriaLabel_one": "{{repo}} で検出されたワークツリー 1 件を非表示のままにする(プロジェクトメニューから再表示できます)",
|
||||
"keepHiddenAriaLabel_one": "{{repo}} で検出されたワークツリー {{count}} 件を非表示のままにする(プロジェクトメニューから再表示できます)",
|
||||
"keepHiddenAriaLabel_other": "{{repo}} で検出されたワークツリー {{count}} 件を非表示のままにする(プロジェクトメニューから再表示できます)",
|
||||
"keepHiddenTooltip": "非表示のままにする(プロジェクトメニューから再表示できます)",
|
||||
"repoOnHost": "{{repo}}({{host}})"
|
||||
@@ -5161,7 +5161,7 @@
|
||||
"d9f2db2738": "プロジェクトの設定",
|
||||
"a5bb8c5135": "これに保存されました",
|
||||
"savedSetupCommand": "セットアップコマンドを保存しました。",
|
||||
"savedWithSkippedFields_one": "未対応の項目を 1 件スキップしました。セットアップコマンドを保存しました。",
|
||||
"savedWithSkippedFields_one": "未対応の項目を {{count}} 件スキップしました。セットアップコマンドを保存しました。",
|
||||
"savedWithSkippedFields_other": "未対応の項目を {{count}} 件スキップしました。セットアップコマンドを保存しました。"
|
||||
},
|
||||
"SetupScriptPromptCardViews": {
|
||||
@@ -6261,11 +6261,11 @@
|
||||
"markUnread": "未読にする"
|
||||
},
|
||||
"workspaceBatchActionLabels": {
|
||||
"deleteCount_one": "1 件のワークスペースを削除",
|
||||
"deleteCount_one": "{{count}} 件のワークスペースを削除",
|
||||
"deleteCount_other": "{{count}} 件のワークスペースを削除",
|
||||
"deleteSelected": "選択した項目を削除",
|
||||
"sleep": "スリープ",
|
||||
"sleepCount_one": "1 件のワークスペースをスリープ",
|
||||
"sleepCount_one": "{{count}} 件のワークスペースをスリープ",
|
||||
"sleepCount_other": "{{count}} 件のワークスペースをスリープ"
|
||||
},
|
||||
"addRepoBusyLabels": {
|
||||
@@ -7111,7 +7111,7 @@
|
||||
"choose_file": "ファイルを選択",
|
||||
"choose_folder": "フォルダーを選択",
|
||||
"loading": "Warp テーマを読み込み中…",
|
||||
"found_theme_one": "1 件のテーマが見つかりました",
|
||||
"found_theme_one": "{{value0}} 件のテーマが見つかりました",
|
||||
"found_theme_other": "{{value0}} 件のテーマが見つかりました",
|
||||
"found_in_source": "({{value0}})",
|
||||
"clear_all": "すべてクリア",
|
||||
@@ -7124,16 +7124,16 @@
|
||||
"skipped_files": "スキップされたファイル",
|
||||
"more_skipped_files": "他 {{value0}} 件のファイルがスキップされました。",
|
||||
"cancel": "キャンセル",
|
||||
"import_theme_one": "1 件のテーマをインポート",
|
||||
"import_theme_one": "{{value0}} 件のテーマをインポート",
|
||||
"import_theme_other": "{{value0}} 件のテーマをインポート",
|
||||
"import_themes": "テーマをインポート"
|
||||
},
|
||||
"useWarpThemeImport": {
|
||||
"unknown_error": "不明なエラー",
|
||||
"imported_one": "1 件のテーマをインポートしました",
|
||||
"imported_one": "{{value0}} 件のテーマをインポートしました",
|
||||
"imported_other": "{{value0}} 件のテーマをインポートしました",
|
||||
"import_failed": "テーマのインポートに失敗しました",
|
||||
"over_limit_one": "これらのテーマをインポートすると、カスタムターミナルテーマの上限({{value0}} 件)を超えます。新規テーマを 1 件選択解除して、もう一度お試しください。",
|
||||
"over_limit_one": "これらのテーマをインポートすると、カスタムターミナルテーマの上限({{value0}} 件)を超えます。新規テーマを {{value1}} 件選択解除して、もう一度お試しください。",
|
||||
"over_limit_other": "これらのテーマをインポートすると、カスタムターミナルテーマの上限({{value0}} 件)を超えます。新規テーマを {{value1}} 件選択解除して、もう一度お試しください。"
|
||||
},
|
||||
"YamlThemeImportButton": {
|
||||
@@ -10468,7 +10468,7 @@
|
||||
}
|
||||
},
|
||||
"computerUseSummary": {
|
||||
"permissionsRequired_one": "Agent がアプリのウィンドウを操作するには、1 件の権限が必要です。",
|
||||
"permissionsRequired_one": "Agent がアプリのウィンドウを操作するには、{{value0}} 件の権限が必要です。",
|
||||
"permissionsRequired_other": "Agent がアプリのウィンドウを操作するには、{{value0}} 件の権限が必要です。",
|
||||
"checkingTitle": "コンピュータ操作へのアクセスを確認しています。",
|
||||
"checkingDescription": "Orca が、コンピュータ操作ヘルパーの macOS プライバシー権限を確認しています。",
|
||||
|
||||
@@ -5033,7 +5033,7 @@
|
||||
"loadedChangedPaths": "불러온 변경된 경로",
|
||||
"unresolvedConflict": "해결되지 않은 충돌",
|
||||
"moreLoadedPaths": "불러온 경로 {{value0}}개 더",
|
||||
"changeCount_one": "커밋되지 않았거나 추적되지 않는 변경 1개",
|
||||
"changeCount_one": "커밋되지 않았거나 추적되지 않는 변경 {{count}}개",
|
||||
"changeCount_other": "커밋되지 않았거나 추적되지 않는 변경 {{count}}개",
|
||||
"changes": "커밋되지 않았거나 추적되지 않는 변경 사항"
|
||||
},
|
||||
@@ -5062,11 +5062,11 @@
|
||||
"294de4aeb2": "간략히 표시",
|
||||
"collapseAriaLabel": "{{repo}}의 숨겨진 워크트리 접기",
|
||||
"expandAriaLabel": "{{repo}}의 숨겨진 워크트리 펼치기",
|
||||
"hiding_one": "발견된 워크트리 1개 숨김",
|
||||
"hiding_one": "발견된 워크트리 {{count}}개 숨김",
|
||||
"hiding_other": "발견된 워크트리 {{count}}개 숨김",
|
||||
"hidingInRepo_one": "{{repo}}에서 발견된 워크트리 1개 숨김",
|
||||
"hidingInRepo_one": "{{repo}}에서 발견된 워크트리 {{count}}개 숨김",
|
||||
"hidingInRepo_other": "{{repo}}에서 발견된 워크트리 {{count}}개 숨김",
|
||||
"keepHiddenAriaLabel_one": "{{repo}}에서 발견된 워크트리 1개를 숨김 상태로 유지합니다. 프로젝트 메뉴에서 복구할 수 있습니다",
|
||||
"keepHiddenAriaLabel_one": "{{repo}}에서 발견된 워크트리 {{count}}개를 숨김 상태로 유지합니다. 프로젝트 메뉴에서 복구할 수 있습니다",
|
||||
"keepHiddenAriaLabel_other": "{{repo}}에서 발견된 워크트리 {{count}}개를 숨김 상태로 유지합니다. 프로젝트 메뉴에서 복구할 수 있습니다",
|
||||
"keepHiddenTooltip": "숨김 유지 - 프로젝트 메뉴에서 복구",
|
||||
"repoOnHost": "{{host}}의 {{repo}}"
|
||||
@@ -5161,7 +5161,7 @@
|
||||
"d9f2db2738": "프로젝트 설정",
|
||||
"a5bb8c5135": "여기에 저장됨",
|
||||
"savedSetupCommand": "설정 명령을 저장했습니다.",
|
||||
"savedWithSkippedFields_one": "지원되지 않는 필드 1개를 건너뛰었습니다. 설정 명령을 저장했습니다.",
|
||||
"savedWithSkippedFields_one": "지원되지 않는 필드 {{count}}개를 건너뛰었습니다. 설정 명령을 저장했습니다.",
|
||||
"savedWithSkippedFields_other": "지원되지 않는 필드 {{count}}개를 건너뛰었습니다. 설정 명령을 저장했습니다."
|
||||
},
|
||||
"SetupScriptPromptCardViews": {
|
||||
@@ -6261,11 +6261,11 @@
|
||||
"markUnread": "읽지 않음으로 표시"
|
||||
},
|
||||
"workspaceBatchActionLabels": {
|
||||
"deleteCount_one": "워크스페이스 1개 삭제",
|
||||
"deleteCount_one": "워크스페이스 {{count}}개 삭제",
|
||||
"deleteCount_other": "워크스페이스 {{count}}개 삭제",
|
||||
"deleteSelected": "선택 항목 삭제",
|
||||
"sleep": "슬립",
|
||||
"sleepCount_one": "워크스페이스 1개 슬립",
|
||||
"sleepCount_one": "워크스페이스 {{count}}개 슬립",
|
||||
"sleepCount_other": "워크스페이스 {{count}}개 슬립"
|
||||
},
|
||||
"addRepoBusyLabels": {
|
||||
@@ -10328,7 +10328,7 @@
|
||||
"choose_file": "파일 선택",
|
||||
"choose_folder": "폴더 선택",
|
||||
"loading": "Warp 테마 로드 중...",
|
||||
"found_theme_one": "테마 1개를 찾았습니다.",
|
||||
"found_theme_one": "테마 {{value0}}개를 찾았습니다.",
|
||||
"found_theme_other": "테마 {{value0}}개를 찾았습니다.",
|
||||
"found_in_source": "{{value0}}에서",
|
||||
"clear_all": "모두 지우기",
|
||||
@@ -10341,16 +10341,16 @@
|
||||
"skipped_files": "건너뛴 파일",
|
||||
"more_skipped_files": "건너뛴 파일 {{value0}}개 더 있음",
|
||||
"cancel": "취소",
|
||||
"import_theme_one": "테마 1개 가져오기",
|
||||
"import_theme_one": "테마 {{value0}}개 가져오기",
|
||||
"import_theme_other": "테마 {{value0}}개 가져오기",
|
||||
"import_themes": "테마 가져오기"
|
||||
},
|
||||
"useWarpThemeImport": {
|
||||
"unknown_error": "알 수 없는 오류",
|
||||
"imported_one": "테마 1개를 가져왔습니다.",
|
||||
"imported_one": "테마 {{value0}}개를 가져왔습니다.",
|
||||
"imported_other": "테마 {{value0}}개를 가져왔습니다.",
|
||||
"import_failed": "테마를 가져오지 못했습니다.",
|
||||
"over_limit_one": "이 테마를 가져오면 사용자 지정 터미널 테마 {{value0}}개 제한을 초과합니다. 새 테마 1개를 선택 해제하고 다시 시도하세요.",
|
||||
"over_limit_one": "이 테마를 가져오면 사용자 지정 터미널 테마 {{value0}}개 제한을 초과합니다. 새 테마 {{value1}}개를 선택 해제하고 다시 시도하세요.",
|
||||
"over_limit_other": "이 테마들을 가져오면 사용자 지정 터미널 테마 {{value0}}개 제한을 초과합니다. 새 테마 {{value1}}개를 선택 해제하고 다시 시도하세요."
|
||||
},
|
||||
"YamlThemeImportButton": {
|
||||
@@ -10468,7 +10468,7 @@
|
||||
}
|
||||
},
|
||||
"computerUseSummary": {
|
||||
"permissionsRequired_one": "agents가 앱 창을 조작하려면 먼저 1 권한이 필요합니다.",
|
||||
"permissionsRequired_one": "agents가 앱 창을 조작하려면 먼저 {{value0}} 권한이 필요합니다.",
|
||||
"permissionsRequired_other": "agents가 앱 창을 조작하려면 먼저 {{value0}} 권한이 필요합니다.",
|
||||
"checkingTitle": "Computer Use 액세스 확인 중입니다.",
|
||||
"checkingDescription": "Orca가 Computer Use 도우미의 macOS 개인정보 보호 권한을 확인하고 있습니다.",
|
||||
|
||||
@@ -6007,7 +6007,7 @@
|
||||
"choose_file": "Escolher Arquivo",
|
||||
"choose_folder": "Escolher Pasta",
|
||||
"loading": "Carregando temas do Warp...",
|
||||
"found_theme_one": "1 tema encontrado",
|
||||
"found_theme_one": "{{value0}} tema encontrado",
|
||||
"found_theme_other": "{{value0}} temas encontrados",
|
||||
"found_in_source": " em {{value0}}",
|
||||
"clear_all": "Limpar tudo",
|
||||
@@ -6020,7 +6020,7 @@
|
||||
"skipped_files": "Arquivos ignorados",
|
||||
"more_skipped_files": "mais {{value0}} arquivos ignorados.",
|
||||
"cancel": "Cancelar",
|
||||
"import_theme_one": "Importar 1 Tema",
|
||||
"import_theme_one": "Importar {{value0}} Tema",
|
||||
"import_theme_other": "Importar {{value0}} Temas",
|
||||
"import_themes": "Importar Temas"
|
||||
},
|
||||
@@ -7442,7 +7442,7 @@
|
||||
"readyTitle": "O Uso do Computador está pronto.",
|
||||
"readyDescription": "Os agentes podem inspecionar e operar janelas de apps quando você solicitar.",
|
||||
"permissionsTitle": "Conclua a configuração para usar apps locais.",
|
||||
"permissionsRequired_one": "1 permissão é necessária antes que os agentes possam operar janelas de apps.",
|
||||
"permissionsRequired_one": "{{value0}} permissão é necessária antes que os agentes possam operar janelas de apps.",
|
||||
"permissionsRequired_other": "{{value0}} permissões são necessárias antes que os agentes possam operar janelas de apps."
|
||||
},
|
||||
"LinearAgentSkillPane": {
|
||||
@@ -7652,10 +7652,10 @@
|
||||
},
|
||||
"useWarpThemeImport": {
|
||||
"unknown_error": "Erro desconhecido",
|
||||
"imported_one": "1 tema importado",
|
||||
"imported_one": "{{value0}} tema importado",
|
||||
"imported_other": "{{value0}} temas importados",
|
||||
"import_failed": "Falha ao importar temas",
|
||||
"over_limit_one": "Importar estes temas excederia o limite de {{value0}} temas de terminal personalizados. Desmarque 1 tema novo e tente novamente.",
|
||||
"over_limit_one": "Importar estes temas excederia o limite de {{value0}} temas de terminal personalizados. Desmarque {{value1}} tema novo e tente novamente.",
|
||||
"over_limit_other": "Importar estes temas excederia o limite de {{value0}} temas de terminal personalizados. Desmarque {{value1}} temas novos e tente novamente."
|
||||
},
|
||||
"ManageSessionKillDialog": {
|
||||
@@ -10879,11 +10879,11 @@
|
||||
"294de4aeb2": "Mostrar menos",
|
||||
"collapseAriaLabel": "Recolher worktrees ocultas de {{repo}}",
|
||||
"expandAriaLabel": "Expandir worktrees ocultas de {{repo}}",
|
||||
"hiding_one": "Ocultando 1 worktree descoberta",
|
||||
"hiding_one": "Ocultando {{count}} worktree descoberta",
|
||||
"hiding_other": "Ocultando {{count}} worktrees descobertas",
|
||||
"hidingInRepo_one": "Ocultando 1 worktree descoberta em {{repo}}",
|
||||
"hidingInRepo_one": "Ocultando {{count}} worktree descoberta em {{repo}}",
|
||||
"hidingInRepo_other": "Ocultando {{count}} worktrees descobertas em {{repo}}",
|
||||
"keepHiddenAriaLabel_one": "Manter 1 worktree descoberta oculta para {{repo}}; recupere-a pelo menu do projeto",
|
||||
"keepHiddenAriaLabel_one": "Manter {{count}} worktree descoberta oculta para {{repo}}; recupere-a pelo menu do projeto",
|
||||
"keepHiddenAriaLabel_other": "Manter {{count}} worktrees descobertas ocultas para {{repo}}; recupere-as pelo menu do projeto",
|
||||
"keepHiddenTooltip": "Manter oculto - recupere pelo menu do projeto",
|
||||
"repoOnHost": "{{repo}} em {{host}}"
|
||||
@@ -10999,7 +10999,7 @@
|
||||
"d9f2db2738": "configurações do projeto",
|
||||
"a5bb8c5135": "Salvo nestas",
|
||||
"savedSetupCommand": "O comando de configuração foi salvo.",
|
||||
"savedWithSkippedFields_one": "1 campo não compatível foi ignorado. O comando de configuração foi salvo.",
|
||||
"savedWithSkippedFields_one": "{{count}} campo não compatível foi ignorado. O comando de configuração foi salvo.",
|
||||
"savedWithSkippedFields_other": "{{count}} campos não compatíveis foram ignorados. O comando de configuração foi salvo."
|
||||
},
|
||||
"FolderWorkspaceComposerDialog": {
|
||||
@@ -11276,7 +11276,7 @@
|
||||
"loadedChangedPaths": "Caminhos alterados carregados",
|
||||
"unresolvedConflict": "Conflito não resolvido",
|
||||
"moreLoadedPaths": "e mais {{value0}} caminhos carregados",
|
||||
"changeCount_one": "1 alteração não commitada ou não rastreada",
|
||||
"changeCount_one": "{{count}} alteração não commitada ou não rastreada",
|
||||
"changeCount_other": "{{count}} alterações não commitadas ou não rastreadas",
|
||||
"changes": "Alterações não commitadas ou não rastreadas"
|
||||
},
|
||||
@@ -11393,11 +11393,11 @@
|
||||
"markUnread": "Marcar como não lido"
|
||||
},
|
||||
"workspaceBatchActionLabels": {
|
||||
"deleteCount_one": "Excluir 1 Espaço de Trabalho",
|
||||
"deleteCount_one": "Excluir {{count}} Espaço de Trabalho",
|
||||
"deleteCount_other": "Excluir {{count}} Espaços de Trabalho",
|
||||
"deleteSelected": "Excluir Selecionados",
|
||||
"sleep": "Suspender",
|
||||
"sleepCount_one": "Suspender 1 Espaço de Trabalho",
|
||||
"sleepCount_one": "Suspender {{count}} Espaço de Trabalho",
|
||||
"sleepCount_other": "Suspender {{count}} Espaços de Trabalho"
|
||||
},
|
||||
"addRepoBusyLabels": {
|
||||
|
||||
@@ -5033,7 +5033,7 @@
|
||||
"loadedChangedPaths": "已加载的更改路径",
|
||||
"unresolvedConflict": "未解决的冲突",
|
||||
"moreLoadedPaths": "以及另外 {{value0}} 个已加载的路径",
|
||||
"changeCount_one": "1 处未提交或未跟踪的更改",
|
||||
"changeCount_one": "{{count}} 处未提交或未跟踪的更改",
|
||||
"changeCount_other": "{{count}} 处未提交或未跟踪的更改",
|
||||
"changes": "未提交或未跟踪的更改"
|
||||
},
|
||||
@@ -5062,11 +5062,11 @@
|
||||
"294de4aeb2": "显示较少",
|
||||
"collapseAriaLabel": "折叠 {{repo}} 的隐藏工作树",
|
||||
"expandAriaLabel": "展开 {{repo}} 的隐藏工作树",
|
||||
"hiding_one": "已隐藏 1 个检测到的工作树",
|
||||
"hiding_one": "已隐藏 {{count}} 个检测到的工作树",
|
||||
"hiding_other": "已隐藏 {{count}} 个检测到的工作树",
|
||||
"hidingInRepo_one": "已隐藏 {{repo}} 中的 1 个检测到的工作树",
|
||||
"hidingInRepo_one": "已隐藏 {{repo}} 中的 {{count}} 个检测到的工作树",
|
||||
"hidingInRepo_other": "已隐藏 {{repo}} 中的 {{count}} 个检测到的工作树",
|
||||
"keepHiddenAriaLabel_one": "为 {{repo}} 保留 1 个检测到的工作树为隐藏状态;可从项目菜单恢复",
|
||||
"keepHiddenAriaLabel_one": "为 {{repo}} 保留 {{count}} 个检测到的工作树为隐藏状态;可从项目菜单恢复",
|
||||
"keepHiddenAriaLabel_other": "为 {{repo}} 保留 {{count}} 个检测到的工作树为隐藏状态;可从项目菜单恢复",
|
||||
"keepHiddenTooltip": "保持隐藏 - 从项目菜单恢复",
|
||||
"repoOnHost": "{{host}} 上的 {{repo}}"
|
||||
@@ -5161,7 +5161,7 @@
|
||||
"d9f2db2738": "项目的设置",
|
||||
"a5bb8c5135": "保存在这个",
|
||||
"savedSetupCommand": "已保存设置命令。",
|
||||
"savedWithSkippedFields_one": "已跳过 1 个不受支持的字段。设置命令已保存。",
|
||||
"savedWithSkippedFields_one": "已跳过 {{count}} 个不受支持的字段。设置命令已保存。",
|
||||
"savedWithSkippedFields_other": "已跳过 {{count}} 个不受支持的字段。设置命令已保存。"
|
||||
},
|
||||
"SetupScriptPromptCardViews": {
|
||||
@@ -6261,11 +6261,11 @@
|
||||
"markUnread": "标为未读"
|
||||
},
|
||||
"workspaceBatchActionLabels": {
|
||||
"deleteCount_one": "删除 1 个工作区",
|
||||
"deleteCount_one": "删除 {{count}} 个工作区",
|
||||
"deleteCount_other": "删除 {{count}} 个工作区",
|
||||
"deleteSelected": "删除所选",
|
||||
"sleep": "休眠",
|
||||
"sleepCount_one": "休眠 1 个工作区",
|
||||
"sleepCount_one": "休眠 {{count}} 个工作区",
|
||||
"sleepCount_other": "休眠 {{count}} 个工作区"
|
||||
},
|
||||
"addRepoBusyLabels": {
|
||||
@@ -10328,7 +10328,7 @@
|
||||
"choose_file": "选择文件",
|
||||
"choose_folder": "选择文件夹",
|
||||
"loading": "正在加载 Warp 主题...",
|
||||
"found_theme_one": "找到 1 个主题",
|
||||
"found_theme_one": "找到 {{value0}} 个主题",
|
||||
"found_theme_other": "找到 {{value0}} 个主题",
|
||||
"found_in_source": " 位于 {{value0}}",
|
||||
"clear_all": "全部清除",
|
||||
@@ -10341,16 +10341,16 @@
|
||||
"skipped_files": "已跳过文件",
|
||||
"more_skipped_files": "还有 {{value0}} 个已跳过的文件。",
|
||||
"cancel": "取消",
|
||||
"import_theme_one": "导入 1 个主题",
|
||||
"import_theme_one": "导入 {{value0}} 个主题",
|
||||
"import_theme_other": "导入 {{value0}} 个主题",
|
||||
"import_themes": "导入主题"
|
||||
},
|
||||
"useWarpThemeImport": {
|
||||
"unknown_error": "未知错误",
|
||||
"imported_one": "已导入 1 个主题",
|
||||
"imported_one": "已导入 {{value0}} 个主题",
|
||||
"imported_other": "已导入 {{value0}} 个主题",
|
||||
"import_failed": "导入主题失败",
|
||||
"over_limit_one": "导入这些主题会超出 {{value0}} 个自定义终端主题的上限。请取消选择 1 个新主题后重试。",
|
||||
"over_limit_one": "导入这些主题会超出 {{value0}} 个自定义终端主题的上限。请取消选择 {{value1}} 个新主题后重试。",
|
||||
"over_limit_other": "导入这些主题会超出 {{value0}} 个自定义终端主题的上限。请取消选择 {{value1}} 个新主题后重试。"
|
||||
},
|
||||
"YamlThemeImportButton": {
|
||||
@@ -10468,7 +10468,7 @@
|
||||
}
|
||||
},
|
||||
"computerUseSummary": {
|
||||
"permissionsRequired_one": "在智能体可操作应用窗口前需要 1 项权限。",
|
||||
"permissionsRequired_one": "在智能体可操作应用窗口前需要 {{value0}} 项权限。",
|
||||
"permissionsRequired_other": "在智能体可操作应用窗口前需要 {{value0}} 项权限。",
|
||||
"checkingTitle": "正在检查计算机控制访问权限。",
|
||||
"checkingDescription": "Orca 正在检查计算机控制助手的 macOS 隐私权限。",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { afterEach, describe, expect, it } from 'vitest'
|
||||
import { i18n, setRendererPluginLanguagePacks } from './i18n'
|
||||
import { i18n, setRendererPluginLanguagePacks, translate } from './i18n'
|
||||
import { pluginLanguageResourceId } from '../../../shared/plugins/plugin-language-pack-artifact'
|
||||
import { DEFAULT_LOCALE } from './supported-languages'
|
||||
|
||||
@@ -42,4 +42,13 @@ describe('plugin pack plurals', () => {
|
||||
await activatePack('ru-RU', { files_one: 'one', files_other: 'other' })
|
||||
expect(forms([1, 2, 5, 21])).toEqual(['one', 'other', 'other', 'one'])
|
||||
})
|
||||
|
||||
it('resolves literal _one/_other call sites through the pack locale plural rules', async () => {
|
||||
const label = (count: number): string =>
|
||||
count === 1
|
||||
? translate('files_one', '{{count}} file', { count })
|
||||
: translate('files_other', '{{count}} files', { count })
|
||||
await activatePack('ru-RU')
|
||||
expect([1, 2, 5, 21].map(label)).toEqual(['one', 'few', 'many', 'one'])
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user