diff --git a/src/api/providers/claude-code.ts b/src/api/providers/claude-code.ts index c4847d53f5..0603d7a014 100644 --- a/src/api/providers/claude-code.ts +++ b/src/api/providers/claude-code.ts @@ -10,7 +10,7 @@ import { ApiStreamUsageChunk, type ApiStream } from "../transform/stream" import { runClaudeCode } from "../../integrations/claude-code/run" import { ClaudeCodeMessage } from "../../integrations/claude-code/types" import { BaseProvider } from "./base-provider" -import i18n from "../../i18n" +import { t } from "../../i18n" export class ClaudeCodeHandler extends BaseProvider implements ApiHandler { private options: ApiHandlerOptions @@ -71,10 +71,8 @@ export class ClaudeCodeHandler extends BaseProvider implements ApiHandler { if (exitCode !== null && exitCode !== 0) { throw new Error( - i18n.t("common:errors.claude_code_process_exited", { - exitCode, - errorOutput: errorOutput.trim(), - }), + t("common:errors.claudeCodeProcessExited", { exitCode }) + + (errorOutput ? ` ${t("common:errors.errorOutput", { output: errorOutput.trim() })}` : ""), ) } @@ -104,12 +102,10 @@ export class ClaudeCodeHandler extends BaseProvider implements ApiHandler { if (message.stop_reason !== null && message.stop_reason !== "tool_use") { const errorMessage = message.content[0]?.text || - i18n.t("common:errors.claude_code_stopped", { - stopReason: message.stop_reason, - }) + t("common:errors.claudeCodeStoppedWithReason", { reason: message.stop_reason }) if (errorMessage.includes("Invalid model name")) { - throw new Error(errorMessage + `\n\n` + i18n.t("common:errors.claude_code_invalid_model")) + throw new Error(errorMessage + `\n\n${t("common:errors.apiKeyModelPlanMismatch")}`) } throw new Error(errorMessage) diff --git a/src/i18n/locales/ca/common.json b/src/i18n/locales/ca/common.json index ece3465bed..08fd317e1c 100644 --- a/src/i18n/locales/ca/common.json +++ b/src/i18n/locales/ca/common.json @@ -64,9 +64,10 @@ "condense_context_grew": "La mida del context ha augmentat durant la condensació; s'omet aquest intent", "share_task_failed": "Ha fallat compartir la tasca. Si us plau, torna-ho a provar.", "share_no_active_task": "No hi ha cap tasca activa per compartir", - "claude_code_process_exited": "El procés de Claude Code ha finalitzat amb el codi {{exitCode}}. Sortida d'error: {{errorOutput}}", - "claude_code_stopped": "Claude Code s'ha aturat per la raó: {{stopReason}}", - "claude_code_invalid_model": "Les claus API i els plans de subscripció permeten models diferents. Assegura't que el model seleccionat estigui inclòs en el teu pla." + "claudeCodeProcessExited": "El procés Claude Code ha sortit amb codi {{exitCode}}.", + "errorOutput": "Sortida d'error: {{output}}", + "claudeCodeStoppedWithReason": "Claude Code s'ha aturat per la raó: {{reason}}", + "apiKeyModelPlanMismatch": "Les claus API i els plans de subscripció permeten models diferents. Assegura't que el model seleccionat estigui inclòs al teu pla." }, "warnings": { "no_terminal_content": "No s'ha seleccionat contingut de terminal", diff --git a/src/i18n/locales/de/common.json b/src/i18n/locales/de/common.json index 7d4e30c89b..daff62052a 100644 --- a/src/i18n/locales/de/common.json +++ b/src/i18n/locales/de/common.json @@ -60,9 +60,10 @@ "condense_context_grew": "Kontextgröße ist während der Verdichtung gewachsen; dieser Versuch wird übersprungen", "share_task_failed": "Teilen der Aufgabe fehlgeschlagen. Bitte versuche es erneut.", "share_no_active_task": "Keine aktive Aufgabe zum Teilen", - "claude_code_process_exited": "Claude Code Prozess beendet mit Code {{exitCode}}. Fehlerausgabe: {{errorOutput}}", - "claude_code_stopped": "Claude Code gestoppt mit Grund: {{stopReason}}", - "claude_code_invalid_model": "API-Schlüssel und Abonnementpläne erlauben verschiedene Modelle. Stelle sicher, dass das ausgewählte Modell in deinem Plan enthalten ist." + "claudeCodeProcessExited": "Claude Code Prozess wurde mit Code {{exitCode}} beendet.", + "errorOutput": "Fehlerausgabe: {{output}}", + "claudeCodeStoppedWithReason": "Claude Code wurde mit Grund gestoppt: {{reason}}", + "apiKeyModelPlanMismatch": "API-Schlüssel und Abonnement-Pläne erlauben verschiedene Modelle. Stelle sicher, dass das ausgewählte Modell in deinem Plan enthalten ist." }, "warnings": { "no_terminal_content": "Kein Terminal-Inhalt ausgewählt", diff --git a/src/i18n/locales/en/common.json b/src/i18n/locales/en/common.json index 19fef67922..7317818427 100644 --- a/src/i18n/locales/en/common.json +++ b/src/i18n/locales/en/common.json @@ -60,9 +60,10 @@ "condense_context_grew": "Context size increased during condensing; skipping this attempt", "share_task_failed": "Failed to share task. Please try again.", "share_no_active_task": "No active task to share", - "claude_code_process_exited": "Claude Code process exited with code {{exitCode}}. Error output: {{errorOutput}}", - "claude_code_stopped": "Claude Code stopped with reason: {{stopReason}}", - "claude_code_invalid_model": "API keys and subscription plans allow different models. Make sure the selected model is included in your plan." + "claudeCodeProcessExited": "Claude Code process exited with code {{exitCode}}.", + "errorOutput": "Error output: {{output}}", + "claudeCodeStoppedWithReason": "Claude Code stopped with reason: {{reason}}", + "apiKeyModelPlanMismatch": "API keys and subscription plans allow different models. Make sure the selected model is included in your plan." }, "warnings": { "no_terminal_content": "No terminal content selected", diff --git a/src/i18n/locales/es/common.json b/src/i18n/locales/es/common.json index 35fa51a19c..8066d52ca6 100644 --- a/src/i18n/locales/es/common.json +++ b/src/i18n/locales/es/common.json @@ -60,9 +60,10 @@ "condense_context_grew": "El tamaño del contexto aumentó durante la condensación; se omite este intento", "share_task_failed": "Error al compartir la tarea. Por favor, inténtalo de nuevo.", "share_no_active_task": "No hay tarea activa para compartir", - "claude_code_process_exited": "El proceso de Claude Code finalizó con el código {{exitCode}}. Salida de error: {{errorOutput}}", - "claude_code_stopped": "Claude Code se detuvo por la razón: {{stopReason}}", - "claude_code_invalid_model": "Las claves API y los planes de suscripción permiten diferentes modelos. Asegúrate de que el modelo seleccionado esté incluido en tu plan." + "claudeCodeProcessExited": "El proceso de Claude Code terminó con código {{exitCode}}.", + "errorOutput": "Salida de error: {{output}}", + "claudeCodeStoppedWithReason": "Claude Code se detuvo por la razón: {{reason}}", + "apiKeyModelPlanMismatch": "Las claves API y los planes de suscripción permiten diferentes modelos. Asegúrate de que el modelo seleccionado esté incluido en tu plan." }, "warnings": { "no_terminal_content": "No hay contenido de terminal seleccionado", diff --git a/src/i18n/locales/fr/common.json b/src/i18n/locales/fr/common.json index 165a3ca375..68378277e9 100644 --- a/src/i18n/locales/fr/common.json +++ b/src/i18n/locales/fr/common.json @@ -60,9 +60,10 @@ "condense_context_grew": "La taille du contexte a augmenté pendant la condensation ; cette tentative est ignorée", "share_task_failed": "Échec du partage de la tâche. Veuillez réessayer.", "share_no_active_task": "Aucune tâche active à partager", - "claude_code_process_exited": "Le processus Claude Code s'est terminé avec le code {{exitCode}}. Sortie d'erreur : {{errorOutput}}", - "claude_code_stopped": "Claude Code s'est arrêté pour la raison : {{stopReason}}", - "claude_code_invalid_model": "Les clés API et les plans d'abonnement autorisent différents modèles. Assurez-vous que le modèle sélectionné est inclus dans votre plan." + "claudeCodeProcessExited": "Le processus Claude Code s'est terminé avec le code {{exitCode}}.", + "errorOutput": "Sortie d'erreur : {{output}}", + "claudeCodeStoppedWithReason": "Claude Code s'est arrêté pour la raison : {{reason}}", + "apiKeyModelPlanMismatch": "Les clés API et les plans d'abonnement permettent différents modèles. Assurez-vous que le modèle sélectionné est inclus dans votre plan." }, "warnings": { "no_terminal_content": "Aucun contenu de terminal sélectionné", diff --git a/src/i18n/locales/hi/common.json b/src/i18n/locales/hi/common.json index 7fed5060ac..b7701c4c5f 100644 --- a/src/i18n/locales/hi/common.json +++ b/src/i18n/locales/hi/common.json @@ -60,9 +60,10 @@ "condense_context_grew": "संक्षिप्तीकरण के दौरान संदर्भ का आकार बढ़ गया; इस प्रयास को छोड़ा जा रहा है", "share_task_failed": "कार्य साझा करने में विफल। कृपया पुनः प्रयास करें।", "share_no_active_task": "साझा करने के लिए कोई सक्रिय कार्य नहीं", - "claude_code_process_exited": "क्लाउड कोड प्रक्रिया कोड {{exitCode}} के साथ समाप्त हुई। त्रुटि आउटपुट: {{errorOutput}}", - "claude_code_stopped": "क्लाउड कोड इस कारण से रुका: {{stopReason}}", - "claude_code_invalid_model": "एपीआई कुंजी और सदस्यता योजनाएं विभिन्न मॉडलों की अनुमति देती हैं। सुनिश्चित करें कि चयनित मॉडल आपकी योजना में शामिल है।" + "claudeCodeProcessExited": "Claude Code प्रक्रिया कोड {{exitCode}} के साथ समाप्त हुई।{{errorOutput}}", + "errorOutput": "त्रुटि आउटपुट: {{output}}", + "claudeCodeStoppedWithReason": "Claude Code इस कारण से रुका: {{reason}}", + "apiKeyModelPlanMismatch": "API कुंजी और सब्सक्रिप्शन प्लान अलग-अलग मॉडल की अनुमति देते हैं। सुनिश्चित करें कि चयनित मॉडल आपकी योजना में शामिल है।" }, "warnings": { "no_terminal_content": "कोई टर्मिनल सामग्री चयनित नहीं", diff --git a/src/i18n/locales/id/common.json b/src/i18n/locales/id/common.json index 8a1a7c1829..fed31011bc 100644 --- a/src/i18n/locales/id/common.json +++ b/src/i18n/locales/id/common.json @@ -60,9 +60,10 @@ "condense_context_grew": "Ukuran konteks bertambah saat mengompres; melewati percobaan ini", "share_task_failed": "Gagal membagikan tugas. Silakan coba lagi.", "share_no_active_task": "Tidak ada tugas aktif untuk dibagikan", - "claude_code_process_exited": "Proses Claude Code keluar dengan kode {{exitCode}}. Output error: {{errorOutput}}", - "claude_code_stopped": "Claude Code berhenti dengan alasan: {{stopReason}}", - "claude_code_invalid_model": "Kunci API dan paket langganan mengizinkan model yang berbeda. Pastikan model yang dipilih termasuk dalam paket Anda." + "claudeCodeProcessExited": "Proses Claude Code keluar dengan kode {{exitCode}}.", + "errorOutput": "Output error: {{output}}", + "claudeCodeStoppedWithReason": "Claude Code berhenti karena alasan: {{reason}}", + "apiKeyModelPlanMismatch": "Kunci API dan paket berlangganan memungkinkan model yang berbeda. Pastikan model yang dipilih termasuk dalam paket Anda." }, "warnings": { "no_terminal_content": "Tidak ada konten terminal yang dipilih", diff --git a/src/i18n/locales/it/common.json b/src/i18n/locales/it/common.json index 54be46692a..e7168da987 100644 --- a/src/i18n/locales/it/common.json +++ b/src/i18n/locales/it/common.json @@ -60,9 +60,10 @@ "condense_context_grew": "La dimensione del contesto è aumentata durante la condensazione; questo tentativo viene saltato", "share_task_failed": "Condivisione dell'attività fallita. Riprova.", "share_no_active_task": "Nessuna attività attiva da condividere", - "claude_code_process_exited": "Il processo Claude Code è terminato con il codice {{exitCode}}. Output errore: {{errorOutput}}", - "claude_code_stopped": "Claude Code si è fermato per il motivo: {{stopReason}}", - "claude_code_invalid_model": "Le chiavi API e i piani di abbonamento consentono modelli diversi. Assicurati che il modello selezionato sia incluso nel tuo piano." + "claudeCodeProcessExited": "Il processo Claude Code è terminato con codice {{exitCode}}.", + "errorOutput": "Output di errore: {{output}}", + "claudeCodeStoppedWithReason": "Claude Code si è fermato per il motivo: {{reason}}", + "apiKeyModelPlanMismatch": "Le chiavi API e i piani di abbonamento consentono modelli diversi. Assicurati che il modello selezionato sia incluso nel tuo piano." }, "warnings": { "no_terminal_content": "Nessun contenuto del terminale selezionato", diff --git a/src/i18n/locales/ja/common.json b/src/i18n/locales/ja/common.json index 0c7e8f54e4..1342efa4a7 100644 --- a/src/i18n/locales/ja/common.json +++ b/src/i18n/locales/ja/common.json @@ -60,9 +60,10 @@ "condense_context_grew": "圧縮中にコンテキストサイズが増加しました;この試行をスキップします", "share_task_failed": "タスクの共有に失敗しました", "share_no_active_task": "共有するアクティブなタスクがありません", - "claude_code_process_exited": "Claude Codeプロセスがコード{{exitCode}}で終了しました。エラー出力:{{errorOutput}}", - "claude_code_stopped": "Claude Codeは次の理由で停止しました:{{stopReason}}", - "claude_code_invalid_model": "APIキーとサブスクリプションプランでは異なるモデルが許可されています。選択したモデルがプランに含まれていることを確認してください。" + "claudeCodeProcessExited": "Claude Code プロセスがコード {{exitCode}} で終了しました。{{errorOutput}}", + "errorOutput": "エラー出力:{{output}}", + "claudeCodeStoppedWithReason": "Claude Code が理由により停止しました:{{reason}}", + "apiKeyModelPlanMismatch": "API キーとサブスクリプションプランでは異なるモデルが利用可能です。選択したモデルがプランに含まれていることを確認してください。" }, "warnings": { "no_terminal_content": "選択されたターミナルコンテンツがありません", diff --git a/src/i18n/locales/ko/common.json b/src/i18n/locales/ko/common.json index dbd0254772..3f4cbf5790 100644 --- a/src/i18n/locales/ko/common.json +++ b/src/i18n/locales/ko/common.json @@ -60,9 +60,10 @@ "condense_context_grew": "압축 중 컨텍스트 크기가 증가했습니다; 이 시도를 건너뜁니다", "share_task_failed": "작업 공유에 실패했습니다", "share_no_active_task": "공유할 활성 작업이 없습니다", - "claude_code_process_exited": "Claude Code 프로세스가 코드 {{exitCode}}로 종료되었습니다. 오류 출력: {{errorOutput}}", - "claude_code_stopped": "Claude Code가 다음 이유로 중지되었습니다: {{stopReason}}", - "claude_code_invalid_model": "API 키 및 구독 플랜은 다른 모델을 허용합니다. 선택한 모델이 플랜에 포함되어 있는지 확인하십시오." + "claudeCodeProcessExited": "Claude Code 프로세스가 코드 {{exitCode}}로 종료되었습니다.{{errorOutput}}", + "errorOutput": "오류 출력: {{output}}", + "claudeCodeStoppedWithReason": "Claude Code가 다음 이유로 중지되었습니다: {{reason}}", + "apiKeyModelPlanMismatch": "API 키와 구독 플랜에서 다른 모델을 허용합니다. 선택한 모델이 플랜에 포함되어 있는지 확인하세요." }, "warnings": { "no_terminal_content": "선택된 터미널 내용이 없습니다", diff --git a/src/i18n/locales/nl/common.json b/src/i18n/locales/nl/common.json index 4e421f4e96..69fdc1f712 100644 --- a/src/i18n/locales/nl/common.json +++ b/src/i18n/locales/nl/common.json @@ -60,9 +60,10 @@ "condense_context_grew": "Contextgrootte nam toe tijdens comprimeren; deze poging wordt overgeslagen", "share_task_failed": "Delen van taak mislukt", "share_no_active_task": "Geen actieve taak om te delen", - "claude_code_process_exited": "Claude Code-proces afgesloten met code {{exitCode}}. Foutuitvoer: {{errorOutput}}", - "claude_code_stopped": "Claude Code gestopt met reden: {{stopReason}}", - "claude_code_invalid_model": "API-sleutels en abonnementsplannen staan verschillende modellen toe. Zorg ervoor dat het geselecteerde model in uw plan is opgenomen." + "claudeCodeProcessExited": "Claude Code proces beëindigd met code {{exitCode}}.", + "errorOutput": "Foutuitvoer: {{output}}", + "claudeCodeStoppedWithReason": "Claude Code gestopt om reden: {{reason}}", + "apiKeyModelPlanMismatch": "API-sleutels en abonnementsplannen staan verschillende modellen toe. Zorg ervoor dat het geselecteerde model is opgenomen in je plan." }, "warnings": { "no_terminal_content": "Geen terminalinhoud geselecteerd", diff --git a/src/i18n/locales/pl/common.json b/src/i18n/locales/pl/common.json index adb7921482..b206a4a1d4 100644 --- a/src/i18n/locales/pl/common.json +++ b/src/i18n/locales/pl/common.json @@ -60,9 +60,10 @@ "condense_context_grew": "Rozmiar kontekstu wzrósł podczas kondensacji; pomijanie tej próby", "share_task_failed": "Nie udało się udostępnić zadania", "share_no_active_task": "Brak aktywnego zadania do udostępnienia", - "claude_code_process_exited": "Proces Claude Code zakończył się z kodem {{exitCode}}. Wyjście błędu: {{errorOutput}}", - "claude_code_stopped": "Claude Code zatrzymany z powodu: {{stopReason}}", - "claude_code_invalid_model": "Klucze API i plany subskrypcji zezwalają na różne modele. Upewnij się, że wybrany model jest uwzględniony w Twoim planie." + "claudeCodeProcessExited": "Proces Claude Code zakończył się kodem {{exitCode}}.", + "errorOutput": "Wyjście błędu: {{output}}", + "claudeCodeStoppedWithReason": "Claude Code zatrzymał się z powodu: {{reason}}", + "apiKeyModelPlanMismatch": "Klucze API i plany subskrypcji pozwalają na różne modele. Upewnij się, że wybrany model jest zawarty w twoim planie." }, "warnings": { "no_terminal_content": "Nie wybrano zawartości terminala", diff --git a/src/i18n/locales/pt-BR/common.json b/src/i18n/locales/pt-BR/common.json index 90d59826f9..ba0ee22abe 100644 --- a/src/i18n/locales/pt-BR/common.json +++ b/src/i18n/locales/pt-BR/common.json @@ -64,9 +64,10 @@ "condense_context_grew": "O tamanho do contexto aumentou durante a condensação; pulando esta tentativa", "share_task_failed": "Falha ao compartilhar tarefa", "share_no_active_task": "Nenhuma tarefa ativa para compartilhar", - "claude_code_process_exited": "O processo Claude Code foi encerrado com o código {{exitCode}}. Saída de erro: {{errorOutput}}", - "claude_code_stopped": "Claude Code parou com o motivo: {{stopReason}}", - "claude_code_invalid_model": "Chaves de API e planos de assinatura permitem modelos diferentes. Certifique-se de que o modelo selecionado esteja incluído em seu plano." + "claudeCodeProcessExited": "O processo Claude Code saiu com código {{exitCode}}.", + "errorOutput": "Saída de erro: {{output}}", + "claudeCodeStoppedWithReason": "Claude Code parou pela razão: {{reason}}", + "apiKeyModelPlanMismatch": "Chaves de API e planos de assinatura permitem modelos diferentes. Certifique-se de que o modelo selecionado esteja incluído no seu plano." }, "warnings": { "no_terminal_content": "Nenhum conteúdo do terminal selecionado", diff --git a/src/i18n/locales/ru/common.json b/src/i18n/locales/ru/common.json index a03b6fe5a1..70793f789c 100644 --- a/src/i18n/locales/ru/common.json +++ b/src/i18n/locales/ru/common.json @@ -60,9 +60,10 @@ "condense_context_grew": "Размер контекста увеличился во время сжатия; пропускаем эту попытку", "share_task_failed": "Не удалось поделиться задачей", "share_no_active_task": "Нет активной задачи для совместного использования", - "claude_code_process_exited": "Процесс Claude Code завершился с кодом {{exitCode}}. Вывод ошибки: {{errorOutput}}", - "claude_code_stopped": "Claude Code остановлен по причине: {{stopReason}}", - "claude_code_invalid_model": "Ключи API и планы подписки разрешают использование различных моделей. Убедитесь, что выбранная модель включена в ваш план." + "claudeCodeProcessExited": "Процесс Claude Code завершился с кодом {{exitCode}}.", + "errorOutput": "Вывод ошибки: {{output}}", + "claudeCodeStoppedWithReason": "Claude Code остановился по причине: {{reason}}", + "apiKeyModelPlanMismatch": "API-ключи и планы подписки позволяют использовать разные модели. Убедитесь, что выбранная модель включена в ваш план." }, "warnings": { "no_terminal_content": "Не выбрано содержимое терминала", diff --git a/src/i18n/locales/tr/common.json b/src/i18n/locales/tr/common.json index 8a3a7d058e..7a2813422d 100644 --- a/src/i18n/locales/tr/common.json +++ b/src/i18n/locales/tr/common.json @@ -60,9 +60,10 @@ "condense_context_grew": "Sıkıştırma sırasında bağlam boyutu arttı; bu deneme atlanıyor", "share_task_failed": "Görev paylaşılamadı", "share_no_active_task": "Paylaşılacak aktif görev yok", - "claude_code_process_exited": "Claude Code işlemi {{exitCode}} koduyla çıktı. Hata çıktısı: {{errorOutput}}", - "claude_code_stopped": "Claude Code şu nedenle durduruldu: {{stopReason}}", - "claude_code_invalid_model": "API anahtarları ve abonelik planları farklı modellere izin verir. Seçilen modelin planınıza dahil olduğundan emin olun." + "claudeCodeProcessExited": "Claude Code işlemi {{exitCode}} koduyla çıktı.{{errorOutput}}", + "errorOutput": "Hata çıktısı: {{output}}", + "claudeCodeStoppedWithReason": "Claude Code şu nedenle durdu: {{reason}}", + "apiKeyModelPlanMismatch": "API anahtarları ve abonelik planları farklı modellere izin verir. Seçilen modelin planınıza dahil olduğundan emin olun." }, "warnings": { "no_terminal_content": "Seçili terminal içeriği yok", diff --git a/src/i18n/locales/vi/common.json b/src/i18n/locales/vi/common.json index 9ee95be761..1d4fb5fd8d 100644 --- a/src/i18n/locales/vi/common.json +++ b/src/i18n/locales/vi/common.json @@ -60,9 +60,10 @@ "condense_context_grew": "Kích thước ngữ cảnh tăng lên trong quá trình nén; bỏ qua lần thử này", "share_task_failed": "Không thể chia sẻ nhiệm vụ", "share_no_active_task": "Không có nhiệm vụ hoạt động để chia sẻ", - "claude_code_process_exited": "Quá trình Claude Code thoát với mã {{exitCode}}. Lỗi đầu ra: {{errorOutput}}", - "claude_code_stopped": "Claude Code dừng với lý do: {{stopReason}}", - "claude_code_invalid_model": "Khóa API và gói đăng ký cho phép các mô hình khác nhau. Đảm bảo mô hình đã chọn được bao gồm trong gói của bạn." + "claudeCodeProcessExited": "Tiến trình Claude Code thoát với mã {{exitCode}}.", + "errorOutput": "Đầu ra lỗi: {{output}}", + "claudeCodeStoppedWithReason": "Claude Code dừng lại vì lý do: {{reason}}", + "apiKeyModelPlanMismatch": "Khóa API và gói đăng ký cho phép các mô hình khác nhau. Đảm bảo rằng mô hình đã chọn được bao gồm trong gói của bạn." }, "warnings": { "no_terminal_content": "Không có nội dung terminal được chọn", diff --git a/src/i18n/locales/zh-CN/common.json b/src/i18n/locales/zh-CN/common.json index fbc9bd0130..6c623bacf6 100644 --- a/src/i18n/locales/zh-CN/common.json +++ b/src/i18n/locales/zh-CN/common.json @@ -65,9 +65,10 @@ "condense_context_grew": "压缩过程中上下文大小增加;跳过此次尝试", "share_task_failed": "分享任务失败。请重试。", "share_no_active_task": "没有活跃任务可分享", - "claude_code_process_exited": "Claude Code 进程以代码 {{exitCode}} 退出。错误输出:{{errorOutput}}", - "claude_code_stopped": "Claude Code 因以下原因停止:{{stopReason}}", - "claude_code_invalid_model": "API 密钥和订阅计划允许不同的模型。请确保所选模型包含在您的计划中。" + "claudeCodeProcessExited": "Claude Code 进程退出,退出码:{{exitCode}}。", + "errorOutput": "错误输出:{{output}}", + "claudeCodeStoppedWithReason": "Claude Code 停止,原因:{{reason}}", + "apiKeyModelPlanMismatch": "API 密钥和订阅计划支持不同的模型。请确保所选模型包含在您的计划中。" }, "warnings": { "no_terminal_content": "没有选择终端内容", diff --git a/src/i18n/locales/zh-TW/common.json b/src/i18n/locales/zh-TW/common.json index 592b77721c..5f6ad3f4b8 100644 --- a/src/i18n/locales/zh-TW/common.json +++ b/src/i18n/locales/zh-TW/common.json @@ -60,9 +60,10 @@ "condense_context_grew": "壓縮過程中上下文大小增加;跳過此次嘗試", "share_task_failed": "分享工作失敗。請重試。", "share_no_active_task": "沒有活躍的工作可分享", - "claude_code_process_exited": "Claude Code 處理程序以代碼 {{exitCode}} 結束。錯誤輸出:{{errorOutput}}", - "claude_code_stopped": "Claude Code 因以下原因停止:{{stopReason}}", - "claude_code_invalid_model": "API 金鑰和訂閱方案允許不同的模型。請確保所選模型包含在您的方案中。" + "claudeCodeProcessExited": "Claude Code 程序退出,退出碼:{{exitCode}}。{{errorOutput}}", + "errorOutput": "錯誤輸出:{{output}}", + "claudeCodeStoppedWithReason": "Claude Code 停止,原因:{{reason}}", + "apiKeyModelPlanMismatch": "API 金鑰和訂閱方案允許不同的模型。請確保所選模型包含在您的方案中。" }, "warnings": { "no_terminal_content": "沒有選擇終端機內容", diff --git a/webview-ui/src/i18n/__tests__/TranslationContext.spec.tsx b/webview-ui/src/i18n/__tests__/TranslationContext.spec.tsx index f5c67e176b..33df3904b2 100644 --- a/webview-ui/src/i18n/__tests__/TranslationContext.spec.tsx +++ b/webview-ui/src/i18n/__tests__/TranslationContext.spec.tsx @@ -32,22 +32,16 @@ vi.mock("../setup", () => ({ if (key === "notifications.error") { return options?.message ? `Operation failed: ${options.message}` : "Operation failed" } - if (key === "common:errors.claude_code_process_exited") { - return `Claude Code process exited with code ${options?.exitCode}. Error output: ${options?.errorOutput}` + if (key === "common:errors.claudeCodeProcessExited") { + return `Claude Code process exited with code ${options?.exitCode}.` } - if (key === "common:errors.claude_code_stopped") { - return `Claude Code stopped with reason: ${options?.stopReason}` + if (key === "common:errors.errorOutput") { + return `Error output: ${options?.output}` } - if (key === "common:errors.claude_code_invalid_model") { - return "API keys and subscription plans allow different models. Make sure the selected model is included in your plan." + if (key === "common:errors.claudeCodeStoppedWithReason") { + return `Claude Code stopped with reason: ${options?.reason}` } - if (key === "common:errors.claude_code_process_exited") { - return `Claude Code process exited with code ${options?.exitCode}. Error output: ${options?.errorOutput}` - } - if (key === "common:errors.claude_code_stopped") { - return `Claude Code stopped with reason: ${options?.stopReason}` - } - if (key === "common:errors.claude_code_invalid_model") { + if (key === "common:errors.apiKeyModelPlanMismatch") { return "API keys and subscription plans allow different models. Make sure the selected model is included in your plan." } return key