From eb051f969e37ee9f27e2b4554b80df1a6be693f4 Mon Sep 17 00:00:00 2001 From: yuchi0531 <109888972+yuchi0531@users.noreply.github.com> Date: Sat, 27 Jun 2026 07:00:05 +0900 Subject: [PATCH] Add Japanese locale (ja) support (#1810) * Add Japanese locale (ja) support - New: ja.ts with 2624 UI translation keys - New: ja.settings.ts with 1789 settings translation keys - Registered ja in runtime.ts (Locale type, LOCALES, LOCALE_LABEL_KEYS, normalizeLocale) - Added ja-JP BCP-47 mapping in intl.ts - Added JA_MESSAGES in bootstrap.ts - Added ja to lazy-load dictionary map in store.ts - Updated messages.test.ts with ja dictionary - Added common.language.japanese to all 8 existing locale files * fix(i18n): complete Japanese locale updates * test(i18n): enforce locale key parity * docs: add Japanese documentation --------- Co-authored-by: yuchi0531 Co-authored-by: Bohdan Triapitsyn --- packages/docs/CONTRIBUTING.md | 10 +- .../content/docs/ja/commands-snippets.mdx | 39 + packages/docs/content/docs/ja/context.mdx | 38 + .../docs/content/docs/ja/desktop-browser.mdx | 22 + .../docs/content/docs/ja/desktop-tunnels.mdx | 41 + packages/docs/content/docs/ja/environment.mdx | 138 + .../docs/content/docs/ja/git-identities.mdx | 30 + packages/docs/content/docs/ja/git.mdx | 41 + packages/docs/content/docs/ja/github.mdx | 34 + packages/docs/content/docs/ja/index.mdx | 32 + packages/docs/content/docs/ja/install.mdx | 33 + .../docs/content/docs/ja/magic-prompts.mdx | 26 + packages/docs/content/docs/ja/mcp.mdx | 30 + packages/docs/content/docs/ja/mobile.mdx | 31 + packages/docs/content/docs/ja/multi-run.mdx | 34 + .../content/docs/ja/notes-todos-plans.mdx | 37 + .../docs/content/docs/ja/notifications.mdx | 34 + .../docs/content/docs/ja/opencode-server.mdx | 97 + packages/docs/content/docs/ja/preview.mdx | 32 + .../docs/content/docs/ja/project-actions.mdx | 28 + .../docs/content/docs/ja/project-icons.mdx | 20 + packages/docs/content/docs/ja/projects.mdx | 34 + packages/docs/content/docs/ja/providers.mdx | 49 + packages/docs/content/docs/ja/quickstart.mdx | 26 + .../docs/content/docs/ja/remote-instances.mdx | 42 + .../docs/content/docs/ja/reverse-proxy.mdx | 347 +++ .../docs/content/docs/ja/scheduled-tasks.mdx | 33 + packages/docs/content/docs/ja/security.mdx | 37 + .../docs/content/docs/ja/skills-catalog.mdx | 27 + packages/docs/content/docs/ja/skills.mdx | 30 + .../content/docs/ja/ssh-hosts-proxying.mdx | 48 + packages/docs/content/docs/ja/themes.mdx | 30 + .../docs/content/docs/ja/troubleshooting.mdx | 40 + .../troubleshooting/opencode-connection.mdx | 34 + .../docs/ja/troubleshooting/remote-access.mdx | 38 + .../docs/ja/troubleshooting/worktrees-git.mdx | 35 + packages/docs/content/docs/ja/tunnels.mdx | 117 + packages/docs/content/docs/ja/updates.mdx | 31 + packages/docs/content/docs/ja/usage.mdx | 28 + packages/docs/content/docs/ja/voice.mdx | 36 + packages/docs/content/docs/ja/worktrees.mdx | 36 + packages/docs/sidebar.config.json | 141 +- packages/ui/src/lib/i18n/bootstrap.ts | 25 +- packages/ui/src/lib/i18n/intl.ts | 1 + packages/ui/src/lib/i18n/messages.test.ts | 11 +- packages/ui/src/lib/i18n/messages/en.ts | 1 + packages/ui/src/lib/i18n/messages/es.ts | 1 + packages/ui/src/lib/i18n/messages/fr.ts | 2 + .../ui/src/lib/i18n/messages/ja.settings.ts | 1801 +++++++++++ packages/ui/src/lib/i18n/messages/ja.ts | 2639 +++++++++++++++++ packages/ui/src/lib/i18n/messages/ko.ts | 1 + packages/ui/src/lib/i18n/messages/pl.ts | 1 + packages/ui/src/lib/i18n/messages/pt-BR.ts | 1 + packages/ui/src/lib/i18n/messages/uk.ts | 1 + packages/ui/src/lib/i18n/messages/zh-CN.ts | 1 + packages/ui/src/lib/i18n/messages/zh-TW.ts | 1 + packages/ui/src/lib/i18n/runtime.ts | 10 +- packages/ui/src/lib/i18n/store.ts | 4 +- 58 files changed, 6509 insertions(+), 58 deletions(-) create mode 100644 packages/docs/content/docs/ja/commands-snippets.mdx create mode 100644 packages/docs/content/docs/ja/context.mdx create mode 100644 packages/docs/content/docs/ja/desktop-browser.mdx create mode 100644 packages/docs/content/docs/ja/desktop-tunnels.mdx create mode 100644 packages/docs/content/docs/ja/environment.mdx create mode 100644 packages/docs/content/docs/ja/git-identities.mdx create mode 100644 packages/docs/content/docs/ja/git.mdx create mode 100644 packages/docs/content/docs/ja/github.mdx create mode 100644 packages/docs/content/docs/ja/index.mdx create mode 100644 packages/docs/content/docs/ja/install.mdx create mode 100644 packages/docs/content/docs/ja/magic-prompts.mdx create mode 100644 packages/docs/content/docs/ja/mcp.mdx create mode 100644 packages/docs/content/docs/ja/mobile.mdx create mode 100644 packages/docs/content/docs/ja/multi-run.mdx create mode 100644 packages/docs/content/docs/ja/notes-todos-plans.mdx create mode 100644 packages/docs/content/docs/ja/notifications.mdx create mode 100644 packages/docs/content/docs/ja/opencode-server.mdx create mode 100644 packages/docs/content/docs/ja/preview.mdx create mode 100644 packages/docs/content/docs/ja/project-actions.mdx create mode 100644 packages/docs/content/docs/ja/project-icons.mdx create mode 100644 packages/docs/content/docs/ja/projects.mdx create mode 100644 packages/docs/content/docs/ja/providers.mdx create mode 100644 packages/docs/content/docs/ja/quickstart.mdx create mode 100644 packages/docs/content/docs/ja/remote-instances.mdx create mode 100644 packages/docs/content/docs/ja/reverse-proxy.mdx create mode 100644 packages/docs/content/docs/ja/scheduled-tasks.mdx create mode 100644 packages/docs/content/docs/ja/security.mdx create mode 100644 packages/docs/content/docs/ja/skills-catalog.mdx create mode 100644 packages/docs/content/docs/ja/skills.mdx create mode 100644 packages/docs/content/docs/ja/ssh-hosts-proxying.mdx create mode 100644 packages/docs/content/docs/ja/themes.mdx create mode 100644 packages/docs/content/docs/ja/troubleshooting.mdx create mode 100644 packages/docs/content/docs/ja/troubleshooting/opencode-connection.mdx create mode 100644 packages/docs/content/docs/ja/troubleshooting/remote-access.mdx create mode 100644 packages/docs/content/docs/ja/troubleshooting/worktrees-git.mdx create mode 100644 packages/docs/content/docs/ja/tunnels.mdx create mode 100644 packages/docs/content/docs/ja/updates.mdx create mode 100644 packages/docs/content/docs/ja/usage.mdx create mode 100644 packages/docs/content/docs/ja/voice.mdx create mode 100644 packages/docs/content/docs/ja/worktrees.mdx create mode 100644 packages/ui/src/lib/i18n/messages/ja.settings.ts create mode 100644 packages/ui/src/lib/i18n/messages/ja.ts diff --git a/packages/docs/CONTRIBUTING.md b/packages/docs/CONTRIBUTING.md index 7f555c75..76d6efbf 100644 --- a/packages/docs/CONTRIBUTING.md +++ b/packages/docs/CONTRIBUTING.md @@ -203,12 +203,13 @@ other language mirrors the English files under a locale folder. | Korean | `ko/` | `ko` | | Polish | `pl/` | `pl` | | French | `fr/` | `fr` | +| Japanese | `ja/` | `ja` | > [!IMPORTANT] > The **content folder** uses the lowercase locale key (`zh-cn`, `pt-br`); the > **sidebar `translations`** key uses the BCP-47 language tag (`zh-CN`, `pt-BR`). > They look similar but are not interchangeable — Starlight resolves them with -> different rules. Everything else (`uk`, `es`, `ko`, `pl`, `fr`, `en`) is identical +> different rules. Everything else (`uk`, `es`, `ko`, `pl`, `fr`, `ja`, `en`) is identical > in both columns. This locale set is mirrored in the website at @@ -230,6 +231,7 @@ content/docs/ ko/install.mdx # Korean pl/install.mdx # Polish fr/install.mdx # French + ja/install.mdx # Japanese guides/tunnels.mdx # nested English page uk/guides/tunnels.mdx # its Ukrainian translation @@ -266,7 +268,8 @@ to each section and item in `sidebar.config.json`: "pt-BR": "Comece aqui", "ko": "여기서 시작", "pl": "Zacznij tutaj", - "fr": "Commencer ici" + "fr": "Commencer ici", + "ja": "ここから開始" }, "items": [ { @@ -279,7 +282,8 @@ to each section and item in `sidebar.config.json`: "pt-BR": "Instalação", "ko": "설치", "pl": "Instalacja", - "fr": "Installation" + "fr": "Installation", + "ja": "インストール" } } ] diff --git a/packages/docs/content/docs/ja/commands-snippets.mdx b/packages/docs/content/docs/ja/commands-snippets.mdx new file mode 100644 index 00000000..efb12cc8 --- /dev/null +++ b/packages/docs/content/docs/ja/commands-snippets.mdx @@ -0,0 +1,39 @@ +--- +title: コマンドとスニペット +description: チャットで使い回せるスラッシュコマンドとテキストスニペットを作成します。 +--- + +# コマンドとスニペット + +コマンドとスニペットは、どちらも同じ内容を何度も入力する手間を省きます。コマンドは `/` で呼び出す完全なプロンプトで、スニペットは `#` でメッセージに差し込む短いテキストです。 + +## コマンド + +コマンドは `/review` のようにスラッシュで実行する保存済みプロンプトです。**Settings → Commands** で管理します。 + +1. **Settings → Commands** を開き、コマンドを作成します。 +2. 名前、説明、送信するプロンプト本文を入力します。 +3. 必要なら特定のエージェントやモデルに固定します。 +4. 個人用かプロジェクト用かのスコープを選びます。 + +チャットでは、メッセージの**最初**の文字として `/` を入力するとコマンドが表示されます。そこから選んでください。テキストにはプレースホルダーを使えます。 + +- `$ARGUMENTS` — コマンドの後に入力した内容 +- `@filename` — ファイルの内容を差し込みます +- `` !`command` `` — シェルコマンドの出力を差し込みます + +組み込みの `init` と `review` コマンドはリセットできますが、削除はできません。 + +## スニペット + +スニペットは `#signoff` のようなハッシュタグで本文中から参照する再利用可能なテキストです。**Settings → Snippets** で管理します。 + +1. **Settings → Snippets** を開き、スニペットを作成します。 +2. 名前と、その名前が表すテキストを入力します。複数の呼び出し名が欲しい場合はエイリアスを追加します。 +3. 個人用かプロジェクト用かのスコープを選びます。 + +チャットで `#` を入力してスニペットを選ぶと、OpenChamber が送信前に全文へ置き換えます。 + +## 関連 + +- [スキル](/skills/) — 必要なときに大きな指示セットを読み込む diff --git a/packages/docs/content/docs/ja/context.mdx b/packages/docs/content/docs/ja/context.mdx new file mode 100644 index 00000000..a485f27b --- /dev/null +++ b/packages/docs/content/docs/ja/context.mdx @@ -0,0 +1,38 @@ +--- +title: コンテキスト +description: セッションがモデルの記憶容量をどれだけ使っているかを確認します。 +--- + +# コンテキスト + +どのモデルも、一度に保持できる会話量には上限があります。これがコンテキストです。OpenChamber はその使用量を表示するので、セッションが上限に近づき、返信で古い詳細が抜け始める可能性があるタイミングを把握できます。 + +## クイックインジケーター + +チャット中は、小さなゲージが使用済みコンテキストの割合を表示します。埋まるにつれて色が変わります。 + +- 緑 — まだ十分な余裕があります +- 黄 — かなり埋まっています(約 4 分の 3) +- 赤 — ほぼ満杯です + +ホバーするか、モバイルではタップすると、正確なトークン数を確認できます。 + +## 完全なコンテキストパネル + +右サイドバーの **Context** タブを開くと、現在のセッションをより詳しく確認できます。 + +- 使用中のモデルとセッション開始時刻 +- モデルの上限に対する合計トークン数 +- メッセージ数とコスト合計 +- 直近の返信のトークン内訳 +- 何がコンテキストを占めているかの大まかな内訳(あなたのメッセージ、エージェントのメッセージ、ツール出力) + +この内訳は正確なカウントではなく推定です。課金確認ではなく、何がウィンドウを埋めているかを見るために使ってください。 + +## 満杯になったら + +1 つのセッションを永遠に伸ばすのではなく、新しいタスクには新しいセッションを開始してください。短いコンテキストのほうが速く、モデルの集中も保ちやすくなります。 + +## 関連 + +- [プロジェクト](/projects/) — セッションはプロジェクトごとにまとめられます diff --git a/packages/docs/content/docs/ja/desktop-browser.mdx b/packages/docs/content/docs/ja/desktop-browser.mdx new file mode 100644 index 00000000..d344e505 --- /dev/null +++ b/packages/docs/content/docs/ja/desktop-browser.mdx @@ -0,0 +1,22 @@ +--- +title: デスクトップブラウザ +description: デスクトップアプリ内で任意のページを開き、検査とコンソール取得を使います。 +--- + +# デスクトップブラウザ + +デスクトップアプリには組み込みブラウザがあります。チャットのすぐ横で任意のページを開き、要素を指して質問したり、ページのコンソールを取得したりできます。アプリヘッダーの地球儀ボタンから開きます。 + +> デスクトップブラウザは**デスクトップ専用**機能です。Web では、[プレビュー](/preview/) パネルがローカル開発サーバー向けに同じ検査・コンソールツールを提供します。 + +## 検査して注釈を付ける + +**inspect** をオンにして、ページ上の任意の要素をクリックします。OpenChamber はその要素について、何であるか、スタイル、位置、スクリーンショットを含むメモを取得し、チャットメッセージに添付します。エージェントに「この要素、ここ」と伝える最短の方法です。 + +## コンソール取得 + +ブラウザはページのコンソール出力(エラー、警告、ログ)を集めるので、開発者ツールを開かずにフィルターして読めます。 + +## 関連 + +- [プレビューと開発サーバー](/preview/) — ローカル開発サーバー向けの同じツール diff --git a/packages/docs/content/docs/ja/desktop-tunnels.mdx b/packages/docs/content/docs/ja/desktop-tunnels.mdx new file mode 100644 index 00000000..c7ad8d8a --- /dev/null +++ b/packages/docs/content/docs/ja/desktop-tunnels.mdx @@ -0,0 +1,41 @@ +--- +title: デスクトップトンネル +description: デスクトップアプリから Cloudflare または Ngrok トンネルを作成します。 +--- + +# デスクトップトンネル + +デスクトップアプリでは **Settings → OpenChamber → Tunnel** から公開トンネルを作成できます。この方法では CLI から OpenChamber を起動する必要はありません。 + +## プロバイダーをインストールする + +OpenChamber はあなたのマシン上でプロバイダー CLI を起動します。使いたいプロバイダーを先にインストールしてください。 + +```bash +brew install cloudflared +brew install ngrok +``` + +Cloudflare は `cloudflared` を使います。Ngrok には ngrok アカウントと ngrok ダッシュボードの authtoken が必要です。 + +```bash +ngrok config add-authtoken +``` + +## アプリから開始する + +1. **Settings → OpenChamber → Tunnel** を開きます。 +2. **Cloudflare** または **Ngrok** を選びます。 +3. クイックトンネルを開始します。 +4. 生成された QR コードをスマートフォンでスキャンします。 + +現在、Ngrok はクイックトンネルに対応しています。Cloudflare はクイックトンネルと管理対象 Cloudflare モードに対応しています。 + +## アクセス保護 + +プロバイダー URL 自体が公開されていても、OpenChamber は独自の接続トークンでアクセスを保護します。生成される接続リンクには一度きりのトークンが含まれ、TTL があり、新しいリンクを生成するかトンネルを停止/再起動すると、未使用の古いリンクは無効化されます。 + +## 関連 + +- [トンネル](/tunnels/) — CLI でのトンネル利用と管理対象 Cloudflare モード +- [PWA とモバイル](/mobile/) — スマートフォンから OpenChamber にアクセスする diff --git a/packages/docs/content/docs/ja/environment.mdx b/packages/docs/content/docs/ja/environment.mdx new file mode 100644 index 00000000..af539038 --- /dev/null +++ b/packages/docs/content/docs/ja/environment.mdx @@ -0,0 +1,138 @@ +--- +title: 環境変数 +description: 環境変数で OpenChamber と OpenCode 連携を設定します。 +--- + +# 環境変数 + +OpenChamber は起動時にこれらの環境変数を読み取ります。スタートアップサービスでは、`openchamber startup enable` がデフォルトで現在の環境をスナップショットするため、サービスに使わせたい変数を変更した後は再実行してください。 + +## OpenChamber サーバー + +### `OPENCHAMBER_HOST` + +OpenChamber Web サーバーのバインドアドレスです。他のマシンからアクセスできるようにするには `0.0.0.0` を使います。 + +### `OPENCHAMBER_UI_PASSWORD` + +ブラウザ UI のパスワードです。localhost 以外にバインドする場合、トンネルを使う場合、またはリバースプロキシの背後で実行する場合に使います。 + +### `OPENCHAMBER_API_ONLY` + +`true` または `1` に設定すると、OpenChamber をヘッドレスモードで起動します。デスクトップおよびモバイルクライアント向けの API ルートは利用できますが、ブラウザ UI は配信されません。 + +### `OPENCHAMBER_DATA_DIR` + +OpenChamber のデータディレクトリを上書きします。デフォルトは `~/.config/openchamber` です。 + +### `OPENCHAMBER_COMPRESS_API` + +API レスポンス圧縮を制御します。`true` または `1` で強制的に有効化し、`false` または `0` で強制的に無効化します。 + +### `OPENCHAMBER_SKIP_API_COMPRESSION` + +`true` または `1` に設定すると API レスポンス圧縮を無効化します。これは `OPENCHAMBER_COMPRESS_API` より優先されます。 + +### `OPENCHAMBER_VERBOSE_REQUEST_LOGS` + +`true` または `1` に設定すると詳細な HTTP リクエストログを有効にします。 + +### `OPENCHAMBER_UPDATE_API_URL` + +更新確認 API エンドポイントを上書きします。ほとんどのユーザーは未設定のままでかまいません。 + +### `OPENCHAMBER_PACKAGE_MANAGER` + +自動検出が間違っている場合に、更新操作で使うパッケージマネージャーを強制します。 + +## OpenCode サーバー + +### `OPENCODE_HOST` + +OpenChamber を既存の OpenCode サーバーに接続します。値は明示的なポートを含み、パス、クエリ、ハッシュを含まない `http` または `https` の origin である必要があります。`OPENCODE_HOST` は `OPENCODE_PORT` より優先されます。 + +### `OPENCODE_PORT` + +OpenCode サーバーのポートを設定します。管理対象 OpenCode では管理対象ポートの要求になり、`OPENCODE_SKIP_START=true` ではそのポートの外部サーバーに接続します。 + +### `OPENCODE_SKIP_START` + +`true` に設定すると、OpenChamber が独自の OpenCode サーバーを起動しません。 + +### `OPENCHAMBER_OPENCODE_HOSTNAME` + +OpenChamber が管理する OpenCode サーバーのバインドホスト名です。デフォルトは `127.0.0.1` です。 + +### `OPENCODE_BINARY` + +OpenChamber が実行する `opencode` 実行ファイルへのパスです。 + +### `OPENCODE_CONFIG` + +特定の OpenCode 設定ファイルへのパスです。 + +### `OPENCODE_CONFIG_DIR` + +エージェント、スキル、スニペット、設定検出に使う特定の OpenCode 設定ディレクトリへのパスです。 + +### `OPENCODE_DATA_DIR` + +管理対象 OpenCode サーバーのカスタムデータディレクトリです。 + +### `OPENCODE_WSL_DISTRO` + +Windows 上の OpenCode 連携に使う WSL ディストリビューションを選びます。 + +### `OPENCHAMBER_OPENCODE_WSL_DISTRO` + +WSL ディストリビューション選択用の OpenChamber 固有エイリアスです。両方が設定されている場合は `OPENCODE_WSL_DISTRO` が優先されます。 + +### `OPENCODE_JWT_SECRET` + +UI 認証トークンの署名に使うシークレットです。永続的なサービス配置では長いランダム値を使ってください。 + +## ターミナルと Git + +### `OPENCHAMBER_TERMINAL_SHELL` + +OpenChamber のターミナルセッションで使うシェル実行ファイルです。 + +### `OPENCHAMBER_GIT_BINARY` + +OpenChamber の Git 機能で使う Git 実行ファイルです。 + +### `GIT_BINARY` + +代替の Git 実行ファイル上書きです。OpenChamber 固有の設定には `OPENCHAMBER_GIT_BINARY` を推奨します。 + +### `OPENCHAMBER_GIT_READ_CACHE_TTL_MS` + +Git に基づくファイル読み取りキャッシュの有効期間(ミリ秒)です。デバッグ中にこのキャッシュを無効化するには `0` を設定します。 + +## 音声とトンネル + +### `OPENAI_API_KEY` + +OpenAI 互換サービスを呼び出す OpenChamber の音声機能で使う API キーです。 + +### `OPENCHAMBER_ALLOW_REMOTE_OPENAI_COMPAT_URLS` + +`true` または `1` に設定すると、音声機能でリモートの OpenAI 互換 base URL を許可します。 + +### `NGROK_AUTHTOKEN` + +OpenChamber のトンネルコマンドで使う ngrok 認証トークンです。`ngrok config add-authtoken ` で ngrok 側に設定することもできます。 + +## ランタイムヘルパー + +### `BUN_BINARY` + +デーモンプロセスを起動するときに OpenChamber が使う Bun 実行ファイルです。 + +### `BUN_INSTALL` + +Bun のインストールルートです。OpenChamber はデーモン起動と更新のために `bin/bun` を探す際に使います。 + +### `VITE_OPENCODE_URL` + +Vite でビルドされた Web アプリ向けのビルド時 API base URL です。通常の CLI またはデスクトップ利用では、ほとんどのユーザーは設定する必要がありません。 diff --git a/packages/docs/content/docs/ja/git-identities.mdx b/packages/docs/content/docs/ja/git-identities.mdx new file mode 100644 index 00000000..ba12d12e --- /dev/null +++ b/packages/docs/content/docs/ja/git-identities.mdx @@ -0,0 +1,30 @@ +--- +title: Git ID +description: リポジトリごとに正しい名前とメールでコミットします。 +--- + +# Git ID + +Git ID は、コミットに使われる名前とメールアドレスです。個人用リポジトリと仕事用リポジトリをまたいで作業する場合、1 つのグローバル設定に頼る代わりに ID を保存し、リポジトリごとに正しいものを適用できます。**Settings → Git** で管理します。 + +## ID を追加する + +1. **Settings → Git** を開き、**New** を選びます。 +2. コミットに使う **name** と **email** を入力します。 +3. リモートへの認証方法を選びます。 + - **SSH** — SSH キーを指定します + - **token** — ホスト用に保存された認証情報を使います +4. 必要なら、見分けやすいように色とアイコンを付けます。 + +システムのグローバル ID も読み取り専用で表示されます。 + +## ID をリポジトリに適用する + +ID を適用すると、そのリポジトリの**ローカル** Git 設定に書き込まれます。影響するのはそのリポジトリだけで、グローバル設定には影響しません。SSH ID はそのキーを使う SSH コマンドも設定し、トークン ID はホスト用の認証情報保存を設定します。 + +OpenChamber が既存の Git 認証情報から見つけた ID をインポートし、トークン ID として保存することもできます。 + +## 関連 + +- [Git と GitHub ワークフロー](/git/) — 設定した ID でコミットする +- [GitHub Issues と PR](/github/) — PR 用に GitHub アカウントを接続する diff --git a/packages/docs/content/docs/ja/git.mdx b/packages/docs/content/docs/ja/git.mdx new file mode 100644 index 00000000..4a7292e5 --- /dev/null +++ b/packages/docs/content/docs/ja/git.mdx @@ -0,0 +1,41 @@ +--- +title: Git と GitHub ワークフロー +description: OpenChamber から離れずにステージ、コミット、ブランチ管理を行います。 +--- + +# Git と GitHub ワークフロー + +OpenChamber には組み込みの Git ビューがあり、ターミナルに切り替えずに変更の確認、コミット、ブランチ管理ができます。右サイドバーの **Git** タブから開きます。 + +## 確認してコミットする + +Git ビューは変更を **staged** と **unstaged** に分けて表示します。 + +- ファイルの **+** をクリックしてステージ、**−** をクリックしてアンステージします +- グループ内のすべてをまとめてステージまたはアンステージできます +- ファイルをクリックすると差分を確認できます + +その後、コミットメッセージを書いてコミットします。OpenChamber に staged 変更から**コミットメッセージを生成**させることもできます。現在のセッションのモデルを使うため、セッションを開いておく必要があります。 + +## ブランチと履歴 + +Git ビューは日常的な Git 操作も扱います。 + +- ブランチの作成、切り替え、名前変更、削除 +- push、pull、fetch +- 履歴とコミットごとの差分の閲覧 +- 変更の stash と復元 + +## プルリクエスト + +GitHub を接続すると([GitHub Issues と PR](/github/) を参照)、**PR** タブからプルリクエストを開く、更新する、ready にする、またはマージできます。タイトルと説明もコミットメッセージと同じように生成できます。 + +## コンフリクトを取り込む + +merge、rebase、integrate でコンフリクトが起きると、OpenChamber は詰まっている箇所を表示し、解決できるようにします。エージェントに渡して解決させることもできます。 + +## 関連 + +- [GitHub Issues と PR](/github/) — GitHub を接続し、Issue から作業を始める +- [Worktree セッション](/worktrees/) — ブランチを専用フォルダに分離する +- [Git ID](/git-identities/) — リポジトリごとに正しい人物としてコミットする diff --git a/packages/docs/content/docs/ja/github.mdx b/packages/docs/content/docs/ja/github.mdx new file mode 100644 index 00000000..aaa282f7 --- /dev/null +++ b/packages/docs/content/docs/ja/github.mdx @@ -0,0 +1,34 @@ +--- +title: GitHub Issues と PR +description: GitHub を接続し、Issue やプルリクエストからセッションを開始します。 +--- + +# GitHub Issues と PR + +GitHub アカウントを接続すると、OpenChamber は Issue とプルリクエストを取り込み、そこから直接セッションを開始したり、PR を開いたり更新したりできます。 + +## GitHub を接続する + +1. **Settings → Git** を開きます。 +2. GitHub セクションで **Connect** を選びます。OpenChamber がリンクと短いコードを表示します。 +3. リンクを開き、コードを入力して承認します。 + +接続されると、GitHub セクションにアカウントが表示されます。複数のアカウントを接続して切り替えたり、いつでも切断したりできます。 + +## Issue または PR から作業を始める + +GitHub 接続済みで [worktree セッション](/worktrees/) を作成すると、**Start from GitHub issue/PR** を選べます。 + +- **issue** を選ぶと、OpenChamber はその Issue に基づいてブランチ名を付け、Issue とコメントを最初のメッセージとしてセッションを開きます +- **pull request** を選ぶと、その PR のブランチをチェックアウトします。PR の差分を含めて、エージェントに変更全体を渡すこともできます + +これにより、必要なコンテキストが読み込まれた状態でそのままセッションに入れます。 + +## プルリクエストを開いて管理する + +[Git ビュー](/git/) の **PR** タブから、プルリクエストの作成、更新、draft から ready への変更、マージができます。OpenChamber は変更内容から PR のタイトルと説明を生成できます。 + +## 関連 + +- [Git と GitHub ワークフロー](/git/) — コミットとブランチ管理 +- [Worktree セッション](/worktrees/) — Issue と PR のセッションが始まる場所 diff --git a/packages/docs/content/docs/ja/index.mdx b/packages/docs/content/docs/ja/index.mdx new file mode 100644 index 00000000..7a45c3a7 --- /dev/null +++ b/packages/docs/content/docs/ja/index.mdx @@ -0,0 +1,32 @@ +--- +title: OpenChamber ドキュメント +description: Web、デスクトップ、VS Code で OpenChamber をセットアップして運用するためのガイドです。 +--- + +# OpenChamber ドキュメント + +OpenChamber は、OpenCode(ターミナルで動く AI コーディングエージェント)の周りにあるビジュアルな作業スペースです。コマンドラインだけで作業する代わりに、その作業を見守り、方向付ける画面を提供します。 + +このドキュメントでは次のことができます。 + +- 作業方法に合ったアプリをインストールする +- OpenChamber を安全にリモート利用できるように開く +- 見た目をカスタマイズし、よくある問題を解決する + +## 最初に読むもの + +- [インストール](/install/) +- [クイックスタート](/quickstart/) +- [トンネル](/tunnels/) +- [トラブルシューティング](/troubleshooting/) + +## 探す + +- [プロジェクト](/projects/) と [Worktree セッション](/worktrees/) — 作業を整理し、分離する +- [プロバイダー、モデル、エージェント](/providers/) — OpenCode を接続し、モデルを選ぶ +- [Git と GitHub ワークフロー](/git/) — コミット、レビュー、PR 作成 +- [セキュリティ](/security/) と [トンネル](/tunnels/) — インスタンスを保護し、アクセスする + +## OpenChamber の用途 + +OpenChamber は、AI コーディングのうち、管制室があると便利な部分のためのものです。セッションの分岐、差分レビュー、ターミナル管理、ツール進行状況の監視、プロジェクトアクションの実行、エージェントが作業している間に全体の状況を見える状態に保つことができます。 diff --git a/packages/docs/content/docs/ja/install.mdx b/packages/docs/content/docs/ja/install.mdx new file mode 100644 index 00000000..f48a6a39 --- /dev/null +++ b/packages/docs/content/docs/ja/install.mdx @@ -0,0 +1,33 @@ +--- +title: インストール +description: デスクトップ、Web、VS Code 向けに OpenChamber をインストールします。 +--- + +# インストール + +OpenChamber を実行する方法は 3 つあります。 + +- macOS 用のデスクトップアプリ +- CLI がホストする Web アプリ。スマートフォンアプリのようにインストールできます(PWA) +- VS Code 拡張機能 + +## 前提条件 + +先に [OpenCode](https://opencode.ai) をインストールしてください。OpenChamber はその上で動作します。 + +## Web + PWA + +```bash +curl -fsSL https://raw.githubusercontent.com/openchamber/openchamber/main/scripts/install.sh | bash +openchamber --ui-password be-creative-here +``` + +CLI が表示する URL(通常は `http://localhost:3000`)を開きます。OpenChamber のセッション一覧が表示されるはずです。すぐ使えるようにしておくには、ブラウザのアドレスバーにある「インストール」オプションでアプリとして追加します。 + +## デスクトップ + +GitHub releases ページまたは OpenChamber ダウンロードページから最新のデスクトップビルドをダウンロードします。開いたら、普段の OpenCode ワークフローにサインインします。 + +## VS Code + +VS Code Marketplace からインストールし、普段の OpenCode ワークフローにサインインします。その後、OpenChamber ビューがサイドバーに開きます。 diff --git a/packages/docs/content/docs/ja/magic-prompts.mdx b/packages/docs/content/docs/ja/magic-prompts.mdx new file mode 100644 index 00000000..a31cc297 --- /dev/null +++ b/packages/docs/content/docs/ja/magic-prompts.mdx @@ -0,0 +1,26 @@ +--- +title: マジックプロンプト +description: OpenChamber の自動フローの背後にある組み込みプロンプトをカスタマイズします。 +--- + +# マジックプロンプト + +OpenChamber は、コミットメッセージの作成、PR の下書き、Issue のレビュー、コンフリクト解決、セッション要約などを自動で行うとき、裏側で組み込みプロンプトを使います。Magic Prompts は、それらのプロンプトを読み、書き換える場所です。**Settings → Magic Prompts** から開きます。 + +通常の利用ではこのページは必要ありません。たとえばコミットメッセージを特定のスタイルにしたいなど、フローの動作を変えたいときに使ってください。 + +## プロンプトを編集する + +1. **Settings → Magic Prompts** を開きます。 +2. サイドバーのグループ(Git、GitHub、Planning、Session)からプロンプトを選びます。 +3. テキストを編集して保存します。 + +一部のプロンプトには、表示される部分(あなたが見るメッセージ)と instructions 部分(エージェント向けの非表示ガイド)があります。プロンプトには差分や Issue タイトルなどを OpenChamber が埋める `{{placeholders}}` を含められます。これらは残してください。 + +## リセット + +気が変わりましたか?各プロンプトには **reset to default** があり、すべてを最初からやり直したい場合は **reset all** もあります。 + +## 関連 + +- [Git と GitHub ワークフロー](/git/) — これらのプロンプトの多くが Git フローを支えています diff --git a/packages/docs/content/docs/ja/mcp.mdx b/packages/docs/content/docs/ja/mcp.mdx new file mode 100644 index 00000000..8d639f2c --- /dev/null +++ b/packages/docs/content/docs/ja/mcp.mdx @@ -0,0 +1,30 @@ +--- +title: MCP サーバー +description: MCP サーバーを追加して、エージェントに追加ツールを渡します。 +--- + +# MCP サーバー + +MCP サーバーは、エージェントに追加ツールを与えます。たとえばデータベース検索、API 呼び出し、利用中サービスの読み取りなどです。**Settings → MCP** で追加します。 + +## サーバーを追加する + +1. **Settings → MCP** を開きます。 +2. サーバーを追加し、種類を選びます。 + - **local** — OpenChamber があなたのマシンでコマンドを実行します。実行するコマンドと、必要なら環境変数を指定します。 + - **remote** — OpenChamber が誰かがホストする URL に接続します。URL と必要なヘッダー(たとえば認証トークン)を指定します。 +3. 保存します。サーバーはデフォルトでオンになります。削除せずにオフにできます。 + +## 適用範囲 + +サーバーを追加するときにスコープを選びます。 + +- **personal** — すべてのプロジェクトで利用できます +- **project** — 現在のプロジェクトでのみ利用でき、プロジェクトの他の設定と一緒に保存されます + +サーバー名には小文字、数字、ハイフン、アンダースコアを使います。 + +## 関連 + +- [プロバイダー、モデル、エージェント](/providers/) — 先にモデルを接続する +- [スキル](/skills/) — エージェントができることを広げる別の方法 diff --git a/packages/docs/content/docs/ja/mobile.mdx b/packages/docs/content/docs/ja/mobile.mdx new file mode 100644 index 00000000..90a89613 --- /dev/null +++ b/packages/docs/content/docs/ja/mobile.mdx @@ -0,0 +1,31 @@ +--- +title: PWA とモバイルアクセス +description: OpenChamber をアプリとしてインストールし、スマートフォンから使います。 +--- + +# PWA とモバイルアクセス + +OpenChamber の Web アプリはスマートフォンアプリのようにインストールできます(PWA)。ホーム画面に置いて全画面で使えます。[トンネル](/tunnels/) と組み合わせると、どこからでもセッションを確認できます。 + +## インストールする + +OpenChamber はブラウザ組み込みのインストール機能を使うため、別途ダウンロードは不要です。 + +- **デスクトップブラウザ** — アドレスバーの **Install** オプションを使います +- **iPhone/iPad (Safari)** — 共有 → **ホーム画面に追加** +- **Android (Chrome)** — メニュー → **アプリをインストール** / **ホーム画面に追加** + +インストール後は、ブラウザの枠がない専用ウィンドウで開きます。 + +## スマートフォンからアクセスする + +サーバーがコンピューター上で動いている OpenChamber をスマートフォンで開くには、[トンネル](/tunnels/) を開始し、スマートフォンでリンクを開く(または QR コードをスキャンする)だけです。この操作をするときは必ず強力な [UI パスワード](/security/) を使ってください。 + +## モバイル設定 + +**Settings → OpenChamber** には、モバイルやインストール済みアプリの体験を調整するいくつかのオプションがあります。インストール名、画面の向き、オンスクリーンキーボードの動作などです。 + +## 関連 + +- [トンネル](/tunnels/) — 別ネットワークからインスタンスにアクセスする +- [セキュリティ](/security/) — 公開する前に UI を保護する diff --git a/packages/docs/content/docs/ja/multi-run.mdx b/packages/docs/content/docs/ja/multi-run.mdx new file mode 100644 index 00000000..1e5dac1b --- /dev/null +++ b/packages/docs/content/docs/ja/multi-run.mdx @@ -0,0 +1,34 @@ +--- +title: Multi-run +description: 同じプロンプトを複数のモデルまたはセッションで同時に実行します。 +--- + +# Multi-run + +Multi-run は 1 つのフォームから複数のセッションを起動します。同じタスクを異なるモデルで試し、結果を比較するのに便利です。セッションサイドバー上部のボタンから開きます。 + +## Multi-run を開始する + +1. Multi-run ランチャーを開きます。 +2. プロジェクトを選び、実行グループに名前を付けます。 +3. プロンプトを書き、それを実行するモデルを選びます(1 グループにつき最大 5 つ)。 +4. **isolate runs** するかどうかを選びます。 +5. 起動します。 + +各モデルには独自のセッションが作られ、すべて同じプロンプトから始まります。 + +## 分離実行 + +**isolate runs** をオンにすると、各実行に独自の [worktree](/worktrees/) とブランチが与えられ、同じファイルに触れないようになります。これには Git リポジトリが必要です。Git リポジトリではないフォルダでは自動的にオフになります。実行の開始元ブランチを選んでください。 + +分離をオフにすると、各実行はプロジェクトフォルダ内の通常のセッションになります。 + +## 結果を比較する + +各実行は通常のセッションなので、開いて読み、残すか破棄するか選べます。アプローチを比較するために実行した場合は、横に並べて確認し、最良のものを先へ進めてください。 + +1 つの実行だけ開始に失敗しても、他の実行は起動します。要求した数より少ないセッションが表示されるだけです。 + +## 関連 + +- [Worktree セッション](/worktrees/) — 分離が内部でどう動くか diff --git a/packages/docs/content/docs/ja/notes-todos-plans.mdx b/packages/docs/content/docs/ja/notes-todos-plans.mdx new file mode 100644 index 00000000..d0b29604 --- /dev/null +++ b/packages/docs/content/docs/ja/notes-todos-plans.mdx @@ -0,0 +1,37 @@ +--- +title: プロジェクトのメモ、Todo、計画 +description: プロジェクトごとにメモ、Todo リスト、保存済み計画を保持します。 +--- + +# プロジェクトのメモ、Todo、計画 + +各プロジェクトには、メモ、Todo リスト、保存済み計画のための専用スペースがあります。これらは特定のセッションではなくプロジェクトに属するため、セッションを移動しても残ります。右サイドバーの **Context** タブ(モバイルでは専用タブ)で見つけられます。 + +## メモ + +プロジェクトについて覚えておきたいことを自由に書けるメモ欄です。入力すると自動で保存されます。 + +## Todo + +シンプルなチェックリストです。項目を追加し、チェックを付け、ドラッグで並び替え、完了したものを消去できます。 + +各 Todo には **send** メニューがあり、エージェントに渡せます。 + +- 現在のセッションに送る +- それを使って新しいセッションを開始する +- それを使って新しい [worktree セッション](/worktrees/) を開始する(プロジェクトが Git リポジトリの場合のみ) + +## 計画 + +長めの計画を保存済みファイルとして置いておく場所です。次のことができます。 + +- Markdown またはテキストファイルから計画をインポートする +- 計画を開いてサイドパネルで読む +- 不要になった計画を削除する + +メモが保存され、Todo がチェックされ、または計画が一覧に表示された状態で Context タブに戻れば、操作が反映されたことが分かります。 + +## 関連 + +- [Worktree セッション](/worktrees/) — Todo を専用ブランチで実行する +- [プロジェクト](/projects/) — これらはアクティブなプロジェクトに属します diff --git a/packages/docs/content/docs/ja/notifications.mdx b/packages/docs/content/docs/ja/notifications.mdx new file mode 100644 index 00000000..0c3fc1cd --- /dev/null +++ b/packages/docs/content/docs/ja/notifications.mdx @@ -0,0 +1,34 @@ +--- +title: 通知 +description: セッションがあなたを必要とするとき、または完了したときに知らせます。 +--- + +# 通知 + +通知は、画面を見張っていなくても注意が必要なことを知らせます。セッションの完了、エラー、質問、何かを行うための権限要求などです。**Settings → OpenChamber → Notifications** で設定します。 + +## オンにする + +1. **Settings → OpenChamber → Notifications** を開きます。 +2. ブラウザまたはシステムが求めたら通知を許可します。 +3. 何について通知を受けたいか選びます。 + - セッションが**完了**した + - セッションで**エラー**が起きた + - セッションが**質問**した + - セッションが**権限**を必要としている + - **サブタスク**が完了した + +## 通知の届き方 + +- **デスクトップ**では、ネイティブのシステム通知を受け取ります +- **ブラウザまたはインストール済みアプリ**では、Web Push 通知を受け取るため、タブがバックグラウンドでも届きます + +自動承認に設定されたセッションでは、権限通知で何度も邪魔されることはありません。 + +## 文言をカスタマイズする + +通知の種類ごとに、エージェント名やモデルなどのフィールドを使ったタイトルとメッセージテンプレートを編集できます。直近メッセージをどれだけ含めるかにも上限があり、通知が短く保たれます。 + +## 関連 + +- [音声モード](/voice/) — 代わりに返信を読み上げで聞く diff --git a/packages/docs/content/docs/ja/opencode-server.mdx b/packages/docs/content/docs/ja/opencode-server.mdx new file mode 100644 index 00000000..27535e4a --- /dev/null +++ b/packages/docs/content/docs/ja/opencode-server.mdx @@ -0,0 +1,97 @@ +--- +title: OpenCode サーバー +description: OpenChamber をローカルまたはリモートの OpenCode サーバーに接続します。 +--- + +# OpenCode サーバー + +OpenChamber は OpenCode サーバーの上で動作します。デフォルトでは OpenChamber がサーバーを起動するため、何もする必要はありません。このページが必要なのは、すでに実行しているサーバーに OpenChamber を向けたい場合、または OpenChamber が起動するサーバーを管理したい場合だけです。 + +## OpenChamber がサーバーを見つける順序 + +OpenChamber の起動時、次の順序でサーバーを探します。 + +1. すでに起動済みのサーバーを再利用する +2. 指定されていれば外部サーバーに接続する(下記参照) +3. デフォルトポート(`4096`)のサーバーを自動検出する +4. それ以外の場合は、自分でサーバーを起動して管理する + +何も設定されていなければ、手順 4 が自動的に実行され、そのまま使えるようになります。 + +## すでに実行しているサーバーに接続する + +OpenChamber を起動する前に次を設定します。 + +```bash +OPENCODE_HOST=http://localhost:4096 OPENCODE_SKIP_START=true openchamber +``` + +- `OPENCODE_HOST` — ポートを含む OpenCode サーバーの完全なアドレスです(`http://localhost:4096` のような値)。末尾にパスを付けてはいけません。 +- `OPENCODE_SKIP_START=true` — OpenChamber に自分のサーバーを起動しないよう伝えます。 + +ポートだけを変えたい場合は、`OPENCODE_HOST` ではなく `OPENCODE_PORT` を設定します。 + +`OPENCODE_HOST` にポートがない、またはパスが含まれている場合、OpenChamber はそれを無視し、自分のサーバー起動にフォールバックします。期待した接続が行われなかった場合は、起動ログの `[config]` 警告を確認してください。 + +## CLI からサーバーを管理する + +```bash +openchamber status +openchamber logs +openchamber restart +openchamber stop +``` + +`openchamber` だけを実行すると、サーバーはバックグラウンドで起動します。ターミナルに接続したままにするには `--foreground` を追加します。 + +## ログイン時に OpenChamber を起動する + +`startup enable` を使うと、ネイティブのユーザーサービスをインストールできます。OpenChamber は macOS では `launchd`、Linux では `systemd --user`、Windows では Task Scheduler を使います。 + +```bash +openchamber startup enable +openchamber startup status +openchamber startup disable +``` + +UI を保護するには、サービスを有効化するときにパスワードを設定します。 + +```bash +OPENCHAMBER_UI_PASSWORD='secret' openchamber startup enable +``` + +ログイン時に起動し、デスクトップまたはモバイルクライアント向けに使うヘッドレスサーバーでは、`--api-only` と到達可能な host を含めます。 + +```bash +openchamber startup enable --port 3000 --api-only --host 0.0.0.0 --ui-password secret +``` + +`startup enable` は現在の環境をサービスにスナップショットするため、同じシェルから `openchamber` を起動した場合に近い動作になります。これにより、プロバイダートークン、`PATH`、SSH agent 設定、その他の CLI 認証/設定変数が利用できます。最小限のサービス環境にしたい場合は `--no-env-snapshot` を使ってください。 + +スタートアップサービスは `--port`、`--host`、`--ui-password`、`--api-only` を記憶します。CLI の restart と update restart は保存済み設定を再利用します。 + +別の OpenChamber アプリ向けに接続リンクを作成するには、次を使います。 + +```bash +openchamber connect-url --port 3000 --server http://your-host:3000 --qr +``` + +`openchamber connect-url --help` を実行すると、`--name`、`--lan`、`--server`、`--api-only`、`--ui-password`、`--qr` など、すべてのリンクオプションを確認できます。 + +その実行中サービスに対して、トンネルは独立して管理できます。 + +```bash +openchamber tunnel start --port 3000 +openchamber tunnel stop --port 3000 +``` + +トンネルを停止しても、サービスやアプリは再起動されません。 + +## "OpenCode is restarting" + +サーバーの起動中または再起動中、OpenChamber は "OpenCode is restarting" 状態を表示し、準備が整うまでリクエストを一時停止します。これは起動直後や再起動直後には正常です。いつまでも消えない場合は、[OpenCode 接続](/troubleshooting/opencode-connection/) を参照してください。 + +## 関連 + +- [プロバイダー、モデル、エージェント](/providers/) — サーバーの接続先を設定する +- [OpenCode 接続](/troubleshooting/opencode-connection/) — 接続できない場合 diff --git a/packages/docs/content/docs/ja/preview.mdx b/packages/docs/content/docs/ja/preview.mdx new file mode 100644 index 00000000..6b3e22fa --- /dev/null +++ b/packages/docs/content/docs/ja/preview.mdx @@ -0,0 +1,32 @@ +--- +title: プレビューと開発サーバー +description: 実行中の開発サーバーを OpenChamber 内で開きます。 +--- + +# プレビューと開発サーバー + +開発サーバーを起動すると、OpenChamber は別のブラウザタブではなくアプリ内で直接開けます。サイトをチャットの横で見ながら、コンソールを取得し、要素を指して質問できます。 + +## プレビューを開く + +OpenChamber はターミナル出力からローカルアドレスを監視します(Vite、Next.js、Astro などが表示する `Local:` 行)。見つけると次のことができます。 + +- ターミナルに **Open preview** ボタンが表示されます +- 自動オープンを有効にした [プロジェクトアクション](/project-actions/) が開きます +- チャットメッセージ内のローカルリンクからも開けます + +サイトはサイドパネルに読み込まれます。プレビューできるのはローカルアドレス(あなたのマシン上)のみです。 + +## コンソールと検査 + +プレビューパネルでは次のことができます。 + +- ページの **console** を見る — エラー、警告、ログを好きなようにフィルターできます +- **inspect** をオンにし、任意の要素をクリックして、そのメモ(セレクター、スタイル、位置、スクリーンショット)をそのままチャットへ送る + +これは「このボタン、ここ」とエージェントに伝える最速の方法です。 + +## 関連 + +- [プロジェクトアクション](/project-actions/) — サーバー起動時に自動で開く +- [デスクトップブラウザ](/desktop-browser/) — デスクトップで任意のページに同じツールを使う diff --git a/packages/docs/content/docs/ja/project-actions.mdx b/packages/docs/content/docs/ja/project-actions.mdx new file mode 100644 index 00000000..9d10579f --- /dev/null +++ b/packages/docs/content/docs/ja/project-actions.mdx @@ -0,0 +1,28 @@ +--- +title: プロジェクトアクション +description: よく実行するコマンドを保存し、ワンクリックで起動します。 +--- + +# プロジェクトアクション + +プロジェクトアクションは、一度保存してクリックで実行できるシェルコマンドです。開発サーバー、ビルド、テスト実行などに使えます。各プロジェクトが独自の一覧を持ちます。**Settings → Projects → Project Actions** で設定します。 + +## アクションを追加する + +1. **Settings → Projects** を開き、**Project Actions** セクションを見つけます。 +2. アクションを追加し、名前を付け、アイコンを選び、実行するコマンドを入力します。 +3. 保存します。 + +コマンドが特定の OS でしか意味を持たない場合は、アクションをその OS に限定できます。 + +## アクションを実行する + +アクションはアプリヘッダーのメニューにあります。クリックすると、OpenChamber はプロジェクトフォルダ内のターミナルで実行し、出力を見られるようにターミナルビューへ切り替えます。同じメニューから停止できます。 + +## 開発サーバーを自動で開く + +サーバーを起動するアクションでは **auto-open URL** をオンにします。OpenChamber は出力からローカルアドレスを監視し、開く候補として表示します。[プレビューと開発サーバー](/preview/) を参照してください。デスクトップでは SSH ポートフォワード経由にすることもできます。 + +## 関連 + +- [プレビューと開発サーバー](/preview/) — 実行中の開発サーバーを OpenChamber 内で開く diff --git a/packages/docs/content/docs/ja/project-icons.mdx b/packages/docs/content/docs/ja/project-icons.mdx new file mode 100644 index 00000000..f231193b --- /dev/null +++ b/packages/docs/content/docs/ja/project-icons.mdx @@ -0,0 +1,20 @@ +--- +title: プロジェクトアイコン +description: 各プロジェクトに見分けやすいアイコンを付けます。 +--- + +# プロジェクトアイコン + +プロジェクトアイコンがあると、プロジェクトをひと目で見分けやすくなります。OpenChamber は自動で見つけようとしますが、自分で設定することもできます。**Settings → Projects** で管理します。 + +## 自動検出 + +プロジェクトを追加すると、OpenChamber はその中の `favicon` ファイルを探し、プロジェクトアイコンとして使います。リポジトリにすでに favicon が含まれていれば、多くの場合アイコンは自動で表示されます。何もする必要はありません。 + +## 自分で設定する + +**Settings → Projects** を開き、画像をアップロードします(PNG、JPEG、SVG、最大 5 MB)。カスタム画像は自動検出されたものより優先されます。代わりに色を選ぶことも、画像を削除して自動検出に戻すこともできます。 + +## 関連 + +- [プロジェクト](/projects/) — プロジェクトの名前、色、整理 diff --git a/packages/docs/content/docs/ja/projects.mdx b/packages/docs/content/docs/ja/projects.mdx new file mode 100644 index 00000000..2c91f48d --- /dev/null +++ b/packages/docs/content/docs/ja/projects.mdx @@ -0,0 +1,34 @@ +--- +title: プロジェクト +description: 作業をプロジェクトに整理し、切り替えます。 +--- + +# プロジェクト + +プロジェクトは、OpenChamber が追跡するあなたのコンピューター上のフォルダです。通常は 1 つのコードベースです。プロジェクトを切り替えると、エージェントが作業するフォルダ、そのプロジェクトのセッション、設定も切り替わります。 + +## プロジェクトを追加する + +プロジェクトは複数の場所から追加できます。 + +- コマンドパレットの **Add project** 項目 +- セッションサイドバー上部の **+** ボタン +- ディレクトリを選ぶときのフォルダブラウザ + +フォルダを指定すると、OpenChamber が記憶します。名前はフォルダ名から取られますが、後で変更できます。 + +## プロジェクトを切り替える + +サイドバーからプロジェクトを選ぶとアクティブになります。セッション、Git、メモなどすべてが、開いているプロジェクトに追従します。 + +## プロジェクトを見分けやすくする + +**Settings → Projects** を開くと、プロジェクトにカスタム名、色、アイコンを設定できます。OpenChamber はアイコンを自動で探します。[プロジェクトアイコン](/project-icons/) を参照してください。 + +> VS Code では、OpenChamber は開いているフォルダを常に唯一のプロジェクトとして使います。そのため追加や切り替えはありません。Projects 設定ページも表示されません。 + +## 関連 + +- [プロジェクトのメモ、Todo、計画](/notes-todos-plans/) — プロジェクトごとに作業メモを保持する +- [プロジェクトアクション](/project-actions/) — よく実行するコマンドを保存する +- [コンテキスト](/context/) — セッションがモデルの記憶容量をどれだけ使っているかを見る diff --git a/packages/docs/content/docs/ja/providers.mdx b/packages/docs/content/docs/ja/providers.mdx new file mode 100644 index 00000000..56b1616b --- /dev/null +++ b/packages/docs/content/docs/ja/providers.mdx @@ -0,0 +1,49 @@ +--- +title: プロバイダー、モデル、エージェント +description: AI プロバイダーを接続し、モデルを選び、エージェントを設定します。 +--- + +# プロバイダー、モデル、エージェント + +OpenChamber が何かを行うには、少なくとも 1 つの AI プロバイダーが接続されている必要があります。このページでは、プロバイダーの接続、モデルの選択、エージェントの調整について説明します。 + +## プロバイダーを接続する + +1. **Settings → Providers** を開きます。 +2. **Add provider** メニューを開き、まだ接続されていないプロバイダーを選びます。 +3. プロバイダーに応じて、次のどちらかの方法でサインインします。 + - **API key** — キーを貼り付けて保存します。 + - **Sign-in (device flow)** — OpenChamber がリンクと短いコードを表示します。リンクを開き、コードを入力して承認します。OpenChamber が自動で接続を完了します。 + +プロバイダーが接続済みとして表示されると、そのモデルがチャットで使えるようになります。 + +切断するには、プロバイダーを開き、サインインを削除する操作を選びます。 + +## モデルを選ぶ + +作業している場所でモデルを選びます。 + +- チャットでは、メッセージバーのモデルピッカーを使って、そのセッションのプロバイダーとモデルを設定します +- エージェントごとに、デフォルトモデルを設定します(下記) + +## エージェントを設定する + +エージェントは、名前付きの設定です。モデル、人格、許可された操作をまとめます。 + +1. **Settings → Agents** を開きます。 +2. エージェントを選ぶか、新しく作成します。 +3. 次の項目を編集できます。 + - **description** — エージェントの用途 + - **model** — デフォルトモデル + - **temperature** — 回答の創造性 + - **prompt** — 常に従う固定指示 + - **tool rules** — 使用してよいツール + +## サインイン情報の保存場所 + +プロバイダーのサインイン情報は OpenChamber ではなく OpenCode に保存されるため、OpenCode CLI と共有されます。同じプロバイダーを複数の場所で設定した場合、最も具体的な設定が優先されます。プロジェクトごとの設定は個人設定を上書きします。 + +## 関連 + +- [MCP サーバー](/mcp/) — エージェントに追加ツールを加える +- [使用量とクォータ](/usage/) — 使った量を追跡する diff --git a/packages/docs/content/docs/ja/quickstart.mdx b/packages/docs/content/docs/ja/quickstart.mdx new file mode 100644 index 00000000..9b009d4c --- /dev/null +++ b/packages/docs/content/docs/ja/quickstart.mdx @@ -0,0 +1,26 @@ +--- +title: クイックスタート +description: OpenChamber をすばやく始め、タスクに合ったアプリを選びます。 +--- + +# クイックスタート + +## 最短手順 + +1. [OpenCode](https://opencode.ai) をインストールします。 +2. OpenChamber CLI をインストールします(1 行コマンドは [インストール](/install/) を参照)。 +3. `openchamber --ui-password be-creative-here` を実行します。 +4. CLI が表示する URL(通常は `http://localhost:3000`)を開きます。 +5. スマートフォンから使うには、[トンネル](/tunnels/) を開始して QR コードをスキャンします。 + +ブラウザに OpenChamber のセッション一覧が表示されるはずです。読み込まれれば、起動できています。 + +特にインスタンスをインターネットに公開する予定がある場合は、強力な UI パスワードを使ってください。 + +ページが読み込まれない場合は、[トラブルシューティング](/troubleshooting/) を確認してください。 + +## どのアプリを使うべきですか? + +- macOS での日常作業には **desktop** を使います +- リモートアクセスやスマートフォンからの確認には **web** を使います +- コードのすぐ横でセッションを使うには **VS Code** を使います diff --git a/packages/docs/content/docs/ja/remote-instances.mdx b/packages/docs/content/docs/ja/remote-instances.mdx new file mode 100644 index 00000000..44267ac0 --- /dev/null +++ b/packages/docs/content/docs/ja/remote-instances.mdx @@ -0,0 +1,42 @@ +--- +title: リモートインスタンス +description: デスクトップアプリを SSH 経由で別マシン上の OpenChamber に接続します。 +--- + +# リモートインスタンス + +デスクトップアプリは、作業サーバー、クラウドマシン、ホームラボなど、別マシン上で動く OpenChamber に SSH 経由で接続し、その UI をローカルのように画面へ表示できます。**Settings → Remote Instances** で設定します。 + +> リモートインスタンスは**デスクトップ専用**機能です。Web または VS Code では、代わりに [OpenCode サーバー](/opencode-server/) の環境変数を使ってリモートサーバーに接続します。 + +## リモートインスタンスを追加する + +1. **Settings → Remote Instances** を開き、追加します。 +2. そのマシンに接続するために普段使う SSH コマンドと、ニックネームを入力します。 +3. そこで OpenChamber をどう実行するか選びます。 + - **managed** — OpenChamber がリモートマシンに自分自身をインストールして起動します + - **external** — すでに実行中の OpenChamber に接続します +4. 接続します。 + +OpenChamber は接続確認、リモートのセットアップ、サーバー起動、ポート転送の各ステップを進め、現在の段階を表示します。**ready** に到達すると、リモート UI がローカルに読み込まれます。 + +## 認証情報 + +SSH と UI のパスワードを保存するか、毎回入力するかを選べます。接続が落ちた場合、OpenChamber はどのステップで失敗したかを表示するため、修正できます。[リモートアクセス](/troubleshooting/remote-access/) を参照してください。 + +## 直接接続リンク + +リモートマシンですでに OpenChamber が実行されている場合は、そこで接続リンクを作成し、**Settings → Remote Instances → Server links** でインポートします。 + +```bash +openchamber connect-url --port 3000 --server http://your-host:3000 --qr +``` + +`connect-url` は、そのポートで何も実行されていなければ先にサーバーを起動します。ヘッドレスサーバーには `--api-only`、起動時に LAN にバインドするには `--lan`、ブラウザアクセスを保護するには `--ui-password`、保存接続にラベルを付けるには `--name` を追加します。 + +生成されたリンクには OpenChamber アプリ用のクライアントトークンが含まれます。このトークンはブラウザ UI パスワードとは別で、取り消すか削除するまでサーバー再起動後も残ります。 + +## 関連 + +- [OpenCode サーバー](/opencode-server/) — Web または VS Code でリモートサーバーに接続する +- [リモートアクセス](/troubleshooting/remote-access/) — 接続が完了しない場合 diff --git a/packages/docs/content/docs/ja/reverse-proxy.mdx b/packages/docs/content/docs/ja/reverse-proxy.mdx new file mode 100644 index 00000000..161b70a8 --- /dev/null +++ b/packages/docs/content/docs/ja/reverse-proxy.mdx @@ -0,0 +1,347 @@ +--- +title: リバースプロキシ +description: Nginx、Nginx Proxy Manager、その他のリバースプロキシの背後で OpenChamber を正しく設定します。 +--- + +# リバースプロキシ + +Nginx、Nginx Proxy Manager、Caddy、Cloudflare、その他のリバースプロキシの背後で OpenChamber を実行する場合は、このページを使ってください。 + +## プロキシする前に + +1. まず OpenChamber が直接動くことを確認します。 +2. 同じネットワークから `http://:3000` またはカスタムポートを開きます。 +3. 直接接続が動いてから、リバースプロキシを追加します。 + +## プロキシが対応すべきもの + +- ライブメッセージ転送用の WebSocket: + - `/api/event/ws` + - `/api/global/event/ws` + - `/api/terminal/ws` +- バッファリングなしの SSE: + - `/api/event` + - `/api/global/event` + - `/api/notifications/stream` + - `/api/openchamber/events` + - `/api/terminal/:sessionId/stream` +- 添付ファイルとファイル操作向けの大きなリクエストボディ +- ライブストリームとターミナルセッション向けの長い read timeout + +## 重要なルール + +- WebSocket プロキシを有効にします。 +- SSE ルートではバッファリングを無効にします。 +- OpenChamber がすでにレスポンスを圧縮している場合、プロキシ側の gzip を無効にします。 +- 圧縮を有効にする層は 1 つだけにします。 +- `Host`、`X-Forwarded-For`、`X-Forwarded-Proto` など通常のプロキシヘッダーを転送します。 +- ユーザーがファイルをアップロードする場合は body size limit を増やします。 + +## クイックチェックリスト + +- OpenChamber に LAN から直接到達できる +- プロキシで WebSocket が有効 +- SSE ルートのバッファリングがオフ +- プロキシホストで `gzip off`、または別の方法でプロキシ圧縮が無効 +- `client_max_body_size` が添付ファイルに十分な大きさ +- `proxy_read_timeout` がストリームに十分長い + +## 例: Nginx + +
+設定例を表示 + +```nginx +client_max_body_size 50M; +client_body_buffer_size 50M; +proxy_request_buffering off; + +proxy_http_version 1.1; +proxy_set_header Connection ""; +proxy_set_header Host $host; +proxy_set_header X-Real-IP $remote_addr; +proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; +proxy_set_header X-Forwarded-Proto $scheme; +proxy_set_header X-Forwarded-Host $host; + +gzip off; + +location = /api/terminal/ws { + proxy_pass http://127.0.0.1:3000; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_buffering off; + proxy_cache off; + proxy_read_timeout 3600s; + proxy_send_timeout 3600s; +} + +location = /api/global/event/ws { + proxy_pass http://127.0.0.1:3000; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_buffering off; + proxy_cache off; + proxy_read_timeout 3600s; + proxy_send_timeout 3600s; +} + +location = /api/event/ws { + proxy_pass http://127.0.0.1:3000; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_buffering off; + proxy_cache off; + proxy_read_timeout 3600s; + proxy_send_timeout 3600s; +} + +location ~ ^/api/(event|global/event|notifications/stream|openchamber/events)$ { + proxy_pass http://127.0.0.1:3000; + proxy_set_header Accept "text/event-stream"; + proxy_set_header Cache-Control "no-cache"; + proxy_buffering off; + proxy_cache off; + gzip off; + add_header X-Accel-Buffering "no" always; + add_header Cache-Control "no-cache, no-transform" always; + proxy_read_timeout 3600s; + proxy_send_timeout 3600s; +} + +location ~ ^/api/terminal/.+/stream$ { + proxy_pass http://127.0.0.1:3000; + proxy_set_header Accept "text/event-stream"; + proxy_set_header Cache-Control "no-cache"; + proxy_buffering off; + proxy_cache off; + gzip off; + add_header X-Accel-Buffering "no" always; + add_header Cache-Control "no-cache, no-transform" always; + proxy_read_timeout 3600s; + proxy_send_timeout 3600s; +} + +location /api { + proxy_pass http://127.0.0.1:3000; + proxy_read_timeout 3600s; + proxy_send_timeout 3600s; +} + +location / { + proxy_pass http://127.0.0.1:3000; +} +``` + +
+ +## 例: Nginx Proxy Manager + +
+Advanced タブの例を表示 + +```nginx +client_max_body_size 50M; +client_body_buffer_size 50M; +proxy_request_buffering off; + +proxy_http_version 1.1; +proxy_set_header Connection ""; +proxy_set_header Host $host; +proxy_set_header X-Real-IP $remote_addr; +proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; +proxy_set_header X-Forwarded-Proto $scheme; +proxy_set_header X-Forwarded-Host $host; + +gzip off; + +location = /api/terminal/ws { + proxy_pass http://127.0.0.1:3000; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_buffering off; + proxy_cache off; + proxy_read_timeout 3600s; + proxy_send_timeout 3600s; + proxy_connect_timeout 30s; +} + +location = /api/global/event/ws { + proxy_pass http://127.0.0.1:3000; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_buffering off; + proxy_cache off; + proxy_read_timeout 3600s; + proxy_send_timeout 3600s; + proxy_connect_timeout 30s; +} + +location = /api/event/ws { + proxy_pass http://127.0.0.1:3000; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_buffering off; + proxy_cache off; + proxy_read_timeout 3600s; + proxy_send_timeout 3600s; + proxy_connect_timeout 30s; +} + +location = /api/event { + proxy_pass http://127.0.0.1:3000; + proxy_set_header Accept "text/event-stream"; + proxy_set_header Cache-Control "no-cache"; + proxy_buffering off; + proxy_cache off; + gzip off; + add_header X-Accel-Buffering "no" always; + add_header Cache-Control "no-cache, no-transform" always; + proxy_read_timeout 3600s; + proxy_send_timeout 3600s; + proxy_connect_timeout 30s; +} + +location = /api/global/event { + proxy_pass http://127.0.0.1:3000; + proxy_set_header Accept "text/event-stream"; + proxy_set_header Cache-Control "no-cache"; + proxy_buffering off; + proxy_cache off; + gzip off; + add_header X-Accel-Buffering "no" always; + add_header Cache-Control "no-cache, no-transform" always; + proxy_read_timeout 3600s; + proxy_send_timeout 3600s; + proxy_connect_timeout 30s; +} + +location = /api/notifications/stream { + proxy_pass http://127.0.0.1:3000; + proxy_set_header Accept "text/event-stream"; + proxy_set_header Cache-Control "no-cache"; + proxy_buffering off; + proxy_cache off; + gzip off; + add_header X-Accel-Buffering "no" always; + add_header Cache-Control "no-cache, no-transform" always; + proxy_read_timeout 3600s; + proxy_send_timeout 3600s; + proxy_connect_timeout 30s; +} + +location = /api/openchamber/events { + proxy_pass http://127.0.0.1:3000; + proxy_set_header Accept "text/event-stream"; + proxy_set_header Cache-Control "no-cache"; + proxy_buffering off; + proxy_cache off; + gzip off; + add_header X-Accel-Buffering "no" always; + add_header Cache-Control "no-cache, no-transform" always; + proxy_read_timeout 3600s; + proxy_send_timeout 3600s; + proxy_connect_timeout 30s; +} + +location ~ ^/api/terminal/.+/stream$ { + proxy_pass http://127.0.0.1:3000; + proxy_set_header Accept "text/event-stream"; + proxy_set_header Cache-Control "no-cache"; + proxy_buffering off; + proxy_cache off; + gzip off; + add_header X-Accel-Buffering "no" always; + add_header Cache-Control "no-cache, no-transform" always; + proxy_read_timeout 3600s; + proxy_send_timeout 3600s; + proxy_connect_timeout 30s; +} + +location /api { + proxy_pass http://127.0.0.1:3000; + proxy_read_timeout 3600s; + proxy_send_timeout 3600s; + proxy_connect_timeout 30s; +} + +location / { + proxy_pass http://127.0.0.1:3000; +} +``` + +
+ +このホストでは Nginx Proxy Manager の `Websockets Support` も有効にしてください。 + +## よくある失敗の兆候 + +### ページは読み込まれるが、メッセージ送信に失敗する + +- プロキシで WebSocket が有効になっていません +- `/api/event/ws` または `/api/global/event/ws` が正しく通っていません + +### 通知またはライブ状態が更新されない + +- SSE ルートのどれかがバッファリングまたはキャッシュされています +- `X-Accel-Buffering "no"` がありません + +### ファイルアップロードに失敗する + +- `client_max_body_size` が小さすぎます + +### ローカルではすべて動くが、プロキシ背後でだけ壊れる + +- プロキシがライブ通信を圧縮またはバッファリングしています +- プロキシに WebSocket 対応がありません + +## 例: Caddy + +
+設定例を表示 + +```caddy +reverse_proxy 127.0.0.1:3000 { + # WebSocket support is automatic in Caddy + + # Flush SSE responses immediately + flush_interval -1 + + # Pass through Host and proxy headers + header_up Host {host} + header_up X-Real-IP {remote_host} + header_up X-Forwarded-For {remote_host} + header_up X-Forwarded-Proto {scheme} + + # Increase timeouts for long-lived streams + transport http { + read_timeout 3600s + write_timeout 3600s + } +} +``` + +
+ +Caddy は WebSocket upgrade を自動で処理します。追加設定は不要です。`flush_interval -1` ディレクティブにより、SSE チャンクがバッファリングされずすぐ転送されます。 + +## CDN と二重圧縮の警告 + +リバースプロキシの前に Cloudflare などの CDN を置く場合、二重圧縮に注意してください。 + +- OpenChamber は HTTP レスポンスを gzip 圧縮します(しきい値 1 KB)。 +- Cloudflare や他の CDN もデフォルトでレスポンスを圧縮します。 +- これにより、二重圧縮されたレスポンスや誤った `Content-Encoding` ヘッダーが発生することがあります。 + +これを避けるには、**どちらか一方**の層で圧縮を無効にします。 + +- **Cloudflare:** Rules → Compression → disable(または "Passthrough" mode を使用)。 +- **Nginx:** `gzip off`(上の例に含まれています)。 +- **Caddy:** upstream がすでに圧縮済みコンテンツを送る場合、Caddy はデフォルトでは再圧縮しません。 + +SSE ストリーミングルートは OpenChamber 側で圧縮対象外ですが、CDN がまだバッファリングする場合があります。SSE パスでバッファリングを無効にする方法は、CDN のドキュメントを確認してください。 + +## 関連 + +- [トンネル](/tunnels/) +- [トラブルシューティング](/troubleshooting/) diff --git a/packages/docs/content/docs/ja/scheduled-tasks.mdx b/packages/docs/content/docs/ja/scheduled-tasks.mdx new file mode 100644 index 00000000..a9b5301c --- /dev/null +++ b/packages/docs/content/docs/ja/scheduled-tasks.mdx @@ -0,0 +1,33 @@ +--- +title: スケジュールタスク +description: プロンプトをスケジュールに従って自動実行します。 +--- + +# スケジュールタスク + +スケジュールタスクは、たとえば毎日の「昨日の変更を要約」や毎週の整理のように、指定したスケジュールでプロンプトを実行します。実行時には OpenChamber が新しいセッションを開始し、自動でプロンプトを送信します。セッションサイドバー上部のボタンからスケジューラーを開きます。 + +## タスクを作成する + +1. セッションサイドバーからスケジュールタスクダイアログを開きます。 +2. タスクを追加し、名前を付けます。 +3. 実行タイミングを選びます。 + - **daily** — 毎日 1 つ以上の時刻 + - **weekly** — 選んだ曜日と時刻 + - **once** — 1 回だけの日時 +4. 実行内容を設定します。送信するプロンプト、使用するプロバイダー、モデル、エージェントです。プロンプトには `/review` のようなスラッシュコマンドも使えます。 +5. 保存し、タスクが有効になっていることを確認します。 + +任意のタスクは **run now** ですぐ実行でき、期待通り動くか確認できます。 + +## 成功時の見え方 + +実行後、タスクには最後に実行された時刻、成功したかどうか、作成されたセッションへのリンクが表示されます。実行に失敗した場合は、エラーもそこに表示されます。 + +## 注意点 + +タスクは OpenChamber サーバーが実行中の間だけ発火します。閉じると、サーバーが戻るまでスケジュール実行は一時停止します。 + +## 関連 + +- [コマンドとスニペット](/commands-snippets/) — スラッシュコマンドをプロンプトとして再利用する diff --git a/packages/docs/content/docs/ja/security.mdx b/packages/docs/content/docs/ja/security.mdx new file mode 100644 index 00000000..9beda111 --- /dev/null +++ b/packages/docs/content/docs/ja/security.mdx @@ -0,0 +1,37 @@ +--- +title: セキュリティ +description: 公開する前に、パスワードとパスキーで UI を保護します。 +--- + +# セキュリティ + +OpenChamber はあなたのマシンとコードへのアクセスを提供するため、あなた以外が到達できるようにする前に必ず保護してください。このページでは UI パスワード、パスキー、ネットワークに OpenChamber を公開する前に知っておくべきことを説明します。 + +## UI パスワードを設定する + +パスワード付きで OpenChamber を起動すると、ブラウザ UI がそれを要求します。 + +```bash +openchamber --ui-password be-creative-here +``` + +コマンドラインに書く代わりに、`OPENCHAMBER_UI_PASSWORD` 環境変数で設定することもできます。サインイン後、OpenChamber はしばらくそのデバイスを記憶するため、毎回求められることはありません。 + +インスタンスが自分以外から到達可能な場合は、必ずパスワードを設定してください。特に [トンネル](/tunnels/) や public internet 経由の場合は重要です。 + +## パスキー + +パスワードを設定すると、より速くサインインするためにパスキー(Face ID、Touch ID、セキュリティキー)を追加できます。**Settings → OpenChamber → Passkeys** で追加します。 + +パスキーは現在のパスワードに紐づきます。パスワードを変更または削除すると、保存済みパスキーは消去され、再追加が必要になります。 + +## 公開する前に + +- デフォルトでは、OpenChamber はあなたのマシン上(`127.0.0.1`)でのみ待ち受けます。より広く待ち受けるには明示的な変更が必要で、その前にパスワードを設定するべきです。 +- インターネットにポートを開けるより、[トンネル](/tunnels/) または VPN のようなプライベートネットワークを推奨します。 +- OpenChamber を自分の HTTPS サーバーの背後に置く場合は、[リバースプロキシ](/reverse-proxy/) を参照してください。 + +## 関連 + +- [トンネル](/tunnels/) — インスタンスへリモートアクセスする推奨方法 +- [リバースプロキシ](/reverse-proxy/) — OpenChamber を自分のサーバー背後で実行する diff --git a/packages/docs/content/docs/ja/skills-catalog.mdx b/packages/docs/content/docs/ja/skills-catalog.mdx new file mode 100644 index 00000000..c45fa791 --- /dev/null +++ b/packages/docs/content/docs/ja/skills-catalog.mdx @@ -0,0 +1,27 @@ +--- +title: スキルカタログ +description: 既製のスキルを探してインストールします。 +--- + +# スキルカタログ + +Skills Catalog では、自分で書く代わりに、他の人が公開したスキルをインストールできます。**Settings → Skills → Catalog** から開きます。 + +自分でスキルを書く場合は、[スキル](/skills/) を参照してください。 + +## スキルをインストールする + +1. カタログを開きます。 +2. 組み込みソース(Anthropic skills repo と ClawdHub community registry)を閲覧するか、検索します。 +3. スキルを選び、インストールします。 +4. インストール先を選びます。すべての作業で使うか、現在のプロジェクトだけで使うかです。 + +同じ名前のスキルがすでにある場合、OpenChamber はどうするかを確認します。スキップ、上書き、またはスキルごとに判断できます。 + +## 独自ソースを追加する + +任意の Git リポジトリを、`owner/repo` 名または完全な Git URL でソースとして追加できます。プライベートリポジトリには、あなたのマシン上でアクセス設定(SSH キーまたは保存済み認証情報)が必要です。ソースが認証できない場合、カタログは黙って失敗せず、その旨を表示します。 + +## 関連 + +- [スキル](/skills/) — インストール済みスキルを作成・管理する diff --git a/packages/docs/content/docs/ja/skills.mdx b/packages/docs/content/docs/ja/skills.mdx new file mode 100644 index 00000000..cde47de4 --- /dev/null +++ b/packages/docs/content/docs/ja/skills.mdx @@ -0,0 +1,30 @@ +--- +title: スキル +description: エージェントが必要に応じて読み込む再利用可能な指示を作成します。 +--- + +# スキル + +スキルは、関連があるときにエージェントが取り込める再利用可能な指示セットです。たとえば「コミットメッセージの書き方」や「自社 API の規約」などです。**Settings → Skills** で管理します。 + +自分で書く代わりに既製のスキルをインストールする場合は、[スキルカタログ](/skills-catalog/) を参照してください。 + +## スキルを作成する + +1. **Settings → Skills** を開きます。 +2. スキルを作成し、名前と短い説明を付けます。説明はエージェントがそのスキルをいつ適用するか判断する材料なので、具体的に書いてください。 +3. 指示を書きます。必要なら補助ファイルを追加します。 +4. 保存場所を選びます。 + - **personal** — すべてのプロジェクトで利用できます + - **project** — 現在のプロジェクトでのみ利用できます + +## チャットでスキルを使う + +メッセージの途中で `/` を入力するとスキルピッカーが表示されます。そこから選ぶと、エージェントはそのスキルの指示を返信に読み込みます。 + +メッセージの先頭にある `/` は、代わりに [コマンド](/commands-snippets/) を開きます。 + +## 関連 + +- [スキルカタログ](/skills-catalog/) — 他の人が公開したスキルをインストールする +- [コマンドとスニペット](/commands-snippets/) — チャットでテキストを再利用する別の方法 diff --git a/packages/docs/content/docs/ja/ssh-hosts-proxying.mdx b/packages/docs/content/docs/ja/ssh-hosts-proxying.mdx new file mode 100644 index 00000000..d7b5ac46 --- /dev/null +++ b/packages/docs/content/docs/ja/ssh-hosts-proxying.mdx @@ -0,0 +1,48 @@ +--- +title: SSH ホストとプロキシ +description: 保存済み SSH ホストをインポートし、デスクトップアプリで追加の SSH ポートフォワードを設定します。 +--- + +# SSH ホストとプロキシ + +デスクトップアプリの **Settings → Remote Instances** を使うと、保存済み SSH ホストのインポート、リモートマシンへの接続、同じ SSH 接続を通じた追加ポートの利用ができます。 + +> SSH ホストと SSH プロキシは**デスクトップ専用**機能です。あなたのコンピューター上の SSH クライアントを使います。 + +## SSH ホストをインポートする + +OpenChamber は、`ssh work-server` のようなコマンドが使うのと同じローカル SSH config からホストを読み取れます。 + +1. **Settings → Remote Instances** を開きます。 +2. **Saved SSH hosts** からホストを選びます。 +3. ホストがパターンの場合は、`deploy@app.example.com` のような実際の宛先を入力します。 +4. 保存して接続します。 + +OpenChamber はその SSH コマンドを使ってリモートインスタンスを作成します。**ready** に到達すると、リモート OpenChamber UI がデスクトップアプリ内で開きます。 + +## 追加のポートフォワードを加える + +各リモートインスタンスには **Port Forwards** セクションがあります。SSH 接続の片側にあるものが、もう片側のポートへ到達する必要があるときに使います。 + +OpenChamber は 3 種類のフォワードに対応しています。 + +- **Local (-L)** — あなたのコンピューター上にポートを開き、リモートマシン上の何かへ接続します。 +- **Remote (-R)** — リモートマシン上にポートを開き、あなたのコンピューターへ戻って接続します。 +- **Dynamic (-D)** — SSH 接続を通じてローカル SOCKS プロキシを開きます。 + +リモートマシン上で動く多くのアプリプレビューやダッシュボードには、**Local (-L)** を使います。 + +## SOCKS プロキシを使う + +あなたのコンピューター上の他のツールから、リモートマシン経由でブラウズしたい場合は **Dynamic (-D)** を選びます。OpenChamber はその SSH 接続用のローカル SOCKS プロキシポートを開きます。 + +接続が ready になったら、フォワード行からローカルプロキシアドレスをコピーまたは使用します。ブラウザやツールで SOCKS5 プロキシとして設定してください。 + +## 非公開に保つ + +転送ポートにネットワーク上の他のデバイスから意図的にアクセスさせたい場合を除き、ローカル bind host には `127.0.0.1` または `localhost` を使ってください。 + +## 関連 + +- [リモートインスタンス](/remote-instances/) — デスクトップアプリを別マシン上の OpenChamber に接続する +- [リモートアクセス](/troubleshooting/remote-access/) — SSH またはリモートアクセスが接続できない場合 diff --git a/packages/docs/content/docs/ja/themes.mdx b/packages/docs/content/docs/ja/themes.mdx new file mode 100644 index 00000000..4b125972 --- /dev/null +++ b/packages/docs/content/docs/ja/themes.mdx @@ -0,0 +1,30 @@ +--- +title: テーマ +description: 組み込みテーマとユーザー定義テーマで OpenChamber をカスタマイズします。 +--- + +# テーマ + +OpenChamber は組み込みテーマとカスタムテーマ JSON ファイルに対応しています。 + +## カスタムテーマを追加する + +1. テーマディレクトリを作成します。 + +```bash +mkdir -p ~/.config/openchamber/themes +``` + +2. そのディレクトリに JSON ファイルを追加します(例: `my-theme.json`)。 +3. OpenChamber を開き、**Settings -> Theme -> Reload themes** に移動します。 +4. ドロップダウンからテーマを選びます。すぐに適用されます。 + +## テーマの場所 + +- macOS/Linux: `~/.config/openchamber/themes/` + +## 完全な JSON 形式リファレンス + +メインリポジトリのドキュメントにある完全な形式ガイドを使ってください。 + +- [`docs/CUSTOM_THEMES.md`](https://github.com/openchamber/openchamber/blob/main/docs/CUSTOM_THEMES.md) diff --git a/packages/docs/content/docs/ja/troubleshooting.mdx b/packages/docs/content/docs/ja/troubleshooting.mdx new file mode 100644 index 00000000..559d08bf --- /dev/null +++ b/packages/docs/content/docs/ja/troubleshooting.mdx @@ -0,0 +1,40 @@ +--- +title: トラブルシューティング +description: セットアップや実行時によくある問題と、すぐ試せる修正です。 +--- + +# トラブルシューティング + +問題に当たりましたか?下の症状を探し、修正を試してください。 + +## OpenChamber コマンドが終了する、または起動に失敗する + +- Node.js が `>=22` であることを確認します +- `openchamber --version` を実行します +- 必要なら最新の CLI を再インストールします + +## Web UI に到達できない + +- `openchamber logs` でサーバーログを確認します +- アクティブなポートを確認します(デフォルトは `3000`) +- トンネルリンクを試す前に、まず `http://localhost:3000` を直接開きます + +## リモート/トンネルリンクが動かない + +- `openchamber tunnel status --all` を実行します +- 同じインスタンス/ポートからトンネルを再起動します +- 以前のトークンがすでに使用済みなら、接続リンクを再生成します + +完全なセットアップは [トンネル](/tunnels/) を参照してください。リバースプロキシを使っている場合は [リバースプロキシ](/reverse-proxy/) も参照してください。 + +## VS Code 拡張機能が接続しない + +- OpenChamber サーバーが実行中であることを確認します +- 拡張機能が更新済みであることを確認します +- VS Code ウィンドウを再読み込みし、接続を再試行します + +## 関連 + +- [クイックスタート](/quickstart/) +- [トンネル](/tunnels/) +- [リバースプロキシ](/reverse-proxy/) diff --git a/packages/docs/content/docs/ja/troubleshooting/opencode-connection.mdx b/packages/docs/content/docs/ja/troubleshooting/opencode-connection.mdx new file mode 100644 index 00000000..f3b4cfe4 --- /dev/null +++ b/packages/docs/content/docs/ja/troubleshooting/opencode-connection.mdx @@ -0,0 +1,34 @@ +--- +title: OpenCode 接続 +description: OpenChamber が OpenCode サーバーへ接続できない問題を修正します。 +--- + +# OpenCode 接続 + +OpenChamber は読み込まれるのに "OpenCode is restarting" から進まない、またはチャットが応答しない場合、接続先サーバーに到達できていません。次を順に確認してください。 + +## "OpenCode is restarting" のまま止まっている + +- 起動直後は少し待ってください。サーバー起動中はこの状態が正常です +- `openchamber status` でサーバーが生きているか確認します +- `openchamber restart` で再起動します +- `openchamber logs` で起動詳細を確認します + +## 自分のサーバーへ接続している + +既存サーバーを使うよう OpenChamber を設定した場合は、[OpenCode サーバー](/opencode-server/) の設定を再確認してください。 + +- `OPENCODE_HOST` はポートを含み、パスを含まない必要があります。例: `http://localhost:4096` +- `OPENCODE_SKIP_START=true` を設定し、OpenChamber が自分のサーバーも起動しないようにします +- アドレスが無効な場合、OpenChamber はそれを無視して自分のサーバーを起動します。ログの `[config]` 警告を探してください + +## まだ失敗する場合 + +- Node.js がバージョン `20` 以上であることを確認します +- 最新の CLI を再インストールします +- トンネルやリモートリンクを試す前に、`http://localhost:3000` を直接開きます + +## 関連 + +- [OpenCode サーバー](/opencode-server/) — OpenChamber がサーバーを見つけて管理する方法 +- [トラブルシューティング](/troubleshooting/) — その他のよくある問題 diff --git a/packages/docs/content/docs/ja/troubleshooting/remote-access.mdx b/packages/docs/content/docs/ja/troubleshooting/remote-access.mdx new file mode 100644 index 00000000..84138c5e --- /dev/null +++ b/packages/docs/content/docs/ja/troubleshooting/remote-access.mdx @@ -0,0 +1,38 @@ +--- +title: リモートアクセス +description: トンネル、リモートインスタンス、別デバイスからの OpenChamber アクセスを修正します。 +--- + +# リモートアクセス + +スマートフォンや別マシンから OpenChamber に到達できない場合、修正方法は接続方法によって変わります。 + +## まず基本を確認する + +- 同じコンピューターで先に `http://localhost:3000` を開きます。失敗する場合はリモートの問題ではありません。[OpenCode 接続](/troubleshooting/opencode-connection/) を参照してください +- `openchamber status` でサーバーが実行中であることを確認します + +## トンネルリンクが動かない + +- `openchamber tunnel status --all` を実行します +- 同じインスタンスとポートからトンネルを再起動します +- 前のリンクがすでに使用済みなら、接続リンクを再生成します + +完全なセットアップは [トンネル](/tunnels/) を参照してください。 + +## リモートインスタンスが接続しない(デスクトップ) + +[リモートインスタンス](/remote-instances/) が止まった場合、OpenChamber は失敗したステップ名を表示します。 + +- **auth** — SSH または UI パスワードが拒否されました。再入力してください +- **install / start** — OpenChamber がリモートマシン上でサーバーをセットアップまたは起動できませんでした。そのマシンの要件を確認してください +- **forwarding** — 接続はできていますが、ポートが届いていません。別のローカルポートを試してください + +## 自分のサーバーの背後にある場合 + +OpenChamber をリバースプロキシの背後に置いていて、表示がおかしい、または接続できない場合は [リバースプロキシ](/reverse-proxy/) を参照してください。 + +## 関連 + +- [トンネル](/tunnels/) · [リモートインスタンス](/remote-instances/) · [リバースプロキシ](/reverse-proxy/) +- [セキュリティ](/security/) — 公開する前に UI を保護する diff --git a/packages/docs/content/docs/ja/troubleshooting/worktrees-git.mdx b/packages/docs/content/docs/ja/troubleshooting/worktrees-git.mdx new file mode 100644 index 00000000..099f2aca --- /dev/null +++ b/packages/docs/content/docs/ja/troubleshooting/worktrees-git.mdx @@ -0,0 +1,35 @@ +--- +title: Worktrees と Git +description: よくある worktree と Git の問題を修正します。 +--- + +# Worktrees と Git + +[worktree セッション](/worktrees/) と [Git ビュー](/git/) で起きる問題と、その解消方法です。 + +## worktree に注意が必要 + +OpenChamber は、worktree に異常があるとフラグを立てます。 + +- **folder missing** — worktree のフォルダが削除された、または OpenChamber 外で移動されました。セッションを削除し、新しい worktree を作成してください +- **detached or unborn branch** — worktree が通常のブランチ上にありません。ブランチをチェックアウトしてください +- **merge, rebase, or cherry-pick in progress** — 操作が途中で残っています。Git ビューから完了または中止してください + +## worktree を作成できない + +- **branch already exists** — 別のブランチ名を選ぶか、既存ブランチのオプションを使います +- **name already in use** — 別の worktree 名を選びます + +## コミットまたは PR 生成に失敗する + +コミットメッセージや PR 説明の生成はアクティブなセッションで実行されるため、動作するモデルが選択されたセッションを開いておく必要があります。セッションを開くか選び直して、もう一度試してください。 + +## SSH または Windows パスの問題 + +- リポジトリが使う SSH キーが [Git ID](/git-identities/) に設定したものか確認します +- Windows では Git が Unix 形式のパス(`/c/Users/...` など)を使います。OpenChamber はこれを扱えますが、カスタム SSH キーパスも同じ形式にしてください + +## 関連 + +- [Worktree セッション](/worktrees/) — worktree の作成と削除の仕組み +- [Git ID](/git-identities/) — リポジトリごとに正しいキーと ID を設定する diff --git a/packages/docs/content/docs/ja/tunnels.mdx b/packages/docs/content/docs/ja/tunnels.mdx new file mode 100644 index 00000000..7eaf6c30 --- /dev/null +++ b/packages/docs/content/docs/ja/tunnels.mdx @@ -0,0 +1,117 @@ +--- +title: トンネル +description: リモートおよびモバイルアクセス向けに OpenChamber を安全に公開します。 +--- + +# トンネル + +トンネルは OpenChamber への公開リンクです。スマートフォンや別ネットワークからアクセスできます。実行中のインスタンスに対して作成するには `openchamber tunnel` を使います。 + +## 前提条件 + +OpenChamber はあなたのマシン上でトンネルプロバイダー CLI を起動します。使いたいプロバイダーを先にインストールしてください。 + +```bash +brew install cloudflared +brew install ngrok +``` + +Cloudflare quick tunnel は `cloudflared` で実行できます。Ngrok には ngrok アカウントと ngrok ダッシュボードの authtoken が必要です。 + +```bash +ngrok config add-authtoken +``` + +## クイックスタート + +1. OpenChamber を起動します。 + +```bash +openchamber +``` + +この手順を省いた場合、`openchamber tunnel start` は CLI サーバーを自動起動できます。自動起動時には `--port`、`--host`、`--lan`、`--ui-password`、`--api-only` などのサーバーオプションを渡せます。 + +2. Cloudflare トンネルを開始します。 + +```bash +openchamber tunnel start --provider cloudflare --mode quick +``` + +または Ngrok トンネルを開始します。 + +```bash +openchamber tunnel start --provider ngrok --mode quick +``` + +3. 状態を確認します。 + +```bash +openchamber tunnel status +``` + +トンネルが起動すると、`status` に公開 URL が表示されます。それを開くか QR コードをスキャンすると、どこからでも OpenChamber にアクセスできます。 + +デフォルトでは、OpenChamber は対話型 TTY セッションで QR コードを表示します。QR 出力を強制するには `--qr`、無効にするには `--no-qr` を使います。 + +## プロバイダー + +- `cloudflare`: quick、managed remote、managed local モード +- `ngrok`: quick モード + +## 管理対象モード + +### Managed remote + +Cloudflare が管理する token + hostname を使います。 + +```bash +openchamber tunnel start --provider cloudflare --mode managed-remote --token-file ~/.secrets/cf-token --hostname app.example.com +``` + +### Managed local + +ローカルの `cloudflared` 設定を使います。 + +```bash +openchamber tunnel start --provider cloudflare --mode managed-local --config ~/.cloudflared/config.yml +``` + +## プロファイル(managed-remote) + +再利用可能なプロファイルを保存します。 + +```bash +openchamber tunnel profile add --provider cloudflare --mode managed-remote --name prod-main --hostname app.example.com --token-file ~/.secrets/cf-token +``` + +保存したプロファイルで起動します。 + +```bash +openchamber tunnel start --profile prod-main +``` + +## 便利なコマンド + +```bash +openchamber tunnel providers +openchamber tunnel ready --provider cloudflare +openchamber tunnel ready --provider ngrok +openchamber tunnel doctor --provider cloudflare +openchamber tunnel doctor --provider ngrok +openchamber tunnel stop --port 3000 +``` + +## 動作メモ + +- OpenChamber インスタンス(ポート)ごとにアクティブなトンネルは 1 つです +- 同じインスタンスで新しい mode/provider を開始すると、前のトンネルは置き換えられます +- 新しい接続リンクを生成すると、以前の未使用リンクは無効化されます +- トンネルの自動起動は、restart/update フローで使うインスタンス設定に `--ui-password` や `--api-only` などのサーバーフラグを保持します + +## 関連 + +- [セキュリティ](/security/) — 公開する前に UI を保護する +- [デスクトップトンネル](/desktop-tunnels/) — CLI 起動なしでデスクトップアプリからトンネルを設定する +- [PWA とモバイル](/mobile/) — スマートフォンから OpenChamber にアクセスする +- [トラブルシューティング](/troubleshooting/) — トンネルリンクが動かない場合 diff --git a/packages/docs/content/docs/ja/updates.mdx b/packages/docs/content/docs/ja/updates.mdx new file mode 100644 index 00000000..66d1ed23 --- /dev/null +++ b/packages/docs/content/docs/ja/updates.mdx @@ -0,0 +1,31 @@ +--- +title: 更新 +description: デスクトップ、Web、VS Code の OpenChamber を最新に保ちます。 +--- + +# 更新 + +OpenChamber の更新方法は、インストール方法によって異なります。どの場合でも、現在のバージョンは **Settings → OpenChamber → About** で確認できます。 + +## デスクトップアプリ + +デスクトップアプリは GitHub releases を確認して更新を探します。更新がある場合、OpenChamber が知らせ、あなたが選んだときにダウンロードし、次回再起動時にインストールします。常にあなたが制御します。勝手にインストールされることはありません。 + +## Web / CLI + +CLI をインストールした場合は、**About** の確認・更新ボタンから、またはターミナルから更新できます。 + +```bash +openchamber update +``` + +OpenChamber はインストール方法(npm、pnpm、yarn、bun)を検出し、適切な更新を実行します。 + +## OpenCode サーバー + +OpenChamber と OpenCode は別々に更新されます。新しい OpenCode バージョンが利用可能な場合、OpenChamber は更新を提案し、その後サーバーを再起動します。そのサーバーの管理方法は [OpenCode サーバー](/opencode-server/) を参照してください。 + +## 関連 + +- [インストール](/install/) — 各アプリのインストール方法 +- [OpenCode サーバー](/opencode-server/) — 下層サーバーの更新 diff --git a/packages/docs/content/docs/ja/usage.mdx b/packages/docs/content/docs/ja/usage.mdx new file mode 100644 index 00000000..c05a2f9d --- /dev/null +++ b/packages/docs/content/docs/ja/usage.mdx @@ -0,0 +1,28 @@ +--- +title: 使用量とクォータ +description: プロバイダープランの使用量を追跡します。 +--- + +# 使用量とクォータ + +Usage ページでは、各プロバイダープランをどれだけ使ったかを確認でき、上限にどれだけ近いかが分かります。**Settings → Usage** から開きます。 + +## 表示されるもの + +接続済みプロバイダーごとに、OpenChamber は次を表示します。 + +- 現在のウィンドウでどれだけ使ったかをバーで表示 +- モデル別の内訳 +- 使い切りそうなペースか分かる pace インジケーター + +表示するプロバイダーは選べます。同じサマリーはアプリヘッダーのドロップダウンからも確認できます。 + +## 対応プロバイダー + +Usage は、Claude、Codex、GitHub Copilot、Google、OpenRouter、Kimi、NanoGPT、z.ai、Zhipu、MiniMax、Ollama Cloud、Wafer など、クォータを公開しているプロバイダーで動作します。 + +プロバイダーの使用量は、[プロバイダー](/providers/) ページでサインインした後に表示されます。一部のプロバイダーには追加手順が必要です。たとえば Ollama Cloud は別途設定したセッションファイルを読み取ります。プロバイダーにデータが表示されない場合、多くはその追加認証情報が不足しています。 + +## 関連 + +- [プロバイダー、モデル、エージェント](/providers/) — 使用量を表示する前にサインインする diff --git a/packages/docs/content/docs/ja/voice.mdx b/packages/docs/content/docs/ja/voice.mdx new file mode 100644 index 00000000..62ac5103 --- /dev/null +++ b/packages/docs/content/docs/ja/voice.mdx @@ -0,0 +1,36 @@ +--- +title: 音声モード +description: OpenChamber に話しかけ、返信を読み上げで聞きます。 +--- + +# 音声モード + +音声モードでは、メッセージを音声入力し、返信を読み上げで聞けます。**Settings → OpenChamber → Voice** でオンにします。 + +## 返信の読み上げ(text-to-speech) + +返信の読み上げ方法を選びます。 + +- **browser** — ブラウザ組み込みの音声。設定不要です +- **OpenAI** — OpenAI の音声。API キーを貼り付けて声を選びます +- **OpenAI-compatible** — OpenAI 形式で音声を返す任意のサービス。URL と、必要なら API キーを入力します +- **macOS say** — Mac にある組み込みの `say` コマンド + +オンにすると、メッセージに再生ボタンが表示され、読み上げを聞けます。 + +## メッセージの音声入力(speech-to-text) + +音声をどう文字起こしするか選びます。 + +- **browser** — ブラウザ組み込みの認識。設定不要です +- **server** — OpenAI 互換の文字起こしサービス。URL と、必要なら API キーを入力します +- **on-device** — ブラウザ内で動く音声モデル。初回利用時にダウンロードされます + +## スマートフォン向けの注意 + +スマートフォンで返信を読み上げる場合、OpenAI または OpenAI-compatible の選択肢が最も安定します。モバイルブラウザは組み込み音声に制限があります。 + +## 関連 + +- [通知](/notifications/) — 聞き続ける代わりに通知を受け取る +- [プロバイダー、モデル、エージェント](/providers/) — OpenAI キーがすでにあるかもしれない場所 diff --git a/packages/docs/content/docs/ja/worktrees.mdx b/packages/docs/content/docs/ja/worktrees.mdx new file mode 100644 index 00000000..d3ec4558 --- /dev/null +++ b/packages/docs/content/docs/ja/worktrees.mdx @@ -0,0 +1,36 @@ +--- +title: Worktree セッション +description: セッションに専用のブランチとフォルダを与え、作業を分離します。 +--- + +# Worktree セッション + +Worktree セッションは、リポジトリをチェックアウトした独自のコピーと独自ブランチ(git worktree)で実行されます。これにより、並行セッションが互いのファイルを踏み合うことを防げます。片方がリファクタリングし、もう片方がバグ修正をしても、行き来する必要はありません。 + +## 作成する + +1. セッションサイドバー上部のボタンから new-worktree ダイアログを開きます。 +2. 開始点を選びます。 + - **new branch** — ブランチ名を付け、どのブランチから始めるか選びます + - **existing branch** — すでにあるブランチをチェックアウトします +3. worktree フォルダを確認します(OpenChamber はブランチ名から候補を出します)。 +4. 作成します。 + +OpenChamber はブランチを作り、フォルダをセットアップし、その中でセッションを開始します。[Todo](/notes-todos-plans/) や [GitHub Issue または PR](/github/) から直接開始することもできます。 + +## 作業を戻す + +作業が良い状態になったら、Git ビューの **Integrate** を使って、worktree のコミットを別ブランチ(`main` など)へ取り込みます。変更がコンフリクトした場合は、エージェントに解決を任せることもできます。 + +## 片付ける + +セッションを削除またはアーカイブすると、worktree を削除できます。ブランチも削除するかどうかを選びます。ローカルと、存在する場合はリモートも対象です。あなたが指示しない限り、何も削除されません。 + +## 何かおかしい場合 + +worktree は、フォルダがなくなった、ブランチが detached 状態になった、merge または rebase が途中で止まった、などの場合に注意が必要になります。OpenChamber はこれらにフラグを付け、修正できるようにします。[Worktrees と Git](/troubleshooting/worktrees-git/) を参照してください。 + +## 関連 + +- [Multi-run](/multi-run/) — 多数の worktree セッションを一度に起動する +- [Git と GitHub ワークフロー](/git/) — OpenChamber 内でコミットして統合する diff --git a/packages/docs/sidebar.config.json b/packages/docs/sidebar.config.json index f2409b3e..c6f409d3 100644 --- a/packages/docs/sidebar.config.json +++ b/packages/docs/sidebar.config.json @@ -9,7 +9,8 @@ "pt-BR": "Comece aqui", "ko": "여기서 시작", "pl": "Zacznij tutaj", - "fr": "Commencer ici" + "fr": "Commencer ici", + "ja": "ここから開始" }, "items": [ { @@ -22,7 +23,8 @@ "pt-BR": "Visão geral", "ko": "개요", "pl": "Przegląd", - "fr": "Vue d’ensemble" + "fr": "Vue d’ensemble", + "ja": "概要" } }, { @@ -35,7 +37,8 @@ "pt-BR": "Instalação", "ko": "설치", "pl": "Instalacja", - "fr": "Installation" + "fr": "Installation", + "ja": "インストール" } }, { @@ -48,7 +51,8 @@ "pt-BR": "Início rápido", "ko": "빠른 시작", "pl": "Szybki start", - "fr": "Démarrage rapide" + "fr": "Démarrage rapide", + "ja": "クイックスタート" } }, { @@ -61,7 +65,8 @@ "pt-BR": "Servidor OpenCode", "ko": "OpenCode 서버", "pl": "Serwer OpenCode", - "fr": "Serveur OpenCode" + "fr": "Serveur OpenCode", + "ja": "OpenCode サーバー" } }, { @@ -74,7 +79,8 @@ "pt-BR": "Variáveis de ambiente", "ko": "환경 변수", "pl": "Zmienne środowiskowe", - "fr": "Variables d’environnement" + "fr": "Variables d’environnement", + "ja": "環境変数" } } ] @@ -88,7 +94,8 @@ "pt-BR": "Fluxos de trabalho", "ko": "워크플로", "pl": "Przepływy pracy", - "fr": "Workflows" + "fr": "Workflows", + "ja": "ワークフロー" }, "items": [ { @@ -101,7 +108,8 @@ "pt-BR": "Projetos", "ko": "프로젝트", "pl": "Projekty", - "fr": "Projets" + "fr": "Projets", + "ja": "プロジェクト" } }, { @@ -114,7 +122,8 @@ "pt-BR": "Contexto", "ko": "컨텍스트", "pl": "Kontekst", - "fr": "Contexte" + "fr": "Contexte", + "ja": "コンテキスト" } }, { @@ -127,7 +136,8 @@ "pt-BR": "Notas, tarefas e planos", "ko": "메모, 할 일, 계획", "pl": "Notatki, zadania i plany", - "fr": "Notes, todos et plans" + "fr": "Notes, todos et plans", + "ja": "メモ、Todo、計画" } }, { @@ -140,7 +150,8 @@ "pt-BR": "Tarefas agendadas", "ko": "예약 작업", "pl": "Zaplanowane zadania", - "fr": "Tâches planifiées" + "fr": "Tâches planifiées", + "ja": "スケジュールタスク" } }, { @@ -153,7 +164,8 @@ "pt-BR": "Ações do projeto", "ko": "프로젝트 작업", "pl": "Akcje projektu", - "fr": "Actions de projet" + "fr": "Actions de projet", + "ja": "プロジェクトアクション" } }, { @@ -166,7 +178,8 @@ "pt-BR": "Pré-visualização e servidores de desenvolvimento", "ko": "미리보기 및 개발 서버", "pl": "Podgląd i serwery deweloperskie", - "fr": "Aperçu et serveurs de dev" + "fr": "Aperçu et serveurs de dev", + "ja": "プレビューと開発サーバー" } }, { @@ -179,21 +192,24 @@ "pt-BR": "Sessões de worktree", "ko": "Worktree 세션", "pl": "Sesje worktree", - "fr": "Sessions worktree" + "fr": "Sessions worktree", + "ja": "Worktree セッション" } }, { "label": "Multi-run", "link": "/multi-run/", "translations": { - "fr": "Multi-run" + "fr": "Multi-run", + "ja": "Multi-run" } }, { "label": "Git & GitHub", "link": "/git/", "translations": { - "fr": "Git et GitHub" + "fr": "Git et GitHub", + "ja": "Git と GitHub" } }, { @@ -206,7 +222,8 @@ "pt-BR": "Issues e PRs do GitHub", "ko": "GitHub 이슈 및 PR", "pl": "Zgłoszenia i PR-y GitHub", - "fr": "Issues et PR GitHub" + "fr": "Issues et PR GitHub", + "ja": "GitHub Issues と PR" } }, { @@ -219,7 +236,8 @@ "pt-BR": "Prompts mágicos", "ko": "매직 프롬프트", "pl": "Magiczne prompty", - "fr": "Magic Prompts" + "fr": "Magic Prompts", + "ja": "マジックプロンプト" } }, { @@ -232,7 +250,8 @@ "pt-BR": "Identidades do Git", "ko": "Git 아이덴티티", "pl": "Tożsamości Git", - "fr": "Identités Git" + "fr": "Identités Git", + "ja": "Git ID" } } ] @@ -246,7 +265,8 @@ "pt-BR": "Configuração do OpenCode", "ko": "OpenCode 설정", "pl": "Konfiguracja OpenCode", - "fr": "Configuration OpenCode" + "fr": "Configuration OpenCode", + "ja": "OpenCode 設定" }, "items": [ { @@ -259,7 +279,8 @@ "pt-BR": "Provedores, modelos e agentes", "ko": "공급자, 모델, 에이전트", "pl": "Dostawcy, modele i agenci", - "fr": "Fournisseurs, modèles et agents" + "fr": "Fournisseurs, modèles et agents", + "ja": "プロバイダー、モデル、エージェント" } }, { @@ -272,7 +293,8 @@ "pt-BR": "Servidores MCP", "ko": "MCP 서버", "pl": "Serwery MCP", - "fr": "Serveurs MCP" + "fr": "Serveurs MCP", + "ja": "MCP サーバー" } }, { @@ -285,7 +307,8 @@ "pt-BR": "Habilidades", "ko": "스킬", "pl": "Umiejętności", - "fr": "Skills" + "fr": "Skills", + "ja": "スキル" } }, { @@ -298,7 +321,8 @@ "pt-BR": "Catálogo de habilidades", "ko": "스킬 카탈로그", "pl": "Katalog umiejętności", - "fr": "Catalogue de skills" + "fr": "Catalogue de skills", + "ja": "スキルカタログ" } }, { @@ -311,7 +335,8 @@ "pt-BR": "Comandos e trechos", "ko": "명령 및 스니펫", "pl": "Polecenia i fragmenty", - "fr": "Commandes et snippets" + "fr": "Commandes et snippets", + "ja": "コマンドとスニペット" } }, { @@ -324,7 +349,8 @@ "pt-BR": "Uso e cotas", "ko": "사용량 및 할당량", "pl": "Zużycie i limity", - "fr": "Utilisation et quotas" + "fr": "Utilisation et quotas", + "ja": "使用量とクォータ" } } ] @@ -338,7 +364,8 @@ "pt-BR": "Acesso remoto", "ko": "원격 접속", "pl": "Dostęp zdalny", - "fr": "Accès distant" + "fr": "Accès distant", + "ja": "リモートアクセス" }, "items": [ { @@ -351,7 +378,8 @@ "pt-BR": "Túneis", "ko": "터널", "pl": "Tunele", - "fr": "Tunnels" + "fr": "Tunnels", + "ja": "トンネル" } }, { @@ -364,7 +392,8 @@ "pt-BR": "Proxy reverso", "ko": "리버스 프록시", "pl": "Reverse proxy", - "fr": "Reverse proxy" + "fr": "Reverse proxy", + "ja": "リバースプロキシ" } }, { @@ -377,7 +406,8 @@ "pt-BR": "PWA e celular", "ko": "PWA 및 모바일", "pl": "PWA i urządzenia mobilne", - "fr": "PWA et mobile" + "fr": "PWA et mobile", + "ja": "PWA とモバイル" } }, { @@ -390,7 +420,8 @@ "pt-BR": "Segurança", "ko": "보안", "pl": "Bezpieczeństwo", - "fr": "Sécurité" + "fr": "Sécurité", + "ja": "セキュリティ" } } ] @@ -404,7 +435,8 @@ "pt-BR": "Personalizar", "ko": "맞춤 설정", "pl": "Dostosuj", - "fr": "Personnaliser" + "fr": "Personnaliser", + "ja": "カスタマイズ" }, "items": [ { @@ -417,7 +449,8 @@ "pt-BR": "Temas", "ko": "테마", "pl": "Motywy", - "fr": "Thèmes" + "fr": "Thèmes", + "ja": "テーマ" } }, { @@ -430,7 +463,8 @@ "pt-BR": "Notificações", "ko": "알림", "pl": "Powiadomienia", - "fr": "Notifications" + "fr": "Notifications", + "ja": "通知" } }, { @@ -443,7 +477,8 @@ "pt-BR": "Modo de voz", "ko": "음성 모드", "pl": "Tryb głosowy", - "fr": "Mode vocal" + "fr": "Mode vocal", + "ja": "音声モード" } }, { @@ -456,7 +491,8 @@ "pt-BR": "Ícones de projeto", "ko": "프로젝트 아이콘", "pl": "Ikony projektów", - "fr": "Icônes de projet" + "fr": "Icônes de projet", + "ja": "プロジェクトアイコン" } } ] @@ -470,7 +506,8 @@ "pt-BR": "Desktop", "ko": "데스크톱", "pl": "Pulpit", - "fr": "Desktop" + "fr": "Desktop", + "ja": "デスクトップ" }, "items": [ { @@ -483,7 +520,8 @@ "pt-BR": "Instâncias remotas", "ko": "원격 인스턴스", "pl": "Zdalne instancje", - "fr": "Instances distantes" + "fr": "Instances distantes", + "ja": "リモートインスタンス" } }, { @@ -496,7 +534,8 @@ "pt-BR": "Navegador desktop", "ko": "데스크톱 브라우저", "pl": "Przeglądarka na pulpicie", - "fr": "Navigateur desktop" + "fr": "Navigateur desktop", + "ja": "デスクトップブラウザ" } }, { @@ -509,7 +548,8 @@ "pt-BR": "Túneis no desktop", "ko": "데스크톱 터널", "pl": "Tunele w aplikacji desktopowej", - "fr": "Tunnels desktop" + "fr": "Tunnels desktop", + "ja": "デスクトップトンネル" } }, { @@ -522,7 +562,8 @@ "pt-BR": "Hosts SSH e proxy", "ko": "SSH 호스트 및 프록시", "pl": "Hosty SSH i proxy", - "fr": "Hosts SSH et proxy" + "fr": "Hosts SSH et proxy", + "ja": "SSH ホストとプロキシ" } }, { @@ -535,7 +576,8 @@ "pt-BR": "Atualizações", "ko": "업데이트", "pl": "Aktualizacje", - "fr": "Mises à jour" + "fr": "Mises à jour", + "ja": "更新" } } ] @@ -549,7 +591,8 @@ "pt-BR": "Ajuda", "ko": "도움말", "pl": "Pomoc", - "fr": "Aide" + "fr": "Aide", + "ja": "ヘルプ" }, "items": [ { @@ -562,7 +605,8 @@ "pt-BR": "Solução de problemas", "ko": "문제 해결", "pl": "Rozwiązywanie problemów", - "fr": "Dépannage" + "fr": "Dépannage", + "ja": "トラブルシューティング" } }, { @@ -575,7 +619,8 @@ "pt-BR": "Conexão com o OpenCode", "ko": "OpenCode 연결", "pl": "Połączenie z OpenCode", - "fr": "Connexion à OpenCode" + "fr": "Connexion à OpenCode", + "ja": "OpenCode 接続" } }, { @@ -588,7 +633,8 @@ "pt-BR": "Worktrees e Git", "ko": "Worktree 및 Git", "pl": "Worktree i Git", - "fr": "Worktrees et Git" + "fr": "Worktrees et Git", + "ja": "Worktrees と Git" } }, { @@ -601,7 +647,8 @@ "pt-BR": "Acesso remoto", "ko": "원격 접속", "pl": "Dostęp zdalny", - "fr": "Accès distant" + "fr": "Accès distant", + "ja": "リモートアクセス" } } ] diff --git a/packages/ui/src/lib/i18n/bootstrap.ts b/packages/ui/src/lib/i18n/bootstrap.ts index a300a162..1c6ac1bb 100644 --- a/packages/ui/src/lib/i18n/bootstrap.ts +++ b/packages/ui/src/lib/i18n/bootstrap.ts @@ -57,7 +57,30 @@ const FR_MESSAGES: BootstrapMessages = { loadingData: (providersText, agentsText) => `Chargement des données (${providersText}, ${agentsText})…`, }; -export const getBootstrapMessages = (locale: Locale): BootstrapMessages => (locale === 'fr' ? FR_MESSAGES : EN_MESSAGES); +const JA_MESSAGES: BootstrapMessages = { + startingApi: 'OpenCode API を起動中…', + initializing: '初期化中…', + connecting: '接続中…', + connected: '接続完了!', + connectionError: '接続エラー', + disconnected: '切断されました', + reconnecting: '再接続中…', + initialDataLoadFailed: 'OpenCode に接続しましたが、初期データの読み込みに失敗しました。', + cliNotFound: 'OpenCode CLI が見つかりません。先にインストールしてください。', + providersReady: '✓ プロバイダ', + providersLoading: '… プロバイダ', + agentsReady: '✓ エージェント', + agentsLoading: '… エージェント', + startingDevServer: (hostLabel) => `Webview 開発サーバーを起動中 (${hostLabel})...`, + waitingDevServer: (hostLabel, attempt) => `Webview 開発サーバーを待機中 (${hostLabel})... 試行 ${attempt}`, + loadingData: (providersText, agentsText) => `データを読み込み中 (${providersText}, ${agentsText})…`, +}; + +export const getBootstrapMessages = (locale: Locale): BootstrapMessages => { + if (locale === 'fr') return FR_MESSAGES; + if (locale === 'ja') return JA_MESSAGES; + return EN_MESSAGES; +}; export const readStoredLocaleForBootstrap = (): Locale => { if (typeof window === 'undefined') { diff --git a/packages/ui/src/lib/i18n/intl.ts b/packages/ui/src/lib/i18n/intl.ts index 00080675..b5d7f80b 100644 --- a/packages/ui/src/lib/i18n/intl.ts +++ b/packages/ui/src/lib/i18n/intl.ts @@ -11,6 +11,7 @@ const INTL_LOCALE_BY_LOCALE: Record = { 'pt-BR': 'pt-BR', ko: 'ko-KR', pl: 'pl-PL', + ja: 'ja-JP', }; const getIntlLocale = (locale: Locale): string => INTL_LOCALE_BY_LOCALE[locale] ?? 'en-US'; diff --git a/packages/ui/src/lib/i18n/messages.test.ts b/packages/ui/src/lib/i18n/messages.test.ts index ad9979bb..bb4c2b3e 100644 --- a/packages/ui/src/lib/i18n/messages.test.ts +++ b/packages/ui/src/lib/i18n/messages.test.ts @@ -3,6 +3,7 @@ import { describe, expect, test } from 'bun:test'; import { dict as enDict } from './messages/en'; import { dict as esDict } from './messages/es'; import { dict as frDict } from './messages/fr'; +import { dict as jaDict } from './messages/ja'; import { dict as koDict } from './messages/ko'; import { dict as plDict } from './messages/pl'; import { dict as ptBrDict } from './messages/pt-BR'; @@ -14,6 +15,7 @@ const localeDictionaries = { en: enDict, fr: frDict, es: esDict, + ja: jaDict, 'pt-BR': ptBrDict, uk: ukDict, ko: koDict, @@ -23,15 +25,18 @@ const localeDictionaries = { } as const; describe('i18n dictionaries', () => { - test('french stays in key parity with english', () => { + test('all locales stay in key parity with english', () => { const englishKeys = Object.keys(enDict).sort(); - expect(Object.keys(frDict).sort()).toEqual(englishKeys); + for (const dictionary of Object.values(localeDictionaries)) { + expect(Object.keys(dictionary).sort()).toEqual(englishKeys); + } }); - test('all locales expose the french language label key', () => { + test('all locales expose language label keys', () => { for (const [, dictionary] of Object.entries(localeDictionaries)) { expect(dictionary['common.language.french']).toBeTruthy(); + expect(dictionary['common.language.japanese']).toBeTruthy(); } }); }); diff --git a/packages/ui/src/lib/i18n/messages/en.ts b/packages/ui/src/lib/i18n/messages/en.ts index 54f09542..f5dcb6d5 100644 --- a/packages/ui/src/lib/i18n/messages/en.ts +++ b/packages/ui/src/lib/i18n/messages/en.ts @@ -13,6 +13,7 @@ export const dict = { 'common.language.brazilianPortuguese': 'Brazilian Portuguese', 'common.language.korean': 'Korean', 'common.language.polish': 'Polish', + 'common.language.japanese': 'Japanese', 'common.revealPath.finder': 'Reveal in Finder', 'common.revealPath.fileExplorer': 'Open in File Explorer', 'common.revealPath.fileManager': 'Open in File Manager', diff --git a/packages/ui/src/lib/i18n/messages/es.ts b/packages/ui/src/lib/i18n/messages/es.ts index d1c0a41d..7d4bba4f 100644 --- a/packages/ui/src/lib/i18n/messages/es.ts +++ b/packages/ui/src/lib/i18n/messages/es.ts @@ -14,6 +14,7 @@ export const dict: Record = { "common.language.brazilianPortuguese": "Portugués brasileño", "common.language.korean": "Coreano", "common.language.polish": "Polaco", + "common.language.japanese": "Japonés", "common.revealPath.finder": "Mostrar en Finder", "common.revealPath.fileExplorer": "Abrir en File Explorer", "common.revealPath.fileManager": "Abrir en gestor de archivos", diff --git a/packages/ui/src/lib/i18n/messages/fr.ts b/packages/ui/src/lib/i18n/messages/fr.ts index 81f823ac..335d431f 100644 --- a/packages/ui/src/lib/i18n/messages/fr.ts +++ b/packages/ui/src/lib/i18n/messages/fr.ts @@ -13,6 +13,7 @@ export const dict = { 'common.language.brazilianPortuguese': 'Portugais brésilien', 'common.language.korean': 'Coréen', 'common.language.polish': 'Polonais', + 'common.language.japanese': 'Japonais', 'common.revealPath.finder': 'Révéler dans le Finder', 'common.revealPath.fileExplorer': 'Ouvrir dans l\'explorateur de fichiers', 'common.revealPath.fileManager': 'Ouvrir dans le gestionnaire de fichiers', @@ -103,6 +104,7 @@ export const dict = { 'sessions.scheduledTasks.editor.scheduleType.daily': 'Tous les jours', 'sessions.scheduledTasks.editor.scheduleType.weekly': 'Hebdomadaire', 'sessions.scheduledTasks.editor.scheduleType.once': 'Une fois', + 'sessions.scheduledTasks.editor.scheduleType.cron': 'Cron', 'sessions.scheduledTasks.editor.date.label': 'Date', 'sessions.scheduledTasks.editor.date.placeholder': 'Sélectionnez une date', 'sessions.scheduledTasks.editor.date.previousMonth': 'Mois précédent', diff --git a/packages/ui/src/lib/i18n/messages/ja.settings.ts b/packages/ui/src/lib/i18n/messages/ja.settings.ts new file mode 100644 index 00000000..6437c188 --- /dev/null +++ b/packages/ui/src/lib/i18n/messages/ja.settings.ts @@ -0,0 +1,1801 @@ +export const settingsDict = { + 'settings.appearance.language.label': '言語', + 'settings.appearance.language.description': 'インターフェース言語を選択します。', + 'settings.appearance.language.select': '言語を選択', + 'settings.window.description': 'OpenChamber 設定ウィンドウ。', + 'settings.view.home.title': '設定', + 'settings.view.home.description': 'よく使うページにジャンプします。', + 'settings.view.home.cards.providers.title': 'プロバイダー', + 'settings.view.home.cards.providers.description': 'モデル + 認証情報を接続', + 'settings.view.home.cards.agents.title': 'エージェント', + 'settings.view.home.cards.agents.description': 'プロンプト、ツール、権限', + 'settings.view.home.cards.skillsCatalog.title': 'スキルカタログ', + 'settings.view.home.cards.skillsCatalog.description': 'カタログからスキルをインストール', + 'settings.view.home.cards.mcp.title': 'MCP', + 'settings.view.home.cards.mcp.description': 'MCP サーバーと接続を設定', + 'settings.view.home.cards.plugins.title': 'プラグイン', + 'settings.view.home.cards.plugins.description': 'opencode のプラグインを管理', + 'settings.view.home.cards.usage.title': '使用量', + 'settings.view.home.cards.usage.description': '割り当てと支出の表示', + 'settings.view.unavailable.title': '利用できません', + 'settings.view.unavailable.description': 'このランタイムではこの設定ページは利用できません。', + 'settings.view.badge.beta': 'ベータ', + 'settings.view.actions.reloadOpenCode': 'OpenCode を再読み込み', + 'settings.view.actions.reloadOpenCodeTooltip': 'OpenCode を再起動して設定を再読み込みします。', + 'settings.view.actions.backToSettings': '設定に戻る', + 'settings.view.actions.closeSettings': '設定を閉じる', + 'settings.view.actions.openSectionList': 'セクション一覧を開く', + 'settings.view.actions.closeSettingsWithShortcut': '設定を閉じる ({shortcut}+,)', + 'settings.view.actions.back': '戻る', + 'settings.view.actions.resizeNavigation': '設定ナビゲーションのサイズ変更', + 'settings.view.search.placeholder': '設定を検索', + 'settings.view.search.aria': '設定を検索', + 'settings.view.search.clear': '設定検索をクリア', + 'settings.view.search.noResults': '該当する設定がありません', + 'settings.page.projects.title': 'プロジェクト', + 'settings.page.remoteInstances.title': 'リモートインスタンス', + 'settings.page.providers.title': 'プロバイダー', + 'settings.page.usage.title': '使用量', + 'settings.page.agents.title': 'エージェント', + 'settings.page.commands.title': 'コマンド', + 'settings.page.mcp.title': 'MCP', + 'settings.page.plugins.title': 'プラグイン', + 'settings.page.skills.title': 'スキル', + 'settings.page.skillsCatalog.title': 'スキルカタログ', + 'settings.page.git.title': 'Git', + 'settings.page.appearance.title': '外観', + 'settings.page.chat.title': 'チャット', + 'settings.page.shortcuts.title': 'ショートカット', + 'settings.page.sessions.title': 'セッション', + 'settings.page.magicPrompts.title': 'マジックプロンプト', + 'settings.page.notifications.title': '通知', + 'settings.page.voice.title': '音声', + 'settings.page.tunnel.title': 'リモートトンネル', + 'settings.page.about.title': '概要', + 'settings.page.snippets.title': 'スニペット', + 'settings.snippets.sidebar.title': 'スニペット', + 'settings.snippets.sidebar.total': '合計: {count}', + 'settings.snippets.sidebar.actions.create': 'Snippet を作成', + 'settings.snippets.sidebar.actions.more': '{name} のその他の操作', + 'settings.snippets.sidebar.toast.deleted': 'Snippet を削除しました', + 'settings.snippets.sidebar.toast.deleteFailed': 'Snippet の削除に失敗しました', + 'settings.snippets.sidebar.dialog.deleteTitle': 'Snippet を削除しますか?', + 'settings.snippets.sidebar.dialog.deleteDescription': '#{name} は完全に削除されます。', + 'settings.snippets.page.empty.title': 'Snippet を選択', + 'settings.snippets.page.empty.description': 'サイドバーから編集する Snippet を選択してください。', + 'settings.snippets.page.title.new': '新しい Snippet', + 'settings.snippets.page.field.namePlaceholder': 'snippet-name', + 'settings.snippets.page.field.descriptionPlaceholder': 'この Snippet の説明', + 'settings.snippets.page.field.aliases': 'エイリアス', + 'settings.snippets.page.field.aliasesPlaceholder': 'safe, careful', + 'settings.snippets.page.field.content': '内容', + 'settings.snippets.page.field.contentPlaceholder': 'Snippet の Markdown...', + 'settings.snippets.page.hint': 'プロンプトで #name を使用します。Aliases と opencode-snippets 互換の prepend/append ブロックをサポートします。', + 'settings.snippets.page.toast.nameRequired': 'Snippet 名が必要です', + 'settings.snippets.page.toast.contentRequired': 'Snippet の内容が必要です', + 'settings.snippets.page.toast.saveFailed': 'Snippet の保存に失敗しました', + 'settings.snippets.page.toast.saved': 'Snippet を保存しました', + 'settings.page.promptTemplates.title': 'プロンプトテンプレート', + 'settings.promptTemplates.sidebar.title': 'プロンプトテンプレート', + 'settings.promptTemplates.sidebar.total': '合計: {count}', + 'settings.promptTemplates.sidebar.empty.title': 'Prompt Template がありません', + 'settings.promptTemplates.sidebar.empty.description': 'Prompt Template を作成して始めましょう。', + 'settings.promptTemplates.sidebar.toast.deleted': 'Template "{name}" を削除しました', + 'settings.promptTemplates.sidebar.toast.deleteFailed': 'Template の削除に失敗しました', + 'settings.promptTemplates.sidebar.toast.nameRequired': 'Template 名が必要です', + 'settings.promptTemplates.sidebar.toast.renamed': 'Template の名前を変更しました', + 'settings.promptTemplates.sidebar.toast.renameFailed': 'Template の名前変更に失敗しました', + 'settings.promptTemplates.sidebar.dialog.deleteTitle': 'Template を削除しますか?', + 'settings.promptTemplates.sidebar.dialog.deleteDescription': '"{name}" は完全に削除されます。この操作は元に戻せません。', + 'settings.promptTemplates.sidebar.renameDialog.title': 'Template の名前を変更', + 'settings.promptTemplates.sidebar.renameDialog.description': '"{name}" の新しい名前を入力してください。', + 'settings.promptTemplates.sidebar.renameDialog.placeholder': 'Template 名', + 'settings.promptTemplates.sidebar.badge.default': 'デフォルト', + 'settings.promptTemplates.page.empty.title': 'Template を選択', + 'settings.promptTemplates.page.empty.description': 'サイドバーから編集する Template を選択してください。', + 'settings.promptTemplates.page.title.new': '新しい Template', + 'settings.promptTemplates.page.subtitle.edit': 'Template を編集', + 'settings.promptTemplates.page.subtitle.new': '新しい Prompt Template を作成', + 'settings.promptTemplates.page.section.identity': '識別情報', + 'settings.promptTemplates.page.field.name': '名前', + 'settings.promptTemplates.page.field.namePlaceholder': 'Template 名', + 'settings.promptTemplates.page.section.template': 'テンプレート', + 'settings.promptTemplates.page.field.templatePlaceholder': 'Prompt Template のテキストを入力...', + 'settings.promptTemplates.page.templateHint': 'このテキストはマルチラングループで選択されたときにユーザーのプロンプトの前に追加されます。', + 'settings.promptTemplates.page.toast.nameRequired': 'Template 名が必要です', + 'settings.promptTemplates.page.toast.updated': 'Template を更新しました', + 'settings.promptTemplates.page.toast.updateFailed': 'Template の更新に失敗しました', + 'settings.promptTemplates.page.toast.created': 'Template を作成しました', + 'settings.promptTemplates.page.toast.createFailed': 'Template の作成に失敗しました', + 'settings.promptTemplates.page.toast.saveUnexpectedError': '保存中に予期しないエラーが発生しました', + 'settings.openchamber.tunnel.title': 'リモートトンネル', + 'settings.openchamber.tunnel.description': 'クイックリンクまたは自身で管理するリモート Cloudflare Tunnel を使用して安全なリモートアクセスを設定します。', + 'settings.openchamber.tunnel.note.serverSideEnforced': '安全な Tunnel アクセスはサーバー側で強制されます。', + 'settings.openchamber.tunnel.note.connectLinksOneTime': '接続リンクは一度きりで、Tunnel が停止するか接続リンクの TTL が期限切れになると無効になります。', + 'settings.openchamber.tunnel.note.cloudflareConnectorTarget': 'Cloudflare コネクタターゲット:', + 'settings.openchamber.tunnel.note.cloudflareConnectorTargetUse': 'Cloudflare コネクタターゲットには以下を使用:', + 'settings.openchamber.tunnel.note.tokensSavedPerTunnel': 'Token は Tunnel ごとに保存され、ディスクから再利用されます。', + 'settings.openchamber.tunnel.note.customConfigUsed': 'Tunnel 起動時にカスタム設定ファイルが使用されます。', + 'settings.openchamber.tunnel.note.defaultConfigUsed': '空の場合、cloudflared はデフォルト設定 (~/.cloudflared/config.yml) を使用します。', + 'settings.openchamber.tunnel.note.managedRemoteRequiresDomain': 'Managed Remote Tunnel には Cloudflare アカウントで購入したドメインが必要です。', + 'settings.openchamber.tunnel.note.managedLocalUsesConfig': 'Managed Local Tunnel はローカルの cloudflared 設定ファイルを使用します。', + 'settings.openchamber.tunnel.note.startModeAndGenerateLink': '{mode} Tunnel を起動し、一度きりの接続リンクを生成します。この Tunnel 使用中はアプリを閉じないでください。', + 'settings.openchamber.tunnel.note.scanQrToConnect': 'スマートフォンでスキャンして接続します。', + 'settings.openchamber.tunnel.section.redeemedAccessLinks': '使用済みアクセスリンク', + 'settings.openchamber.tunnel.section.savedManagedRemoteTunnels': '保存済み Managed Remote Tunnel', + 'settings.openchamber.tunnel.notAvailable.cloudflaredNotFound': 'cloudflared が見つかりません', + 'settings.openchamber.tunnel.notAvailable.dependencyNotFound': '{dependency} が見つかりませんでした。', + 'settings.openchamber.tunnel.notAvailable.installHint': 'Remote Tunnel アクセスを有効にするにはインストールしてください:', + 'settings.openchamber.tunnel.field.provider': 'プロバイダー', + 'settings.openchamber.tunnel.field.providerPlaceholder': 'プロバイダーを選択', + 'settings.openchamber.tunnel.field.tunnelType': 'Tunnel タイプ', + 'settings.openchamber.tunnel.field.connectLinkTtl': '接続リンク TTL', + 'settings.openchamber.tunnel.field.tunnelSessionTtl': 'Tunnel Session TTL', + 'settings.openchamber.tunnel.field.hostnameLabel': 'ホスト名:', + 'settings.openchamber.tunnel.field.savedTokenAvailablePlaceholder': '保存済み Token があります(置き換える場合は任意)', + 'settings.openchamber.tunnel.field.pasteTokenPlaceholder': 'この Tunnel の Token を貼り付け', + 'settings.openchamber.tunnel.field.newPresetNamePlaceholder': 'Tunnel 名(例: 本番)', + 'settings.openchamber.tunnel.field.newPresetHostnamePlaceholder': 'ホスト名(例: oc.example.com)', + 'settings.openchamber.tunnel.field.newPresetTokenPlaceholder': 'Token', + 'settings.openchamber.tunnel.field.managedRemoteTokenInfoAria': 'Managed Remote Tunnel Token 情報', + 'settings.openchamber.tunnel.field.configurationFile': '設定ファイル', + 'settings.openchamber.tunnel.field.configurationFilePlaceholder': 'デフォルトの cloudflared 設定を使用', + 'settings.openchamber.tunnel.field.managedRemoteTunnelToConnect': '接続する Managed Remote Tunnel', + 'settings.openchamber.tunnel.field.selectSavedTunnelPlaceholder': '保存済み Tunnel を選択', + 'settings.openchamber.tunnel.field.publicUrlHint': '公開 URL(Token なしではアクセス不可)', + 'settings.openchamber.tunnel.field.connectLink': '接続リンク', + 'settings.openchamber.tunnel.field.expires': '有効期限', + 'settings.openchamber.tunnel.field.connectQrAlt': 'Tunnel 接続 QR コード', + 'settings.openchamber.tunnel.actions.removePresetAria': '{name} を削除', + 'settings.openchamber.tunnel.actions.saveToken': 'Token を保存', + 'settings.openchamber.tunnel.actions.browseConfigFileAria': '設定ファイルを参照', + 'settings.openchamber.tunnel.actions.clearConfigFileAria': '設定ファイルをクリア', + 'settings.openchamber.tunnel.actions.openManagedRemoteDocs': 'Managed Remote Tunnel の設定方法のドキュメントを確認', + 'settings.openchamber.tunnel.actions.openManagedLocalDocs': 'Managed Local Tunnel 設定のドキュメントを確認', + 'settings.openchamber.tunnel.actions.startTunnel': 'Tunnel を起動', + 'settings.openchamber.tunnel.actions.startingTunnel': 'Tunnel を起動中...', + 'settings.openchamber.tunnel.actions.stopTunnel': 'Tunnel を停止', + 'settings.openchamber.tunnel.actions.stopping': '停止中...', + 'settings.openchamber.tunnel.actions.newConnectLink': '新しい接続リンク', + 'settings.openchamber.tunnel.actions.copied': 'コピーしました', + 'settings.openchamber.tunnel.actions.retry': '再試行', + 'settings.openchamber.tunnel.option.moreProvidersSoon': '近日中にさらに Provider が追加予定', + 'settings.openchamber.tunnel.option.mode.quick.label': 'クイック', + 'settings.openchamber.tunnel.option.mode.quick.tooltip': 'Quick Tunnel はベストエフォートであり、稼働時間は保証されません。', + 'settings.openchamber.tunnel.option.mode.managedRemote.label': '管理対象リモート', + 'settings.openchamber.tunnel.option.mode.managedRemote.tooltip': 'Managed Remote は Cloudflare アカウントとホスト名を使用して長期的なアクセスを提供します。', + 'settings.openchamber.tunnel.option.mode.managedLocal.label': '管理対象ローカル', + 'settings.openchamber.tunnel.option.mode.managedLocal.tooltip': 'Managed Local はローカルの cloudflared 設定ファイルを使用します。', + 'settings.openchamber.tunnel.warning.quickModeReliability': 'より信頼性の高い長期的なアクセスには、Managed Remote または Managed Local Tunnel モードに切り替えてください。', + 'settings.openchamber.tunnel.warning.replacesActiveTunnel': 'この Tunnel を起動すると、アクティブな Tunnel が置き換えられ、既存の接続リンクとリモート Session が無効になります。', + 'settings.openchamber.tunnel.badge.quick': 'QUICK', + 'settings.openchamber.tunnel.badge.remote': 'REMOTE', + 'settings.openchamber.tunnel.badge.local': 'LOCAL', + 'settings.openchamber.tunnel.state.loading': '読み込み中', + 'settings.openchamber.tunnel.state.expired': '期限切れ', + 'settings.openchamber.tunnel.state.revoked': '無効化済み', + 'settings.openchamber.tunnel.state.inactive': '非アクティブ', + 'settings.openchamber.tunnel.state.noExpiry': '期限なし', + 'settings.openchamber.tunnel.state.never': 'なし', + 'settings.openchamber.tunnel.state.tunnelReady': 'Tunnel 準備完了', + 'settings.openchamber.tunnel.session.redeemedAt': '{time} に使用', + 'settings.openchamber.tunnel.session.expiresIn': 'あと {remaining} で期限切れ', + 'settings.openchamber.tunnel.session.inactiveWithReason': '非アクティブ ({reason})', + 'settings.openchamber.tunnel.error.invalidConfigExtension': '設定ファイルは .yml、.yaml、または .json 拡張子を使用する必要があります。', + 'settings.openchamber.tunnel.tooltip.tokensSavedPath': 'Token は ~/.config/openchamber/cloudflare-managed-remote-tunnels.json に保存されます。', + 'settings.openchamber.tunnel.empty.noManagedRemoteTunnels': '保存された Managed Remote Tunnel はまだありません。', + 'settings.openchamber.tunnel.toast.checkAvailabilityFailed': 'Tunnel の利用可能性の確認に失敗しました', + 'settings.openchamber.tunnel.toast.saveSettingsFailed': 'Tunnel 設定の保存に失敗しました', + 'settings.openchamber.tunnel.toast.saveTtlFailed': 'Tunnel TTL 設定の保存に失敗しました', + 'settings.openchamber.tunnel.toast.saveTokenFailed': 'Managed Remote Tunnel Token の保存に失敗しました', + 'settings.openchamber.tunnel.toast.selectOrAddManagedRemoteFirst': '最初に Managed Remote Tunnel を選択または追加してください', + 'settings.openchamber.tunnel.toast.managedRemoteTokenRequiredBeforeStarting': '起動するには Managed Remote Tunnel Token が必要です', + 'settings.openchamber.tunnel.toast.addManagedRemoteTokenBeforeStarting': '起動前に Managed Remote Tunnel Token を追加してください', + 'settings.openchamber.tunnel.toast.startFailed': 'Tunnel の起動に失敗しました', + 'settings.openchamber.tunnel.toast.startedButNoPublicUrl': 'Tunnel は起動しましたが、公開 URL が返されませんでした', + 'settings.openchamber.tunnel.toast.replacedTunnelSingleSingle': '前の Tunnel を置き換えました: 1 つのリンクを無効化、1 つの Session を無効化。', + 'settings.openchamber.tunnel.toast.replacedTunnelSingleManySessions': '前の Tunnel を置き換えました: 1 つのリンクを無効化、{invalidatedSessionCount} の Session を無効化。', + 'settings.openchamber.tunnel.toast.replacedTunnelManyLinksSingleSession': '前の Tunnel を置き換えました: {revokedBootstrapCount} のリンクを無効化、1 つの Session を無効化。', + 'settings.openchamber.tunnel.toast.replacedTunnelManyMany': '前の Tunnel を置き換えました: {revokedBootstrapCount} のリンクを無効化、{invalidatedSessionCount} の Session を無効化。', + 'settings.openchamber.tunnel.toast.linkReady': 'Tunnel リンク準備完了', + 'settings.openchamber.tunnel.toast.stopped': 'Tunnel を停止しました', + 'settings.openchamber.tunnel.toast.stopFailed': 'Tunnel の停止に失敗しました', + 'settings.openchamber.tunnel.toast.connectLinkCopied': '接続リンクをコピーしました', + 'settings.openchamber.tunnel.toast.copyUrlFailed': 'URL のコピーに失敗しました', + 'settings.openchamber.tunnel.toast.saveSelectedManagedRemoteFailed': '選択した Managed Remote Tunnel の保存に失敗しました', + 'settings.openchamber.tunnel.toast.tunnelNameRequired': 'Tunnel 名が必要です', + 'settings.openchamber.tunnel.toast.managedRemoteHostnameRequired': 'Managed Remote Tunnel のホスト名が必要です', + 'settings.openchamber.tunnel.toast.managedRemoteTokenRequired': 'Managed Remote Tunnel Token が必要です', + 'settings.openchamber.tunnel.toast.hostnameAlreadyExists': 'このホスト名は既に存在します', + 'settings.openchamber.tunnel.toast.managedRemoteSaved': 'Managed Remote Tunnel を保存しました', + 'settings.openchamber.tunnel.toast.managedRemoteRemoved': 'Managed Remote Tunnel を削除しました', + 'settings.magicPrompts.sidebar.title': 'マジックプロンプト', + 'settings.magicPrompts.sidebar.description': '編集する Prompt Template を選択してください。', + 'settings.magicPrompts.sidebar.group.git': 'Git', + 'settings.magicPrompts.sidebar.group.github': 'GitHub', + 'settings.magicPrompts.sidebar.group.planning': '計画', + 'settings.magicPrompts.sidebar.group.session': 'セッション', + 'settings.magicPrompts.sidebar.item.gitCommitGenerate': 'Commit 生成', + 'settings.magicPrompts.sidebar.item.gitPrGenerate': 'PR 生成', + 'settings.magicPrompts.sidebar.item.gitConflictResolve': 'Merge/Rebase 競合解決', + 'settings.magicPrompts.sidebar.item.gitCherrypickConflictResolve': 'Cherry-pick 競合解決', + 'settings.magicPrompts.sidebar.item.githubPrReview': 'PR レビュー', + 'settings.magicPrompts.sidebar.item.githubIssueReview': 'Issue レビュー', + 'settings.magicPrompts.sidebar.item.githubPrFailedChecksReview': 'PR 失敗チェックレビュー', + 'settings.magicPrompts.sidebar.item.githubPrCommentsReview': 'PR コメントレビュー', + 'settings.magicPrompts.sidebar.item.githubSinglePrCommentReview': '単一 PR コメントレビュー', + 'settings.magicPrompts.sidebar.item.planTodo': 'Todo 計画', + 'settings.magicPrompts.sidebar.item.planImprove': '計画の改善', + 'settings.magicPrompts.sidebar.item.planImplement': '計画の実装', + 'settings.magicPrompts.sidebar.item.sessionSummary': 'Session サマリー', + 'settings.magicPrompts.sidebar.item.sessionWorkspaceReview': 'Workspace レビュー', + 'settings.magicPrompts.sidebar.item.sessionExplore': 'コードベースツアー', + 'settings.magicPrompts.sidebar.item.sessionFeaturePlan': '機能計画', + 'settings.magicPrompts.sidebar.item.sessionCatchUp': 'キャッチアップ', + 'settings.magicPrompts.sidebar.item.sessionDebug': 'デバッグ', + 'settings.magicPrompts.sidebar.item.sessionWeigh': '選択肢の比較', + 'settings.magicPrompts.sidebar.item.sessionFusion': '統合', + 'settings.remoteInstances.sidebar.title': 'リモートインスタンス', + 'settings.remoteInstances.sidebar.total': '合計 {count}', + 'settings.remoteInstances.sidebar.newSshInstanceName': '新しい SSH 接続', + 'settings.remoteInstances.sidebar.actions.addSshInstance': 'SSH 接続を追加', + 'settings.remoteInstances.sidebar.actions.connect': '接続', + 'settings.remoteInstances.sidebar.actions.disconnect': '切断', + 'settings.remoteInstances.sidebar.actions.retry': '再試行', + 'settings.remoteInstances.sidebar.actions.remove': '削除', + 'settings.remoteInstances.sidebar.confirm.localPortInUseRetry': 'ローカルポートは既に使用中です。ランダムな空きローカルポートを選んで再試行しますか?', + 'settings.remoteInstances.sidebar.toast.createFailed': 'SSH 接続の作成に失敗しました', + 'settings.remoteInstances.sidebar.toast.retriedWithRandomPort': 'ランダムなポートで再試行しました', + 'settings.remoteInstances.sidebar.toast.connectFailed': 'インスタンスの接続に失敗しました', + 'settings.remoteInstances.sidebar.toast.disconnectFailed': 'インスタンスの切断に失敗しました', + 'settings.remoteInstances.sidebar.toast.retryFailed': '接続の再試行に失敗しました', + 'settings.remoteInstances.sidebar.toast.removeFailed': 'インスタンスの削除に失敗しました', + 'settings.remoteInstances.direct.sidebarTitle': 'サーバーリンク', + 'settings.remoteInstances.direct.sidebarDescription': 'リンクまたは Token で接続', + 'settings.remoteInstances.direct.title': 'その他の OpenChamber サーバー', + 'settings.remoteInstances.direct.description': 'URL で別の OpenChamber サーバーを追加します。サーバーが既に実行中で接続 Token がある場合に使用します。', + 'settings.remoteInstances.direct.field.labelPlaceholder': 'ラベル(任意)', + 'settings.remoteInstances.direct.field.urlPlaceholder': 'https://host:port', + 'settings.remoteInstances.direct.field.tokenPlaceholder': '接続 Token(信頼できるローカルサーバーでは任意)', + 'settings.remoteInstances.direct.note': '接続 Token はこのデバイスに保存され、このアプリがそのサーバーに接続するときにのみ使用されます。', + 'settings.remoteInstances.direct.actions.add': 'サーバーを追加', + 'settings.remoteInstances.direct.import.description': '別の OpenChamber サーバーからの接続リンクを貼り付けてください。', + 'settings.remoteInstances.direct.import.placeholder': 'openchamber://connect?...', + 'settings.remoteInstances.direct.import.action': 'リンクをインポート', + 'settings.remoteInstances.direct.error.invalidConnectLink': '無効な OpenChamber 接続リンクです。', + 'settings.remoteInstances.direct.state.loading': 'インスタンスを読み込み中...', + 'settings.remoteInstances.direct.state.empty': 'まだ他のサーバーが追加されていません。', + 'settings.remoteInstances.clientAuth.title': 'このサーバーに接続', + 'settings.remoteInstances.clientAuth.description': 'OpenChamber Desktop がこのサーバーに接続できるように、安全なリンクまたは Token を作成します。', + 'settings.remoteInstances.clientAuth.field.labelPlaceholder': 'デバイス名(任意)', + 'settings.remoteInstances.clientAuth.actions.create': 'Token を作成', + 'settings.remoteInstances.clientAuth.actions.pair': 'リンクを作成', + 'settings.remoteInstances.clientAuth.actions.revoke': '無効化', + 'settings.remoteInstances.clientAuth.actions.clearRevoked': '無効化済みをクリア', + 'settings.remoteInstances.clientAuth.qrAlt': 'OpenChamber 接続 QR コード', + 'settings.remoteInstances.clientAuth.pairingUrl': '接続リンク', + 'settings.remoteInstances.clientAuth.createdToken': 'この Token を今すぐコピーしてください。セキュリティのため、再表示されません。', + 'settings.remoteInstances.clientAuth.state.loading': 'Token を読み込み中...', + 'settings.remoteInstances.clientAuth.state.empty': 'まだデバイスが接続されていません。', + 'settings.remoteInstances.clientAuth.state.revoked': '無効化済み', + 'settings.remoteInstances.clientAuth.state.thisDevice': 'このデバイス', + 'settings.remoteInstances.clientAuth.lastUsed': '最終使用 {date}', + 'settings.remoteInstances.clientAuth.neverUsed': '未使用', + 'settings.remoteInstances.sidebar.phase.ready': '準備完了', + 'settings.remoteInstances.sidebar.phase.error': 'エラー', + 'settings.remoteInstances.sidebar.phase.reconnect': '再接続', + 'settings.remoteInstances.sidebar.phase.installing': 'インストール中', + 'settings.remoteInstances.sidebar.phase.updating': '更新中', + 'settings.remoteInstances.sidebar.phase.forwarding': '転送中', + 'settings.remoteInstances.sidebar.phase.starting': '起動中', + 'settings.remoteInstances.sidebar.phase.connecting': '接続中', + 'settings.remoteInstances.sidebar.phase.idle': 'アイドル', + 'settings.remoteInstances.page.section.instance': 'インスタンス', + 'settings.remoteInstances.page.section.instanceDescription': 'この接続の SSH コマンドと表示名を選択します。', + 'settings.remoteInstances.page.field.mode': 'モード', + 'settings.remoteInstances.page.field.modeHint': 'OpenChamber にサーバーを起動させるか、既に実行中のサーバーに接続するかを選択します。', + 'settings.remoteInstances.page.field.modePlaceholder': 'モードを選択', + 'settings.remoteInstances.page.field.modeManaged': '自動起動', + 'settings.remoteInstances.page.field.modeExternal': '既に実行中', + 'settings.remoteInstances.page.field.preferredRemotePort': '優先リモートポート', + 'settings.remoteInstances.page.field.preferredRemotePortHint': 'リモートマシンで使用するポート。空の場合は自動的に選択されます。', + 'settings.remoteInstances.page.field.keepServerRunning': 'サーバーを実行したままにする', + 'settings.remoteInstances.page.field.keepServerRunningHint': '切断後もリモートマシンで OpenChamber を実行し続けます。', + 'settings.remoteInstances.page.field.bindHost': 'バインドホスト', + 'settings.remoteInstances.page.field.bindHostHint': 'ローカル接続の待受先。LAN アクセスが必要でない限り、127.0.0.1 または localhost を使用してください。', + 'settings.remoteInstances.page.field.preferredLocalPort': '優先ローカルポート', + 'settings.remoteInstances.page.field.preferredLocalPortHint': 'この接続に使用するローカルポート。空の場合は自動的に選択されます。', + 'settings.remoteInstances.page.field.forwardType': '転送タイプ', + 'settings.remoteInstances.page.field.localHostPlaceholder': '127.0.0.1', + 'settings.remoteInstances.page.field.remoteHostPlaceholder': '127.0.0.1', + 'settings.remoteInstances.page.field.auto': '自動', + 'settings.remoteInstances.page.confirm.bindAllInterfaces': '0.0.0.0 にバインドすると、転送されたポートがローカルネットワークに公開されます。続行しますか?', + 'settings.remoteInstances.page.preview.localSocks5': '(ローカル SOCKS5)', + 'settings.remoteInstances.page.preview.local': '(ローカル)', + 'settings.remoteInstances.page.preview.remote': '(リモート)', + 'settings.remoteInstances.page.toast.openLocalEndpointFailed': 'ローカルアドレスのオープンに失敗しました', + 'settings.remoteInstances.page.toast.localUrlCopied': 'ローカル URL をコピーしました', + 'settings.remoteInstances.page.actions.copyLocalUrl': 'ローカル URL をコピー', + 'settings.remoteInstances.page.actions.open': '開く', + 'settings.remoteInstances.page.logsDialog.selectedInstanceFallback': '選択したインスタンス', + 'settings.remoteInstances.page.patternDialog.descriptionWithHost': '{host} には具体的な接続先が必要です。', + 'settings.remoteInstances.page.patternDialog.description': '接続先を入力してください。', + 'settings.common.actions.cancel': 'キャンセル', + 'settings.common.actions.create': '作成', + 'settings.common.actions.delete': '削除', + 'settings.common.actions.reset': 'リセット', + 'settings.common.actions.rename': '名前変更', + 'settings.common.actions.duplicate': '複製', + 'settings.common.actions.import': 'インポート', + 'settings.common.actions.copyAll': 'すべてコピー', + 'settings.common.actions.clear': 'クリア', + 'settings.common.actions.saving': '保存中...', + 'settings.common.actions.saveChanges': '変更を保存', + 'settings.common.scope.global': 'グローバル', + 'settings.common.scope.project': 'プロジェクト', + 'settings.common.field.description': '説明', + 'settings.common.badge.new': '新規', + 'settings.common.badge.modified': '変更済み', + 'settings.common.permission.allow': '許可', + 'settings.common.permission.ask': '確認', + 'settings.common.permission.deny': '拒否', + 'settings.common.state.comingSoon': '近日公開...', + 'settings.projects.actions.title': 'アクション', + 'settings.projects.actions.description': 'ヘッダーのプロジェクト名の横に表示されるプロジェクトごとのコマンド。', + 'settings.projects.actions.validation.fillNameAndCommand': '保存する前にアクション名とコマンドを入力してください。', + 'settings.projects.actions.state.loading': '読み込み中...', + 'settings.projects.actions.state.empty': 'まだアクションが設定されていません。', + 'settings.projects.actions.state.untitled': '名前なしアクション', + 'settings.projects.actions.state.noDesktopSshForwards': '有効なローカル SSH 転送がありません。', + 'settings.projects.actions.field.selectIconAria': 'アイコンを選択', + 'settings.projects.actions.field.iconAria': 'アイコン {icon}', + 'settings.projects.actions.field.actionNamePlaceholder': 'アクション名', + 'settings.projects.actions.field.command': 'コマンド', + 'settings.projects.actions.field.commandPlaceholder': '例: bun run lint', + 'settings.projects.actions.field.autoOpenUrl': 'URL を自動開く', + 'settings.projects.actions.field.autoOpenUrlForAria': '{title} の URL を自動開く', + 'settings.projects.actions.field.autoOpenUrlDescription': '出力または以下のカスタム URL から URL を開く', + 'settings.projects.actions.field.overrideUrlPlaceholder': '上書き URL(任意)', + 'settings.projects.actions.field.overrideUrlTooltip': 'このフィールドが入力されている場合、カスタム URL が使用されます。空の場合、アプリは出力から最適な URL を開きます。', + 'settings.projects.actions.field.desktopSshForward': 'Desktop SSH 転送', + 'settings.projects.actions.field.useOutputManualUrl': '出力/手動 URL を使用', + 'settings.projects.actions.actions.add': 'アクションを追加', + 'settings.projects.actions.actions.save': 'アクションを保存', + 'settings.projects.actions.toast.saveFailed': 'アクションの保存に失敗しました', + 'settings.projects.actions.toast.saved': 'プロジェクトアクションを保存しました', + 'settings.openchamber.about.title': 'OpenChamber について', + 'settings.openchamber.about.field.version': 'バージョン', + 'settings.openchamber.about.field.openCodeVersion': 'OpenCode バージョン', + 'settings.openchamber.about.state.checking': '確認中...', + 'settings.openchamber.about.state.upToDate': '最新です', + 'settings.openchamber.about.state.unknown': '不明', + 'settings.openchamber.about.actions.checkUpdates': 'アップデートを確認', + 'settings.openchamber.about.actions.update': 'アップデート', + 'settings.openchamber.about.actions.updateToVersion': '{version} にアップデート', + 'settings.openchamber.about.actions.checkForUpdates': 'アップデートを確認', + 'settings.openchamber.about.toast.latestVersion': '最新バージョンです', + 'settings.agents.sidebar.title': 'エージェント', + 'settings.agents.sidebar.total': '合計 {count}', + 'settings.agents.sidebar.empty.title': 'Agent が設定されていません', + 'settings.agents.sidebar.empty.description': '上の + ボタンを使用して作成してください', + 'settings.agents.sidebar.section.builtIn': 'ビルトイン Agent', + 'settings.agents.sidebar.section.custom': 'カスタム Agent', + 'settings.agents.sidebar.badge.system': 'システム', + 'settings.agents.sidebar.dialog.deleteTitle': 'Agent を削除', + 'settings.agents.sidebar.dialog.resetTitle': 'Agent をリセット', + 'settings.agents.sidebar.dialog.deleteDescription': 'Agent "{name}" を削除してもよろしいですか?', + 'settings.agents.sidebar.dialog.resetDescription': 'Agent "{name}" をデフォルト設定にリセットしてもよろしいですか?', + 'settings.agents.sidebar.renameDialog.title': 'Agent の名前変更', + 'settings.agents.sidebar.renameDialog.description': 'Agent "@{name}" の新しい名前を入力してください', + 'settings.agents.sidebar.renameDialog.placeholder': '新しい Agent 名...', + 'settings.agents.sidebar.toast.builtInCannotDelete': 'ビルトイン Agent は削除できません', + 'settings.agents.sidebar.toast.agentDeleted': 'Agent "{name}" を削除しました', + 'settings.agents.sidebar.toast.agentReset': 'Agent "{name}" をデフォルトにリセットしました', + 'settings.agents.sidebar.toast.deleteFailed': 'Agent の削除に失敗しました', + 'settings.agents.sidebar.toast.definitionNotFound': 'Agent 定義が見つかりませんでした。変更は行われませんでした。', + 'settings.agents.sidebar.toast.resetFailed': 'Agent のリセットに失敗しました', + 'settings.agents.sidebar.toast.agentNameRequired': 'Agent 名が必要です', + 'settings.agents.sidebar.toast.agentExists': '同じ名前の Agent が既に存在します', + 'settings.agents.sidebar.toast.removeOldAfterRenameFailed': '名前変更後に古い Agent の削除に失敗しました', + 'settings.agents.sidebar.toast.renameFailed': 'Agent の名前変更に失敗しました', + 'settings.agents.sidebar.toast.agentRenamed': 'Agent の名前を「{name}」に変更しました', + 'settings.agents.page.toast.permissionNameRequired': '権限名が必要です', + 'settings.agents.page.toast.created': 'Agent を作成しました', + 'settings.agents.page.toast.updated': 'Agent を更新しました', + 'settings.agents.page.toast.createFailed': 'Agent の作成に失敗しました', + 'settings.agents.page.toast.updateFailed': 'Agent の更新に失敗しました', + 'settings.agents.page.toast.saveUnexpectedError': '保存中にエラーが発生しました', + 'settings.agents.page.toast.savedManualRestart': 'ディスクに保存しました。変更を適用するには接続中の OpenCode サーバーを再起動してください。', + 'settings.agents.page.empty.title': 'サイドバーから Agent を選択してください', + 'settings.agents.page.empty.description': 'または新しいものを作成', + 'settings.agents.page.title.new': '新しい Agent', + 'settings.agents.page.subtitle.new': '新しいアシスタントペルソナを設定', + 'settings.agents.page.subtitle.edit': 'Agent 設定を編集', + 'settings.agents.page.section.identityRole': '識別情報と役割', + 'settings.agents.page.section.modelParameters': 'モデルとパラメーター', + 'settings.agents.page.section.systemPrompt': 'システムプロンプト', + 'settings.agents.page.section.toolPermissions': 'ツール権限', + 'settings.agents.page.field.agentName': 'Agent 名', + 'settings.agents.page.field.agentNamePlaceholder': 'agent-name', + 'settings.agents.page.field.scopePlaceholder': 'スコープ', + 'settings.agents.page.field.descriptionPlaceholder': 'この Agent は何をしますか?', + 'settings.agents.page.field.mode': 'モード', + 'settings.agents.page.field.modeTooltip': 'プライマリと Subagent の表示設定', + 'settings.agents.page.field.overrideModel': 'モデルを上書き', + 'settings.agents.page.field.temperature': '温度', + 'settings.agents.page.field.temperatureTooltip': 'ランダム性を制御します。高い = 創造的、低い = 集中的。', + 'settings.agents.page.field.temperatureRange': '0.0 ~ 2.0', + 'settings.agents.page.field.clearTemperatureAria': 'Temperature の上書きをクリア', + 'settings.agents.page.field.topP': 'Top P', + 'settings.agents.page.field.topPTooltip': 'Nucleus サンプリングの多様性。低い = 確率の高い Token のみ。', + 'settings.agents.page.field.topPRange': '0.0 ~ 1.0', + 'settings.agents.page.field.clearTopPAria': 'Top P の上書きをクリア', + 'settings.agents.page.field.variant': '思考バリアント', + 'settings.agents.page.field.variantTooltip': 'この Agent の思考/推論の深さを制御します。プロバイダー固有のパラメーター(例: Anthropic variant、OpenAI reasoning effort)に対応します。', + 'settings.agents.page.field.variantHint': '例: high、max、low', + 'settings.agents.page.field.variantPlaceholder': 'デフォルト', + 'settings.agents.page.field.systemPromptPlaceholder': 'あなたは熟練したコーディングアシスタントです...', + 'settings.agents.page.mode.primary': 'プライマリ', + 'settings.agents.page.mode.subagent': 'サブエージェント', + 'settings.agents.page.mode.all': 'すべて', + 'settings.agents.page.permissions.defaultLabel': 'デフォルト', + 'settings.agents.page.permissions.hideEditor': 'エディターを非表示', + 'settings.agents.page.permissions.advancedEditor': '高度なエディター', + 'settings.agents.page.permissions.globalSummary': 'グローバル: {summary}', + 'settings.agents.page.permissions.rulesSummary': 'ルール: {summary}', + 'settings.agents.page.permissions.globalDefault': 'グローバルデフォルト', + 'settings.agents.page.permissions.pattern': 'パターン', + 'settings.agents.page.permissions.addCustomRule': 'カスタムルールを追加', + 'settings.agents.page.permissions.permissionPlaceholder': '権限...', + 'settings.agents.page.permissions.patternPlaceholder': 'パターン(例: *)', + 'settings.page.behavior.title': '動作', + 'settings.behavior.page.title': '動作', + 'settings.behavior.page.warning.title': 'グローバルルールはプロジェクトルールと組み合わされます', + 'settings.behavior.page.warning.description': 'ここでの変更は {path} を更新します。OpenCode はプロジェクトレベルの AGENTS.md ルールも存在する場合は含めます。', + 'settings.behavior.page.section.systemPrompt': 'グローバル AGENTS.md', + 'settings.behavior.page.field.systemPromptPlaceholder': 'あなたは役立つ AI アシスタントです...\n\nこのスペースを使用して、すべての Session と Provider にわたって AI の動作方法に関する絶対的なルールを定義してください。', + 'settings.behavior.page.section.responseStyle': '応答スタイル', + 'settings.behavior.page.responseStyle.tooltip': '有効にすると、これらの指示は新しい会話ごとにアシスタントの応答方法をガイドします。最初のメッセージとともに送信され、グローバル AGENTS.md ルールは変更しません。', + 'settings.behavior.page.responseStyle.enableAria': '応答スタイルの指示を有効化', + 'settings.behavior.page.responseStyle.enable': '新しい会話に応答スタイルの指示を追加', + 'settings.behavior.page.responseStyle.preset': 'プリセット', + 'settings.behavior.page.responseStyle.option.concise': '簡潔', + 'settings.behavior.page.responseStyle.option.detailed': '詳細', + 'settings.behavior.page.responseStyle.option.mentor': 'メンター', + 'settings.behavior.page.responseStyle.option.pushback': '反論', + 'settings.behavior.page.responseStyle.option.noFiller': '無駄なし', + 'settings.behavior.page.responseStyle.option.matchEnergy': 'テンションに合わせる', + 'settings.behavior.page.responseStyle.option.warmPeer': '親しみやすい同僚', + 'settings.behavior.page.responseStyle.option.custom': 'カスタム', + 'settings.behavior.page.responseStyle.customPlaceholder': '最初のメッセージに追加する指示を記述...', + 'settings.behavior.page.toast.saved': '動作設定を保存しました', + 'settings.behavior.page.toast.saveFailed': '動作設定の保存に失敗しました', + 'settings.commands.sidebar.title': 'コマンド', + 'settings.commands.sidebar.total': '合計 {count}', + 'settings.commands.sidebar.empty.title': 'Command が設定されていません', + 'settings.commands.sidebar.empty.description': '上の + ボタンを使用して作成してください', + 'settings.commands.sidebar.section.builtIn': 'ビルトイン Command', + 'settings.commands.sidebar.section.custom': 'カスタム Command', + 'settings.commands.sidebar.dialog.deleteTitle': 'Command を削除', + 'settings.commands.sidebar.dialog.resetTitle': 'Command をリセット', + 'settings.commands.sidebar.dialog.deleteDescription': 'Command "{name}" を削除してもよろしいですか?', + 'settings.commands.sidebar.dialog.resetDescription': 'Command "{name}" をデフォルト設定にリセットしてもよろしいですか?', + 'settings.commands.sidebar.renameDialog.title': 'Command の名前変更', + 'settings.commands.sidebar.renameDialog.description': 'Command "/{name}" の新しい名前を入力してください', + 'settings.commands.sidebar.renameDialog.placeholder': '新しい Command 名...', + 'settings.commands.sidebar.toast.builtInCannotDelete': 'ビルトイン Command は削除できません', + 'settings.commands.sidebar.toast.commandDeleted': 'Command "{name}" を削除しました', + 'settings.commands.sidebar.toast.commandReset': 'Command "{name}" をデフォルトにリセットしました', + 'settings.commands.sidebar.toast.deleteFailed': 'Command の削除に失敗しました', + 'settings.commands.sidebar.toast.resetFailed': 'Command のリセットに失敗しました', + 'settings.commands.sidebar.toast.commandNameRequired': 'Command 名が必要です', + 'settings.commands.sidebar.toast.commandExists': '同じ名前の Command が既に存在します', + 'settings.commands.sidebar.toast.removeOldAfterRenameFailed': '名前変更後に古い Command の削除に失敗しました', + 'settings.commands.sidebar.toast.renameFailed': 'Command の名前変更に失敗しました', + 'settings.commands.page.toast.templateRequired': 'Command Template が必要です', + 'settings.commands.page.toast.created': 'Command を作成しました', + 'settings.commands.page.toast.updated': 'Command を更新しました', + 'settings.commands.page.toast.createFailed': 'Command の作成に失敗しました', + 'settings.commands.page.toast.updateFailed': 'Command の更新に失敗しました', + 'settings.commands.page.toast.saveUnexpectedError': '保存中にエラーが発生しました', + 'settings.commands.page.empty.title': 'サイドバーから Command を選択してください', + 'settings.commands.page.empty.description': 'または新しいものを作成', + 'settings.commands.page.title.new': '新しい Command', + 'settings.commands.page.subtitle.new': '新しいスラッシュ Command を設定', + 'settings.commands.page.subtitle.edit': 'Command 設定を編集', + 'settings.commands.page.section.identity': '識別情報', + 'settings.commands.page.section.executionContext': '実行コンテキスト', + 'settings.commands.page.section.template': 'コマンドテンプレート', + 'settings.commands.page.field.commandName': 'Command 名', + 'settings.commands.page.field.commandNamePlaceholder': 'command-name', + 'settings.commands.page.field.descriptionPlaceholder': 'この Command は何をしますか?', + 'settings.commands.page.field.overrideAgent': 'Agent を上書き', + 'settings.commands.page.field.templatePlaceholder': 'ここに Command Template を記述...\n\nユーザー入力を参照するには $ARGUMENTS を使用します。\nシェル出力を挿入するには !`shell command` を使用します。\nファイル内容を含めるには @filename を使用します。', + 'settings.commands.page.templateHint.userInput': 'ユーザー入力', + 'settings.commands.page.templateHint.shellOutput': 'シェル出力', + 'settings.commands.page.templateHint.fileContents': 'ファイル内容', + 'settings.commands.agentSelector.title': 'Agent を選択', + 'settings.commands.agentSelector.notSelected': '選択されていません', + 'settings.commands.agentSelector.selectAgentPlaceholder': 'Agent を選択...', + 'settings.gitIdentities.page.section.title': 'ID', + 'settings.gitIdentities.page.empty.title': 'Identity が設定されていません', + 'settings.gitIdentities.page.empty.description': 'プロジェクトごとの Git 作成者設定を管理するために作成してください', + 'settings.gitIdentities.page.discoveredCredentials.title': '~/.git-credentials で見つかりました', + 'settings.gitIdentities.page.badge.default': 'デフォルト', + 'settings.gitIdentities.page.actions.setAsDefault': 'デフォルトに設定', + 'settings.gitIdentities.page.actions.unsetDefault': 'デフォルトを解除', + 'settings.gitIdentities.page.actions.import': 'インポート', + 'settings.gitIdentities.page.toast.updateDefaultFailed': 'デフォルト Identity の更新に失敗しました', + 'settings.gitIdentities.page.toast.defaultUpdated': 'デフォルト Identity を更新しました', + 'settings.gitIdentities.page.toast.defaultUnset': 'デフォルト Identity を解除しました', + 'settings.gitIdentities.page.toast.profileDeleted': 'プロファイル "{name}" を削除しました', + 'settings.gitIdentities.page.toast.deleteProfileFailed': 'プロファイルの削除に失敗しました', + 'settings.gitIdentities.page.deleteDialog.title': 'プロファイルを削除', + 'settings.gitIdentities.page.deleteDialog.description': '"{name}" を削除してもよろしいですか?', + 'settings.gitIdentities.editor.title.importCredential': '認証情報をインポート', + 'settings.gitIdentities.editor.title.newIdentity': '新しい Identity', + 'settings.gitIdentities.editor.title.globalIdentity': 'グローバル Identity', + 'settings.gitIdentities.editor.title.editIdentity': 'Identity を編集', + 'settings.gitIdentities.editor.description.globalReadOnly': 'システム全体の Git Identity(読み取り専用)', + 'settings.gitIdentities.editor.description.newProfile': '新しい Git Identity プロファイルを作成', + 'settings.gitIdentities.editor.description.editProfile': 'Identity プロファイル設定を編集', + 'settings.gitIdentities.editor.section.commitSigning': 'Commit 署名', + 'settings.gitIdentities.editor.field.profileName': 'プロファイル名', + 'settings.gitIdentities.editor.field.profileNamePlaceholder': '仕事用、個人用など', + 'settings.gitIdentities.editor.field.color': '色', + 'settings.gitIdentities.editor.field.icon': 'アイコン', + 'settings.gitIdentities.editor.field.userName': 'ユーザー名', + 'settings.gitIdentities.editor.field.userNameTooltip': 'Git Commit メッセージに表示される名前です。', + 'settings.gitIdentities.editor.field.userNamePlaceholder': '山田 太郎', + 'settings.gitIdentities.editor.field.emailAddress': 'メールアドレス', + 'settings.gitIdentities.editor.field.emailAddressTooltip': 'GitHub/GitLab でのメールアドレスと一致させることで適切な帰属が行われます。', + 'settings.gitIdentities.editor.field.emailAddressPlaceholder': 'yamada@example.com', + 'settings.gitIdentities.editor.field.authMethod': '認証方法', + 'settings.gitIdentities.editor.field.authToken': 'Token', + 'settings.gitIdentities.editor.field.sshKeyPath': 'SSH 鍵パス', + 'settings.gitIdentities.editor.field.sshKeyPathTooltip': '秘密鍵へのパス(任意)。例: ~/.ssh/id_ed25519', + 'settings.gitIdentities.editor.field.sshKeyPathPlaceholder': '~/.ssh/id_ed25519', + 'settings.gitIdentities.editor.field.signCommits': 'この Identity で Commit に署名', + 'settings.gitIdentities.editor.field.signingKey': '署名鍵', + 'settings.gitIdentities.editor.field.signingKeyPlaceholder': '~/.ssh/id_ed25519.pub', + 'settings.gitIdentities.editor.field.host': 'ホスト', + 'settings.gitIdentities.editor.field.hostTooltip': 'このホストの Token が ~/.git-credentials から読み取られます。', + 'settings.gitIdentities.editor.field.hostPlaceholder': 'github.com', + 'settings.gitIdentities.editor.actions.close': '閉じる', + 'settings.gitIdentities.editor.actions.create': '作成', + 'settings.gitIdentities.editor.actions.save': '保存', + 'settings.gitIdentities.editor.toast.userNameEmailRequired': 'ユーザー名とメールアドレスが必要です', + 'settings.gitIdentities.editor.toast.hostRequiredForToken': 'Token ベースの認証にはホストが必要です', + 'settings.gitIdentities.editor.toast.signingKeyRequired': 'Commit 署名が有効な場合は署名鍵が必要です', + 'settings.gitIdentities.editor.toast.profileCreated': 'プロファイルを作成しました', + 'settings.gitIdentities.editor.toast.profileUpdated': 'プロファイルを更新しました', + 'settings.gitIdentities.editor.toast.createProfileFailed': 'プロファイルの作成に失敗しました', + 'settings.gitIdentities.editor.toast.updateProfileFailed': 'プロファイルの更新に失敗しました', + 'settings.gitIdentities.editor.toast.saveUnexpectedError': '保存中にエラーが発生しました', + 'settings.gitIdentities.editor.toast.profileDeleted': 'プロファイルを削除しました', + 'settings.gitIdentities.editor.toast.deleteProfileFailed': 'プロファイルの削除に失敗しました', + 'settings.gitIdentities.editor.toast.deleteUnexpectedError': '削除中にエラーが発生しました', + 'settings.skills.sidebar.title': 'スキル', + 'settings.skills.sidebar.total': '合計 {count}', + 'settings.skills.sidebar.section.project': 'プロジェクト Skill', + 'settings.skills.sidebar.section.user': 'ユーザー Skill', + 'settings.skills.sidebar.empty.title': 'Skill が設定されていません', + 'settings.skills.sidebar.empty.description': '上の + ボタンを使用して作成してください', + 'settings.skills.sidebar.badge.claude': 'claude', + 'settings.skills.sidebar.badge.agents': 'agents', + 'settings.skills.sidebar.badge.opencode': 'opencode', + 'settings.skills.sidebar.toast.skillDeleted': 'Skill "{name}" を削除しました', + 'settings.skills.sidebar.toast.deleteSkillFailed': 'Skill の削除に失敗しました', + 'settings.skills.sidebar.toast.duplicateLoadFailed': '複製用の Skill 詳細の読み込みに失敗しました', + 'settings.skills.sidebar.toast.renameLoadFailed': 'Skill 詳細の読み込みに失敗しました', + 'settings.skills.sidebar.toast.removeOldAfterRenameFailed': '名前変更後に古い Skill の削除に失敗しました', + 'settings.skills.sidebar.toast.renameFailed': 'Skill の名前変更に失敗しました', + 'settings.skills.sidebar.deleteDialog.title': 'Skill を削除', + 'settings.skills.sidebar.deleteDialog.description': 'Skill "{name}" を削除してもよろしいですか?', + 'settings.skills.sidebar.renameDialog.title': 'Skill の名前変更', + 'settings.skills.sidebar.renameDialog.description': 'Skill "{name}" の新しい名前を入力してください', + 'settings.skills.sidebar.renameDialog.placeholder': '新しい Skill 名...', + 'settings.skills.page.title.newSkill': '新しい Skill', + 'settings.skills.page.subtitle.newSkill': '新しい Skill を設定', + 'settings.skills.page.subtitle.skillLocation': '{location} Skill', + 'settings.skills.page.section.basicInformation': '基本情報', + 'settings.skills.page.section.instructions': '指示', + 'settings.skills.page.section.supportingFiles': 'サポートファイル', + 'settings.skills.page.field.skillNameLocation': 'Skill 名と場所', + 'settings.skills.page.field.skillNameHint': '小文字、数字、ハイフン', + 'settings.skills.page.field.skillNamePlaceholder': 'skill-name', + 'settings.skills.page.field.descriptionHint': 'Agent はこれを使用して Skill を読み込むタイミングを判断します', + 'settings.skills.page.field.descriptionPlaceholder': 'この Skill の簡単な説明...', + 'settings.skills.page.field.instructionsPlaceholder': 'ステップごとの指示、ガイドライン、参考内容...', + 'settings.skills.page.badge.claudeCompatible': 'Claude 互換', + 'settings.skills.page.badge.pending': '保留中', + 'settings.skills.page.actions.addFile': 'ファイルを追加', + 'settings.skills.page.actions.createSkill': 'Skill を作成', + 'settings.skills.page.actions.createFile': 'ファイルを作成', + 'settings.skills.page.supportingFiles.empty': 'サポートファイルがありません。「ファイルを追加」を使用して参考資料を含めてください。', + 'settings.skills.page.loading.details': 'Skill 詳細を読み込み中...', + 'settings.skills.page.loading.fileContent': 'ファイル内容を読み込み中...', + 'settings.skills.page.empty.title': 'サイドバーから Skill を選択してください', + 'settings.skills.page.empty.description': 'または新しいものを作成', + 'settings.skills.page.deleteFileDialog.title': 'サポートファイルを削除', + 'settings.skills.page.deleteFileDialog.description': '"{path}" を削除してもよろしいですか?', + 'settings.skills.page.fileDialog.titleEdit': 'サポートファイルを編集', + 'settings.skills.page.fileDialog.titleAdd': 'サポートファイルを追加', + 'settings.skills.page.fileDialog.descriptionEdit': 'ファイル内容を変更', + 'settings.skills.page.fileDialog.descriptionAdd': 'Skill ディレクトリに新しいファイルを作成', + 'settings.skills.page.fileDialog.field.filePath': 'ファイルパス', + 'settings.skills.page.fileDialog.field.filePathPlaceholder': 'example.md または docs/reference.txt', + 'settings.skills.page.fileDialog.field.filePathHint': 'Skill ディレクトリ内の相対パス。サブディレクトリは自動的に作成されます。', + 'settings.skills.page.fileDialog.field.content': '内容', + 'settings.skills.page.fileDialog.field.contentPlaceholder': 'ファイル内容...', + 'settings.skills.page.toast.skillNameRequired': 'Skill 名が必要です', + 'settings.skills.page.toast.invalidSkillName': 'Skill 名は1~64文字の小文字英数字とハイフンで、ハイフンで開始または終了できません', + 'settings.skills.page.toast.descriptionRequired': '説明が必要です', + 'settings.skills.page.toast.skillExists': '同じ名前の Skill が既に存在します', + 'settings.skills.page.toast.skillCreated': 'Skill を作成しました', + 'settings.skills.page.toast.skillUpdated': 'Skill を更新しました', + 'settings.skills.page.toast.createSkillFailed': 'Skill の作成に失敗しました', + 'settings.skills.page.toast.updateSkillFailed': 'Skill の更新に失敗しました', + 'settings.skills.page.toast.saveUnexpectedError': '保存中にエラーが発生しました', + 'settings.skills.page.toast.loadFileContentFailed': 'ファイル内容の読み込みに失敗しました', + 'settings.skills.page.toast.fileNameRequired': 'ファイル名が必要です', + 'settings.skills.page.toast.fileExists': '同じ名前のファイルが既に存在します', + 'settings.skills.page.toast.noSkillSelected': 'Skill が選択されていません', + 'settings.skills.page.toast.fileAdded': 'ファイル "{path}" を追加しました', + 'settings.skills.page.toast.fileCreated': 'ファイル "{path}" を作成しました', + 'settings.skills.page.toast.fileUpdated': 'ファイル "{path}" を更新しました', + 'settings.skills.page.toast.fileRemoved': 'ファイル "{path}" を削除しました', + 'settings.skills.page.toast.fileDeleted': 'ファイル "{path}" を削除しました', + 'settings.skills.page.toast.createFileFailed': 'ファイルの作成に失敗しました', + 'settings.skills.page.toast.updateFileFailed': 'ファイルの更新に失敗しました', + 'settings.skills.page.toast.deleteFileFailed': 'ファイルの削除に失敗しました', + 'settings.skills.location.option.userOpencode.label': 'ユーザー / OpenCode', + 'settings.skills.location.option.userOpencode.description': 'グローバル OpenCode 設定場所', + 'settings.skills.location.option.projectOpencode.label': 'プロジェクト / OpenCode', + 'settings.skills.location.option.projectOpencode.description': '現在のプロジェクト .opencode の場所', + 'settings.skills.location.option.userClaude.label': 'ユーザー / Claude', + 'settings.skills.location.option.userClaude.description': 'グローバル Claude Skill の場所', + 'settings.skills.location.option.projectClaude.label': 'プロジェクト / Claude', + 'settings.skills.location.option.projectClaude.description': '現在のプロジェクト .claude の場所', + 'settings.skills.location.option.userAgents.label': 'ユーザー / Agents', + 'settings.skills.location.option.userAgents.description': 'グローバル .agents 互換性の場所', + 'settings.skills.location.option.projectAgents.label': 'プロジェクト / Agents', + 'settings.skills.location.option.projectAgents.description': '現在のプロジェクト .agents 互換性の場所', + 'settings.skills.catalog.shared.field.repository': 'リポジトリ', + 'settings.skills.catalog.shared.field.repositoryPlaceholder': 'owner/repo または git@github.com:owner/repo.git', + 'settings.skills.catalog.shared.field.optionalSubpath': 'オプションのサブパス', + 'settings.skills.catalog.shared.field.subpathPlaceholder': '例: skills', + 'settings.skills.catalog.shared.field.targetLocation': '対象の場所', + 'settings.skills.catalog.shared.field.project': 'プロジェクト', + 'settings.skills.catalog.shared.field.noProjects': '利用可能なプロジェクトがありません', + 'settings.skills.catalog.shared.field.chooseProjectPlaceholder': 'プロジェクトを選択', + 'settings.skills.catalog.shared.field.searchSkillsPlaceholder': 'Skill を検索...', + 'settings.skills.catalog.shared.toast.repositoryRequired': 'リポジトリソースが必要です', + 'settings.skills.catalog.shared.toast.privateRepoNotSupportedVsCode': 'プライベートリポジトリは VS Code ではまだサポートされていません', + 'settings.skills.catalog.shared.toast.foundSkills': '{count} 個の Skill が見つかりました', + 'settings.skills.catalog.shared.noDescription': '説明がありません', + 'settings.skills.catalog.shared.actions.scan': 'スキャン', + 'settings.skills.catalog.shared.actions.scanning': 'スキャン中...', + 'settings.skills.catalog.shared.actions.install': 'インストール', + 'settings.skills.catalog.shared.actions.installing': 'インストール中...', + 'settings.skills.catalog.shared.auth.title': '認証が必要です', + 'settings.skills.catalog.shared.auth.description': 'Git Identity(SSH 鍵)を選択してください', + 'settings.skills.catalog.shared.auth.chooseIdentity': 'Identity を選択', + 'settings.skills.catalog.shared.auth.footerHint': 'Identity は設定 - Git Identities で設定できます。', + 'settings.skills.catalog.shared.auth.footerHintArrow': 'Identity は設定 → Git Identities で設定できます。', + 'settings.skills.catalog.conflicts.title': 'Skill が既に存在します', + 'settings.skills.catalog.conflicts.description': '選択した Skill の一部はこのスコープに既にインストールされています。スキップするか上書きするかを選択してください。', + 'settings.skills.catalog.conflicts.count': '{count} 件の競合', + 'settings.skills.catalog.conflicts.installedIn': '{scope} / {source} にインストール済み', + 'settings.skills.catalog.conflicts.scope.user': 'ユーザー', + 'settings.skills.catalog.conflicts.scope.project': 'プロジェクト', + 'settings.skills.catalog.conflicts.source.opencode': 'opencode', + 'settings.skills.catalog.conflicts.source.agents': 'agents', + 'settings.skills.catalog.conflicts.decision.skip': 'スキップ', + 'settings.skills.catalog.conflicts.decision.overwrite': '上書き', + 'settings.skills.catalog.conflicts.actions.skipAll': 'すべてスキップ', + 'settings.skills.catalog.conflicts.actions.overwriteAll': 'すべて上書き', + 'settings.skills.catalog.conflicts.actions.continue': '続行', + 'settings.skills.catalog.installSkill.title': 'Skill をインストール', + 'settings.skills.catalog.installSkill.descriptionPrefix': 'インストール', + 'settings.skills.catalog.installSkill.descriptionSuffix': 'を4つの対象場所のいずれかにインストールします。', + 'settings.skills.catalog.installSkill.field.destination': 'インストール先', + 'settings.skills.catalog.installSkill.field.project': 'プロジェクト', + 'settings.skills.catalog.installSkill.field.noProjects': '利用可能なプロジェクトがありません', + 'settings.skills.catalog.installSkill.field.chooseProjectPlaceholder': 'プロジェクトを選択', + 'settings.skills.catalog.installSkill.actions.install': 'インストール', + 'settings.skills.catalog.installSkill.actions.installing': 'インストール中...', + 'settings.skills.catalog.installSkill.toast.installed': 'Skill をインストールしました', + 'settings.skills.catalog.installSkill.toast.authRequired': '認証が必要です', + 'settings.skills.catalog.installSkill.toast.installFailed': 'Skill のインストールに失敗しました', + 'settings.skills.catalog.add.title': 'Skills Catalog を追加', + 'settings.skills.catalog.add.descriptionPrefix': 'Git リポジトリを新しいカタログソースとして追加します。OpenChamber が以下のファイルを含むフォルダーをスキャンします:', + 'settings.skills.catalog.add.descriptionSuffix': '。', + 'settings.skills.catalog.add.field.catalogName': 'カタログ名', + 'settings.skills.catalog.add.field.catalogNamePlaceholder': '例: チーム Skill', + 'settings.skills.catalog.add.field.repository': 'リポジトリ', + 'settings.skills.catalog.add.field.optionalSubpath': 'オプションのサブパス', + 'settings.skills.catalog.add.field.repositoryHint': '公開リポジトリはどこでも動作します。プライベートリポジトリは SSH Identity が必要です(Desktop/Web のみ)。', + 'settings.skills.catalog.add.scanResult': 'スキャン結果: {count} 個の Skill が見つかりました', + 'settings.skills.catalog.add.duplicateMessage': 'このカタログは既に追加されています。', + 'settings.skills.catalog.add.actions.addCatalog': 'カタログを追加', + 'settings.skills.catalog.add.toast.repositoryRequired': 'リポジトリソースが必要です', + 'settings.skills.catalog.add.toast.authenticationRequiredScan': '認証が必要です。Git Identity を選択して再度スキャンしてください。', + 'settings.skills.catalog.add.toast.scanFailed': 'リポジトリのスキャンに失敗しました', + 'settings.skills.catalog.add.toast.noSkillsFound': 'このリポジトリに Skill が見つかりませんでした', + 'settings.skills.catalog.add.toast.catalogNameRequired': 'カタログ名が必要です', + 'settings.skills.catalog.add.toast.scanBeforeAdd': 'このカタログを追加する前にリポジトリをスキャンしてください', + 'settings.skills.catalog.add.toast.catalogAlreadyExists': 'このカタログは既に存在します', + 'settings.skills.catalog.add.toast.catalogAdded': 'カタログを追加しました', + 'settings.skills.catalog.add.toast.saveFailed': 'カタログの保存に失敗しました', + 'settings.skills.catalog.installFromRepo.title': 'Git リポジトリからインストール', + 'settings.skills.catalog.installFromRepo.descriptionPrefix': '以下のファイルを含むフォルダーをリポジトリからスキャンし', + 'settings.skills.catalog.installFromRepo.descriptionSuffix': '、選択した Skill をインストールします。', + 'settings.skills.catalog.installFromRepo.repositoryHintPrefix': 'GitHub のショートハンドを使用する場合、次のようにサブパスを追加できます:', + 'settings.skills.catalog.installFromRepo.authDescription': 'このリポジトリにアクセスできる Git Identity(SSH 鍵)を選択してください。', + 'settings.skills.catalog.installFromRepo.empty.noScanResultsTitle': 'まだスキャン結果がありません', + 'settings.skills.catalog.installFromRepo.empty.noScanResultsDescription': 'リポジトリをスキャンして Skill を発見', + 'settings.skills.catalog.installFromRepo.actions.selectAll': 'すべて選択', + 'settings.skills.catalog.installFromRepo.actions.selectNone': 'すべて解除', + 'settings.skills.catalog.installFromRepo.actions.installSelected': '選択したものをインストール', + 'settings.skills.catalog.installFromRepo.badge.installed': 'インストール済み ({scope}/{source})', + 'settings.skills.catalog.installFromRepo.selectedCount': '選択: {selected} / {total}', + 'settings.skills.catalog.installFromRepo.toast.authenticationRequiredScan': '認証が必要です。Git Identity を選択して再度スキャンしてください。', + 'settings.skills.catalog.installFromRepo.toast.authenticationRequiredInstall': '認証が必要です。Git Identity を選択して再度インストールしてください。', + 'settings.skills.catalog.installFromRepo.toast.scanFailed': 'リポジトリのスキャンに失敗しました', + 'settings.skills.catalog.installFromRepo.toast.selectAtLeastOne': '少なくとも1つの Skill を選択してください', + 'settings.skills.catalog.installFromRepo.toast.installedCount': '{count} 個の Skill をインストールしました', + 'settings.skills.catalog.installFromRepo.toast.installCompleted': 'インストールが完了しました', + 'settings.skills.catalog.installFromRepo.toast.installFailed': 'Skill のインストールに失敗しました', + 'settings.skills.catalog.page.mode.manual': '手動', + 'settings.skills.catalog.page.mode.external': '外部', + 'settings.skills.catalog.page.title': 'スキルカタログ', + 'settings.skills.catalog.page.section.sourceRepository': 'ソースリポジトリ', + 'settings.skills.catalog.page.field.selectSourcePlaceholder': 'ソースを選択', + 'settings.skills.catalog.page.actions.refreshTitle': '更新', + 'settings.skills.catalog.page.actions.removeCatalogTitle': 'カタログを削除', + 'settings.skills.catalog.page.actions.addCatalog': 'カタログを追加', + 'settings.skills.catalog.page.actions.removeCatalog': 'カタログを削除', + 'settings.skills.catalog.page.actions.loadMoreSkills': 'さらに Skill を読み込む', + 'settings.skills.catalog.page.loading.catalog': '読み込み中...', + 'settings.skills.catalog.page.loading.skills': 'Skill を読み込み中...', + 'settings.skills.catalog.page.loading.more': '読み込み中...', + 'settings.skills.catalog.page.foundCount': '{count} 個の Skill が見つかりました', + 'settings.skills.catalog.page.error.catalogTitle': 'カタログエラー', + 'settings.skills.catalog.page.empty.noSkillsTitle': 'Skill が見つかりません', + 'settings.skills.catalog.page.empty.noSkillsDescription': '別の検索語を試すか、カタログを更新してください', + 'settings.skills.catalog.page.badge.installed': 'インストール済み ({scope})', + 'settings.skills.catalog.page.badge.notInstallable': 'インストール不可', + 'settings.skills.catalog.page.badge.unknown': '不明', + 'settings.skills.catalog.page.byOwnerPrefix': '提供', + 'settings.skills.catalog.page.removeDialog.title': 'カタログを削除', + 'settings.skills.catalog.page.removeDialog.description': 'このカタログを削除してもよろしいですか?', + 'settings.openchamber.passkeys.title': 'パスキー', + 'settings.openchamber.passkeys.field.currentDevice': '現在のデバイス', + 'settings.openchamber.passkeys.actions.add': 'パスキーを追加', + 'settings.openchamber.passkeys.actions.cancelSetup': 'パスキー設定をキャンセル', + 'settings.openchamber.passkeys.actions.signOutEverywhere': 'すべての端末からサインアウト', + 'settings.openchamber.passkeys.actions.signingOut': 'サインアウト中...', + 'settings.openchamber.passkeys.actions.removing': '削除中...', + 'settings.openchamber.passkeys.state.uiPasswordRequired': 'パスキーは UI パスワードロックが有効な場合のみ利用できます。', + 'settings.openchamber.passkeys.state.loading': 'パスキーを読み込み中...', + 'settings.openchamber.passkeys.state.noneSaved': 'このホストに保存されたパスキーはまだありません。', + 'settings.openchamber.passkeys.item.lastUsed': '最終使用 {time}', + 'settings.openchamber.passkeys.item.added': '追加日 {time}', + 'settings.openchamber.passkeys.time.neverUsed': '未使用', + 'settings.openchamber.passkeys.toast.loadFailed': 'パスキーを読み込めませんでした。', + 'settings.openchamber.passkeys.toast.enableUiPasswordFirst': 'パスキーを追加する前に UI パスワードロックを有効にしてください。', + 'settings.openchamber.passkeys.toast.added': 'パスキーを追加しました', + 'settings.openchamber.passkeys.toast.setupCanceled': 'パスキー設定をキャンセルしました', + 'settings.openchamber.passkeys.toast.addFailed': 'パスキーを追加できませんでした。', + 'settings.openchamber.passkeys.toast.removed': 'パスキーを削除しました', + 'settings.openchamber.passkeys.toast.removeFailed': 'パスキーを削除できませんでした。', + 'settings.openchamber.passkeys.toast.clearAuthFailed': '保存された認証情報をクリアできませんでした。', + 'settings.openchamber.sessionRetention.title': 'Session 保持', + 'settings.openchamber.sessionRetention.tooltip': '最終アクティビティに基づいて非アクティブな Session を自動的にアーカイブまたは削除します。最新5件の Session は保持されます。', + 'settings.openchamber.sessionRetention.field.enableAutoCleanupAria': '自動クリーンアップを有効化', + 'settings.openchamber.sessionRetention.field.enableAutoCleanup': '自動クリーンアップを有効化', + 'settings.openchamber.sessionRetention.field.retentionPeriod': '保持期間', + 'settings.openchamber.sessionRetention.field.retentionPeriodAria': '保持期間(日数)', + 'settings.openchamber.sessionRetention.field.days': '日', + 'settings.openchamber.sessionRetention.field.whenSessionsExpire': 'Session の期限が切れたとき', + 'settings.openchamber.sessionRetention.actions.resetRetentionAria': '保持期間をリセット', + 'settings.openchamber.sessionRetention.actions.runCleanupNow': '今すぐクリーンアップを実行', + 'settings.openchamber.sessionRetention.actions.cleaningUp': 'クリーンアップ中...', + 'settings.openchamber.sessionRetention.action.archive': 'アーカイブ', + 'settings.openchamber.sessionRetention.action.delete': '削除', + 'settings.openchamber.sessionRetention.manualCleanup.title': '手動クリーンアップ', + 'settings.openchamber.sessionRetention.manualCleanup.eligibleArchiveNow': '現在アーカイブ可能: {count}', + 'settings.openchamber.sessionRetention.manualCleanup.eligibleDeleteNow': '現在削除可能: {count}', + 'settings.openchamber.sessionRetention.toast.noneEligibleArchive': 'アーカイブ可能な Session はありません', + 'settings.openchamber.sessionRetention.toast.noneEligibleDelete': '削除可能な Session はありません', + 'settings.openchamber.sessionRetention.toast.archivedCount': '{count} 個の Session をアーカイブしました', + 'settings.openchamber.sessionRetention.toast.deletedCount': '{count} 個の Session を削除しました', + 'settings.openchamber.sessionRetention.toast.failedArchiveCount': '{count} 個の Session のアーカイブに失敗しました', + 'settings.openchamber.sessionRetention.toast.failedDeleteCount': '{count} 個の Session の削除に失敗しました', + 'settings.openchamber.desktopNetwork.title': 'Desktop ネットワークアクセス', + 'settings.openchamber.desktopNetwork.field.launchAtLoginAria': 'ログイン時に OpenChamber を起動', + 'settings.openchamber.desktopNetwork.field.launchAtLogin': 'ログイン時に OpenChamber を起動', + 'settings.openchamber.desktopNetwork.field.launchAtLoginDescription': 'ウィンドウを開かずにバックグラウンドでアプリを起動します。Dock アイコンをクリックして開きます。', + 'settings.openchamber.desktopNetwork.field.allowLanAccessAria': 'Desktop サイドカーへの LAN アクセスを許可', + 'settings.openchamber.desktopNetwork.field.allowLanAccess': 'ローカルネットワーク上の他のデバイスがこのアプリを開けるようにする', + 'settings.openchamber.desktopNetwork.field.allowLanAccessDescription': 'アプリを再起動して、Wi-Fi 上の他のデバイスから開けるようにします。', + 'settings.openchamber.desktopNetwork.field.warning': '警告: 有効にすると、アプリは同じローカルネットワーク上の誰からもアクセス可能になります。', + 'settings.openchamber.desktopNetwork.field.passwordRequiredWarning': 'LAN アクセスには Desktop UI パスワードが必要です。設定されるまで、Desktop アプリはローカルのみで起動します。', + 'settings.openchamber.desktopPassword.field.password': 'Desktop UI パスワード', + 'settings.openchamber.desktopPassword.field.passwordPlaceholder': 'パスワード不要', + 'settings.openchamber.desktopPassword.field.passwordDescription': 'OpenChamber は再起動後、およびログイン Session の有効期限後(12時間、または「このデバイスを信頼」の場合は7日)に確認を求めます。空のままにするとログインが無効になります。', + 'settings.openchamber.desktopNetwork.hint.openAfterRestart': '再起動後、別のデバイスから開く: ', + 'settings.openchamber.desktopNetwork.hint.openNow': '別のデバイスから開く: ', + 'settings.openchamber.desktopNetwork.actions.saveAndRestart': '保存して再起動', + 'settings.openchamber.desktopNetwork.error.loadFailed': 'Desktop 設定の読み込みに失敗しました', + 'settings.openchamber.desktopNetwork.error.saveFailed': 'Desktop 設定の保存に失敗しました', + 'settings.openchamber.desktopNetwork.error.savedRestartFailed': '保存しましたが、アプリの再起動に失敗しました', + 'settings.openchamber.desktopNetwork.error.launchAtLoginUnsupported': 'このシステムではログイン時の起動はサポートされていません', + 'settings.openchamber.desktopNetwork.error.launchAtLoginSaveFailed': 'ログイン時起動設定の更新に失敗しました', + 'settings.openchamber.opencodeCli.title': 'OpenCode CLI', + 'settings.openchamber.opencodeCli.tooltipPrefix': '以下への絶対パス(任意):', + 'settings.openchamber.opencodeCli.tooltipSuffix': 'バイナリ。', + 'settings.openchamber.opencodeCli.field.binaryPath': 'OpenCode バイナリパス', + 'settings.openchamber.opencodeCli.field.binaryPathPlaceholder': '/Users/you/.bun/bin/opencode', + 'settings.openchamber.opencodeCli.field.showUpdateNotifications': 'OpenCode のアップデート通知を表示', + 'settings.openchamber.opencodeCli.field.showUpdateNotificationsAria': 'OpenCode のアップデート通知を表示', + 'settings.openchamber.opencodeCli.actions.browseAria': 'OpenCode バイナリパスを参照', + 'settings.openchamber.opencodeCli.actions.browse': '参照', + 'settings.openchamber.opencodeCli.actions.saveAndReload': '保存して再読み込み', + 'settings.openchamber.opencodeCli.actions.restartingOpenCode': 'OpenCode を再起動中...', + 'settings.openchamber.opencodeCli.dialog.selectBinaryTitle': 'opencode バイナリを選択', + 'settings.openchamber.opencodeCli.tipPrefix': 'ヒント: 環境変数', + 'settings.openchamber.opencodeCli.tipMiddle': 'も使用できますが、この設定は以下に保存されます:', + 'settings.mcp.sidebar.title': 'MCP サーバー', + 'settings.mcp.sidebar.total': '合計 {count}', + 'settings.mcp.sidebar.actions.refreshStatusAria': 'MCP ステータスを更新', + 'settings.mcp.sidebar.actions.refreshStatusTitle': 'MCP ステータスを更新', + 'settings.mcp.sidebar.actions.addServerTitle': 'MCP サーバーを追加', + 'settings.mcp.sidebar.actions.deleting': '削除中...', + 'settings.mcp.sidebar.empty.title': 'MCP サーバーが設定されていません', + 'settings.mcp.sidebar.empty.description': '上の + ボタンを使用して追加してください', + 'settings.mcp.sidebar.group.projectServers': 'プロジェクトサーバー', + 'settings.mcp.sidebar.group.userServers': 'ユーザーサーバー', + 'settings.mcp.sidebar.serverType.localTitle': 'ローカルサーバー', + 'settings.mcp.sidebar.serverType.remoteTitle': 'リモートサーバー', + 'settings.mcp.sidebar.deleteDialog.title': 'MCP サーバーを削除', + 'settings.mcp.sidebar.deleteDialog.descriptionPrefix': '"{name}" を削除してもよろしいですか?以下から削除されます:', + 'settings.mcp.sidebar.toast.deleteFailed': 'MCP サーバーの削除に失敗しました', + 'settings.mcp.sidebar.toast.serverDeleted': 'MCP サーバー "{name}" を削除しました', + 'settings.mcp.sidebar.toast.refreshListIfStale': 'UI が古く見える場合は MCP リストを更新してください。', + 'settings.plugins.sidebar.title': 'プラグイン', + 'settings.plugins.sidebar.total': '合計 {count}', + 'settings.plugins.sidebar.actions.addTitle': 'Plugin を追加', + 'settings.plugins.sidebar.actions.deleting': '削除中...', + 'settings.plugins.sidebar.empty.title': 'Plugin が設定されていません', + 'settings.plugins.sidebar.empty.description': '上の + ボタンを使用して追加してください', + 'settings.plugins.sidebar.group.userEntries': 'ユーザー設定', + 'settings.plugins.sidebar.group.userFiles': 'ユーザー Plugin ファイル', + 'settings.plugins.sidebar.group.projectEntries': 'プロジェクト設定', + 'settings.plugins.sidebar.group.projectFiles': 'プロジェクト Plugin ファイル', + 'settings.plugins.sidebar.kind.npm': 'npm パッケージ', + 'settings.plugins.sidebar.kind.path': 'ローカルパス', + 'settings.plugins.sidebar.kind.file': 'Plugin ファイル', + 'settings.plugins.sidebar.deleteDialog.title': 'Plugin を削除', + 'settings.plugins.sidebar.deleteDialog.description': '"{name}" を削除してもよろしいですか?', + 'settings.plugins.sidebar.toast.deleted': 'Plugin "{name}" を削除しました', + 'settings.plugins.sidebar.toast.deleteFailed': 'Plugin の削除に失敗しました', + 'settings.plugins.page.empty.select': '表示または編集する Plugin を選択', + 'settings.plugins.page.empty.add': 'または + をクリックして新しい Plugin を追加', + 'settings.plugins.page.header.entry': 'インストール済み Plugin', + 'settings.plugins.page.header.file': 'Plugin ファイル', + 'settings.plugins.page.field.spec': '仕様', + 'settings.plugins.page.field.spec.placeholder': 'npm-package@version または /absolute/path', + 'settings.plugins.page.field.options': 'オプション(JSON)', + 'settings.plugins.page.field.options.invalidJson': '無効な JSON', + 'settings.plugins.page.field.fileName': 'ファイル名', + 'settings.plugins.page.field.content': '内容', + 'settings.plugins.page.field.scope': 'スコープ', + 'settings.plugins.scope.user': 'ユーザー', + 'settings.plugins.scope.project': 'プロジェクト', + 'settings.plugins.page.action.save': '保存', + 'settings.plugins.page.action.discard': '破棄', + 'settings.plugins.dialog.add.title': 'Plugin を追加', + 'settings.plugins.dialog.add.tab.npm': 'npm から', + 'settings.plugins.dialog.add.tab.path': 'ローカルパスから', + 'settings.plugins.dialog.add.tab.file': '新しいファイル', + 'settings.plugins.dialog.add.action.submit': '追加', + 'settings.plugins.dialog.add.action.cancel': 'キャンセル', + 'settings.plugins.toast.created': 'Plugin を追加しました', + 'settings.plugins.toast.updated': 'Plugin を更新しました', + 'settings.plugins.toast.reloadFailed': 'opencode の再読み込みに失敗しました - 再起動が必要です', + 'settings.plugins.validation.fileName': 'ファイル名は小文字で、.js / .ts / .mjs / .cjs で終わる必要があります', + 'settings.plugins.validation.specRequired': 'Spec が必要です', + 'settings.plugins.registry.badge.update.label': '↑ {version}', + 'settings.plugins.registry.badge.update.tooltip': 'アップデート可能: {current} → {latest}', + 'settings.plugins.registry.badge.malformed.tooltip': 'Spec の形式が不正です', + 'settings.plugins.registry.badge.missingPackage.tooltip': 'パッケージ {name} が npm に見つかりません', + 'settings.plugins.registry.badge.missingVersion.tooltip': 'バージョン {version} の {name} は公開されていません', + 'settings.plugins.registry.badge.pathMissing.tooltip': 'ファイルが見つかりません: {path}', + 'settings.plugins.registry.badge.pathUnreadable.tooltip': 'ファイルを読み取れません: {path}', + 'settings.plugins.registry.badge.network.tooltip': 'npm レジストリに接続できませんでした', + 'settings.plugins.registry.banner.updateAvailable.title': 'アップデート可能', + 'settings.plugins.registry.banner.updateAvailable.description': '{current} → {latest}', + 'settings.plugins.registry.banner.updateAvailable.action': '{latest} にアップデート', + 'settings.plugins.registry.banner.invalid.title': '無効な Plugin', + 'settings.plugins.registry.banner.invalid.malformed': 'Spec の構文が不正です', + 'settings.plugins.registry.banner.invalid.missingPackage': 'npm にパッケージが見つかりません', + 'settings.plugins.registry.banner.invalid.missingVersion': 'バージョンが公開されていません', + 'settings.plugins.registry.banner.invalid.pathMissing': 'ファイルが存在しません', + 'settings.plugins.registry.banner.invalid.pathUnreadable': 'ファイルが読み取り不可能です', + 'settings.plugins.sidebar.actions.updateToLatest': '最新にアップデート', + 'settings.plugins.sidebar.actions.refresh': 'アップデートを確認', + 'settings.plugins.sidebar.group.updatesAvailable_one': '{count} 件のアップデート可能', + 'settings.plugins.sidebar.group.updatesAvailable_other': '{count} 件のアップデート可能', + 'settings.plugins.toast.updatedToLatest': 'Plugin を {version} にアップデートしました', + 'settings.plugins.toast.refreshing': 'npm でアップデートを確認中...', + 'settings.plugins.toast.refreshFailed': 'npm レジストリを確認できませんでした', + 'settings.openchamber.keyboardShortcuts.title': 'キーボードショートカット', + 'settings.openchamber.keyboardShortcuts.actions.resetAll': 'すべてリセット', + 'settings.openchamber.keyboardShortcuts.actions.overwrite': '上書き', + 'settings.openchamber.keyboardShortcuts.tooltip': '新しいキーコンボを設定して保存すると、バインディングが即座に更新されます。', + 'settings.openchamber.keyboardShortcuts.overwritePrompt': 'このキーコンボは別のショートカットで既に使用されています。上書きしてそのマッピングをクリアしますか?', + 'settings.openchamber.keyboardShortcuts.field.pressKeys': 'キーを押してください...', + 'settings.openchamber.keyboardShortcuts.error.captureFirst': '最初にショートカットを設定してください。', + 'settings.openchamber.keyboardShortcuts.warning.riskyBrowserShortcut': 'このショートカットはブラウザのデフォルトと競合する可能性があります。それでも保存されます。', + 'settings.openchamber.keyboardShortcuts.action.open_go_to_line.label': '指定行に移動(ファイルエディター)', + 'settings.openchamber.keyboardShortcuts.action.open_command_palette.label': 'コマンドパレットを開く', + 'settings.openchamber.keyboardShortcuts.action.focus_input.label': '入力をフォーカス', + 'settings.openchamber.keyboardShortcuts.action.open_settings.label': '設定を開く', + 'settings.openchamber.keyboardShortcuts.action.toggle_terminal.label': 'ターミナルドックの切替', + 'settings.openchamber.keyboardShortcuts.action.toggle_terminal_expanded.label': 'ターミナル拡大の切替', + 'settings.openchamber.keyboardShortcuts.action.toggle_sidebar.label': 'サイドバーの切替', + 'settings.openchamber.keyboardShortcuts.action.toggle_right_sidebar.label': '右サイドバーの切替', + 'settings.openchamber.keyboardShortcuts.action.open_right_sidebar_git.label': '右サイドバー Git タブを開く', + 'settings.openchamber.keyboardShortcuts.action.open_right_sidebar_files.label': '右サイドバー ファイルタブを開く', + 'settings.openchamber.keyboardShortcuts.action.cycle_right_sidebar_tab.label': '右サイドバータブを順に切替', + 'settings.openchamber.keyboardShortcuts.action.new_chat.label': '新しい Session', + 'settings.openchamber.keyboardShortcuts.action.new_chat_worktree.label': '新しい Worktree 下書き', + 'settings.openchamber.keyboardShortcuts.action.new_mini_chat.label': '新しいミニチャットウィンドウ', + 'settings.openchamber.keyboardShortcuts.action.open_help.label': 'キーボードショートカットを開く', + 'settings.openchamber.keyboardShortcuts.action.toggle_context_plan.label': '計画コンテキストパネルの切替', + 'settings.openchamber.keyboardShortcuts.action.toggle_services_menu.label': 'サービスメニューの切替', + 'settings.openchamber.keyboardShortcuts.action.cycle_services_tab.label': 'サービスタブを順に切替', + 'settings.openchamber.keyboardShortcuts.action.cycle_theme.label': 'テーマを順に切替', + 'settings.openchamber.keyboardShortcuts.action.cycle_agent.label': 'Agent を順に切替', + 'settings.openchamber.keyboardShortcuts.action.cycle_favorite_model_forward.label': 'お気に入りモデルを次へ', + 'settings.openchamber.keyboardShortcuts.action.cycle_favorite_model_backward.label': 'お気に入りモデルを前へ', + 'settings.openchamber.keyboardShortcuts.action.expand_input.label': '入力を拡大', + 'settings.openchamber.keyboardShortcuts.action.open_model_selector.label': 'モデルセレクターを開く', + 'settings.openchamber.keyboardShortcuts.action.open_timeline_dialog.label': '会話タイムラインを開く', + 'settings.projects.sidebar.total': '合計 {count}', + 'settings.projects.sidebar.actions.addProject': 'プロジェクトを追加', + 'settings.projects.page.empty.noProjects': '利用可能なプロジェクトがありません。', + 'settings.projects.page.title.default': 'プロジェクト設定', + 'settings.projects.page.section.worktree': 'ワークツリー', + 'settings.projects.page.field.projectName': 'プロジェクト名', + 'settings.projects.page.field.projectNamePlaceholder': 'プロジェクト名', + 'settings.projects.page.field.accentColor': 'アクセントカラー', + 'settings.projects.page.field.projectIcon': 'プロジェクトアイコン', + 'settings.projects.page.field.projectIconBackgroundAria': 'プロジェクトアイコンの背景色', + 'settings.projects.page.field.clearIconBackgroundAria': 'アイコン背景をクリア', + 'settings.projects.page.field.clearBackground': '背景をクリア', + 'settings.projects.page.field.none': 'なし', + 'settings.projects.page.field.preview': 'プレビュー', + 'settings.projects.page.actions.uploadIcon': 'アイコンをアップロード', + 'settings.projects.page.actions.uploading': 'アップロード中...', + 'settings.projects.page.actions.discoverFavicon': 'Favicon を検出', + 'settings.projects.page.actions.discovering': '検出中...', + 'settings.projects.page.actions.removeProjectIcon': 'プロジェクトアイコンを削除', + 'settings.projects.page.actions.removing': '削除中...', + 'settings.projects.page.actions.undoRemove': '削除を元に戻す', + 'settings.projects.page.toast.uploadIconFailed': 'プロジェクトアイコンのアップロードに失敗しました', + 'settings.projects.page.toast.iconUpdated': 'プロジェクトアイコンを更新しました', + 'settings.projects.page.toast.removeIconFailed': 'プロジェクトアイコンの削除に失敗しました', + 'settings.projects.page.toast.iconRemoved': 'プロジェクトアイコンを削除しました', + 'settings.projects.page.toast.discoverIconFailed': 'プロジェクトアイコンの検出に失敗しました', + 'settings.projects.page.toast.customIconAlreadySet': 'このプロジェクトには既にカスタムアイコンが設定されています', + 'settings.projects.page.toast.iconDiscovered': 'プロジェクトアイコンを検出しました', + 'settings.usage.sidebar.title': '使用量', + 'settings.usage.sidebar.total': '合計 {count}', + 'settings.usage.sidebar.actions.toggleAutoRefreshAria': '自動更新の切替', + 'settings.usage.sidebar.actions.refreshAria': '使用量を更新', + 'settings.usage.sidebar.actions.refreshTitle': '使用量を更新', + 'settings.usage.sidebar.tooltip.autoRefresh': '設定された間隔で使用量データを自動更新', + 'settings.usage.sidebar.field.intervalPlaceholder': '間隔', + 'settings.usage.sidebar.field.display': '表示', + 'settings.usage.sidebar.field.displayModePlaceholder': '表示モード', + 'settings.usage.sidebar.field.displayModeUsage': '使用量', + 'settings.usage.sidebar.field.displayModeRemaining': '残り割り当て', + 'settings.usage.sidebar.field.showPredictions': '予測を表示', + 'settings.usage.sidebar.status.notSet': '未設定', + 'settings.usage.page.empty.selectProvider': '使用量の詳細を表示する Provider を選択してください。', + 'settings.usage.page.header.providerUsage': '{provider} の使用量', + 'settings.usage.page.header.refreshing': '使用量を更新中...', + 'settings.usage.page.header.lastUpdated': '最終更新: {time}', + 'settings.usage.page.options.showInHeaderAria': 'ヘッダーメニューに表示', + 'settings.usage.page.options.showInHeader': 'ヘッダーメニューに表示', + 'settings.usage.page.options.showInHeaderTooltip': '有効にすると、アプリヘッダーのクイックアクセスドロップダウンメニューにこの Provider の使用量が表示されます。', + 'settings.usage.page.state.noData': 'まだ使用量データがありません。', + 'settings.usage.page.state.refreshFailedTitle': '使用量データの更新に失敗しました', + 'settings.usage.page.state.providerNotConfiguredTitle': 'Provider が設定されていません', + 'settings.usage.page.state.providerNotConfiguredDescription': 'Providers タブで認証情報を追加して使用量追跡を有効にしてください。', + 'settings.usage.page.section.modelQuotas': 'モデル割り当て', + 'settings.usage.page.section.otherModels': 'その他のモデル', + 'settings.usage.page.state.noQuotaWindowsTitle': '報告された割り当てウィンドウはありません', + 'settings.usage.page.state.noQuotaWindowsDescription': 'この Provider は現在レート制限や使用量割り当てを報告していません。', + 'settings.usage.pace.status.onTrack': '順調', + 'settings.usage.pace.status.slightlyFast': 'やや速い', + 'settings.usage.pace.status.tooFast': '速すぎる', + 'settings.usage.pace.status.usedUp': '使い切り', + 'settings.usage.pace.predictionTooltip': '現在のペースに基づくウィンドウ終了時の予測使用量: {prediction}', + 'settings.usage.pace.wait': '{duration} 待機', + 'settings.usage.pace.prediction': '予測: {prediction}', + 'settings.usage.pace.rate': 'ペース: {rate}', + 'settings.usage.pace.waitSeparator': ' · 待機 ', + 'settings.usage.pace.predictionLabel': '予測: ', + 'settings.remoteInstances.page.title': 'リモートインスタンス', + 'settings.remoteInstances.page.description': 'SSH 経由で別のマシンに接続し、そこで OpenChamber を開きます。', + 'settings.remoteInstances.page.empty.selectInstance': 'インスタンスを選択して設定を表示・編集します。', + 'settings.remoteInstances.page.empty.noExtraForwards': '追加のポート転送は設定されていません。', + 'settings.remoteInstances.page.section.actions': 'アクション', + 'settings.remoteInstances.page.section.actionsDescription': '接続、再接続、ログ表示、またはこの接続の削除。', + 'settings.remoteInstances.page.section.remoteServer': 'リモートマシン上の OpenChamber', + 'settings.remoteInstances.page.section.remoteServerDescription': 'SSH 接続後に OpenChamber をどのように実行するか選択します。', + 'settings.remoteInstances.page.section.mainTunnel': 'ローカルアクセス', + 'settings.remoteInstances.page.section.mainTunnelDescription': 'このリモート OpenChamber サーバーを開くために使用するローカルアドレスを選択します。', + 'settings.remoteInstances.page.section.authentication': '認証', + 'settings.remoteInstances.page.section.authenticationDescription': 'SSH およびリモート OpenChamber UI のオプションの認証情報。', + 'settings.remoteInstances.page.section.portForwards': 'ポート転送', + 'settings.remoteInstances.page.section.portForwardsDescription': 'この SSH 接続を通じて利用可能にする追加のオプションポート。', + 'settings.remoteInstances.page.field.sshCommand': 'SSH コマンド', + 'settings.remoteInstances.page.field.sshCommandPlaceholder': 'ssh user@host', + 'settings.remoteInstances.page.field.nickname': 'ニックネーム', + 'settings.remoteInstances.page.field.nicknamePlaceholder': '仕事用ノートPC', + 'settings.remoteInstances.page.field.connectionTimeoutSeconds': '接続タイムアウト(秒)', + 'settings.remoteInstances.page.field.installMethod': 'インストール方法', + 'settings.remoteInstances.page.field.installMethodHint': 'このアプリがリモートマシンで OpenChamber を起動する際の配置方法。', + 'settings.remoteInstances.page.field.selectInstallMethodPlaceholder': 'インストール方法を選択', + 'settings.remoteInstances.page.field.installMethodDownloadRelease': 'リリースをダウンロード', + 'settings.remoteInstances.page.field.installMethodUploadBundle': 'バンドルをアップロード', + 'settings.remoteInstances.page.field.selectBindHostPlaceholder': 'バインドホストを選択', + 'settings.remoteInstances.page.field.sshPasswordOptional': 'SSH パスワード(任意)', + 'settings.remoteInstances.page.field.sshPasswordPlaceholder': 'SSH パスワードを入力', + 'settings.remoteInstances.page.field.uiPasswordOptional': 'UI パスワード(任意)', + 'settings.remoteInstances.page.field.uiPasswordPlaceholder': 'UI パスワードを入力', + 'settings.remoteInstances.page.field.forwardTypeHint': 'この SSH 接続が提供するポートアクセスの種類を選択します。', + 'settings.remoteInstances.page.field.typePlaceholder': 'タイプ', + 'settings.remoteInstances.page.forwardType.local': 'ローカル (-L)', + 'settings.remoteInstances.page.forwardType.remote': 'リモート (-R)', + 'settings.remoteInstances.page.forwardType.dynamic': '動的 (-D)', + 'settings.remoteInstances.page.forwardTypeDescription.local': 'リモートマシン上の何かに接続するローカルポートを開きます。', + 'settings.remoteInstances.page.forwardTypeDescription.remote': '自分のコンピューターに接続するリモートポートを開きます。', + 'settings.remoteInstances.page.forwardTypeDescription.dynamic': 'SSH 接続を通じてローカル SOCKS プロキシを開きます。', + 'settings.remoteInstances.page.actions.create': '作成', + 'settings.remoteInstances.page.actions.cancel': 'キャンセル', + 'settings.remoteInstances.page.actions.connecting': '接続中...', + 'settings.remoteInstances.page.actions.reconnecting': '再接続中...', + 'settings.remoteInstances.page.actions.reconnectNow': '今すぐ再接続', + 'settings.remoteInstances.page.actions.logs': 'SSH ログ', + 'settings.remoteInstances.page.actions.pickRandomPort': 'ランダムポートを選択', + 'settings.remoteInstances.page.actions.enableForwardAria': '転送を有効化', + 'settings.remoteInstances.page.actions.openLocal': 'ローカルを開く', + 'settings.remoteInstances.page.actions.addForward': '転送を追加', + 'settings.remoteInstances.page.import.sectionTitle': '保存された SSH ホスト', + 'settings.remoteInstances.page.import.loading': 'SSH ホストを読み込み中...', + 'settings.remoteInstances.page.import.noneFound': 'SSH ホストが見つかりません。', + 'settings.remoteInstances.page.import.noneAvailable': 'インポート可能な SSH ホストがありません。', + 'settings.remoteInstances.page.import.patternSuffix': '(パターン)', + 'settings.remoteInstances.page.status.currentLocalUrl': '現在のローカル URL:', + 'settings.remoteInstances.page.status.reconnectStale': '再接続が停止しているようです。今すぐ再試行できます。', + 'settings.remoteInstances.page.logsDialog.title': 'SSH ログ', + 'settings.remoteInstances.page.logsDialog.loading': 'ログを読み込み中...', + 'settings.remoteInstances.page.logsDialog.empty': 'まだ SSH ログがありません。', + 'settings.remoteInstances.page.patternDialog.title': 'SSH 接続先を選択', + 'settings.remoteInstances.page.patternDialog.destinationPlaceholder': 'user@host', + 'settings.remoteInstances.page.phase.resolvingConfiguration': '設定を解決中', + 'settings.remoteInstances.page.phase.checkingAuth': '認証を確認中', + 'settings.remoteInstances.page.phase.establishingSsh': 'SSH 接続を確立中', + 'settings.remoteInstances.page.phase.probingRemote': 'リモートマシンを確認中', + 'settings.remoteInstances.page.phase.installingOpenChamber': 'OpenChamber をインストール中', + 'settings.remoteInstances.page.phase.updatingOpenChamber': 'OpenChamber を更新中', + 'settings.remoteInstances.page.phase.detectingServer': 'サーバーを検出中', + 'settings.remoteInstances.page.phase.startingServer': 'サーバーを起動中', + 'settings.remoteInstances.page.phase.forwardingPorts': 'ポートを転送中', + 'settings.remoteInstances.page.phase.reconnecting': '再接続中', + 'settings.remoteInstances.page.confirm.storeSshPasswordPlaintext': 'SSH パスワードをディスクに平文で保存しますか?', + 'settings.remoteInstances.page.confirm.storeUiPasswordPlaintext': 'UI パスワードをディスクに平文で保存しますか?', + 'settings.remoteInstances.page.confirm.removeInstance': 'このリモートインスタンスを削除しますか?', + 'settings.remoteInstances.page.toast.sshCommandRequired': 'SSH コマンドが必要です', + 'settings.remoteInstances.page.toast.saveFailed': 'インスタンスの保存に失敗しました', + 'settings.remoteInstances.page.toast.instanceSaved': 'インスタンスを保存しました', + 'settings.remoteInstances.page.toast.instanceCreated': 'インスタンスを作成しました', + 'settings.remoteInstances.page.toast.destinationRequired': '接続先が必要です', + 'settings.remoteInstances.page.toast.noLogsToCopy': 'コピーするログがありません', + 'settings.remoteInstances.page.toast.logsCopied': 'ログをコピーしました', + 'settings.remoteInstances.page.toast.logsCleared': 'ログをクリアしました', + 'settings.remoteInstances.page.toast.clearLogsFailed': 'ログのクリアに失敗しました', + 'settings.remoteInstances.page.toast.instanceUrlUnavailable': 'インスタンス URL が利用できません', + 'settings.remoteInstances.page.toast.connectFailed': 'インスタンスの接続に失敗しました', + 'settings.remoteInstances.page.toast.cancelConnectionFailed': '接続のキャンセルに失敗しました', + 'settings.remoteInstances.page.toast.disconnectFailed': 'インスタンスの切断に失敗しました', + 'settings.remoteInstances.page.toast.retryFailed': '接続の再試行に失敗しました', + 'settings.remoteInstances.page.toast.instanceRemoved': 'インスタンスを削除しました', + 'settings.remoteInstances.page.toast.removeInstanceFailed': 'インスタンスの削除に失敗しました', + 'settings.openchamber.worktrees.state.selectProject': 'Worktree を管理するプロジェクトを選択してください。', + 'settings.openchamber.worktrees.state.gitOnly': 'Worktree 設定は Git リポジトリでのみ利用可能です。', + 'settings.openchamber.worktrees.setup.title': 'セットアップコマンド', + 'settings.openchamber.worktrees.setup.tooltipPrefix': 'Worktree が作成されたときに新しい Worktree ディレクトリ内で自動的に実行されます。以下を使用します:', + 'settings.openchamber.worktrees.setup.tooltipSuffix': 'をプロジェクトルートに。', + 'settings.openchamber.worktrees.setup.loading': '読み込み中...', + 'settings.openchamber.worktrees.setup.commandPlaceholder': '例: bun install', + 'settings.openchamber.worktrees.setup.removeCommandAria': 'コマンドを削除', + 'settings.openchamber.worktrees.setup.addCommand': 'コマンドを追加', + 'settings.openchamber.worktrees.setup.waitForCommands': 'セットアップコマンドの完了を待ってからセッションを作成または送信する', + 'settings.openchamber.worktrees.setup.waitForCommandsAria': 'Worktree セットアップコマンドの完了を待ってからセッションを作成または送信する', + 'settings.openchamber.worktrees.list.title': '既存の Worktree', + 'settings.openchamber.worktrees.list.tooltip': 'Worktree はリポジトリの外にあり(OpenCode 管理)、削除するとリンクされた Session も削除されます。', + 'settings.openchamber.worktrees.list.loading': 'Worktree を読み込み中...', + 'settings.openchamber.worktrees.list.empty': 'このプロジェクトに Worktree は見つかりません', + 'settings.openchamber.worktrees.list.detachedHead': '分離 HEAD', + 'settings.openchamber.worktrees.list.deleteWorktreeAria': 'Worktree {name} を削除', + 'settings.agents.modelSelector.title': 'モデルを選択', + 'settings.agents.modelSelector.searchPlaceholder': 'モデルを検索', + 'settings.agents.modelSelector.selectPlaceholder': 'モデルを選択...', + 'settings.agents.modelSelector.notSelected': '選択されていません', + 'settings.agents.modelSelector.noModelOptional': 'モデルなし(任意)', + 'settings.agents.modelSelector.section.favorites': 'お気に入り', + 'settings.agents.modelSelector.section.recents': '最近', + 'settings.agents.modelSelector.section.recent': '最近', + 'settings.agents.modelSelector.badge.current': '現在', + 'settings.agents.modelSelector.actions.favorite': 'お気に入り', + 'settings.agents.modelSelector.actions.unfavorite': 'お気に入り解除', + 'settings.agents.modelSelector.actions.addToFavorites': 'お気に入りに追加', + 'settings.agents.modelSelector.actions.removeFromFavorites': 'お気に入りから削除', + 'settings.agents.modelSelector.state.noModelsFound': 'モデルが見つかりません', + 'settings.agents.modelSelector.keyboardHints': '↑↓ で移動 • Enter で選択 • Esc で閉じる', + 'settings.providers.sidebar.title': 'プロバイダー', + 'settings.providers.sidebar.total': '合計 {count}', + 'settings.providers.sidebar.actions.connectProviderAria': 'Provider に接続', + 'settings.providers.sidebar.actions.connectProviderTitle': 'Provider に接続', + 'settings.providers.sidebar.empty.title': 'Provider が見つかりません', + 'settings.providers.sidebar.empty.description': 'OpenCode の設定を確認してください', + 'settings.providers.sidebar.section.userProviders': 'ユーザー Provider', + 'settings.providers.sidebar.section.projectProviders': 'プロジェクト Provider', + 'settings.providers.page.state.loading': '読み込み中...', + 'settings.providers.page.state.unableToLoadProviderList': 'Provider 一覧を読み込めません', + 'settings.providers.page.empty.noProvidersDetected': 'Provider が検出されませんでした', + 'settings.providers.page.empty.checkOpenCodeConfiguration': 'OpenCode の設定を確認してください', + 'settings.providers.page.empty.selectProviderFromSidebar': 'サイドバーから Provider を選択', + 'settings.providers.page.empty.reviewDetailsAndConfigureAuth': '詳細を確認し認証を設定', + 'settings.providers.page.connect.title': 'Provider に接続', + 'settings.providers.page.connect.selectProviderTitle': 'Provider を選択', + 'settings.providers.page.connect.providerField': 'プロバイダー', + 'settings.providers.page.connect.selectProviderPlaceholder': 'Provider を選択', + 'settings.providers.page.connect.searchProvidersPlaceholder': '検索...', + 'settings.providers.page.connect.noProvidersFound': 'Provider が見つかりません', + 'settings.providers.page.connect.allProvidersConnected': 'すべての Provider が接続されています。', + 'settings.providers.page.auth.title': '認証', + 'settings.providers.page.auth.loadingMethods': '認証方法を読み込み中...', + 'settings.providers.page.auth.apiKeyLabel': 'API キー', + 'settings.providers.page.auth.apiKeyTooltip': 'キーは OpenCode に直接送信され、OpenChamber が保存することはありません。', + 'settings.providers.page.auth.apiKeyPlaceholder': 'sk-...', + 'settings.providers.page.auth.oauthMethodFallback': 'OAuth 方法 {index}', + 'settings.providers.page.auth.pasteAuthorizationCodePlaceholder': '認証コードを貼り付け', + 'settings.providers.page.auth.connected': '接続済み', + 'settings.providers.page.auth.useReconnectHint': '· 認証情報を更新するには再接続を使用', + 'settings.providers.page.connectionDetails.title': '接続詳細', + 'settings.providers.page.connectionDetails.configuredIn': '設定場所:', + 'settings.providers.page.connectionDetails.noActiveSource': 'アクティブな設定ソースがありません', + 'settings.providers.page.connectionDetails.source.authCredentials': '認証情報', + 'settings.providers.page.connectionDetails.source.userConfig': 'ユーザー設定', + 'settings.providers.page.connectionDetails.source.projectConfig': 'プロジェクト設定', + 'settings.providers.page.connectionDetails.source.customConfig': 'カスタム設定', + 'settings.providers.page.models.title': '利用可能なモデル', + 'settings.providers.page.models.filterPlaceholder': 'モデルをフィルター...', + 'settings.providers.page.models.noModelsMatchFilter': 'このフィルターに一致するモデルはありません。', + 'settings.providers.page.models.capability.toolCalling': 'ツール呼び出し', + 'settings.providers.page.models.capability.reasoning': '推論', + 'settings.providers.page.models.capability.imageInput': '画像入力', + 'settings.providers.page.models.tokenBadge.context': 'ctx', + 'settings.providers.page.models.tokenBadge.output': 'out', + 'settings.providers.page.models.actions.hideModelFromSelectors': 'セレクターからモデルを非表示', + 'settings.providers.page.models.actions.showModelInSelectors': 'セレクターにモデルを表示', + 'settings.providers.page.models.actions.hideModel': 'モデルを非表示', + 'settings.providers.page.models.actions.showModel': 'モデルを表示', + 'settings.providers.page.actions.saving': '保存中...', + 'settings.providers.page.actions.saveKey': 'キーを保存', + 'settings.providers.page.actions.connect': '接続', + 'settings.providers.page.actions.copyCode': 'コードをコピー', + 'settings.providers.page.actions.open': '開く', + 'settings.providers.page.actions.copy': 'コピー', + 'settings.providers.page.actions.complete': '完了', + 'settings.providers.page.actions.hide': '非表示', + 'settings.providers.page.actions.reconnect': '再接続', + 'settings.providers.page.actions.disconnecting': '切断中...', + 'settings.providers.page.actions.disconnect': '切断', + 'settings.providers.page.actions.hideAll': 'すべて非表示', + 'settings.providers.page.actions.showAll': 'すべて表示', + 'settings.providers.page.toast.authMethodsLoadFailed': 'Provider 認証方法の読み込みに失敗しました', + 'settings.providers.page.toast.providerSourcesLoadFailed': 'Provider ソースの読み込みに失敗しました', + 'settings.providers.page.toast.apiKeyRequired': 'API キーが必要です', + 'settings.providers.page.toast.apiKeySaveFailed': 'API キーの保存に失敗しました', + 'settings.providers.page.toast.apiKeySaved': 'API キーを保存しました', + 'settings.providers.page.toast.oauthStartFailed': 'OAuth フローの開始に失敗しました', + 'settings.providers.page.toast.oauthDetailsMissing': 'OAuth の詳細が返されませんでした', + 'settings.providers.page.toast.completeOAuthInBrowser': 'ブラウザで OAuth フローを完了してください', + 'settings.providers.page.toast.oauthCompleteFailed': 'OAuth フローの完了に失敗しました', + 'settings.providers.page.toast.oauthCompleted': 'OAuth 接続が完了しました', + 'settings.providers.page.toast.oauthLinkCopied': 'OAuth リンクをコピーしました', + 'settings.providers.page.toast.oauthLinkCopyFailed': 'OAuth リンクのコピーに失敗しました', + 'settings.providers.page.toast.deviceCodeCopied': 'デバイスコードをコピーしました', + 'settings.providers.page.toast.deviceCodeCopyFailed': 'デバイスコードのコピーに失敗しました', + 'settings.providers.page.toast.providerDisconnected': 'Provider を切断しました', + 'settings.providers.page.toast.providerDisconnectFailed': 'Provider の切断に失敗しました', + 'settings.mcp.page.empty.selectServer': 'サイドバーから MCP サーバーを選択してください', + 'settings.mcp.page.empty.addNewOne': 'または新しいものを追加', + 'settings.mcp.page.header.newServer': '新しい MCP サーバー', + 'settings.mcp.page.header.configureNewServer': '新しい MCP サーバーを設定', + 'settings.mcp.page.header.transport': '{type} トランスポート', + 'settings.mcp.page.transport.local': 'ローカル · stdio', + 'settings.mcp.page.transport.remote': 'リモート · SSE', + 'settings.mcp.page.status.label.connected': '接続済み', + 'settings.mcp.page.status.label.failed': '失敗', + 'settings.mcp.page.status.label.needsAuth': '認証が必要', + 'settings.mcp.page.status.label.needsRegistration': '登録が必要', + 'settings.mcp.page.status.description.connected': '接続済み。OpenCode がツールとリソースを検出できます。', + 'settings.mcp.page.status.description.failedDefault': 'OpenCode がこの MCP サーバーに到達できませんでした。', + 'settings.mcp.page.status.description.needsAuth': 'このリモート MCP サーバーは接続する前に認証が必要です。', + 'settings.mcp.page.status.description.needsClientRegistrationDefault': 'このリモート MCP サーバーは認証を完了する前にクライアント登録が必要です。', + 'settings.mcp.page.status.description.disabled': 'この MCP サーバーは設定で無効になっています。', + 'settings.mcp.page.status.description.default': '更新するか接続をテストして、ライブランタイムステータスを読み込んでください。', + 'settings.mcp.page.status.runtimeStatus': 'ランタイムステータス', + 'settings.mcp.page.status.projectScopedTo': 'プロジェクトスコープ: {directory}', + 'settings.mcp.page.status.userScoped': 'ユーザースコープ設定', + 'settings.mcp.page.status.activeProject': 'アクティブなプロジェクト', + 'settings.mcp.page.actions.connect': '接続', + 'settings.mcp.page.actions.disconnect': '切断', + 'settings.mcp.page.actions.authorize': '認可', + 'settings.mcp.page.actions.reauthorize': '再認可', + 'settings.mcp.page.actions.clearAuth': '認証をクリア', + 'settings.mcp.page.actions.test': 'テスト', + 'settings.mcp.page.actions.testConnection': '接続をテスト', + 'settings.mcp.page.actions.working': '処理中...', + 'settings.mcp.page.actions.starting': '起動中...', + 'settings.mcp.page.actions.clearing': 'クリア中...', + 'settings.mcp.page.actions.testing': 'テスト中...', + 'settings.mcp.page.actions.completing': '完了中...', + 'settings.mcp.page.actions.completeAuthorization': '認可を完了', + 'settings.mcp.page.actions.openInBrowser': 'ブラウザで開く', + 'settings.mcp.page.actions.copyLink': 'リンクをコピー', + 'settings.mcp.page.actions.deleting': '削除中...', + 'settings.mcp.page.auth.authorizationUrl': '認可 URL', + 'settings.mcp.page.auth.manualFallbackTitle': '手動認可フォールバック', + 'settings.mcp.page.auth.manualFallbackDescription': 'ブラウザが別のマシンに戻った場合や、コード付きのコールバック URL が表示された場合は、その完全な URL または生のコードをここに貼り付けてください。', + 'settings.mcp.page.auth.callbackInputPlaceholder': 'コールバック URL または認可コードを貼り付け', + 'settings.mcp.page.auth.waitingForOpenCode': 'OpenCode がブラウザの認可フロー完了を検出するのを待っています...', + 'settings.mcp.page.server.title': 'サーバー', + 'settings.mcp.page.server.name': 'サーバー名', + 'settings.mcp.page.server.namePlaceholder': 'my-mcp-server', + 'settings.mcp.page.server.importJson': 'JSON Snippet からインポート', + 'settings.mcp.page.server.importJsonTitle': 'JSON Snippet から MCP サーバー設定全体をインポート', + 'settings.mcp.page.server.enable': 'サーバーを有効化', + 'settings.mcp.page.server.enableAria': 'サーバーを有効化', + 'settings.mcp.page.server.transportMode': 'トランスポートモード', + 'settings.mcp.page.connection.command': 'コマンド', + 'settings.mcp.page.connection.serverUrl': 'サーバー URL', + 'settings.mcp.page.connection.serverUrlPlaceholder': 'https://mcp.example.com/mcp', + 'settings.mcp.page.connection.pasteCommand': 'コマンドを貼り付け', + 'settings.mcp.page.connection.pasteCommandTitle': 'クリップボードからローカルコマンドを貼り付けて自動分割', + 'settings.mcp.page.connection.previewArgs': 'プレビュー({count} 引数)', + 'settings.mcp.page.advanced.title': '高度なリモートオプション', + 'settings.mcp.page.advanced.configure': '高度なオプションを設定', + 'settings.mcp.page.advanced.autoDetect': '自動検出', + 'settings.mcp.page.advanced.custom': 'カスタム', + 'settings.mcp.page.advanced.headers': 'ヘッダー', + 'settings.mcp.page.advanced.timeoutMs': 'タイムアウト(ms)', + 'settings.mcp.page.advanced.timeoutHint': '空欄の場合は OpenCode のデフォルト MCP タイムアウトが使用されます。', + 'settings.mcp.page.advanced.requestHeaders': 'リクエストヘッダー', + 'settings.mcp.page.advanced.headerNamePlaceholder': 'Header-Name', + 'settings.mcp.page.advanced.pasteHeaders': 'ヘッダーを貼り付け', + 'settings.mcp.page.advanced.pasteHeadersTitle': 'クリップボードから KEY=VALUE ヘッダー行を貼り付け', + 'settings.mcp.page.advanced.oauthAutoDetection': 'OAuth 自動検出を有効化', + 'settings.mcp.page.advanced.oauthAutoDetectionAria': 'OAuth 自動検出を有効化', + 'settings.mcp.page.advanced.oauthClientIdPlaceholder': 'OAuth クライアント ID', + 'settings.mcp.page.advanced.oauthClientSecretPlaceholder': 'OAuth クライアントシークレット', + 'settings.mcp.page.advanced.oauthScopesPlaceholder': 'スコープ(スペース区切り)', + 'settings.mcp.page.advanced.oauthRedirectUriPlaceholder': 'リダイレクト URI', + 'settings.mcp.page.advanced.oauthHint': 'これらのフィールドを空欄にすると、OpenCode が MCP サーバーから OAuth 設定を推測します。', + 'settings.mcp.page.advanced.oauthCallbackHint': 'ブラウザベースの MCP 認可は、リダイレクト URI が空の場合にこのコールバック URL を使用します:', + 'settings.mcp.page.env.title': '環境変数', + 'settings.mcp.page.env.key': 'キー', + 'settings.mcp.page.env.value': '値', + 'settings.mcp.page.env.valuePlaceholder': '値', + 'settings.mcp.page.env.hide': '非表示', + 'settings.mcp.page.env.show': '表示', + 'settings.mcp.page.env.addVariable': '変数を追加', + 'settings.mcp.page.env.addEnvironmentVariable': '環境変数を追加', + 'settings.mcp.page.env.keyPlaceholder': 'API_KEY', + 'settings.mcp.page.env.pasteEnv': '.env を貼り付け', + 'settings.mcp.page.env.pasteEnvTitle': 'クリップボードから KEY=VALUE 行を貼り付け', + 'settings.mcp.page.env.plainTextWarning': '⚠ 値は opencode.json に平文で保存されます', + 'settings.mcp.page.env.removeVariableAria': '変数を削除', + 'settings.mcp.page.importDialog.title': 'JSON Snippet をインポート', + 'settings.mcp.page.importDialog.description': 'ドキュメントや他の設定ファイルから MCP JSON Snippet 全体を貼り付けてください。解析された値が保存前に確認用にフォームに表示されます。', + 'settings.mcp.page.importDialog.pasteFromClipboard': 'クリップボードから JSON を貼り付け', + 'settings.mcp.page.deleteDialog.title': '"{name}" を削除しますか?', + 'settings.mcp.page.deleteDialog.descriptionPrefix': 'これによりサーバーが以下から削除されます:', + 'settings.mcp.page.deleteDialog.descriptionSuffix': 'OpenCode の再読み込みが必要になります。', + 'settings.mcp.page.toast.clipboardReadFailed': 'クリップボードを読み取れません', + 'settings.mcp.page.toast.configImported': 'MCP 設定をインポートしました', + 'settings.mcp.page.toast.nameRequired': '名前が必要です', + 'settings.mcp.page.toast.serverNameExists': '同じ名前のサーバーが既に存在します', + 'settings.mcp.page.toast.localCommandRequired': 'ローカルサーバーではコマンドは空にできません', + 'settings.mcp.page.toast.remoteUrlRequired': 'リモートサーバーでは URL は空にできません', + 'settings.mcp.page.toast.serverCreatedReloadFailed': 'MCP サーバーを作成しましたが、OpenCode の再読み込みに失敗しました。', + 'settings.mcp.page.toast.savedReloadFailed': '保存しましたが、OpenCode の再読み込みに失敗しました。', + 'settings.mcp.page.toast.retryRefreshHint': 'このサーバーを認可する前に、更新を再試行するか設定を開き直してください。', + 'settings.mcp.page.toast.serverCreatedReloading': 'MCP サーバーを作成しました。OpenCode を再読み込み中...', + 'settings.mcp.page.toast.savedReloading': '保存しました。OpenCode を再読み込み中...', + 'settings.mcp.page.toast.saveFailed': '保存に失敗しました', + 'settings.mcp.page.toast.unexpectedError': 'エラーが発生しました', + 'settings.mcp.page.toast.serverDeletedReloadFailed': '"{name}" を削除しましたが、OpenCode の再読み込みに失敗しました', + 'settings.mcp.page.toast.refreshListIfStale': 'UI が古く見える場合は MCP リストを更新してください。', + 'settings.mcp.page.toast.serverDeleted': '"{name}" を削除しました', + 'settings.mcp.page.toast.deleteFailed': '削除に失敗しました', + 'settings.mcp.page.toast.disconnected': '切断しました', + 'settings.mcp.page.toast.connected': '接続しました', + 'settings.mcp.page.toast.connectionNeedsAuthorization': '接続には認可が必要です', + 'settings.mcp.page.toast.connectionNeedsClientRegistration': '接続にはクライアント登録が必要です', + 'settings.mcp.page.toast.connectionFailed': '接続に失敗しました', + 'settings.mcp.page.toast.connectionAttemptFinished': '接続試行が完了しました。詳細はステータスを更新してください。', + 'settings.mcp.page.toast.createServerBeforeLiveActions': 'ライブアクションを実行する前にサーバーを作成してください', + 'settings.mcp.page.toast.saveBeforeLiveActions': 'ライブアクションを実行する前に変更を保存してください', + 'settings.mcp.page.toast.refreshStatusFailed': 'MCP ステータスの更新に失敗しました', + 'settings.mcp.page.toast.oauthRedirectUrlBuildFailed': 'MCP OAuth リダイレクト URL を構築できませんでした', + 'settings.mcp.page.toast.oauthBrowserCallbackSaveFailed': 'MCP 認可のブラウザコールバック URL の保存に失敗しました', + 'settings.mcp.page.toast.openCodeReloadFailedAfterCallbackSave': 'ブラウザコールバック URL 保存後、OpenCode の再読み込みに失敗しました', + 'settings.mcp.page.toast.completeAuthorizationInBrowserWithPaste': 'ブラウザで MCP 認可フローを完了し、返されたコードまたはコールバック URL をここに貼り付けてください', + 'settings.mcp.page.toast.completeAuthorizationInBrowser': 'ブラウザで MCP 認可フローを完了してください', + 'settings.mcp.page.toast.openAuthorizationUrlFailed': '認可 URL を自動的に開けませんでした', + 'settings.mcp.page.toast.authorizationStartFailed': '認可の開始に失敗しました', + 'settings.mcp.page.toast.authSessionExpired': '認可 Session が期限切れになるか、再読み込み中にクリアされました。「認可」を再度クリックしてください。', + 'settings.mcp.page.toast.savedAuthorizationRemoved': '保存された MCP 認可が削除されました', + 'settings.mcp.page.toast.clearAuthorizationFailed': '認可のクリアに失敗しました', + 'settings.mcp.page.toast.authorizationUrlCopied': '認可 URL をコピーしました', + 'settings.mcp.page.toast.authorizationUrlCopyFailed': '認可 URL のコピーに失敗しました', + 'settings.mcp.page.toast.pasteCallbackOrCodeFirst': '最初にコールバック URL または認可コードを貼り付けてください', + 'settings.mcp.page.toast.missingServerDetails': 'MCP サーバーの詳細が不足しています。サーバーを再選択するか、完全なコールバック URL を貼り付けてください。', + 'settings.mcp.page.toast.authorizationCompleted': 'MCP 認可が完了しました', + 'settings.mcp.page.toast.authorizationCompletedFor': '{name} の MCP 認可が完了しました', + 'settings.mcp.page.toast.authorizationCompleteFailed': 'MCP 認可の完了に失敗しました', + 'settings.mcp.page.toast.enableServerBeforeTest': '接続をテストする前にこのサーバーを有効にしてください', + 'settings.mcp.page.toast.connectionTestSucceeded': '接続テストに成功しました', + 'settings.mcp.page.toast.connectionTestFailed': '接続テストに失敗しました', + 'settings.mcp.page.toast.connectionTestFinished': '接続テストが完了しました。詳細はステータスを更新してください。', + 'settings.mcp.page.toast.authorizationFailed': '認可に失敗しました', + 'settings.mcp.page.toast.authorizationStillInProgress': 'ブラウザで認可がまだ進行中です。必要に応じてコールバック URL またはコードを貼り付けてください。', + 'settings.mcp.page.toast.noKeyValuePairsFound': 'クリップボードに KEY=VALUE ペアが見つかりません', + 'settings.mcp.page.toast.importedVariablesCount': 'インポートした変数: {count}', + 'settings.mcp.page.toast.pastedArgumentsCount': '貼り付けた引数: {count}', + 'settings.shared.projectSelector.fallbackProject': 'プロジェクト', + 'settings.shared.projectSelector.switchProjectAria': 'プロジェクトを切替', + 'settings.shared.projectSelector.switchProjectTitle': 'プロジェクトを切替', + 'settings.openchamber.defaults.title': 'Session デフォルト', + 'settings.openchamber.defaults.summaryPrefix': '新しい Session は以下で開始されます:', + 'settings.openchamber.defaults.summaryOpenCodeDefault': 'OpenCode Agent デフォルト', + 'settings.openchamber.defaults.field.defaultModel': 'デフォルトモデル', + 'settings.openchamber.defaults.field.defaultThinking': 'デフォルト思考', + 'settings.openchamber.defaults.field.thinkingPlaceholder': '思考', + 'settings.openchamber.defaults.field.defaultAgent': 'デフォルト Agent', + 'settings.openchamber.defaults.field.showDeletionDialogAria': '削除ダイアログを表示', + 'settings.openchamber.defaults.field.showDeletionDialog': '削除ダイアログを表示', + 'settings.openchamber.defaults.field.openFilesPreviewAria': 'ファイルをプレビューモードで開く', + 'settings.openchamber.defaults.field.openFilesPreview': 'ファイルをプレビューモードで開く', + 'settings.openchamber.defaults.option.default': 'デフォルト', + 'settings.openchamber.defaults.option.defaultLowercase': 'デフォルト', + 'settings.openchamber.git.title': 'Git 設定', + 'settings.openchamber.git.changesViewTitle': '変更ビュー', + 'settings.openchamber.git.changesViewAria': 'Git 変更ビューモード', + 'settings.openchamber.git.option.flatList': 'フラットリスト', + 'settings.openchamber.git.option.treeView': 'ツリービュー', + 'settings.openchamber.git.optionAria': 'Git 変更ビューモード: {option}', + 'settings.openchamber.git.enableGitmojiAria': 'Gitmoji ピッカーを有効化', + 'settings.openchamber.git.enableGitmoji': 'Gitmoji ピッカーを有効化', + 'settings.openchamber.git.showGitignoredAria': '.gitignore ファイルを表示', + 'settings.openchamber.git.showGitignored': '.gitignore ファイルを表示', + 'settings.github.page.tooltip.connectAccount': 'アプリ内 PR および Issue ワークフロー用に GitHub アカウントを接続します。', + 'settings.github.page.avatarAlt.withLogin': '{login} のアバター', + 'settings.github.page.avatarAlt.fallback': 'GitHub アバター', + 'settings.github.page.label.unknownUser': '不明', + 'settings.github.page.label.scopes': 'スコープ: {value}', + 'settings.github.page.label.otherAccounts': 'その他のアカウント', + 'settings.github.page.accountSource.oauth': 'OAuth', + 'settings.github.page.accountSource.cli': 'CLI', + 'settings.github.page.actions.disconnect': '切断', + 'settings.github.page.actions.connect': 'GitHub に接続', + 'settings.github.page.actions.switchTo': '切替', + 'settings.github.page.actions.addAccount': 'アカウントを追加', + 'settings.github.page.actions.openGithub': 'GitHub を開く', + 'settings.github.page.status.notConnected': '未接続', + 'settings.github.page.status.active': 'アクティブ', + 'settings.github.page.flow.title': 'OpenChamber を認可', + 'settings.github.page.flow.description': 'GitHub で以下のコードを入力してこのデバイスを認可してください:', + 'settings.github.page.flow.waiting': '承認待機中...(自動更新)', + 'settings.github.page.toast.startConnectFailed': 'GitHub 接続の開始に失敗しました', + 'settings.github.page.toast.connected': 'GitHub に接続しました', + 'settings.github.page.toast.authorizationFailed': 'GitHub の認可に失敗しました', + 'settings.github.page.toast.disconnected': 'GitHub を切断しました', + 'settings.github.page.toast.disconnectFailed': 'GitHub の切断に失敗しました', + 'settings.github.page.toast.accountSwitched': 'GitHub アカウントを切替しました', + 'settings.github.page.toast.accountSwitchFailed': 'GitHub アカウントの切替に失敗しました', + 'settings.github.page.oauth.title': 'GitHub OAuth Token', + 'settings.github.page.ghCli.title': 'GitHub CLI Token', + 'settings.github.page.ghCli.activeDescription': 'gh CLI 経由で認証済み', + 'settings.github.page.ghCli.fallbackDescription': 'OpenChamber 認証が削除された場合のフォールバックとして利用可能', + 'settings.github.page.ghCli.disabledDescription': 'インストールされているがフォールバックとして未使用', + 'settings.github.page.ghCli.actions.disable': '無効化', + 'settings.github.page.ghCli.actions.enable': '有効化', + 'settings.github.page.toast.ghCliEnabled': 'gh CLI フォールバックを有効化しました', + 'settings.github.page.toast.ghCliDisabled': 'gh CLI フォールバックを無効化しました', + 'settings.github.page.toast.ghCliUpdateFailed': 'gh CLI 設定の更新に失敗しました', + 'settings.notifications.page.delivery.title': '通知配信', + 'settings.notifications.page.delivery.enableAria': '通知を有効化', + 'settings.notifications.page.delivery.enableLabel': '通知を有効化', + 'settings.notifications.page.delivery.focusedAria': 'アプリ起動中も通知', + 'settings.notifications.page.delivery.focusedLabel': 'アプリ起動中も通知', + 'settings.notifications.page.delivery.testAction': 'テスト通知を送信', + 'settings.notifications.page.delivery.browserPermissionHint': '初回はブラウザが許可を求める場合があります。', + 'settings.notifications.page.delivery.permissionDenied': '通知の許可が拒否されました。ブラウザ設定で有効にしてください。', + 'settings.notifications.page.delivery.permissionGrantedButDisabled': '許可は付与されていますが、通知が無効になっています。', + 'settings.notifications.page.delivery.vscodeHint': '有効にすると、通知は VS Code のネイティブ通知を通じて配信されます。', + 'settings.notifications.page.events.title': '通知イベント', + 'settings.notifications.page.events.completionAria': 'Agent 完了', + 'settings.notifications.page.events.completionLabel': 'Agent 完了', + 'settings.notifications.page.events.subtaskAria': 'Subagent 完了', + 'settings.notifications.page.events.subtaskLabel': 'Subagent 完了', + 'settings.notifications.page.events.errorAria': 'Agent エラー', + 'settings.notifications.page.events.errorLabel': 'Agent エラー', + 'settings.notifications.page.events.questionAria': 'Agent 質問', + 'settings.notifications.page.events.questionLabel': 'Agent 質問', + 'settings.notifications.page.template.title': '通知 Template', + 'settings.notifications.page.template.variablesLabel': '変数:', + 'settings.notifications.page.template.event.completion': 'completion', + 'settings.notifications.page.template.event.subtask': 'Subagent 完了', + 'settings.notifications.page.template.event.error': 'error', + 'settings.notifications.page.template.event.question': 'question', + 'settings.notifications.page.template.field.title': 'タイトル', + 'settings.notifications.page.template.field.message': 'メッセージ', + 'settings.notifications.page.template.defaults.completion.title': '{agent_name} の準備ができました', + 'settings.notifications.page.template.defaults.completion.message': '{model_name} がタスクを完了しました', + 'settings.notifications.page.template.defaults.error.title': 'ツールエラー', + 'settings.notifications.page.template.defaults.error.message': '{last_message}', + 'settings.notifications.page.template.defaults.question.title': '入力が必要です', + 'settings.notifications.page.template.defaults.question.message': '{last_message}', + 'settings.notifications.page.template.defaults.subtask.title': '{agent_name} の準備ができました', + 'settings.notifications.page.template.defaults.subtask.message': '{model_name} がタスクを完了しました', + 'settings.notifications.page.summary.title': 'AI 要約', + 'settings.notifications.page.summary.toggleAria': '最後のメッセージを要約', + 'settings.notifications.page.summary.toggleLabel': '最後のメッセージを要約', + 'settings.notifications.page.summary.requiresTemplateVariable': '必要', + 'settings.notifications.page.summary.modelLabel': '要約モデル', + 'settings.notifications.page.summary.modelTooltip': '通知と音声要約に使用されます。', + 'settings.notifications.page.summary.notSelected': '選択されていません', + 'settings.notifications.page.summary.thresholdLabel': 'しきい値', + 'settings.notifications.page.summary.thresholdHint': 'これより長いメッセージは要約されます', + 'settings.notifications.page.summary.resetThresholdAria': 'しきい値をリセット', + 'settings.notifications.page.summary.lengthLabel': '長さ', + 'settings.notifications.page.summary.lengthHint': '要約の目標文字数', + 'settings.notifications.page.summary.resetLengthAria': '要約の長さをリセット', + 'settings.notifications.page.summary.maxLengthLabel': '最大長', + 'settings.notifications.page.summary.maxLengthHint': '{last_message} をこの長さに切り詰めます', + 'settings.notifications.page.summary.resetMaxLengthAria': 'メッセージ最大長をリセット', + 'settings.notifications.page.push.title': 'バックグラウンドプッシュ通知', + 'settings.notifications.page.push.enableAria': 'プッシュ通知を有効化', + 'settings.notifications.page.push.enableLabel': 'プッシュ通知を有効化', + 'settings.notifications.page.push.unsupportedHint': 'プッシュ非対応。Desktop Chrome/Edge と Android はプッシュをサポート。iOS にはインストール済み PWA が必要です。', + 'settings.notifications.page.push.supportedHint': 'OS のバックグラウンドサービス経由でアラートを受信', + 'settings.notifications.page.push.loadingAria': '読み込み中', + 'settings.notifications.page.toast.permissionDenied.title': '通知の許可が拒否されました', + 'settings.notifications.page.toast.permissionDenied.description': 'ブラウザ設定で通知を有効にしてください。', + 'settings.notifications.page.toast.permissionDenied.enableInBrowser': 'ブラウザ設定で通知を有効にしてください。', + 'settings.notifications.page.toast.requestPermissionFailed': '通知の許可リクエストに失敗しました', + 'settings.notifications.page.toast.notificationsApiUnavailable': 'Notifications API が利用できません', + 'settings.notifications.page.toast.testNotificationSent': 'テスト通知を送信しました', + 'settings.notifications.page.toast.testNotificationFailed': 'テスト通知の送信に失敗しました', + 'settings.notifications.page.toast.pushUnsupported': 'プッシュ通知はサポートされていません', + 'settings.notifications.page.toast.pushApiUnavailable': 'Push API が利用できません', + 'settings.notifications.page.toast.pushKeyLoadFailed': 'プッシュキーの読み込みに失敗しました', + 'settings.notifications.page.toast.enableBackgroundFailed': 'バックグラウンド通知の有効化に失敗しました', + 'settings.notifications.page.toast.backgroundEnabled': 'バックグラウンド通知を有効化しました', + 'settings.notifications.page.toast.backgroundDisabled': 'バックグラウンド通知を無効化しました', + 'settings.notifications.page.testNotification.title': 'テスト通知', + 'settings.notifications.page.testNotification.body': 'これは OpenChamber からのテスト通知です。', + 'settings.voice.page.section.voiceSetup': '音声設定', + 'settings.voice.page.section.speechRecognition': '音声認識', + 'settings.voice.page.section.playbackAndSummary': '再生', + 'settings.voice.page.field.enableVoiceModeAria': '音声モードを有効化', + 'settings.voice.page.field.enableVoiceMode': '音声モードを有効化', + 'settings.voice.page.field.provider': 'プロバイダー', + 'settings.voice.page.provider.browser': 'ブラウザ', + 'settings.voice.page.provider.custom': 'カスタム', + 'settings.voice.page.provider.say': 'Say', + 'settings.voice.page.provider.server': 'サーバー', + 'settings.voice.page.provider.wasm': 'ローカル', + 'settings.voice.page.stt.wasmModel': 'Whisper モデル', + 'settings.voice.page.stt.wasmLoaded': 'モデル読み込み完了', + 'settings.voice.page.stt.wasmDownloading': 'モデルをダウンロード中...', + 'settings.voice.page.stt.wasmLoading': 'モデルを読み込み中...', + 'settings.voice.page.stt.wasmNotLoaded': 'モデルは初回音声使用時に読み込まれます', + 'settings.voice.page.stt.wasmDownload': '読み込む', + 'settings.voice.page.stt.wasmRetry': '再試行', + 'settings.voice.page.tooltip.browser': '無料、オフライン、モバイルサポートは制限あり。', + 'settings.voice.page.tooltip.openai': '高品質、モバイル対応、API キーが必要。', + 'settings.voice.page.tooltip.custom': 'OpenAI 互換サーバー(例: Kokoro)。', + 'settings.voice.page.tooltip.say': 'macOS ネイティブ。高速、無料、オフライン。', + 'settings.voice.page.tooltip.sttBrowser': 'Web Speech API(Chrome/Edge)。無料、設定不要。', + 'settings.voice.page.tooltip.sttServer': 'OpenAI 互換 Whisper サーバー。高精度、多言語対応。', + 'settings.voice.page.field.apiKey': 'API キー', + 'settings.voice.page.field.apiKeyHintUsingConfig': '設定のキーを使用', + 'settings.voice.page.field.apiKeyHintRequired': 'OpenAI TTS には API キーが必要です', + 'settings.voice.page.field.apiKeyHintProvide': 'OpenAI キーを入力', + 'settings.voice.page.field.serverUrl': 'サーバー URL', + 'settings.voice.page.field.serverUrlHint': 'OpenAI 互換 TTS サーバーのベース URL', + 'settings.voice.page.field.model': 'モデル', + 'settings.voice.page.field.voice': '音声', + 'settings.voice.page.field.voiceIdentifierHint': 'サーバーがサポートする音声識別子', + 'settings.voice.page.field.configuredAbove': '上記で設定', + 'settings.voice.page.actions.preview': 'プレビュー', + 'settings.voice.page.field.selectVoicePlaceholder': '音声を選択', + 'settings.voice.page.field.auto': '自動', + 'settings.voice.page.field.speechRate': '話速', + 'settings.voice.page.field.speechPitch': '音程', + 'settings.voice.page.field.speechVolume': '音量', + 'settings.voice.page.field.language': '言語', + 'settings.voice.page.field.selectLanguagePlaceholder': '言語を選択', + 'settings.voice.page.field.sttBrowserSupportError': 'このブラウザでは MediaRecorder または AudioContext が利用できません。サーバー STT が動作しない可能性があります。', + 'settings.voice.page.field.sttServerUrlHint': 'Whisper 互換サーバーのベース URL', + 'settings.voice.page.field.sttLanguageHint': 'BCP-47 コード(例: en, fr)。自動検出の場合は空欄。', + 'settings.voice.page.field.silenceThreshold': '無音しきい値', + 'settings.voice.page.field.silenceHold': '無音保持', + 'settings.voice.page.field.transcribeOnStopAria': '録音停止時に書き起こし', + 'settings.voice.page.field.transcribeOnStop': '停止時に書き起こし', + 'settings.voice.page.field.millisecondsUnit': 'ms', + 'settings.voice.page.field.messageReadAloudButtonAria': 'メッセージ読み上げボタン', + 'settings.voice.page.field.messageReadAloudButton': 'メッセージ読み上げボタン', + 'settings.voice.page.field.summarizeBeforePlaybackAria': '再生前に要約', + 'settings.voice.page.field.summarizeBeforePlayback': '再生前に要約', + 'settings.voice.page.field.summarizeVoiceModeResponsesAria': '音声モードの応答を要約', + 'settings.voice.page.field.summarizeVoiceModeResponses': '音声モードの応答を要約', + 'settings.voice.page.field.summarizationThreshold': '要約しきい値', + 'settings.voice.page.field.summaryMaxLength': '要約最大長', + 'settings.voice.page.hint.shiftClickPrefix': '押す', + 'settings.voice.page.hint.shiftClickSuffix': 'でマイクボタンを連続モードに切替', + 'settings.voice.page.preview.browserVoiceFallback': 'ブラウザの音声', + 'settings.voice.page.preview.voiceLine': 'こんにちは!{voiceName} です。これが私の声です。', + 'settings.voice.page.preview.customServerLine': 'こんにちは!これはカスタム TTS サーバーのプレビューです。', + 'settings.voice.page.field.ttsInputMode': 'TTS 入力モード', + 'settings.voice.page.field.ttsInputModeSanitized': 'サニタイズ', + 'settings.voice.page.field.ttsInputModeRaw': '生 Markdown', + 'settings.openchamber.visual.section.colorMode': 'カラーモード', + 'settings.openchamber.visual.section.mobileLayout': 'モバイルレイアウト', + 'settings.openchamber.visual.option.mobileLayout.default': '旧', + 'settings.openchamber.visual.option.mobileLayout.new': '新', + 'settings.openchamber.visual.section.localization': 'ローカライゼーション', + 'settings.openchamber.visual.section.spacingAndLayout': '間隔とレイアウト', + 'settings.openchamber.visual.section.navigation': 'ナビゲーション', + 'settings.openchamber.visual.section.chatRenderMode': 'Chat 表示モード', + 'settings.openchamber.visual.section.chatRenderModeAria': 'Chat 表示モード', + 'settings.openchamber.visual.section.messageStreamTransport': 'メッセージストリーム転送', + 'settings.openchamber.visual.section.activityDefault': 'アクティビティデフォルト', + 'settings.openchamber.visual.section.activityDefaultAria': 'アクティビティデフォルトモード', + 'settings.openchamber.visual.section.showToolsOpenedByDefault': 'デフォルトで開くツールを表示:', + 'settings.openchamber.visual.section.userMessageRendering': 'ユーザーメッセージ表示', + 'settings.openchamber.visual.section.userMessageRenderingAria': 'ユーザーメッセージ表示モード', + 'settings.openchamber.visual.section.mermaidRendering': 'Mermaid 表示', + 'settings.openchamber.visual.section.mermaidRenderingAria': 'Mermaid 表示モード', + 'settings.openchamber.visual.section.diffLayout': 'Diff レイアウト', + 'settings.openchamber.visual.section.diffLayoutAria': 'Diff レイアウト', + 'settings.openchamber.visual.section.privacy': 'プライバシー', + 'settings.openchamber.visual.field.lightTheme': 'ライトテーマ', + 'settings.openchamber.visual.field.darkTheme': 'ダークテーマ', + 'settings.openchamber.visual.field.selectLightThemeAria': 'ライトテーマを選択', + 'settings.openchamber.visual.field.selectDarkThemeAria': 'ダークテーマを選択', + 'settings.openchamber.visual.field.selectThemePlaceholder': 'テーマを選択', + 'settings.openchamber.visual.field.timeFormat': '時刻形式', + 'settings.openchamber.visual.field.weekStartsOn': '週の開始日', + 'settings.openchamber.visual.field.selectTimeFormatAria': '時刻形式を選択', + 'settings.openchamber.visual.field.selectWeekStartAria': '週の開始日を選択', + 'settings.openchamber.visual.actions.reloadThemes': 'テーマを再読み込み', + 'settings.openchamber.visual.actions.reloadingThemes': 'テーマを再読み込み中...', + 'settings.openchamber.visual.field.macVibrancy': 'ウィンドウ透過', + 'settings.openchamber.visual.field.macVibrancyHint': 'サイドバーの背後に macOS ネイティブのぼかし(Vibrancy)を使用します。完全に不透明なサーフェスにする場合はオフにします。', + 'settings.openchamber.visual.actions.saveAndRestart': '保存して再起動', + 'settings.openchamber.visual.actions.restarting': '再起動中...', + 'settings.openchamber.visual.field.themeImportInfoAria': 'テーマインポート情報', + 'settings.openchamber.visual.field.themeImportInfoTooltip': '~/.config/openchamber/themes/ からカスタムテーマをインポート', + 'settings.openchamber.visual.field.installAppName': 'インストールアプリ名', + 'settings.openchamber.visual.field.installAppNameHint': 'PWA インストールプロセスで使用されます。', + 'settings.openchamber.visual.field.pwaInstallAppNameAria': 'PWA インストールアプリ名', + 'settings.openchamber.visual.actions.resetInstallAppNameAria': 'インストールアプリ名をリセット', + 'settings.openchamber.visual.field.installOrientation': 'インストール方向', + 'settings.openchamber.visual.field.installOrientationHint': 'インストールされたウェブアプリで使用されます。変更後は PWA を再インストールしてください。', + 'settings.openchamber.visual.field.pwaInstallOrientationAria': 'PWA インストール方向', + 'settings.openchamber.visual.field.selectOrientationPlaceholder': '方向を選択', + 'settings.openchamber.visual.actions.resetInstallOrientationAria': 'インストール方向をリセット', + 'settings.openchamber.visual.field.mobileKeyboardMode': 'モバイルキーボード動作', + 'settings.openchamber.visual.field.mobileKeyboardModeHint': 'デフォルトのブラウザ動作が最も安全です。コンテンツリサイズは、対応ブラウザに画面キーボード表示時にアプリを縮小するよう要求します。', + 'settings.openchamber.visual.field.mobileKeyboardModeAria': 'モバイルキーボード動作', + 'settings.openchamber.visual.field.selectMobileKeyboardModePlaceholder': 'キーボード動作を選択', + 'settings.openchamber.visual.actions.resetMobileKeyboardModeAria': 'モバイルキーボード動作をリセット', + 'settings.openchamber.visual.field.interfaceFontSize': 'インターフェースフォントサイズ', + 'settings.openchamber.visual.field.interfaceFont': 'インターフェースフォント', + 'settings.openchamber.visual.field.selectInterfaceFontAria': 'インターフェースフォントを選択', + 'settings.openchamber.visual.actions.resetInterfaceFontAria': 'インターフェースフォントをリセット', + 'settings.openchamber.visual.field.fontSizePercentageAria': 'フォントサイズの割合', + 'settings.openchamber.visual.actions.resetFontSizeAria': 'フォントサイズをリセット', + 'settings.openchamber.visual.field.terminalFontSize': 'ターミナルフォントサイズ', + 'settings.openchamber.visual.field.codeFont': 'コードフォント', + 'settings.openchamber.visual.field.selectCodeFontAria': 'コードフォントを選択', + 'settings.openchamber.visual.actions.resetCodeFontAria': 'コードフォントをリセット', + 'settings.openchamber.visual.actions.resetTerminalFontSizeAria': 'ターミナルフォントサイズをリセット', + 'settings.openchamber.visual.field.spacingDensity': '間隔の密度', + 'settings.openchamber.visual.actions.resetSpacingAria': '間隔をリセット', + 'settings.openchamber.visual.field.inputBarOffset': '入力バーオフセット', + 'settings.openchamber.visual.field.inputBarOffsetTooltip': 'ホームバーなどの OS レベルの画面障害物を避けるため入力バーを上げます。', + 'settings.openchamber.visual.actions.resetInputBarOffsetAria': '入力バーオフセットをリセット', + 'settings.openchamber.visual.field.terminalQuickKeysAria': 'ターミナルクイックキー', + 'settings.openchamber.visual.field.terminalQuickKeys': 'ターミナルクイックキー', + 'settings.openchamber.visual.field.terminalQuickKeysTooltip': 'ターミナルビューに Esc、Ctrl、矢印を表示', + 'settings.openchamber.visual.field.fileEditorKeymap': 'ファイルエディターキーマップ', + 'settings.openchamber.visual.option.fileEditorKeymap.default': 'デフォルト', + 'settings.openchamber.visual.option.fileEditorKeymap.vim': 'Vim', + 'settings.openchamber.visual.field.activityDefaultModeAria': 'アクティビティデフォルトモード: {option}', + 'settings.openchamber.visual.field.showExpandedBashToolsAria': '展開された Bash ツールを表示', + 'settings.openchamber.visual.field.showExpandedEditToolsAria': '展開された編集ツールを表示', + 'settings.openchamber.visual.field.bash': 'Bash', + 'settings.openchamber.visual.field.editTools': '編集ツール', + 'settings.openchamber.visual.field.userMessageRenderingAria': 'ユーザーメッセージ表示: {option}', + 'settings.openchamber.visual.field.mermaidRenderingAria': 'Mermaid 表示: {option}', + 'settings.openchamber.visual.field.diffLayoutAria': 'Diff レイアウト: {option}', + 'settings.openchamber.visual.field.showReasoningTracesAria': '推論トレースを表示', + 'settings.openchamber.visual.field.showReasoningTraces': '推論トレースを表示', + 'settings.openchamber.visual.field.collapsibleThinkingBlocksAria': '折りたたみ可能な推論ブロックを有効化', + 'settings.openchamber.visual.field.collapsibleThinkingBlocks': '折りたたみ可能な推論ブロックを有効化', + 'settings.openchamber.visual.field.collapsibleUserMessagesAria': '長いユーザーメッセージを折りたたむ', + 'settings.openchamber.visual.field.collapsibleUserMessages': '長いユーザーメッセージを折りたたむ', + 'settings.openchamber.visual.field.stickyUserHeaderAria': 'ユーザーヘッダー固定', + 'settings.openchamber.visual.field.stickyUserHeader': 'ユーザーヘッダー固定', + 'settings.openchamber.visual.field.expandedEditorToolbarAria': 'エディターツールバーを常に表示', + 'settings.openchamber.visual.field.expandedEditorToolbar': 'エディターツールバーを常に表示(ファイルタブの下にドッキング)', + 'settings.openchamber.visual.field.wideChatLayoutAria': 'ワイドチャットレイアウト', + 'settings.openchamber.visual.field.wideChatLayout': 'ワイドチャットレイアウト', + 'settings.openchamber.visual.field.showSplitAssistantMessageActionsAria': 'インラインアシスタントアクション', + 'settings.openchamber.visual.field.showSplitAssistantMessageActions': 'インラインアシスタントアクション', + 'settings.openchamber.visual.field.showSplitAssistantMessageActionsTooltip': '同じ応答内の後のツール呼び出しの前に表示されるアシスタントテキストブロックに、回答コピー、画像保存、読み上げを表示します。', + 'settings.openchamber.visual.field.showToolFileIconsAria': 'ツールファイルアイコンを表示', + 'settings.openchamber.visual.field.showToolFileIcons': 'ツールファイルアイコンを表示', + 'settings.openchamber.visual.field.showTurnChangedFilesAria': '完了したターンの変更ファイルを表示', + 'settings.openchamber.visual.field.showTurnChangedFiles': '完了したターンの変更ファイルを表示', + 'settings.openchamber.visual.field.showDotfilesAria': 'ドットファイルを表示', + 'settings.openchamber.visual.field.showDotfiles': 'ドットファイルを表示', + 'settings.openchamber.visual.field.queueMessagesByDefaultAria': 'デフォルトでメッセージをキューイング', + 'settings.openchamber.visual.field.queueMessagesByDefault': 'デフォルトでメッセージをキューイング', + 'settings.openchamber.visual.field.queueMessagesByDefaultTooltip': '有効にすると Enter でメッセージをキューイングします。{modifier}+Enter で送信します。', + 'settings.openchamber.visual.field.persistDraftMessagesAria': '下書きメッセージを保持', + 'settings.openchamber.visual.field.persistDraftMessages': '下書きメッセージを保持', + 'settings.openchamber.visual.field.enableSpellcheckInTextInputsAria': 'テキスト入力のスペルチェックを有効化', + 'settings.openchamber.visual.field.enableSpellcheckInTextInputs': 'テキスト入力のスペルチェックを有効化', + 'settings.openchamber.visual.field.sendAnonymousUsageReportsAria': '匿名使用状況レポートを送信', + 'settings.openchamber.visual.field.sendAnonymousUsageReports': '匿名使用状況レポートを送信', + 'settings.openchamber.visual.field.sendAnonymousUsageReportsHint': 'どのアプリバージョンがアクティブに使用されているかを把握し、改善の優先順位を決めるのに役立ちます。収集されるのはアプリバージョン、プラットフォーム、ランタイムのみで、個人データやコードは収集されません。', + 'settings.openchamber.visual.option.themeMode.system': 'システム', + 'settings.openchamber.visual.option.themeMode.light': 'ライト', + 'settings.openchamber.visual.option.themeMode.dark': 'ダーク', + 'settings.openchamber.visual.option.diffLayout.dynamic.label': '動的', + 'settings.openchamber.visual.option.diffLayout.dynamic.description': '新規はインライン、変更は並列表示。', + 'settings.openchamber.visual.option.diffLayout.inline.label': '常にインライン', + 'settings.openchamber.visual.option.diffLayout.inline.description': '単一の統合ビューとして表示。', + 'settings.openchamber.visual.option.diffLayout.sideBySide.label': '常に並列', + 'settings.openchamber.visual.option.diffLayout.sideBySide.description': '元のファイルと変更後のファイルを比較。', + 'settings.openchamber.visual.option.mermaidRendering.svg.label': 'SVG', + 'settings.openchamber.visual.option.mermaidRendering.svg.description': '図をスケーラブルグラフィックとして表示。', + 'settings.openchamber.visual.option.mermaidRendering.ascii.label': 'ASCII', + 'settings.openchamber.visual.option.mermaidRendering.ascii.description': '図をテキストブロックとして表示。', + 'settings.openchamber.visual.option.pwaOrientation.system.label': 'システムに従う', + 'settings.openchamber.visual.option.pwaOrientation.system.description': 'デバイスの回転設定に従います。', + 'settings.openchamber.visual.option.pwaOrientation.portrait.label': '縦向き固定', + 'settings.openchamber.visual.option.pwaOrientation.portrait.description': 'アプリを縦向き固定でインストール。', + 'settings.openchamber.visual.option.pwaOrientation.landscape.label': '横向き固定', + 'settings.openchamber.visual.option.pwaOrientation.landscape.description': 'アプリを横向き固定でインストール。', + 'settings.openchamber.visual.option.mobileKeyboardMode.native.label': 'ブラウザに従う', + 'settings.openchamber.visual.option.mobileKeyboardMode.native.description': 'キーボード表示時のパンとビューポート変更にブラウザデフォルトを使用。', + 'settings.openchamber.visual.option.mobileKeyboardMode.resizeContent.label': 'コンテンツをリサイズ', + 'settings.openchamber.visual.option.mobileKeyboardMode.resizeContent.description': 'パンのみに依存せず、対応ブラウザにアプリレイアウトを縮小するよう要求。', + 'settings.openchamber.visual.option.userMessageRendering.markdown.label': 'Markdown', + 'settings.openchamber.visual.option.userMessageRendering.markdown.description': 'ユーザーテキストを Markdown 書式で表示。', + 'settings.openchamber.visual.option.userMessageRendering.plain.label': 'プレインテキスト', + 'settings.openchamber.visual.option.userMessageRendering.plain.description': 'ユーザーテキストを空白とリンクを保持して表示。', + 'chat.message.userText.collapseAria': 'ユーザーメッセージを折りたたむ', + 'settings.openchamber.visual.option.chatRenderMode.sorted.label': 'ソート', + 'settings.openchamber.visual.option.chatRenderMode.sorted.description': '完了したアシスタントメッセージをライブストリーミングなしで表示。', + 'settings.openchamber.visual.option.chatRenderMode.live.label': 'ライブ', + 'settings.openchamber.visual.option.chatRenderMode.live.description': 'アシスタントのテキストとツールを到着次第ストリーミング。', + 'settings.openchamber.visual.option.messageTransport.auto.label': '自動', + 'settings.openchamber.visual.option.messageTransport.auto.description': 'WebSocket を優先し、必要に応じて SSE にフォールバック。', + 'settings.openchamber.visual.option.messageTransport.ws.label': 'WebSocket', + 'settings.openchamber.visual.option.messageTransport.ws.description': 'メッセージストリーミングに WebSocket を使用。', + 'settings.openchamber.visual.option.messageTransport.sse.label': 'SSE', + 'settings.openchamber.visual.option.messageTransport.sse.description': 'メッセージストリーミングに SSE を使用。', + 'settings.openchamber.visual.option.activityRenderMode.collapsed.label': '折りたたみ', + 'settings.openchamber.visual.option.activityRenderMode.collapsed.description': 'アクティビティをデフォルトで折りたたみ。', + 'settings.openchamber.visual.option.activityRenderMode.summary.label': '展開', + 'settings.openchamber.visual.option.activityRenderMode.summary.description': 'アクティビティをデフォルトで展開。', + 'settings.openchamber.visual.option.timeFormat.auto.label': '自動', + 'settings.openchamber.visual.option.timeFormat.auto.description': 'システムロケール設定に従います。', + 'settings.openchamber.visual.option.timeFormat.24h.label': '24時間', + 'settings.openchamber.visual.option.timeFormat.24h.description': '時刻を 14:15 と表示。', + 'settings.openchamber.visual.option.timeFormat.12h.label': '12時間', + 'settings.openchamber.visual.option.timeFormat.12h.description': '時刻を 02:15 PM と表示。', + 'settings.openchamber.visual.option.weekStart.auto.label': '自動', + 'settings.openchamber.visual.option.weekStart.auto.description': 'ロケールの週開始日に従います。', + 'settings.openchamber.visual.option.weekStart.monday.label': '月曜日', + 'settings.openchamber.visual.option.weekStart.sunday.label': '日曜日', + 'settings.magicPrompts.page.loading.aria': '読み込み中', + 'settings.magicPrompts.page.loading.text': 'Magic Prompts を読み込み中...', + 'settings.magicPrompts.page.block.visiblePrompt': '表示プロンプト', + 'settings.magicPrompts.page.block.instructions': '指示', + 'settings.magicPrompts.page.group.gitCommitGenerate.title': 'Commit 生成', + 'settings.magicPrompts.page.group.gitCommitGenerate.description': 'Commit メッセージ生成に使用するプロンプト: 表示ユーザーメッセージ + 非表示指示。', + 'settings.magicPrompts.page.group.gitPrGenerate.title': 'PR 生成', + 'settings.magicPrompts.page.group.gitPrGenerate.description': 'PR タイトル/本文生成に使用するプロンプト: 表示ユーザーメッセージ + 非表示指示。', + 'settings.magicPrompts.page.group.githubPrReview.title': 'PR レビュー', + 'settings.magicPrompts.page.group.githubPrReview.description': 'PR レビューフローに使用するプロンプト: 表示ユーザーメッセージ + 非表示指示ペイロード。', + 'settings.magicPrompts.page.group.githubIssueReview.title': 'Issue レビュー', + 'settings.magicPrompts.page.group.githubIssueReview.description': 'Issue レビューフローに使用するプロンプト: 表示ユーザーメッセージ + 非表示指示ペイロード。', + 'settings.magicPrompts.page.group.githubPrFailedChecksReview.title': 'PR 失敗チェックレビュー', + 'settings.magicPrompts.page.group.githubPrFailedChecksReview.description': 'PR 失敗チェック分析に使用するプロンプト。', + 'settings.magicPrompts.page.group.githubPrCommentsReview.title': 'PR コメントレビュー', + 'settings.magicPrompts.page.group.githubPrCommentsReview.description': 'PR コメント分析に使用するプロンプト。', + 'settings.magicPrompts.page.group.githubSinglePrCommentReview.title': '単一 PR コメントレビュー', + 'settings.magicPrompts.page.group.githubSinglePrCommentReview.description': '単一 PR コメント分析に使用するプロンプト。', + 'settings.magicPrompts.page.group.gitConflictResolve.title': 'Merge/Rebase 競合解決', + 'settings.magicPrompts.page.group.gitConflictResolve.description': 'AI で Merge/Rebase 競合を解決する際に使用するプロンプト。', + 'settings.magicPrompts.page.group.gitCherrypickConflictResolve.title': 'Cherry-pick 競合解決', + 'settings.magicPrompts.page.group.gitCherrypickConflictResolve.description': '統合フローで Cherry-pick 競合を解決する際に使用するプロンプト。', + 'settings.magicPrompts.page.group.planImprove.title': '計画の改善', + 'settings.magicPrompts.page.group.planImprove.description': '保存された計画を改善フローに送る際に使用する非表示プロンプト。', + 'settings.magicPrompts.page.group.planTodo.title': 'Todo 計画', + 'settings.magicPrompts.page.group.planTodo.description': 'Todo を新しい計画 Session に送る際に使用する非表示プロンプト。', + 'settings.magicPrompts.page.group.planImplement.title': '計画の実装', + 'settings.magicPrompts.page.group.planImplement.description': '保存された計画を実装フローに送る際に使用する非表示プロンプト。', + 'settings.magicPrompts.page.group.sessionSummary.title': 'Session サマリー', + 'settings.magicPrompts.page.group.sessionSummary.description': '/summary スラッシュコマンドで使用するプロンプト: 表示ユーザーメッセージ + 非表示指示。非破壊的 - Session 履歴を圧縮しません。', + 'settings.magicPrompts.page.group.sessionWorkspaceReview.title': 'Workspace レビュー', + 'settings.magicPrompts.page.group.sessionExplore.title': 'コードベースツアー', + 'settings.magicPrompts.page.group.sessionExplore.description': '/explore スラッシュコマンドで使用するプロンプト: 表示ユーザーメッセージ + 非表示指示。ファイルごとのダンプではなく、リポジトリを調査し、全体像、主要モジュール、それらの接続方法、開始場所を構造化された形で提供します。', + 'settings.magicPrompts.page.group.sessionWorkspaceReview.description': '/workspace-review スラッシュコマンドで使用するプロンプト: 表示ユーザーメッセージ + 非表示指示。Workspace の Diff が意図を達成しているか、正確で適切かをレビューし、重大度ごとに所見を分類します。', + 'settings.magicPrompts.page.group.sessionFeaturePlan.title': '機能計画', + 'settings.magicPrompts.page.group.sessionFeaturePlan.description': '/plan-feature スラッシュコマンドで使用するプロンプト: 表示ユーザーメッセージ + 非表示指示。コードを調査し、実装計画を作成する前に少人数のバッチで明確化の質問を行うガイド付き対話を実行します。', + 'settings.magicPrompts.page.group.sessionCatchUp.title': 'キャッチアップ', + 'settings.magicPrompts.page.group.sessionCatchUp.description': '/catch-up スラッシュコマンドで使用するプロンプト: 表示ユーザーメッセージ + 非表示指示。ブランチの Commit、PR、未コミットの作業をまとめてブランチ認識コンテキストを構築し、何をしていたかを理解した上で、わかりやすいサマリーとプロダクトに焦点を当てた次のステップを提供します。', + 'settings.magicPrompts.page.group.sessionDebug.title': 'デバッグ', + 'settings.magicPrompts.page.group.sessionDebug.description': '/debug スラッシュコマンドで使用するプロンプト: 表示ユーザーメッセージ + 非表示指示。症状を捉え、仮説を立て、コードで検証し、修正を提案する前に原因を確認するガイド付き根本原因調査を実行します。', + 'settings.magicPrompts.page.group.sessionWeigh.title': '選択肢の比較', + 'settings.magicPrompts.page.group.sessionWeigh.description': '/weigh スラッシュコマンドで使用するプロンプト: 表示ユーザーメッセージ + 非表示指示。コードを調査し、計画やコードを書かずに2〜3の異なるアプローチとトレードオフ、推奨事項を提示します。', + 'settings.magicPrompts.page.group.sessionFusion.title': '統合', + 'settings.magicPrompts.page.group.sessionFusion.description': 'マルチランの出力を1つの最終回答に結合する際に使用するプロンプト: ソース結果の前に表示ユーザーメッセージ + 非表示指示。', + 'settings.magicPrompts.page.actions.resetting': 'リセット中...', + 'settings.magicPrompts.page.actions.resetAllOverrides': 'すべての上書きをリセット', + 'settings.magicPrompts.page.actions.resetToDefault': 'デフォルトにリセット', + 'settings.magicPrompts.page.actions.save': '保存', + 'settings.magicPrompts.page.placeholdersLabel': 'プレースホルダー:', + 'settings.magicPrompts.page.validation.visiblePromptRequired': '表示プロンプトは空にできません。', + 'settings.magicPrompts.page.status.unsavedChanges': '未保存の変更', + 'settings.magicPrompts.page.status.usingSavedOverride': '保存済みの上書きを使用', + 'settings.magicPrompts.page.status.usingBuiltinDefault': 'ビルトインデフォルトを使用', + 'settings.magicPrompts.page.toast.loadFailed': 'Magic Prompts の読み込みに失敗しました', + 'settings.magicPrompts.page.toast.visiblePromptRequired': '表示プロンプトは空にできません', + 'settings.magicPrompts.page.toast.saved': 'Magic Prompt を保存しました', + 'settings.magicPrompts.page.toast.saveFailed': 'Magic Prompt の保存に失敗しました', + 'settings.magicPrompts.page.toast.resetSuccess': 'プロンプトをデフォルトにリセットしました', + 'settings.magicPrompts.page.toast.resetFailed': 'プロンプトのリセットに失敗しました', + 'settings.magicPrompts.page.toast.resetAllSuccess': 'すべてのプロンプト上書きをリセットしました', + 'settings.magicPrompts.page.toast.resetAllFailed': 'すべてのプロンプトのリセットに失敗しました', +} as const; diff --git a/packages/ui/src/lib/i18n/messages/ja.ts b/packages/ui/src/lib/i18n/messages/ja.ts new file mode 100644 index 00000000..97e58f37 --- /dev/null +++ b/packages/ui/src/lib/i18n/messages/ja.ts @@ -0,0 +1,2639 @@ +import type { I18nKey } from './en'; +import { settingsDict } from './ja.settings'; + +export const dict: Record = { + ...settingsDict, + 'common.loading': '読み込み中...', + 'common.unavailable': '利用できません', + 'common.language.english': '英語', + 'common.language.french': 'フランス語', + 'common.language.simplifiedChinese': '中国語(簡体字)', + 'common.language.traditionalChinese': '中国語(繁体字)', + 'common.language.ukrainian': 'ウクライナ語', + 'common.language.spanish': 'スペイン語', + 'common.language.brazilianPortuguese': 'ブラジルポルトガル語', + 'common.language.korean': '韓国語', + 'common.language.polish': 'ポーランド語', + 'common.language.japanese': '日本語', + 'common.revealPath.finder': 'Finderで表示', + 'common.revealPath.fileExplorer': 'エクスプローラーで開く', + 'common.revealPath.fileManager': 'ファイルマネージャーで開く', + 'pwa.installPrompt.description': 'OpenChamberをインストールしてすぐにアクセス', + 'pwa.installPrompt.action': 'インストール', + 'pwa.installPrompt.dismiss': '閉じる', + 'pwa.installPrompt.started': 'インストールを開始しました', + 'pwa.installPrompt.installed': 'OpenChamberをインストールしました', + 'layout.mainTab.chat': 'チャット', + 'layout.mainTab.plan': '計画', + 'layout.mainTab.diff': '差分', + 'layout.mainTab.diagram': 'ダイアグラム', + 'layout.mainTab.files': 'ファイル', + 'layout.mainTab.terminal': 'ターミナル', + 'layout.mainTab.context': 'コンテキスト', + 'mobile.nav.aria': 'モバイルナビゲーション', + 'mobile.nav.changes': '変更', + 'mobile.nav.settings': '設定', + 'mobile.surface.closeAria': '閉じる', + 'mobile.header.openMenuAria': 'メニューを開く', + 'mobile.header.openMetadataAria': 'セッションメタデータを開く', + 'mobile.header.metadata.context': 'コンテキスト', + 'mobile.header.metadata.branch': 'ブランチ', + 'mobile.header.metadata.usage': '使用量', + 'mobile.menu.titleAria': 'ワークスペースツール', + 'mobile.menu.files': 'ファイル', + 'mobile.menu.changes': '変更', + 'mobile.menu.mcp': 'MCP', + 'mobile.menu.update': '更新', + 'mobile.menu.settings': '設定', + 'mobile.sessions.newChatCta': '{project}で新しいチャット', + 'mobile.sessions.dateGroup.today': '今日', + 'mobile.sessions.dateGroup.yesterday': '昨日', + 'mobile.sessions.dateGroup.thisWeek': '今週', + 'mobile.sessions.dateGroup.older': '以前', + 'mobile.sessions.section.worktrees': 'ワークツリー', + 'mobile.sessions.section.otherProjects': 'プロジェクトを切り替え', + 'mobile.sessions.section.projects': 'プロジェクト', + 'mobile.sessions.empty.noProjectsTitle': 'まだプロジェクトがありません', + 'mobile.sessions.empty.noProjectsDescription': 'プロジェクトを追加してコードとチャットを始めましょう。', + 'mobile.sessions.empty.noSessionsTitle': 'まだセッションがありません', + 'mobile.sessions.empty.noSessionsDescription': '最初のチャットを開始してここに表示しましょう。', + 'mobile.sessions.empty.searchTitle': '一致しません', + 'mobile.sessions.empty.searchDescription': '別の検索語をお試しください。', + 'mobile.sessions.showArchived': 'アーカイブを表示({count})', + 'mobile.sessions.hideArchived': 'アーカイブを非表示', + 'mobile.sessions.activeWorktreeAria': 'アクティブなワークツリー', + 'mobile.sessions.activeProjectAria': 'アクティブなプロジェクト', + 'mobile.sessions.startNewChat': '新しいチャットを開始', + 'mobile.sessions.newChat': '新しいチャット', + 'mobile.sessions.editOrder': 'プロジェクトの並び替え', + 'mobile.sessions.doneEditing': '完了', + 'mobile.sessions.editOrderHint': 'ハンドルをドラッグしてプロジェクトを並び替えます。チェックをタップして完了します。', + 'mobile.sessions.editProjectAria': '{label}を編集', + 'mobile.sessions.dragHandleAria': '{label}をドラッグして並び替え', + 'mobile.sessions.moveUpAria': '{label}を上に移動', + 'mobile.sessions.moveDownAria': '{label}を下に移動', + 'mobile.sessions.removeProjectAria': '{label}を削除', + 'mobile.sessions.cancelRemoveProjectAria': '{label}の削除をキャンセル', + 'mobile.sessions.confirmRemoveProject': '閉じる', + 'mobile.sessions.confirmRemoveProjectAria': '{label}の削除を確認', + 'mobile.sessions.toast.projectRemoved': '{label}を削除しました', + 'mobile.sessions.archiveSessionAria': '{title}をアーカイブ', + 'mobile.sessions.cancelArchiveAria': '{title}のアーカイブをキャンセル', + 'mobile.projectEdit.worktreesTitle': 'ワークツリー', + 'mobile.projectEdit.worktreesEmpty': 'このプロジェクトにはまだワークツリーがありません。', + 'mobile.projectEdit.reorderHint': 'ドラッグしてワークツリーを並び替え。', + 'mobile.projectEdit.dragWorktreeAria': '{label}をドラッグして並び替え', + 'mobile.projectEdit.deleteWorktreeAria': 'ワークツリー{label}を削除', + 'mobile.projectEdit.deleteWorktreeTitle': 'ワークツリーを削除', + 'mobile.projectEdit.deleteWorktreeConfirmButton': '削除', + 'mobile.projectEdit.deleteWorktreeConfirm': 'ワークツリー「{name}」を削除しますか?この操作は元に戻せません。', + 'mobile.projectEdit.deleteWorktreeDirty': 'このワークツリーには失われる未コミットの変更があります。', + 'mobile.projectEdit.deleteWorktreeArchiveNote': '{count}件の添付セッションがアーカイブされます。', + 'mobile.projectEdit.deleteLocalBranch': 'ローカルブランチも削除', + 'mobile.projectEdit.deleteRemoteBranch': 'リモートブランチも削除', + 'mobile.sessions.showMore': 'さらに{count}件表示', + 'mobile.sessions.search.section.sessions': 'セッション', + 'mobile.sessions.search.section.archived': 'アーカイブ済み', + 'mobile.sessions.search.section.projects': 'プロジェクト', + 'mobile.sessions.clearSearchAria': '検索をクリア', + 'mobile.header.noProject': 'プロジェクトを選択', + 'mobile.header.activeSession': 'アクティブなセッション', + 'mobile.header.noSession': 'アクティブなセッションがありません', + 'mobile.sessions.openSheetAria': 'セッションとプロジェクトを開く', + 'mobile.sessions.closeSheetAria': 'セッションとプロジェクトを閉じる', + 'mobile.sessions.sheet.title': 'セッション', + 'mobile.sessions.sheet.description': 'プロジェクトの切り替え、セッションの開始、新しいチャットを始められます。', + 'mobile.sessions.search.placeholder': 'セッションを検索', + 'mobile.sessions.empty': 'セッションが見つかりません。', + 'mobile.sessions.unassignedProject': 'その他のセッション', + 'mobile.sessions.newSessionAria': 'このプロジェクトで新しいセッションを開始', + 'mobile.sessions.untitled': '無題のセッション', + 'mobile.sessions.project.sessionsSingle': '1セッション', + 'mobile.sessions.project.sessionsPlural': '{count}セッション', + 'mobile.files.refreshAria': 'ファイルを更新', + 'mobile.files.backToParentAria': '{name}に戻る', + 'mobile.files.rootDirectory': 'プロジェクトファイル', + 'mobile.files.search.placeholder': 'ファイルを検索', + 'mobile.files.search.empty': 'ファイルが見つかりません。', + 'mobile.files.parentDirectory': '親ディレクトリ', + 'mobile.files.empty.noDirectory': 'プロジェクトを選択してファイルを参照します。', + 'mobile.files.empty.directory': 'このディレクトリは空です。', + 'mobile.files.error.listFailed': 'ファイルの読み込みに失敗しました', + 'mobile.files.error.readUnavailable': 'このランタイムではファイルプレビューは利用できません。', + 'mobile.files.file.truncated': 'モバイル向けにファイルプレビューを切り詰めています。', + 'mobile.files.copyPathAria': 'ファイルパスをコピー', + 'mobile.files.copyContent': '内容をコピー', + 'mobile.files.copyContentAria': 'ファイル内容をコピー', + 'mobile.files.toast.pathCopied': 'パスをコピーしました', + 'mobile.files.toast.contentCopied': '内容をコピーしました', + 'mobile.files.toast.copyFailed': 'コピーに失敗しました', + 'mobile.changes.placeholder.title': '変更', + 'mobile.changes.placeholder.description': 'ワーキングツリーの確認、同期、コミット操作はここに表示されます。', + 'mobile.changes.branchLabel': 'ブランチ: {branch}', + 'mobile.changes.noRemote': 'リモートが利用できません', + 'mobile.changes.cleanDescription': 'このワークスペースに変更されたファイルはありません。', + 'mobile.changes.diffDetail.subtitle': '読み取り専用の差分', + 'mobile.changes.diffDetail.loadFailed': '差分の読み込みに失敗しました', + 'mobile.changes.diffDetail.missingTitle': 'ファイルは変更されていません', + 'mobile.changes.diffDetail.missingDescription': '変更画面に戻ってリストを更新してください。', + 'mobile.changes.diffDetail.imageUnavailable': 'モバイルの変更画面では画像差分はまだ利用できません。', + 'mobile.settings.placeholder.title': '設定', + 'mobile.settings.placeholder.description': 'モバイル接続とアプリの設定はここに表示されます。', + 'layout.rightSidebar.git': 'Git', + 'layout.rightSidebar.files': 'ファイル', + 'layout.rightSidebar.context': 'コンテキスト', + 'layout.services.instance': 'インスタンス', + 'layout.services.usage': '使用量', + 'sessions.sidebar.header.actions.closeSessions': 'セッションを閉じる', + 'sessions.sidebar.header.actions.addProject': 'プロジェクトを追加', + 'sessions.sidebar.header.actions.newSession': '新しいセッション', + 'sessions.sidebar.header.actions.newMultiRun': '新規マルチラン', + 'sessions.sidebar.header.actions.scheduledTasks': 'スケジュールタスク', + 'sessions.scheduledTasks.dialog.title': 'スケジュールタスク', + 'sessions.scheduledTasks.dialog.description': '新しいセッションを作成し設定済みプロンプトを送信するサーバーサイドタスク。', + 'sessions.scheduledTasks.dialog.project.label': 'プロジェクト', + 'sessions.scheduledTasks.dialog.project.placeholder': 'プロジェクトを選択', + 'sessions.scheduledTasks.dialog.project.empty': 'プロジェクトがありません', + 'sessions.scheduledTasks.dialog.actions.newTask': '新しいタスク', + 'sessions.scheduledTasks.dialog.actions.runNow': '今すぐ実行', + 'sessions.scheduledTasks.dialog.actions.edit': '編集', + 'sessions.scheduledTasks.dialog.actions.editAria': '{taskName}を編集', + 'sessions.scheduledTasks.dialog.actions.deleteAria': '{taskName}を削除', + 'sessions.scheduledTasks.dialog.loading': 'タスクを読み込み中...', + 'sessions.scheduledTasks.dialog.empty.noTasks': 'まだスケジュールタスクがありません。', + 'sessions.scheduledTasks.dialog.empty.selectProject': 'プロジェクトを選択してスケジュールタスクを管理します。', + 'sessions.scheduledTasks.dialog.error.chooseProjectFirst': '先にプロジェクトを選択してください', + 'sessions.scheduledTasks.dialog.toast.loadFailed': 'スケジュールタスクの読み込みに失敗しました', + 'sessions.scheduledTasks.dialog.toast.saved': 'スケジュールタスクを保存しました', + 'sessions.scheduledTasks.dialog.toast.updateFailed': 'タスクの更新に失敗しました', + 'sessions.scheduledTasks.dialog.toast.deleted': 'スケジュールタスクを削除しました', + 'sessions.scheduledTasks.dialog.toast.deleteFailed': 'タスクの削除に失敗しました', + 'sessions.scheduledTasks.dialog.toast.started': 'タスクを開始しました', + 'sessions.scheduledTasks.dialog.toast.runFailed': 'タスクの実行に失敗しました', + 'sessions.scheduledTasks.dialog.confirm.deleteTask': 'スケジュールタスク「{taskName}」を削除しますか?', + 'sessions.scheduledTasks.dialog.schedule.daily': '毎日 {time}', + 'sessions.scheduledTasks.dialog.schedule.dailyWithTimezone': '毎日 {time}({timezone})', + 'sessions.scheduledTasks.dialog.schedule.weekly': '毎週 {days} {time}', + 'sessions.scheduledTasks.dialog.schedule.weeklyWithTimezone': '毎週 {days} {time}({timezone})', + 'sessions.scheduledTasks.dialog.schedule.once': '1回限り {date} {time}', + 'sessions.scheduledTasks.dialog.schedule.onceWithTimezone': '1回限り {date} {time}({timezone})', + 'sessions.scheduledTasks.dialog.schedule.cron': 'Cron: {cron}', + 'sessions.scheduledTasks.dialog.schedule.cronWithTimezone': 'Cron: {cron}({timezone})', + 'sessions.scheduledTasks.dialog.schedule.unknownDate': '不明な日付', + 'sessions.scheduledTasks.dialog.schedule.weekdayShort.sun': '日', + 'sessions.scheduledTasks.dialog.schedule.weekdayShort.mon': '月', + 'sessions.scheduledTasks.dialog.schedule.weekdayShort.tue': '火', + 'sessions.scheduledTasks.dialog.schedule.weekdayShort.wed': '水', + 'sessions.scheduledTasks.dialog.schedule.weekdayShort.thu': '木', + 'sessions.scheduledTasks.dialog.schedule.weekdayShort.fri': '金', + 'sessions.scheduledTasks.dialog.schedule.weekdayShort.sat': '土', + 'sessions.scheduledTasks.dialog.schedule.weekdayShort.unknown': '?', + 'sessions.scheduledTasks.dialog.relativeTime.inLessThanOneMinute': '1分未満', + 'sessions.scheduledTasks.dialog.relativeTime.justNow': 'たった今', + 'sessions.scheduledTasks.dialog.relativeTime.inMinutes': '{count}分後', + 'sessions.scheduledTasks.dialog.relativeTime.minutesAgo': '{count}分前', + 'sessions.scheduledTasks.dialog.relativeTime.inDuration': '{duration}後', + 'sessions.scheduledTasks.dialog.relativeTime.durationAgo': '{duration}前', + 'sessions.scheduledTasks.dialog.status.success': '成功', + 'sessions.scheduledTasks.dialog.status.error': 'エラー', + 'sessions.scheduledTasks.dialog.status.running': '実行中', + 'sessions.scheduledTasks.dialog.status.idle': '待機中', + 'sessions.scheduledTasks.dialog.nextRun.label': '次回', + 'sessions.scheduledTasks.dialog.lastRun.label': '最終実行', + 'sessions.scheduledTasks.dialog.lastRun.runningNow': '実行中', + 'sessions.scheduledTasks.dialog.lastRun.never': 'なし', + 'sessions.scheduledTasks.dialog.taskToggle.enableAria': '{taskName}を有効にする', + 'sessions.scheduledTasks.dialog.taskToggle.pauseAria': '{taskName}を一時停止', + 'sessions.scheduledTasks.dialog.taskToggle.enabled': '有効', + 'sessions.scheduledTasks.dialog.taskToggle.paused': '一時停止中', + 'sessions.scheduledTasks.editor.title.edit': 'スケジュールタスクを編集', + 'sessions.scheduledTasks.editor.title.new': '新しいスケジュールタスク', + 'sessions.scheduledTasks.editor.description': '新しいセッションを作成しプロンプトを送信するサーバーサイドタスクを設定します。', + 'sessions.scheduledTasks.editor.taskName.label': 'タスク名', + 'sessions.scheduledTasks.editor.taskName.placeholder': '日次同期', + 'sessions.scheduledTasks.editor.scheduleType.label': 'スケジュール種類', + 'sessions.scheduledTasks.editor.scheduleType.daily': '毎日', + 'sessions.scheduledTasks.editor.scheduleType.weekly': '毎週', + 'sessions.scheduledTasks.editor.scheduleType.once': '1回限り', + 'sessions.scheduledTasks.editor.scheduleType.cron': 'Cron', + 'sessions.scheduledTasks.editor.date.label': '日付', + 'sessions.scheduledTasks.editor.date.placeholder': '日付を選択', + 'sessions.scheduledTasks.editor.date.previousMonth': '前月', + 'sessions.scheduledTasks.editor.date.nextMonth': '翌月', + 'sessions.scheduledTasks.editor.date.jumpToToday': '今日にジャンプ', + 'sessions.scheduledTasks.editor.date.today': '今日', + 'sessions.scheduledTasks.editor.time.label': '時間', + 'sessions.scheduledTasks.editor.time.hourAria': '時', + 'sessions.scheduledTasks.editor.time.minuteAria': '分', + 'sessions.scheduledTasks.editor.time.periodAria': '午前/午後', + 'sessions.scheduledTasks.editor.time.period.am': '午前', + 'sessions.scheduledTasks.editor.time.period.pm': '午後', + 'sessions.scheduledTasks.editor.times.label': '時刻', + 'sessions.scheduledTasks.editor.times.add': '時刻を追加', + 'sessions.scheduledTasks.editor.times.removeAria': '時刻を削除', + 'sessions.scheduledTasks.editor.timezone.label': 'タイムゾーン', + 'sessions.scheduledTasks.editor.weekdays.label': '曜日', + 'sessions.scheduledTasks.editor.model.label': 'モデル', + 'sessions.scheduledTasks.editor.thinkingLevel.label': '思考レベル', + 'sessions.scheduledTasks.editor.thinkingLevel.default': 'デフォルト', + 'sessions.scheduledTasks.editor.agent.label': 'エージェント', + 'sessions.scheduledTasks.editor.prompt.label': 'プロンプト', + 'sessions.scheduledTasks.editor.prompt.placeholder': '未完了のタスクを要約し次のアクションを提案', + 'sessions.scheduledTasks.editor.enabled.aria': 'タスクを有効にする', + 'sessions.scheduledTasks.editor.enabled.label': '有効', + 'sessions.scheduledTasks.editor.actions.closeAria': '閉じる', + 'sessions.scheduledTasks.editor.actions.cancel': 'キャンセル', + 'sessions.scheduledTasks.editor.actions.save': '保存', + 'sessions.scheduledTasks.editor.actions.saving': '保存中...', + 'sessions.scheduledTasks.editor.toast.saveFailed': 'タスクの保存に失敗しました', + 'sessions.scheduledTasks.editor.validation.taskNameRequired': 'タスク名が必要です', + 'sessions.scheduledTasks.editor.validation.promptRequired': 'プロンプトが必要です', + 'sessions.scheduledTasks.editor.validation.modelRequired': 'モデルが必要です', + 'sessions.scheduledTasks.editor.validation.dateFormat': '日付はYYYY-MM-DD形式で入力してください', + 'sessions.scheduledTasks.editor.validation.timeFormat': '時刻はHH:mm形式で入力してください', + 'sessions.scheduledTasks.editor.validation.atLeastOneTime': '有効な時刻を1つ以上追加してください', + 'sessions.scheduledTasks.editor.validation.atLeastOneWeekday': '曜日を1つ以上選択してください', + 'sessions.scheduledTasks.editor.validation.timezoneRequired': 'タイムゾーンが必要です', + 'sessions.scheduledTasks.editor.validation.cronRequired': 'Cron式が必要です', + 'sessions.scheduledTasks.editor.validation.cronInvalid': '無効なCron式です', + 'sessions.scheduledTasks.editor.cronExpression.label': 'Cron式', + 'sessions.scheduledTasks.editor.cronExpression.placeholder': '*/5 * * * *', + 'sessions.scheduledTasks.editor.cronExpression.nextRuns': '次の実行', + 'sessions.scheduledTasks.editor.cronExpression.examples': '例', + 'sessions.scheduledTasks.editor.cronExpression.examples.every5min': '5分ごと', + 'sessions.scheduledTasks.editor.cronExpression.examples.everyHour': '毎時', + 'sessions.scheduledTasks.editor.cronExpression.examples.monday9am': '毎週月曜日9時', + 'sessions.scheduledTasks.editor.cronExpression.examples.9am5pm': '毎日9時と17時', + 'sessions.scheduledTasks.editor.cronExpression.examples.firstOfMonth': '毎月1日', + 'multirun.launcher.title': '新規マルチラン', + 'multirun.launcher.actions.closeEsc': '閉じる(Esc)', + 'multirun.launcher.actions.cancel': 'キャンセル', + 'multirun.launcher.actions.creating': '作成中...', + 'multirun.launcher.actions.startWithModelCount': '開始({count}モデル)', + 'multirun.launcher.project.label': 'プロジェクト', + 'multirun.launcher.project.placeholder': 'プロジェクトを選択', + 'multirun.launcher.project.empty': '先にプロジェクトを追加してください。', + 'multirun.launcher.project.gitRequired': 'ワークツリー分離なし: 実行は同じディレクトリを使用します。', + 'multirun.launcher.groupName.label': 'グループ名', + 'multirun.launcher.groupName.info': 'ワークツリーのディレクトリ名とブランチ名に使用されます', + 'multirun.launcher.groupName.placeholder': 'feature-auth, bugfix-login', + 'multirun.launcher.baseBranch.label': 'ベースブランチ', + 'multirun.launcher.baseBranch.info': 'このベースからモデルごとに新しいブランチを作成', + 'multirun.launcher.isolateRuns.label': '実行を分離', + 'multirun.launcher.agent.label': 'エージェント', + 'multirun.launcher.agent.info': 'すべての実行で使用するエージェント。設定済みエージェントがデフォルトです。', + 'multirun.launcher.setupCommands.label': 'セットアップコマンド', + 'multirun.launcher.setupCommands.loading': '読み込み中...', + 'multirun.launcher.setupCommands.commandPlaceholder': 'bun install', + 'multirun.launcher.setupCommands.removeCommandAria': 'コマンドを削除', + 'multirun.launcher.setupCommands.addCommand': 'コマンドを追加', + 'multirun.launcher.prompt.label': 'プロンプト', + 'multirun.launcher.prompt.placeholder': 'すべてのモデルに送信するプロンプトを入力...', + 'multirun.launcher.attachments.attach': '添付', + 'multirun.launcher.attachments.tooltip': '同じファイルをすべての実行に送信', + 'multirun.launcher.models.label': 'モデル', + 'multirun.launcher.models.info': '2~{max}モデルを選択。同じモデルを複数回追加できます。', + 'multirun.launcher.toast.fileTooLarge': 'ファイル「{fileName}」が大きすぎます(最大10MB)', + 'multirun.launcher.toast.attachFailed': '「{fileName}」の添付に失敗しました', + 'multirun.launcher.toast.attachedSingle': '{count}ファイルを添付しました', + 'multirun.launcher.toast.attachedPlural': '{count}ファイルを添付しました', + 'multirun.modelMultiSelect.actions.addModel': 'モデルを追加', + 'multirun.modelMultiSelect.search.placeholder': 'モデルを検索', + 'multirun.modelMultiSelect.search.noResults': 'モデルが見つかりません', + 'multirun.modelMultiSelect.sections.favorites': 'お気に入り', + 'multirun.modelMultiSelect.sections.recent': '最近', + 'multirun.modelMultiSelect.variant.placeholder': '思考', + 'multirun.modelMultiSelect.variant.default': 'デフォルト', + 'multirun.modelMultiSelect.keyboard.hint': '↑↓ 移動 • Enter 選択 • Esc 閉じる', + 'multirun.modelMultiSelect.validation.minOnly': '少なくとも{min}モデルを選択してください。', + 'multirun.modelMultiSelect.validation.minToMax': '{min}から{max}モデルを選択してください。', + 'multirun.agentSelector.placeholder': 'エージェントを選択', + 'multirun.fusion.title': '実行フュージョン', + 'multirun.fusion.description': '選択したマルチランの出力を1つの強力な回答に結合します。', + 'multirun.fusion.provider.placeholder': 'プロバイダー', + 'multirun.fusion.model.placeholder': 'モデル', + 'multirun.fusion.sources.label': 'ソース({count})', + 'multirun.fusion.actions.cancel': 'キャンセル', + 'multirun.fusion.actions.start': 'フュージョンを開始', + 'multirun.fusion.actions.starting': '開始中...', + 'multirun.fusion.toast.noOutputs': 'フュージョンするアシスタント出力が見つかりません。', + 'multirun.fusion.toast.failed': 'フュージョンの開始に失敗しました。', + 'multirun.launcher.attachments.label': 'ファイル', + 'multirun.launcher.actions.startWithRunCount': '開始({count}実行)', + 'multirun.launcher.groups.addGroup': '実行グループを追加', + 'multirun.launcher.groups.removeGroup': 'グループを削除', + 'multirun.launcher.groups.groupLabel': '実行グループ{index}', + 'multirun.launcher.groups.template.label': 'テンプレート', + 'multirun.launcher.groups.template.placeholder': 'テンプレートを選択...', + 'multirun.launcher.groups.template.custom': 'カスタムプロンプト', + 'multirun.launcher.groups.prompt.label': 'プロンプト', + 'multirun.launcher.groups.prompt.placeholder': 'このグループのプロンプトを入力...', + 'sessions.sidebar.header.actions.searchSessions': 'セッションを検索', + 'sessions.sidebar.header.actions.exitSelection': '選択を終了', + 'sessions.sidebar.header.actions.selectSessions': 'セッションを選択', + 'sessions.sidebar.header.actions.sessionDisplayMode': 'セッション表示モード', + 'sessions.sidebar.header.displayMode.label': '表示モード', + 'sessions.sidebar.header.displayMode.default': 'デフォルト', + 'sessions.sidebar.header.displayMode.minimal': 'ミニマル', + 'sessions.sidebar.header.displayMode.showRecent': '最近のセクションを表示', + 'sessions.sidebar.header.displayMode.showArchived': 'アーカイブ済みセッションを表示', + 'sessions.sidebar.header.displayMode.collapseAll': 'すべて折りたたむ', + 'sessions.sidebar.header.displayMode.expandAll': 'すべて展開', + 'sessions.sidebar.header.search.matchCountSingle': '{count}件一致', + 'sessions.sidebar.header.search.matchCountPlural': '{count}件一致', + 'sessions.sidebar.header.search.escapeHint': 'Escでクリア', + 'sessions.sidebar.header.search.placeholder': 'セッションを検索...', + 'sessions.sidebar.header.search.clear': '検索をクリア', + 'sessions.sidebar.footer.actions.settings': '設定', + 'sessions.sidebar.footer.actions.shortcuts': 'ショートカット', + 'sessions.sidebar.footer.actions.aboutOpenChamber': 'OpenChamberについて', + 'sessions.sidebar.footer.actions.update': '更新', + 'sessions.sidebar.empty.noSessions.title': 'まだセッションがありません', + 'sessions.sidebar.empty.noSessions.description': '最初のセッションを作成してコーディングを始めましょう。', + 'sessions.sidebar.empty.noMatches.title': '一致するセッションがありません', + 'sessions.sidebar.empty.noMatches.description': '別のタイトル、ブランチ、フォルダ、パスをお試しください。', + 'sessions.sidebar.activity.recentTitle': '最近', + 'sessions.switcher.openAria': 'セッションスイッチャーを開く', + 'sessions.switcher.empty': '最近のセッションはありません', + 'sessions.switcher.draftTitle': '新しいセッション', + 'sessions.sidebar.updateCheck.errorTitle': '更新の確認に失敗しました', + 'sessions.sidebar.updateCheck.latestVersion': '最新バージョンです', + 'sessions.sidebar.directory.errorAddProjectTitle': 'プロジェクトの追加に失敗しました', + 'sessions.sidebar.directory.errorAddProjectDescription': '有効なディレクトリを選択してください。', + 'sessions.sidebar.directory.errorSelectDirectoryTitle': 'ディレクトリの選択に失敗しました', + 'sessions.sidebar.folder.newFolderName': '新しいフォルダ', + 'sessions.sidebar.bulkActions.delete': '削除', + 'sessions.sidebar.bulkActions.archive': 'アーカイブ', + 'sessions.sidebar.bulkActions.selectedCount': '{count}件選択', + 'sessions.sidebar.bulkActions.moveToFolder': 'フォルダに移動', + 'sessions.sidebar.bulkActions.deletedSingle': '{count}セッションを削除しました', + 'sessions.sidebar.bulkActions.deletedPlural': '{count}セッションを削除しました', + 'sessions.sidebar.bulkActions.failedDeleteSingle': '{count}セッションの削除に失敗しました', + 'sessions.sidebar.bulkActions.failedDeletePlural': '{count}セッションの削除に失敗しました', + 'sessions.sidebar.bulkActions.archivedSingle': '{count}セッションをアーカイブしました', + 'sessions.sidebar.bulkActions.archivedPlural': '{count}セッションをアーカイブしました', + 'sessions.sidebar.bulkActions.failedArchiveSingle': '{count}セッションのアーカイブに失敗しました', + 'sessions.sidebar.bulkActions.failedArchivePlural': '{count}セッションのアーカイブに失敗しました', + 'sessions.sidebar.folders.none': 'まだフォルダがありません', + 'sessions.sidebar.folders.newFolderEllipsis': '新しいフォルダ...', + 'sessions.sidebar.folders.removeFromFolder': 'フォルダから削除', + 'sessions.sidebar.folders.moveToFolder': 'フォルダに移動', + 'sessions.sidebar.project.actions.newWorktree': '新しいワークツリー', + 'sessions.sidebar.project.actions.newWorktreeEllipsis': '新しいワークツリー...', + 'sessions.sidebar.project.actions.projectMenu': 'プロジェクトメニュー', + 'sessions.sidebar.project.actions.newSession': '新しいセッション', + 'sessions.sidebar.project.actions.closeProject': 'プロジェクトを閉じる', + 'sessions.sidebar.project.actions.newDraftSession': '新しい下書きセッション', + 'sessions.sidebar.session.menu.rename': '名前の変更', + 'sessions.sidebar.session.rename.save': 'セッション名を保存', + 'sessions.sidebar.session.rename.cancel': 'セッション名の変更をキャンセル', + 'sessions.sidebar.session.menu.unpin': 'セッションのピン留めを解除', + 'sessions.sidebar.session.menu.pin': 'セッションをピン留め', + 'sessions.sidebar.session.menu.share': '共有', + 'sessions.sidebar.session.menu.copied': 'コピーしました', + 'sessions.sidebar.session.menu.copyLink': 'リンクをコピー', + 'sessions.sidebar.session.menu.unshare': '共有解除', + 'sessions.sidebar.session.menu.exportMarkdown': 'Markdownでエクスポート', + 'sessions.sidebar.session.menu.runFusion': 'フュージョンを実行', + 'sessions.sidebar.session.menu.openInSidePanel': 'サイドパネルで開く', + 'sessions.sidebar.session.actions.openInEditor': 'エディターで開く', + 'sessions.sidebar.session.menu.betaBadge': 'ベータ', + 'sessions.sidebar.session.menu.label': 'セッションメニュー', + 'sessions.sidebar.session.untitled': '無題のセッション', + 'sessions.sidebar.session.export.nothingToExport': 'エクスポートするものがありません', + 'sessions.sidebar.session.export.success': 'セッションをエクスポートしました', + 'sessions.sidebar.session.export.failedRevealPath': 'パスの表示に失敗しました', + 'sessions.sidebar.session.export.untitledSubagent': '無題のサブエージェント', + 'sessions.sidebar.session.export.skippedSubtaskSingle': 'セッションをエクスポートしましたが、読み込めなかった{count}件のサブエージェントタスクをスキップしました。', + 'sessions.sidebar.session.export.skippedSubtaskMany': 'セッションをエクスポートしましたが、読み込めなかった{count}件のサブエージェントタスクをスキップしました。', + 'sessions.sidebar.session.export.dialog.title': 'Markdownでエクスポート', + 'sessions.sidebar.session.export.dialog.descriptionSingle': 'このセッションには{count}件のサブエージェントタスクがあります。エクスポートに含めますか?', + 'sessions.sidebar.session.export.dialog.descriptionMany': 'このセッションには{count}件のサブエージェントタスクがあります。エクスポートに含めますか?', + 'sessions.sidebar.session.export.dialog.includeSubtasks': 'サブエージェントタスクを含める', + 'sessions.sidebar.session.export.dialog.confirm': 'エクスポート', + 'sessions.sidebar.session.status.active': 'セッションアクティブ', + 'sessions.sidebar.session.status.unread': '未読の更新', + 'sessions.sidebar.session.status.pinned': 'ピン留めされたセッション', + 'sessions.sidebar.session.status.permissionRequired': '権限が必要です', + 'sessions.sidebar.session.subsessions.collapse': 'サブセッションを折りたたむ', + 'sessions.sidebar.session.subsessions.expand': 'サブセッションを展開', + 'sessions.sidebar.dialogs.deleteSession.title': 'セッションを削除しますか?', + 'sessions.sidebar.dialogs.archiveSession.title': 'セッションをアーカイブしますか?', + 'sessions.sidebar.dialogs.deleteSession.withOneSubtask': '「{sessionTitle}」と{count}件のサブタスクは完全に削除されます。', + 'sessions.sidebar.dialogs.deleteSession.withManySubtasks': '「{sessionTitle}」と{count}件のサブタスクは完全に削除されます。', + 'sessions.sidebar.dialogs.archiveSession.withOneSubtask': '「{sessionTitle}」と{count}件のサブタスクはアーカイブされます。', + 'sessions.sidebar.dialogs.archiveSession.withManySubtasks': '「{sessionTitle}」と{count}件のサブタスクはアーカイブされます。', + 'sessions.sidebar.dialogs.deleteSession.single': '「{sessionTitle}」は完全に削除されます。', + 'sessions.sidebar.dialogs.archiveSession.single': '「{sessionTitle}」はアーカイブされます。', + 'sessions.sidebar.dialogs.neverAsk': '今後確認しない', + 'sessions.sidebar.dialogs.cancel': 'キャンセル', + 'sessions.sidebar.dialogs.deleteSession.titleAction': 'セッションを削除', + 'sessions.sidebar.dialogs.deleteSessions.titleAction': 'セッションを削除', + 'sessions.sidebar.dialogs.deleteSessions.title': 'セッションを削除しますか?', + 'sessions.sidebar.dialogs.archiveSessions.title': 'セッションをアーカイブしますか?', + 'sessions.sidebar.dialogs.deleteSessions.singleDescription': '{count}セッションが完全に削除されます。', + 'sessions.sidebar.dialogs.deleteSessions.pluralDescription': '{count}セッションが完全に削除されます。', + 'sessions.sidebar.dialogs.archiveSessions.singleDescription': '{count}セッションがアーカイブされます。', + 'sessions.sidebar.dialogs.archiveSessions.pluralDescription': '{count}セッションがアーカイブされます。', + 'sessions.sidebar.dialogs.deleteFolder.title': 'フォルダを削除しますか?', + 'sessions.sidebar.dialogs.deleteFolder.withOneSubfolder': '「{folderName}」は{count}件のサブフォルダとともに削除されます。中のセッションは削除されません。', + 'sessions.sidebar.dialogs.deleteFolder.withManySubfolders': '「{folderName}」は{count}件のサブフォルダとともに削除されます。中のセッションは削除されません。', + 'sessions.sidebar.dialogs.deleteFolder.withContentsNoSubfolders': '「{folderName}」は削除されます。中のセッションは削除されません。', + 'sessions.sidebar.dialogs.deleteFolder.single': '「{folderName}」は完全に削除されます。', + 'sessions.sidebar.dialogs.deleteResult.singleFailedToDelete': '{count}セッションを削除できませんでした。', + 'sessions.sidebar.dialogs.deleteResult.manyFailedToDelete': '{count}セッションを削除できませんでした。', + 'sessions.sidebar.dialogs.deleteResult.singleFailedToArchive': '{count}セッションをアーカイブできませんでした。', + 'sessions.sidebar.dialogs.deleteResult.manyFailedToArchive': '{count}セッションをアーカイブできませんでした。', + 'sessions.sidebar.dialogs.deleteResult.removedFromDate': '{dateLabel}からすべてのセッションを削除しました。', + 'sessions.sidebar.dialogs.deleteResult.tryAgain': 'しばらくしてからもう一度お試しください。', + 'sessions.sidebar.dialogs.worktreeDelete.descriptionNoLinked': '選択したワークツリーを削除します。', + 'sessions.sidebar.dialogs.worktreeDelete.descriptionOneLinked': '選択したワークツリーを削除し、{count}件のリンクされたセッションをアーカイブします。', + 'sessions.sidebar.dialogs.worktreeDelete.descriptionManyLinked': '選択したワークツリーを削除し、{count}件のリンクされたセッションをアーカイブします。', + 'sessions.sidebar.dialogs.sessionDelete.descriptionOne': 'この操作は1セッションを完全に削除します。', + 'sessions.sidebar.dialogs.sessionDelete.descriptionOneWithDate': 'この操作は{dateLabel}の1セッションを完全に削除します。', + 'sessions.sidebar.dialogs.sessionDelete.descriptionMany': 'この操作は{count}セッションを完全に削除します。', + 'sessions.sidebar.dialogs.sessionDelete.descriptionManyWithDate': 'この操作は{dateLabel}の{count}セッションを完全に削除します。', + 'sessions.sidebar.dialogs.sessionList.more': 'さらに{count}件', + 'sessions.sidebar.session.share.successTitle': 'セッションを共有しました', + 'sessions.sidebar.session.share.successDescription': 'メニューからリンクをコピーできます。', + 'sessions.sidebar.session.share.error': 'セッションを共有できません', + 'sessions.sidebar.session.share.copyUrlError': 'URLのコピーに失敗しました', + 'sessions.sidebar.session.unshare.success': 'セッションの共有を解除しました', + 'sessions.sidebar.session.unshare.error': 'セッションの共有を解除できません', + 'sessions.sidebar.session.delete.success': 'セッションを削除しました', + 'sessions.sidebar.session.delete.error': 'セッションの削除に失敗しました', + 'sessions.sidebar.session.archive.success': 'セッションをアーカイブしました', + 'sessions.sidebar.session.archive.error': 'セッションのアーカイブに失敗しました', + 'sessions.sidebar.group.pr.checksPassed': '{success}/{total}のチェックに合格', + 'sessions.sidebar.group.pr.failingCount': '{count}件失敗', + 'sessions.sidebar.group.pr.pendingCount': '{count}件保留中', + 'sessions.sidebar.group.pr.conflictsOrBlocked': '競合またはブロック中', + 'sessions.sidebar.group.pr.mergeable': 'マージ可能', + 'sessions.sidebar.group.pr.mergeState': 'マージ状態: {state}', + 'sessions.sidebar.group.pr.status.merged': 'マージ済み', + 'sessions.sidebar.group.pr.status.readyToMerge': 'マージ準備完了', + 'sessions.sidebar.group.pr.status.open': 'PR公開中', + 'sessions.sidebar.group.pr.status.mergeConflicts': 'マージ競合', + 'sessions.sidebar.group.pr.status.mergeBlocked': 'マージブロック中', + 'sessions.sidebar.group.pr.status.draft': '下書きPR', + 'sessions.sidebar.group.pr.status.closed': 'クローズ', + 'sessions.sidebar.group.empty.noArchivedSessions': 'まだアーカイブ済みセッションはありません。', + 'sessions.sidebar.group.empty.noSessionsInWorkspace': 'このワークスペースにはまだセッションがありません。', + 'sessions.sidebar.group.showMore': 'さらにセッションを表示', + 'sessions.sidebar.group.showMoreSingle': 'さらに{count}セッションを表示', + 'sessions.sidebar.group.showMorePlural': 'さらに{count}セッションを表示', + 'sessions.sidebar.group.showFewer': 'セッションを少なく表示', + 'sessions.sidebar.group.expandAria': '{label}を展開', + 'sessions.sidebar.group.collapseAria': '{label}を折りたたむ', + 'sessions.sidebar.group.actions.deleteArchivedInGroupAria': '{label}のアーカイブ済みセッションを削除', + 'sessions.sidebar.group.actions.deleteArchivedSessions': 'アーカイブ済みセッションを削除', + 'sessions.sidebar.group.actions.deleteGroupAria': '{label}を削除', + 'sessions.sidebar.group.actions.deleteWorktree': 'ワークツリーを削除', + 'sessions.sidebar.group.actions.newDraftInGroupAria': '{label}で新しい下書きセッション', + 'sessions.sidebar.grouping.projectRoot': 'プロジェクトルート', + 'sessions.sidebar.grouping.projectRootWithBranch': 'プロジェクトルート: {branch}', + 'sessions.sidebar.grouping.archived': 'アーカイブ済み', + 'sessions.sidebar.grouping.archivedDescription': 'アーカイブ済みおよび未割り当てのセッション', + 'sessions.sidebar.folderItem.expandAria': 'フォルダ{folderName}を展開', + 'sessions.sidebar.folderItem.collapseAria': 'フォルダ{folderName}を折りたたむ', + 'sessions.sidebar.folderItem.namePlaceholder': 'フォルダ名', + 'sessions.sidebar.folderItem.newSessionAria': '{folderName}で新しいセッション', + 'sessions.sidebar.folderItem.newSubfolderAria': '{folderName}に新しいサブフォルダ', + 'sessions.sidebar.folderItem.newSubfolder': '新しいサブフォルダ', + 'sessions.sidebar.folderItem.renameAria': 'フォルダ{folderName}の名前を変更', + 'sessions.sidebar.folderItem.deleteArchivedInFolderAria': 'フォルダ{folderName}のアーカイブ済みセッションを削除', + 'sessions.sidebar.folderItem.deleteFolderAria': 'フォルダ{folderName}を削除', + 'sessions.sidebar.folderItem.emptyFolder': '空のフォルダ', + 'sessions.sidebar.sessionDialogs.ok': 'OK', + 'sessions.sidebar.sessionDialogs.linkedSessionSingle': 'リンクされたセッション', + 'sessions.sidebar.sessionDialogs.linkedSessionPlural': 'リンクされたセッション', + 'sessions.sidebar.sessionDialogs.delete.note': 'ワークツリーディレクトリはそのまま残ります。選択したセッションにリンクされたサブセッションも削除されます。', + 'sessions.sidebar.sessionDialogs.directory.errorSelectTitle': 'ディレクトリの選択に失敗しました', + 'sessions.sidebar.sessionDialogs.directory.errorOpenTitle': 'ディレクトリを開けませんでした', + 'sessions.sidebar.sessionDialogs.directory.errorOpenDescription': 'デスクトップがファイルアクセスを許可しませんでした。', + 'sessions.sidebar.sessionDialogs.directory.errorAddProjectTitle': 'プロジェクトの追加に失敗しました', + 'sessions.sidebar.sessionDialogs.directory.errorAddProjectDescription': '有効なディレクトリパスを選択してください。', + 'sessions.sidebar.sessionDialogs.worktree.errorRemoveTitle': 'ワークツリーの削除に失敗しました', + 'sessions.sidebar.sessionDialogs.worktree.removedTitle': 'ワークツリーを削除しました', + 'sessions.sidebar.sessionDialogs.worktree.removed': 'ワークツリーを削除しました。', + 'sessions.sidebar.sessionDialogs.worktree.removedWithRemote': 'ワークツリーとリモートブランチを削除しました。', + 'sessions.sidebar.sessionDialogs.worktree.attachedArchived': '添付のワークツリーをアーカイブしました。', + 'sessions.sidebar.sessionDialogs.worktree.attachedArchivedPlural': '添付のワークツリーをアーカイブしました。', + 'sessions.sidebar.sessionDialogs.worktree.archivedAndRemoteRemoved': 'ワークツリーをアーカイブし、リモートブランチを削除しました。', + 'sessions.sidebar.sessionDialogs.worktree.label': 'ワークツリー', + 'sessions.sidebar.sessionDialogs.worktree.pathUnavailable': 'ワークツリーパスは利用できません。', + 'sessions.sidebar.sessionDialogs.worktree.uncommittedWarning': '未コミットの変更は破棄されます。', + 'sessions.sidebar.sessionDialogs.actions.deleteRemoteBranch': 'リモートブランチを削除', + 'sessions.sidebar.sessionDialogs.actions.remoteBranchInfoUnavailable': 'リモートブランチ情報は利用できません', + 'sessions.sidebar.sessionDialogs.actions.deleteLocalBranch': 'ローカルブランチを削除', + 'sessions.sidebar.sessionDialogs.actions.deleting': '削除中…', + 'sessions.sidebar.sessionDialogs.actions.deleteWorktree': 'ワークツリーを削除', + 'gitView.branch.branchToMergeInto': '{branch}にマージするブランチ', + 'gitView.branch.branchToRebaseOnto': 'リベース先のブランチ', + 'gitView.branch.create': '新しいブランチを作成...', + 'gitView.branch.currentBadge': '現在', + 'gitView.branch.currentBranchFallback': '現在のブランチ', + 'gitView.branch.currentBranchTooltip': '現在のブランチ', + 'gitView.branch.detachedHead': '分離HEAD', + 'gitView.branch.dialogDescriptionPrefix': '別のブランチを取り込む方法を選択', + 'gitView.branch.empty': 'ブランチが見つかりません。', + 'gitView.branch.localBranches': 'ローカルブランチ', + 'gitView.branch.mergeDescription': 'マージコミットを作成しブランチ履歴を保持します。', + 'gitView.branch.mergeRebase': 'マージ/リベース', + 'gitView.branch.mergeRebaseTooltip': '別のブランチからこのブランチを更新します。', + 'gitView.branch.mergingInProgress': 'マージ進行中', + 'gitView.branch.namePlaceholder': 'ブランチ名', + 'gitView.branch.newBranchPlaceholder': '新しいブランチ名', + 'gitView.branch.noLocalBranches': 'ローカルブランチがありません', + 'gitView.branch.noRemoteBranches': 'リモートブランチがありません', + 'gitView.branch.operation': '操作', + 'gitView.branch.operationCompleted': '操作が完了しました', + 'gitView.branch.operationFailed': '操作に失敗しました', + 'gitView.branch.pushToPrefix': 'プッシュ先プレフィックス', + 'gitView.branch.pushToSuffix': 'プッシュ先サフィックス', + 'gitView.branch.rebaseDescription': '選択したブランチの上にコミットをリプレイします。', + 'gitView.branch.rebasingInProgress': 'リベース進行中', + 'gitView.branch.remoteBranches': 'リモートブランチ', + 'gitView.branch.renameTitle': 'ブランチ名を変更', + 'gitView.branch.renameSave': 'ブランチ名を保存', + 'gitView.branch.renameSaving': 'ブランチ名を保存中', + 'gitView.branch.renameCancel': 'ブランチ名の変更をキャンセル', + 'gitView.branch.searchPlaceholder': 'ブランチを検索...', + 'gitView.branch.selectBranch': 'ブランチを選択', + 'gitView.branch.summaryMergeInfix': 'に', + 'gitView.branch.summaryMergePrefix': 'これはマージします', + 'gitView.branch.summaryRebaseInfix': 'に', + 'gitView.branch.summaryRebasePrefix': 'これはリベースします', + 'gitView.branch.updateDescriptionPrefix': '最新の変更を取り込む', + 'gitView.branch.updateTitle': 'ブランチを更新', + 'gitView.changes.changedFilesAria': '変更されたファイル', + 'gitView.changes.clearSelectionAria': 'ファイル選択をクリア', + 'gitView.changes.collapseDirectoryAria': 'ディレクトリ{path}を折りたたむ', + 'gitView.changes.expandDirectoryAria': 'ディレクトリ{path}を展開', + 'gitView.changes.revertAll': 'すべて元に戻す', + 'gitView.changes.revertAllDescriptionPlural': '{count}件の変更ファイルを元に戻しますか?この操作は元に戻せません。', + 'gitView.changes.revertAllDescriptionSingle': '{count}件の変更ファイルを元に戻しますか?この操作は元に戻せません。', + 'gitView.changes.revertAllDialogTitle': 'すべての変更を元に戻しますか?', + 'gitView.changes.revertDirectoryAria': '{path}の変更を元に戻す', + 'gitView.changes.revertDirectory': 'フォルダを元に戻す', + 'gitView.changes.revertDirectoryDescriptionPlural': '{path}以下の{count}ファイルのローカル変更が破棄されます。', + 'gitView.changes.revertDirectoryDescriptionSingle': '{path}以下の{count}ファイルのローカル変更が破棄されます。', + 'gitView.changes.revertDirectoryDialogTitle': 'フォルダの変更を元に戻しますか?', + 'gitView.changes.revertDirectoryTooltip': 'フォルダの変更を元に戻す', + 'gitView.changes.revertFileAria': '{path}の変更を元に戻す', + 'gitView.changes.revertFileTooltip': '変更を元に戻す', + 'gitView.changes.reverting': '元に戻しています...', + 'gitView.changes.selectAllAria': 'すべてのファイルを選択', + 'gitView.changes.selectFileAria': '{path}を選択', + 'gitView.changes.stagedTitle': 'ステージ済み', + 'gitView.changes.resizeSplitAria': 'ステージ済みと未ステージの変更のサイズを調整', + 'gitView.changes.stageAllAria': 'すべての変更をステージ', + 'gitView.changes.stageDirectoryAria': '{path}のすべての変更をステージ', + 'gitView.changes.stageFileAria': '{path}をステージ', + 'gitView.changes.title': '変更', + 'gitView.changes.toggleDirectorySelectionAria': '{path}の選択を切り替え', + 'gitView.changes.unstageAllAria': 'すべての変更をアンステージ', + 'gitView.changes.unstageDirectoryAria': '{path}のすべての変更をアンステージ', + 'gitView.changes.unstageFileAria': '{path}をアンステージ', + 'gitView.commit.addGitmoji': 'Gitmojiを追加', + 'gitView.commit.aiHighlights.title': 'ハイライト', + 'gitView.commit.commit': 'コミット', + 'gitView.commit.committing': 'コミット中...', + 'gitView.commit.generate': '生成', + 'gitView.commit.generateAria': 'コミットメッセージを生成', + 'gitView.commit.messagePlaceholder': 'コミットメッセージ', + 'gitView.commit.push': 'コミットして同期', + 'gitView.commit.pushAria': 'コミットして同期', + 'gitView.commit.pushing': '同期中...', + 'gitView.commit.selectFilesHint': '変更画面でファイルを選択するとコミットが有効になります。', + 'gitView.commit.stageFilesHint': 'ファイルをステージするとコミットが有効になります。', + 'gitView.commit.title': 'コミット', + 'gitView.common.cancel': 'キャンセル', + 'gitView.common.close': '閉じる', + 'gitView.common.done': '完了', + 'gitView.common.processing': '処理中...', + 'gitView.common.reset': 'リセット', + 'gitView.conflict.abortOperation': '{operation}を中止', + 'gitView.conflict.conflictedFiles': '競合ファイル:', + 'gitView.conflict.continueLater': '後で続ける', + 'gitView.conflict.detectedDescription': '{operation}の競合を解決して続行してください。', + 'gitView.conflict.detectedTitle': '{operation}の競合が検出されました', + 'gitView.conflict.errorLoadingDetails': '競合の詳細の読み込みに失敗しました: {message}', + 'gitView.conflict.headInfo': 'HEAD情報:', + 'gitView.conflict.loadFailed': '競合の詳細の読み込みに失敗しました', + 'gitView.conflict.loading': '競合の詳細を読み込み中...', + 'gitView.conflict.noActiveSession': 'アクティブなセッションがありません', + 'gitView.conflict.noActiveSessionDescription': 'セッションを開くか作成して競合を解決してください。', + 'gitView.conflict.resolveCurrentSession': '現在のセッションで解決', + 'gitView.conflict.resolveNewSession': '新しいセッションで解決', + 'gitView.empty.cleanDescription': 'すべての変更がコミットされました', + 'gitView.empty.cleanTitle': 'ワーキングツリーはクリーンです', + 'gitView.empty.pullBehindPlural': '{count}コミットをプル', + 'gitView.empty.pullBehindSingle': '{count}コミットをプル', + 'gitView.header.identityTooltip': 'Git ID', + 'gitView.header.noIdentity': 'IDがありません', + 'gitView.header.noProfiles': '適用できるプロファイルがありません。', + 'gitView.header.repositoryViews': 'リポジトリビュー', + 'gitView.header.removeRemoteAria': 'リモート{name}を削除', + 'gitView.header.removeRemoteTitle': 'リモート{name}を削除', + 'gitView.header.upstreamSynced': '同期済み', + 'gitView.header.upstreamTooltip': '{target}と比較中。', + 'gitView.header.upstreamTooltipTracking': '{target}と比較中。プライマリ同期バッジは{tracking}を反映しています。', + 'gitView.history.actions.cancelButton': 'キャンセル', + 'gitView.history.actions.checkout': 'チェックアウト', + 'gitView.history.actions.checkoutConfirm': 'このコミットを分離HEADとしてチェックアウトしますか?', + 'gitView.history.actions.cherryPick': 'チェリーピック', + 'gitView.history.actions.cherryPickConfirm': 'このコミットを現在のブランチにチェリーピックしますか?', + 'gitView.history.actions.conflictToastDescription': '競合ファイル: {files}。手動で解決してコミットするか、git cherry-pick/revert --abortで中断してください。', + 'gitView.history.actions.conflictToastTitle': '競合', + 'gitView.history.actions.confirmButton': '確認', + 'gitView.history.actions.createBranch': 'ここにブランチを作成', + 'gitView.history.actions.createBranchConfirm': '作成', + 'gitView.history.actions.createBranchPlaceholder': 'ブランチ名', + 'gitView.history.actions.detachedHead': 'チェックアウトしました(分離HEAD)', + 'gitView.history.actions.merge': '現在にマージ', + 'gitView.history.actions.mergeConfirm': 'このコミットを現在のブランチにマージしますか?', + 'gitView.history.actions.rebase': 'これにリベース', + 'gitView.history.actions.rebaseConfirm': '現在のブランチをこのコミットにリベースしますか?', + 'gitView.history.actions.reset': 'リセット...', + 'gitView.history.actions.resetHard': 'ハード — すべての変更を破棄', + 'gitView.history.actions.resetHardConfirm': 'ハードリセット — HEADが移動し、未コミットの変更はすべて永久に破棄されます。', + 'gitView.history.actions.resetHardConfirmButton': '変更を破棄', + 'gitView.history.actions.resetMixed': 'ミックス — 変更をアンステージ', + 'gitView.history.actions.resetMixedConfirm': 'ミックスリセット — HEADが移動し、変更はアンステージされます。', + 'gitView.history.actions.resetSoft': 'ソフト — ステージ済みを保持', + 'gitView.history.actions.resetSoftConfirm': 'ソフトリセット — HEADが移動し、ステージ済みの変更は保持されます。', + 'gitView.history.actions.revert': '取り消し', + 'gitView.history.actions.revertConfirm': 'このコミットの取り消しをステージしますか?', + 'gitView.history.binary': 'バイナリ', + 'gitView.history.binaryNoDiff': 'バイナリファイル — 差分は利用できません', + 'gitView.history.commitsPlaceholder': 'コミット', + 'gitView.history.copySha': 'SHAをコピー', + 'gitView.history.diffError': '差分の読み込みに失敗しました。クリックして再試行。', + 'gitView.history.largeDiffDescription': 'レンダリングが遅くなる可能性があります。以下をクリックして差分を表示できます。', + 'gitView.history.largeDiffTitle': '大きな差分({count}行変更)', + 'gitView.history.loadingDiff': '差分を読み込み中...', + 'gitView.history.loadingFiles': 'ファイルを読み込み中...', + 'gitView.history.loadMore': 'さらに読み込む', + 'gitView.history.loadingMore': '読み込み中...', + 'gitView.history.logSize100': '100コミット', + 'gitView.history.logSize25': '25コミット', + 'gitView.history.logSize50': '50コミット', + 'gitView.history.noCommits': 'コミットが見つかりません', + 'gitView.history.noFiles': 'ファイルがありません', + 'gitView.history.renamedNoDiff': '名前変更されたファイル — 差分はサポートされていません', + 'gitView.history.renderDiffAnyway': 'とにかくレンダリング', + 'gitView.history.title': '履歴', + 'gitView.graph.title': 'グラフ', + 'gitView.integrate.checking': '確認中…', + 'gitView.integrate.cherryPickAbortedToast': 'チェリーピックを中止しました', + 'gitView.integrate.cherryPickConflictDescription': 'チェリーピックの競合を解決して続行してください。', + 'gitView.integrate.cherryPickConflictToast': 'チェリーピックの競合が検出されました', + 'gitView.integrate.cherryPickContinueFailedToast': 'チェリーピックの続行に失敗しました', + 'gitView.integrate.cherryPickFinishedToast': 'チェリーピックが完了しました', + 'gitView.integrate.commitsMovedDescriptionPlural': '{count}コミットを{branch}に移動しました。', + 'gitView.integrate.commitsMovedDescriptionSingle': '{count}コミットを{branch}に移動しました。', + 'gitView.integrate.commitsMovedToast': 'コミットを移動しました', + 'gitView.integrate.commitsToMove': '移動するコミット', + 'gitView.integrate.conflictsInFiles': 'ファイルの競合', + 'gitView.integrate.currentCommit': '現在のコミット', + 'gitView.integrate.currentSession': '現在のセッション', + 'gitView.integrate.failedToMoveToast': 'コミットの移動に失敗しました', + 'gitView.integrate.moreFiles': 'その他のファイル', + 'gitView.integrate.move': '移動', + 'gitView.integrate.moveCommits': 'コミットを移動', + 'gitView.integrate.moving': '移動中…', + 'gitView.integrate.newSession': '新しいセッション', + 'gitView.integrate.noActiveSession': 'アクティブなセッションがありません', + 'gitView.integrate.noActiveSessionDescription': 'セッションを開くか作成して続行してください。', + 'gitView.integrate.noCommitsToMove': '移動するコミットがありません。', + 'gitView.integrate.noCommitsToMoveToast': '移動するコミットがありません', + 'gitView.integrate.previewUnavailable': 'プレビューは利用できません', + 'gitView.integrate.showAll': 'すべて表示', + 'gitView.integrate.showLess': '表示を減らす', + 'gitView.integrate.showingFirstCommits': '最初のコミットを表示中', + 'gitView.integrate.target': 'ターゲット', + 'gitView.integrate.title': 'コミットの再統合', + 'gitView.integrate.toMoveCount': '移動数', + 'gitView.operation.abort': '中止', + 'gitView.operation.continue': '続行', + 'gitView.operation.inProgressTitle': '{operation}進行中', + 'gitView.operation.merge': 'マージ', + 'gitView.operation.mergeInProgressWithHead': '{head}をマージ中', + 'gitView.operation.mergingMessage': 'マージ中: {message}', + 'gitView.operation.rebase': 'リベース', + 'gitView.operation.rebaseInProgress': 'リベース進行中', + 'gitView.operation.rebasingOnto': '{headName}を{onto}にリベース中', + 'gitView.operation.resolveConflictsHint': '競合を解決してから操作を続行してください。', + 'gitView.operation.resolveWithAi': 'AIで解決', + 'gitView.stash.confirmButton': '{operation}', + 'gitView.stash.description': '{operation}を開始する前にローカル変更をスタッシュします。', + 'gitView.stash.mergeWith': 'に', + 'gitView.stash.rebaseOnto': 'に', + 'gitView.stash.restoreAfterOperation': '{operation}後にスタッシュした変更を復元', + 'gitView.stash.restoreAria': '操作後にスタッシュした変更を復元', + 'gitView.stash.stepRestore': 'スタッシュした変更を復元', + 'gitView.stash.stepStash': '未コミットの変更をスタッシュ', + 'gitView.stash.thisWill': '以下の操作を行います:', + 'gitView.stash.title': '未コミットの変更', + 'gitView.stashes.actions.apply': '適用', + 'gitView.stashes.actions.drop': '削除', + 'gitView.stashes.actions.pop': '取り出し', + 'gitView.stashes.actions.stashCurrent': '現在の変更をスタッシュ', + 'gitView.stashes.actions.stashCurrentWithCount': '{count}ファイルをスタッシュ', + 'gitView.stashes.confirm.drop': '{ref}を削除しますか?', + 'gitView.stashes.description': 'このリポジトリのGitスタッシュを保存、復元、クリーンアップします。', + 'gitView.stashes.empty.list': 'まだスタッシュがありません。', + 'gitView.stashes.empty.search': '一致するスタッシュがありません。', + 'gitView.stashes.includeUntrackedHint': '追跡されていないファイルは自動的に含まれます。', + 'gitView.stashes.fileCount': '{count}ファイル', + 'gitView.stashes.fileCountLoading': 'ファイル数を計算中...', + 'gitView.stashes.itemNumber': '#{number}', + 'gitView.stashes.latestLabel': '最新', + 'gitView.stashes.messagePlaceholder': 'スタッシュ名', + 'gitView.stashes.searchPlaceholder': 'スタッシュを検索', + 'gitView.stashes.title': 'スタッシュ', + 'gitView.stashes.toast.applyFailed': 'スタッシュの適用に失敗しました', + 'gitView.stashes.toast.applySuccess': 'スタッシュを適用しました', + 'gitView.stashes.toast.createFailed': '変更のスタッシュに失敗しました', + 'gitView.stashes.toast.created': '変更をスタッシュしました', + 'gitView.stashes.toast.dropFailed': 'スタッシュの削除に失敗しました', + 'gitView.stashes.toast.dropSuccess': 'スタッシュを削除しました', + 'gitView.stashes.toast.loadFailed': 'スタッシュの読み込みに失敗しました', + 'gitView.stashes.toast.noChanges': 'スタッシュするローカル変更がありません', + 'gitView.stashes.toast.popFailed': 'スタッシュの取り出しに失敗しました', + 'gitView.stashes.toast.popSuccess': 'スタッシュを取り出しました', + 'gitView.stashes.untitled': '無題のスタッシュ', + 'gitView.sync.fetch': 'フェッチ', + 'gitView.sync.fetchFromRemote': '{name}からフェッチ', + 'gitView.sync.fetchTooltip': 'リモートからフェッチ', + 'gitView.sync.commitOrStashTooltip': '同期する前に変更をコミットまたはスタッシュしてください', + 'gitView.sync.moreActionsAria': 'その他の同期アクション', + 'gitView.sync.noRemoteTooltip': 'リモートが設定されていません', + 'gitView.sync.pull': 'プル', + 'gitView.sync.pullTooltip': '変更をプル', + 'gitView.sync.pullTooltipBehind': '変更をプル({count}遅延)', + 'gitView.sync.push': 'プッシュ', + 'gitView.sync.pushTooltip': '変更をプッシュ', + 'gitView.sync.pushTooltipAhead': '変更をプッシュ({count}先行)', + 'gitView.sync.sync': '同期', + 'gitView.sync.syncChanges': '変更を同期', + 'gitView.sync.syncChangesTooltip': '変更を同期({behind}↓ {ahead}↑)', + 'gitView.sync.syncChangesWithCounts': '変更を同期 {behind}↓ {ahead}↑', + 'gitView.sync.syncCounts': '{behind}↓ {ahead}↑', + 'gitView.branch.actionsUnavailable': 'このリポジトリ状態ではブランチ操作は利用できません', + 'gitView.conflict.noDetailsAvailable': '競合の詳細はありません', + 'gitView.empty.notGitRepository': 'このディレクトリはGitリポジトリではありません', + 'gitView.empty.notGitRepositoryDescription': 'このディレクトリでGitを初期化するか、リポジトリを開いてください。', + 'gitView.empty.selectSessionOrDirectory': 'セッションまたはディレクトリを選択してGitステータスを表示', + 'gitView.empty.worktreeFeaturesUnavailable': 'このワークスペースモードではワークツリー機能は利用できません。', + 'gitView.empty.worktreeSetupDescription': 'ワークツリーのセットアップを完了し、リポジトリ状態を準備中。', + 'gitView.empty.worktreeSetupInProgress': 'ワークツリーのセットアップ進行中', + 'worktree.bootstrap.toast.failed': 'ワークツリーのセットアップに失敗しました', + 'worktree.bootstrap.toast.failedDescription': 'ワークツリーは作成されましたが、バックグラウンドセットアップが完了しませんでした。', + 'worktree.bootstrap.toast.timeoutDescription': 'ワークツリーは作成されましたが、バックグラウンドセットアップがタイムアウトしました。', + 'gitView.gitmoji.empty': 'Gitmojiが見つかりません', + 'gitView.gitmoji.searchPlaceholder': 'Gitmojiを検索...', + 'gitView.gitmoji.title': 'Gitmojiを挿入', + 'gitView.history.dialogDescription': '最近のコミットを閲覧し、変更されたファイルを確認します。', + 'gitView.loading.checkingRepository': 'リポジトリを確認中...', + 'gitView.loading.loading': '読み込み中...', + 'gitView.pr.actions.add': '追加', + 'gitView.pr.actions.cancelEditing': '編集をキャンセル', + 'gitView.pr.actions.cancelEditingAria': 'PR編集をキャンセル', + 'gitView.pr.actions.createPr': 'PRを作成', + 'gitView.pr.actions.edit': '編集', + 'gitView.pr.actions.editPr': 'PRを編集', + 'gitView.pr.actions.editPrAria': 'プルリクエストを編集', + 'gitView.pr.actions.hide': '非表示', + 'gitView.pr.actions.markReady': '準備完了にする', + 'gitView.pr.actions.markReadyAria': 'プルリクエストをレビュー準備完了にする', + 'gitView.pr.actions.mergePr': 'PRをマージ', + 'gitView.pr.actions.mergePrAria': 'プルリクエストをマージ', + 'gitView.pr.actions.openChecks': 'チェックを開く', + 'gitView.pr.actions.openChecksAria': '失敗したチェックを開く', + 'gitView.pr.actions.openComments': 'コメントを開く', + 'gitView.pr.actions.openCommentsAria': 'プルリクエストのコメントを開く', + 'gitView.pr.actions.openOnGitHub': 'GitHubで開く', + 'gitView.pr.actions.openOnGitHubAria': 'プルリクエストをGitHubで開く', + 'gitView.pr.actions.openSettings': '設定を開く', + 'gitView.pr.actions.repo': 'リポジトリ', + 'gitView.pr.actions.resolveFailedChecks': '失敗したチェックを解決', + 'gitView.pr.actions.resolveFailedChecksAria': '失敗したチェックをエージェントに送信', + 'gitView.pr.actions.savePr': 'PRを保存', + 'gitView.pr.actions.savePrAria': 'プルリクエストの変更を保存', + 'gitView.pr.actions.sendCommentToAgent': 'コメントをエージェントに送信', + 'gitView.pr.actions.sendCommentToAgentAria': 'このコメントをエージェントに送信', + 'gitView.pr.actions.sendToAgent': 'エージェントに送信', + 'gitView.pr.actions.shareComments': 'コメントを共有', + 'gitView.pr.actions.shareCommentsAria': 'プルリクエストのコメントをエージェントに送信', + 'gitView.pr.actions.toggleDraftAria': '下書き状態を切り替え', + 'gitView.pr.actions.refresh': 'PRステータスを更新', + 'gitView.pr.actions.refreshAria': 'プルリクエストのステータスを更新', + 'gitView.pr.additionalContext.added': '追加済み', + 'gitView.pr.additionalContext.hint': 'より良いレビューのために追加のコンテキストを提供します。', + 'gitView.pr.additionalContext.optional': '任意', + 'gitView.pr.additionalContext.title': '追加コンテキスト', + 'gitView.pr.checkDetails.empty': 'チェックの詳細はありません', + 'gitView.pr.checkDetails.title': '失敗したチェックの詳細', + 'gitView.pr.checkingStatus': 'プルリクエストのステータスを確認中...', + 'gitView.pr.checks.label': 'チェック', + 'gitView.pr.checks.completedLabel': '完了', + 'gitView.pr.checks.conclusionLabel': '結論', + 'gitView.pr.checks.startedLabel': '開始', + 'gitView.pr.checks.statusLabel': 'ステータス', + 'gitView.pr.checks.stepLabel': 'ステップ', + 'gitView.pr.checks.steps': 'ステップ', + 'gitView.pr.comments.empty': 'コメントが見つかりません', + 'gitView.pr.comments.generalContext': '一般コメント', + 'gitView.pr.comments.reviewContext': 'レビューコメント', + 'gitView.pr.comments.title': 'コメント', + 'gitView.pr.comments.unknownAuthor': '不明な作成者', + 'gitView.pr.createTitle': 'プルリクエストを作成', + 'gitView.pr.draftMustBeReady': 'マージ前に下書きPRを準備完了にする必要があります。', + 'gitView.pr.field.baseBranch': 'ベースブランチ', + 'gitView.pr.field.description': '説明', + 'gitView.pr.field.draft': '下書き', + 'gitView.pr.field.title': 'タイトル', + 'gitView.pr.githubNotConnected': 'GitHubが接続されていません', + 'gitView.pr.loadingDescription': '説明を読み込み中...', + 'gitView.pr.mergeMethod.merge': 'マージコミットを作成', + 'gitView.pr.mergeMethod.rebase': 'リベースしてマージ', + 'gitView.pr.mergeMethod.squash': 'スカッシュしてマージ', + 'gitView.pr.noDescription': '説明なし', + 'gitView.pr.noMergePermission': 'このプルリクエストをマージする権限がありません。', + 'gitView.pr.notMergeable': 'マージ不可', + 'gitView.pr.numberLabel': 'PR #{number}', + 'gitView.pr.placeholder.additionalContext': '制約、ロールアウトノート、レビューアーコンテキスト...', + 'gitView.pr.placeholder.description': '変更内容を説明...', + 'gitView.pr.placeholder.main': 'プルリクエストを要約', + 'gitView.pr.placeholder.selectBaseBranch': 'ベースブランチを選択', + 'gitView.pr.placeholder.title': 'プルリクエストのタイトル', + 'gitView.pr.placeholder.whatChanged': '何が変わったのか、なぜか?', + 'gitView.pr.statusUnavailable': 'プルリクエストのステータスは利用できません', + 'gitView.pr.toast.baseBranchRequired': 'ベースブランチを選択してください', + 'gitView.pr.toast.baseMustDifferFromHead': 'ベースブランチは現在のブランチと異なる必要があります', + 'gitView.pr.toast.createPrFailed': 'プルリクエストの作成に失敗しました', + 'gitView.pr.toast.generateDescriptionFailed': 'プルリクエストの説明の生成に失敗しました', + 'gitView.pr.toast.githubApiUnavailable': 'GitHub APIは利用できません', + 'gitView.pr.toast.loadCheckDetailsFailed': 'チェックの詳細の読み込みに失敗しました', + 'gitView.pr.toast.loadChecksFailed': 'プルリクエストのチェックの読み込みに失敗しました', + 'gitView.pr.toast.loadCommentsFailed': 'コメントの読み込みに失敗しました', + 'gitView.pr.toast.loadPrCommentsFailed': 'プルリクエストのコメントの読み込みに失敗しました', + 'gitView.pr.toast.markReadyFailed': 'プルリクエストの準備完了のマークに失敗しました', + 'gitView.pr.toast.markedReady': 'プルリクエストはレビュー準備完了とマークされました', + 'gitView.pr.toast.mergeFailed': 'プルリクエストのマージに失敗しました', + 'gitView.pr.toast.noActiveSession': 'アクティブなチャットセッションがありません', + 'gitView.pr.toast.noActiveSessionDescription': 'チャットセッションを開くか作成してエージェントにコンテキストを送信してください。', + 'gitView.pr.toast.noFailedChecks': '失敗したチェックはありません', + 'gitView.pr.toast.noModelSelected': '先にモデルを選択してください', + 'gitView.pr.toast.noPrComments': 'プルリクエストのコメントが見つかりません', + 'gitView.pr.toast.prCreated': 'プルリクエストを作成しました', + 'gitView.pr.toast.prMerged': 'プルリクエストをマージしました', + 'gitView.pr.toast.prNotMerged': 'プルリクエストはマージされませんでした', + 'gitView.pr.toast.prUpdated': 'プルリクエストを更新しました', + 'gitView.pr.toast.sendMessageFailed': 'エージェントへのメッセージ送信に失敗しました', + 'gitView.pr.toast.titleRequired': 'タイトルが必要です', + 'gitView.pr.toast.updatePrFailed': 'プルリクエストの更新に失敗しました', + 'gitView.pullRequest.createHint': 'このブランチからプルリクエストを作成・管理します。', + 'gitView.pullRequest.availableOnFeatureBranches': '現在のブランチがプルリクエストを開ける場合に利用可能です。', + 'gitView.pullRequest.title': 'プルリクエスト', + 'gitView.tabs.commit': 'コミット', + 'gitView.tabs.pr': 'PR', + 'gitView.tabs.update': '更新', + 'gitView.tabs.worktree': 'ワークツリー', + 'gitView.toast.abortOperationFailed': '操作の中止に失敗しました', + 'gitView.toast.appliedIdentity': 'IDを適用しました: {name}', + 'gitView.toast.applyIdentityFailed': 'IDの適用に失敗しました', + 'gitView.toast.branchCreatedLocally': 'ブランチをローカルに作成しましたが、アップストリームの設定に失敗しました。', + 'gitView.toast.cannotCheckout': 'ブランチをチェックアウトできません: {reason}', + 'gitView.toast.cannotCreateBranch': 'ブランチを作成できません: {reason}', + 'gitView.toast.cannotRemoveOriginRemote': 'originリモートは削除できません', + 'gitView.toast.cannotRenameBranch': 'ブランチ名を変更できません: {reason}', + 'gitView.toast.checkedOut': '{name}をチェックアウトしました', + 'gitView.toast.checkoutFailed': '{name}のチェックアウトに失敗しました', + 'gitView.toast.commitCreated': 'コミットを作成しました', + 'gitView.toast.commitHashCopied': 'コミットハッシュをコピーしました', + 'gitView.toast.continueOperationFailed': '操作の続行に失敗しました', + 'gitView.toast.copyFailed': 'コピーに失敗しました', + 'gitView.toast.createBranchFailed': 'ブランチの作成に失敗しました', + 'gitView.toast.createCommitFailed': 'コミットの作成に失敗しました', + 'gitView.toast.createdBranch': 'ブランチ{name}を作成しました', + 'gitView.toast.enterCommitMessage': 'コミットメッセージを入力してください', + 'gitView.toast.fetchedFromRemote': '{name}からフェッチしました', + 'gitView.toast.generateCommitMessageFailed': 'コミットメッセージの生成に失敗しました', + 'gitView.toast.mergeAborted': 'マージを中止しました', + 'gitView.toast.mergeCompleted': 'マージが完了しました', + 'gitView.toast.mergeConflictsDetected': 'マージの競合が検出されました', + 'gitView.toast.mergedIntoBranch': '{branch}を{currentBranch}にマージしました', + 'gitView.toast.pulledFilesPlural': '{count}ファイルを{name}からプルしました', + 'gitView.toast.pulledFilesSingle': '{count}ファイルを{name}からプルしました', + 'gitView.toast.pushedToUpstream': '{name}にプッシュしました', + 'gitView.toast.commitOrStashBeforeSync': '同期する前に変更をコミットまたはスタッシュしてください', + 'gitView.toast.alreadyUpToDate': 'すでに最新です', + 'gitView.toast.syncedPulledPluralAndPushed': '{count}ファイルを{name}からプルしてアップストリームにプッシュしました', + 'gitView.toast.syncedPulledSingleAndPushed': '{count}ファイルを{name}からプルしてアップストリームにプッシュしました', + 'gitView.toast.syncedChanges': '変更を同期しました', + 'gitView.toast.rebaseAborted': 'リベースを中止しました', + 'gitView.toast.rebaseConflictsDetected': 'リベースの競合が検出されました', + 'gitView.toast.rebaseStepCompleted': 'リベースのステップが完了しました', + 'gitView.toast.rebasedOntoBranch': '{currentBranch}を{branch}にリベースしました', + 'gitView.toast.refreshRepositoryFailed': 'リポジトリの更新に失敗しました', + 'gitView.toast.remoteNameRequired': 'リモート名が必要です', + 'gitView.toast.removedRemote': 'リモート{name}を削除しました', + 'gitView.toast.renameBranchFailed': '{oldName}から{newName}への名前変更に失敗しました', + 'gitView.toast.renamedBranch': '{oldName}を{newName}に名前変更しました', + 'gitView.toast.restoreStashFailed': 'スタッシュの復元に失敗しました', + 'gitView.toast.restoreStashManually': 'スタッシュの手動復元が必要です', + 'gitView.toast.revertFailed': '変更の取り消しに失敗しました', + 'gitView.toast.revertedFile': '{path}を元に戻しました', + 'gitView.toast.revertedFilesPlural': '{count}ファイルを元に戻しました', + 'gitView.toast.revertedFilesSingle': '{count}ファイルを元に戻しました', + 'gitView.toast.revertedSomePlural': '{success}ファイルを元に戻しました、{failed}は失敗', + 'gitView.toast.revertedSomeSingle': '{success}ファイルを元に戻しました、{failed}は失敗', + 'gitView.toast.stageFileFailed': '変更のステージに失敗しました', + 'gitView.toast.stageFileToCommit': 'コミットするには少なくとも1ファイルをステージしてください', + 'gitView.toast.stageFileToDescribe': '説明するには少なくとも1ファイルをステージしてください', + 'gitView.toast.selectFileToCommit': 'コミットするには少なくとも1ファイルを選択してください', + 'gitView.toast.selectFileToDescribe': '説明するには少なくとも1ファイルを選択してください', + 'gitView.toast.stashedRestored': 'スタッシュした変更を復元しました', + 'gitView.toast.syncActionFailed': '{action}に失敗しました', + 'gitView.toast.unstageFileFailed': '変更のアンステージに失敗しました', + 'gitView.toast.upstreamSet': '{branch}のアップストリームを{remote}に設定しました', + 'gitView.worktree.availableInWorktreeMode': 'ワークツリーモードでのみ利用可能', + 'contextPanel.mode.chat': 'チャット', + 'contextPanel.mode.files': 'ファイル', + 'contextPanel.mode.diff': '変更', + 'contextPanel.mode.stagedDiff': 'ステージ済み差分', + 'contextPanel.mode.workingDiff': '作業中差分', + 'contextPanel.mode.plan': '計画', + 'contextPanel.mode.context': 'コンテキスト', + 'contextPanel.mode.preview': 'プレビュー', + 'contextPanel.mode.browser': 'ブラウザ', + 'contextPanel.browser.open': 'ブラウザパネルを開く', + 'contextPanel.browser.addressAria': 'ブラウザアドレス', + 'contextPanel.browser.empty': 'ウェブブラウザ', + 'contextPanel.browser.emptyHint': '上のアドレスバーにURLを入力してウェブを閲覧', + 'contextPanel.browser.inspectUnavailable': 'このページはブラウザパネルから検査できません。', + 'contextPanel.browser.trustNotice': 'ここで開かれたページはOpenChamberへの完全なアクセス権を持ちます — 検査とスクリーンショットに必要です。信頼できるサイトのみを開いてください: 悪意のあるページがデータを読み取ったりあなたの代わりに行動したりする可能性があります。', + 'contextPanel.tab.closeTabAria': '{label}タブを閉じる', + 'contextPanel.actions.collapsePanel': 'パネルを折りたたむ', + 'contextPanel.actions.expandPanel': 'パネルを展開', + 'contextPanel.actions.closePanel': 'パネルを閉じる', + 'contextPanel.actions.resizePanelAria': 'コンテキストパネルのサイズを変更', + 'contextPanel.iframe.sessionChatTitle': 'セッションチャット {sessionID}', + 'contextPanel.preview.actions.reload': 'プレビューを再読み込み', + 'contextPanel.preview.actions.openExternal': 'ブラウザで開く', + 'contextPanel.preview.actions.retry': '再試行', + 'contextPanel.preview.iframeTitle': 'プレビュー', + 'contextPanel.preview.invalidUrl': 'プレビューには有効なhttp(s) URLが必要です。', + 'contextPanel.preview.empty': 'プレビューURLがありません', + 'contextPanel.preview.loading': 'プレビュープロキシに接続中...', + 'contextPanel.preview.proxyError': 'プレビュープロキシを開始できませんでした。', + 'contextPanel.preview.upstreamUnreachable': '開発サーバーが応答していません。', + 'contextPanel.preview.upstreamUnreachableHint': '開発サーバーがまだ実行中であることを確認してから再試行してください。', + 'contextPanel.preview.startingServer': '開発サーバーを起動中...', + 'contextPanel.preview.startingServerHint': 'サーバーが接続を受け付けるのを待っています。', + 'contextPanel.preview.title': 'プレビュー', + 'contextPanel.preview.description': 'プロジェクトアクションまたはターミナルのプレビューボタンを使用してプレビューを開きます。', + 'contextPanel.preview.startPreview': 'プレビューを開始', + 'contextPanel.preview.starting': '開始中...', + 'contextPanel.preview.noDevServer': '開発サーバーコマンドが見つかりません。プロジェクトアクションを設定するか、package.jsonに「dev」スクリプトを追加してください。', + 'contextPanel.preview.startFailed': 'プレビューサーバーの起動に失敗しました。', + 'contextPanel.preview.serverExited': '開発サーバーが予期せず終了しました。', + 'contextPanel.preview.noUrlDetected': '開発サーバーは起動しましたが、出力からURLが検出されませんでした。プレビューターミナルタブを開いてログを確認してください。', + 'contextPanel.preview.serverExitedWithLog': '開発サーバーが予期せず終了しました。最終出力:\n\n{log}', + 'contextPanel.preview.noUrlDetectedWithLog': '開発サーバーに到達できませんでした。最終出力:\n\n{log}', + 'contextPanel.preview.console.open': 'プレビューコンソールを開く', + 'contextPanel.preview.console.waiting': 'プレビューコンソールを待機中', + 'contextPanel.preview.console.title': 'プレビューコンソール', + 'contextPanel.preview.console.attach': '添付', + 'contextPanel.preview.console.copy': 'コピー', + 'contextPanel.preview.console.clear': 'クリア', + 'contextPanel.preview.console.empty': 'まだプレビューコンソールイベントはありません。', + 'contextPanel.preview.console.noFilteredEvents': 'このフィルターに一致するイベントはありません。', + 'contextPanel.preview.console.runtimeError': 'ランタイムエラー', + 'contextPanel.preview.console.copied': 'プレビューコンソールをコピーしました', + 'contextPanel.preview.console.copyFailed': 'プレビューコンソールのコピーに失敗しました', + 'contextPanel.preview.console.attached': 'プレビューコンソールをチャットに添付しました', + 'contextPanel.preview.console.attachNoSession': 'プレビューログを添付する前にチャットセッションを開いてください', + 'contextPanel.preview.console.attachAnnotation': 'これらはこのプロジェクトの開発サーバーからのブラウザコンソールログです。', + 'contextPanel.preview.inspect.toggle': 'プレビュー要素を検査', + 'contextPanel.preview.inspect.attached': 'プレビュー注釈をチャットに添付しました', + 'contextPanel.preview.inspect.attachNoSession': 'プレビュー注釈を添付する前にチャットセッションを開いてください', + 'contextPanel.preview.inspect.attachAnnotation': 'これはアプリ内プレビューから選択したDOM要素です。', + 'contextPanel.preview.inspect.attachAnnotationWithScreenshot': 'これはアプリ内プレビューから選択したDOM要素です。選択した要素をハイライトしたプレビュー領域のスクリーンショットが添付されています。', + 'contextPanel.preview.console.filter.all': 'すべて', + 'contextPanel.preview.console.filter.errors': 'エラー', + 'contextPanel.preview.console.filter.warnings': '警告', + 'contextPanel.preview.console.filter.logs': 'ログ', + 'terminalView.preview.open': 'プレビュー', + 'terminalView.preview.openTitle': 'プレビューペインを開く', + 'sidebarFilesTree.menu.rename': '名前の変更', + 'sidebarFilesTree.menu.copyPath': 'パスをコピー', + 'sidebarFilesTree.menu.save': '保存', + 'sidebarFilesTree.menu.newFile': '新しいファイル', + 'sidebarFilesTree.menu.newFolder': '新しいフォルダ', + 'sidebarFilesTree.menu.delete': '削除', + 'sidebarFilesTree.toast.pathCopied': 'パスをコピーしました', + 'sidebarFilesTree.toast.copyFailed': 'コピーに失敗しました', + 'sidebarFilesTree.toast.revealFailed': 'パスの表示に失敗しました', + 'sidebarFilesTree.toast.filenameRequired': 'ファイル名が必要です', + 'sidebarFilesTree.toast.writeNotSupported': '書き込みはサポートされていません', + 'sidebarFilesTree.toast.fileCreated': 'ファイルを作成しました', + 'sidebarFilesTree.toast.operationFailed': '操作に失敗しました', + 'sidebarFilesTree.toast.folderNameRequired': 'フォルダ名が必要です', + 'sidebarFilesTree.toast.folderCreated': 'フォルダを作成しました', + 'sidebarFilesTree.toast.nameRequired': '名前が必要です', + 'sidebarFilesTree.toast.renameNotSupported': '名前の変更はサポートされていません', + 'sidebarFilesTree.toast.renamedSuccessfully': '名前の変更に成功しました', + 'sidebarFilesTree.toast.deleteNotSupported': '削除はサポートされていません', + 'sidebarFilesTree.toast.deletedSuccessfully': '削除に成功しました', + 'sidebarFilesTree.search.placeholder': 'ファイルを検索...', + 'sidebarFilesTree.search.clearAria': '検索をクリア', + 'sidebarFilesTree.actions.newFileTitle': '新しいファイル', + 'sidebarFilesTree.actions.newFolderTitle': '新しいフォルダ', + 'sidebarFilesTree.actions.refreshTitle': '更新', + 'sidebarFilesTree.actions.fileMenuTitle': 'ファイルメニュー', + 'sidebarFilesTree.state.searching': '検索中...', + 'sidebarFilesTree.state.loading': '読み込み中...', + 'sidebarFilesTree.dialog.createFile.title': 'ファイルを作成', + 'sidebarFilesTree.dialog.createFolder.title': 'フォルダを作成', + 'sidebarFilesTree.dialog.rename.title': '名前の変更', + 'sidebarFilesTree.dialog.delete.title': '削除', + 'sidebarFilesTree.dialog.createFile.description': '{path}に新しいファイルを作成', + 'sidebarFilesTree.dialog.createFolder.description': '{path}に新しいフォルダを作成', + 'sidebarFilesTree.dialog.rename.description': '{name}の名前を変更', + 'sidebarFilesTree.dialog.delete.description': '{name}を削除してもよろしいですか?この操作は元に戻せません。', + 'sidebarFilesTree.dialog.rootFallback': 'ルート', + 'sidebarFilesTree.dialog.rename.placeholder': '新しい名前', + 'sidebarFilesTree.dialog.namePlaceholder': '名前', + 'sidebarFilesTree.dialog.cancel': 'キャンセル', + 'sidebarFilesTree.dialog.confirm': '確認', + 'sidebarFilesTree.dialog.delete.confirm': '削除', + 'filesView.dialog.createFile.title': 'ファイルを作成', + 'filesView.dialog.createFolder.title': 'フォルダを作成', + 'filesView.dialog.rename.title': '名前の変更', + 'filesView.dialog.delete.title': '削除', + 'filesView.dialog.createFile.description': '{path}に新しいファイルを作成', + 'filesView.dialog.createFolder.description': '{path}に新しいフォルダを作成', + 'filesView.dialog.rename.description': '{name}の名前を変更', + 'filesView.dialog.delete.description': '{name}を削除してもよろしいですか?この操作は元に戻せません。', + 'filesView.dialog.rootFallback': 'ルート', + 'filesView.dialog.rename.placeholder': '新しい名前', + 'filesView.dialog.namePlaceholder': '名前', + 'filesView.dialog.cancel': 'キャンセル', + 'filesView.dialog.confirm': '確認', + 'filesView.dialog.delete.confirm': '削除', + 'filesView.editor.saving': '保存中...', + 'filesView.editor.saved': '保存しました', + 'filesView.editor.autoSaveOn': '自動保存オン', + 'filesView.editor.manualSave': '手動保存', + 'filesView.editor.saveNowTitle': '今すぐ保存({shortcut})- 1.5秒後に自動保存', + 'filesView.editor.saveNowManualTitle': '今すぐ保存({shortcut})', + 'filesView.editor.saveAria': '保存({shortcut})', + 'filesView.editor.openInDesktopApp': 'デスクトップアプリで開く', + 'filesView.editor.refreshApps': 'アプリを更新', + 'filesView.editor.disableLineWrap': '行の折り返しを無効にする', + 'filesView.editor.enableLineWrap': '行の折り返しを有効にする', + 'filesView.editor.findInFile': 'ファイル内を検索', + 'filesView.editor.goToLine': '指定行に移動', + 'filesView.editor.switchToTextView': 'テキストビューに切り替え', + 'filesView.editor.switchToTreeView': 'ツリービューに切り替え', + 'filesView.toast.copyFailed': 'コピーに失敗しました', + 'filesView.toast.openInAppFailed': '{app}で開くのに失敗しました', + 'filesView.toast.savingNotSupported': '保存はサポートされていません', + 'filesView.toast.writeFileFailed': 'ファイルの書き込みに失敗しました', + 'filesView.toast.saveFailed': '保存に失敗しました', + 'filesView.editor.copyFileContents': 'ファイル内容をコピー', + 'filesView.editor.copyFilePathTitle': 'ファイルパスをコピー({path})', + 'filesView.editor.saveFile': 'ファイルを保存', + 'filesView.editor.exitFullscreen': '全画面を終了', + 'filesView.editor.fullscreen': '全画面', + 'filesView.unsaved.title': '未保存の変更', + 'filesView.unsaved.description': '続行する前に編集内容を保存しますか?', + 'filesView.unsaved.saveChanges': '変更を保存', + 'filesView.unsaved.discard': '破棄', + 'filesView.editor.back': '戻る', + 'filesView.editor.openFilesAria': '開いているファイル', + 'filesView.editor.closeFileAria': '{name}を閉じる', + 'filesView.editor.selectFile': 'ファイルを選択', + 'filesView.editor.showControlsAria': 'エディターコントロールを表示', + 'filesView.editor.controlsTitle': 'エディターコントロール', + 'filesView.editor.pickFileFromTree': 'ツリーからファイルを選択してください。', + 'filesView.state.loading': '読み込み中...', + 'filesView.state.openingFileAtChange': '変更箇所のファイルを開いています...', + 'filesView.tree.search.placeholder': 'ファイルを検索...', + 'filesView.tree.search.clearAria': '検索をクリア', + 'filesView.tree.search.searching': '検索中...', + 'filesView.tree.actions.newFileTitle': '新しいファイル', + 'filesView.tree.actions.newFolderTitle': '新しいフォルダ', + 'filesView.tree.actions.refreshTitle': '更新', + 'filesView.editor.imageAltFallback': '画像', + 'filesView.error.jsonViewerUnavailable': 'JSONビューアーは利用できません', + 'filesView.error.switchToTextMode': 'テキストモードに切り替えて生の内容を表示してください。', + 'filesView.warning.largeFilePreviewLimited': 'このファイルは大きいです({sizeKb}KB)。プレビューが制限される場合があります。', + 'filesView.error.previewUnavailable': 'プレビューは利用できません', + 'filesView.error.switchToEditMode': '編集モードに切り替えて問題を修正してください。', + 'filesView.error.readFileFailed': 'ファイルの読み込みに失敗しました', + 'filesView.editor.htmlPreviewTitle': 'HTMLプレビュー', + 'filesView.diagram.closeDiagramView': 'ダイアグラムビューを閉じる', + 'filesView.diagram.saveDiagram': 'ダイアグラムを保存', + 'contextUsage.aria.label': 'コンテキスト使用量', + 'contextUsage.mobile.title': 'コンテキスト使用量', + 'contextUsage.mobile.usedTokens': '使用トークン', + 'contextUsage.mobile.contextLimit': 'コンテキスト制限', + 'contextUsage.mobile.outputLimit': '出力制限', + 'contextUsage.mobile.usage': '使用量', + 'contextUsage.tooltip.usedTokens': '使用トークン: {tokens}', + 'contextUsage.tooltip.contextLimit': 'コンテキスト制限: {tokens}', + 'contextUsage.tooltip.outputLimit': '出力制限: {tokens}', + 'contextSidebar.session.untitled': '無題のセッション', + 'contextSidebar.empty.openSession': 'セッションを開いてコンテキストを確認します。', + 'contextSidebar.section.context': 'コンテキスト', + 'contextSidebar.section.lastAssistantMessage': '最後のアシスタントメッセージ', + 'contextSidebar.section.rawMessages': '生メッセージ', + 'contextSidebar.context.percentUsed': '{percent}%使用', + 'contextSidebar.breakdown.user': 'ユーザー', + 'contextSidebar.breakdown.assistant': 'アシスタント', + 'contextSidebar.breakdown.toolCalls': 'ツール呼び出し', + 'contextSidebar.breakdown.other': 'その他', + 'contextSidebar.stats.messages': 'メッセージ', + 'contextSidebar.stats.user': 'ユーザー', + 'contextSidebar.stats.assistant': 'アシスタント', + 'contextSidebar.stats.cost': 'コスト', + 'contextSidebar.tokens.input': '入力', + 'contextSidebar.tokens.output': '出力', + 'contextSidebar.tokens.reasoning': '推論', + 'contextSidebar.tokens.cacheRead': 'キャッシュ読み取り', + 'contextSidebar.tokens.cacheWrite': 'キャッシュ書き込み', + 'contextSidebar.tokens.cacheHit': 'キャッシュヒット', + 'contextSidebar.actions.copyJson': 'JSONをコピー', + 'contextSidebar.actions.copy': 'コピー', + 'contextSidebar.actions.copied': 'コピーしました', + 'planView.file.defaultName': '計画', + 'planView.title.default': '計画', + 'planView.error.saveFailed': '保存に失敗しました', + 'planView.error.previewUnavailable': 'プレビューは利用できません', + 'planView.error.switchToEditMode': '編集モードに切り替えて問題を修正してください。', + 'planView.error.writeFailed': '書き込みに失敗しました', + 'planView.error.writePlanFileFailed': '計画ファイルの書き込みに失敗しました({status})', + 'planView.actions.improvePlanAria': '計画を改善', + 'planView.actions.improve': '改善', + 'planView.actions.implementPlanAria': '計画を実装', + 'planView.actions.implement': '実装', + 'planView.actions.sendToNewSession': '新しいセッションに送信', + 'planView.actions.sendToNewWorktreeSession': '新しいワークツリーセッションに送信', + 'planView.actions.copyPlanContents': '計画内容をコピー', + 'planView.state.loading': '読み込み中...', + 'diffView.binary.unavailable': 'このファイルの内容は表示できません。', + 'diffView.change.untracked': '追跡されていないファイル', + 'diffView.change.new': '新しいファイル', + 'diffView.change.deleted': '削除されたファイル', + 'diffView.change.renamed': '名前変更されたファイル', + 'diffView.change.copied': 'コピーされたファイル', + 'diffView.change.modified': '変更されたファイル', + 'diffView.selector.selectFile': 'ファイルを選択', + 'diffView.image.original': '元の画像', + 'diffView.image.modified': '変更後', + 'diffView.image.new': '新しい画像', + 'diffView.image.originalAlt': '元の画像: {path}', + 'diffView.image.modifiedAlt': '変更後: {path}', + 'diffView.section.files': 'ファイル', + 'diffView.state.selectSessionDirectory': 'セッションディレクトリを選択して差分を表示', + 'diffView.state.loadingRepositoryStatus': 'リポジトリステータスを読み込み中...', + 'diffView.state.notGitRepository': 'Gitリポジトリではありません。Gitタブを使用して初期化するかディレクトリを変更してください。', + 'diffView.state.cleanWorkingTree': 'ワーキングツリーはクリーンで、表示する変更はありません', + 'diffView.state.failedToLoadDiff': '差分の読み込みに失敗しました', + 'diffView.state.loadingDiff': '差分を読み込み中...', + 'diffView.state.loadingChanges': '変更を読み込み中...', + 'diffView.state.largeDiff': '大きな差分({count}行変更)', + 'diffView.state.largeDiffDescription': 'レンダリングが遅くなる可能性があります。以下をクリックして差分を表示できます。', + 'diffView.summary.changedFilesSingle': '{count}ファイルが変更されました', + 'diffView.summary.changedFilesPlural': '{count}ファイルが変更されました', + 'diffView.scope.changed': '変更済み', + 'diffView.scope.staged': 'ステージ済み', + 'diffView.scope.selectorAria': '変更モードを選択', + 'diffView.actions.retry': '再試行', + 'diffView.actions.renderAnyway': 'とにかくレンダリング', + 'diffView.actions.expandAll': 'すべて展開', + 'diffView.actions.collapseAll': 'すべて折りたたむ', + 'diffView.actions.loadFullFiles': '全ファイルを読み込む', + 'diffView.actions.disableFullFiles': '全ファイルの読み込みを解除', + 'diffView.actions.disableLineWrap': '行の折り返しを無効にする', + 'diffView.actions.enableLineWrap': '行の折り返しを有効にする', + 'diffView.actions.openFileInEditorAtChange': '変更箇所でファイルをエディターで開く', + 'diffView.actions.openFileAtFirstChangedLine': '最初の変更行でファイルを開く', + 'diffView.actions.review': 'レビュー', + 'diffView.actions.reviewAria': '変更をレビュー', + 'diffView.reviewDialog.title': '変更をレビュー', + 'diffView.reviewDialog.description': '現在の変更に対して別のレビューセッションを開始します。', + 'diffView.reviewDialog.generateHandoff': 'ハンドオフを生成', + 'diffView.reviewDialog.info': 'このフローは変更が実装されたセッションから開始するのが最適です。', + 'diffView.reviewDialog.actions.cancel': 'キャンセル', + 'diffView.reviewDialog.actions.start': 'レビュー', + 'diffView.reviewDialog.actions.starting': '開始中...', + 'diffView.reviewDialog.autoReview': '自動レビューループを実行', + 'diffView.reviewDialog.toast.noSessionDirectory': 'セッションディレクトリは利用できません', + 'diffView.reviewDialog.toast.startFailed': 'レビューフローの開始に失敗しました', + 'diffView.hunk.label': 'ハンク', + 'diffView.hunk.stage': 'ステージ', + 'diffView.hunk.unstage': 'アンステージ', + 'diffView.hunk.discard': '破棄', + 'diffView.hunk.stageTitle': 'ハンク{index}をステージ', + 'diffView.hunk.unstageTitle': 'ハンク{index}をアンステージ', + 'diffView.hunk.discardTitle': 'ハンク{index}を破棄', + 'diffView.hunk.unavailable': 'このハンクはもう利用できません。差分を更新してからもう一度お試しください。', + 'diffView.hunk.unsupported': '個別のハンクのステージングはこのランタイムではサポートされていません。', + 'chat.autoReview.title': 'コードレビューループが実行中です', + 'chat.autoReview.status.waitingForReviewer': 'レビュアーを待機中', + 'chat.autoReview.status.waitingForImplementer': '実装者を待機中', + 'chat.autoReview.reviewSessionLabel': 'レビューセッション', + 'chat.autoReview.actions.open': '開く', + 'chat.autoReview.actions.stop': '停止', + 'rightSidebar.contextNotesTodo.plan.defaultTitle': '計画', + 'rightSidebar.contextNotesTodo.empty.selectProject': 'プロジェクトを選択してメモとTODOを追加します。', + 'rightSidebar.contextNotesTodo.notes.title': 'クイックメモ - {project}', + 'rightSidebar.contextNotesTodo.notes.placeholder': 'コンテキスト、リマインダー、リンクを記録', + 'rightSidebar.contextNotesTodo.todo.title': 'TODO', + 'rightSidebar.contextNotesTodo.todo.itemsSingle': '{count}項目', + 'rightSidebar.contextNotesTodo.todo.itemsPlural': '{count}項目', + 'rightSidebar.contextNotesTodo.todo.clearCompleted': '完了をクリア', + 'rightSidebar.contextNotesTodo.todo.inputPlaceholder': 'TODOを追加', + 'rightSidebar.contextNotesTodo.todo.addAria': 'TODOを追加', + 'rightSidebar.contextNotesTodo.todo.empty': 'まだTODOはありません。このプロジェクトのチェックリストを追加してください。', + 'rightSidebar.contextNotesTodo.todo.actions.markComplete': '「{text}」を完了にする', + 'rightSidebar.contextNotesTodo.todo.actions.collapse': 'TODO「{text}」を折りたたむ', + 'rightSidebar.contextNotesTodo.todo.actions.expand': 'TODO「{text}」を展開', + 'rightSidebar.contextNotesTodo.todo.actions.delete': '「{text}」を削除', + 'rightSidebar.contextNotesTodo.todo.actions.send': '「{text}」を送信', + 'rightSidebar.contextNotesTodo.todo.actions.reorder': '「{text}」を並び替え', + 'rightSidebar.contextNotesTodo.todo.resizeAria': 'TODOリストのサイズを変更', + 'rightSidebar.contextNotesTodo.todo.sendMenu.currentSession': '現在のセッションに送信', + 'rightSidebar.contextNotesTodo.todo.sendMenu.newSession': '新しいセッションに送信', + 'rightSidebar.contextNotesTodo.todo.sendMenu.newWorktreeSession': '新しいワークツリーセッションに送信', + 'rightSidebar.contextNotesTodo.plans.title': '計画', + 'rightSidebar.contextNotesTodo.plans.filesSingle': '{count}ファイル', + 'rightSidebar.contextNotesTodo.plans.filesPlural': '{count}ファイル', + 'rightSidebar.contextNotesTodo.plans.importFromFile': 'ファイルから計画をインポート', + 'rightSidebar.contextNotesTodo.plans.empty': 'まだ保存された計画はありません。', + 'rightSidebar.contextNotesTodo.plans.deletePlan': '計画を削除', + 'rightSidebar.contextNotesTodo.plans.deletePlanWithTitle': '計画「{title}」を削除', + 'rightSidebar.contextNotesTodo.sendDialog.title.newSession': '新しいセッションに送信', + 'rightSidebar.contextNotesTodo.sendDialog.title.newWorktree': '新しいワークツリーに送信', + 'rightSidebar.contextNotesTodo.sendDialog.variant.default': 'デフォルト', + 'rightSidebar.contextNotesTodo.sendDialog.actions.cancel': 'キャンセル', + 'rightSidebar.contextNotesTodo.sendDialog.actions.send': '送信', + 'rightSidebar.contextNotesTodo.sendDialog.actions.sending': '送信中', + 'rightSidebar.contextNotesTodo.toast.saveNotesFailed': 'プロジェクトメモの保存に失敗しました', + 'rightSidebar.contextNotesTodo.toast.loadNotesFailed': 'プロジェクトメモの読み込みに失敗しました', + 'rightSidebar.contextNotesTodo.toast.noActiveSession': 'アクティブなセッションが選択されていません', + 'rightSidebar.contextNotesTodo.toast.sentToCurrentSession': 'TODOを現在のセッションに送信しました', + 'rightSidebar.contextNotesTodo.toast.worktreeRequiresGitRepo': 'ワークツリー操作はGitリポジトリでのみ利用可能です', + 'rightSidebar.contextNotesTodo.toast.createSessionFailed': 'セッションの作成に失敗しました', + 'rightSidebar.contextNotesTodo.toast.sentToNewSession': 'TODOを新しいセッションに送信しました', + 'rightSidebar.contextNotesTodo.toast.sentToNewWorktreeSession': 'TODOを新しいワークツリーセッションに送信しました', + 'rightSidebar.contextNotesTodo.toast.sendTodoFailed': 'TODOの送信に失敗しました', + 'rightSidebar.contextNotesTodo.toast.deletePlanFailed': '計画の削除に失敗しました', + 'rightSidebar.contextNotesTodo.toast.planFileEmpty': '計画ファイルが空です', + 'rightSidebar.contextNotesTodo.toast.importPlanFailed': '計画のインポートに失敗しました', + 'rightSidebar.contextNotesTodo.toast.planImported': '計画をインポートしました', + 'rightSidebar.contextNotesTodo.toast.readPlanFileFailed': '計画ファイルの読み込みに失敗しました', + 'inlineComment.range.lines': '{start}行目~{end}行目', + 'inlineComment.input.placeholder': 'コメントを追加...(Cmd+Enterで保存)', + 'inlineComment.input.placeholderShort': 'コメントを追加...', + 'inlineComment.actions.cancel': 'キャンセル', + 'inlineComment.actions.save': '保存', + 'inlineComment.actions.comment': 'コメント', + 'inlineComment.actions.showLess': '表示を減らす', + 'inlineComment.actions.showMore': 'さらに表示', + 'inlineComment.actions.editComment': 'コメントを編集', + 'inlineComment.actions.deleteComment': 'コメントを削除', + 'inlineComment.toast.selectSessionToSave': 'コメントを保存するセッションを選択してください', + 'header.github.connectedWithLogin': 'GitHub: {login}', + 'header.github.connected': 'GitHubに接続済み', + 'header.github.avatarWithLogin': '{login}のアバター', + 'header.github.avatar': 'GitHubアバター', + 'header.github.accountsTitle': 'GitHubアカウント', + 'header.github.accountSource.oauth': 'OAuth', + 'header.github.accountSource.cli': 'CLI', + 'header.services.openWithCurrent': 'インスタンス、使用量、MCPを開く(現在: {current})', + 'header.services.open': 'サービス、使用量、MCPを開く', + 'header.services.tooltip.currentInstanceWithShortcuts': '現在のインスタンス: {current}({toggle}、次のタブ {nextTab})', + 'header.services.tooltip.servicesWithShortcuts': 'サービス({toggle}、次のタブ {nextTab})', + 'header.services.title': 'サービス', + 'header.services.viewAria': 'サービスを表示', + 'header.services.closeAria': 'サービスを閉じる', + 'header.services.rateLimits': 'レート制限', + 'header.services.refreshRateLimitsAria': 'レート制限を更新', + 'header.services.noRateLimits': 'レート制限は利用できません。', + 'header.services.noRateLimitsReported': 'レート制限は報告されていません。', + 'header.services.remoteUpdate.title': 'リモートインスタンスの更新', + 'header.services.remoteUpdate.checking': '更新を確認中...', + 'header.services.remoteUpdate.upToDate': 'このインスタンスは最新です。', + 'header.services.remoteUpdate.available': 'バージョン{version}がこのインスタンスで利用可能です。', + 'header.services.remoteUpdate.error': 'リモートインスタンスの更新確認に失敗しました', + 'header.services.remoteUpdate.actions.open': '更新', + 'header.services.used': '使用済み', + 'header.services.remaining': '残り', + 'header.services.modelFamily.other': 'その他', + 'header.services.shutdownDev': 'OpenChamberを停止', + 'header.actions.openPlanAria': '計画を開く', + 'header.actions.toggleChangesPanel': '変更パネル', + 'header.actions.toggleChangesPanelAria': '変更パネルの切り替え', + 'header.actions.planWithShortcut': '計画({shortcut})', + 'header.actions.terminalPanelWithShortcut': 'ターミナルパネル({shortcut})', + 'header.actions.toggleTerminalPanelAria': 'ターミナルパネルの切り替え', + 'terminalView.stream.processExitedMessage': '\r\n[プロセスが終了しました{exitCodeSegment}{signalSegment}]\r\n', + 'terminalView.stream.processExitedWithCode': ' コード {exitCode}', + 'terminalView.stream.processExitedWithSignal': '(シグナル {signal})', + 'terminalView.error.sessionEnded': 'ターミナルセッションが終了しました', + 'terminalView.error.connectionFailed': '接続に失敗しました: {message}', + 'terminalView.error.startSessionFailed': 'ターミナルセッションの開始に失敗しました', + 'terminalView.error.restartFailed': 'ターミナルの再起動に失敗しました', + 'terminalView.error.sendInputFailed': '入力の送信に失敗しました', + 'terminalView.empty.noWorkingDirectory': 'ターミナルに利用可能な作業ディレクトリがありません。', + 'terminalView.empty.selectSession': 'セッションを選択してターミナルを開きます。', + 'terminalView.empty.noWorkingDirectoryForSession': 'このセッションに利用可能な作業ディレクトリがありません。', + 'terminalView.actions.retry': '再試行', + 'terminalView.actions.hardRestart': 'ハード再起動', + 'terminalView.actions.hardRestartTitle': '強制終了して新しいセッションを作成', + 'terminalView.quickKeys.escape': 'Esc', + 'terminalView.quickKeys.tabAria': 'Tab', + 'terminalView.quickKeys.controlLabel': 'Ctrl', + 'terminalView.quickKeys.controlModifierAria': 'Control修飾キー', + 'terminalView.quickKeys.commandModifierAria': 'Command修飾キー', + 'terminalView.quickKeys.arrowUpAria': '上矢印', + 'terminalView.quickKeys.arrowLeftAria': '左矢印', + 'terminalView.quickKeys.arrowDownAria': '下矢印', + 'terminalView.quickKeys.arrowRightAria': '右矢印', + 'terminalView.quickKeys.enterAria': 'Enter', + 'terminalView.tabs.closeTabTitle': 'タブを閉じる', + 'terminalView.tabs.newTabTitle': '新しいタブ', + 'terminalView.bottomDock.resizeAria': 'ターミナルパネルのサイズを変更', + 'terminalView.bottomDock.restoreTitle': 'ターミナルパネルの高さを復元', + 'terminalView.bottomDock.restoreAria': 'ターミナルパネルの高さを復元', + 'terminalView.bottomDock.expandTitle': 'ターミナルパネルを展開', + 'terminalView.bottomDock.expandAria': 'ターミナルパネルを展開', + 'terminalView.bottomDock.closeTitle': 'ターミナルパネルを閉じる', + 'terminalView.bottomDock.closeAria': 'ターミナルパネルを閉じる', + 'terminalView.viewport.inputAria': 'ターミナル入力', + 'directoryExplorerDialog.title': 'プロジェクトディレクトリを追加', + 'directoryExplorerDialog.description': 'プロジェクトとして追加するフォルダを選択してください。', + 'directoryExplorerDialog.toggle.showHidden': '隠しファイルを表示', + 'directoryExplorerDialog.pathInput.placeholder': 'パスを入力するかツリーから選択...', + 'directoryExplorerDialog.actions.openingFinder': '開いています...', + 'directoryExplorerDialog.actions.openInFinder': 'Finderで開く', + 'directoryExplorerDialog.actions.adding': '追加中...', + 'directoryExplorerDialog.actions.addProject': 'プロジェクトを追加', + 'directoryExplorerDialog.actions.addLocalProject': 'ローカルプロジェクトを追加', + 'directoryExplorerDialog.actions.cloneRepository': 'リポジトリをクローン', + 'directoryExplorerDialog.actions.cloneAndAdd': 'クローンして追加', + 'directoryExplorerDialog.actions.cloning': 'クローン中...', + 'directoryExplorerDialog.actions.createAndAdd': '作成して追加', + 'directoryExplorerDialog.actions.alreadyAdded': 'すでに追加済み', + 'directoryExplorerDialog.clone.remoteUrlPlaceholder': 'リポジトリURL(HTTPSまたはSSH)', + 'directoryExplorerDialog.browse.directories': 'ディレクトリ', + 'directoryExplorerDialog.browse.loading': 'ディレクトリを読み込み中...', + 'directoryExplorerDialog.browse.empty': '一致するディレクトリがありません。', + 'directoryExplorerDialog.browse.parentDirectory': '親ディレクトリ', + 'directoryExplorerDialog.browse.addedBadge': '追加済み', + 'directoryExplorerDialog.browse.quickAdd': '追加', + 'directoryExplorerDialog.footer.navigate': '移動', + 'directoryExplorerDialog.footer.select': '選択', + 'directoryExplorerDialog.footer.add': '追加', + 'directoryExplorerDialog.shortcut.enter': 'Enter', + 'directoryExplorerDialog.toast.unableToAccessDirectory': 'ディレクトリにアクセスできません', + 'directoryExplorerDialog.toast.desktopDeniedAccess': 'デスクトップがディレクトリアクセスを拒否しました。', + 'directoryExplorerDialog.toast.failedToOpenDirectory': 'ディレクトリを開けませんでした', + 'directoryExplorerDialog.toast.desktopCouldNotGrantAccess': 'デスクトップがファイルアクセスを許可できませんでした。', + 'directoryExplorerDialog.toast.failedToAddProject': 'プロジェクトの追加に失敗しました', + 'directoryExplorerDialog.toast.cloneUrlRequired': 'クローンする前にリポジトリURLを入力してください。', + 'directoryExplorerDialog.toast.selectValidDirectoryPath': '有効なディレクトリパスを選択してください。', + 'directoryExplorerDialog.toast.failedToSelectDirectory': 'ディレクトリの選択に失敗しました', + 'directoryExplorerDialog.toast.unknownError': '不明なエラーが発生しました。', + 'directoryTree.actions.createNewDirectory': '新しいディレクトリを作成', + 'directoryTree.actions.pinDirectory': 'ディレクトリをピン留め', + 'directoryTree.actions.unpinDirectory': 'ディレクトリのピン留めを解除', + 'directoryTree.actions.createDirectory': 'ディレクトリを作成', + 'directoryTree.actions.cancel': 'キャンセル', + 'directoryTree.actions.selectWorkingDirectoryAria': '作業ディレクトリを選択', + 'directoryTree.state.locatingHomeDirectory': 'ホームディレクトリを検索中...', + 'directoryTree.state.loading': '読み込み中...', + 'directoryTree.state.noDirectoriesFound': 'ディレクトリが見つかりません', + 'directoryTree.section.pinned': 'ピン留め', + 'directoryTree.section.browse': '参照', + 'aboutDialog.versionLabel': 'バージョン {version}', + 'aboutDialog.openChamberVersionLabel': 'OpenChamber バージョン {version}', + 'aboutDialog.openCodeVersionLabel': 'OpenCode バージョン {version}', + 'aboutDialog.actions.copyDiagnostics': '診断情報をコピー', + 'aboutDialog.actions.preparingDiagnostics': '診断情報を準備中...', + 'aboutDialog.actions.diagnosticsCopied': '診断情報をコピーしました', + 'aboutDialog.diagnosticsDescription': 'OpenChamberの状態、OpenCodeの状態、ディレクトリ、プロジェクトが含まれます。', + 'aboutDialog.footerNote': 'コミュニティへの愛情を込めて', + 'aboutDialog.toast.copyFailed': 'コピーに失敗しました', + 'aboutDialog.toast.diagnosticsNotReady': '診断情報の準備ができていません。しばらく待ってから再試行してください。', + 'aboutDialog.toast.diagnosticsCopied': '診断情報をコピーしました', + 'helpDialog.title': 'キーボードショートカット', + 'helpDialog.description': 'これらのキーボードショートカットを使ってOpenChamberを効率的に操作できます', + 'helpDialog.section.navigationCommands': 'ナビゲーションとコマンド', + 'helpDialog.section.sessionManagement': 'セッション管理', + 'helpDialog.section.panels': 'パネル', + 'helpDialog.section.interface': 'インターフェース', + 'helpDialog.item.openCommandPalette': 'コマンドパレットを開く', + 'helpDialog.item.showKeyboardShortcuts': 'キーボードショートカットを表示(このダイアログ)', + 'helpDialog.item.toggleSessionSidebar': 'セッションサイドバーの切り替え', + 'helpDialog.item.cycleAgent': 'エージェント切り替え(チャット入力)', + 'helpDialog.item.openModelSelector': 'モデルセレクターを開く', + 'helpDialog.item.navigateModels': 'モデルを移動(ピッカー内)', + 'helpDialog.item.adjustThinkingMode': '思考モード調整(ピッカー内、対応時)', + 'helpDialog.item.cycleThinkingVariant': '思考バリアント切り替え(グローバルショートカット)', + 'helpDialog.item.newWindow': '新しいウィンドウ(デスクトップのみ)', + 'helpDialog.item.createNewSession': '新しいセッションを作成', + 'helpDialog.item.createNewWorktreeDraft': '新しいワークツリー下書きを作成', + 'helpDialog.item.focusChatInput': 'チャット入力にフォーカス', + 'helpDialog.item.abortActiveRun': 'アクティブな実行を中止(ダブルプレス)', + 'helpDialog.item.toggleRightSidebar': '右サイドバーの切り替え', + 'helpDialog.item.openRightSidebarGitTab': '右サイドバーのGitタブを開く', + 'helpDialog.item.openRightSidebarFilesTab': '右サイドバーのファイルタブを開く', + 'helpDialog.item.cycleRightSidebarTab': '右サイドバータブの切り替え', + 'helpDialog.item.toggleTerminalDock': 'ターミナルドックの切り替え', + 'helpDialog.item.toggleTerminalExpanded': 'ターミナル展開の切り替え', + 'helpDialog.item.togglePlanContextPanel': '計画コンテキストパネルの切り替え', + 'helpDialog.item.cycleTheme': 'テーマ切り替え(ライト→ダーク→システム)', + 'helpDialog.item.switchProject': 'プロジェクトを切り替え', + 'helpDialog.item.toggleServicesMenu': 'サービスの切り替え', + 'helpDialog.item.cycleServicesTab': 'サービス変数の切り替え', + 'helpDialog.item.openSettings': '設定を開く', + 'helpDialog.keyCombiner.or': 'または', + 'helpDialog.proTips.title': 'プロのヒント:', + 'helpDialog.proTips.commandPalette': 'コマンドパレット({shortcut})を使うとすべての操作にすばやくアクセスできます', + 'helpDialog.proTips.recentSessions': '最近の5つのセッションがコマンドパレットに表示されます', + 'helpDialog.proTips.themeCycling': 'テーマの切り替えはセッション間で設定が記憶されます', + 'header.actions.rightSidebarWithShortcut': '右サイドバー({shortcut})', + 'header.actions.toggleRightSidebarAria': '右サイドバーの切り替え', + 'header.actions.openAppMenu': 'OpenChamberメニュー', + 'header.actions.openAppMenuAria': 'OpenChamberメニューを開く', + 'header.actions.openSessionsWithShortcut': 'セッションを開く({shortcut})', + 'header.actions.openSessionsAria': 'セッションを開く', + 'header.actions.closeSessionsAria': 'セッションを閉じる', + 'header.actions.newSessionAria': '新しいセッション', + 'header.actions.newSessionWithShortcut': '新しいセッション({shortcut})', + 'header.actions.backAria': '戻る', + 'header.navigation.mainAria': 'メインナビゲーション', + 'header.sessions.title': 'セッション', + 'header.changes.availableAria': '変更が利用可能', + 'session.githubIssuePicker.error.noActiveProject': 'アクティブなプロジェクトがありません', + 'session.githubIssuePicker.error.runtimeUnavailable': 'GitHubランタイムAPIは利用できません', + 'session.githubIssuePicker.error.notConnected': 'GitHubに接続されていません', + 'session.githubIssuePicker.error.repoNotResolvable': 'リポジトリを解決できません', + 'session.githubIssuePicker.error.repoMustBeGithub': 'originリモートはGitHub URLである必要があります', + 'session.githubIssuePicker.error.issueNotFound': 'Issueが見つかりません', + 'session.githubIssuePicker.error.noModelSelected': 'モデルが選択されていません', + 'session.githubIssuePicker.toast.loadMoreFailed': 'さらにIssueを読み込めませんでした', + 'session.githubIssuePicker.toast.loadIssueDetailsFailed': 'Issueの詳細の読み込みに失敗しました', + 'session.githubIssuePicker.toast.sendContextFailed': 'Issueコンテキストの送信に失敗しました', + 'session.githubIssuePicker.toast.sessionCreated': 'Issueからセッションを作成しました', + 'session.githubIssuePicker.toast.startSessionFailed': 'セッションの開始に失敗しました', + 'session.githubIssuePicker.title.select': 'GitHub Issueをリンク', + 'session.githubIssuePicker.title.createSession': 'GitHub Issueから新しいセッション', + 'session.githubIssuePicker.description.select': 'このセッションにリンクするIssueを選択してください。', + 'session.githubIssuePicker.description.createSession': '非表示のIssueコンテキスト(タイトル/本文/ラベル/コメント)を含む新しいセッションを作成します。', + 'session.githubIssuePicker.searchPlaceholder': 'GitHubコード検索構文で検索', + 'session.githubIssuePicker.empty.noActiveProject': 'アクティブなプロジェクトが選択されていません。', + 'session.githubIssuePicker.empty.runtimeUnavailable': 'GitHubランタイムAPIは利用できません。', + 'session.githubIssuePicker.empty.notConnected': 'GitHubに接続されていません。設定でGitHubアカウントを接続してください。', + 'session.githubIssuePicker.empty.noIssuesFound': 'Issueが見つかりません', + 'session.githubIssuePicker.empty.noOpenIssuesFound': 'オープンなIssueが見つかりません', + 'session.githubIssuePicker.loading.issues': 'Issueを読み込み中...', + 'session.githubIssuePicker.loading.more': '読み込み中...', + 'session.githubIssuePicker.actions.openSettings': '設定を開く', + 'session.githubIssuePicker.actions.useIssue': 'Issue #{number}を使用', + 'session.githubIssuePicker.actions.openInGitHubAria': 'GitHubで開く', + 'session.githubIssuePicker.actions.loadMore': 'さらに読み込む', + 'session.githubIssuePicker.actions.sectionTitle': 'アクション', + 'session.githubIssuePicker.actions.toggleWorktreeAria': 'ワークツリーの切り替え', + 'session.githubIssuePicker.actions.createInWorktree': 'ワークツリーで作成', + 'session.githubIssuePicker.actions.openRepo': 'リポジトリを開く', + 'session.githubIssuePicker.actions.refresh': '更新', + 'session.githubPrPicker.error.noActiveProject': 'アクティブなプロジェクトがありません', + 'session.githubPrPicker.error.runtimeUnavailable': 'GitHubランタイムAPIは利用できません', + 'session.githubPrPicker.error.notConnected': 'GitHubに接続されていません', + 'session.githubPrPicker.error.prNotFound': 'プルリクエストが見つかりません', + 'session.githubPrPicker.error.repoNotResolvable': 'リポジトリを解決できません', + 'session.githubPrPicker.error.repoMustBeGithub': 'originリモートはGitHub URLである必要があります', + 'session.githubPrPicker.toast.loadMoreFailed': 'さらにプルリクエストを読み込めませんでした', + 'session.githubPrPicker.toast.loadDetailsFailed': 'プルリクエストの詳細の読み込みに失敗しました', + 'session.githubPrPicker.title': 'GitHubプルリクエストをリンク', + 'session.githubPrPicker.description': 'このメッセージにレビューコンテキストを添付するプルリクエストを選択してください。', + 'session.githubPrPicker.searchPlaceholder': 'GitHubコード検索構文で検索', + 'session.githubPrPicker.includeDiffAria': '添付コンテキストにPR差分を含める', + 'session.githubPrPicker.includeDiff': 'PR差分を含める', + 'session.githubPrPicker.empty.noActiveProject': 'アクティブなプロジェクトが選択されていません。', + 'session.githubPrPicker.empty.runtimeUnavailable': 'GitHubランタイムAPIは利用できません。', + 'session.githubPrPicker.empty.notConnected': 'GitHubに接続されていません。設定でGitHubアカウントを接続してください。', + 'session.githubPrPicker.empty.noPullRequestsFound': 'プルリクエストが見つかりません', + 'session.githubPrPicker.empty.noOpenPullRequestsFound': 'オープンなプルリクエストが見つかりません', + 'session.githubPrPicker.loading.pullRequests': 'プルリクエストを読み込み中...', + 'session.githubPrPicker.loading.more': '読み込み中...', + 'session.githubPrPicker.actions.openSettings': '設定を開く', + 'session.githubPrPicker.actions.usePullRequest': 'プルリクエスト #{number}を使用', + 'session.githubPrPicker.actions.openInGitHubAria': 'GitHubで開く', + 'session.githubPrPicker.actions.loadMore': 'さらに読み込む', + 'session.newWorktree.title': '新しいワークツリー', + 'session.newWorktree.mode.newBranch': '新しいブランチ', + 'session.newWorktree.mode.existingBranch': '既存のブランチ', + 'session.newWorktree.selectBranch': 'ブランチを選択', + 'session.newWorktree.chooseBranch': 'ブランチを選択...', + 'session.newWorktree.fetchBranches': 'ブランチをフェッチ', + 'session.newWorktree.searchBranches': 'ブランチを検索...', + 'session.newWorktree.loadingBranches': 'ブランチを読み込み中...', + 'session.newWorktree.noBranchesFound': 'ブランチが見つかりません', + 'session.newWorktree.matchingBranches': '一致するブランチ', + 'session.newWorktree.noMatchingBranches': '一致するブランチがありません', + 'session.newWorktree.localBranches': 'ローカルブランチ', + 'session.newWorktree.remoteBranches': 'リモートブランチ', + 'session.newWorktree.otherLocalBranches': 'その他のローカルブランチ', + 'session.newWorktree.otherRemoteBranches': 'その他のリモートブランチ', + 'session.newWorktree.branchName': 'ブランチ名', + 'session.newWorktree.branchNamePlaceholder': 'feature/my-awesome-feature', + 'session.newWorktree.actions.change': '変更', + 'session.newWorktree.actions.startFromGitHubIssuePr': 'GitHub Issue/PRから開始', + 'session.newWorktree.usingPrBranch': 'PRブランチを使用: {branch}', + 'session.newWorktree.fromIssue': 'Issue #{number}: {title}から', + 'session.newWorktree.worktreeDirectory': 'ワークツリーディレクトリ', + 'session.newWorktree.worktreeDirectoryPlaceholder': 'my-worktree-directory', + 'session.newWorktree.resetToMatchBranchName': 'ブランチ名に合わせてリセット', + 'session.newWorktree.sourceBranch': 'ソースブランチ', + 'session.newWorktree.selectSourceBranch': 'ソースブランチを選択', + 'session.newWorktree.selectSourceBranchPlaceholder': 'ソースブランチを選択...', + 'session.newWorktree.newBranchFromSource': '{source}から新しいブランチが作成されます', + 'session.newWorktree.issueNumber': 'Issue #{number}', + 'session.newWorktree.prNumber': 'PR #{number}', + 'session.newWorktree.includeDiffBadge': '+diff', + 'session.newWorktree.newSessionTitle': '新しいセッション', + 'session.newWorktree.fromSource': 'from {source}', + 'session.newWorktree.actions.cancel': 'キャンセル', + 'session.newWorktree.actions.creating': '作成中...', + 'session.newWorktree.actions.createWorktree': 'ワークツリーを作成', + 'session.newWorktree.actions.reset': 'リセット', + 'session.newWorktree.error.noModelSelected': 'モデルが選択されていません', + 'session.newWorktree.error.noActiveProject': 'アクティブなプロジェクトがありません', + 'session.newWorktree.error.branchNameRequired': 'ブランチ名が必要です', + 'session.newWorktree.error.worktreeDirectoryRequired': 'ワークツリーディレクトリが必要です', + 'session.newWorktree.error.sendGitHubContextFailed': 'GitHubコンテキストの送信に失敗しました', + 'session.newWorktree.error.createWorktreeFailed': 'ワークツリーの作成に失敗しました', + 'session.newWorktree.toast.sessionFromIssue': 'Issueからセッションを作成しました', + 'session.newWorktree.toast.sessionFromPr': 'PRからセッションを作成しました', + 'session.newWorktree.toast.worktreeCreated': 'ワークツリーを作成しました', + 'session.newWorktree.toast.worktreeCreatedDescription': '{target} - バックグラウンドでブートストラップ中', + 'session.githubIntegration.title': 'GitHubから選択', + 'session.githubIntegration.tabs.issues': 'Issue', + 'session.githubIntegration.tabs.pullRequests': 'プルリクエスト', + 'session.githubIntegration.connect.title': 'GitHubに接続', + 'session.githubIntegration.connect.description': 'Issueまたはプルリクエストをリンクしてワークツリー詳細を自動入力', + 'session.githubIntegration.connect.action': 'GitHubに接続', + 'session.githubIntegration.search.issuesPlaceholder': 'GitHubコード検索構文で検索', + 'session.githubIntegration.search.prsPlaceholder': 'GitHubコード検索構文で検索', + 'session.githubIntegration.empty.noIssuesFound': 'Issueが見つかりません', + 'session.githubIntegration.empty.noPullRequestsFound': 'プルリクエストが見つかりません', + 'session.githubIntegration.actions.loadMore': 'さらに読み込む', + 'session.githubIntegration.actions.cancel': 'キャンセル', + 'session.githubIntegration.actions.select': '選択', + 'session.githubIntegration.selected.issueNumber': 'Issue #{number}', + 'session.githubIntegration.selected.prNumber': 'PR #{number}', + 'session.githubIntegration.includeDiffAria': 'セッションコンテキストにPR差分を含める', + 'session.githubIntegration.includeDiff': 'PR差分を含める', + 'session.githubIntegration.error.notConnected': 'GitHubに接続されていません', + 'session.githubIntegration.error.loadDataFailed': 'データの読み込みに失敗しました', + 'session.githubIntegration.validation.branchAlreadyCheckedOut': 'ブランチはすでにワークツリーでチェックアウトされています', + 'session.githubIntegration.validation.branchAlreadyExists': 'ブランチはすでにローカルに存在します', + 'session.githubIntegration.validation.failed': '検証に失敗しました', + 'chat.fileAttachment.toast.attachFailed': 'ファイルの添付に失敗しました', + 'chat.fileAttachment.toast.someFilesSkipped': '一部のファイルがスキップされました:\n{summary}', + 'chat.fileAttachment.toast.vscodePickFailed': 'VS Codeでのファイル選択に失敗しました', + 'chat.fileAttachment.fileFallback': 'ファイル', + 'chat.fileAttachment.skippedFallback': 'スキップ', + 'chat.fileAttachment.actions.attachAria': 'ファイルを添付', + 'chat.fileAttachment.actions.attach': 'ファイルを添付', + 'chat.fileAttachment.actions.removeNamed': '{name}を削除', + 'chat.fileAttachment.actions.removeImage': '画像を削除', + 'chat.fileAttachment.activeEditor.addFile': 'ファイル {name}をコンテキストに追加', + 'chat.fileAttachment.activeEditor.pinSelection': '選択範囲をコンテキストに固定', + 'chat.fileAttachment.activeEditor.remove': 'コンテキストから削除', + 'chat.fileAttachment.openInDiagram': 'ダイアグラムビューで開く', + 'chat.pendingChanges.fileCountSingle': '{count}ファイル', + 'chat.pendingChanges.fileCountPlural': '{count}ファイル', + 'chat.pendingChanges.changedInWorkspace': 'ワークスペースで変更', + 'chat.changedFiles.title': '変更されたファイル', + 'chat.changedFiles.actions.openFileTitle': '{path}を開く', + 'chat.emptyState.opencodeUnreachable': 'OpenCodeに接続できません', + 'chat.emptyState.startNewChat': '新しいチャットを開始', + 'chat.emptyState.draftTitle': '何に取り組みますか?', + 'chat.emptyState.draftTitleWithProject': '{project}で何に取り組みますか?', + 'chat.draftPresets.explore.label': 'コードベースを探索', + 'chat.draftPresets.catchup.label': '状況を把握', + 'chat.draftPresets.weigh.label': '選択肢を比較検討', + 'chat.draftPresets.plan.label': '機能の計画を開始', + 'chat.draftPresets.debug.label': '問題をデバッグ', + 'chat.draftPresets.review.label': '変更をレビュー', + 'chat.draftStarters.add': 'スターターを追加', + 'chat.draftStarters.searchPlaceholder': 'コマンドとスキルを検索…', + 'chat.draftStarters.empty': '追加するものがありません', + 'chat.draftStarters.sectionBuiltIn': 'ビルトイン', + 'chat.draftStarters.sectionCommands': 'コマンド', + 'chat.draftStarters.sectionSkills': 'スキル', + 'chat.draftStarters.remove': '削除', + 'chat.scrollToBottom.aria': '一番下にスクロール', + 'chat.timeline.relative.justNow': 'たった今', + 'chat.timeline.relative.minutesAgo': '{count}分前', + 'chat.timeline.relative.hoursAgo': '{count}時間前', + 'chat.timeline.relative.daysAgo': '{count}日前', + 'chat.timeline.title': '会話タイムライン', + 'chat.timeline.description': '会話の任意の時点に移動するか、新しいセッションをフォーク', + 'chat.timeline.searchPlaceholder': 'メッセージを検索...', + 'chat.timeline.empty.search': 'メッセージが見つかりません', + 'chat.timeline.empty.session': 'このセッションにはまだメッセージがありません', + 'chat.timeline.noTextContent': '[テキストなし]', + 'chat.timeline.actions.title': 'アクション', + 'chat.timeline.actions.revertFromHere': 'ここから元に戻す', + 'chat.timeline.actions.forkFromHere': 'ここからフォーク', + 'chat.timeline.actions.previousTurn': '前のターン', + 'chat.timeline.actions.latest': '最新', + 'chat.timeline.help.clickMessage': 'メッセージをクリックして会話内のその位置にスクロール', + 'chat.timeline.help.undoToPoint': 'この時点まで元に戻す(メッセージテキストが入力欄に反映されます)', + 'chat.timeline.help.createSessionFromHere': 'ここから新しいセッションを作成', + 'chat.statusRow.todo.status.inProgress': '進行中', + 'chat.statusRow.todo.status.pending': '保留中', + 'chat.statusRow.todo.status.completed': '完了', + 'chat.statusRow.todo.status.cancelled': 'キャンセル', + 'chat.statusRow.todo.priority.high': '高優先度', + 'chat.statusRow.todo.priority.medium': '中優先度', + 'chat.statusRow.todo.priority.low': '低優先度', + 'chat.statusRow.actions.stopGeneratingAria': '生成を停止', + 'chat.statusRow.tasksTitle': 'タスク', + 'chat.statusRow.summary.activeLeft': '{active}アクティブ · {left}残り', + 'chat.statusRow.aborted': '中止されました', + 'chat.revertIndicator.redo': 'やり直し', + 'chat.revertIndicator.redoAria': 'やり直し — 元に戻したメッセージを復元', + 'chat.revertPopover.title': '元に戻しました', + 'chat.revertPopover.noTextContent': 'テキスト内容なし', + 'chat.revertPopover.forkFromHere': 'ここからフォーク', + 'chat.revertPopover.forkFromMessage': 'このメッセージからフォーク', + 'chat.revertPopover.restoreAll': 'すべて復元', + 'chat.revertPopover.restore': '復元', + 'chat.revertPopover.revert': '元に戻す', + 'chat.revertPopover.fork': 'フォーク', + 'chat.revert.toast.undo': '{preview}に元に戻しました', + 'chat.revert.toast.redo': 'やり直しました', + 'chat.revert.toast.restored': 'すべてのメッセージを復元しました', + 'chat.errorBoundary.title': 'チャットエラー', + 'chat.errorBoundary.description': 'チャットインターフェースでエラーが発生しました。一時的なネットワーク問題または破損したメッセージデータが原因の可能性があります。', + 'chat.errorBoundary.sessionLabel': 'セッション', + 'chat.errorBoundary.detailsSummary': 'エラー詳細', + 'chat.errorBoundary.resetAction': 'チャットをリセット', + 'chat.errorBoundary.persistentHint': '問題が解決しない場合は、ページを更新してみてください。', + 'chat.autocomplete.tabs.commands': 'コマンド', + 'chat.autocomplete.tabs.agents': 'エージェント', + 'chat.autocomplete.tabs.files': 'ファイル', + 'chat.autocomplete.keyboardHint': '↑↓ 移動 • Enter 選択 • Esc 閉じる', + 'chat.commandAutocomplete.command.initDescription': 'AGENTS.mdファイルを作成/更新', + 'chat.commandAutocomplete.command.undoDescription': '最後のメッセージを元に戻す', + 'chat.commandAutocomplete.command.redoDescription': '元に戻したメッセージをやり直す', + 'chat.commandAutocomplete.command.timelineDescription': '会話タイムラインを開く', + 'chat.commandAutocomplete.command.compactDescription': 'AIを使用してセッション履歴を圧縮しコンテキストサイズを削減', + 'chat.commandAutocomplete.command.summaryDescription': '非破壊的なセッション要約。コマンドの後にオプションのトピックヒント。', + 'chat.commandAutocomplete.command.workspaceReviewDescription': 'ワークスペースの差分を意図、正確性、妥当性について重大度で評価。', + 'chat.commandAutocomplete.command.handoffReviewDescription': '生成されたハンドオフから別のレビューセッションを作成または再利用。', + 'chat.commandAutocomplete.command.featurePlanDescription': '新機能のガイド付き対話型計画セッションを開始。', + 'chat.commandAutocomplete.command.catchUpDescription': 'コンテキストを再確立: 何をしていたか、どこから再開するか。', + 'chat.commandAutocomplete.command.debugDescription': '修正を提案する前に、バグのガイド付き根本原因調査。', + 'chat.commandAutocomplete.command.weighDescription': 'トレードオフと推奨事項を含む2~3のアプローチを比較検討してからコミット。', + 'chat.commandAutocomplete.command.exploreDescription': 'このコードベースに慣れる: アーキテクチャと主要部分の概要ツアー。', + 'chat.commandAutocomplete.badge.skill': 'スキル', + 'chat.commandAutocomplete.badge.command': 'コマンド', + 'chat.commandAutocomplete.badge.system': 'システム', + 'chat.commandAutocomplete.empty': 'コマンドが見つかりません', + 'chat.agentMentionAutocomplete.badge.system': 'システム', + 'chat.agentMentionAutocomplete.empty': 'エージェントが見つかりません', + 'chat.fileMentionAutocomplete.searchMoreAgents': 'さらにエージェントを検索するには入力', + 'chat.fileMentionAutocomplete.empty': '一致が見つかりません', + 'chat.queuedMessage.attachments': '+{count}ファイル', + 'chat.queuedMessage.empty': '(空)', + 'chat.queuedMessage.title': 'キューされたメッセージ', + 'chat.queuedMessage.edit': '編集', + 'chat.queuedMessage.send': '送信', + 'chat.queuedMessage.removeAria': 'キューから削除', + 'chat.queuedMessage.reorderAria': 'ドラッグして並び替え', + 'chat.container.returnToParent.aria': '親セッションに戻る', + 'chat.container.returnToParent.titleNamed': '戻る: {title}', + 'chat.container.returnToParent.title': '親セッションに戻る', + 'chat.container.returnToParent.label': '親', + 'chat.container.readOnlySubagentPromptBanner': 'サブエージェントセッションはプロンプトを受け付けません。', + 'chat.unifiedControls.title': 'コントロール', + 'chat.unifiedControls.model.title': 'モデル', + 'chat.unifiedControls.model.noRecent': '最近のモデルはありません', + 'chat.unifiedControls.model.moreAria': 'その他のモデル', + 'chat.unifiedControls.effort.title': '努力', + 'chat.unifiedControls.effort.moreAria': 'その他の努力オプション', + 'chat.questionCard.summaryTab': '要約', + 'chat.questionCard.noAnswer': '(回答なし)', + 'chat.questionCard.inputNeeded': '入力が必要', + 'chat.questionCard.fromSubagent': 'サブエージェントから', + 'chat.questionCard.questionFallback': '質問{index}', + 'chat.questionCard.selectMultiple': '複数選択', + 'chat.questionCard.recommended': '推奨', + 'chat.questionCard.other': 'その他…', + 'chat.questionCard.yourAnswer': 'あなたの回答', + 'chat.questionCard.submit': '送信', + 'chat.questionCard.next': '次へ', + 'chat.questionCard.dismiss': '閉じる', + 'chat.questionCard.copyMarkdown': 'Markdownとしてコピー', + 'chat.questionCard.copyJson': 'JSONとしてコピー', + 'chat.questionCard.copiedMarkdown': '質問をMarkdownとしてコピーしました', + 'chat.questionCard.copiedJson': '質問をJSONとしてコピーしました', + 'chat.questionCard.copyFailed': '質問のコピーに失敗しました', + 'chat.questionCard.submitFailed': '応答の送信に失敗しました', + 'chat.questionCard.dismissFailed': '質問の閉じるのに失敗しました', + 'chat.questionCard.noLongerPending': 'この質問は応答待ちではなくなりました。', + 'chat.questionCard.tryAgain': 'しばらくしてからもう一度お試しください。', + 'chat.textSelection.toast.noProject': 'このセッションのプロジェクトが見つかりません', + 'chat.textSelection.toast.addToNotesFailed': 'メモへの追加に失敗しました', + 'chat.textSelection.toast.addToNotesSuccess': '選択テキストをメモに追加しました', + 'chat.textSelection.toast.addToNotesSummaryFailed': '選択範囲を要約できませんでした。選択テキストをメモに追加しました。', + 'chat.textSelection.actions.addToChat': 'チャットに追加', + 'chat.textSelection.actions.newSession': '新しいセッション', + 'chat.textSelection.actions.copy': 'コピー', + 'chat.textSelection.actions.addToNotes': 'メモに追加', + 'chat.textSelection.title.addToCurrentChat': '現在のチャットに追加', + 'chat.textSelection.title.newSessionWithSelection': '選択範囲で新しいセッションを作成', + 'chat.textSelection.title.saveInsightToNotes': '選択テキストをメモに保存', + 'chat.messageBody.actions.revertAria': 'このメッセージに戻す', + 'chat.messageBody.actions.revert': 'ここから元に戻す', + 'chat.messageBody.actions.forkAria': 'このメッセージからフォーク', + 'chat.messageBody.actions.fork': 'ここからフォーク', + 'chat.messageBody.actions.copyMessageAria': 'メッセージテキストをコピー', + 'chat.messageBody.actions.copyMessage': 'メッセージをコピー', + 'chat.messageBody.actions.openPreviewAria': 'プレビューを開く', + 'chat.messageBody.actions.openPreview': 'プレビューを開く', + 'chat.messageBody.actions.copyAnswer': '回答をコピー', + 'chat.messageBody.actions.savingImage': '画像を保存中...', + 'chat.messageBody.actions.saveAsImage': '画像として保存', + 'chat.messageBody.actions.saveAsPlan': '計画として保存', + 'chat.messageBody.actions.startNewSession': 'この回答から新しいセッションを開始', + 'chat.messageBody.actions.startNewMultiRun': 'この回答から新しいマルチランを開始', + 'chat.messageBody.forkDialog.instructions.label': '指示', + 'chat.messageBody.forkDialog.instructions.placeholder': '新しいセッションの指示を追加…', + 'chat.messageBody.forkDialog.createWorktree': 'ワークツリーを作成', + 'chat.generatedResult.actions.copy': 'コピー', + 'chat.generatedResult.actions.copied': 'コピーしました', + 'chat.generatedResult.commit.title': '生成されたコミットメッセージ', + 'chat.generatedResult.commit.highlights': 'ハイライト', + 'chat.generatedResult.pullRequest.title': '生成されたプルリクエスト', + 'chat.generatedResult.pullRequest.titleLabel': 'タイトル', + 'chat.generatedResult.pullRequest.bodyLabel': '本文', + 'chat.messageBody.tts.stopSpeaking': '読み上げを停止', + 'chat.messageBody.tts.readAloud': '読み上げ', + 'chat.messageBody.tts.readAloudWithProvider': '読み上げ({provider}音声)', + 'planView.tts.readAloud': '計画を読み上げ', + 'planView.tts.stopSpeaking': '読み上げを停止', + 'filesView.tts.readAloud': 'ファイルを読み上げ', + 'filesView.tts.stopSpeaking': '読み上げを停止', + 'chat.messageBody.toast.noProject': 'このセッションのプロジェクトが見つかりません', + 'chat.messageBody.toast.savePlanFailed': '計画の保存に失敗しました', + 'chat.messageBody.toast.planSaved': '計画を保存しました', + 'chat.messageBody.toast.imageSaved': '画像を保存しました', + 'chat.messageBody.toast.generateImageFailed': '画像の生成に失敗しました', + 'chat.chatInput.actions.commands': 'コマンド', + 'chat.chatInput.actions.attachFiles': 'ファイルを添付', + 'chat.chatInput.actions.addAttachment': '添付ファイルを追加', + 'chat.chatInput.actions.linkGithubIssue': 'GitHub Issueをリンク', + 'chat.chatInput.actions.linkGithubPr': 'GitHub PRをリンク', + 'chat.chatInput.actions.modelAgentSettings': 'モデルとエージェント設定', + 'chat.chatInput.actions.sendMessageAria': 'メッセージを送信', + 'chat.chatInput.actions.queueMessageAria': 'メッセージをキュー', + 'chat.chatInput.actions.stopGeneratingAria': '生成を停止', + 'chat.chatInput.focusMode.toggleAria': 'フォーカスモードの切り替え', + 'chat.chatInput.focusMode.label': 'フォーカスモード', + 'chat.chatInput.permissionAutoAccept.disable': '権限の自動承認を無効にする', + 'chat.chatInput.permissionAutoAccept.enable': '権限の自動承認を有効にする', + 'chat.chatInput.permissionAutoAccept.on': '権限の自動承認: オン', + 'chat.chatInput.permissionAutoAccept.off': '権限の自動承認: オフ', + 'chat.chatInput.linked.byAuthor': '{author}による', + 'chat.chatInput.linked.issue.openInBrowserAria': 'ブラウザでIssueを開く', + 'chat.chatInput.linked.issue.removeAria': 'リンクされたIssueを削除', + 'chat.chatInput.linked.pr.number': 'PR #{number}', + 'chat.chatInput.linked.pr.openInBrowserAria': 'ブラウザでプルリクエストを開く', + 'chat.chatInput.linked.pr.removeAria': 'リンクされたプルリクエストを削除', + 'chat.chatInput.placeholder.shell': 'シェルコマンドを入力...', + 'chat.chatInput.placeholder.chat': '@でファイル/エージェント、/でコマンド/スキル、!でシェル、#でスニペット', + 'chat.chatInput.placeholder.chatCompact': '@ / ! # でヘルパーを使用', + 'chat.chatInput.placeholder.selectSession': 'セッションを選択または作成してチャットを開始', + 'chat.snippetAutocomplete.action.addNew': '+ 新しいスニペットを追加', + 'chat.snippetAutocomplete.empty': 'スニペットが見つかりません', + 'chat.snippetAutocomplete.footer': '↑↓ 移動 • Enter 選択 • Esc 閉じる', + 'snippets.source.global': 'グローバル', + 'snippets.source.project': 'プロジェクト', + 'chat.chatInput.toast.compactFailed': 'セッションの圧縮に失敗しました', + 'chat.chatInput.toast.summaryFailed': '要約の生成に失敗しました', + 'chat.messageBody.actions.sendReviewFeedback': 'レビューフィードバックを実装エージェントに送信', + 'chat.messageBody.actions.sendImplementationResponse': '実装応答をレビューエージェントに送信', + 'chat.chatInput.toast.reviewFailed': '変更のレビューに失敗しました', + 'chat.chatInput.toast.planFeatureFailed': '機能計画の開始に失敗しました', + 'chat.chatInput.toast.catchUpFailed': 'キャッチアップに失敗しました', + 'chat.chatInput.toast.debugFailed': 'デバッグの開始に失敗しました', + 'chat.chatInput.toast.weighFailed': '比較検討に失敗しました', + 'chat.chatInput.toast.exploreFailed': 'ツアーの開始に失敗しました', + 'chat.chatInput.toast.attachmentsTooLarge': '添付ファイルが大きすぎて送信できません。画像の数またはサイズを減らしてください。', + 'chat.chatInput.toast.sendAttachmentsFailed': '添付ファイルの送信に失敗しました。ファイルを減らすかサイズを小さくしてください。', + 'chat.chatInput.toast.messageSendFailed': 'メッセージの送信に失敗しました。添付ファイルは復元されました。', + 'chat.chatInput.toast.clipboardAttachFailed': 'クリップボードからの画像添付に失敗しました', + 'chat.chatInput.toast.addedFileMentions': '{count}件のファイルメンションを追加しました', + 'chat.chatInput.toast.attachFileFailed': 'ファイルの添付に失敗しました', + 'gitView.commit.aiHighlights.insertAria': '挿入のariaラベル', + 'gitView.commit.aiHighlights.insertTooltip': '挿入のツールチップ', + 'gitView.commit.commitAria': 'コミットのariaラベル', + 'chat.chatInput.toast.attachNamedFailed': '{name}の添付に失敗しました', + 'chat.chatInput.toast.someFilesSkipped': '一部のファイルがスキップされました:\n{summary}', + 'chat.chatInput.toast.vscodePickFailed': 'VS Codeでのファイル選択に失敗しました', + 'chat.chatInput.toast.openSessionFirst': '先にセッションを開いてください', + 'chat.chatInput.toast.togglePermissionAutoAcceptFailed': '権限の自動承認の切り替えに失敗しました', + 'chat.chatInput.reviewComments': 'レビューコメント:', + 'chat.chatInput.reviewCommentsRemove': 'レビューコメントを削除', + 'chat.chatInput.devServerLogs': '開発サーバーログ:', + 'chat.chatInput.devServerLogsRemove': '開発サーバーログを削除', + 'chat.chatInput.previewAnnotations': 'プレビュー注釈:', + 'chat.chatInput.previewContext': 'プレビューコンテキスト:', + 'chat.chatInput.previewContextRemove': 'プレビューコンテキストを削除', + 'chat.chatInput.projectRoot': 'プロジェクトルート', + 'chat.chatInput.branch': 'ブランチ', + 'chat.chatInput.worktrees': 'ワークツリー', + 'chat.chatInput.worktreeNew': '+ 新規', + 'chat.chatInput.drop.insertMention': 'ドロップしてメンションとして挿入', + 'chat.chatInput.drop.attachFiles': 'ここにファイルをドロップして添付', + 'chat.chatInput.fileFallback': 'ファイル', + 'chat.mobileStatus.editProjects.title': 'プロジェクトを編集', + 'chat.mobileStatus.editProjects.footer': '項目をドラッグして並び替え、または矢印で移動。編集をタップして詳細を変更します。', + 'chat.mobileStatus.editProjects.empty': '編集するプロジェクトがありません', + 'chat.mobileStatus.projects.empty': 'プロジェクトがありません', + 'chat.mobileStatus.projects.addAria': 'プロジェクトを追加', + 'chat.mobileStatus.projects.removeTitle': 'プロジェクトを削除', + 'chat.mobileStatus.projects.removeDescriptionPrefix': '本当に削除しますか?', + 'chat.mobileStatus.projects.cancel': 'キャンセル', + 'chat.mobileStatus.projects.remove': '削除', + 'chat.mobileStatus.new': '新規', + 'chat.mobileStatus.noSessionsInProject': 'このプロジェクトにセッションはありません', + 'chat.mobileStatus.swipeHint': '← ここをスワイプでサイドバーを開く →', + 'chat.mobileStatus.toast.addProjectFailed': 'プロジェクトの追加に失敗しました', + 'chat.mobileStatus.toast.selectValidDirectory': '有効なディレクトリを選択してください。', + 'chat.mobileStatus.toast.selectDirectoryFailed': 'ディレクトリの選択に失敗しました', + 'chat.toolOutputDialog.image.previousAria': '前の画像', + 'chat.toolOutputDialog.image.nextAria': '次の画像', + 'chat.toolOutputDialog.image.closeAria': '画像プレビューを閉じる', + 'chat.toolOutputDialog.mermaid.missingSource': 'MermaidソースURLがありません。', + 'chat.toolOutputDialog.mermaid.loadFailed': 'Mermaidダイアグラムを読み込めません。', + 'chat.toolOutputDialog.mermaid.closeAria': 'ダイアグラムプレビューを閉じる', + 'chat.toolOutputDialog.mermaid.loading': 'ダイアグラムを読み込み中...', + 'chat.toolOutputDialog.mermaid.renderFailed': 'Mermaidダイアグラムをレンダリングできません。', + 'chat.toolOutputDialog.mermaid.retry': '再試行', + 'chat.toolOutputDialog.commandCompleted': 'コマンドが正常に完了しました', + 'chat.toolOutputDialog.noOutputProduced': '出力は生成されませんでした', + 'chat.toolPart.lspErrors': 'LSPエラー', + 'chat.toolPart.moreErrors': '+{count}件のエラー', + 'chat.toolPart.error': 'エラー:', + 'chat.toolPart.awaitingResponse': '応答を待機中...', + 'chat.toolPart.noOutputProduced': '出力は生成されませんでした', + 'chat.toolPart.output': '出力', + 'chat.toolPart.showRawJson': '生JSONを表示', + 'chat.toolPart.showFormattedJson': '整形JSONを表示', + 'chat.toolPart.copyOutput': '出力をコピー', + 'chat.toolPart.copiedOutput': '出力をコピーしました', + 'chat.toolPart.copyOutputFailed': '出力のコピーに失敗しました', + 'chat.toolPart.openSubtask': '{type}サブタスクを開く', + 'chat.todo.total': '合計', + 'chat.todo.inProgress': '進行中', + 'chat.todo.pending': '保留中', + 'chat.todo.completed': '完了', + 'chat.todo.cancelled': 'キャンセル', + 'chat.permissionCard.workingDirectory': '作業ディレクトリ:', + 'chat.permissionCard.timeout': 'タイムアウト:', + 'chat.permissionCard.request': 'リクエスト:', + 'chat.permissionCard.headers': 'ヘッダー:', + 'chat.permissionCard.body': '本文:', + 'chat.permissionCard.action': 'アクション:', + 'chat.permissionCard.details': '詳細:', + 'chat.permissionCard.patterns': 'パターン:', + 'chat.permissionToast.sessionFallback': 'セッション', + 'chat.permissionToast.permissionFallback': '権限の詳細は利用できません', + 'chat.permissionToast.labels.session': 'セッション:', + 'chat.permissionToast.labels.permission': '権限:', + 'chat.permissionToast.actions.once': '1回のみ', + 'chat.permissionToast.actions.always': '常に', + 'chat.permissionToast.actions.deny': '拒否', + 'chat.permissionToast.actions.approveOnceAria': '1回のみ承認', + 'chat.permissionToast.actions.approveOnceAriaWithSession': '{session}で1回のみ承認', + 'chat.permissionToast.actions.approveAlwaysAria': '常に承認', + 'chat.permissionToast.actions.approveAlwaysAriaWithSession': '{session}で常に承認', + 'chat.permissionToast.actions.denyAria': '権限を拒否', + 'chat.permissionToast.actions.denyAriaWithSession': '{session}の権限を拒否', + 'chat.permissionRequest.required': '権限が必要:', + 'chat.permissionRequest.actions.once': '1回のみ', + 'chat.permissionRequest.actions.always': '常に', + 'chat.permissionRequest.actions.reject': '拒否', + 'chat.modelControls.provider': 'プロバイダー', + 'chat.modelControls.capability.toolCalling': 'ツール呼び出し', + 'chat.modelControls.capability.reasoning': '推論', + 'chat.modelControls.modality.text': 'テキスト', + 'chat.modelControls.modality.image': '画像', + 'chat.modelControls.modality.video': '動画', + 'chat.modelControls.modality.audio': '音声', + 'chat.modelControls.modality.pdf': 'PDF', + 'chat.modelControls.capabilities': '機能', + 'chat.modelControls.modalities': 'モダリティ', + 'chat.modelControls.input': '入力', + 'chat.modelControls.output': '出力', + 'chat.modelControls.limits': '制限', + 'chat.modelControls.context': 'コンテキスト', + 'chat.modelControls.metadata': 'メタデータ', + 'chat.modelControls.knowledge': '知識', + 'chat.modelControls.release': 'リリース', + 'chat.modelControls.mode': 'モード', + 'chat.modelControls.model': 'モデル', + 'chat.modelControls.temperature': '温度', + 'chat.modelControls.topP': 'Top P', + 'chat.modelControls.permissions': '権限', + 'chat.modelControls.edit': '編集', + 'chat.modelControls.bash': 'Bash', + 'chat.modelControls.webFetch': 'WebFetch', + 'chat.modelControls.customPrompt': 'カスタムプロンプト', + 'chat.modelControls.selectModel': 'モデルを選択', + 'chat.modelControls.searchProvidersOrModels': 'プロバイダーまたはモデルを検索', + 'chat.modelControls.clearSearch': '検索をクリア', + 'chat.modelControls.current': '現在', + 'chat.modelControls.thinking': '思考', + 'chat.modelControls.default': 'デフォルト', + 'chat.modelControls.selectAgent': 'エージェントを選択', + 'chat.modelControls.costPerMillion': 'コスト($/100万トークン)', + 'chat.modelControls.metadataUnavailable': 'モデルのメタデータは利用できません。', + 'chat.modelControls.addNewProvider': '新しいプロバイダーを追加', + 'chat.modelControls.noAgentSelected': 'エージェントが選択されていません。', + 'chat.modelControls.resetToDefault': 'デフォルトにリセット', + 'chat.modelControls.searchModels': 'モデルを検索', + 'chat.modelControls.searchAgents': 'エージェントを検索', + 'chat.modelControls.noModelsFound': 'モデルが見つかりません', + 'chat.modelControls.favorites': 'お気に入り', + 'chat.modelControls.recent': '最近', + 'chat.modelControls.addToFavorites': 'お気に入りに追加', + 'chat.modelControls.removeFromFavorites': 'お気に入りから削除', + 'chat.modelControls.favoriteAria': 'お気に入り', + 'chat.modelControls.unfavoriteAria': 'お気に入り解除', + 'chat.modelControls.collapseProvider': 'プロバイダーを折りたたむ', + 'chat.modelControls.expandProvider': 'プロバイダーを展開', + 'chat.modelControls.keyboardHint': '↑↓ 移動{thinking} • Enter 選択 • Esc 閉じる', + 'chat.modelControls.keyboardHintNavigate': '↑↓ 移動', + 'chat.modelControls.keyboardHintSwitchAgent': '{shortcut} エージェント切り替え', + 'chat.modelControls.keyboardHintThinking': '←→ 思考', + 'chat.modelControls.showThinkingModes': '思考モードを表示', + 'chat.modelControls.hideThinkingModes': '思考モードを非表示', + 'chat.modelControls.moreThinkingModes': 'その他の思考モード', + 'chat.modelControls.noProvidersOrModelsFound': '検索に一致するプロバイダーまたはモデルがありません。', + 'chat.modelControls.reorderFavoriteAria': 'お気に入りを並び替え', + 'chat.modelControls.reorderFavoriteTitle': 'ドラッグしてお気に入りを並び替え', + 'chat.modelControls.reorderProviderTitle': 'ドラッグしてプロバイダーを並び替え', + 'chat.modelControls.permissionLabel.custom': 'カスタム', + 'chat.modelControls.permissionLabel.allow': '許可', + 'chat.modelControls.permissionLabel.deny': '拒否', + 'chat.modelControls.permissionLabel.ask': '確認', + 'chat.modelControls.modeValue.primary': 'プライマリ', + 'chat.modelControls.modeValue.subagent': 'サブエージェント', + 'chat.modelControls.modeValue.all': 'すべて', + 'chat.modelControls.modeValue.none': '—', + 'chat.reasoningTrace.thinking': '思考', + 'chat.reasoningTrace.justification': '正当化', + 'chat.reasoningTrace.expandAria': '推論トレースを展開', + 'chat.reasoningTrace.collapseAria': '推論トレースを折りたたむ', + 'chat.reasoningTrace.thought': '思考', + 'chat.messageBody.subtask.title': '委任タスク', + 'chat.messageBody.subtask.hidePrompt': 'プロンプトを非表示', + 'chat.messageBody.subtask.showPrompt': 'プロンプトを表示', + 'chat.messageBody.subtask.openSession': 'サブタスクセッションを開く', + 'chat.messageBody.shellCommand.title': 'シェルコマンド', + 'chat.messageBody.shellCommand.hideOutput': '出力を非表示', + 'chat.messageBody.shellCommand.showOutput': '出力を表示', + 'chat.messageBody.shellCommand.copied': 'コピーしました', + 'chat.messageBody.shellCommand.copyOutput': '出力をコピー', + 'commandPalette.title': 'コマンドパレット', + 'commandPalette.description': 'ファイル、セッション、コマンドを検索します。', + 'commandPalette.input.placeholder': 'ファイル、セッション、コマンドを検索...', + 'commandPalette.empty.noResults': '結果が見つかりません。', + 'commandPalette.empty.searchingFiles': 'ファイルを検索中...', + 'commandPalette.item.newSession': '新しいセッション', + 'commandPalette.item.newMiniChat': '新しいMini Chatウィンドウ', + 'commandPalette.item.newWorktreeDraft': '新しいワークツリー下書き', + 'commandPalette.item.addProject': 'プロジェクトを追加', + 'commandPalette.item.showSessionSwitcher': 'セッションスイッチャーを表示', + 'commandPalette.item.toggleSidebar': 'サイドバーの切り替え', + 'commandPalette.item.toggleRightSidebar': '右サイドバーの切り替え', + 'commandPalette.item.showContextUsage': 'コンテキスト使用量を表示', + 'commandPalette.item.toggleTerminal': 'ターミナルの切り替え', + 'commandPalette.item.openSettings': '設定を開く...', + 'commandPalette.session.untitled': '無題のセッション', + 'openCodeStatusDialog.title': 'OpenCodeステータス', + 'openCodeStatusDialog.description': '現在のOpenCodeステータスと診断情報を確認します。', + 'openCodeStatusDialog.actions.copy': 'コピー', + 'openCodeStatusDialog.empty.noData': 'データがありません。', + 'openCodeStatusDialog.toast.copiedTitle': 'コピーしました', + 'openCodeStatusDialog.toast.copiedDescription': 'ステータスをクリップボードにコピーしました', + 'openCodeStatusDialog.toast.copyFailed': 'ステータスのコピーに失敗しました', + 'saveProjectPlanDialog.title': 'プロジェクト計画を保存', + 'saveProjectPlanDialog.description': 'この計画をMarkdownファイルとしてプロジェクトに保存します。', + 'saveProjectPlanDialog.field.title': 'タイトル', + 'saveProjectPlanDialog.field.titlePlaceholder': '計画タイトル', + 'saveProjectPlanDialog.field.contentPreview': '内容プレビュー', + 'saveProjectPlanDialog.actions.cancel': 'キャンセル', + 'saveProjectPlanDialog.actions.save': '保存', + 'saveProjectPlanDialog.actions.saving': '保存中...', + 'branchPickerDialog.title': 'ブランチピッカー', + 'branchPickerDialog.description.localBranchesForProject': '{project}のローカルブランチ', + 'branchPickerDialog.description.selectProject': 'プロジェクトを選択してブランチを表示', + 'branchPickerDialog.search.placeholder': 'ブランチを検索...', + 'branchPickerDialog.search.renameBranchPlaceholder': 'ブランチ名を変更', + 'branchPickerDialog.state.noProjectSelected': 'プロジェクトが選択されていません', + 'branchPickerDialog.state.loadingBranches': 'ブランチを読み込み中...', + 'branchPickerDialog.state.noMatchingBranches': '一致するブランチがありません', + 'branchPickerDialog.state.noBranchesFound': 'ブランチが見つかりません', + 'branchPickerDialog.badge.head': 'HEAD', + 'branchPickerDialog.badge.worktree': 'ワークツリー', + 'branchPickerDialog.actions.createWorktreeAria': 'ブランチからワークツリーを作成', + 'branchPickerDialog.actions.renameAria': 'ブランチ名を変更', + 'branchPickerDialog.actions.deleteAria': 'ブランチを削除', + 'branchPickerDialog.actions.deleteWorktreeAria': 'ワークツリーを削除', + 'branchPickerDialog.actions.confirmRenameAria': '名前変更を確認', + 'branchPickerDialog.actions.cancelRenameAria': '名前変更をキャンセル', + 'branchPickerDialog.actions.confirmDeleteAria': 'ブランチ削除を確認', + 'branchPickerDialog.actions.cancelDeleteAria': 'ブランチ削除をキャンセル', + 'branchPickerDialog.actions.deletePrompt': '削除', + 'branchPickerDialog.actions.forceDeletePrompt': '強制削除', + 'branchPickerDialog.tooltip.createWorktree': 'ワークツリーを作成', + 'branchPickerDialog.tooltip.worktreeAlreadyExists': 'ワークツリーはすでに存在します', + 'branchPickerDialog.tooltip.rename': 'ブランチ名を変更', + 'branchPickerDialog.tooltip.renameDisabledForRoot': 'ルートブランチの名前は変更できません', + 'branchPickerDialog.tooltip.delete': 'ブランチを削除', + 'branchPickerDialog.tooltip.deleteCurrentBranch': '現在のブランチは削除できません', + 'branchPickerDialog.tooltip.deleteDisabledForRoot': 'ルートブランチは削除できません', + 'branchPickerDialog.tooltip.deleteWorktree': 'ワークツリーを削除', + 'branchPickerDialog.tooltip.deleteWorktreeRootProtected': 'ルートワークツリーは削除できません', + 'branchPickerDialog.toast.branchRenamed': 'ブランチ名を変更しました', + 'branchPickerDialog.toast.failedToRenameBranch': 'ブランチ名の変更に失敗しました', + 'branchPickerDialog.toast.branchDeleted': 'ブランチを削除しました', + 'branchPickerDialog.toast.branchNotMerged': 'ブランチが完全にマージされていません', + 'branchPickerDialog.toast.confirmAgainToForceDelete': 'もう一度確認して強制削除', + 'branchPickerDialog.toast.failedToDeleteBranch': 'ブランチの削除に失敗しました', + 'branchPickerDialog.toast.worktreeCreated': 'ワークツリーを作成しました', + 'branchPickerDialog.toast.failedToCreateWorktree': 'ワークツリーの作成に失敗しました', + 'branchPickerDialog.error.failedToLoad': 'ブランチの読み込みに失敗しました', + 'branchPickerDialog.error.renameRejected': '名前変更が拒否されました', + 'branchPickerDialog.error.renameFailed': 'ブランチ名の変更に失敗しました', + 'branchPickerDialog.error.deleteRejected': '削除が拒否されました', + 'branchPickerDialog.error.deleteFailed': 'ブランチの削除に失敗しました', + 'branchPickerDialog.error.createWorktreeFailed': 'ワークツリーの作成に失敗しました', + 'projectEditDialog.title': 'プロジェクトを編集', + 'projectEditDialog.field.name': '名前', + 'projectEditDialog.field.namePlaceholder': 'プロジェクト名', + 'projectEditDialog.field.color': '色', + 'projectEditDialog.field.icon': 'アイコン', + 'projectEditDialog.field.preview': 'プレビュー', + 'projectEditDialog.field.iconBackground': 'アイコン背景', + 'projectEditDialog.field.iconBackgroundAria': 'プロジェクトアイコンの背景色', + 'projectEditDialog.option.none': 'なし', + 'projectEditDialog.actions.uploadIcon': 'アイコンをアップロード', + 'projectEditDialog.actions.uploading': 'アップロード中...', + 'projectEditDialog.actions.discoverFavicon': 'Faviconを検出', + 'projectEditDialog.actions.discovering': '検出中...', + 'projectEditDialog.actions.removeProjectIcon': 'プロジェクトアイコンを削除', + 'projectEditDialog.actions.removing': '削除中...', + 'projectEditDialog.actions.undoRemove': '削除を元に戻す', + 'projectEditDialog.actions.clear': 'クリア', + 'projectEditDialog.actions.cancel': 'キャンセル', + 'projectEditDialog.actions.save': '保存', + 'projectEditDialog.toast.failedToUploadIcon': 'プロジェクトアイコンのアップロードに失敗しました', + 'projectEditDialog.toast.iconUpdated': 'プロジェクトアイコンを更新しました', + 'projectEditDialog.toast.failedToRemoveIcon': 'プロジェクトアイコンの削除に失敗しました', + 'projectEditDialog.toast.iconRemoved': 'プロジェクトアイコンを削除しました', + 'projectEditDialog.toast.failedToDiscoverIcon': 'プロジェクトアイコンの検出に失敗しました', + 'projectEditDialog.toast.customIconAlreadySet': 'このプロジェクトにはカスタムアイコンがすでに設定されています', + 'projectEditDialog.toast.iconDiscovered': 'プロジェクトアイコンを検出しました', + 'agentManager.sidebar.search.placeholder': 'エージェントグループを検索...', + 'agentManager.sidebar.actions.newAgentGroup': '新規エージェントグループ', + 'agentManager.sidebar.actions.more': '... もっと見る({count})', + 'agentManager.sidebar.actions.showLess': '表示を減らす', + 'agentManager.sidebar.section.agentGroups': 'エージェントグループ', + 'agentManager.sidebar.state.loading': '読み込み中...', + 'agentManager.sidebar.state.noGroupsFound': 'グループが見つかりません', + 'agentManager.sidebar.state.noGroupsYet': 'まだエージェントグループがありません', + 'agentManager.sidebar.state.createToGetStarted': '新しいエージェントグループを作成して開始', + 'agentManager.sidebar.item.modelCountSingle': '{count}モデル', + 'agentManager.sidebar.item.modelCountPlural': '{count}モデル', + 'agentManager.sidebar.item.groupMenuAria': 'グループメニュー', + 'agentManager.sidebar.item.delete': '削除', + 'agentManager.sidebar.relativeTime.now': '今', + 'agentManager.sidebar.relativeTime.minutes': '{count}分', + 'agentManager.sidebar.relativeTime.hours': '{count}時間', + 'agentManager.sidebar.relativeTime.days': '{count}日', + 'agentManager.sidebar.dialog.deleteGroupTitle': 'エージェントグループを削除', + 'agentManager.sidebar.dialog.deleteGroupDescription': '「{group}」を削除しますか?このグループ内のすべてのワークツリーとセッションが削除されます。', + 'agentManager.sidebar.dialog.cancel': 'キャンセル', + 'agentManager.sidebar.dialog.delete': '削除', + 'agentManager.sidebar.dialog.deleting': '削除中...', + 'agentManager.sidebar.toast.deletingGroup': '「{group}」を削除中...', + 'agentManager.sidebar.toast.deletedGroup': '「{group}」を削除しました', + 'agentManager.sidebar.toast.failedToDeleteGroup': '「{group}」の完全削除に失敗しました', + 'agentManager.detail.header.modelCountSingle': '{count}モデル', + 'agentManager.detail.header.modelCountPlural': '{count}モデル', + 'agentManager.detail.header.noBranch': 'ブランチなし', + 'agentManager.detail.actions.worktreeActionsAria': 'ワークツリーアクション', + 'agentManager.detail.actions.removeThisWorktree': 'このワークツリーを削除', + 'agentManager.detail.actions.keepThisRemoveOthers': 'これを残して他を削除', + 'agentManager.detail.actions.copyWorktreePath': 'ワークツリーパスをコピー', + 'agentManager.detail.dialog.removeWorktreeTitle': 'ワークツリーを削除', + 'agentManager.detail.dialog.removeOtherWorktreesTitle': '他のワークツリーを削除', + 'agentManager.detail.dialog.removeWorktreeDescription': '「{label}」を削除しますか?そのワークツリー内の全セッションが削除され、ワークツリー自体も削除されます。', + 'agentManager.detail.dialog.removeOtherWorktreesDescription': '「{label}」を保持し、「{group}」内の他のワークツリーを削除します。', + 'agentManager.detail.dialog.cancel': 'キャンセル', + 'agentManager.detail.dialog.remove': '削除', + 'agentManager.detail.dialog.removeOthers': '他を削除', + 'agentManager.detail.dialog.working': '処理中...', + 'agentManager.detail.state.loadingSessionFor': '{label}のセッションを読み込み中', + 'agentManager.detail.state.sessionId': 'セッションID: {id}', + 'agentManager.detail.state.noSessionsInGroup': 'このグループにセッションはありません', + 'agentManager.detail.toast.noWorktreePath': 'ワークツリーパスは利用できません', + 'agentManager.detail.toast.worktreePathCopied': 'ワークツリーパスをコピーしました', + 'agentManager.detail.toast.failedToCopyPath': 'パスのコピーに失敗しました', + 'agentManager.detail.toast.removingWorktree': 'ワークツリーを削除中...', + 'agentManager.detail.toast.removingOtherWorktrees': '他のワークツリーを削除中...', + 'agentManager.detail.toast.failedToFullyRemoveWorktree': 'ワークツリーの完全削除に失敗しました', + 'agentManager.detail.toast.worktreeRemoved': 'ワークツリーを削除しました', + 'agentManager.detail.toast.otherWorktreesRemoved': '他のワークツリーを削除しました', + 'agentManager.empty.groupName.label': 'グループ名', + 'agentManager.empty.groupName.placeholder': '例: feature-auth, bugfix-login', + 'agentManager.empty.groupName.description': 'ワークツリーディレクトリとブランチ名に使用されます', + 'agentManager.empty.baseBranch.label': 'ベースブランチ', + 'agentManager.empty.baseBranch.description': '{branch}から新しいブランチを作成', + 'agentManager.empty.setupCommands.label': 'セットアップコマンド', + 'agentManager.empty.setupCommands.configured': '{count}設定済み', + 'agentManager.empty.setupCommands.description': '各新しいワークツリーで実行するコマンド。$ROOT_PROJECT_PATHでプロジェクトルートを指定。', + 'agentManager.empty.setupCommands.loading': '読み込み中...', + 'agentManager.empty.setupCommands.commandPlaceholder': '例: bun install', + 'agentManager.empty.setupCommands.removeCommandAria': 'コマンドを削除', + 'agentManager.empty.setupCommands.addCommand': 'コマンドを追加', + 'agentManager.empty.agent.label': 'エージェント', + 'agentManager.empty.agent.description': 'デフォルトの設定済みエージェントを使用', + 'agentManager.empty.models.label': 'モデル', + 'agentManager.empty.models.addModel': 'モデルを追加', + 'agentManager.empty.models.selectedSingle': '{count}モデル選択中', + 'agentManager.empty.models.selectedPlural': '{count}モデル選択中', + 'agentManager.empty.prompt.label': 'プロンプト', + 'agentManager.empty.prompt.placeholder': '何か質問...', + 'agentManager.empty.prompt.addAttachmentAria': '添付ファイルを追加', + 'agentManager.empty.actions.startAgentGroupAria': 'エージェントグループを開始', + 'agentManager.empty.toast.fileTooLarge': 'ファイル「{fileName}」が大きすぎます(最大10MB)', + 'agentManager.empty.toast.failedToAttach': '「{fileName}」の添付に失敗しました', + 'agentManager.empty.toast.attachedSingle': '{count}ファイルを添付しました', + 'agentManager.empty.toast.attachedPlural': '{count}ファイルを添付しました', + 'agentManager.empty.toast.failedToCreateGroup': 'エージェントグループの作成に失敗しました', + 'openInApp.actions.open': '開く', + 'openInApp.actions.openInAria': '{app}で開く', + 'openInApp.actions.chooseAppAria': '開くアプリを選択', + 'openInApp.actions.copyPath': 'パスをコピー', + 'openInApp.actions.refreshApps': 'アプリを更新', + 'openInApp.toast.pathCopied': 'パスをクリップボードにコピーしました', + 'projectActions.actions.addActionAria': 'アクションを追加', + 'projectActions.actions.addAction': 'アクションを追加', + 'projectActions.actions.addNewAction': '新しいアクションを追加', + 'projectActions.actions.autoDiscover': '自動検出', + 'projectActions.actions.chooseActionAria': 'プロジェクトアクションを選択', + 'projectActions.actions.openPreview': 'プレビューを開く', + 'projectActions.actions.runNamedAria': '{name}を実行', + 'projectActions.actions.stopNamedAria': '{name}を停止', + 'projectActions.label.fallbackAction': 'アクション', + 'projectActions.toast.openedUrlFromOutput': 'アクション出力からURLを開きました', + 'projectActions.toast.openedForwardedUrl': '転送URLを開きました', + 'projectActions.toast.openedActionUrl': 'アクションURLを開きました', + 'projectActions.error.noActiveDirectory': 'アクティブなディレクトリがありません', + 'projectActions.error.noActiveDirectoryForAction': 'アクションのアクティブなディレクトリがありません', + 'projectActions.error.failedToCreateTerminalSession': 'ターミナルセッションの作成に失敗しました', + 'projectActions.error.invalidCustomUrlFormat': '無効なカスタムURL形式です', + 'projectActions.error.selectedDesktopSshForwardUnavailable': '選択したデスクトップSSH転送は利用できません', + 'projectActions.error.failedToRunAction': 'アクションの実行に失敗しました', + 'mcpDropdown.title': 'MCPサーバー', + 'mcpDropdown.actions.refreshAria': '更新', + 'mcpDropdown.actions.openAria': 'MCPサーバー', + 'mcpDropdown.statusAria': 'MCPステータス', + 'mcpDropdown.status.unknown': '不明', + 'mcpDropdown.status.connected': '接続済み', + 'mcpDropdown.status.failed': '失敗: {error}', + 'mcpDropdown.status.unknownError': '不明なエラー', + 'mcpDropdown.status.needsAuth': '認証が必要です', + 'mcpDropdown.status.needsRegistration': '登録が必要: {error}', + 'mcpDropdown.empty.configureInConfig': '設定でMCPサーバーを構成してください。', + 'sessionAuth.error.rateLimitTitle': '試行回数が多すぎます', + 'sessionAuth.error.networkTitle': 'サーバーに到達できません', + 'sessionAuth.error.rateLimitDescriptionSingle': '再試行まで{minutes}分お待ちください。', + 'sessionAuth.error.rateLimitDescriptionPlural': '再試行まで{minutes}分お待ちください。', + 'sessionAuth.error.networkDescription': 'UIセッションを確認できませんでした。サービスが実行中であることを確認して再試行してください。', + 'sessionAuth.error.retry': '再試行', + 'sessionAuth.error.passkeySetupFailed': 'パスキーの設定に失敗しました。', + 'sessionAuth.error.incorrectPassword': 'パスワードが間違っています。もう一度お試しください。', + 'sessionAuth.error.unexpectedResponse': 'サーバーから予期しない応答がありました。', + 'sessionAuth.error.networkRetry': 'ネットワークエラー。接続を確認して再試行してください。', + 'sessionAuth.error.passkeySignInCanceled': 'パスキーサインインがキャンセルされました。', + 'sessionAuth.error.enterPasswordForPasskey': 'パスキーを追加するためにパスワードを入力してください。', + 'sessionAuth.locked.tunnelTitle': 'トンネルアクセスが必要', + 'sessionAuth.locked.unlockTitle': 'OpenChamberのロックを解除', + 'sessionAuth.locked.tunnelDescription': 'デスクトップアプリのワンタイム接続リンクを使用してこのトンネルを開きます。', + 'sessionAuth.locked.passwordDescription': 'このセッションはパスワードで保護されています。', + 'sessionAuth.locked.hostSwitcherHint': 'リモートに到達できない場合はローカルを使用してください。', + 'sessionAuth.actions.cancelPasskey': 'パスキーをキャンセル', + 'sessionAuth.actions.usePasskey': 'パスキーを使用', + 'sessionAuth.actions.unlockingAria': 'ロック解除中', + 'sessionAuth.actions.unlockAria': 'ロック解除', + 'sessionAuth.actions.trustDevice': 'このデバイスを信頼', + 'sessionAuth.actions.trustDeviceAria': 'このデバイスを信頼', + 'sessionAuth.actions.cancelPasskeySetup': 'パスキー設定をキャンセル', + 'sessionAuth.actions.addPasskey': 'パスキーを追加', + 'sessionAuth.password.placeholder': 'パスワードを入力', + 'sessionAuth.toast.passkeyAdded': 'パスキーを追加しました', + 'sessionAuth.toast.passkeySetupCanceled': 'パスキー設定をキャンセルしました', + 'desktopHostSwitcher.title': 'インスタンス', + 'desktopHostSwitcher.description': 'ローカルとリモートのOpenChamberサーバーを切り替えます', + 'desktopHostSwitcher.header.current': '現在', + 'desktopHostSwitcher.header.default': 'デフォルト', + 'desktopHostSwitcher.header.currentColon': '現在:', + 'desktopHostSwitcher.header.currentDefaultColon': '現在のデフォルト:', + 'desktopHostSwitcher.status.connected': '接続済み', + 'desktopHostSwitcher.status.authRequired': '認証が必要', + 'desktopHostSwitcher.status.checking': '確認中', + 'desktopHostSwitcher.status.updateRecommended': '更新推奨', + 'desktopHostSwitcher.status.incompatible': '互換性なし', + 'desktopHostSwitcher.status.wrongService': 'サービスが違います', + 'desktopHostSwitcher.status.unreachable': '到達不能', + 'desktopHostSwitcher.status.unknown': '不明', + 'desktopHostSwitcher.status.ping': ' · {ms}ms ping', + 'desktopHostSwitcher.statusAria': 'インスタンスステータス', + 'desktopHostSwitcher.sshPhase.ready': '準備完了', + 'desktopHostSwitcher.sshPhase.error': 'エラー', + 'desktopHostSwitcher.sshPhase.reconnecting': '再接続中', + 'desktopHostSwitcher.sshPhase.resolvingConfig': '設定を解決中', + 'desktopHostSwitcher.sshPhase.checkingAuth': '認証を確認中', + 'desktopHostSwitcher.sshPhase.connectingSsh': 'SSH接続中', + 'desktopHostSwitcher.sshPhase.probingRemote': 'リモートを調査中', + 'desktopHostSwitcher.sshPhase.installing': 'インストール中', + 'desktopHostSwitcher.sshPhase.updating': '更新中', + 'desktopHostSwitcher.sshPhase.detectingServer': 'サーバーを検出中', + 'desktopHostSwitcher.sshPhase.startingServer': 'サーバーを起動中', + 'desktopHostSwitcher.sshPhase.forwardingPorts': 'ポート転送中', + 'desktopHostSwitcher.sshPhase.idle': '待機中', + 'desktopHostSwitcher.ssh.needInstancesHint': 'SSHインスタンスが必要ですか?設定で管理してください。', + 'desktopHostSwitcher.ssh.instanceFallback': 'SSHインスタンス', + 'desktopHostSwitcher.ssh.connectingTo': '{host}に接続中', + 'desktopHostSwitcher.actions.refresh': '更新', + 'desktopHostSwitcher.actions.refreshInstancesAria': 'インスタンスを更新', + 'desktopHostSwitcher.actions.remoteSsh': 'リモートSSH', + 'desktopHostSwitcher.actions.instanceActionsAria': 'インスタンスアクション', + 'desktopHostSwitcher.actions.edit': '編集', + 'desktopHostSwitcher.actions.delete': '削除', + 'desktopHostSwitcher.actions.connect': '接続', + 'desktopHostSwitcher.actions.defaultInstanceAria': 'デフォルトインスタンス', + 'desktopHostSwitcher.actions.setAsDefaultAria': 'デフォルトに設定', + 'desktopHostSwitcher.actions.setAsDefault': 'デフォルトに設定', + 'desktopHostSwitcher.actions.openInNewWindowAria': '新しいウィンドウで開く', + 'desktopHostSwitcher.actions.openInNewWindow': '新しいウィンドウで開く', + 'desktopHostSwitcher.actions.addInstance': 'インスタンスを追加', + 'desktopHostSwitcher.actions.cancel': 'キャンセル', + 'desktopHostSwitcher.actions.save': '保存', + 'desktopHostSwitcher.actions.add': '追加', + 'desktopHostSwitcher.actions.switchToLocal': 'ローカルに切り替え', + 'desktopHostSwitcher.actions.retry': '再試行', + 'desktopHostSwitcher.actions.switchInstanceAria': 'インスタンスを切り替え', + 'desktopHostSwitcher.actions.switchInstance': 'インスタンスを切り替え', + 'desktopHostSwitcher.actions.switchToAria': '{instance}に切り替え', + 'desktopHostSwitcher.field.labelPlaceholder': 'ラベル', + 'desktopHostSwitcher.field.labelOptionalPlaceholder': 'ラベル(任意)', + 'desktopHostSwitcher.field.urlPlaceholder': 'https://host:port', + 'desktopHostSwitcher.state.limitedOnPage': 'インスタンススイッチャーはこのページでは制限されています。ローカルを使用して復旧してください。', + 'desktopHostSwitcher.state.loading': '読み込み中...', + 'desktopHostSwitcher.state.instanceUnreachable': 'インスタンスに到達できません', + 'desktopHostSwitcher.edit.title': 'インスタンスを編集', + 'desktopHostSwitcher.add.title': 'インスタンスを追加', + 'desktopHostSwitcher.error.failedToSave': '保存に失敗しました', + 'desktopHostSwitcher.error.failedToLoad': '読み込みに失敗しました', + 'desktopHostSwitcher.error.invalidUrl': '無効なURL(http/httpsである必要があります)', + 'desktopHostSwitcher.error.failedToOpenNewWindow': '新しいウィンドウを開けませんでした', + 'desktopHostSwitcher.instance.local': 'ローカル', + 'desktopHostSwitcher.instance.fallback': 'インスタンス', + 'desktopHostSwitcher.startup.title': 'デフォルトSSHインスタンスは利用できません', + 'desktopHostSwitcher.startup.connectingTo': '{host}に接続中...', + 'desktopHostSwitcher.startup.failed': 'デフォルトSSHインスタンスへの接続に失敗しました。', + 'desktopHostSwitcher.toast.sshConnected': 'SSHインスタンス「{host}」に接続しました', + 'desktopHostSwitcher.toast.sshFailedToConnect': 'SSHインスタンス「{host}」への接続に失敗しました', + 'desktopHostSwitcher.toast.instanceUnreachable': 'インスタンス「{host}」に到達できません', + 'miniChat.header.newSession': '新しいセッション', + 'miniChat.header.session': 'セッション', + 'miniChat.header.defaultAgent': 'デフォルトエージェント', + 'miniChat.header.noModel': 'モデルなし', + 'miniChat.status.busy': '実行中', + 'miniChat.status.retry': '再試行中', + 'miniChat.status.idle': '待機中', + 'miniChat.actions.pin': '他のウィンドウの上に固定', + 'miniChat.actions.unpin': 'ウィンドウの固定を解除', + 'miniChat.actions.pinAria': 'Mini Chatウィンドウを固定', + 'miniChat.actions.unpinAria': 'Mini Chatウィンドウの固定を解除', + 'miniChat.actions.openMain': 'メインウィンドウで開く', + 'miniChat.actions.openMainAria': 'メインウィンドウでセッションを開く', + 'miniChat.unavailable.title': 'セッションは利用できません', + 'miniChat.unavailable.description': 'このセッションを読み込めませんでした。削除されたか、アーカイブされたか、別のプロジェクトコンテキストから開かれた可能性があります。', + 'sessions.sidebar.session.menu.openMiniChatWindow': 'Mini Chatウィンドウで開く', + 'header.actions.newMiniChat': '新しいMini Chatウィンドウ', + 'header.actions.newMiniChatAria': '新しいMini Chatウィンドウを開く', + 'header.actions.openSessionMiniChat': 'Mini Chatでセッションを開く', + 'header.actions.openSessionMiniChatAria': '現在のセッションをMini Chatで開く', + 'header.windowControls.groupAria': 'ウィンドウコントロール', + 'header.windowControls.minimize': 'ウィンドウを最小化', + 'header.windowControls.maximize': 'ウィンドウを最大化', + 'header.windowControls.restore': 'ウィンドウを復元', + 'header.windowControls.close': 'ウィンドウを閉じる', + 'errorBoundary.title': '問題が発生しました', + 'errorBoundary.description': 'アプリケーションで予期しないエラーが発生しました。デバッグ用に記録されています。', + 'errorBoundary.state.unknownError': '不明なエラー', + 'errorBoundary.state.componentStackLabel': 'コンポーネントスタック:', + 'errorBoundary.actions.errorDetails': 'エラー詳細', + 'errorBoundary.actions.tryAgain': '再試行', + 'errorBoundary.actions.copy': 'コピー', + 'errorBoundary.actions.copied': 'コピーしました', + 'jsonTreeView.error.emptyJson': '空のJSON内容', + 'jsonTreeView.error.invalidJson': '無効なJSON', + 'jsonTreeView.error.invalidJsonTitle': '無効なJSON', + 'jsonTreeView.actions.expandAll': 'すべて展開', + 'jsonTreeView.actions.collapseAll': 'すべて折りたたむ', + 'numberInput.actions.decreaseAria': '値を減らす', + 'numberInput.actions.increaseAria': '値を増やす', + 'goToLineDialog.field.linePlaceholderShort': '行', + 'goToLineDialog.field.linePlaceholder': '行番号', + 'goToLineDialog.actions.go': '移動', + 'goToLineDialog.helper.editorUnavailable': 'エディターは利用できません。', + 'goToLineDialog.helper.currentLineRange': '現在の行: {current}。1から{max}の間の行番号を入力して移動します。', + 'goToLineDialog.helper.goToLine': '{line}行目に移動', + 'dialog.common.actions.close': '閉じる', + 'filesView.toast.relativePathCopied': '相対パスをコピーしました', + 'filesView.tree.menu.copyRelativePath': '相対パスをコピー', + 'multiRun.branchSelector.placeholder.selectSourceBranch': 'ソースブランチを選択...', + 'multiRun.branchSelector.status.loadingBranches': 'ブランチを読み込み中...', + 'multiRun.branchSelector.status.noBranchesFound': 'ブランチが見つかりません', + 'multiRun.branchSelector.status.notInGitRepository': 'Gitリポジトリ内ではありません。', + 'multiRun.branchSelector.groups.localBranches': 'ローカルブランチ', + 'multiRun.branchSelector.groups.remoteBranches': 'リモートブランチ', + 'multiRun.window.actions.closeAria': 'マルチランを閉じる', + 'multiRun.window.description': 'OpenChamberマルチランウィンドウ。', + 'voice.status.idle': '音声準備完了', + 'voice.status.listening': '聴取中...', + 'voice.status.processing': '処理中...', + 'voice.status.speaking': '発話中...', + 'voice.status.error': '音声エラー', + 'voice.status.conversationModeActiveAria': '会話モードアクティブ', + 'voice.action.finishAndTranscribe': '音声入力を終了して文字起こし', + 'onboarding.common.actions.back': '戻る', + 'onboarding.common.copyToClipboard': 'クリップボードにコピー', + 'onboarding.common.status.copiedToClipboard': 'クリップボードにコピーしました', + 'onboarding.chooser.title': 'OpenChamberへようこそ', + 'onboarding.chooser.description': '開始する接続方法を選択してください。', + 'onboarding.chooser.tabs.localInstall': 'ローカルインストール', + 'onboarding.chooser.tabs.connectRemote': 'リモートに接続', + 'onboarding.localSetup.title': 'OpenCodeのセットアップ', + 'onboarding.localSetup.description': 'OpenCode CLIをインストールして続行します。', + 'onboarding.localSetup.dialog.selectOpencodeBinary': 'opencodeバイナリを選択', + 'onboarding.localSetup.errors.cliNotReady': 'OpenCode CLIの準備ができていません。インストールが完了していることを確認してもう一度お試しください。', + 'onboarding.localSetup.errors.detectionFailed': '検出に失敗しました', + 'onboarding.localSetup.windows.title': 'Windowsセットアップ', + 'onboarding.localSetup.windows.stepInstallWsl': '以下のコマンドでOpenCodeをインストールします。', + 'onboarding.localSetup.windows.stepInstallWslSuffix': '', + 'onboarding.localSetup.windows.stepRunInstallInWsl': 'Windowsターミナルで以下のインストールコマンドを実行します。', + 'onboarding.localSetup.windows.stepSetBinaryPath': 'OpenChamberがOpenCodeを自動検出しない場合、以下のパスを手動で設定します。', + 'onboarding.localSetup.intro': 'OpenCodeはOpenChamberの中核です — インストールして開始しましょう。', + 'onboarding.localSetup.docs.windows': 'OpenCodeドキュメント', + 'onboarding.localSetup.docs.default': 'OpenCodeドキュメント', + 'onboarding.localSetup.actions.checking': '確認中…', + 'onboarding.localSetup.actions.checkNow': '今すぐ確認', + 'onboarding.localSetup.helper.checkAndContinue': 'クリックしてOpenCode CLIが利用可能か確認します。成功すると自動的にメイン画面に進みます。', + 'onboarding.localSetup.status.watching': 'OpenCodeを待機中', + 'onboarding.localSetup.field.alreadyInstalled': 'すでにインストール済みですか?OpenCode CLIのパスを設定:', + 'onboarding.localSetup.advanced.title': 'カスタムバイナリパスを設定', + 'onboarding.localSetup.troubleshoot.title': '問題が発生しましたか?', + 'onboarding.localSetup.actions.browse': '参照', + 'onboarding.localSetup.actions.apply': '適用', + 'onboarding.localSetup.helper.saveAndReload': 'OpenChamber設定に保存し、OpenCode設定を再読み込みします。', + 'onboarding.localSetup.remotePreference': 'リモートサーバーを使用しますか?', + 'onboarding.localSetup.actions.connectRemoteServer': 'リモートサーバーに接続 →', + 'onboarding.localSetup.windows.hintInstallInWsl': 'Windowsでは、OpenCodeをネイティブでインストールして実行します。', + 'onboarding.localSetup.windows.hintDetectionFailed': '検出に失敗した場合、opencode.cmdやopencode.exeなどのネイティブパスを設定してください。', + 'onboarding.localSetup.hint.ensurePath': 'すでにインストール済みですか?opencodeがPATHにあることを確認してください。', + 'onboarding.localSetup.hint.setEnv': 'またはOPENCODE_BINARY環境変数を設定してください。', + 'onboarding.localSetup.hint.missingRuntime': '"env: node: No such file or directory"または"env: bun: No such file or directory"が表示される場合、そのランタイムをインストールするかPATHに追加してください。', + 'onboarding.remoteConnection.title': 'リモートサーバーに接続', + 'onboarding.remoteConnection.titleRecovery': '別のサーバーに接続', + 'onboarding.remoteConnection.description': '接続するOpenChamberサーバーのアドレスを入力します。', + 'onboarding.remoteConnection.field.serverAddress': 'サーバーアドレス', + 'onboarding.remoteConnection.field.serverAddressPlaceholder': 'https://your-server.example.com:4096', + 'onboarding.remoteConnection.field.nameOptional': '名前(任意)', + 'onboarding.remoteConnection.field.namePlaceholder': 'マイリモートサーバー', + 'onboarding.remoteConnection.errors.connectionTestFailed': '接続テストに失敗しました', + 'onboarding.remoteConnection.errors.failedToSaveConnection': '接続の保存に失敗しました', + 'onboarding.remoteConnection.status.connectedSuccessfully': '接続に成功しました({latencyMs}ms)', + 'onboarding.remoteConnection.status.authWarning': 'サーバーは認証を必要とします。接続は可能です。', + 'onboarding.remoteConnection.status.connectionFailed': '接続に失敗しました', + 'onboarding.remoteConnection.status.suggestionsUnreachable': 'ヒント: サーバーアドレスを確認し、サーバーが実行中であることを確認し、ネットワーク接続を確認してください。', + 'onboarding.remoteConnection.status.suggestionsWrongService': 'ヒント: URLがOpenChamberサーバーを指しているか確認するか、サーバー管理者に問い合わせてください。', + 'onboarding.remoteConnection.actions.testing': 'テスト中…', + 'onboarding.remoteConnection.actions.testConnection': '接続テスト', + 'onboarding.remoteConnection.actions.connectAndRestart': '接続して再起動', + 'onboarding.remoteConnection.actions.whatToDo': 'どうしますか?', + 'onboarding.remoteConnection.actions.chooseDifferentServer': '別のサーバーを選択', + 'onboarding.remoteConnection.actions.useLocalInstead': '代わりにローカルを使用', + 'onboarding.remoteConnection.probe.authMessage': 'サーバーは認証を必要とします。接続は可能ですが、認証情報の提供が必要な場合があります。', + 'onboarding.remoteConnection.probe.updateRecommendedMessage': 'このインスタンスは異なるバージョンのOpenChamberを実行しています。接続は可能ですが、正常に動作しない場合は両方のアプリを更新してください。', + 'onboarding.remoteConnection.probe.incompatibleMessage': 'サーバーはOpenChamberを実行していますが、このアプリバージョンと互換性がありません。サーバーのOpenChamberを更新してから再試行してください。', + 'onboarding.remoteConnection.probe.wrongServiceMessage': 'サーバーは応答しましたが、OpenChamberを実行していません。アドレスがOpenChamberサーバーを指していることを確認してください。', + 'onboarding.remoteConnection.probe.unreachableMessage': 'サーバーに到達できません。ネットワーク接続を確認し、サーバーアドレスを確認してください。', + 'onboarding.desktopRecovery.localUnavailable.title': 'ローカルOpenCodeが利用できません', + 'onboarding.desktopRecovery.localUnavailable.description': 'OpenCode CLIを起動できないか、インストールされていません。OpenCodeをインストールするか、代わりにリモートサーバーに接続してください。', + 'onboarding.desktopRecovery.localUnavailable.retry': 'ローカルを再試行', + 'onboarding.desktopRecovery.localUnavailable.useLocal': 'ローカルをセットアップ', + 'onboarding.desktopRecovery.noDefaultConnection.title': 'デフォルト接続がありません', + 'onboarding.desktopRecovery.noDefaultConnection.description': '保存されたデフォルト接続が見つかりませんでした。接続方法を選択してください。', + 'onboarding.desktopRecovery.remoteUnreachable.title': 'リモートサーバーに到達できません', + 'onboarding.desktopRecovery.remoteUnreachable.description': '「{host}」に接続できませんでした。ネットワーク接続を確認し、サーバーアドレスを確認してください。', + 'onboarding.desktopRecovery.remoteUnreachable.retry': '接続を再試行', + 'onboarding.desktopRecovery.incompatibleServer.title': '互換性のないサーバー', + 'onboarding.desktopRecovery.incompatibleServer.description': '「{host}」のサーバーはOpenChamberを実行していません。アドレスがOpenChamberサーバーを指していることを確認してください。', + 'onboarding.desktopRecovery.remoteIncompatible.title': 'サーバーの更新が必要', + 'onboarding.desktopRecovery.remoteIncompatible.description': '「{host}」のOpenChamberサーバーはこのアプリバージョンと互換性がありません。サーバーのOpenChamberを更新してから再試行してください。', + 'onboarding.desktopRecovery.common.useLocal': 'ローカルを使用', + 'onboarding.desktopRecovery.common.useRemote': 'リモートを使用', + 'onboarding.desktopRecovery.actions.retrying': '再試行中…', + 'onboarding.desktopRecovery.actions.retryConnection': '接続を再試行', + 'startup.initRecovery.title': '起動に失敗しました', + 'startup.initRecovery.description': 'OpenChamberが初期化を完了できませんでした。サーバーが実行中であることを確認してから再試行してください。', + 'startup.initRecovery.retry': '再試行', + 'startup.initRecovery.retrying': '再試行中…', + 'onboarding.desktopRecovery.placeholders.remoteServer': 'リモートサーバー', + 'onboarding.desktopRecovery.placeholders.unknownServer': '不明', + 'vscodeLayout.title.chat': 'チャット', + 'vscodeLayout.title.newSession': '新しいセッション', + 'vscodeLayout.title.sessions': 'セッション', + 'vscodeLayout.title.sessionFallback': 'セッション', + 'vscodeLayout.actions.backToSessionsAria': 'セッションに戻る', + 'vscodeLayout.actions.archiveAllAria': 'すべてのセッションをアーカイブ', + 'vscodeLayout.actions.archiveAllConfirm': 'すべてアーカイブ', + 'vscodeLayout.actions.archiveAllSuccess': '{count}セッションをアーカイブしました', + 'vscodeLayout.actions.archiveAllError': '{count}セッションのアーカイブに失敗しました', + 'vscodeLayout.actions.cancel': 'キャンセル', + 'vscodeLayout.actions.newSessionAria': '新しいセッション', + 'vscodeLayout.actions.openAgentManagerAria': 'エージェントマネージャーを開く', + 'vscodeLayout.actions.resizeSessionsSidebarAria': 'セッションサイドバーのサイズを調整', + 'vscodeLayout.actions.settingsAria': '設定', + 'vscodeLayout.quota.title': 'レート制限', + 'vscodeLayout.quota.mode.used': '使用済み', + 'vscodeLayout.quota.mode.remaining': '残り', + 'vscodeLayout.quota.lastUpdated': '最終更新 {time}', + 'vscodeLayout.quota.noRateLimitsAvailable': 'レート制限は利用できません。', + 'vscodeLayout.quota.noRateLimitsReported': 'レート制限は報告されていません。', + 'vscodeLayout.quota.actions.rateLimitsAria': 'レート制限', + 'vscodeLayout.quota.actions.showUsedAria': '使用済みクォータを表示', + 'vscodeLayout.quota.actions.showRemainingAria': '残りクォータを表示', + 'vscodeLayout.quota.actions.refreshAria': 'レート制限を更新', + 'updateDialog.header.updateAvailable': '更新があります', + 'updateDialog.header.updating': 'OpenChamberを更新中...', + 'updateDialog.status.installingUpdate': '更新をインストール中...', + 'updateDialog.status.serverRestarting': 'サーバーを再起動中...', + 'updateDialog.status.waitingForServer': 'サーバーを待機中...', + 'updateDialog.status.autoReloadHint': '更新が完了すると自動的にページが再読み込みされます。', + 'updateDialog.fallback.updateViaTerminal': 'またはターミナルで更新:', + 'updateDialog.actions.copyCommand': 'コマンドをコピー', + 'updateDialog.actions.copied': 'コピーしました!', + 'updateDialog.status.downloadingPayload': '更新ペイロードをダウンロード中...', + 'updateDialog.actions.downloadUpdate': '更新をダウンロード', + 'updateDialog.status.downloading': 'ダウンロード中...', + 'updateDialog.actions.restartToUpdate': '再起動して更新', + 'updateDialog.actions.updateNow': '今すぐ更新', + 'updateDialog.status.updating': '更新中...', + 'updateDialog.error.updateFailed': '更新に失敗しました', + 'updateDialog.error.takingLonger': '更新に予想以上に時間がかかっています。しばらく待ってから更新するか、次を実行: openchamber update', + 'opencodeUpdate.toast.available.title': 'OpenCode更新', + 'opencodeUpdate.toast.available.description': 'バージョン{version}が利用可能です。', + 'opencodeUpdate.toast.actions.update': '更新', + 'opencodeUpdate.toast.actions.dismiss': '閉じる', + 'opencodeUpdate.toast.actions.reload': 'OpenCodeを再読み込み', + 'opencodeUpdate.toast.upgrading.title': 'OpenCodeを更新中...', + 'opencodeUpdate.toast.upgrading.description': 'OpenChamberを開いたままにしてください。', + 'opencodeUpdate.toast.updated.title': 'OpenCodeを更新しました', + 'opencodeUpdate.toast.updated.description': '更新をインストールしました。', + 'opencodeUpdate.toast.updated.descriptionWithVersion': 'バージョン{version}をインストールしました。', + 'opencodeUpdate.toast.failed.title': 'OpenCodeを更新できませんでした', + 'opencodeUpdate.toast.failed.description': 'OpenCodeのアップグレードに失敗しました。', + 'opencodeUpdate.toast.reload.message': 'OpenCodeを再起動中...', + 'memoryDebugPanel.title': 'デバッグパネル', + 'memoryDebugPanel.tabs.memory': 'メモリ', + 'memoryDebugPanel.tabs.streaming': 'ストリーミング', + 'memoryDebugPanel.section.sessionsInMemory': 'メモリ内のセッション', + 'memoryDebugPanel.section.uiStreamingMetrics': 'UIストリーミングメトリクス', + 'memoryDebugPanel.section.vscodeBridgeMetrics': 'VS Codeブリッジメトリクス', + 'memoryDebugPanel.section.noUiSamples': 'まだUIストリーミングサンプルがありません。ストリームを開始してこのパネルを開いたままにしてください。', + 'memoryDebugPanel.section.noVscodeSamples': 'まだVS Codeブリッジサンプルがありません。', + 'memoryDebugPanel.metric.totalMessages': '総メッセージ数', + 'memoryDebugPanel.metric.cachedSessions': 'キャッシュされたセッション', + 'memoryDebugPanel.metric.userMessages': 'ユーザーメッセージ', + 'memoryDebugPanel.metric.assistantMessages': 'アシスタントメッセージ', + 'memoryDebugPanel.metric.viewportWindow': 'ビューポートウィンドウ', + 'memoryDebugPanel.metric.zombieTimeout': 'ゾンビタイムアウト', + 'memoryDebugPanel.metric.githubTotalRequests': 'GitHub総リクエスト数', + 'memoryDebugPanel.metric.metrics': 'メトリクス', + 'memoryDebugPanel.metric.samples': 'サンプル', + 'memoryDebugPanel.metric.lastUpdate': '最終更新', + 'memoryDebugPanel.metric.uiMetrics': 'UIメトリクス', + 'memoryDebugPanel.metric.vscodeMetrics': 'VS Codeメトリクス', + 'memoryDebugPanel.metric.messageListRenders': 'MsgListレンダリング', + 'memoryDebugPanel.metric.messageListStreamRenders': 'MsgListストリームレンダリング', + 'memoryDebugPanel.metric.chatMessageRenders': 'ChatMessageレンダリング', + 'memoryDebugPanel.metric.chatMessageStreamRenders': 'ChatMessageストリームレンダリング', + 'memoryDebugPanel.metric.chatMessageStaticDuringStream': 'ストリーム中の静止ChatMessage', + 'memoryDebugPanel.metric.chatMessageStaticOutsideActiveTurn': 'アクティブターン外の静止ChatMessage', + 'memoryDebugPanel.metric.messagesValue': '{count}メッセージ', + 'memoryDebugPanel.metric.minutesValue': '{count}分', + 'memoryDebugPanel.metric.msgsValue': '{count}メッセージ', + 'memoryDebugPanel.metric.roleMsgsValue': 'U {user} / A {assistant}', + 'memoryDebugPanel.metric.countValue': 'カウント {value}', + 'memoryDebugPanel.metric.avgValue': '平均 {value}', + 'memoryDebugPanel.metric.maxValue': '最大 {value}', + 'memoryDebugPanel.metric.totalValue': '合計 {value}', + 'memoryDebugPanel.actions.logState': '状態をログ', + 'memoryDebugPanel.actions.copyJson': 'JSONをコピー', + 'memoryDebugPanel.tooltip.logCurrentState': '現在のメモリ状態をブラウザコンソールに出力', + 'memoryDebugPanel.streaming.copy.copied': 'ストリーミングデバッグJSONをコピーしました', + 'memoryDebugPanel.streaming.copy.failed': 'JSONのコピーに失敗しました', + 'memoryDebugPanel.streaming.copy.hint': 'UIとVS Codeの両方のストリーミングメトリクスをJSONとしてエクスポートします', + 'memoryDebugPanel.common.idle': '待機中', + 'memoryDebugPanel.common.live': 'ライブ', + 'memoryDebugPanel.common.notAvailable': 'N/A', + 'memoryDebugPanel.common.untitled': '無題', + 'directoryTree.field.newDirectoryPlaceholder': 'new_directory', + 'textarea.resizeHandleAria': 'テキストエリアのサイズを変更', + 'sidebar.resize.leftPanelAria': '左パネルのサイズを変更', + 'sidebar.resize.rightPanelAria': '右パネルのサイズを変更', + 'mainLayout.mobile.closeDrawerAria': 'ドロワーを閉じる', + 'sortableTabsStrip.aria.tabs': 'タブ', + 'openChamberLogo.aria.logo': 'OpenChamberロゴ', + 'markdownRenderer.table.actions.copyTitle': 'テーブルをコピー', + 'markdownRenderer.table.actions.downloadTitle': 'テーブルをダウンロード', + 'markdownRenderer.table.toast.downloadedAsFormat': 'テーブルを{format}としてダウンロードしました', + 'markdownRenderer.mermaid.actions.copyTitle': 'コピー', + 'markdownRenderer.mermaid.actions.copySourceTitle': 'ソースをコピー', + 'markdownRenderer.mermaid.actions.downloadSvgTitle': 'SVGをダウンロード', + 'markdownRenderer.mermaid.toast.downloadFailed': 'ダイアグラムのダウンロードに失敗しました', + 'common.date.today': '今日', + 'common.date.yesterday': '昨日', + 'common.date.yesterdayWithTime': '昨日{time}', + 'common.relative.justNow': 'たった今', + 'common.relative.minutesAgoShort': '{count}分前', + 'common.relative.hoursAgoShort': '{count}時間前', + 'common.relative.daysAgoShort': '{count}日前', + 'common.relative.weeksAgoShort': '{count}週前', + 'common.relative.yearsAgoShort': '{count}年前', + 'common.relative.daysAgoCompact': '{count}日前', + 'common.relative.weeksAgoCompact': '{count}週前', + 'common.relative.yearsAgoCompact': '{count}年前', + 'contextFileOpen.failure.tooLarge': 'ファイルが大きすぎて開けません(>{count}行)', + 'contextFileOpen.failure.missing': 'ファイルが見つかりません', + 'contextFileOpen.failure.unreadable': 'ファイルを開けませんでした', + 'quota.window.5h': '5時間', + 'quota.window.7d': '7日間制限', + 'quota.window.7dSonnet': '7日間Sonnet制限', + 'quota.window.7dOpus': '7日間Opus制限', + 'quota.window.weekly': '週間制限', + 'quota.window.daily': '日次', + 'quota.window.monthly': '月間制限', + 'quota.window.credits': 'クレジット', + 'quota.window.creditsBalance': 'クレジット残高', + 'quota.window.billingCycle': '請求サイクル', + 'quota.window.auto': '自動', + 'quota.window.api': 'API', + 'quota.window.planLimit': 'プラン制限', + 'quota.window.onDemand': '従量課金', + 'quota.window.session': 'セッション', + 'quota.window.premium': 'プレミアムインタラクション', + 'quota.window.chat': 'チャットリクエスト', + 'quota.window.completions': '完了', + 'onboarding.localSetup.actions.checkAndContinue': 'インストール完了、確認して続行', + 'onboarding.localSetup.status.autoContinue': '検出され次第自動的に続行します。', + 'updateDialog.changelog.title': '新機能', + 'quota.window.premiumInteractions': 'プレミアムインタラクション', + +}; diff --git a/packages/ui/src/lib/i18n/messages/ko.ts b/packages/ui/src/lib/i18n/messages/ko.ts index 536dae55..0e590934 100644 --- a/packages/ui/src/lib/i18n/messages/ko.ts +++ b/packages/ui/src/lib/i18n/messages/ko.ts @@ -14,6 +14,7 @@ export const dict: Record = { 'common.language.brazilianPortuguese': '브라질 포르투갈어', 'common.language.korean': '한국어', 'common.language.polish': '폴란드어', + 'common.language.japanese': '일본어', 'common.revealPath.finder': 'Finder에서 보기', 'common.revealPath.fileExplorer': 'File Explorer에서 열기', 'common.revealPath.fileManager': '파일 관리자에서 열기', diff --git a/packages/ui/src/lib/i18n/messages/pl.ts b/packages/ui/src/lib/i18n/messages/pl.ts index 8429129a..f4c2f728 100644 --- a/packages/ui/src/lib/i18n/messages/pl.ts +++ b/packages/ui/src/lib/i18n/messages/pl.ts @@ -15,6 +15,7 @@ export const dict: Record = { 'common.language.brazilianPortuguese': 'Portugalski (Brazylia)', 'common.language.korean': 'Koreański', 'common.language.polish': 'Polski', + 'common.language.japanese': 'Japoński', 'common.revealPath.finder': 'Pokaż w Finderze', 'common.revealPath.fileExplorer': 'Otwórz w Eksploratorze plików', 'common.revealPath.fileManager': 'Otwórz w Menedżerze plików', diff --git a/packages/ui/src/lib/i18n/messages/pt-BR.ts b/packages/ui/src/lib/i18n/messages/pt-BR.ts index c60672b8..5063bb75 100644 --- a/packages/ui/src/lib/i18n/messages/pt-BR.ts +++ b/packages/ui/src/lib/i18n/messages/pt-BR.ts @@ -14,6 +14,7 @@ export const dict: Record = { "common.language.brazilianPortuguese": "Português brasileiro", "common.language.korean": "Coreano", "common.language.polish": "Polonês", + "common.language.japanese": "Japonês", "common.revealPath.finder": "Mostrar no Finder", "common.revealPath.fileExplorer": "Abrir no File Explorer", "common.revealPath.fileManager": "Abrir no gerenciador de arquivos", diff --git a/packages/ui/src/lib/i18n/messages/uk.ts b/packages/ui/src/lib/i18n/messages/uk.ts index add85902..5fca9424 100644 --- a/packages/ui/src/lib/i18n/messages/uk.ts +++ b/packages/ui/src/lib/i18n/messages/uk.ts @@ -14,6 +14,7 @@ export const dict: Record = { "common.language.brazilianPortuguese": "Бразильська португальська", "common.language.korean": "Корейська", "common.language.polish": "Польська", + "common.language.japanese": "Японська", "common.revealPath.finder": "Показати у Finder", "common.revealPath.fileExplorer": "Відкрити у File Explorer", "common.revealPath.fileManager": "Відкрити у файловому менеджері", diff --git a/packages/ui/src/lib/i18n/messages/zh-CN.ts b/packages/ui/src/lib/i18n/messages/zh-CN.ts index 73899a31..82b4dced 100644 --- a/packages/ui/src/lib/i18n/messages/zh-CN.ts +++ b/packages/ui/src/lib/i18n/messages/zh-CN.ts @@ -14,6 +14,7 @@ export const dict: Record = { 'common.language.brazilianPortuguese': '巴西葡萄牙语', 'common.language.korean': '韩语', 'common.language.polish': '波兰语', + 'common.language.japanese': '日语', 'common.revealPath.finder': '在 Finder 中显示', 'common.revealPath.fileExplorer': '在文件资源管理器中打开', 'common.revealPath.fileManager': '在文件管理器中打开', diff --git a/packages/ui/src/lib/i18n/messages/zh-TW.ts b/packages/ui/src/lib/i18n/messages/zh-TW.ts index ac74fd07..5b1d666c 100644 --- a/packages/ui/src/lib/i18n/messages/zh-TW.ts +++ b/packages/ui/src/lib/i18n/messages/zh-TW.ts @@ -14,6 +14,7 @@ export const dict: Record = { 'common.language.brazilianPortuguese': '巴西葡萄牙語', 'common.language.korean': '韓語', 'common.language.polish': '波蘭語', + 'common.language.japanese': '日語', 'common.revealPath.finder': '在 Finder 中顯示', 'common.revealPath.fileExplorer': '在檔案總管中開啟', 'common.revealPath.fileManager': '在檔案管理員中開啟', diff --git a/packages/ui/src/lib/i18n/runtime.ts b/packages/ui/src/lib/i18n/runtime.ts index c2a1c4c0..a80ad5a0 100644 --- a/packages/ui/src/lib/i18n/runtime.ts +++ b/packages/ui/src/lib/i18n/runtime.ts @@ -1,10 +1,10 @@ -export type Locale = 'en' | 'fr' | 'zh-CN' | 'zh-TW' | 'uk' | 'es' | 'pt-BR' | 'ko' | 'pl'; +export type Locale = 'en' | 'fr' | 'zh-CN' | 'zh-TW' | 'uk' | 'es' | 'pt-BR' | 'ko' | 'pl' | 'ja'; -export const LOCALES = ['en', 'fr', 'zh-CN', 'zh-TW', 'uk', 'es', 'pt-BR', 'ko', 'pl'] as const satisfies readonly Locale[]; +export const LOCALES = ['en', 'fr', 'zh-CN', 'zh-TW', 'uk', 'es', 'pt-BR', 'ko', 'pl', 'ja'] as const satisfies readonly Locale[]; export const DEFAULT_LOCALE: Locale = 'en'; -export const LOCALE_LABEL_KEYS: Record = { +export const LOCALE_LABEL_KEYS: Record = { en: 'common.language.english', fr: 'common.language.french', 'zh-CN': 'common.language.simplifiedChinese', @@ -14,6 +14,7 @@ export const LOCALE_LABEL_KEYS: Record { ? await import('./messages/ko') as { dict: I18nDictionary } : locale === 'pl' ? await import('./messages/pl') as { dict: I18nDictionary } - : { dict: enDict }; + : locale === 'ja' + ? await import('./messages/ja') as { dict: I18nDictionary } + : { dict: enDict }; dictionaries.set(locale, mod.dict); return mod.dict; }