From b844ce798d4832e71836b0c13628b564470922a3 Mon Sep 17 00:00:00 2001 From: Hermes Backup Date: Thu, 11 Jun 2026 13:18:09 +0800 Subject: [PATCH] feat(i18n): add missing TUI translation keys (#96) Add missing translation keys to TUI i18n files for es, fr, ja, ru, and zht. - es: 40 keys (cli.providers.*, tui.dialog.login.*, tui.dialog.image.*, tui.command.worktree/image) - fr: 27 keys (tui.dialog.login.*, tui.dialog.image.*, tui.voice.error.*, tui.command.worktree/image) - ja: 27 keys (tui.dialog.login.*, tui.dialog.image.*, tui.voice.error.*, tui.command.worktree/image) - ru: 30 keys (tui.dialog.login.*, tui.dialog.image.*, tui.voice.error.*, tui.command.voice.send.*, tui.command.worktree/image) - zht: 30 keys (cli.providers.*, tui.dialog.login.*, tui.command.worktree/image) --- packages/opencode/src/cli/cmd/tui/i18n/es.ts | 41 +++++++++++++++++++ packages/opencode/src/cli/cmd/tui/i18n/fr.ts | 27 ++++++++++++ packages/opencode/src/cli/cmd/tui/i18n/ja.ts | 27 ++++++++++++ packages/opencode/src/cli/cmd/tui/i18n/ru.ts | 30 ++++++++++++++ packages/opencode/src/cli/cmd/tui/i18n/zht.ts | 32 +++++++++++++++ 5 files changed, 157 insertions(+) diff --git a/packages/opencode/src/cli/cmd/tui/i18n/es.ts b/packages/opencode/src/cli/cmd/tui/i18n/es.ts index bd7a1f54..890dbe28 100644 --- a/packages/opencode/src/cli/cmd/tui/i18n/es.ts +++ b/packages/opencode/src/cli/cmd/tui/i18n/es.ts @@ -286,7 +286,17 @@ export const dict = { "tui.command.provider.logout.title": "Cerrar sesión", "tui.command.console.org.switch.title": "Cambiar de organización", "tui.command.opencode.status.title": "Ver estado", + "tui.command.worktree.list.title": "Worktrees", + "tui.command.image.switch.title": "Cambiar imagen de fondo", "tui.command.theme.switch.title": "Cambiar tema", + "tui.dialog.image.import.invalid": "Solo se admiten archivos .png, .jpg y .jpeg", + "tui.dialog.image.import.not_found": "Archivo no encontrado", + "tui.dialog.image.import.option": "Elegir nueva imagen…", + "tui.dialog.image.import.placeholder": "/ruta/a/imagen.png o .jpg", + "tui.dialog.image.import.success": "Imagen de fondo importada", + "tui.dialog.image.import.title": "Importar imagen de fondo", + "tui.dialog.image.none": "Ninguna (usar fondo estrellado)", + "tui.dialog.image.title": "Imágenes de fondo", "tui.command.logo.switch.title": "Cambiar diseño de logo", "tui.dialog.logo.title": "Diseño de logo", "tui.dialog.logo.option.classic": "Clásico (negrita)", @@ -419,6 +429,25 @@ export const dict = { "tui.command.tips.toggle.hide": "Ocultar sugerencias", "tui.command.plugins.list.title": "Plugins", "tui.command.plugins.install.title": "Instalar plugin", + "tui.dialog.login.flow.busy": "Iniciando sesión...", + "tui.dialog.login.flow.invalid_code": "Código inválido, inténtalo de nuevo", + "tui.dialog.login.flow.manual_hint": "¿No se abrió el navegador? Visita manualmente:", + "tui.dialog.login.flow.placeholder": "Pegar código (o esperar callback del navegador)", + "tui.dialog.login.flow.title": "Inicio de sesión MiMo", + "tui.dialog.login.flow.waiting": "Esperando autorización del navegador...", + "tui.dialog.login.import_claude": "Importar desde Claude Code", + "tui.dialog.login.import_claude.no_key": "Clave API de Claude Code no encontrada", + "tui.dialog.login.import_claude.read_failed": "Error al leer ~/.claude/settings.json", + "tui.dialog.login.import_claude.success": "Importado desde Claude Code", + "tui.dialog.login.mimo_free": "MiMo Auto (free)", + "tui.dialog.login.mimo_free.desc": "Canal anónimo gratuito — no requiere inicio de sesión", + "tui.dialog.login.mimo_free.success": "MiMo Auto (free) listo — modelo predeterminado: mimo/mimo-auto", + "tui.dialog.login.mimo_free.unavailable": "Proveedor MiMo Auto (free) no cargado", + "tui.dialog.login.other": "Otro proveedor", + "tui.dialog.login.start_failed": "Error al iniciar sesión", + "tui.dialog.login.title": "Seleccionar proveedor", + "tui.dialog.login.xiaomi": "Xiaomi", + "tui.dialog.login.xiaomi.desc": "(Recomendado)", // Question i18n — plan_exit "tui.question.plan_exit.question": "El plan en {{plan}} está completo. ¿Desea cambiar al agente build para comenzar la implementación?", @@ -430,4 +459,16 @@ export const dict = { // Session badges "tui.session.badge.auto": "Auto", + // CLI: providers command (auth login) + "cli.providers.mimo.recommended_hint": "recomendado", + "cli.providers.mimo_free.default_set": "Modelo predeterminado establecido en mimo/mimo-auto (contexto 1M, gratuito)", + "cli.providers.mimo_free.failed": "Verificación de MiMo Auto (free) fallida", + "cli.providers.mimo_free.hint": "Canal anónimo gratuito / mimo-auto", + "cli.providers.mimo_free.ready": "Canal MiMo Auto (free) listo", + "cli.providers.mimo_free.usage_hint": "No requiere inicio de sesión — solo ejecuta mimo. Para modelos de pago/premium, elige el inicio de sesión del navegador MiMo.", + "cli.providers.mimo_free.verifying": "Verificando canal MiMo Auto (free)...", + "cli.providers.mimo_login.decrypt_exhausted": "Descifrado fallido, se alcanzó el máximo de reintentos", + "cli.providers.mimo_login.decrypt_retry": "Descifrado fallido, inténtalo de nuevo ({remaining} intentos restantes)", + "cli.providers.other": "Otro proveedor", + "cli.providers.select": "Seleccionar proveedor", } satisfies Partial> diff --git a/packages/opencode/src/cli/cmd/tui/i18n/fr.ts b/packages/opencode/src/cli/cmd/tui/i18n/fr.ts index 5d75579f..a3aa10d7 100644 --- a/packages/opencode/src/cli/cmd/tui/i18n/fr.ts +++ b/packages/opencode/src/cli/cmd/tui/i18n/fr.ts @@ -274,7 +274,17 @@ export const dict = { "tui.command.provider.logout.title": "Déconnexion", "tui.command.console.org.switch.title": "Changer d'organisation", "tui.command.opencode.status.title": "Voir l'état", + "tui.command.worktree.list.title": "Arbres de travail", + "tui.command.image.switch.title": "Changer l'image de fond", "tui.command.theme.switch.title": "Changer de thème", + "tui.dialog.image.import.invalid": "Seuls les fichiers .png, .jpg et .jpeg sont pris en charge", + "tui.dialog.image.import.not_found": "Fichier introuvable", + "tui.dialog.image.import.option": "Choisir une nouvelle image…", + "tui.dialog.image.import.placeholder": "/chemin/vers/image.png ou .jpg", + "tui.dialog.image.import.success": "Image d'arrière-plan importée", + "tui.dialog.image.import.title": "Importer une image d'arrière-plan", + "tui.dialog.image.none": "Aucune (utiliser le fond étoilé)", + "tui.dialog.image.title": "Images d'arrière-plan", "tui.command.logo.switch.title": "Changer le design du logo", "tui.dialog.logo.title": "Design du logo", "tui.dialog.logo.option.classic": "Classique (gras)", @@ -397,6 +407,8 @@ export const dict = { "tui.voice.error.no_recorder": "Aucun outil d'enregistrement trouvé, installez sox", "tui.voice.error.too_short": "Enregistrement trop court", "tui.voice.error.network": "La transcription a échoué, vérifiez votre réseau", + "tui.voice.error.empty_send": "Rien à envoyer", + "tui.voice.error.unknown_agent": "Agent \"{{name}}\" introuvable", "tui.command.prompt.stash.title": "Mettre l'invite de côté", "tui.command.prompt.stash.pop.title": "Récupérer l'invite", "tui.command.prompt.stash.list.title": "Liste des invites mises de côté", @@ -406,6 +418,21 @@ export const dict = { "tui.command.tips.toggle.hide": "Masquer les astuces", "tui.command.plugins.list.title": "Plugins", "tui.command.plugins.install.title": "Installer un plugin", + "tui.dialog.login.flow.busy": "Connexion en cours...", + "tui.dialog.login.flow.invalid_code": "Code invalide, veuillez réessayer", + "tui.dialog.login.flow.manual_hint": "Le navigateur ne s'est pas ouvert ? Visitez manuellement :", + "tui.dialog.login.flow.placeholder": "Coller le code (ou attendre le callback navigateur)", + "tui.dialog.login.flow.title": "Connexion MiMo", + "tui.dialog.login.flow.waiting": "En attente de l'autorisation du navigateur...", + "tui.dialog.login.import_claude": "Importer depuis Claude Code", + "tui.dialog.login.import_claude.no_key": "Clé API Claude Code introuvable", + "tui.dialog.login.import_claude.read_failed": "Échec de lecture de ~/.claude/settings.json", + "tui.dialog.login.import_claude.success": "Importé depuis Claude Code", + "tui.dialog.login.other": "Autre fournisseur", + "tui.dialog.login.start_failed": "Échec du démarrage de la connexion", + "tui.dialog.login.title": "Sélectionner un fournisseur", + "tui.dialog.login.xiaomi": "Xiaomi", + "tui.dialog.login.xiaomi.desc": "(Recommandé)", // MiMo Auto (free) — TUI login dialog "tui.dialog.login.mimo_free": "MiMo Auto (free)", diff --git a/packages/opencode/src/cli/cmd/tui/i18n/ja.ts b/packages/opencode/src/cli/cmd/tui/i18n/ja.ts index 72289f3e..a63e7a00 100644 --- a/packages/opencode/src/cli/cmd/tui/i18n/ja.ts +++ b/packages/opencode/src/cli/cmd/tui/i18n/ja.ts @@ -227,7 +227,17 @@ export const dict = { "tui.command.provider.logout.title": "ログアウト", "tui.command.console.org.switch.title": "組織を切り替え", "tui.command.opencode.status.title": "ステータスを表示", + "tui.command.worktree.list.title": "ワークツリー", + "tui.command.image.switch.title": "背景画像を切り替え", "tui.command.theme.switch.title": "テーマを切り替え", + "tui.dialog.image.import.invalid": ".png、.jpg、.jpeg ファイルのみサポートされています", + "tui.dialog.image.import.not_found": "ファイルが見つかりません", + "tui.dialog.image.import.option": "新しい画像を選択…", + "tui.dialog.image.import.placeholder": "/path/to/image.png または .jpg", + "tui.dialog.image.import.success": "背景画像をインポートしました", + "tui.dialog.image.import.title": "背景画像をインポート", + "tui.dialog.image.none": "なし(星空背景を使用)", + "tui.dialog.image.title": "背景画像", "tui.command.logo.switch.title": "ロゴデザインを切り替え", "tui.dialog.logo.title": "ロゴデザイン", "tui.dialog.logo.option.classic": "クラシック(太字)", @@ -349,6 +359,8 @@ export const dict = { "tui.voice.error.no_recorder": "録音ツールが見つかりません。sox をインストールしてください", "tui.voice.error.too_short": "録音時間が短すぎます", "tui.voice.error.network": "文字起こしに失敗しました。ネットワークを確認してください", + "tui.voice.error.empty_send": "送信する内容がありません", + "tui.voice.error.unknown_agent": "エージェント「{{name}}」が見つかりません", "tui.command.prompt.stash.title": "プロンプトを退避", "tui.command.prompt.stash.pop.title": "退避から復元", "tui.command.prompt.stash.list.title": "退避一覧", @@ -358,6 +370,21 @@ export const dict = { "tui.command.tips.toggle.hide": "ヒントを非表示", "tui.command.plugins.list.title": "プラグイン", "tui.command.plugins.install.title": "プラグインをインストール", + "tui.dialog.login.flow.busy": "ログイン中...", + "tui.dialog.login.flow.invalid_code": "無効なコードです。再試行してください", + "tui.dialog.login.flow.manual_hint": "ブラウザが開かない場合は手動でアクセス:", + "tui.dialog.login.flow.placeholder": "コードを貼り付け(またはブラウザコールバックを待つ)", + "tui.dialog.login.flow.title": "MiMo ログイン", + "tui.dialog.login.flow.waiting": "ブラウザ認証を待っています...", + "tui.dialog.login.import_claude": "Claude Code からインポート", + "tui.dialog.login.import_claude.no_key": "Claude Code の API キーが見つかりません", + "tui.dialog.login.import_claude.read_failed": "~/.claude/settings.json の読み込みに失敗しました", + "tui.dialog.login.import_claude.success": "Claude Code からインポートしました", + "tui.dialog.login.other": "その他のプロバイダー", + "tui.dialog.login.start_failed": "ログインの開始に失敗しました", + "tui.dialog.login.title": "プロバイダーを選択", + "tui.dialog.login.xiaomi": "Xiaomi", + "tui.dialog.login.xiaomi.desc": "(推奨)", // MiMo Auto (free) — TUI login dialog "tui.dialog.login.mimo_free": "MiMo Auto (free)", diff --git a/packages/opencode/src/cli/cmd/tui/i18n/ru.ts b/packages/opencode/src/cli/cmd/tui/i18n/ru.ts index 822731de..6a09d838 100644 --- a/packages/opencode/src/cli/cmd/tui/i18n/ru.ts +++ b/packages/opencode/src/cli/cmd/tui/i18n/ru.ts @@ -289,7 +289,17 @@ export const dict = { "tui.command.provider.logout.title": "Выйти", "tui.command.console.org.switch.title": "Сменить организацию", "tui.command.opencode.status.title": "Посмотреть статус", + "tui.command.worktree.list.title": "Рабочие деревья", + "tui.command.image.switch.title": "Сменить фоновое изображение", "tui.command.theme.switch.title": "Сменить тему", + "tui.dialog.image.import.invalid": "Поддерживаются только файлы .png, .jpg и .jpeg", + "tui.dialog.image.import.not_found": "Файл не найден", + "tui.dialog.image.import.option": "Выбрать новое изображение…", + "tui.dialog.image.import.placeholder": "/путь/к/изображению.png или .jpg", + "tui.dialog.image.import.success": "Фоновое изображение импортировано", + "tui.dialog.image.import.title": "Импорт фонового изображения", + "tui.dialog.image.none": "Нет (использовать звёздный фон)", + "tui.dialog.image.title": "Фоновые изображения", "tui.command.logo.switch.title": "Сменить дизайн логотипа", "tui.dialog.logo.title": "Дизайн логотипа", "tui.dialog.logo.option.classic": "Классический (жирный)", @@ -400,6 +410,9 @@ export const dict = { "tui.voice.disabled": "Голосовой ввод отключён", "tui.voice.send.enabled": "Голосовая отправка включена — скажите「发送」или \"send it\"", "tui.voice.send.disabled": "Голосовая отправка отключена", + "tui.command.voice.send.title": "Переключить голосовую отправку", + "tui.command.voice.send.title_off": "Голосовая отправка: отключена — нажмите для включения", + "tui.command.voice.send.title_on": "Голосовая отправка: включена — нажмите для отключения", "tui.voice.control.enabled": "Голосовое управление включено — интеллектуальное редактирование с мультимодальной моделью (медленнее)", "tui.voice.control.disabled": "Голосовое управление отключено — используется быстрая ASR транскрипция", "tui.command.voice.control.title": "Переключить голосовое управление (мультимодальное)", @@ -409,6 +422,8 @@ export const dict = { "tui.voice.error.no_recorder": "Инструмент записи не найден, установите sox", "tui.voice.error.too_short": "Запись слишком короткая", "tui.voice.error.network": "Ошибка транскрипции, проверьте сеть", + "tui.voice.error.empty_send": "Нечего отправлять", + "tui.voice.error.unknown_agent": "Агент \"{{name}}\" не найден", "tui.command.prompt.stash.title": "Сохранить ввод во временное хранилище", "tui.command.prompt.stash.pop.title": "Восстановить из хранилища", "tui.command.prompt.stash.list.title": "Список временных запросов", @@ -418,6 +433,21 @@ export const dict = { "tui.command.tips.toggle.hide": "Скрыть подсказки", "tui.command.plugins.list.title": "Плагины", "tui.command.plugins.install.title": "Установить плагин", + "tui.dialog.login.flow.busy": "Выполняется вход...", + "tui.dialog.login.flow.invalid_code": "Неверный код, попробуйте снова", + "tui.dialog.login.flow.manual_hint": "Браузер не открылся? Перейдите вручную:", + "tui.dialog.login.flow.placeholder": "Вставьте код (или дождитесь callback из браузера)", + "tui.dialog.login.flow.title": "Вход в MiMo", + "tui.dialog.login.flow.waiting": "Ожидание авторизации в браузере...", + "tui.dialog.login.import_claude": "Импорт из Claude Code", + "tui.dialog.login.import_claude.no_key": "API-ключ Claude Code не найден", + "tui.dialog.login.import_claude.read_failed": "Не удалось прочитать ~/.claude/settings.json", + "tui.dialog.login.import_claude.success": "Импортировано из Claude Code", + "tui.dialog.login.other": "Другой провайдер", + "tui.dialog.login.start_failed": "Не удалось начать вход", + "tui.dialog.login.title": "Выберите провайдера", + "tui.dialog.login.xiaomi": "Xiaomi", + "tui.dialog.login.xiaomi.desc": "(Рекомендуется)", // MiMo Auto (free) — TUI login dialog "tui.dialog.login.mimo_free": "MiMo Auto (free)", diff --git a/packages/opencode/src/cli/cmd/tui/i18n/zht.ts b/packages/opencode/src/cli/cmd/tui/i18n/zht.ts index 0535d88f..52190a5d 100644 --- a/packages/opencode/src/cli/cmd/tui/i18n/zht.ts +++ b/packages/opencode/src/cli/cmd/tui/i18n/zht.ts @@ -204,6 +204,7 @@ export const dict = { "tui.command.console.org.switch.title": "切換組織", "tui.command.opencode.status.title": "檢視狀態", "tui.command.worktree.list.title": "工作樹", + "tui.command.worktree.list.title": "工作樹", "tui.command.theme.switch.title": "切換主題", "tui.command.image.switch.title": "切換背景圖片", "tui.dialog.image.title": "背景圖片", @@ -214,6 +215,25 @@ export const dict = { "tui.dialog.image.import.not_found": "檔案不存在", "tui.dialog.image.import.success": "背景圖片已匯入", "tui.dialog.image.none": "無(使用星空背景)", + "tui.dialog.login.flow.busy": "登入中…", + "tui.dialog.login.flow.invalid_code": "代碼無效,請重試", + "tui.dialog.login.flow.manual_hint": "瀏覽器沒有開啟?手動前往:", + "tui.dialog.login.flow.placeholder": "貼上代碼(或等待瀏覽器回呼)", + "tui.dialog.login.flow.title": "MiMo 登入", + "tui.dialog.login.flow.waiting": "等待瀏覽器授權…", + "tui.dialog.login.import_claude": "從 Claude Code 匯入", + "tui.dialog.login.import_claude.no_key": "找不到 Claude Code API 金鑰", + "tui.dialog.login.import_claude.read_failed": "無法讀取 ~/.claude/settings.json", + "tui.dialog.login.import_claude.success": "已從 Claude Code 匯入", + "tui.dialog.login.mimo_free": "MiMo Auto(免費)", + "tui.dialog.login.mimo_free.desc": "匿名免費通道 — 無需登入", + "tui.dialog.login.mimo_free.success": "MiMo Auto(免費)已就緒 — 預設模型設為 mimo/mimo-auto", + "tui.dialog.login.mimo_free.unavailable": "MiMo Auto(免費)供應商未載入", + "tui.dialog.login.other": "其他供應商", + "tui.dialog.login.start_failed": "登入啟動失敗", + "tui.dialog.login.title": "選擇供應商", + "tui.dialog.login.xiaomi": "Xiaomi", + "tui.dialog.login.xiaomi.desc": "(推薦)", "tui.command.logo.switch.title": "切換 Logo 樣式", "tui.dialog.logo.title": "Logo 樣式", "tui.dialog.logo.option.classic": "經典(粗體)", @@ -357,4 +377,16 @@ export const dict = { // Session badges "tui.session.badge.auto": "自動", + // CLI: providers command (auth login) + "cli.providers.mimo.recommended_hint": "推薦", + "cli.providers.mimo_free.default_set": "預設模型已設為 mimo/mimo-auto(1M 上下文,免費)", + "cli.providers.mimo_free.failed": "MiMo Auto(免費)驗證失敗", + "cli.providers.mimo_free.hint": "匿名免費通道 / mimo-auto", + "cli.providers.mimo_free.ready": "MiMo Auto(免費)通道已就緒", + "cli.providers.mimo_free.usage_hint": "無需登入 — 直接執行 mimo 即可。如需付費/進階模型,請選擇 MiMo 瀏覽器登入。", + "cli.providers.mimo_free.verifying": "正在驗證 MiMo Auto(免費)通道…", + "cli.providers.mimo_login.decrypt_exhausted": "解密失敗,已達最大重試次數", + "cli.providers.mimo_login.decrypt_retry": "解密失敗,請重試(剩餘 {remaining} 次)", + "cli.providers.other": "其他供應商", + "cli.providers.select": "選擇供應商", } satisfies Partial>