diff --git a/README.ja.md b/README.ja.md new file mode 100644 index 000000000..6e3f7a992 --- /dev/null +++ b/README.ja.md @@ -0,0 +1,172 @@ +

+ Paseo logo +

+ +

Paseo

+ +

+ English · + 简体中文 · + 日本語 +

+ +

+ + GitHub stars + + + GitHub release + + + X + + + Discord + + + Reddit + +

+ +

Claude Code、Codex、Copilot、OpenCode、Pi のエージェントを、ひとつのインターフェースで。

+ +

+ Paseo アプリのスクリーンショット +

+ +

+ Paseo モバイルアプリ +

+ +> [!NOTE] +> 私はひとりでメンテナンスしているため、GitHub Issues を毎日確認できるとは限りません。 +> 急ぎの問題や作業がブロックされている場合は、[Discord](https://discord.gg/jz8T2uahpH) から連絡するのが一番早いです。 + +--- + +自分のマシンでエージェントを並列実行。スマートフォンからでもデスクからでも、開発を進めてリリースできます。 + +- **セルフホスト:** エージェントはあなたのマシン上で動作し、完全な開発環境を使用します。自分のツール・設定・スキルをそのまま活用できます。 +- **マルチプロバイダー:** Claude Code、Codex、Copilot、OpenCode、Pi を同一のインターフェースで利用。タスクに合ったモデルを選べます。 +- **音声コントロール:** 音声モードでタスクを口述したり問題を話し合ったりできます。ハンズフリーが必要なときに便利です。 +- **クロスデバイス:** iOS、Android、デスクトップ、Web、CLI に対応。机で作業を始め、スマートフォンで確認し、ターミナルから自動化できます。 +- **プライバシー優先:** Paseo にはテレメトリー・トラッキング・強制ログインは一切ありません。 + +## はじめかた + +Paseo はコーディングエージェントを管理するローカルサーバー(デーモン)を起動します。デスクトップアプリ・モバイルアプリ・Web アプリ・CLI などのクライアントがこのデーモンに接続します。 + +### 前提条件 + +エージェント CLI をひとつ以上インストールし、認証情報を設定しておく必要があります。 + +- [Claude Code](https://docs.anthropic.com/en/docs/claude-code) +- [Codex](https://github.com/openai/codex) +- [GitHub Copilot](https://github.com/features/copilot/cli/) +- [OpenCode](https://github.com/anomalyco/opencode) +- [Pi](https://pi.dev) + +### デスクトップアプリ(推奨) + +[paseo.sh/download](https://paseo.sh/download) または [GitHub のリリースページ](https://github.com/getpaseo/paseo/releases)からダウンロードしてください。アプリを開くとデーモンが自動的に起動します。追加のインストールは不要です。 + +スマートフォンから接続するには、Settings 画面に表示される QR コードをスキャンしてください。 + +### CLI / ヘッドレス + +CLI をインストールして Paseo を起動します。 + +```bash +npm install -g @getpaseo/cli +paseo +``` + +ターミナルに QR コードが表示されます。どのクライアントからでも接続できます。サーバーやリモートマシンでの利用に適しています。 + +詳しいセットアップと設定については以下を参照してください。 + +- [ドキュメント](https://paseo.sh/docs) +- [設定リファレンス](https://paseo.sh/docs/configuration) + +## CLI + +アプリでできることはすべてターミナルからも実行できます。 + +```bash +paseo run --provider claude/opus-4.6 "implement user authentication" +paseo run --provider codex/gpt-5.4 --worktree feature-x "implement feature X" + +paseo ls # 実行中のエージェントを一覧表示 +paseo attach abc123 # ライブ出力をストリーミング +paseo send abc123 "also add tests" # 追加タスクを送信 + +# リモートデーモンで実行 +paseo --host workstation.local:6767 run "run the full test suite" +``` + +詳細は[完全な CLI リファレンス](https://paseo.sh/docs/cli)を参照してください。 + +## スキル + +スキルはエージェントに Paseo を使って他のエージェントをオーケストレーションする方法を教えます。 + +```bash +npx skills add getpaseo/paseo +``` + +どのエージェントとの会話でも使用できます。 + +- `/paseo-handoff` — エージェント間で作業を引き継ぎます。私はこれを使って Claude で計画し、Codex に実装を引き継いでいます。 +- `/paseo-loop` — 明確な受け入れ基準に沿ってエージェントをループさせます(Ralph loops とも呼ばれます)。検証役を追加することもできます。 +- `/paseo-advisor` — 単一のエージェントをアドバイザーとして起動し、作業を委任せずにセカンドオピニオンを得ます。 +- `/paseo-committee` — 対照的な2つのエージェントで委員会を構成し、一歩引いた視点で根本原因を分析して計画を作成します。 + +## 開発 + +モノレポのパッケージ構成: + +- `packages/server`: Paseo デーモン(エージェントプロセスのオーケストレーション、WebSocket API、MCP サーバー) +- `packages/app`: Expo クライアント(iOS、Android、Web) +- `packages/cli`: デーモンおよびエージェントワークフロー向け `paseo` CLI +- `packages/desktop`: Electron デスクトップアプリ +- `packages/relay`: リモート接続用リレーパッケージ +- `packages/website`: マーケティングサイトとドキュメント(`paseo.sh`) + +よく使うコマンド: + +```bash +# すべてのローカル開発サービスを起動 +npm run dev + +# 個別のサービスを起動 +npm run dev:server +npm run dev:app +npm run dev:desktop +npm run dev:website + +# サーバースタックをビルド +npm run build:server + +# リポジトリ全体のチェック +npm run typecheck +``` + +## コミュニティ + +- [paseo-relay](https://github.com/zenghongtu/paseo-relay) — Go 実装のセルフホスト型リレー + +--- + +

+ + + + + getpaseo/paseo のスター履歴チャート + + +

+ +## ライセンス + +AGPL-3.0 diff --git a/README.md b/README.md index 907f13a34..7bacd87ac 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,8 @@

English · - 简体中文 + 简体中文 · + 日本語

diff --git a/README.zh-CN.md b/README.zh-CN.md index 07fc4f6cb..385464471 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -6,7 +6,8 @@

English · - 简体中文 + 简体中文 · + 日本語

diff --git a/packages/app/src/i18n/i18next.ts b/packages/app/src/i18n/i18next.ts index 9ad28632b..168f02ade 100644 --- a/packages/app/src/i18n/i18next.ts +++ b/packages/app/src/i18n/i18next.ts @@ -5,6 +5,7 @@ import { ar } from "./resources/ar"; import { en } from "./resources/en"; import { es } from "./resources/es"; import { fr } from "./resources/fr"; +import { ja } from "./resources/ja"; import { ru } from "./resources/ru"; import { zhCN } from "./resources/zh-CN"; @@ -20,6 +21,7 @@ observeI18nInit( en: { translation: en }, es: { translation: es }, fr: { translation: fr }, + ja: { translation: ja }, ru: { translation: ru }, "zh-CN": { translation: zhCN }, }, diff --git a/packages/app/src/i18n/locales.test.ts b/packages/app/src/i18n/locales.test.ts index e6c4fd357..b85d9ae76 100644 --- a/packages/app/src/i18n/locales.test.ts +++ b/packages/app/src/i18n/locales.test.ts @@ -7,13 +7,14 @@ import { } from "./locales"; describe("parseAppLanguage", () => { - it("accepts system and all UN official language locales", () => { - expect(["system", "ar", "en", "es", "fr", "ru", "zh-CN"].map(parseAppLanguage)).toEqual([ + it("accepts system and all supported language locales", () => { + expect(["system", "ar", "en", "es", "fr", "ja", "ru", "zh-CN"].map(parseAppLanguage)).toEqual([ "system", "ar", "en", "es", "fr", + "ja", "ru", "zh-CN", ]); @@ -24,13 +25,14 @@ describe("parseAppLanguage", () => { expect(parseAppLanguage(null)).toBeNull(); }); - it("offers system plus the six UN official languages", () => { + it("offers system plus all supported languages", () => { expect(LANGUAGE_OPTIONS.map((option) => option.value)).toEqual([ "system", "ar", "en", "es", "fr", + "ja", "ru", "zh-CN", ]); @@ -81,15 +83,17 @@ describe("resolveSupportedLocale", () => { expect(resolveSupportedLocale("en", ["zh-CN"])).toBe("en"); expect(resolveSupportedLocale("es", ["en-US"])).toBe("es"); expect(resolveSupportedLocale("fr", ["en-US"])).toBe("fr"); + expect(resolveSupportedLocale("ja", ["en-US"])).toBe("ja"); expect(resolveSupportedLocale("ru", ["en-US"])).toBe("ru"); expect(resolveSupportedLocale("zh-CN", ["en-US"])).toBe("zh-CN"); }); - it("maps UN official system locales", () => { + it("maps supported system locales", () => { expect(resolveSupportedLocale("system", ["ar-EG"])).toBe("ar"); expect(resolveSupportedLocale("system", ["en-US"])).toBe("en"); expect(resolveSupportedLocale("system", ["es-MX"])).toBe("es"); expect(resolveSupportedLocale("system", ["fr-CA"])).toBe("fr"); + expect(resolveSupportedLocale("system", ["ja-JP"])).toBe("ja"); expect(resolveSupportedLocale("system", ["ru-RU"])).toBe("ru"); }); diff --git a/packages/app/src/i18n/locales.ts b/packages/app/src/i18n/locales.ts index decf04ee2..12e3454d1 100644 --- a/packages/app/src/i18n/locales.ts +++ b/packages/app/src/i18n/locales.ts @@ -1,4 +1,4 @@ -export type SupportedLocale = "ar" | "en" | "es" | "fr" | "ru" | "zh-CN"; +export type SupportedLocale = "ar" | "en" | "es" | "fr" | "ja" | "ru" | "zh-CN"; export type AppLanguage = "system" | SupportedLocale; export interface LanguageOption { @@ -14,16 +14,27 @@ export const LANGUAGE_OPTIONS: LanguageOption[] = [ { value: "en", labelKey: "settings.general.language.options.en" }, { value: "es", labelKey: "settings.general.language.options.es" }, { value: "fr", labelKey: "settings.general.language.options.fr" }, + { value: "ja", labelKey: "settings.general.language.options.ja" }, { value: "ru", labelKey: "settings.general.language.options.ru" }, { value: "zh-CN", labelKey: "settings.general.language.options.zhCN" }, ]; -const SUPPORTED_LANGUAGES = new Set(["system", "ar", "en", "es", "fr", "ru", "zh-CN"]); +const SUPPORTED_LANGUAGES = new Set([ + "system", + "ar", + "en", + "es", + "fr", + "ja", + "ru", + "zh-CN", +]); const LANGUAGE_NATIVE_NAMES: Record = { ar: "العربية", en: "English", es: "Español", fr: "Français", + ja: "日本語", ru: "Русский", "zh-CN": "简体中文", }; @@ -33,6 +44,7 @@ const LANGUAGE_NAMES_BY_LOCALE: Record { - it("keeps UN official language keys in sync with English", () => { + it("keeps all supported language keys in sync with English", () => { const englishKeys = flattenKeys(en).sort(); expect(flattenKeys(ar).sort()).toEqual(englishKeys); expect(flattenKeys(es).sort()).toEqual(englishKeys); expect(flattenKeys(fr).sort()).toEqual(englishKeys); + expect(flattenKeys(ja).sort()).toEqual(englishKeys); expect(flattenKeys(ru).sort()).toEqual(englishKeys); expect(flattenKeys(zhCN).sort()).toEqual(englishKeys); }); - it("keeps non-English UN official languages translated beyond fallback labels", () => { + it("keeps non-English supported languages translated beyond fallback labels", () => { const totalStrings = Object.keys(flattenStrings(en)).length; const maxFallbackStrings = Math.floor(totalStrings * 0.25); expect(countMatchingEnglishStrings(ar)).toBeLessThan(maxFallbackStrings); expect(countMatchingEnglishStrings(es)).toBeLessThan(maxFallbackStrings); expect(countMatchingEnglishStrings(fr)).toBeLessThan(maxFallbackStrings); + expect(countMatchingEnglishStrings(ja)).toBeLessThan(maxFallbackStrings); expect(countMatchingEnglishStrings(ru)).toBeLessThan(maxFallbackStrings); }); @@ -123,6 +126,7 @@ describe("translation resources", () => { expect(findInterpolationMismatches(ar)).toEqual([]); expect(findInterpolationMismatches(es)).toEqual([]); expect(findInterpolationMismatches(fr)).toEqual([]); + expect(findInterpolationMismatches(ja)).toEqual([]); expect(findInterpolationMismatches(ru)).toEqual([]); expect(findInterpolationMismatches(zhCN)).toEqual([]); }); @@ -137,11 +141,13 @@ describe("translation resources", () => { expect(ar.modelSelector.modelCountPlural).toBe("{{count}} نماذج"); expect(es.modelSelector.modelCountPlural).toBe("{{count}} modelos"); expect(fr.modelSelector.modelCountPlural).toBe("{{count}} modèles"); + expect(ja.modelSelector.modelCountPlural).toBe("{{count}}つのモデル"); expect(ru.modelSelector.modelCountPlural).toBe("{{count}} моделей"); expect(zhCN.modelSelector.modelCountPlural).toBe("{{count}} 个模型"); expect(ar.settings.providers.models.many).toBe("{{count}} نماذج"); expect(es.settings.providers.models.many).toBe("{{count}} modelos"); expect(fr.settings.providers.models.many).toBe("{{count}} modèles"); + expect(ja.settings.providers.models.many).toBe("{{count}}つのモデル"); expect(ru.settings.providers.models.many).toBe("{{count}} моделей"); expect(zhCN.settings.providers.models.many).toBe("{{count}} 个 Model"); }); diff --git a/packages/app/src/i18n/resources/ar.ts b/packages/app/src/i18n/resources/ar.ts index 604f69708..3366f3469 100644 --- a/packages/app/src/i18n/resources/ar.ts +++ b/packages/app/src/i18n/resources/ar.ts @@ -1438,6 +1438,7 @@ export const ar: TranslationResources = { en: "English", es: "Español", fr: "Français", + ja: "日本語", ru: "Русский", zhCN: "中文", }, diff --git a/packages/app/src/i18n/resources/en.ts b/packages/app/src/i18n/resources/en.ts index 4b1dd6508..da31267a4 100644 --- a/packages/app/src/i18n/resources/en.ts +++ b/packages/app/src/i18n/resources/en.ts @@ -1444,6 +1444,7 @@ export const en = { en: "English", es: "Spanish", fr: "French", + ja: "Japanese", ru: "Russian", zhCN: "Simplified Chinese", }, diff --git a/packages/app/src/i18n/resources/es.ts b/packages/app/src/i18n/resources/es.ts index f100813de..b129b73b6 100644 --- a/packages/app/src/i18n/resources/es.ts +++ b/packages/app/src/i18n/resources/es.ts @@ -1475,6 +1475,7 @@ export const es: TranslationResources = { en: "English", es: "Español", fr: "Français", + ja: "日本語", ru: "Русский", zhCN: "中文", }, diff --git a/packages/app/src/i18n/resources/fr.ts b/packages/app/src/i18n/resources/fr.ts index 74676b573..922375a23 100644 --- a/packages/app/src/i18n/resources/fr.ts +++ b/packages/app/src/i18n/resources/fr.ts @@ -1478,6 +1478,7 @@ export const fr: TranslationResources = { en: "English", es: "Español", fr: "Français", + ja: "日本語", ru: "Русский", zhCN: "中文", }, diff --git a/packages/app/src/i18n/resources/ja.ts b/packages/app/src/i18n/resources/ja.ts new file mode 100644 index 000000000..f84555fd0 --- /dev/null +++ b/packages/app/src/i18n/resources/ja.ts @@ -0,0 +1,1908 @@ +import type { TranslationResources } from "./en"; + +export const ja: TranslationResources = { + common: { + back: "戻る", + loading: "読み込み中...", + actions: { + back: "戻る", + cancel: "キャンセル", + close: "閉じる", + copy: "コピー", + dismiss: "閉じる", + retry: "再試行", + search: "検索", + select: "選択", + }, + placeholders: { + search: "検索...", + }, + empty: { + noResults: "結果が見つかりません", + noOptionsMatchSearch: "検索に一致するオプションがありません。", + }, + states: { + loading: "読み込み中...", + starting: "起動中...", + copied: "コピーしました", + copiedLabel: "{{label}}をコピーしました", + downloadComplete: "ダウンロード完了", + downloadFailed: "ダウンロード失敗", + }, + errors: { + error: "エラー", + unableToSave: "保存できません", + nameRequired: "名前は必須です", + daemonUnavailable: "デーモンが利用できません", + daemonClientUnavailable: "デーモンクライアントが利用できません", + daemonClientDisconnected: "デーモンクライアントが切断されています", + noFileFound: "{{token}}のファイルが見つかりません", + unexpectedDictationError: "音声入力処理中に予期しないエラーが発生しました。", + }, + connectionStatus: { + online: "オンライン", + connecting: "接続中", + offline: "オフライン", + error: "エラー", + idle: "アイドル", + }, + }, + shell: { + menu: { + toggleSidebar: "サイドバーを切り替え", + open: "メニューを開く", + close: "メニューを閉じる", + }, + commandCenter: { + placeholder: "コマンドを入力またはエージェントを検索...", + noMatches: "一致なし", + actions: "アクション", + agents: "エージェント", + newAgent: "新しいエージェント", + openProject: "プロジェクトを開く", + home: "ホーム", + }, + }, + composer: { + placeholders: { + desktop: "エージェントにメッセージ、@ファイル、/コマンドや/スキルを入力", + mobile: "メッセージ、@ファイル、/コマンド", + fallback: "メッセージ...", + }, + input: { + accessibilityLabel: "エージェントにメッセージ...", + focusHint: "{{shortcut}}でフォーカス", + addAttachment: "添付ファイルを追加", + interruptAgent: "エージェントを中断", + queueMessage: "メッセージをキューに追加", + sendAndInterrupt: "送信して中断", + sendMessage: "メッセージを送信", + queue: "キュー", + send: "送信", + }, + cancel: { + cancelingAgent: "エージェントをキャンセル中", + stopAgent: "エージェントを停止", + interrupt: "中断", + }, + voice: { + enableVoiceMode: "音声モードを有効にする", + voiceMode: "音声モード", + unmuteVoiceMode: "音声モードのミュートを解除", + muteVoiceMode: "音声モードをミュート", + stopDictation: "音声入力を停止", + startDictation: "音声入力を開始", + unmuteVoice: "音声のミュートを解除", + muteVoice: "音声をミュート", + dictation: "音声入力", + interruptBeforeVoice: "音声モードを開始する前にエージェントを中断してください", + }, + attachments: { + addImage: "画像を追加", + addFile: "ファイルをアップロード", + addIssueOrPr: "イシューまたはPRを追加", + dropImagesHere: "ここに画像をドロップ", + dropFilesHere: "ここにファイルをドロップ", + editQueuedMessage: "キューに入れたメッセージを編集", + sendQueuedMessageNow: "キューに入れたメッセージを今すぐ送信", + openImage: "画像添付ファイルを開く", + removeImage: "画像添付ファイルを削除", + removeFile: "ファイル添付ファイルを削除", + openGithub: "{{kind}} #{{number}}を開く", + removeGithub: "{{kind}} #{{number}}を削除", + element: "要素", + openBrowserElement: "ブラウザ要素の添付ファイルを開く", + removeBrowserElement: "ブラウザ要素の添付ファイルを削除", + openReview: "レビュー添付ファイルを開く", + removeReview: "レビュー添付ファイルを削除", + }, + errors: { + failedToSend: "メッセージの送信に失敗しました", + failedToCreateAgent: "エージェントの作成に失敗しました", + noHostSelected: "ホストが選択されていません", + initialPromptRequired: "初期プロンプトが必要です", + alreadyLoading: "すでに読み込み中です", + uploadFailed: "ファイルのアップロードに失敗しました", + fileTooLarge: "{{fileName}}が大きすぎます(最大{{size}})", + }, + clientCommands: { + archiveAgent: "現在のエージェントをアーカイブ", + freshDraft: "このエージェントをアーカイブして新しい下書きを開始", + }, + github: { + searching: "検索中...", + noResults: "結果が見つかりません。", + searchPlaceholder: "イシューとPRを検索...", + title: "イシューまたはPRを添付", + }, + }, + agentControls: { + provider: { + fallback: "プロバイダー", + select: "エージェントプロバイダーを選択", + }, + thinking: { + title: "思考", + unknown: "不明", + extraHigh: "非常に高い", + select: "思考オプションを選択", + selectWithValue: "思考オプションを選択({{value}})", + }, + model: { + unknown: "不明なモデル", + }, + features: { + title: "機能", + open: "エージェント機能を開く", + on: "オン", + off: "オフ", + }, + mode: { + title: "モード", + searchPlaceholder: "モードを検索...", + selectWithValue: "エージェントモードを選択({{value}})", + }, + hints: { + thinking: "思考モード", + model: "モデルを変更", + mode: "権限モードを変更", + }, + }, + agentStream: { + empty: "このエージェントとチャットを始めましょう...", + scrollToBottom: "下にスクロール", + permission: { + plan: "プラン", + required: "権限が必要です", + deny: "拒否", + accept: "承認", + implement: "実装", + question: "どのように続けますか?", + proposedPlan: "提案されたプラン", + }, + }, + agentPanel: { + states: { + notFound: "エージェントが見つかりません", + failedToLoad: "エージェントの読み込みに失敗しました", + reconnecting: "再接続中...", + archivingTitle: "エージェントをアーカイブ中...", + archivingSubtitle: "このエージェントをアーカイブするまでお待ちください。", + }, + unavailable: { + selectedHost: "選択中のホスト", + unknownHost: + "{{serverLabel}}がこのデバイスで設定されていないため、このエージェントを開けません。", + addHost: + "続行するには設定でホストを追加するか、設定済みのサーバーでエージェントを開いてください。", + preparingSession: "{{serverLabel}}セッションを準備中...", + connecting: "{{serverLabel}}に接続中...", + showSoon: "このエージェントはすぐに表示されます。", + showWhenOnline: "ホストがオンラインになったらこのエージェントを表示します。", + reconnectingTo: "{{serverLabel}}に再接続中...", + showAgainWhenReachable: + "ホストに到達できるようになり次第、このエージェントを再び表示します。", + }, + archived: { + callout: "このエージェントはアーカイブされています", + unarchive: "アーカイブ解除", + }, + }, + sessions: { + title: "履歴", + empty: "セッションがまだありません", + actions: { + loadMore: "さらに読み込む", + }, + }, + agentList: { + fallbackTitle: "新しいセッション", + dateSections: { + recent: "最近", + today: "今日", + yesterday: "昨日", + thisWeek: "今週", + thisMonth: "今月", + older: "以前", + }, + status: { + initializing: "起動中", + idle: "アイドル", + running: "実行中", + error: "エラー", + closed: "クローズ", + }, + badges: { + archived: "アーカイブ済み", + pending: "{{count}}件保留中", + attention: "注意", + }, + archiveSheet: { + hostOffline: "ホストオフライン", + runningAgent: "このエージェントはまだ実行中です。アーカイブするとエージェントが停止します。", + archive: "アーカイブ", + }, + }, + message: { + actions: { + copyCode: "コードをコピー", + copyTurn: "ターンをコピー", + copyMessage: "メッセージをコピー", + openFile: "ファイルを開く", + copied: "コピーしました", + }, + attachments: { + dismissImage: "画像を閉じる", + closeImage: "画像を閉じる", + imageLoadFailed: "画像を読み込めませんでした", + imageUnavailable: "画像が利用できません", + imagePreviewUnavailable: "画像プレビューは利用できません。", + imagePreviewLoadFailed: "画像プレビューを読み込めません。", + review: "レビュー", + commentsOne: "1件のコメント", + commentsMany: "{{count}}件のコメント", + textAttachment: "テキスト添付ファイル", + text: "テキスト", + file: "ファイル", + }, + speak: { + header: "読み上げ済み", + }, + activity: { + details: "詳細", + }, + dictation: { + start: "音声入力を開始", + cancel: "音声入力をキャンセル", + retry: "音声入力を再試行", + insert: "文字起こしを挿入", + insertAndSend: "文字起こしを挿入して送信", + failed: "音声入力に失敗しました: {{error}}", + failedRetry: "音声入力に失敗しました。再試行をタップしてください。", + }, + question: { + submit: "送信", + next: "次へ", + answerPlaceholder: "回答を入力...", + otherPlaceholder: "その他...", + }, + todo: { + title: "タスク", + empty: "タスクがまだありません。", + }, + compaction: { + loading: "コンテキストを圧縮中...", + auto: "コンテキストが自動的に圧縮されました", + manual: "コンテキストが手動で圧縮されました", + withTokens: "コンテキストを圧縮しました({{tokens}}Kトークン)", + completed: "コンテキストを圧縮しました", + }, + }, + importSession: { + title: "セッションをインポート", + filters: { + all: "すべて", + }, + status: { + connectHost: "セッションをインポートするにはホストに接続してください", + updateHost: "セッションをインポートするにはホストを更新してください。", + noProviders: "インポート可能なプロバイダーが有効になっていません。", + loading: "最近のセッションを読み込み中...", + failedAll: "最近のセッションを読み込めませんでした。", + failedProviders: "{{providers}}のセッションを読み込めませんでした。", + failedImport: "選択したセッションをインポートできませんでした。", + }, + actions: { + refresh: "セッションを更新", + }, + preview: { + untitledSession: "無題のセッション", + noPrompt: "プロンプトのプレビューなし", + }, + empty: { + noRecent: "インポートする最近のセッションがありません。", + alreadyImported: "最近のセッションはすでにすべてインポートされています。", + noProviderSessions: "{{provider}}のセッションが見つかりません。", + }, + row: { + importing: "インポート中...", + }, + }, + workspace: { + route: { + loading: "ワークスペースを読み込み中", + restoring: "ワークスペースを復元中", + restoreFailed: + "このワークスペースを復元できませんでした。ディレクトリが移動または削除された可能性があります。", + connecting: "接続中", + hostOffline: "{{hostName}}はオフラインです", + cannotReachHost: "{{hostName}}に到達できません", + hostStatus: "ホストの状態: {{status}}", + missing: "ワークスペースが見つかりません", + needsHostUpgrade: "このワークスペースを復元するにはホストを更新してください", + manageHost: "ホストを管理", + }, + hoverCard: { + scriptsAccessibility: "ワークスペーススクリプト", + copyPath: "パスをコピー", + copyBranchName: "ブランチ名をコピー", + copied: "コピーしました", + }, + fileExplorer: { + sort: { + name: "名前", + modified: "更新日時", + size: "サイズ", + }, + context: { + size: "サイズ", + modified: "更新日時", + copyPath: "パスをコピー", + download: "ダウンロード", + }, + actions: { + back: "戻る", + retry: "再試行", + refresh: "ファイルを更新", + refreshing: "ファイルを更新中", + hideHiddenFiles: "隠しファイルを非表示", + showHiddenFiles: "隠しファイルを表示", + }, + empty: { + noFiles: "ファイルなし", + noVisibleFiles: "表示可能なファイルなし", + }, + states: { + unavailable: "ワークスペースが利用できません", + loading: "ファイルを読み込み中...", + }, + errors: { + failedToListDirectory: "ディレクトリの一覧取得に失敗しました", + }, + }, + setup: { + descriptor: { + label: "セットアップ", + completed: "セットアップ完了", + failed: "セットアップ失敗", + workspace: "ワークスペースセットアップ", + }, + status: { + running: "実行中", + completed: "完了", + failed: "失敗", + waiting: "セットアップ出力を待機中", + }, + waiting: "ワークスペースをセットアップ中...", + empty: { + noCommands: "このワークスペースでセットアップコマンドは実行されませんでした。", + }, + accessibility: { + noCommands: "このワークスペースでセットアップコマンドは実行されませんでした", + log: "ワークスペースセットアップログ", + }, + log: { + noOutput: "出力なし", + }, + }, + browser: { + unavailable: { + title: "ブラウザはデスクトップ専用です", + subtitle: "組み込みブラウザを使用するには、このワークスペースをElectronで開いてください。", + }, + session: "ブラウザセッション{{browserId}}", + controls: { + back: "戻る", + forward: "進む", + stopLoading: "読み込みを停止", + refresh: "更新", + browserUrl: "ブラウザURL", + enterUrl: "URLを入力", + openDevTools: "ブラウザ開発ツールを開く", + cancelSelector: "要素セレクターをキャンセル", + selectElement: "要素を選択", + }, + errors: { + failedToLoad: "ページの読み込みに失敗しました", + invalidUrl: "無効なブラウザURL", + unsupportedProtocol: "サポートされていないブラウザURLをブロック: {{protocol}}", + }, + }, + terminal: { + hostDisconnected: "ホストが接続されていません", + unableToSubscribe: "ターミナルに接続できません", + }, + tabs: { + loading: "読み込み中...", + loadingAgentTitle: "エージェントタイトルを読み込み中", + emptyPane: "このペインにタブがありません。", + fallback: { + newAgent: "新しいエージェント", + setup: "セットアップ", + workspaceSetup: "ワークスペースセットアップ", + terminal: "ターミナル", + browser: "ブラウザ", + agent: "エージェント", + workspace: "ワークスペース", + }, + switcher: { + trigger: "タブを切り替え({{count}}件開いています)", + title: "タブを切り替え", + searchPlaceholder: "タブを検索", + }, + menu: { + openFor: "{{label}}のメニューを開く", + copyResumeCommand: "再開コマンドをコピー", + copyAgentId: "エージェントIDをコピー", + copyFilePath: "ファイルパスをコピー", + rename: "名前を変更", + closeAbove: "上のタブを閉じる", + closeBelow: "下のタブを閉じる", + closeLeft: "左のタブを閉じる", + closeRight: "右のタブを閉じる", + closeOthers: "他のタブを閉じる", + reloadAgent: "エージェントを再読み込み", + reloadAgentTooltip: + "スキル、MCP、ログイン状態を更新するためにエージェントを再読み込みします。", + close: "閉じる", + renameTerminal: "ターミナルの名前を変更", + renameAgent: "エージェントの名前を変更", + }, + actions: { + newAgent: "新しいエージェント", + newTerminal: "新しいターミナル", + preparingTerminal: "ターミナルタブを準備中", + preparingTerminalTooltip: "ターミナルを準備中...", + newBrowser: "新しいブラウザ", + splitRight: "右にペインを分割", + splitDown: "下にペインを分割", + terminalProfilesMenu: "ターミナルプロファイル", + editTerminalProfiles: "プロファイルを編集…", + pinTarget: "ピン留め", + unpinTarget: "ピン留めを解除", + }, + explorer: { + open: "エクスプローラーを開く", + close: "エクスプローラーを閉じる", + toggle: "エクスプローラーを切り替え", + changes: "変更", + files: "ファイル", + }, + toasts: { + copyFailed: "コピーに失敗しました", + agentIdCopiedLabel: "エージェントID", + resumeCommandCopiedLabel: "再開コマンド", + filePathCopiedLabel: "ファイルパス", + resumeIdUnavailable: "再開IDが利用できません", + resumeCommandUnavailable: "再開コマンドが利用できません", + reloadingAgent: "エージェントを再読み込み中...", + reloadedAgent: "エージェントを再読み込みしました", + failedToReloadAgent: "エージェントの再読み込みに失敗しました", + }, + confirmations: { + close: "閉じる", + cancel: "キャンセル", + archive: "アーカイブ", + closeTerminalTitle: "ターミナルを閉じますか?", + closeTerminalMessage: "このターミナルで実行中のプロセスはすぐに停止されます。", + archiveRunningAgentTitle: "実行中のエージェントをアーカイブしますか?", + archiveRunningAgentMessage: + "このエージェントはまだ実行中です。アーカイブするとエージェントが停止してタブが閉じられます。", + closeTabsLeftTitle: "左のタブを閉じますか?", + closeTabsRightTitle: "右のタブを閉じますか?", + closeOtherTabsTitle: "他のタブを閉じますか?", + bulk: { + all: "{{agents}}件のエージェントをアーカイブし、{{terminals}}件のターミナルを閉じ、{{tabs}}件のタブを閉じます。閉じたターミナルで実行中のプロセスはすぐに停止されます。", + agentsAndTerminals: + "{{agents}}件のエージェントをアーカイブし、{{terminals}}件のターミナルを閉じます。閉じたターミナルで実行中のプロセスはすぐに停止されます。", + terminalsAndTabs: + "{{terminals}}件のターミナルを閉じ、{{tabs}}件のタブを閉じます。閉じたターミナルで実行中のプロセスはすぐに停止されます。", + agentsAndTabs: "{{agents}}件のエージェントをアーカイブし、{{tabs}}件のタブを閉じます。", + terminals: + "{{terminals}}件のターミナルを閉じます。閉じたターミナルで実行中のプロセスはすぐに停止されます。", + tabs: "{{tabs}}件のタブを閉じます。", + agents: "{{agents}}件のエージェントをアーカイブします。", + }, + }, + }, + header: { + actions: { + workspaceActions: "ワークスペースアクション", + newAgent: "新しいエージェント", + newTerminal: "新しいターミナル", + newBrowser: "新しいブラウザタブ", + importSession: "セッションをインポート", + copyPath: "ワークスペースパスをコピー", + copyBranchName: "ブランチ名をコピー", + showSetup: "セットアップを表示", + }, + toasts: { + workspacePathUnavailable: "ワークスペースパスはまだ利用できません", + branchNameUnavailable: "ブランチ名が利用できません", + terminalQueued: "ワークスペースを準備中、準備ができたらターミナルを開きます...", + workspacePathCopiedLabel: "ワークスペースパス", + branchNameCopiedLabel: "ブランチ名", + }, + }, + scripts: { + title: "スクリプト", + actions: { + run: "実行", + view: "表示", + }, + accessibility: { + trigger: "ワークスペーススクリプト", + openAt: "{{label}}で{{scriptName}}を開く", + viewTerminal: "{{scriptName}}ターミナルを表示", + runScript: "{{scriptName}}スクリプトを実行", + script: "{{scriptName}}スクリプト", + }, + states: { + exitCode: "終了コード: {{code}}", + startFailed: "{{scriptName}}の起動に失敗しました", + }, + }, + git: { + actions: { + moreOptions: "その他のオプション", + moreActions: "その他のアクション", + commit: { + label: "コミット", + pending: "コミット中...", + success: "コミットしました", + }, + pull: { + label: "プル", + pending: "プル中...", + success: "プルしました", + }, + push: { + label: "プッシュ", + pending: "プッシュ中...", + success: "プッシュしました", + }, + pullAndPush: { + label: "プルしてプッシュ", + pending: "プルしてプッシュ中...", + success: "プルしてプッシュしました", + }, + viewPr: "PRを表示", + createPr: { + label: "PRを作成", + pending: "PRを作成中...", + success: "PRが作成されました", + }, + mergeBranch: { + label: "ローカルでマージ", + pending: "マージ中...", + success: "マージしました", + }, + mergeFromBase: { + label: "{{baseRef}}から更新", + pending: "更新中...", + success: "更新しました", + }, + archive: { + label: "ワークツリーをアーカイブ", + pending: "アーカイブ中...", + success: "アーカイブしました", + }, + mergePr: { + squash: "PRをマージ(スカッシュ)", + merge: "PRをマージ(マージ)", + rebase: "PRをマージ(リベース)", + pending: "PRをマージ中...", + success: "PRがマージされました", + }, + autoMerge: { + enableSquash: "自動マージ(スカッシュ)", + enableMerge: "自動マージ(マージ)", + enableRebase: "自動マージ(リベース)", + enabled: "自動マージが有効になりました", + enabling: "自動マージを有効にしています...", + disabling: "自動マージを無効にしています...", + disabled: "自動マージが無効になりました", + }, + unavailable: { + viewPrNoGithub: "GitHubが接続されていないため、PRの表示は現在利用できません", + pullNoRemote: + "このブランチはまだリモートに接続されていないため、プルはここでは利用できません", + pullDirty: + "ローカルに変更があるためプルは利用できません。先にコミットまたはスタッシュしてください", + pullUpToDate: "このブランチはすでに最新のため、プルは利用できません", + pushNoRemote: + "このブランチはまだリモートに接続されていないため、プッシュはここでは利用できません", + pushBehind: "取り込む必要がある新しい変更があるため、まだプッシュは利用できません", + pushNothing: "プッシュする変更がないため、プッシュは利用できません", + pullAndPushNoRemote: + "このブランチはまだリモートに接続されていないため、プル&プッシュはここでは利用できません", + pullAndPushDirty: + "ローカルに変更があるためプル&プッシュは利用できません。先にコミットまたはスタッシュしてください", + pullAndPushInSync: + "このブランチはすでに同期されているため、プル&プッシュは利用できません", + createPrNoGithub: "GitHubが接続されていないため、PRの作成は現在利用できません", + createPrNoCommits: "このブランチにまだ新しいコミットがないため、PRの作成は利用できません", + mergeNoBase: "ベースブランチを特定できなかったため、マージは利用できません", + mergeDirty: + "ローカルに変更があるためマージは利用できません。先にコミットまたはスタッシュしてください", + mergeNothing: "このブランチにまだマージするものがないため、マージは利用できません", + updateNoBase: "ベースブランチを特定できなかったため、更新は利用できません", + updateDirty: + "ローカルに変更があるため更新は利用できません。先にコミットまたはスタッシュしてください", + updateCurrent: "このブランチはすでに{{baseRef}}と最新の状態のため、更新は利用できません", + archiveNotWorktree: + "このワークスペースはPaseoワークツリーとして作成されていないため、アーカイブはここでは利用できません", + mergePrNoGithub: "GitHubが接続されていないため、PRのマージは現在利用できません", + mergePrMissing: "プルリクエストがまだないため、PRのマージは利用できません", + mergePrDraft: "プルリクエストがまだドラフトのため、PRのマージは利用できません", + mergePrMerged: "プルリクエストはすでにマージされているため、PRのマージは利用できません", + mergePrClosed: "プルリクエストがクローズされているため、PRのマージは利用できません", + mergePrConflicts: "プルリクエストにコンフリクトがあるため、PRのマージは利用できません", + mergePrQueue: + "このリポジトリはマージキューを使用しているため、PRのマージはここでは利用できません", + mergePrNotReady: + "GitHub上でプルリクエストがマージ可能になるまで、PRのマージは利用できません", + autoMergeCannotDisable: + "自動マージは有効になっていますが、このアカウントでは無効にできません", + }, + toasts: { + failedCommit: "コミットに失敗しました", + failedPull: "プルに失敗しました", + failedPush: "プッシュに失敗しました", + failedPullAndPush: "プル&プッシュに失敗しました", + failedCreatePr: "PRの作成に失敗しました", + failedMergePr: "PRのマージに失敗しました", + failedEnableAutoMerge: "自動マージの有効化に失敗しました", + failedDisableAutoMerge: "自動マージの無効化に失敗しました", + baseRefUnavailable: "ベースRefが利用できません", + failedMerge: "マージに失敗しました", + failedMergeFromBase: "ベースからのマージに失敗しました", + worktreePathUnavailable: "ワークツリーパスが利用できません", + failedArchive: "ワークツリーのアーカイブに失敗しました", + }, + archiveWarning: { + title: '"{{worktreeName}}"をアーカイブしますか?', + confirm: "アーカイブ", + cancel: "キャンセル", + uncommittedChanges: "未コミットの変更", + uncommittedChangesWithDiff: "未コミットの変更({{diffStat}})", + addedLine: "{{count}}行追加", + addedLines: "{{count}}行追加", + deletedLine: "{{count}}行削除", + deletedLines: "{{count}}行削除", + unpushedCommit: "{{count}}件の未プッシュコミット", + unpushedCommits: "{{count}}件の未プッシュコミット", + }, + }, + diff: { + binaryFile: "バイナリファイル", + tooLarge: "差分が大きすぎて表示できません", + unified: "ユニファイド差分", + split: "左右比較", + hideWhitespace: "空白を非表示", + scrollLongLines: "長い行をスクロール", + wrapLongLines: "長い行を折り返す", + collapseAll: "すべて折りたたむ", + expandAll: "すべて展開", + refreshing: "更新中", + refresh: "更新", + refreshState: "gitとGitHubの状態を更新", + failedRefresh: "gitの状態の更新に失敗しました。", + emptyHiddenWhitespace: "空白を非表示にすると変更は表示されません", + emptyUncommitted: "未コミットの変更なし", + emptyAgainstBase: "{{baseRef}}との差分なし", + checkingRepository: "リポジトリを確認中...", + notRepository: "gitリポジトリではありません", + diffMode: "差分モード", + uncommitted: "未コミット", + committed: "コミット済み", + branchUnknown: "不明", + base: "ベース", + newFile: "新規", + deletedFile: "削除済み", + }, + openInEditor: { + open: "開く", + chooseEditor: "エディタを選択", + openIn: "{{target}}でワークスペースを開く", + openFileIn: "{{target}}で{{fileName}}を開く", + failedOpen: "ワークスペースを開けませんでした", + }, + pr: { + actions: { + viewPullRequest: "表示", + }, + sections: { + checks: "チェック", + reviews: "レビュー", + }, + accessibility: { + pullRequest: "プルリクエスト#{{number}}", + }, + states: { + draft: "ドラフト", + merged: "マージ済み", + closed: "クローズ済み", + open: "オープン", + }, + activity: { + commented: "コメント済み", + approved: "承認済み", + requestedChanges: "変更をリクエスト", + reviewed: "レビュー済み", + }, + time: { + justNow: "たった今", + }, + errors: { + statusLoadFailed: "プルリクエストのステータスを読み込めません", + activityLoadFailed: "プルリクエストのアクティビティを読み込めません", + }, + }, + }, + }, + sidebar: { + host: { + noHost: "ホストなし", + switchTitle: "ホストを切り替え", + searchPlaceholder: "ホストを検索...", + }, + actions: { + addProject: "プロジェクトを追加", + newWorkspace: "新しいワークスペース", + home: "ホーム", + settings: "設定", + closeSidebar: "サイドバーを閉じる", + }, + sections: { + sessions: "履歴", + }, + worktreeSetup: { + title: "ワークツリースクリプトを設定", + description: + "新しいワークツリーが依存関係をインストールして自動的に準備できるようにセットアップコマンドを追加してください。", + openProjectSettings: "プロジェクト設定を開く", + }, + project: { + actions: { + menu: "プロジェクトアクション", + openSettings: "プロジェクト設定を開く", + openNewWindow: "新しいウィンドウで開く", + openNewWindowFailed: "新しいウィンドウを開けませんでした", + remove: "プロジェクトを削除", + removing: "削除中...", + }, + confirmations: { + removeTitle: "プロジェクトを削除しますか?", + removeMessage: + '"{{projectName}}"をサイドバーから削除しますか?\n\nディスク上のファイルは変更されません。', + removeConfirm: "削除", + cancel: "キャンセル", + }, + toasts: { + hostDisconnected: "ホストが接続されていません", + removeFailed: "一部のワークスペースの削除に失敗しました", + updateHostToRemove: "プロジェクトを削除するにはホストを更新してください。", + }, + empty: { + title: "プロジェクトがまだありません", + description: "始めるにはプロジェクトを追加してください", + }, + }, + workspace: { + status: { + scriptsAvailable: "スクリプトが利用可能", + creating: "作成中...", + }, + actions: { + menu: "ワークスペースアクション", + newWorkspace: "新しいワークスペース", + createWorkspaceFor: "{{projectName}}の新しいワークスペースを作成", + copyPath: "パスをコピー", + copyBranchName: "ブランチ名をコピー", + rename: "ワークスペースの名前を変更", + archive: "アーカイブ", + archiveWorktree: "ワークツリーをアーカイブ", + hideFromSidebar: "サイドバーから非表示", + archiving: "アーカイブ中...", + hiding: "非表示にしています...", + }, + confirmations: { + hideTitle: "ワークスペースを非表示にしますか?", + hideMessage: + '"{{workspaceName}}"をサイドバーから非表示にしますか?\n\nディスク上のファイルは変更されません。', + hideConfirm: "非表示", + cancel: "キャンセル", + }, + rename: { + title: "ワークスペースの名前を変更", + submit: "名前を変更", + invalidBranchName: "無効なブランチ名", + }, + toasts: { + workspacePathUnavailable: "ワークスペースパスが利用できません", + pathCopied: "パスをコピーしました", + branchNameCopied: "ブランチ名をコピーしました", + hostDisconnected: "ホストが接続されていません", + hideFailed: "ワークスペースの非表示に失敗しました", + archiveFailed: "ワークツリーのアーカイブに失敗しました", + }, + }, + }, + newWorkspace: { + title: "新しいワークスペース", + create: "作成", + isolation: { + local: "ローカル", + worktree: "新しいワークツリー", + label: "分離方法", + }, + fields: { + project: "プロジェクト", + base: "ベース", + baseNotApplicable: "該当なし", + }, + titlePlaceholder: "タイトル(任意)", + errors: { + hostDisconnected: "ホストが接続されていません", + createWorktreeFailed: "ワークツリーの作成に失敗しました", + composerStateRequired: "コンポーザーの状態が必要です", + selectModel: "モデルを選択してください", + }, + refPicker: { + startingRef: "開始Ref", + chooseStart: "開始点を選択", + checkoutHint: "PR #{{number}}をチェックアウトしますか?", + checkoutPr: "PR #{{number}}をチェックアウト", + dismissCheckoutHint: "PR #{{number}}のチェックアウトヒントを閉じる", + intoBase: "{{baseRef}}に", + searching: "検索中...", + noMatchingRefs: "一致するRefがありません。", + searchPlaceholder: "ブランチとPRを検索", + title: "開始点", + }, + }, + desktop: { + quitting: { + title: "Paseoを終了中...", + detail: "ローカルデーモンを停止中。", + }, + daemon: { + title: "デーモン", + status: { + title: "ステータス", + builtInOnly: "組み込みデスクトップデーモンのみここに表示されます", + running: "実行中", + notRunning: "実行していません", + pid: "PID {{pid}}", + }, + management: { + title: "組み込みデーモンを管理", + hint: "Paseoが組み込みデーモンを起動・停止できるようにする", + pauseTitle: "組み込みデーモンを一時停止", + pauseMessage: + "これにより組み込みデーモンが即座に停止します。組み込みデーモンに接続されている実行中のエージェントとターミナルが停止されます。", + pauseAndStop: "一時停止して停止", + registrationFailed: + "組み込みデーモンは起動しましたが、Paseoがlocalhostの接続を保存できませんでした。デーモン管理をオフにしてから再度オンにするか、localhostを手動で追加してください。", + pausedStopFailed: + "組み込みデーモン管理は一時停止されましたが、Paseoがデーモンを停止できませんでした。", + updateFailed: "組み込みデーモン管理を更新できません。", + }, + keepRunning: { + title: "終了後もデーモンを実行し続ける", + hint: "Paseoを終了してもデーモンは実行し続けます", + }, + logs: { + title: "ログファイル", + modalTitle: "デーモンログ", + unavailable: "ログパスが利用できません", + empty: "(ログファイルは空です)", + copied: "ログパスをコピーしました。", + copyFailed: "ログパスをコピーできません。", + open: "ログを開く", + copyPath: "パスをコピー", + }, + fullStatus: { + title: "詳細ステータス", + modalTitle: "デーモンのステータス", + hint: "`paseo daemon status`を実行して出力を表示します", + view: "ステータスを表示", + copied: "ステータスをクリップボードにコピーしました。", + fetchFailed: "デーモンのステータスの取得に失敗しました: {{message}}", + }, + advancedSettings: "詳細設定", + openAdvancedSettings: "高度なデーモン設定を開く", + versionMismatch: + "アプリとデーモンのバージョンが一致しません。最良の体験のために両方を同じバージョンに更新してください。", + loadFailed: "デスクトップデーモンのステータスを読み込めません。", + }, + updates: { + status: { + checking: "アプリの更新を確認中...", + installing: "アプリの更新をインストール中...", + upToDate: "アプリは最新です。", + upToDateWithLastChecked: "最新の状態です。最終確認: {{time}}。", + pending: "更新の準備ができたらお知らせします。", + availableWithVersion: "更新の準備ができました: {{version}}", + available: "アプリの更新をインストールできます。", + installed: "アプリの更新がインストールされました。再起動が必要です。", + failed: "アプリの更新に失敗しました。", + idle: "更新ステータスはまだ確認されていません。", + }, + installError: "デスクトップアプリの更新をインストールできません。", + callout: { + installingTitle: "更新をインストール中", + failedTitle: "更新に失敗しました", + availableTitle: "更新が利用可能", + genericError: "問題が発生しました。", + whatsNew: "新機能", + installingAction: "インストール中...", + installAndRestart: "インストールして再起動", + installingDescription: "インストールして再起動中...", + versionReady: "{{version}}のインストール準備ができました。", + newVersionReady: "新しいバージョンのインストール準備ができました。", + restartWarning: + "アプリを更新すると、実行中のエージェントが停止しターミナルセッションが閉じられます。", + }, + }, + settings: { + loadFailed: "デスクトップ設定を読み込めません。", + saveFailed: "デスクトップ設定を保存できません。", + }, + rosetta: { + title: "Apple Siliconビルドをダウンロード", + runningIntel: "Apple Silicon上のRosettaでPaseoのIntelビルドを実行しています。", + highCpu: + "これにより高いCPU使用率が発生します。修正するにはApple Siliconビルドをダウンロードしてください。", + download: "ダウンロード", + }, + permissions: { + notifications: { + allowed: "通知はOSによって許可されています。", + denied: "通知はシステム設定で拒否されています。", + notGranted: "通知はまだ許可されていません。", + webOnly: "デスクトップ通知のステータスはWebランタイムでのみ利用できます。", + supported: "デスクトップ通知はサポートされています。", + unsupported: "デスクトップ通知はこのプラットフォームではサポートされていません。", + apiUnavailable: "この環境ではWeb Notification APIは利用できません。", + requestsWebOnly: "デスクトップ通知のリクエストはWebランタイムでのみ利用できます。", + requestUnavailable: "Web Notification API の requestPermission() は利用できません。", + requestFailed: "通知の権限リクエストに失敗しました: {{message}}", + unexpectedState: "予期しない通知の権限状態: {{state}}", + }, + microphone: { + webOnly: "デスクトップマイクのステータスはWebランタイムでのみ利用できます。", + navigatorUnavailable: "この環境ではNavigatorは利用できません。", + granted: "マイクへのアクセスが許可されています。", + denied: "マイクへのアクセスはシステム設定で拒否されています。", + notGranted: "マイクの権限はまだ許可されていません。", + unexpectedState: "予期しないマイクの権限状態: {{state}}", + statusApiUnavailable: + "マイクステータスAPIはこのランタイムでは利用できません。アクセス確認は[許可を求める]から行ってください。", + queryFailed: "マイクのステータス確認に失敗しました: {{message}}", + captureUnavailable: "この環境ではマイクのキャプチャは利用できません。", + permissionApiUnavailable: + "権限ステータスAPIは利用できません。アクセス確認は[許可を求める]から行ってください。", + requestsWebOnly: "デスクトップマイクのリクエストはWebランタイムでのみ利用できます。", + captureApiUnavailable: "この環境ではマイクキャプチャAPIは利用できません。", + requestDenied: "マイクの権限はユーザーまたはシステムによって拒否されました。", + noDevice: "マイクデバイスが見つかりませんでした。", + requestFailed: "マイクの権限リクエストに失敗しました: {{message}}", + }, + empty: { + notifications: "通知のステータスはまだ確認されていません。", + microphone: "マイクのステータスはまだ確認されていません。", + }, + testNotification: { + title: "Paseo通知テスト", + body: "これが見えれば、デスクトップ通知は機能しています。", + notDelivered: "通知が届きませんでした。システム設定 > 通知を確認してください。", + failed: "通知の送信に失敗しました。", + }, + }, + integrations: { + cli: { + statusFailed: "CLIのインストール状態を確認できません。", + installFailed: "Paseo CLIをインストールできません。", + }, + skills: { + statusFailed: "オーケストレーションスキルのステータスを確認できません。", + installFailed: "オーケストレーションスキルをインストールできません。", + updateFailed: "オーケストレーションスキルを更新できません。", + uninstallFailed: "オーケストレーションスキルをアンインストールできません。", + }, + }, + }, + startup: { + errorTitle: "問題が発生しました", + errorDescription: + "ローカルサーバーの起動に失敗しました。この問題が続く場合は、以下のログを添えてGitHubでIssueを作成してください。", + logs: { + loading: "デーモンログを読み込み中...", + unavailable: "利用可能なデーモンログがありません。", + loadFailed: "デーモンログの読み込みに失敗しました: {{message}}", + }, + }, + openProject: { + tiles: { + addProject: { + title: "プロジェクトを追加", + description: "マシン上のフォルダを開く", + }, + importSession: { + title: "セッションをインポート", + description: "最近の外部CLIセッションを取り込む", + }, + setupProviders: { + title: "プロバイダーをセットアップ", + description: "Claude Code、Codexなどを設定", + }, + pairDevice: { + title: "デバイスをペアリング", + description: "このデーモンにスマートフォンを接続", + }, + }, + }, + projectPicker: { + placeholder: "ディレクトリパスを入力...", + opening: "プロジェクトを開いています...", + empty: "パスを入力してください", + errors: { + directory_not_found: "ディレクトリが見つかりません。", + open_failed: "プロジェクトを開けませんでした。", + }, + openPath: "パスを開く", + }, + branchSwitcher: { + currentBranch: "現在のブランチ: {{branchName}}。押してブランチを切り替えてください。", + placeholder: "ブランチを切り替え...", + searchPlaceholder: "ブランチをフィルタ...", + empty: "ブランチが見つかりません。", + title: "ブランチを切り替え", + uncommittedTitle: "未コミットの変更", + uncommittedMessage: "未コミットの変更があります。ブランチを切り替える前にスタッシュしますか?", + stashAndSwitch: "スタッシュして切り替え", + failedToStash: "変更のスタッシュに失敗しました", + failedToSwitch: "ブランチの切り替えに失敗しました", + restoreStashTitle: "スタッシュした変更を復元しますか?", + restoreStashMessage: + "このブランチには前のセッションからスタッシュした変更があります。復元しますか?", + restore: "復元", + later: "後で", + stashRestored: "スタッシュした変更を復元しました", + }, + agentAutocomplete: { + searchingWorkspace: "ワークスペースを検索中...", + loadingCommands: "コマンドを読み込み中...", + noFiles: "ファイルまたはディレクトリが見つかりません", + noCommands: "コマンドが見つかりません", + failedToLoad: "読み込みに失敗しました", + }, + loadOlderHistory: { + failed: "古い履歴を読み込めませんでした", + }, + imageAttachmentPicker: { + permissionTitle: "権限が必要です", + permissionMessage: "画像を添付するにはフォトライブラリへのアクセスを許可してください。", + errorTitle: "エラー", + failedToSelect: "画像の選択に失敗しました", + dialogTitle: "画像を添付", + dialogFilterName: "画像", + }, + workspaceSetup: { + title: "ワークスペースを作成", + errors: { + failedCreateWorktree: "ワークツリーの作成に失敗しました", + failedOpenProject: "プロジェクトを開けませんでした", + selectModel: "モデルを選択してください", + hostDisconnected: "ホストが接続されていません", + pendingRequired: "保留中のワークスペースセットアップがありません", + composerStateRequired: "ワークスペースセットアップのコンポーザー状態が必要です", + }, + }, + onboarding: { + title: "Paseoへようこそ", + subtitle: "始めるにはコンピューターに接続してください", + actions: { + settings: "設定", + }, + }, + modelSelector: { + title: "プロバイダーを選択", + selectModel: "モデルを選択", + selectedModel: "モデルを選択({{model}})", + loading: "読み込み中...", + loadingShort: "読み込み中", + loadingSelector: "モデルセレクターを読み込み中...", + error: "エラー", + defaultModel: "デフォルト", + favorites: "お気に入り", + favoriteModel: "お気に入りモデル", + unfavoriteModel: "お気に入りを解除", + modelCount: "{{count}}つのモデル", + modelCountPlural: "{{count}}つのモデル", + retry: "再試行", + retrying: "再試行中...", + noMatches: "検索に一致するモデルがありません", + searchPlaceholder: "モデルを検索...", + openProviderSettings: "{{provider}}の設定を開く", + }, + providerCatalog: { + title: "プロバイダーを追加", + search: "プロバイダーを検索", + noProviders: "プロバイダーが見つかりません", + actions: { + add: "追加", + adding: "追加中", + installed: "インストール済み", + cancel: "キャンセル", + installInstructions: "インストール手順", + installInstructionsFor: "{{provider}}のインストール手順", + }, + errors: { + unableToInstall: "プロバイダーをインストールできません", + }, + }, + providerSelection: { + defaultModel: "デフォルト", + selectModel: "モデルを選択", + loading: "読み込み中...", + error: "エラー", + unavailable: "利用不可", + unknownError: "不明なエラー", + readiness: { + initialPromptRequired: "初期プロンプトが必要です", + noProviders: "選択したホストで利用可能なプロバイダーがありません", + modelDefaultsLoading: "モデルのデフォルトをまだ読み込んでいます", + noModelAvailable: "選択したプロバイダーで利用可能なモデルがありません", + workspaceDirectoryNotFound: "ワークスペースディレクトリが見つかりません", + hostDisconnected: "ホストが接続されていません", + }, + }, + pairing: { + connectionMethods: { + title: "接続を追加", + direct: { + title: "直接接続", + description: "ローカルネットワークまたはVPN。", + }, + scanQr: { + title: "QRコードをスキャン", + description: "暗号化されたリレー接続。", + }, + pasteLink: { + title: "ペアリングリンクを貼り付け", + description: "暗号化されたリレー接続。", + }, + }, + direct: { + title: "直接接続", + helper: "Paseoサーバーのアドレスを入力してください。", + fields: { + host: "ホスト", + port: "ポート", + password: "パスワード", + optional: "任意", + useSsl: "SSLを使用", + connectionUri: "接続URI", + }, + advanced: { + label: "詳細設定", + show: "詳細設定を表示", + hide: "詳細設定を非表示", + }, + passwordVisibility: { + show: "パスワードを表示", + hide: "パスワードを非表示", + }, + actions: { + cancel: "キャンセル", + connect: "接続", + connecting: "接続中...", + }, + errors: { + hostRequired: "ホストは必須です", + invalidPort: "ポートは1から65535の間である必要があります", + invalidConnection: "無効な接続", + failedTitle: "接続に失敗しました", + failedToConnect: "{{endpoint}}への接続に失敗しました。", + noAdditionalDetails: "{{detail}}(追加の詳細は提供されていません)", + timedOut: "接続がタイムアウトしました。ホスト/ポートとネットワークを確認してください。", + refused: "接続が拒否されました。このアドレスでサーバーが実行されていますか?", + hostNotFound: "ホストが見つかりません。ホスト名を確認してもう一度試してください。", + hostUnreachable: + "ホストに到達できません。ネットワークとファイアウォールを確認してください。", + tlsError: "TLSエラー。直接接続は、デーモンの前にTLS終端がある場合のみSSLを使用します。", + unableToConnect: "接続できません。ホスト/ポートとデーモンが到達可能かを確認してください。", + details: "詳細: {{detail}}", + }, + }, + link: { + title: "ペアリングリンクを貼り付け", + helper: "サーバーからのペアリングリンクを貼り付けてください。", + label: "ペアリングリンク", + errors: { + required: "ペアリングリンクを貼り付けてください(.../#offer=...)", + missingOffer: "リンクには#offer=...が必要です", + emptyOffer: "オファーのペイロードが空です", + invalid: "無効なペアリングリンク", + unableToPair: "ホストをペアリングできません", + }, + alert: { + failedTitle: "ペアリングに失敗しました", + }, + actions: { + cancel: "キャンセル", + pair: "ペアリング", + pairing: "ペアリング中...", + }, + }, + scan: { + title: "QRをスキャン", + webUnavailableTitle: "Webでは利用できません", + webUnavailableBody: + "QRスキャンはWebビルドではサポートされていません。代わりに「リンクを貼り付け」を使用してください。", + backToSettings: "設定に戻る", + cameraPermissionTitle: "カメラの権限", + cameraPermissionBody: + "デーモンからのペアリングQRコードをスキャンするためにカメラへのアクセスを許可してください。", + grantPermission: "権限を許可", + pairing: "ペアリング中...", + unableToPair: "ホストをペアリングできません", + errorTitle: "エラー", + }, + device: { + loadingOffer: "ペアリングオファーを読み込み中...", + failedToLoadOffer: "ペアリングオファーの読み込みに失敗しました。", + relayDisabled: + "リレーが有効になっていません。デバイスをペアリングするにはリレーを有効にしてください。", + unavailable: "ペアリングオファーが利用できません。", + hint: "スマートフォンのPaseoでこのQRコードをスキャンするか、以下のリンクをコピーしてください。", + qrUnavailable: "QRコードが利用できません。", + retry: "再試行", + copy: "コピー", + copied: "コピーしました", + }, + }, + realtimeVoice: { + actions: { + mute: "リアルタイム音声をミュート", + unmute: "リアルタイム音声のミュートを解除", + stop: "リアルタイム音声を停止してターンを中断", + }, + }, + rewind: { + tooltip: "このメッセージに巻き戻す", + warning: "この操作は元に戻せません", + actions: { + conversation: "会話を巻き戻す", + files: "ファイルを巻き戻す", + both: "会話とファイルを巻き戻す", + }, + errors: { + failed: "エージェントの巻き戻しに失敗しました", + }, + }, + diffViewer: { + empty: "表示する変更がありません", + }, + serviceUrl: { + title: "サービスURLを開く", + message: "{{url}}を開きますか?", + inPaseo: "Paseoで", + externalBrowser: "外部ブラウザ", + dontAskAgain: "次回から確認しない", + }, + downloads: { + requestTokenFailed: "ダウンロードトークンのリクエストに失敗しました。", + hostUnavailable: "ダウンロードホストが利用できません。", + cancelled: "ダウンロードがキャンセルされました。", + failed: "ファイルのダウンロードに失敗しました。", + shareFile: "ファイルを共有", + shareFileNamed: "{{fileName}}を共有", + }, + menu: { + backdrop: "メニューの背景", + }, + subagents: { + detachAction: "{{label}}を切り離す", + detachTooltip: "サブエージェントを切り離す", + archiveAction: "{{label}}をアーカイブ", + archiveTooltip: "サブエージェントをアーカイブ", + }, + panels: { + draft: { + newAgent: "新しいエージェント", + creatingAgent: "エージェントを作成中", + }, + file: { + directoryMissing: "ワークスペースディレクトリが見つかりません。", + loading: "ファイルを読み込み中...", + noPreview: "プレビューが利用できません", + binaryPreviewUnavailable: "バイナリプレビューが利用できません", + failedToLoad: "ファイルの読み込みに失敗しました", + failedToLoadPreview: "ファイルプレビューの読み込みに失敗しました", + }, + }, + toolCallDetails: { + error: "エラー", + empty: "追加の詳細はありません", + subAgentActivity: "サブエージェントアクティビティ", + input: "入力", + output: "出力", + }, + renameModal: { + rename: "名前を変更", + saving: "保存中...", + }, + sidebarCallout: { + dismiss: "閉じる", + }, + contextWindow: { + title: "コンテキストウィンドウ", + used: "{{percentage}}%使用", + tokens: "{{used}} / {{max}}トークン", + sessionCost: "セッションコスト: {{cost}}", + accessibility: "コンテキストウィンドウ{{percentage}}%使用", + }, + review: { + comment: { + add: "レビューコメントを追加", + edit: "レビューコメントを編集", + delete: "レビューコメントを削除", + label: "レビューコメント", + placeholder: "コメントを入力", + cancel: "キャンセル", + cancelAccessibility: "レビューコメントをキャンセル", + save: "コメント", + saveAccessibility: "レビューコメントを保存", + }, + }, + settings: { + title: "設定", + loading: "設定を読み込み中...", + groups: { + app: "アプリ", + host: "ホスト", + }, + hostPicker: { + switchHost: "ホストを切り替え", + local: "ローカル", + }, + backToWorkspace: "戻る", + addHost: "ホストを追加", + projects: "プロジェクト", + projectList: { + hostLoadFailed: "ホスト{{hostName}}からプロジェクトを読み込めませんでした: {{message}}", + editProject: "{{projectName}}を編集", + }, + groupInfo: "{{title}}について", + sections: { + general: "一般", + daemon: "デーモン", + appearance: "外観", + shortcuts: "ショートカット", + integrations: "連携", + permissions: "権限", + diagnostics: "診断", + about: "アプリ情報", + }, + hostSections: { + connections: "接続", + agents: "エージェント", + workspaces: "ワークスペース", + providers: "プロバイダー", + usage: "使用状況", + terminals: "ターミナル", + host: "ホスト", + }, + general: { + title: "一般", + defaultSend: { + label: "デフォルトの送信", + descriptions: { + interrupt: "エージェント実行中、Enterで中断します。Command/Ctrl+Enterでキューに追加。", + queue: "エージェント実行中、Enterでキューに追加します。Command/Ctrl+Enterで送信。", + }, + options: { + interrupt: "中断", + queue: "キュー", + }, + }, + serviceUrls: { + label: "サービスURL", + description: "実行中のスクリプトからURLを開く場所", + options: { + ask: "確認する", + inApp: "Paseoで", + external: "外部ブラウザ", + }, + }, + terminalScrollback: { + label: "ターミナルスクロールバック", + description: "組み込みターミナルバッファに保持する行数", + accessibilityLabel: "ターミナルスクロールバック行数", + }, + language: { + label: "言語", + description: "アプリの言語", + options: { + system: "システム", + ar: "アラビア語", + en: "英語", + es: "スペイン語", + fr: "フランス語", + ja: "日本語", + ru: "ロシア語", + zhCN: "簡体字中国語", + }, + }, + }, + diagnostics: { + title: "診断", + testAudio: "音声をテスト", + playTest: "テスト再生", + playing: "再生中...", + playbackFailed: "再生に失敗しました: {{message}}", + }, + about: { + title: "アプリ情報", + appVersion: "アプリバージョン", + thisDevice: "このデバイス", + connectedHosts: "接続されているホスト", + offline: "オフライン", + versionDiffers: "このデバイスとバージョンが異なります", + releaseChannel: { + label: "リリースチャンネル", + description: "ベータに切り替えると早期に更新を取得してフィードバックを提供できます", + stable: "安定版", + beta: "ベータ", + }, + updates: { + label: "アプリの更新", + readyToInstall: "インストール準備完了: {{version}}", + installTitle: "デスクトップの更新をインストール", + installMessage: "このコンピューターのPaseoを更新します", + installConfirm: "更新をインストール", + update: "更新", + updateTo: "{{version}}に更新", + installing: "インストール中...", + check: "確認", + checking: "確認中...", + alertTitle: "エラー", + alertMessage: "更新確認ダイアログを開けません。", + }, + }, + appearance: { + theme: { + title: "テーマ", + accessibilityLabel: "テーマ: {{value}}", + options: { + light: "ライト", + dark: "ダーク", + zinc: "Zinc", + midnight: "Midnight", + claude: "Claude", + ghostty: "Ghostty", + auto: "システム", + }, + }, + fonts: { + title: "フォント", + systemDefault: "システムデフォルト", + interfaceFont: "インターフェースフォント", + interfaceFontHint: + "アプリ全体で使用されます。システムデフォルトにするには空のままにしてください", + interfaceFontAccessibility: "インターフェースフォントファミリー", + interfaceSize: "インターフェースサイズ", + interfaceSizeAccessibility: "インターフェースフォントサイズ", + codeFont: "コードフォント", + codeFontHint: + "コード、差分、ターミナル出力で使用されます。システムデフォルトにするには空のままにしてください", + codeFontAccessibility: "コードフォントファミリー", + codeSize: "コードサイズ", + codeSizeAccessibility: "コードフォントサイズ", + }, + syntax: { + title: "構文ハイライト", + highlightTheme: "ハイライトテーマ", + highlightThemeHint: "コード用の色、アプリのテーマとは独立しています", + highlightThemeAccessibility: "ハイライトテーマ: {{value}}", + previewAccessibility: "構文ハイライトテーマとコードフォントのライブプレビュー", + }, + }, + shortcuts: { + dialogTitle: "ショートカット", + unavailableOnMobile: "キーボードショートカットはデスクトップでのみ利用できます", + capturePrompt: "ショートカットを押してください...", + actions: { + done: "完了", + cancel: "キャンセル", + rebind: "再割り当て", + reset: "リセット", + resetAll: "すべてリセット", + }, + sections: { + navigation: "ナビゲーション", + tabsPanes: "タブ&ペイン", + projects: "プロジェクト", + panels: "パネル", + agentInput: "エージェント入力", + }, + help: { + openProject: "プロジェクトを開く", + newWorkspace: "新しいワークスペース", + newWorktree: "新しいワークツリー", + archiveWorktree: "ワークツリーをアーカイブ", + newTab: "新しいタブ", + closeCurrentTab: "現在のタブを閉じる", + jumpToWorkspace: "ワークスペースにジャンプ", + jumpToTab: "タブにジャンプ", + previousWorkspace: "前のワークスペース", + nextWorkspace: "次のワークスペース", + previousTab: "前のタブ", + nextTab: "次のタブ", + splitPaneRight: "右にペインを分割", + splitPaneDown: "下にペインを分割", + focusPaneLeft: "左のペインにフォーカス", + focusPaneRight: "右のペインにフォーカス", + focusPaneUp: "上のペインにフォーカス", + focusPaneDown: "下のペインにフォーカス", + moveTabLeft: "タブを左に移動", + moveTabRight: "タブを右に移動", + moveTabUp: "タブを上に移動", + moveTabDown: "タブを下に移動", + closePane: "ペインを閉じる", + newTerminal: "新しいターミナル", + toggleCommandCenter: "コマンドセンターを切り替え", + showKeyboardShortcuts: "キーボードショートカットを表示", + toggleLeftSidebar: "左サイドバーを切り替え", + toggleRightSidebar: "右サイドバーを切り替え", + toggleBothSidebars: "両方のサイドバーを切り替え", + toggleSettings: "設定を切り替え", + toggleFocusMode: "フォーカスモードを切り替え", + cycleTheme: "テーマを順に切り替え", + focusMessageInput: "メッセージ入力にフォーカス", + toggleVoiceMode: "音声モードを切り替え", + startStopDictation: "音声入力を開始/停止", + interruptAgent: "エージェントを中断", + sendMessage: "メッセージを送信", + queueMessage: "メッセージをキューに追加", + muteUnmuteVoiceMode: "音声モードのミュートを切り替え", + }, + helpNotes: { + showKeyboardShortcuts: + "テキストフィールドまたはターミナルにフォーカスがない場合に利用できます。", + }, + }, + integrations: { + title: "連携", + docs: { + cli: "CLIドキュメント", + skills: "スキルドキュメント", + openCli: "CLIドキュメントを開く", + openSkills: "スキルドキュメントを開く", + }, + commandLine: { + title: "コマンドライン", + description: "ターミナルからエージェントを制御し、スクリプトで操作", + }, + skills: { + title: "オーケストレーションスキル", + description: "エージェントがCLI経由でオーケストレーションできるようにします。", + updateAvailable: "更新が利用可能", + updateTitle: "Paseoスキルを更新しますか?", + updateFallback: "バンドルされたスキルをマシンに同期します。", + uninstallTitle: "Paseoスキルをアンインストールしますか?", + uninstallMessage: + "~/.agents、~/.claude、~/.codexからすべてのPaseoオーケストレーションスキルを削除します。", + }, + actions: { + install: "インストール", + installing: "インストール中...", + installed: "インストール済み", + update: "更新", + working: "処理中...", + uninstall: "アンインストール", + }, + operations: { + add: "スキルを追加", + update: "スキルを更新", + delete: "スキルを削除", + }, + }, + permissions: { + title: "権限", + notifications: "通知", + microphone: "マイク", + refresh: "更新", + refreshing: "更新中...", + refreshAccessibility: "デスクトップの権限を更新", + test: "テスト", + actions: { + granted: "許可済み", + request: "許可を求める", + requesting: "許可を求めています...", + busySuffix: "{{label}}...", + }, + }, + host: { + notFound: "ホストが見つかりません", + badges: { + relay: "リレー", + local: "ローカル", + }, + connections: { + title: "接続", + removeTitle: "接続を削除", + removeMessage: "{{name}}を削除しますか?この操作は元に戻せません。", + removeAction: "削除", + removeErrorTitle: "エラー", + removeErrorMessage: "接続を削除できません", + timeout: "タイムアウト", + }, + pairDevices: { + title: "デバイスをペアリング", + rowTitle: "デバイスをペアリング", + rowHint: "QRコードをスキャンするかリンクをコピーしてスマートフォンをこのホストに接続", + }, + orchestration: { + title: "オーケストレーション", + unavailable: "オーケストレーションを管理するにはこのホストに接続してください", + enableTools: { + title: "Paseoツールを有効にする", + hint: "エージェントがワークツリー、エージェント、スケジュールを管理できるようになります", + accessibilityLabel: "Paseoツールを有効にする", + }, + systemPrompt: { + title: "システムプロンプト", + hint: "すべてのエージェントにシステムプロンプトを追加します", + sheetTitle: "システムプロンプトを追加", + accessibilityLabel: "システムプロンプトを追加", + placeholder: "常に返答を簡潔にしてください。", + edit: "編集", + reset: "リセット", + save: "保存", + saving: "保存中...", + }, + }, + agents: { + unavailable: "エージェントを管理するにはこのホストに接続してください", + }, + workspaces: { + unavailable: "ワークスペースを管理するにはこのホストに接続してください", + }, + terminalProfiles: { + unavailable: "ターミナルプロファイルを管理するにはこのホストに接続してください", + sectionTitle: "ターミナルプロファイル", + editProfile: "プロファイルを編集", + addProfileTitle: "ターミナルプロファイルを追加", + editProfileTitle: "ターミナルプロファイルを編集", + namePlaceholder: "Claude Code", + commandPlaceholder: "claude", + argsPlaceholder: "--dangerously-skip-permissions", + nameLabel: "名前", + commandLabel: "コマンド", + argsLabel: "引数", + nameRequired: "名前は必須です", + commandRequired: "コマンドは必須です", + argsHint: "コマンドに渡すスペース区切りの引数", + saving: "保存中...", + remove: "削除", + removeConfirmTitle: "プロファイルを削除しますか?", + removeConfirmMessage: '"{{name}}"を削除しますか?', + moveUp: "上に移動", + moveDown: "下に移動", + save: "保存", + emptyState: + "プロファイルがまだありません。特定のコマンドでターミナルを起動するために追加してください。", + }, + daemon: { + rename: { + editLabel: "ラベルを編集", + title: "ホストの名前を変更", + placeholder: "マイホスト", + submit: "名前を変更", + }, + restart: { + title: "デーモンを再起動", + hint: "デーモンプロセスを再起動します。アプリは自動的に再接続します", + confirm: "再起動", + confirmTitle: "{{name}}を再起動", + confirmMessage: + "これによりデーモンが再起動されます。実行中のエージェントは継続し、アプリは自動的に再接続します。", + restarting: "再起動中...", + unableToReconnectTitle: "再接続できません", + unableToReconnectMessage: + "{{name}}がオンラインに戻りませんでした。再起動されたことを確認してください。", + unavailableTitle: "ホストが利用できません", + unavailableMessage: + "このホストは接続されていません。再起動する前にオンラインになるまでお待ちください。", + offlineTitle: "ホストオフライン", + offlineMessage: + "このホストはオフラインです。Paseoが自動再接続します。再起動は、ホストがオンラインに戻ってから行ってください。", + requestFailedTitle: "エラー", + requestFailedMessage: + "再起動リクエストの送信に失敗しました。Paseoは自動的に再接続します。ホストがオンラインになったら再試行してください。", + dialogFailedMessage: "再起動確認ダイアログを開けませんでした。", + }, + dangerZone: "危険ゾーン", + remove: { + title: "ホストを削除", + localTitle: "localhost接続を削除", + hint: "このホストと保存された接続をこのデバイスから削除します", + localHint: "このデバイスからlocalhostを削除して組み込みデーモンを停止します", + localConfirmTitle: "localhost接続を削除してデーモンを停止しますか?", + confirmMessage: "{{name}}を削除しますか?保存された接続が削除されます。", + localConfirmMessage: + "localhost接続を削除し、組み込みデーモン管理をオフにして、管理されているデーモンを停止します。リモートホストは接続されたままです。", + errorTitle: "エラー", + errorMessage: "ホストを削除できません", + localErrorMessage: "localhost接続を削除できません", + }, + }, + }, + providers: { + title: "プロバイダー", + addProvider: "プロバイダーを追加", + providerDetails: "{{name}}プロバイダーの詳細", + enableProvider: "{{name}}を有効にする", + unavailable: "プロバイダーを見るにはこのホストに接続してください", + loading: "読み込み中...", + addErrorTitle: "プロバイダーを追加できません", + updateErrorTitle: "プロバイダーを更新できません", + statuses: { + disabled: "無効", + loading: "読み込み中", + error: "エラー", + available: "利用可能", + notInstalled: "未インストール", + }, + models: { + one: "1つのモデル", + many: "{{count}}つのモデル", + addModel: "モデルを追加", + addCustomTitle: "カスタムモデルを追加", + modelId: "モデルID", + modelIdPlaceholder: "例: openai/gpt-5", + add: "追加", + adding: "追加中...", + failedToSave: "モデルの保存に失敗しました", + removeModel: "{{id}}を削除", + searchPlaceholder: "モデルを検索", + loading: "モデルを読み込み中...", + retry: "再試行", + retrying: "再試行中...", + noSearchMatches: "検索に一致するモデルがありません", + noneDetected: "モデルが検出されませんでした", + discovered: "検出済み", + custom: "カスタムモデル", + updated: "{{time}}に更新", + }, + diagnostic: { + title: "診断", + button: "診断", + refresh: "更新", + refreshing: "更新中...", + copyLabel: "診断", + copyAccessibility: "診断をコピー", + copyFailed: "診断のコピーに失敗しました", + refreshAccessibility: "診断を更新", + refreshingAccessibility: "診断を更新中", + running: "診断を実行中...", + none: "利用可能な診断がありません", + failedToFetch: "診断の取得に失敗しました", + unknownError: "不明なエラー", + }, + }, + project: { + noEditableTarget: + "接続されているホストのどれにもこのプロジェクトの編集可能なコピーがありません。", + backToProjects: "プロジェクトに戻る", + switchHost: "ホストを切り替え", + rename: { + renamedToast: "プロジェクト名を変更しました", + errorFallback: "プロジェクト名を変更できませんでした", + renameLabel: "プロジェクトの名前を変更", + resetLabel: "プロジェクト名をデフォルトにリセット", + projectNameLabel: "プロジェクト名", + saveLabel: "プロジェクト名を保存", + cancelLabel: "名前変更をキャンセル", + reset: "リセット", + }, + readFailures: { + invalidTitle: "paseo.jsonを解析できませんでした", + invalidDescription: "ディスク上のファイルを修正してから再読み込みしてください。", + missingTitle: "このホストにはこのプロジェクトがありません", + missingWithHosts: "上で別のホストに切り替えるか、再読み込みしてください。", + missingSingleHost: "選択したホストにはこのプロジェクトの記録がありません。", + transportTitle: "paseo.jsonを読み込めませんでした", + transportFallback: "ホストが応答しませんでした。", + failedTitle: "paseo.jsonを読み込めませんでした", + failedDescription: "再読み込みして再試行してください。", + }, + worktree: { + title: "ワークツリーライフサイクルフック", + info: "このプロジェクトのワークツリーが作成または削除されたときに実行されるコマンド", + docs: "ドキュメント", + docsTooltip: + "これらのコマンドで使用可能な詳細と環境変数についてはドキュメントを参照してください", + setup: "セットアップ", + setupAccessibility: "ワークツリーセットアップコマンド", + teardown: "削除時", + teardownAccessibility: "ワークツリー削除時のコマンド", + }, + scripts: { + title: "スクリプト", + info: "このプロジェクトのどのエージェントからでも起動できる、長時間実行サービスと単発コマンド", + empty: "スクリプトがまだありません。", + untitled: "無題のスクリプト", + port: "ポート{{port}}", + menuAccessibility: "スクリプトメニューを開く", + removeTitle: "スクリプトを削除しますか?", + removeMessage: "{{name}}を削除しますか?", + removeFallbackName: "このスクリプト", + name: "名前", + command: "コマンド", + nameAccessibility: "スクリプト名", + commandAccessibility: "スクリプトコマンド", + nameRequired: "名前は必須です", + commandRequired: "コマンドは必須です", + newScript: "新しいスクリプト", + editScript: "{{name}}を編集", + runAsService: "サービスとして実行", + serviceHint: "Paseoがプロセスを監督し、$PASEO_PORTを通じてポートを割り当てます", + actions: { + add: "スクリプトを追加", + edit: "編集", + remove: "削除", + }, + }, + metadata: { + title: "メタデータ生成", + info: "Paseoがメタデータ生成に使うAIプロンプトへ追加する、プロジェクト固有の指示です。ブランチ名、コミット形式、PR形式など、チームの規約を反映するために使います。", + branchName: "ブランチ名", + branchNamePlaceholder: "ブランチ名は feat/ または fix/ で始め、個人ブランチは mb/ にする", + commitMessage: "コミットメッセージ", + commitMessagePlaceholder: "スコープ付きのConventional Commitsを使用", + pullRequest: "プルリクエスト", + pullRequestPlaceholder: "1段落の要約で始め、テスト計画セクションを含める", + }, + writeFailures: { + staleTitle: "設定がディスク上で変更されました", + staleDescription: "保存する前に最新のpaseo.jsonを取得するために再読み込みしてください。", + failedTitle: "paseo.jsonを保存できませんでした", + failedDescription: "再試行するか、ディスクから最新バージョンを再読み込みしてください。", + }, + actions: { + reload: "再読み込み", + tryAgain: "再試行", + save: "保存", + saved: "プロジェクトを保存しました", + saving: "保存中...", + cancel: "キャンセル", + }, + }, + }, +} as const; diff --git a/packages/app/src/i18n/resources/ru.ts b/packages/app/src/i18n/resources/ru.ts index 5d7943970..a9b433d43 100644 --- a/packages/app/src/i18n/resources/ru.ts +++ b/packages/app/src/i18n/resources/ru.ts @@ -1465,6 +1465,7 @@ export const ru: TranslationResources = { en: "English", es: "Español", fr: "Français", + ja: "日本語", ru: "Русский", zhCN: "中文", }, diff --git a/packages/app/src/i18n/resources/zh-CN.ts b/packages/app/src/i18n/resources/zh-CN.ts index 6f3716a2d..8d1e51810 100644 --- a/packages/app/src/i18n/resources/zh-CN.ts +++ b/packages/app/src/i18n/resources/zh-CN.ts @@ -1420,6 +1420,7 @@ export const zhCN: TranslationResources = { en: "English", es: "Español", fr: "Français", + ja: "日本語", ru: "Русский", zhCN: "简体中文", },