Skip to content

Commit e261be9

Browse files
committed
fix(l10n): make locale parity honest and self-maintaining
The parity gate was blinded by its own English fallback: a key present in en.json but missing from a 'complete' pack rendered the English string and never looked missing — which is exactly how a two-key gap (KbCyclePermissions, KbCycleThinking) shipped in all five complete packs. Three MessageIds (CmdFork/CmdGoal/CmdThemeDescription) were also absent from ALL_MESSAGE_IDS, making them invisible to every localization test. Add raw JSON key-set parity gates in both directions for every pack that claims completeness, plus an exact three-way sync check between the MessageId enum, en.json, and ALL_MESSAGE_IDS. Translate the two missing keybinding rows into ja, zh-Hans, es-419, pt-BR, and vi following each pack's existing terminology (posture names stay English product terms per the HomeAgentModeYoloTip convention). Retranslate the five Operate-mode strings whose English changed on this branch in all six complete packs plus the two keys zh-Hant carries, so no locale describes the old Operate behavior. Derive the /config theme and locale value hints and the invalid-locale settings error from the shipped registries — they previously advertised 4 of 12 themes and 4 of 8 locales and would have silently omitted Korean. Machine-authored translations are flagged for native-speaker review in the release notes; they follow existing pack terminology rather than introducing new terms.
1 parent 19f0109 commit e261be9

11 files changed

Lines changed: 146 additions & 37 deletions

File tree

crates/tui/locales/es-419.json

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,8 @@
260260
"KbLiveTranscript": "Abrir superposición de transcripción en vivo (auto-scroll)",
261261
"KbBacktrackMessage": "Retroceder al mensaje anterior del usuario (izquierda/derecha, Enter para rebobinar)",
262262
"KbCompleteCycleModes": "Completar /command, encolar follow-up, ciclar modos; Shift+Tab cicla esfuerzo de razonamiento",
263+
"KbCycleThinking": "Alternar el esfuerzo de razonamiento del proveedor activo (Ctrl+T)",
264+
"KbCyclePermissions": "Ciclar postura de permiso: Ask → Auto-Review → Full Access (Shift+Tab)",
263265
"KbJumpPlanAgentYolo": "Activar ranuras de la hotbar",
264266
"KbAltJumpPlanAgentYolo": "Salto alternativo a modo Plan / Act / Operate",
265267
"KbFocusSidebar": "Enfocar barra lateral Pinned / Activity / Agents / Context / Auto / Ocultar",
@@ -382,7 +384,7 @@
382384
"SetupStepTrustSandboxTitle": "Postura de runtime",
383385
"SetupStepTrustSandboxWhy": "Revisa confianza, sandbox, aprobaciones, shell y política de red por separado de la guía constitucional.",
384386
"SetupStepOperateFleetTitle": "Operate y Fleet",
385-
"SetupStepOperateFleetWhy": "Revisa si el trabajo multi-worker durable puede ejecutarse con el proveedor, la postura de ejecución, el roster y la concurrencia actuales. El descubrimiento de límites del plan sigue siendo explícito.",
387+
"SetupStepOperateFleetWhy": "Operate puede usar el equipo integrado de inmediato. Los roles sin ruta personalizada usan el modelo de esta sesión; la configuración de Fleet es solo para personalizar.",
386388
"SetupStepToolsMcpTitle": "Herramientas y MCP",
387389
"SetupStepToolsMcpWhy": "Inspecciona la preparación opcional de herramientas y MCP sin bloquear el checkpoint de constitution.",
388390
"SetupStepHotbarTitle": "Hotbar",
@@ -740,11 +742,11 @@
740742
"SetupToolsMcpPreviewTitle": "On-ramps seguros de Tools / MCP",
741743
"SetupToolsMcpOnRampText": "Tools, MCP, Skills y Plugins — On-ramps seguros\n\n/setup solo lee el inventario local. No inicia servidores MCP, no instala skills, no ejecuta plugins ni comandos no confiables.\n\nInventario actual:\n- MCP: {mcp_result}\n- Skills: {skills_result}\n- Tools: {tools_result}\n- Plugins: {plugins_result}\n- Hotbar (adaptadores compartidos): {hotbar_result}\n\nRutas:\n- MCP: {mcp_path}\n- Skills: {skills_path}\n- Plugins: {plugins_path}\n\nBootstrap seguro (ejecútalo tú):\n- MCP: /mcp · codewhale mcp init · codewhale doctor\n- Skills: /skills · codewhale setup --skills\n- Plugins: /plugin · codewhale setup --plugins\n- Tools: codewhale setup --tools\n\nLas acciones con efectos secundarios siempre requieren confirmación explícita. Ver docs/MCP.md.",
742744
"HotbarActionModeOperateName": "Modo Operate",
743-
"HotbarActionModeOperateDescription": "Gestiona workers de Fleet, subagentes y flujos de trabajo.",
744-
"HomeOperateModeTip": "Operate — gestiona Fleet, subagentes y flujos de trabajo",
745-
"HomeOperateModeFleetTip": " /fleet inspecciona workers; esperas y fallos aparecen aquí",
745+
"HotbarActionModeOperateDescription": "Coordina una Fleet para trabajo de varios pasos.",
746+
"HomeOperateModeTip": "Operate — coordina una Fleet para trabajo de varios pasos",
747+
"HomeOperateModeFleetTip": " Los roles integrados usan el modelo de esta sesión; /fleet setup los personaliza",
746748
"AppModeOperate": "Operate",
747-
"AppModeOperateHint": "Orquesta Fleet/subagentes/flujos — lanza, espera, verifica, entrega",
749+
"AppModeOperateHint": "Coordina una Fleet para trabajo de varios pasos.",
748750
"HelpSubtitle": "Conceptos, comandos y atajos",
749751
"CommandPaletteTitle": "Comando",
750752
"CommandPaletteSubtitle": "Encuentra y ejecuta una acción",

