Просмотр исходного кода

feat(app): japanese translations

Adam 1 месяц назад
Родитель
Сommit
4a386906dd

+ 1 - 0
packages/app/src/i18n/de.ts

@@ -278,6 +278,7 @@ export const dict = {
   "language.de": "Deutsch",
   "language.de": "Deutsch",
   "language.es": "Spanisch",
   "language.es": "Spanisch",
   "language.fr": "Französisch",
   "language.fr": "Französisch",
+  "language.ja": "Japanisch",
 
 
   "toast.language.title": "Sprache",
   "toast.language.title": "Sprache",
   "toast.language.description": "Zu {{language}} gewechselt",
   "toast.language.description": "Zu {{language}} gewechselt",

+ 1 - 0
packages/app/src/i18n/en.ts

@@ -272,6 +272,7 @@ export const dict = {
   "language.de": "German",
   "language.de": "German",
   "language.es": "Spanish",
   "language.es": "Spanish",
   "language.fr": "French",
   "language.fr": "French",
+  "language.ja": "Japanese",
 
 
   "toast.language.title": "Language",
   "toast.language.title": "Language",
   "toast.language.description": "Switched to {{language}}",
   "toast.language.description": "Switched to {{language}}",

+ 1 - 0
packages/app/src/i18n/es.ts

@@ -273,6 +273,7 @@ export const dict = {
   "language.de": "Alemán",
   "language.de": "Alemán",
   "language.es": "Español",
   "language.es": "Español",
   "language.fr": "Francés",
   "language.fr": "Francés",
+  "language.ja": "Japonés",
 
 
   "toast.language.title": "Idioma",
   "toast.language.title": "Idioma",
   "toast.language.description": "Cambiado a {{language}}",
   "toast.language.description": "Cambiado a {{language}}",

+ 1 - 0
packages/app/src/i18n/fr.ts

@@ -273,6 +273,7 @@ export const dict = {
   "language.de": "Allemand",
   "language.de": "Allemand",
   "language.es": "Espagnol",
   "language.es": "Espagnol",
   "language.fr": "Français",
   "language.fr": "Français",
+  "language.ja": "Japonais",
 
 
   "toast.language.title": "Langue",
   "toast.language.title": "Langue",
   "toast.language.description": "Passé à {{language}}",
   "toast.language.description": "Passé à {{language}}",

+ 550 - 0
packages/app/src/i18n/ja.ts

@@ -0,0 +1,550 @@
+export const dict = {
+  "command.category.suggested": "おすすめ",
+  "command.category.view": "表示",
+  "command.category.project": "プロジェクト",
+  "command.category.provider": "プロバイダー",
+  "command.category.server": "サーバー",
+  "command.category.session": "セッション",
+  "command.category.theme": "テーマ",
+  "command.category.language": "言語",
+  "command.category.file": "ファイル",
+  "command.category.terminal": "ターミナル",
+  "command.category.model": "モデル",
+  "command.category.mcp": "MCP",
+  "command.category.agent": "エージェント",
+  "command.category.permissions": "権限",
+
+  "theme.scheme.system": "システム",
+  "theme.scheme.light": "ライト",
+  "theme.scheme.dark": "ダーク",
+
+  "command.sidebar.toggle": "サイドバーの切り替え",
+  "command.project.open": "プロジェクトを開く",
+  "command.provider.connect": "プロバイダーに接続",
+  "command.server.switch": "サーバーの切り替え",
+  "command.session.previous": "前のセッション",
+  "command.session.next": "次のセッション",
+  "command.session.archive": "セッションをアーカイブ",
+
+  "command.palette": "コマンドパレット",
+
+  "command.theme.cycle": "テーマの切り替え",
+  "command.theme.set": "テーマを使用: {{theme}}",
+  "command.theme.scheme.cycle": "配色の切り替え",
+  "command.theme.scheme.set": "配色を使用: {{scheme}}",
+
+  "command.language.cycle": "言語の切り替え",
+  "command.language.set": "言語を使用: {{language}}",
+
+  "command.session.new": "新しいセッション",
+  "command.file.open": "ファイルを開く",
+  "command.file.open.description": "ファイルとコマンドを検索",
+  "command.terminal.toggle": "ターミナルの切り替え",
+  "command.review.toggle": "レビューの切り替え",
+  "command.terminal.new": "新しいターミナル",
+  "command.terminal.new.description": "新しいターミナルタブを作成",
+  "command.steps.toggle": "ステップの切り替え",
+  "command.steps.toggle.description": "現在のメッセージのステップを表示または非表示",
+  "command.message.previous": "前のメッセージ",
+  "command.message.previous.description": "前のユーザーメッセージに移動",
+  "command.message.next": "次のメッセージ",
+  "command.message.next.description": "次のユーザーメッセージに移動",
+  "command.model.choose": "モデルを選択",
+  "command.model.choose.description": "別のモデルを選択",
+  "command.mcp.toggle": "MCPの切り替え",
+  "command.mcp.toggle.description": "MCPを切り替える",
+  "command.agent.cycle": "エージェントの切り替え",
+  "command.agent.cycle.description": "次のエージェントに切り替え",
+  "command.agent.cycle.reverse": "エージェントを逆順に切り替え",
+  "command.agent.cycle.reverse.description": "前のエージェントに切り替え",
+  "command.model.variant.cycle": "思考レベルの切り替え",
+  "command.model.variant.cycle.description": "次の思考レベルに切り替え",
+  "command.permissions.autoaccept.enable": "編集を自動承認",
+  "command.permissions.autoaccept.disable": "編集の自動承認を停止",
+  "command.session.undo": "元に戻す",
+  "command.session.undo.description": "最後のメッセージを元に戻す",
+  "command.session.redo": "やり直す",
+  "command.session.redo.description": "元に戻したメッセージをやり直す",
+  "command.session.compact": "セッションを圧縮",
+  "command.session.compact.description": "セッションを要約してコンテキストサイズを削減",
+  "command.session.fork": "メッセージからフォーク",
+  "command.session.fork.description": "以前のメッセージから新しいセッションを作成",
+  "command.session.share": "セッションを共有",
+  "command.session.share.description": "このセッションを共有しURLをクリップボードにコピー",
+  "command.session.unshare": "セッションの共有を停止",
+  "command.session.unshare.description": "このセッションの共有を停止",
+
+  "palette.search.placeholder": "ファイルとコマンドを検索",
+  "palette.empty": "結果が見つかりません",
+  "palette.group.commands": "コマンド",
+  "palette.group.files": "ファイル",
+
+  "dialog.provider.search.placeholder": "プロバイダーを検索",
+  "dialog.provider.empty": "プロバイダーが見つかりません",
+  "dialog.provider.group.popular": "人気",
+  "dialog.provider.group.other": "その他",
+  "dialog.provider.tag.recommended": "推奨",
+  "dialog.provider.anthropic.note": "Claude Pro/MaxまたはAPIキーで接続",
+
+  "dialog.model.select.title": "モデルを選択",
+  "dialog.model.search.placeholder": "モデルを検索",
+  "dialog.model.empty": "モデルが見つかりません",
+  "dialog.model.manage": "モデルを管理",
+  "dialog.model.manage.description": "モデルセレクターに表示するモデルをカスタマイズします。",
+
+  "dialog.model.unpaid.freeModels.title": "OpenCodeが提供する無料モデル",
+  "dialog.model.unpaid.addMore.title": "人気のプロバイダーからモデルを追加",
+
+  "dialog.provider.viewAll": "すべてのプロバイダーを表示",
+
+  "provider.connect.title": "{{provider}}を接続",
+  "provider.connect.title.anthropicProMax": "Claude Pro/Maxでログイン",
+  "provider.connect.selectMethod": "{{provider}}のログイン方法を選択してください。",
+  "provider.connect.method.apiKey": "APIキー",
+  "provider.connect.status.inProgress": "認証中...",
+  "provider.connect.status.waiting": "認証を待機中...",
+  "provider.connect.status.failed": "認証に失敗しました: {{error}}",
+  "provider.connect.apiKey.description":
+    "{{provider}}のAPIキーを入力してアカウントを接続し、OpenCodeで{{provider}}モデルを使用します。",
+  "provider.connect.apiKey.label": "{{provider}} APIキー",
+  "provider.connect.apiKey.placeholder": "APIキー",
+  "provider.connect.apiKey.required": "APIキーが必要です",
+  "provider.connect.opencodeZen.line1":
+    "OpenCode Zenは、コーディングエージェント向けに最適化された信頼性の高いモデルへのアクセスを提供します。",
+  "provider.connect.opencodeZen.line2": "1つのAPIキーで、Claude、GPT、Gemini、GLMなどのモデルにアクセスできます。",
+  "provider.connect.opencodeZen.visit.prefix": " ",
+  "provider.connect.opencodeZen.visit.suffix": " にアクセスしてAPIキーを取得してください。",
+  "provider.connect.oauth.code.visit.prefix": " ",
+  "provider.connect.oauth.code.visit.link": "このリンク",
+  "provider.connect.oauth.code.visit.suffix":
+    " にアクセスして認証コードを取得し、アカウントを接続してOpenCodeで{{provider}}モデルを使用してください。",
+  "provider.connect.oauth.code.label": "{{method}} 認証コード",
+  "provider.connect.oauth.code.placeholder": "認証コード",
+  "provider.connect.oauth.code.required": "認証コードが必要です",
+  "provider.connect.oauth.code.invalid": "無効な認証コード",
+  "provider.connect.oauth.auto.visit.prefix": " ",
+  "provider.connect.oauth.auto.visit.link": "このリンク",
+  "provider.connect.oauth.auto.visit.suffix":
+    " にアクセスし、以下のコードを入力してアカウントを接続し、OpenCodeで{{provider}}モデルを使用してください。",
+  "provider.connect.oauth.auto.confirmationCode": "確認コード",
+  "provider.connect.toast.connected.title": "{{provider}}が接続されました",
+  "provider.connect.toast.connected.description": "{{provider}}モデルが使用可能になりました。",
+
+  "model.tag.free": "無料",
+  "model.tag.latest": "最新",
+
+  "common.search.placeholder": "検索",
+  "common.loading": "読み込み中",
+  "common.cancel": "キャンセル",
+  "common.submit": "送信",
+  "common.save": "保存",
+  "common.saving": "保存中...",
+  "common.default": "デフォルト",
+  "common.attachment": "添付ファイル",
+
+  "prompt.placeholder.shell": "シェルコマンドを入力...",
+  "prompt.placeholder.normal": '何でも聞いてください... "{{example}}"',
+  "prompt.mode.shell": "Shell",
+  "prompt.mode.shell.exit": "escで終了",
+
+  "prompt.example.1": "コードベースのTODOを修正",
+  "prompt.example.2": "このプロジェクトの技術スタックは何ですか?",
+  "prompt.example.3": "壊れたテストを修正",
+  "prompt.example.4": "認証の仕組みを説明して",
+  "prompt.example.5": "セキュリティの脆弱性を見つけて修正",
+  "prompt.example.6": "ユーザーサービスのユニットテストを追加",
+  "prompt.example.7": "この関数を読みやすくリファクタリング",
+  "prompt.example.8": "このエラーはどういう意味ですか?",
+  "prompt.example.9": "この問題のデバッグを手伝って",
+  "prompt.example.10": "APIドキュメントを生成",
+  "prompt.example.11": "データベースクエリを最適化",
+  "prompt.example.12": "入力バリデーションを追加",
+  "prompt.example.13": "〜の新しいコンポーネントを作成",
+  "prompt.example.14": "このプロジェクトをデプロイするには?",
+  "prompt.example.15": "ベストプラクティスの観点でコードをレビュー",
+  "prompt.example.16": "この関数にエラーハンドリングを追加",
+  "prompt.example.17": "この正規表現パターンを説明して",
+  "prompt.example.18": "これをTypeScriptに変換",
+  "prompt.example.19": "コードベース全体にログを追加",
+  "prompt.example.20": "古い依存関係はどれですか?",
+  "prompt.example.21": "マイグレーションスクリプトの作成を手伝って",
+  "prompt.example.22": "このエンドポイントにキャッシュを実装",
+  "prompt.example.23": "このリストにページネーションを追加",
+  "prompt.example.24": "〜のCLIコマンドを作成",
+  "prompt.example.25": "ここでは環境変数はどう機能しますか?",
+
+  "prompt.popover.emptyResults": "一致する結果がありません",
+  "prompt.popover.emptyCommands": "一致するコマンドがありません",
+  "prompt.dropzone.label": "画像またはPDFをここにドロップ",
+  "prompt.slash.badge.custom": "カスタム",
+  "prompt.context.active": "アクティブ",
+  "prompt.context.includeActiveFile": "アクティブなファイルを含める",
+  "prompt.action.attachFile": "ファイルを添付",
+  "prompt.action.send": "送信",
+  "prompt.action.stop": "停止",
+
+  "prompt.toast.pasteUnsupported.title": "サポートされていない貼り付け",
+  "prompt.toast.pasteUnsupported.description": "ここでは画像またはPDFのみ貼り付け可能です。",
+  "prompt.toast.modelAgentRequired.title": "エージェントとモデルを選択",
+  "prompt.toast.modelAgentRequired.description": "プロンプトを送信する前にエージェントとモデルを選択してください。",
+  "prompt.toast.worktreeCreateFailed.title": "ワークツリーの作成に失敗しました",
+  "prompt.toast.sessionCreateFailed.title": "セッションの作成に失敗しました",
+  "prompt.toast.shellSendFailed.title": "シェルコマンドの送信に失敗しました",
+  "prompt.toast.commandSendFailed.title": "コマンドの送信に失敗しました",
+  "prompt.toast.promptSendFailed.title": "プロンプトの送信に失敗しました",
+
+  "dialog.mcp.title": "MCP",
+  "dialog.mcp.description": "{{total}}個中{{enabled}}個が有効",
+  "dialog.mcp.empty": "MCPが設定されていません",
+
+  "mcp.status.connected": "接続済み",
+  "mcp.status.failed": "失敗",
+  "mcp.status.needs_auth": "認証が必要",
+  "mcp.status.disabled": "無効",
+
+  "dialog.fork.empty": "フォーク元のメッセージがありません",
+
+  "dialog.directory.search.placeholder": "フォルダを検索",
+  "dialog.directory.empty": "フォルダが見つかりません",
+
+  "dialog.server.title": "サーバー",
+  "dialog.server.description": "このアプリが接続するOpenCodeサーバーを切り替えます。",
+  "dialog.server.search.placeholder": "サーバーを検索",
+  "dialog.server.empty": "サーバーはまだありません",
+  "dialog.server.add.title": "サーバーを追加",
+  "dialog.server.add.url": "サーバーURL",
+  "dialog.server.add.placeholder": "http://localhost:4096",
+  "dialog.server.add.error": "サーバーに接続できませんでした",
+  "dialog.server.add.checking": "確認中...",
+  "dialog.server.add.button": "追加",
+  "dialog.server.default.title": "デフォルトサーバー",
+  "dialog.server.default.description":
+    "ローカルサーバーを起動する代わりに、アプリ起動時にこのサーバーに接続します。再起動が必要です。",
+  "dialog.server.default.none": "サーバーが選択されていません",
+  "dialog.server.default.set": "現在のサーバーをデフォルトに設定",
+  "dialog.server.default.clear": "クリア",
+
+  "dialog.project.edit.title": "プロジェクトを編集",
+  "dialog.project.edit.name": "名前",
+  "dialog.project.edit.icon": "アイコン",
+  "dialog.project.edit.icon.alt": "プロジェクトアイコン",
+  "dialog.project.edit.icon.hint": "クリックまたは画像をドラッグ",
+  "dialog.project.edit.icon.recommended": "推奨: 128x128px",
+  "dialog.project.edit.color": "色",
+
+  "context.breakdown.title": "コンテキストの内訳",
+  "context.breakdown.note": '入力トークンのおおよその内訳です。"その他"にはツールの定義やオーバーヘッドが含まれます。',
+  "context.breakdown.system": "システム",
+  "context.breakdown.user": "ユーザー",
+  "context.breakdown.assistant": "アシスタント",
+  "context.breakdown.tool": "ツール呼び出し",
+  "context.breakdown.other": "その他",
+
+  "context.systemPrompt.title": "システムプロンプト",
+  "context.rawMessages.title": "生のメッセージ",
+
+  "context.stats.session": "セッション",
+  "context.stats.messages": "メッセージ",
+  "context.stats.provider": "プロバイダー",
+  "context.stats.model": "モデル",
+  "context.stats.limit": "コンテキスト制限",
+  "context.stats.totalTokens": "総トークン数",
+  "context.stats.usage": "使用量",
+  "context.stats.inputTokens": "入力トークン",
+  "context.stats.outputTokens": "出力トークン",
+  "context.stats.reasoningTokens": "推論トークン",
+  "context.stats.cacheTokens": "キャッシュトークン (読込/書込)",
+  "context.stats.userMessages": "ユーザーメッセージ",
+  "context.stats.assistantMessages": "アシスタントメッセージ",
+  "context.stats.totalCost": "総コスト",
+  "context.stats.sessionCreated": "セッション作成日時",
+  "context.stats.lastActivity": "最終アクティビティ",
+
+  "context.usage.tokens": "トークン",
+  "context.usage.usage": "使用量",
+  "context.usage.cost": "コスト",
+  "context.usage.clickToView": "クリックしてコンテキストを表示",
+
+  "language.en": "英語",
+  "language.zh": "中国語",
+  "language.ko": "韓国語",
+  "language.de": "ドイツ語",
+  "language.es": "スペイン語",
+  "language.fr": "フランス語",
+  "language.ja": "日本語",
+
+  "toast.language.title": "言語",
+  "toast.language.description": "{{language}}に切り替えました",
+
+  "toast.theme.title": "テーマが切り替わりました",
+  "toast.scheme.title": "配色",
+
+  "toast.permissions.autoaccept.on.title": "編集を自動承認中",
+  "toast.permissions.autoaccept.on.description": "編集と書き込みの権限は自動的に承認されます",
+  "toast.permissions.autoaccept.off.title": "編集の自動承認を停止しました",
+  "toast.permissions.autoaccept.off.description": "編集と書き込みの権限には承認が必要です",
+
+  "toast.model.none.title": "モデルが選択されていません",
+  "toast.model.none.description": "このセッションを要約するにはプロバイダーを接続してください",
+
+  "toast.file.loadFailed.title": "ファイルの読み込みに失敗しました",
+
+  "toast.session.share.copyFailed.title": "URLのコピーに失敗しました",
+  "toast.session.share.success.title": "セッションを共有しました",
+  "toast.session.share.success.description": "共有URLをクリップボードにコピーしました!",
+  "toast.session.share.failed.title": "セッションの共有に失敗しました",
+  "toast.session.share.failed.description": "セッションの共有中にエラーが発生しました",
+
+  "toast.session.unshare.success.title": "セッションの共有を解除しました",
+  "toast.session.unshare.success.description": "セッションの共有解除に成功しました!",
+  "toast.session.unshare.failed.title": "セッションの共有解除に失敗しました",
+  "toast.session.unshare.failed.description": "セッションの共有解除中にエラーが発生しました",
+
+  "toast.session.listFailed.title": "{{project}}のセッション読み込みに失敗しました",
+
+  "toast.update.title": "アップデートが利用可能です",
+  "toast.update.description": "OpenCodeの新しいバージョン ({{version}}) がインストール可能です。",
+  "toast.update.action.installRestart": "インストールして再起動",
+  "toast.update.action.notYet": "今はしない",
+
+  "error.page.title": "問題が発生しました",
+  "error.page.description": "アプリケーションの読み込み中にエラーが発生しました。",
+  "error.page.details.label": "エラー詳細",
+  "error.page.action.restart": "再起動",
+  "error.page.action.checking": "確認中...",
+  "error.page.action.checkUpdates": "アップデートを確認",
+  "error.page.action.updateTo": "{{version}}にアップデート",
+  "error.page.report.prefix": "このエラーをOpenCodeチームに報告してください: ",
+  "error.page.report.discord": "Discord",
+  "error.page.version": "バージョン: {{version}}",
+
+  "error.dev.rootNotFound":
+    "ルート要素が見つかりません。index.htmlに追加するのを忘れていませんか?またはid属性のスペルが間違っていませんか?",
+
+  "error.globalSync.connectFailed": "サーバーに接続できませんでした。`{{url}}`でサーバーが実行されていますか?",
+
+  "error.chain.unknown": "不明なエラー",
+  "error.chain.causedBy": "原因:",
+  "error.chain.apiError": "APIエラー",
+  "error.chain.status": "ステータス: {{status}}",
+  "error.chain.retryable": "再試行可能: {{retryable}}",
+  "error.chain.responseBody": "レスポンス本文:\n{{body}}",
+  "error.chain.didYouMean": "もしかして: {{suggestions}}",
+  "error.chain.modelNotFound": "モデルが見つかりません: {{provider}}/{{model}}",
+  "error.chain.checkConfig": "config (opencode.json) のプロバイダー/モデル名を確認してください",
+  "error.chain.mcpFailed": 'MCPサーバー "{{name}}" が失敗しました。注意: OpenCodeはまだMCP認証をサポートしていません。',
+  "error.chain.providerAuthFailed": "プロバイダー認証に失敗しました ({{provider}}): {{message}}",
+  "error.chain.providerInitFailed":
+    'プロバイダー "{{provider}}" の初期化に失敗しました。認証情報と設定を確認してください。',
+  "error.chain.configJsonInvalid": "{{path}} の設定ファイルは有効なJSON(C)ではありません",
+  "error.chain.configJsonInvalidWithMessage": "{{path}} の設定ファイルは有効なJSON(C)ではありません: {{message}}",
+  "error.chain.configDirectoryTypo":
+    '{{path}} 内のディレクトリ "{{dir}}" は無効です。"{{suggestion}}" に名前を変更するか削除してください。これはよくあるタイプミスです。',
+  "error.chain.configFrontmatterError": "{{path}} のフロントマターの解析に失敗しました:\n{{message}}",
+  "error.chain.configInvalid": "{{path}} の設定ファイルが無効です",
+  "error.chain.configInvalidWithMessage": "{{path}} の設定ファイルが無効です: {{message}}",
+
+  "notification.permission.title": "権限が必要です",
+  "notification.permission.description": "{{projectName}} の {{sessionTitle}} が権限を必要としています",
+  "notification.question.title": "質問",
+  "notification.question.description": "{{projectName}} の {{sessionTitle}} から質問があります",
+  "notification.action.goToSession": "セッションへ移動",
+
+  "notification.session.responseReady.title": "応答の準備ができました",
+  "notification.session.error.title": "セッションエラー",
+  "notification.session.error.fallbackDescription": "エラーが発生しました",
+
+  "home.recentProjects": "最近のプロジェクト",
+  "home.empty.title": "最近のプロジェクトはありません",
+  "home.empty.description": "ローカルプロジェクトを開いて始めましょう",
+
+  "session.tab.session": "セッション",
+  "session.tab.review": "レビュー",
+  "session.tab.context": "コンテキスト",
+  "session.review.filesChanged": "{{count}} ファイル変更",
+  "session.review.loadingChanges": "変更を読み込み中...",
+  "session.review.empty": "このセッションでの変更はまだありません",
+  "session.messages.renderEarlier": "以前のメッセージを表示",
+  "session.messages.loadingEarlier": "以前のメッセージを読み込み中...",
+  "session.messages.loadEarlier": "以前のメッセージを読み込む",
+  "session.messages.loading": "メッセージを読み込み中...",
+
+  "session.context.addToContext": "{{selection}}をコンテキストに追加",
+
+  "session.new.worktree.main": "メインブランチ",
+  "session.new.worktree.mainWithBranch": "メインブランチ ({{branch}})",
+  "session.new.worktree.create": "新しいワークツリーを作成",
+  "session.new.lastModified": "最終更新",
+
+  "session.header.search.placeholder": "{{project}}を検索",
+
+  "session.share.popover.title": "ウェブで公開",
+  "session.share.popover.description.shared":
+    "このセッションはウェブで公開されています。リンクを知っている人なら誰でもアクセスできます。",
+  "session.share.popover.description.unshared":
+    "セッションをウェブで公開します。リンクを知っている人なら誰でもアクセスできるようになります。",
+  "session.share.action.share": "共有",
+  "session.share.action.publish": "公開",
+  "session.share.action.publishing": "公開中...",
+  "session.share.action.unpublish": "非公開にする",
+  "session.share.action.unpublishing": "非公開にしています...",
+  "session.share.action.view": "表示",
+  "session.share.copy.copied": "コピーしました",
+  "session.share.copy.copyLink": "リンクをコピー",
+
+  "lsp.tooltip.none": "LSPサーバーなし",
+  "lsp.label.connected": "{{count}} LSP",
+
+  "prompt.loading": "プロンプトを読み込み中...",
+  "terminal.loading": "ターミナルを読み込み中...",
+  "terminal.title": "ターミナル",
+  "terminal.title.numbered": "ターミナル {{number}}",
+
+  "common.closeTab": "タブを閉じる",
+  "common.dismiss": "閉じる",
+  "common.requestFailed": "リクエスト失敗",
+  "common.moreOptions": "その他のオプション",
+  "common.learnMore": "詳細",
+  "common.rename": "名前変更",
+  "common.reset": "リセット",
+  "common.delete": "削除",
+  "common.close": "閉じる",
+  "common.edit": "編集",
+  "common.loadMore": "さらに読み込む",
+
+  "sidebar.settings": "設定",
+  "sidebar.help": "ヘルプ",
+  "sidebar.workspaces.enable": "ワークスペースを有効化",
+  "sidebar.workspaces.disable": "ワークスペースを無効化",
+  "sidebar.gettingStarted.title": "はじめに",
+  "sidebar.gettingStarted.line1": "OpenCodeには無料モデルが含まれているため、すぐに開始できます。",
+  "sidebar.gettingStarted.line2": "プロバイダーを接続して、Claude、GPT、Geminiなどのモデルを使用できます。",
+  "sidebar.project.recentSessions": "最近のセッション",
+  "sidebar.project.viewAllSessions": "すべてのセッションを表示",
+
+  "settings.section.desktop": "デスクトップ",
+  "settings.tab.general": "一般",
+  "settings.tab.shortcuts": "ショートカット",
+
+  "settings.general.section.appearance": "外観",
+  "settings.general.section.notifications": "システム通知",
+  "settings.general.section.sounds": "効果音",
+
+  "settings.general.row.language.title": "言語",
+  "settings.general.row.language.description": "OpenCodeの表示言語を変更します",
+  "settings.general.row.appearance.title": "外観",
+  "settings.general.row.appearance.description": "デバイスでのOpenCodeの表示をカスタマイズします",
+  "settings.general.row.theme.title": "テーマ",
+  "settings.general.row.theme.description": "OpenCodeのテーマをカスタマイズします。",
+  "settings.general.row.font.title": "フォント",
+  "settings.general.row.font.description": "コードブロックで使用する等幅フォントをカスタマイズします",
+
+  "settings.general.notifications.agent.title": "エージェント",
+  "settings.general.notifications.agent.description":
+    "エージェントが完了したか、注意が必要な場合にシステム通知を表示します",
+  "settings.general.notifications.permissions.title": "権限",
+  "settings.general.notifications.permissions.description": "権限が必要な場合にシステム通知を表示します",
+  "settings.general.notifications.errors.title": "エラー",
+  "settings.general.notifications.errors.description": "エラーが発生した場合にシステム通知を表示します",
+
+  "settings.general.sounds.agent.title": "エージェント",
+  "settings.general.sounds.agent.description": "エージェントが完了したか、注意が必要な場合に音を再生します",
+  "settings.general.sounds.permissions.title": "権限",
+  "settings.general.sounds.permissions.description": "権限が必要な場合に音を再生します",
+  "settings.general.sounds.errors.title": "エラー",
+  "settings.general.sounds.errors.description": "エラーが発生した場合に音を再生します",
+
+  "settings.shortcuts.title": "キーボードショートカット",
+  "settings.shortcuts.reset.button": "デフォルトにリセット",
+  "settings.shortcuts.reset.toast.title": "ショートカットをリセットしました",
+  "settings.shortcuts.reset.toast.description": "キーボードショートカットがデフォルトにリセットされました。",
+  "settings.shortcuts.conflict.title": "ショートカットは既に使用されています",
+  "settings.shortcuts.conflict.description": "{{keybind}} は既に {{titles}} に割り当てられています。",
+  "settings.shortcuts.unassigned": "未割り当て",
+  "settings.shortcuts.pressKeys": "キーを押してください",
+
+  "settings.shortcuts.group.general": "一般",
+  "settings.shortcuts.group.session": "セッション",
+  "settings.shortcuts.group.navigation": "ナビゲーション",
+  "settings.shortcuts.group.modelAndAgent": "モデルとエージェント",
+  "settings.shortcuts.group.terminal": "ターミナル",
+  "settings.shortcuts.group.prompt": "プロンプト",
+
+  "settings.providers.title": "プロバイダー",
+  "settings.providers.description": "プロバイダー設定はここで構成できます。",
+  "settings.models.title": "モデル",
+  "settings.models.description": "モデル設定はここで構成できます。",
+  "settings.agents.title": "エージェント",
+  "settings.agents.description": "エージェント設定はここで構成できます。",
+  "settings.commands.title": "コマンド",
+  "settings.commands.description": "コマンド設定はここで構成できます。",
+  "settings.mcp.title": "MCP",
+  "settings.mcp.description": "MCP設定はここで構成できます。",
+
+  "settings.permissions.title": "権限",
+  "settings.permissions.description": "サーバーがデフォルトで使用できるツールを制御します。",
+  "settings.permissions.section.tools": "ツール",
+  "settings.permissions.toast.updateFailed.title": "権限の更新に失敗しました",
+
+  "settings.permissions.action.allow": "許可",
+  "settings.permissions.action.ask": "確認",
+  "settings.permissions.action.deny": "拒否",
+
+  "settings.permissions.tool.read.title": "読み込み",
+  "settings.permissions.tool.read.description": "ファイルの読み込み (ファイルパスに一致)",
+  "settings.permissions.tool.edit.title": "編集",
+  "settings.permissions.tool.edit.description": "ファイルの変更(編集、書き込み、パッチ、複数編集を含む)",
+  "settings.permissions.tool.glob.title": "Glob",
+  "settings.permissions.tool.glob.description": "Globパターンを使用したファイルの一致",
+  "settings.permissions.tool.grep.title": "Grep",
+  "settings.permissions.tool.grep.description": "正規表現を使用したファイル内容の検索",
+  "settings.permissions.tool.list.title": "リスト",
+  "settings.permissions.tool.list.description": "ディレクトリ内のファイル一覧表示",
+  "settings.permissions.tool.bash.title": "Bash",
+  "settings.permissions.tool.bash.description": "シェルコマンドの実行",
+  "settings.permissions.tool.task.title": "タスク",
+  "settings.permissions.tool.task.description": "サブエージェントの起動",
+  "settings.permissions.tool.skill.title": "スキル",
+  "settings.permissions.tool.skill.description": "名前によるスキルの読み込み",
+  "settings.permissions.tool.lsp.title": "LSP",
+  "settings.permissions.tool.lsp.description": "言語サーバークエリの実行",
+  "settings.permissions.tool.todoread.title": "Todo読み込み",
+  "settings.permissions.tool.todoread.description": "Todoリストの読み込み",
+  "settings.permissions.tool.todowrite.title": "Todo書き込み",
+  "settings.permissions.tool.todowrite.description": "Todoリストの更新",
+  "settings.permissions.tool.webfetch.title": "Web Fetch",
+  "settings.permissions.tool.webfetch.description": "URLからコンテンツを取得",
+  "settings.permissions.tool.websearch.title": "Web Search",
+  "settings.permissions.tool.websearch.description": "ウェブを検索",
+  "settings.permissions.tool.codesearch.title": "Code Search",
+  "settings.permissions.tool.codesearch.description": "ウェブ上のコードを検索",
+  "settings.permissions.tool.external_directory.title": "外部ディレクトリ",
+  "settings.permissions.tool.external_directory.description": "プロジェクトディレクトリ外のファイルへのアクセス",
+  "settings.permissions.tool.doom_loop.title": "Doom Loop",
+  "settings.permissions.tool.doom_loop.description": "同一入力による繰り返しのツール呼び出しを検出",
+
+  "workspace.new": "新しいワークスペース",
+  "workspace.type.local": "ローカル",
+  "workspace.type.sandbox": "サンドボックス",
+  "workspace.create.failed.title": "ワークスペースの作成に失敗しました",
+  "workspace.delete.failed.title": "ワークスペースの削除に失敗しました",
+  "workspace.resetting.title": "ワークスペースをリセット中",
+  "workspace.resetting.description": "これには少し時間がかかる場合があります。",
+  "workspace.reset.failed.title": "ワークスペースのリセットに失敗しました",
+  "workspace.reset.success.title": "ワークスペースをリセットしました",
+  "workspace.reset.success.description": "ワークスペースはデフォルトブランチと一致しています。",
+  "workspace.status.checking": "未マージの変更を確認中...",
+  "workspace.status.error": "gitステータスを確認できません。",
+  "workspace.status.clean": "未マージの変更は検出されませんでした。",
+  "workspace.status.dirty": "このワークスペースで未マージの変更が検出されました。",
+  "workspace.delete.title": "ワークスペースの削除",
+  "workspace.delete.confirm": 'ワークスペース "{{name}}" を削除しますか?',
+  "workspace.delete.button": "ワークスペースを削除",
+  "workspace.reset.title": "ワークスペースのリセット",
+  "workspace.reset.confirm": 'ワークスペース "{{name}}" をリセットしますか?',
+  "workspace.reset.button": "ワークスペースをリセット",
+  "workspace.reset.archived.none": "アクティブなセッションはアーカイブされません。",
+  "workspace.reset.archived.one": "1つのセッションがアーカイブされます。",
+  "workspace.reset.archived.many": "{{count}}個のセッションがアーカイブされます。",
+  "workspace.reset.note": "これにより、ワークスペースはデフォルトブランチと一致するようにリセットされます。",
+}

+ 1 - 0
packages/app/src/i18n/ko.ts

@@ -275,6 +275,7 @@ export const dict = {
   "language.de": "독일어",
   "language.de": "독일어",
   "language.es": "스페인어",
   "language.es": "스페인어",
   "language.fr": "프랑스어",
   "language.fr": "프랑스어",
+  "language.ja": "일본어",
 
 
   "toast.language.title": "언어",
   "toast.language.title": "언어",
   "toast.language.description": "{{language}}(으)로 전환됨",
   "toast.language.description": "{{language}}(으)로 전환됨",

+ 1 - 0
packages/app/src/i18n/zh.ts

@@ -271,6 +271,7 @@ export const dict = {
   "language.de": "德语",
   "language.de": "德语",
   "language.es": "西班牙语",
   "language.es": "西班牙语",
   "language.fr": "法语",
   "language.fr": "法语",
+  "language.ja": "日语",
 
 
   "toast.language.title": "语言",
   "toast.language.title": "语言",
   "toast.language.description": "已切换到{{language}}",
   "toast.language.description": "已切换到{{language}}",

+ 90 - 0
packages/ui/src/i18n/ja.ts

@@ -0,0 +1,90 @@
+export const dict = {
+  "ui.sessionReview.title": "セッションの変更",
+  "ui.sessionReview.diffStyle.unified": "Unified",
+  "ui.sessionReview.diffStyle.split": "Split",
+  "ui.sessionReview.expandAll": "すべて展開",
+  "ui.sessionReview.collapseAll": "すべて折りたたむ",
+
+  "ui.sessionTurn.steps.show": "ステップを表示",
+  "ui.sessionTurn.steps.hide": "ステップを隠す",
+  "ui.sessionTurn.summary.response": "応答",
+  "ui.sessionTurn.diff.showMore": "さらに変更を表示 ({{count}})",
+
+  "ui.sessionTurn.retry.retrying": "再試行中",
+  "ui.sessionTurn.retry.inSeconds": "{{seconds}}秒後",
+
+  "ui.sessionTurn.status.delegating": "作業を委任中",
+  "ui.sessionTurn.status.planning": "次のステップを計画中",
+  "ui.sessionTurn.status.gatheringContext": "コンテキストを収集中",
+  "ui.sessionTurn.status.searchingCodebase": "コードベースを検索中",
+  "ui.sessionTurn.status.searchingWeb": "ウェブを検索中",
+  "ui.sessionTurn.status.makingEdits": "編集を実行中",
+  "ui.sessionTurn.status.runningCommands": "コマンドを実行中",
+  "ui.sessionTurn.status.thinking": "思考中",
+  "ui.sessionTurn.status.thinkingWithTopic": "思考中 - {{topic}}",
+  "ui.sessionTurn.status.gatheringThoughts": "考えをまとめています",
+  "ui.sessionTurn.status.consideringNextSteps": "次のステップを検討中",
+
+  "ui.messagePart.diagnostic.error": "エラー",
+  "ui.messagePart.title.edit": "編集",
+  "ui.messagePart.title.write": "作成",
+  "ui.messagePart.option.typeOwnAnswer": "自分の回答を入力",
+  "ui.messagePart.review.title": "回答を確認",
+
+  "ui.list.loading": "読み込み中",
+  "ui.list.empty": "結果なし",
+  "ui.list.emptyWithFilter.prefix": "次の検索結果はありません: ",
+  "ui.list.emptyWithFilter.suffix": "",
+
+  "ui.messageNav.newMessage": "新しいメッセージ",
+
+  "ui.textField.copyToClipboard": "クリップボードにコピー",
+  "ui.textField.copied": "コピーしました",
+
+  "ui.imagePreview.alt": "画像プレビュー",
+
+  "ui.tool.read": "読み込み",
+  "ui.tool.list": "リスト",
+  "ui.tool.glob": "Glob",
+  "ui.tool.grep": "Grep",
+  "ui.tool.webfetch": "Webfetch",
+  "ui.tool.shell": "Shell",
+  "ui.tool.patch": "Patch",
+  "ui.tool.todos": "Todo",
+  "ui.tool.todos.read": "Todo読み込み",
+  "ui.tool.questions": "質問",
+  "ui.tool.agent": "{{type}}エージェント",
+
+  "ui.common.file.one": "ファイル",
+  "ui.common.file.other": "ファイル",
+  "ui.common.question.one": "質問",
+  "ui.common.question.other": "質問",
+
+  "ui.common.add": "追加",
+  "ui.common.cancel": "キャンセル",
+  "ui.common.confirm": "確認",
+  "ui.common.dismiss": "閉じる",
+  "ui.common.next": "次へ",
+  "ui.common.submit": "送信",
+
+  "ui.permission.deny": "拒否",
+  "ui.permission.allowAlways": "常に許可",
+  "ui.permission.allowOnce": "今回のみ許可",
+
+  "ui.message.expand": "メッセージを展開",
+  "ui.message.collapse": "メッセージを折りたたむ",
+  "ui.message.copy": "コピー",
+  "ui.message.copied": "コピーしました!",
+  "ui.message.attachment.alt": "添付ファイル",
+
+  "ui.patch.action.deleted": "削除済み",
+  "ui.patch.action.created": "作成済み",
+  "ui.patch.action.moved": "移動済み",
+  "ui.patch.action.patched": "パッチ適用済み",
+
+  "ui.question.subtitle.answered": "{{count}}件回答済み",
+  "ui.question.answer.none": "(回答なし)",
+  "ui.question.review.notAnswered": "(未回答)",
+  "ui.question.multiHint": "(該当するものをすべて選択)",
+  "ui.question.custom.placeholder": "回答を入力...",
+}