diff --git a/.github/workflows/ci-i18n.yml b/.github/workflows/ci-i18n.yml new file mode 100644 index 000000000..3a4eb10a4 --- /dev/null +++ b/.github/workflows/ci-i18n.yml @@ -0,0 +1,28 @@ +name: i18n Audit + +on: + pull_request: + branches: + - dev + push: + branches: + - dev + +permissions: + contents: read + +jobs: + i18n-audit: + runs-on: blacksmith-4vcpu-ubuntu-2204 + + steps: + - name: Checkout + uses: actions/checkout@v6 + + - name: Setup Node + uses: actions/setup-node@v6 + with: + node-version-file: .nvmrc + + - name: Run i18n audit + run: node scripts/i18n-audit.mjs --ci diff --git a/apps/app/src/i18n/locales/ca.ts b/apps/app/src/i18n/locales/ca.ts index 12b9d68e3..e53fcaa3d 100644 --- a/apps/app/src/i18n/locales/ca.ts +++ b/apps/app/src/i18n/locales/ca.ts @@ -1270,14 +1270,11 @@ export default { "settings.auto_compact_desc": "Controla OpenCode compaction.auto per a aquest workspace. Torna a carregar el motor després de canviar-lo.", "settings.auto_update_desc": "Descarrega les actualitzacions automàticament (et demana", "settings.auto_update_title": "Actualització automàtica", - "settings.available_count": "{count} disponibles", "settings.background_checks_desc": "OpenWork sempre comprova si hi ha actualitzacions en arrencar. També ho comprova un cop", "settings.background_checks_title": "Comprovacions en segon pla", "settings.base_url_unavailable": "URL base no disponible", "settings.binary_unavailable": "Binari no disponible", - "settings.cache_nothing_to_repair": "No s'ha trobat la memòria cache OpenCode. Res a reparar.", "settings.cache_repair_requires_desktop": "La reparació de la memòria cache requereix l'app d'escriptori", - "settings.cache_repaired": "S'ha reparat la memòria cache OpenCode. Reinicia el motor si estava en marxa.", "settings.cap_browser_tools": "Eines del navegador: {value}", "settings.cap_commands": "Commands: {value}", "settings.cap_config": "Configuració: {value}", @@ -1303,7 +1300,6 @@ export default { "settings.configure": "Configura", "settings.connect_opencode_hint": "Connecta't a OpenCode per carregar proveïdors.", "settings.connect_provider": "Connecta un proveïdor", - "settings.connected_count": "{count} connectat", "settings.connection": "Connexió", "settings.connection_failed": "La connexió ha fallat", "settings.connection_title": "Connexió", @@ -1330,13 +1326,6 @@ export default { "settings.developer_mode_title": "Mode de desenvolupador", "settings.developer_panel_disabled": "Panell de desenvolupador desactivat.", "settings.developer_panel_enabled": "Panell de desenvolupador activat.", - "settings.devlog_cleared": "S'ha esborrat la sortida del registre del desenvolupador.", - "settings.devlog_clipboard_unavailable": "El porta-retalls no està disponible en aquest entorn.", - "settings.devlog_copied": "S'ha copiat la sortida del registre del desenvolupador.", - "settings.devlog_copy_failed": "No s'ha pogut copiar la sortida del registre del desenvolupador.", - "settings.devlog_export_failed": "No s'ha pogut exportar la sortida del registre del desenvolupador.", - "settings.devlog_export_unavailable": "L'exportació no està disponible en aquest entorn.", - "settings.devlog_exported": "S'ha exportat la sortida del registre del desenvolupador.", "settings.devtools_desc": "Salut, capacitats i pista d'auditoria del sidecar.", "settings.devtools_title": "Eines de desenvolupament", "settings.diag_approval": "Aprovació: {mode} ({ms}ms)", @@ -1951,8 +1940,6 @@ export default { "status.send_feedback": "Envieu comentaris", "status.settings": "Configuració", "status.starting_engine": "Arrancada del motor", - "system.cache_repair_requires_desktop": "La reparació de la memòria cache requereix el app d'escriptori.", - "system.docker_cleanup_requires_desktop": "La neteja de Docker requereix el app d'escriptori.", "system.reload_body_agents": "OpenCode carrega agents a l'inici. Torna a carregar el motor per posar agents actualitzats disponibles.", "system.reload_body_commands": "OpenCode carrega ordres a l'inici. Torna a carregar el motor per fer que les ordres actualitzades estiguin disponibles.", "system.reload_body_config": "OpenCode llegeix opencode.json a l'inici. Torna a carregar el motor per aplicar els canvis de configuració.", @@ -1965,8 +1952,6 @@ export default { "system.reload_required": "Cal tornar a carregar", "system.reload_unavailable": "La recàrrega no està disponible per a aquest worker.", "system.stop_active_runs_before_reset": "Atura les execucions actives abans de restablir.", - "system.stop_runs_before_update": "Atura les execucions actives abans d'instal·lar una actualització.", - "system.updates_not_supported": "Les actualitzacions no són compatibles amb aquest entorn.", "time.hours_ago": "fa {count}h", "time.just_now": "just ara", "time.minutes_ago": "fa {count}m", diff --git a/apps/app/src/i18n/locales/en.ts b/apps/app/src/i18n/locales/en.ts index da43073db..536b42176 100644 --- a/apps/app/src/i18n/locales/en.ts +++ b/apps/app/src/i18n/locales/en.ts @@ -1264,6 +1264,8 @@ export default { "session.status_writing_file": "Writing file", "session.stopped": "Stopped.", "session.stopping_run": "Stopping the run...", + "session.support_docs": "Open documentation", + "session.support_feedback": "Open feedback", "session.todo_label": "Tasks", "session.todo_progress": "{completed} out of {total} tasks completed", "session.todo_progress_label": "Progress", @@ -1273,6 +1275,7 @@ export default { "session.unable_to_reveal": "Unable to reveal workspace", "session.undo_label": "Revert", "session.undo_title": "Undo last message", + "session.untitled": "Untitled", "session.update_available": "Update available", "session.update_available_title": "Update available {version}", "session.update_ready": "Update ready", @@ -1307,14 +1310,11 @@ export default { "settings.auto_compact_desc": "Controls OpenCode compaction.auto for this workspace. Reload the engine after changing it.", "settings.auto_update_desc": "Download updates automatically (prompts to", "settings.auto_update_title": "Auto-update", - "settings.available_count": "{count} available", "settings.background_checks_desc": "OpenWork always checks on launch. Also checks once", "settings.background_checks_title": "Background checks", "settings.base_url_unavailable": "Base URL unavailable", "settings.binary_unavailable": "Binary unavailable", - "settings.cache_nothing_to_repair": "No OpenCode cache found. Nothing to repair.", "settings.cache_repair_requires_desktop": "Cache repair requires the desktop app", - "settings.cache_repaired": "OpenCode cache repaired. Restart the engine if it was running.", "settings.cap_browser_tools": "Browser tools: {value}", "settings.cap_commands": "Commands: {value}", "settings.cap_config": "Config: {value}", @@ -1342,10 +1342,8 @@ export default { "settings.clipboard_unavailable": "Clipboard is unavailable in this environment.", "settings.config_updated": "Configuration updated. Reload the engine if the change affects OpenCode.", "settings.configure": "Configure", - "settings.connected_providers_count": "{count, plural, =0 {No providers connected} =1 {1 provider connected} other {# providers connected}}", "settings.connect_opencode_hint": "Connect to OpenCode to load providers.", "settings.connect_provider": "Connect provider", - "settings.connected_count": "{count} connected", "settings.connection": "Connection", "settings.connection_failed": "Connection failed", "settings.connection_title": "Connection", @@ -1356,29 +1354,20 @@ export default { "settings.custom_binary_label": "Custom OpenCode binary", "settings.data_dir_unavailable": "Data directory unavailable", "settings.debug_base_url": "Base URL: {url}", - "settings.debug_cli_version": "CLI: {version}", "settings.debug_commit": "Commit: {sha}", "settings.debug_connect_url": "Connect URL: {url}", - "settings.debug_daemon_pid": "Daemon PID: {pid}", - "settings.debug_daemon_url": "Daemon URL: {url}", - "settings.debug_data_dir": "Data dir: {path}", "settings.debug_desktop_app": "Desktop app: {version}", - "settings.debug_health_port": "Health port: {port}", "settings.debug_hostname": "Hostname: {hostname}", "settings.debug_lan_url": "LAN URL: {url}", "settings.debug_mdns_url": "mDNS URL: {url}", - "settings.debug_opencode_pid": "OpenCode PID: {pid}", - "settings.debug_opencode_url": "OpenCode URL: {url}", "settings.debug_opencode_version": "OpenCode: {version}", "settings.debug_openwork_server_version": "OpenWork server: {version}", "settings.debug_pid": "PID: {pid}", "settings.debug_port": "Port: {port}", "settings.debug_project_dir": "Project dir: {path}", "settings.debug_remote_access": "Remote access: {value}", - "settings.debug_router_version": "Router: {version}", "settings.debug_runtime": "Runtime: {runtime}", "settings.debug_section_title": "Developer", - "settings.debug_workspace_path": "Workspace path: {path}", "settings.error": "Error", "settings.idle": "Idle", "settings.loading": "Loading", @@ -1395,13 +1384,6 @@ export default { "settings.developer_mode_title": "Developer mode", "settings.developer_panel_disabled": "Developer panel enabled.", "settings.developer_panel_enabled": "Developer panel enabled.", - "settings.devlog_cleared": "Cleared developer log output.", - "settings.devlog_clipboard_unavailable": "Clipboard is unavailable in this environment.", - "settings.devlog_copied": "Copied developer log output.", - "settings.devlog_copy_failed": "Failed to copy developer log output.", - "settings.devlog_export_failed": "Failed to export developer log output.", - "settings.devlog_export_unavailable": "Export is unavailable in this environment.", - "settings.devlog_exported": "Exported developer log output.", "settings.devtools_desc": "Sidecar health, capabilities, and audit trail.", "settings.devtools_title": "Devtools", "settings.diag_approval": "Approval: {mode} ({ms}ms)", @@ -1591,9 +1573,7 @@ export default { "settings.copy_logs": "Copy logs", "settings.copied_service_logs": "Copied {service} logs.", "settings.no_logs_captured": "No logs captured yet.", - "settings.copied_developer_log": "Copied developer log.", "settings.exported_developer_log": "Exported developer log.", - "settings.cleared_developer_log": "Cleared developer log.", "settings.developer_log_title": "Developer log stream", "settings.developer_log_desc": "App, workspace, session, and perf events captured while Developer Mode is on.", "settings.developer_log_count": "Showing the latest {count} retained records.", @@ -1609,8 +1589,6 @@ export default { "settings.danger_section_title": "Danger zone", "settings.danger_section_desc": "Irreversible actions. Use only when you understand the consequences.", "settings.clear_button": "Clear", - "settings.copy_button": "Copy", - "settings.export_button": "Export", "settings.copy_log_button": "Copy log", "settings.export_log_button": "Export .log", "settings.reveal_config": "Reveal config", @@ -2046,8 +2024,6 @@ export default { "status.send_feedback": "Send feedback", "status.settings": "Settings", "status.starting_engine": "Starting engine", - "system.cache_repair_requires_desktop": "Cache repair requires the desktop app.", - "system.docker_cleanup_requires_desktop": "Docker cleanup requires the desktop app.", "system.reload_body_agents": "OpenCode loads agents at startup. Reload the engine to make updated agents available.", "system.reload_body_commands": "OpenCode loads commands at startup. Reload the engine to make updated commands available.", "system.reload_body_config": "OpenCode reads opencode.json at startup. Reload the engine to apply configuration changes.", @@ -2060,8 +2036,6 @@ export default { "system.reload_required": "Reload required", "system.reload_unavailable": "Reload is unavailable for this worker.", "system.stop_active_runs_before_reset": "Stop active runs before resetting.", - "system.stop_runs_before_update": "Stop active runs before installing an update.", - "system.updates_not_supported": "Updates are not supported in this environment.", "time.hours_ago": "{count}h ago", "time.just_now": "just now", "time.minutes_ago": "{count}m ago", diff --git a/apps/app/src/i18n/locales/es.ts b/apps/app/src/i18n/locales/es.ts index da84f9ec7..68c6f9b5d 100644 --- a/apps/app/src/i18n/locales/es.ts +++ b/apps/app/src/i18n/locales/es.ts @@ -1270,14 +1270,11 @@ export default { "settings.auto_compact_desc": "Controla `compaction.auto` de OpenCode para este espacio de trabajo. Recarga el motor después de cambiarlo.", "settings.auto_update_desc": "Descarga las actualizaciones automáticamente (solicita", "settings.auto_update_title": "Actualización automática", - "settings.available_count": "{count} disponibles", "settings.background_checks_desc": "OpenWork siempre comprueba el lanzamiento. También comprueba una vez", "settings.background_checks_title": "Comprobaciones en segundo plano", "settings.base_url_unavailable": "Base URL no disponible", "settings.binary_unavailable": "Binario no disponible", - "settings.cache_nothing_to_repair": "No se encontró caché OpenCode. Nada que reparar.", "settings.cache_repair_requires_desktop": "La reparación de caché requiere la app de escritorio", - "settings.cache_repaired": "Caché OpenCode reparado. Reinicia el motor si estaba en marcha.", "settings.cap_browser_tools": "Herramientas del navegador: {value}", "settings.cap_commands": "Commands: {value}", "settings.cap_config": "Configuración: {value}", @@ -1303,7 +1300,6 @@ export default { "settings.configure": "Configurar", "settings.connect_opencode_hint": "Conecta a OpenCode para cargar proveedores.", "settings.connect_provider": "Conectar proveedor", - "settings.connected_count": "{count} conectado", "settings.connection": "Conexión", "settings.connection_failed": "La conexión falló", "settings.connection_title": "Conexión", @@ -1330,13 +1326,6 @@ export default { "settings.developer_mode_title": "Modo desarrollador", "settings.developer_panel_disabled": "Panel de desarrollador deshabilitado.", "settings.developer_panel_enabled": "Panel de desarrollador habilitado.", - "settings.devlog_cleared": "Se borró la salida del registro del desarrollador.", - "settings.devlog_clipboard_unavailable": "El portapapeles no está disponible en este entorno.", - "settings.devlog_copied": "Salida del registro del desarrollador copiada.", - "settings.devlog_copy_failed": "No se pudo copiar la salida del registro del desarrollador.", - "settings.devlog_export_failed": "No se pudo exportar la salida del registro del desarrollador.", - "settings.devlog_export_unavailable": "La exportación no está disponible en este entorno.", - "settings.devlog_exported": "Salida de registro de desarrollador exportada.", "settings.devtools_desc": "Estado, capacidades y seguimiento de auditoría del sidecar.", "settings.devtools_title": "Herramientas de desarrollo", "settings.diag_approval": "Aprobación: {mode} ({ms}ms)", @@ -1951,8 +1940,6 @@ export default { "status.send_feedback": "Enviar comentarios", "status.settings": "Ajustes", "status.starting_engine": "Iniciando el motor", - "system.cache_repair_requires_desktop": "La reparación de caché requiere la app de escritorio.", - "system.docker_cleanup_requires_desktop": "La limpieza de Docker requiere la app de escritorio.", "system.reload_body_agents": "OpenCode carga agentes al inicio. Vuelve a cargar el motor para que los agentes actualizados estén disponibles.", "system.reload_body_commands": "OpenCode carga Commands al inicio. Vuelve a cargar el motor para que los Commands actualizados estén disponibles.", "system.reload_body_config": "OpenCode lee opencode.json al inicio. Vuelve a cargar el motor para aplicar los cambios de configuración.", @@ -1965,8 +1952,6 @@ export default { "system.reload_required": "Hace falta recargar", "system.reload_unavailable": "La recarga no está disponible para este worker.", "system.stop_active_runs_before_reset": "Detenga las ejecuciones activas antes de reiniciar.", - "system.stop_runs_before_update": "Detenga las ejecuciones activas antes de instalar una actualización.", - "system.updates_not_supported": "Las actualizaciones no son compatibles en este entorno.", "time.hours_ago": "Hace {count}h", "time.just_now": "En este momento", "time.minutes_ago": "Hace {count}m", diff --git a/apps/app/src/i18n/locales/fr.ts b/apps/app/src/i18n/locales/fr.ts index f79a39fc0..d8a9f1792 100644 --- a/apps/app/src/i18n/locales/fr.ts +++ b/apps/app/src/i18n/locales/fr.ts @@ -1270,14 +1270,11 @@ export default { "settings.auto_compact_desc": "Contrôle compaction.auto d'OpenCode pour cet espace de travail. Rechargez le moteur après modification.", "settings.auto_update_desc": "Télécharger les mises à jour automatiquement (invite à", "settings.auto_update_title": "Mise à jour automatique", - "settings.available_count": "{count} disponibles", "settings.background_checks_desc": "OpenWork vérifie toujours au lancement. Vérifie aussi une fois", "settings.background_checks_title": "Vérifications en arrière-plan", "settings.base_url_unavailable": "URL de base indisponible", "settings.binary_unavailable": "Binaire indisponible", - "settings.cache_nothing_to_repair": "Aucun cache OpenCode trouvé. Rien à réparer.", "settings.cache_repair_requires_desktop": "La réparation du cache nécessite l'application desktop", - "settings.cache_repaired": "Cache OpenCode réparé. Redémarrez le moteur s'il était en cours d'exécution.", "settings.cap_browser_tools": "Outils navigateur : {value}", "settings.cap_commands": "Commands : {value}", "settings.cap_config": "Config : {value}", @@ -1303,7 +1300,6 @@ export default { "settings.configure": "Configurer", "settings.connect_opencode_hint": "Connectez-vous à OpenCode pour charger les fournisseurs.", "settings.connect_provider": "Connecter un fournisseur", - "settings.connected_count": "{count} connectés", "settings.connection": "Connexion", "settings.connection_failed": "Échec de la connexion", "settings.connection_title": "Connexion", @@ -1330,13 +1326,6 @@ export default { "settings.developer_mode_title": "Mode développeur", "settings.developer_panel_disabled": "Panneau développeur activé.", "settings.developer_panel_enabled": "Panneau développeur activé.", - "settings.devlog_cleared": "Sortie du journal développeur effacée.", - "settings.devlog_clipboard_unavailable": "Le presse-papiers est indisponible dans cet environnement.", - "settings.devlog_copied": "Sortie du journal développeur copiée.", - "settings.devlog_copy_failed": "Échec de la copie de la sortie du journal développeur.", - "settings.devlog_export_failed": "Échec de l'export de la sortie du journal développeur.", - "settings.devlog_export_unavailable": "L'export est indisponible dans cet environnement.", - "settings.devlog_exported": "Sortie du journal développeur exportée.", "settings.devtools_desc": "Santé des sidecars, capacités et piste d'audit.", "settings.devtools_title": "Outils de dev", "settings.diag_approval": "Approbation : {mode} ({ms}ms)", @@ -1951,8 +1940,6 @@ export default { "status.send_feedback": "Envoyer un retour", "status.settings": "Paramètres", "status.starting_engine": "Démarrage du moteur", - "system.cache_repair_requires_desktop": "La réparation du cache nécessite l'application desktop.", - "system.docker_cleanup_requires_desktop": "Le nettoyage Docker nécessite l'application desktop.", "system.reload_body_agents": "OpenCode charge les agents au démarrage. Rechargez le moteur pour rendre les agents mis à jour disponibles.", "system.reload_body_commands": "OpenCode charge les Commands au démarrage. Rechargez le moteur pour rendre les Commands mis à jour disponibles.", "system.reload_body_config": "OpenCode lit opencode.json au démarrage. Rechargez le moteur pour appliquer les changements de configuration.", @@ -1965,8 +1952,6 @@ export default { "system.reload_required": "Rechargement requis", "system.reload_unavailable": "Le rechargement n'est pas disponible pour ce worker.", "system.stop_active_runs_before_reset": "Arrêtez les exécutions actives avant de réinitialiser.", - "system.stop_runs_before_update": "Arrêtez les exécutions actives avant d'installer une mise à jour.", - "system.updates_not_supported": "Les mises à jour ne sont pas prises en charge dans cet environnement.", "time.hours_ago": "il y a {count} h", "time.just_now": "à l'instant", "time.minutes_ago": "il y a {count} min", diff --git a/apps/app/src/i18n/locales/ja.ts b/apps/app/src/i18n/locales/ja.ts index f22e9cdd7..52de08146 100644 --- a/apps/app/src/i18n/locales/ja.ts +++ b/apps/app/src/i18n/locales/ja.ts @@ -1252,14 +1252,11 @@ export default { "settings.auto_compact_desc": "このワークスペースのOpenCode compaction.autoを制御します。変更後にエンジンをリロードしてください。", "settings.auto_update_desc": "アップデートを自動的にダウンロードします(インストール前に確認)。", "settings.auto_update_title": "自動アップデート", - "settings.available_count": "{count}件利用可能", "settings.background_checks_desc": "OpenWorkは起動時に常にチェックします。また1日1回バックグラウンドでチェックします。", "settings.background_checks_title": "バックグラウンドチェック", "settings.base_url_unavailable": "ベースURLが利用できません", "settings.binary_unavailable": "バイナリが利用できません", - "settings.cache_nothing_to_repair": "OpenCodeキャッシュが見つかりません。修復の必要はありません。", "settings.cache_repair_requires_desktop": "キャッシュの修復にはデスクトップアプリが必要です", - "settings.cache_repaired": "OpenCodeキャッシュを修復しました。エンジンが実行中だった場合は再起動してください。", "settings.cap_browser_tools": "ブラウザツール: {value}", "settings.cap_commands": "コマンド: {value}", "settings.cap_config": "設定: {value}", @@ -1285,7 +1282,6 @@ export default { "settings.configure": "設定", "settings.connect_opencode_hint": "プロバイダーを読み込むにはOpenCodeに接続してください。", "settings.connect_provider": "プロバイダーを接続", - "settings.connected_count": "{count}件接続済み", "settings.connection": "接続", "settings.connection_failed": "接続に失敗しました", "settings.connection_title": "接続", @@ -1312,13 +1308,6 @@ export default { "settings.developer_mode_title": "デベロッパーモード", "settings.developer_panel_disabled": "デベロッパーパネルが無効になりました。", "settings.developer_panel_enabled": "デベロッパーパネルが有効になりました。", - "settings.devlog_cleared": "デベロッパーログ出力をクリアしました。", - "settings.devlog_clipboard_unavailable": "この環境ではクリップボードを使用できません。", - "settings.devlog_copied": "デベロッパーログ出力をコピーしました。", - "settings.devlog_copy_failed": "デベロッパーログ出力のコピーに失敗しました。", - "settings.devlog_export_failed": "デベロッパーログ出力のエクスポートに失敗しました。", - "settings.devlog_export_unavailable": "この環境ではエクスポートを使用できません。", - "settings.devlog_exported": "デベロッパーログ出力をエクスポートしました。", "settings.devtools_desc": "サイドカーのヘルス、機能、監査証跡。", "settings.devtools_title": "デベロッパーツール", "settings.diag_approval": "承認: {mode}({ms}ms)", @@ -1918,8 +1907,6 @@ export default { "status.send_feedback": "フィードバックを送信", "status.settings": "設定", "status.starting_engine": "エンジンを起動中", - "system.cache_repair_requires_desktop": "キャッシュの修復にはデスクトップアプリが必要です。", - "system.docker_cleanup_requires_desktop": "Dockerクリーンアップにはデスクトップアプリが必要です。", "system.reload_body_agents": "OpenCodeは起動時にエージェントを読み込みます。更新されたエージェントを利用可能にするにはエンジンをリロードしてください。", "system.reload_body_commands": "OpenCodeは起動時にコマンドを読み込みます。更新されたコマンドを利用可能にするにはエンジンをリロードしてください。", "system.reload_body_config": "OpenCodeは起動時にopencode.jsonを読み込みます。設定変更を適用するにはエンジンをリロードしてください。", @@ -1932,8 +1919,6 @@ export default { "system.reload_required": "リロードが必要", "system.reload_unavailable": "このワーカーではリロードできません。", "system.stop_active_runs_before_reset": "リセットする前にアクティブな実行を停止してください。", - "system.stop_runs_before_update": "アップデートをインストールする前にアクティブな実行を停止してください。", - "system.updates_not_supported": "この環境ではアップデートはサポートされていません。", "time.hours_ago": "{count}時間前", "time.just_now": "たった今", "time.minutes_ago": "{count}分前", diff --git a/apps/app/src/i18n/locales/pt-BR.ts b/apps/app/src/i18n/locales/pt-BR.ts index 96e94bddf..806e5f9c4 100644 --- a/apps/app/src/i18n/locales/pt-BR.ts +++ b/apps/app/src/i18n/locales/pt-BR.ts @@ -1253,14 +1253,11 @@ export default { "settings.auto_compact_desc": "Controla a compactação automática do OpenCode para este workspace. Recarregue o engine após alterar.", "settings.auto_update_desc": "Baixar atualizações automaticamente (solicita para", "settings.auto_update_title": "Atualização automática", - "settings.available_count": "{count} disponíveis", "settings.background_checks_desc": "O OpenWork sempre verifica ao iniciar. Também verifica uma vez", "settings.background_checks_title": "Verificações em segundo plano", "settings.base_url_unavailable": "URL base indisponível", "settings.binary_unavailable": "Binário indisponível", - "settings.cache_nothing_to_repair": "Nenhum cache do OpenCode encontrado. Nada para reparar.", "settings.cache_repair_requires_desktop": "O reparo de cache requer o app desktop", - "settings.cache_repaired": "Cache do OpenCode reparado. Reinicie o engine se estava em execução.", "settings.cap_browser_tools": "Ferramentas do navegador: {value}", "settings.cap_commands": "Comandos: {value}", "settings.cap_config": "Config: {value}", @@ -1286,7 +1283,6 @@ export default { "settings.configure": "Configurar", "settings.connect_opencode_hint": "Conecte ao OpenCode para carregar provedores.", "settings.connect_provider": "Conectar provedor", - "settings.connected_count": "{count} conectados", "settings.connection": "Conexão", "settings.connection_failed": "Falha na conexão", "settings.connection_title": "Conexão", @@ -1313,13 +1309,6 @@ export default { "settings.developer_mode_title": "Modo desenvolvedor", "settings.developer_panel_disabled": "Painel de desenvolvedor desativado.", "settings.developer_panel_enabled": "Painel de desenvolvedor ativado.", - "settings.devlog_cleared": "Log de desenvolvedor limpo.", - "settings.devlog_clipboard_unavailable": "Área de transferência não disponível neste ambiente.", - "settings.devlog_copied": "Log de desenvolvedor copiado.", - "settings.devlog_copy_failed": "Falha ao copiar log de desenvolvedor.", - "settings.devlog_export_failed": "Falha ao exportar log de desenvolvedor.", - "settings.devlog_export_unavailable": "Exportação não disponível neste ambiente.", - "settings.devlog_exported": "Log de desenvolvedor exportado.", "settings.devtools_desc": "Saúde do sidecar, capacidades e trilha de auditoria.", "settings.devtools_title": "Ferramentas de desenvolvimento", "settings.diag_approval": "Aprovação: {mode} ({ms}ms)", @@ -1919,8 +1908,6 @@ export default { "status.send_feedback": "Enviar feedback", "status.settings": "Configurações", "status.starting_engine": "Iniciando engine", - "system.cache_repair_requires_desktop": "Reparo de cache requer o app desktop.", - "system.docker_cleanup_requires_desktop": "Limpeza do Docker requer o app desktop.", "system.reload_body_agents": "O OpenCode carrega agents na inicialização. Recarregue o engine para disponibilizar agents atualizados.", "system.reload_body_commands": "O OpenCode carrega comandos na inicialização. Recarregue o engine para disponibilizar comandos atualizados.", "system.reload_body_config": "O OpenCode lê opencode.json na inicialização. Recarregue o engine para aplicar mudanças de configuração.", @@ -1933,8 +1920,6 @@ export default { "system.reload_required": "Recarregamento necessário", "system.reload_unavailable": "Recarregamento não disponível para este worker.", "system.stop_active_runs_before_reset": "Pare as execuções ativas antes de redefinir.", - "system.stop_runs_before_update": "Pare as execuções ativas antes de instalar uma atualização.", - "system.updates_not_supported": "Atualizações não são suportadas neste ambiente.", "time.hours_ago": "{count}h atrás", "time.just_now": "agora mesmo", "time.minutes_ago": "{count}min atrás", diff --git a/apps/app/src/i18n/locales/th.ts b/apps/app/src/i18n/locales/th.ts index 94ac119a1..c0989a5d8 100644 --- a/apps/app/src/i18n/locales/th.ts +++ b/apps/app/src/i18n/locales/th.ts @@ -1253,14 +1253,11 @@ export default { "settings.auto_compact_desc": "ควบคุม compaction.auto ของ OpenCode สำหรับพื้นที่ทำงานนี้ รีโหลด engine หลังเปลี่ยน", "settings.auto_update_desc": "ดาวน์โหลดอัปเดตอัตโนมัติ (จะถามก่อนติดตั้ง)", "settings.auto_update_title": "อัปเดตอัตโนมัติ", - "settings.available_count": "{count} พร้อมใช้งาน", "settings.background_checks_desc": "OpenWork ตรวจสอบเสมอตอนเปิดแอป ตรวจสอบเพิ่มอีกวันละครั้ง", "settings.background_checks_title": "ตรวจสอบในพื้นหลัง", "settings.base_url_unavailable": "URL ฐานไม่พร้อมใช้งาน", "settings.binary_unavailable": "Binary ไม่พร้อมใช้งาน", - "settings.cache_nothing_to_repair": "ไม่พบแคช OpenCode ไม่มีอะไรต้องซ่อมแซม", "settings.cache_repair_requires_desktop": "การซ่อมแซมแคชต้องใช้แอปเดสก์ท็อป", - "settings.cache_repaired": "ซ่อมแซมแคช OpenCode แล้ว รีสตาร์ท engine หากกำลังทำงาน", "settings.cap_browser_tools": "เครื่องมือเบราว์เซอร์: {value}", "settings.cap_commands": "คำสั่ง: {value}", "settings.cap_config": "Config: {value}", @@ -1286,7 +1283,6 @@ export default { "settings.configure": "ตั้งค่า", "settings.connect_opencode_hint": "เชื่อมต่อ OpenCode เพื่อโหลดผู้ให้บริการ", "settings.connect_provider": "เชื่อมต่อผู้ให้บริการ", - "settings.connected_count": "{count} เชื่อมต่อแล้ว", "settings.connection": "การเชื่อมต่อ", "settings.connection_failed": "เชื่อมต่อล้มเหลว", "settings.connection_title": "การเชื่อมต่อ", @@ -1313,13 +1309,6 @@ export default { "settings.developer_mode_title": "โหมดนักพัฒนา", "settings.developer_panel_disabled": "ปิดแผงนักพัฒนาแล้ว", "settings.developer_panel_enabled": "เปิดแผงนักพัฒนาแล้ว", - "settings.devlog_cleared": "ล้าง log นักพัฒนาแล้ว", - "settings.devlog_clipboard_unavailable": "คลิปบอร์ดไม่พร้อมใช้งานในสภาพแวดล้อมนี้", - "settings.devlog_copied": "คัดลอก log นักพัฒนาแล้ว", - "settings.devlog_copy_failed": "ไม่สามารถคัดลอก log นักพัฒนาได้", - "settings.devlog_export_failed": "ไม่สามารถส่งออก log นักพัฒนาได้", - "settings.devlog_export_unavailable": "การส่งออกไม่พร้อมใช้งานในสภาพแวดล้อมนี้", - "settings.devlog_exported": "ส่งออก log นักพัฒนาแล้ว", "settings.devtools_desc": "สถานะ sidecar, ความสามารถ และบันทึกการตรวจสอบ", "settings.devtools_title": "เครื่องมือนักพัฒนา", "settings.diag_approval": "การอนุมัติ: {mode} ({ms}ms)", @@ -1919,8 +1908,6 @@ export default { "status.send_feedback": "ส่งข้อเสนอแนะ", "status.settings": "การตั้งค่า", "status.starting_engine": "กำลังเริ่ม engine", - "system.cache_repair_requires_desktop": "การซ่อมแคชต้องใช้แอปเดสก์ท็อป", - "system.docker_cleanup_requires_desktop": "การล้าง Docker ต้องใช้แอปเดสก์ท็อป", "system.reload_body_agents": "OpenCode โหลด agent ตอนเริ่มต้น โหลด engine ใหม่เพื่อให้ agent ที่อัปเดตพร้อมใช้งาน", "system.reload_body_commands": "OpenCode โหลดคำสั่งตอนเริ่มต้น โหลด engine ใหม่เพื่อให้คำสั่งที่อัปเดตพร้อมใช้งาน", "system.reload_body_config": "OpenCode อ่าน opencode.json ตอนเริ่มต้น โหลด engine ใหม่เพื่อใช้การเปลี่ยนแปลงการตั้งค่า", @@ -1933,8 +1920,6 @@ export default { "system.reload_required": "ต้องโหลดใหม่", "system.reload_unavailable": "ไม่สามารถโหลดใหม่สำหรับ worker นี้", "system.stop_active_runs_before_reset": "หยุดการทำงานที่กำลังดำเนินอยู่ก่อนรีเซ็ต", - "system.stop_runs_before_update": "หยุดการทำงานที่กำลังดำเนินอยู่ก่อนติดตั้งอัปเดต", - "system.updates_not_supported": "ไม่รองรับการอัปเดตในสภาพแวดล้อมนี้", "time.hours_ago": "{count} ชั่วโมงที่แล้ว", "time.just_now": "เมื่อสักครู่", "time.minutes_ago": "{count} นาทีที่แล้ว", diff --git a/apps/app/src/i18n/locales/vi.ts b/apps/app/src/i18n/locales/vi.ts index 1076b9ebc..9a45c8bd8 100644 --- a/apps/app/src/i18n/locales/vi.ts +++ b/apps/app/src/i18n/locales/vi.ts @@ -1253,14 +1253,11 @@ export default { "settings.auto_compact_desc": "Kiểm soát thu gọn ngữ cảnh tự động của OpenCode cho workspace này. Tải lại engine sau khi thay đổi.", "settings.auto_update_desc": "Tự động tải bản cập nhật (hỏi trước khi", "settings.auto_update_title": "Tự động cập nhật", - "settings.available_count": "{count} khả dụng", "settings.background_checks_desc": "OpenWork luôn kiểm tra khi khởi động. Cũng kiểm tra một lần", "settings.background_checks_title": "Kiểm tra nền", "settings.base_url_unavailable": "URL cơ sở không khả dụng", "settings.binary_unavailable": "File nhị phân không khả dụng", - "settings.cache_nothing_to_repair": "Không tìm thấy bộ nhớ đệm OpenCode. Không cần sửa.", "settings.cache_repair_requires_desktop": "Sửa bộ nhớ đệm yêu cầu ứng dụng desktop", - "settings.cache_repaired": "Đã sửa bộ nhớ đệm OpenCode. Khởi động lại engine nếu đang chạy.", "settings.cap_browser_tools": "Công cụ trình duyệt: {value}", "settings.cap_commands": "Commands: {value}", "settings.cap_config": "Cấu hình: {value}", @@ -1286,7 +1283,6 @@ export default { "settings.configure": "Cấu hình", "settings.connect_opencode_hint": "Kết nối OpenCode để tải provider.", "settings.connect_provider": "Kết nối provider", - "settings.connected_count": "{count} đã kết nối", "settings.connection": "Kết nối", "settings.connection_failed": "Kết nối thất bại", "settings.connection_title": "Kết nối", @@ -1313,13 +1309,6 @@ export default { "settings.developer_mode_title": "Chế độ nhà phát triển", "settings.developer_panel_disabled": "Đã tắt bảng nhà phát triển.", "settings.developer_panel_enabled": "Đã bật bảng nhà phát triển.", - "settings.devlog_cleared": "Đã xóa log nhà phát triển.", - "settings.devlog_clipboard_unavailable": "Clipboard không khả dụng trong môi trường này.", - "settings.devlog_copied": "Đã sao chép log nhà phát triển.", - "settings.devlog_copy_failed": "Không thể sao chép log nhà phát triển.", - "settings.devlog_export_failed": "Không thể xuất log nhà phát triển.", - "settings.devlog_export_unavailable": "Xuất không khả dụng trong môi trường này.", - "settings.devlog_exported": "Đã xuất log nhà phát triển.", "settings.devtools_desc": "Trạng thái sidecar, khả năng và nhật ký kiểm toán.", "settings.devtools_title": "Devtools", "settings.diag_approval": "Phê duyệt: {mode} ({ms}ms)", @@ -1919,8 +1908,6 @@ export default { "status.send_feedback": "Gửi phản hồi", "status.settings": "Cài đặt", "status.starting_engine": "Đang khởi động engine", - "system.cache_repair_requires_desktop": "Sửa cache cần ứng dụng desktop.", - "system.docker_cleanup_requires_desktop": "Dọn dẹp Docker cần ứng dụng desktop.", "system.reload_body_agents": "OpenCode tải agent khi khởi động. Tải lại engine để agent cập nhật có sẵn.", "system.reload_body_commands": "OpenCode tải command khi khởi động. Tải lại engine để command cập nhật có sẵn.", "system.reload_body_config": "OpenCode đọc opencode.json khi khởi động. Tải lại engine để áp dụng thay đổi cấu hình.", @@ -1933,8 +1920,6 @@ export default { "system.reload_required": "Cần tải lại", "system.reload_unavailable": "Không thể tải lại cho worker này.", "system.stop_active_runs_before_reset": "Dừng các lượt chạy đang hoạt động trước khi đặt lại.", - "system.stop_runs_before_update": "Dừng các lượt chạy đang hoạt động trước khi cài đặt bản cập nhật.", - "system.updates_not_supported": "Cập nhật không được hỗ trợ trong môi trường này.", "time.hours_ago": "{count} giờ trước", "time.just_now": "vừa xong", "time.minutes_ago": "{count} phút trước", diff --git a/apps/app/src/i18n/locales/zh.ts b/apps/app/src/i18n/locales/zh.ts index 3418fb564..18b3077af 100644 --- a/apps/app/src/i18n/locales/zh.ts +++ b/apps/app/src/i18n/locales/zh.ts @@ -1256,14 +1256,11 @@ export default { "settings.auto_compact_desc": "控制此工作区的OpenCode compaction.auto。更改后请重载引擎。", "settings.auto_update_desc": "自动下载更新(安装前会提示)", "settings.auto_update_title": "自动更新", - "settings.available_count": "{count}个可用", "settings.background_checks_desc": "OpenWork启动时始终检查。同时每天检查一次。", "settings.background_checks_title": "后台检查", "settings.base_url_unavailable": "基础URL不可用", "settings.binary_unavailable": "二进制文件不可用", - "settings.cache_nothing_to_repair": "未找到OpenCode缓存。无需修复。", "settings.cache_repair_requires_desktop": "缓存修复需要桌面应用", - "settings.cache_repaired": "OpenCode缓存已修复。如果引擎正在运行,请重启。", "settings.cap_browser_tools": "浏览器工具:{value}", "settings.cap_commands": "命令:{value}", "settings.cap_config": "配置:{value}", @@ -1289,7 +1286,6 @@ export default { "settings.configure": "配置", "settings.connect_opencode_hint": "连接OpenCode以加载提供商。", "settings.connect_provider": "连接提供商", - "settings.connected_count": "{count}个已连接", "settings.connection": "连接", "settings.connection_failed": "连接失败", "settings.connection_title": "连接", @@ -1316,13 +1312,6 @@ export default { "settings.developer_mode_title": "开发者模式", "settings.developer_panel_disabled": "开发者面板已禁用。", "settings.developer_panel_enabled": "开发者面板已启用。", - "settings.devlog_cleared": "已清除开发者日志输出。", - "settings.devlog_clipboard_unavailable": "此环境中剪贴板不可用。", - "settings.devlog_copied": "已复制开发者日志输出。", - "settings.devlog_copy_failed": "复制开发者日志输出失败。", - "settings.devlog_export_failed": "导出开发者日志输出失败。", - "settings.devlog_export_unavailable": "此环境中导出不可用。", - "settings.devlog_exported": "已导出开发者日志输出。", "settings.devtools_desc": "Sidecar健康状态、功能和审计追踪。", "settings.devtools_title": "开发者工具", "settings.diag_approval": "审批:{mode}({ms}ms)", @@ -1922,8 +1911,6 @@ export default { "status.send_feedback": "发送反馈", "status.settings": "设置", "status.starting_engine": "正在启动引擎", - "system.cache_repair_requires_desktop": "缓存修复需要桌面应用。", - "system.docker_cleanup_requires_desktop": "Docker清理需要桌面应用。", "system.reload_body_agents": "OpenCode在启动时加载Agent。重新加载引擎以使更新的Agent可用。", "system.reload_body_commands": "OpenCode在启动时加载命令。重新加载引擎以使更新的命令可用。", "system.reload_body_config": "OpenCode在启动时读取opencode.json。重新加载引擎以应用配置变更。", @@ -1936,8 +1923,6 @@ export default { "system.reload_required": "需要重新加载", "system.reload_unavailable": "此工作区不支持重新加载。", "system.stop_active_runs_before_reset": "请先停止活跃的运行再重置。", - "system.stop_runs_before_update": "安装更新前请先停止活跃的运行。", - "system.updates_not_supported": "此环境不支持更新。", "time.hours_ago": "{count}小时前", "time.just_now": "刚刚", "time.minutes_ago": "{count}分钟前", diff --git a/scripts/i18n-audit.mjs b/scripts/i18n-audit.mjs index f73fddc39..5d3c8c7be 100644 --- a/scripts/i18n-audit.mjs +++ b/scripts/i18n-audit.mjs @@ -4,6 +4,7 @@ * * Usage: * node scripts/i18n-audit.mjs # full audit (default, excludes --hardcoded, --prune, --sort) + * node scripts/i18n-audit.mjs --ci # same as default but does not fail on missing non-en keys * node scripts/i18n-audit.mjs --missing # missing keys (in EN but not in locale) * node scripts/i18n-audit.mjs --orphan # orphan keys (in locale but not in EN) * node scripts/i18n-audit.mjs --duplicates # duplicate keys in any locale @@ -29,8 +30,10 @@ const LOCALES = ["ja", "zh", "vi", "pt-BR", "th", "fr", "ca", "es"]; const EN_FILE = join(LOCALES_DIR, "en.ts"); const mode = process.argv[2] ?? "--all"; +const isCi = mode === "--ci"; +const isAll = mode === "--all" || isCi; const EXCLUDED_FROM_ALL = new Set(["--hardcoded"]); -const shouldRun = (...modes) => (mode === "--all" && !modes.some((m) => EXCLUDED_FROM_ALL.has(m))) || modes.includes(mode); +const shouldRun = (...modes) => (isAll && !modes.some((m) => EXCLUDED_FROM_ALL.has(m))) || modes.includes(mode); // --------------------------------------------------------------------------- // Helpers @@ -138,7 +141,7 @@ if (shouldRun("--missing")) { console.log(` ${locale}: ✓ no missing`); } else { console.log(` ${locale}: ✗ ${missing.length} missing`); - exitCode = 1; + if (!isCi) exitCode = 1; if (mode !== "--summary") { for (const [prefix, count] of groupByPrefix(missing).slice(0, 15)) { console.log(` ${String(count).padStart(4)} ${prefix}.*`); @@ -213,10 +216,12 @@ if (shouldRun("--unused", "--prune")) { for (const [prefix, count] of groupByPrefix(unused).slice(0, 15)) { console.log(` ${String(count).padStart(4)} ${prefix}.*`); } - if (mode === "--unused") { - console.log(); - for (const key of unused) console.log(` ${key}`); - } + console.log(); + for (const key of unused) console.log(` ${key}`); + } + if (mode !== "--prune") { + console.log(); + console.log(" (auto-fix with --prune option)"); } } @@ -378,7 +383,7 @@ if (shouldRun("--placeholders")) { if (!localePh.includes(ph)) { console.log(` ✗ ${locale}/${key}: missing placeholder ${ph}`); problems++; - exitCode = 1; + if (!(isCi && ph === "{plural}")) exitCode = 1; } } }