crates/tui/locales/ja.json

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,8 @@
260260
"KbLiveTranscript": "ライブ会話履歴オーバーレイを開く(自動追尾スクロール)",
261261
"KbBacktrackMessage": "前のユーザーメッセージに戻る(左右でステップ、Enter で巻き戻し)",
262262
"KbCompleteCycleModes": "/command を補完、実行中ターンのフォローアップをキュー、モードを切り替え;Shift+Tab で推論強度を切り替え",
263+
"KbCycleThinking": "現在のプロバイダーの推論強度を順に切り替え (Ctrl+T)",
264+
"KbCyclePermissions": "権限を順に切り替え: Ask → Auto-Review → Full Access (Shift+Tab)",
263265
"KbJumpPlanAgentYolo": "ホットバースロットを起動",
264266
"KbAltJumpPlanAgentYolo": "Plan / Act / Operate モードへの代替ジャンプ",
265267
"KbFocusSidebar": "Pinned / Activity / Agents / Context / Auto / Hidden サイドバーにフォーカス",
@@ -382,7 +384,7 @@
382384
"SetupStepTrustSandboxTitle": "実行姿勢",
383385
"SetupStepTrustSandboxWhy": "信頼、サンドボックス、承認、シェル、ネットワークポリシーを Constitution の指針とは別に確認します。",
384386
"SetupStepOperateFleetTitle": "Operate と Fleet",
385-
"SetupStepOperateFleetWhy": "現在のプロバイダー、実行姿勢、ロスター、並行設定で永続的なマルチワーカー作業を実行できるか確認します。プラン制限の検出は明示的な操作のままです",
387+
"SetupStepOperateFleetWhy": "Operate は組み込みチームをすぐに使えます。カスタムルートのないロールはこのセッションのモデルを使用します。Fleet セットアップはカスタマイズ専用です",
386388
"SetupStepToolsMcpTitle": "ツールと MCP",
387389
"SetupStepToolsMcpWhy": "Constitution チェックポイントを妨げず、任意のツールと MCP の準備状態を確認します。",
388390
"SetupStepHotbarTitle": "Hotbar",
@@ -740,11 +742,11 @@
740742
"SetupToolsMcpPreviewTitle": "Tools / MCP 安全なオンランプ",
741743
"SetupToolsMcpOnRampText": "Tools / MCP / スキル / プラグイン — 安全なオンランプ\n\n/setup はローカル在庫を読むだけです。MCP サーバー起動・スキルインストール・プラグイン実行・未信頼コマンドの自動実行は行いません。\n\n現状:\n- MCP: {mcp_result}\n- スキル: {skills_result}\n- ツール: {tools_result}\n- プラグイン: {plugins_result}\n- ホットバー(共有アダプタ): {hotbar_result}\n\nパス:\n- MCP: {mcp_path}\n- スキル: {skills_path}\n- プラグイン: {plugins_path}\n\n安全なブートストラップ(明示実行):\n- MCP: /mcp · codewhale mcp init · codewhale doctor\n- スキル: /skills · codewhale setup --skills\n- プラグイン: /plugin · codewhale setup --plugins\n- ツール: codewhale setup --tools\n\n副作用のある操作は常に確認が必要です。詳細は docs/MCP.md を参照してください。",
742744
"HotbarActionModeOperateName": "Operate モード",
743-
"HotbarActionModeOperateDescription": "Fleet ワーカー、サブエージェント、ワークフローを管理します",
744-
"HomeOperateModeTip": "Operate — Fleet・サブエージェント・ワークフローを管理",
745-
"HomeOperateModeFleetTip": " /fleet でワーカー確認。待機・失敗作業もここに",
745+
"HotbarActionModeOperateDescription": "Fleet を指揮して複数ステップの作業を進めます",
746+
"HomeOperateModeTip": "Operate — Fleet を指揮して複数ステップの作業を進める",
747+
"HomeOperateModeFleetTip": " 組み込みロールはこのセッションのモデルを使用。/fleet setup でカスタマイズ",
746748
"AppModeOperate": "Operate",
747-
"AppModeOperateHint": "Fleet/サブエージェント/ワークフローを調整 — 起動・待機・検証・引き継ぎ",
749+
"AppModeOperateHint": "Fleet を指揮して複数ステップの作業を進めます。",
748750
"HelpSubtitle": "概念・コマンド・キーバインド",
749751
"CommandPaletteTitle": "コマンド",
750752
"CommandPaletteSubtitle": "操作を見つけて実行",

