orca/config/scripts/locale-translation-policy.t...

606 lines
19 KiB
JavaScript

import { describe, expect, it } from 'vitest'
import { repairTranslatedValue, shouldPreserveEnglishValue } from './locale-translation-policy.mjs'
describe('locale-translation-policy', () => {
it('keeps agent catalog labels in English', () => {
expect(
repairTranslatedValue({
key: 'auto.lib.agent.catalog.760bc6883d',
enValue: 'Codex',
localeValue: '사본',
locale: 'ko'
})
).toBe('Codex')
})
it('does not break Copy identifier when fixing Codex', () => {
expect(
repairTranslatedValue({
key: 'auto.components.example',
enValue: 'Copy identifier',
localeValue: '사본 식별자',
locale: 'ko'
})
).toBe('사본 식별자')
})
it('fixes Dismiss homograph in Korean', () => {
expect(
repairTranslatedValue({
key: 'auto.store.slices.worktrees.889487d8bb',
enValue: 'Dismiss',
localeValue: '해고하다',
locale: 'ko'
})
).toBe('닫기')
})
it('fixes Gemini zodiac mistranslation in Chinese catalog', () => {
expect(
repairTranslatedValue({
key: 'auto.lib.agent.catalog.12e6baa4f7',
enValue: 'Gemini',
localeValue: '双子座',
locale: 'zh'
})
).toBe('Gemini')
})
it('preserves orca URL scheme in Chinese', () => {
expect(
repairTranslatedValue({
key: 'auto.web.WebConnect.27393856e4',
enValue: 'orca://pair?code=...',
localeValue: '虎鲸://pair?code=...',
locale: 'zh'
})
).toBe('orca://pair?code=...')
})
it('skips machine translation for standalone brands', () => {
expect(shouldPreserveEnglishValue('Codex')).toBe(true)
expect(shouldPreserveEnglishValue('Codex', 'auto.stats.StatsPane.7d26110cea')).toBe(true)
expect(shouldPreserveEnglishValue('Show Codex usage')).toBe(false)
})
it('fixes high-visibility homograph mistranslations', () => {
expect(
repairTranslatedValue({
key: 'auto.components.settings.AgentsPane.c9b33eb5c0',
enValue: 'Refreshing…',
localeValue: '爽やか…',
locale: 'ja'
})
).toBe('更新中…')
expect(
repairTranslatedValue({
key: 'auto.components.sidebar.workspace.status.28986b3747',
enValue: 'Started an AI agent for the broken checks.',
localeValue: '壊れた小切手に対して AI エージェントを開始しました。',
locale: 'ja'
})
).toBe('失敗したチェックに対して AI agent を開始しました。')
expect(
repairTranslatedValue({
key: 'auto.hooks.useSettingsNavigationMetadata.95a1886d94',
enValue: 'Control terminals and agents from your phone.',
localeValue: '電話機からターミナルとエージェントを制御します。',
locale: 'ja'
})
).toBe('スマートフォンから terminals と agents を操作')
expect(
repairTranslatedValue({
key: 'auto.components.GitHubItemDialog.934add88b6',
enValue: 'Reviewer',
localeValue: '査読者',
locale: 'ja'
})
).toBe('レビュアー')
expect(
repairTranslatedValue({
key: 'auto.components.settings.AgentsPane.92033495ff',
enValue: 'Auto',
localeValue: '汽车',
locale: 'zh'
})
).toBe('自动')
expect(
repairTranslatedValue({
key: 'menu.reportCrash',
enValue: 'Report Crash...',
localeValue: '충돌 신고...',
locale: 'ko'
})
).toBe('크래시 신고...')
expect(
repairTranslatedValue({
key: 'auto.App.722d03aa62',
enValue: 'The crash report dialog hit an error.',
localeValue: '충돌 보고서 대화 상자에 오류가 발생했습니다.',
locale: 'ko'
})
).toBe('크래시 보고서 대화 상자에 오류가 발생했습니다.')
expect(
repairTranslatedValue({
key: 'auto.components.dashboard.DashboardAgentRow.912e136cd9',
enValue: 'Send',
localeValue: '보내다',
locale: 'ko'
})
).toBe('보내기')
expect(
repairTranslatedValue({
key: 'auto.components.settings.orchestration.search.ca54c69806',
enValue: 'DAG',
localeValue: '가리비',
locale: 'ko'
})
).toBe('DAG')
expect(
repairTranslatedValue({
key: 'auto.components.settings.CliSection.068552b191',
enValue: 'Removing…',
localeValue: '풀이…',
locale: 'ko'
})
).toBe('제거 중…')
expect(
repairTranslatedValue({
key: 'auto.components.status.bar.SshStatusSegment.63a2b965f6',
enValue: 'pulling',
localeValue: '풀 중',
locale: 'ko'
})
).toBe('가져오는 중')
expect(
repairTranslatedValue({
key: 'auto.components.TaskPage.be8cf68d9f',
enValue: 'view issues',
localeValue: '문제 보기',
locale: 'ko'
})
).toBe('이슈 보기')
expect(
repairTranslatedValue({
key: 'auto.components.GitHubItemDialog.8c45901789',
enValue: 'Request reviewer {{value0}}',
localeValue: '요청 검토자 {{value0}}',
locale: 'ko'
})
).toBe('리뷰어 요청 {{value0}}')
expect(
repairTranslatedValue({
key: 'auto.components.feature.wall.ReviewPRViewAnimatedVisual.25f6838e43',
enValue: 'lint',
localeValue: '보풀',
locale: 'ko'
})
).toBe('lint')
expect(
repairTranslatedValue({
key: 'auto.components.GitLabItemDialog.4168eb2c51',
enValue: 'Resolve',
localeValue: '해결하다',
locale: 'ko'
})
).toBe('해결')
expect(
repairTranslatedValue({
key: 'auto.components.GitHubItemDialog.934add88b6',
enValue: 'Reviewer',
localeValue: '검토자',
locale: 'ko'
})
).toBe('리뷰어')
expect(
repairTranslatedValue({
key: 'auto.components.skills.SkillsPage.f43ad6edf3',
enValue: 'Skills',
localeValue: '기술',
locale: 'ko'
})
).toBe('스킬')
expect(
repairTranslatedValue({
key: 'auto.components.settings.integrations.search.581844769a',
enValue: 'mr',
localeValue: '~ 씨',
locale: 'ko'
})
).toBe('MR')
expect(
repairTranslatedValue({
key: 'auto.components.settings.integrations.search.e1263dd748',
enValue: 'jira',
localeValue: '지라',
locale: 'ko'
})
).toBe('Jira')
expect(
repairTranslatedValue({
key: 'auto.components.settings.integrations.search.aab86d64e5',
enValue: 'Gitea Integration',
localeValue: '지테아 통합',
locale: 'ko'
})
).toBe('Gitea 연동')
expect(
repairTranslatedValue({
key: 'auto.hooks.useSettingsNavigationMetadata.2b043783ef',
enValue: 'Integrations',
localeValue: '통합',
locale: 'ko'
})
).toBe('연동')
expect(
repairTranslatedValue({
key: 'auto.components.GitHubItemDialog.e52bed9264',
enValue: 'No checks reported yet',
localeValue: '아직 보고된 검사가 없습니다.',
locale: 'ko'
})
).toBe('아직 보고된 체크가 없습니다.')
expect(
repairTranslatedValue({
key: 'auto.components.right.sidebar.source.control.primary.action.7aad2c0240',
enValue: 'Hosted review operation in progress…',
localeValue: '호스팅 검토 작업 진행 중…',
locale: 'ko'
})
).toBe('호스팅 PR 작업 진행 중…')
expect(
repairTranslatedValue({
key: 'auto.components.settings.integrations.search.933deaf732',
enValue: 'oauth',
localeValue: '맹세하다',
locale: 'ko'
})
).toBe('OAuth')
})
it('fixes Chinese detected-state and skill terminology regressions', () => {
expect(
repairTranslatedValue({
key: 'auto.components.sidebar.SidebarNav.e518f544b1',
enValue: 'No agents detected',
localeValue: '未已检测代理',
locale: 'zh'
})
).toBe('未检测到 agents')
expect(
repairTranslatedValue({
key: 'auto.components.skills.SkillsPage.38e0951c3a',
enValue: 'Agent Skills',
localeValue: '代理技巧',
locale: 'zh'
})
).toBe('Agent 技能')
expect(
repairTranslatedValue({
key: 'auto.components.settings.appearance.search.9ae151b26b',
enValue: 'linear',
localeValue: '线性',
locale: 'zh'
})
).toBe('Linear')
expect(
repairTranslatedValue({
key: 'auto.components.JiraIssueWorkspace.ef21405c6d',
enValue: 'Jira issue',
localeValue: '吉拉问题',
locale: 'zh'
})
).toBe('Jira 议题')
expect(
repairTranslatedValue({
key: 'auto.components.GitHubItemDialog.dbe5e2448e',
enValue: 'Pull request merged',
localeValue: '合并请求请求',
locale: 'zh'
})
).toBe('拉取请求已合并')
expect(
repairTranslatedValue({
key: 'auto.components.GitHubItemDialog.3ab6ac0fc8',
enValue: 'Preview and edit the selected GitHub issue or pull request.',
localeValue: '预览并编辑选定的 GitHub 问题或拉取请求。',
locale: 'zh'
})
).toBe('预览并编辑选定的 GitHub 议题或拉取请求。')
expect(
repairTranslatedValue({
key: 'auto.components.LinearIssueWorkspace.0190b760c1',
enValue: 'Open on Linear',
localeValue: 'Linear打开',
locale: 'zh'
})
).toBe('在 Linear 中打开')
expect(
repairTranslatedValue({
key: 'auto.components.TaskPage.d0e3c8f933',
enValue: 'No matching GitHub work',
localeValue: '没有匹配的 GitHub 作品',
locale: 'zh'
})
).toBe('没有匹配的 GitHub 工作项')
expect(
repairTranslatedValue({
key: 'auto.hooks.useSettingsNavigationMetadata.4a728cd56b',
enValue: 'New features that are still taking shape. Give them a try.',
localeValue: '仍在形成的新特征。尝试一下。',
locale: 'zh'
})
).toBe('仍在形成的新功能。尝试一下。')
})
it('fixes Japanese integration, merge, and search keyword regressions', () => {
expect(
repairTranslatedValue({
key: 'auto.components.settings.integrations.search.f16e41cc72',
enValue: 'GitHub Integration',
localeValue: 'GitHubの統合',
locale: 'ja'
})
).toBe('GitHub 連携')
expect(
repairTranslatedValue({
key: 'auto.components.GitLabItemDialog.e089f62594',
enValue: 'Merged MR !{{value0}}',
localeValue: 'MR を統合しました !{{value0}}',
locale: 'ja'
})
).toBe('MR をマージしました !{{value0}}')
expect(
repairTranslatedValue({
key: 'auto.components.right.sidebar.source.control.primary.action.3d5dccef0b',
enValue: 'Nothing to commit. PR is already merged.',
localeValue: 'コミットするものは何もありません。 PR はすでに統合されています。',
locale: 'ja'
})
).toBe('commit するものはありません。PR はすでにマージされています。')
expect(
repairTranslatedValue({
key: 'auto.components.settings.integrations.search.581844769a',
enValue: 'mr',
localeValue: '氏',
locale: 'ja'
})
).toBe('MR')
expect(
repairTranslatedValue({
key: 'auto.components.settings.integrations.search.e1263dd748',
enValue: 'jira',
localeValue: 'ジラ',
locale: 'ja'
})
).toBe('Jira')
expect(
repairTranslatedValue({
key: 'auto.components.settings.terminal.advanced.search.b7c2cee442',
enValue: 'experimental',
localeValue: '実験的機能な',
locale: 'ja'
})
).toBe('実験的機能')
expect(
repairTranslatedValue({
key: 'auto.components.TaskPage.ef21405c6d',
enValue: 'Jira issue',
localeValue: 'Jira の問題',
locale: 'ja'
})
).toBe('Jira Issue')
expect(
repairTranslatedValue({
key: 'auto.components.mobile.MobileHero.668016be7a',
enValue: 'on your computer and phone.',
localeValue: 'コンピューターと携帯電話で。',
locale: 'ja'
})
).toBe('コンピューターとスマートフォンで。')
expect(
repairTranslatedValue({
key: 'auto.components.GitHubItemDialog.3ab6ac0fc8',
enValue: 'Preview and edit the selected GitHub issue or pull request.',
localeValue: '選択した GitHub の課題またはプル リクエストをプレビューおよび編集します。',
locale: 'ja'
})
).toBe('選択した GitHub Issue または PR をプレビュー・編集します。')
expect(
repairTranslatedValue({
key: 'auto.components.GitHubItemDialog.a2495e4784',
enValue: 'Pull request',
localeValue: 'プルリクエスト',
locale: 'ja'
})
).toBe('PR')
expect(
repairTranslatedValue({
key: 'auto.components.TaskPage.be8cf68d9f',
enValue: 'view issues',
localeValue: '問題を表示する',
locale: 'ja'
})
).toBe('Issue を表示')
expect(
repairTranslatedValue({
key: 'auto.components.editor.EditorContent.e4b074749d',
enValue: 'Front Matter',
localeValue: '前の問題',
locale: 'ja'
})
).toBe('フロントマター')
expect(
repairTranslatedValue({
key: 'auto.components.settings.IntegrationsPane.c0c8575e05',
enValue: 'Install the GitHub CLI to enable pull requests, issues, and checks.',
localeValue:
'GitHub CLI をインストールして、プル リクエスト、発行、チェックを有効にします。',
locale: 'ja'
})
).toBe('GitHub CLI をインストールして PR、Issue、チェックを有効にします。')
expect(
repairTranslatedValue({
key: 'auto.components.mobile.MobilePage.e17393c6a3',
enValue: 'Phone preview',
localeValue: '電話プレビュー',
locale: 'ja'
})
).toBe('スマートフォンプレビュー')
expect(
repairTranslatedValue({
key: 'auto.components.GitHubItemDialog.8c45901789',
enValue: 'Request reviewer {{value0}}',
localeValue: 'レビュアー {{value0}} をリクエスト',
locale: 'ja'
})
).toBe('レビュアーをリクエスト {{value0}}')
expect(
repairTranslatedValue({
key: 'auto.components.settings.appearance.search.5e5b8878bf',
enValue: 'phone',
localeValue: '電話',
locale: 'ja'
})
).toBe('スマートフォン')
})
it('fixes Chinese round 4 phone, review, PR, and status chip regressions', () => {
expect(
repairTranslatedValue({
key: 'auto.components.settings.appearance.search.5e5b8878bf',
enValue: 'phone',
localeValue: '电话',
locale: 'zh'
})
).toBe('手机')
expect(
repairTranslatedValue({
key: 'auto.components.mobile.slides.TerminalSlide.985373052e',
enValue: 'Switch to phone mode',
localeValue: '切换到电话模式',
locale: 'zh'
})
).toBe('切换到手机模式')
expect(
repairTranslatedValue({
key: 'auto.components.settings.GitPane.b559bf9899',
enValue: 'e.g. feature',
localeValue: '例如特征',
locale: 'zh'
})
).toBe('例如 feature')
expect(
repairTranslatedValue({
key: 'auto.components.settings.terminal.search.d5e6c7fab1',
enValue: 'font features',
localeValue: '字体特征',
locale: 'zh'
})
).toBe('字体特性')
expect(
repairTranslatedValue({
key: 'auto.components.GitHubItemDialog.934add88b6',
enValue: 'Reviewer',
localeValue: '审稿人',
locale: 'zh'
})
).toBe('评审人')
expect(
repairTranslatedValue({
key: 'auto.components.GitHubItemDialog.a341343303',
enValue: 'Review comment added.',
localeValue: '添加了评论评论。',
locale: 'zh'
})
).toBe('已添加评审评论。')
expect(
repairTranslatedValue({
key: 'auto.components.GitHubItemDialog.6e43a16435',
enValue: 'Inline',
localeValue: '排队',
locale: 'zh'
})
).toBe('内联')
expect(
repairTranslatedValue({
key: 'auto.components.github.pr.merge.state.bf5e4c6c92',
enValue: 'Blocked',
localeValue: '被阻止',
locale: 'zh'
})
).toBe('已阻塞')
expect(
repairTranslatedValue({
key: 'auto.components.sidebar.workspace.status.6c1efa2cf8',
enValue: 'In review',
localeValue: '审核中',
locale: 'zh'
})
).toBe('评审中')
expect(
repairTranslatedValue({
key: 'auto.components.sidebar.workspace.status.2c19d1db33',
enValue: 'Play',
localeValue: '玩',
locale: 'zh'
})
).toBe('Play')
expect(
repairTranslatedValue({
key: 'auto.components.right.sidebar.SourceControlAgentActionDialogForm.1bc0bdbb5e',
enValue: 'Launch:',
localeValue: '发射:',
locale: 'zh'
})
).toBe('启动:')
expect(
repairTranslatedValue({
key: 'auto.components.UpdateCard.actionBadge',
enValue: 'Action',
localeValue: '行动',
locale: 'zh'
})
).toBe('操作')
})
it('applies search keyword overrides for settings search synonyms', () => {
expect(
repairTranslatedValue({
key: 'auto.components.settings.appearance.search.262fe1d24f',
enValue: 'dark',
localeValue: '어두운',
locale: 'ko'
})
).toBe('다크')
expect(
repairTranslatedValue({
key: 'auto.components.settings.appearance.search.24094af355',
enValue: 'font',
localeValue: '세례반',
locale: 'ko'
})
).toBe('폰트')
})
it('merges split Korean key overrides without dropping other locale repairs', () => {
expect(
repairTranslatedValue({
key: 'auto.components.GitHubItemDialog.8c45901789',
enValue: 'Request reviewer {{value0}}',
localeValue: '请求审阅者 {{value0}}',
locale: 'zh'
})
).toBe('请求评审人 {{value0}}')
expect(
repairTranslatedValue({
key: 'auto.components.right.sidebar.PortsPanel.c9d106547a',
enValue: 'Forward',
localeValue: '進む',
locale: 'ja'
})
).toBe('転送')
})
})