crates/tui/locales/ko.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@
384384
"SetupStepTrustSandboxTitle": "런타임 모드",
385385
"SetupStepTrustSandboxWhy": "헌법 지침과는 별개로 신뢰, 샌드박스, 승인, 셸, 네트워크 정책을 검토하세요.",
386386
"SetupStepOperateFleetTitle": "운영과 플릿",
387-
"SetupStepOperateFleetWhy": "현재 프로바이더, 런타임 모드, 워커 명단, 동시성 설정으로 지속적인 다중 워커 작업을 실행할 수 있는지 검토하세요. 플랜 한도 확인은 명시적으로 이루어집니다.",
387+
"SetupStepOperateFleetWhy": "Operate는 내장 팀을 즉시 사용할 수 있습니다. 커스텀 경로가 없는 역할은 이 세션의 모델을 사용하며, Fleet 설정은 커스터마이징 전용입니다.",
388388
"SetupStepToolsMcpTitle": "도구와 MCP",
389389
"SetupStepToolsMcpWhy": "헌법 체크포인트를 막지 않으면서 선택적인 도구와 MCP 준비 상태를 확인하세요.",
390390
"SetupStepHotbarTitle": "핫바",
@@ -537,7 +537,7 @@
537537
"AppModeAutoHint": "셸 사용 가능, 자동 위험도 검토 적용",
538538
"AppModePlanHint": "먼저 읽기 전용으로 조사 — 실행 전에 계획을 제시합니다",
539539
"AppModeYoloHint": "호환성 유지용 — 실행 + 전체 권한이며 실제로 표시되는 모드는 아닙니다",
540-
"AppModeOperateHint": "플릿/서브 에이전트/워크플로 오케스트레이션 — 생성, 대기, 검증, 인계",
540+
"AppModeOperateHint": "Fleet를 지휘해 여러 단계의 작업을 진행합니다.",
541541
"VimModeNormal": "-- 일반 --",
542542
"VimModeInsert": "-- 입력 --",
543543
"VimModeVisual": "-- 비주얼 --",
@@ -744,9 +744,9 @@
744744
"SetupToolsMcpPreviewTitle": "도구 / MCP 안전 온램프",
745745
"SetupToolsMcpOnRampText": "도구, MCP, 스킬 및 플러그인 — 안전한 온램프\n\n/setup은 로컬 인벤토리만 읽습니다. MCP 서버를 시작하거나, 스킬을 설치하거나, 플러그인을 실행하거나, 신뢰할 수 없는 명령을 실행하는 일은 절대 없습니다.\n\n현재 인벤토리:\n- MCP: {mcp_result}\n- 스킬: {skills_result}\n- 도구 디렉터리: {tools_result}\n- 플러그인: {plugins_result}\n- 핫바 (공유 어댑터): {hotbar_result}\n\n경로 (홈 디렉터리 가림):\n- MCP 설정: {mcp_path}\n- 스킬: {skills_path}\n- 플러그인: {plugins_path}\n\n안전한 부트스트랩 (일반 터미널이나 TUI 명령에서 직접 실행하세요):\n- MCP: /mcp · codewhale mcp init · codewhale doctor\n- 스킬: /skills · codewhale setup --skills · /skills install <spec>\n- 플러그인: /plugin · codewhale setup --plugins\n- 도구 디렉터리: codewhale setup --tools\n\n부작용이 있는 동작은 항상 명시적 확인이 필요합니다. 플러그인 명령어는 슬래시 명령어와는 별개이며, 핫바 플러그인 소스는 승인 게이트가 도입될 때까지 보류됩니다.\n\n아직 수동으로 외부 설정이 필요한 항목은 docs/MCP.md와 docs/skills/README.md를 참고하세요.",
746746
"HotbarActionModeOperateName": "운영 모드",
747-
"HotbarActionModeOperateDescription": "플릿 워커, 서브 에이전트, 워크플로 레인을 관리합니다.",
748-
"HomeOperateModeTip": "운영플릿, 서브 에이전트, 워크플로 레인 관리",
749-
"HomeOperateModeFleetTip": " /fleet로 워커 확인; 대기 중이거나 실패한 작업이 여기에 표시됩니다",
747+
"HotbarActionModeOperateDescription": "Fleet를 지휘해 여러 단계의 작업을 진행합니다.",
748+
"HomeOperateModeTip": "OperateFleet를 지휘해 여러 단계의 작업 진행",
749+
"HomeOperateModeFleetTip": " 내장 역할은 이 세션의 모델을 사용합니다. /fleet setup에서 커스터마이징",
750750
"HelpSubtitle": "개념, 명령어, 단축키",
751751
"CommandPaletteTitle": "명령",
752752
"CommandPaletteSubtitle": "동작을 찾아 실행하세요",

crates/tui/locales/pt-BR.json

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,8 @@
260260
"KbLiveTranscript": "Abrir sobreposição de transcrição ao vivo (auto-scroll)",
261261
"KbBacktrackMessage": "Retroceder para mensagem anterior do usuário (esquerda/direita, Enter para rebobinar)",
262262
"KbCompleteCycleModes": "Completar /command, enfileirar follow-up, ciclar modos; Shift+Tab cicla esforço de raciocínio",
263+
"KbCycleThinking": "Alternar o esforço de raciocínio do provedor ativo (Ctrl+T)",
264+
"KbCyclePermissions": "Ciclar postura de permissão: Ask → Auto-Review → Full Access (Shift+Tab)",
263265
"KbJumpPlanAgentYolo": "Acionar slots da hotbar",
264266
"KbAltJumpPlanAgentYolo": "Salto alternativo para modo Plan / Act / Operate",
265267
"KbFocusSidebar": "Focar barra lateral Pinned / Activity / Agents / Context / Auto / Ocultar",
@@ -382,7 +384,7 @@
382384
"SetupStepTrustSandboxTitle": "Postura de runtime",
383385
"SetupStepTrustSandboxWhy": "Revise confiança, sandbox, aprovações, shell e política de rede separadamente da orientação constitucional.",
384386
"SetupStepOperateFleetTitle": "Operate e Fleet",
385-
"SetupStepOperateFleetWhy": "Revise se o trabalho multi-worker durável pode rodar com o provedor, a postura de runtime, o roster e as configurações de concorrência atuais. A descoberta de limite do plano continua explícita.",
387+
"SetupStepOperateFleetWhy": "O Operate pode usar a equipe integrada imediatamente. Papéis sem rota personalizada usam o modelo desta sessão; a configuração da Fleet é apenas para personalização.",
386388
"SetupStepToolsMcpTitle": "Ferramentas e MCP",
387389
"SetupStepToolsMcpWhy": "Inspecione a prontidão opcional de ferramentas e MCP sem bloquear o checkpoint da constitution.",
388390
"SetupStepHotbarTitle": "Hotbar",
@@ -740,11 +742,11 @@
740742
"SetupToolsMcpPreviewTitle": "On-ramps seguros de Tools / MCP",
741743
"SetupToolsMcpOnRampText": "Tools, MCP, Skills e Plugins — On-ramps seguros\n\n/setup só lê o inventário local. Não inicia servidores MCP, não instala skills, não executa plugins nem comandos não confiáveis.\n\nInventário atual:\n- MCP: {mcp_result}\n- Skills: {skills_result}\n- Tools: {tools_result}\n- Plugins: {plugins_result}\n- Hotbar (adaptadores compartilhados): {hotbar_result}\n\nCaminhos:\n- MCP: {mcp_path}\n- Skills: {skills_path}\n- Plugins: {plugins_path}\n\nBootstrap seguro (execute você mesmo):\n- MCP: /mcp · codewhale mcp init · codewhale doctor\n- Skills: /skills · codewhale setup --skills\n- Plugins: /plugin · codewhale setup --plugins\n- Tools: codewhale setup --tools\n\nAções com efeitos colaterais sempre exigem confirmação explícita. Veja docs/MCP.md.",
742744
"HotbarActionModeOperateName": "Modo Operate",
743-
"HotbarActionModeOperateDescription": "Gerencie workers do Fleet, subagentes e workflows.",
744-
"HomeOperateModeTip": "Operate — gerencie Fleet, subagentes e workflows",
745-
"HomeOperateModeFleetTip": " /fleet inspeciona workers; espera e falhas aparecem aqui",
745+
"HotbarActionModeOperateDescription": "Coordene uma Fleet para trabalho em várias etapas.",
746+
"HomeOperateModeTip": "Operate — coordene uma Fleet para trabalho em várias etapas",
747+
"HomeOperateModeFleetTip": " Papéis integrados usam o modelo desta sessão; /fleet setup os personaliza",
746748
"AppModeOperate": "Operate",
747-
"AppModeOperateHint": "Orquestre Fleet/subagentes/workflows — spawn, espera, verifica, entrega",
749+
"AppModeOperateHint": "Coordene uma Fleet para trabalho em várias etapas.",
748750
"HelpSubtitle": "Conceitos, comandos e atalhos",
749751
"CommandPaletteTitle": "Comando",
750752
"CommandPaletteSubtitle": "Encontre e execute uma ação",

crates/tui/locales/vi.json

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,8 @@
260260
"KbLiveTranscript": "Mở lớp phủ bản ghi trực tiếp (tự động cuộn theo đuôi)",
261261
"KbBacktrackMessage": "Quay lại tin nhắn trước đó của người dùng (nhấn Trái/Phải để chuyển bước, Enter để lùi lại)",
262262
"KbCompleteCycleModes": "Hoàn thành /command, xếp hàng theo dõi lượt đang chạy, chuyển đổi chế độ; Shift+Tab để chuyển đổi mức độ suy luận",
263+
"KbCycleThinking": "Luân phiên mức suy luận của nhà cung cấp đang hoạt động (Ctrl+T)",
264+
"KbCyclePermissions": "Xoay vòng quyền: Ask → Auto-Review → Full Access (Shift+Tab)",
263265
"KbJumpPlanAgentYolo": "Kích hoạt các ô hotbar",
264266
"KbAltJumpPlanAgentYolo": "Phím tắt thay thế nhảy sang Plan / Act / Operate",
265267
"KbFocusSidebar": "Focus vào thanh bên Pinned / Activity / Agents / Context / Auto; Ctrl+Alt+0 để ẩn",
@@ -382,7 +384,7 @@
382384
"SetupStepTrustSandboxTitle": "Tư thế runtime",
383385
"SetupStepTrustSandboxWhy": "Xem lại trust, sandbox, phê duyệt, shell và chính sách mạng tách biệt với hướng dẫn constitution.",
384386
"SetupStepOperateFleetTitle": "Operate và Fleet",
385-
"SetupStepOperateFleetWhy": "Xem lại liệu công việc nhiều worker bền vững có thể chạy với nhà cung cấp, tư thế runtime, roster và cấu hình đồng thời hiện tại hay không. Việc phát hiện giới hạn gói vẫn là thao tác rõ ràng.",
387+
"SetupStepOperateFleetWhy": "Operate có thể dùng đội ngũ tích hợp ngay lập tức. Vai trò không có tuyến tùy chỉnh dùng mô hình của phiên này; thiết lập Fleet chỉ dành cho tùy biến.",
386388
"SetupStepToolsMcpTitle": "Công cụ và MCP",
387389
"SetupStepToolsMcpWhy": "Kiểm tra mức sẵn sàng tùy chọn của công cụ và MCP mà không chặn checkpoint constitution.",
388390
"SetupStepHotbarTitle": "Hotbar",
@@ -740,11 +742,11 @@
740742
"SetupToolsMcpPreviewTitle": "On-ramp an toàn Tools / MCP",
741743
"SetupToolsMcpOnRampText": "Tools, MCP, Skills & Plugins — On-ramp an toàn\n\n/setup chỉ đọc kho cục bộ. Không khởi động máy chủ MCP, không cài skill, không chạy plugin hay lệnh không tin cậy.\n\nKho hiện tại:\n- MCP: {mcp_result}\n- Skills: {skills_result}\n- Tools: {tools_result}\n- Plugins: {plugins_result}\n- Hotbar (adapter dùng chung): {hotbar_result}\n\nĐường dẫn:\n- MCP: {mcp_path}\n- Skills: {skills_path}\n- Plugins: {plugins_path}\n\nBootstrap an toàn (bạn tự chạy):\n- MCP: /mcp · codewhale mcp init · codewhale doctor\n- Skills: /skills · codewhale setup --skills\n- Plugins: /plugin · codewhale setup --plugins\n- Tools: codewhale setup --tools\n\nMọi thao tác có tác dụng phụ luôn cần xác nhận rõ ràng. Xem docs/MCP.md.",
742744
"HotbarActionModeOperateName": "Chế độ Operate",
743-
"HotbarActionModeOperateDescription": "Quản lý worker Fleet, subagent và workflow.",
744-
"HomeOperateModeTip": "Operate — quản lý Fleet, subagent và workflow",
745-
"HomeOperateModeFleetTip": " /fleet xem worker; chờ và lỗi hiện ở đây",
745+
"HotbarActionModeOperateDescription": "Điều phối Fleet cho công việc nhiều bước.",
746+
"HomeOperateModeTip": "Operate — điều phối Fleet cho công việc nhiều bước",
747+
"HomeOperateModeFleetTip": " Vai trò tích hợp dùng mô hình của phiên này; /fleet setup để tùy chỉnh",
746748
"AppModeOperate": "Operate",
747-
"AppModeOperateHint": "Điều phối Fleet/subagent/workflow — spawn, chờ, xác minh, bàn giao",
749+
"AppModeOperateHint": "Điều phối Fleet cho công việc nhiều bước.",
748750
"HelpSubtitle": "Khái niệm, lệnh và phím tắt",
749751
"CommandPaletteTitle": "Lệnh",
750752
"CommandPaletteSubtitle": "Tìm và chạy một thao tác",

0 commit comments

Comments
 (0)