From cd08c50ca63d6d8d3b1dbc4db03245303097233d Mon Sep 17 00:00:00 2001 From: "Y.anbe" <66286632+y05h1taka@users.noreply.github.com> Date: Tue, 22 Sep 2026 07:18:37 +0900 Subject: [PATCH] feat(i18n): add Japanese locale catalogs and negotiation (#3841) Co-authored-by: Y.anbe Co-authored-by: Carlos Florencio --- AGENTS.md | 4 +- apps/backend/internal/i18n/i18n.go | 47 +- apps/backend/internal/i18n/i18n_test.go | 55 +- apps/backend/internal/i18n/locales/ja.json | 74 + apps/backend/internal/webapp/shell_test.go | 3 + apps/web/AGENTS.md | 2 +- .../e2e/tests/i18n/language-switch.spec.ts | 7 + .../tests/i18n/mobile-language-switch.spec.ts | 30 + apps/web/lib/i18n/boot.test.ts | 5 + apps/web/lib/i18n/date-locale.test.ts | 12 + apps/web/lib/i18n/date-locale.ts | 1 + apps/web/lib/i18n/formats.test.ts | 49 + apps/web/lib/i18n/index.test.ts | 39 +- apps/web/lib/i18n/index.ts | 49 +- apps/web/scripts/check-i18n-keys.mjs | 9 +- apps/web/src/locales/ja/account.json | 53 + apps/web/src/locales/ja/agents.json | 321 +++ apps/web/src/locales/ja/auth.json | 30 + apps/web/src/locales/ja/automations.json | 301 +++ apps/web/src/locales/ja/azuredevops.json | 293 +++ apps/web/src/locales/ja/canvases.json | 151 ++ apps/web/src/locales/ja/chat.json | 156 ++ apps/web/src/locales/ja/common.json | 547 ++++ apps/web/src/locales/ja/configChat.json | 21 + apps/web/src/locales/ja/diff.json | 56 + apps/web/src/locales/ja/editors.json | 98 + apps/web/src/locales/ja/executors.json | 432 +++ apps/web/src/locales/ja/failedInbox.json | 18 + apps/web/src/locales/ja/github.json | 654 +++++ apps/web/src/locales/ja/gitlab.json | 384 +++ apps/web/src/locales/ja/inboxHistory.json | 25 + apps/web/src/locales/ja/integrations.json | 200 ++ apps/web/src/locales/ja/jira.json | 227 ++ apps/web/src/locales/ja/kanban.json | 133 + apps/web/src/locales/ja/linear.json | 174 ++ apps/web/src/locales/ja/lsp.json | 78 + apps/web/src/locales/ja/needsYouInbox.json | 39 + apps/web/src/locales/ja/office.json | 1027 ++++++++ apps/web/src/locales/ja/orgs.json | 38 + apps/web/src/locales/ja/plugins.json | 184 ++ apps/web/src/locales/ja/review.json | 100 + apps/web/src/locales/ja/sentry.json | 176 ++ apps/web/src/locales/ja/settings.json | 842 ++++++ apps/web/src/locales/ja/sidebar.json | 125 + apps/web/src/locales/ja/startup.json | 40 + apps/web/src/locales/ja/stats.json | 107 + apps/web/src/locales/ja/system.json | 751 ++++++ apps/web/src/locales/ja/task.json | 2331 +++++++++++++++++ apps/web/src/locales/ja/tasks.json | 59 + apps/web/src/locales/ja/threads.json | 151 ++ apps/web/src/locales/ja/workflows.json | 325 +++ apps/web/src/locales/ja/workspaces.json | 268 ++ docs/i18n.md | 25 +- docs/plans/japanese-locale/plan.md | 121 + .../task-01-frontend-ja-locale-catalogs.md | 145 + .../task-02-backend-ja-locale-negotiation.md | 109 + .../task-03-japanese-locale-e2e.md | 114 + .../task-04-repository-verification.md | 116 + docs/public/feature-status.md | 2 +- docs/public/web-development.md | 2 +- docs/specs/platform/requirements/i18n.md | 10 +- .../platform/requirements/japanese-locale.md | 37 + docs/specs/platform/system-design/i18n.md | 84 +- 63 files changed, 11978 insertions(+), 88 deletions(-) create mode 100644 apps/backend/internal/i18n/locales/ja.json create mode 100644 apps/web/src/locales/ja/account.json create mode 100644 apps/web/src/locales/ja/agents.json create mode 100644 apps/web/src/locales/ja/auth.json create mode 100644 apps/web/src/locales/ja/automations.json create mode 100644 apps/web/src/locales/ja/azuredevops.json create mode 100644 apps/web/src/locales/ja/canvases.json create mode 100644 apps/web/src/locales/ja/chat.json create mode 100644 apps/web/src/locales/ja/common.json create mode 100644 apps/web/src/locales/ja/configChat.json create mode 100644 apps/web/src/locales/ja/diff.json create mode 100644 apps/web/src/locales/ja/editors.json create mode 100644 apps/web/src/locales/ja/executors.json create mode 100644 apps/web/src/locales/ja/failedInbox.json create mode 100644 apps/web/src/locales/ja/github.json create mode 100644 apps/web/src/locales/ja/gitlab.json create mode 100644 apps/web/src/locales/ja/inboxHistory.json create mode 100644 apps/web/src/locales/ja/integrations.json create mode 100644 apps/web/src/locales/ja/jira.json create mode 100644 apps/web/src/locales/ja/kanban.json create mode 100644 apps/web/src/locales/ja/linear.json create mode 100644 apps/web/src/locales/ja/lsp.json create mode 100644 apps/web/src/locales/ja/needsYouInbox.json create mode 100644 apps/web/src/locales/ja/office.json create mode 100644 apps/web/src/locales/ja/orgs.json create mode 100644 apps/web/src/locales/ja/plugins.json create mode 100644 apps/web/src/locales/ja/review.json create mode 100644 apps/web/src/locales/ja/sentry.json create mode 100644 apps/web/src/locales/ja/settings.json create mode 100644 apps/web/src/locales/ja/sidebar.json create mode 100644 apps/web/src/locales/ja/startup.json create mode 100644 apps/web/src/locales/ja/stats.json create mode 100644 apps/web/src/locales/ja/system.json create mode 100644 apps/web/src/locales/ja/task.json create mode 100644 apps/web/src/locales/ja/tasks.json create mode 100644 apps/web/src/locales/ja/threads.json create mode 100644 apps/web/src/locales/ja/workflows.json create mode 100644 apps/web/src/locales/ja/workspaces.json create mode 100644 docs/plans/japanese-locale/plan.md create mode 100644 docs/plans/japanese-locale/task-01-frontend-ja-locale-catalogs.md create mode 100644 docs/plans/japanese-locale/task-02-backend-ja-locale-negotiation.md create mode 100644 docs/plans/japanese-locale/task-03-japanese-locale-e2e.md create mode 100644 docs/plans/japanese-locale/task-04-repository-verification.md create mode 100644 docs/specs/platform/requirements/japanese-locale.md diff --git a/AGENTS.md b/AGENTS.md index f3036f06b9..ff6f5c5a8e 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -132,10 +132,10 @@ line-anchored and will not see one buried in a `/** */` block. The pseudo-locale (Settings → General → Appearance, dev/e2e builds) is still the completeness check for copy no literal scan can see. -**Translations gate the build.** `pt-pt`, `zh-cn`, `zh-hk` and `zh-tw` are +**Translations gate the build.** `pt-pt`, `zh-cn`, `zh-hk`, `zh-tw` and `ja` are complete, and `check-i18n-keys.mjs` now fails on a missing key, an extra key, a dropped placeholder, or a value left identical to English. Adding user-facing -copy means adding it in five languages; for the Traditional Chinese pair run +copy means adding it in six languages; for the Traditional Chinese pair run `pnpm run i18n:zh-hant` rather than hand-translating. When the correct translation genuinely IS the English word, declare it in `src/locales//_verbatim.json` with a reason — brand nouns, acronyms and diff --git a/apps/backend/internal/i18n/i18n.go b/apps/backend/internal/i18n/i18n.go index 168becc2c3..6753b2060e 100644 --- a/apps/backend/internal/i18n/i18n.go +++ b/apps/backend/internal/i18n/i18n.go @@ -50,6 +50,7 @@ var supportedLocales = map[string]bool{ "zh-cn": true, "zh-tw": true, "zh-hk": true, + "ja": true, "pseudo": true, } @@ -82,23 +83,45 @@ func load() { }) } -// Supported reports whether locale has a committed catalog. -func Supported(locale string) bool { return supportedLocales[canonicalLocale(locale)] } - // Normalize returns locale when it is supported, otherwise DefaultLocale. Used // for both `` and message lookup so they can never disagree. func Normalize(locale string) string { - canonical := canonicalLocale(locale) - if supportedLocales[canonical] { - return canonical + if Supported(locale) { + return canonicalLocale(locale) + } + // A region-suffixed variant of a supported base collapses onto it when the + // base is unambiguous ("ja-JP" → "ja"). Multi-variant bases stay exact. + if collapsed := normalizeRegion(locale); supportedLocales[collapsed] { + return collapsed } return DefaultLocale } +// Supported reports whether locale has a committed catalog. +func Supported(locale string) bool { + return supportedLocales[canonicalLocale(locale)] +} + func canonicalLocale(locale string) string { return strings.ToLower(strings.TrimSpace(locale)) } +// normalizeRegion collapses a region-suffixed locale onto its base when the base +// is unambiguous: "ja-JP" → "ja", "pt-BR" → "pt" (unsupported here, falls +// through to en via Normalize). Multi-variant bases like "zh" stay exact — +// "zh-CN"/"zh-TW"/"zh-HK" must not collapse to a shared "zh". +func normalizeRegion(locale string) string { + canonical := canonicalLocale(locale) + base, _, hasRegion := strings.Cut(canonical, "-") + if !hasRegion { + return canonical + } + if supportedLocales[base] && base != "zh" && base != "pt" { + return base + } + return canonical +} + // FromRequest resolves the active locale: the kandev_locale cookie first (the // SPA's explicit user choice), then the browser's Accept-Language, then the // default. Unknown values coerce to DefaultLocale rather than erroring. @@ -106,8 +129,16 @@ func FromRequest(r *http.Request) string { if r == nil { return DefaultLocale } - if cookie, err := r.Cookie(LocaleCookie); err == nil && Supported(cookie.Value) { - return Normalize(cookie.Value) + if cookie, err := r.Cookie(LocaleCookie); err == nil { + if Supported(cookie.Value) { + return Normalize(cookie.Value) + } + // Unambiguous region suffixes such as ja-JP collapse onto a shipped + // base. Supported() is exact, so Normalize() is not used here: it + // would turn an unknown cookie into en and skip Accept-Language. + if collapsed := normalizeRegion(cookie.Value); supportedLocales[collapsed] { + return collapsed + } } for _, tag := range parseAcceptLanguage(r.Header.Get("Accept-Language")) { if Supported(tag) { diff --git a/apps/backend/internal/i18n/i18n_test.go b/apps/backend/internal/i18n/i18n_test.go index 2010bdf3e4..a56b491bf0 100644 --- a/apps/backend/internal/i18n/i18n_test.go +++ b/apps/backend/internal/i18n/i18n_test.go @@ -21,6 +21,8 @@ func TestNormalize(t *testing.T) { {"zh-TW", "zh-tw"}, {"zh-hk", "zh-hk"}, {"zh-HK", "zh-hk"}, + {"ja", "ja"}, + {"ja-JP", "ja"}, {localePtPT, localePtPT}, {"pt-PT", localePtPT}, {"pseudo", "pseudo"}, @@ -54,6 +56,9 @@ func TestTranslatesAndFallsBack(t *testing.T) { if hongKong := T("zh-hk", "webapp.shellUnavailable"); hongKong == en { t.Fatalf("zh-hk message should differ from en, both %q", en) } + if japanese := T("ja", "webapp.shellUnavailable"); japanese == en { + t.Fatalf("ja message should differ from en, both %q", en) + } if portuguese := T(localePtPT, "webapp.shellUnavailable"); portuguese == en { t.Fatalf("pt-pt message should differ from en, both %q", en) } @@ -137,7 +142,7 @@ func TestCatalogsHaveMatchingKeys(t *testing.T) { t.Parallel() load() source := catalogs[DefaultLocale] - for _, locale := range []string{"pseudo", "zh-cn", "zh-tw", "zh-hk", localePtPT} { + for _, locale := range []string{"pseudo", "zh-cn", "zh-tw", "zh-hk", "ja", localePtPT} { translated := catalogs[locale] if len(translated) != len(source) { t.Fatalf("%s catalog has %d keys, want %d", locale, len(translated), len(source)) @@ -187,6 +192,16 @@ func TestFromRequest(t *testing.T) { } }) + t.Run("invalid cookie does not skip accept-language", func(t *testing.T) { + t.Parallel() + r := httptest.NewRequest(http.MethodGet, "/", nil) + r.AddCookie(&http.Cookie{Name: LocaleCookie, Value: "klingon"}) + r.Header.Set("Accept-Language", "ja;q=1.0, en;q=0.5") + if got := FromRequest(r); got != "ja" { + t.Fatalf("got %q, want ja", got) + } + }) + t.Run("accept-language honored by q-value", func(t *testing.T) { t.Parallel() r := httptest.NewRequest(http.MethodGet, "/", nil) @@ -223,6 +238,44 @@ func TestFromRequest(t *testing.T) { } }) + t.Run("ja cookie wins over accept-language", func(t *testing.T) { + t.Parallel() + r := httptest.NewRequest(http.MethodGet, "/", nil) + r.AddCookie(&http.Cookie{Name: LocaleCookie, Value: "ja"}) + r.Header.Set("Accept-Language", "en") + if got := FromRequest(r); got != "ja" { + t.Fatalf("got %q, want ja", got) + } + }) + + t.Run("ja-JP cookie collapses onto ja", func(t *testing.T) { + t.Parallel() + r := httptest.NewRequest(http.MethodGet, "/", nil) + r.AddCookie(&http.Cookie{Name: LocaleCookie, Value: "ja-JP"}) + r.Header.Set("Accept-Language", "en") + if got := FromRequest(r); got != "ja" { + t.Fatalf("got %q, want ja", got) + } + }) + + t.Run("accept-language selects ja", func(t *testing.T) { + t.Parallel() + r := httptest.NewRequest(http.MethodGet, "/", nil) + r.Header.Set("Accept-Language", "ja;q=1.0, en;q=0.5") + if got := FromRequest(r); got != "ja" { + t.Fatalf("got %q, want ja", got) + } + }) + + t.Run("accept-language ja-JP collapses onto ja", func(t *testing.T) { + t.Parallel() + r := httptest.NewRequest(http.MethodGet, "/", nil) + r.Header.Set("Accept-Language", "ja-JP,en;q=0.8") + if got := FromRequest(r); got != "ja" { + t.Fatalf("got %q, want ja", got) + } + }) + t.Run("zh-tw cookie wins over accept-language", func(t *testing.T) { t.Parallel() r := httptest.NewRequest(http.MethodGet, "/", nil) diff --git a/apps/backend/internal/i18n/locales/ja.json b/apps/backend/internal/i18n/locales/ja.json new file mode 100644 index 0000000000..6a81190d2d --- /dev/null +++ b/apps/backend/internal/i18n/locales/ja.json @@ -0,0 +1,74 @@ +{ + "share.brandTag": "共有タスク", + "share.builtWith": "構築", + "share.ctaTryKandev": "GitHub で kandev を試す", + "share.emptyMessage": "空", + "share.gistDescription": "kandev 共有:{{title}}", + "share.gistDescriptionUntitled": "kandev タスク共有", + "share.messageCount_one": "{{count}} 件のメッセージ", + "share.messageCount_other": "{{count}} 件のメッセージ", + "share.metaAgent": "エージェント", + "share.metaCompleted": "完了", + "share.metaExecutor": "実行環境", + "share.metaModel": "モデル", + "share.metaStarted": "開始", + "share.metaWorkflowStep": "ワークフローステップ", + "share.noMessages": "メッセージはありません。", + "share.noMetadata": "メタデータなし", + "share.openRenderedView": "**[レンダリングビューを開く →]({{url}})** で、整形された会話を確認できます。", + "share.openShareHTML": "**{{file}} を開く** で、レンダリングされた会話を確認できます。", + "share.pageTitle": "{{title}};kandev 共有", + "share.pitch": "**[kandev]({{url}})** から共有;オープンソースのエージェンティック開発環境。", + "share.rawExport": "生エクスポート:", + "share.redacted": "編集済み:", + "share.redactedBeforePublish": "公開前に編集済み:", + "share.roleAssistant": "アシスタント", + "share.roleSystem": "システム", + "share.roleUser": "ユーザー", + "share.roleYou": "あなた", + "share.sessionDetails": "セッション詳細", + "share.toolOutput": "ツール出力", + "share.toolOutputTruncated": "ツール出力(切り詰め済み)", + "share.untitledTask": "無題のタスク", + "startup.duration.minutes_one": "{{count}} 分", + "startup.duration.minutes_other": "{{count}} 分", + "startup.duration.seconds_one": "{{count}} 秒", + "startup.duration.seconds_other": "{{count}} 秒", + "startup.page.countedProgress": "{{total}} 中 {{done}} {{unit}}", + "startup.page.countingProgress": "{{done}} {{unit}}", + "startup.page.elapsed": "経過時間 {{duration}}", + "startup.page.eta": "残り約 {{duration}}", + "startup.page.lastKnown": "最終確認", + "startup.page.progressUnavailable": "このステップの進捗は測定できません。", + "startup.page.stalled": "{{duration}} 停滞中", + "startup.page.title": "Kandev を起動しています", + "startup.page.waiting": "Kandev を起動中で、まだ到達できません。", + "startup.phase.applying_migrations": "マイグレーションを適用中", + "startup.phase.backing_up_database": "データベースをバックアップ中", + "startup.phase.initializing_services": "サービスを初期化中", + "startup.phase.opening_database": "データベースを開いています", + "startup.phase.ready": "準備完了", + "startup.phase.recovering_sessions": "セッションを復元中", + "startup.step.database_backup": "データベースのバックアップ", + "startup.step.message_timestamps": "メッセージのタイムスタンプ", + "startup.step.prompt_seq": "プロンプトのシーケンス番号", + "startup.step.session_recovery": "セッションの復元", + "startup.step.stores_repositories": "リポジトリストア", + "startup.step.stores_services": "サービスストア", + "startup.step.subagent_context": "サブエージェントのコンテキスト", + "startup.unit.bytes_one": "バイト", + "startup.unit.bytes_other": "バイト", + "startup.unit.messages_one": "件", + "startup.unit.messages_other": "件", + "startup.unit.rows_one": "行", + "startup.unit.rows_other": "行", + "startup.unit.sessions_one": "セッション", + "startup.unit.sessions_other": "セッション", + "startup.unit.stores_one": "ストア", + "startup.unit.stores_other": "ストア", + "startup.unit.turns_one": "ターン", + "startup.unit.turns_other": "ターン", + "webapp.assetReadFailed": "Web アセットを読み込めませんでした。", + "webapp.devServerUnavailable": "Vite 開発サーバーを利用できません。", + "webapp.shellUnavailable": "Kandev Web アプリを利用できません。" +} diff --git a/apps/backend/internal/webapp/shell_test.go b/apps/backend/internal/webapp/shell_test.go index d9340809d2..652474cf7a 100644 --- a/apps/backend/internal/webapp/shell_test.go +++ b/apps/backend/internal/webapp/shell_test.go @@ -113,6 +113,7 @@ func TestRenderShellSetsHTMLLangFromLocale(t *testing.T) { {name: "supported simplified chinese", locale: "zh-cn", wantLang: `lang="zh-cn"`}, {name: "supported traditional chinese taiwan", locale: "zh-tw", wantLang: `lang="zh-tw"`}, {name: "supported traditional chinese hong kong", locale: "zh-hk", wantLang: `lang="zh-hk"`}, + {name: "supported japanese", locale: "ja", wantLang: `lang="ja"`}, {name: "supported european portuguese", locale: "pt-pt", wantLang: `lang="pt-pt"`}, {name: "supported pseudo", locale: "pseudo", wantLang: `lang="pseudo"`}, {name: "unknown coerces to en", locale: "klingon", wantLang: `lang="en"`}, @@ -240,6 +241,8 @@ func TestNormalizeLocale(t *testing.T) { {"zh-TW", "zh-tw"}, {"zh-hk", "zh-hk"}, {"zh-HK", "zh-hk"}, + {"ja", "ja"}, + {"ja-JP", "ja"}, {"pt-pt", "pt-pt"}, {"pt-PT", "pt-pt"}, {"pseudo", "pseudo"}, diff --git a/apps/web/AGENTS.md b/apps/web/AGENTS.md index ba9b7e1b6d..1bfad55338 100644 --- a/apps/web/AGENTS.md +++ b/apps/web/AGENTS.md @@ -234,7 +234,7 @@ Silence a legitimate one with `// i18n-exempt: ` (required) as a `//` LINE comment — the detector's pattern is line-anchored, so a marker inside a `/** */` block is silently ignored. -**Real-locale catalogs gate.** `pt-pt`, `zh-cn`, `zh-hk`, `zh-tw` are complete; +**Real-locale catalogs gate.** `pt-pt`, `zh-cn`, `zh-hk`, `zh-tw`, `ja` are complete; `check-i18n-keys.mjs` fails on a missing/extra key, a dropped `{{placeholder}}` or `` tag, an empty value, or a value identical to English. Untranslatable values are handled in two tiers: those `looksLikeCopy` rejects as non-copy need diff --git a/apps/web/e2e/tests/i18n/language-switch.spec.ts b/apps/web/e2e/tests/i18n/language-switch.spec.ts index 92a2cb9345..d27050a8be 100644 --- a/apps/web/e2e/tests/i18n/language-switch.spec.ts +++ b/apps/web/e2e/tests/i18n/language-switch.spec.ts @@ -84,6 +84,13 @@ test.describe("i18n language switcher", () => { screenshot: "traditional-chinese-hong-kong-locale-desktop", caption: "Settings > General > Appearance with Traditional Chinese (Hong Kong) active", }, + { + id: "ja", + option: "日本語", + displayLanguage: "表示言語", + screenshot: "japanese-locale-desktop", + caption: "Settings > General > Appearance with Japanese active", + }, ] as const) { test(`switching to ${locale.option} persists through reload and can restore English`, async ({ testPage, diff --git a/apps/web/e2e/tests/i18n/mobile-language-switch.spec.ts b/apps/web/e2e/tests/i18n/mobile-language-switch.spec.ts index 2cad0bdeb9..4a688a1938 100644 --- a/apps/web/e2e/tests/i18n/mobile-language-switch.spec.ts +++ b/apps/web/e2e/tests/i18n/mobile-language-switch.spec.ts @@ -32,4 +32,34 @@ test.describe("mobile i18n language switcher", () => { await expect(testPage.locator("html")).toHaveAttribute("lang", "en", { timeout: 10_000 }); await expect(testPage.getByLabel("Display language")).toBeVisible({ timeout: 10_000 }); }); + + test("switches to Japanese, persists through reload, and restores English", async ({ + testPage, + }) => { + await testPage.goto(APPEARANCE_URL); + + const select = testPage.getByLabel("Display language"); + await expect(select).toBeVisible({ timeout: 10_000 }); + await select.tap(); + await testPage.getByRole("listbox").getByRole("option", { name: "日本語" }).tap(); + + await expect(testPage.locator("html")).toHaveAttribute("lang", "ja", { timeout: 10_000 }); + await expect(testPage.getByLabel("表示言語")).toBeVisible({ timeout: 10_000 }); + await expect + .poll(async () => { + const cookies = await testPage.context().cookies(); + return cookies.find((cookie) => cookie.name === "kandev_locale")?.value; + }) + .toBe("ja"); + + await testPage.reload(); + await expect(testPage.locator("html")).toHaveAttribute("lang", "ja", { timeout: 10_000 }); + await expect(testPage.getByLabel("表示言語")).toBeVisible({ timeout: 10_000 }); + + const selectAfter = testPage.getByLabel("表示言語"); + await selectAfter.tap(); + await testPage.getByRole("listbox").getByRole("option", { name: "English" }).tap(); + await expect(testPage.locator("html")).toHaveAttribute("lang", "en", { timeout: 10_000 }); + await expect(testPage.getByLabel("Display language")).toBeVisible({ timeout: 10_000 }); + }); }); diff --git a/apps/web/lib/i18n/boot.test.ts b/apps/web/lib/i18n/boot.test.ts index 77c3034de9..3b8ccc44b9 100644 --- a/apps/web/lib/i18n/boot.test.ts +++ b/apps/web/lib/i18n/boot.test.ts @@ -26,6 +26,11 @@ describe("resolveInitialLocale", () => { expect(resolveInitialLocale(payloadWithLocale())).toBe("zh-cn"); }); + it("restores ja from the locale cookie", () => { + document.cookie = `${LOCALE_COOKIE}=ja; path=/`; + expect(resolveInitialLocale(payloadWithLocale())).toBe("ja"); + }); + it("defaults to en when neither payload nor cookie is present", () => { expect(resolveInitialLocale(undefined)).toBe("en"); }); diff --git a/apps/web/lib/i18n/date-locale.test.ts b/apps/web/lib/i18n/date-locale.test.ts index 1ecdac1ba0..b658f5dfc4 100644 --- a/apps/web/lib/i18n/date-locale.test.ts +++ b/apps/web/lib/i18n/date-locale.test.ts @@ -72,6 +72,7 @@ describe("resolveDateLocale", () => { ["zh-cn", "zh-CN"], ["zh-tw", "zh-TW"], ["zh-hk", "zh-HK"], + ["ja", "ja"], ])("maps %j to the %j date-fns locale", async (locale, code) => { const resolved = await resolveDateLocale(locale as "en"); expect(resolved.code).toBe(code); @@ -115,4 +116,15 @@ describe("dateLocale", () => { expect(formatTimeDistance(ago(HOUR))).toBe("há aproximadamente 1 hora"); expect(formatTimeDistance(ago(3 * DAY))).toBe("há 3 dias"); }); + + it("renders Japanese distances once ja is active", async () => { + vi.useFakeTimers(); + vi.setSystemTime(NOW); + await activateLocale("ja"); + await primeDateLocale("ja"); + + expect(dateLocale().code).toBe("ja"); + expect(formatTimeDistance(ago(HOUR))).toBe("約1時間前"); + expect(formatTimeDistance(ago(3 * DAY))).toBe("3日前"); + }); }); diff --git a/apps/web/lib/i18n/date-locale.ts b/apps/web/lib/i18n/date-locale.ts index 3e6dfbe890..8c4bc1589c 100644 --- a/apps/web/lib/i18n/date-locale.ts +++ b/apps/web/lib/i18n/date-locale.ts @@ -40,6 +40,7 @@ const LAZY_LOCALES: Partial Promise>> = { "zh-cn": () => import("date-fns/locale/zh-CN").then((m) => m.zhCN), "zh-tw": () => import("date-fns/locale/zh-TW").then((m) => m.zhTW), "zh-hk": () => import("date-fns/locale/zh-HK").then((m) => m.zhHK), + ja: () => import("date-fns/locale/ja").then((m) => m.ja), }; const loaded = new Map([ diff --git a/apps/web/lib/i18n/formats.test.ts b/apps/web/lib/i18n/formats.test.ts index 1b270e09e3..931991487d 100644 --- a/apps/web/lib/i18n/formats.test.ts +++ b/apps/web/lib/i18n/formats.test.ts @@ -38,6 +38,23 @@ describe("formatRelative (en, timeAgo-compatible)", () => { }); }); +describe("formatRelative (ja)", () => { + const now = new Date(FORMAT_NOW).getTime(); + const ago = (ms: number) => new Date(now - ms).toISOString(); + + afterAll(async () => { + await activateLocale("en"); + }); + + it("uses Japanese catalog buckets", async () => { + await activateLocale("ja"); + expect(formatRelative(ago(30_000), now)).toBe("たった今"); + expect(formatRelative(ago(5 * 60_000), now)).toBe("5分前"); + expect(formatRelative(ago(3 * 3_600_000), now)).toBe("3時間前"); + expect(formatRelative(ago(2 * 86_400_000), now)).toBe("2日前"); + }); +}); + describe("formatSidebarElapsedTime", () => { const now = new Date(FORMAT_NOW).getTime(); const ago = (seconds: number) => new Date(now - seconds * 1000).toISOString(); @@ -75,6 +92,7 @@ describe("formatSidebarElapsedTime", () => { ["zh-cn", "3周"], ["zh-hk", "3週"], ["zh-tw", "3週"], + ["ja", "3週間"], ["pseudo", "3ŵ"], ] as const)("uses the %s compact unit catalog", async (locale, expected) => { await activateLocale(locale); @@ -151,6 +169,30 @@ describe("locale-aware Intl wrappers", () => { await activateLocale("en"); }); + it("passes ja to number and date formatters", async () => { + await activateLocale("ja"); + const numberOptions: Intl.NumberFormatOptions = { + style: "currency", + currency: "JPY", + currencyDisplay: "code", + }; + const dateOptions: Intl.DateTimeFormatOptions = { + year: "numeric", + month: "long", + day: "numeric", + timeZone: "UTC", + }; + const date = FORMAT_DATE; + + expect(formatNumber(1234.5, numberOptions)).toBe( + new Intl.NumberFormat("ja", numberOptions).format(1234.5), + ); + expect(formatDate(date, dateOptions)).toBe( + new Intl.DateTimeFormat("ja", dateOptions).format(new Date(date)), + ); + await activateLocale("en"); + }); + it("passes pt-pt to number and date formatters", async () => { await activateLocale("pt-pt"); const dateOptions: Intl.DateTimeFormatOptions = { @@ -286,4 +328,11 @@ describe("formatRelativeTime (locale awareness)", () => { expect(portuguese).toContain("3"); expect(portuguese).toMatch(/horas/i); }); + + it("renders Japanese relative time once ja is active", async () => { + await activateLocale("ja"); + const japanese = formatRelativeTime(threeHoursAgo, now); + expect(japanese).toContain("3"); + expect(japanese).toMatch(/時間/); + }); }); diff --git a/apps/web/lib/i18n/index.test.ts b/apps/web/lib/i18n/index.test.ts index 05b283b40f..5fa7a87052 100644 --- a/apps/web/lib/i18n/index.test.ts +++ b/apps/web/lib/i18n/index.test.ts @@ -16,6 +16,7 @@ const ZH_CN_LOCALE = "zh-cn"; const ZH_TW_LOCALE = "zh-tw"; const ZH_HK_LOCALE = "zh-hk"; const PT_PT_LOCALE = "pt-pt"; +const JA_LOCALE = "ja"; const DISPLAY_LANGUAGE_KEY = "settings:displayLanguage"; afterEach(async () => { @@ -37,6 +38,9 @@ describe("locale predicates", () => { expect(isSupportedLocale("zh-HK")).toBe(true); expect(isSupportedLocale(PT_PT_LOCALE)).toBe(true); expect(isSupportedLocale("pt-PT")).toBe(true); + expect(isSupportedLocale(JA_LOCALE)).toBe(true); + expect(isSupportedLocale("ja-JP")).toBe(true); + expect(isSupportedLocale(" JA ")).toBe(true); expect(isSupportedLocale("pseudo")).toBe(true); expect(isSupportedLocale("fr")).toBe(false); expect(isSupportedLocale(42)).toBe(false); @@ -49,6 +53,8 @@ describe("locale predicates", () => { expect(normalizeLocale("zh-TW")).toBe(ZH_TW_LOCALE); expect(normalizeLocale("zh-HK")).toBe(ZH_HK_LOCALE); expect(normalizeLocale("pt-PT")).toBe(PT_PT_LOCALE); + expect(normalizeLocale("ja")).toBe(JA_LOCALE); + expect(normalizeLocale("ja-JP")).toBe(JA_LOCALE); expect(normalizeLocale("pseudo")).toBe("pseudo"); expect(normalizeLocale("nope")).toBe(DEFAULT_LOCALE); expect(normalizeLocale(undefined)).toBe(DEFAULT_LOCALE); @@ -56,7 +62,15 @@ describe("locale predicates", () => { it("exposes en as the default and lists every shipped locale", () => { expect(DEFAULT_LOCALE).toBe("en"); - expect([...SUPPORTED_LOCALES]).toEqual(["en", "pt-pt", "zh-cn", "zh-tw", "zh-hk", "pseudo"]); + expect([...SUPPORTED_LOCALES]).toEqual([ + "en", + "pt-pt", + "zh-cn", + "zh-tw", + "zh-hk", + "ja", + "pseudo", + ]); }); // Only the `isProd` half of the contract. `selectableLocales` also requires @@ -64,8 +78,16 @@ describe("locale predicates", () => { // is fixed to `true` for the whole vitest run (config resolves in serve mode). // `bundling.test.ts` covers the decision that produces it, in both directions. it("hides the pseudo locale from production builds", () => { - expect(selectableLocales(false)).toEqual(["en", "pt-pt", "zh-cn", "zh-tw", "zh-hk", "pseudo"]); - expect(selectableLocales(true)).toEqual(["en", "pt-pt", "zh-cn", "zh-tw", "zh-hk"]); + expect(selectableLocales(false)).toEqual([ + "en", + "pt-pt", + "zh-cn", + "zh-tw", + "zh-hk", + "ja", + "pseudo", + ]); + expect(selectableLocales(true)).toEqual(["en", "pt-pt", "zh-cn", "zh-tw", "zh-hk", "ja"]); }); /** @@ -179,6 +201,17 @@ describe("activateLocale", () => { expect(i18n.t(DISPLAY_LANGUAGE_KEY)).toBe("顯示語言"); }); + it("activates Japanese and resolves its real catalog", async () => { + const result = await activateLocale("ja"); + expect(result).toBe(JA_LOCALE); + expect(i18n.language).toBe(JA_LOCALE); + expect(document.documentElement.lang).toBe(JA_LOCALE); + expect(readLocaleCookie()).toBe(JA_LOCALE); + expect(i18n.hasResourceBundle(JA_LOCALE, "settings")).toBe(true); + expect(i18n.getResource(JA_LOCALE, "settings", "displayLanguage")).toBe("表示言語"); + expect(i18n.t(DISPLAY_LANGUAGE_KEY)).toBe("表示言語"); + }); + it("resolves reviewed product vocabulary for each Traditional Chinese region", async () => { await activateLocale(ZH_TW_LOCALE); expect(i18n.t("settings:addEditor")).toBe("新增編輯器"); diff --git a/apps/web/lib/i18n/index.ts b/apps/web/lib/i18n/index.ts index a0f1ecd00f..4c1b16409f 100644 --- a/apps/web/lib/i18n/index.ts +++ b/apps/web/lib/i18n/index.ts @@ -18,7 +18,15 @@ import { writeLocaleCookie } from "./cookie"; */ export const DEFAULT_LOCALE = "en"; export const DEFAULT_NAMESPACE = "common"; -export const SUPPORTED_LOCALES = ["en", "pt-pt", "zh-cn", "zh-tw", "zh-hk", "pseudo"] as const; +export const SUPPORTED_LOCALES = [ + "en", + "pt-pt", + "zh-cn", + "zh-tw", + "zh-hk", + "ja", + "pseudo", +] as const; export type SupportedLocale = (typeof SUPPORTED_LOCALES)[number]; /** Human-readable labels for the language switcher. */ @@ -29,6 +37,7 @@ export const LOCALE_LABELS: Record = { "zh-cn": "简体中文", "zh-tw": "繁體中文(台灣)", "zh-hk": "繁體中文(香港)", + ja: "日本語", pseudo: "Pseudo (QA)", }; @@ -37,25 +46,49 @@ function canonicalLocale(value: string): string { return value.trim().toLowerCase(); } +/** + * Collapse a region-suffixed locale onto its base when the base is unambiguous + * (`ja-JP` → `ja`). `zh` and `pt` stay exact: those bases have multiple + * shipped variants and must not share a catalog. + */ +function collapseRegion(canonical: string): string { + const dash = canonical.indexOf("-"); + if (dash < 0) return canonical; + const base = canonical.slice(0, dash); + if ((SUPPORTED_LOCALES as readonly string[]).includes(base) && base !== "zh" && base !== "pt") { + return base; + } + return canonical; +} + +function resolveSupportedLocale(canonical: string): SupportedLocale | null { + if ((SUPPORTED_LOCALES as readonly string[]).includes(canonical)) { + return canonical as SupportedLocale; + } + const collapsed = collapseRegion(canonical); + return (SUPPORTED_LOCALES as readonly string[]).includes(collapsed) + ? (collapsed as SupportedLocale) + : null; +} + /** * Whether `value` names a shipped locale. Accepts case variants such as - * `zh-CN`; prefer `normalizeLocale` when you need the canonical id to pass on. + * `zh-CN` and unambiguous region suffixes such as `ja-JP`; prefer + * `normalizeLocale` when you need the canonical id to pass on. */ export function isSupportedLocale(value: unknown): boolean { if (typeof value !== "string") return false; - return (SUPPORTED_LOCALES as readonly string[]).includes(canonicalLocale(value)); + return resolveSupportedLocale(canonicalLocale(value)) !== null; } /** * Coerce any value to a supported canonical locale, defaulting to `en`. - * Case-insensitive so a hand-edited `zh-CN` cookie matches the backend. + * Case-insensitive so a hand-edited `zh-CN` cookie matches the backend; + * `ja-JP` collapses onto `ja` the same way Go does. */ export function normalizeLocale(value: unknown): SupportedLocale { if (typeof value !== "string") return DEFAULT_LOCALE; - const canonical = canonicalLocale(value); - return (SUPPORTED_LOCALES as readonly string[]).includes(canonical) - ? (canonical as SupportedLocale) - : DEFAULT_LOCALE; + return resolveSupportedLocale(canonicalLocale(value)) ?? DEFAULT_LOCALE; } /** diff --git a/apps/web/scripts/check-i18n-keys.mjs b/apps/web/scripts/check-i18n-keys.mjs index 08718d4980..13de6c6ef7 100644 --- a/apps/web/scripts/check-i18n-keys.mjs +++ b/apps/web/scripts/check-i18n-keys.mjs @@ -22,10 +22,11 @@ * expect: pt-pt was 312 keys short and zh-hk/zh-tw 415, none of it visible in a * green build. * - * The four catalogs are now complete, so the failure mode is the other one: a - * PR that adds an `en` key and no translation silently re-opens the gap. This - * gates, and the cost is that adding user-facing copy means adding it in five - * languages. That is the actual cost of shipping five languages. + * The real-locale catalogs are now complete (`pt-pt`, `zh-cn`, `zh-hk`, + * `zh-tw`, `ja`), so the failure mode is the other one: a PR that adds an + * `en` key and no translation silently re-opens the gap. This gates, and the + * cost is that adding user-facing copy means adding it in six languages. That + * is the actual cost of shipping those languages. * * ## The identical-to-English check * diff --git a/apps/web/src/locales/ja/account.json b/apps/web/src/locales/ja/account.json new file mode 100644 index 0000000000..8554a615f3 --- /dev/null +++ b/apps/web/src/locales/ja/account.json @@ -0,0 +1,53 @@ +{ + "actions": "操作", + "activeSessions": "アクティブなセッション", + "absoluteTime": "絶対時間", + "apiTokens": "APIトークン", + "apiTokensBlurb": "個人アクセストークンで、スクリプトやCLIをあなたとして認証。漏れた可能性あるなら、すぐトークン失効。", + "cancel": "キャンセル", + "changePassword": "パスワード変更", + "couldNotChangePassword": "パスワード変更できませんでした。", + "couldNotUpdateHostnameResolution": "ホスト名解決を更新できませんでした。", + "couldNotCreateToken": "トークン作成できませんでした。", + "createApiToken": "APIトークン作成", + "createApiTokenDescription": "使うスクリプトやCLIに、アカウントと同じアクセス権を付与。あとで見分けやすいよう、名前を付けてください。", + "createToken": "トークン作成", + "created": "作成済み", + "creating": "作成中...", + "currentPassword": "現在のパスワード", + "device": "デバイス", + "done": "完了", + "failedToLoadSessions": "セッションの読み込みに失敗。", + "failedToLoadTokens": "トークンの読み込みに失敗。", + "failedToSaveLastSeenDisplay": "最終表示の保存に失敗。", + "failedToRevokeSession": "セッションの失効に失敗。", + "ipAddress": "IP", + "hostname": "ホスト名", + "hostnameNotAvailable": "N/A", + "lastSeen": "最終確認", + "lastSeenDisplay": "最終確認表示", + "lastSeenDisplayDescription": "セッションのアクティビティ時刻の表示方法を選択。", + "lastUsed": "最終使用", + "loadingSessions": "セッション読み込み中...", + "loadingTokens": "トークン読み込み中...", + "name": "名前", + "never": "なし", + "newPassword": "新しいパスワード", + "newToken": "新しいトークン", + "noTokensYet": "まだトークンなし。", + "password": "パスワード", + "passwordUpdated": "パスワード更新済み。", + "relativeTime": "相対時間", + "revoke": "失効", + "saving": "保存しています...", + "securityPageDescription": "パスワードを変更し、アカウントにサインインしているデバイスを確認します。", + "securityPageTitle": "プロフィールとパスワード", + "resolveDeviceHostnames": "デバイスのホスト名を解決", + "resolveDeviceHostnamesDescription": "サインインしているデバイスの IP アドレスに対して、システムの DNS リゾルバーを使用します。", + "signOut": "サインアウト", + "thisDevice": "このデバイス", + "tokenCreated": "トークンが作成されました", + "tokenShownOnlyOnce": "これは一度だけ表示されます。今すぐコピーして、安全な場所に保管してください。", + "tokensPageDescription": "スクリプトや CLI があなたとして動作するための個人用アクセストークンです。", + "tokensPageTitle": "API トークン" +} diff --git a/apps/web/src/locales/ja/agents.json b/apps/web/src/locales/ja/agents.json new file mode 100644 index 0000000000..c310c734f1 --- /dev/null +++ b/apps/web/src/locales/ja/agents.json @@ -0,0 +1,321 @@ +{ + "actionCannotBeUndone": "この操作は元に戻せません。", + "add": "追加", + "addProfile": "プロファイルを追加", + "addTuiAgent": "TUI エージェントを追加", + "addTuiAgentDescription": "CLI ツールを TUI エージェントとして登録します。エージェント一覧に、デフォルトのパススループロファイル付きで表示されます。", + "agentCliFlags": "エージェントの CLI フラグ", + "agentCliFlagsDescription": "起動時にエージェントの CLI に渡すフラグです。有効になっている項目のみが適用されます。", + "agentInstallAlreadyInProgress": "エージェントのインストールはすでに進行中です。", + "agentInstallationInProgress": "エージェントのインストールを進行中です", + "agentNotFound": "エージェントが見つかりません。", + "agentProfileSettings": "{{name}} のプロファイル設定", + "agentProfilesTitle": "{{name}} のプロファイル", + "authRequiredOpenLoginTerminal": "認証が必要です。クリックしてログイン用ターミナルを開く", + "authRequiredOpenShell": "認証が必要です。クリックしてシェルを開き、サインインしてください", + "authenticationRequired": "認証が必要です", + "automaticallyAvailable": "自動的に利用可能", + "availableCommandsCount_one": "利用可能なコマンド({{count}})", + "availableCommandsCount_other": "利用可能なコマンド({{count}})", + "availableSlashCommands": "利用可能なスラッシュコマンド", + "availableSlashCommandsHelp": "セッションチャット中にこれらを入力して実行します。例: <0>{{example}}。", + "availableToInstallDescription": "インストールをクリックすると、kandev ホスト上でエージェントのインストールスクリプトを実行します。進行状況はリアルタイムで流れます。複数のインストールを同時に開始できます。", + "backToAgents": "エージェントに戻る", + "backToModelSettings": "{{name}} のモデル設定に戻る", + "browseAvailableAgents": "利用可能なエージェントを表示", + "builtIn": "組み込み", + "cannotDeleteAgentProfile": "エージェントのプロファイルを削除できません", + "capabilityAuthRequired": "認証が必要です。端末でエージェントの CLI を実行して認証し、その後更新してください。", + "capabilityNotInstalled": "エージェントの CLI がインストールされていません。", + "capabilityProbeFailed": "確認に失敗しました。詳細はエージェントのログを確認してください。", + "capabilityProbing": "エージェント機能を確認中…", + "changeTierMappingsFirst": "このプロファイルを削除する前に、このワークスペースのティアマッピングを変更してください。", + "everythingInstalled": "利用可能なエージェントとツールはすべてインストール済みです。", + "expandAgentProfiles": "{{name}} のプロファイルを展開", + "checkingAuthentication": "認証を確認中", + "checkingCapabilitiesAndAuth": "エージェント機能と認証を確認中...", + "checkingLatestRuntimeVersion": "最新ランタイム版を確認中…", + "cliFlagsEnabledCount_one": "有効 {{enabled}} / {{count}}", + "cliFlagsEnabledCount_other": "有効 {{enabled}} / {{count}}", + "collapseAgentProfiles": "{{name}} のプロファイルを折りたたむ", + "command": "コマンド", + "commandPrefix": "コマンド接頭辞", + "commandPrefixHelp": "エージェント起動コマンドの前に付くトークン。サンドボックス起動ツール下で実行されるようになる (例: <0>{{example}})。値はシェルトークンとして分割される。空ならエージェントを直接実行。ACP セッションのみ適用。プロファイルが TUI パススルーを使う場合は無効。", + "commandPreview": "コマンドプレビュー", + "commandPreviewHelp": "現在の設定に基づいて実行される CLI コマンド。", + "commandRequired": "コマンド必須", + "commandThatWillRun": "実行されるコマンド", + "configureProfilesIntro": "このエージェントのプロファイルとデフォルトを設定。", + "configured": "設定済み", + "conflictAutomationRow": "<0>{{name}} が {{workspace}} 内", + "conflictAutomationsTitle": "自動化:", + "conflictQuickChatsTitle": "クイックチャット:", + "conflictTasksTitle": "タスク:", + "conflictTierMappingRow": "{{provider}} の {{workspace}} にある <0>{{tier}} ティア", + "conflictTierMappingsTitle": "ワークスペースのティアマッピング:", + "conflictWatchersTitle": "ウォッチャー (無効化される):", + "conflictUtilityAgentsTitle": "ユーティリティエージェント (古いバインドを保持):", + "disableProfileUtilityWarning": "ユーティリティエージェントがこのプロファイルを使っている。無効化すると、各バインドを修復するまで新しいユーティリティ呼び出しは止まる。", + "disableProfileAnyway": "プロファイルを無効化", + "copied": "コピー済み", + "copyInstallCommand": "インストールコマンドをコピー", + "copyToClipboard": "クリップボードにコピー", + "create": "作成", + "createAgentProfileTitle": "{{name}} プロファイルを作成", + "installAgents": "エージェントをインストール", + "profileCount_one": "{{count}} プロファイル", + "profileCount_other": "{{count}} プロファイル", + "createProfileIntro": "このエージェント用の新しいプロファイルを作成。", + "creating": "作成中...", + "defaultProfile": "デフォルトプロファイル", + "defaultSuffix": "(デフォルト)", + "delete": "削除", + "deleteAgent": "エージェントを削除", + "deleteAgentDescription": "これにより、エージェントとそのすべてのプロファイルが完全に削除されます。この操作は元に戻せません。", + "deleteAgentProfileDescription": "このプロファイルは完全に削除されます。この操作は元に戻せません。", + "deleteAgentProfileTitle": "エージェントのプロファイルを削除しますか?", + "deleteAgentTitle": "{{name}} を削除しますか?", + "deleteAnyway": "それでも削除", + "deleteAnywayConsequences": "これらのセッションではこのプロファイルを使用できなくなり、一覧のウォッチャーは無効になります。この操作は元に戻せません。", + "deleteProfile": "プロファイルを削除", + "details": "詳細", + "detectedAt": "{{path}} で検出", + "disableProfile": "プロファイルを無効にする", + "disableSetting": "{{name}} を無効にする", + "displayName": "表示名", + "displayNameRequired": "表示名は必須です", + "done": "完了", + "enableMcp": "MCP を有効にする", + "enableMcpDescription": "このプロファイルがセッション中に MCP サーバーを使用できるようにします。", + "enableProfile": "プロファイルを有効にする", + "enableSetting": "{{name}} を有効にする", + "enabled": "有効", + "enabledProfileInfo": "プロファイルの利用可否に関する詳細情報", + "enabledProfileHelper": "無効なプロファイルは既存のセッションでは引き続き使用されますが、新しいタスクやエージェントを作成する際には表示されません。", + "everyProfileNeedsNameAndModel": "すべてのプロファイルには名前とモデルが必要です。", + "exampleValue": "例: {{example}}", + "failedToCreateAgent": "エージェントの作成に失敗しました", + "failedToDeleteProfile": "プロファイルの削除に失敗しました", + "failedToFetchCapabilities": "機能の取得に失敗しました", + "modelOptionsAuthenticationRequired": "モデルオプションを読み込むには、このエージェントにサインインしてください。", + "modelOptionsResolutionFailed": "モデルオプションを読み込めませんでした。", + "modelSettings": "モデル設定", + "resolvingModelOptions": "モデルオプションを読み込んでいます…", + "retryModelOptions": "再試行", + "failedToLoadCommandPreview": "コマンドプレビューの読み込みに失敗しました", + "failedToLoadMcpConfig": "MCP 設定の読み込みに失敗しました", + "failedToRefresh": "更新に失敗しました: {{error}}", + "failedToSaveAgent": "エージェントの保存に失敗しました", + "failedToSaveMcpConfig": "MCP 設定の保存に失敗しました", + "failedToSaveProfile": "プロファイルの保存に失敗しました", + "failedToUpdateProfile": "プロフィールの更新に失敗", + "filterModels": "モデルを絞り込み...", + "fixInvalidMcpConfig": "保存前に無効な MCP 設定を修正してください。", + "fixInvalidMcpJson": "保存前に無効な MCP JSON を修正してください。", + "flag": "フラグ", + "hostTerminal": "ホスト端末", + "hostTerminalDescription": "kandev ホスト上でシェルを実行。エージェントの手動インストールや設定に使う。", + "install": "インストール", + "installQueued": "キュー済み...", + "installationNotDetected": "インストール未検出", + "installed": "インストール済み", + "installedAgents": "インストール済みエージェント", + "installedAgentsDescription": "このマシンで検出されたエージェントは設定可能。", + "installing": "インストール中...", + "invalidJson": "無効な JSON", + "invalidMcpConfig": "無効な MCP 設定", + "kandevMcpChip": "✓ {{name}}", + "kandevMcpTools": "ツール: {{tools}}", + "mcpConfigMustBeJsonObject": "MCP サーバー設定は JSON オブジェクトである必要あり", + "mcpConfiguration": "MCP 設定", + "mcpDraftHint": "MCP 設定はプロフィール保存後に適用される。", + "mcpKeyMustBeJsonObject": "{{key}} は JSON オブジェクトである必要あり", + "mcpPassthroughInjectionHint": "CLI パススルーモードでは、kandev が {{mechanism}} でこれらの MCP サーバーを注入。", + "mcpSaveProfileHint": "MCP サーバーを設定するには、このプロフィールを保存。", + "mcpServersHelp": "MCP 定義は DB に保存され、実行時に executor ごとに解決される。ローカルのエージェント設定は上書きしない。", + "mcpServersJson": "MCP サーバー (JSON)", + "mcpStrategy": "Kandev MCP ツール", + "mcpStrategyHelp": "Kandev はこのエージェントに自分のツールを渡せる (タスクタイトル設定、ユーザーへの質問、プラン更新、ステップ完了)。そのため CLI が読む形式で MCP 設定を書く必要あり。合う方を選ぶ。違う形式を選ぶと静かに失敗する。設定は書かれるが、CLI は無視し、エラーも出ない。コマンドが MCP 対応コーディングエージェントでないなら、これをオフに。", + "mcpStrategyNone": "オフ: Kandev ツールなし", + "mcpStrategyOption": "{{name}}: {{mechanism}}", + "model": "モデル", + "modelHeading": "モデル", + "fallbackNone": "フォールバック: なし", + "fallbackExact": "フォールバック: exact", + "fallbackNext": "フォールバック: next", + "fallbackModel": "フォールバック: {{model}}", + "modelRequiredForAllProfiles": "すべてのプロフィールにモデル必須。", + "noAuthHintLogin": "サインインするには Open terminal をクリック、その後更新。", + "noAuthHintNotInstalled": "エージェント CLI をインストールし、その後 Refresh をクリック。", + "noAuthHintShell": "シェル起動するには Open terminal をクリック、エージェントのサインインコマンドを実行し、その後更新。", + "noAuthLoginRequired": "認証なし, ログイン必要", + "newProfile": "新しいプロファイル", + "noCliFlagsConfigured": "CLI フラグ未設定。下に1つ追加。", + "noCommandPreview": "コマンドプレビューなし。", + "noInstalledAgentsDetected": "インストール済みエージェント見つからない。下に1つインストールしてから、再スキャンをクリック。", + "noModeFound": "モード見つからない。", + "noModelFound": "モデル見つからない。", + "noModelsFound": "モデル見つからない。", + "noProfilesYetShort": "まだプロファイルなし", + "notInstalled": "未インストール", + "openTerminal": "ターミナルを開く", + "pageDescription": "インストール済みエージェントを見つけ、新規インストールし、プロファイルを管理。", + "popularServers": "人気サーバー", + "probingCapabilities": "エージェント機能を確認中… たいてい数秒かかる。", + "profileActions": "プロファイル操作", + "profileInUseIntro": "このプロファイルは現在使用中。削除すると次に影響:", + "profileName": "プロファイル名", + "profileNameRequired": "プロファイル名必須。", + "profileNameRequiredDescription": "保存前にプロファイル名を入力。", + "profileNameRequiredTitle": "プロファイル名必須", + "profileNotFound": "プロファイル見つからない。", + "profileExternalChangeTitle": "別場所でプロファイル変更", + "profileExternalChangeDescription": "編集中にこのプロファイルが変更された。下書きは保持済み。再保存前に破棄して最新保存値を読み込み。", + "profileExternalChangeDiscard": "最新プロファイルを読み込む", + "profileExternalChangeInvalidReason": "保存前に最新プロファイルを読み込む。", + "profileSettings": "プロファイル設定", + "promptTokenHint": "<0>{{token}} はタスク説明かフォローアップメッセージに置き換わる。", + "ptyConnectionError": "接続エラー", + "refresh": "更新", + "refreshCapabilitiesTooltip": "エージェント機能を更新 (models + modes)", + "remove": "削除", + "removeCliFlag": "{{name}} を削除", + "removeThisProfile": "このプロファイルを削除", + "requestFailed": "リクエスト失敗", + "rescan": "再スキャン", + "retry": "再試行", + "retryUpdate": "更新を再試行", + "retryVersionCheck": "バージョン確認を再試行", + "reviewUpdateBeforeApplying": "Kandev がこのホスト runtime を変更する前に更新を確認。", + "runtimeAlreadyUpToDate": "runtime はすでに最新。", + "runtimeUpdateExplainer": "このKandevホストの管理対象ランタイムを更新し、モデルと機能を再読み込みする。", + "runtimeUpdateFailed": "ランタイム更新に失敗した。", + "runtimeUpdateSessionsNote": "アクティブなセッションはそのまま動く。あとで行うプローブと起動だけ、新しいランタイムを使う。", + "runtimeUpdatedRefreshFailed": "ランタイム更新したが、機能を再読み込みできなかった: {{error}}", + "runtimeUpdatedSuccess": "ランタイム更新成功。", + "runtimeVersionQuickChoices": "クイック選択", + "browseRuntimeVersions": "すべてのバージョンを表示", + "searchRuntimeVersions": "バージョンを検索", + "noMatchingRuntimeVersions": "検索に一致するバージョンなし。", + "activeRuntimeVersion": "アクティブ版: {{version}}", + "activeRuntimeVersionMarker": "アクティブ", + "effectiveRuntimeVersion": "有効版: {{version}}", + "kandevDefaultVersion": "Kandevデフォルト: {{version}}", + "kandevDefaultRuntimeVersionMarker": "Kandevデフォルト", + "latestRuntimeVersion": "最新", + "runtimeUpdateStatusUnknown": "{{name}} の最新バージョンは不明。更新操作は引き続き使える。", + "runtimeVersionMarkerGroup": "({{markers}})", + "runtimeVersionOption": "{{version}} {{markers}}", + "selectRuntimeVersion": "有効にするバージョン", + "updateAvailableWithVersions": "{{name}} を {{current}} から {{latest}} に更新", + "updateRuntime": "ランタイムを更新", + "rollBackRuntime": "ランタイムをロールバック", + "repairRuntime": "ランタイムを修復", + "upToDateRuntime": "最新", + "useKandevDefault": "Kandevデフォルトを使う", + "useKandevDefaultVersion": "Kandevデフォルトを使う ({{version}})", + "scanningForInstalledAgents": "インストール済みエージェントをスキャン中...", + "searchModels": "モデルを検索...", + "searchModes": "モードを検索...", + "selectAModelShort": "モデルを選択", + "selectModel": "モデルを選択...", + "sessionEnded": "セッション終了。", + "sessionEndedWithCode": "セッション終了 (exit {{code}})。", + "sessionUnavailable": "セッションはもう使えない。", + "setupProfile": "プロファイルを設定", + "signInToAgent": "サインイン: {{name}}", + "startMode": "開始モード", + "startModel": "開始モデル", + "startingSession": "セッション開始中…", + "terminal": "ターミナル", + "tuiCommandHelp": "バイナリ名は PATH で検索。モデル値入れるには <0>{{token}} 使う。", + "tuiModelHelp": "エージェント選択ドロップダウンに出るプロファイルラベル", + "unableToStartUpdate": "更新開始できない: {{error}}", + "untitledQuickChat": "無題のクイックチャット", + "untitledTask": "無題のタスク", + "upToDate": "最新", + "updateAgent": "{{name}} を更新", + "updatePhaseQueued": "更新待ち…", + "updatePhaseRefreshing": "エージェント機能を更新中…", + "updatePhaseResolving": "最新バージョン確認中…", + "updatePhaseUpdating": "ランタイム更新中…", + "valueOptional": "値 (任意)", + "valueOptionalLabel": "値 (任意)", + "valuePlaceholder": "値", + "watcherKindGithubIssue": "GitHub課題", + "watcherKindGithubReview": "GitHub PR レビュー", + "watcherKindJira": "Jira", + "watcherKindLinear": "Linear", + "duplicate": "複製", + "duplicateProfileNamed": "{{name}} を複製", + "duplicateProfileSuccess": "プロファイル複製完了", + "duplicateSaveBlocked": "設定まだ保存中。少し待って再試行。", + "failedToDuplicateProfile": "プロファイル複製失敗", + "dynamicAgents": "動的エージェント", + "dynamicAgentsDescription": "1 つの論理プロファイルを、順番つきの具体的なエージェントプロファイル一覧へルーティング。", + "dynamicProfileDisabled": "動的エージェントルーティング無効。", + "dynamicProfileDescription": "フォールバック実行用に、順番つき具体的プロファイル一覧を選択。", + "dynamicProfileSettings": "動的プロファイル設定", + "dynamicCandidates": "候補", + "dynamicCandidatesDescription": "候補は順番に実行。次の候補は、設定済みエラー動作が許可した場合のみ使う。", + "dynamicRoutingPolicyTitle": "Kandev が候補切り替える時", + "dynamicRoutingPolicySwitchable": "切り替え対象は、認証またはサブスクリプション問題、認証情報または設定不足、クォータまたはレート制限、モデル利用不可、容量、ネットワーク、プロバイダー可用性または過負荷など、分類済みプロバイダー障害。", + "dynamicRoutingPolicyExcluded": "Kandev は、タスク、リポジトリ、権限、ツールまたはランタイムエラー、転送損失、あいまいなターン途中結果では切り替えない。そこは手動復旧で止める。作業繰り返し防ぐため。", + "dynamicRoutingPolicyRecovery": "切り替え後、失敗したプロバイダーは 1 分停止、または提供されていればリセット時刻まで停止。Kandev は再利用前に専用ヘルスプローブ実行。", + "dynamicPolicyWaitExplanation": "リセット待機は、各候補とエラー種別ごとに 1 回だけ、最大待機内なら信頼できる将来リセット時刻を使う。その待機後、Kandev は retry policy 適用前に 1 回だけ新規試行する。", + "dynamicTransientErrors": "一時エラー", + "dynamicTransientErrorsDescription": "容量不足、レート制限、ネットワーク障害、タイムアウト、プロバイダー停止、転送中断などの一時条件。", + "dynamicHardErrors": "重大エラー", + "dynamicHardErrorsDescription": "サブスクリプション制限、クレジット枯渇、認証、認証情報不足、利用不可モデル、プロバイダー設定などのアカウントまたは設定条件。", + "dynamicPolicyRetry": "この候補を再試行", + "dynamicPolicyWaitForReset": "プロバイダーのリセットまで待機", + "dynamicPolicyAfterExhausted": "リカバリ消費後", + "dynamicPolicyMaxRetries": "最大再試行回数", + "dynamicPolicyInitialInterval": "初回間隔(秒)", + "dynamicPolicyMaxWait": "最大リセット待機(秒)", + "dynamicPolicyValidation": "保存前にハイライトしたポリシー値を修正してください。", + "dynamicPolicyMaxRetriesValidation": "再試行回数を 1 から 10 の間で入力してください。", + "dynamicPolicyInitialIntervalValidation": "初回間隔を 1 秒から 1 時間の間で入力してください。", + "dynamicPolicyMaxWaitValidation": "リセット待機を 1 秒から 7 日の間で入力してください。", + "dynamicPolicySchedule": "{{retries}} 回まで再試行。最初の再試行は {{first}} 秒待機し、その後は間隔が倍増します。", + "dynamicPolicyNoRetry": "同一候補の再試行なし。Kandev は選択結果を即時適用します。", + "dynamicPolicyWaitDescription": "最大待機内なら、信頼できる将来のリセット日または再試行日を使います。", + "dynamicPolicySkip": "候補をスキップ", + "dynamicPolicyStop": "手動リカバリで停止", + "dynamicPolicyRetryHelp": "選択結果の前に、指数バックオフで同一候補を再試行します。", + "dynamicPolicyWaitHelp": "信頼できる将来のプロバイダーリセット日または再試行日を待ちます。待機は上限あり。候補とクラスごとに 1 回使います。", + "dynamicPolicyOutcomeHelp": "リセット待機と同一候補の再試行をすべて使い切った後に Kandev が行う動作を制御します。", + "dynamicPolicyOptionInfo": "{{option}} ポリシーを説明", + "addDynamicCandidate": "候補を追加", + "noDynamicCandidates": "少なくとも 1 つ具体プロファイルを追加してください。", + "moveDynamicCandidateUp": "候補を上へ移動", + "moveDynamicCandidateDown": "候補を下へ移動", + "removeDynamicCandidate": "候補を削除", + "dynamicCandidatePickerDescription": "動的ルーティング対象の具体プロファイルを選択してください。", + "searchDynamicCandidates": "エージェントプロファイルを検索...", + "noDynamicCandidatesFound": "対象エージェントプロファイルなし。", + "dynamicRouteAction": "プロバイダーエラー時", + "dynamicRouteActionInfo": "{{action}} ルーティング動作を説明", + "dynamicRouteRetryDescription": "プロバイダーエラー後に同一候補を再試行。一時的失敗ならこれを使う。", + "dynamicRouteTryNextDescription": "この候補を現在のターンでスキップし、次の対象プロファイルへ進む。", + "dynamicRouteStopDescription": "この候補が失敗したらルーティング停止。タスクは手動リカバリ操作待ち。", + "dynamicProfileSaved": "動的プロファイルを保存しました。", + "savingProfile": "保存中...", + "saveProfile": "プロファイルを保存", + "createProfile": "プロファイルを作成", + "creatingProfile": "作成中...", + "adminOnly": "管理者のみ agents と agent profiles を変更できます。", + "providerSectionTitle": "AI プロバイダー", + "providerSectionDescription": "このプロファイルのモデル呼び出しを、エージェント内蔵プロバイダーではなく、セルフホストの OpenAI-compatible router 経由でルーティングします。", + "providerKindLabel": "プロバイダー", + "providerKindNative": "ネイティブ (エージェントのデフォルト)", + "providerKindOpenAICompatible": "OpenAI互換プロバイダ", + "providerKindHelp": "ネイティブは agent CLI 自身のプロバイダ設定を使う。OpenAI互換は、選んだキーで下の base URL にリクエスト送る。9router, LiteLLM, vLLM, self-hosted OpenRouter で動く。", + "providerBaseUrlLabel": "ベースURL", + "providerBaseUrlHelp": "router の絶対 http または https ルート。agent は /chat/completions など OpenAI互換 route path を追加する。", + "providerBaseUrlInvalid": "絶対 http または https URL を入れる。", + "providerApiKeyLabel": "APIキー", + "providerApiKeyHelp": "Kandev secret。provider に送る bearer token を持つ。認証不要 router なら未設定のまま。", + "providerModelSlash": "model 名のスラッシュを外す。OpenAI互換 provider は bare な model id を期待する。", + "providerPassthroughUnsupported": "OpenAI互換 provider を使うには CLI passthrough を無効にする。" +} diff --git a/apps/web/src/locales/ja/auth.json b/apps/web/src/locales/ja/auth.json new file mode 100644 index 0000000000..57ad9a222d --- /dev/null +++ b/apps/web/src/locales/ja/auth.json @@ -0,0 +1,30 @@ +{ + "acceptInvite": "招待を承諾", + "atLeast8Characters": "8文字以上。", + "authenticationIsEnabledForThisDeployment": "この deployment では認証が有効。下で最初の account を作成する。admin になり、追加 user を招待できる。", + "checkingInvite": "招待を確認中...", + "continueWithProvider": "{{provider}}で続行", + "couldNotAcceptInvite": "この招待を承諾できなかった。", + "couldNotLoadInvite": "この招待を読み込めなかった。もう一度試す。", + "createAdminAccount": "admin account を作成", + "creatingAdminAccount": "admin account を作成中...", + "displayName": "表示名", + "email": "メール", + "invalidEmailOrPassword": "無効な email または password。", + "inviteLinkInvalidOrExpired": "この invite link は無効か期限切れ。admin に新しい link を頼む。", + "inviteLinkMissingToken": "この invite link には token がない。", + "joinThisKandevDeployment": "この Kandev deployment に参加", + "joining": "参加中...", + "orContinueWith": "または続行:", + "organizationUnavailable": "organization が現在使えない。Kandev administrator に連絡。", + "password": "パスワード", + "setUpKandev": "Kandev をセットアップ", + "setupFailed": "セットアップ失敗。もう一度試す。", + "setupNoLongerAvailable": "セットアップはもう使えない。すでに account がある。", + "signIn": "サインイン", + "signInToYourKandevAccount": "続行するには Kandev account にサインイン。", + "signingIn": "サインイン中...", + "somethingWentWrong": "問題発生。もう一度試す。", + "tooManyAttempts": "試行回数が多すぎる。少し待ってからもう一度。", + "youVeBeenInvitedAs": "{{role}}として招待された。" +} diff --git a/apps/web/src/locales/ja/automations.json b/apps/web/src/locales/ja/automations.json new file mode 100644 index 0000000000..4a240b9125 --- /dev/null +++ b/apps/web/src/locales/ja/automations.json @@ -0,0 +1,301 @@ +{ + "aboutSchedulePolling": "スケジュール polling について", + "addCondition": "条件を追加", + "addFilter": "フィルターを追加", + "addRepository": "リポジトリを追加", + "agentProfileLabel": "エージェント プロファイル", + "agentProfilePlaceholder": "エージェントを選択", + "allRuns": "すべての実行", + "alreadyAdded": "追加済み", + "anyAutomation": "任意の自動化", + "atMinute": "分で", + "authorsLabel": "著者(カンマ区切り)", + "automation": "自動化", + "automationCreated": "自動化を作成した", + "automations": "自動化", + "availablePlaceholders": "使用可能なプレースホルダー", + "availablePlaceholdersColon": "使用可能なプレースホルダー:", + "baseBranchesLabel": "ベースブランチ(カンマ区切り)", + "boardMoveNoticeBody": "ここにある自動化は、実行時にカンバン上にカードを作成していた。今も実行されるが、レポートは自動化側にある。開いて何が見つかったか読む。すでにボード上のカードは影響なし。", + "boardMoveNoticeDismiss": "了解", + "boardMoveNoticeTitle": "自動化の実行はもうボードに表示されない", + "branchPatternsLabel": "ブランチパターン(カンマ区切り、glob対応)", + "checkNamesLabel": "チェック名(カンマ区切り、任意)", + "ciConclusionCancelled": "キャンセル", + "ciConclusionFailure": "失敗", + "ciConclusionSuccess": "成功", + "ciConclusionsLabel": "結果", + "clearFilters": "フィルターをクリア", + "columnEnabled": "有効", + "columnLastTriggered": "最終実行", + "columnName": "名前", + "columnTriggers": "トリガー", + "comingSoonSuffix": "(近日公開)", + "completeRequiredFields": "保存前に必須の自動化項目を入力して。", + "completed": "完了", + "contextBetweenRunsConcurrencyLock": "このオプションは同時に1件のアクティブ実行のみ対応。", + "contextBetweenRunsDescription": "各実行を新規開始するか、同じ会話とファイルを続けるか選んで。", + "contextBetweenRunsNewTask": "各実行ごとに新しいタスクを開始", + "contextBetweenRunsNewTaskDescription": "各実行は別の会話とファイルで始まる。このタスクはカンバンやサイドバーに表示されない。独立ジョブと並列実行に使う。", + "contextBetweenRunsNewTaskNormalDescription": "各実行は別の会話とファイルで始まる。このタスクはカンバンとサイドバーに表示される。独立ジョブと並列実行に使う。", + "contextBetweenRunsReuseThread": "前のセッションを続ける", + "contextBetweenRunsReuseThreadDescription": "実行は同じ会話とファイルを続ける。なのでエージェントは前のコンテキストと変更を保持する。実行は1件ずつ動く。", + "contextBetweenRunsTitle": "実行間のコンテキスト", + "configurationLabel": "設定", + "couldNotLoadWorkflows": "ワークフローを読み込めませんでした", + "couldNotRefreshRuns": "実行履歴を更新できませんでした。ローカルキャッシュから復元しました", + "couldNotTrigger": "自動化を起動できませんでした", + "createAnAutomation": "自動化を作成", + "cronEveryDay": "毎日", + "cronEveryHour": "毎時", + "cronEveryWeek": "毎週", + "cronExpressionLabel": "Cron式", + "cronHelp": "標準の5フィールドcron、またはショートカット ({{shortcuts}})", + "delete": "削除", + "deleteAutomationTitle": "自動化を削除しますか?", + "deleteAutomationDescription": "{{name}} を完全に削除します。この操作は元に戻せません。", + "deleteAll": "すべて削除", + "deleteAllRuns": "すべての実行を削除", + "deleteAllRunsDescription": "この自動化のすべての実行レコード, まだ読み込まれていないものも含めて, および関連するタスクを完全に削除します。元に戻せません。", + "deleteAllRunsScoped": "{{status}} の実行をすべて削除", + "deleteAllRunsScopedDescription": "このビューに表示されている {{status}} の実行と関連するタスクを完全に削除します。元に戻せません。", + "deleteAllRunsScopedTitle": "{{status}} の実行をすべて削除しますか?", + "deleteAllRunsTitle": "すべての実行を削除しますか?", + "deleteRun": "実行を削除", + "details": "詳細", + "done": "完了", + "emptyListBody": "自動化はスケジュールまたはWebhookで実行され、見つけた内容を書き戻します。作成すると、レポートはここに表示されます。", + "emptyListTitle": "このワークスペースにはまだ自動化がありません", + "emptyRunsTitle": "まだどの自動化からも報告がありません", + "enabledLabel": "有効", + "eventsLabel": "イベント", + "excludeDraftPrs": "下書きPRを除外", + "executorProfileLabel": "実行プロファイル", + "executorProfilePlaceholder": "実行者を選択", + "exportFailed": "自動化をエクスポートできませんでした", + "exportZip": "エクスポート", + "failedToDeleteAutomation": "自動化の削除に失敗しました", + "failedToDeleteRun": "実行の削除に失敗しました", + "failedToDeleteRuns": "実行の削除に失敗しました", + "failedToLoadWebhookSecret": "Webhookシークレットの読み込みに失敗しました: {{error}}", + "failedToSaveAutomation": "自動化の保存に失敗しました: {{error}}", + "failedToStopRun": "この実行を停止できませんでした: {{error}}", + "hasNotRunYet": "この自動化はまだ実行されていません。", + "hideRunDetail": "実行詳細を隠す", + "instructionsLabel": "指示", + "interpretedAsUtcSetTimezone": "UTCとして解釈済み。タイムゾーン設定して", + "lastRan": "最後の実行 {{when}}", + "listDescription": "エージェントタスクを自動で起動するルール作成。", + "loading": "読み込み中...", + "loadingActivity": "アクティビティ読み込み中…", + "loadingAutomations": "自動化読み込み中...", + "loadingRuns": "実行読み込み中…", + "maxConcurrentRuns": "最大同時実行数", + "nameHelp": "保存有効にするには、自動化名入力して", + "nameLabel": "名前", + "namePlaceholder": "自動化名", + "neverTriggered": "なし", + "newAutomation": "新規自動化", + "nextRun": "次回実行", + "noAutomationsYet": "まだ自動化なし", + "noConversationForRun": "この実行、読む会話なし。", + "noRunsMatchFilters": "このフィルターに一致する実行なし。", + "noRunsYet": "まだ実行なし", + "noSchedule": "スケジュールなし。この自動化、自力では実行されない。", + "noStep": "ステップなし", + "noTimezoneFound": "タイムゾーン見つからず。", + "noTriggers": "なし", + "noWorkflow": "ワークフローなし", + "nothingHasRunYet": "まだ何も実行なし。", + "openAutomations": "自動化を開く", + "orUseWebhookInstead": "代わりに webhook 使用", + "outcome": "結果", + "pickAWorkflowFirst": "先にワークフロー選択", + "prMergedDeadConfigWarning": "リポジトリ未選択。このトリガー発火しない。'All repositories'有効化するか、少なくとも1つリポジトリ追加して。", + "prEventOpened": "オープン", + "prEventOpenedTooltip": "新しいオープンPR検出時に1回だけ発火。各PR番号は重複排除される。同じPRは再トリガーされない。", + "prTriggerRepositoryHelp": "PRトリガー、常にPR自身のリポジトリ使う。", + "pushTriggerHelp": "コードが一致ブランチにプッシュされたとき発火", + "recentRuns": "最近の実行", + "recentRuns_one": "最近の実行 ({{count}})", + "recentRuns_other": "最近の実行 ({{count}})", + "refresh": "更新", + "removeFilter": "フィルターを削除", + "removeRepository": "リポジトリを削除", + "replyToThisRun": "この実行に返信…", + "repositoryLabel": "リポジトリ", + "repositoryNone": "なし。リポジトリなし", + "repositoryModeTitle": "リポジトリアクセス", + "repositoryModeDescription": "1つ以上のリポジトリとベースブランチの組を追加するか、リポジトリなしで実行。", + "repositoryModeNoneDescription": "タスク専用の一時ワークスペースで、リポジトリファイルなしで実行。", + "repositoryPlaceholderAuto": "自動", + "required": "必須", + "resizeRuns": "実行をサイズ変更", + "run": "実行", + "runAll": "すべて", + "runArchived": "アーカイブ済み", + "runCancelled": "キャンセル済み", + "runFailed": "失敗", + "runNow": "今すぐ実行", + "runRunning": "実行中", + "runSkipped": "スキップ済み", + "runReasonDedupUnresolved": "重複チェックで、この配信の値を解決できなかった", + "runReasonRepositoryContinuationReused": "継続したタスクからリポジトリを継承", + "runReasonRepositoryLoadFailed": "リポジトリ選択を確認できなかった", + "runReasonRepositoryNoneConfigured": "この自動化にリポジトリ未設定", + "runReasonSelectorAmbiguous": "リポジトリセレクタが複数のリポジトリに一致: {{value}}", + "runReasonSelectorNoMatch": "リポジトリセレクタが設定済みリポジトリに一致しない: {{value}}", + "runReasonSelectorUnresolved": "リポジトリセレクタがこの配信の値を解決できなかった", + "runStatusArchived": "アーカイブ済み", + "runStatusCancelled": "キャンセル済み", + "runStatusFailed": "失敗", + "runStatusRunning": "実行中", + "runStatusSkipped": "スキップ済み", + "runStatusSucceeded": "成功", + "runStatusTriggered": "トリガー済み", + "runSucceeded": "成功", + "runTriggered": "トリガー済み", + "running": "実行中", + "runs": "実行", + "runsColumnStatus": "ステータス", + "runsColumnTime": "時間", + "runsColumnTrigger": "トリガー", + "runsCount_one": "{{count}}件の実行", + "runsCount_other": "{{count}} 回実行", + "runsTitle": "すべての実行", + "samplePayloadHelp": "利用可能なプレースホルダを見つけるため、例の JSON 本文を貼り付けてください。", + "samplePayloadLabel": "サンプルペイロード(任意)", + "scheduleLabel": "スケジュール", + "schedulePollingHelp": "バックグラウンド処理が 30 秒ごとに確認。スケジュールはバックエンド再起動後も保持。", + "schedulerNote": "予約自動化は kandev 実行中のみ動作。閉じている間に発火を逃した場合は、次のティックで 1 回だけ実行。逃した各発火ごとに 1 回ではない。", + "searchConditions": "条件を検索...", + "searchTimezones": "タイムゾーンを検索…", + "selectRepositoryPlaceholder": "リポジトリを選択", + "selectStepOptional": "ステップを選択(任意)", + "selectWorkflowOptional": "ワークフローを選択(任意)", + "setUpAnAutomation": "自動化を設定", + "showLess": "表示を減らす", + "showMore": "もっと表示", + "showRunDetail": "実行詳細", + "skipped": "スキップ済み。{{reason}}", + "skippedAlreadyRunning": "スキップ済み。すでに実行中", + "starting": "開始中…", + "stopCurrentRun": "現在の実行を停止", + "stopping": "停止中…", + "stateIdle": "待機中", + "statePaused": "一時停止", + "stateRunning": "実行中", + "summaryCiCompleted": "CI 完了", + "summaryPrMerged": "PR マージ済み", + "summaryCustomSchedule": "カスタムスケジュール", + "summaryPrEvents": "PR: {{events}}", + "summaryPullRequestEvent": "プルリクエストイベント", + "summaryPushToBranch": "ブランチへプッシュ", + "summaryWebhook": "Webhook", + "switchToScheduled": "スケジュール実行に切り替え", + "taskTitleHelp": "空欄なら既定を使用。プレースホルダ対応。", + "taskTitleLabel": "タスクタイトル", + "taskTitlePlaceholder": "[自動] 自動化名", + "taskModeTitle": "実行先", + "taskModeDescription": "各発火を自動化履歴に残すか、通常タスクを作るか選択。", + "taskModeAutomationRun": "自動化履歴のみで実行", + "taskModeAutomationRunDescription": "各実行は個別のタスクと会話を使う。これらのタスクは Kanban やサイドバーに表示されない。", + "taskModeNormalTask": "通常タスクを作成", + "taskModeNormalTaskDescription": "各実行で、選択したワークフローに通常タスクを作成。Kanban とサイドバーに表示。", + "workflowRequiredLabel": "ワークフロー (必須)", + "selectWorkflowRequired": "ワークフローを選択", + "normalTaskWorkflowHelp": "ワークフローを選ぶと、このタスクが Kanban とサイドバーに表示。", + "thenDescription": "この自動化がトリガーされるたび、新しいタスクを作成", + "thenTitle": "次へ", + "triggerCategoryGithub": "GitHub", + "triggerCategoryWebhook": "Webhook", + "triggerInfoGithubPr": "スケジュールごとに GitHub API をポーリングし、フィルターに合う PR を探す。", + "triggerInfoGithubPrMerged": "Kandev の PR ポーラーが、リンクされた PR のマージを検知したときに発火。検知は最大 1 分遅れることあり。", + "triggerInfoNotImplemented": "まだ未実装。", + "triggerInfoScheduled": "30 秒ごとに確認。cron スケジュール一致で発火。", + "triggerInfoWebhook": "Webhook URL に POST リクエストが届くと即発火。", + "triggerLabelGithubCi": "GitHub CI", + "triggerLabelGithubPr": "GitHub PR", + "triggerLabelGithubPrMerged": "GitHub PR マージ済み", + "triggerLabelGithubPush": "GitHub プッシュ", + "triggerLabelScheduled": "スケジュール済み", + "triggerLabelWebhook": "Webhook", + "triggerManually": "手動でトリガー", + "triggered": "トリガー済み", + "tryAgain": "もう一度試す", + "unknownTriggerType": "不明なトリガータイプ", + "upNext": "次", + "watchForLabel": "監視対象", + "webhookCreatedDescription": "外部システムを設定し、この URL に POST。シークレットは <0>{{header}} ヘッダーに入れる。この自動化に戻れば、いつでも値を再コピーできる。", + "webhookDedupKeyHelp": "payload 内のドットパス。例: issue.id。解決した値が前回の発火と重なる配信は重複として記録され、新しいタスクは作成されない。空欄なら配信ごとに発火。", + "webhookDedupKeyLabel": "重複排除キー", + "webhookFilterOpContains": "含む", + "webhookFilterOpEq": "等しい", + "webhookFilterOpExists": "存在する", + "webhookFilterOpIn": "リスト内", + "webhookFilterOpNe": "等しくない", + "webhookFilterOpNotExists": "存在しない", + "webhookFilterOpNotIn": "リスト外", + "webhookFiltersHelp": "発火には、すべてのフィルター通過が必要。拒否された配信は成功を返し、タスクは作らず、スキップ済みとして記録。", + "webhookFiltersLabel": "フィルター", + "webhookRepositorySelectorHelp": "payload 内のドットパス。解決した値を、設定済みリポジトリ名と完全一致で照合。空欄なら今までどおり自動化の設定リポジトリを使う。", + "webhookRepositorySelectorLabel": "リポジトリセレクタ", + "webhookSecretLabel": "Webhook シークレット", + "webhookSecretLoading": "読み込み中…", + "webhookUrlAfterSave": "自動化を保存すると、Webhook URL を使える。", + "webhookUrlLabel": "Webhook URL", + "webhookUsageHelp": "JSON 本文付きの POST リクエスト送る。secret は <0>{{header}} ヘッダーに入れる。ペイロードのフィールドは <1>{{placeholder}} で参照する。例: <2>{{example}}。", + "whenDescription": "この自動化が実行される条件", + "whenTitle": "いつ", + "workflowLabel": "ワークフロー", + "workflowLoadError": "ワークフローを読み込めなかった。", + "scheduleNone": "スケジュールなし", + "scheduleIntervalEvery5Minutes": "5分ごと", + "scheduleIntervalEvery15Minutes": "15分ごと", + "scheduleIntervalEvery30Minutes": "30分ごと", + "scheduleIntervalEvery6Hours": "6時間ごと", + "scheduleEveryHourAt": "毎時 :{{minute}}", + "scheduleEveryDayAt": "毎日 {{time}} {{zone}}", + "scheduleEveryWeekdayAt": "毎 {{weekday}} {{time}} {{zone}}", + "frequencyEvery5Minutes": "5分ごと", + "frequencyEvery15Minutes": "15分ごと", + "frequencyEvery30Minutes": "30分ごと", + "frequencyEveryHour": "1時間ごと", + "frequencyEvery6Hours": "6時間ごと", + "frequencyEveryDay": "毎日", + "frequencyEveryWeek": "毎週", + "frequencyCustom": "カスタムスケジュール", + "scheduleUnparseable": "そのスケジュールは読めない。0 9 * * 1-5 みたいな 5 フィールド cron 試す。", + "scheduleAtSeparator": "時刻", + "failedToLoadAutomationActivity": "自動化アクティビティの読み込み失敗", + "failedToLoadAutomations": "自動化の読み込み失敗", + "failedToLoadRuns": "実行の読み込み失敗", + "failedToLoadThisAutomation": "この自動化の読み込み失敗", + "nextFiringConcurrencyPaused": "一時停止中。まだ実行中のものある (同時最大 {{max}} 件)", + "nextFiringNoSchedule": "スケジュールなし。トリガーしたときだけ実行", + "nextFiringScheduleOff": "スケジュールトリガーはオフ", + "nextFiringSwitchedOff": "オフ。発火しない", + "runNoReportRecorded": "レポート未記録。", + "runStillRunningNoReport": "まだ実行中。レポートまだなし。", + "pluginWebhookHelp": "条件保存してから webhook 設定する。フィルター変えたら再設定必要。ローテーションで旧署名 secret は即無効。", + "pluginWebhookUnavailable": "このプラグイン条件は使えない。プラグインとワークスペース接続確認。", + "pluginWebhookChoose": "値を選択", + "pluginWebhookError": "Webhook 操作失敗。保存済み条件とプラグイン接続確認。", + "pluginWebhookConfigure": "Webhook を設定", + "pluginWebhookReveal": "シークレットを表示", + "pluginWebhookRotate": "シークレットをローテーション", + "pluginWebhookRevoke": "Webhook を取り消す", + "pluginWebhookURL": "Webhook の URL", + "pluginWebhookCopy": "URL をコピー", + "pluginWebhookSecret": "署名用シークレット", + "pluginWebhookHide": "シークレットを非表示", + "pluginWebhookDeliveries": "配信を更新", + "pluginWebhookState_pending": "保留中", + "pluginWebhookState_dispatch": "送信待ち", + "pluginWebhookState_processing": "処理中", + "pluginWebhookState_admitted": "承認済み", + "pluginWebhookState_failed": "失敗", + "pluginWebhookState_cancelled": "キャンセル済み", + "pluginWebhookState_skipped": "スキップ済み", + "pluginWebhookState_ignored": "無視済み" +} diff --git a/apps/web/src/locales/ja/azuredevops.json b/apps/web/src/locales/ja/azuredevops.json new file mode 100644 index 0000000000..c8f3b3caae --- /dev/null +++ b/apps/web/src/locales/ja/azuredevops.json @@ -0,0 +1,293 @@ +{ + "actionHintAria": "{{kind}} アクションヒント {{index}}", + "actionLabelAria": "{{kind}} アクションラベル {{index}}", + "addPrAction": "PR アクションを追加", + "addPrQuery": "PR クエリを追加", + "addPrWatch": "PR ウォッチを追加", + "addWorkItemAction": "作業項目アクションを追加", + "addWorkItemQuery": "作業項目クエリを追加", + "addWorkItemWatch": "作業項目ウォッチを追加", + "advanced": "詳細設定", + "agentProfileId": "エージェントプロファイル ID", + "assignment": "割り当て", + "assignToMe": "自分に割り当て", + "azureDevopsFilters": "Azure DevOps フィルター", + "azureDevopsReviewAndPolicyState": "Azure DevOps レビューとポリシーの状態", + "azureDevopsWorkItemDetails": "Azure DevOps 作業項目の詳細", + "azureProjectId": "Azure プロジェクト ID", + "azureRepositoryIdOptional": "Azure リポジトリ ID(任意)", + "baseBranch": "ベースブランチ", + "board": "ボード", + "boardColumn": "ボード列", + "boardColumns": "ボード列", + "boardsAndRepos": "{{organizationUrl}} · ボードとリポジトリ", + "branchPolicies": "ブランチポリシー", + "checkedAt": "{{at}} に確認済み", + "cleanupAlways": "常に", + "cleanupAuto": "自動", + "cleanupNever": "なし", + "cleanupPolicy": "クリーンアップポリシー", + "cleanupPolicyAlways": "常に", + "cleanupPolicyAuto": "自動", + "cleanupPolicyNever": "なし", + "closeWatchEditor": "ウォッチエディターを閉じる", + "closeWorkItemDetails": "作業項目の詳細を閉じる", + "configurationRemoved": "Azure DevOps 設定が削除されました", + "configurationSaved": "Azure DevOps 設定が保存されました", + "connected": "接続済み", + "connectedAs": "{{name}} として接続", + "connectionFailed": "接続に失敗しました", + "couldNotLoadQuickActions": "既存のクイックアクションを読み込めませんでした:{{error}}", + "couldNotSaveView": "このビューを保存できませんでした。もう一度お試しください。", + "createPersonalAccessToken": "個人用アクセストークンを作成", + "createWatch": "ウォッチを作成", + "creator": "作成者", + "creatorId": "作成者 ID", + "defaultProject": "既定のプロジェクト", + "defaultQueries": "既定のクエリ", + "defaultQueriesDescription": "{{path}} に表示されるプルリクエストと作業項目用のクエリショートカットです。", + "defaultQueriesSaved": "Azure DevOps の既定クエリを保存しました", + "defaultQueryInvalid": "各既定クエリにはラベルと有効なフィルターが必要です。", + "delete": "削除", + "deleteWatchConfirm": "このウォッチを削除しますか?", + "description": "説明", + "descriptionFallback": "(説明なし)", + "disable": "無効化", + "disabled": "無効", + "discussion": "ディスカッション", + "done": "完了", + "draft": "下書き", + "edit": "編集", + "editPrompt": "プロンプトを編集", + "editWatchTitle": "{{kind}} ウォッチを編集", + "eGPlatformTriage": "例:プラットフォームトリアージ", + "enable": "有効化", + "enabled": "有効", + "enterValidOrganizationUrl": "有効な組織 URL を入力してトークン設定を開いてください。", + "executorProfileId": "実行プロファイル ID", + "failedToLinkPullRequest": "Azure DevOps プルリクエストのリンクに失敗しました。", + "failedToLinkWorkItem": "Azure DevOps 作業項目のリンクに失敗しました。", + "failedToLinkWorkItemNoProject": "Azure DevOps 作業項目のリンクに失敗しました:プロジェクトがありません。", + "failedToLoadConfig": "Azure DevOps 設定の読み込みに失敗しました:{{error}}", + "failedToLoadQuickActions": "クイックアクションの読み込みに失敗しました。", + "failedToSaveDefaultQueries": "既定クエリの保存に失敗しました", + "failedToSaveQuickActions": "クイックアクションの保存に失敗しました", + "fallbackAuthor": "Azure DevOps", + "fallbackUnassigned": "未割り当て", + "fallbackUnknown": "不明", + "fallbackWorkItem": "作業項目", + "feedback": "フィードバック", + "fieldArea": "領域", + "fieldAssignee": "担当者", + "fieldState": "状態", + "fieldType": "種類", + "group": "グループ", + "groupCreated": "作成済み", + "groupInbox": "受信トレイ", + "hidePrompt": "プロンプトを隠す", + "hint": "ヒント", + "hintOptional": "ヒント(任意)", + "howToCreatePat": "個人用アクセストークンの作成方法", + "icon": "アイコン", + "identityIdPlaceholder": "{{token}} または ID", + "identityPlaceholder": "{{token}} または ID", + "inProgress": "進行中", + "integrationDescription": "このワークスペース用の Azure DevOps Services 組織、プロジェクト、PAT です。", + "integrationTitle": "Azure DevOps 統合", + "kandevRepositoryId": "Kandev リポジトリ ID", + "label": "ラベル", + "linkedItemsCount_one": "{{count}} 件のリンク済み項目", + "linkedItemsCount_other": "{{count}} 件のリンク済み項目", + "linkedKandevTasks": "リンク済みの Kandev タスク", + "loading": "読み込み中…", + "loading2": "読み込み中…", + "loadingBoard": "ボードを読み込み中…", + "loadingFeedback": "フィードバックを読み込み中…", + "loadingLinkedTasks": "リンク済みタスクを読み込み中…", + "loadingProjects": "プロジェクトを読み込み中…", + "loadingResults": "結果を読み込み中…", + "loadingWatchers": "ウォッチャーを読み込み中…", + "loadingWorkItem": "作業項目を読み込み中…", + "loadOlderDiscussion": "過去のディスカッションを読み込む", + "maxInflightTasks": "同時実行タスクの最大数(0 = 無制限)", + "move": "移動", + "moveToColumn": "列に移動", + "name": "名前", + "newMatches_one": "{{count}} 件の新しい一致。", + "newMatches_other": "{{count}} 件の新しい一致。", + "newWatchTitle": "新しい {{kind}} ウォッチ", + "nextBoardColumn": "次のボード列", + "nextPullRequestPage": "次のプルリクエストページ", + "noComments": "コメントはありません。", + "noDescription": "説明はありません。", + "noDiscussionYet": "ディスカッションはまだありません。", + "noLinkedTasks": "リンク済みタスクはありません。", + "noMatchingResults": "一致する結果はありません。", + "none": "なし", + "noPolicyEvaluations": "ポリシー評価はありません。", + "noPullRequestWatches": "プルリクエストウォッチはまだありません。", + "noReviewers": "レビュアーはいません。", + "notCheckedYet": "未確認", + "notConnectedNotice": "このワークスペースでは Azure DevOps が接続されていません。<2>Azure DevOps を設定", + "noWorkItemWatches": "作業項目ウォッチはまだありません。", + "openAzureDevopsFilters": "Azure DevOps フィルターを開く", + "openPullRequestInAzureDevops": "Azure DevOps でプルリクエスト {{id}} を開く", + "openWorkItemInAzureDevops": "Azure DevOps で作業項目 {{id}} を開く", + "openWorkItemInAzureDevops2": "Azure DevOps で作業項目を開く", + "optional": "任意", + "organizationUrl": "組織 URL", + "pastePat": "PAT を貼り付け", + "patHelpTitle": "ボード編集用の個人用アクセストークンを作成", + "patStepCheckScopes": "<1>{{workItems}} で Read & write を選択し、<4>{{code}} で Read を選択してください。その他すべてのスコープは選択しないでください。", + "patStepChooseScopes": "この組織、短い有効期限、Custom defined スコープを選択してください。", + "patStepCreateAndPaste": "トークンを作成してコピーし、このフィールドに貼り付けます。", + "patStepOpenTokenSettings": "トークン設定を開き、New Token を選択します。", + "pending": "保留中", + "personalAccessToken": "個人用アクセストークン", + "placeholderTitleDescription": "Azure DevOps の作業項目またはプルリクエストのタイトル", + "placeholderUrlDescription": "Azure DevOps の作業項目またはプルリクエストの URL", + "placeholderDescriptionBody": "説明本文", + "placeholderIdDescription": "作業項目またはプルリクエストの ID", + "placeholderProjectDescription": "プロジェクト名", + "placeholderSourceBranchDescription": "ソースブランチ", + "placeholderStateDescription": "現在の状態", + "placeholderTargetBranchDescription": "ターゲットブランチ", + "placeholderTypeDescription": "作業項目の種類", + "planningAndEffort": "計画と工数", + "policiesLabelled": "ポリシー:{{state}}", + "pollIntervalSeconds": "ポーリング間隔(秒)", + "previousBoardColumn": "前のボード列", + "previousPullRequestPage": "前のプルリクエストページ", + "project": "プロジェクト", + "prompt": "プロンプト", + "promptPlaceholdersHint": "{{open}} と入力すると利用可能なプレースホルダーが表示されます。<4>{{url}} と <6>{{title}} はアクション実行時に置き換えられます。", + "pullRequestAny": "すべて", + "pullRequestFeedback": "プルリクエストのフィードバック", + "pullRequestFilter": "プルリクエストフィルター", + "pullRequestFilters": "プルリクエストフィルター", + "pullRequestKindLower": "プルリクエスト", + "pullRequestKindNoun": "プルリクエスト", + "pullRequestKindTitle": "プルリクエスト", + "pullRequests": "プルリクエスト", + "pullRequestsTab": "プルリクエスト", + "pullRequestSubtitle": "{{repository}} の PR {{id}}", + "pullRequestWatches": "プルリクエストウォッチ", + "pullRequestWatchesDescription": "一致する Azure DevOps プルリクエストからタスクを自動的に作成します。", + "pullRequestWatchFieldsRequired": "プロジェクト、リポジトリ、ワークフロー、ステップ、エージェント、実行プロファイルが必要です。", + "queryCreatorAria": "{{kind}} クエリ作成者 {{index}}", + "queryGroupAria": "{{kind}} クエリグループ {{index}}", + "queryLabelAria": "{{kind}} クエリラベル {{index}}", + "queryReviewerAria": "{{kind}} クエリレビュアー {{index}}", + "queryStatusAria": "{{kind}} クエリステータス {{index}}", + "queryTopAria": "{{kind}} クエリ上位 {{index}}", + "queryWiqlAria": "{{kind}} クエリ WIQL {{index}}", + "quickActionInvalid": "各クイックアクションにはラベルとプロンプトが必要です。", + "quickActions": "クイックアクション", + "quickActionsDescription": "プルリクエストまたは作業項目からタスクを開始するときに {{path}} に表示されるプロンプトです。", + "quickActionsSaved": "Azure DevOps のクイックアクションを保存しました", + "remove": "削除", + "removeActionAria": "{{kind}} アクション {{index}} を削除", + "removeConfigurationConfirm": "Azure DevOps 設定を削除しますか?", + "removeFailed": "削除に失敗しました:{{error}}", + "removeQueryAria": "{{kind}} クエリ {{index}} を削除", + "repository": "リポジトリ", + "resetWatchConfirm_one": "この {{policy}} ウォッチをリセットして {{count}} 件のタスクを削除しますか?", + "resetWatchConfirm_other": "この {{policy}} ウォッチをリセットして {{count}} 件のタスクを削除しますか?", + "resultLimit": "結果の上限", + "resultsCount_one": "{{count}} 件の結果", + "resultsCount_other": "{{count}} 件の結果", + "retry": "再試行", + "reviewer": "レビュアー", + "reviewerId": "レビュアー ID", + "reviewers": "レビュアー", + "reviewLabelled": "レビュー:{{state}}", + "runNow": "今すぐ実行", + "save": "保存", + "saveAzureDevopsView": "Azure DevOps ビューを保存", + "savedCredential": "保存済みの資格情報", + "saveFailed": "保存に失敗しました:{{error}}", + "saveViewDescription": "このワークスペースの現在の {{kind}} を保存します。", + "saving": "保存中…", + "savingEllipsis": "保存中…", + "selectAProjectToViewIts": "ボードを表示するプロジェクトを選択してください。", + "selectProject": "プロジェクトを選択", + "selectRepository": "リポジトリを選択", + "startTask": "タスクを開始", + "status": "ステータス", + "statusAbandoned": "破棄済み", + "statusActive": "アクティブ", + "statusAll": "すべて", + "statusAny": "任意のステータス", + "statusCompleted": "完了", + "statusLine": "ステータス:{{status}}", + "task": "タスク", + "taskActions": "タスクアクション", + "taskActionsForPullRequest": "プルリクエスト {{id}} のタスクアクション", + "taskActionsForWorkItem": "作業項目 {{id}} のタスクアクション", + "team": "チーム", + "testConnection": "接続をテスト", + "testing": "テスト中…", + "top": "上位", + "unassign": "割り当て解除", + "unassigned": "未割り当て", + "untitledWorkItem": "タイトルなしの作業項目", + "update": "更新", + "updateWatch": "ウォッチを更新", + "updating": "更新中…", + "voteApproved": "承認済み", + "voteApprovedWithSuggestions": "提案付きで承認", + "voteNone": "投票なし", + "voteRejected": "却下", + "voteWaitingForAuthor": "作成者を待機中", + "watchDeleted": "ウォッチを削除しました。", + "watchDisabled": "ウォッチを無効にしました。", + "watchEnabled": "ウォッチを有効にしました。", + "watchReset": "ウォッチをリセットしました。", + "watchStatusAbandoned": "破棄済み", + "watchStatusActive": "アクティブ", + "watchStatusCompleted": "完了", + "watchSummary_one": "{{projectId}} · {{count}} 秒ごと · クリーンアップ {{policy}}", + "watchSummary_other": "{{projectId}} · {{count}} 秒ごと · クリーンアップ {{policy}}", + "workflowId": "ワークフロー ID", + "workflowStepId": "ワークフローステップ ID", + "workItemKindLower": "作業項目", + "workItemKindNoun": "作業項目", + "workItemKindTitle": "作業項目", + "workItemQuery": "作業項目クエリ", + "workItemQuery2": "作業項目クエリ", + "workItems": "作業項目", + "workItemsTab": "作業項目", + "workItemUnavailable": "作業項目を利用できません。", + "workItemWatches": "作業項目ウォッチ", + "workItemWatchesDescription": "一致する Azure DevOps 作業項目クエリからタスクを自動的に作成します。", + "workItemWatchFieldsRequired": "プロジェクト、WIQL、リポジトリ、ワークフロー、ステップ、エージェント、実行プロファイルが必要です。", + "prStatusAbandoned": "破棄済み", + "prStatusActive": "アクティブ", + "prStatusChangesRequested": "変更が要求されました", + "prStatusCompleted": "完了", + "prStatusDraft": "下書き", + "prStatusPolicyFailed": "ポリシー失敗", + "prStatusPolicyRunning": "ポリシー実行中", + "prStatusReady": "準備完了", + "prStatusWaitingForReview": "レビュー待ち", + "pullRequestStatusAria": "Azure PR {{id}}:{{status}}{{suffix}}", + "defaultActionAddressFeedback": "フィードバックに対応", + "defaultActionAddressFeedbackHint": "レビューコメントを反映", + "defaultActionFixCi": "CI を修正", + "defaultActionFixCiHint": "失敗しているチェックを診断", + "defaultActionImplement": "実装", + "defaultActionImplementHint": "実装して PR を開く", + "defaultActionInvestigate": "調査", + "defaultActionInvestigateHint": "根本原因を特定", + "defaultActionReproduce": "再現", + "defaultActionReproduceHint": "再現手順を記録", + "defaultActionReview": "レビュー", + "defaultActionReviewHint": "差分を確認して問題を指摘", + "defaultQueryActive": "アクティブ", + "defaultQueryAssignedToMe": "自分に割り当て", + "defaultQueryCompleted": "完了", + "defaultQueryCreatedByMe": "自分が作成", + "defaultQueryOpen": "オープン", + "defaultQueryRecentlyUpdated": "最近更新されたもの", + "defaultQueryReviewRequested": "レビュー依頼中" +} diff --git a/apps/web/src/locales/ja/canvases.json b/apps/web/src/locales/ja/canvases.json new file mode 100644 index 0000000000..9f7ae6d7dd --- /dev/null +++ b/apps/web/src/locales/ja/canvases.json @@ -0,0 +1,151 @@ +{ + "canvas": "キャンバス", + "canvases": "キャンバス", + "openWorkspaceSettings": "キャンバス設定を開く", + "setUpCanvas": "キャンバスをセットアップ", + "createCanvas": "キャンバスを作成", + "createCanvasTaskTitle": "キャンバスを作成", + "createCanvasTaskPrompt": "既存のタスクを一覧表示するコーディネータービュー付きの新しい Kandev キャンバスを作成します。", + "loadingCanvas": "キャンバスを読み込み中", + "loadingCanvasDescription": "キャンバスのメタデータを読み込み中です。", + "pendingFirstRelease": "最初のリリースを待機中", + "pendingFirstReleaseDescription": "このキャンバスには公開済みのリリースがまだありません。", + "pendingPermission": "権限のレビューが必要です", + "pendingPermissionDescription": "アクティブなリリースは、開く前に権限の承認が必要です。", + "loadingRuntime": "キャンバスランタイムを読み込み中", + "loadingRuntimeDescription": "公開済みのキャンバスアプリケーションを準備中です。", + "ready": "準備完了", + "readyDescription": "キャンバスアプリケーションの準備ができました。", + "offline": "キャンバスはオフラインです", + "offlineDescription": "キャンバスランタイムに接続できませんでした。接続を確認して再度お試しください。", + "invalidRelease": "無効なリリース", + "invalidReleaseDescription": "アクティブなリリースが検証に失敗しました。リリースを確認するか、キャンバスを編集してください。", + "unavailable": "キャンバスを利用できません", + "unavailableDescription": "アクティブなキャンバスリリースを利用できません。", + "archived": "キャンバスはアーカイブ済みです", + "archivedDescription": "再度開くには、ワークスペース設定からこのキャンバスを復元してください。", + "loadFailed": "キャンバスの読み込みに失敗しました。", + "actionFailed": "キャンバスアクションに失敗しました。", + "canvasActions": "キャンバスアクション", + "editCanvas": "キャンバスを編集", + "editCanvasHelp": "キャンバス作成タスクを開きます。", + "promoteCanvas": "キャンバスを昇格", + "promoteCanvasHelp": "このタスクキャンバスをワークスペースのナビゲーションで利用できるようにします。", + "promoteCanvasUnavailable": "有効なリリース後に昇格できます。", + "openInNewTab": "新しいタブで開く", + "openInNewTabHelp": "このキャンバスを専用のブラウザータブで開きます。", + "promoteCanvasDescription": "{{title}} をワークスペーススコープに移動する前に権限を確認してください。", + "loadingPermissions": "要求された権限を読み込み中", + "promotionScopeChange": "昇格すると、このキャンバスがワークスペースのナビゲーションで利用できるようになります。", + "noAdditionalPermissions": "追加の権限は要求されていません。", + "sharedState": "共有状態", + "promotingCanvas": "キャンバスを昇格中", + "confirmPromotion": "昇格を確認", + "releasesAndPermissions": "リリースと権限", + "releasesAndPermissionsHelp": "リリースを確認し、要求された権限を承認します。", + "releasesDescription": "このキャンバスの保留中の権限と保持されているリリースを確認します。", + "loadingReleases": "リリースを読み込み中", + "noReleases": "利用可能なリリースはありません。", + "approveRelease": "リリースを承認", + "rejectRelease": "リリースを却下", + "rollbackRelease": "リリースをロールバック", + "permissionDeclaration": "宣言済みの権限", + "missingPermissions": "まだ必要な権限", + "retry": "もう一度試す", + "refresh": "更新", + "statusActive": "アクティブ", + "statusArchived": "アーカイブ済み", + "statusPending": "保留中", + "statusDisabled": "無効", + "statusError": "エラー", + "workspaceCanvases": "ワークスペースのキャンバス", + "workspaceCanvasesDescription": "{{workspace}} で利用できるキャンバスを管理します。", + "loadingCanvases": "ワークスペースのキャンバスを読み込み中", + "noWorkspaceCanvases": "ワークスペースのキャンバスはまだありません。", + "activeCanvases": "アクティブなキャンバス", + "archivedCanvases": "アーカイブ済みのキャンバス", + "permissionsAndReleases": "権限とリリース", + "openCanvas": "キャンバスを開く", + "restoreCanvas": "復元", + "archiveCanvas": "アーカイブ", + "removeCanvas": "削除", + "removeCanvasDescription": "{{title}} とそのキャンバスリリースを削除しますか?この操作は元に戻せません。", + "runtimeTokenExpired": "ランタイムトークンの有効期限が切れました。もう一度お試しください。", + "promotionSourceScope": "ソーススコープ", + "promotionSourceActor": "ソースアクター", + "promotionSourceTask": "ソースタスク", + "promotionSourceSession": "ソースセッション", + "promotionTargetScope": "ターゲットスコープ", + "promotionPlacement": "ワークスペース内の配置", + "permissionReads": "API 読み取り", + "permissionWrites": "API 書き込み", + "permissionEvents": "イベント", + "permissionExternalOrigins": "外部オリジン", + "permissionExternalOrigin": "外部 HTTPS オリジン", + "permissionSharedState": "共有キャンバス状態の読み書き", + "permissionReadTasks": "タスクデータの読み取り", + "permissionReadWorkflows": "ワークフローデータの読み取り", + "permissionWriteTasks": "タスクデータの書き込み", + "permissionWriteMessages": "タスクメッセージの書き込み", + "permissionEventTaskUpdated": "タスク更新イベントの受信", + "permissionEventWorkflowUpdated": "ワークフロー更新イベントの受信", + "unsupportedPermission": "サポートされていない権限:{{value}}", + "selectRelease": "確認するリリースを選択", + "releaseOption": "{{date}}({{status}})", + "releaseDate": "作成日時", + "releaseStatus": "ステータス", + "newPermission": "新規", + "statusPrevious": "以前", + "unsupportedReleaseStatus": "サポートされていないリリースステータス:{{status}}", + "dateUnavailable": "日付を利用できません", + "sourceUnavailable": "ソースを利用できません", + "sourceActorTaskAgent": "タスクエージェント", + "sourceActorUser": "ユーザー", + "sourceActorSystem": "Kandev", + "sourceActorUnknown": "不明な作成者", + "archivedCanvasActionHelp": "このキャンバスはアーカイブ済みです。変更するにはワークスペース設定から復元してください。", + "disabledCanvasActionHelp": "このキャンバスは無効です。変更するには有効にしてください。", + "shareCanvas": "キャンバスを共有", + "shareCanvasDescription": "確認・共有用に検証済みのバンドルまたはソースアーカイブを準備します。", + "prepareDownloads": "ダウンロードを準備", + "prepareDownloadsDescription": "Kandev は選択したアクティブなリリースから制限付きアーカイブを作成します。共有にはスクリーンショットは含まれません。", + "downloadsReady": "ダウンロードの準備ができました", + "packageId": "パッケージ ID", + "packageVersion": "パッケージバージョン", + "distributionMetadata": "配布メタデータ", + "distributionMetadataHelp": "ダウンロードを準備する前にパッケージ情報を確認・入力してください。", + "displayName": "表示名", + "description": "説明", + "author": "作成者", + "license": "ライセンス", + "sourceMode": "ソースモード", + "sourceModeStatic": "静的アプリケーション", + "sourceModeProject": "プロジェクトソース", + "minKandevVersion": "最小 Kandev バージョン", + "repositoryUrl": "リポジトリ URL", + "fileInventory": "ファイル一覧", + "fileCount_one": "{{count}} ファイル", + "fileCount_other": "{{count}} ファイル", + "bundleSize": "バンドルサイズ", + "sourceSize": "ソースサイズ", + "downloadSize": "{{size}} バイト", + "downloadBundle": "バンドルをダウンロード", + "downloadSource": "ソースをダウンロード", + "privateContentReminder": "共有する前に、アーカイブ内に非公開のコンテンツがないか確認してください。", + "howToShare": "共有方法", + "shareStepDownload": "インストール用のバンドル、または確認用のソースアーカイブをダウンロードします。", + "shareStepRepository": "保守を始める準備ができたら、ソースをリポジトリに公開します。", + "shareStepRelease": "レビュー済みのリリースを作成し、パッケージダイジェストを記録します。", + "shareStepSend": "パッケージまたはレビュー済みのレジストリエントリを宛先に送信します。", + "sharing": "ダウンロードを準備中…", + "shareFailed": "キャンバスのダウンロードを準備できませんでした。", + "shareNoRelease": "このキャンバスには共有できる有効なアクティブリリースがありません。", + "registryExample": "レジストリエントリの例(任意)", + "copyRegistryExample": "レジストリの例をコピー", + "registryExampleCopied": "レジストリの例をコピーしました", + "examplePackageId": "my-canvas", + "exampleRepository": "your-org/my-canvas", + "examplePreviewUrl": "https://cdn.example.com/my-canvas-cover.webp", + "examplePreviewAlt": "キャンバス概要", + "yes": "はい" +} diff --git a/apps/web/src/locales/ja/chat.json b/apps/web/src/locales/ja/chat.json new file mode 100644 index 0000000000..d687ae3f8c --- /dev/null +++ b/apps/web/src/locales/ja/chat.json @@ -0,0 +1,156 @@ +{ + "aboutRepositoryContext": "リポジトリコンテキストについて", + "addedToChatContext": "{{name}} をチャットコンテキストに追加しました", + "addRepository": "リポジトリを追加", + "addToChatContext": "チャットコンテキストに追加", + "agentOptional": "エージェント(任意)", + "agentProfile": "エージェントプロファイル", + "agentProfileHelp": "この会話で使用するエージェントを選択します。", + "allConversationHistory": "すべての会話履歴", + "allWorkspaceRepositoriesAdded": "ワークスペースの全リポジトリはすでに追加されています", + "attachmentDeliveryFile": "ファイル", + "attachmentDeliveryMode": "添付ファイルの配信モード", + "attachmentDeliveryPathDescription": "エージェントがファイルを読み取り・編集できるように、ワークスペースにアップロードします。", + "attachmentDeliveryPrompt": "プロンプト", + "attachmentDeliveryPromptDescription": "視覚的な理解のためのプロンプトコンテキストとして送信します。エージェントはファイルパスを受け取りません。", + "attachmentFallbackName": "添付ファイル", + "attachmentMessageAlt": "添付ファイル {{index}}", + "attachmentPreviewAlt": "プレビュー", + "attachmentPreviewFullAlt": "全サイズのプレビュー", + "attachmentUploadFailed": "添付ファイルのアップロードに失敗しました", + "attachmentUploadPending": "添付ファイルをアップロード中…", + "attachmentUploadPendingSubmit": "送信前に添付ファイルのアップロードを完了してください。", + "chatTabName": "チャット {{index}}", + "clarificationNeeded": "確認が必要です", + "clearAll": "すべてクリア", + "clearAllQueuedMessages": "キュー内のメッセージをすべてクリア", + "close": "{{name}} を閉じる", + "collapseClarification": "確認を折りたたむ", + "collapseMessage": "メッセージを折りたたむ", + "collapseQueuedMessages": "キュー内のメッセージを折りたたむ", + "configChatPlaceholder": "設定について何でも質問できます…", + "configurationChat": "設定チャット", + "configurationChatDescription": "エージェントに Kandev の設定、ワークフロー、エージェントプロファイル、MCP 設定を更新させます。", + "configurationChatTab": "設定チャット", + "delete": "削除", + "deleteQuickChat": "クイックチャットを削除しますか?", + "deleteQuickChatIntro": "このクイックチャットセッションを完全に削除します。削除対象:", + "doubleClickToRename": "ダブルクリックで名前を変更", + "editQueuedMessage": "キュー内のメッセージを編集", + "expandClarification": "確認を展開", + "expandMessage": "メッセージを展開", + "failedToClearQueuedMessages": "キュー内のメッセージをクリアできませんでした。", + "failedToDeleteQuickChat": "クイックチャットを削除できませんでした", + "failedToMergeQueuedMessages": "キュー内のメッセージをマージできませんでした。", + "failedToRemoveQueuedMessage": "キュー内のメッセージを削除できませんでした。", + "failedToReorderQueuedMessages": "キュー内のメッセージを並べ替えできませんでした。", + "failedToSetQueueAutoRun": "キューの自動実行設定を更新できませんでした。", + "failedToSetQueueAutoMerge": "キューの自動マージ設定を更新できませんでした。", + "failedToStartQuickChat": "クイックチャットを開始できませんでした", + "fileTreeActions": "ファイルアクション", + "loadingRepositories": "リポジトリを読み込み中", + "failedToSendQueuedMessageNow": "キュー内のメッセージを今すぐ送信できませんでした。", + "mergeReferenceOverflow": "エンティティ参照が多すぎて、これらのキュー内メッセージをマージできません。", + "mergeWithAbove": "上とマージ", + "moveQuickChatTabLeft": "{{name}} を左に移動", + "moveQuickChatTabRight": "{{name}} を右に移動", + "quickChatTabActions": "{{name}} のアクション", + "reorderQuickChatTab": "{{name}} を並べ替え", + "noTodosYet": "TODO はまだありません。", + "newChatTab": "新しいチャット", + "newQuickChat": "新しいクイックチャット", + "noAgentsAvailable": "利用可能なエージェントがありません", + "noRepositoriesAvailableInWorkspace": "このワークスペースで利用可能なリポジトリがありません", + "noRepository": "リポジトリなし", + "openProviderPage": "プロバイダーページを開く", + "optional": "(任意)", + "pinQueuedMessages": "メッセージキューを固定", + "providerQuotaModel": "モデル:{{model}}", + "providerQuotaProviderFallback": "プロバイダー", + "providerQuotaReset": "容量は {{resetAt}} にリセットされます。", + "providerQuotaResetUnknown": "プロバイダーが容量を利用可能にしたら再度お試しください。", + "providerQuotaTitle": "{{provider}} の使用量上限に達しました", + "transientRetryReasonModelCapacity": "モデルが満杯", + "transientRetryReasonNetworkUnavailable": "ネットワークを利用できません", + "transientRetryReasonProviderOverloaded": "プロバイダーが過負荷", + "transientRetryReasonProviderUnavailable": "プロバイダーが一時的に利用不可", + "transientRetryReasonRateLimited": "レート制限中", + "transientRetryReasonAgentTransportLost": "エージェント接続が切断されました", + "transientRetryReasonGeneric": "プロバイダーエラー", + "transientRetryIn": "{{countdown}} 後に再試行", + "transientRetryNow": "再試行中…", + "transientRetryCountdownLabel": "再試行までのカウントダウン", + "transientRetryAttempt": "試行 {{attempt}} / {{maxAttempts}}", + "transientRetryProviderModel": "{{provider}}・{{model}}", + "transientRetryProvider": "プロバイダー:{{provider}}", + "transientRetryModel": "モデル:{{model}}", + "unpinQueuedMessages": "メッセージキューの固定を解除", + "queueCapacity_one": "{{count}} / {{max}}", + "queueCapacity_other": "{{count}} / {{max}}", + "queueCapacityFull_one": "{{count}} / {{max}} · 満杯", + "queueCapacityFull_other": "{{count}} / {{max}} · 満杯", + "queueAutoRun": "自動実行", + "queueAutoMerge": "自動マージ", + "queueAutoRunOffHelp": "現在の応答を終了すると、キュー内のメッセージは待機します。", + "queueAutoRunOnHelp": "キュー内のメッセージを 1 件ずつ実行します。", + "queueChipExpand_one": "キュー内メッセージ {{count}} 件、クリックで展開", + "queueChipExpand_other": "キュー内メッセージ {{count}} 件、クリックで展開", + "queueCount_one": "{{count}} 件", + "queueCount_other": "{{count}} 件", + "queued": "キュー済み", + "queuedCount_one": "キュー内 {{count}} 件", + "queuedCount_other": "キュー内 {{count}} 件", + "queuedMessages": "キュー内のメッセージ", + "queueEditAlreadySent": "メッセージはすでに送信済みです。編集が反映される前にエージェントが取得しました。", + "queueEditSaveFailed": "編集の保存に失敗しました。もう一度お試しください。", + "queueFullSuffix": "· 満杯", + "quickChatDialogIntro": "正式なタスクを作成せずに、エージェントと手軽に会話を始められます。", + "quickChatIntro": "アイデア、質問、コードベースについてエージェントとチャットできます。", + "quickChatIntroSecondary": "クイックチャットはタスクボードの外に保持されます。", + "quickChatTabOrderSaveFailed": "クイックチャットのタブ順序を保存できませんでした。", + "quickChatTabOrderSaveFailedDescription": "現在の順序はここに保持されます。再読み込みすると最後に保存された順序に戻ります。", + "removeQueuedMessage": "キュー内のメッセージを削除", + "renameChat": "チャット名を変更", + "reorderQueuedMessage": "キュー内のメッセージを並べ替え", + "renameSavedOnThisDeviceOnly": "名前の変更はこのデバイスのみに保存されます", + "renameSyncFailedDescription": "新しい名前を他のデバイスに同期できませんでした。", + "repositories": "リポジトリ", + "repositoriesHelp": "特定のコードやブランチに焦点を当てるために、リポジトリコンテキストを追加します。", + "repositoryContextHelp": "Kandev は選択したブランチから分離されたワークツリーを使用します。コミットされていないローカルの変更は含まれません。", + "repositoryOptional": "リポジトリ(任意)", + "resizeQuickChatFromLeft": "クイックチャットを左からリサイズ", + "resizeQuickChatFromRight": "クイックチャットを右からリサイズ", + "retryAttachmentUpload": "添付ファイルのアップロードを再試行", + "selectAgent": "エージェントを選択", + "selectARepository": "リポジトリを選択…", + "startChat": "チャットを開始", + "startChatAction": "チャットを開始", + "starting": "開始中…", + "startingChat": "チャットを開始中…", + "sendNowQueuedMessage": "キュー内のメッセージを今すぐ送信", + "sendNowEntryAlreadySent": "メッセージはすでに送信済みです。今すぐ送信が開始される前にエージェントが取得しました。", + "sendNowQueueEmpty": "キューは空です。", + "sendNowQueueChanged": "今すぐ送信が開始される前にキューが変更されました。", + "sendNowConflict": "別のキャンセルまたは今すぐ送信の操作が進行中です。", + "sendNowTurnChanged": "今すぐ送信が開始される前にアクティブなターンが変更されました。", + "sendNowAttachmentOverflow": "添付ファイルの合計がメッセージの上限を超えています。", + "sendNowReferenceOverflow": "エンティティ参照の合計がメッセージの上限を超えています。", + "sortable": "並べ替え可能", + "technicalDetails": "技術的な詳細", + "managedRuntimeNpmTitle": "npm がランタイムを準備できませんでした", + "managedRuntimeNpmBody": "Kandev はパッケージデータを更新し、同じランタイムをもう一度試しました。", + "managedRuntimeRetry": "ランタイムを再試行", + "theAssociatedWorktree": "関連付けられたワークツリー", + "theTaskAndItsData": "タスクとそのデータ", + "thisActionCannotBeUndone": "この操作は元に戻せません。", + "turnGroupToolCalls_one": "{{count}} 件のツール呼び出し", + "turnGroupToolCalls_other": "{{count}} 件のツール呼び出し", + "composerSteerPlaceholder": "今すぐ送信:実行中のターンに配信されます", + "unknownError": "不明なエラー", + "useWorkspaceDefault": "ワークスペースの既定を使用…", + "useWorkspaceDefaultOption": "ワークスペースの既定を使用", + "emptyTurnKnownCommand": "`/{{command}}` は実行されましたが、出力はありませんでした。{{hint}}", + "emptyTurnNoOutput": "エージェントは出力を生成せずに終了しました。", + "emptyTurnResendHint": "先頭のスラッシュなしで、通常のメッセージとしてリクエストを再送信してください。", + "emptyTurnUnknownCommand": "`/{{command}}` はこのエージェントが認識するコマンドではないため、出力はありませんでした。{{hint}}" +} diff --git a/apps/web/src/locales/ja/common.json b/apps/web/src/locales/ja/common.json new file mode 100644 index 0000000000..71d8e8d1cb --- /dev/null +++ b/apps/web/src/locales/ja/common.json @@ -0,0 +1,547 @@ +{ + "aboutContextCompactionCount": "推定コンパクション回数について", + "activeSubagents_one": "{{count}} 個のサブエージェント稼働中", + "activeSubagents_other": "{{count}} 個のサブエージェント稼働中", + "activeTasks": "進行中タスク", + "aDirectLocalExecutorProfileIsRequired": "空リポジトリを作成・使用するには、直接ローカル実行プロファイルが必要。", + "agent": "エージェント", + "agentDashboard": "エージェントダッシュボード", + "agentRun": "エージェント実行", + "agentRuns": "エージェント実行一覧", + "agents": "エージェント", + "agentSkillsAskTheAgentTo": "エージェントスキル(エージェントに実行依頼)", + "allowIndexing": "インデックス作成を許可", + "andMoreFiles_one": "+{{count}} 件ほか", + "andMoreFiles_other": "+{{count}} 件ほか", + "anEnhancedPromptIsAvailable": "拡張プロンプトあり。", + "anErrorOccurred": "エラー発生", + "anUnexpectedErrorOccurred": "予期しないエラー発生", + "anUnknownErrorOccurred": "不明なエラー発生", + "apply": "適用", + "autoApproveAllPermissions": "すべての権限を自動承認", + "automation": "自動化", + "automations": "自動化", + "autoStartFailed": "自動開始失敗", + "availableTemplates": "利用可能テンプレート", + "back": "戻る", + "backToTaskOverview": "タスク概要に戻る", + "baseBranch": "ベースブランチ", + "bootsASecondaryKandevDevInstance": "クリーンな DB で二次 kandev dev インスタンスを起動。メインを触らず変更確認できる。", + "bootstrapFailed": "ブートストラップ失敗", + "bootstrapFailedCloseAndReopen": "ブートストラップ失敗。閉じて再度開いて再試行。", + "breadcrumb": "パンくず", + "browseParentDirectory": "親ディレクトリを参照", + "bugFix": "バグ修正", + "cancel": "キャンセル", + "cancelNewFolder": "新規フォルダ作成をキャンセル", + "changelog": "変更履歴", + "checkingGithubAuthentication": "GitHub 認証確認中…", + "chooseAFolderOrEnterA": "フォルダを選ぶか、このマシン上の新しいパスを入力。", + "cliClient": "CLI クライアント", + "cliModeYourPromptWillBe": "CLI モード。プロンプトはターミナルへ自動注入される", + "cliPassthrough": "CLIパススルー", + "close": "閉じる", + "closeEsc": "閉じる (Esc)", + "commandAddBrowserPanel": "ブラウザパネルを追加", + "commandAddBrowserPanelKeywords": "ブラウザ, プレビュー, Web, ブラウザプレビューを開く, Webプレビュー, アプリプレビュー", + "commandAddChangesPanel": "変更パネルを追加", + "commandAddChangesPanelKeywords": "変更, 差分, git の変更, 変更されたファイル, ソース管理, git diff, 変更のレビュー", + "commandAddPlanPanel": "プランパネルを追加", + "commandAddPlanPanelKeywords": "計画, ドキュメント, タスク計画, 実装計画, 計画の詳細", + "commandAddTerminalPanel": "ターミナルパネルを追加", + "commandAddTerminalPanelKeywords": "ターミナル, シェル, コンソール, 新しいターミナル, ターミナルを開く, コマンドライン", + "commandAgentsSettingsKeywords": "エージェント, エージェント設定, エージェントプロファイル, インストール済みエージェント, Claude", + "commandArchiveTaskKeywords": "アーカイブ、タスクをアーカイブ、現在のタスクをアーカイブ、タスクを閉じる、タスクを完了、片付ける", + "commandCancelTurn": "ターンをキャンセル", + "commandCancelTurnKeywords": "キャンセル, 停止, ターン, エージェントをキャンセル, エージェントを停止, エージェントを中断", + "commandCommitChanges": "変更をコミット", + "commandCommitChangesKeywords": "コミット, git, 変更を保存, git commit", + "commandConfigChatKeywords": "設定チャット, 設定モード, Kandev を設定, ワークフロー設定, MCP 設定", + "commandCreateFile": "ファイルを作成", + "commandCreateFileKeywords": "作成, 新規, ファイル, 追加", + "commandCreateFilePlaceholder": "ワークスペースルートからの相対パスを入力...", + "commandCreateNewTask": "新規タスクを作成", + "commandCreateNewTaskKeywords": "新規, 作成, タスク, 追加", + "commandCreatePr": "PRを作成", + "commandCreatePrKeywords": "プルリクエスト, pr, プルリクエストを開く, プルリクエストを送信する, git", + "commandCreateSubtask": "サブタスクを作成", + "commandCreateSubtaskKeywords": "サブタスク, 作成, 新しいサブタスク, 新しいサブタスク, 子タスク", + "commandExecutorsSettingsKeywords": "実行器, 実行器プロファイル, 実行環境, 環境変数, ランタイム, 計算資源", + "commandGoToAllTasks": "すべてのタスクへ移動", + "commandGoToAllTasksKeywords": "タスク, 一覧, すべて", + "commandGoToGitHubDashboard": "GitHubダッシュボードへ移動", + "commandGoToGitHubDashboardKeywords": "GitHub, ダッシュボード, PR, プルリクエスト, コードレビュー, issue, レビュー", + "commandGoToHome": "ホームへ移動", + "commandGoToHomeKeywords": "ホーム, カンバン, ボード", + "commandGoToSettings": "設定へ移動", + "commandGoToSettingsKeywords": "設定, preferences, 設定ファイル, 一般設定", + "commandGoToStats": "統計へ移動", + "commandGoToStatsKeywords": "統計, statistics, 分析, analytics, メトリクス, metrics", + "commandGoToThreads": "スレッドへ移動", + "commandGoToThreadsKeywords": "スレッド, エージェント, ライブ, 列", + "commandGroupActions": "アクション", + "commandGroupAgent": "エージェント", + "commandGroupCommands": "コマンド", + "commandGroupGit": "Git", + "commandGroupNavigation": "ナビゲーション", + "commandGroupPanels": "パネル", + "commandGroupPreferences": "設定項目", + "commandGroupSettings": "設定", + "commandGroupTasks": "タスク", + "commandGroupView": "表示", + "commandGroupWorkspace": "ワークスペース", + "commandMergeKeywords": "マージ, git, ブランチ", + "commandNewAgent": "新しいエージェント", + "commandNewAgentKeywords": "新規, エージェント, セッション, エージェントを開始, 新しいセッション", + "commandOpenRecentTaskSwitcher": "最近のタスク切り替えを開く", + "commandOpenRecentTaskSwitcherKeywords": "最近, タスク, スイッチャー, 履歴, 最近のタスク, タスクを切り替え, 最近のタスクを切り替え", + "commandPaletteMode": "コマンドパレットモード", + "commandPreviewAddTerminalPanel": "ターミナルパネルを追加", + "commandPreviewCommitChanges": "変更をコミット", + "commandPreviewGoToHome": "ホームへ移動", + "commandPreviewPull": "Pull", + "commandPreviewSearchTasks": "タスクを検索", + "commandPromptsSettingsKeywords": "プロンプト、プロンプト設定、カスタムプロンプト、プロンプトスニペット、プロンプトテンプレート", + "commandPullKeywords": "プル, git, 変更をプル, 変更をダウンロード", + "commandPushKeywords": "push, git, 変更を push, リモートへ push, 変更をアップロード", + "commandQuickChat": "クイックチャット", + "commandQuickChatKeywords": "クイックチャット, 新規クイックチャット, クイック質問, エージェントに質問", + "commandRebaseKeywords": "リベース, git, ブランチ", + "commandSwitchToDarkMode": "ダークモードに切り替え", + "commandSwitchToKanbanView": "カンバン表示に切り替え", + "commandSwitchToKanbanViewKeywords": "カンバン, ボード, 表示", + "commandSwitchToLightMode": "ライトモードに切り替え", + "commandSwitchToListView": "リスト表示に切り替え", + "commandSwitchToListViewKeywords": "リスト, テーブル, 表示", + "commandSwitchToPipelineView": "パイプライン表示に切り替え", + "commandSwitchToPipelineViewKeywords": "パイプライン, グラフ, 表示", + "commandThemeKeywords": "テーマ, カラーテーマ, 外観", + "commandWorkspaceSettingsKeywords": "ワークスペース, workspaces", + "commitsAndPushesToTheCurrent": "現在のブランチにコミットしてプッシュします。", + "commitsPushesAndOpensAPull": "コミットしてプッシュし、プルリクエストを開きます。", + "configurationChat": "設定チャット", + "configureAUtilityAgentToEnhance": "設定でユーティリティエージェントを構成すると、AIによる強化を有効にできます", + "configureExecutorsInSettingsToControl": "Settings で実行エンジンを構成して、エージェントの実行場所を制御します。", + "configureGithub": "GitHub を構成", + "confirm": "確認", + "contents": "内容", + "contentSearchNeedsAnActiveTask": "コンテンツ検索にはアクティブなタスクセッションが必要です。", + "contextCompactionCountHelp": "Kandev は、観測されたコンテキスト使用量の減少からこの回数を推定します。サンプルの不足やプロバイダーのリセットにより、概算になる場合があります。", + "contextCompactions": "圧縮", + "contribute": "貢献する", + "contributingAsLogin": "<1>@{{login}} として貢献中。{{access}}", + "contributingAsYourGithubAccount": "GitHub アカウントとして貢献中。{{access}}", + "copy": "コピー", + "couldNotPrepareImproveKandev": "Improve Kandev の準備ができませんでした", + "createATaskDescribingYourBug": "不具合や機能要望を説明するタスクを作成します", + "createAWorkspaceToConfigureThisIntegration": "この統合を設定するには、ワークスペースを作成してください。", + "createFolder": "フォルダを作成", + "createNewRepository": "新しいリポジトリを作成", + "createRepository": "リポジトリを作成", + "createsAnEmptyGitRepository": "空の Git リポジトリを作成し、このワークスペースに登録します。", + "creating": "作成中…", + "dAgo": "{{diffDay}}日前", + "dShort": "{{diffDay}}日", + "default": "デフォルト", + "defaultBadge": "デフォルト", + "delete": "削除", + "deleteSavedTaskViewAction": "{{name}} を削除", + "deleteSavedTaskViewDescription": "これは保存されたフィルターと表示設定のみを削除します。接続されたサービスのタスクやデータは削除しません。", + "deleteSavedTaskViewTitle": "{{name}} を削除しますか?", + "deleteSession": "セッションを削除", + "describeABugYouHitOr": "遭遇した不具合や欲しい機能を説明してください。あなた自身のエージェント上にタスクを作成し、kandev のコードベースに実装します。", + "destination": "保存先", + "discardAndContinue": "破棄して続行", + "discardLocalChanges": "ローカル変更を破棄しますか?", + "discardLocalChangesAtPathDescription": "このタスクを開始すると、{{repoPath}} にあるローカルクローンの未コミット変更は完全に破棄されます。続行する前に、残したいものを必ずバックアップしてください。", + "discardLocalChangesDescription": "このタスクを開始すると、ローカルクローンの未コミット変更は完全に破棄されます。続行する前に、残したいものを必ずバックアップしてください。", + "discoveringAgents": "エージェントを検出中...", + "doNotShowThisAgain": "今後表示しない", + "edit": "編集", + "editTask": "タスクを編集", + "emptyRepositoriesRunDirectlySwitch": "空のリポジトリはこのマシン上で直接実行。タスクは“{{profile}}”に切り替え。", + "enhancePromptWithAi": "AIでプロンプト強化", + "enterAValue": "値を入力...", + "enterValue": "値を入力...", + "error": "エラー", + "executor": "実行者", + "executors": "実行者一覧", + "externalMcp": "外部MCP", + "failedToCreateFolder": "フォルダ作成失敗", + "failedToCreateRepository": "リポジトリ作成失敗", + "failedToLoadDirectory": "ディレクトリ読み込み失敗", + "nativeFolderPickerFailed": "ネイティブのフォルダ選択ダイアログを開けなかった。", + "nativeFolderPickerUnavailable": "ネイティブのフォルダ選択ダイアログは使えない。Kandev を再読み込みしてもう一度試せ。", + "failedToLoadRoutine": "ルーチン読み込み失敗", + "failedToLoadSetup": "セットアップ読み込み失敗", + "failedToRenderDiagram": "図の描画失敗", + "featureRequest": "機能リクエスト", + "files": "ファイル", + "folderName": "フォルダ名", + "folders": "フォルダ", + "forwardStdinStdoutStraightToThe": "stdin/stdout を CLI 子プロセスへそのまま転送。ACP 無効化。", + "getStarted": "始める", + "githubCliNotAuthenticated": "GitHub CLI 未認証", + "gitOpAmendCommit": "コミット修正", + "gitOpCommit": "コミット", + "emptyRemoteRemoteChanged": "ベースブランチ公開前にリモートが変わった。タスクを更新して再試行。", + "emptyRemoteBasePublishFailed": "空のリモートベースブランチを公開できなかった。Git アクセス確認して再試行。", + "emptyRemoteBranchPublishFailed": "ベースブランチは公開されたが、タスクブランチは公開できなかった。もう一度 Push。", + "gitOperationFailedInRepos_one": "{{count}} 個のリポジトリで失敗: {{summary}}", + "gitOperationFailedInRepos_other": "{{count}} 個のリポジトリで失敗: {{summary}}", + "gitOperationPartialDescription_one": "{{operation}} は {{count}} 個中 {{succeeded}} 個のリポジトリで成功 ({{repos}}). 失敗: {{summary}}", + "gitOperationPartialDescription_other": "{{operation}} は {{count}} 個中 {{succeeded}} 個のリポジトリで成功 ({{repos}}). 失敗: {{summary}}", + "gitOperationPartiallySucceeded": "{{operation}} は一部成功", + "gitOperationRepoFailure": "{{repo}}: {{error}}", + "gitOperationSucceededInRepos_one": "{{operation}} は {{count}} 個のリポジトリで成功: {{repos}}", + "gitOperationSucceededInRepos_other": "{{operation}} は {{count}} 個のリポジトリで成功: {{repos}}", + "gitOpForcePush": "強制プッシュ", + "gitOpHardReset": "ハードリセット", + "gitOpMerge": "マージ", + "gitOpPull": "プル", + "gitOpPush": "プッシュ", + "gitOpRebase": "リベース", + "gitOperationCompleted": "{{operation}}完了", + "gitOperationFailed": "{{operation}}失敗", + "gitOperationRunning": "{{operation}}...", + "gitOperationScoped": "{{operation}} ({{repo}})", + "gitOperationSucceeded": "{{operation}}成功", + "gitOpRevertCommit": "コミットを取り消し", + "gitOpSoftReset": "ソフトリセット", + "gitScopeSkipped": "子リポジトリ操作が失敗したため、{{scope}}をスキップしました ({{failedScopes}})。", + "goToFirstPage": "最初のページへ", + "goToLastPage": "最後のページへ", + "goToNextPage": "次のページへ", + "goToPreviousPage": "前のページへ", + "hAgo": "{{diffHr}}時間前", + "hShort": "{{diffHr}}時間", + "healthIssues": "ヘルス問題", + "hideAdvancedOptions": "詳細オプションを隠す", + "howLogContextWorks": "ログコンテキストの仕組み", + "improveKandev": "Kandevを改善", + "createImproveWorkspaceCheckbox": "改善タスクを通常作業から分離するため、専用の{{workspace}}ワークスペースを作成する", + "improveWorkspaceDoesNotExistYet": "専用のImprove Kandevワークスペースはまだ存在しません。改善タスクは自分専用のワークスペースで通常作業から分離して管理されます。", + "continue": "続行", + "improveKandevBugPlaceholder": "例: カンバンボードを開くと、1200px未満の画面で列ヘッダーの文字がタスク数バッジに重なる...", + "improveKandevFeaturePlaceholder": "例: タスク詳細画面からタスクをDoneにするキーボードショートカットを追加し、タスク操作メニューにそのショートカットを表示する...", + "improveKandevDirectPushAccess": "kdlbs/kandevへの書き込み権限あり。エージェントは上流リポジトリのブランチへ直接プッシュする。", + "improveKandevExistingForkPrepared": "Kandevがこのタスク用の書き込み可能フォークを見つけた。エージェントはそこへブランチをプッシュし、kdlbs/kandevに対してプルリクエストを開く。", + "improveKandevExecutorForkAtPr": "エージェントはPR手順中に実行者の認証情報でフォークを作成し、そこからプルリクエストを開く。", + "improveKandevIssueNoForkAccess": "Issueを開くのにフォークやプッシュ権限は不要。", + "improveKandevIssuePlaceholder": "公開したい問題や依頼を説明してください。エージェントは対応するGitHub issueテンプレートに必要な詳細を尋ねます...", + "improveKandevManagedForkPrepared": "Kandevが、エージェント開始前にこのタスク用の書き込み可能フォークを用意する。エージェントはそこへブランチをプッシュし、kdlbs/kandevに対してプルリクエストを開く。", + "includeRecentBackendAndBrowserLogs": "最近のバックエンドとブラウザログをエージェント用コンテキストに含める", + "installed": "インストール済み", + "integrations": "統合", + "interruptedByRestart": "再起動で中断", + "justNow": "たった今", + "kandevAllowsEveryAgentPermissionRequest": "Kandevは、エージェントのすべての権限要求を確認なしで許可する。", + "kandevCouldNotLoad": "Kandevを読み込めなかった。", + "kandevIsOpenSourceAndYou": "Kandevはオープンソース。改善に協力できる。", + "kandevKeepsASmallInMemory": "Kandevは、最新のバックエンドログとブラウザコンソールイベントを小さなメモリ内リングバッファに保持する。有効時は、そのログを書き込み用にマシン上の一時フォルダへ保存し、エージェントが調査中に読めるよう、ファイルパスをタスク説明へ追加する。", + "lastRefreshFailed": "最新更新失敗: {{error}}", + "latestReleaseNotes": "最新リリースノート", + "loading": "読み込み中…", + "loadingEllipsis": "読み込み中...", + "loadingFolder": "フォルダ読み込み中…", + "loadingIndicatorLabel": "読み込み中", + "loadingLabel": "{{label}}読み込み中...", + "loadingRoute": "{{routeName}}読み込み中…", + "loadingRoutine": "ルーティン読み込み中...", + "loadingTask": "タスク読み込み中…", + "loadingWorkflowTemplates": "ワークフローテンプレート読み込み中...", + "mAgo": "{{diffMin}}分前", + "mShort": "{{diffMin}}分", + "matchCase": "大文字小文字を区別", + "menu": "メニュー", + "mode": "モード", + "model": "モデル", + "multiRepoUnavailableLocal": "マルチリポジトリタスクは、Local の初回起動パスが隣接リポジトリを投影できるまで使えない。", + "multiRepoUnavailableRemoteDocker": "マルチリポジトリタスクは、Remote Docker がタスクインスタンス作成に対応するまで使えない。", + "multiRepoUnsupportedExecutor": "この executor はマルチリポジトリタスク非対応。", + "navigate": "移動", + "navigateBetweenPagesSearchTasksTrigger": "ページ移動、タスク検索、git 操作実行、パネル管理まで。全部キーボードだけで完了。アクティブなページに応じてコンテキスト対応コマンド表示。", + "newFolder": "新規フォルダ", + "newFolderName": "新規フォルダ名", + "newReleases_one": "新着リリース {{count}} 件", + "newReleases_other": "新着リリース {{count}} 件", + "next": "次へ", + "nextEnter": "次へ (Enter)", + "noAuth": "認証なし", + "noCliClientsInstalledYetInstall": "CLI クライアント未インストール。Claude / Codex / OpenCode / Amp を入れて、このピッカー有効化。", + "noCommandsFound": "コマンド見つからず。", + "noContentMatchesFound": "一致コンテンツなし。", + "noFilesFound": "ファイル見つからず。", + "noFoldersHerePickThisOne": "ここにフォルダなし。このフォルダ選ぶか、上へ", + "noResults": "結果なし。", + "noTasksFound": "タスク見つからず。", + "notificationClarificationBody": "エージェントが質問した。", + "notificationClarificationTitle": "エージェントが返答待ち", + "notificationInboxItemBody": "新しい項目に対応必要。", + "notificationInboxItemTitle": "新しい受信トレイ項目", + "notificationTurnFinishedBody": "エージェントのターン終了。", + "notificationTurnFinishedTitle": "エージェントのターン終了", + "notInstalled": "未インストール", + "notYetInstalled": "まだ未インストール", + "officeIsNotEnabledForThis": "このランタイムでは Office は有効じゃない。", + "officeRouteNotPortedYet": "この Office ルートは SPA シェルで処理されるが、専用クライアントページはまだ移植中: <1>{{pathname}}", + "onboardingAgentsAutoApproveWarning": "<0>注意: デフォルトの Agent Profiles は Auto Approve 有効で動く。YOLO モード。", + "onboardingAgentsHelp": "エージェント開いて、モデルと権限を設定。先に進むと変更は保存。あとで Settings > Agents でカスタム TUI agents も追加できる。", + "onboardingStepAgentsDescription": "検出済み agent 管理、新規 install。", + "onboardingStepAgentsTitle": "AIエージェント", + "onboardingStepCommandPanelDescription": "キーボードショートカットで、どこからでも action にすぐアクセス。", + "onboardingStepCommandPanelTitle": "コマンドパネル", + "onboardingStepExecutorsDescription": "Agents は実行環境を分けられる。local, containerized, remote。", + "onboardingStepExecutorsTitle": "実行者", + "onboardingStepWorkflowsDescription": "Workflows で task の手順と自動化を定義。", + "onboardingStepWorkflowsTitle": "エージェント型ワークフロー", + "open": "開く", + "openFullPage": "全画面で開く", + "openNavigationMenu": "ナビゲーションメニューを開く", + "openNavigationMenuWithConnectionIssue": "{{description}} ナビゲーションメニューを開く", + "openingLastTask": "最後の task を開く…", + "openIssue": "issue を開く", + "optionalTheRepositoryTheAgentWorks": "任意。agent が作業する repository。", + "managedGithubForkUnavailable": "Managed GitHub access で、この task 用 verified fork を準備できなかった。workspace の GitHub 接続を確認するか、代わりに issue を開く。", + "panels": "パネル", + "parentDirectory": "親 directory", + "pending": "保留中", + "permitTheCliToUploadCode": "CLI に cloud indexing 用 code upload を許可する (auggie / similar)。", + "pickACliClient": "CLI client を選ぶ", + "pickACliClientToLoad": "CLI client を選んで、使える model と mode を読み込む。", + "pluginPanelFailedToLoad": "この plugin panel の読み込み失敗。", + "pluginPanelUnavailable": "この panel はもう使えない。", + "plugins": "Plugins", + "prDetails": "PR 詳細", + "preparingKandevRepository": "Kandev repository 準備中…", + "preparingKandevRepositoryInBackground": "Kandev repository をバックグラウンドで準備中。詳細を入力して、準備できたら送信。", + "presetIconBug": "Bug", + "presetIconCheck": "確認", + "presetIconCode": "コード", + "presetIconEye": "Eye", + "presetIconMessage": "メッセージ", + "presetIconSearch": "検索", + "presetIconSparkle": "きらめき", + "presetIconTool": "ツール", + "pressCmdKToOpenItAnytime": "<0>押して<1><2>いつでも開けます", + "pressEnterToConfirm": "Enterで確定", + "previousShiftEnter": "前へ (Shift+Enter)", + "probing": "確認中", + "profile": "プロフィール", + "profileName": "プロフィール名", + "prompts": "プロンプト", + "reference": "参照", + "refreshAriaLabel": "{{label}}を更新", + "refreshBranchesGitFetch": "ブランチを更新 (git fetch)", + "refreshingLabel": "{{label}}を更新中...", + "refreshLabelLastFetched": "{{label}}を更新 (最終取得: {{time}})", + "regularExpression": "正規表現", + "releasedOn": "リリース日: {{date}}", + "reload": "再読み込み", + "reloadTheApplicationToTryAgain": "再試行するにはアプリケーションを再読み込みしてください。", + "rename": "名前を変更", + "repository": "リポジトリ", + "noRepositoryOption": "(リポジトリなし)", + "repositoryDefaultBranchOption": "(リポジトリのデフォルトブランチ)", + "repositoryName": "リポジトリ名", + "requestFailed": "リクエストに失敗しました", + "reset": "リセット", + "resetting": "リセット中…", + "resetWatchChecking": "削除されるタスク数を確認中…", + "resetWatchDeleteAllTasks": "これにより、watchによって以前作成されたすべてのタスクが、アーカイブ済みタスクを含めて削除されます。watchのポーリングカーソルも消去されるため、次回のチェックでは現在一致している項目がすべて再インポートされます。これは元に戻せません。", + "resetWatchDeleteTasks_one": "これにより、watchによって以前作成された{{count}}件のタスクが、アーカイブ済みタスクを含めて削除されます。watchのポーリングカーソルも消去されるため、次回のチェックでは現在一致している項目がすべて再インポートされます。これは元に戻せません。", + "resetWatchDeleteTasks_other": "これにより、watchによって以前作成された{{count}}件のタスクが、アーカイブ済みタスクを含めて削除されます。watchのポーリングカーソルも消去されるため、次回のチェックでは現在一致している項目がすべて再インポートされます。これは元に戻せません。", + "resetWatchNoTasks": "このwatchでまだ作成されたタスクはありません。ポーリング状態のみが消去されます。watchのポーリングカーソルも消去されるため、次回のチェックでは現在一致している項目がすべて再インポートされます。これは元に戻せません。", + "resetWatchPreviewFailedRequired": "影響を受けるタスク数を読み込めませんでした。watchをリセットする前にプレビューを再試行してください。", + "resetWatchTitle": "{{label}}をリセットしますか?", + "resizeTableColumns": "表の列 {{left}} と {{right}} の幅を変更", + "results": "結果", + "retryPreview": "プレビューを再試行", + "reviewSubmoduleBoundary": "サブモジュール: {{scope}}", + "rowsPerPage": "1ページあたりの行数", + "runsFormatTypecheckTestAndLint": "モノレポ全体で format, typecheck, test, lint 実行。", + "runtimeDocker": "Docker", + "runtimeDockerDescription": "完全分離と再現性のためのコンテナ実行。", + "runtimeGitWorktree": "Git Worktree", + "runtimeGitWorktreeDescription": "worktree root 配下の分離ブランチ環境。並列作業向け。", + "runtimeLocal": "ローカル", + "runtimeLocalDescription": "エージェントを自分のマシンで直接実行。ローカルファイルシステムへフルアクセス。", + "runtimeSprites": "スプライト(Remote sprites.dev)", + "runtimeSpritesDescription": "任意コード向けのハードウェア分離実行環境。", + "save": "保存", + "scopeCommands": "コマンド", + "scopeContents": "内容", + "scopeFiles": "ファイル", + "scopeTasks": "タスク", + "scopeTitleWithShortcut": "{{label}} ({{shortcut}})", + "scratchWorkspace": "スクラッチワークスペース", + "script": "スクリプト", + "searchEllipsis": "検索…", + "searchFailedEditTheQueryOr": "検索失敗。クエリ編集、または検索を再開して再試行。", + "searchForFiles": "ファイルを検索...", + "searchForTasks": "タスクを検索...", + "searchingTaskWorkspace": "タスクワークスペースを検索中…", + "searchQueriesAreLimitedTo200": "検索クエリは 200 文字まで。", + "searchTaskContents": "タスク内容を検索…", + "select": "選択", + "sessionStateCancelled": "キャンセル済み", + "sessionStateCompleted": "完了", + "sessionStateCreated": "作成済み", + "sessionStateFailed": "失敗", + "sessionStateIdle": "待機中", + "sessionStateRunning": "実行中", + "sessionStateStarting": "開始中", + "sessionStateWaitingForInput": "入力待ち", + "settings": "設定", + "shell": "シェル", + "shellCommandPlusSlashCommandSkills": "セカンダリインスタンスで実行できるシェルコマンド。加えて、ワークフロー中にエージェントへ実行させるスラッシュコマンド <2>skills。", + "showAdvancedOptions": "詳細オプションを表示", + "showCode": "コードを表示", + "showDiagram": "図を表示", + "showingRange_one": "{{count}}件中{{from}}から{{to}}を表示", + "showingRange_other": "{{from}} から {{to}} まで、全 {{count}} 件の結果を表示中", + "showMoreActions": "さらにアクションを表示", + "showMoreBreadcrumbs": "さらにパンくずを表示", + "skip": "スキップ", + "stagesAndCommitsChangesUsingConventional": "Conventional Commits で変更をステージしてコミット。", + "status": "ステータス", + "statusWithConnectionIssue": "{{description}} ステータス", + "step": "ステップ", + "subtaskTitle": "サブタスクのタイトル", + "switchMode": "モードを切り替え", + "system": "システム", + "task": "タスク", + "terminal": "ターミナル", + "todos": "ToDo", + "taskLoading": "タスクを読み込み中...", + "taskRemovalInProgress": "このタスクから離脱中...", + "tasks": "タスク", + "taskStateBlocked": "ブロック中", + "taskStateCancelled": "キャンセル済み", + "taskStateCompleted": "完了", + "taskStateCreated": "作成済み", + "taskStateFailed": "失敗", + "taskStateInProgress": "進行中", + "taskStateNotStarted": "未開始", + "taskStateReview": "レビュー", + "taskStateScheduling": "スケジュール中", + "taskStateTodo": "対応待ち", + "taskStateWaitingForInput": "入力待ち", + "taskUnavailable": "タスク使用不可", + "taskUnavailableDescription": "このタスクを読み込めなかった。削除済みか、アクセス権がない可能性あり。", + "theAgentForksKandevToYourAccount": "エージェントが <1>{{repo}} を GitHub アカウントに fork し、fork から PR を開く。あなたにクレジット付き", + "theBaseBranchTheAgentStarts": "エージェントの起点になるベースブランチ。", + "theFinalStepOpensAPullRequest": "このワークフローの最終ステップで pull request を開く。<1>{{binary}} CLI の認証が必要。{{message}}", + "thisEmptyRepositoryWillRunWith": "この空リポジトリは、このマシンで “{{profile}}” で実行される。", + "thisGithubAccountCannotForkKdlbs": "この GitHub アカウントは kdlbs/kandev を fork できない。", + "thisPageCouldNotLoad": "このページを読み込めなかった。", + "thisWorkflowWillOnlyCreateA": "このワークフローは、リポジトリテンプレートから GitHub issue を作るだけ。エージェントは不足情報と公開承認を求める。変更の実装も pull request の作成もしない。", + "title": "タイトル", + "toastRegionLabel": "通知", + "typeACommand": "コマンドを入力...", + "typeToSearchFiles": "ファイルを検索するには入力してください...", + "typeToSearchTaskContents": "タスクの内容を検索するには入力してください…", + "unavailable": "利用できません", + "unknown": "不明", + "unknownError": "不明なエラー", + "unknownPanel": "不明なパネル: {{component}}", + "unsavedChanges": "未保存の変更", + "untitledTask": "無題のタスク", + "usefulCommandsAgentSkills": "便利なコマンドとエージェントのスキル", + "useScratchInstead": "代わりにスクラッチを使う", + "useStepDefaultOption": "(ステップのデフォルトを使用)", + "watcherLoadingBranchesPlaceholder": "読み込み中…", + "watcherPickRepositoryPlaceholder": "先にリポジトリを選択してください", + "useThisFolder": "このフォルダを使う", + "utilities": "ユーティリティ", + "viewFullReleaseOnGithub": "GitHubで完全なリリースを見る", + "waitsForCiAndAutomatedReviews": "CIと自動レビューを待ち、その後失敗を修正してコメントに対応します。", + "walkthrough": "使い方ガイド", + "whatSNew": "新機能", + "whenItsDoneTheAgentOpensAPr": "完了すると、エージェントが<2>{{repo}}にプルリクエストを開き、メンテナーがレビューできるようにして、時間を節約しながら改善を全員に届けます。", + "workflow": "ワークフロー", + "workflowsControlTheStepsAutomationAnd": "ワークフローは、タスクの手順、自動化、エージェントの動作を制御します。設定からさらにワークフローを追加できます。", + "workspace": "ワークスペース", + "workspaceOrphaned": "ワークスペースが孤立しています", + "workspaces": "ワークスペース", + "you": "あなた", + "youCanUseTheNavigationOr": "ナビゲーションを使うか、再読み込みしてもう一度お試しください。", + "yourAgentImplementsItInThe": "あなたのエージェントが、テスト付きで kandev リポジトリに実装します", + "youVerifyAndTestTheChange": "あなたが別の kandev インスタンスで変更を確認し、テストします", + "demoAgentMessagesDescription": "エージェントメッセージの正規化を目視確認します。各カードには、レンダリングされた出力と生の JSON を並べて表示します。", + "demoAgentMessagesQa": "エージェントメッセージ QA", + "demoErrorLoading": "{{mode}} の読み込みエラー", + "demoEventFile": "イベントファイル:", + "demoEvents": "イベント", + "demoFailedToLoadFiles": "ファイルの読み込みに失敗しました", + "demoFailedToLoadFixtures": "フィクスチャの読み込みに失敗しました", + "demoFailedToLoadMessages": "メッセージの読み込みに失敗しました", + "demoFileOption_one": "{{protocol}} - {{agent}} ({{count}} メッセージ)", + "demoFileOption_other": "{{protocol}} - {{agent}} ({{count}} メッセージ)", + "demoFixtureFile": "フィクスチャファイル:", + "demoFixtures": "フィクスチャ", + "demoMessageData": "メッセージデータ", + "demoMessageTypes": "メッセージタイプのデモ", + "demoMessageTypesDescription": "スタイルとテスト用に全メッセージタイプを表示", + "demoNoFilesFound": "ファイルなし", + "demoNoFixtures": "フィクスチャなし。上のドロップダウンからフィクスチャファイルを選択。", + "demoNoNormalizedEvents": "正規化イベントファイルなし。KANDEV_DEBUG_AGENT_MESSAGES=1 でエージェントを実行してイベントログを生成。", + "demoNormalizedEvents": "正規化イベント", + "demoNormalizedPayload": "正規化ペイロード", + "demoRawInput": "生入力", + "demoRenderedOutput": "レンダリング結果:", + "demoShowingFixtures_one": "{{count}} / {{total}} フィクスチャを表示", + "demoShowingFixtures_other": "{{count}} / {{total}} フィクスチャを表示", + "demoShowingMessages_one": "{{count}} / {{total}} メッセージを表示", + "demoShowingMessages_other": "{{count}} / {{total}} メッセージを表示", + "demoTestFixtures": "テスト用フィクスチャ", + "demoToolType": "ツール種別:", + "weekdaySunday": "日曜日", + "weekdayMonday": "月曜日", + "weekdayTuesday": "火曜日", + "weekdayWednesday": "水曜日", + "weekdayThursday": "木曜日", + "weekdayFriday": "金曜日", + "weekdaySaturday": "土曜日", + "checking": "確認中", + "configured": "設定済み", + "connected": "接続済み", + "debug": "デバッグ", + "failedToLoadRoute": "ルートの読み込みに失敗", + "improveStepImprove": "エージェントがレポートを読み、コードベースを調べ、TDDで変更を実装。make fmt, typecheck, test, lint を実行し、その後コミット。", + "improveStepOpenIssue": "エージェントがリポジトリのテンプレートから必要な全項目を集め、公開ドラフトを確認後、GitHub issue を公開。", + "improveStepPr": "エージェントが pr スキルを実行. ブランチを push して kdlbs/kandev に pull request を開き、メンテナがレビュー。", + "improveStepTest": "エージェントが make dev で第2の kandev インスタンスを起動し、確認項目を案内。実行中アプリで変更が動くか確認。", + "noOptionFound": "オプションなし。", + "searchPlaceholder": "検索...", + "selectOption": "オプションを選択...", + "terminalNumbered": "ターミナル {{seq}}", + "preciseDated": "{{date}}、{{time}}", + "preciseToday": "今日、{{time}}", + "preciseYesterday": "昨日、{{time}}", + "relativeDaysAgo_one": "{{count}}日前", + "relativeDaysAgo_other": "{{count}}日前", + "relativeHoursAgo_one": "{{count}}時間前", + "relativeHoursAgo_other": "{{count}}時間前", + "relativeMinutesAgo_one": "{{count}}分前", + "relativeMinutesAgo_other": "{{count}}分前", + "relativeSecondsAgo_one": "{{count}}秒前", + "relativeSecondsAgo_other": "{{count}}秒前", + "relativeYesterday": "昨日", + "sidebarSeconds_one": "{{count}}秒", + "sidebarSeconds_other": "{{count}}秒", + "sidebarMinutes_one": "{{count}}分", + "sidebarMinutes_other": "{{count}}分", + "sidebarHours_one": "{{count}}時間", + "sidebarHours_other": "{{count}}時間", + "sidebarDays_one": "{{count}}日", + "sidebarDays_other": "{{count}}日", + "sidebarWeeks_one": "{{count}}週間", + "sidebarWeeks_other": "{{count}}週間", + "sidebarYears_one": "{{count}}年", + "sidebarYears_other": "{{count}}年", + "sidebarYearsMax": "99年以上", + "integrationSettings": "統合設定", + "pageNavigation": "このページ", + "viewOptions": "表示オプション" +} diff --git a/apps/web/src/locales/ja/configChat.json b/apps/web/src/locales/ja/configChat.json new file mode 100644 index 0000000000..5891d75082 --- /dev/null +++ b/apps/web/src/locales/ja/configChat.json @@ -0,0 +1,21 @@ +{ + "agentProfileHeading": "設定エージェントプロファイル", + "agentProfileHelp": "設定ツールにアクセスできるエージェントを選ぶ。これがワークスペースのデフォルトになる。", + "closePanel": "設定チャットを閉じる", + "dialogDescription": "エージェントにワークフロー、エージェントプロファイル、MCP設定の管理を頼む。", + "noAgentProfiles": "使えるエージェントプロファイルなし。先にAgent settingsで作成。", + "openInQuickChat": "Quick Chatで開く", + "profileUnavailable": "選択したエージェントプロファイル、まだ使えない。少し待って再試行。", + "promptHeading": "何を設定したい?", + "promptPlaceholder": "設定について何でも聞いて...", + "startChat": "チャット開始", + "startChatAria": "設定チャットを開始", + "startingChat": "チャット開始中...", + "suggestionAddReviewStep": "ワークフローに「Code Review」ステップ追加", + "suggestionCreateProfile": "自動承認有効で新しいエージェントプロファイル作成", + "suggestionShowWorkflow": "現在のワークフロー設定を表示", + "suggestionUpdateMcp": "デフォルトのエージェントプロファイルのMCPサーバー更新", + "tagline": "自然言語でKandevを設定", + "tryAsking": "聞いてみる", + "unknownError": "不明なエラー" +} diff --git a/apps/web/src/locales/ja/diff.json b/apps/web/src/locales/ja/diff.json new file mode 100644 index 0000000000..647c0c6c7c --- /dev/null +++ b/apps/web/src/locales/ja/diff.json @@ -0,0 +1,56 @@ +{ + "add": "追加", + "addAComment": "コメントを追加...", + "addComment": "コメントを追加", + "closeWalkthrough": "ウォークスルーを閉じる", + "collapseUnchangedLines": "変更のない行を折りたたむ", + "copyDiff": "差分をコピー", + "deleteComment": "コメントを削除", + "dismiss": "閉じる", + "editComment": "コメントを編集", + "enterToAdd": "追加するには{{modKey}}+Enter", + "enterToAddShiftEnterToRun": "追加するには{{modKey}}+Enter、実行するには{{modKey}}+Shift+Enter", + "expandAllLines": "すべての行を展開", + "failedToSendWalkthroughNote": "ウォークスルーのメモを送信できませんでした", + "lineLabel": "{{line}}行目", + "lineRangeLabel": "{{start}}行目から{{end}}行目", + "new": "新規", + "next": "次へ", + "noActiveSessionForWalkthroughNote": "ウォークスルーのメモに対するアクティブなセッションがありません", + "noDiffAvailable": "差分がありません", + "old": "古い", + "openFileAtLine": "{{file}}:{{line}}を開く", + "previewMarkdown": "Markdownをプレビュー", + "previous": "前へ", + "reopen": "再度開く", + "resolve": "解決", + "revertChanges": "変更を元に戻す", + "run": "実行", + "runComment": "コメントを実行", + "saveAndSendToAgent": "保存してエージェントに送信({{modKey}}+Shift+Enter)", + "saveCommentForReview": "レビュー用にコメントを保存({{modKey}}+Enter)", + "sendToAgent": "エージェントに送信", + "stale": "古い", + "staleFindingsForThisFile_one": "このファイルの古い指摘が{{count}}件あります", + "staleFindingsForThisFile_other": "このファイルの古い指摘が{{count}}件あります", + "stepProgress": "ステップ{{current}} / {{total}} · {{lineLabel}}", + "suggestedChangeNotAppliedAutomatically": "提案された変更。自動では適用されていません", + "switchToSplitView": "分割表示に切り替え", + "switchToUnifiedView": "統一表示に切り替え", + "theDiffChangedAfterThisReview": "このレビューの後に差分が変更され、この指摘が示すコードはもはや含まれていません。", + "theDiffChangedAfterThisReviewRelocated": "このレビュー後に diff が変わった。指摘は、説明するコードへ付け直した。", + "toggleWordWrap": "折り返し切り替え", + "unableToRenderDiffForThis": "このファイルの diff を表示できない。キャッシュ済み diff が作業ツリーとずれてる可能性あり。更新して再試行。", + "undo": "元に戻す", + "update": "更新", + "walkthrough": "ウォークスルー", + "walkthroughNoteAdded": "ウォークスルー ノート追加", + "walkthroughNoteQueued": "ウォークスルー ノートをキューに追加", + "walkthroughNoteSent": "ウォークスルー ノート送信済み", + "fileStatusAdded": "追加済み", + "fileStatusDeleted": "削除済み", + "fileStatusModified": "変更済み", + "fileStatusMoved": "移動済み", + "fileStatusMovedFrom": "{{oldPath}} から移動", + "fileStatusUntracked": "追跡外" +} diff --git a/apps/web/src/locales/ja/editors.json b/apps/web/src/locales/ja/editors.json new file mode 100644 index 0000000000..14cce98940 --- /dev/null +++ b/apps/web/src/locales/ja/editors.json @@ -0,0 +1,98 @@ +{ + "apply": "適用", + "applyLatestAgentChangesToFile": "最新のエージェントの変更をこのファイルに適用", + "boldCmdB": "太字 (Cmd+B)", + "comment": "コメント", + "commentAdded": "コメントを追加しました", + "commentCmdShiftC": "コメント (Cmd+Shift+C)", + "commentCount_one": "{{count}}件のコメント", + "commentCount_other": "{{count}}件のコメント", + "commentDeleted": "コメントを削除しました", + "commentMarkerTitle_one": "{{count}}件のコメント。クリックして表示", + "commentMarkerTitle_other": "{{count}}件のコメント。クリックして表示", + "commentSent": "コメントを送信しました", + "commentUpdated": "コメントを更新しました", + "commentWillBeSentWithNextMessage": "コメントは次のメッセージと一緒に送信されます。", + "copyAllChangedLines": "変更された行をすべてコピー", + "copyCode": "コードをコピー", + "copyDiff": "差分をコピー", + "copyLine": "{{lineNumber}}行目をコピー", + "copyPath": "パスをコピー", + "default": "デフォルト", + "deleteFailed": "削除に失敗しました", + "deleteFile": "ファイルを削除", + "disableWordWrap": "折り返しを無効にする", + "enableWordWrap": "折り返しを有効にする", + "errorWhileDeletingFile": "ファイルの削除中にエラーが発生しました", + "errorWhileSavingFile": "ファイルの保存中にエラーが発生しました", + "failedToDeleteFile": "ファイルの削除に失敗しました", + "failedToSaveFile": "ファイルの保存に失敗しました", + "failedToSendComment": "コメントの送信に失敗しました", + "fileSavedOverwritten": "ファイルを保存しました (上書き済み)", + "fileSavedOverwrittenDescription": "ファイルは外部で変更されました。あなたのバージョンを保存しました。", + "foldUnchangedLines": "変更のない行を折りたたむ", + "hideDiffIndicators": "差分インジケーターを非表示にする", + "highlight": "ハイライト", + "inlineCode": "インラインコード", + "insertBlock": "ブロックを挿入", + "italicCmdI": "斜体 (Cmd+I)", + "link": "リンク", + "loadingDiff": "差分を読み込んでいます...", + "loadingEditor": "エディターを読み込んでいます...", + "noDiffAvailable": "差分なし", + "noEditorsConfigured": "エディタ未設定", + "openFolder": "フォルダを開く", + "openTaskSessionBeforeSending": "送信前にタスクセッションを開く。", + "openWith": "で開く...", + "pasteLink": "リンクを貼り付け...", + "planFormattingToolbar": "計画整形ツールバー", + "pleaseTryAgain": "もう一度試す。", + "previewHtml": "HTMLをプレビュー", + "previewMarkdown": "Markdownをプレビュー", + "queuedForTheAgent": "エージェント待ち。", + "reload": "再読み込み", + "revertAllChanges": "変更をすべて元に戻す", + "revertChanges": "変更を元に戻す", + "saveFailed": "保存失敗", + "saving": "保存中...", + "sentToTheAgent": "エージェントに送信済み。", + "showAllLines": "全行を表示", + "showDiffIndicators": "差分インジケーターを表示", + "slashBlockquote": "引用", + "slashBlockquoteDescription": "引用文", + "slashBulletList": "箇条書き", + "slashBulletListDescription": "順序なしリスト", + "slashCategoryBlocks": "ブロック", + "slashCategoryLists": "リスト", + "slashCategoryText": "テキスト", + "slashCodeBlock": "コードブロック", + "slashCodeBlockDescription": "フェンス付きコード", + "slashDivider": "区切り線", + "slashDividerDescription": "水平線", + "slashHeading1": "見出し1", + "slashHeading1Description": "大見出し", + "slashHeading2": "見出し2", + "slashHeading2Description": "中見出し", + "slashHeading3": "見出し3", + "slashHeading3Description": "小見出し", + "slashNumberedList": "番号付きリスト", + "slashNumberedListDescription": "順序付きリスト", + "slashTable": "表", + "slashTableDescription": "3x3表", + "slashTaskList": "タスクリスト", + "slashTaskListDescription": "チェックリスト項目", + "startTyping": "入力を開始...", + "strikethroughCmdShiftX": "取り消し線 (Cmd+Shift+X)", + "switchToSplitView": "分割表示に切り替え", + "switchToUnifiedView": "統合表示に切り替え", + "toggleCode": "コードの切り替え", + "toggleWordWrap": "折り返しの切り替え", + "underlineCmdU": "下線 (Cmd+U)", + "failedToOpenEditor": "エディタを開けませんでした", + "downloadFile": "ファイルをダウンロード", + "symlink": "シンボリックリンク", + "failedToOpenFolder": "フォルダを開けませんでした", + "openFolderOnHost": "Kandevが動作しているマシンでフォルダを開く", + "chooseFolder": "フォルダを選択", + "openingFolder": "フォルダを開いています..." +} diff --git a/apps/web/src/locales/ja/executors.json b/apps/web/src/locales/ja/executors.json new file mode 100644 index 0000000000..b4c2dfa1f1 --- /dev/null +++ b/apps/web/src/locales/ja/executors.json @@ -0,0 +1,432 @@ +{ + "action": "アクション", + "add": "追加", + "addASpritesApiKeyBeforeCreating": "プロファイルを作成する前に Sprites の API キーを追加してください。", + "addDockerfileContentBeforeCreating": "プロファイルを作成する前に Dockerfile の内容を追加してください。", + "addRule": "ルールを追加", + "advanced": "詳細設定", + "agent": "エージェント", + "allow": "許可", + "allowlistGithubPlaywright": "GitHub + Playwright を許可リストに追加", + "apiKey": "API キー", + "areYouSureThisActionCannot": "本当に実行しますか? この操作は元に戻せません。", + "areYouSureYouWantTo": "本当にこのプロファイルを削除しますか? この操作は元に戻せません。", + "authFilesNotFoundOnThisMachine": "{{files}}; このマシンではファイルが見つかりませんでした", + "backToExecutor": "Executor に戻る", + "backToExecutors": "Executors に戻る", + "buildFailedWithMessage": "ビルドに失敗しました: {{message}}", + "buildFailedWithStatus": "ビルドに失敗しました ({{status}}): {{text}}", + "buildImage": "イメージをビルド", + "buildImageAdminOnly": "イメージをビルドできるのは管理者のみです。", + "buildThisDockerImageBeforeCreating": "プロファイルを作成する前に、この Docker イメージをビルドしてください。", + "building": "ビルド中...", + "checking": "確認中...", + "chooseAnExecutorTypeToRun": "インフラ上で環境を実行するための Executor 種別を選択してください。", + "cleanupScript": "クリーンアップスクリプト", + "configureAuthenticationForToolsAndAgents": "リモート環境でツールとエージェントの認証を設定します。", + "configured": "設定済み", + "confirmDelete": "削除の確認", + "connected": "接続済み", + "connectedActiveSprites_one": "接続済み。アクティブな sprite は {{count}} 件です。", + "connectedActiveSprites_other": "接続済み。アクティブな sprites は {{count}} 件です。", + "connection": "接続", + "connectionSettings": "接続設定", + "connectionTestFailed": "接続テストに失敗しました", + "connectionTestPassed": "接続テストに成功しました", + "connectsToARemoteDockerHost": "リモートの Docker ホストに接続します。リポジトリはコンテナ内にクローンされます。", + "copyAuthFiles": "認証ファイルをコピー", + "createANewProfileForThis": "この executor 用の新しいプロフィールを作成します。プロフィールページでスクリプトと環境変数を設定できます。", + "createExecutor": "Executor を作成", + "createNewProfile": "新しいプロフィールを作成", + "createNewSecret": "新しいシークレットを作成...", + "createProfile": "プロフィールを作成", + "creating": "作成中...", + "creatingProfile": "プロフィールを作成中...", + "defaultNoTls": "デフォルト (TLS なし)", + "defineNetworkAccessRulesAppliedWhen": "このプロフィール用に sprite が作成されるときに適用されるネットワークアクセスルールを定義します。", + "defineTheDockerImageBuildAnd": "Docker イメージを定義します。ここでビルドしてテストできます。", + "delete": "削除", + "deleteExecutor": "Executor を削除", + "deleteProfile": "プロフィールを削除", + "deleteProfileConfirm": "\"{{name}}\" を削除してもよろしいですか?この操作は元に戻せません。", + "deleting": "削除中...", + "deny": "拒否", + "descriptionCustom": "カスタム executor です。", + "descriptionKubernetes": "管理者が設定した Kubernetes Pod でエージェントを実行します。", + "descriptionLocalDocker": "このマシンで Docker コンテナを実行します。", + "descriptionLocalPc": "リポジトリフォルダ内でエージェントを直接実行します。", + "descriptionRemoteDocker": "リモートの Docker ホストに接続します。", + "descriptionSprites": "Sprites.dev のクラウドサンドボックスでエージェントを実行します。", + "descriptionSsh": "信頼された Linux amd64 または macOS ホスト上で、SSH 経由でエージェントを実行します。", + "descriptionSshCreate": "SSH 経由でリモートホストに接続し、そこで agentctl を実行します。", + "descriptionWorktree": "分離されたエージェントセッションのために git worktree を作成します。", + "differentConfigurationsForThisExecutorEach": "この executor には異なる設定があります。各プロフィールには、独自の準備スクリプト、環境変数、設定を持たせることができます。", + "disabled": "無効", + "disconnected": "未接続", + "dockerContainers": "Docker コンテナ", + "dockerContainersCreatedByThisProfile": "このプロファイルで作成された Docker コンテナ。", + "dockerHost": "Docker ホスト", + "dockerHostRemotePlaceholder": "{{tcp}} または {{ssh}}", + "dockerfile": "Dockerfile", + "dockerfileContent": "Dockerfile の内容", + "domain": "ドメイン", + "eGMyApiToken": "例: {{example}}", + "eGProductionDevelopment": "例: {{example}}", + "enabled": "有効", + "enterAProfileName": "プロファイル名を入力。", + "enterAnImageTagBeforeCreating": "プロファイルを作る前にイメージタグを入力。", + "envVarsConfiguredCount_one": "{{count}} 個設定済み", + "envVarsConfiguredCount_other": "{{count}} 個設定済み", + "environmentVariables": "環境変数", + "executorName": "Executor 名", + "executorNotFound": "Executor 見つからない", + "executorType": "Executor 種類", + "failed": "失敗", + "failedToConnectToBackend": "バックエンド接続失敗", + "failedToCreateProfile": "プロファイル作成失敗", + "failedToCreateSecret": "シークレット作成失敗", + "failedToLoadExecutor": "Executor 読み込み失敗", + "missingSecretReference": "シークレット参照なし", + "failedToSaveProfile": "プロファイル保存失敗", + "filesSelected": "選択ファイル", + "gitIdentity": "Git 識別情報", + "gitIdentityAutoDetect": "自動検出", + "gitIdentityCustom": "カスタム", + "gitTokenOptional": "Git トークン(任意)", + "gitUserEmail": "Git ユーザーのメール", + "gitUserName": "Git ユーザー名", + "goToExecutors": "Executors へ移動", + "host": "ホスト", + "hubDescription": "Executor プロファイルは、エージェントがどこでどう動くか定義する。各プロファイルは、スクリプト、環境変数、MCP ポリシーを含む実行環境を設定する。", + "hubDescriptionKubernetes": "管理者設定の Kubernetes Pod でエージェントを動かす。", + "hubDescriptionDocker": "このマシンで Docker コンテナを動かす。", + "hubDescriptionLocal": "リポジトリフォルダ内で直接エージェントを動かす。", + "hubDescriptionSprites": "Sprites.dev クラウドサンドボックスでエージェントを動かす。", + "hubDescriptionSsh": "SSH でリモートホストへ接続し、そこで agentctl を動かす。", + "hubDescriptionWorktree": "分離されたエージェントセッション用の git worktree を作成します。", + "image": "画像", + "imageTag": "画像タグ", + "include": "含める", + "injectedIntoTheExecutionEnvironmentUse": "実行環境に注入済み。トークンと API キーは Secret モードを使う。リテラル値は profile JSON に保存されます。", + "injectedIntoTheExecutionEnvironmentVariables": "実行環境に注入済み。変数は機密値用に secrets を参照できます。", + "invalidJson": "無効な JSON", + "janeDeveloper": "Jane Developer", + "key": "キー", + "loading": "読み込み中...", + "loadingEditor": "エディタ読み込み中...", + "loadingExecutor": "Executor 読み込み中...", + "localDocker": "ローカル Docker", + "localDockerExecutor": "ローカル Docker Executor", + "localGitIdentityNotDetected": "このマシンでローカル git の user.name/user.email が見つかりません", + "mcpPolicy": "MCP ポリシー", + "mcpPolicyJson": "MCP ポリシー JSON", + "mcpPolicyMustBeAJsonObject": "MCP ポリシーは JSON オブジェクトである必要があります", + "mcpPolicyOverridesForExecutor": "この executor の MCP サーバー用 JSON ポリシー上書き。", + "mcpPolicyOverridesForProfile": "この profile の MCP サーバー用 JSON ポリシー上書き。", + "mode": "モード", + "name": "名前", + "networkPolicies": "ネットワークポリシー", + "newProfile": "新しい Profile", + "newSshExecutor": "新しい SSH Executor", + "newTypeProfile": "新しい {{type}} Profile", + "noDockerContainers": "Docker コンテナなし。", + "noEnvironmentVariablesConfigured": "環境変数未設定。", + "noEnvironmentVariablesConfiguredAddOne": "環境変数未設定。下に1つ追加。", + "noNetworkPolicyRulesConfigured": "ネットワークポリシールール未設定。", + "noProfilesConfigured": "Profile 未設定。", + "noResponseBody": "応答本文なし", + "noTransferableCredentialsFound": "転送可能な認証情報なし。", + "none": "なし", + "notAnSshExecutor": "Executor {{id}} は SSH executor ではありません", + "notConfigured": "未設定", + "onlyHttpSse": "HTTP/SSE のみ", + "onlyStdio": "stdio のみ", + "optionalAuthorIdentityAppliedInRemote": "任意の author identity はリモート executor 環境に適用されます。", + "optionalPattern": "任意のパターン", + "overrideIdentity": "ID 上書き", + "pasteYourSecretValue": "シークレット値を貼り付け...", + "pathToTlsCertificatesForThe": "Docker ホスト用 TLS 証明書へのパス。", + "personalAccessTokenForCloningRepositories": "コンテナー内でリポジトリをクローンするための個人アクセストークン。未設定ならホスト環境から自動検出。", + "port": "ポート", + "prepareScript": "準備スクリプト", + "prepareScriptBadge": "準備スクリプト", + "prepareScriptDescriptionLocal": "エージェント開始前にホストマシン上で実行。", + "prepareScriptDescriptionRemote": "エージェント開始前に実行環境内で実行。利用可能なプレースホルダーを見るには {{trigger}} と入力。", + "profileDetails": "プロフィール詳細", + "profileForExecutor": "{{name}} 用プロフィール", + "profileNameIsRequired": "プロフィール名は必須。", + "profileNotFound": "プロフィール見つからず", + "profileSaved": "プロフィール保存済み", + "profiles": "プロフィール", + "portableConfigAvailable": "利用可", + "portableConfigBundleClaudeSettings": "Claude 設定をコピー", + "portableConfigBundleCodexConfig": "Codex 設定をコピー", + "portableConfigBundleGeneric": "エージェント設定 ({{id}})", + "portableConfigBundleMockSettings": "mock-agent 設定をコピー", + "portableConfigBundleOpenCodeConfig": "OpenCode 設定をコピー", + "portableConfigFileMapping": "{{source}} から {{target}} へ", + "portableConfigInfoCopyTiming": "Kandev は、選択したファイルを変更せずにコピーするのは、新規プロビジョニング時か環境リセット時だけ。新しいコピーで既存の対象ファイルを置き換えることあり。ウォーム再開では既存環境をそのまま使う。", + "portableConfigInfoErrors": "不足または読めない任意ファイルは警告付きでスキップ、起動は止めない。ファイルにはシークレットや環境値を含められる。", + "portableConfigInfoLabel": "ポータブルなエージェント設定の詳細", + "portableConfigInfoScope": "コピーするのは許可リスト済みファイルだけ。ファイルでフックやコマンド追加、モデル・権限・MCP サーバー・エンドポイント変更も可能。エグゼキューターで使えないホストパスを含むこともあり。認証ファイルと設定バンドルは別選択。", + "portableConfigInfoSsh": "SSH では、対象は設定済みリモートユーザーの共有ホーム。ほかのプロセスがそのホストで使う設定を上書きする可能性あり。", + "portableConfigInfoTitle": "ポータブルなエージェント設定", + "portableConfigNotFound": "見つからず", + "portableConfigNotFoundHint": "これは編集ヒント。プロフィール保存して、あとでファイル追加できる。", + "portableConfigTitle": "エージェント設定", + "provideSecret": "シークレットを提供", + "provideSecretForEnvVar": "{{envVar}} 用シークレットを提供", + "quickPresets": "クイックプリセット", + "refresh": "更新", + "relatedDockerContainersRemoved_one": "関連 Docker コンテナー {{count}} 個も削除される。", + "relatedDockerContainersRemoved_other": "関連 Docker コンテナー {{count}} 個も削除される。", + "remoteAuthMethod": "リモート認証方法", + "remoteCredentials": "リモート認証情報", + "remoteDocker": "リモート Docker", + "remoteDockerExecutor": "リモート Docker 実行環境", + "remove": "削除", + "removeEnvVar": "環境変数を削除", + "removeEnvVarNamed": "{{key}} を削除", + "removeRelatedDockerContainers": "関連する Docker コンテナを削除", + "removeThisExecutor": "この実行環境を削除", + "repositoriesWillBeMountedAsVolumes": "リポジトリは実行時にボリュームとしてマウントされます。", + "rewriteLocalhostForDocker": "Docker 用に localhost を書き換える", + "runsAfterTheAgentSessionEnds": "エージェントセッション終了後に、クリーンアップタスクとして実行されます。", + "save": "保存", + "secret": "シークレット", + "selectASecret": "シークレットを選択...", + "selectOrCreateASecret": "シークレットを選択または作成...", + "selectSecret": "シークレットを選択...", + "selectTheSecretContainingYourSprites": "Sprites.dev API トークンを含むシークレットを選択してください。", + "session": "セッション", + "setACustomNameAndEmail": "リモート git コミット用にカスタムの名前とメールアドレスを設定します。", + "setEnvVarViaStoredSecret": "保存済みシークレットを使用して <1>{{envVar}} を設定", + "spritesApiKeyIsRequired": "Sprites API キーが必要です。", + "spritesTokenIsRequired": "Sprites トークンが必要です。", + "kubernetesAccessModeRequired": "管理対象クレームに少なくとも 1 つのアクセスモードを選択してください。", + "kubernetesAccessModeInvalid": "保存された設定にサポートされていないアクセスモードが含まれています。サポートされているモードを選択してください。", + "kubernetesAccessModes": "アクセスモード", + "kubernetesAccessModesHelp": "各管理対象クレームに要求するアクセスモードを選択してください。", + "kubernetesActiveSessions": "アクティブなセッション", + "kubernetesActiveSessionsDescription": "この実行環境を使用しているセッションの、サニタイズされた Pod とワークスペースのステータスです。90 秒ごとに更新されます。", + "kubernetesActiveSessionsGuidance": "停止すると Kubernetes リソースは保持されます。アーカイブまたは削除では管理対象ワークスペースを削除できます。既存のクレームは Kandev によって削除されません。リクエストには実際の使用量ではなく、設定済みのメインコンテナの CPU とメモリが表示されます。", + "kubernetesAdminSaveOnly": "Kubernetes 設定を保存できるのは管理者のみです。", + "kubernetesAdminTestOnly": "この Kubernetes テストを実行できるのは管理者のみです。", + "kubernetesAuthInCluster": "クラスタ内サービスアカウント", + "kubernetesAuthKubeconfig": "Kubeconfig ファイル", + "kubernetesAuthMode": "認証", + "kubernetesClaimName": "既存のクレーム名", + "kubernetesClaimNameHelp": "クレームは実行環境の namespace にすでに存在している必要があります。Kandev はそれを削除しません。", + "kubernetesClaimNameRequired": "既存のクレーム名が必要です。", + "kubernetesConnectionDescription": "Kandev がクラスタに接続する方法を選択し、各セッションを 1 つの namespace に固定します。", + "kubernetesConnectionTitle": "クラスタ接続", + "kubernetesConfirmConnectionSessions_one": "この実行環境には {{count}} 件のアクティブなセッションがあります。保存済みの認証情報、context、タイムアウトは再接続時に適用されます。記録済みの namespace とワークロードのスナップショットは保持され、新しい namespace は新しいセッションにのみ適用されます。続行しますか?", + "kubernetesConfirmConnectionSessions_other": "この実行環境には {{count}} 件のアクティブなセッションがあります。保存済みの認証情報、context、タイムアウトは再接続時に適用されます。記録済みの namespace とワークロードのスナップショットは保持され、新しい namespace は新しいセッションにのみ適用されます。続行しますか?", + "kubernetesConfirmCombinedSessions_one": "この実行環境には {{count}} 件のアクティブなセッションがあります。保存済みの接続設定は再接続時に適用され、記録済みのワークロードスナップショットは変更されません。新しいセッションには両方の変更が適用されます。続行しますか?", + "kubernetesConfirmCombinedSessions_other": "この実行ツールにはアクティブなセッションが {{count}} 件あります。保存された接続設定は再接続時に適用され、記録済みのワークロードスナップショットは変更されません。新しいセッションには両方の変更が適用されます。続行しますか?", + "kubernetesConfirmWorkloadSessions_one": "この実行ツールにはアクティブなセッションが {{count}} 件あります。新しいセッションにはこの変更が適用されます。置き換えられた Pod を含む既存のセッションは、記録済みのワークロードスナップショットを保持します。続行しますか?", + "kubernetesConfirmWorkloadSessions_other": "この実行ツールにはアクティブなセッションが {{count}} 件あります。新しいセッションにはこの変更が適用されます。置き換えられた Pod を含む既存のセッションは、記録済みのワークロードスナップショットを保持します。続行しますか?", + "kubernetesContext": "Kubeconfig コンテキスト", + "kubernetesContextHelp": "省略可能です。空欄のままにすると kubeconfig の現在のコンテキストを使用します。", + "kubernetesCreateDescription": "名前空間付きの Kubernetes 実行ツールと、その最初のワークロードプロファイルを作成します。", + "kubernetesCreateFailed": "Kubernetes 実行ツールの作成に失敗しました。", + "kubernetesCreateRollbackRejected": "サーバーが削除に失敗した結果を返したため、新しい実行ツールがまだ存在する可能性があります。", + "kubernetesCreateRollbackFailed": "プロファイルの作成に失敗しました: {{profileError}}。新しい実行ツールの削除にも失敗しました: {{rollbackError}}", + "kubernetesCreateRollbackUnknown": "エラー詳細なしでクリーンアップに失敗したため、新しい実行ツールがまだ存在する可能性があります。", + "kubernetesCreateTitle": "新しい Kubernetes プロファイル", + "kubernetesCreated": "作成済み", + "kubernetesCreatedValue": "作成日時: {{value}}", + "kubernetesDeleteExecutorDescription": "この実行ツールとすべてのプロファイルを削除します。これは元に戻せません。また、アクティブなセッションがある実行ツールは削除できません。", + "kubernetesDiagnosticsDescription": "設定、検出、名前空間アクセス、RBAC、アドミッション、ストレージ、ストリーミングを因果順に確認します。", + "kubernetesDiagnosticsTitle": "接続と権限のテスト", + "kubernetesDurationMs": "{{duration}} ミリ秒", + "kubernetesEmptyDirWarning": "Empty directory ストレージは、Pod が置き換えられるか削除されると失われます。", + "kubernetesExecutorActionFailed": "Kubernetes 実行ツールの操作に失敗しました。", + "kubernetesExecutorName": "実行ツール名", + "kubernetesExecutorNameHelp": "このクラスタと名前空間を識別しやすい名前です。", + "kubernetesExecutorNameRequired": "実行ツール名は必須です。", + "kubernetesExecutorPageDescription": "クラスタアクセスの編集、権限のテスト、アクティブなセッションの確認を行います。既存のセッションは保存済みの認証情報、コンテキスト、タイムアウトを使用しますが、記録済みの名前空間とワークロードスナップショットは保持されます。", + "kubernetesInClusterAuthHelp": "Kandev バックエンド Pod にマウントされたサービスアカウントを使用します。", + "kubernetesKubeconfigAuthHelp": "Kandev バックエンドホストにすでにマウントされている kubeconfig ファイルを読み取ります。", + "kubernetesKubeconfigPath": "Kubeconfig パス", + "kubernetesKubeconfigPathHelp": "Kandev バックエンドホスト上の絶対パスです。kubeconfig の内容はここに保存されません。", + "kubernetesKubeconfigPathRequired": "絶対パスの kubeconfig が必要です。", + "kubernetesMainContainer": "メインコンテナ", + "kubernetesContainerCompactValue": "コンテナ: {{value}}", + "kubernetesMainContainerHelp": "Kandev の bootstrap を受け取り、agentctl を実行するコンテナです。", + "kubernetesMainContainerRequired": "メインコンテナ名は必須です。", + "kubernetesMainContainerInvalid": "メインコンテナは有効な DNS ラベルである必要があります。", + "kubernetesNamespace": "固定名前空間", + "kubernetesNamespaceHelp": "この実行ツールのすべての Pod と管理対象 claim はこの名前空間に保持されます。", + "kubernetesNamespaceRequired": "名前空間は必須です。", + "kubernetesNoActiveSessions": "アクティブな Kubernetes セッションはありません。", + "kubernetesMainContainerRequests": "メインコンテナの要求", + "kubernetesOpenTask": "タスク {{task}} を開く, セッション {{session}}", + "kubernetesPlatform": "プラットフォーム", + "kubernetesPlatformHelp": "すべての Pod に一致する Kubernetes アーキテクチャのセレクターを追加します。", + "kubernetesPod": "Pod", + "kubernetesPodCompactValue": "Pod: {{value}}", + "kubernetesPodTemplate": "生の PodTemplate YAML", + "kubernetesPodTemplateHelp": "v1 PodTemplate ドキュメントは 1 つのみ、256 KiB まで指定できます。不明なフィールドや競合するフィールドは拒否されます。スターターは {{image}} を使用し、基本ツールとエージェント依存関係が含まれています。本番環境ではリリースタグまたはダイジェストを固定してください。", + "kubernetesPodTemplateRequired": "PodTemplate YAML は必須です。", + "kubernetesPodTemplateTooLarge": "PodTemplate YAML は 256 KiB 以下である必要があります。", + "kubernetesPodTemplateWarning": "新しいセッションではプロファイル設定のスナップショットが保存されます。既存のセッションと置き換えられた Pod は、記録済みのスナップショットを保持します。Kandev はオペレーターのフィールドを保持しますが、予約済みのコマンド、マウント、環境キー、ラベル、namespace、プラットフォームの競合は拒否します。", + "kubernetesProfileDiagnosticsDescription": "保存前のクラスタ、PodTemplate、ワークスペース設定を、ワークロードを保持せずにテストします。", + "kubernetesReadOnlyDescription": "Kubernetes プロファイルとセッションの状態を表示して使用できます。作成、変更、削除、テストは管理者のみが行えます。", + "kubernetesReadOnlyTitle": "Kubernetes 設定は読み取り専用です", + "kubernetesRequestTimeout": "要求タイムアウト (秒)", + "kubernetesRequestTimeoutHelp": "Kubernetes API 要求のタイムアウト。1 から 300 秒です。", + "kubernetesRestarts_one": "再起動: {{count}}", + "kubernetesRestarts_other": "再起動: {{count}}", + "kubernetesRequestCpu": "{{value}} 個の CPU", + "kubernetesRequestMemory": "{{value}} メモリ", + "kubernetesRequests": "要求", + "kubernetesRequestsUnspecified": "メインコンテナーの要求: 未指定", + "kubernetesRequestsUnspecifiedValue": "未指定", + "kubernetesRetentionActive": "アクティブ", + "kubernetesRetentionMissing": "なし", + "kubernetesRetentionRetained": "保持", + "kubernetesRetentionStateValue": "リソース保持: {{value}}", + "kubernetesRetentionTerminal": "終了", + "kubernetesRetentionTerminating": "終了処理中", + "kubernetesRetentionUnknown": "不明", + "kubernetesSessionsFailed": "Kubernetes セッションの読み込みに失敗しました。", + "kubernetesSessionCancelled": "キャンセル済み", + "kubernetesSessionCompleted": "完了", + "kubernetesSessionCreated": "作成済み", + "kubernetesSessionFailed": "失敗", + "kubernetesSessionIdle": "アイドル", + "kubernetesHideSessionDetails": "セッションの詳細を非表示", + "kubernetesSessionRunning": "実行中", + "kubernetesShowSessionDetails": "セッションの詳細を表示", + "kubernetesSessionStarting": "開始中", + "kubernetesSessionStateValue": "セッションの状態: {{value}}", + "kubernetesSessionWaitingForInput": "入力待ち", + "kubernetesStatusFailed": "失敗", + "kubernetesStatusPending": "保留中", + "kubernetesStatusRunning": "実行中", + "kubernetesStatusSucceeded": "成功", + "kubernetesStatusTerminated": "終了", + "kubernetesStatusUnknown": "不明", + "kubernetesStatusWaiting": "待機中", + "kubernetesPodStateValue": "Pod状態: {{value}}", + "kubernetesContainerStateValue": "メインコンテナ状態: {{value}}", + "kubernetesStepConfiguration": "設定", + "kubernetesStepDiscovery": "API検出", + "kubernetesStepExistingClaim": "既存のクレーム", + "kubernetesStepNamespace": "名前空間アクセス", + "kubernetesStepPodAdmission": "Podアドミッション", + "kubernetesStepPvcAdmission": "PVCアドミッション", + "kubernetesStepRbac": "必要な権限", + "kubernetesStepStreaming": "Exec と port-forward のストリーミング", + "kubernetesStorageClass": "ストレージクラス", + "kubernetesStorageClassHelp": "任意。空のままならクラスタ既定を使う。", + "kubernetesTest": "Kubernetesをテスト", + "kubernetesTestFailed": "テスト失敗", + "kubernetesTestPassed": "テスト成功", + "kubernetesTestRequestFailed": "Kubernetesテスト要求が失敗した。", + "kubernetesTesting": "テスト中...", + "kubernetesTimeoutInvalid": "要求タイムアウトは1から300までの整数である必要がある。", + "kubernetesWarnings": "警告", + "kubernetesWorkloadDescription": "Kandevが起動、ID、workspaceフィールドを厳密に管理しつつ、Pod形状を定義する。", + "kubernetesWorkloadTitle": "ワークロードテンプレート", + "kubernetesWorkspace": "ワークスペース", + "kubernetesWorkspaceDescription": "使い捨てPodストレージ、Kandev管理クレーム、既存クレームから選ぶ。", + "kubernetesWorkspaceEmptyDir": "空ディレクトリ", + "kubernetesWorkspaceExistingClaim": "既存のクレーム", + "kubernetesWorkspaceManagedPvc": "管理された永続クレーム", + "kubernetesWorkspaceMode": "ワークスペースストレージ", + "kubernetesWorkspaceModeHelp": "ワークスペースの寿命と、適用するストレージ項目を制御する。", + "kubernetesWorkspaceSize": "クレームサイズ", + "kubernetesWorkspaceSizeHelp": "10Giのような、正のKubernetesストレージ量。", + "kubernetesWorkspaceSizeRequired": "管理クレームのサイズが必要。", + "kubernetesWorkspaceTitle": "ワークスペースストレージ", + "kubernetesWorkspaceValue": "ワークスペース: {{value}}", + "kubernetesWrongExecutorType": "このexecutorはKubernetes executorではない。", + "sshActiveSessions": "アクティブなセッション", + "sshActiveSessionsDescription": "このSSHホストで現在実行中のセッション。90秒ごとに更新。", + "sshAvailableAgents": "このホストで利用可能なエージェント", + "sshAvailableAgentsDescription": "選択したログインシェル下で、有効な各エージェントについてリモートの{{pathVar}}を確認。エージェントが見つからない場合は、インストールヒントをコピーしてリモートで実行。", + "sshBinary": "バイナリ", + "sshConfirmRunningSessions_one": "このエグゼキューターには{{count}}件の実行中セッションあり。現在のホストで実行し続ける。保存後に開始した新しいセッションだけ更新済み設定を使う。続行する?", + "sshConfirmRunningSessions_other": "このエグゼキューターには{{count}}件の実行中セッションあり。現在のホストで実行し続ける。保存後に開始した新しいセッションだけ更新済み設定を使う。続行する?", + "sshConnectionDescription": "SSHで到達できる Linux amd64 または macOS ホストでエージェントを実行。", + "sshConnectionTestFailed": "接続テスト失敗", + "sshConnectionTestPassed": "接続テスト成功", + "sshCopyInstallHint": "インストールヒントをコピー", + "sshCreateDescription": "リモートの Linux amd64 または macOS ホストに接続し、そこで agentctl を実行。", + "sshExecutorPageDescription": "接続設定を編集するか、ホストを再信頼。既存セッションは前の設定のスナップショットを保持。", + "sshFailedToLoadSessions": "セッション読み込み失敗", + "sshFailedToProbeAgents": "エージェントの検出失敗", + "sshFailedToReachBackend": "バックエンドに到達失敗", + "sshFailedToSaveExecutor": "エグゼキューター保存失敗", + "sshFailedToSaveShell": "シェル保存失敗", + "sshFingerprintChanged": "警告: このフィンガープリントは現在固定中のもの (<1>{{fingerprint}}) と違う。信頼すると固定済みキーを上書き。予期しないホスト再キー化なら、ここで止める。", + "sshFingerprintObserved": "検出したホストフィンガープリント:", + "sshHostAliasHint": "設定ありなら、config から HostName / Port / User / IdentityAgent / IdentityFile / ProxyJump を継承。", + "sshHostAliasLabel": "{{path}} からのホスト別名 (任意)", + "sshIdentityFileHint": "パスフレーズ保護キーは先に ssh-agent に読み込み必要。", + "sshIdentityFilePath": "Identity file パス", + "sshIdentitySource": "識別元", + "sshIdentitySourceAgent": "{{program}} ({{envVar}})", + "sshIdentitySourceFile": "Identity file (秘密鍵パス)", + "sshInstallHint": "インストールヒント", + "sshInstallHintCopied": "インストールヒントをコピー済み", + "sshInstalled": "インストール済み", + "sshLocalForward": "ローカル転送", + "sshLoginShell": "ログインシェル", + "sshMissing": "見つからない", + "sshNamePlaceholder": "マイVPS", + "sshNoActiveSessions": "アクティブなセッションなし。", + "sshNoEnabledAgents": "検出する有効なエージェントなし。", + "sshNoHintAvailable": "利用可能なヒントなし", + "sshPinnedFingerprint": "固定済みフィンガープリント:", + "sshProbeAgents": "エージェント検出", + "sshProbeError": "検出エラー", + "sshProbeHint": "「{{button}}」をクリックして、リモートにインストールされているエージェントを確認します。", + "sshProxyJumpHint": "単一の踏み台ホップのみ対応しています。連続したジャンプはサポートされていません。", + "sshProxyJumpLabel": "ProxyJump(任意)", + "sshReclaimTaskDirDescription": "{{host}}で実行される各タスクは、終了後もチェックアウトを{{path}}に保持します。そのため、再開したタスクやアーカイブ解除したタスクは、作業を中断した場所から再開できます。", + "sshReclaimTaskDirLabel": "タスクがアーカイブまたは削除されたときに、そのタスクのディレクトリを削除する", + "sshReclaimTaskDirTitle": "リモートのタスクディレクトリ", + "sshReclaimTaskDirWarning": "削除は永続的で、Kandevが所有していないマシンである{{host}}上で行われます。未コミットの変更、未プッシュのコミット、またはスタッシュを含む場合、あるいは別のタスクと共有されている場合は、ディレクトリは常に保持されます。タスクのアーカイブ解除を行うと、リポジトリが再度クローンされます。", + "sshRemotePort": "リモートポート", + "sshReprobe": "再確認", + "sshShellNotDetected": "(検出されませんでした)", + "sshTestAndTrustToSave": "接続をテストし、そのフィンガープリントを信頼して保存してください。", + "sshTestConnection": "接続をテスト", + "sshTestResultStale": "このテストの実行後に接続フィールドを変更しました。信頼して保存する前に、もう一度「接続をテスト」を実行してください。", + "sshTrustThisHost": "<0>このホストを信頼します。 上記のフィンガープリントが自分のサーバーと一致することを確認しました。今後、異なるフィンガープリントを報告する接続は拒否されます。", + "sshTrusted": "信頼済み", + "sshUnverified": "未確認", + "status": "ステータス", + "stop": "停止", + "success": "成功", + "task": "タスク", + "testConnection": "接続をテスト", + "theRemoteDockerHostUrlTcp": "リモートの Docker ホスト URL({{schemes}})。", + "thisActionCannotBeUndone": "この操作は元に戻せません。", + "tlsCertificatePath": "TLS証明書のパス", + "tlsVerify": "TLS検証", + "tokenConfiguredButUnableToConnect": "トークンは設定されていますが、接続できません。", + "typeLocal": "ローカル", + "typeKubernetes": "Kubernetes", + "typeTokenToConfirmDeletion": "削除を確認するには「{{token}}」と入力してください。この操作は元に戻せません。", + "typeWorktree": "ワークツリー", + "unknownError": "不明なエラー", + "unknownExecutorType": "不明な実行タイプ", + "untrackedTask": "未追跡", + "uptime": "稼働時間", + "useDefaults": "デフォルトを使用", + "useLocalGitConfig": "ローカルの git config を使用", + "usedByRemoteExecutorsForCommit": "リモート実行環境のコミット作成者設定に使用されます。", + "user": "ユーザー", + "usesTheLocalDockerDaemonOn": "このマシン上のローカル Docker デーモンを使用します。", + "value": "値", + "verifyingConnection": "接続を確認中...", + "profileNameExample": "本番環境, 開発環境", + "allowUserNamespacesTitle": "ユーザー名前空間サポート", + "allowUserNamespacesDescription": "コンテナ内で権限なしユーザーの名前空間作成と mount 操作を許可。bwrap みたいなサンドボックスツールが使える。", + "allowUserNamespacesNote": "この設定が効くのは新規作成コンテナだけ。変更を反映するには、既存タスク環境をリセットする必要あり。", + "allowUserNamespacesWarning": "有効にすると、Docker のデフォルト AppArmor 制限をオプトイン済みコンテナに対して無効化。user-namespace サンドボックスが必要な信頼済み agent runtime だけで有効にすること。" +} diff --git a/apps/web/src/locales/ja/failedInbox.json b/apps/web/src/locales/ja/failedInbox.json new file mode 100644 index 0000000000..32c0de042a --- /dev/null +++ b/apps/web/src/locales/ja/failedInbox.json @@ -0,0 +1,18 @@ +{ + "tabLabel": "失敗", + "openTask": "タスクを開く", + "reasonUnknown": "失敗理由は記録されていない。", + "unknownFailureTime": "失敗時刻不明", + "originAgentCreated": "agent が作成", + "originRoutine": "routine が作成", + "originOnboarding": "オンボーディング中に作成", + "originAutomationRun": "自動化実行", + "originAutomationTask": "自動化が作成", + "originGeneric": "自動化済み", + "emptyTitle": "{{workspace}} で失敗はない。", + "emptyTitleUnnamedWorkspace": "この workspace で失敗はない。", + "emptyDescription": "失敗タスクはトリアージ用にここへ出る。サイドバー合計には入らない。", + "errorTitle": "失敗タスクを読み込めない", + "errorDescription": "この workspace で失敗したタスクの読み込み中に問題発生。自動で再試行する。", + "truncatedNotice": "最初の失敗タスクだけ表示中。続きは待機中。" +} diff --git a/apps/web/src/locales/ja/github.json b/apps/web/src/locales/ja/github.json new file mode 100644 index 0000000000..c6d5558b9f --- /dev/null +++ b/apps/web/src/locales/ja/github.json @@ -0,0 +1,654 @@ +{ + "views": "ビュー", + "viewPicker": "ビュー: {{view}}", + "loadingSavedQueries": "保存済みクエリを読み込み中...", + "savedQueriesLoadFailed": "保存済みクエリを読み込めませんでした。", + "pageOf": "{{total}} 件中 {{page}} ページ目", + "choosePage": "結果ページを選択", + "resultRange": "{{total}} 件中 {{start}}–{{end}}", + "previousPage": "前のページ", + "nextPage": "次のページ", + "aRegistrationCanBeReusedAcross": "登録は複数 workspace で再利用できる。仕事用と個人用 Apps を分けてもいい。各 workspace は自分の認証情報を選ぶし、インストールする。", + "accountsUnavailable": "アカウント使用不可", + "actionPromptPlaceholderHelp": "{{token}} を入力すると利用可能なプレースホルダーを表示。アクション実行時に <4>{{url}} と <7>{{title}} が置換される。", + "actions": "アクション", + "active": "有効", + "addAll": "すべて追加", + "addAllCommentsToChatContext": "すべてのコメントを chat context に追加", + "addAllFailedChecksToChat": "失敗したチェックをすべて chat context に追加", + "addAllReviewsToChatContext": "すべてのレビューを chat context に追加", + "addAllToChatContext": "すべてを chat context に追加", + "addAnExistingGithubApp": "既存の GitHub App を追加", + "addExistingApp": "既存 App を追加", + "addIssueAction": "issue アクションを追加", + "addIssueQuery": "issue クエリを追加", + "addPrAction": "PR アクションを追加", + "addPrQuery": "PR クエリを追加", + "addRepository": "リポジトリを追加", + "addToChatContext": "chat context に追加", + "addWatch": "Watch を追加", + "addWholeThreadToChatContext": "スレッド全体を chat context に追加", + "addedToChatContext": "chat context に追加済み", + "agentProfile": "エージェント プロファイル", + "allRepos": "全 repo", + "allRepositories": "全リポジトリ", + "allRepositoriesAllowedByThisWorkspace": "この workspace で許可された全リポジトリ", + "allowsInstallationElsewhereItDoesNot": "別場所へのインストールを許可。Marketplace には公開しないし、repo も付与しない。", + "anErrorOccurred": "エラーが発生", + "anExecutorProfileGhTokenOr": "executor-profile の {{ghToken}} か {{githubToken}} が、その task の managed workspace 認証情報を上書きする。", + "anImportedAppMustHaveAt": "import した App には、少なくともこれらの repository 権限と購読イベントが必要。", + "apiRateLimit": "API レート制限", + "appId": "アプリ ID", + "appInstallationFailed": "アプリのインストール失敗", + "approvalRate": "承認率", + "approveAs": "{{mutationActor}}として承認", + "approved": "承認済み", + "approving": "承認中...", + "authenticationUnavailable": "認証できない", + "auto": "自動", + "autoFix": "自動修正", + "autoFixEnabledAria": "自動修正有効", + "autoFixEnabledWithRoundsAria": "自動修正有効, {{current}} / {{max}} ラウンド使用", + "autoFixExhausted": "自動修正一時停止", + "autoFixExhaustedAria": "{{current}} / {{max}} ラウンド到達で自動修正一時停止", + "autoFixCiAndAddressComments": "CI自動修正とコメント対応", + "autoFixPrompt": "自動修正プロンプト", + "autoFixPromptDescription": "このプロンプトはこのタスクだけで使う。空欄ならデフォルトプロンプト使う。PRフィードバック、通常のマージ競合コンテキスト、実行可能なキュー削除コンテキスト、利用可能な失敗済みマージグループチェックを含めたい時は <0>{{placeholder}} を追加。", + "autoFixRoundExplanation": "このPRで自動修正は {{current}} / {{max}} ラウンド使用。ラウンド数えるのは、Kandev が CI 自動修正メッセージを送るかキューに入れた時。新しい CI 自動修正ターン始める前に、Kandev は全PRチェック完了まで待つ。だからエージェントは最終失敗チェック、現在コメント、通常マージ競合、実行可能なマージキュー削除をまとめて受け取る。すでにキュー済みの自動修正メッセージ更新では、追加ラウンド消費しない。これが {{max}}/{{max}} で、更新待ち自動修正メッセージがもうなければ、Kandev はこのPRの自動修正を一時停止して無限ループ防ぐ。手動レビュー後に自動修正を無効化して再有効化すると最初からやり直し。ターンが記録済み結果なしで終わった場合、Kandev は同じ確定済みフィードバックを再試行でき、その再試行で別ラウンド使う。アクション実行済み結果後は、Kandev はプロバイダ進行待ってから再試行する。非実行可能またはブロック済み結果は未変更フィードバックを確認するだけで、再試行しない。", + "autoMerge": "自動マージ", + "autoMergeEnabledAria": "自動マージ有効", + "autoMergeWhenReady": "準備でき次第、自動マージ", + "automaticallyCreateTasksForGithubIssues": "条件に合う GitHub issue からタスクを自動作成。", + "automaticallyCreateTasksForPrsThat": "レビューが必要な PR からタスクを自動作成。", + "automaticallyCreateTasksWhenNewGithub": "新しい GitHub issue が条件に合う時、タスクを自動作成。", + "automaticallyCreateTasksWhenNewPull": "新しい pull request にレビュー必要な時、タスクを自動作成。", + "automation": "自動化", + "automationForPr": "PR #{{number}} のみに適用", + "available": "利用可能", + "availablePlaceholders": "利用可能なプレースホルダ:", + "avgTimeToMerge": "平均マージ時間", + "backToRegisteredApps": "登録済み Apps に戻る", + "behindBase": "ベースより遅れ", + "bestForPersonalOrCompanyInternal": "個人用か社内用自動化に最適。", + "blocked": "ブロック中", + "blockedByBranchProtection": "ブランチ保護でブロック中", + "blockedGeneric": "必要なレビュー、コードオーナー、リポジトリルールの確認まだ必要。", + "blockedNeedsApprovals_one": "マージ前にあと {{count}} 件承認必要。", + "blockedNeedsApprovals_other": "マージ前にあと {{count}} 件承認必要。", + "blockedStatusCheck": "必須ステータスチェックまだ通ってない。", + "botComments": "Bot コメント (", + "byAuthorOpenedAgo": "{{author}} 作成 · {{time}}にオープン", + "changeConnection": "接続変更", + "changeGithubConnection": "GitHub接続を変更", + "changesRequested": "変更が要求されています", + "checkBucketFailed": "失敗", + "checkBucketInProgress": "進行中", + "checkBucketPassed": "完了", + "checkNow": "今すぐ確認", + "checkingForNewIssues": "新しい issue を確認しています...", + "checkingForNewPrs": "新しい PR を確認しています...", + "checkingGithubConnection": "GitHub 接続を確認しています...", + "checkingGithubStatus": "GitHub の状態を確認しています…", + "checksFailed": "チェックに失敗しました", + "checksFailedCount_one": "{{count}} 件失敗", + "checksFailedCount_other": "{{count}} 件失敗", + "checksPassed": "チェックに合格しました", + "checksPassedCount_one": "{{count}} 件合格", + "checksPassedCount_other": "{{count}} 件合格", + "checksPendingCount_one": "{{count}} 件保留", + "checksPendingCount_other": "{{count}} 件保留", + "checksRunning": "チェック実行中", + "checksNotSuccessful": "チェックが成功しませんでした", + "chooseAGithubApp": "GitHub App を選択", + "chooseHowNewlyLaunchedTasksAuthenticate": "新しく起動したタスクが GitHub にどのように認証するかを選択してください。これは上記のワークスペース自動化接続には影響しません。", + "chooseMergeMethod": "マージ方法を選択", + "chooseTheAutomationAndPersonalIdentities": "このワークスペースで使用する自動化用と個人用の ID を選択してください。", + "chooseTheExactAccountKandevDoes": "正確なアカウントを選択してください。Kandev は CLI のアクティブアカウントの変更を自動では追従しません。", + "ciChecks": "CI チェック{{summary}}", + "ciPassRate": "CI 合格率", + "cleanUpClosed": "クローズ済みをクリーンアップ", + "cleanUpMerged": "マージ済みをクリーンアップ", + "cleaning": "クリーンアップ中…", + "cleanupBehavior": "クリーンアップの動作", + "cleanupFailed": "クリーンアップに失敗しました", + "cleanupPolicyAlways": "常に削除", + "cleanupPolicyAlwaysDescription": "常に削除 は保持設定より優先されます。ユーザーの関与や PR ライフサイクルのプロンプトが有効なタスクでも、マージまたはクローズ時に削除します。", + "cleanupPolicyAuto": "自動. 推奨", + "cleanupPolicyAutoDescription": "ユーザーの関与や PR ライフサイクルのプロンプトが有効な場合は、マージ済みまたはクローズ済みの PR タスクを保持します。それ以外は削除します。", + "cleanupPolicyNever": "自動削除しない", + "cleanupPolicyNeverDescription": "すべてのタスクを保持します。タスクリストから手動で削除してください。", + "cliAccountActiveSuffix": " - アクティブ", + "clientId": "クライアント ID", + "clientSecret": "クライアントシークレット", + "closePrStatus": "PRクローズ状態", + "closed": "クローズ済み", + "comments": "コメント", + "configureTheExistingAppOnGithub": "GitHub上の既存アプリを設定する", + "conflicts": "競合", + "connectGithub": "GitHubに接続", + "connectIdentity": "IDを接続", + "connectYourPersonalGithubIdentityTo": "担当のプルリクエストと課題を表示するために、個人のGitHub IDを接続してください。", + "connectionMethod": "接続方法", + "continueOnGithub": "GitHubで続行", + "controlsHowNewlyLaunchedTasksAuthenticate": "新しく起動したタスクが、Git HTTPS と gh コマンドで GitHub に認証する方法を制御します。管理対象ワークスペースの認証情報は Kandev のワークスペース接続を使用し、実行者の認証情報は選択した実行者の Git または SSH 設定を使用します。", + "copy": "{{label}}をコピー", + "couldNotLoadGithubCliAccounts": "GitHub CLI アカウントを読み込めませんでした。{{error}}", + "create": "作成", + "createAGithubApp": "GitHub Appを作成", + "createIssueWatch": "Issue Watchを作成", + "createNewApp": "新しいAppを作成", + "createReviewWatch": "Review Watchを作成", + "created": "作成済み", + "createdByKandev": "Kandev により作成", + "credentialUsedForRepositorySyncWatches": "リポジトリの同期、ウォッチ、管理対象エージェントの git と gh コマンドに使用される認証情報です。実行者プロファイルのトークンが優先されます。", + "currentGithubApiRateAndQuery": "このワークスペース接続の現在の GitHub API レートとクエリの制限です。", + "customQuery": "カスタムクエリ", + "customQueryPressEnterEG": "カスタムクエリ。Enter を押してください。例: \"is:open review-requested:@me\"", + "defaultQueries": "既定のクエリ", + "defaultQueriesAreStillLoading": "既定のクエリをまだ読み込み中です。", + "defaultQueriesSaved": "既定のクエリを保存しました", + "defaultRepository": "既定のリポジトリ", + "delete": "削除", + "deletedTasks_one": "{{count}}件のタスクを削除しました", + "deletedTasks_other": "{{count}}件のタスクを削除しました", + "disconnect": "接続を解除", + "disconnectFailed": "接続解除に失敗しました", + "draft": "下書き", + "eGBugEnhancementPriorityHigh": "例: {{examples}}", + "eGNeedsMyReview": "例: レビューが必要", + "editAutoFixPromptForThis": "このタスクの自動修正プロンプトを編集", + "editDefaultPrompt": "既定のプロンプトを編集", + "editDetails": "詳細を編集", + "editIssueWatch": "Issue Watch を編集", + "editPrompt": "プロンプトを編集", + "editReviewWatch": "Review Watch を編集", + "enable": "有効にする", + "enabled": "有効", + "enterANameUpTo100Characters": "100文字以内の名前を入力してください。", + "enterAPublicHostNotLocalhost": "localhost ではなく、公開ホストを入力してください。", + "enterAPublicHttpsOrigin": "公開 HTTPS オリジンを入力してください。", + "enterAValidGithubAccountLogin": "有効な GitHub アカウントのログイン名を入力してください。", + "enterAnOriginWithoutAPath": "パス、クエリ、フラグメントを含まないオリジンを入力してください。", + "enterTheAppClientId": "App のクライアント ID を入力してください。", + "enterTheAppClientSecret": "App のクライアントシークレットを入力してください。", + "enterTheGithubAppSlug": "GitHub App の slug を入力してください。", + "enterTheNumericGithubAppId": "数値の GitHub App ID を入力してください。", + "enterTheWebhookSecret": "Webhook シークレットを入力してください。", + "executorProfile": "実行者プロファイル", + "explainAutoFixRounds": "自動修正ラウンドについて説明", + "explainCiAutomationOptions": "CI 自動化オプションについて説明", + "explainFinalPrStateNotifications": "最終的な PR 状態の通知について説明", + "explainHowManagedTaskCredentialsWork": "管理対象タスクの認証情報の仕組みについて説明", + "explainRepositoryScope": "リポジトリのスコープについて説明", + "explainReviewRequestNotifications": "レビュー依頼通知について説明", + "explainTaskGitAccess": "タスクの Git アクセスについて説明", + "explainWorkspaceGithubIdentity": "ワークスペースの GitHub ID について説明", + "failedToApprove": "承認できませんでした", + "failedToCheckForIssues": "Issue を確認できませんでした", + "failedToCheckForPrs": "PR を確認できませんでした", + "failedToDeleteIssueWatch": "Issue Watch を削除できませんでした", + "failedToDeleteReviewWatch": "Review Watch を削除できませんでした", + "failedToLoadGithubWorkspaceSettings": "GitHub ワークスペース設定を読み込めませんでした", + "failedToMerge": "マージできませんでした", + "failedToReRequestReview": "レビューを再依頼できませんでした", + "failedToResetIssueWatch": "Issue Watch をリセットできませんでした", + "failedToResetReviewWatch": "Review Watch をリセットできませんでした", + "failedToSaveDefaultQueries": "デフォルトのクエリを保存できませんでした", + "failedToSaveGithubWorkspaceSettings": "GitHub ワークスペース設定を保存できませんでした", + "failedToSaveQuickActions": "クイックアクションを保存できませんでした", + "failedToUnlinkPullRequest": "プルリクエストのリンクを解除できませんでした", + "filter": "フィルター", + "filterGithubResultsByRepository": "GitHub の結果をリポジトリで絞り込む", + "filterRepositories": "リポジトリを絞り込み...", + "filters": "フィルター", + "forWebhooksChooseContentType": "Webhook では、コンテンツタイプに <1>{{contentType}} を選び、SSL 検証は有効のままにする。", + "foundNewIssues_one": "{{count}} 件の新しい issue を見つけた", + "foundNewIssues_other": "{{count}} 件の新しい issue を見つけた", + "foundNewPrs_one": "{{count}} 件の新しい PR を見つけた", + "foundNewPrs_other": "{{count}} 件の新しい PR を見つけた", + "general": "(全般)", + "generateSetupInstructions": "セットアップ手順を生成", + "githubAccessSettingsSaved": "GitHub アクセス設定を保存した", + "githubApiAccessIsExhaustedFor": "{{resources}} の GitHub API アクセス上限に達した。バックグラウンドの PR と issue チェックは、最後の上限リセット {{reset}} まで一時停止する。", + "githubApiLimits": "GitHub API 制限", + "prDiscoveryFailed": "PR 検出に失敗", + "prDiscoveryCategory": "理由: {{category}}", + "prDiscoveryCategoryInvalidQuery": "無効なクエリ", + "prDiscoveryCategoryRateLimited": "レート制限", + "prDiscoveryCategoryUnavailable": "利用不可", + "prDiscoveryLastFailure": "最後の失敗: {{time}}", + "prDiscoveryAffectedTargets_one": "影響を受けた対象: {{count}}", + "prDiscoveryAffectedTargets_other": "影響を受けた対象: {{count}}", + "prDiscoveryRetryAt": "{{time}}に再試行", + "prDiscoveryUnknownTime": "不明な時刻", + "githubApp": "GitHub アプリ", + "githubAppAdded": "GitHub App を追加した", + "githubAppConfigurationInstructions": "GitHub App の設定手順", + "githubAppConnected": "GitHub App 接続済み", + "githubAppCouldNotBeImported": "GitHub App をインポートできなかった", + "githubAppImportedItIsReady": "GitHub App をインポートした。インストール準備完了。", + "githubAppPermissions": "GitHub App 権限", + "githubAppSetupCancelled": "GitHub App セットアップをキャンセルした", + "githubAppSetupCouldNotStart": "GitHub App セットアップを開始できなかった", + "githubAppSlug": "GitHub App スラッグ", + "githubAuthenticationLost": "GitHub 認証を失った。", + "githubCli": "GitHub CLI", + "githubCliAccount": "GitHub CLI アカウント", + "githubDidNotReturnARedirectUrl": "GitHub がリダイレクト URL を返さなかった", + "githubDidNotReturnAnInstallationUrl": "GitHub がインストール URL を返さなかった", + "githubIdentityConnected": "GitHub ID を接続した", + "githubIntegration": "GitHub 統合", + "githubIsNotConnectedConfigureWorkspace": "GitHub は未接続。gh CLI か personal access token で workspace 自動化を設定する。", + "githubIsReadyToCreateThe": "GitHub は App を作成する準備ができました", + "githubMustReachThisHttpsOrigin": "GitHub は、署名付き Webhook とコールバックのためにこの HTTPS オリジンへ到達できる必要があります。", + "githubOwnerLogin": "GitHub オーナーのログイン名", + "githubSearchQuerySupportsFullGithub": "GitHub の検索クエリ。最大限の柔軟性のため、GitHub の完全な検索構文に対応しています。", + "githubSearchQueryWhenSetOverrides": "GitHub の検索クエリ。設定すると、上のラベルフィルターより優先されます。", + "githubSetupWasNotCompleted": "GitHub のセットアップは完了しませんでした", + "githubWillShowTheGeneratedPermissions": "GitHub に生成された権限が表示され、確認を求められます。GitHub から戻ると登録が追加されます。このワークスペースへのインストールは、引き続き明示的な手順です。", + "githubWorkspaceSettingsSaved": "GitHub ワークスペースの設定を保存しました", + "graphqlQueryLimit": "GraphQL クエリの上限", + "group": "グループ", + "hidePrompt": "プロンプトを非表示", + "hideToken": "トークンを非表示", + "hint": "ヒント", + "hintOptional": "ヒント(任意)", + "howManagedTaskCredentialsWork": "管理されたタスク認証情報の仕組み", + "howOftenToCheckForNew": "新しい issue を確認する頻度。最小 60 秒、最大 3600 秒。", + "howOftenToCheckForNew2": "新しい PR を確認する頻度。最小 60 秒、最大 3600 秒。", + "icon": "アイコン", + "identityConnectionFailed": "ID 接続に失敗しました", + "importSetupCouldNotStart": "インポートのセットアップを開始できませんでした", + "imported": "インポート済み", + "inUse": "使用中", + "inbox": "受信トレイ", + "inheritExecutorGitCredentials": "実行者の Git 認証情報を継承", + "initialStepForNewTasks": "新しいタスクの初期ステップ。", + "initialStepForNewTasksAuto": "新しいタスクの初期ステップ。ステップに自動開始が設定されています。", + "insertPrFeedback": "PR フィードバックを挿入", + "installAGithubAppAboveTo": "上の GitHub App をインストールして、ワークスペース接続を変更します。タスクへのアクセスは、インストール完了後に保存できます。", + "installForThisWorkspace": "このワークスペースにインストール", + "interval": "間隔", + "issue": "Issue #{{number}}", + "issue2": "Issue #", + "issueCleanupPolicyAlwaysDescription": "タスクに対応していても、クローズ時に削除します。", + "issueCleanupPolicyAutoDescription": "メッセージを入力していない限り、クローズされた issue のタスクを削除します。", + "issueWatch": "issue監視", + "issueWatchCreated": "Issue watch を作成しました", + "issueWatchDeleted": "Issue watch を削除しました", + "issueWatchNotFound": "Issue watch が見つかりませんでした", + "issueWatchPromptHelp": "新しい issue ごとにエージェントへ送信されるプロンプトです。{{token}} を入力するとプレースホルダーを挿入できます。", + "issueWatchUpdated": "Issue watch を更新しました", + "issueWatches": "Issue の監視", + "issues": "Issue", + "kandevBrokersTheWorkspacePatNamed": "Kandev は、このタスク用に workspace PAT、GitHub CLI account という名前、または App identity を仲介する。GitHub HTTPS と gh 用。", + "kandevFirstReservesExactCallbackAnd": "Kandev はまず正確な callback URL と webhook URL を確保し、そのあと GitHub の App 設定へ案内する。既存 workspace access は、import した App を install するまで変わらない。", + "kandevGeneratesTheExactAppPolicy": "Kandev は正確な App policy を生成する。GitHub で作成を確認すると、Kandev がこの registration を保存し、workspace から選べるようにする。", + "kandevManagedOperationsActAs": "Kandev-managed operations は {{actor}} として動く。", + "kandevManagedOperationsUseTheGithub": "Kandev-managed operations は {{actor}} 用に install された GitHub App を使う。", + "kandevStoresThisTokenForThis": "Kandev はこの token をこの workspace に保存する。GitHub は action を token owner として記録する。", + "kandevUsesThisWorkspaceConnectionFor": "Kandev はこの workspace connection を repository sync, watches, background jobs, managed agent GitHub commands に使う。PAT または GitHub CLI account の場合、My GitHub と、あなたが起動した actions は同じ human identity を使う。", + "kindIssue": "issue", + "kindPullRequest": "pull request", + "label": "ラベル", + "labels": "ラベル", + "labelsCommaSeparated": "ラベル(カンマ区切り)", + "lastPolled": "最終ポーリング", + "legacySharedConnection": "旧 shared connection", + "limitsGithubPullRequestsAndIssues": "この workspace で表示または import される GitHub pull request と issue を制限する。", + "loadingAccounts": "アカウントを読み込み中...", + "loadingOrganizations": "organization を読み込み中...", + "loadingRegisteredApps": "登録済み App を読み込み中...", + "loadingTaskAccess": "task access を読み込み中…", + "localAndWorktreeTasksUseHost": "Local と Worktree の task は host から見える Git または SSH credentials を使う。Docker, SSH, cloud task は、その executor で設定された credentials を使う。", + "managedWorkspaceCredentials": "管理対象 workspace credentials", + "me": "自分", + "meMyTeams": "自分と自分の team", + "mergeable": "Merge 可能", + "mergeConflictsWith": "Merge conflict 相手", + "mergeMethodDefault": "PR を merge", + "mergeMethodMergeCommit": "Merge commit を作成", + "mergeMethodMergeCommitShort": "マージコミット", + "mergeMethodRebase": "Rebase して merge", + "mergeMethodRebaseShort": "Rebase", + "mergeMethodSquash": "Squash して merge", + "mergeMethodSquashShort": "Squash", + "merged": "マージ済み", + "merging": "Merging...", + "missing": "なし", + "mode": "モード", + "myGithubIdentity": "自分の GitHub identity", + "myGithubNowUsesYourVerified": "My GitHub は、確認済み personal identity を使うようになった。", + "name": "名前", + "nameInKandev": "Kandevでの名前", + "needsAttention": "対応必要", + "never": "しない", + "noAutomationConnection": "自動化接続なし", + "noChecks": "チェックなし", + "noChecksHaveStarted": "まだチェック開始なし", + "noCommentsYet": "まだコメントなし", + "noGhAccountsFound": "ghアカウント見つからず", + "noGithubAppsAreRegisteredYet": "まだ登録済みGitHub Appなし。既存Appを追加するか、下で新規作成。", + "noIssueWatchesConfiguredCreateOne": "Issue監視なし。1つ作成してGitHub issue監視を開始。", + "noIssuesMatchThisFilter": "このフィルターに一致する issue なし。", + "noNewIssuesFound": "新しい issue なし", + "noNewPrsFound": "新しい PR なし", + "noPullRequestLinkedToThis": "このセッションに紐づく pull request なし。", + "noPullRequestsMatchThisFilter": "このフィルターに一致する pull request なし。", + "noReposFoundFor": "\"{{org}}\" に該当するリポジトリなし", + "noRepositoriesFound": "リポジトリなし。", + "noReviewWatchesConfiguredCreateOne": "レビュー監視なし。1つ作成して PR 監視を開始。", + "noReviewsYet": "まだレビューなし", + "noSavedQueriesYet": "まだ保存済みクエリなし。", + "noStatsAvailableYet": "まだ統計なし。", + "noTaskCreatedYet": "まだタスクなし", + "noTasksToCleanUp": "片付けるタスクなし", + "noWorkspaceConfiguredCreateAWorkspace": "ワークスペース未設定。まずワークスペース作成して、PR/issue からタスク開始。", + "notMergeable": "マージ不可", + "omitThePlaceholderIfYouWant": "エージェントにブランチを pull または fetch させて GitHub 自体を確認させたいなら、プレースホルダー省略。Kandev のスナップショット受け取り不要。", + "onlyMatchIssuesWithTheseLabels": "このラベル付き issue のみ一致。空なら全 issue 対象。", + "onlyPrsWhereYouAreExplicitly": "明示的に reviewer 指名された PR のみ。チーム経由は除外。", + "onlyTheAppOwner": "App オーナーのみ", + "openDetails": "{{title}} の詳細を開く", + "openGithubAppSettings": "GitHub App 設定を開く", + "openGithubFilters": "GitHub フィルターを開く", + "openSettingsToSeePrsAndIssues": "pull request と issue を見るには、<0>GitHub 設定を開く。", + "optionalFallsBackToStepDefault": "任意。step デフォルトにフォールバック。", + "optionalFallsBackToStepDefault2": "任意。step デフォルトにフォールバック。エージェントが実行する executor 環境。", + "optionallyConnectYourGithubUserFor": "My GitHub と人間名義の操作用に、GitHub user を任意で接続。managed agent にこの identity は渡さない。workspace automation は App のまま継続。", + "or": "または", + "organization": "組織", + "organizations": "組織", + "otherGithubAccounts": "他の GitHub アカウント", + "overallLabel": "全体:", + "passRate": "合格率", + "pasteTheAppPrivateKey": "App の秘密鍵を貼り付けてください。", + "pause": "一時停止", + "pauseOrResumePolling": "ポーリングを一時停止、再開する。", + "paused": "一時停止中", + "pending": "保留中 {{pending}}", + "pendingReview": "レビュー待ち", + "pendingReviews_one": "保留中のレビュー {{count}} 件", + "pendingReviews_other": "保留中のレビュー {{count}} 件", + "permissionsAvailableToKandevThroughThis": "このワークスペースの GitHub App インストール経由で Kandev が使える権限。", + "personalAccessToken": "個人用アクセストークン", + "personalAccount": "個人アカウント", + "personalGithubIdentityDisconnected": "個人 GitHub ID の接続解除済み", + "personalOauth": "個人 OAuth", + "placeholderActionTitle": "PR または issue のタイトル", + "placeholderActionUrl": "PR または issue の URL", + "placeholderCommaSeparatedLabels": "カンマ区切りラベル", + "placeholderIssueAuthor": "issue 作成者のユーザー名", + "placeholderIssueBody": "issue 本文", + "placeholderIssueNumber": "issue 番号", + "placeholderIssueTitle": "issue タイトル", + "placeholderIssueUrl": "issue URL", + "placeholderPrAuthor": "PR 作成者のユーザー名", + "placeholderPrNumber": "PR 番号", + "placeholderPrTitle": "PR タイトル", + "placeholderPrUrl": "PR URL", + "placeholderRepository": "リポジトリ", + "placeholderSourceBranch": "ソースブランチ", + "placeholderTargetBranch": "ターゲットブランチ", + "pollIntervalSeconds": "ポーリング間隔(秒)", + "pr": "PR #", + "prAnalytics": "PR 分析", + "prApproved": "PR 承認済み", + "prClosedWithoutMerging": "PR はマージせずクローズ", + "prEvents": "PR イベント", + "reviewFollowUp": "レビューのフォローアップ", + "prAddedToMergeQueue": "PR をマージキューに追加", + "prMerged": "PR をマージ済み", + "prTaskStatusCi": "CI", + "prTaskStatusMerge": "マージ", + "prTaskStatusNumber": "PR #{{number}}", + "prTaskStatusRepositoryNumber": "{{repository}} PR #{{number}}", + "prTaskStatusReview": "レビュー", + "prTaskStatusState": "状態", + "prepareAppOnGithub": "GitHubでAppを準備", + "presetIconBug": "バグ", + "presetIconCheck": "チェック", + "presetIconCode": "コード", + "presetIconEye": "目", + "presetIconMessage": "メッセージ", + "presetIconSearch": "検索", + "presetIconSparkle": "きらめき", + "presetIconTool": "ツール", + "pressEnter": "Enterを押す", + "private": "非公開", + "privateKeyPem": "秘密鍵({{extension}})", + "promptsShownOnGithubWhenStarting": "PRかissueからタスク開始時、{{route}}に表示されるプロンプト。", + "prs": "PR", + "prsByDay": "日別PR", + "prsCreated": "作成したPR", + "prsOnDay_one": "{{date}}: {{count}} PR", + "prsOnDay_other": "{{date}}: {{count}} PR", + "prsReviewed": "レビューしたPR", + "prsWhereYouOrAnyOf": "自分かチームの誰かがレビュワー指名されたPR", + "publicKandevUrl": "公開Kandev URL", + "pullRequestActivityForThisWorkspace": "このワークスペースのプルリクエスト活動。", + "pullRequestCiStatusAria": "プルリクエスト #{{number}} のCIステータス{{automation}}", + "pullRequestCiStatusReviewsAnd": "プルリクエストのCIステータス、レビュー、チェック要約。", + "pullRequestCount_one": "{{count}}件のプルリクエスト", + "pullRequestCount_other": "{{count}}件のプルリクエスト", + "pullRequestCountCiStatusAria_one": "{{count}}件のプルリクエストのCIステータス{{automation}}", + "pullRequestCountCiStatusAria_other": "{{count}}件のプルリクエストのCIステータス{{automation}}", + "pullRequestStatus": "プルリクエスト #{{number}} のステータス", + "pullRequestStatuses_one": "{{count}}件のプルリクエストステータス", + "pullRequestStatuses_other": "{{count}}件のプルリクエストステータス", + "pullRequests": "プルリクエスト", + "pullRequestsAndIssuesAcrossYour": "自分のリポジトリ全体のプルリクエストとissue。", + "pullRequestsLinkedToTask_one": "このタスクにリンクされたプルリクエスト{{count}}件。1件開く", + "pullRequestsLinkedToTask_other": "{{count}} 件のプルリクエストがこのタスクにリンク済み。1件開く", + "query": "クエリ", + "queryExample": "例: {{query}}", + "quickActions": "クイック操作", + "quickActionsAreStillLoading": "クイック操作、まだ読み込み中。", + "quickActionsSaved": "クイック操作、保存済み", + "rateLimitRemaining": "残り {{remaining}} / {{limit}} {{unit}}", + "rateLimitUnitPoints": "ポイント", + "rateLimitUnitRequests": "リクエスト", + "rateLimitUnknown": "不明", + "readyToMerge": "マージ準備完了", + "reRequestReview": "レビュー再依頼", + "reRequestReviewFrom": "{{author}} にレビュー再依頼", + "reconnectGithub": "GitHub を再接続", + "reconnectIdentity": "ID を再接続", + "refresh": "更新", + "refreshGithubConnection": "GitHub 接続を更新", + "remove": "削除", + "removeFromTask": "タスクから {{repo}} #{{prnumber}} を削除", + "repositories": "リポジトリ", + "repository": "リポジトリ", + "repositoryPermissions": "リポジトリ権限", + "repositoryScope": "リポジトリ範囲", + "repositoryScopeHelp": "このワークスペースで Kandev が検出する GitHub のプルリクエストと issue を制限。My GitHub の結果、レビューと issue の監視も含む。GitHub 権限やリポジトリアクセスは変更しない。", + "requesting": "要求中...", + "requiredGithubAppPolicy": "必須の GitHub App ポリシー", + "resetCompleteDeletedTasks_one": "リセット完了。{{count}} 件のタスクを削除。次回ポーリングで再インポート。", + "resetCompleteDeletedTasks_other": "リセット完了。{{count}} 件のタスクを削除。次回ポーリングで再インポート。", + "resetCompleteNextPollWillRe": "リセット完了。次回ポーリングで一致項目を再インポート。", + "resetWatch": "監視をリセット", + "resets": "· リセット {{reset}}", + "resolveConflicts": "競合を解決", + "resolvedFromOneNamedHostAccount": "必要時、1つの名前付きホストアカウントから解決。管理タスクはスコープ付き仲介 ID を受け取る。下で選択しない限り、ホスト Git は継承しない。", + "retry": "再試行", + "reviewPermissions": "レビュー権限", + "reviewReRequestedFrom": "{{reviewer}} にレビュー再依頼済み", + "reviewWatch": "レビュー監視", + "reviewWatchCreated": "レビュー監視を作成", + "reviewWatchDeleted": "レビュー監視を削除", + "reviewWatchNotFound": "レビュー監視が見つからない", + "reviewWatchPromptHelp": "新しい PR ごとにエージェントへ送るプロンプト。{{token}} でプレースホルダー挿入、{{mention}} で保存済みプロンプトを名前で参照。workflow step プロンプトと同じように展開される。これも同じ組み立て経由で task description になる。", + "reviewWatchUpdated": "Review watch 更新済み", + "reviewWatches": "レビュー監視", + "reviews": "Reviews{{summary}}", + "saveChanges": "変更を保存", + "saveCurrentQuery": "現在のクエリを保存", + "savePresetDescription": "この {{kind}} クエリをサイドバーに保存して、あとで素早くアクセス。", + "savePrompt": "プロンプトを保存", + "saveQuery": "クエリを保存", + "saved": "保存済み", + "savedQueryFallback": "保存済みクエリ", + "saving": "保存中...", + "savingChanges": "変更を保存中…", + "searchLimit": "検索上限", + "searchQuery": "検索クエリ", + "searching": "検索中...", + "selectWorkflow": "workflow を選択", + "selectWorkspace": "workspace を選択", + "selectedRepositories": "選択済みリポジトリ", + "selectWorkspaceBeforeRequestingReview": "review をリクエストする前に workspace を選択。", + "setTheseExactUrlsCreateAClientSecret": "表示順で 2 つの user authorization callback URL を追加。残り exact value を設定し、client secret と webhook secret を作成し、private key をダウンロード。この 1 回限りのセットアップは {{expiresAt}} で期限切れ。", + "showGithubApiLimits": "GitHub API 制限を表示", + "showLess": "表示を減らす", + "showMore": "さらに表示", + "showToken": "トークンを表示", + "sidebarQueriesShownOnGithubFor": "{{route}} 上の pull request と issue に表示されるサイドバー query。", + "signInWithGhAuthLogin": "<1>{{command}} でサインインして、このダイアログを再度開く。", + "someSettingsWereSavedButAnother": "一部設定は保存されたが、別の変更が失敗: {{detail}}", + "startOver": "最初からやり直す", + "stepLabelled": "Step: {{stepTitle}}", + "storedAppCredentialsMintShortLived": "保存された App 認証情報は短命の installation token を発行。managed task は、許可済みリポジトリ用のスコープ付き brokered App identity を受け取る。", + "storedEncryptedByKandevWorkspaceAutomation": "Kandev により暗号化して保存。workspace automation と managed task の GitHub HTTPS/gh は自分のアカウントとして動作。", + "subscribedEvents": "購読済みイベント", + "task": "タスク", + "taskAccess": "タスクアクセス:", + "taskAccessUnavailable": "Task access 利用不可", + "taskAutoFixPrompt": "タスク自動修正プロンプト", + "taskGitAccess": "タスク Git アクセス", + "taskLabelled": "Task: {{title}}", + "taskPrDetailsLoading": "pull request 詳細を読み込み中...", + "taskPrDetailsUnavailable": "プルリクエスト詳細は利用不可", + "taskPrompt": "タスクプロンプト", + "tasks": "タスク", + "tasksCreatedByThisWatcherLand": "このウォッチャーが作成したタスクは、選択中ワークスペースに入る。", + "theAppIsReadyToSelect": "このワークスペース向けに選択してインストールできる App が準備できた。", + "theExistingWorkspaceConnectionWasNot": "既存のワークスペース接続は変更されなかった。", + "theGithubResponseCouldNotBe": "GitHub 応答を検証できなかった。接続を確認して、もう一度試す。", + "thePlaceholderInsertsTheCurrentPr": "プレースホルダーは、現在の PR 識別子、キュー削除コンテキスト、正確な merge-group commit がある場合のみ新規または変更された失敗チェック、新規または変更されたレビューコメントを挿入する。", + "thePullRequestIsStillLinked": "プルリクエストはまだリンクされたまま。", + "theRepositoryWillBeAutomaticallyCloned": "リポジトリは、ワークスペースにまだなければ {{path}} に自動でクローンされる。", + "theSettingsCouldNotBeSaved": "設定を保存できなかった", + "theStoredAppCredentialsAreUnavailable": "保存済み App 認証情報は利用不可。", + "theWorkflowToCreateTasksIn": "タスク作成先のワークフロー。", + "theWorkspaceChangedBeforeTaskAccess": "ワークスペースが変わる前にタスクアクセスを保存できなかった", + "thisAccountAlsoPowersMyGithub": "このアカウントは My GitHub とユーザー起点アクションも動かす。", + "thisAppRegistrationIsShared_one": "この App 登録は {{count}} ワークスペースで共有される。登録変更は、これを使う全ワークスペースに影響する。インストールアクセスはワークスペース単位のまま。", + "thisAppRegistrationIsShared_other": "この App 登録は {{count}} ワークスペースで共有される。登録変更は、これを使う全ワークスペースに影響する。インストールアクセスはワークスペース単位のまま。", + "thisBranchCanTBeMerged": "このブランチは自動マージできない。マージ前に競合を解決して。", + "thisRepositoryOpensByDefaultYou": "このリポジトリはデフォルトで開く。クエリを開いたあとでフィルターを変えられる。", + "thisWorkspaceUsesOneCredentialFor": "このワークスペースは、リポジトリ同期、ウォッチ、バックグラウンドジョブ、管理エージェントの GitHub アクセスに 1 つの認証情報を使う。Executor プロファイルの認証情報が優先されることもある。", + "titleIssues": "課題", + "titlePullRequests": "プルリクエスト", + "toggleReviewFollowUpAutomation": "レビューのフォローアップ自動化を切り替え", + "typeACustomQueryFirst": "先にカスタムクエリを入力", + "typeOwnerRepoToSearch": "検索するには {{format}} を入力", + "unableToLoadTheCurrentTask": "現在のタスクアクセス設定を読み込めない。", + "unexpectedResponseFromTheServer": "サーバーから予期しない応答", + "unresolvedComments_one": "未解決コメント {{count}} 件", + "unresolvedComments_other": "未解決コメント {{count}} 件", + "untitledPr": "タイトルなし PR", + "update": "更新", + "updated": "更新済み ", + "updatedAgo": "{{elapsed}} 前に更新", + "updatedJustNow": "たった今更新", + "updatingStatus": "更新中…", + "useAnAppWhenAutomationNeeds": "自動化に専用の ID、短命トークン、リポジトリ単位のインストール制御が必要なら App を使う。設定は少し手間で、外部から到達できる HTTPS URL が必要。", + "useCommaSeparatedOwnerRepoValues": "カンマ区切りの owner/repo 値を使う。", + "useDefault": "デフォルトを使う", + "usedByWorkspaces_one": "{{count}} ワークスペースで使用中。編集や削除はそれら全部に影響する。", + "usedByWorkspaces_other": "{{count}} ワークスペースで使用中。編集や削除はそれら全部に影響する。", + "verifyAndImportApp": "App を確認してインポート", + "viewPermissions": "権限を表示", + "viewPullRequestOnGithub": "GitHub で pull request を表示", + "viewWorkflowOnGithub": "GitHub で workflow を表示", + "waitingOnBranchProtection": "ブランチ保護を待機中", + "wakeAgentOnReviewRequest": "新しいリクエストがあれば agent を起こす。変更後の再レビューも含む。", + "wakeAgentOnTerminalPrState": "レビュー作業が終わったら agent を起こす。どちらか、または両方を選ぶ。", + "watchesThisTaskSLinkedPull": "1 分間の PR 更新ループ中、この task の linked pull request を監視する。Auto-fix は新しく検出した feedback の task prompt を queue し、auto-merge は PR の準備完了を待つ。notification switch は、workspace の connected GitHub account に review が要求されたとき、または PR が terminal state に達したときに task の agent を起こす。review request は、後の request で通知する前に account の現在の request state を静かに baseline 化する。", + "webhook": "Webhook", + "webhookSecret": "Webhook シークレット", + "whichAllowedGithubRepositoriesToMonitor": "この watch で監視する許可済み GitHub repositories を選ぶ。", + "whoCanInstallThisApp": "この App をインストールできるのは誰?", + "withManagedWorkspaceCredentialsKandevConfigures": "Managed workspace credentials では、Kandev が新しく起動した task process 内で agentctl を Git の credential helper として設定する。Git が attached GitHub HTTPS repository の credentials を要求すると、helper は task と repository に scope された broker lease を返す。credential は必要に応じて Git に返され、repository や Git config には書き込まれない。gh command は Kandev の broker-aware shim を使う。Executor inheritance は両方をスキップし、選択した executor で見える credentials を使う。変更は新しい task launch と次回の resume にだけ適用され、すでに動いている process には適用されない。", + "workflow": "ワークフロー", + "workflowApprovalRequired": "承認待ち", + "workflowAttentionStale": "最後に確認した status。GitHub から新しい workflow result を取得できなかった。", + "workflowAttentionWorkflows": "Workflow: {{names}}", + "workflowAwaitingApproval": "maintainer の承認待ち", + "workflowNeedsAttention": "Workflow に対応が必要", + "workflowStatusUnavailable": "Workflow status を取得できない", + "workflowStep": "ワークフローステップ", + "workflowStepPromptWrapHelp": "workflow step prompt はこの prompt を折り返す。たとえば、step prompt が <2>{{stepPrompt}} なら、final prompt は <5>{{finalPrompt}} になる。", + "workspaceAutomationNowUsesTheVerified": "workspace automation は確認済み App installation を使うようになった。", + "workspaceGithubAccess": "Workspace の GitHub アクセス", + "workspaceGithubConnectionRemoved": "Workspace の GitHub 接続を削除した", + "workspaceGithubIdentity": "Workspace の GitHub identity", + "yourReviewIsRequested": "レビュー依頼あり", + "timeAgoJustNow": "たった今", + "timeAgoMinutes_one": "{{count}}分前", + "timeAgoMinutes_other": "{{count}}分前", + "timeAgoHours_one": "{{count}}時間前", + "timeAgoHours_other": "{{count}}時間前", + "timeAgoDays_one": "{{count}}日前", + "timeAgoDays_other": "{{count}}日前", + "timeAgoWeeks_one": "{{count}}週間前", + "timeAgoWeeks_other": "{{count}}週間前", + "timeAgoMonths_one": "{{count}}か月前", + "timeAgoMonths_other": "{{count}}か月前", + "timeAgoYears_one": "{{count}}年前", + "timeAgoYears_other": "{{count}}年前", + "appRegistrationsUnavailable": "GitHub App 登録は利用不可", + "failedToFetchPrCommits": "PR のコミット取得に失敗", + "failedToFetchPrFeedback": "PR フィードバック取得に失敗", + "failedToFetchPrFiles": "PR ファイル取得に失敗", + "failedToLoadCiAutomationOptions": "CI 自動化オプションの読み込みに失敗。", + "failedToResetAutoFixPrompt": "自動修正プロンプトのリセットに失敗。", + "failedToRetryAutoMerge": "自動マージの再試行に失敗。", + "failedToSaveAutoFixPrompt": "自動修正プロンプトの保存に失敗。", + "failedToSearchGitHub": "GitHub 検索に失敗", + "failedToUpdateCiAutomation": "CI 自動化の更新に失敗。", + "pullRequestNumbered": "プルリクエスト #{{number}}", + "mergeQueueEstimate_one": "推定マージ時間: {{count}} 分。", + "mergeQueueEstimate_other": "推定マージ時間: {{count}} 分。", + "mergeQueuePosition": "位置 {{position}}", + "mergeQueuePositionAndEstimate_one": "位置 {{position}}。推定マージ時間: {{count}} 分。", + "mergeQueuePositionAndEstimate_other": "位置 {{position}}。推定マージ時間: {{count}} 分。", + "mergeQueuePositionAndSubMinuteEstimate": "位置 {{position}}。推定マージ時間: 1 分未満。", + "mergeQueueStateAwaitingChecks": "チェック待ち", + "mergeQueueStateLocked": "ロック中", + "mergeQueueStateMergeable": "マージ可能", + "mergeQueueStateQueued": "キュー済み", + "mergeQueueStateUnmergeable": "マージ不可", + "mergeQueueStatus": "マージキュー: {{state}}", + "mergeQueueSubMinuteEstimate": "推定マージ時間: 1 分未満。", + "autoMergeOrRequeueWhenReady": "準備できたら自動マージ、または再キュー", + "autoMergeRetryAccepted": "自動マージの再試行を要求済み。", + "autoFixQueueSupportQueued": "失敗したキューチェックか競合を修復する。", + "autoFixQueueSupportEnable": "有効にすると、この対処可能なキュー失敗をエージェントへ送る。", + "autoFixQueueSupportRequested": "この削除の修復を要求済み。", + "autoFixQueueSupportNotActionable": "この削除に自動修復なし。", + "autoFixQueueSupportNewHead": "修正で新しいコミットが作成された。", + "autoMergeQueueSupportQueued": "現在のキュー試行はすでに有効。", + "autoMergeQueueSupportDisabled": "自動再キューはオフ。", + "autoMergeQueueSupportWaitingForCommit": "再キュー前に新しいコミット待ち。", + "autoMergeQueueSupportWaitingForChecks": "必須チェック待ち。", + "autoMergeQueueSupportNewHead": "新しいコミットがチェック通過後に再キューする。", + "automationForPrQueued": "PR #{{number}} はマージキュー中", + "automationForPrRemoved": "PR #{{number}} は削除された: {{cause}}", + "automationForPrRemovedGeneric": "PR #{{number}} はマージキューから削除された", + "ciAutomationQueueRecoveryHelp": "自動修正は通常のマージ競合と対処可能なキュー削除を直す。自動マージは対象ヘッドを送るか、新しいコミット後に再キューする。両方の制御で修復と再キューループを作る。Kandev は削除後に同じヘッドを再キューしない。", + "mergeQueueAutomation": "マージキュー自動化", + "mergeQueueRecovery": "マージキュー復旧", + "mergeQueueRemovalCauseChecksFailed": "チェック失敗", + "mergeQueueRemovalCauseChecksTimedOut": "チェックタイムアウト", + "mergeQueueRemovalCauseConflict": "マージ競合", + "mergeQueueRecoveryStatusQueued": "マージキュー試行中。自動マージは重複送信しない。", + "mergeQueueRecoveryStatusActionable": "キュー削除に対応必要。自動修復を有効にしてエージェントへ送信。", + "mergeQueueRecoveryStatusNotActionable": "キュー削除を記録。今回削除に自動修復なし。", + "mergeQueueRecoveryStatusRepairRequested": "この削除の修復を要求済み。", + "mergeQueueRecoveryStatusRepairRequestedWaiting": "修復要求済み。再キュー前に新しいコミット待ち。", + "mergeQueueRecoveryStatusWaitingForCommit": "再キュー前に新しいコミット待ち。", + "mergeQueueRecoveryStatusWaitingForChecks": "新しい head 検出。必須チェック待ち。" +} diff --git a/apps/web/src/locales/ja/gitlab.json b/apps/web/src/locales/ja/gitlab.json new file mode 100644 index 0000000000..5e91c745f6 --- /dev/null +++ b/apps/web/src/locales/ja/gitlab.json @@ -0,0 +1,384 @@ +{ + "actionApprove": "承認", + "actionAssignees": "担当者", + "actionFailed": "{{action}}に失敗しました", + "actionHint": "アクションのヒント {{index}}", + "actionLabel": "アクションラベル {{index}}", + "actionLabels": "ラベル", + "actionMerge": "マージ", + "actionPrompt": "アクションのプロンプト {{index}}", + "actionReply": "返信", + "actionResolve": "解決", + "actionReviewers": "レビュー担当者", + "actionUnapprove": "承認を取り消す", + "actionUnlink": "リンク解除", + "actions": "アクション", + "active": "有効", + "addAllDiscussionsToTaskContext": "すべての議論をタスクコンテキストに追加", + "addDiscussionToTaskContext": "議論をタスクコンテキストに追加", + "addIssueAction": "Issueアクションを追加", + "addMrAction": "MRアクションを追加", + "agentProfile": "エージェントプロフィール", + "allProjects": "すべてのプロジェクト", + "alwaysDelete": "常に削除", + "apply": "適用", + "approvalRemoved": "承認が削除されました", + "approvals": "承認", + "approve": "承認", + "approvedCount_one": "{{count}}件承認済み", + "approvedCount_other": "{{count}}件承認済み", + "assignees": "担当者", + "assigneesUpdated": "担当者を更新しました", + "authenticationMethod": "認証方法", + "auto": "自動", + "autoKeepEngagedTasks": "自動, エンゲージ中のタスクを維持", + "between60And3600Seconds": "60秒から3600秒の間で指定してください。", + "bugBackend": "バグ, バックエンド", + "byAuthorOpenedAgo": "{{author}}による · {{time}}に作成", + "checkNow": "今すぐ確認", + "checkingGitlabStatus": "GitLabのステータスを確認しています…", + "chooseAWorkspacePatTheLocal": "ワークスペースPAT、ローカルのglab CLIログイン、または環境で提供されたトークンを選択してください。CLIと環境の認証情報は、事前にkandevバックエンドから利用できる必要があります。", + "chooseWhetherToIncludeOnlyDirect": "直接のレビュアー依頼のみを含めるか、より広い互換スコープも含めるかを選択してください。", + "cleanupPolicy": "クリーンアップポリシー", + "clearToken": "トークンを消去", + "commits": "コミット", + "conflicts": "競合", + "connectAGitlabAccountSoKandev": "GitLab アカウントを接続すると、kandev があなたの代わりにマージリクエストを開き、レビューの議論を読み、返信や解決を行えるようになります。", + "connected": "接続済み", + "controlsTaskDeletionWhenTheGitlab": "GitLab の項目が閉じられたときのタスク削除を制御します。", + "couldNotReachHost": "<1>{{host}} に接続できませんでした: {{error}}", + "createIssueWatch": "GitLab イシューのウォッチを作成", + "createReviewWatch": "GitLab レビューのウォッチを作成", + "createTask": "タスクを作成", + "createWatch": "ウォッチを作成", + "created": "作成済み", + "customQueryPressEnterEG": "カスタムクエリ。Enter を押してください。例: \"labels=bug&state=opened\"", + "deleteSavedQuery": "保存済みクエリを削除", + "deleteSavedQuery2": "保存済みクエリ {{label}} を削除", + "deleteWatch": "ウォッチを削除", + "deleteWatchTitle": "{{label}} を削除しますか?", + "deleting": "削除中...", + "description": "説明", + "directAndGroupCompatibleRequests": "直接リクエストとグループ互換リクエスト", + "directRequests": "直接リクエスト", + "discussionReply": "ディスカッションへの返信", + "discussionResolved": "ディスカッションを解決済みにする", + "discussions": "ディスカッション", + "draft": "下書き", + "eGNeedsMyReview": "例: 要レビュー", + "eGSprint42": "例: スプリント 42", + "editIssueWatch": "GitLab イシューのウォッチを編集", + "editReviewWatch": "GitLab レビューのウォッチを編集", + "editWatch": "ウォッチを編集", + "enableThisWatchBeforeCheckingNow": "今すぐ確認する前に、このウォッチを有効にしてください", + "enableWatch": "ウォッチを有効化", + "enterAPersonalAccessTokenToSwitch": "PAT に切り替えるには、個人アクセストークンを入力してください。", + "enterAValidHttpOrHttpsGitlabHost": "有効な HTTP または HTTPS の GitLab ホスト URL を入力してください。", + "environmentToken": "環境トークン", + "everyQuickActionNeedsALabel": "すべてのクイックアクションには、ラベルとプロンプトが必要です。", + "executorProfile": "実行プロファイル", + "failedToClearToken": "トークンの消去に失敗しました", + "failedToLinkMergeRequest": "マージリクエストのリンクに失敗しました", + "failedToResetQuickActions": "クイックアクションのリセットに失敗", + "failedToSaveQuickActions": "クイックアクションの保存に失敗", + "failedToUnlinkMergeRequest": "マージリクエストのリンク解除に失敗", + "failedToUpdateAuthenticationMethod": "認証方法の更新に失敗", + "files": "ファイル", + "filters": "フィルター", + "foundMatchingIssues_one": "一致する issue が{{count}}件見つかった", + "foundMatchingIssues_other": "一致する issues が{{count}}件見つかった", + "foundMatchingMergeRequests_one": "一致するマージリクエストが{{count}}件見つかった", + "foundMatchingMergeRequests_other": "一致するマージリクエストが{{count}}件見つかった", + "gitlabAuthenticationMethodUpdated": "GitLab 認証方法を更新した", + "gitlabCredentialsAreConfiguredButAuthentication": "GitLab 認証情報は設定済みだが、認証に失敗した。再接続: ", + "gitlabHostUrlOverrideForSelf": "GitLab ホスト URL。セルフマネージド環境では上書き、{{host}} ならデフォルトのままにする。", + "gitlabIsNotConnectedConfigureGitlab": "GitLab は未接続。GitLab 認証を設定: ", + "gitlabIssueWatch": "GitLabのIssueウォッチ", + "gitlabMergeRequest": "GitLab マージリクエスト !{{mriid}}", + "gitlabMergeRequests": "GitLab マージリクエスト {{length}}件", + "gitlabQueryParameters": "GitLab クエリパラメータ", + "gitlabQuickActionsReset": "GitLab クイックアクションをリセットした", + "gitlabQuickActionsSaved": "GitLab クイックアクションを保存した", + "gitlabRejectedAction": "GitLab が操作を拒否した。", + "gitlabRejectedTheAction": "GitLab が操作を拒否した。", + "gitlabRejectedTheMergeRequestLink": "GitLab がマージリクエストのリンクを拒否した。", + "gitlabRejectedTheRequest": "GitLab がリクエストを拒否した。", + "gitlabReviewWatch": "GitLab レビュー watch", + "gitlabTokenCleared": "GitLab トークンを消去した", + "gitlabWatchCouldNotBeSaved": "GitLab watch を保存できなかった", + "gitlabWillMergeDescription": "GitLab はプロジェクトのデフォルトを使って {{mr}} を {{baseBranch}} にマージする。", + "glabCli": "glab CLI", + "hideToken": "トークンを隠す", + "inbox": "受信トレイ", + "initialStepForEachNewTask": "各新規タスクの初期ステップ。", + "interval": "間隔", + "intervalMinutesLabel_one": "{{count}}分間隔", + "intervalMinutesLabel_other": "{{count}}分間隔", + "intervalMinutes_one": "{{count}}分", + "intervalMinutes_other": "{{count}}分", + "into": "に", + "issueWatchCheckFailed": "issue watch の確認に失敗", + "issueWatchCreated": "issue watch を作成した", + "issueWatchCreationFailed": "Issue watch 作成失敗", + "issueWatchDeleted": "Issue watch 削除済み", + "issueWatchDeletionFailed": "Issue watch 削除失敗", + "issueWatchDialogDescription": "新しく一致した GitLab issue から workspace task を自動作成。", + "issueWatchResetFailed": "Issue watch リセット失敗", + "issueWatchReset_one": "Issue watch リセット。task {{count}} 件削除", + "issueWatchReset_other": "Issue watch リセット。tasks {{count}} 件削除", + "issueWatchUpdateFailed": "Issue watch 更新失敗", + "issueWatchUpdated": "Issue watch 更新済み", + "issueWatches": "Issue watch 一覧", + "issues": "Issue", + "kindIssue": "issue", + "kindMergeRequest": "merge request", + "label": "ラベル", + "labels": "ラベル", + "labelsUpdated": "ラベル更新済み", + "lastChecked": "最終チェック", + "lastCheckedAt": "最終チェック {{value}}", + "leaveEmptyToMatchMergeRequests": "空のままなら、レビュー依頼された merge request に一致。パラメータ追加すると、その reviewer 条件を明示的に置き換え。", + "linkAnotherMergeRequest": "別の merge request をリンク", + "linkGitlabMergeRequest": "GitLab merge request をリンク", + "linkMergeRequest": "merge request をリンク", + "linkedMergeRequest": "リンク済み merge request", + "linking": "リンク中…", + "loadingMergeRequest": "merge request 読み込み中", + "loggedInAs": "<1>{{username}} としてログイン中", + "match": "一致", + "maximumInFlightTasks": "同時進行 task 上限", + "merge": "マージ", + "merging": "マージ中…", + "mergeRequest": "Merge request !{{mriid}}", + "mergeRequestApproved": "merge request 承認済み", + "mergeRequestLabels": "merge request ラベル", + "mergeRequestMerged": "merge request マージ済み", + "mergeRequestReviewWatches": "merge request レビュー watch", + "mergeRequestUnlinked": "merge request リンク解除済み", + "mergeRequestUrl": "マージリクエストURL", + "mergeRequests": "Merge request", + "mergeRequestsAndIssues": "{{host}} · merge request と issue", + "mergeThisMergeRequest": "この merge request をマージ?", + "mergeability": "マージ可否", + "milestoneFilterLabel": "マイルストーンで絞り込む", + "mockTest": "モック(テスト)", + "mrs": "MR", + "name": "名前", + "never": "なし", + "neverDelete": "削除しない", + "newWatch": "新しいウォッチ", + "noChangedFiles": "変更されたファイルはありません", + "noCommits": "コミットはありません", + "noDiscussionsYet": "まだ議論はありません", + "noIssuesMatchThisFilter": "このフィルターに一致する issue はありません。", + "noLimit": "制限なし", + "noMergeRequestLinked": "このセッションにリンクされたマージリクエストはありません。", + "noMergeRequestsMatchThisFilter": "このフィルターに一致するマージリクエストはありません。", + "noNewIssuesMatched": "新しい issue は見つかりませんでした", + "noNewMergeRequestsMatched": "新しいマージリクエストは見つかりませんでした", + "noPipeline": "パイプラインなし", + "noSavedQueriesYet": "保存済みクエリはまだありません。", + "noTaskCreatedYet": "まだタスクは作成されていません", + "noWatchesConfigured": "ウォッチは設定されていません。", + "noneAssigned": "未割り当て", + "notConfigured": "未設定", + "notConnected": "接続されていません", + "notificationStatusUnavailable": "通知ステータスを取得できません", + "notificationUpdateFailed": "通知の更新に失敗しました", + "openGitlabFilters": "GitLab フィルターを開く", + "openInGitlab": "GitLab で開く", + "openMergeRequestInGitlab": "GitLab でマージリクエストを開く", + "openSettingsToSeeMrsAndIssues": "<0>設定 → GitLab で、マージリクエストと issue を表示できます。", + "optionalCapPollingResumesWhenActive": "任意の上限。アクティブなタスクがこの数を下回るとポーリングを再開します。", + "optionalCommaSeparatedGitlabLabelsThat": "一致する issue に含まれている必要がある、任意のカンマ区切りの GitLab ラベル。", + "optionalCommaSeparatedNamespaceProjectPaths": "任意のカンマ区切りの namespace/project パス。空欄の場合は、アクセス可能なすべてのプロジェクトを監視します。", + "optionalGitlabApiQueryParametersSuch": "任意の GitLab API クエリパラメータ。たとえば {{example}} です。", + "optionalOtherwiseUsesTheWorkflowStep": "任意。指定しない場合は、workflow step のデフォルトを使用します。", + "pasteAMergeRequestUrlFrom": "この workspace で設定されている GitLab ホストから、マージリクエスト URL を貼り付けてください。", + "pauseWatch": "ウォッチを一時停止", + "paused": "一時停止中", + "personalAccessToken": "個人アクセストークン", + "pipeline": "パイプライン", + "pollGitlabForMergeRequestsAwaiting": "レビュー待ちの GitLab マージリクエストを取得し、新規一致ごとにタスク1件作成。", + "pollGitlabIssuesAndCreateOne": "GitLab の issue を取得し、新規一致ごとにタスク1件作成。", + "pollIntervalSeconds": "取得間隔 (秒)", + "pollingAndCleanup": "取得とクリーンアップ", + "project": "プロジェクト", + "projectPaths": "プロジェクトパス", + "projects": "プロジェクト", + "promptSentToTheSelectedAgent": "新規一致ごとに、選択したエージェントプロファイルへ送るプロンプト。", + "placeholderActionTitle": "マージリクエストまたは issue のタイトル", + "placeholderActionUrl": "マージリクエストまたは issue の URL", + "placeholderDescription": "説明本文", + "placeholderIssueIid": "課題 IID", + "placeholderMergeRequestIid": "マージリクエスト IID", + "placeholderProjectPath": "プロジェクトパス", + "promptUsingUrlAndTitle": "{{url}} と {{title}} を使ってプロンプト", + "query": "クエリ", + "quickActions": "クイックアクション", + "reconnectRequired": "再接続必要", + "refresh": "更新", + "refreshFailed": "更新失敗: {{error}}", + "refreshFailedShowingCached": "GitLab 更新失敗: {{error}}。最後に正常読み込みしたレビュー data を表示中。", + "refreshMergeRequest": "マージリクエストを更新", + "remove": "{{label}} を削除", + "removeFromAssignees": "{{username}} を担当者から外す", + "removeFromReviewers": "{{username}} をレビュアーから外す", + "reply": "返信", + "replyAdded": "返信追加", + "replyToThisDiscussion": "この discussion に返信", + "resetQuickActionsToDefaults": "クイックアクションをデフォルトに戻す", + "resetWatch": "監視リセット", + "resolve": "解決", + "resolved": "解決済み", + "retry": "再試行", + "review": "レビュー", + "reviewScope": "レビュー範囲", + "reviewWatchCheckFailed": "レビュー監視チェック失敗", + "reviewWatchCreated": "レビュー監視作成", + "reviewWatchCreationFailed": "レビュー監視作成失敗", + "reviewWatchDeleted": "レビュー監視削除", + "reviewWatchDeletionFailed": "レビュー監視削除失敗", + "reviewWatchDialogDescription": "新たに一致した GitLab のマージリクエストに対して、ワークスペースのタスクを自動的に作成します。", + "reviewWatchResetFailed": "レビュー監視のリセットに失敗しました", + "reviewWatchReset_one": "レビュー監視をリセットしました。{{count}}件のタスクを削除しました", + "reviewWatchReset_other": "レビュー監視をリセットしました。{{count}}件のタスクを削除しました", + "reviewWatchUpdateFailed": "レビュー監視の更新に失敗しました", + "reviewWatchUpdated": "レビュー監視を更新しました", + "reviewers": "レビュー担当者", + "reviewersUpdated": "レビュー担当者を更新しました", + "saveChangesBeforeCheckingNow": "今すぐ確認する前に変更を保存してください", + "saveCurrentQuery": "現在のクエリを保存", + "saveGitlabQuery": "GitLab クエリを保存", + "savePresetDescription": "この{{kind}}クエリをサイドバーに保存して、後ですぐにアクセスできるようにします。", + "saved": "保存しました", + "savedQueryFallback": "保存済みクエリ", + "saving": "保存中...", + "searchAssignees": "担当者を検索", + "searchProjectMembers": "プロジェクトメンバーを検索", + "searchReviewers": "レビュー担当者を検索", + "selectWorkflow": "ワークフローを選択", + "shortHint": "短いヒント", + "showToken": "トークンを表示", + "subscribe": "購読する", + "subscribeToNotifications": "GitLab の通知を購読する", + "subscribedToGitlabNotifications": "GitLab の通知を購読済み", + "task": "タスク", + "taskAutomation": "タスクの自動化", + "taskPrompt": "タスクのプロンプト", + "taskPromptsShownOnTheGitlab": "GitLab の閲覧ページで、マージリクエストと課題に対して表示されるタスクのプロンプトです。", + "taskRepository": "タスクのリポジトリ", + "theMergeRequestIsStillLinked": "マージリクエストはまだリンクされています。", + "thisMergeRequestBelongsToA": "このマージリクエストは、現在のワークスペース接続とは別の GitLab ホストに属しています。", + "thisWillDeleteEveryTaskCreated": "これにより、この監視によって作成されたすべてのタスクが削除されます。アーカイブ済みのタスクも含まれ、ポーリング履歴も削除されます。元に戻すことはできません。", + "titleIssues": "課題", + "titleMergeRequests": "マージリクエスト", + "typeACustomQueryFirst": "まずカスタムクエリを入力してください", + "unapprove": "承認を取り消す", + "unlink": "リンク解除!", + "unlinkMergeRequest": "マージリクエストのリンクを解除", + "unreachable": "到達不能", + "unsubscribe": "購読解除", + "unsubscribeFromNotifications": "GitLab通知の購読解除", + "unsubscribedFromGitlabNotifications": "GitLab通知の購読解除済み", + "updateWatch": "監視を更新", + "verifyingGitlabConnection": "GitLab接続を確認中", + "watchDeletionFailed": "監視の削除に失敗", + "workflow": "ワークフロー", + "workflowStep": "ワークフローステップ", + "workflowThatReceivesNewTasks": "新しいタスクを受け取るワークフロー。", + "yourTokenMayStillBeValid": "トークンはまだ有効かも。ネットワークか上流の問題っぽい。", + "mrAutomationClosedLabel": "MRをマージせずにクローズ", + "mrAutomationDescription": "リンク済みマージリクエストでレビュー依頼が来た時、またはマージかクローズされた時に、このタスクのエージェントを起こす。通知先は、このタスクで今アクティブなセッションキュー。", + "mrAutomationMergedLabel": "MRをマージ済み", + "mrAutomationRetry": "再試行", + "mrAutomationReviewRequestedHelp": "workspaceの接続済みGitLabアカウントがレビュアーに追加された時にエージェントを起こす。削除後に再追加された場合は新しい依頼として扱う。MR更新中ずっと割り当てられたままなら依頼扱いにならない。", + "mrAutomationReviewRequestedHelpAriaLabel": "レビュー依頼通知の説明", + "mrAutomationReviewRequestedLabel": "レビュー依頼あり", + "mrAutomationTerminalHelp": "レビュー作業が終わった時にエージェントを起こす。どちらか、または両方を選ぶ。", + "mrAutomationTerminalHelpAriaLabel": "最終MR状態通知の説明", + "mrAutomationToggleAriaLabel": "レビュー追従自動化を切り替え", + "mrAutomationTriggerLabel": "レビュー追従", + "mrAutomationUpdateFailedDescription": "設定は保存されなかった。", + "mrAutomationUpdateFailedTitle": "MR自動化の更新に失敗", + "mrAutomation": "自動化", + "mrAutomationAppliesToMR": "!{{iid}}に適用", + "mrAutoFixCiAndAddressComments": "CIを自動修正してコメント対応", + "mrAutoFixPrompt": "自動修正プロンプト", + "mrAutoFixPromptDescription": "このプロンプトはこのタスク専用。空ならデフォルトプロンプトを使う。KandevにMRフィードバックのスナップショットも入れたい時は<0>{{placeholder}}を追加。", + "mrAutoFixRoundExplanation": "このMRで自動修正は{{current}}/{{max}}ラウンド使った。1ラウンドは、KandevがMR自動修正メッセージを送るかキューに入れた時に数える。Kandevは新しい自動修正を始める前にパイプライン完了を待つので、エージェントは最後の失敗ジョブと今の議論コメントをまとめて受け取れる。すでにキュー済みの自動修正メッセージを更新しても、追加ラウンドは使わない。これが{{max}}/{{max}}で、更新待ちの自動修正メッセージも残っていない時は、KandevはこのMRの自動修正を止める。無限ループ防止。手動レビュー後に無効化してから再有効化すれば最初からやり直し。", + "mrAutoMergeWhenReady": "準備できたら自動マージ", + "mrAutomationExplainAutoMerge": "自動マージ条件を説明", + "mrAutoMergeReadyExplanation": "Kandevは、このMRが完全に準備できた瞬間に自動でマージする。条件は、openでdraftではないこと、パイプライン成功、未解決の議論ゼロ、GitLabのマージ準備チェック一致。プロジェクトで承認が必要なら、それもGitLabのチェックに含まれる。MRが承認され、他条件も全部そろったら、Kandevは追加確認なしで即マージする。", + "mrAutomationExplainOptions": "自動化オプションを説明", + "mrAutomationWatchesLinkedMergeRequest": "1分同期ループ中に、このタスクのリンク済みマージリクエストを監視する。自動修正は新しく見つかったパイプライン失敗や議論コメントのタスクプロンプトを積み、 自動マージはMR準備完了を待つ。通知スイッチは、workspaceの接続済みGitLabアカウントにレビュー依頼が来た時か、MRが終端状態になった時に、このタスクのエージェントを起こす。レビュー依頼は、後の通知前にアカウントの現在の依頼状態を静かに基準化する。", + "mrAutoFixInsertMrFeedback": "MRフィードバックを挿入", + "mrAutomationEditDefaultPrompt": "デフォルトプロンプトを編集", + "mrAutomationTaskAutoFixPrompt": "タスク自動修正プロンプト", + "mrAutomationPlaceholderExplanation": "プレースホルダーは、今のMR識別子、新規または変更された失敗パイプラインジョブのリンク、そしてファイル・行・本文付きの新規または変更された未解決議論コメントを入れる。", + "mrAutomationOmitPlaceholderExplanation": "エージェントにブランチをpullかfetchさせて、KandevのスナップショットなしでGitLab自体を見せたいなら、プレースホルダーを省く。", + "mrAutomationUseDefault": "デフォルトを使う", + "mrAutomationSavePrompt": "プロンプトを保存", + "mrAutomationEditAutoFixPromptForThis": "このタスクの自動修正プロンプトを編集", + "mrAutomationExplainAutoFixRounds": "自動修正のラウンドを説明", + "mrAutomationAutoFixPromptSaveFailed": "自動修正プロンプトの保存に失敗。", + "mrAutomationAutoFixPromptResetFailed": "自動修正プロンプトのリセットに失敗。", + "mrPopoverOpenInGitlab": "GitLabで !{{mriid}} を開く", + "mrPopoverUnlink": "!{{mriid}} のリンク解除", + "mrPopoverPassRate": "合格率", + "mrPopoverNoPipeline": "パイプライン未開始", + "mrPopoverApproved": "承認済み", + "mrPopoverAwaitingReview": "レビュー待ち", + "mrPopoverAwaitingCount_one": "{{count}} 件待ち", + "mrPopoverAwaitingCount_other": "{{count}} 件待ち", + "mrPopoverUnresolvedComments_one": "未解決コメント {{count}} 件", + "mrPopoverUnresolvedComments_other": "未解決コメント {{count}} 件", + "mrPopoverUpdatedJustNow": "たった今更新", + "mrPopoverUpdatedAgo": "{{elapsed}} 前に更新", + "mrTaskStatusState": "状態", + "mrTaskStatusReview": "レビュー", + "mrTaskStatusCi": "CI", + "mrTaskStatusMerge": "マージ", + "mrTaskStatusIid": "MR !{{iid}}", + "mergeRequestStatus": "マージリクエスト !{{iid}} の状態", + "mergeRequestStatuses_one": "マージリクエスト {{count}} 件の状態", + "mergeRequestStatuses_other": "マージリクエスト {{count}} 件の状態", + "merged": "マージ済み", + "closed": "クローズ済み", + "approved": "承認済み", + "awaitingApproval": "承認待ち", + "passed": "合格", + "failed": "失敗", + "inProgress": "進行中", + "readyToMerge": "マージ準備完了", + "mergeable": "マージ可能", + "unresolvedDiscussions": "未解決の議論", + "mrChipAriaLabelSingle": "マージリクエスト !{{mriid}}、{{status}}", + "mrChipAriaLabelMulti_one": "マージリクエスト {{count}} 件、{{status}}", + "mrChipAriaLabelMulti_other": "マージリクエスト {{count}} 件、{{status}}", + "mrChipStatusMerged": "マージ済み", + "mrChipStatusClosed": "クローズ済み", + "mrChipStatusFailed": "パイプライン失敗", + "mrChipStatusDraft": "下書き", + "mrChipStatusReady": "マージ準備完了", + "mrChipStatusAwaitingApproval": "承認待ち", + "mrChipStatusRunning": "パイプライン実行中", + "mrChipStatusNeutral": "パイプラインなし", + "mrChipAutoFix": "自動修正", + "mrChipAutoMerge": "自動マージ", + "mrChipDrawerTitle": "マージリクエスト !{{mriid}}", + "mrChipDrawerDescription": "パイプライン状況、レビュー状況、マージリクエスト操作。", + "mrChipDrawerClose": "マージリクエスト状況を閉じる", + "gitlabRejectedAssociation": "GitLab が関連付けを拒否した。", + "taskCreatedMrNotLinked": "タスク作成したが、マージリクエストはリンクされなかった", + "taskCreatedMrNotLinkedDescription": "タスクを開いて Link GitLab merge request で再試行。{{error}}", + "memberSearchFailed": "メンバー検索失敗", + "addedMrFeedbackToTaskContext": "マージリクエストのフィードバックをタスクコンテキストに追加した", + "failedToLoadMergeRequest": "マージリクエスト読み込み失敗", + "failedToLoadMrAutomationOptions": "MR 自動化オプションの読み込み失敗。", + "failedToSearchGitLab": "GitLab の検索失敗", + "presetAssigned": "担当", + "presetAuthored": "作成者", + "presetCreated": "作成日", + "presetReviewRequested": "レビュー依頼済み" +} diff --git a/apps/web/src/locales/ja/inboxHistory.json b/apps/web/src/locales/ja/inboxHistory.json new file mode 100644 index 0000000000..97cc1b152a --- /dev/null +++ b/apps/web/src/locales/ja/inboxHistory.json @@ -0,0 +1,25 @@ +{ + "tabLabel": "履歴", + "emptyTitle": "{{workspace}} に履歴なし。", + "emptyTitleUnnamedWorkspace": "このワークスペースに履歴なし。", + "emptyDescription": "このタブは、エージェントが聞いたのに誰も答えなかった質問を並べる。後続作業で置き換わったもの、セッション終了で残ったもの、読めないもの。消すためのキューじゃなく、読み取り専用の監査証跡。", + "errorTitle": "履歴を読み込めなかった", + "errorDescription": "このワークスペースの履歴にある質問の読み込みで問題発生。", + "retry": "再試行", + "reasonSuperseded": "後続作業で置き換え", + "reasonSessionEnded": "回答なしでセッション終了", + "reasonUnreadable": "読み取り不可", + "clarificationLabel": "確認質問", + "permissionLabel": "許可リクエスト", + "noContent": "この質問は読めなかった。", + "openTask": "タスクを開く", + "copyId": "識別子をコピー", + "copyIdSuccess": "バンドル識別子をコピーした。", + "copyIdFailed": "バンドル識別子をコピーできなかった。", + "turnAsked": "{{turn}}回目で質問", + "turnSupersededBy": "{{askingTurn}}回で質問済み。{{supersedingTurn}}回で上書き済み", + "stepStartsNoAgent": "このタスクの現在ステップはエージェントを開始しない。", + "truncatedNotice": "過去の質問はさらにある。", + "loadMore": "履歴をさらに読み込む", + "loadMoreError": "履歴をさらに読み込めなかった。もう一度試して。" +} diff --git a/apps/web/src/locales/ja/integrations.json b/apps/web/src/locales/ja/integrations.json new file mode 100644 index 0000000000..2b387e718d --- /dev/null +++ b/apps/web/src/locales/ja/integrations.json @@ -0,0 +1,200 @@ +{ + "addAllCommentsToChatContext": "全コメントをチャット文脈へ追加", + "addAllFailedChecksToChatContext": "失敗したチェックを全部チャット文脈へ追加", + "addAllReviewsToChatContext": "全レビューをチャット文脈へ追加", + "actionFromReviewer": "{{name}}からの{{action}}", + "addFailuresToChatContext": "{{name}} の失敗をチャット文脈へ追加", + "addReviewComment": "レビューコメントを追加", + "addWholeThreadToChatContext": "スレッド全体をチャット文脈へ追加", + "addDetailsAboutThisChange": "この変更の詳細を追加...", + "allRepos": "全リポジトリ", + "anErrorOccurred": "エラー発生", + "authenticated": "認証済み", + "authenticationFailed": "認証失敗: {{error}}", + "authRequiredHeading": "{{name}} の認証が必要", + "authRequiredInline": "{{name}} の認証が必要。", + "approved": "承認済み", + "approvedCount_one": "{{count}}件承認", + "approvedCount_other": "{{count}}件承認", + "actionRequired": "対応必要", + "awaitingReview": "レビュー待ち", + "botComments_one": "ボットコメント ({{count}})", + "botComments_other": "ボットコメント ({{count}})", + "branchPushedNotCreated": "ブランチ push 済み。{{shortName}} は未作成", + "branchWasPushedRetryCreation": "ブランチは push 済み。{{longName}} の作成を再試行。", + "by": "by", + "checkedRelative": "・{{relative}} にチェック済み", + "changesRequested": "変更要求", + "changesRequestedCount_one": "{{count}}件の変更要求", + "changesRequestedCount_other": "{{count}}件の変更要求", + "chooseReview": "レビューを選択", + "chooseReviewToOpen": "開くレビューを選択。", + "ciChecks": "CI チェック{{summary}}", + "closePullRequestStatus": "PR 閉じるステータス", + "commented": "コメント済み", + "comments": "コメント", + "commentCount_one": "{{count}}件のコメント", + "commentCount_other": "{{count}}件のコメント", + "commentUrlCopied": "コメントURLをコピーしました", + "commit": "コミット", + "commitChangedFiles_one": "変更されたファイル{{count}}件をコミット", + "commitChangedFiles_other": "変更されたファイル{{count}}件をコミット", + "commitChanges": "変更をコミット", + "commitChangesScoped": "変更をコミット; {{scopedRepo}}", + "commitsAheadAriaLabel": "先行しているコミット{{value}}件", + "commitsBehindAriaLabel": "遅れているコミット{{value}}件", + "committingEllipsis": "コミット中...", + "configureAUtilityAgentInSettings": "AI生成を有効にするには、設定でユーティリティエージェントを構成してください", + "copiedConfigTo": "{{label}}の設定を{{targetName}}にコピーしました。", + "copyConfig": "設定をコピー", + "copyConfigSettingsOnly": "<4>{{sourceName}} から{{label}}の設定のみを別のワークスペースにコピーします。これにより、コピー先ワークスペースの現在の{{label}}設定は上書きされます。ウォッチャーと自動化はコピーされません。", + "copyConfigToAnotherWorkspace": "設定を別のワークスペースにコピー", + "copyConfiguration": "{{label}}の設定をコピー", + "copyConfigWithCredentials": "<4>{{sourceName}} から{{label}}の設定と認証情報を別のワークスペースにコピーします。これにより、コピー先ワークスペースの現在の{{label}}設定は上書きされます。ウォッチャーと自動化はコピーされません。", + "copyChangeRequestUrl": "プルリクエストURLをコピー", + "copyCommentUrl": "コメントURLをコピー", + "copyingConfigTo": "{{label}}の設定を{{targetName}}にコピーしています...", + "createAsDraft": "下書きとして作成", + "createdSuccessfully": "{{longName}}の作成に成功しました", + "createdLinkNeedsAttention": "{{shortName}}を作成しました。タスクリンクに対応が必要です", + "associationRetryViaTaskMenu": "{{message}}。再試行するには、タスクメニューのリンクを使用してください。", + "taskAssociationCouldNotBeSaved": "タスクの関連付けを保存できませんでした。", + "createFailed": "{{shortName}}の作成に失敗しました", + "createLongName": "{{longName}}を作成", + "createPr": "PRを作成", + "createPrCommitsAhead_one": "PRを作成(先行コミット{{count}}件)", + "createPrCommitsAhead_other": "PRを作成(先行コミット{{count}}件)", + "createScoped": "{{longName}}を作成; {{scopedRepo}}", + "createShortName": "{{shortName}}を作成", + "creatingEllipsis": "作成中...", + "creatingFrom": "<4>{{displayBranch}} から{{shortName}}を作成中", + "creatingFromInto": "<4>{{displayBranch}} から <6>{{baseBranch}} へ{{shortName}}を作成中", + "changeRequestUrlCopied": "プルリクエストURLをコピーしました", + "deleteSavedQueryNamed": "{{label}}の保存済みクエリを削除", + "describeYourChanges": "変更内容を説明してください...", + "description": "説明", + "dismissed": "閉じました", + "draftCreated": "{{shortName}} の下書きが作成されました", + "enableIntegrationNamed": "{{name}} を有効にする", + "enterCommitMessage": "コミットメッセージを入力...", + "failedToCopyConfig": "設定のコピーに失敗しました: {{err}}", + "failed": "失敗", + "failedToUnlinkPullRequest": "プルリクエストのリンク解除に失敗しました", + "failedCount_one": "{{count}} 件失敗", + "failedCount_other": "{{count}} 件失敗", + "failedToDeleteSavedQuery": "保存済みクエリの削除に失敗しました", + "failedToSaveSavedQuery": "保存済みクエリの保存に失敗しました", + "failedToUpdateDefaultView": "デフォルト表示の更新に失敗しました", + "filesChanged_one": "<0>{{count}} ファイルが変更されました", + "filesChanged_other": "<0>{{count}} ファイルが変更されました", + "forcePush": "強制プッシュ", + "fromBranch": "{{branch}} から", + "generateCommitDescriptionWithAi": "AIでコミットの説明を生成", + "generateCommitMessageWithAi": "AIでコミットメッセージを生成", + "generateDescriptionWithAi": "AIで {{shortName}} の説明を生成", + "generateTitleWithAi": "AIで {{shortName}} のタイトルを生成", + "general": "(一般)", + "inProgress": "進行中", + "lastSynced": "最後の同期: {{relative}}", + "loading": "読み込み中…", + "loadingChangeRequest": "変更リクエストを読み込み中", + "longNameTitle": "{{longName}} のタイトル", + "longNameTitlePlaceholder": "{{longName}} のタイトル...", + "merge": "マージ", + "mergedRelative": "{{relative}} にマージ済み", + "noChecks": "チェックなし", + "noChecksHaveStarted": "チェックはまだ開始されていません", + "noChangesToCommit": "コミットする変更はありません", + "noCommentsYet": "コメントはまだありません", + "noReviewsYet": "レビューはまだありません", + "noSavedQueriesYet": "保存済みクエリはまだありません", + "openDetails": "{{title}} の詳細を開く", + "openedRelative": "{{relative}} にオープン", + "openReview": "レビューを開く", + "openReviewNumber": "レビュー #{{number}} を開く", + "ontoBranch": "{{branch}} に", + "other": "その他", + "otherCount_one": "{{count}}件", + "otherCount_other": "{{count}}件", + "overall": "全体", + "passRate": "合格率", + "passed": "合格", + "passedCount_one": "{{count}}件合格", + "passedCount_other": "{{count}}件合格", + "pending": "保留中", + "pendingCount_one": "{{count}}件保留中", + "pendingCount_other": "{{count}}件保留中", + "pendingReview": "レビュー保留中", + "openVcsOptions": "VCSオプションを開く", + "pickActionThenRepo": "操作を選んでからリポジトリ選択", + "pickARepositoryForCommit": "Commit用のリポジトリを選択", + "pickARepositoryForCreatePr": "PR作成用のリポジトリを選択", + "pickARepositoryForPush": "Push用のリポジトリを選択", + "pickARepositoryForRebase": "Rebase用のリポジトリを選択", + "pull": "Pull", + "pullRequest": "プルリクエスト", + "pullRequestCount_one": "{{count}}件のプルリクエスト", + "pullRequestCount_other": "{{count}}件のプルリクエスト", + "pullRequestNumber": "PR #{{number}}", + "pullRequestShortCount_one": "{{count}}件のPR", + "pullRequestShortCount_other": "{{count}}件のPR", + "pullRequestStatusSummary": "プルリクエストのCIステータス、レビュー、チェックの概要。", + "pullRequestUnlinked": "プルリクエストのリンク解除済み", + "linkedProviderPullRequests_one": "{{count}}件の{{provider}}プルリクエストがリンク済み", + "linkedProviderPullRequests_other": "{{count}}件の{{provider}}プルリクエストがリンク済み", + "push": "Push", + "pushCommitsToRemote_one": "{{count}}件のコミットをリモートへPush", + "pushCommitsToRemote_other": "{{count}}件のコミットをリモートへPush", + "rebase": "Rebase", + "rebaseOntoBranchBehind": "{{branch}}にRebase ({{behind}}遅れ)", + "reconnectProvider": "{{name}}を再接続", + "registeredProvider": "登録済みプロバイダ", + "refresh": "更新", + "repository": "リポジトリ", + "replyToThread": "スレッド{{threadId}}に返信", + "requestedCount_one": "{{count}}件リクエスト済み", + "requestedCount_other": "{{count}}件リクエスト済み", + "retry": "再試行", + "reviewUnavailable": "レビュー利用不可。", + "reviewCount_one": "{{count}} 件のレビュー", + "reviewCount_other": "{{count}} 件のレビュー", + "reviewerTeamName": "{{name}} (チーム)", + "reviews": "レビュー{{summary}}", + "running": "実行中", + "retryShortName": "{{shortName}} を再試行", + "saveCurrentQuery": "現在のクエリを保存", + "saving": "保存中", + "savedQueries": "保存済み", + "savedQueryDefaultUpdateInProgress": "既定ビュー更新中… {{action}}", + "setSavedQueryAsDefaultView": "{{label}} を既定ビューに設定", + "clearSavedQueryAsDefaultView": "{{label}} の既定ビューを解除", + "selectAWorkspace": "ワークスペースを選択…", + "shortNameCreated": "{{shortName}} を作成済み", + "closedRelative": "{{relative}}にクローズ", + "stageAllChangesBeforeCommitting": "コミット前にすべての変更をステージ", + "targetWorkspace": "対象ワークスペース", + "timedOut": "タイムアウト", + "untitledPullRequest": "無題の pull request", + "unlinkPullRequestNumber": "pull request #{{number}} のリンク解除", + "unresolvedComments_one": "未解決コメント {{count}} 件", + "unresolvedComments_other": "未解決コメント {{count}} 件", + "unknownError": "不明なエラー", + "updatedAgo": "{{elapsed}} 前に更新", + "updatedJustNow": "たった今更新", + "viewPullRequestExternally": "pull request #{{number}} を外部で表示", + "defaultRepository": "既定リポジトリ", + "filterRepositories": "リポジトリを絞り込み…", + "noRepositoriesFound": "リポジトリなし", + "query": "クエリ", + "queryName": "名前", + "queryNamePlaceholder": "例. Needs my review", + "saveQuery": "クエリを保存", + "waitingForTheNextBackendHealth": "次のバックエンドヘルスチェック待ち…", + "cursorPaginationSummary_one": "ページ {{page}} ・ {{count}} 件の結果", + "cursorPaginationSummary_other": "ページ {{page}} ・ {{count}} 件の結果", + "allRepositories": "すべてのリポジトリ", + "changeRequestCreationFailed": "変更リクエスト作成失敗", + "resultCount_one": "結果 {{count}}", + "resultCount_other": "結果 {{count}}", + "loadingResults": "結果を読み込み中…" +} diff --git a/apps/web/src/locales/ja/jira.json b/apps/web/src/locales/ja/jira.json new file mode 100644 index 0000000000..02dec9dd28 --- /dev/null +++ b/apps/web/src/locales/ja/jira.json @@ -0,0 +1,227 @@ +{ + "aCredentialIsRequired": "認証情報が必要。", + "actions": "操作", + "active": "有効", + "addPreset": "プリセットを追加", + "agentProfile": "エージェントプロフィール", + "aJiraSiteUrlIsRequired": "JiraサイトURLが必要。", + "anEmailAddressIsRequired": "メールアドレスが必要。", + "apiToken": "APIトークン", + "apiTokenRecommended": "APIトークン(推奨)", + "apply": "適用", + "assignee": "担当者", + "assigneeAnyone": "誰でも", + "assigneeMe": "自分", + "assigneeUnassigned": "未割り当て", + "atlassianCloud": "Atlassian Cloud", + "atlassianJqlHelp": "Atlassian JQL。ウォッチャーはこのクエリをポーリングし、新しく一致したチケットごとに1件タスクを作成。", + "authenticationMethod": "認証方法", + "availablePlaceholders": "利用可能なプレースホルダー:", + "browserSessionCookie": "ブラウザセッションCookie", + "builtinViewAssignedToMe": "自分に割り当て", + "builtinViewUnassigned": "未割り当て", + "connectWithAtlassian": "Atlassianと接続", + "connecting": "接続中...", + "oauth2": "OAuth 2.0", + "oauthConnected": "OAuthで接続済み。トークンは自動更新。", + "oauthDescription": "Atlassian OAuth 2.1 と PKCE で認証。アプリ作成も認証情報も不要。クリックしてブラウザ経由で認可。トークンは期限切れで自動更新。", + "oauthStartFailed": "OAuth開始失敗: {{error}}", + "oauthTokenExpires": "トークン期限: {{date}}", + "oauthPasteInstructions": "新しいタブで認可完了", + "oauthPasteHelp": "Atlassianで承認後、localhost URLへリダイレクトされるが開かない。ブラウザのアドレスバーから完全なURLをコピーして下に貼り付け。", + "oauthPopupBlocked": "ブラウザが認可ウィンドウをブロックした。ポップアップ許可して再試行。", + "oauthComplete": "完了", + "oauthCancel": "キャンセル", + "oauthPasteInvalid": "無効なURL。code と state パラメータ含む完全なリダイレクトURLをコピーしたか確認。", + "builtIn": "組み込み", + "capOnOpenTasksCreatedBy": "このウォッチャーが作成する未完了タスク上限。上限なしなら空欄。上限到達時、新しい一致は次回ポーリングへ延期。", + "checkFailed": "確認失敗: {{error}}", + "checkingJiraStatus": "Jira状態確認中…", + "checkNow": "今すぐ確認", + "clear": "{{lowerCase}}をクリア", + "clearFilters": "フィルターをクリア", + "connectedAs": "{{name}} として接続中", + "connectThisWorkspaceToAtlassianCloud": "このワークスペースを Atlassian Cloud、またはセルフホストの Jira Server / Data Center インスタンスに接続します。資格情報は選択したワークスペースごとにサーバー側で暗号化して保存されます。", + "cookieExpired": "Cookie の有効期限が切れました。新しいものを貼り付けてください", + "cookieExpiresInDays_one": "Cookie の有効期限は {{count}} 日です", + "cookieExpiresInDays_other": "Cookie の有効期限は {{count}} 日です", + "cookieExpiresInHours_one": "Cookie の有効期限は {{count}} 時間です", + "cookieExpiresInHours_other": "Cookie の有効期限は {{count}} 時間です", + "cookieInstructions": "Atlassian タブで DevTools ({{shortcut}}) を開き、→\nApplication タブ → Storage → Cookies → {{host}} →\n\"{{cookieName}}\" という名前の行 (SSO テナントでは \"{{ssoCookieName}}\" ) を見つけて、→ Value 列をコピーし、→ 下に貼り付けてください。\nCookie 名や \"=\" は含めず、トークン値だけを貼り付けてください。", + "create": "作成", + "createATokenAt": "<2>{{url}} でトークンを作成", + "createFailed": "作成に失敗しました: {{error}}", + "createJiraWatcher": "JIRA ウォッチャーを作成", + "createPatNoProfileLink": "Jira プロフィールの「Personal Access Tokens」から Personal Access Token を作成してください。必要なスコープ: read, write。", + "createPatWithProfileLink": "Jira プロフィール (<1>{{url}}) の「Personal Access Tokens」から Personal Access Token を作成してください。必要なスコープ: read, write。", + "customJqlOverridePillFiltersAre": "カスタム JQL の上書きが有効です。ピルフィルターは一時停止されています。", + "defaultProjectKeyOptional": "デフォルトのプロジェクトキー (任意)", + "delete": "削除", + "deleteFailed": "削除に失敗しました: {{error}}", + "deleteThisJiraWatcher": "この JIRA ウォッチャーを削除しますか?", + "deleteView": "ビューを削除", + "description": "説明", + "details": "詳細", + "editJiraWatcher": "JIRA ウォッチャーを編集", + "editPrompt": "プロンプトを編集", + "email": "メールアドレス", + "enable": "有効にする", + "enabled": "有効", + "enterAPositiveIntegerOrLeave": "正の整数を入力するか、空欄のままにしてください。", + "executorProfile": "実行者プロフィール", + "expiryUnknown": "有効期限不明", + "failedToLoadJiraConfig": "Jira 設定の読み込みに失敗しました: {{error}}", + "failedToSaveTaskPresets": "タスクのプリセットを保存できませんでした", + "fallbackTicket": "Jira チケット", + "filterDisabled": "{{label}} フィルターは無効です", + "foundNewTickets_one": "新しいチケットを {{count}} 件見つけました。タスクはまもなく表示されます。", + "foundNewTickets_other": "新しいチケットを {{count}} 件見つけました。タスクはまもなく表示されます。", + "hidePrompt": "プロンプトを非表示", + "hideSessionTokenHelp": "セッショントークンのコピー方法を非表示", + "hint": "ヒント", + "hintOptional": "ヒント(任意)", + "howOftenToReRunThe": "JQL を再実行する間隔。最小 60s、最大 3600s。", + "icon": "アイコン", + "import": "インポート", + "importFromJira": "Jira からインポート", + "importFromJiraTicketUrlOr": "Jira チケットの URL かキーをインポート", + "importJiraTicket": "Jira チケットをインポート", + "initialStepForNewTasks": "新規タスクの初期ステップ。", + "instanceType": "インスタンスタイプ", + "interval": "間隔", + "intervalMinutes_one": "{{count}}m", + "intervalMinutes_other": "{{count}}m", + "jiraConfigurationRemoved": "Jira 設定を削除", + "jiraConfigurationSaved": "Jira 設定を保存", + "jiraIntegration": "Jira 連携", + "jiraWatcher": "JIRA ウォッチャー", + "jiraWatchers": "JIRA ウォッチャー", + "jiraWatchersDescription": "JQL クエリをポーリングして、新しく一致したチケットごとに Kandev タスクを自動作成。", + "jqlError": "JQL エラー: {{error}}", + "jqlIsGeneratedFromThePills": "JQL は上のピルから生成。編集で上書き。", + "label": "ラベル", + "lastPolled": "最終ポーリング", + "loading": "読み込み中...", + "loading2": "読み込み中…", + "loadingTicket": "チケットを読み込み中…", + "matchedTickets_one": "このページで {{count}} 件のチケットに一致。", + "matchedTickets_other": "このページで {{count}} 件のチケットに一致。", + "maxInFlightTasks": "同時実行タスク上限", + "myOpenBugs": "自分の未解決バグ", + "never": "なし", + "newWatcher": "新しいウォッチャー", + "noCap": "(上限なし)", + "noDescription": "説明なし。", + "noJiraWatchersConfiguredCreateOne": "JIRA ウォッチャー未設定。作成して JQL クエリからタスク自動作成。", + "noNewTicketsMatched": "新規一致チケットなし。", + "noProjectsMatch": "一致プロジェクトなし。", + "noResults": "結果なし", + "noStatusesForProject": "選択中プロジェクトに利用可能なステータスなし", + "noStatusesMatch": "一致ステータスなし。", + "notConfiguredNotice": "Jira 未設定。<2>Jira を設定 してここにチケット表示。", + "noTicketsFound": "チケットなし。", + "noView": "ビューなし", + "openInAtlassian": "Atlassianで開く", + "openJiraTicket": "Jiraチケットを開く", + "openTicketDetails": "チケット詳細を開く", + "optionalFallsBackToStepDefault": "任意。ステップのデフォルトにフォールバック。", + "pageNumber": "ページ {{page}}", + "pasteAJiraTicketUrlOr": "JiraチケットのURLかキーを貼り付ける (PROJ-123)", + "pasteApiTokenHere": "APIトークンをここに貼り付け", + "pasteATokenToTestTheConnection": "接続テスト用トークンを貼り付け", + "pastePersonalAccessTokenHere": "個人アクセストークンをここに貼り付け", + "pasteSessionTokenValue": "{{cookieName}} の値を貼り付け", + "pause": "一時停止", + "paused": "一時停止中", + "pauseOrResumePolling": "ポーリングを一時停止か再開。", + "personalAccessToken": "個人アクセストークン", + "placeholderAssigneeDisplayName": "担当者表示名", + "placeholderIssueType": "課題タイプ", + "placeholderPriority": "優先度", + "placeholderProjectKey": "プロジェクトキー", + "placeholderReporterDisplayName": "報告者表示名", + "placeholderStatusName": "ステータス名", + "placeholderTicketDescription": "チケット説明", + "placeholderTicketKey": "チケットキー", + "placeholderTicketSummary": "チケット概要", + "placeholderTicketUrl": "チケットURL", + "pollIntervalSeconds": "ポーリング間隔 (秒)", + "presetIconBug": "バグ", + "presetIconCheck": "チェック", + "presetIconCode": "コード", + "presetIconEye": "目", + "presetIconMessage": "メッセージ", + "presetIconSearch": "検索", + "presetIconSparkle": "きらめき", + "presetIconTool": "ツール", + "presetPlaceholderTicketDescription": "チケット説明", + "presetPlaceholderTicketKey": "Jiraチケットキー", + "presetPlaceholderTicketSummary": "チケット概要", + "presetPlaceholderTicketUrl": "JiraチケットのURL", + "presetPromptPlaceholderHelp": "利用できるプレースホルダー見るには {{token}} を入力。アクション実行時に <4>{{key}}, <7>{{url}}, <10>{{title}}, <13>{{description}} が置換される。", + "proj123OrPasteTicketUrl": "PROJ-123 またはチケットURLを貼り付け", + "project": "プロジェクト", + "promptFieldHelp": "各新規チケットごとにエージェントへ送るプロンプト。{{token}} を入力するとプレースホルダー挿入。", + "refresh": "更新", + "remove": "削除", + "removeConfiguration": "設定を削除", + "removeJiraConfiguration": "Jira設定を削除する?", + "reporter": "報告者", + "resetCompleteDeletedTasks_one": "リセット完了。タスク {{count}} 件削除。次のポーリングで一致分を再インポート。", + "resetCompleteDeletedTasks_other": "リセット完了。タスク {{count}} 件削除。次のポーリングで一致分を再インポート。", + "resetCompleteNoTasksDeleted": "リセット完了。次のポーリングで一致分を再インポート。", + "resetFailed": "リセット失敗: {{error}}", + "resetToPills": "ピル表示に戻す", + "resetWatch": "監視をリセット", + "saveCurrentFiltersAs": "現在のフィルターを名前を付けて保存…", + "saveCurrentFiltersAsAView": "現在のフィルターをビューとして保存", + "saved": "保存済み", + "savedLeaveBlank": "(保存済み。現在の値を保持するなら空欄のまま)", + "saveFailed": "保存失敗: {{error}}", + "saveView": "ビューを保存", + "saving": "保存中…", + "searchProjects": "プロジェクトを検索…", + "searchStatuses": "ステータスを検索…", + "searchTicketKeyOrText": "チケットキーまたはテキストを検索…", + "selectProjectToFilterStatus": "ステータスで絞るプロジェクトを選択", + "selectWorkflow": "ワークフローを選択", + "selectWorkspace": "ワークスペースを選択", + "selfHostedJiraServerOrDataCenter": "自ホスト型 Jira (Server または Data Center)。", + "serverDataCenter": "Server / Data Center", + "sessionTokenValue": "セッショントークンの値", + "showSessionTokenHelp": "セッショントークンのコピー方法を表示", + "sitesHostedAt": "{{domain}} でホスト中のサイト。", + "siteUrl": "サイトURL", + "sortCreated": "作成日", + "sortLabelled": "並び替え: {{label}}", + "sortPriority": "優先度", + "sortUpdated": "更新日", + "startTask": "タスク開始", + "taskPresets": "タスクプリセット", + "taskPresetsDescription": "チケットからタスク開始時、{{route}} に表示されるプロンプト。", + "taskPresetsSaved": "タスクプリセット保存済み", + "taskPrompt": "タスクプロンプト", + "tasksAreCreatedInThisWorkflow": "このワークフローでタスク作成される。", + "tasksCreatedByThisWatcherLand": "このウォッチャーで作成したタスクは選択中ワークスペースに入る。", + "testConnection": "接続テスト", + "testFailed": "失敗: {{error}}", + "testingConnection": "テスト中...", + "testingJql": "テスト中…", + "testJql": "JQLテスト", + "ticketOnThisPage_one": "このページのチケット {{count}} 件", + "ticketOnThisPage_other": "このページのチケット {{count}} 件", + "ticketsAcrossYourAtlassianProjects": "Atlassianプロジェクト全体のチケット。", + "toggleRawJqlEditor": "生JQLエディタ切り替え", + "unassigned": "未割り当て", + "update": "更新", + "updatedAgo": "· {{time}}に更新", + "updatedTime": "{{time}}に更新", + "updateFailed": "更新失敗: {{error}}", + "watchDialogDescription": "JQLクエリをポーリングして、新しく一致した各チケットにKandevタスク自動作成。必要ならリポジトリも紐付けて、そのコードベースで各タスク実行。未設定ならリポジトリなしで実行。", + "watcherCreated": "ウォッチャー作成済み", + "watcherDeleted": "ウォッチャー削除済み", + "watcherUpdated": "ウォッチャー更新済み", + "workflow": "ワークフロー", + "workflowStep": "ワークフローステップ", + "yourJiraSessionExpiredOrNeeds": "Jiraセッション期限切れ、またはステップアップ認証必要。再接続してこのチケット表示。" +} diff --git a/apps/web/src/locales/ja/kanban.json b/apps/web/src/locales/ja/kanban.json new file mode 100644 index 0000000000..3ae9b3a7e3 --- /dev/null +++ b/apps/web/src/locales/ja/kanban.json @@ -0,0 +1,133 @@ +{ + "addRepositoryPullRequestSessionParent": "リスト行にリポジトリ、プルリクエスト、セッション、親、レビュー文脈を追加。", + "addTask": "タスク追加", + "allRepositories": "全リポジトリ", + "allPriorities": "全優先度", + "allWorkflows": "全ワークフロー", + "allWorkflowsTitleCase": "全ワークフロー", + "allWorkspaces": "全ワークスペース", + "approvalRequired": "承認必要", + "archive": "アーカイブ", + "archiveCount_one": "{{count}}件アーカイブ", + "archiveCount_other": "{{count}}件アーカイブ", + "archiveTask": "タスクをアーカイブ", + "autoStart": "自動開始", + "blockedByCount_one": "{{count}}件にブロック中", + "blockedByCount_other": "{{count}}件にブロック中", + "blockedByTasksTitle": "次を待機中: {{tasks}}", + "blockedFailed": "ブロッカーが失敗しました", + "blockedPredecessorFailed": "このタスクが依存しているタスクが失敗しました: {{tasks}}", + "boardNavigator": "ボードナビゲーター", + "cannotMoveTasksFromDifferentWorkflows": "異なるワークフローのタスクは移動できません", + "changesRequested": "変更を要求", + "chooseHowTasksAreOrderedIn": "このリストでタスクをどの順序で並べるか選択してください。", + "chooseStep": "{{stepLabel}}。ステップを選択してください。", + "chooseWorkflowAndStepShownOn": "ボードに表示するワークフローとステップを選択してください。", + "chooseWorkflowOrStep": "{{name}}、{{stepLabel}}。ワークフローまたはステップを選択してください。", + "clearSelection": "選択を解除", + "closePreview": "プレビューを閉じる", + "current": "現在", + "delete": "削除", + "deleteCount_one": "{{count}}件を削除", + "deleteCount_other": "{{count}}件を削除", + "deleteTask": "タスクを削除", + "detachFromParent": "親から切り離す", + "dismiss": "閉じる", + "displayOptions": "表示オプション", + "filters": "フィルター", + "dropOnAColumnToMove": "移動するには列にドロップしてください", + "githubIssue": "GitHubのIssue", + "githubPullRequest": "GitHub プルリクエスト", + "gitlabMergeRequest": "GitLab マージリクエスト", + "goToTask": "タスクへ移動", + "group": "グループ", + "groupTasksIntoSectionsByState": "タスクを状態、ワークフロー、リポジトリ、またはなしでセクションにまとめます。", + "healthIssues": "健康上の問題", + "improveKandev": "Kandev を改善する", + "jiraTicket": "Jira チケット", + "kanban": "カンバン", + "kandevHome": "Kandev ホーム", + "linearIssue": "Linear課題", + "link": "リンク", + "list": "リスト", + "listRows": "リスト行", + "loadingRepositories": "リポジトリを読み込んでいます...", + "menu": "メニュー", + "moreOptions": "その他のオプション", + "moveTo": "移動先", + "moveToStep": "{{step}} に移動", + "multiSelect": "複数選択", + "nextCapacity": "次の容量", + "nextStep": "次のステップ", + "noRepositories": "リポジトリなし", + "noSteps": "ステップなし", + "noStepsConfigured": "ステップ未設定。", + "noStepsConfiguredChooseAnotherWorkflow": "ステップ未設定。別のワークフローを選ぶか、Settings でステップ追加。", + "noTasks": "タスクなし", + "off": "オフ", + "openMenu": "メニューを開く", + "openMenuWithStatus": "{{description}} メニューを開く", + "openPreviewOnClick": "クリックでプレビューを開く", + "on": "オン", + "overWipLimit": "WIP 上限超え", + "pipeline": "パイプライン", + "pipelineRowPosition": "{{title}}、ステップ {{position}} / {{total}}", + "pipelineUnassignedStep": "未割り当て", + "previewPanel": "プレビューパネル", + "previousStep": "前のステップ", + "priority": "優先度", + "priorityCritical": "重大", + "priorityHigh": "高", + "priorityMedium": "中", + "priorityLow": "低", + "priorityIndicatorLabel": "優先度 {{priority}}", + "queuedCount_one": "{{count}} 件キュー", + "queuedCount_other": "{{count}} 件キュー", + "queuedForStep": "{{step}} にキュー", + "queuedSection": "キュー", + "reorderPositionAnnouncement": "{{title}}、位置 {{position}} / {{total}}", + "repository": "リポジトリ", + "searchPlaceholder": "検索...", + "searchSection": "検索", + "searchTasks": "タスクを検索", + "searchTasksPlaceholder": "タスクを検索...", + "selectRepository": "リポジトリを選択", + "selectTask": "タスク {{title}} を選択", + "selectWorkflow": "ワークフローを選択", + "sendToWorkflow": "ワークフローに送信", + "selectedFilterCount_one": "{{label}}: {{count}}件選択", + "selectedFilterCount_other": "{{label}}: {{count}}件選択", + "sentryIssue": "Sentryの問題", + "sessionCount_one": "{{count}}セッション", + "sessionCount_other": "{{count}}セッション", + "showArchived": "アーカイブ表示", + "showTaskDetails": "タスク詳細表示", + "sort": "並び替え", + "step": "ステップ", + "subtaskOf": "親タスク", + "taskList": "タスクリスト", + "tasksInStep": "{{step}}のタスク", + "tasksOverWipLimit": "{{label}}件のタスク。WIP上限超過", + "theseOptionsAffectThisTaskList": "このオプションは、このタスクリストだけに影響します。", + "threads": "スレッド", + "utilities": "ユーティリティ", + "view": "表示", + "whenEnabledClickingATaskOpens": "有効時、タスクをクリックするとプレビューパネルが開く。無効時、クリックでセッションへ直接移動。", + "wipTaskCount": "{{label}}件のタスク", + "workflow": "ワークフロー", + "workflowStepFallback": "ワークフローステップ {{stepId}}", + "columns": "列", + "autoHideEmptyColumns": "空列を自動で隠す", + "allEmptyStepsAutoHidden": "空ステップ全部非表示。列の「空列を自動で隠す」をオフで再表示。", + "columnsForWorkflow": "{{name}}の列", + "needsReassignment": "再割り当て必要", + "noTasksYet": "まだタスクなし", + "noWorkflowsAvailableYet": "まだ利用可能なワークフローなし。", + "pullToRefreshPull": "引いて更新", + "pullToRefreshRefreshing": "タスク更新中", + "pullToRefreshRelease": "離して更新", + "boardSort": "ボードの並び順", + "boardSortCreatedDesc": "新しい順", + "boardSortPriorityDesc": "優先度順", + "priorityFilter": "優先度フィルタ" +} diff --git a/apps/web/src/locales/ja/linear.json b/apps/web/src/locales/ja/linear.json new file mode 100644 index 0000000000..cc0c3ad9e0 --- /dev/null +++ b/apps/web/src/locales/ja/linear.json @@ -0,0 +1,174 @@ +{ + "actions": "操作", + "active": "有効", + "agentProfile": "エージェントプロフィール", + "allTeams": "全チーム", + "anApiKeyIsRequired": "APIキーが必要です。", + "any": "(任意)", + "anyAssignee": "任意の担当者", + "anyTeam": "(任意のチーム)", + "apiKey": "APIキー", + "assignedToMe": "自分に割り当て済み", + "assignee": "担当者", + "assigneeHelp": "課題が誰に割り当てられているかで絞り込みます。", + "availablePlaceholders": "使用可能なプレースホルダー:", + "checkFailed": "確認に失敗しました: {{error}}", + "checkNow": "今すぐ確認", + "chooseATeam": "チームを選択", + "configurationRemoved": "Linear の設定を削除しました", + "configurationSaved": "Linear の設定を保存しました", + "connectedAs": "{{name}} として接続済み", + "connectedAsWithOrg": "{{name}} ({{org}}) として接続済み", + "create": "作成", + "createFailed": "作成に失敗しました: {{error}}", + "createLinearWatcher": "Linear Watcher を作成", + "createPersonalApiKeyAt": "個人用 APIキーを作成するには", + "creator": "作成者", + "creatorHelp": "特定のユーザーが作成した課題に一致させます。", + "defaultTeamOptional": "デフォルトのチーム (任意)", + "delete": "削除", + "deleteFailed": "削除に失敗しました: {{error}}", + "deleteThisLinearWatcher": "この Linear watcher を削除しますか?", + "description": "説明", + "details": "詳細", + "dispatchOrder": "配信順", + "dispatchOrderHelp": "実行中上限に達したとき、課題はこの順序で配信され、最も重要なものが先に実行されます。", + "editLinearWatcher": "Linear Watcher を編集", + "enable": "有効にする", + "enabled": "有効", + "enabledHelp": "ポーリングを一時停止または再開します。", + "eng123OrPasteIssueUrl": "ENG-123 または課題の URL を貼り付けてください", + "enterAPositiveIntegerOrBlank": "正の整数を入力するか、空欄のままにしてください。", + "estimateMax": "見積もりの上限", + "estimateMaxHelp": "ポイントの上限値です (任意)。", + "estimateMaxPlaceholder": "例: 5", + "estimateMin": "見積もりの下限", + "estimateMinHelp": "ポイント下限。任意。", + "estimateMinPlaceholder": "例: 1", + "executorProfile": "実行者プロファイル", + "failedToLoadConfig": "Linear設定の読み込み失敗: {{error}}", + "fallbackIssue": "Linear課題", + "fallsBackToStepDefault": "任意。ステップ既定にフォールバック。", + "filter": "フィルター", + "foundNewIssues_one": "新しい課題 {{count}} 件見つかった。タスクはすぐ表示。", + "foundNewIssues_other": "新しい課題 {{count}} 件見つかった。タスクはすぐ表示。", + "import": "インポート", + "importFromLinear": "Linearからインポート", + "importFromLinearIssueUrlOr": "Linear課題URLか識別子からインポート", + "importLinearIssue": "Linear課題をインポート", + "integrationDisabled": "Linear連携は無効。", + "interval": "間隔", + "intervalMinutes_one": "{{count}}分", + "intervalMinutes_other": "{{count}}分", + "labels": "ラベル", + "labelsHelp": "クリックで切り替え。選択ラベルのいずれかに一致。", + "labelsHelpNoTeam": "チーム選んで、特定ラベルを選ぶ。", + "lastPolled": "最終取得", + "linearIntegration": "Linear連携", + "linearIntegrationDescription": "このワークスペースを個人APIキーでLinearに接続。資格情報は選択ワークスペース向けにサーバー側で暗号化保存。", + "linearWatcher": "Linearウォッチャー", + "linearWatchers": "Linearウォッチャー", + "linearWatchersDescription": "Linearフィルターをポーリングし、新規一致した課題ごとにKandevタスク自動作成。", + "loading": "読み込み中...", + "loadingEllipsis": "読み込み中…", + "loadingIssue": "課題読み込み中…", + "loadingIssues": "課題読み込み中…", + "loadingLabels": "ラベル読み込み中…", + "loadingStates": "状態読み込み中…", + "loadingTeams": "チーム読み込み中…", + "maxInflightTasks": "同時進行タスク上限", + "maxInflightTasksHelp": "このウォッチャーが作る未完了タスク上限。空欄なら上限なし。上限到達で新規一致は次回ポーリングへ延期。", + "me": "自分", + "never": "なし", + "newWatcher": "新しいウォッチャー", + "noCap": "(上限なし)", + "noDefault": "既定なし", + "noDescription": "説明なし。", + "noIssuesMatchYourFilters": "フィルターに一致する課題なし。", + "noLabelsAvailableForThisTeam": "このチームで使えるラベルなし。", + "noLinearWatchersConfiguredCreateOne": "Linear ウォッチャー未設定。1つ作成して、絞り込み済み課題からタスク自動作成。", + "noNewIssuesMatched": "新しい課題に一致なし。", + "noResults": "結果なし", + "notConfiguredNotice": "Linear 未設定。ここで課題見るには、<2>Linear を設定。", + "noWorkflowStatesAvailable": "利用可能なワークフロー状態なし。", + "openInLinear": "Linear で開く", + "openIssueDetails": "課題詳細を開く", + "openLinearIssue": "Linear の課題を開く", + "page": "ページ", + "pasteALinearIssueUrlOr": "Linear の課題 URL か識別子を貼り付け (ENG-123)", + "pasteAnApiKeyToTest": "接続テスト用 API キーを貼り付け", + "pause": "一時停止", + "paused": "一時停止中", + "pickATeamFirst": "先にチーム選択", + "placeholderAssigneeDisplayName": "担当者表示名", + "placeholderCreatorDisplayName": "課題作成者表示名", + "placeholderIssueDescription": "課題説明本文", + "placeholderIssueIdentifier": "課題識別子", + "placeholderIssueTitle": "課題タイトル", + "placeholderIssueUrl": "Linear の課題 URL", + "placeholderPriorityLabel": "優先度ラベル", + "placeholderTeamKey": "チームキー", + "placeholderWorkflowStateName": "ワークフロー状態名", + "pollIntervalHelp": "検索の再実行間隔。最小 60秒、最大 3600秒。", + "pollIntervalSeconds": "ポーリング間隔 (秒)", + "priority": "優先度", + "priorityHelp": "クリックで切り替え。選択した優先度のいずれかに一致する課題に一致。", + "priorityHigh": "高", + "priorityLow": "低", + "priorityMedium": "中", + "priorityNone": "優先度なし", + "priorityUrgent": "緊急", + "promptFieldHelp": "各新規課題ごとにエージェントへ送るプロンプト。{{token}} を入力してプレースホルダー挿入。", + "query": "クエリ", + "queryHelp": "タイトルと説明をまたぐ自由文一致。任意。", + "queryPlaceholder": "認証のバグ", + "reEnableItInSettings": "設定で再有効化", + "refresh": "更新", + "removeConfiguration": "設定を削除", + "removeLinearConfigurationConfirm": "Linear設定を削除する?", + "resetCompleteDeletedTasks_one": "リセット完了。{{count}}件のタスク削除。次のポーリングで一致分を再インポートする。", + "resetCompleteDeletedTasks_other": "リセット完了。{{count}}件のタスク削除。次のポーリングで一致分を再インポートする。", + "resetCompleteNoTasksDeleted": "リセット完了。次のポーリングで一致分を再インポートする。", + "resetFailed": "リセット失敗: {{error}}", + "resetWatch": "監視をリセット", + "savedLeaveBlank": "(保存済み。空欄なら現在の値を維持)", + "saveFailed": "保存失敗: {{error}}", + "saving": "保存中…", + "searchByIdTitleOrDescription": "ID、タイトル、説明で検索", + "selectWorkflow": "ワークフローを選択", + "selectWorkspace": "ワークスペースを選択", + "sortCreatedAsc": "作成順 (古い順)", + "sortCreatedDesc": "作成順 (新しい順)", + "sortDefault": "デフォルト (Linear順)", + "sortPriorityAsc": "優先度 (低 → 高)", + "sortPriorityDesc": "優先度 (高 → 低)", + "sortUpdatedAsc": "更新順 (更新が古い順)", + "sortUpdatedDesc": "更新順 (更新が新しい順)", + "startTask": "タスク開始", + "states": "状態", + "statesHelp": "状態をクリックして切り替え。空ならチーム内の全状態に一致する。", + "statesHelpNoTeam": "チームを選んで特定ワークフロー状態を選択。", + "taskPrompt": "タスクプロンプト", + "team": "チーム", + "teamHelp": "一致を1チームに絞る。", + "testConnection": "接続をテスト", + "testFailed": "失敗: {{error}}", + "testing": "テスト中…", + "unassigned": "未割り当て", + "unknownAccount": "不明なアカウント", + "unknownError": "不明なエラー", + "update": "更新", + "updatedAgo": "· {{time}}前に更新", + "updatedTime": "{{time}}に更新", + "updateFailed": "更新失敗: {{error}}", + "watchDialogDescription": "構造化フィルターで Linear をポーリングし、新しく一致した issue ごとに Kandev タスクを自動作成する。必要なら repository を紐づけて各タスクをそのコードベースで実行。未設定なら repository なしで実行。", + "watcherCreated": "ウォッチャー作成済み", + "watcherDeleted": "ウォッチャーを削除した", + "watcherUpdated": "ウォッチャーを更新した", + "workflow": "ワークフロー", + "workflowHelp": "このワークフローにタスクを作成する。", + "workflowStep": "ワークフローステップ", + "workflowStepHelp": "新規タスクの初期ステップ。", + "workspaceHelp": "このウォッチャーが作成するタスクは、選択したワークスペースに入る。", + "yourLinearApiKeyIsInvalid": "Linear API キーが無効か、失効した。再接続してこの問題を見る。" +} diff --git a/apps/web/src/locales/ja/lsp.json b/apps/web/src/locales/ja/lsp.json new file mode 100644 index 0000000000..f9eca1db4a --- /dev/null +++ b/apps/web/src/locales/ja/lsp.json @@ -0,0 +1,78 @@ +{ + "activeWorkItems_one": "{{count}} 件の作業項目がアクティブ", + "activeWorkItems_other": "{{count}} 件の作業項目がアクティブ", + "applicationStatusBar": "アプリケーションのステータスバー", + "applicationStatusBarDescription": "並べ替え可能なアプリケーションのステータスバーに LSP ステータスを表示する。このバーが無効、またはタッチ向けレイアウトが有効なら、代わりにエディターツールバーを使う。", + "autoInstallUnsupported": "このタスクホストでは自動インストール不可", + "chooseStatusLocation": "LSP の起動、インデックス作成、接続の詳細をどこに表示するか選ぶ。", + "closeLanguageServerStatus": "言語サーバーのステータスを閉じる", + "connected": "接続済み", + "connecting": "接続中", + "connection": "接続", + "connectionAndProjectAnalysis": "接続とプロジェクト分析", + "connectionClosed": "接続を閉じた", + "crossFileDefinitionsMayBeIncomplete": "この作業が有効な間、ファイルをまたぐ定義と参照は不完全な場合がある。", + "crossFileFeaturesAfterInitialization": "初期化完了後、ファイルをまたぐ機能が使える。", + "crossFileFeaturesUnavailable": "初期化完了まで、ファイルをまたぐ機能は使えない。", + "editorToolbar": "エディターツールバー", + "editorToolbarDescription": "アクティブファイルのエディター操作の横に LSP ステータスを表示する。", + "elapsed": "経過 {{elapsed}}", + "elapsedDurationParts": "{{major}} {{minor}}", + "elapsedHours_one": "{{value}} 時間", + "elapsedHours_other": "{{value}} 時間", + "elapsedMinutes_one": "{{value}} 分", + "elapsedMinutes_other": "{{value}} 分", + "elapsedSeconds_one": "{{value}} 秒", + "elapsedSeconds_other": "{{value}} 秒", + "enableAutoInstall": "設定 → エディターで自動インストールを有効にする。", + "error": "エラー", + "initializationLongRunning": "初期化にいつもより時間がかかっている", + "installFailed": "インストール失敗", + "installKotlinLsp": "タスクホストに kotlin-lsp をインストールして、タスクを再起動する。", + "installLanguageServerManually": "タスクホストに言語サーバーを手動でインストールして、再試行する。", + "installingLanguageServer": "言語サーバーをインストール中", + "kotlinInitializationGuidance": "Kotlin LSP は Gradle プロジェクトを import 中かもしれない。初期化完了まで、ファイル間機能は使えない。", + "languageServer": "言語サーバー", + "languageServerConnection": "言語サーバー: {{summary}}", + "languageServerDescription": "{{language}} 言語サーバー: {{summary}}", + "languageServerError": "LSP エラー", + "languageServerExited": "言語サーバー終了", + "languageServerFailedToStart": "言語サーバー起動失敗", + "languageServerIsOff": "言語サーバーはオフ", + "languageServerNotFound": "言語サーバー見つからない", + "languageServerOpenStatus": "言語サーバー: {{summary}}。ステータスを開く", + "languageServerStatus": "言語サーバーの状態", + "languageServerUnavailable": "言語サーバー利用不可", + "noActiveWorkspace": "アクティブなワークスペースなし", + "noBackgroundWorkReported": "バックグラウンド作業の報告なし", + "noBackgroundWorkReportedDescription": "言語サーバーは進行中のプロジェクト解析を報告していない。ファイル間結果はまだ温まる途中かもしれない。", + "noPercentage": "サーバーは割合を出していない。", + "off": "オフ", + "openStatus": "{{description}}。ステータスを開く", + "progressAppearsDuringInitialization": "言語サーバー初期化開始で、プロジェクト進捗が表示される。", + "progressPercentage": "{{title}}: {{percentage}}%", + "progressUnavailable": "プロジェクト進捗利用不可", + "progressUnavailableDescription": "接続を再試行して、プロジェクト進捗を受け取る。", + "progressWillClear": "言語サーバー停止で、プロジェクト進捗は消える。", + "projectAnalysis": "プロジェクト解析", + "reportedWorkDisclaimer": "これは報告された作業項目だけを示す。完全なプロジェクト索引ではない。", + "retryLanguageServer": "言語サーバーを再試行", + "serverProcessStarted": "サーバープロセス開始", + "serverStillInitializing": "Kandev が LSP 初期化待ちの間、サーバープロセスはまだ実行中。", + "serverWorkFinished": "サーバー報告の作業完了", + "startLanguageServer": "言語サーバーを開始", + "startServerForProgress": "プロジェクト進捗を受け取るため、言語サーバーを開始する。", + "startingLanguageServer": "言語サーバー開始中", + "statusLocation": "ステータス位置", + "statusLocationAria": "LSP ステータス位置", + "stopLanguageServer": "言語サーバーを停止", + "stopping": "停止中", + "stoppingLanguageServer": "言語サーバー停止中", + "taskExecutorUnsupported": "このタスク実行環境は言語サーバー非対応", + "thisMayTakeAMoment": "少し時間かかるかも...", + "tooManyLanguageServers": "有効な言語サーバー多すぎる", + "unavailable": "利用不可", + "waitingForInitializeResponse": "language server が LSP initialize リクエストに応答するのを待機中。", + "waitingForLanguageServer": "language server を待機中", + "webSocketError": "WebSocket エラー" +} diff --git a/apps/web/src/locales/ja/needsYouInbox.json b/apps/web/src/locales/ja/needsYouInbox.json new file mode 100644 index 0000000000..c15cbbb692 --- /dev/null +++ b/apps/web/src/locales/ja/needsYouInbox.json @@ -0,0 +1,39 @@ +{ + "questionFromAgent": "agent からの質問", + "rowActions": "行アクション", + "dismiss": "閉じる", + "dismissFailed": "この質問を閉じられなかった。もう一度試せ。", + "snooze": "後で", + "snoozeDuration1h": "1時間", + "snoozeDuration4h": "4時間", + "snoozeDuration24h": "24時間", + "snoozeFailed": "この質問を後回しにできなかった。もう一度試せ。", + "anotherCallerResolved": "他の人がすでに「{{question}}」に回答済み。", + "anotherCallerRejected": "他の人がすでに「{{question}}」を拒否済み。", + "bundleNoLongerActive": "「{{question}}」はもう回答待ちじゃない。", + "errorTitle": "受信箱を読み込めなかった", + "errorDescription": "待機中の質問の読み込みで問題発生。", + "retry": "再試行", + "emptyTitle": "{{workspace}} で待機中のものはない。", + "emptyDescription": "この一覧は、この workspace で agent をブロックしてる質問だけ対象。他 workspace の bundle、保留中の権限リクエスト、親質問レコード、自分の snooze 済みや dismiss 済み行は数えない。", + "hiddenNotice_one": "{{count}}件の質問が自分の dismiss か snooze で非表示。", + "hiddenNotice_other": "{{count}}件の質問が自分の dismiss か snooze で非表示。", + "showHidden": "非表示を表示", + "hideHidden": "隠す", + "hiddenLoading": "非表示の質問を読み込み中…", + "hiddenLoadFailed": "非表示の質問を読み込めなかった。もう一度試せ。", + "hiddenEmpty": "今は非表示なし。", + "snoozedUntil": "後で表示、{{time}} に再表示", + "dismissed": "閉じた", + "restore": "元に戻す", + "restoreFailed": "この質問を復元できなかった。もう一度試せ。", + "truncatedNotice": "最初の質問だけ表示中。まだ続き待ちあり。", + "openTask": "task を開く", + "questionCount_one": "この bundle に {{count}}件の質問", + "questionCount_other": "この bundle に {{count}}件の質問", + "emptyTitleUnnamedWorkspace": "この workspace で待機中のものはない。", + "tabLabel": "必要事項", + "failedClauseSome_one": "この一覧は失敗した task を数えない。{{count}}件の task も失敗済み。Failed タブを見ろ。", + "failedClauseSome_other": "この一覧は失敗した task を数えない。{{count}}件の task も失敗済み。Failed タブを見ろ。", + "failedClauseNone": "この一覧には失敗タスクは含まれない。今このワークスペースで失敗はない。Failed タブをいつでも確認して。" +} diff --git a/apps/web/src/locales/ja/office.json b/apps/web/src/locales/ja/office.json new file mode 100644 index 0000000000..c9b034f5e1 --- /dev/null +++ b/apps/web/src/locales/ja/office.json @@ -0,0 +1,1027 @@ +{ + "aCronScheduleExample": "cron スケジュール。例: <1>{{cron}} で平日 9:00", + "actionOnExceed": "超過時の動作", + "actions": "アクション", + "actionsByAgentsAndUsersAre": "エージェントとユーザーのアクションはここに記録される。", + "actionValue": "アクション: {{action}}", + "activeAgents": "アクティブなエージェント", + "activeSessionCount_one": "{{count}} 件のアクティブセッション", + "activeSessionCount_other": "{{count}} 件のアクティブセッション", + "activity": "アクティビティ", + "activityFilterAll": "すべての種類", + "activityFilterBudget": "予算", + "activityFilterTask": "タスク", + "activityStatusChangedTo": "ステータスが {{status}} に変更された", + "adapter": "アダプタ", + "add": "追加", + "addADescription": "説明を追加...", + "addApprover": "承認者を追加", + "addApprovers": "承認者を追加", + "addAsLocalPath": "ローカルパスとして追加", + "addAsRemoteUrl": "リモート URL として追加", + "addATitleToCreateATask": "タイトルを追加するとタスクを作成できる", + "addChannel": "チャンネルを追加", + "addCustom": "カスタムを追加", + "addDescription": "説明を追加...", + "addPolicy": "ポリシーを追加", + "addProvider": "プロバイダーを追加…", + "addRepository": "リポジトリを追加", + "addReviewer": "レビュー担当者を追加", + "addReviewers": "レビュー担当者を追加", + "addToOrder": "順序に追加", + "advanced": "詳細", + "agent": "エージェント", + "agentAutoPaused": "エージェントが自動一時停止された", + "agentAwaitingApproval": "エージェントは承認待ち", + "agentConfigurationUpdated": "エージェント設定を更新した", + "agentCeoReportsToError": "CEO エージェントに上司は設定できない。", + "agentCount_one": "{{count}} 件のエージェント", + "agentCount_other": "{{count}} 件のエージェント", + "agentCreated": "エージェントを作成した", + "agentCreatedSkillsMustBeApproved": "エージェントが作成したスキルは、有効化前に承認が必要", + "agentError": "エージェントエラー", + "agentFinishedWorkspaceReadyForReview": "エージェント完了。ワークスペースはレビュー待ち。", + "agentIsActivelyWorkingOnThis": "エージェントがこの作業を進行中。", + "agentIsWorkingMessageWillBe": "エージェント作業中。メッセージはキューに入る。", + "agentName": "エージェント名", + "agentNotFound": "エージェント見つからない。", + "agentRecentTasks": "最近のタスク", + "agentRunActivity": "実行アクティビティ", + "agentRunFailed": "エージェント実行失敗", + "agentReportsToCycleError": "報告構造に循環は含められない。", + "agentReportsToInvalidError": "このワークスペースのエージェントを選択。", + "agentReportsToSelfError": "エージェントは自分に報告できない。", + "agents": "エージェント", + "agentSections": "エージェントセクション", + "agentsEnabled": "エージェント有効", + "agentSessionEnded": "エージェントセッション終了", + "agentsInheritThisTierUnlessThey": "エージェントはこのティアを継承するが、上書きもできる。ルーティングされた各プロバイダは、このティアをモデルにマップする必要がある。", + "agentsThatHaveThisSkillAssigned": "このスキルが割り当てられたエージェント", + "agentSuccessRate": "成功率", + "agentThatPicksUpRunsTriggered": "このルーチンでトリガーされた実行を拾うエージェント", + "agentTierProfiles": "エージェントティアプロファイル", + "agentUpdated": "エージェント更新済み", + "agentWillUseThisStarterTask": "{{name}} はこのスタータタスクを使ってリポジトリを確認し、チームをセットアップし、次の作業を承認用に提案する。", + "agentWorkedForSeconds": "{{agent}} は {{seconds}}s 作業", + "agentWorkedForSecondsRanCommands_one": "{{agent}} は {{seconds}}s 作業 · {{count}} コマンド実行", + "agentWorkedForSecondsRanCommands_other": "{{agent}} は {{seconds}}s 作業 · {{count}} コマンド実行", + "agentWorkingForSeconds": "{{agent}} が {{seconds}}s 作業中", + "agentWorkingForSecondsRanCommands_one": "{{agent}} が {{seconds}}s 作業中 · {{count}} コマンド実行", + "agentWorkingForSecondsRanCommands_other": "{{agent}} が {{seconds}}s 作業中 · {{count}} コマンド実行", + "alertPercent": "警告: {{percent}}%", + "alertThreshold": "警告しきい値 (%)", + "all": "すべて", + "allClear": "異常なし。", + "allMemoryCleared": "すべてのメモリを消去済み", + "allProvidersHealthy": "すべてのプロバイダ正常。", + "alwaysCreate": "常に作成", + "aNameEGDailyStandup": "名前 (例: \"Daily standup\")", + "aNameForYourWorkspaceYou": "ワークスペース名。あとで変更できる。", + "appearance": "外観", + "appearanceSettingsSaved": "外観設定を保存済み", + "applying": "適用中...", + "applyOnDiskYamlFilesTo": "ディスク上の YAML ファイルをデータベースに適用。", + "approval": "承認", + "approvalsAlertsAndItemsNeedingYour": "承認、アラート、注意必要な項目がここに出る。", + "approve": "承認", + "approved": "承認済み", + "approver": "承認者", + "asc": "昇順", + "aSkillWithThisNameAlready": "この名前のスキルは既にある", + "assembledPrompt": "組み立て済みプロンプト", + "assignATaskToThisAgent": "実行履歴を見るには、このエージェントにタスク割り当て。", + "assignee": "担当者", + "aTaskTitleDescriptionWhatThe": "タスクのタイトル + 説明。エージェントが毎回やること", + "aUniqueNameForThisAgent": "このエージェントの一意な名前。例: CEO, Frontend Worker", + "autoCommitAfterApproval": "承認後、自動コミット", + "automaticProviderFallback": "プロバイダ自動フォールバック", + "backToTasks": "タスクへ戻る", + "barTotal": "{{label}}: {{total}}", + "beingWorkedOn": "作業中", + "beyondThisCountMissedTicksAreNotCounted": "この回数を超えると、見逃した tick はカウントも報告もされない。デフォルト 25。エージェントはちょうど 1 回だけ起動する。", + "blockedActionRequired": "ブロック中。操作必要", + "blockNewTasks": "新規タスクをブロック", + "boardView": "ボード表示", + "botTokenChatId": "{\"bot_token\": \"...\", \"chat_id\": \"...\"}", + "branch": "ブランチ", + "browseSkillsSh": "skills.sh を見る", + "budgetActionBlockNewTasks": "新規タスクをブロック", + "budgetActionNotifyOnly": "通知のみ", + "budgetActionPauseAgent": "エージェントを一時停止", + "budgetAlert": "予算アラート", + "budgetAmount": "予算: {{amount}}", + "budgetCapConcurrencyAndExecutionEnvironment": "予算上限、同時実行数、実行環境。", + "budgetLimitsConcurrencyAndExecutionEnvironment": "予算制限、同時実行数、実行環境。", + "budgetPeriodDaily": "毎日", + "budgetPeriodMonthly": "毎月", + "budgetPeriodTotal": "合計", + "budgetPeriodYearly": "毎年", + "budgetPolicies": "予算ポリシー", + "budgetPolicyCreated": "予算ポリシー作成済み", + "budgetPolicyDeleted": "予算ポリシー削除済み", + "budgets": "予算", + "bundledWithKandev": "kandev にバンドルされています", + "bundledWithKandevVersion": "kandev v{{version}} にバンドルされています", + "byAgent": "エージェント別", + "byModel": "モデル別", + "byProject": "プロジェクト別", + "byProvider": "プロバイダー別", + "cached": "キャッシュ済み:", + "cachedTokens": "キャッシュ済みトークン", + "cancelReasonAssigneeChanged": "担当者が変更されました", + "cancelReasonReviewParticipantChanged": "レビュー担当者が変更されました", + "cancelReasonTaskNotFound": "タスクが見つかりません", + "cancelReasonTaskTerminal": "タスクが完了しました", + "capabilities": "機能", + "capabilityCreateAgent": "エージェントを作成", + "capabilityCreateSubtask": "サブタスクを作成", + "capabilityDeleteSkills": "スキルを削除", + "capabilityListSkills": "スキルを一覧表示", + "capabilityModifyAgents": "エージェントを変更", + "capabilityPostComment": "コメントを投稿", + "capabilityReadMemory": "メモリを読み取り", + "capabilityRequestApproval": "承認を依頼", + "capabilitySpawnAgentRun": "実行を開始", + "capabilityUpdateTaskStatus": "タスクのステータスを更新", + "capabilityWriteMemory": "メモリに書き込み", + "catchUpMax": "キャッチアップ上限", + "catchUpPolicy": "キャッチアップポリシー", + "ceoManagesOtherAgentsWorkersExecute": "CEO が他のエージェントを管理し、作業者がタスクを実行します", + "changesPushed": "変更をプッシュしました", + "channelAdded": "チャンネルを追加しました", + "channelDeleted": "チャンネルを削除しました", + "chooseTheProfileFamilyOfficeShould": "エージェントに Frontier, Balanced, Economy のいずれかの作業を割り当てる際に、Office が使用するプロファイルファミリーを選択してください。", + "clearAll": "すべてクリア", + "clearAllMemory": "すべてのメモリを消去しますか?", + "clearFilters": "フィルターをクリア", + "cliAgentProfile": "CLI エージェントプロファイル", + "clickToOpenRoutines": "クリックして Routines を開きます。", + "clone": "複製", + "cloneFailed": "複製に失敗しました", + "cloning": "複製中...", + "coalesce": "統合", + "coalesceIfActive": "有効なら統合", + "collapse": "折りたたむ", + "color": "色", + "comingSoonOnlyLocalIsSupported": "近日対応。今は Local のみ対応。", + "commitMessage": "コミットメッセージ", + "compareWorkspaceDatabaseWithOnDisk": "ワークスペースのデータベースとディスク上の設定ファイルを比較。", + "concurrency": "同時実行数", + "concurrencyPolicy": "同時実行ポリシー", + "configJson": "設定 (JSON)", + "configSyncSectionTitle": "設定同期", + "configSyncDescription": "GitHub または GitLab リポジトリから、エージェント、スキル、プロジェクト、ルーチンを定期的に自動同期。", + "configSyncProviderLabel": "プロバイダー", + "configSyncProjectPath": "プロジェクトパス", + "configSyncProjectPathPlaceholder": "group/project", + "configSyncRepoOwner": "リポジトリ所有者", + "configSyncRepoOwnerPlaceholder": "kdlbs", + "configSyncRepoName": "リポジトリ名", + "configSyncRepoNamePlaceholder": "kandev-office-config", + "configSyncBranchLabel": "ブランチ", + "configSyncBranchPlaceholder": "main", + "configSyncDirectoryLabel": "ディレクトリ", + "configSyncRepositoryRoot": "リポジトリルート", + "configSyncAutoSync": "自動同期", + "configSyncPollIntervalSeconds": "同期間隔(秒)", + "configSyncSeconds": "秒", + "configSyncPollEnabledHint": "Kandev がこの間隔でリポジトリ変更を確認し、自動反映。", + "configSyncPollDisabledHint": "自動同期オフ。今すぐ同期で最新設定を手動取得。", + "configSyncSaving": "保存中...", + "configSyncRemove": "設定同期を削除", + "configSyncRemoveConfirm": "このリポジトリからの設定同期を停止する? すでに作成済みのエージェント、スキル、プロジェクト、ルーチンはそのまま残る。", + "configSyncEditConfiguration": "設定を編集", + "configSyncLastSynced": "最終同期 {{when}}", + "configSyncLastAttempt": "最終試行 {{when}}", + "configSyncWaitingForFirstSync": "初回同期待ち", + "configSyncNotSyncedYet": "まだ未同期", + "configSyncDirectoryLine": "ディレクトリ: {{path}}", + "configSyncEverySeconds_one": "{{count}} 秒ごと", + "configSyncEverySeconds_other": "{{count}} 秒ごと", + "configSyncAutoSyncOff": "自動同期オフ", + "configSyncSyncingFromRepository": "<1>{{repository}} から同期中", + "configSyncSyncNow": "今すぐ同期", + "configSyncSyncFailed": "同期失敗", + "configSyncSyncFailedWithError": "同期失敗: {{error}}", + "configSyncSyncCompletedWithWarnings": "警告ありで同期完了", + "configSyncSyncCompleted": "同期完了", + "configSyncFailedToLoadConfig": "設定同期の設定を読み込めなかった: {{error}}", + "configSyncConfigSaved": "設定同期の設定を保存した", + "configSyncSaveFailed": "設定同期の設定を保存できなかった: {{error}}", + "configSyncRemoved": "設定同期を削除した", + "configSyncRemoveFailed": "設定同期を削除できなかった: {{error}}", + "configSyncActiveGuardReason": "設定同期はこのワークスペースの有効な設定ソースです。", + "configSyncWarningsRemainder_one": "あと {{count}} 件の警告", + "configSyncWarningsRemainder_other": "あと {{count}} 件の警告", + "configuration": "設定", + "configure": "設定する", + "configured": "設定済み", + "configuredRouteTooltip": "ワークスペース + エージェント上書きの主ルート。", + "confirmTheDetailsBelowEverythingCan": "下の内容を確認。全部あとで変更できる。", + "connectAGitRepositoryToVersion": "git リポジトリを接続して、このワークスペース設定をバージョン管理する。", + "controlWhatThisAgentIsAllowed": "このエージェントの許可内容を制御。既定値はエージェントの役割ベース。", + "coordinatorAgent": "コーディネーターエージェント", + "copied": "コピーした!", + "copySlug": "スラッグをコピー", + "cost": "コスト", + "costs": "コスト", + "countAvailable_one": "{{count}} 件利用可", + "countAvailable_other": "{{count}} 件利用可", + "countDone_one": "{{count}} 件完了", + "countDone_other": "{{count}} 件完了", + "countInProgress_one": "{{count}} 件進行中", + "countInProgress_other": "{{count}} 件進行中", + "countLive_one": "{{count}} 件稼働中", + "countLive_other": "{{count}} 件稼働中", + "cpuCores": "CPU コア", + "create": "作成", + "createACeoAgentToStart": "CEO エージェントを作って、プロジェクト横断で仕事を統括し始める。", + "createAgent": "エージェント作成", + "createAgentsAndSetTheirReporting": "エージェントを作成し、報告体系を設定して組織図を見る。", + "createANewCliProfile": "+ 新しい CLI プロファイルを作成", + "createATaskOrLetAgents": "タスクを作成するか、エージェントにルーチンから生成させます。", + "createLaunch": "作成して起動", + "createNewSkill": "新しいスキルを作成", + "createOneInline": "その場で作成", + "createPolicy": "ポリシーを作成", + "createProject": "プロジェクトを作成", + "createRoutine": "ルーチンを作成", + "createSkill": "スキルを作成", + "createTask": "タスクを作成", + "createYourCoordinatorAgent": "コーディネーターエージェントを作成", + "createYourFirstProject": "最初のプロジェクトを作成", + "creating": "作成中...", + "cron": "Cron", + "cronExpression": "Cron式", + "cronExpressionTitleCase": "Cron式", + "current": "現在", + "currentlyMapsTo": "現在は次に対応しています", + "currentRouteTooltip": "次回起動の選択内容を反映します。進行中のセッション詳細は各実行にあります。", + "currentUtilizationOfSubscriptionRateLimit": "サブスクリプションのレート制限ウィンドウの現在の利用状況。", + "daily": "毎日", + "dailyDepUpdate": "依存関係の毎日更新", + "dailySuccessRate": "日次成功率", + "dangerZone": "危険ゾーン", + "dashboard": "ダッシュボード", + "date": "日付", + "defaultCeiling": "デフォルト上限", + "defaultCeilingDescription": "現在のUTC日のこのワークスペースの支出が下記の上限に達すると、新しい無人実行をブロックします。有人実行は決してブロックしません。エージェントを一時停止する、または新しいタスクをブロックするワークスペースレベルの日次ポリシーがある場合、この上限は置き換えられます。通知のみのポリシーは置き換えず、両方が同時に適用されます。", + "defaultCeilingMustBePositive": "デフォルト上限は0より大きくする必要があります", + "defaultCeilingUpdated": "デフォルト上限を更新しました", + "defaultFor": "デフォルト対象", + "defaultForRole": "{{role}}のデフォルト", + "defaultTier": "デフォルトティア", + "defaultWorkspace": "デフォルトワークスペース", + "degraded": "低下", + "delete": "削除", + "deleteChannel": "チャンネルを削除", + "deleted": "{{filename}}を削除しました", + "deleteEntry": "項目を削除", + "deletePolicy": "ポリシーを削除", + "deleteProject": "プロジェクトを削除", + "deleteWorkspace": "ワークスペースを削除", + "deleteWorkspaceSummary": "これにより、{{agents}} エージェント、{{tasks}} タスク、{{skills}} スキル、およびワークスペースフォルダが完全に削除されます。", + "deleting": "削除中...", + "desc": "概要", + "description": "説明", + "directoryPath": "ディレクトリパス", + "dirty": "変更あり", + "discardDraft": "下書きを破棄", + "discord": "Discord", + "dockerImage": "Dockerイメージ", + "dockerImageExample": "例: node:20-slim", + "dockerImageWithExample": "Dockerイメージ (例: node:20-slim)", + "duration": "所要時間", + "editable": "編集可能", + "editDefaultCeiling": "デフォルト上限を編集", + "editRoutine": "ルーチンを編集", + "effectiveActionsThisAgentCanRequest": "このエージェントが Office の実行中に要求できる有効なアクションです。", + "eGCodeReview": "例: code-review", + "eGFrontendWorker": "例: Frontend Worker", + "entityId": "エンティティID", + "events": "イベント", + "exceeded": "超過", + "executor": "実行者", + "executorConfiguration": "実行設定", + "executorConfigurationSaved": "実行設定を保存しました", + "executorPreference": "実行設定の優先設定", + "executorType": "実行者タイプ", + "existingConfigurationFound": "既存の設定が見つかりました", + "expand": "展開", + "export": "エクスポート", + "exportedToFilesystem": "ファイルシステムにエクスポートしました", + "exportFilesCount_one": "{{count}} ファイルをエクスポート", + "exportFilesCount_other": "{{count}} ファイルをエクスポート", + "exportSelectionSummary": "{{workspace}} のエクスポート · {{selected}} / {{total}} ファイルを選択中", + "exportConfigurationChanged": "設定が変更されました。ダウンロード前にプレビューを再読み込みしてください。", + "exportSvg": "SVGをエクスポート", + "exportToFilesystem": "ファイルシステムにエクスポート", + "failed": "失敗", + "failedToAddChannel": "チャンネルの追加に失敗しました", + "failedToAddRepository": "リポジトリの追加に失敗しました", + "failedToApprove": "承認に失敗しました", + "failedToClearMemory": "メモリのクリアに失敗しました", + "failedToCompleteSetup": "セットアップを完了できませんでした", + "failedToCreateAgent": "エージェントの作成に失敗しました", + "failedToCreateBudgetPolicy": "予算ポリシーの作成に失敗しました", + "failedToCreateFile": "ファイルの作成に失敗しました", + "failedToCreateIssue": "Issueの作成に失敗しました", + "failedToCreateProject": "プロジェクトの作成に失敗しました", + "failedToCreateRoutine": "ルーティンの作成に失敗しました", + "failedToCreateSkill": "スキルの作成に失敗しました", + "failedToDelete": "削除に失敗しました", + "failedToDeleteBudgetPolicy": "予算ポリシーの削除に失敗しました", + "failedToDeleteChannel": "チャネルの削除に失敗しました", + "failedToDeleteMemoryEntry": "メモリエントリの削除に失敗しました", + "failedToDeleteProject": "プロジェクトの削除に失敗しました", + "failedToDeleteRoutine": "ルーティンの削除に失敗しました", + "failedToDeleteWorkspace": "ワークスペースの削除に失敗しました", + "failedToExportToFilesystem": "ファイルシステムへのエクスポートに失敗しました", + "failedToImportFromFilesystem": "ファイルシステムからのインポートに失敗しました", + "failedToImportSettings": "設定のインポートに失敗しました", + "failedToImportSkill": "スキルのインポートに失敗しました: {{msg}}", + "failedToLoad": "読み込みに失敗しました", + "failedToLoadActivity": "アクティビティの読み込みに失敗しました", + "failedToLoadBudgets": "予算の読み込みに失敗しました", + "failedToLoadChannels": "チャネルの読み込みに失敗しました", + "failedToLoadCostData": "コストデータの読み込みに失敗しました", + "failedToLoadDefaultCeiling": "既定の上限の読み込みに失敗しました", + "failedToLoadDeletionSummary": "削除サマリーの読み込みに失敗しました", + "failedToLoadDiffs": "差分の読み込みに失敗しました", + "failedToLoadExportBundle": "エクスポートバンドルの読み込みに失敗しました", + "failedToDownloadExport": "選択したエクスポートのダウンロードに失敗しました", + "failedToLoadInstructions": "手順の読み込みに失敗しました", + "failedToLoadMemory": "メモリの読み込みに失敗しました", + "failedToLoadMoreTasks": "さらにタスクを読み込めませんでした", + "failedToLoadProject": "プロジェクトの読み込みに失敗しました", + "failedToLoadTask": "タスクの読み込みに失敗しました", + "failedToLoadTasks": "タスクの読み込みに失敗しました", + "failedToRefreshTasks": "タスクの更新に失敗しました", + "failedToRefreshUtilization": "使用率の更新に失敗しました", + "failedToReject": "却下に失敗しました", + "failedToRemoveRepository": "リポジトリの削除に失敗", + "failedToReturnAgentToService": "エージェントをサービスに戻せなかった", + "failedToRunRoutine": "ルーチンの実行に失敗", + "failedToSave": "保存に失敗", + "failedToSaveExecutorConfiguration": "実行設定の保存に失敗", + "failedToSaveProject": "プロジェクトの保存に失敗", + "failedToSaveRoutine": "ルーチンの保存に失敗", + "failedToSaveSettings": "設定の保存に失敗", + "failedToUpdateAgent": "エージェントの更新に失敗", + "failedToUpdateDefaultCeiling": "デフォルト上限の更新に失敗", + "failedToUpdateRoutine": "ルーチンの更新に失敗", + "failedToUpdateSkills": "スキルの更新に失敗", + "fallback": "フォールバック", + "filter": "絞り込み", + "filterSkills": "スキルを絞り込み...", + "finished": "完了", + "finishedAgo": "{{ago}}に完了", + "firesNow": "今すぐ発火", + "firstTask": "最初のタスク", + "fitToScreen": "画面に合わせる", + "forAgentInProject": "<0>対象 <1> <2>in <3>", + "foundWorkspacesOnFilesystem_one": "ファイルシステムでワークスペースを{{count}}件見つけた。設定を取り込んで開始する?", + "foundWorkspacesOnFilesystem_other": "ファイルシステムでワークスペースを{{count}}件見つけた。設定を取り込んで開始する?", + "general": "一般", + "gitUrlsOrLocalPathsWhere": "エージェントがこのプロジェクトで作業する Git URL またはローカルパス。", + "gitUrlsOrLocalPathsWhereShort": "エージェントが作業する Git URL またはローカルパス", + "giveAgentSomethingToDo": "{{name}} に何かやらせる", + "groupBy": "グループ化", + "healthy": "正常", + "hideApprover": "承認者を隠す", + "hideReviewer": "レビュー担当を隠す", + "highestUtilizationAcrossSubscriptionAgents": "サブスクリプション内エージェントで最大利用率", + "hours": "時間", + "howAgentSessionsRunForThis": "このプロジェクトでのエージェントセッションの動き方。", + "howAgentSessionsRunInheritProject": "エージェントセッションの動き方. 継承はプロジェクト, ワークスペースのデフォルトを使う", + "howAgentSessionsRunInheritUses": "エージェントセッションの動き方. 継承はワークスペースのデフォルトを使う", + "howFarBackToLookFor": "リカバリースイープ中に未開始タスクをどこまで遡って探すか", + "howManyTasksThisAgentCan": "このエージェントが同時に実行できるタスク数", + "identifier": "識別子", + "identity": "ID", + "importContinue": "インポートして続行", + "importedConfigEntries": "{{importedCount}} 件の設定エントリをインポート済み", + "importedFromFilesystemCreatedUpdated": "ファイルシステムからインポート済み(作成 {{created}}、更新 {{updated}})", + "importFromFilesystem": "ファイルシステムからインポート", + "importing": "インポート中...", + "in": "場所:", + "inbox": "受信箱", + "incomingFilesystemDatabase": "受信中 (Filesystem → Database)", + "inFlight": "進行中", + "inherit": "継承", + "inheritFromProjectWorkspace": "プロジェクト/ワークスペースから継承", + "inheritFromWorkspace": "ワークスペースから継承", + "inheritsTierFromRole": "ロールから <1>{{tier}} を継承。", + "inheritsTierFromWorkspace": "ワークスペースから <1>{{tier}} を継承。", + "inheritsWorkspacePolicyList": "ワークスペースポリシーを継承: {{list}}。", + "inheritsWorkspacePolicyNoneSet": "ワークスペースポリシーを継承 (wake-reason tiers 未設定)。", + "injectedContinuationSummary": "注入された継続サマリ", + "inProgress": "進行中", + "input": "入力", + "inputTokens": "入力トークン", + "inReview": "レビュー中", + "instructionFileCompletionDetail": "指示ファイル", + "instructionsTheAgentReceivesWhenThis": "このルーチンが起動したときにエージェントが受け取る指示", + "intended": "想定", + "itemsWaitingForYourReview": "レビュー待ち項目", + "kind": "種類", + "last14Days": "過去14日", + "last30Days": "過去30日", + "lastFired": "最終発火: {{when}}", + "lastRun": "最終実行", + "lastRunFailedAgo": "最終実行は {{ago}}に失敗", + "lastRunNever": "なし", + "latestRun": "最新実行", + "leadAgent": "リードエージェント", + "leadAgentName": "リード: {{name}}", + "limit": "上限 ($)", + "linked": "リンク済み", + "listView": "リスト表示", + "live": "ライブ", + "liveNow": "今ライブ", + "loadingExportBundle": "エクスポートバンドルを読み込み中...", + "backToExportFiles": "エクスポートファイルに戻る", + "loadingInstructions": "手順を読み込み中...", + "loadingProject": "プロジェクトを読み込み中...", + "loadingRuns": "実行を読み込み中...", + "loadingTasks": "タスクを読み込み中...", + "loadMore": "さらに読み込む", + "localDocker": "ローカル Docker", + "localStandalone": "ローカル(スタンドアロン)", + "logo": "ロゴ", + "main": "メイン", + "manage": "管理", + "manageSkillsInCompany": "Company のスキルを管理", + "mapOfficeAgentsToProvidersAnd": "Office エージェントを provider と tier にマッピング。制御されたフォールバック付き。詳細設定。デフォルトはオフ。", + "markFixed": "修正済みにする", + "marking": "マーク中...", + "maxConcurrent": "最大同時実行", + "maxConcurrentSessions": "最大同時セッション", + "memoryEntryDeleted": "メモリエントリを削除しました", + "memoryIsAccumulatedAsTheAgent": "エージェントがタスクを処理するにつれ、メモリが蓄積されます。", + "memoryMb": "メモリ (MB)", + "metaKey": "KEY", + "metaMode": "MODE", + "metaSource": "SOURCE", + "mine": "自分のもの", + "missingCount_one": "{{count}} 件不足", + "missingCount_other": "{{count}} 件不足", + "modelsUsed": "使用モデル", + "monthly": "月次", + "monthlyBudget": "月次予算 ($)", + "monthlySpendingLimit0Unlimited": "月次支出上限 ($0 = 無制限)", + "monthSpend": "月間支出", + "moreInfoAbout": "{{label}} の詳細", + "moreOptions": "その他のオプション", + "moveDown": "下へ移動", + "moveUp": "上へ移動", + "name": "名前", + "nameRoleAndReportingStructureFor": "このエージェントの名前、役割、報告体系。", + "needsAction": "対応が必要", + "never": "なし", + "neverRun": "実行しない", + "newAgent": "新規エージェント", + "newAgentHiresMustBeApproved": "新規エージェントの採用は、起動前に承認が必要", + "newAgentsMatchingTheseRolesGet": "このロールに一致する新規エージェントに、このスキルを自動付与", + "newIssue": "新規 issue", + "newProject": "新規プロジェクト", + "newRoutine": "新規ルーチン", + "newSkill": "新規スキル", + "newTask": "新規タスク", + "nextFire": "次回実行: {{when}}", + "nextIn": "次回は {{when}} 後", + "noActiveExecutionProfilesAreAvailable": "このプロバイダで有効な実行プロファイルなし。", + "noActiveSessionForThisTask": "このタスクの有効セッションなし。", + "noActivityYet": "まだアクティビティなし。", + "noAgentProfileConfigured": "エージェントプロファイル未設定", + "noAgentsAttached": "エージェント未接続", + "noAgentsInThisWorkspaceYet": "このワークスペースにエージェントまだなし。", + "noAgentsToDisplay": "表示するエージェントなし。", + "noAgentsYet": "まだエージェントなし。", + "noBudget": "予算なし", + "noBudgetPoliciesConfiguredAddOne": "予算ポリシー未設定。支出上限を強制するには追加。", + "noChangesDetected": "変更なし。", + "noChannelsConfiguredAddAChannel": "チャンネル未設定。外部メッセージ送信を有効にするにはチャンネル追加。", + "noCliAgentProfilesAvailableYet": "CLIエージェントプロファイルまだなし。", + "noConversationLinkedToThisRun": "この実行にリンクされた会話なし。", + "noCostDataYetCostsAre": "コストデータまだなし。エージェントがタスク実行時にコスト記録。", + "noEventsRecordedForThisRun": "この実行のイベント記録まだなし。", + "noGrouping": "グループ化なし", + "noInitialTask": "初期タスクなし", + "noInstructionFilesYet": "指示ファイルまだなし。", + "noMatches": "一致なし。", + "noMatchingSkills": "一致するスキルなし", + "noMemoryEntriesYet": "メモリエントリまだなし。", + "noMoreRuns": "これ以上の実行なし", + "none": "なし", + "noneLower": "なし", + "noneTopLevel": "なし (トップレベル)", + "noProject": "プロジェクトなし", + "noProjectsYet": "まだプロジェクトなし。", + "noProviderHasTierMapped": "どのプロバイダにも {{tier}} ティア未マップ。下のプロバイダティアマッピングで {{tier}} のモデルを設定。", + "noProviderInOrderHasTierMapped": "有効な順序で{{tier}}が割り当てられたプロバイダーなし。", + "noProviderMappedForTierHelp": "有効な順序で{{tier}}階層が割り当てられたプロバイダーなし。Workspace → Provider routing で、少なくとも1つのプロバイダーに対して{{tier}}の実行プロファイルを選択。", + "noProvidersConfigured": "プロバイダー未設定。", + "noProvidersSelected": "プロバイダー未選択。", + "noRecentActivityActionsByAgents": "最近のアクティビティなし。エージェントとユーザーの操作がここに表示。", + "noRecentTasks": "最近のタスクなし。", + "noRepositoriesAddedYet": "まだリポジトリ未追加。", + "noRoute": "ルートなし", + "noRoutinesYet": "まだルーチンなし。", + "noRuns": "実行なし", + "noRunsWithCostDataYet": "コストデータ付きの実行なし。", + "noRunsYet": "まだ実行なし。", + "noRunsYetShort": "まだ実行なし", + "noScheduledWakeUpsManageRoutines": "予定された起床なし。ルーチンを管理", + "noSkillsRegisteredYet": "まだスキル未登録。", + "noSkillsYetImportFromGithub": "まだスキルなし。GitHubからインポート、または自分で作成。", + "noTasksFound": "タスク見つからず。", + "noTasksInThisProjectYet": "このプロジェクトにまだタスクなし。", + "noTasksTouchedYet": "まだタスク未着手。", + "noTasksWereModifiedDuringThis": "この実行中にタスク変更なし。", + "notConfigured": "未設定", + "notifyOnly": "通知のみ", + "noUtilizationDataAvailable": "利用状況データなし。", + "noUtilizationDataClickRefreshTo": "利用状況データなし。更新をクリックして現在の使用状況を取得。", + "observed": "観測済み", + "off": "オフ", + "officeTurnsYourBacklogIntoAutonomous": "Officeはバックログを自律作業に変える。コーディネーターエージェントが各タスクを分解し、専門ワーカーエージェントへ割り当て、進捗を返す。次の手順でこのワークスペースに名前を付け、コーディネーターを作成し、必要なら最初のタスクを渡して開始。", + "on": "オン", + "onDisk": "ディスク上", + "onDiskBadge": "ディスク上", + "oneLineSummary": "1行要約", + "openAgent": "{{name}}を開く", + "openBlocked": "未完了{{open}}、ブロック{{blocked}}", + "openInAdvancedView": "詳細ビューで開く", + "optional": "任意", + "optionalDescription": "任意の説明", + "orchestration": "オーケストレーション", + "orgChart": "組織図", + "other": "その他", + "out": "出力:", + "outgoingDatabaseFilesystem": "外向き(データベース → ファイルシステム)", + "output": "出力", + "outputTokens": "出力トークン", + "overrideShadowedByWakeReasons": "このティアの上書きは、ウェイク理由ポリシーに一致しない実行にのみ使用されます。このエージェントのウェイク理由ティアはすでに次をカバーしています。{{list}}。", + "overrideTheWorkspaceTierOrProvider": "このエージェントのワークスペースティアまたはプロバイダー順序を上書きします。", + "overrideWakeReasonTiers": "ウェイク理由ティアを上書き", + "overrideWakeReasonTiersHelp": "これはまれです。バックグラウンド作業にこのエージェント専用の異なる動作が必要な場合にのみ上書きしてください。たとえば、定常的なチェックでも Frontier を使う必要があるセキュリティ重視のエージェントなどです。ほとんどのエージェントはワークスペースポリシーを継承すべきです。", + "overrideWhichModelTierRunsFor": "特定の種類のエージェント作業に対して、どのモデルティアを実行するかを上書きします。多くのユーザーはこれをワークスペースの既定値のままにします。バックグラウンドタスクは Economy、通常の実行は Balanced です。ハートビート、定期実行、予算アラートは常にバックグラウンドで動作するため、ここでより安価なティアを使うと、重要な作業に影響を与えずにコストを大幅に削減できます。", + "overrideWorkspacePolicyForThisAgent": "このエージェントのワークスペースポリシーを上書き", + "overrideWorkspaceProviderOrder": "ワークスペースのプロバイダー順序を上書き", + "overrideWorkspaceTier": "ワークスペースティアを上書き", + "overRuns": "{{overall}}% が {{total}} 実行を超過", + "overview": "概要", + "parent": "親", + "parseErrors": "解析エラー(", + "participantsSelected_one": "{{count}} 件選択済み", + "participantsSelected_other": "{{count}} 件選択済み", + "pathGithubUrlOrSkillsSh": "パス、GitHub URL、または skills.sh", + "pauseAgent": "エージェントを一時停止", + "pauseReasonPlaceholder": "このワークスペースを一時停止する理由は何ですか?", + "pauseRequestFailed": "一時停止状態の更新に失敗しました。もう一度お試しください。", + "pauseStateStale": "古い可能性があります", + "pauseStateUnavailable": "一時停止状態を取得できません。ワークスペースが一時停止中かどうかは不明です。", + "pauseUnavailable": "ワークスペースが選択されていません。", + "pauseWorkspace": "ワークスペースを一時停止", + "pauseWorkspaceConfirm": "ワークスペースを一時停止", + "pauseWorkspaceDescription": "このワークスペースで新しい Office の定期実行とイベント起動を停止します。実行中の Office 実行に停止を要求します。停止に失敗した場合、一部の作業は継続することがあります。", + "pauseWorkspacePartialFailure_one": "1 件の Office 実行が停止しませんでした({{count}})。ワークスペースは一時停止されたままです。", + "pauseWorkspacePartialFailure_other": "一部の Office 実行が停止しませんでした({{count}})。ワークスペースは一時停止されたままです。", + "pauseWorkspaceTitle": "このワークスペースを一時停止しますか?", + "pausing": "一時停止しています...", + "pausedConsecutiveFailures_one": "一時停止中。{{count}} 回連続で失敗", + "pausedConsecutiveFailures_other": "一時停止中。{{count}} 回連続で失敗", + "pendingApproval": "承認待ち", + "pendingApprovals": "承認待ち", + "period": "期間", + "periodValue": "期間: {{period}}", + "permissions": "権限", + "permissionSettingsSaved": "権限設定を保存しました", + "permissionsUpdated": "権限を更新しました", + "pickAWorkspaceRepoADiscovered": "ワークスペースのリポジトリ、見つかったローカルパス、またはURLを貼り付けてください。", + "picksTheCliClientModelMode": "このエージェントが使うCLIクライアント、モデル、モード、フラグを選びます。", + "platform": "プラットフォーム", + "preferences": "設定", + "primary": "メイン", + "priority": "優先度", + "priorityCritical": "最優先", + "priorityHigh": "高", + "priorityLow": "低", + "priorityMedium": "中", + "project": "プロジェクト", + "projectCreated": "プロジェクトを作成しました", + "projectDeleted": "プロジェクトを削除しました", + "projectDescription": "プロジェクトの説明...", + "projectName": "プロジェクト名", + "projects": "プロジェクト", + "projectSaved": "プロジェクトを保存しました", + "projectsGroupRelatedTasksAndRepositories": "プロジェクトは関連タスクとリポジトリをまとめます。", + "projectStatusActive": "アクティブ", + "projectStatusArchived": "アーカイブ済み", + "projectStatusCompleted": "完了", + "projectStatusOnHold": "保留中", + "prompt": "プロンプト", + "provider": "プロバイダー", + "providerCandidatesTriedForThisRun": "今回の実行で試したプロバイダー候補、順番どおり。", + "providerDegraded": "プロバイダー劣化", + "providerHealth": "プロバイダーの状態", + "providerOrder": "プロバイダー順", + "providerRouting": "プロバイダーのルーティング", + "providerRoutingHeading": "プロバイダーのルーティング", + "providers": "プロバイダー", + "pulledLatestChanges": "最新変更を取得しました", + "pullFailed": "取得に失敗しました", + "pulling": "取得中...", + "push": "プッシュ", + "pushFailed": "プッシュに失敗しました", + "pushing": "プッシュ中...", + "readOnly": "読み取り専用", + "readOnlyReasonGit": "GitHub管理のスキルは読み取り専用です", + "readOnlyReasonLocalPath": "ローカルパスのスキルは読み取り専用です", + "readOnlyReasonSkillsSh": "skills.sh 管理のスキルは読み取り専用", + "ready": "準備完了", + "reason": "理由", + "recent": "最近", + "recentActivity": "最近のアクティビティ", + "recentRuns": "最近の実行", + "recentTasks": "最近のタスク", + "reconnect": "再接続", + "recovery": "回復", + "recoveryLookbackWindow": "回復の参照期間", + "recoverySettingsSaved": "回復設定を保存した", + "refresh": "更新", + "refreshPauseState": "一時停止状態を更新", + "refreshSkills": "スキルを更新", + "refreshUtilization": "使用状況を更新", + "reject": "却下", + "rejected": "却下済み", + "remainingAmount": "残り: {{amount}}", + "remoteDocker": "リモート Docker", + "remove": "削除", + "removeApprover": "承認者を削除", + "removeRepository": "リポジトリを削除", + "removeReviewer": "レビュー担当を削除", + "removeSkill": "スキルを削除", + "repoCount_one": "{{count}} 件のリポジトリ", + "repoCount_other": "{{count}} 件のリポジトリ", + "reportsTo": "所属先", + "repositories": "リポジトリ", + "repositoryAdded": "リポジトリを追加した", + "repositoryCloned": "リポジトリをクローンした", + "repositoryRemoved": "リポジトリを削除した", + "repositoryUrl": "リポジトリ URL", + "requested": "依頼済み", + "requireApprovalForNewAgents": "新しいエージェントに承認を要求", + "requireApprovalForSkillChanges": "スキル変更に承認を要求", + "requireApprovalForTaskCompletion": "タスク完了に承認を要求", + "required": "必須", + "resetsInHoursMinutes": "{{hours}}時間 {{minutes}}分でリセット", + "resetsInMinutes": "{{minutes}}分でリセット", + "resettingSoon": "まもなくリセット", + "resolved": "解決済み", + "resolvedRoutes": "解決済みルート", + "resuming": "再開中...", + "resumeSession": "セッションを再開", + "resumeWorkspace": "ワークスペースを再開", + "resumeWorkspaceConfirm": "ワークスペースを再開", + "resumeWorkspaceDescription": "ルーチン、実行、イベント起動の開始は通常どおり再開。個別に一時停止中のエージェント, たとえば予算超過や失敗連続, は停止のまま。", + "resumeWorkspaceTitle": "このワークスペースを再開する?", + "retryPauseSweep": "もう一度停止を試す", + "retry": "再試行", + "retryAtSuffix": "· {{retryAt}} に再試行", + "retryAtWhen": "{{when}} に再試行", + "retryCancelledReassigned": "再試行キャンセル, 再割り当て済み", + "retrying": "再試行中…", + "retryNow": "今すぐ再試行", + "returnAgentToService": "サービスに戻す", + "returningAgentToService": "サービスに戻し中…", + "shortRetry": "まもなく再試行", + "reviewAndLaunch": "確認して起動", + "reviewer": "レビュー担当", + "reviewers": "レビュー担当者", + "reviewRequest": "レビュー依頼", + "reviewStages": "レビュー段階", + "role": "役割", + "roleAssistant": "アシスタント", + "roleCeo": "CEO", + "roleDefault": "デフォルトの役割", + "roleDevops": "DevOps", + "roleQa": "QA", + "roleSecurity": "セキュリティ", + "roleSpecialist": "スペシャリスト", + "roleTierPolicy": "役割ティアポリシー", + "roleTierRowInfo": "この役割を持つ各エージェントに対して、ウェイク理由ポリシーまたはエージェントごとの上書きが先に適用されない限り、デフォルトのモデルティアを設定します。", + "roleWorker": "ワーカー", + "routeAttempts": "ルート試行回数", + "routeBlocked": "ブロック済み", + "routeOutcomeFailedOther": "その他の失敗", + "routeOutcomeFailedProviderUnavailable": "プロバイダー利用不可で失敗", + "routeOutcomeLaunched": "起動済み", + "routeOutcomeRetryScheduled": "再試行を予約済み", + "routeOutcomeSkippedDegraded": "劣化のためスキップ", + "routeOutcomeSkippedMaxAttempts": "最大試行回数のためスキップ", + "routeOutcomeSkippedMissingMapping": "マッピング不足のためスキップ", + "routeOutcomeSkippedUserAction": "ユーザー操作のためスキップ", + "routineActivated": "ルーチンを有効化しました", + "routineCreated": "ルーチンを作成しました", + "routineCreatedWithoutSchedule": "ルーチンはスケジュールなしで作成されました: {{error}}", + "routineDeleted": "ルーチンを削除しました", + "routineFired": "ルーチンが実行されました", + "routineNotFiring": "実行できません。ルーチンのステータスは {{status}} です", + "routinePaused": "ルーチンを一時停止しました", + "routines": "ルーチン", + "routinesAutomaticallyCreateTasksOnA": "ルーチンはスケジュールまたは webhook トリガーでタスクを自動作成します。", + "routineSaved": "ルーチンを保存しました", + "routineSavedScheduleChangeFailed": "ルーチンは保存されましたが、スケジュールの変更に失敗しました: {{error}}", + "routineSavedScheduleDeleteFailed_one": "ルーチンは保存されましたが、古いスケジュールの削除に失敗しました: {{error}}。現在、{{count}} 件の cron スケジュールが有効です。", + "routineSavedScheduleDeleteFailed_other": "ルーチンは保存されましたが、古いスケジュールの削除に失敗しました: {{error}}。現在、{{count}} 件の cron スケジュールが有効です。", + "routineSavedScheduleMayBeStale": "ルーチンは保存されました。表示されているスケジュールは、ページを再読み込みするまで古い可能性があります。", + "routineScheduleFateUnknown": "ルーチンは保存されましたが、スケジュールの状態は不明です。現在の状態を表示するにはページを再読み込みしてください。", + "routineStarted": "ルーチンを開始しました", + "routineStatusActive": "有効", + "routineStatusArchived": "アーカイブ済み", + "routineStatusPaused": "一時停止中", + "routingOverridesSaved": "ルーティングの上書きを保存しました", + "routingSettingsSaved": "ルーティング設定を保存しました", + "run": "実行", + "runActivity": "実行アクティビティ", + "runCancelAssigneeChanged": "担当者が変更されました", + "runCancelRetryStale": "古い状態なので再試行", + "runCancelReviewParticipantChanged": "レビュアーが変更されました", + "runCancelTaskCancelled": "タスクはキャンセルされました", + "runCancelTaskNotFound": "タスクが見つかりません", + "runCancelTaskTerminal": "タスクは完了しました", + "runCount_one": "{{count}}件の実行", + "runCount_other": "{{count}}件の実行", + "runInALocalDockerContainer": "ローカル Docker コンテナで実行", + "runInASpritesCloudEnvironment": "Sprites クラウド環境で実行", + "runningPausedErrors": "実行中 {{running}} 件、一時停止 {{paused}} 件、エラー {{errors}} 件", + "runNow": "今すぐ実行", + "runNowTitleCase": "今すぐ実行", + "runOnHostMachine": "ホストマシンで実行", + "runs": "実行", + "runsAppearHereWhenARoutine": "ルーチンがトリガーされると、ここに実行が表示されます。", + "runStatusCancelled": "キャンセル済み", + "runStatusCoalesced": "統合済み", + "runStatusDone": "完了", + "runStatusFailed": "失敗", + "runStatusReceived": "受信済み", + "runStatusSkipped": "スキップ済み", + "runSkipped": "スキップ済み", + "runUnclassified": "未分類", + "runStatusTaskCreated": "タスク作成済み", + "runtime": "ランタイム", + "runtimeCapabilities": "ランタイムの機能", + "saveChanges": "変更を保存", + "saveConfiguration": "設定を保存", + "saved": "{{filename}} を保存しました", + "saveDefaultCeiling": "保存", + "saveOverrides": "上書きを保存", + "savePermissions": "権限を保存", + "saveSkills": "スキルを保存", + "saving": "保存中...", + "savingEllipsis": "保存中…", + "schedule": "スケジュール", + "scheduleStateArmed": "待機中", + "scheduleStateArmedDescription": "cron トリガーで、このルーチンをスケジュール実行できる。", + "scheduleStateBroken": "スケジュール不良", + "scheduleStateBrokenDescription": "このルーチンには cron トリガーあるが、今は発火できない。", + "scheduleStateEventOnly": "イベント起動", + "scheduleStateEventOnlyDescription": "Webhook イベント到着時に発火。スケジュールでは発火しない。", + "scheduleStateNoSchedule": "スケジュールなし", + "scheduleStateNoScheduleDescription": "このルーチンにスケジュールなし。自分では発火しない。", + "scheduleStateUnknown": "スケジュール不明", + "scheduleStateUnknownDescription": "ルーチンのトリガーを読めないため、スケジュール状態を判定できない。", + "scopeId": "スコープ ID", + "scopeType": "スコープ種別", + "search": "検索...", + "searchFiles": "ファイル検索...", + "searchingYourMachine": "マシンを検索中…", + "searchMemory": "メモリ検索...", + "searchOrPasteAUrlOr": "URL かパスを検索、または貼り付け…", + "searchTasks": "タスク検索...", + "selectAFileToPreview": "プレビューするファイルを選択", + "selectAFileToViewOr": "表示、または編集するファイルを選択。", + "selectAgent": "エージェントを選択", + "selectAgentOptional": "エージェントを選択(任意)", + "selectAnAgentProfile": "エージェントプロファイルを選択...", + "selectApprover": "承認者を選択", + "selectAProjectToCreateATask": "タスクを作成するプロジェクトを選択", + "selectASkillToView": "表示するスキルを選択", + "selectAWorkspaceToExport": "エクスポートするワークスペースを選択。", + "selectAWorkspaceToViewActivity": "アクティビティを表示するワークスペースを選択。", + "selectAWorkspaceToViewCosts": "コストを表示するワークスペースを選択。", + "selectExecutionProfile": "実行プロファイルを選択", + "selectExecutor": "実行者を選択...", + "selectProfile": "プロファイルを選択...", + "sendAMessage": "メッセージを送信...", + "sendAMessageToStartA": "セッションを開始するメッセージを送信...", + "sendMessage": "メッセージ送信", + "session": "セッション", + "sessionId": "セッションID", + "sessionIdAfter": "セッションID(後)", + "sessionIdBefore": "セッションID(前)", + "setADefaultTierForEveryAgentOfA": "指定ロールの各エージェントにデフォルト階層を設定。ここにロールの項目がない時はワークスペースのデフォルト階層にフォールバックする。wake-reason ポリシーか、エージェント個別の上書きがある場合は、そちらが優先。", + "setSpendingLimitsPerAgentOr": "エージェントまたはプロジェクトごとに支出上限を設定。上限超えたらエージェントは停止。", + "setupTierAgentProfiles": "階層エージェントプロファイルをセットアップ", + "setupTitle": "セットアップ", + "setUpYourOfficeWorkspace": "Office ワークスペースをセットアップ", + "ship": "出荷", + "showSystemTasks": "システムタスクを表示", + "skillAutoAttachedToRole": "このスキルは新しい{{role}}エージェントに自動で付与される。このエージェントでは外せる。", + "skillCount_one": "{{count}}スキル", + "skillCount_other": "{{count}}スキル", + "skillMdContent": "SKILL.md の内容", + "skillNameInstructionsForTheAgent": "# スキル名\n\nエージェント向け指示...", + "skills": "スキル", + "skillUnavailable": "スキル利用不可", + "skillSourceGithub": "GitHub", + "skillSourceGitRepository": "Gitリポジトリ", + "skillSourceInline": "インライン", + "skillSourceInlineEditable": "インライン(ブラウザで編集)", + "skillSourceKandev": "Kandev", + "skillSourceLocal": "ローカル", + "skillSourceLocalPath": "ローカルパス", + "skillSourceSkillsSh": "skills.sh", + "skillSourceUserHome": "ユーザーホーム", + "skillsTeachAgentsHowToPerform": "スキルは、エージェントに特定タスクのやり方を教える。GitHub から取り込むか、自分で作成。", + "skillsThisAgentOwnsSkillsAre": "このエージェントが持つスキル。セッション開始時、スキルはエージェントのシステムプロンプトに注入される。", + "skillsUpdated": "スキル更新済み", + "skipIfActive": "アクティブならスキップ", + "skipMissed": "見逃しをスキップ", + "sort": "並び替え", + "sortBy": "並び替え条件", + "sortCreated": "作成日", + "sortUpdated": "更新日", + "sourceType": "ソース種別", + "spritesRemoteSandbox": "スプライト(リモートサンドボックス)", + "staleRunCancelled": "古い実行をキャンセル", + "standardCronExpressionExample": "標準 cron 式(例: 毎週月曜 9am は {{cron}})", + "startASessionOrSendA": "セッション開始かメッセージ送信で開始。", + "started": "開始済み", + "startFresh": "新規開始", + "startFreshSentence": "新規開始", + "starting": "開始中...", + "startSession": "セッション開始", + "statusBacklog": "バックログ", + "statusBlocked": "ブロック中", + "statusCancelled": "キャンセル済み", + "statusChanged": "ステータス変更済み", + "statusDone": "完了", + "statusInProgress": "進行中", + "statusInReview": "レビュー中", + "statusTodo": "未着手", + "stepDetails": "詳細", + "stepNumberTitle": "ステップ {{number}}: {{title}}", + "stepSchedule": "スケジュール", + "stepTaskTemplate": "タスクテンプレート", + "stepXOfYTitle": "ステップ {{number}} / {{total}}: {{title}}", + "structuredResult": "構造化結果", + "outputSummary": "出力サマリー", + "subIssueOfParent": "{{parent}} のサブ課題", + "subscriptionQuota": "サブスクリプション割り当て", + "succeeded": "成功", + "successRate": "成功率", + "summarizeMissed": "取りこぼしを要約する(1回だけ起動)", + "sync": "同期", + "syncTheWorkspaceDatabaseWithOn": "ワークスペースのデータベースをディスク上の YAML ファイルと同期するか、ポータブル書き出しバンドルをダウンロードする。", + "system": "システム", + "tabChannels": "チャンネル", + "tabConfiguration": "設定", + "tabInstructions": "手順", + "tabMemory": "メモリ", + "tabPermissions": "権限", + "taskCount_one": "{{count}}件のタスク", + "taskCount_other": "{{count}}件のタスク", + "taskCreated": "タスク作成済み", + "taskDescription": "タスク説明", + "taskDescriptionTemplate": "タスク説明テンプレート", + "taskNotFound": "タスク見つからず", + "taskPrefix": "タスク接頭辞", + "taskReview": "タスクレビュー", + "tasks": "タスク", + "tasksByPriority": "優先度別のタスク", + "tasksByStatus": "ステータス別のタスク", + "tasksInProgress": "進行中のタスク", + "tasksMustBeReviewedBeforeThey": "タスクは完了済みにする前にレビューする必要があります", + "tasksTouched": "対応済みのタスク", + "tasksWillBeNumbered": "タスクは {{prefix}}-1、{{prefix}}-2 のように番号が付けられます", + "tasksWorkedOnByPriority": "優先度ごとに取り組んだタスク", + "tasksWorkedOnByStatus": "ステータスごとに取り組んだタスク", + "taskTitle": "タスクタイトル", + "taskTitleTemplate": "タスクタイトルテンプレート", + "telegram": "Telegram", + "theAgentResponsibleForManagingThis": "このプロジェクトの管理を担当するエージェント", + "theCoordinatorCanCreateWorkerAgents": "コーディネーターはワーカーエージェントを作成し、それぞれにティアを選択できます。各ティアはここで選択したプロファイルに対応し、後で Workspace routing で変更できます。", + "theCoordinatorManagesOtherAgentsDelegates": "コーディネーターは他のエージェントを管理し、タスクを委任し、進捗を監視します。", + "thisAgentAsTheAssignee": "このエージェントを担当者にする", + "thisCoordinatorHasNoScheduledWake": "このコーディネーターには予定された起動はありません。コメント、エラー、または手動トリガーでのみ実行されます。", + "thisPermanentlyDeletesAgentsTasksSkills": "これにより、エージェント、タスク、スキル、ルーチン、設定が完全に削除されます。", + "thisProvider": "このプロバイダー", + "thisWillPermanentlyDeleteAllMemory": "これにより、このエージェントのすべてのメモリエントリが完全に削除されます。この操作は元に戻せません。", + "thisWillPermanentlyDeleteThisInstruction": "これにより、この指示ファイルが完全に削除されます。この操作は元に戻せません。", + "tier": "ティア", + "tierBalanced": "バランス", + "tierBalancedDescription": "コーディネーターが Balanced ティアを割り当てた場合の一般的なワーカーエージェントに使用します。", + "tierBalancedHint": "標準的な能力", + "tierBalancedQualified": "バランス (標準)", + "tierBalancedUsage": "バランスティアの使用", + "tierEconomy": "エコノミー", + "tierEconomyDescription": "コーディネーターが Economy ティアを割り当てた場合の QA、定型業務、低コストのエージェントに使用します。", + "tierEconomyHint": "最も安価に実用的なモデル", + "tierEconomyQualified": "エコノミー (最安)", + "tierEconomyUsage": "エコノミーティアの使用", + "tierFrontier": "フロンティア", + "tierFrontierDescription": "コーディネーターが最高能力が必要な作業のためにエージェントを作成する場合、または Frontier ティアを割り当てる場合に使用します。", + "tierFrontierHint": "プロバイダーごとの最高性能", + "tierFrontierQualified": "フロンティア (最高性能)", + "tierFrontierUsage": "フロンティアティアの使用", + "tierNameBalanced": "balanced", + "tierNameEconomy": "economy", + "tierNameFrontier": "frontier", + "tierShadowedByWakeReasons": "上のティアは、wake-reason ポリシーに一致しない実行だけで使う。この workspace の wake-reason ティアはすでに対応済み: {{list}}。", + "tierSourceOverride": "override から", + "tierSourceRole": "role から", + "tierSourceWakeReason": "wake reason から", + "tierSourceWorkspace": "workspace から", + "timezone": "タイムゾーン", + "title": "タイトル", + "titleForAutoCreatedTasksUse": "自動作成 task のタイトル。プレースホルダーに {{name}} と {{date}} を使う。", + "toggleNesting": "ネスト切り替え", + "topToBottomFallbackOrderAgents": "上から下のフォールバック順。Agents は、override しない限り最初の正常 provider を試す。", + "toSetUpARoutineYou": "routine を設定するには必要:", + "total": "合計", + "totalApiCostsThisBillingPeriod": "この請求期間の API 合計コスト", + "totalCost": "合計コスト", + "totalSpend": "合計支出", + "trigger": "トリガー", + "triggerComment": "コメント", + "triggerRoutine": "ルーチン", + "triggerTask": "タスク", + "triggerType": "トリガータイプ", + "type": "タイプ", + "typeNameToConfirm": "確認するには {{name}} と入力", + "typicalMappingAtLaunchTimeThe": "典型的なマッピング。起動時、router は provider 順をたどって最初の正常 provider を選ぶ。そのため、primary が劣化していると、この run はここに表示されたものと違う provider/model を使うことがある。", + "unarmedNeedsEdit": "スケジュール修正が必要", + "unarmedNeedsRearm": "再アームが必要", + "unassigned": "未割り当て", + "unassignedParen": "(未割り当て)", + "unknownError": "不明なエラー", + "unstartedTaskRecovered": "未開始 task を復元", + "untitled": "(無題)", + "updateWorkspaceConfiguration": "workspace 設定を更新", + "upload": "アップロード", + "uploadLogo": "ロゴをアップロード", + "useAgentSNormalTier": "agent の通常ティアを使う", + "usedBy": "使用中", + "useQuery": "「{{query}}」を使う", + "useWorkspaceDefaultTier": "workspace のデフォルトティアを使う", + "usingThisAgentsWakeReasonOverrides": "この agent の wake-reason override を使用中。", + "variables": "変数", + "waiting": "待機中…", + "waitingForCapacity": "キャパシティ待ち", + "wakeBudgetAlert": "予算アラート", + "wakeBudgetAlertLong": "予算アラートは、素早い確認だけ。エージェントがアラートを読み、作業を止めるか人に通知するか判断し、またスリープに戻る。重い推論は不要だから、最安ティアでほぼ十分。", + "wakeBudgetAlertRecommendation": "素早い確認作業なら、安いティアで十分。", + "wakeBudgetAlertShort": "ワークスペースやプロジェクトの予算が上限近くなると、エージェントに通知され、制限やエスカレートが必要になる場合あり。", + "wakeHeartbeat": "ハートビート", + "wakeHeartbeatLong": "ハートビートはエージェントを即応状態に保つ。受信箱、未完了タスク、予算アラートをさっと確認する。裏で常時動くから、ここを安いティアにすると、重要な作業に影響なく月額コストをかなり下げられる。", + "wakeHeartbeatRecommendation": "非常に高頻度。安いティア推奨。", + "wakeHeartbeatShort": "定期チェックイン。エージェントがスケジュールに従い、数分ごとに新しい確認事項がないか見る。", + "wakeReasonTierPolicy": "起床理由のティア方針", + "wakeRoutineTrigger": "定期トリガー", + "wakeRoutineTriggerLong": "定期トリガーは、管理する cron スケジュールで発火する。処理は予測しやすく、時間厳守もあまり不要。だから普通は安いティアで十分。特定のルーチンでより賢いモデルが要るなら、エージェントごとに上書き。", + "wakeRoutineTriggerRecommendation": "予測しやすい処理。安いティアでだいたい十分。", + "wakeRoutineTriggerShort": "Routines で設定したスケジュール済みジョブ(例: \"summarise PRs every Monday morning\")。", + "warning": "警告", + "webhook": "Webhook", + "whatEachAgentWouldLaunchWith": "現在の設定で、各エージェントが何を使って起動するか。", + "whatHappensIfThePreviousRun": "前回の実行がまだ動いている場合にどうなるか", + "whatHappensToTicksMissedWhile": "バックエンド停止中に取りこぼした tick の扱い", + "whatTheAgentReceivedAndProduced": "エージェントが受け取ったものと出力したもの。", + "whenEnabledProviderLimitsCanMove": "有効にすると、プロバイダ制限で実行を次の設定済み実行プロファイルへ移せる。無効だと、Office は選択したティアの最初のプロバイダだけを使う。", + "whetherThisSkillSContentCan": "このスキルの内容を Kandev で編集できるか", + "whichAgentManagesThisOne": "どのエージェントがこれを管理するか", + "workingDir": "作業ディレクトリ", + "workspaceCreatedSuccessfully": "ワークスペースを作成しました", + "workspaceDefaultForThisReason": "この理由のワークスペース既定値:", + "workspaceDefaultTier": "ワークスペース既定ティア", + "workspaceDefaultTierHint": "<1>{{model}} を {{provider}} の {{tier}} ティアとして扱う。後で Workspace → Provider routing から変更可能。", + "workspaceDeleted": "ワークスペースを削除しました", + "workspaceName": "ワークスペース名", + "workspacePausedDetail": "{{actor}} により一時停止: {{reason}} ({{time}})", + "workspacePausedTitle": "ワークスペース一時停止", + "workspaceActions": "ワークスペース操作", + "writeTheDatabaseStateToOn": "データベース状態をディスク上の YAML ファイルに書き出す。", + "yearly": "年額", + "yourModel": "あなたのモデル", + "zoomIn": "拡大", + "zoomOut": "縮小", + "failedToLoadAgentRoute": "エージェントルートの読み込みに失敗", + "failedToLoadProviderHealth": "プロバイダーのヘルス読み込み失敗", + "failedToLoadRouteAttempts": "ルート試行の読み込み失敗", + "failedToLoadRoutingConfig": "ルーティング設定の読み込み失敗", + "failedToLoadRoutingPreview": "ルーティングプレビューの読み込み失敗", + "failedToLoadTaskQuorum": "タスククオーラムの読み込み失敗" +} diff --git a/apps/web/src/locales/ja/orgs.json b/apps/web/src/locales/ja/orgs.json new file mode 100644 index 0000000000..197ea91347 --- /dev/null +++ b/apps/web/src/locales/ja/orgs.json @@ -0,0 +1,38 @@ +{ + "addAdmin": "管理者を追加", + "adminCreate": "管理者を作成", + "adminCreated": "管理者を作成しました。", + "adminDescription": "管理者は自分の組織内のアカウントしか作成できません。そのため、新しい組織では最初の管理者をここで作成する必要があります。", + "adminEmail": "メール", + "adminName": "表示名", + "adminPassword": "パスワード", + "adminPasswordHint": "8文字以上にしてください。作成後は相手に共有し、サインイン後に変更してもらってください。", + "adminTitle": "{{name}} の最初の管理者", + "boundaryDescription": "ワークスペース、タスク、セッション、シークレット、アカウントは 1 つの組織に属します。インスタンス運用者として、あなたは組織そのものを管理しますが、自分の組織を含め、いずれの組織の中にもアクセスできません。", + "boundaryTitle": "組織が分けるもの", + "create": "作成", + "createDescription": "まず組織を作成し、その後で最初の管理者を追加してください。以後はその組織が自律的に管理されます。", + "createTitle": "新しい組織", + "created": "組織を作成しました。", + "defaultBadge": "既定", + "delete": "組織を削除", + "deleteConfirm": "組織を削除", + "deleteConfirmLabel": "確認のため {{slug}} を入力", + "deleteTitle": "{{name}} を削除", + "deleteWarning": "この組織にあるすべてのワークスペース、タスク、セッション、アカウントが削除されます。元に戻すことはできません。", + "deleted": "組織を削除しました。", + "description": "各組織は独立したテナントです。ユーザーは 1 つの組織にのみ所属し、組織同士で相手のワークスペース、タスク、シークレットを見ることはできません。", + "genericError": "その変更は保存できませんでした。", + "nameLabel": "組織名", + "namePlaceholder": "Acme Corp", + "navOrganizations": "組織", + "operatorOnly": "組織を管理できるのはインスタンス運用者のみです。", + "renamed": "組織名を変更しました。", + "resume": "再開", + "resumed": "組織を再開しました。", + "statusActive": "有効", + "statusSuspended": "停止中", + "suspend": "停止", + "suspended": "組織を停止しました。", + "title": "組織" +} diff --git a/apps/web/src/locales/ja/plugins.json b/apps/web/src/locales/ja/plugins.json new file mode 100644 index 0000000000..55ff13d370 --- /dev/null +++ b/apps/web/src/locales/ja/plugins.json @@ -0,0 +1,184 @@ +{ + "add": "追加", + "allCategories": "すべてのカテゴリ", + "autoUpdate": "自動更新", + "autoUpdateDescription": "マーケットプレイスを定期的に確認し、有効なプラグインの新しいバージョンをインストールします。下記で個別に上書きしない限り、すべてのプラグインに適用されます。", + "autoUpdateFor": "{{name}} の自動更新", + "autoUpdateTitle": "プラグインを自動更新", + "byAuthor": "{{author}} 作", + "cancel": "キャンセル", + "category": "カテゴリ", + "checkForUpdates": "更新を確認", + "checkingForUpdates": "更新を確認中…", + "confirmUninstall": "アンインストールを確認", + "disable": "無効化", + "dropzoneHint": "ここに {{extension}} パッケージをドラッグ&ドロップ、またはクリックして選択", + "enable": "有効化", + "failedToAddSource": "ソースの追加に失敗", + "failedToDisable": "{{name}} の無効化に失敗", + "failedToEnable": "{{name}} の有効化に失敗", + "failedToInstallPlugin": "プラグインのインストールに失敗", + "failedToLoadMarketplace": "マーケットプレイスの読み込みに失敗", + "failedToLoadPlugins": "プラグインの読み込みに失敗", + "failedToLoadSettings": "プラグイン設定の読み込みに失敗", + "failedToRemoveSource": "ソースの削除に失敗", + "failedToSaveSettings": "プラグイン設定の保存に失敗", + "failedToSetAutoUpdateFor": "{{name}} の自動更新の変更に失敗", + "failedToSyncPlugins": "プラグインの同期に失敗", + "failedToUninstall": "{{name}} のアンインストールに失敗", + "failedToUpdateAutoUpdate": "自動更新設定の変更に失敗", + "failedToUpdatePlugin": "{{name}} の更新に失敗", + "failedToUpdateSource": "ソースの更新に失敗", + "fromUrl": "URL から", + "hideRaw": "生表示を隠す", + "install": "インストール", + "installPlugin": "プラグインをインストール", + "installPluginDescription": "URL からプラグインパッケージをインストールするか、{{extension}} ファイルを直接アップロード。", + "installed": "インストール済み", + "installedPlugins": "インストール済みプラグイン", + "installing": "インストール中…", + "latestVersion": "最新 v{{version}}", + "loadingMarketplace": "マーケットプレイスを読み込み中…", + "webAppLoading": "キャンバスを読み込み中…", + "webAppUnavailable": "このキャンバスは利用不可。", + "loadingPlugins": "プラグインを読み込み中...", + "loadingSelectedUtilityAgent": "選択したユーティリティエージェントを読み込み中...", + "loadingSettings": "設定を読み込み中...", + "loadingUtilityAgents": "ユーティリティエージェントを読み込み中...", + "manifest": "マニフェスト", + "manifestApiVersion": "APIバージョン", + "manifestAuthor": "作者", + "manifestCapabilities": "機能", + "manifestId": "ID", + "manifestInstalled": "インストール済み", + "manifestSigned": "署名済み", + "manifestVersion": "バージョン", + "manifestWebhookPublic": "{{key}} (公開)", + "manifestWebhooks": "Webhook", + "marketplaceSources": "マーケットプレイスのソース", + "marketplaceSourcesDescription": "公式カタログと並べてプラグインを見られるよう、チームまたは社内レジストリを追加。各ソースは {{document}} ドキュメントを配信する。", + "no": "いいえ", + "noDeclaredSettings": "このプラグインは設定を宣言していない。マニフェストに <1>config_schema がない。", + "noInstalledPluginWithId": "ID <1>{{id}} のインストール済みプラグインなし。", + "noEnabledSources": "有効なマーケットプレイスのソースがないため、バージョン確認できない。Browse > Sources で1つ有効化。", + "noPluginsAvailable": "まだ利用可能なプラグインなし。あとで確認するか、自分のマーケットプレイスソースを追加。", + "noPluginsMatchSearch": "検索に一致するプラグインなし。フィルターを消して試す。", + "noPluginsYet": "まだプラグインなし。Browse タブからインストールするか、パッケージをアップロード。", + "notInMarketplace": "マーケットプレイス外", + "notSet": "未設定", + "openSettingsFor": "{{name}} の設定を開く", + "override": "上書き", + "packageUrl": "パッケージURL", + "pluginInstalled": "{{name}} をインストール済み", + "pluginDialog": "プラグインダイアログ", + "pluginPageFailedToLoad": "このプラグインページの読み込みに失敗。", + "pluginsAvailable_one": "{{count}} 個のプラグインあり", + "pluginsAvailable_other": "{{count}} 個のプラグインあり", + "refresh": "更新", + "removeSource": "{{name}} を削除", + "repo": "リポジトリ", + "requiredFields": "必須: {{fields}}", + "reset": "リセット", + "resetAutoUpdateFor": "{{name}} の自動更新をデフォルトに戻す", + "savingRestartsPlugin": "保存するとプラグイン再起動。新しい設定が反映される。", + "searchPlugins": "プラグインを検索…", + "shortcuts": "キーボードショートカット", + "shortcutsDescription": "これらのショートカットはあなたのアカウント専用で、このプラグインが有効な間のみ動作します。", + "selectAUtilityAgent": "ユーティリティエージェントを選択してください...", + "selectPlaceholder": "選択...", + "selectedUtilityAgentUnavailable": "選択したユーティリティエージェントは利用できません", + "settings": "設定", + "settingsDescription": "マーケットプレイスを閲覧し、Kandevプラグインをインストール、有効化、無効化、アンインストールします。", + "settingsSaved": "プラグイン設定を保存しました", + "settingsSavedReloadFailed": "設定は保存されましたが、再読み込みに失敗しました。更新して確認してください。", + "setupRequired": "セットアップが必要です", + "sortMostStars": "星が多い順", + "sortName": "名前", + "sortRecentlyUpdated": "最近更新された順", + "sourceNamePlaceholder": "ソース名 (例: Acme Internal)", + "sourceUrlPlaceholder": "https://.../index.json", + "sourceOfficial": "公式", + "sourceUnreachable": "到達不可", + "sourceUnreachableDetail": "<0>{{name}} に到達できません{{detail}}。そのプラグインは非表示になります。", + "sources": "ソース", + "statusActive": "有効", + "statusDisabled": "無効", + "statusError": "エラー", + "statusRegistered": "登録済み", + "statusUninstalled": "アンインストール済み", + "sync": "同期", + "updateCheckDescription": "マーケットプレイスで新しいバージョンを確認します。同期はローカルのプラグインフォルダーのみをスキャンします。", + "syncInstalled_one": "{{count}} 件インストール済み", + "syncInstalled_other": "{{count}} 件インストール済み", + "syncMissing_one": "{{count}} 件不足", + "syncMissing_other": "{{count}} 件不足", + "syncSideloaded_one": "{{count}} 件サイドロード済み", + "syncSideloaded_other": "{{count}} 件サイドロード済み", + "syncSummary": "同期: {{parts}}", + "syncUpToDate": "すべて最新です", + "tabBrowse": "閲覧", + "tabInstalled": "インストール済み", + "thisPlugin": "このプラグイン", + "uninstall": "アンインストール", + "uninstallConfirm": "これにより <2>{{name}} が完全に削除され、API キーも無効化されます。この操作は元に戻せません。", + "uninstallPlugin": "プラグインをアンインストール", + "unsigned": "署名なし", + "update": "更新", + "updateAvailableVersion": "更新あり: v{{version}}", + "updateCheckFailed": "更新確認できなかった", + "updateToVersion": "v{{version}} に更新", + "updatesLastChecked": "最終確認 {{time}}", + "updating": "更新中…", + "uploadFile": "ファイルをアップロード", + "utilityAgentsUnavailable": "ユーティリティエージェント利用不可", + "viewRaw": "生データを見る", + "yes": "はい", + "tabCanvases": "キャンバス", + "canvasMarketplaceDescription": "確認済みキャンバスパッケージを見て、インストール前に権限を確認する。", + "searchCanvases": "キャンバスを検索…", + "selectWorkspace": "ワークスペースを選択", + "canvasesAvailable_one": "{{count}}件のキャンバスあり", + "canvasesAvailable_other": "{{count}}件のキャンバスあり", + "noCanvasesAvailable": "まだキャンバスなし。", + "noCanvasesMatchSearch": "検索に合うキャンバスなし。", + "loadingCanvasesMarketplace": "キャンバスマーケットプレイスを読み込み中…", + "canvasSourceUnreachable": "{{name}} に到達できない{{detail}}. キャンバスは非表示。", + "installCanvas": "キャンバスをインストール", + "backToCanvases": "キャンバスへ戻る", + "previewImages": "プレビュー画像", + "previewImageFailed": "このプレビューは読み込めなかった。", + "retry": "再試行", + "enlargePreview": "プレビューを拡大", + "previousPreview": "前のプレビュー", + "nextPreview": "次のプレビュー", + "previewPosition": "プレビュー {{current}} / {{total}}", + "selectPreview": "プレビュー {{position}} を選択", + "license": "ライセンス", + "requiresVersion": "Kandev 必須", + "reviewAndInstall": "確認してインストール", + "permissions": "権限", + "none": "なし", + "installCanvasTitle": "キャンバスをインストール", + "installCanvasDescription": "このワークスペースにインストールする前に、パッケージの識別情報と権限を確認する。", + "uploadBundle": "バンドルをアップロード", + "directLink": "直接リンク", + "chooseBundle": "キャンバスバンドルを選択", + "bundleUrlPlaceholder": "https://example.com/canvas.tar.gz", + "reviewBundle": "バンドルを確認", + "inspectingBundle": "バンドルを検査中…", + "packageVerified": "パッケージ確認済み", + "packagePermissions": "パッケージ権限", + "packageId": "パッケージID", + "packageDigest": "パッケージダイジェスト", + "archiveDigest": "アーカイブダイジェスト", + "source": "ソース", + "destination": "宛先", + "previewInstallIndependent": "プレビュー画像はレジストリのメタデータ。パッケージにも権限にも含まれない。", + "confirmInstall": "インストールを確認", + "installingCanvas": "canvas をインストール中…", + "installedCanvas": "canvas インストール済み", + "openCanvas": "canvas を開く", + "installFailed": "canvas をインストールできなかった。パッケージを確認して、もう一度試す。", + "sourceUnavailable": "選択したマーケットプレイスソースは利用不可。", + "workspace": "ワークスペース" +} diff --git a/apps/web/src/locales/ja/review.json b/apps/web/src/locales/ja/review.json new file mode 100644 index 0000000000..1fb3b6ccce --- /dev/null +++ b/apps/web/src/locales/ja/review.json @@ -0,0 +1,100 @@ +{ + "acrossFileCount_one": "{{count}} ファイルにわたって", + "acrossFileCount_other": "{{count}} ファイルにわたって", + "actionsFor": "{{filePath}} のアクション", + "autoMarkReviewedOnScroll": "スクロールで自動レビュー済みにする", + "changedSection": "変更セクション {{index}}", + "closeReview": "レビューを閉じる", + "collapseFile": "{{path}} を折りたたむ", + "collapseUnchanged": "変更なしを折りたたむ", + "commentSent": "コメント送信済み", + "copyDiff": "差分をコピー", + "diffLoading": "差分を読み込み中...", + "diffSkipBinary": "バイナリファイル。差分不可", + "diffSkipBudgetExceeded": "差分をスキップ。変更ファイル数が多すぎる", + "diffSkipTooLarge": "ファイルが大きすぎて差分不可 (>10 MB)", + "diffSkipTruncated": "差分を切り詰め。256 KB 超", + "diffTruncated": "差分を切り詰め。先頭 256 KB を表示", + "discardWalkthrough": "ウォークスルーを破棄", + "discardWalkthroughDescription": "このタスクから保存済みウォークスルーを削除する。エージェントは後で新規作成できる。", + "discardWalkthroughTitle": "ウォークスルーを破棄する?", + "editFile": "ファイルを編集", + "expandAll": "すべて展開", + "expandFile": "{{path}} を展開", + "expandUnchangedLines": "変更なし行を展開", + "failedToDiscardWalkthrough": "ウォークスルーの破棄に失敗", + "failedToSendComment": "コメント送信に失敗", + "filesReviewed": "{{reviewedCount}} / {{totalCount}} ファイルをレビュー済み", + "filterChangedFiles": "変更ファイルをフィルター", + "findingCount_one": "{{count}} 件の指摘", + "findingCount_other": "{{count}} 件の指摘", + "fixComments": "コメントを修正", + "goToFindings_one": "{{count}} 件のレビュー指摘へ移動", + "goToFindings_other": "{{count}} 件のレビュー指摘へ移動", + "loadingChangedFiles": "変更ファイルを読み込み中...", + "loadingPRChanges": "{{repo}} #{{prNumber}} の変更を読み込み中…", + "markdownPreviewPartialNotice": "変更された Markdown フラグメントを表示中。変更なし内容はこの差分に含まれない。", + "moreActionsFor": "{{filePath}} のその他の操作", + "new": "新規", + "newWalkthrough": "新しいウォークスルー", + "noChangesToReview": "レビューする変更なし", + "noChangesToReviewYet": "まだレビューする変更なし。", + "noCommentsToFixYet": "まだ修正するコメントなし。", + "noFilesMatchTheFilter": "フィルターに一致するファイルなし", + "noOpenFindings": "未解決の指摘なし。", + "noTextualDiffAdded": "追加ファイルにテキスト差分なし", + "noTextualDiffDeleted": "削除ファイルにテキスト差分なし", + "noTextualDiffModified": "テキスト差分なし", + "noTextualDiffMoved": "ファイル移動済み。テキスト変更なし", + "noTextualDiffMovedFrom": "{{oldPath}} から移動。テキスト変更なし", + "noTextualDiffUntracked": "未追跡ファイルにテキスト差分なし", + "old": "旧", + "openFindingCount_one": "{{count}} 件の未解決指摘", + "openFindingCount_other": "{{count}} 件の未解決指摘", + "pendingCommentCount_one": "{{count}} 件の保留中レビューコメント", + "pendingCommentCount_other": "{{count}} 件の保留中レビューコメント", + "pleaseTryAgain": "もう一度試して。", + "previewMarkdown": "Markdown をプレビュー", + "queuedForTheAgent": "エージェントにキュー済み。", + "resizeFileList": "ファイル一覧のサイズ変更", + "retry": "再試行", + "revertChanges": "変更を元に戻す", + "reviewAgentUnavailableNotice": "レビュー用の推論対応エージェント未設定。<2>Settings → Utility Agents", + "reviewChanges": "変更をレビュー", + "reviewChangesTitle": "変更をレビュー", + "reviewInProgress": "レビュー進行中", + "reviewPullRequest": "プルリクエストをレビュー", + "reviewPullRequestFor": "{{repo}} #{{prNumber}} のプルリクエストをレビュー", + "reviewTheseChangesWithAnAgent": "エージェントでこの変更をレビュー", + "sentToTheAgent": "エージェントに送信済み。", + "showDiff": "差分を表示", + "staleChanged": "変更済み", + "switchToSplitView": "分割表示に切り替え", + "switchToUnifiedView": "統合表示に切り替え", + "theReviewFailed": "レビュー失敗", + "toggleWordWrap": "折り返し切り替え", + "view": "表示", + "walkMeThroughTheseChanges": "この変更を案内", + "walkMeThroughTheseReviewChanges": "このレビュー変更を案内", + "walkthrough": "ウォークスルー", + "walkthroughDiscarded": "ウォークスルー破棄済み", + "wrapLongLines": "長い行を折り返す", + "changesDiscarded": "変更を破棄済み", + "changesStillLoading": "変更まだ読み込み中", + "couldNotSendFinding": "指摘を送信できませんでした", + "couldNotUpdateFinding": "指摘を更新できませんでした", + "discardFailed": "破棄失敗", + "failedToRequestWalkthrough": "ウォークスルー要求失敗", + "findingQueuedForAgent": "指摘をエージェントへキュー追加済み", + "findingSentToAgent": "指摘をエージェントへ送信済み", + "walkthroughRequestQueued": "ウォークスルー要求をキュー追加済み", + "walkthroughRequestSent": "ウォークスルー要求を送信済み", + "couldNotStartReview": "レビューを開始できませんでした", + "severityBlocker": "ブロッカー", + "severityMajor": "重大", + "severityMinor": "軽微", + "severityNit": "細かい指摘", + "commentOnFile": "ファイルにコメント", + "fileComment": "ファイルコメント", + "fileComments": "ファイルコメント" +} diff --git a/apps/web/src/locales/ja/sentry.json b/apps/web/src/locales/ja/sentry.json new file mode 100644 index 0000000000..88c9152a0c --- /dev/null +++ b/apps/web/src/locales/ja/sentry.json @@ -0,0 +1,176 @@ +{ + "actions": "アクション", + "active": "有効", + "addInstance": "インスタンスを追加", + "agentProfile": "エージェントプロフィール", + "allProjects": "すべてのプロジェクト", + "any": "(任意)", + "authToken": "認証トークン", + "availablePlaceholders": "使用可能なプレースホルダー:", + "browseSentryIssues": "Sentryの課題を参照", + "cantDeleteInstanceInUse_one": "\"{{name}}\" は削除できません。まだ {{count}} 件のウォッチが関連付けられています。先にそれらのウォッチを再割り当てするか削除してください。", + "cantDeleteInstanceInUse_other": "\"{{name}}\" は削除できません。まだ {{count}} 件のウォッチが関連付けられています。先にそれらのウォッチを再割り当てするか削除してください。", + "checkFailed": "チェックに失敗しました: {{error}}", + "checkNow": "今すぐ確認", + "connectedAs": "{{name}} として接続済み", + "create": "作成", + "createFailed": "作成に失敗しました: {{error}}", + "createSentryWatcher": "Sentryウォッチャーを作成", + "delete": "削除", + "deleteFailed": "削除に失敗しました: {{error}}", + "deleteInstanceAria": "{{name}} の Sentry インスタンスを削除", + "deleteThisSentryWatcher": "このSentryウォッチャーを削除しますか?", + "edit": "編集", + "editInstanceAria": "{{name}} の Sentry インスタンスを編集", + "editSentryWatcher": "Sentryウォッチャーを編集", + "enable": "有効にする", + "enabled": "有効", + "enabledHelp": "ポーリングを一時停止または再開します。", + "enterAPositiveIntegerOrBlank": "正の整数を入力するか、空欄のままにしてください。", + "enterNameAndTokenBeforeSaving": "保存する前に、インスタンス名と認証トークンを入力してください。", + "environment": "環境", + "environmentHelp": "任意。1つの環境に制限します。", + "eventsCount_one": "イベント {{count}} 件", + "eventsCount_other": "イベント {{count}} 件", + "executorProfile": "実行プロファイル", + "failedToLoadInstances": "Sentry インスタンスの読み込みに失敗しました: {{error}}", + "fallsBackToStepDefault": "任意。ステップのデフォルトにフォールバックします。", + "filter": "フィルター", + "foundNewIssues_one": "新しい課題が {{count}} 件見つかりました。タスクはまもなく表示されます。", + "foundNewIssues_other": "新しい課題が {{count}} 件見つかりました。タスクはまもなく表示されます。", + "grantReadAccess": "これらのスコープに対する読み取りアクセスを付与します:", + "instance": "インスタンス", + "instanceNameTaken": "このワークスペースには、すでに \"{{name}}\" という名前のインスタンスがあります。", + "instanceRemoved": "Sentry インスタンスを削除しました", + "instanceSaved": "Sentry インスタンスを保存しました", + "instanceUnavailable": "(利用不可)", + "instanceUrl": "インスタンス URL", + "instanceUrlHelp": "Sentry インスタンスのベース URL。Sentry SaaS なら {{defaultUrl}} のまま。セルフホストなら {{exampleUrl}} のように指定。", + "instances": "インスタンス", + "interval": "間隔", + "intervalMinutes_one": "{{count}}分", + "intervalMinutes_other": "{{count}}分", + "lastPolled": "最後のポーリング", + "lastSeen": "最終確認", + "level": "レベル", + "levelDebug": "debug", + "levelError": "error", + "levelFatal": "fatal", + "levelInfo": "info", + "levelWarning": "warning", + "levels": "レベル", + "levelsHelp": "クリックで切り替え。選択したレベルのどれかに一致する issue を表示。", + "loadMore": "さらに読み込み", + "loadingEllipsis": "読み込み中…", + "maxInflightTasks": "同時実行タスク上限", + "maxInflightTasksHelp": "この watcher が作る未完了タスクの上限。空欄なら上限なし。上限に達した新規一致は次回ポーリングへ回す。", + "name": "名前", + "nameHelp": "このインスタンスのラベル。workspace 内で一意にすること。", + "namePlaceholder": "本番、Self-hosted、…", + "never": "なし", + "newInstance": "新しいインスタンス", + "newWatcher": "新しい watcher", + "noCap": "(上限なし)", + "noHealthySentryInstanceCheckThe": "正常な Sentry インスタンスなし。integration 設定確認。", + "noInstancesInWorkspace": "この workspace に Sentry インスタンスなし", + "noInstancesYet": "まだ Sentry インスタンスなし。追加して workspace 接続。", + "noIssuesYetRunASearch": "まだ issue なし。検索して開始。", + "noNewIssuesMatched": "新しい issue は一致なし。", + "noOrganizationsAvailable": "利用可能な organization なし", + "noProjectsAvailable": "利用可能な project なし", + "noProjectsAvailableSentence": "利用可能な project なし。", + "noSentryInstancesConfiguredForThis": "この workspace 用に設定された Sentry インスタンスなし。", + "noWatchersConfigured": "Sentry watcher 未設定。フィルタ済み issue から task 自動作成するには1つ作成。", + "orgSlugRequired": "organization slug 必須", + "organization": "組織", + "organizationSlug": "組織スラッグ", + "organizationSlugHelp": "ポーリングするSentry組織。", + "pasteAnAuthTokenToTest": "接続テスト用に認証トークンを貼り付け", + "pause": "一時停止", + "paused": "一時停止中", + "period": "期間", + "placeholderAssigneeDisplayName": "担当者表示名", + "placeholderCulprit": "原因箇所 (関数 or ファイル)", + "placeholderEventCount": "イベント総数", + "placeholderFirstSeen": "Issueが最初に見つかった時刻", + "placeholderIssueLevel": "Issueレベル", + "placeholderIssueStatus": "Issueステータス", + "placeholderIssueTitle": "Issueタイトル", + "placeholderIssueUrl": "Sentry issueのパーマリンク", + "placeholderLastSeen": "Issueが最後に見つかった時刻", + "placeholderProjectSlug": "Sentryプロジェクトスラッグ", + "placeholderShortId": "Sentry短縮ID", + "placeholderUserCount": "影響受けた一意ユーザー数", + "pollIntervalHelp": "検索の再実行間隔。最小60秒、最大3600秒。", + "pollIntervalSeconds": "ポーリング間隔 (秒)", + "production": "production", + "project": "プロジェクト", + "projectSlug": "プロジェクトスラッグ", + "projectSlugHelp": "ポーリングするSentryプロジェクト。1つ以上選択。", + "projectsSelected_one": "{{count}}件のプロジェクト選択済み", + "projectsSelected_other": "{{count}}件のプロジェクト選択済み", + "promptFieldHelp": "各新規Issueごとにエージェントへ送るプロンプト。{{token}} を入力するとプレースホルダ挿入。", + "query": "クエリ", + "queryExample": "例: {{query}}", + "queryHelp": "自由文のSentry検索クエリ (任意)。", + "removeInstanceConfirm": "Sentryインスタンス \"{{name}}\" を削除?", + "requiredTokenScopes": "必要なトークンスコープ", + "resetCompleteDeletedTasks_one": "リセット完了。{{count}}件のタスク削除。次回ポーリングで一致項目を再インポート。", + "resetCompleteDeletedTasks_other": "リセット完了。{{count}}件のタスク削除。次回ポーリングで一致項目を再インポート。", + "resetCompleteNoTasksDeleted": "リセット完了。次回ポーリングで一致項目を再インポート。", + "resetFailed": "リセット失敗: {{error}}", + "resetWatch": "監視をリセット", + "saveFailed": "保存失敗: {{error}}", + "savedLeaveBlank": "(保存済み。現在値を維持するなら空欄)", + "saving": "保存中…", + "scopeEventRead": "Issue と Event。issue を参照し、watcher を実行", + "scopeOrgRead": "Organization。org を解決し、issue を一覧表示", + "scopeProjectRead": "Project。project を一覧表示し、search を絞り込み", + "searchProjects": "Project を検索...", + "selectASentryInstanceToBrowse": "閲覧する Sentry instance を選択", + "selectAnInstance": "Instance を選択", + "selectAnInstanceToBrowse": "閲覧する instance を選択", + "selectInstanceToSearch": "検索する Sentry instance を選択", + "selectOrganization": "Organization を選択", + "selectProjects": "Project を選択", + "selectWorkflow": "Workflow を選択", + "selectWorkspace": "Workspace を選択", + "sentryInstance": "Sentry インスタンス", + "sentryInstanceHelp": "この watcher がポーリングする Sentry instance。作成後は変更不可。", + "sentryIntegration": "Sentry統合", + "sentryIntegrationDescription": "この workspace を Sentry に接続。Sentry org ごと、または self-hosted host ごとに名前付き instance を追加。認証情報は server-side で暗号化保存。", + "sentryWatcher": "Sentry監視", + "sentryWatchers": "Sentry の監視者", + "sentryWatchersDescription": "Sentry filter をポーリングし、新しく一致した issue ごとに Kandev task を自動作成。", + "statsPeriod": "集計期間", + "statsPeriodHelp": "一致 issue をどこまで遡って探すか。", + "statsPeriodLast14Days": "過去 14 日", + "statsPeriodLast24Hours": "過去 24 時間", + "statsPeriodLast30Days": "過去 30 日", + "statsPeriodLast7Days": "過去 7 日", + "statsPeriodLastHour": "過去 1 時間", + "statusIgnored": "ignored", + "statusResolved": "resolved", + "statusUnresolved": "unresolved", + "statuses": "ステータス", + "statusesHelp": "クリックで切り替え。選択したどれかの status に一致する issue を対象。", + "taskPrompt": "タスクプロンプト", + "testConnection": "接続をテスト", + "testFailed": "失敗: {{error}}", + "testing": "テスト中...", + "update": "更新", + "updateFailed": "更新失敗: {{error}}", + "useStepDefault": "(step のデフォルトを使用)", + "usersCount_one": "ユーザー {{count}}", + "usersCount_other": "ユーザー {{count}}", + "watchDialogDescription": "構造化フィルタで Sentry をポーリングし、新しく一致した issue ごとに Kandev task を自動作成。必要なら repository を bind して各 task をその codebase で run。未設定なら repository なしで run。", + "watcherCreated": "Watcher 作成済み", + "watcherDeleted": "Watcher 削除済み", + "watcherUpdated": "Watcher 更新済み", + "workflow": "ワークフロー", + "workflowHelp": "Task はこの workflow に作成。", + "workflowStep": "ワークフローステップ", + "workflowStepHelp": "新しい task の初期 step。", + "workspaceHelp": "この watcher で作成した task は選択 workspace に入る。", + "yourSentryAuthTokenIsInvalid": "Sentry auth token 無効、または revoke 済み。再接続して issue を表示。" +} diff --git a/apps/web/src/locales/ja/settings.json b/apps/web/src/locales/ja/settings.json new file mode 100644 index 0000000000..189846c462 --- /dev/null +++ b/apps/web/src/locales/ja/settings.json @@ -0,0 +1,842 @@ +{ + "aSecretNameAndValueAreRequired": "シークレット名と値が必要。", + "aSecretNameIsRequired": "シークレット名が必要。", + "aboutAffectedKandevMcpTools": "影響を受ける Kandev MCP ツールについて", + "accessControl": "アクセス制御", + "actionsFor": "{{target}} の操作", + "activeKandevSpritesSpritesAreDestroyed": "アクティブな Kandev スプライト。エージェント停止でスプライトは破棄。", + "activeSessions": "アクティブなセッション", + "activeSprites_one": "アクティブなスプライト {{count}} 件。", + "activeSprites_other": "アクティブなスプライト {{count}} 件。", + "addAMissingToolTabBeside": "選択中の分割の横に不足中のツールタブを追加。", + "addAppriseProvider": "Apprise プロバイダを追加", + "addCustomEditor": "カスタムエディタを追加", + "addEditor": "エディタを追加", + "addPanel": "パネルを追加", + "addProvider": "プロバイダを追加", + "addSecret": "シークレットを追加", + "addTheTabToTheSelected": "選択中の分割に {{panel}} タブを追加。", + "affectedKandevMcpTool": "影響を受ける Kandev MCP ツール", + "agent": "エージェント", + "agentFallback": "エージェントフォールバック", + "agentFallbackAria": "エージェントフォールバックのモデル設定", + "agentFallbackDisabledHelper": "自動フォールバック有効。特定のフォールバックモデルを 1 つ選ぶには、これをオフ。", + "agentFallbackHelper": "開始モデルが使えないと、自動でこのモデルへ切り替え。", + "agentFallbackHelp": "開始モデルが使えない場合、Kandev はこのモデルだけ試す。これも使えないと、セッション失敗。予測可能なフォールバックが欲しいときに使う。", + "agentFallbackHelpTitle": "エージェントフォールバック", + "agentFallbackInfoLabel": "エージェントフォールバックの説明", + "agentFallbackPlaceholder": "フォールバックモデルを選択...", + "agentGeneratedTaskTitles": "エージェント生成タスクタイトル", + "agentGeneratedTaskTitlesDescription": "有効時、新規タスクとサブタスクのフォームから手動タイトル欄を隠し、プロンプト必須にする。Kandev はまずプロンプト先頭 6 語で仮タイトルを即表示し、その後エージェントに約 3 語の簡潔なタイトルへ置き換えさせる。エージェントが変更できない場合、仮タイトルはそのまま編集可能。既存タスクと編集済みタスクは通常のタイトル欄を維持。", + "agentGeneratedTaskTitlesDisabledHint": "既定で無効。作成ダイアログを開く前にこの設定を保存。", + "animateRichOutputCharts": "リッチ出力チャートをアニメーション", + "animateRichOutputChartsDescription": "エージェント表示時に折れ線グラフと棒グラフをアニメーション表示。オフにするとブラウザ負荷を減らせる。チャートデータと操作は使えるまま。OS の軽減動作設定が常に優先。デバイスに保存。", + "apiTokenIsConfigured": "API トークン設定済み。", + "appearance": "外観", + "appriseNotInstalled": "Apprise はまだ未インストール。あとで追加してリモート通知を有効化できる。<2>インストール手順を見る。", + "appriseProvider": "Apprise プロバイダ", + "appriseServiceUrls": "サービス URL", + "appriseUrlRequired": "少なくとも 1 つの Apprise サービス URL が必要。", + "appriseDetected": "Apprise 検出済み。", + "appriseDetectionServer": "検出は Kandev サーバー上で実行。", + "appriseNotDetected": "Apprise が見つかりません。", + "appriseRescanFailed": "Apprise を確認できませんでした。もう一度試してください。", + "rescanApprise": "Apprise を再スキャン", + "archiveConfirmation": "アーカイブ確認", + "preventAutoStartAgentOnOpen": "開いたときのエージェント自動開始を防ぐ", + "preventAutoStartAgentOnOpenHelp": "再起動後、または最終ワークフローステップからタスクを開いたときに、エージェントを自動開始しません。代わりに「Start agent」ボタンを表示します。", + "arrangeSplit": "分割を並べ替え", + "autoApprove": "自動承認", + "autoInstallIfNotFound": "見つからなければ自動インストール", + "autoStart": "自動開始", + "autoStartLanguageServersWhenOpening": "ファイルを開いたときに言語サーバーを自動開始し、診断、ホバー情報、定義へ移動を使えるようにします。サーバーごとにファイル単位でオンオフ切り替えもできます。言語サーバーはデスクトップのファイルエディタで実行されます。モバイルのファイルビューアは開始しません。", + "autoFallback": "次のモデルへ自動的にフォールバック", + "autoFallbackHelper": "開始モデルが使えないとき、失敗せずにエージェントが次の利用可能モデルを選べるようにします。明示的なフォールバックモデルは無効になります。", + "autoFallbackHelp": "開始モデルが使えない場合、Kandev は残っている公開済みモデルからエージェントに選ばせます。選ばれるモデルは、利用可能状況の変化で変わることがあります。", + "autoFallbackHelpTitle": "自動フォールバック", + "autoFallbackInfoLabel": "自動フォールバックを説明", + "requireExactModel": "完全一致モデル必須", + "requireExactModelHelper": "この完全一致モデルが公開され、適用できるときだけセッションを開始します。これをオフにしても、保存済みのフォールバック設定は残ります。", + "requireExactModelInfoLabel": "完全一致モデル要件を説明", + "requireExactModelHelpTitle": "完全一致モデル必須", + "requireExactModelHelp": "設定したモデルが公開されていない、または適用できないとセッションは失敗します。自動フォールバック設定と明示的フォールバック設定は保存されたままですが、無効です。", + "autoStartLanguageServer": "{{language}} の言語サーバーを自動開始", + "builtIn": "内蔵", + "builtInBrowserPanel": "内蔵ブラウザーパネル", + "cancel": "キャンセル", + "changelogNotificationsDescription": "トップバーのリリースノート通知を管理します", + "changelogPageDescription": "すべてのリリースを表示し、通知設定を管理します", + "changelogReleaseHistory": "リリース履歴", + "changelogReleaseHistoryDescription": "すべてのバージョンとリリースノート", + "changelogResetSeenDescription": "最後に見たバージョンを消し、トップバー通知をもう一度表示します", + "changelogResetSeenLabel": "既読リリースをリセット", + "changelogTopbarDescription": "有効にすると、新しいバージョン公開時にトップバーへキラキラのアイコンが表示されます", + "changelogTopbarLabel": "新しいリリースの通知を表示", + "changelogTopbarTitle": "トップバーのリリース通知", + "changesPanel": "変更パネル", + "changesPanelLayout": "変更パネルのレイアウト", + "changesTheLanguageOfTheKandev": "Kandev インターフェースの言語を変更します。すぐ反映され、この端末に記憶されます。タスク名、チャット、ほか自分で作った内容は翻訳されません。", + "chatInput": "チャット入力", + "chooseAMonospaceFontForThe": "ターミナル用の等幅フォントを選びます。Nerd Fonts には CLI ツール用のアイコンが含まれます。", + "chooseHowDeepTheSettingsMenuGoes": "設定メニューでページだけを表示するか、Workspaces, Agents, Executors を中身まで展開するか選びます。", + "chooseTheLanguageUsedAcrossThe": "Kandev インターフェース全体で使う言語を選択", + "chooseWhatOpensWhenKandevStarts": "起動先を選択。Threads を選ぶと Home にも使う。", + "chooseWhichTranscriptNavigationControls": "表示するトランスクリプト移動コントロールを選択。デスクトップ限定の固定プロンプトバーも含む。", + "clearSettingsSearch": "設定検索をクリア", + "clearShortcut": "ショートカットをクリア", + "clickAShortcutToRecordA": "ショートカットをクリックして新しいキー組み合わせを記録。", + "clickAUrlInTheTerminal": "ターミナル内の URL をクリックして開く。", + "cmdCtrlEnterToSend": "送信は Cmd/Ctrl+Enter", + "collectExecutionEnvironmentMetrics": "実行環境メトリクスを収集", + "colorTheme": "カラーテーマ", + "command": "コマンド", + "completeTheRequiredEditorFieldsBefore": "保存前に必須のエディタ項目を入力。", + "configChatAgentDescription": "Configuration Chat に使うエージェントプロファイルを選択。このエージェントはワークフロー、エージェントプロファイル、MCP 設定を管理できる。", + "configChatAgentNoDefault": "デフォルトなし", + "configChatAgentTitle": "Configuration Chat エージェント", + "configureArchiveSafeguardsAndDefaultsFor": "エージェントが作成したタスクのアーカイブ保護とデフォルトを設定", + "configureBackendAndExecutionResourceSampling": "バックエンドと実行リソースのサンプリングを設定", + "configureStatusBarVisibility": "Kandev のステータス表示を出すか選択", + "configureChatInputBehavior": "チャット入力の動作を設定", + "configureSpritesApiToken": "Executor プロファイルで <1>{{envVar}} 環境変数を設定し、Sprites.dev API トークンのシークレットを参照。", + "configureTerminalAppearanceAndBehavior": "ターミナルの見た目と動作を設定", + "configureTheIncludedCodeEditorAnd": "内蔵コードエディタと外部エディタを設定", + "configureTheInitialDesktopTaskWorkbench": "初期デスクトップタスク作業台を設定。", + "confirmBeforeArchivingTasks": "タスクをアーカイブする前に確認", + "connectKandevToThirdPartyServices": "Kandev を外部サービスに接続。接続範囲と使える設定は各統合ページに表示。", + "connected": "接続済み", + "connection": "接続", + "connectionTestFailed": "接続テスト失敗", + "connectionTestPassed": "接続テスト成功", + "continueEditing": "編集を続ける", + "couldnTSave": "<0> 保存できない", + "couldnTSave2": "保存できない", + "couldnTReset": "<0> リセットできない", + "couldnTReset2": "リセットできない", + "cpu": "CPU %", + "cpuTemp": "CPU 温度", + "createANewEditableLayoutBased": "Default をベースに新しい編集可能レイアウトを作成。", + "createANewSplitOfThe": "選択中の分割の新しい {{direction}} 分割を作成。", + "createASeparateCustomCopyOf": "選択中レイアウトの別カスタムコピーを作成。", + "custom": "カスタム", + "customEditorType": "カスタム", + "customEditors": "カスタムエディター", + "customEllipsis": "カスタム...", + "customFontExample": "例: \"My Custom Font\"", + "customizeHowChangedFilesAreDisplayed": "変更されたファイルの表示方法をカスタマイズします", + "customizeHowTheApplicationLooks": "アプリの外観をカスタマイズします", + "customizeKeyboardShortcutsForTheCommand": "コマンドパネルのキーボードショートカットをカスタマイズします", + "customized": "カスタマイズ済み", + "dark": "ダーク", + "decreaseHeight": "高さを下げる", + "decreaseWidth": "幅を狭める", + "default": "デフォルト", + "defaultMenloMonaco": "デフォルト (Menlo / Monaco)", + "defaults": "デフォルト:", + "delete": "削除", + "deleteLayoutProfile": "レイアウトプロファイルを削除", + "deleteLayoutProfileNamed": "{{name}} を削除しますか?", + "deleteSecret": "シークレットを削除", + "cannotDeleteSecret": "シークレットを削除できません", + "checkingSecretReferences": "このシークレットの使用箇所を確認しています…", + "checkingApprise": "Apprise を確認しています", + "secretReferencesLoadFailed": "このシークレットの使用箇所を確認できませんでした", + "secretDeleteFailed": "シークレットを削除できませんでした", + "secretInUse": "このシークレットは次で使用されています: {{references}}。削除する前に、これらの参照を削除するか置き換えてください。", + "secretInUseUnknown": "このシークレットは使用されています。削除する前に、その参照を削除するか置き換えてください。", + "secretReferenceAgent": "エージェントプロファイル \"{{name}}\" ({{key}})", + "secretReferenceExecutor": "Executor プロファイル \"{{name}}\" ({{key}})", + "secretReferenceRepository": "リポジトリ \"{{name}}\" ({{key}})", + "secretReferenceTypeAgent": "エージェントプロファイル", + "secretReferenceTypeExecutor": "Executor プロファイル", + "secretReferenceTypeRepository": "リポジトリ", + "secretReferenceHidden": "アクセスできないリソース", + "deleteThisCustomLayoutAfterConfirmation": "確認後、このカスタムレイアウトを削除します。", + "desktopNotifications": "デスクトップ通知", + "desktopNotificationsDescription": "選択したエージェントのターン、質問、または Office イベントが発生したときにこのデバイスに通知します。", + "desktopOnlyWhileYouScrollPast": "デスクトップのみ。最後のプロンプトを通過してスクロールすると、短縮版をトランスクリプト上部に固定表示し、展開トグルを付けます。", + "destroyAll": "すべて破棄", + "diagnosticACPNoSessions": "ACP のダウンロードはデバッグモードで利用できますが、このアカウントには含められる対象セッションがありません。", + "diagnosticACPSelectionLimit": "ACP セッションは 10 件まで選択できます。", + "diagnosticACPSelectionRequired": "対象の ACP セッションを少なくとも 1 件選択してください。", + "diagnosticACPWarning": "ACPデバッグメッセージには、プロンプト、応答、ツール呼び出し、ファイル内容、MCPデータ、環境由来の値、秘密情報が含まれる場合あり。このZIP、共有前に注意して確認。", + "diagnosticBackendEvents": "バックエンドログには、Kandevが書く起動、ライフサイクル、API、executor、エラーイベント含む。", + "diagnosticBundleCancel": "キャンセル", + "diagnosticBundleCreate": "バンドル作成", + "diagnosticBundleDescription": "Kandevは接続中ブラウザタブに、範囲内3日分コンソール履歴を要求し、保持済みバックエンドログファイルと結合して、1つのZIPをダウンロードする。", + "diagnosticBundleFailed": "診断バンドル失敗。", + "diagnosticBundlePrepareError": "診断バンドルを準備できなかった。", + "diagnosticBundleTitle": "フロントエンド + バックエンド診断ログ", + "diagnosticBusy": "診断中。{{seconds}}秒後に再試行。", + "diagnosticClearACPSelection": "ACP選択をクリア", + "diagnosticCollectingFrontendLogs": "フロントエンドログ収集中…", + "diagnosticCustomize": "バンドルをカスタマイズ", + "diagnosticCustomizerDescription": "含める証拠を選ぶ。バックエンドとフロントエンドログはデフォルト選択。設定は保存しない。", + "diagnosticCustomizerTitle": "診断バンドルをカスタマイズ", + "diagnosticFrontendEvents": "フロントエンドログには、このブラウザプロファイルのブラウザコンソールエラー、警告、診断トースト報告を含む。", + "diagnosticIncidentalText": "ログエントリにすでに書かれた偶発テキストは、自動ではマスクしない。共有前にZIP確認。", + "diagnosticNoMessages": "標準バンドルには、チャットトランスクリプト、セッションメッセージ、エージェントメッセージは入らない。", + "diagnosticOpenTask": "タスク {{title}} を新しいタブで開く", + "diagnosticPartialZipDownloading": "部分ZIPをダウンロード中: {{warnings}}", + "diagnosticPartialZipUnavailable": "部分診断ZIPをダウンロード中。一部フロントエンドログは利用不可。", + "diagnosticPreparingZip": "ZIP準備中…", + "diagnosticReviewBeforeSharing": "共有前に確認", + "diagnosticReviewDescription": "このZIPは、最大3日分バックエンドログと、接続中ブラウザからローカル保持したフロントエンドコンソールイベントをまとめる。URL、コンソール引数、スタック、パス、実行時メタデータ、ユーザーに見えるエラーを含む場合あり。", + "diagnosticSelectAllACPSessions": "すべてのACPセッションを選択", + "diagnosticSelectSessions": "ACPセッションを選択", + "diagnosticSelectedSessions_one": "{{count}}セッション選択済み", + "diagnosticSelectedSessions_other": "{{count}}セッション選択済み", + "diagnosticSessionReachable": "到達可能", + "diagnosticSessionRetained": "ホスト保持", + "diagnosticSessionUnavailable": "利用不可", + "diagnosticSessionsDescription_one": "対象セッションを最大{{count}}件選ぶ。利用不可セッションは収集不可。", + "diagnosticSessionsDescription_other": "対象セッションを最大{{count}}件選ぶ。利用不可セッションは収集不可。", + "diagnosticSessionsLoading": "対象セッション読み込み中…", + "diagnosticSourceACP": "ACPデバッグメッセージ", + "diagnosticSourceACPDescription": "選択セッションの生フレームと正規化済みエージェントプロトコルフレーム。", + "diagnosticSourceBackend": "バックエンドログ", + "diagnosticSourceBackendDescription": "保持済みKandevバックエンドログファイル、最大3日分。", + "diagnosticSourceFrontend": "フロントエンドログ", + "diagnosticSourceFrontendDescription": "接続中ブラウザタブからの範囲内コンソールイベント。", + "diagnosticSourceRequired": "少なくとも1つ証拠ソース選択。", + "diagnosticSourceRuntime": "ランタイム インデックス", + "diagnosticSourceRuntimeDescription": "許可リスト済みセッション状態と実行メタデータ。メッセージ、プロンプトなし。", + "diagnosticSourcesTitle": "証拠ソース", + "diagnosticZipDownloading": "診断 ZIP をダウンロード中。", + "discardAndLeave": "破棄して離脱", + "discarding": "破棄中...", + "disconnected": "切断済み", + "discoveryAliasesAgentTaskProfile": "MCP タスク プロファイル,エージェント タスク既定", + "discoveryAliasesArchiveConfirmation": "アーカイブ警告,アーカイブ確認", + "discoveryAliasesColorTheme": "テーマ,ライトモード,ダークモード,外観", + "discoveryAliasesDesktopNotifications": "デスクトップ通知,システム通知", + "discoveryAliasesDisplayLanguage": "ロケール,翻訳,インターフェース言語", + "discoveryAliasesExternalMcpEndpoints": "MCP URL,HTTP エンドポイント,SSE エンドポイント", + "discoveryAliasesFileEditor": "言語サーバー,LSP,既定エディター", + "discoveryAliasesKeyboardShortcuts": "ホットキー,キー割り当て,キーボード コマンド", + "discoveryAliasesLayoutProfiles": "ワークスペース レイアウト,パネル,タスク ワークベンチ", + "discoveryAliasesNotificationSound": "通知音,チャイム,アラート音", + "discoveryAliasesPreferredShell": "シェル,zsh,bash,ターミナル シェル", + "discoveryAliasesResourceMetrics": "メトリクス,CPU,メモリ,ディスク,ステータスバー", + "discoveryAliasesRichOutputMotion": "グラフアニメーション,グラフ,パフォーマンス,モーション軽減", + "discoveryAliasesSettingsMenu": "サイドバー,ナビゲーション,ツリー,アコーディオン,メニュー", + "discoveryAliasesStartupPage": "ホームページ,スタートページ,起動ページ,スレッド,既定ホーム,ホーム表示", + "discoveryAliasesStatusBar": "下部バー,ステータス ドロワー,接続状態,外観", + "discoveryAliasesSubmitShortcut": "送信キー,Enter で送信,Command+Enter", + "discoveryAliasesTerminalFont": "フォント ファミリー,書体,等幅", + "discoveryAliasesTerminalFontSize": "文字サイズ,ターミナル文字", + "discoveryAliasesTerminalLinks": "URL,リンクを開く,ブラウザー", + "discoveryAliasesTranscriptNavigation": "固定プロンプトバー,プロンプトへスクロール,トランスクリプト自動スクロール", + "discoveryAliasesUtilityActions": "タイトル生成,ブランチ名,コミットメッセージ,PR 説明", + "discoveryAliasesUtilityDefaultModel": "ユーティリティ モデル,推論モデル,既定 AI モデル", + "disk": "ディスク %", + "diskPath": "ディスク パス", + "displayChangedFilesAsAFlat": "変更ファイルをフルパス付きのフラット一覧で表示するか、フォルダツリーで表示するか。", + "displayLanguage": "表示言語", + "done": "完了", + "duplicate": "複製", + "duplicateLayout": "レイアウトを複製", + "edit": "編集", + "editEditor": "{{name}} を編集", + "editSecret": "シークレットを編集", + "editorName": "エディタ名", + "editorType": "エディタ種別", + "editors": "エディタ", + "enableDesktopNotifications": "デスクトップ通知を有効にする", + "enableNotificationSound": "通知音を有効にする", + "enterAShellPathOrCommand": "エージェント環境で使えるシェルパスかコマンドを入力。", + "enterToSend": "Enter で送信", + "externalMcpAvailableTools": "利用可能なツール", + "externalMcpCategoryCount_one": "{{count}}カテゴリ", + "externalMcpCategoryCount_other": "{{count}}カテゴリ", + "externalMcpConfigPathOrCli": "{{path}}。または下の CLI コマンドを実行", + "externalMcpCopied": "コピー済み", + "externalMcpCopyToClipboard": "クリップボードにコピー", + "externalMcpCopyUrl": "URL をコピー", + "externalMcpEndpoints": "エンドポイント", + "externalMcpEndpointsDescription": "Kandev と同じホストとポートで利用可能。同一マシンのエージェントには {{localhostHost}} を使う。LAN、VPN、リバースプロキシのクライアントには到達可能な Kandev URL を使う。", + "externalMcpGroupAgentProfiles": "エージェントプロファイルと MCP 設定", + "externalMcpGroupAgentProfilesDescription": "プロファイル単位の MCP サーバー設定を管理。", + "externalMcpGroupAgents": "エージェント", + "externalMcpGroupAgentsDescription": "エージェントカタログを確認・設定。", + "externalMcpGroupExecutors": "実行者", + "externalMcpGroupExecutorsDescription": "実行プロファイルを CRUD する (Docker, standalone, Sprites...)。", + "externalMcpGroupQuestions": "エージェントの質問への回答", + "externalMcpGroupQuestionsDescription": "任意のエージェントセッションから来た保留中の確認質問を一覧し、回答または拒否。", + "externalMcpGroupTaskCreation": "タスク作成", + "externalMcpGroupTaskCreationDescription": "外部エージェントから新しいトップレベルタスクやサブタスクを作成。", + "externalMcpGroupTaskDependencies": "タスク依存関係", + "externalMcpGroupTaskDependenciesDescription": "別タスクが完了するまでタスクをブロックする、またはそのブロックを解除。", + "externalMcpGroupTasks": "タスク", + "externalMcpGroupTasksDescription": "タスク状態を一覧、移動、アーカイブ、更新。", + "externalMcpGroupWorkflowSteps": "ワークフローステップ (列)", + "externalMcpGroupWorkflowStepsDescription": "ワークフローを構成する列を管理。", + "externalMcpGroupWorkspaces": "ワークスペースとワークフロー", + "externalMcpGroupWorkspacesDescription": "ワークスペースを検出し、ワークフローを CRUD する。", + "externalMcpIntro": "Kandev を、Kandev の <2>外部 で動くコーディングエージェント (例: Claude Code、Cursor、またはホスト上の Codex) から、または Kandev 内で動く <4>パススルーエージェント から管理したい場合に使う。", + "externalMcpIntroPassthrough": "Kandev 内で通常モード起動したエージェントには、Kandev MCP が自動で組み込まれる。設定不要。", + "externalMcpOneLiner": "1行コマンド ({{path}} に書き込み)", + "externalMcpOpenCodePaths": "{{projectPath}} (project) または {{globalPath}} (global)", + "externalMcpSnippets": "設定スニペット", + "externalMcpSnippetsDescription": "これをエージェントのグローバル MCP 設定に貼り付け。", + "externalMcpSse": "Server-Sent Events (SSE)", + "externalMcpSseHint": "古い MCP クライアント向けの互換トランスポートです。", + "externalMcpStreamableHttp": "Streamable HTTP", + "externalMcpStreamableHttpHint": "Claude Code、Cursor、Codex に推奨されます。", + "externalMcpToolAddTaskDependency": "別のタスクが正常に完了するまで、タスクをブロックします。", + "externalMcpToolAnswerQuestion": "保留中の clarification bundle を pending_id で回答または却下します。先着順で勝ち、負けた呼び出しにはエラーの代わりに勝者の解決結果が返ります。", + "externalMcpToolArchiveTask": "タスクをアーカイブします。", + "externalMcpToolCount_one": "{{count}} 個のツール", + "externalMcpToolCount_other": "{{count}} 個のツール", + "externalMcpToolCreateAgentProfile": "新しいエージェントプロファイルを作成します。(model、auto-approve)", + "externalMcpToolCreateExecutorProfile": "config、prepare/cleanup スクリプトを含むプロファイルを作成します。", + "externalMcpToolCreateTask": "トップレベルのタスク、または明示的な {{parentIdParam}} の下にサブタスクを作成します。", + "externalMcpToolCreateWorkflow": "ワークフローを作成します。", + "externalMcpToolCreateWorkflowStep": "prompt、color、event hooks を持つ新しい列を追加します。", + "externalMcpToolDeleteAgentProfile": "エージェントプロファイルを削除します。", + "externalMcpToolDeleteExecutorProfile": "executor プロファイルを削除します。", + "externalMcpToolDeleteTask": "タスクを完全に削除します。", + "externalMcpToolDeleteWorkflow": "ワークフローとそのすべてのステップを削除します。(破壊的)", + "externalMcpToolDeleteWorkflowStep": "ステップを削除します。(破壊的)", + "externalMcpToolGetMcpConfig": "プロファイルの MCP サーバーマップを読み取ります。", + "externalMcpToolGetTaskConversation": "タスクの会話履歴を取得します。必要に応じて特定のセッションに対しても取得できます。", + "externalMcpToolImportWorkflow": "移植可能な YAML/JSON エクスポートドキュメントから 1 つ以上のワークフローをインポートします。", + "externalMcpToolExportWorkflow": "1 つのワークフローを移植可能な JSON ドキュメントとしてエクスポートし、別のワークスペースにインポートできるようにします。", + "externalMcpToolListAgentProfiles": "エージェントのプロファイルを一覧表示します。", + "externalMcpToolListAgents": "設定済みのエージェントとそのプロファイルを一覧表示します。", + "externalMcpToolListExecutorProfiles": "executor のプロファイルを一覧表示します。", + "externalMcpToolListExecutors": "すべての executor を一覧表示します。", + "externalMcpToolListPendingQuestions": "まだ回答待ちの clarification bundle を一覧表示します。", + "externalMcpToolListRepositories": "ワークスペース内のリポジトリを一覧表示します。各リポジトリのデフォルトブランチも含みます。", + "externalMcpToolListTasks": "ワークフロー内のタスクを一覧表示します。", + "externalMcpToolListWorkflowSteps": "ワークフロー内のすべてのステップを一覧表示します。", + "externalMcpToolListWorkflows": "ワークスペース内のワークフローを一覧表示します。", + "externalMcpToolListWorkspaces": "すべてのワークスペースを一覧表示します。", + "externalMcpToolMoveTask": "タスクを別のステップまたは位置に移動します。", + "externalMcpToolRemoveTaskDependency": "タスクの依存エッジを削除します。", + "externalMcpToolReorderWorkflowSteps": "ステップ ID の完全な順序リストを設定します。", + "externalMcpToolUpdateAgent": "MCP サポートを切り替えるか、config path を設定します。", + "externalMcpToolUpdateAgentProfile": "name、model、auto-approve を更新します。", + "externalMcpToolUpdateExecutorProfile": "executor プロファイルを更新します。", + "externalMcpToolUpdateMcpConfig": "プロファイルの MCP サーバーマップを置き換えます。", + "externalMcpToolUpdateTaskState": "タスク状態を設定: {{states}}。", + "externalMcpToolUpdateWorkflow": "ワークフロー名を変更、または更新。", + "externalMcpToolUpdateWorkflowStep": "ステップ設定かイベントを編集。", + "externalMcpToolsSummary": "{{tools}} を {{categories}} で提供。展開して外部エージェントで何ができるか確認。", + "externalProviders": "外部プロバイダ", + "externalProvidersDescription": "リモート通知用の外部プロバイダを設定。", + "failedToConnectToBackend": "バックエンド接続に失敗", + "failedToSaveLayoutProfiles": "レイアウトプロファイルの保存に失敗", + "fileEditor": "ファイルエディタ", + "fileListView": "ファイル一覧表示", + "fixInvalidLspServerConfigurationBefore": "保存前に無効な LSP サーバー設定を修正。", + "flatList": "フラット一覧", + "fontFamily": "フォントファミリー", + "fontSize": "フォントサイズ", + "frequencySeconds": "頻度(秒)", + "fallbackModelUnavailable": "フォールバックモデルはもう使えない。別のモデルを選択", + "fallbackSettings": "フォールバック設定", + "fallbackSettingsSummaryAutomatic": "自動フォールバック有効", + "fallbackSettingsSummaryExplicit": "明示的フォールバック: {{model}}", + "fallbackSettingsSummaryStrict": "フォールバック未設定", + "fallbackSettingsSummaryExact": "厳密モデル必須", + "fallbackSettingsSummaryExecutorDefault": "Executor デフォルト可", + "requireExactModelValidationTitle": "モデル必須", + "requireExactModelValidation": "厳密モデル要件を有効にする前に、具体的なモデルを選択。", + "fallbackNoteLive": "このセッションは、設定モデルが使えなかったため、フォールバックモデルで開始。 (fallback) マーカーはライブセッションを表し、再読み込み後は表示されない。", + "modelFallbackSuffix": "(fallback)", + "globalSecrets": "グローバルシークレット", + "health": "健康状態", + "hostedUrl": "ホスト済み URL", + "icons": "アイコン", + "increaseHeight": "高さを増やす", + "increaseWidth": "幅を増やす", + "inferenceAgentAuthRequired": "{{name}} にサインインしてモデルを読み込む。", + "inferenceAgentNoModels": "{{name}} はモデルを公開していない。", + "inferenceAgentNotConfigured": "{{name}} は推論用に設定されていない。", + "inferenceAgentNotInstalled": "このマシンに {{name}} CLI はインストールされていない。", + "inferenceAgentProbeFailed": "{{name}} の確認に失敗。", + "inferenceAgentProbing": "{{name}} を設定中…", + "inferenceAgentRefresh": "更新", + "inferenceAgentRefreshing": "更新中…", + "inferenceAgentThisAgent": "このエージェント", + "inferenceAgentUnavailable": "{{name}} はもう利用不可。", + "installed": "インストール済み", + "integrationDescriptionAzureDevops": "Azure Boards の作業項目と Azure Repos の pull request。", + "integrationDescriptionGithub": "PR レビューキュー、issue ウォッチャー、OAuth 認証情報。", + "integrationDescriptionGitlab": "merge request 作成、会話返信、セルフ管理ホスト。", + "integrationDescriptionJira": "Atlassian Cloud 認証情報と JQL issue ウォッチャー。", + "integrationDescriptionLinear": "個人 API キーとチームのデフォルト。", + "integrationDescriptionSentry": "認証トークン、組織とプロジェクトのデフォルト、issue 閲覧。", + "hideDisabledAgentProfilesFromNav": "左パネルナビから無効なエージェントプロファイルを非表示", + "hideDisabledAgentProfilesFromNavDescription": "オンなら、無効なエージェントプロファイルは、設定済みでも左パネルナビから外れる。", + "hideDisabledIntegrationsFromNav": "左パネルナビから無効な連携を非表示", + "hideDisabledIntegrationsFromNavDescription": "オンなら、無効な連携は、設定済みでもサイドバーとモバイルメニューから外れる。", + "invalidJson": "無効な JSON", + "keyboardShortcuts": "キーボードショートカット", + "language": "言語", + "languageServers": "言語サーバー", + "lastVisitedTask": "最後に見たタスク", + "layout": "レイアウト", + "layoutDirectionAbove": "上", + "layoutDirectionAboveInline": "上", + "layoutDirectionBelow": "下", + "layoutDirectionBelowInline": "下", + "layoutDirectionLeft": "左", + "layoutDirectionLeftInline": "左", + "layoutDirectionOfTarget": "{{target}} の {{direction}}", + "layoutDirectionRight": "右", + "layoutDirectionRightInline": "右", + "layoutEditorForProfile": "{{name}} エディタ", + "layoutProfile": "レイアウトプロファイル", + "layoutProfileCopyName": "{{name}} のコピー", + "layoutProfileDefault": "デフォルト", + "layoutProfileDefaultDescription": "Files、Changes、Terminal 付きエージェント", + "layoutProfileName": "レイアウトプロファイル名", + "layoutProfileNamesMustNotBe": "レイアウトプロファイル名は空にできない", + "layoutProfilePlanMode": "プランモード", + "layoutProfilePlanModeDescription": "Agent と Plan を並べる", + "layoutProfilePreviewMode": "プレビューモード", + "layoutProfilePreviewModeDescription": "Agent と Browser を並べる", + "layoutProfiles": "レイアウトプロファイル", + "layoutProfilesWereNotSaved": "レイアウトプロファイルは保存されなかった", + "layoutProfileVsCodeDescription": "Agent と VS Code を並べる", + "layouts": "レイアウト", + "ligatures": "合字", + "light": "ライト", + "loading": "読み込み中...", + "loadingSecrets": "シークレット読み込み中...", + "logsPageDescription": "フロントエンドとバックエンドのログ入り診断 ZIP を作成する。", + "lspConfigCustomBadge": "カスタム", + "lspInstallHintGo": "\"{{command}}\" を実行。Go のインストールが必要。", + "lspInstallHintKotlin": "{{binary}} を task host の {{path}} に手動でインストール。Local Docker tasks なら task container 内に入れる。", + "lspInstallHintPython": "{{manager}} 経由で {{package}} を {{dir}} にインストール", + "lspInstallHintRust": "GitHub releases から {{binary}} バイナリを {{dir}} にダウンロード", + "lspInstallHintTypescript": "{{manager}} 経由で {{server}} と {{runtime}} を {{dir}} にインストール", + "lspLanguageExperimental": "{{language}} (experimental)", + "makeTheOriginalDefaultLayoutThe": "元の Default レイアウトを、新規 task の開始レイアウトにする。", + "makeTheSelectedSplit40Pixels": "選択した split を 40 ピクセル狭くする。", + "makeTheSelectedSplit40Pixels2": "選択した split を 40 ピクセル広くする。", + "makeTheSelectedSplit40Pixels3": "選択した split を 40 ピクセル低くする。", + "makeTheSelectedSplit40Pixels4": "選択した split を 40 ピクセル高くする。", + "makesAgentctlValuesAvailableToPlugins": "agentctl の値を plugins と他の利用先に公開する。組み込み status bar は host 専用のまま。", + "manageApiKeysAndCredentialsSecrets": "API keys と credentials を管理。Secrets は保存時に暗号化され、executor profile の env vars 経由で agent 環境に注入される。", + "globalScope": "グローバル", + "modelWithValue": "モデル: {{model}}", + "settingsMenu": "設定メニュー", + "settingsMenuAccordion": "アコーディオンツリー", + "settingsMenuAccordionDescription": "Workspaces、Agents、Executors は、中身まで展開される。workspace から単一 integration まで。1 つ開くと他は閉じるので、menu は今いる page への道だけを表示する。これがデフォルト menu。", + "settingsMenuFlat": "フラット一覧", + "settingsMenuFlatDescription": "settings page ごとに 1 行だけ。個別の workspaces、agents、executors は各 page から開く。いちばん短い menu。", + "settingsMenuPersistent": "永続ツリー", + "settingsMenuPersistentDescription": "同じ branch だけど、複数を同時に開ける。reload 後も開いたまま。いくつかの record を並べて見たいときに使う。workspace や agent が多いと menu は長くなる。", + "settingsMenuShape": "メニュー形状", + "settingsMenuShapePerDevice": "この device にだけ適用。他の device と browser は別の選択のまま。", + "temperatureWithValue": "Temperature: {{temperature}}", + "workspaceScope": "ワークスペース", + "workspaceSecretsDescription": "この workspace の repositories で使える secrets を管理。共有 agent と executor profiles は Global secrets だけ使える。", + "workspacesAndAccess": "Workspaces と Access", + "revealSecretNamed": "secret {{name}} を表示", + "hideSecretNamed": "secret {{name}} を非表示", + "editSecretNamed": "secret {{name}} を編集", + "deleteSecretNamed": "シークレット {{name}} を削除", + "manageSpritesDevRemoteSandboxIntegration": "実行中のエージェントを分離されたクラウド環境で動かすための、Sprites.dev リモートサンドボックス連携を管理します。", + "manualInstallRequired": "手動インストールが必要です", + "markMessagesThatArrivedWhileA": "タスクが非表示の間に届いたメッセージをマークします。すぐに反映されます。", + "mcpAffectedToolsHelp": "<0>create_task_kandev は個別のタスクを作成します。<3>spawn_session_kandev は現在のタスクにセッションを追加するため、この設定は使用されません。", + "mcpCreateTaskScope": "<0>create_task_kandev は新しいタスクとサブタスクを作成します。この設定は、呼び出しで <4>agent_profile_id が省略された場合にのみ適用されます。ライブの task-mode 呼び出しでは、Creating session profile が検証済みセッションの有効なモデル、モード、オプションをコピーします。", + "mcpSpawnSessionScope": "<0>spawn_session_kandev と、自分で作成したタスクには影響しません。ワークフローで選択されたプロファイルが最優先です。それ以外の場合は明示的なプロファイルが優先されます。Workspace default はセッションとタスクのプロファイルを省略します。外部呼び出しには作成元セッションがないため、current_task には親タスクのフォールバックを使用します。", + "mcpTaskProfileCurrentTask": "セッションプロファイルを作成中", + "mcpTaskProfileCurrentTaskDescription": "ライブの task-mode 呼び出しでは、新しいタスクは検証済みの作成元セッションのプロファイルと、その有効なモデル、モード、動的オプションを使用します。セッション中に加えられた変更も含まれます。ワークフローの起動プロファイルがあれば、それが最優先です。なければ作成元セッションに従います。検証済みセッションのコンテキストがない場合は、元のタスクまたは親タスクのプロファイルにフォールバックし、その後にワークフローとワークスペースのデフォルトを使います。これにより、より高コストな構成が再利用される場合があります。", + "mcpTaskProfileWorkspaceDefault": "ワークスペースのデフォルトプロファイル", + "mcpTaskProfileWorkspaceDefaultDescription": "新しいタスクは作成元セッションと元のタスクまたは親タスクのプロファイルを使用しません。まずワークフローの起動プロファイルを使い、次に対象ワークスペースのデフォルトを使います。作成元セッションのモデル、モード、動的オプションはコピーしません。コスト方針を一貫させたい場合に選択してください。ワークフローとワークスペースのどちらにもプロファイルがない場合、作成は失敗します。", + "memory": "メモリ %", + "mergeThisSplitIntoTheSplit": "この分割を {{target}} を含む分割に統合します。", + "mergeWithTarget": "{{target}} と統合", + "messageSubmitKey": "メッセージ送信キー", + "metrics": "メトリクス", + "moveTabLeft": "タブを左へ移動", + "moveTabRight": "タブを右へ移動", + "moveTabToSplit": "タブを分割へ移動", + "moveThisSplitOf": "この分割を {{target}} の {{direction}} に移動します。", + "moveThisTabIntoANewSplit": "このタブを、現在の分割の隣にある新しい分割へ移動します。", + "moveThisTabIntoAnotherExisting": "このタブを別の既存の分割へ移動します。", + "moveThisTabIntoTheSplit": "このタブを {{target}} を含む分割へ移動します。", + "moveThisTabOnePositionLeft": "このタブを、現在の分割内で 1 つ左へ移動します。", + "moveThisTabOnePositionRight": "このタブを、現在の分割内で 1 つ右へ移動します。", + "mustBeAJsonObject": "JSON オブジェクトである必要があります", + "name": "名前", + "nameEGOpenaiProductionKey": "名前 (例: OpenAI Production Key)", + "nerdFonts": "Nerd Fonts", + "new": "新規", + "newBrowserTab": "新しいブラウザタブ", + "newCustomEditor": "新しいカスタムエディタ", + "newLayout": "新しいレイアウト", + "newSecret": "新しいシークレット", + "newTaskSessionsWillUseThis": "新しいタスクセッションではこのシェルが使用されます。既存のセッションは現在のシェルのままです。", + "noActiveSprites": "アクティブな sprite はありません。", + "noAppriseProviders": "まだ Apprise プロバイダーが設定されていません。", + "noCustomEditorsYet": "カスタムエディタはまだありません。", + "noCustomProfiles": "カスタムプロファイルはありません", + "noEditorFound": "エディタが見つかりません。", + "noMatchingSettings": "一致する設定なし", + "noProvidersConfiguredYet": "まだプロバイダ未設定。", + "noSecretsYetAddYourFirst": "まだシークレットなし。最初のシークレット追加して開始。", + "notConfigured": "未設定", + "notInstalled": "未インストール", + "notificationEventClarificationRequested": "エージェントに回答必要", + "notificationEventClarificationRequestedDescription": "エージェントが明確に質問したとき通知。", + "notificationEventOfficeInboxItem": "Office受信トレイ項目", + "notificationEventOfficeInboxItemDescription": "新しい受信トレイ項目で対応必要なとき通知。", + "notificationEventToggle": "{{name}} の {{event}}", + "notificationEventTurnFinished": "エージェントのターン完了", + "notificationEventTurnFinishedDescription": "各エージェントターン完了後に通知。", + "notificationEventUpdateAvailable": "Kandev 更新あり", + "notificationEventUpdateAvailableDescription": "新しい Kandev リリース利用可能なとき通知。", + "notificationEvents": "通知イベント", + "notificationEventsDescription": "各通知タイプを受け取るプロバイダ選択。", + "notificationPermissionCheckFailed": "Kandev で通知権限を確認できなかった。もう一度試してから、ブラウザか OS の通知設定確認。", + "notificationPermissionEnable": "有効にする", + "notificationPermissionEnabled": "有効", + "notificationPermissionRetry": "再試行", + "notificationSound": "通知音", + "notificationSoundDescription": "選択したエージェントターン、質問、Office イベント発生時にこの端末で音を再生。", + "notificationSoundSelect": "通知音を選択", + "notificationType": "通知タイプ", + "notifications": "通知", + "notificationsBlockedInBrowser": "通知がブラウザでブロックされてる。サイト設定で有効にしてから、更新をクリック。", + "notificationsBlockedInOs": "通知が OS のアプリ通知設定でブロックされてる。そこで有効にしてから、更新をクリック。", + "notificationsDescription": "プロバイダを設定して、どのイベントで通知するか選ぶ。", + "notificationsNotShowingHint": "通知が見えないなら、OS 設定確認してこのブラウザを許可。", + "notificationsUnsupported": "このブラウザはデスクトップ通知非対応。", + "notifyWhenThisEventOccurs": "このイベント発生時に通知。", + "openKandevTo": "Kandev を開く先", + "openLinksIn": "リンクを開く先", + "opensAVsCodeRemoteSsh": "VS Code Remote SSH URL を scheme で開く (例: {{example}})。", + "optionalScheme": "任意の scheme ({{schemes}})", + "optionalUsername": "任意のユーザー名", + "overrideSettingsSentToEachLanguage": "<2>{{method}} 経由で各言語サーバーに送る設定を上書き。JSON 形式。", + "password": "パスワード", + "pickTheDefaultShellForTask": "タスクセッション用のデフォルトシェル選択", + "pinTheAgentsLiveTodoChecklistAs": "エージェントのライブ ToDo チェックリストを右パネルの Todos タブとして自動で固定。これをオフでも、Todos タブはいつでも手動追加できる。", + "onlyPinWhenTodoListIsNotEmpty": "ToDo リストが空でない場合のみピン留めする", + "onlyPinWhenTodoListIsNotEmptyDescription": "自動ピン留めを、ToDo エントリがあるセッションにのみ制限します。手動で追加された Todos タブには影響しません。", + "pluginShortcuts": "プラグインのショートカット", + "preferredShell": "優先するシェル", + "preferences": "設定", + "pressAKeyCombo": "キーの組み合わせを押してください...", + "pressCmdCtrlEnterToSend": "メッセージを送信するには Cmd/Ctrl+Enter を押してください。改行するには Enter を押してください。", + "pressEnterToSendMessagesPress": "メッセージを送信するには Enter を押してください。改行するには Shift+Enter を押してください。", + "previewSound": "音をプレビュー", + "profileForTasksCreatedByAgents": "エージェントが作成したタスク用のプロファイル", + "programming": "プログラミング", + "profileStartModelNotAdvertisedOnHost": "ホストの probe は {{model}} を通知しませんでした。選択された executor が起動時にモデルを決定します。", + "modelVariationAdvisory": "ホストの catalog には {{model}} の候補バリエーションが 1 つあります。{{variation}}。保存されたモデルは起動まで変更されません。", + "promptAdd": "プロンプトを追加", + "promptEditorAriaLabel": "プロンプトエディタ", + "promptEditorBothHint": "利用可能なプレースホルダーには {{placeholder}}、保存済みプロンプトには {{mention}} を入力してください。", + "promptEditorPlaceholderHint": "利用可能なプレースホルダーを見るには {{placeholder}} を入力してください。", + "promptEditorPromptReferenceHint": "保存済みプロンプトを見るには {{mention}} を入力してください。", + "promptCreateFailed": "プロンプトを作成できませんでした", + "promptDelete": "プロンプトを削除", + "promptDeleteDescription": "<2>{{name}} は完全に削除されます。この操作は元に戻せません。", + "promptDeleteFailed": "プロンプトを削除できませんでした", + "promptDeleteThisPrompt": "このプロンプト", + "promptMentionHelp": "チャット入力欄で <1>{{token}} を使うと、プロンプトの内容を挿入できます。プロンプトは名前で一致し、その場で展開されます。", + "promptNamePlaceholder": "プロンプト名", + "promptSaveFailed": "プロンプトを保存できませんでした", + "promptsCustomHeading": "カスタムプロンプト", + "promptsEmpty": "まだプロンプトはありません。まずは最初のプロンプトを追加してください。", + "promptsInvalidReason": "プロンプト名と内容は必須です。", + "promptsLoading": "プロンプトを読み込み中...", + "promptsPageDescription": "チャット入力欄で再利用できるプロンプトのスニペットを作成します。", + "providerName": "プロバイダー名", + "pxRange": "px (8-24)", + "refreshNotificationPermission": "通知の許可を更新", + "refreshPermissionStatus": "許可ステータスを更新", + "remove": "削除", + "removePanel": "パネルを削除", + "removeThisTabFromTheSaved": "このタブを保存済みレイアウトから削除します。", + "removesTheHostMarkerAndProgress": "Host マーカーと進捗バーを削除し、メトリクスのアイコンと値は保持します。", + "reset": "リセット", + "resetBuiltInLayout": "組み込みレイアウトをリセット", + "resetClearShortcut": "リセット(ショートカットをクリア)", + "resetToDefault": "既定に戻す", + "resizeRepositionOrMergeTheSelected": "選択した分割をサイズ変更、再配置、または結合します。", + "resourceMetrics": "リソースメトリクス", + "richOutputChartMotion": "リッチ出力チャートの動き", + "restoreTheOriginalBuiltInLayout": "元の組み込みレイアウトを復元し、上書きを破棄します。", + "resumeTheMostRecentlyOpenedTask": "このデバイスのこのワークスペースで、最後に開いたタスクを起動時に再開します。Home では引き続き記憶された一覧を使用します。", + "retrySave": "保存を再試行", + "retryReset": "リセットを再試行", + "runningSprites": "実行中のスプライト", + "sameShortcutAs": "同じショートカット: {{shortcuts}}", + "saveAndLeave": "保存して終了", + "saveChanges": "変更を保存", + "saveChangesBeforeLeaving": "離れる前に変更を保存しますか?", + "saved": "保存しました", + "saving": "保存中...", + "savingChanges": "変更を保存中", + "searchEditors": "エディタを検索...", + "searchSettings": "設定を検索", + "secretValue": "シークレット値", + "secrets": "シークレット", + "security": "セキュリティ", + "selectADefaultEditor": "既定のエディタを選択", + "selectAShell": "シェルを選択", + "selectAModel": "モデルを選択...", + "sendTestNotification": "テスト通知を送信", + "sendTestNotificationFor": "{{name}} のテスト通知を送信", + "serverConfiguration": "サーバー構成", + "setTheFontSizeForThe": "ターミナルのフォントサイズを設定します。既定は 13px です。", + "settings": "設定", + "settingsSearchResults_one": "{{count}} 件の一致する設定", + "settingsSearchResults_other": "{{count}} 件の一致する設定", + "shellOptionsUnavailable": "シェルのオプションを利用できません", + "showAgentTodoListPanel": "エージェントの Todo リストパネルを表示", + "showAnchoredPromptBar": "固定プロンプトバーを表示", + "showCleanupDetailsAndSubtaskOptions": "アーカイブ開始前に、クリーンアップの詳細とサブタスクのオプションを表示します。", + "showHostMetricsInStatusBar": "ステータスバーにホストメトリクスを表示", + "showNewDividerInTranscripts": "トランスクリプトに New 区切り線を表示", + "showScrollToLastPrompt": "最後のプロンプトへスクロールを表示", + "showScrollToStart": "先頭へスクロールを表示", + "showStatusBar": "ステータスバーを表示", + "showStatusBarDescription": "Kandev の下部にステータス詳細を表示。スマホでは Status ドロワーに表示。これをオフでも接続警告は表示されたまま。", + "showTheControlThatJumpsTo": "トランスクリプト先頭へ飛ぶコントロールを表示。", + "showTheJumpControlAfterYour": "最新プロンプトがトランスクリプトより上へスクロールした後に、ジャンプコントロールを表示。", + "showThePerSessionButtonThat": "セッションごとのボタンを表示。これはトランスクリプトの自動スクロールを一時的にオン、オフ切り替え。非表示でも既定は変わらず。新規トランスクリプトは今も自動スクロール。", + "showTranscriptAutoScrollControl": "トランスクリプト自動スクロールを表示", + "showsKandevHostValuesOnlyCollection": "Kandev のホスト値のみ表示。クライアントが表示中に収集開始。", + "simplifiedMetrics": "簡易メトリクス", + "sleepInhibitionActive": "タスク開始中、実行中に有効。", + "sleepInhibitionAdminOnly": "このインストール全体設定を変えられるのは管理者のみ。", + "sleepInhibitionAvailable": "利用可。要求なし。", + "sleepInhibitionCaveat": "Container、Kubernetes、remote-executor、always-on デプロイでは通常これを無効のまま。画面を起こしたり、明示的なユーザーのスリープ操作を上書きしたりはしない。", + "sleepInhibitionDescription": "タスク開始中、実行中の間、Kandev バックエンドホストを利用可能に保つ。", + "sleepInhibitionInfoLabel": "ホストのスリープ防止の仕組み", + "sleepInhibitionInfoLinux": "Linux は D-Bus で systemd-logind に <0>{{method}} を送る。Kandev は作業中タスクがなくなるまで返されたファイルを開いたままにする。", + "sleepInhibitionInfoMacos": "macOS は <0>{{command}} を実行。<1>{{idleOption}} オプションでアイドル時のシステムスリープを防ぐ。<2>{{waitOption}} オプションでバックエンド終了時にヘルパーを停止する。", + "sleepInhibitionInfoRelease": "この要求で画面は起こさないし、明示的なユーザーのスリープ操作も上書きしない。", + "sleepInhibitionInfoTitle": "Kandev がホストのスリープを防ぐ仕組み", + "sleepInhibitionInfoTrigger": "バックエンドは、任意のタスクが開始中、実行中の間、1 件のスリープ防止要求を保持する。", + "sleepInhibitionInfoWindows": "Windows はシステムスリープフラグ付きで <0>{{api}} を呼ぶ。作業中タスクがなくなると Kandev は要求を解除する。", + "sleepInhibitionLoadFailed": "ホストのスリープ設定を読み込めなかった。", + "sleepInhibitionLoading": "ホストのスリープ設定を読み込み中…", + "sleepInhibitionRequestFailed": "ホストのスリープ要求に失敗。タスクは通常どおり続行。", + "sleepInhibitionRetry": "ホストのスリープ設定を再読み込み", + "sleepInhibitionSaveFailed": "ホストのスリープ設定を保存できなかった。", + "sleepInhibitionServiceUnavailable": "ホストのスリープサービスは利用不可。", + "sleepInhibitionStatusLabel": "ホストのスリープ状態", + "sleepInhibitionSwitchHint": "既定ではオフ。追加のバッテリーや電力を使う場合あり。影響するのはバックエンドホストのみ。", + "sleepInhibitionSwitchLabel": "アイドル時のシステムスリープを防ぐ", + "sleepInhibitionTitle": "タスク実行中のホストスリープを防ぐ", + "sleepInhibitionUnsupported": "このバックエンドプラットフォームでは利用不可。", + "soundPresetChime": "チャイム", + "soundPresetDing": "ディン", + "soundPresetPlim": "プリム", + "soundPresetPop": "ポップ", + "splitTab": "タブを分割", + "spriteHealthCold": "低温", + "spriteHealthFailed": "失敗", + "spriteHealthHealthy": "正常", + "spriteHealthRunning": "実行中", + "spriteHealthStarting": "起動中", + "spriteHealthStopped": "停止済み", + "spriteHealthStopping": "停止中", + "spriteHealthUnhealthy": "不健康", + "spriteHealthUnknown": "不明", + "spritesDevProvidesEphemeralCloudSandboxes": "Sprites.dev は、エージェントをリモートで実行するための一時的なクラウドサンドボックスを提供します。", + "startOnYourSavedKanbanPipelineOrList": "このデバイスで最後に使用したカンバン、パイプライン、リスト、またはスレッドのビューを開きます。", + "openThreadsOnStartupAndHome": "起動時、および選択したワークスペースでホームに移動するたびに、最後の一覧ビューに関係なくスレッドを開きます。", + "startupPage": "起動画面", + "statusBar": "ステータスバー", + "submitShortcut": "送信ショートカット", + "supportedEditors": "対応エディタ", + "supportsPlaceholders": "プレースホルダーに対応しています: {{placeholders}}", + "systemDefault": "システムの既定値", + "systemLoad1Min": "システム負荷(1分)", + "taskActions": "タスク操作", + "taskBehavior": "タスクの動作", + "taskOverview": "タスクの概要", + "startModelUnavailable": "もう利用できません。別のモデルを選択してください", + "startModelAria": "プロフィールの起動モデル設定", + "terminal": "ターミナル", + "terminalFont": "ターミナルのフォント", + "terminalAndEditors": "ターミナルとエディタ", + "terminalFontSize": "ターミナルのフォントサイズ", + "terminalFontSizeMustBeA": "ターミナルのフォントサイズは 8 から 24 の間の数値である必要があります。", + "terminalLinks": "ターミナルのリンク", + "testConnection": "接続をテスト", + "testNotificationBody": "これが読める場合、ブラウザ通知は正常に動作しています。", + "testNotificationTitle": "テスト通知", + "theBuiltInDefaultLayoutWill": "内蔵のデフォルトレイアウトが既定になります。", + "thisAppliesWhenKandevStarts": "この選択はデバイス間であなたのユーザーに引き継がれます。明示的なリンクはリンク先を保持し、Office ワークスペースは Office ホームを保持します。", + "thisLayoutIsUsedAsThe": "このレイアウトは、新しいタスクの開始レイアウトとして使用されます。", + "thisPageHasUnsavedChangesSave": "このページには保存されていない変更があります。保存するか、破棄するか、編集を続けてください。", + "thisProfileWillBeRemovedWhen": "保存すると、このプロフィールは削除されます。", + "thisSecret": "このシークレット", + "thisWillPermanentlyRemoveSecret": "<2>{{name}} を完全に削除します。この操作は元に戻せません。", + "todoListPanel": "ToDo リストパネル", + "tokens": "トークン", + "transcriptNavigation": "トランスクリプトのナビゲーション", + "tree": "ツリー", + "unableToConnect": "接続できない。", + "unavailable": "利用不可", + "unbound": "未バインド", + "unreadMessages": "未読メッセージ", + "untitledLayout": "無題のレイアウト", + "updateChannel": "更新チャンネル", + "updateChannelDescription": "この managed service がどのリリースを確認して適用するか選ぶ。", + "updateChannelLatestNightly": "最新 nightly", + "updateChannelLatestRelease": "最新リリース", + "updateChannelNightly": "nightly", + "updateChannelNightlyDescription": "main から npm 経由で prerelease build を install-wide で入れる。適用時は表示どおりの正確な version を使う。", + "updateChannelRequiresManagedService": "Nightly 更新には、Kandev 管理の npm または npx の user service が必要。", + "updateChannelRequiresNpmInstallation": "Nightly 更新は npm または npx の install でのみ使える。", + "updateChannelRequiresServiceMetadata": "Nightly 更新には有効な Kandev service metadata が必要。", + "updateChannelRequiresUserService": "Nightly 更新は user service でのみ使える。", + "updateChannelSaveFailed": "更新チャンネルを保存できない。もう一度試す。", + "updateChannelSavingNotice": "更新を確認または適用する前に、チャンネル変更を保存中。", + "updateChannelSettingsUnavailable": "更新チャンネル設定は使えない。", + "updateChannelStable": "安定版", + "updateChannelStableDescription": "署名付き GitHub リリース。ほとんどのユーザー向けに推奨。", + "updateChannelUnavailable": "Nightly 更新チャンネルは、このインストールで利用不可。", + "updateChannelUnsavedNotice": "更新の確認か適用前に、チャンネル変更を保存。", + "updateChannelUnsupportedServiceManager": "この service manager は nightly 更新をサポートしない。", + "uptime": "稼働時間", + "useAgentForNewTaskTitles": "新しいタスクタイトルにエージェントを使う", + "useAsDefault": "デフォルトにする", + "useBuiltInDefault": "組み込み Default を使う", + "useThisLayoutAsTheStarting": "このレイアウトを新規タスクの開始レイアウトとして使う。", + "useThisSettingWhenAnAgent": "エージェントが Kandev MCP ツールを呼び出してタスクを作成する時に、この設定を使う。呼び出しで profile を選ばない場合、Kandev が新しいタスクに agent profile を割り当てる。その profile が agent、model、setup を制御する。", + "usefulWhenKandevIsSelfHosted": "Kandev をリモートサーバーで self-host し、グローバルステータスバーか phone Status drawer から機械リソースの軽い表示を見たい時に便利。", + "utilityActionsTitle": "アクション", + "utilityActionsDescription": "特定の Kandev UI action の profile を上書きする。これらの action は、task session 内で動く agent を設定しない。", + "utilityAddCustomAgent": "追加", + "utilityAgentDescriptionLabel": "説明", + "utilityAgentDescriptionPlaceholder": "この agent が何をするかの短い説明", + "utilityAgentDialogCreate": "Agent を作成", + "utilityAgentDialogCreateTitle": "Utility Agent を作成", + "utilityAgentDialogEditTitle": "Utility Agent を編集", + "utilityAgentDialogSave": "変更を保存", + "utilityAgentNamePlaceholder": "例: commit-message", + "utilityAgentPromptHint": "利用可能な変数を見るには <1>{{sigil}} を入力。autocomplete 付き", + "utilityAgentPromptTemplate": "プロンプトテンプレート", + "utilityAgents": "ユーティリティエージェント", + "utilityAgentsPageDescription": "one-shot helper は、commit や PR テキスト生成、prompt 強化などの Kandev UI action を実行する。task session 内で動く agent とは別。", + "utilityCustomAgentsDescription": "custom prompt 付きの独自 utility agent を作成。", + "utilityCustomAgentsEmpty": "custom utility agent なし。", + "utilityCustomAgentsTitle": "カスタムユーティリティエージェント", + "utilityDefaultModelDescription": "組み込み utility action で使う profile を選択。profile が model、permissions、起動設定を制御する。", + "utilityDefaultModelTitle": "デフォルトのユーティリティエージェントモデル", + "utilityAgentProfile": "エージェントプロフィール", + "utilitySelectProfile": "profile を選択...", + "utilitySearchProfiles": "agent profile を検索...", + "utilityNoProfilesFound": "一致する agent profile が見つからない。", + "utilityNoDefaultProfile": "default profile なし", + "utilityUnavailableProfile": "利用不可: {{name}}", + "utilityProfileNeedsRepair": "この profile は利用不可。有効な inference profile を選択。", + "viewAvailableSettings": "利用可能な設定を見る", + "visualEditorUnavailable": "Visual editor 利用不可", + "vsCodeRemoteSsh": "VS Code Remote SSH", + "whenEnabledInstallYourProjectS": "有効時、プロジェクトの依存関係をインストールする。例: <2>{{command}} をリポジトリのセットアップスクリプト経由で実行。型エラーの見落とし防ぐ。", + "externalMcpToolListTaskSessions": "タスクの全エージェントセッションを新しい順で一覧。別ツールがID指定で処理できる。", + "shortcutBottomTerminal": "下部ターミナル切替", + "shortcutCommandPanel": "コマンドパネル", + "shortcutCommandPanelAlt": "コマンドパネル(Alt)", + "shortcutFileSearch": "ファイル検索", + "shortcutFocusChatInput": "チャット入力にフォーカス", + "shortcutFocusCliChatInput": "CLIチャット入力にフォーカス", + "shortcutNewTask": "新規タスク", + "shortcutOpenTaskPullRequest": "タスク Pull Request を開く", + "shortcutOpenWorkspacePicker": "ワークスペースピッカーを開く", + "shortcutQuickChat": "クイックチャット", + "shortcutRecentTaskSwitcher": "最近のタスク切替", + "shortcutRecentTaskSwitcherBackward": "最近のタスク切替(逆)", + "shortcutReverseChatSearch": "チャット逆検索", + "shortcutTaskContentSearch": "タスク内容を検索", + "shortcutTogglePlanMode": "計画モード切替", + "shortcutToggleSidebar": "サイドバー切替", + "copyMove": "コピー/移動", + "copyMoveSecretNamed": "{{name}} をコピーまたは移動", + "copyMoveDialogHint": "シークレットを別スコープへコピーまたは移動。値はサーバー側で転送され、表示されない。", + "copyMoveMode": "コピーまたは移動", + "copySecretAction": "コピー", + "moveSecretAction": "移動", + "copyModeDescription": "宛先にコピー作成。元のシークレットは残る。", + "moveModeWarning": "元のシークレットは {{origin}} から削除される。", + "destination": "宛先", + "secretTargetName": "名前", + "secretNameConflictInDestination": "{{name}} というシークレットがこの宛先に既にある。", + "destinationsLoading": "宛先を読み込み中", + "destinationsLoadFailed": "宛先を読み込めなかった。", + "retryDestinations": "再試行", + "noValidDestinations": "有効な宛先なし。", + "transferFailed": "シークレットをコピーまたは移動できなかった。", + "destinationGlobal": "グローバル", + "secretNameTooLong": "名前は 100 バイト以下。", + "keyValueAddItem": "項目を追加", + "keyValueKeyPlaceholder": "キー", + "keyValueValuePlaceholder": "値", + "externalMcpToolListPendingAgentPermissions": "タスクの実行中コマンドとツール権限リクエストを一覧。安全な操作詳細とエージェントの正確な選択も含む。", + "externalMcpToolResolveAgentPermission": "一覧ツールで返された正確なオプションを選んで、保留中の権限リクエストを1件解決します。", + "navUnits": "組織単位", + "unitsTitle": "組織単位", + "unitsDescription": "単位にはチーム、ワークスペース、ユーザーが含まれます。単位のメンバーになると、その下にあるすべてのワークスペースにアクセスでき、後から作成されたものも含まれます。", + "unitsEmpty": "まだ単位はありません。", + "unitRootBadge": "組織全体", + "unitPersonalBadge": "個人", + "unitAddChild": "単位を追加", + "unitMembers": "メンバー", + "unitDelete": "単位を削除", + "unitCreateTitle": "{{parent}} に新しい単位", + "unitCreateDescription": "部門もチームも単位です。違いは、所属する階層だけです。", + "unitNamePlaceholder": "プラットフォーム", + "unitCreate": "作成", + "unitMembersTitle": "{{unit}} のメンバー", + "unitMembersDescription": "ここにいる全員は、あなたが付与したロールで、この単位配下のすべてのワークスペースにアクセスできます。", + "unitNoMembers": "この単位にはまだ誰もいません。", + "unitAddMember": "追加", + "unitRemoveMember": "メンバーを削除", + "unitPickPerson": "人を選択", + "unitActionFailed": "うまくいきませんでした。", + "sidebarHoverTitle": "サイドバー", + "sidebarHoverEnabled": "ホバーでサイドバーを表示", + "sidebarHoverDelay": "ホバー遅延 (ms)", + "sidebarHoverHelp": "マウスまたはトラックパッドを使って、折りたたまれたサイドバーを表示します。遅延は 0 から 5000 ms の間で設定できます。0 にするとすぐに表示されます。", + "sidebarHoverDelayError": "0 から 5000 の整数を入力してください。", + "discoveryAliasesSidebarHover": "サイドバー ホバー 表示 遅延 待機 マウス トラックパッド", + "autoFocusNewTasks": "新しいタスクを自動でフォーカス", + "autoFocusNewTasksHelp": "新しく作成されたタスクを自動で開きます。現在の画面にとどまりたい場合はオフにしてください。タスクとエージェントは引き続き要求どおりに開始されます。", + "chatAnimations": "チャットのアニメーション", + "chatAnimationsDescription": "このデバイスで、受信テキスト、新しいチャット項目、スクロールをアニメーション表示します。動きを抑える設定を尊重します。", + "discoveryAliasesChatMotion": "チャット アニメーション スムーズスクロール テキスト モーション", + "sidebar": "サイドバー", + "sidebarDescription": "このワークスペースのナビゲーションをカスタマイズします。変更はアカウントに適用され、すべてのクライアントで引き継がれます。", + "sidebarLayout": "サイドバーのレイアウト", + "sectionName": "セクション名", + "sidebarSectionNameError": "セクション名は 1 文字以上 60 文字以内で入力してください。", + "sidebarDuplicateShortcutError": "1 つのセクションに同じショートカットは 1 回しか表示できません。", + "sidebarLayoutLimitError": "サイドバーのレイアウトが上限に達しました。", + "sidebarLayoutInvalidError": "保存する前にサイドバーのレイアウトを確認してください。", + "sidebarToggleVisibility": "表示を切り替え", + "dragToReorder": "ドラッグして並べ替え", + "moveUp": "上へ移動", + "moveDown": "下へ移動", + "moveToSection": "セクションへ移動", + "moveShortcutToSection": "{{label}} をセクションへ移動", + "addShortcutSection": "ショートカットセクションを追加", + "sidebarRestoreDefaults": "既定に戻す", + "sidebarConflict": "このレイアウトは別の場所で変更された。下書きは残っている。", + "sidebarLoadLatest": "最新を読み込む", + "sidebarSaveError": "サイドバーレイアウトを保存できなかった。もう一度試す。", + "sidebarUnsupportedVersion": "このレイアウトは新しいバージョンを使っている。アプリが対応するまで編集は一時停止。", + "sidebarNoWorkspace": "サイドバーをカスタマイズするワークスペースを選択。", + "sidebarPreview": "下書きプレビュー", + "addShortcut": "ショートカットを追加", + "editSection": "セクションを編集", + "sidebarShortcutLoadError": "ショートカットを読み込めなかった。もう一度試す。", + "noMatchingShortcuts": "一致するショートカットなし", + "searchShortcuts": "ショートカットを検索", + "sidebarPreviewEmpty": "表示できるナビゲーション項目なし" +} diff --git a/apps/web/src/locales/ja/sidebar.json b/apps/web/src/locales/ja/sidebar.json new file mode 100644 index 0000000000..4921693bcd --- /dev/null +++ b/apps/web/src/locales/ja/sidebar.json @@ -0,0 +1,125 @@ +{ + "taskViews": "タスクビュー", + "archivedLoadFailed": "アーカイブ済みのタスクを読み込めませんでした", + "collapseAllBranches": "すべて折りたたむ", + "orgChart": "組織図", + "retry": "再試行", + "activeWorkspaceBadge": "アクティブ", + "activity": "アクティビティ", + "addAgent": "エージェントを追加", + "addProject": "プロジェクトを追加", + "addWorkspace": "ワークスペースを追加", + "agentTopology": "エージェントのトポロジー", + "apiTokens": "APIトークン", + "applicationStatus": "アプリケーションの状態", + "applicationStatusItems": "アプリケーションの状態項目", + "bulkArchiveFailed_one": "{{count}}件のタスクをアーカイブできませんでした", + "bulkArchiveFailed_other": "{{count}}件のタスクをアーカイブできませんでした", + "bulkDeleteFailed_one": "{{count}}件のタスクを削除できませんでした", + "bulkDeleteFailed_other": "{{count}}件のタスクを削除できませんでした", + "closeSettings": "設定を閉じる", + "collapseGroup": "{{label}}を折りたたむ", + "collapseSidebar": "サイドバーを折りたたむ", + "connected": "接続済み", + "connectedToKandev": "Kandevに接続済み", + "connecting": "接続中", + "connectingToKandev": "Kandevに接続中", + "connection": "接続", + "connectionError": "接続エラー", + "connectionErrorDetail": "接続エラー: {{error}}", + "connectionLost": "接続が失われました", + "connectionLostDescription": "接続が10秒以上失われています。ライブ更新が古くなっている可能性があります。", + "connectionUnavailable": "接続できません", + "connectionUnstable": "接続が不安定です", + "connectionUnstableDescription": "接続が不安定です。Kandevに再接続しています。", + "costs": "コスト", + "disabledBadge": "無効", + "enabledBadge": "有効", + "expandGroup": "{{label}}を展開", + "expandSidebar": "サイドバーを展開", + "filtersAndSort": "フィルターと並び替え", + "groupAll": "すべて", + "groupMultiRepo": "マルチリポ", + "groupUnassigned": "未割り当て", + "home": "ホーム", + "improveKandev": "Kandev を改善", + "inbox": "受信箱", + "kanban": "カンバン", + "kandevHome": "Kandev ホーム", + "logOut": "ログアウト", + "maxViews_one": "最大 {{count}}", + "maxViews_other": "最大 {{count}}", + "morePluginItems": "プラグイン項目をもっと表示", + "needsYouInbox": "対応必要", + "nestUnder": "{{title}} の下に入れる", + "newKanbanWorkspace": "新しいカンバンワークスペース", + "newOfficeWorkspace": "新しいオフィスワークスペース", + "newTask": "新しいタスク", + "newView": "新しいビュー", + "newViewUnavailable": "新しいビュー不可。{{reason}}", + "noAgentsYet": "まだエージェントなし", + "noProjectsYet": "まだプロジェクトなし", + "noTasksYet": "まだタスクなし。", + "noWorkspaces": "ワークスペースなし", + "office": "オフィス", + "offline": "オフライン", + "openStatus": "ステータスを開く", + "pausedBadge": "一時停止", + "pollModeFastLabel": "フォーカス中、2秒ごとにポーリング", + "pollModePausedLabel": "購読者なし", + "pollModeSlowLabel": "購読中、30秒ごとにポーリング", + "preferences": "設定", + "profileAndPassword": "プロフィールとパスワード", + "projects": "プロジェクト", + "queuedPromptCount_one": "保留中プロンプト {{count}} 件", + "queuedPromptCount_other": "保留中プロンプト {{count}} 件", + "wipQueuePosition": "{{step}} キューの {{total}} 件中 {{position}} 番目", + "quickChat": "クイックチャット", + "quickChatUnseen": "クイックチャット、新しい返信", + "quickChatRunning": "クイックチャット、エージェント作業中", + "quickTerminal": "クイックターミナル", + "quickChatTerminals": "ターミナル", + "quickChatNewAgent": "新規エージェント", + "quickChatNewTerminal": "新規ターミナル", + "quickChatClose": "クイックチャットを閉じる", + "quickChatTerminalTab_one": "ターミナル {{count}}", + "quickChatTerminalTab_other": "ターミナル {{count}}", + "quickChatCloseTerminal_one": "ターミナル {{count}} を閉じる", + "quickChatCloseTerminal_other": "ターミナル {{count}} を閉じる", + "quickChatTerminalError": "ターミナルエラー: {{error}}", + "quickChatTerminalUnknownError": "ターミナルを起動できなかった。", + "quickChatTerminalConnecting": "ターミナルに接続中…", + "quickChatTerminalExited": "ターミナル終了。", + "quickChatTerminalExitedWithCode": "ターミナルはコード {{code}} で終了した。", + "quickChatAdd": "タブを追加または切り替え", + "reconnecting": "再接続中", + "reconnectingToKandev": "Kandev に再接続中", + "repositories": "リポジトリ", + "resizeSidebar": "サイドバーのサイズ変更", + "routines": "ルーチン", + "routing": "ルーティング", + "runErrors_one": "{{count}} 件のエラー", + "runErrors_other": "{{count}} 件のエラー", + "saveDiscardFirst": "先に保存か破棄", + "skills": "スキル", + "stats": "統計", + "switchWorkspace": "ワークスペースを切り替え", + "tasks": "タスク", + "toggleTheme": "テーマ切り替え", + "unsavedFilterChanges": "未保存のフィルター変更", + "viewAll": "すべて", + "viewAllTasks": "すべてのタスク", + "viewLabel": "表示: {{name}}", + "whatsNew": "新着情報", + "work": "作業", + "workspaceFallback": "ワークスペース", + "taskPreferences": "サイドバーのタスク設定", + "views": "サイドバーの表示", + "failedToLoadArchivedTasks": "アーカイブ済みタスクの読み込みに失敗した", + "failedToSyncSidebarTaskPrefs": "サイドバーのタスク設定を同期できなかった", + "failedToSyncSidebarViews": "サイドバー表示を同期できなかった", + "newViewNumbered": "新しい表示 {{suffix}}", + "untitledView": "名前なしビュー", + "workspaceContextRefreshFailed": "タスクを更新できなかった。", + "workspaceContextAccessDenied": "このワークスペースへのアクセス権がなくなった。" +} diff --git a/apps/web/src/locales/ja/startup.json b/apps/web/src/locales/ja/startup.json new file mode 100644 index 0000000000..b160d5d501 --- /dev/null +++ b/apps/web/src/locales/ja/startup.json @@ -0,0 +1,40 @@ +{ + "duration.minutes_one": "{{count}} 分", + "duration.minutes_other": "{{count}} 分", + "duration.seconds_one": "{{count}} 秒", + "duration.seconds_other": "{{count}} 秒", + "page.countedProgress": "{{done}} / {{total}} {{unit}}", + "page.countingProgress": "{{done}} {{unit}}", + "page.elapsed": "{{duration}} 経過", + "page.eta": "残り約 {{duration}}", + "page.lastKnown": "最後に確認した状態", + "page.progressUnavailable": "この手順の進捗は測定できない。", + "page.stalled": "{{duration}} 停滞中", + "page.title": "Kandev を起動中", + "page.waiting": "Kandev を起動中で、まだ到達できない。", + "phase.applying_migrations": "マイグレーション適用中", + "phase.backing_up_database": "データベースをバックアップ中", + "phase.initializing_services": "サービスを初期化中", + "phase.opening_database": "データベースを開いている", + "phase.ready": "準備完了", + "phase.recovering_sessions": "セッションを復元中", + "step.database_backup": "データベースのバックアップ", + "step.message_timestamps": "メッセージのタイムスタンプ", + "step.prompt_seq": "プロンプトのシーケンス番号", + "step.session_recovery": "セッションの復元", + "step.stores_repositories": "リポジトリストア", + "step.stores_services": "サービスストア", + "step.subagent_context": "サブエージェントのコンテキスト", + "unit.bytes_one": "バイト", + "unit.bytes_other": "バイト", + "unit.messages_one": "メッセージ", + "unit.messages_other": "メッセージ", + "unit.rows_one": "行", + "unit.rows_other": "行", + "unit.sessions_one": "セッション", + "unit.sessions_other": "セッション", + "unit.stores_one": "ストア", + "unit.stores_other": "ストア", + "unit.turns_one": "ターン", + "unit.turns_other": "ターン" +} diff --git a/apps/web/src/locales/ja/stats.json b/apps/web/src/locales/ja/stats.json new file mode 100644 index 0000000000..8c3e9d85ef --- /dev/null +++ b/apps/web/src/locales/ja/stats.json @@ -0,0 +1,107 @@ +{ + "activity": "アクティビティ", + "activityRange": "アクティビティ ({{range}})", + "averages": "平均", + "avgPerTask": "タスクごとの平均 {{duration}}", + "bestMonth": "最高の月", + "bestWeekday": "最高の曜日", + "bestYear": "最高の年", + "bucket": "バケット", + "bucketDay": "日", + "bucketMonth": "月", + "bucketWeek": "週", + "completedCount_one": "{{count}}件完了", + "completedCount_other": "{{count}}件完了", + "completedTasksOverTime": "完了タスクの推移", + "completion": "完了", + "completionRate": "完了率", + "copied": "コピー済み", + "copyStats": "統計をコピー", + "durationSpan": "期間 {{duration}}", + "errorLoadingStats": "統計の読み込みエラー: {{error}}", + "filesChangedCount_one": "{{count}}件のファイル変更", + "filesChangedCount_other": "{{count}}件のファイル変更", + "gitActivity": "Gitアクティビティ", + "inProgressCount_one": "{{count}}件進行中", + "inProgressCount_other": "{{count}}件進行中", + "less": "少ない", + "longestTasks": "最長タスク", + "meanDurationOfCompletedTurnsExcluding": "完了ターンの平均時間, 1秒未満, 1時間以上, メッセージなしのターン除外", + "meanMessageCountPerTurnSame": "ターンごとの平均メッセージ数, ターン時間と同じ除外", + "messagesPerTask": "タスクごとのメッセージ数", + "messagesPerTurn": "ターンごとのメッセージ数", + "more": "多い", + "mostCommits": "最多コミット", + "mostProductive": "最も生産的", + "mostTasks": "最多タスク", + "mostTime": "最長時間", + "noCompletedTaskDataYet": "完了タスクデータなし。", + "noCompletedTasksYet": "完了タスクなし。", + "noDataYet": "データなし。", + "noGitActivityYet": "まだ git 活動なし。", + "noModelUsageDataYet": "まだモデル使用データなし。", + "noRepositoryStatsYet": "まだリポジトリ統計なし。", + "overview": "概要", + "quickestTasks": "最速タスク", + "rangeAllTime": "全期間", + "rangeLastMonth": "先月", + "rangeLastWeek": "先週", + "rankedByActiveDuration": "アクティブ時間順", + "repoLeaders": "リポジトリ上位", + "repoMessagesCount_one": "{{count}} メッセージ", + "repoMessagesCount_other": "{{count}} メッセージ", + "repoSessionsCount_one": "{{count}} セッション", + "repoSessionsCount_other": "{{count}} セッション", + "repoTasksCount_one": "{{count}} タスク", + "repoTasksCount_other": "{{count}} タスク", + "repoTurnsCount_one": "{{count}} ターン", + "repoTurnsCount_other": "{{count}} ターン", + "repositoryActivity": "リポジトリ活動", + "selectAWorkspaceToViewStatistics": "統計見るワークスペース選択。", + "sessions": "セッション", + "signal": "シグナル", + "statistics": "統計", + "tasks": "タスク", + "telemetry": "テレメトリ", + "timeSpent": "使用時間", + "toolCalls": "ツール呼び出し", + "toolShare": "ツール比率", + "topByMessages": "メッセージ順上位", + "topByTurns": "ターン順上位", + "topModels": "上位モデル", + "topRepositories": "上位リポジトリ", + "totalMessages": "合計メッセージ", + "totalTurns": "合計ターン", + "turnDuration": "ターン時間", + "turnsMessagesCount": "{{turns}} ターン、{{messages}} メッセージ", + "turnsMessagesMiddot": "{{turns}} ターン · {{messages}} メッセージ", + "turnsMessagesPerSession": "1セッションあたり {{turns}} ターン · {{messages}} メッセージ", + "turnsPerTask": "タスクあたりターン", + "userMsgs": "ユーザーメッセージ", + "userShare": "ユーザー共有", + "workload": "作業負荷", + "failedToLoadSection": "セクションの読み込み失敗", + "failedToLoadStats": "統計の読み込み失敗", + "statsAccessDenied": "この統計にアクセス権なし。", + "statsTemporarilyUnavailable": "統計は一時的に利用不可。再試行して。", + "retry": "再試行", + "retrying": "再試行中…", + "loadingStats": "統計を読み込み中…", + "noGitActivity": "git活動なし", + "subtitleReady": "{{tasks}} · {{sessions}} · {{duration}}", + "subtitleSessionCount_one": "{{count}}セッション", + "subtitleSessionCount_other": "{{count}}セッション", + "subtitleTaskCount_one": "{{count}}タスク", + "subtitleTaskCount_other": "{{count}}タスク", + "summaryCompletedInRange": "- 完了済み ({{range}}): {{completed}}", + "summaryGit": "- Git:{{git}}", + "summaryGitActivity_one": "{{count}}コミット, +{{insertions}}/-{{deletions}}", + "summaryGitActivity_other": "{{count}}コミット, +{{insertions}}/-{{deletions}}", + "summaryHeading": "*Kandev 統計 - {{range}}*", + "summaryRepos_one": "- リポジトリ: {{count}}件追跡中 · 最高リポジトリ: {{topRepo}}", + "summaryRepos_other": "- リポジトリ: {{count}}件追跡中 · 最高リポジトリ: {{topRepo}}", + "summaryTasks": "- タスク: 合計{{total}}件 (完了{{done}}件, 進行中{{inProgress}}件) · 完了率{{completion}}", + "summaryTime": "- 時間: 合計{{total}} · 平均{{average}}/タスク", + "summaryTopRepo_one": "{{repository}} ({{count}}タスク)", + "summaryTopRepo_other": "{{repository}} ({{count}}タスク)" +} diff --git a/apps/web/src/locales/ja/system.json b/apps/web/src/locales/ja/system.json new file mode 100644 index 0000000000..2d5936ae21 --- /dev/null +++ b/apps/web/src/locales/ja/system.json @@ -0,0 +1,751 @@ +{ + "aboutArch": "アーキテクチャ", + "aboutBuildTime": "ビルド時刻", + "aboutCommit": "コミット", + "aboutDocumentation": "ドキュメント", + "aboutGoVersion": "Go バージョン", + "aboutLoading": "読み込み中...", + "aboutOs": "OS", + "aboutPageDescription": "バージョン、ビルドメタデータ、リンク。", + "aboutReportIssue": "問題を報告", + "aboutTitle": "Kandev について", + "aboutVersion": "バージョン", + "actionDone": "完了", + "actionFailed": "失敗しました", + "actionRunning": "実行中...", + "backupsAdminOnly": "バックアップの作成、ダウンロード、復元、削除は管理者のみが行えます。", + "backupsColumnActions": "操作", + "backupsColumnCreated": "作成日時", + "backupsColumnKind": "種類", + "backupsColumnName": "名前", + "backupsColumnSize": "サイズ", + "backupsCreate": "スナップショットを作成", + "backupsCreateFailed": "スナップショットの作成に失敗しました", + "backupsCreateTimeout": "スナップショットの作成が {{seconds}} 秒以内に完了しませんでした", + "backupsCreating": "作成中...", + "backupsDeleteFailed": "削除に失敗しました", + "backupsDeleteLabel": "{{name}} を削除", + "backupsDownloadLabel": "{{name}} をダウンロード", + "backupsEmpty": "まだバックアップはありません。バージョンアップ時に自動作成されたスナップショット、または上のボタンで手動作成したスナップショットがここに表示されます。", + "backupsHelp": "バックアップは、Kandev のデータベースの完全なコピーです (タスク、セッション、設定)。Kandev は各バージョンアップの前に自動で 1 つ作成するため、何か問題が起きても元に戻せます。工場出荷時リセットのような危険な操作の前に、手動で作成することもできます。", + "backupsKindAuto": "自動", + "backupsKindManual": "手動", + "backupsLoading": "バックアップを読み込み中...", + "backupsPageDescription": "{{path}} に保存された {{command}} のスナップショット。", + "backupsRestoreLabel": "{{name}} を復元", + "backupsRetention_one": "最新のバックアップ 1 件のみがディスクに保持されます。", + "backupsRetention_other": "最新のバックアップ {{count}} 件のみがディスクに保持されます。", + "backupsTitle": "バックアップ", + "changelogEmpty": "利用可能な変更履歴はありません。", + "changelogViewOnGitHub": "GitHub で表示", + "close": "閉じる", + "createUserDescription": "パスワードを設定して直接アカウントを作成します。ユーザーに自分でパスワードを選んでもらう場合は、招待リンクを優先してください。", + "createUserDisplayName": "表示名", + "createUserEmail": "メールアドレス", + "createUserFailed": "ユーザーを作成できませんでした。", + "createUserPassword": "パスワード", + "createUserRole": "ロール", + "createUserSubmit": "ユーザーを作成", + "createUserSubmitting": "作成中...", + "createUserTitle": "ユーザーを追加", + "databaseDriver": "ドライバ", + "databaseFactoryReset": "初期化", + "databaseFactoryResetHelp": "タスク、セッション、設定、リポジトリ、ワークツリーを含む、Kandev のすべてのデータを消去します。元に戻すことはできません。まずバックアップが作成されますが、復元するにはリセット後にバックアップページから操作する必要があります。最初からやり直したい場合にのみ使用してください。", + "databaseLastBackup": "最後のバックアップ", + "databaseLoading": "データベースの統計情報を読み込み中...", + "databaseMaintenanceUnavailable": "{{driver}} では SQLite のメンテナンス操作を利用できません。", + "databaseNever": "なし", + "databaseOptimize": "最適化", + "databaseOptimizeHelp": "よく使われるクエリを高速に保つため、内部インデックスを更新するようデータベースに依頼します。大量のデータを削除した後や、アプリの動作が重いと感じるときに実行してください。高速で安全です。データは変更されません。", + "databasePageDescription": "データベースのドライバ、サイズ、利用可能なメンテナンス操作。", + "dataStoragePageDescription": "データベースの統計情報、バックアップ、サーバーログ。", + "databasePath": "パス", + "databaseRunOptimize": "最適化を実行", + "databaseRunVacuum": "VACUUMを実行", + "databaseSchemaVersion": "スキーマバージョン", + "databaseSize": "サイズ", + "databaseSizeLong": "データベースサイズ", + "databaseTitle": "データベース", + "databaseVacuum": "VACUUM", + "databaseVacuumHelp": "データベースファイル内の未使用領域を再利用します。タスクやセッションを削除すると、ファイルは時間とともに大きくなることがあります。VACUUM により圧縮されます。いつ実行しても安全で、データは変更されません。データベースサイズが大きいように見える場合は、時々実行してください。", + "databaseWal": "WAL", + "databaseWalHelp": "Write-Ahead Log です。SQLite は新しい変更をまずこの補助ファイルに書き込み、時間をかけてメインのデータベースに統合します。WAL サイズが 0 でないのは正常です。負荷が高いと一時的に増え、チェックポイント時に元に戻ります。VACUUM を実行するとリセットされます。", + "databaseWhatIs": "{{label}} とは?", + "desktopUpdateFailed": "デスクトップの更新に失敗しました", + "diskCalculating": "計算中...", + "diskColumnPath": "パス", + "diskColumnSize": "サイズ", + "diskComputedAt": "計算日時 {{at}}", + "diskOpen": "開く", + "diskRefresh": "更新", + "diskRefreshed": "更新しました", + "diskRefreshHelp": "データフォルダ内のすべてのディレクトリを走査し、ファイルサイズを合計します。結果は数時間キャッシュされます。今すぐクリックすると最新の数値を計算します。大きなワークスペースでは数秒かかることがあります。", + "diskRefreshing": "更新中...", + "diskRowBackups": "バックアップ", + "diskRowDataDir": "データディレクトリ", + "diskRowQuickChat": "クイックチャット", + "diskRowRepos": "リポジトリ", + "diskRowSessions": "セッション", + "diskRowTasks": "タスク", + "diskRowWorktrees": "ワークツリー", + "diskTotal": "合計", + "diskUnmeasuredDirs": "一部のディレクトリは測定できませんでした:", + "diskUsageTitle": "ディスク使用量", + "dismiss": "閉じる", + "factoryResetCompleteBody": "Kandev のデータは消去されました。アプリを終了して再起動し、最初からやり直してください。現在動作中のバックエンドは、空になったデータベースへの接続を保持しており、再起動するまでキャッシュを再構築しません。必要であれば、リセット前のスナップショットはバックアップページで確認できます。", + "factoryResetCompleteTitle": "初期化が完了しました", + "factoryResetFailed": "リセットに失敗しました", + "factoryResetPlaceholder": "{{token}} と入力して確認", + "factoryResetRequestFailed": "リセット要求に失敗しました", + "factoryResetSnapshot": "消去の前に <1>{{path}} にスナップショットが自動作成されるため、気が変わった場合はバックアップページから復元できます。", + "factoryResetTitle": "初期化", + "factoryResetTypeToConfirm": "確認ボタンを有効にするには <1>{{token}} と入力してください。消去が完了すると、Kandev を終了して再起動するよう求められます。バックエンドは自動再起動しません。", + "factoryResetWipes": "これにより、データベース、ワークツリー、リポジトリのクローン、セッション、タスク、クイックチャットのセッションを含む Kandev のインストール全体が消去されます。", + "factoryResetWiping": "データを消去中...", + "featureToggleDebug": "デバッグ", + "featureToggleEnv": "環境: {{envVar}}", + "featureToggleEnvControlled": "起動環境によって制御されています", + "featureToggleExperimental": "実験的", + "featureTogglePendingRestart": "再起動待ち", + "featureToggleRequiresRestart": "再起動が必要", + "featureTogglesLoadError": "機能トグルを読み込めませんでした。", + "featureTogglesLoadFailed": "機能トグルの読み込みに失敗しました", + "featureTogglesLoading": "機能トグルを読み込み中...", + "featureToggleSource": "ソース: {{source}}", + "featureToggleSourceDefault": "デフォルト", + "featureToggleSourceEnv": "環境", + "featureToggleSourceOverride": "保存された上書き設定", + "featureTogglesPageDescription": "Kandev の機能スイッチと診断スイッチを管理します。", + "featureTogglesRetry": "再試行", + "featureTogglesSaved": "機能トグルを保存しました", + "featureToggleSwitchLabel": "{{label}} を切り替え", + "featureToggleUnavailable": "利用不可", + "featureToggleUnavailableGeneric": "このインストールでは、今はこの機能を有効化できない。", + "featureToggleUnavailablePlatform": "このOSでは、この機能はサポートされていない。", + "featureToggleUseDefault": "デフォルトを使う", + "healthAllPass": "すべてのシステムチェックが通過。", + "healthHealthy": "正常", + "healthIssue": "問題", + "healthIssueCount_one": "{{count}}件の問題", + "healthIssueCount_other": "{{count}}件の問題", + "healthLoading": "ヘルスチェックを読み込み中...", + "healthPassing": "通過", + "healthSeverityError": "エラー", + "healthSeverityInfo": "情報", + "healthSeverityWarning": "警告", + "healthSystemChecks": "システムチェック", + "healthTitle": "ヘルス", + "healthWhatsMonitored": "監視対象", + "host": "ホスト", + "hostMetrics": "ホストメトリクス", + "hostWithLabel": "ホスト: {{label}}", + "inviteCopied": "招待リンクをコピー済み", + "inviteCopy": "招待リンクをコピー", + "inviteCreate": "招待リンクを作成", + "inviteCreating": "作成中...", + "inviteDescription": "1回限りの招待リンクを生成。メールを空にすると、誰でも使えるリンクを作成し、選択したロールで登録できる。メールを入れると、そのアドレスに招待を固定する。", + "inviteDone": "完了", + "inviteEmailOptional": "メール(任意)", + "inviteFailed": "招待を作成できなかった。", + "inviteReadyDescription": "このリンクを招待相手に共有。このリンクは1回だけ表示。今すぐコピー。", + "inviteReadyTitle": "招待リンクの準備完了", + "inviteTitle": "ユーザーを招待", + "inviteUrlLabel": "招待リンク", + "ioLoadHelp": "直近1分間にCPU実行待ちまたは実行中のタスク平均数。値をホストのCPUコア数と比べる。", + "issuesNeedAttention_one": "{{count}}件の問題に対応が必要", + "issuesNeedAttention_other": "{{count}}件の問題に対応が必要", + "jobStateDone": "完了", + "jobStateFailed": "失敗", + "jobStateQueued": "待機中", + "jobStateRunning": "実行中", + "lastUpdateUnknown": "最終更新不明", + "licensesCount": "{{visible}} / {{total}}", + "licensesEmpty": "フィルターに一致する項目なし。", + "licensesFilterPlaceholder": "名前、ライセンス、エコシステムで絞り込み...", + "licensesPageDescription": "kandev に含まれるすべての npm と Go 依存関係のオープンソースライセンス。", + "licensesSource": "ソース", + "licensesStaleWarning": "生成失敗のため、Go のライセンス項目はコミット済みマニフェストから再利用した。go-licenses が正常になったら再生成して、Go 依存データを更新して。", + "licensesTitle": "サードパーティライセンス", + "licensesToggleLabel": "{{name}} のライセンステキストを表示", + "messageQueueAdminOnly": "この設定を変更できるのは管理者のみ。", + "messageQueueAutoMergeDescription": "全セッションのデフォルトを設定する。各セッションでは、そのセッションのキューで Auto-merge を変更するまでこの値に従う。", + "messageQueueAutoMergeNotice": "メッセージの source が違う、または task, model, mode, metadata, shared limits が非互換なら、別のキュー済みメッセージのままになる。これは新規受け入れだけに適用され、手動の merge control は変わらない。", + "messageQueueAutoMergeToggleLabel": "連続メッセージを自動マージ", + "messageQueueConfigured": "設定済み:", + "messageQueueDescription": "各セッションが新しい作業を拒否される前に保持できる保留メッセージ数を制御する。", + "messageQueueEffective": "実効値:", + "messageQueueEffectiveHelp": "実効値は今の新規受け入れに使われる。この値を下げても、既存の queue エントリは削除されない。", + "messageQueueConfigurationLockTitle": "設定で管理", + "messageQueueConfigurationLocked": "YAML の設定値が保存済み設定を上書きする。config.yaml で値を変えて Kandev を再起動すると、またここで編集できる。", + "messageQueueEnvironmentLockTitle": "環境変数で管理", + "messageQueueEnvironmentLocked": "{{variable}} が保存済み設定を上書きする。環境値を変えて Kandev を再起動すると、またここで編集できる。", + "messageQueueLimitDescription": "この制限は新しく受け入れたメッセージにすぐ適用される。下げても待機中メッセージは消えないし、受け入れ済みの配信再試行も安全なまま。", + "messageQueueLimitTitle": "セッションごとの queue 制限", + "messageQueueLoadFailed": "メッセージ queue 設定を読み込めなかった。", + "messageQueueLoading": "メッセージ queue 設定を読み込み中…", + "messageQueueMaximumLabel": "セッションあたり最大メッセージ数", + "messageQueueMergeDescription": "エージェントが取りに行く前に、queue 済みメッセージを直上のメッセージへまとめられる。関連するフォローアップの連発を1ターンに集約する。", + "messageQueueMergeNotice": "同じ送信者の隣接メッセージだけマージできる。自分の queue 済みメッセージ同士はマージされ、別 task の agent が queue したメッセージは、同じ起点 task を共有するときだけマージされる。workflow, system, in-flight メッセージはマージ不可。2つのメッセージの結合後の重複除去済み entity reference が共有メッセージ上限の100を超える場合も拒否される。これをオフにすると merge control はすぐ隠れ、すでにマージ済みのメッセージには影響しない。", + "messageQueueMergeToggleLabel": "queue 済みメッセージのマージを有効化", + "messageQueueRetry": "再試行", + "messageQueueSaveFailed": "メッセージ queue 設定の保存に失敗した。", + "messageQueueSourceDefault": "デフォルト", + "messageQueueSourceConfiguration": "設定", + "messageQueueSourceEnvironment": "環境変数", + "messageQueueSourceSetting": "保存済み設定", + "messageQueueTitle": "メッセージキュー", + "messageQueueUnlimited": "無制限", + "messageQueueUnlimitedHelp": "0 で無制限。正の整数を入れると、1セッションでその件数ぶん保留後に新規メッセージを拒否する。", + "messageQueueValidation": "0 以上の整数を入力。", + "sessionCapacityAdminOnly": "この設定を変更できるのは管理者のみ。", + "sessionCapacityBehaviorHelp": "この制限は自動開始に適用される。手動開始は超えられる。Workflow WIP は別制限のまま。", + "sessionCapacityCurrent": "現在:", + "sessionCapacityDescription": "全ワークスペースで自動起動を制限。", + "sessionCapacityEnabledDescription": "有効時、上限到達後は自動起動が待機。", + "sessionCapacityEnabledLabel": "インスタンスのセッション上限を有効化", + "sessionCapacityEnvironmentLockTitle": "環境で管理", + "sessionCapacityEnvironmentLocked": "{{variable}} が保存設定を上書き。ここで編集するには、環境値を変更して Kandev を再起動。", + "sessionCapacityLimitDescription": "この Kandev インスタンス内の全ワークスペースに、1つの自動セッション上限を設定。", + "sessionCapacityLimitTitle": "自動セッションを制限", + "sessionCapacityLoadFailed": "セッション上限設定を読み込めなかった。", + "sessionCapacityLoading": "セッション上限設定を読み込み中...", + "sessionCapacityMaximumHelp": "正の整数を入力。手動起動はこの上限を超えられる。", + "sessionCapacityMaximumLabel": "最大自動セッション数", + "sessionCapacityNoLimit": "セッション上限なし", + "sessionCapacityRetry": "再試行", + "sessionCapacitySaveFailed": "セッション上限設定の保存に失敗。", + "sessionCapacityScope": "全ワークスペースの自動起動に適用。Workflow WIP 上限とは別。", + "sessionCapacitySourceDefault": "デフォルト", + "sessionCapacitySourceEnvironment": "環境", + "sessionCapacitySourceSetting": "保存設定", + "sessionCapacityTitle": "セッション上限", + "sessionCapacityUnsaved": "未保存の変更あり", + "sessionCapacityValidation": "正の整数を入力。", + "metricCpuPercent": "CPU", + "metricCpuTemp": "CPU温度", + "metricDiskPercent": "ディスク", + "metricIoLoad": "システム負荷 (1分)", + "metricMemoryPercent": "メモリ", + "metricsUnavailable": "メトリクス利用不可", + "navAbout": "概要", + "navBackups": "バックアップ", + "navDatabase": "データベース", + "navDataStorage": "データとログ", + "navFeatureToggles": "機能トグル", + "navLicenses": "ライセンス", + "navLogs": "ログ", + "navRetention": "Office保持期間", + "navUpdates": "更新", + "navUsers": "ユーザー", + "retentionPageDescription": "Office の実行履歴 (office_routine_runs、runs、および関連テーブル) をデータベースに残す期間を制限。", + "retentionAdminOnly": "保持設定を変更できるのは管理者のみ。", + "retentionLoadFailed": "保持設定を読み込めなかった。", + "retentionSaveFailed": "保持設定を保存できなかった。", + "retentionInvalidFields": "保存前に強調表示された保持項目を直せ。", + "retentionInvalidField": "許可範囲内の値を入れろ。", + "retentionPolicyTitle": "保持ポリシー", + "retentionPolicyDescription": "古い完了履歴と関連実行詳細を自動削除する。アクティブな作業は保護される。", + "retentionEnabledLabel": "自動クリーンアップ", + "retentionEnabledDescription": "オンなら、Kandev が古い完了履歴と関連詳細を削除する。アクティブな作業は保護される。", + "retentionActiveWorkProtection": "クリーンアップは古い完了履歴と関連実行詳細を削除する。アクティブな作業は保護される。", + "retentionAdvancedSettingsTitle": "詳細設定", + "retentionAdvancedSettingsDescription": "クリーンアップの間隔、バッチサイズ、警告しきい値を調整する。", + "retentionSweepIntervalLabel": "スイープ間隔 (時間)", + "retentionSweepIntervalHelp": "スイープ実行頻度。1 から 168 時間 (1 週間) まで。", + "retentionBatchLimitLabel": "スイープごとの削除行数", + "retentionBatchLimitHelp": "1 回のスイープでテーブルごとに削除する最大行数。100 から 100,000 まで。ほかの DB 負荷と競合するなら下げろ。大量の滞留は 1 回でなく複数回のスイープで消える。", + "retentionRoutineRunsSectionTitle": "ルーチン履歴", + "retentionRoutineRunsSectionDescription": "スキップ済み、集約済み実行を含むルーチン活動。", + "retentionRunsSectionTitle": "エージェント実行履歴", + "retentionRunsSectionDescription": "Office agent の実行と完了状態。", + "retentionRoutineHistoryLabel": "ルーチン履歴", + "retentionRoutineHistoryDescription": "スキップ済み、集約済み実行を含むルーチン活動。", + "retentionAgentRunHistoryLabel": "エージェント実行履歴", + "retentionAgentRunHistoryDescription": "Office agent の実行と完了状態。", + "retentionRunEventsLabel": "実行イベント", + "retentionProviderAttemptsLabel": "プロバイダー試行", + "retentionRunSkillRecordsLabel": "実行スキル記録", + "retentionRunEventsSectionTitle": "run_events と関連テーブル", + "retentionRunEventsSectionDescription": "run_events, office_run_route_attempts, office_run_skills の行は、それらを所有する実行と一緒に削除される。独自の保持期間も下限もない。", + "retentionWindowDaysLabel": "保持期間 (日)", + "retentionWindowDaysHelp": "この日数より古い完了行は削除対象になる。1 から 3650 日まで。", + "retentionFloorPerOwnerLabel": "所有者ごとの最小保持数", + "retentionRoutineFloorLabel": "ルーチンごとの最小保持数", + "retentionAgentFloorLabel": "エージェントプロファイルごとの最小保持数", + "retentionFloorPerOwnerHelp": "保持期間を過ぎても、各所有者の最新完了行をこの数だけ必ず残す。0 から 10,000 まで。下限を無効にするなら 0 にする。", + "retentionWarnRowsLabel": "この保持行数を超えたら警告", + "retentionWarnRowsHelp": "保持行数がこの数を超えたらヘルス警告を出す。0 で警告無効。", + "retentionRunEventsWarnRowsHelp": "保持済み run_events の合計行数がこの数を超えたらヘルス警告を出す。0 で警告無効。", + "retentionWarningThresholdsTitle": "警告しきい値", + "retentionWarningThresholdsDescription": "警告は保存済み行に対して適用する。0 ならその警告を無効。", + "retentionStatusTitle": "保持状態", + "retentionStatusDescription": "最新のスイープ結果と、各しきい値テーブルの現在の保持行数です。", + "retentionNeverSweptMessage": "バックエンドの最後の起動以降、まだスイープは実行されていません。", + "retentionAutomaticCleanupLabel": "自動クリーンアップ", + "retentionEnabledValue": "オン", + "retentionDisabledValue": "オフ", + "retentionLastCleanupLabel": "前回のクリーンアップ", + "retentionOutcomeCompleted": "完了", + "retentionOutcomePreview": "プレビューのみ", + "retentionOutcomeMixed": "結果が混在", + "retentionOutcomeError": "エラーありで完了", + "retentionDeletionTotal_one": "{{count}}件のレコードを削除", + "retentionDeletionTotal_other": "{{count}}件のレコードを削除", + "retentionBacklogNotice": "後で行うクリーンアップの対象となる履歴がさらに残っています。", + "retentionStoredCountsDescription": "保存済み件数には保護対象の作業も含まれ、削除見込みではありません。", + "retentionUpdatedLabel": "更新日時", + "retentionCleanupDetailsTitle": "クリーンアップの詳細", + "retentionCensusUnavailable": "利用できません", + "retentionCensusZero": "0件", + "retentionRecords_one": "{{count}}件", + "retentionRecords_other": "{{count}}件", + "retentionAboveWarningThreshold": "警告しきい値を超過", + "retentionSweepStartedAtLabel": "開始", + "retentionSweepFinishedAtLabel": "完了", + "retentionDeletedLabel": "削除済み", + "retentionWouldDeleteLabel": "削除予定(プレビュー)", + "retentionBacklogLabel": "バックログ: このスイープのバッチ上限を超える対象行がさらに残っています", + "retentionTableErrorLabel": "エラー", + "retentionSkipCountLabel": "スイープのスキップ回数", + "retentionSkipCountHelp": "実行予定だったのに実行されなかったスイープの回数です。多くの場合、別の Kandev プロセスが同時に保持ロックを持っていたことが原因です。", + "retentionLastSkipAtLabel": "最後のスキップ", + "retentionRetainedCountsTitle": "保持行数", + "retentionCensusNotComputed": "未計測", + "retentionCensusStale": "古い情報です。前回の計測に失敗したため、最後に成功した件数を表示しています", + "retentionCensusAsOfLabel": "基準時点", + "retentionUnknownStatusesLabel": "認識できないステータスの行(履歴にもライブ状態にも含まれません)", + "retentionTopRoutineShareLabel": "保持行数に占める最大単一ルーチンの割合", + "backendReloadRequiredTitle": "再読み込みが必要です", + "backendReloadRequiredBody": "Kandev が再起動されました。続行するにはこのページを再読み込みしてください。再読み込みすると未保存の変更は破棄されます。", + "backendReloadRequiredAction": "ページを再読み込み", + "reloadPage": "ページを再読み込み", + "restartAction": "再起動", + "agentRuntimeUnavailableTitle": "ローカルエージェントランタイム停止中", + "agentRuntimeUnavailableBody": "ローカルランタイム停止中は、エージェント操作とワークスペースツールが更新されない場合あり。保存データは安全。", + "agentRuntimeUnavailableRestartRequired": "復旧には Kandev 完全再起動必要。", + "agentRuntimeUnavailableRestart": "Kandev 再起動", + "agentRuntimeUnavailableManual": "ターミナルかサービスマネージャーから Kandev 再起動。", + "agentRuntimeCheckingRestart": "再起動サポート確認中…", + "restartManualHint": "都合いい時に、ターミナルかサービスマネージャーから再起動。", + "restartPendingChanges": "保存したトグル変更は、次回 Kandev 起動時に反映。", + "restartPhaseDoneBody": "バックエンド再起動済み。ページ再読み込みで、最新の機能トグル状態に再接続。", + "restartPhaseDoneTitle": "Kandev 再起動完了", + "restartPhaseErrorBody": "再起動完了できず。", + "restartPhaseErrorTitle": "再起動失敗", + "restartPhaseRestartingBody": "Kandev 停止中、再起動中。このページは新しいプロセスを自動検出。", + "restartPhaseRestartingTitle": "Kandev 再起動中", + "restartPhaseStartingBody": "ローカル監督プロセスの再起動リクエスト準備中。", + "restartPhaseStartingTitle": "再起動リクエスト中", + "restartRequired": "再起動必要", + "restartStartFailed": "Kandev 再起動失敗", + "restartSupportDetails": "再起動サポート詳細", + "restartSupportedHelp": "Kandev が対応ローカル監督プロセス下で動作中なら、このページから再起動可能。", + "restartTimedOut": "再起動が予想より長引き中。更新して現在状態確認。", + "restartUnsupportedHelp": "デプロイプレビュー、未管理のターミナル実行、または再起動監督なし起動モードでは自動再起動不可。", + "restoreAction": "復元", + "restoreBody": "現在のデータベース上に <1>{{name}} を復元。ステージ済みコピー配置後、新データを新鮮に読み込むため Kandev の終了と再起動を求められる。バックエンド自動再起動なし。", + "restoreCompleteBody": "<0>{{name}} を現在のデータベース上に書き込み済み。続行前に Kandev 再起動。再起動までデータベースプールは閉鎖。自動再起動使えない場合は、Kandev を手動で終了して再起動。", + "restoreCompleteTitle": "復元完了", + "restoreFailed": "復元失敗", + "restorePlaceholder": "確認のため {{token}} 入力", + "restoreRequestFailed": "復元リクエスト失敗", + "restoreTitle": "スナップショット復元", + "restoreTypeToConfirm": "確認ボタン有効化に <1>{{token}} 入力。", + "restoreWriting": "スナップショットをライブデータベースへ書き込み中...", + "selfUpdateDone": "{{version}} に更新済み。", + "selfUpdateDoneUnknown": "最新バージョンに更新済み。", + "selfUpdateFailed": "更新失敗。", + "selfUpdateHelperFailed": "更新ヘルパー起動失敗。サービスログ確認。", + "selfUpdateInstalling": "{{version}} をダウンロードしてインストール中…", + "selfUpdateInstallingUnknown": "新バージョンをダウンロードしてインストール中…", + "selfUpdateKeepOpen": "このページ開いたまま。更新完了したら自動で再読み込み。", + "selfUpdateRestarting": "Kandev を再起動中。1分ほどかかることあり。", + "selfUpdateStartFailed": "更新の開始に失敗", + "selfUpdateStarting": "{{version}} へ更新開始中…", + "selfUpdateStartingUnknown": "新しいバージョンへの更新開始中…", + "selfUpdateTimedOut": "更新に予想より時間かかってる。最新バージョン確認に再読み込みして。", + "settingsRouteNotPorted": "この設定ルートは SPA シェルが処理中だが、専用クライアントページはまだ移植中: <1>{{pathname}}", + "setupIssues": "セットアップ問題", + "statusPageDescription": "ヘルスチェック、ディスク使用量、バージョン要約。", + "storageAcknowledgeDaemon": "デーモンを確認", + "storageAcknowledgeDedicatedFirst": "先に専用 Docker デーモンを確認して。", + "storageActionFailed": "ストレージ操作に失敗", + "storageActionPending": "現在のストレージ操作が終わるまで待って。", + "storageActionsDescription": "読み取り専用スナップショット用に分析するか、空き容量を今すぐ回復したいときは有効なクリーンアップルールを実行して。", + "storageActionsTitle": "安全にディスク容量を回収", + "storageAdminOnly": "ストレージ設定変更やメンテ実行は管理者のみ。", + "storageAdoptCache": "キャッシュを採用", + "storageAdoptDialogDescription": "Kandev が {{path}} の既存キャッシュをローテーション、隔離できるようになる。このパスは絶対パスで、Kandev trash と同じファイルシステム上にある必要あり。", + "storageAdoptDialogFallbackPath": "選択したパス", + "storageAdoptDialogTitle": "外部 Go ビルドキャッシュを採用", + "storageAdoptionPending": "Go キャッシュの採用が終わるまで待って。", + "storageAnalysisComplete": "分析完了", + "storageAnalysisDescription": "現在の使用量と回収可能容量の読み取り専用内訳。推定値更新したいときは時々 Analyze 実行。何も削除も移動もなし。", + "storageAnalysisScope": "分類カテゴリは選択した Kandev とユーザーストレージ資源を対象にし、ホストファイルシステム使用量全体は示さない。", + "storageAnalysisFailed": "分析失敗", + "storageAnalysisCacheLifetime": "キャッシュ有効期間: {{duration}}", + "storageAnalysisDuration": "スキャン時間: {{duration}}", + "storageAnalysisDurationMilliseconds": "{{value}} ミリ秒", + "storageAnalysisDurationMinutes": "{{value}} 分", + "storageAnalysisDurationSeconds": "{{value}} 秒", + "storageAnalysisNextRefresh": "次回更新: {{absolute}} ({{relative}})", + "storageAnalysisNextRefreshUnknown": "次回更新時刻は不明。", + "storageAnalysisRunning": "ストレージ分析まだ実行中。", + "storageAnalysisSourceComplete": "計測完了", + "storageAnalysisSourceFailed": "計測失敗", + "storageAnalysisSourceFailedWithError": "計測失敗: {{error}}", + "storageAnalysisSourcePending": "計測待ち", + "storageAnalysisSourceScanning": "{{completed}} / {{total}} を計測中", + "storageAnalysisSourceScanningUnknown": "計測中", + "storageAnalysisTitle": "ストレージ分析", + "storageAnalysisTimingHelp": "Analyze でこのデータ即更新。スキャンは Storage ページか他クライアントが開いてる間、必要時に実行。", + "storageAnalysisTimingTitle": "分析タイミング", + "storageAnalyze": "分析", + "storageAnalyzing": "分析中...", + "storageDatabase": "データベース", + "storageDatabaseAlreadyCounted": "別のストレージ分類で既に計上済み", + "storageDatabasePartiallyCounted": "一部のバイトは別の測定済み分類と重複し、そちらで計上済み", + "storageDatabaseBackups": "データベースバックアップ", + "storageDatabaseBackupsDetail": "兄弟バックアップディレクトリ内の通常ファイル", + "storageDatabaseDetail": "SQLiteファイルと、既存の -wal, -shm, -journal サイドカー", + "storageDatabaseNotApplicable": "このドライバーではローカルデータベース測定は適用外です。", + "storageDatabaseUnavailable": "データベース使用量を測定できませんでした。", + "storageDatabaseUnknown": "このレスポンスではデータベース測定は利用できません。", + "storageDatabaseBackupsNotApplicable": "このドライバーではローカルデータベースバックアップ測定は適用外です。", + "storageDatabaseBackupsUnavailable": "データベースバックアップ使用量を測定できませんでした。", + "storageDatabaseBackupsUnknown": "このレスポンスではデータベースバックアップ測定は利用できません。", + "storageBuildCacheKeepHelp": "Docker は、対象レコードの整理時にこの量のビルドキャッシュをだいたい保持します。値を大きくすると再利用可能なビルドレイヤーは多く残るが、解放できるディスク容量は少なくなります。", + "storageBuildCacheKeepLabel": "保持するビルドキャッシュ (GB)", + "storageBuildCacheUnusedHelp": "この未使用期間しきい値より古いビルドキャッシュレコードだけが対象です。値を大きくすると最近のビルドレイヤーをより長く保護します。", + "storageBuildCacheUnusedLabel": "ビルドキャッシュ未使用期間 (時間)", + "storageBusyForceHint": "そのままクリーンアップを実行すると、この稼働中作業を妨げる可能性があります。", + "storageBusyIntro": "クリーンアップは次の作業を妨げる可能性があります:", + "storageBusyTitle": "ストレージクリーンアップで稼働中の Kandev 作業を検出", + "storageCheckIntervalHelp": "Kandev が定期メンテナンスの実行時期を確認する頻度。Kandev が使用中ならその確認はスキップされ、次の間隔で再試行されます。", + "storageCheckIntervalLabel": "確認間隔 (時間)", + "storageCleanContainersAria": "Kandev コンテナをクリーン", + "storageCleanDockerBuildCacheAria": "Docker ビルドキャッシュをクリーン", + "storageCleanGoCache": "Go キャッシュをクリーン", + "storageCleanTemporaryArtifacts": "古い成果物をクリーン", + "storageCleaning": "クリーン中...", + "storageCleanOrphanWorkspacesAria": "孤立したタスクワークスペースをクリーン", + "storageCleanUnusedImagesAria": "未使用の Docker イメージをクリーン", + "storageCleanupComplete": "クリーンアップ完了", + "storageCleanupFailed": "クリーンアップ失敗", + "storageCleanupRunning": "ストレージクリーンアップはまだ実行中です。", + "storageClearEligible": "対象をクリア", + "storageClearEligibleDialogTitle": "対象の隔離を解除", + "storageContainersDescription": "Kandev が作成しラベル付けした停止済みで未使用のコンテナを削除します。", + "storageContainersHelp": "Kandev 管理とラベル付けされた停止済みコンテナだけが対象。インベントリで不要と確認できるものだけ削除。実行中コンテナと無関係な Docker コンテナは、このオプションでは削除しません。", + "storageDedicatedDaemon": "専用 Docker デーモン", + "storageDedicatedDaemonDescription": "無関係なワークロードがこの Docker デーモンを共有していないことを確認します。", + "storageDedicatedDaemonHelp": "ビルドキャッシュとイメージの所有者を Kandev に確実に帰属させることはできません。この同意により、デーモン全体のクリーンアップが有効になります。これは、設定された Docker デーモンが Kandev 専用で使われている場合にのみ有効にしてください。Kandev はボリューム全体の prune は実行しません。", + "storageDedicatedDialogDescription": "ビルドキャッシュと未使用イメージのクリーンアップは、このインスタンス外で作成されたリソースを含め、設定されたデーモン全体に影響します。このインストール専用のデーモンであることにのみ同意してください。", + "storageDedicatedDialogTitle": "この専用 Docker デーモンを使用する", + "storageDefaultDockerHost": "デフォルトの Docker ホスト", + "storageDelete": "削除", + "storageDeleteDialogDescription": "これは元に戻せません。Kandev は {{path}} を完全に削除します。", + "storageDeleteDialogFallbackPath": "選択した隔離エントリ", + "storageDeleteDialogTitle": "隔離されたデータを完全に削除", + "storageDeletePermanently": "完全に削除", + "storageDeletionComplete": "削除が完了しました", + "storageDescription": "アクティブな作業を保護しながら、ホストのディスク使用量と Office の履歴保持を管理します。", + "storageHostTab": "ホスト", + "officeRetentionTab": "Office の保持", + "storageDockerBuildCache": "Docker ビルドキャッシュ", + "storageDockerBuildCacheDescription": "設定した容量を維持しながら、古いビルドキャッシュを削除します。", + "storageDockerBuildCacheHelp": "Docker の経過時間フィルターとストレージフィルターを使用して古いビルドキャッシュを削除します。docker system prune は実行せず、ボリュームをグローバルに削除することもありません。専用デーモンの同意が確認されるまで無効のままです。", + "storageDockerDescription": "任意のデーモン全体クリーンアップです。この Docker デーモンが Kandev 専用の場合にのみ有効にしてください。", + "storageDockerImageLayers": "Docker イメージレイヤー", + "storageDockerTitle": "Docker のクリーンアップ", + "storageDockerUnavailable": "設定されたホストでは Docker を利用できません。", + "storageDockerUnavailableBadge": "Docker 使用不可", + "storageDockerUnavailableNotice": "Docker は利用できないため、このホストでは Docker のクリーンアップ オプションを実行できません。", + "storageDockerUnmeasured": "Docker の使用量を測定できませんでした", + "storageDiskTitle": "ディスク容量", + "storageDiskDescription": "Kandev のストレージを含むファイルシステムの現在の使用状況です。", + "storageDiskLoading": "ディスク容量を読み込んでいます…", + "storageDiskUnavailable": "現在、ディスク容量は利用できません。", + "storageDiskUsed": "{{percent}}% 使用", + "storageDiskUsedSize": "{{size}} 使用中", + "storageDiskCapacitySummary": "{{available}} 利用可能 · 合計 {{total}}", + "storageDiskPath": "ストレージパス", + "storageDiskProgressAria": "ディスク使用率: {{percent}}% 使用", + "storageDiskHighWarning": "このファイルシステムは容量が逼迫しつつあります (使用率 80% 以上)。", + "storageDiskCriticalWarning": "このファイルシステムは非常に逼迫しています (使用率 90% 以上)。", + "storageEligibleNow": "今すぐ対象", + "storageEnableGoCacheFirst": "まず管理対象の Go キャッシュを有効にしてください。", + "storageEnableManagedGoCacheAria": "管理対象の Go キャッシュを有効にする", + "storageEnterCachePathFirst": "まず絶対パスのキャッシュパスを入力してください。", + "storageExternalGoCache": "外部 Go キャッシュ", + "storageExternalGoCacheDescription": "必要に応じて、Kandev が管理対象パスの外にある既存のホストキャッシュを管理できるようにします。", + "storageExternalGoCacheHelp": "導入することで、この既存のキャッシュをローテーションする明示的な権限が Kandev に付与されます。Kandev は、正確な絶対パスを導入して破壊的なアクセスを確認しない限り、既定のユーザーキャッシュや別のパスをクリーンアップしません。", + "storageForceClearAll": "すべてを強制クリア", + "storageForceClearDescription": "これは、隔離中のすべての項目を直ちに完全削除しようとする操作です。成功した項目は元に戻せません。失敗した項目は表示されたままになり、再試行できる場合があります。", + "storageForceClearDialogTitle": "隔離中のすべてを強制クリア", + "storageGoBuildCache": "Go ビルドキャッシュ", + "storageGoCacheBelowLimit": "Go ビルドキャッシュは、設定されたサイズ上限を下回っています。", + "storageGoCacheMaxHelp": "これはクリーンアップのトリガーであり、厳密な上限ではありません。タスクが実行中の場合、このサイズを超えてキャッシュが増えることがあります。メンテナンスでは、上限を超えると所有中のキャッシュを隔離に移し、空のキャッシュを再作成します。", + "storageGoCacheMaxLabel": "最大キャッシュサイズ (GB)", + "storageGoCacheNotOwned": "Kandev が所有する Go ビルドキャッシュのみをクリーンアップできます。", + "storageGoCacheSectionDescription": "新しいホストローカル実行に対して、Kandev 所有のキャッシュを使用し、必要に応じて縮小します。", + "storageHistoryEmpty": "まだストレージのメンテナンス実行はありません。", + "storageHistoryLoading": "メンテナンス履歴を読み込み中…", + "storageIdleHelp": "スケジュールされたクリーンアップは、タスク、シェルコマンド、テスト、セットアップ、クリーンアップ、またはイメージビルドのいずれも管理対象リソースをこの時間使っていない場合にのみ開始されます。今すぐ実行はこのタイマーを待ちませんが、リソースが使用中の場合は実行を拒否します。", + "storageIdleLabel": "アイドル状態を要求する時間 (分)", + "storageKandevContainers": "Kandev コンテナ", + "storageLastAnalyzed": "最終分析日時 {{time}}", + "storageLoadingData": "ストレージデータを読み込み中…", + "storageMaintenanceHistory": "メンテナンス履歴", + "storageManagedContainerCount_one": "管理対象コンテナ {{count}} 件", + "storageManagedContainerCount_other": "管理対象コンテナ {{count}} 件", + "storageManagedGoCache": "管理対象 Go キャッシュ", + "storageManagedGoCacheDescription": "新しいホストローカル実行では {{path}} を使用します。", + "storageManagedGoCacheHelp": "有効にすると、Kandev は新しいローカルタスクプロセスに専用の Go ビルドキャッシュを割り当て、上限を超えた場合はメンテナンス中にローテーションすることがあります。これをオフにすると、新しい実行で管理対象キャッシュの使用は停止しますが、削除はされません。", + "storageMoreInformationAbout": "{{label}} についての詳細", + "storageNoEligibleEntries": "まだ隔離対象の項目はありません。", + "storageOrphanGraceHelp": "ワークスペースが孤立と分類される前に、少なくともこの時間は未使用である必要があります。この値を大きくすると、古いワークスペースが隔離に入るまでの保持期間が長くなります。", + "storageOrphanGraceLabel": "孤立判定までの待機時間 (時間)", + "storageOrphanWorkspaces": "孤立したタスクワークスペース", + "storageOrphanWorkspacesDescription": "確認済みの孤立ワークスペースを隔離に移動します。", + "storageOrphanWorkspacesHelp": "Kandev は、在庫確認でアクティブなタスク、環境、セッション、または保護された worktree が使用していないと確認された場合にのみタスクワークスペースを選択します。ワークスペースはまず隔離に移動され、完全削除の前に復元できます。", + "storagePolicyDescription": "Kandev が自動的に回収できるものと、従うべき安全制限を選択してください。", + "storagePolicyLoadingBlock": "ストレージ設定の読み込みが完了するまでお待ちください。", + "storagePolicyTitle": "メンテナンスポリシー", + "storageProtectedUntil": "<1>{{deadline}} まで保護されています", + "storagePurgeEligibleCount_one": "これにより、対象項目 {{count}} 件が永久に削除されます。", + "storagePurgeEligibleCount_other": "これにより、対象項目 {{count}} 件が永久に削除されます。", + "storagePurgeProtectedCount_one": "保護中の項目が {{count}} 件あり、保持期限まで残ります。", + "storagePurgeProtectedCount_other": "保護中の項目が {{count}} 件あり、保持期限まで残ります。", + "storageQuarantineCardDescription": "クリーンアップでは、回復可能なデータをすぐに削除せず、まずここに移動します。まだ必要であれば項目を復元し、不要だと確信できる場合のみ永久削除してください。", + "storageQuarantineCleanupRunning": "隔離のクリーンアップがまだ実行中です。", + "storageQuarantinedResources": "隔離済みリソース", + "storageQuarantineEligibleCount_one": "現在{{count}}件が対象です", + "storageQuarantineEligibleCount_other": "現在{{count}}件が対象です", + "storageQuarantineEmpty": "復元可能な隔離済みリソースはありません。", + "storageQuarantineHeading": "隔離", + "storageQuarantineHelp": "隔離は、Kandevの復元可能な保管領域です。孤立したタスクワークスペースとローテーションされたGoキャッシュは、削除前にここへ移動されます。保持期間内であれば項目を復元できます。期限を過ぎると、後続のメンテナンス実行で完全に削除される場合があります。", + "storageQuarantineLoading": "隔離を読み込んでいます…", + "storageQuarantineMovedAside_one": "{{count}}件の項目を、完全削除前の復元用に退避しました", + "storageQuarantineMovedAside_other": "{{count}}件の項目を、完全削除前の復元用に退避しました", + "storageQuarantineProtectedCount_one": "{{count}}件が保護されています", + "storageQuarantineProtectedCount_other": "{{count}}件が保護されています", + "storageQuarantineRetentionHelp": "クリーンアップは、孤立したワークスペースとローテーションされたGoキャッシュをすぐに削除せず、まずKandevのゴミ箱領域に移動します。この保持期間中は項目を復元できます。期限を過ぎると、後続のメンテナンス実行で完全に削除される場合があります。", + "storageQuarantineRetentionLabel": "隔離済み項目の保持期間 (時間)", + "storageQuarantineSafetyDescription": "復元可能なリソースを、完全削除までの猶予期間中保持します。", + "storageQuarantineSafetyTitle": "隔離の安全性", + "storageQuarantineScheduleOff": "自動隔離クリーンアップはオフです。必要なときにメンテナンスを手動で実行するか、隔離アクションを使用してください。", + "storageQuarantineScheduleOn_one": "対象エントリは、期限後に最初に成功したメンテナンス実行時に削除されます (アイドル条件が許可する場合は{{count}}時間ごと)。", + "storageQuarantineScheduleOn_other": "対象エントリは、期限後に最初に成功したメンテナンス実行時に削除されます (アイドル条件が許可する場合は{{count}}時間ごと)。", + "storageQuarantineTotal": "隔離合計: {{size}}", + "storageQuarantineUnmeasured": "隔離の使用量を測定できませんでした", + "storageRefreshFailed": "ストレージデータを更新してください: {{message}}", + "storageResourceTypeGoCache": "goキャッシュ", + "storageResourceTypeTaskWorkspace": "タスクワークスペース", + "storageResourceTypeTemporaryArtifact": "一時アーティファクト", + "storageRestore": "復元", + "storageRetentionEnds": "保持期間の終了: {{deadline}}。", + "storageRunAnyway": "それでも実行", + "storageRunNow": "今すぐ実行", + "storageScheduleDescription": "自動メンテナンスの開始を許可するタイミングを制御します。スケジュールがオフでも手動操作は利用できます。", + "storageScheduledMaintenance": "スケジュール済みメンテナンス", + "storageScheduledMaintenanceDescription": "有効なリソースルールを使用して、定期的にディスク領域を回収します。", + "storageScheduledMaintenanceHelp": "有効にすると、Kandevは指定された間隔でこのポリシーを確認し、Kandevが必要な時間アイドル状態になった後にのみ開始します。オフにしても、AnalyzeやRun nowは無効になりません。", + "storageScheduleTitle": "スケジュール", + "storageSectionUnavailable": "このストレージセクションを読み込めませんでした", + "storageTaskWorkspaces": "タスクワークスペース", + "storageTemporaryArtifacts": "Kandevの一時アーティファクト", + "storageTemporaryArtifactsActiveCount_one": "{{count}}件がアクティブ", + "storageTemporaryArtifactsActiveCount_other": "{{count}}件がアクティブ", + "storageTemporaryArtifactsDialogAction": "対象ファイルを隔離へ移動", + "storageTemporaryArtifactsDialogDescription": "対象の登録済みアーティファクトは隔離へ移動され、保持期間中に復元できます。アクティブなアーティファクトや最近のアーティファクトは保護されています。", + "storageTemporaryArtifactsDialogTitle": "使用停止中のKandev一時ファイルを削除しますか?", + "storageTemporaryArtifactsNoStale": "登録済み一時アーティファクトに24時間以上古いものはありません。", + "storageTemporaryArtifactsProtectedCount_one": "保護済み {{count}} 件", + "storageTemporaryArtifactsProtectedCount_other": "保護済み {{count}} 件", + "storageTemporaryArtifactsStaleCount_one": "削除対象の古いもの {{count}} 件", + "storageTemporaryArtifactsStaleCount_other": "削除対象の古いもの {{count}} 件", + "storageTemporaryArtifactsStaleBytes": "削除対象 {{value}}", + "storageTemporaryArtifactsUnavailable": "一時アーティファクト所有権を計測できませんでした", + "storageTemporaryArtifactsPolicyTitle": "Kandev 一時ファイル", + "storageTemporaryArtifactsPolicyDescription": "Kandev が一時利用用に登録する診断バンドルとユーティリティ作業フォルダー。", + "storageCleanStaleTemporaryArtifacts": "使用停止中のKandev一時ファイルを削除", + "storageTemporaryArtifactsPolicySummary": "登録済み診断バンドルとユーティリティ作業フォルダー。24時間以上非アクティブ。", + "storageTemporaryArtifactsPolicyHelp": "対象は、登録済みで非アクティブ、かつ24時間以上古いファイルだけ。削除前にファイルは隔離へ移動。共有一時フォルダーと無関係なパッケージキャッシュは除外。", + "storageTemporaryArtifactsPolicyAge": "登録済み非アクティブアーティファクトのみ。最小経過時間: 24時間。", + "storageTemporaryArtifactsPolicyQuarantine": "ファイルは完全削除前に隔離へ移動。", + "storageTemporaryArtifactsPolicyShared": "共有一時ファイルは除外。", + "storageCleanStaleTemporaryArtifactsAction": "古いアーティファクトを削除", + "storageTemporaryArtifactsQuarantinedResult": "{{size}} を隔離へ移動しました。", + "storageTemporaryArtifactsFreedAfterDelete": "完全削除後に容量を解放。", + "storageTemporaryArtifactsMoveFailed": "アーティファクトを隔離へ移動できませんでした。", + "storageSystemTemporaryFolders": "システム一時フォルダー", + "storageSystemTemporaryInformational": "読み取り専用。この使用量は集計カテゴリと重なる場合あり。", + "storageSystemTemporaryComplete": "完全", + "storageSystemTemporaryPartial": "一部", + "storageSystemTemporaryUnavailable": "利用不可", + "storageSystemTemporaryNotApplicable": "対象外", + "storageSystemTemporaryCompleteDetail": "選択した項目すべてを計測しました。", + "storageSystemTemporaryPartialDetail": "一部の項目を計測できませんでした。", + "storageSystemTemporaryUnavailableDetail": "フォルダーを計測できませんでした。", + "storageSystemTemporaryNotApplicableDetail": "フォルダーが存在しません。", + "storageSystemTemporaryResolvedRoot": "要求パス {{requested}} は {{resolved}} に解決されます。", + "storageSystemTemporaryRoot": "{{path}}: {{size}} · {{status}}", + "storageSystemTemporarySkippedCount_one": "{{count}} 項目をスキップ", + "storageSystemTemporarySkippedCount_other": "{{count}} 項目をスキップ", + "storageTitle": "ストレージ", + "storageToastAnalysisStarted": "ストレージ分析を開始", + "storageToastCacheAdopted": "Go ビルドキャッシュを採用", + "storageToastDeletionStarted": "完全削除を開始", + "storageToastEligiblePurgeStarted": "隔離済みのクリーンアップを開始", + "storageToastForcedPurgeStarted": "強制隔離クリーンアップを開始", + "storageToastMaintenanceStarted": "ストレージメンテナンス開始", + "storageToastPolicySaved": "ストレージポリシー保存済み", + "storageToastQuarantineRestored": "隔離リソース復元済み", + "storageTotalCounted": "合計: {{size}}", + "storageTotalCountedSoFar": "ここまでの合計: {{size}}", + "storageTotalPartial": "部分測定", + "storageNotApplicableValue": "該当なし", + "storageTrashPath": "ゴミ箱: {{path}}", + "storageTypeToConfirm": "続行するには <1>{{phrase}} と入力。", + "storageTypeToConfirmAria": "確認するには {{phrase}} と入力", + "storageUnavailableValue": "利用不可", + "storageUnusedDockerImages": "未使用の Docker イメージ", + "storageUnusedImagesDescription": "どのコンテナも使ってない古いイメージを削除。", + "storageUnusedImagesDetail": "すべてのコンテナで未使用、かつ設定期間より古い", + "storageUnusedImagesHelp": "実行中または停止中のコンテナが参照してなくて、かつ設定期間より古い時だけイメージを削除。これはデーモン全体対象なので、専用デーモンの確認が必要。", + "storageUnusedImagesHoursHelp": "Kandev が削除できる前に、そのイメージは全コンテナで未使用、かつこの期間より古い必要あり。値を大きくすると古いイメージを長く使える。", + "storageUnusedImagesHoursLabel": "イメージ未使用期間 (時間)", + "storageUserGoBuildCache": "ユーザー Go ビルドキャッシュ", + "storageWorkspacesDescription": "Kandev が確実に未使用と判定できるリソースを回収。", + "storageWorkspacesDetail": "猶予期間後に回収可能: {{reclaimable}} · アクティブ: {{active}}", + "storageWorkspacesTitle": "ワークスペースとコンテナ", + "storageWorkspaceDependencies": "アーカイブ済みまたは削除済みワークスペースから依存関係を削除", + "storageWorkspaceDependenciesDescription": "ワークスペースのソースと復旧メタデータは残したまま、依存フォルダ削除を有効化。", + "storageWorkspaceDependenciesHelp": "有効化して保存すると、Kandev は保護されてない Kandev タスクワークスペースのうち、アーカイブ済みまたは削除済みのものだけで、一覧のフォルダを再帰的に確認。欠落フォルダ、symlink、アクティブまたは保護されたワークスペース、vendor、target、build、dist、.cache、.git みたいな曖昧なフォルダはスキップ。整理済みワークスペースを復元すると、依存関係の再インストールが必要な場合あり。", + "storageDependencyFoldersTitle": "Kandev が確認するフォルダ", + "storageDependencyFoldersDescription": "これらの正確なディレクトリ名が、完全なクリーンアップ許可リスト。", + "storageDependencyFoldersHelp": "Kandev はこれらのディレクトリ名を再帰的に検索。存在しないフォルダはスキップ。Kandev は除外されたあいまいな名前を対象にせず、シンボリックリンクもたどらず、カスタムパスも受け付けない。対象はアーカイブ済みまたは削除済み、保護されていない Kandev ワークスペースのみ。復元後、依存関係の再インストールが必要になる場合あり。", + "storageCleanWorkspaceDependencies": "ワークスペース依存関係をクリーン", + "storageEnableWorkspaceDependenciesAndSave": "実行前に依存関係クリーンアップを有効化して保存。", + "systemMetrics": "システムメトリクス", + "uiStateHelp": "ブラウザーに保存されたレイアウトと UI 設定を消去 (パネルサイズ、固定タスク、展開済みグループなど)。アプリがおかしく見える、パネルが固まる、レイアウトが変なら使う。タスク、セッション、サーバーデータは影響なし。影響するのはブラウザーごとの UI 状態だけ。リセット後にページ再読み込み。", + "uiStateReset": "リセット", + "uiStateResetLabel": "ブラウザー レイアウトをリセット", + "uiStateTitle": "UI 状態", + "updateAvailable": "更新あり", + "updatedRelative": "{{relative}} に更新", + "updatesApply": "更新を適用", + "updatesApplyConfirmDesktop": "Kandev が {{version}} をインストールしてデスクトップアプリ再起動。", + "updatesApplyConfirmService": "Kandev が {{version}} に更新し、ユーザーサービスを再インストールして再起動。", + "updatesApplyConfirmTitle": "更新を適用する?", + "updatesCheckNow": "今すぐ確認", + "updatesCurrentVersion": "現在のバージョン", + "updatesDownloading": "更新をダウンロード中 ({{downloaded}} bytes)...", + "updatesDownloadingOfTotal": "更新をダウンロード中 ({{downloaded}} / {{total}} bytes)...", + "updatesInstalling": "更新をインストール中...", + "updatesLastChecked": "最終確認 {{at}}", + "updatesLatestRelease": "最新リリース", + "updatesNever": "なし", + "updatesNotificationsHint": "通知設定は <2>Notifications で管理。", + "updatesPageDescription": "現在版と最新リリース、それに kandev の全 changelog。", + "updatesReleaseNotes": "リリースノート", + "updatesRetryAfter_one": "確認済み。{{count}}秒後に再試行。", + "updatesRetryAfter_other": "確認済み。{{count}}秒後に再試行。", + "updatesTitle": "更新", + "updatesUpToDate": "Kandev は最新。", + "usersAddUser": "ユーザー追加", + "usersColumnActions": "操作", + "usersColumnEmail": "メール", + "usersColumnName": "名前", + "usersColumnRole": "権限", + "usersColumnStatus": "状態", + "usersConfirm": "確認", + "usersConfirmDisable": "{{email}} を無効化? すべての場所でサインアウト。", + "usersConfirmEnable": "{{email}} を再有効化?", + "usersConfirmRoleChange": "{{email}} を {{role}} に変更?", + "usersDisable": "無効化", + "usersEmpty": "まだユーザーなし。", + "usersEnable": "有効化", + "usersInviteLink": "招待リンク", + "usersLastAdminGuard": "このデプロイメントには、少なくとも 1 人の有効な管理者が必要。", + "usersLoadFailed": "ユーザーの読み込み失敗。", + "usersLoading": "ユーザーを読み込み中...", + "usersMakeAdmin": "管理者にする", + "usersMakeMember": "メンバーにする", + "usersPageDescription": "このインスタンスのアカウント、権限、招待リンクを管理。", + "usersRoleAdmin": "管理者", + "usersRoleMember": "メンバー", + "usersStatusActive": "有効", + "usersStatusDisabled": "無効", + "usersTakesEffectImmediately": "{{email}}。すぐ反映。", + "usersTitle": "ユーザー", + "usersUpdateFailed": "ユーザーを更新できませんでした", + "versionCurrent": "現在", + "versionLatest": "最新", + "versionTitle": "バージョン", + "versionViewUpdates": "更新を表示", + "toolPayload.title": "メッセージの圧縮", + "toolPayload.description": "古いツール入力と出力を削除し、メッセージのメタデータは保持します。", + "toolPayload.enabled": "自動圧縮", + "toolPayload.age": "タスクが非アクティブな期間", + "toolPayload.unit": "保持期間の単位", + "toolPayload.weeks": "週", + "toolPayload.months": "月", + "toolPayload.ageHelp": "進行中タスク、キュー済み作業、入力待ちタスクは除外されます。", + "toolPayload.invalidAge": "1~520 週、または 1~120 月の整数を入力してください。", + "toolPayload.beforeCleanup": "最初の圧縮前", + "toolPayload.backupHelp": "バックアップを選ぶか、バックアップなしで続行を明示してください。選んだバックアップは、圧縮開始前に成功が必要です。バックアップは追加容量を使います。バックアップを復元すると、新しい変更も含めてデータベース全体が巻き戻ります。", + "toolPayload.backup": "バックアップを作成する(推奨)", + "toolPayload.skip": "バックアップなしで続行", + "toolPayload.chooseBackup": "保存前にバックアップを作成するか選んでください。", + "toolPayload.analyze": "節約を分析", + "toolPayload.notAnalyzed": "未分析。圧縮を有効にせず節約見積もりをプレビュー。", + "toolPayload.stale": "この見積もりは古いか、別の期間のもの。もう一度分析を実行。", + "toolPayload.empty": "この期間に削除可能なツール詳細なし。", + "toolPayload.estimate": "推定ツール詳細削減量: {{size}}", + "toolPayload.progress": "スキャン済み: {{scanned}} メッセージ。対象: {{tasks}} 件のタスク、{{messages}} 件のメッセージ。", + "toolPayload.removed_one": "{{count}} 件のメッセージから詳細を削除。ペイロード削減: {{size}}。", + "toolPayload.removed_other": "{{count}} 件のメッセージから詳細を削除。ペイロード削減: {{size}}。", + "toolPayload.skipped_one": "スキップ: {{count}} 件。", + "toolPayload.skipped_other": "スキップ: {{count}} 件。", + "toolPayload.window": "スキャン範囲: {{start}} から {{end}}。アクティビティ cutoff: {{cutoff}}。", + "toolPayload.compactionHelp": "見積もりは削除されたツール詳細を示す。空き領域は DB 再利用用に解放される。ファイルを小さくするには、Database セクションの Compact database を使う。既存バックアップのサイズはそのまま。", + "toolPayload.lastCleanup": "最終実行", + "toolPayload.never": "未実行", + "toolPayload.nextCheck": "次回チェック", + "toolPayload.disabled": "無効", + "toolPayload.pending": "操作開始待ち。", + "toolPayload.preparing": "圧縮を準備中。圧縮はまだ有効でない。", + "toolPayload.preparationFailed": "準備失敗。圧縮はまだブロック中。再試行するか、準備をキャンセル。", + "toolPayload.retryBackup": "準備を再試行", + "toolPayload.cancelPreparation": "準備をキャンセルして圧縮を無効化", + "toolPayload.run": "今すぐメッセージを圧縮", + "toolPayload.cancel": "操作をキャンセル", + "toolPayload.refresh": "ステータスを更新", + "toolPayload.conflict": "ポリシーが変わったか、別の操作が実行中。ステータスを更新して下書きを破棄し、再試行前に最新ポリシーを使う。", + "toolPayload.adminOnly": "このポリシー変更、分析、圧縮は管理者のみ可能。", + "toolPayload.unsupported": "この DB エンジンはメッセージ圧縮非対応。", + "toolPayload.operationFailed": "操作を完了できなかった。ステータスを更新して再試行。", + "toolPayload.analysis": "分析", + "toolPayload.cleanup": "圧縮", + "toolPayload.running": "実行中", + "toolPayload.succeeded": "完了", + "toolPayload.failed": "失敗", + "toolPayload.partial": "一部完了", + "toolPayload.cancelled": "キャンセル済み", + "toolPayload.partialHelp": "この結果は不完全。報告済みの節約量は処理済み項目のみ含む。", + "toolPayload.skipReason.protected_tasks": "保護済みタスク", + "toolPayload.skipReason.oversize": "詳細が圧縮上限超え", + "toolPayload.skipReason.already_removed": "詳細はすでに削除済み", + "toolPayload.skipReason.no_payload": "回収できるペイロード bytes なし", + "toolPayload.skipReason.unsupported": "サポート外または保護されたツール詳細", + "toolPayload.skipReason.malformed": "認識できないツール詳細", + "toolPayload.skipReason.invalid_message": "無効なメッセージ", + "toolPayload.skipReason.other": "ほかのスキップ項目", + "toolPayload.skipReason.eligibility_budget": "適格性チェックがタイムアウト。タスクは保持済み", + "toolPayload.schedule": "Kandev 実行中は24時間ごとに確認", + "toolPayload.firstRun": "初回実行はバックアップ準備後に開始", + "toolPayload.analysisDetails": "分析詳細", + "toolPayload.runDetails": "実行詳細" +} diff --git a/apps/web/src/locales/ja/task.json b/apps/web/src/locales/ja/task.json new file mode 100644 index 0000000000..9a2721cf66 --- /dev/null +++ b/apps/web/src/locales/ja/task.json @@ -0,0 +1,2331 @@ +{ + "repositorySetsSaveDuplicateRows_one": "{{count}} 件の追加行は含まれない。各リポジトリの最初の行だけ保存される。base choice も含む。", + "repositorySetsSaveDuplicateRows_other": "{{count}} 件の追加行は含まれない。各リポジトリの最初の行だけ保存される。base choice も含む。", + "agentCliNotInstalled": "Agent CLI 未インストール", + "agentProbeFailed": "Agent probe 失敗", + "aPullRequestAlreadyExistsFor": "このタスクにはすでに pull request あり", + "archivedTask": "アーカイブ済みタスク", + "aSharedDocumentForYouAnd": "進め方をあなたと agent で一緒に詰める共有ドキュメント", + "aboutContextWindowSource": "コンテキストウィンドウのソースについて", + "activeBadge": "ACTIVE", + "activeSessionRepositoryTapToSwitch": "アクティブセッション: {{agentLabel}}。リポジトリ: {{repositoryLabel}}。タップで切り替え。", + "activeSessionTapToSwitch": "アクティブセッション: {{agentLabel}}。タップで切り替え。", + "activeSharesForThisSession": "このセッションのアクティブ共有", + "activeTerminalTapToSwitch": "アクティブ端末: {{label}}。タップで切り替え。", + "activity": "アクティビティ", + "add": "追加", + "addAComment": "コメントを追加...", + "addACommentFromTheDiff": "diff かファイル表示からコメント追加して、ここに戻って確認、送信。", + "addAPortThatIsnT": "自動検出されないポートを追加。まだ起動してないサービスに便利。", + "addAgent": "agent を追加", + "addAnOptionalComment": "任意コメントを追加", + "addAnotherRemoteRepository": "別のリモートリポジトリを追加", + "addAnotherRepository": "別のリポジトリを追加", + "addApprover": "+ 承認者を追加", + "addAtLeastOneSource": "少なくとも 1 つソースを追加。", + "addBlocker": "+ ブロッカーを追加", + "addDescription": "説明を追加...", + "addDetailsAboutThisChange": "この変更の詳細を追加...", + "addFolder": "フォルダを追加", + "addFolderExecutorUnknown": "このタスクの executor がフォルダ対応か確認中", + "addLabel": "ラベルを追加", + "addLabels": "+ ラベルを追加", + "addMore": "さらに追加", + "addPanel": "パネルを追加", + "addPortManually": "ポートを手動追加", + "addRemoteRepository": "リモートリポジトリを追加", + "addRepositoriesToWorkspace": "workspace にリポジトリを追加", + "addRepository": "リポジトリを追加", + "addReviewer": "+ レビュアーを追加", + "addShort": "+ 追加", + "addSubIssue": "サブ issue を追加", + "addToWorkspace": "ワークスペースに追加", + "addYourCommentOrInstruction": "コメントか指示を追加...", + "addedRemoved": "{{added}} 追加 · {{removed}} 削除", + "adding": "追加中…", + "advanced": "詳細", + "advancedSettings": "詳細設定", + "workflowAgents": "ワークフローエージェント", + "workflowAgentsTaskOnly": "このタスクだけ固定ステップのプロファイルを置き換える。", + "workflowAgentsAffectedSteps": "ステップ: {{steps}}", + "workflowAgentsUseDefault": "ワークフロープロファイルを使用", + "workflowAgentsReset": "リセット", + "workflowAgentsLoading": "ワークフローステップを読み込み中...", + "workflowAgentsLoadError": "ワークフローステップを読み込めない。", + "workflowAgentsRetry": "再試行", + "workflowAgentsUnavailable": "このプロファイルはもう使えない。別プロファイルを選ぶか、リセットして。", + "afterDuration": " {{duration}}後", + "agent": "エージェント", + "agentBootFailedToResume": "エージェント {{agentName}} の再開に失敗", + "agentBootFailedToStart": "エージェント {{agentName}} の起動に失敗", + "agentBootResumed": "エージェント {{agentName}} を再開", + "agentBootResuming": "エージェント {{agentName}} を再開中", + "agentBootStarted": "エージェント {{agentName}} を起動", + "agentBootStarting": "エージェント {{agentName}} を起動中", + "agentCount_one": "{{count}} エージェント", + "agentCount_other": "{{count}} エージェント", + "agentFallbackName": "エージェント", + "agentHasEncounteredAnError": "エージェントでエラー発生", + "agentImage": "エージェント画像", + "agentIsRunning": "エージェント実行中", + "agentIsStarting": "エージェント起動中", + "agentOutput": "エージェント出力", + "agentPermissionMode": "エージェント権限モード", + "agentPlan": "エージェント計画", + "agentProfile": "エージェントプロファイル", + "agentProfile2": "エージェントプロファイル", + "agentProfileNoLongerExists": "エージェントプロファイルはもう存在しない", + "agentRunning": "エージェント実行中", + "agentSetByWorkflow": "ワークフローで設定されたエージェント", + "agentctl": "Agentctl", + "allChanges": "すべての変更", + "allChangesTitle": "すべての変更", + "allWorkspaceRepositoriesAdded": "ワークスペース内のリポジトリはすべて追加済みです", + "alreadyAdded": "追加済み", + "alsoArchiveSubtasks_one": "サブタスクを{{count}}件もアーカイブする", + "alsoArchiveSubtasks_other": "サブタスクを{{count}}件もアーカイブする", + "alsoDeleteSubtasks_one": "サブタスクを{{count}}件も削除する", + "alsoDeleteSubtasks_other": "サブタスクを{{count}}件も削除する", + "alwaysAllow": "常に許可", + "amend": "修正", + "amendCommitMessage": "コミットメッセージを修正", + "amendCommitMessage2": "コミットメッセージを修正", + "amendMessage": "メッセージを修正", + "amending": "修正中...", + "anEnvironmentIsCreatedWhenYou": "このタスクでセッションを開始すると、環境が作成されます。", + "anErrorOccurred": "エラーが発生しました", + "anUnexpectedErrorOccurred": "予期しないエラーが発生しました", + "andMoreFilesTruncated": "...ほかのファイルもあります(省略されています)", + "annotationArea": "範囲", + "annotationAreaSized": "範囲 {{w}}x{{h}}", + "annotationCount_one": "注釈が{{count}}件", + "annotationCount_other": "注釈が{{count}}件", + "annotationPin": "ピン", + "answer": "回答", + "answeredOfTotal": "{{answeredCount}} / {{total}} 件回答済み", + "anyUncommittedOrUnpushedChangesAre": "未コミットまたは未プッシュの変更は失われます。", + "anyUncommittedOrUnpushedChangesIn": "ワークスペース内の未コミットまたは未プッシュの変更は失われます。", + "anyoneWithThisLinkCanView": "このリンクを知っている人は誰でも、この会話を表示できます。公開する前にプレビューをよく確認してください。公開後、スナップショットはあなたのアカウントの GitHub Gist にアップロードされます。", + "approve": "承認", + "approveAndContinue": "承認して続行", + "approveThisAction": "この操作を承認しますか?", + "approved": "承認済み", + "approvedLowercase": "承認済み", + "approvedThisTask": "{{who}} がこのタスクを承認しました", + "approvedVerb": "承認済み", + "approvers": "承認者", + "archive": "アーカイブ", + "archiveTaskConfirm": "\"{{taskTitle}}\" をアーカイブします。", + "archiveTaskTitle": "タスクをアーカイブしますか?", + "archiveTasksConfirm_one": "{{count}}件のタスクをアーカイブします。", + "archiveTasksConfirm_other": "{{count}}件のタスクをアーカイブします。", + "archiveTasksTitle_one": "{{count}}件のタスクをアーカイブする?", + "archiveTasksTitle_other": "{{count}}件のタスクをアーカイブする?", + "archiveTasks_one": "{{count}}件のタスクをアーカイブ", + "archiveTasks_other": "{{count}}件のタスクをアーカイブ", + "askToMakeChanges": "変更依頼、ファイルを@メンション", + "askToMakeChangesWithCommands": "変更依頼、ファイルを@メンション、/commands を実行", + "assignee": "担当者", + "attachFiles": "ファイルを添付", + "attachment": "添付ファイル", + "attachmentIndexed": "添付ファイル {{index}}", + "attachmentIsTooLarge": "添付ファイルが大きすぎる", + "attachmentLimitReached": "添付上限に達した", + "attachmentPreview": "添付プレビュー", + "attachmentSizeKb": "({{size}} KB)", + "attachmentsCanTotalUpTo": "添付ファイル合計は最大 {{bytes}} まで。", + "authentication": "認証", + "authenticationRequiredLogInBeforeResuming": "認証必要。再開前にログイン", + "authenticationRequiredPleaseLogInVia": "認証必要。ターミナルからログイン", + "autoMarkReviewedOnScroll": "スクロールで自動レビュー済み", + "autoStart": "自動開始", + "automaticColorSource": "自動: {{rule}}。このルール一致中は手動色を非表示。", + "automaticColors": "自動色", + "automaticColorsAddRule": "ルール追加", + "automaticColorsBackToRule": "ルールに戻る", + "automaticColorsCompleteRule": "有効化前にこのルールを完了して。", + "automaticColorsCondition": "条件", + "automaticColorsDimensionExecutorProfile": "実行者プロフィール", + "automaticColorsDimensionOrigin": "起点", + "automaticColorsDimensionPriority": "優先度", + "automaticColorsDimensionRepository": "リポジトリ", + "automaticColorsDimensionTaskState": "タスク状態", + "automaticColorsDimensionWorkflow": "ワークフロー", + "automaticColorsDimensionWorkflowStep": "ワークフローステップ", + "automaticColorsEnable": "ルール有効化", + "automaticColorsEnabled": "自動色", + "automaticColorsFixedColor": "固定色", + "automaticColorsHelp": "タスク表示時と、ワークフローステップ、リポジトリ、ワークフロー、実行者プロフィール、状態、優先度、起点が変わるたびにルール実行。ルール順、出力、有効状態の変更でも色更新。", + "automaticColorsHelpLabel": "自動色が適用されるとき", + "automaticColorsIncomplete": "未完了", + "automaticColorsMoveDown": "ルールを下へ", + "automaticColorsMoveUp": "ルールを上へ移動", + "automaticColorsNoRepositories": "リポジトリなし。", + "automaticColorsOutput": "出力", + "automaticColorsPersonalGlobal": "個人設定。サイドバー表示とワークスペース全体に適用。", + "automaticColorsPrecedence": "先に一致したルールが勝つ。手動色はフォールバック。", + "automaticColorsRefreshRepositories": "リポジトリを更新", + "automaticColorsRemoveRule": "ルールを削除", + "automaticColorsRepositoryError": "一部のリポジトリソースを読み込めなかった。", + "automaticColorsRepositoryLocal": "検出したローカルリポジトリ", + "automaticColorsRepositoryRemote": "リモートリポジトリ", + "automaticColorsRepositoryUnavailable": "対象なし", + "automaticColorsRepositoryWorkspace": "ワークスペースのリポジトリ", + "automaticColorsReorderHandle": "ルール {{number}} を並べ替え", + "automaticColorsReorderable": "並べ替え可能なルール", + "automaticColorsRule": "ルール {{number}}", + "automaticColorsRuleCount_one": "{{count}} ルール", + "automaticColorsRuleCount_other": "{{count}} ルール", + "automaticColorsRuleLimit": "ルールは最大50個まで追加できる。", + "automaticColorsSaveError": "自動色を保存できなかった。", + "manualColorSaveError": "タスク色を保存できなかった。", + "automaticColorsSearchRepositories": "リポジトリを検索", + "automaticColorsSelectRepository": "リポジトリを選択", + "automaticColorsSelectTarget": "対象を選択", + "automaticColorsSummaryOff": "オフ", + "automaticColorsSummaryRules_one": "有効なルール {{count}} 件", + "automaticColorsSummaryRules_other": "有効なルール {{count}} 件", + "automaticColorsTiming": "ルールは既存と新規のサイドバータスクに適用。色はタスク詳細かルール変更で更新。", + "automaticColorsUnavailable": "利用不可", + "automaticColorsUseStepColor": "ステップ色を使う", + "automaticColorsOriginAgentCreated": "エージェント作成", + "automaticColorsOriginAutomationRun": "自動化実行", + "automaticColorsOriginAutomationTask": "自動化タスク", + "automaticColorsOriginKanban": "カンバン", + "automaticColorsOriginManual": "手動", + "automaticColorsOriginOnboarding": "オンボーディング", + "automaticColorsOriginRoutine": "定常", + "availableModes": "利用可能なモード", + "awaitingApprovalFromAgents_one": "{{count}} エージェントの承認待ち", + "awaitingApprovalFromAgents_other": "{{count}} エージェントの承認待ち", + "awaitingUserResponse": "ユーザー応答待ち (pending_id={{pendingId}})", + "back": "戻る", + "backendRejectedSessionRequest": "バックエンドがセッション要求を拒否した。", + "background": "バックグラウンド", + "backgroundWorkIsRunning": "バックグラウンド作業が実行中", + "baseBranch": "ベースブランチ", + "baseBranch2": "ベースブランチ", + "behindCount": "{{behind}}件遅れ", + "binaryFile": "バイナリファイル", + "binaryOrEmptyDiff": "{{path}} -- バイナリまたは空の差分", + "blank": "空白", + "blocked": "ブロック中", + "blockedBy": "ブロック元", + "blocking": "ブロックしている", + "blocks": "ブロックする", + "bothVersionsAreEmpty": "(両方のバージョンは空)", + "branch": "ブランチ", + "branchBasedOn": "<1>{{branch}} ブランチ。<3>{{base}} ベース。", + "branchComparisonAndTaskGitCredentials": "ブランチ比較とタスクの Git 認証情報。", + "branchDetails": "ブランチ詳細", + "branchIsNoLongerAvailable": "ブランチはもう使えない", + "branchName": "ブランチ名", + "browser": "ブラウザ", + "browserPreview": "ブラウザプレビュー", + "buildingPreview": "プレビューをビルド中…", + "byAuthor": "{{author}} による", + "byDefaultTheLocalExecutorUses": "デフォルトでは、ローカル実行器はリポジトリの現在のチェックアウトを使う。別のベースから新しいブランチを作るならクリック。作業ツリーはそのまま。", + "cachedInput": "キャッシュ済み入力", + "cancelAgent": "エージェントをキャンセル", + "cancelLeavesWorkspaceUnchangedDetail": "<0>キャンセルしてもワークスペースは変わらない。 続けると一括は全件成功か全件失敗。どれか1つのソースが失敗したら、新しいソースは1つも付かない。", + "cancelTaskTree": "タスクツリーをキャンセル", + "cancelTree": "ツリーをキャンセル", + "cancelled": "キャンセル済み", + "cancelledTree": "キャンセル済み (ツリー)", + "cancelling": "キャンセル中...", + "cannotMarkDoneAwaitingApprovalFrom": "完了にできない。{{names}} の承認待ち", + "cannotMarkDoneAwaitingApprovals": "完了にできない。承認待ち", + "cannotMarkDoneBeforeFinalWorkflowStep": "完了にできない。先にタスクを最終ワークフローステップへ移動", + "cannotPreviewThisFile": "このファイルはプレビューできない", + "changeGithubIssue": "GitHub issue を変更", + "changes": "変更", + "changesDiscarded": "変更を破棄した", + "changesHiddenBanner_one": "ほかに変更ファイルが{{formattedCount}}件隠れてる。変更セット大きすぎて全部表示できない。", + "changesHiddenBanner_other": "ほかに変更ファイルが{{formattedCount}}件隠れてる。変更セット大きすぎて全部表示できない。", + "chat": "チャット", + "chooseALinkedPullRequestOr": "開くため、リンク済みのプルリクエストかマージリクエスト選んで。開き先は提供元。", + "chooseFromSavedOrDiscoveredRepositories": "保存済みか検出済みのリポジトリから選んで。", + "chooseLocalFolder": "ローカルフォルダ選んで", + "chooseLocalGitRepository": "ローカル Git リポジトリ選んで", + "chooseRepositoriesOrFoldersToMake": "このタスクで使えるようにするリポジトリかフォルダ選んで。", + "clarificationAnswerOverLimit_one": "{{count}} 文字、{{max}} 文字制限超過。", + "clarificationAnswerOverLimit_other": "{{count}} 文字、{{max}} 文字制限超過。", + "clarificationAnswerRuneCount": "{{current}} / {{max}}", + "clarificationExpired": "この質問もう有効じゃない。だから回答は記録されなかった。", + "answerAsNewMessage": "新しいメッセージとして回答", + "closeClarification": "質問を閉じる", + "lateAnswerQuestionLabel": "質問", + "lateAnswerAnswerLabel": "回答", + "lateAnswerContextLabel": "コンテキスト", + "lateAnswerSend": "新しいメッセージとして送信", + "lateAnswerSending": "回答送信中...", + "lateAnswerSent": "回答を新しいメッセージとして送った。", + "lateAnswerQueued": "回答を新しいメッセージとしてキューに入れた。", + "lateAnswerFailed": "新しいメッセージ送れなかった。回答はまだここにある。", + "clarificationResponseFailed": "回答送れなかった。", + "cleanup": "クリーンアップ", + "clearAllAnnotations": "注釈をすべて消す", + "clickAnywhereToStartWriting": "どこでもクリックして書き始める", + "clickRefreshToDetectListeningPorts": "更新をクリックして待受ポート検出して。", + "cloneFromAProviderOrGit": "提供元か Git URL からクローン。", + "close": "閉じる", + "close2": "{{label}}を閉じる", + "closeComposeBoxHelp": "作成ボックス閉じて。中では <1>Esc 押してもいい。CLI エージェントの端末はフォーカス保ったまま。", + "closeGroup": "グループを閉じる", + "closeOthers": "ほかを閉じる", + "closePreview": "プレビューを閉じる", + "closeTerminal": "端末を閉じる?", + "closeTerminal2": "端末を閉じる", + "closingTerminal": "端末を閉じてる", + "cmdEnterToAdd": "⌘+Enterで追加", + "cmdEnterToUpdate": "⌘+Enterで更新", + "codeLanguagePlain": "プレーン", + "collapse": "折りたたむ", + "collapseAll": "すべて折りたたむ", + "collapseLastPrompt": "最後のプロンプトを折りたたむ", + "collapsePlan": "プランを折りたたむ", + "collapseSubtasks": "サブタスクを折りたたむ", + "collapseToolbar": "ツールバーを折りたたむ", + "color": "色", + "colorBlue": "青", + "colorCyan": "シアン", + "colorGreen": "緑", + "colorGray": "グレー", + "colorIndigo": "インディゴ", + "colorOrange": "オレンジ", + "colorPink": "ピンク", + "colorPurple": "紫", + "colorRed": "赤", + "colorYellow": "黄", + "command": "コマンド", + "commandCopied": "コマンドをコピーした", + "commandFailed": "コマンド失敗", + "commandOutputUnavailable": "コマンド出力なし。", + "commandRunning": "コマンド実行中", + "commandSucceeded": "コマンド成功", + "comment": "コメント", + "commentCmdShiftC": "コメント (Cmd+Shift+C)", + "commentCount_one": "{{count}}件のコメント", + "commentCount_other": "{{count}}件のコメント", + "commentOnAgentResponse": "エージェント応答にコメント", + "commentOnSelection": "選択範囲にコメント", + "comments": "コメント", + "commentsOnFiles_one": "{{files}}に{{count}}件のコメント", + "commentsOnFiles_other": "{{files}}に{{count}}件のコメント", + "commit": "コミット", + "commitChanges": "変更をコミット", + "commitChangesTitle": "変更をコミット", + "commits": "コミット", + "committed": "コミット済み", + "committingEllipsis": "コミット中...", + "compare": "比較", + "compareRevisions": "v{{before}} と v{{after}} を比較", + "compareWithCurrent": "現在と比較", + "compareWithPrevious": "前回と比較", + "comparingAgainstLabel": "比較対象:", + "comparisonTargetLabel": "比較対象", + "comparisonTargetUnavailable": "比較対象なし", + "comparisonTargetUnavailableDescription": "{{target}} との比較は利用不可。Kandev は同名のローカルブランチを代替として使わない。", + "comparisonTargetUnknown": "設定済みリポジトリ対象", + "completed": "完了", + "completedSuccessfully": "{{operationName}} が正常に完了", + "configureCredentials": "認証情報を設定", + "connectAHealthySentryInstanceIn": "問題リンク用に、設定 → Integrations → Sentry で正常な Sentry インスタンスを接続。", + "connectProviderBanner": "リポジトリから選ぶには、<2>設定 でソース管理プロバイダを接続。", + "connectingTerminal": "ターミナル接続中...", + "container": "コンテナ", + "contentMarkdownSupported": "内容 (markdown 対応)", + "context": "コンテキスト", + "contextFieldLabel": "コンテキスト", + "contextWindow": "コンテキストウィンドウ", + "contextWindowNotMeasured": "コンテキストウィンドウ: 使用量未計測", + "contextWindowUsagePendingExplain": "使用データは最初の完了ターン後に表示。", + "contextWindowUsagePendingPercent": "N/A%", + "contextWindowUsagePendingTokens": "N/A / {{size}} トークン", + "contextWindowUsed": "コンテキストウィンドウ: {{percent}}% 使用済み", + "contextWindowUsedTokens": "{{used}} / {{size}} トークン", + "control": "Control", + "controlC": "Control C", + "controlD": "Control D", + "copied": "コピー完了!", + "copied2": "コピー済み", + "copied3": "{{label}} をコピー済み", + "copy": "コピー", + "copy2": "{{label}} をコピー", + "copyAnnotations": "注釈をコピー", + "copyAnnotationsToClipboard": "注釈をクリップボードにコピー", + "copyCommand": "コマンドをコピー", + "copyIdentifier": "識別子をコピー", + "copyInitialPrompt": "初期プロンプトをコピー", + "copyMessage": "メッセージをコピー", + "copyMessageToClipboard": "メッセージをクリップボードにコピー", + "copyPath": "パスをコピー", + "copyToClipboard": "クリップボードにコピー", + "copyUrl": "URLをコピー", + "copyWorkspacePath": "ワークスペースのパスをコピー", + "couldNotAddSources": "ソースを追加できなかった。再試行用に入力は残ってる。", + "couldNotLoadRepositories": "リポジトリを読み込めなかった: {{message}}", + "couldNotResolveRemoteRepository": "リモートリポジトリを解決できなかった: {{message}}", + "couldNotSaveStatusBarOrder": "ステータスバー順序を保存できなかった", + "couldnTStartASession": "セッションを開始できなかった", + "create": "作成", + "createANewBranch": "新しいブランチを作成", + "createAsDraft": "ドラフトとして作成", + "createChangeRequest": "{{shortName}}を作成", + "createChangeRequestLong": "{{longName}}を作成", + "createFailed": "{{shortName}}の作成に失敗", + "createNewRepository": "新しいリポジトリを作成", + "createNewTask": "新しいタスクを作成", + "createNewWorkspace": "新しいワークスペースを作成", + "createOnly": "作成のみ", + "createSession": "セッションを作成", + "createSubtask": "サブタスクを作成", + "createWithoutStartingAgent": "エージェントを起動せずに作成", + "created": "作成済み", + "created2": "{{longName}}を作成済み", + "createdBy": "作成者", + "createdSuccessfully": "{{longName}}を正常に作成した", + "creatingEllipsis": "作成中...", + "creatingFrom": "<4>{{displayBranch}} から {{shortName}}を作成中", + "creatingFromTo": "<4>{{displayBranch}} から <7>{{baseBranch}} へ {{shortName}}を作成中", + "credentialsAvailableInExecutor": "選択した実行環境で認証情報を使用できる", + "ctrl": "Ctrl", + "current": "現在の", + "current2": "現在", + "currentStep": "現在のステップ", + "workflowStepProgressMoving": "このステップへ移動中", + "workflowStepProgressPreparing": "エージェントを準備中", + "workflowStepProgressStarting": "エージェントを起動中", + "workflowStepProgressCancelling": "エージェントを停止中", + "workflowStepProgressRunning": "エージェント実行中", + "workflowStepProgressWaiting": "入力待ち", + "workflowStepProgressIdle": "エージェントは待機中", + "workflowStepProgressNotStarted": "未開始", + "workflowStepProgressCompleted": "完了", + "workflowStepProgressFailed": "エージェントが失敗しました", + "workflowStepProgressCancelled": "エージェントが停止しました", + "customPrompt": "カスタムプロンプト", + "customPromptNamed": "カスタムプロンプト: {{name}}", + "cwd": "cwd:", + "dedicatedPortTunnelAppIsServed": "専用ポートトンネル。アプリは / で配信されているため、アセットとルーティングは正しく動作します。", + "defaultSubtaskTitle": "{{parent}} / サブタスク {{index}}", + "delete": "削除", + "delete2": "{{name}} を削除", + "deleteAgent": "エージェントを削除", + "deleteComment": "コメントを削除", + "deleteFileConfirm": "<1>{{name}} を完全に削除します。この操作は元に戻せません。", + "deleteFolderConfirm": "<1>{{name}} を完全に削除します。この操作は元に戻せません。", + "deleteFolderTitle": "フォルダを削除しますか?", + "deleteFolderWithFilesConfirm_one": "<1>{{name}} と、その中の <4>{{count}} 個のファイルを完全に削除します。この操作は元に戻せません。", + "deleteFolderWithFilesConfirm_other": "<1>{{name}} と、その中の <4>{{count}} 個のファイルを完全に削除します。この操作は元に戻せません。", + "deleteItemsLabel_one": "{{count}} 件を削除", + "deleteItemsLabel_other": "{{count}} 件を削除", + "deleteItemsTitle_one": "{{count}} 件を削除しますか?", + "deleteItemsTitle_other": "{{count}} 件を削除しますか?", + "deleteLayoutConfirm": "{{name}} を削除しますか?", + "deleteSession": "セッションを削除しますか?", + "deleteTaskConfirm": "「{{taskTitle}}」を削除します。この操作は元に戻せません。", + "deletePreflightChecking": "ワークスペースの変更を確認しています...", + "deletePreflightError": "ワークスペースの変更を確認できませんでした。もう一度お試しください。", + "retryDeletePreflight": "再試行", + "deleteDirtyWorktreeTitle": "タスクの削除には確認が必要です", + "deleteDirtyWorktreeDescription": "タスクは表示されたままになります。ローカルの変更を確認してから、破棄を選択してもう一度お試しください。", + "deleteTaskTitle": "タスクを削除", + "deleteTasksConfirm_one": "{{count}} 件のタスクを削除します。この操作は元に戻せません。", + "deleteTasksConfirm_other": "{{count}} 件のタスクを削除します。この操作は元に戻せません。", + "deleteTasksCount_one": "{{count}} 件のタスクを削除", + "deleteTasksCount_other": "{{count}} 件のタスクを削除", + "deleteTasksTitle_one": "{{count}} 件のタスクを削除", + "deleteTasksTitle_other": "{{count}} 件のタスクを削除", + "deletesTheCurrentTaskEnvironmentContainer": "現在のタスク環境 (コンテナー、サンドボックス、または worktree) を削除し、次回の実行時に新しい環境を強制的に作成します。", + "deleting": "削除しています...", + "discardWorktreeChanges": "追跡済みおよび追跡外の変更を完全に破棄する", + "discardWorktreeChangesDescription": "タスクのワークツリーとそのローカル変更は削除されます。", + "deliverTheseCommentsToTheCli": "これらのコメントを CLI エージェントの stdin に 1 つのメッセージとして送信してください。チャットボックスを開く必要はありません。エージェントは、入力メッセージに前置された場合と同じ Markdown を受け取ります。", + "deny": "拒否", + "dependencies": "依存関係", + "dependencyBlockedBy": "次によりブロックされています", + "dependencyBlocks": "ブロック対象", + "dependencyChainHalted": "このタスクが依存している別のタスクに失敗しました。依存関係が解消されるか削除されるまで、連鎖は停止します。", + "dependencyChangeRequestAria": "リンクされたプルリクエストまたはマージリクエスト #{{number}}", + "dependencyChangeRequestLabel": "#{{number}}", + "dependencyChipLabel": "タスクの依存関係", + "dependencyCycleError": "依存関係の循環: {{cycle}}", + "dependencyCountBlockedBy_one": "{{count}} 個のブロッカー", + "dependencyCountBlockedBy_other": "{{count}} 個のブロッカー", + "dependencyCountBlocks_one": "{{count}} 件をブロック", + "dependencyCountBlocks_other": "{{count}} 件をブロック", + "dependencyCount_one": "{{count}} 件の依存関係", + "dependencyCount_other": "{{count}} 件の依存関係", + "dependencyInfo": "このタスクは、選択されたすべてのタスクが正常に完了するまで待機します。エージェントを開始すると、すべての依存関係が解決された時点で自動的に開始されます。", + "dependencyInfoLabel": "タスクの依存関係について", + "dependencyUpdateFailed": "依存関係の更新に失敗しました。", + "dependsOn": "依存先", + "describeWhatNeedsToChange": "何を変更する必要があるかを説明してください", + "describeWhatYouWantTheAgent": "エージェントにしてほしいことを説明してください...(保存済みプロンプトを挿入するには @)", + "describeYourChanges": "変更内容を説明してください...", + "description": "説明", + "description2": "説明", + "descriptionRunningNote": "このタスクではセッションが実行中です。今保存しても中断されません。", + "destroyTerminalConfirm": "\"{{label}}\" を破棄しますか? これにより PTY が終了し、削除されます。", + "detach": "切り離す", + "detachFromParent": "親から切り離す", + "detachTaskFromParent": "タスクを親から切り離しますか?", + "detachWillBecomeTopLevel": "\"{{taskTitle}}\" は最上位タスクになります。ワークフロー、サブタスク、状態は変更されません。", + "detachingChangesTheHierarchyOnlyAccess": "切り離しは階層のみを変更します。共有ワークスペースへのアクセスは変更されません。", + "details": "詳細", + "detected": "検出済み", + "devServer": "開発サーバー", + "diff": "差分", + "diffSideNew": "新規", + "diffSideOld": "旧", + "discard": "破棄", + "discardAllChangesPermanentlyThisCannot": "全変更を永久に破棄。元に戻せない。", + "discardAllChangesToFiles_one": "{{count}} ファイルの全変更を永久に破棄。元に戻せない。", + "discardAllChangesToFiles_other": "{{count}} ファイルの全変更を永久に破棄。元に戻せない。", + "discardChanges": "変更を破棄?", + "discardChanges2": "変更を破棄", + "discardChangesToFile": "<2>{{file}} の全変更を永久に破棄。元に戻せない。", + "discardCount": "{{selectionCount}} を破棄", + "discardDescriptionBody": "説明への変更、未保存。破棄する?", + "discardDescriptionTitle": "説明変更を破棄?", + "discardFailed": "破棄失敗", + "dismiss": "閉じる", + "displayNameOptional": "表示名(任意)", + "documentCount_one": "{{count}} 件のドキュメント", + "documentCount_other": "{{count}} 件のドキュメント", + "documentDeleted": "ドキュメント削除", + "documentSaved": "ドキュメント保存", + "documentSummaryEmpty": "空", + "documentSummary_one": "{{count}} 行 · {{chars}} 文字", + "documentSummary_other": "{{count}} 行 · {{chars}} 文字", + "documents": "ドキュメント", + "documentsAvailable": "利用可能なドキュメント", + "done": "完了", + "doubleClickToEditOrPress": "ダブルクリックで編集(Enterでも可)", + "doubleClickToKeepThisTab": "ダブルクリックでこのタブを開いたままにする", + "download": "ダウンロード", + "downloadFullMessage": "全文をダウンロード", + "draftCreated": "下書き {{longName}} 作成", + "dropFilesHere": "ここにファイルをドロップ", + "duration": "所要時間", + "durationValue": "所要時間: {{duration}}", + "earlierUpdates_one": "前の更新({{count}})", + "earlierUpdates_other": "前の更新({{count}})", + "editBranch": "ブランチ {{branch}} を編集", + "editBranch2": "ブランチを編集", + "editComment": "コメントを編集", + "editMarkdownComment": "Markdown コメントを編集", + "editSummaryLines_one": "{{summary}}({{count}} 行)", + "editSummaryLines_other": "{{summary}}({{count}} 行)", + "editTaskPrompt": "タスクプロンプトを編集", + "editTheMessageForTheMost": "最新コミットのメッセージを編集。", + "empty": "(空)", + "emptyGroup": "空グループ", + "emptyPlan": "(空のプラン)", + "enhancedPromptApplied": "拡張プロンプト適用済み。", + "enhancedPromptInserted": "拡張プロンプト挿入済み。", + "enterAUrlAboveOrStart": "上に URL 入力、または dev server 起動", + "enterAValidPort165535": "有効なポート(1-65535)を入力、または空欄でランダム", + "enterAValidPort1655352": "有効なポート(1-65535)を入力", + "enterCommitMessage": "コミットメッセージを入力...", + "enterGithubIssueUrlOrNumber": "GitHub の issue URL か番号を入力。", + "enterGithubPrUrlOrNumber": "GitHub の pull request URL か番号を入力。", + "enterInspectMode": "inspect mode を入力", + "enterMessageContent": "メッセージ内容を入力...", + "enterNewCommitMessage": "新しいコミットメッセージを入力...", + "enterRepositoryUrl": "GitHub, GitLab, Azure DevOps のリポジトリ URL を入力。", + "environment": "環境 {{label}}", + "environmentPreparationFailed": "環境準備失敗", + "environmentPrepared": "環境準備完了", + "environmentPreparedOnFreshSandbox": "新しい sandbox で環境準備完了", + "environmentPreparedWithWarnings": "警告ありで環境準備完了", + "environmentReset": "環境リセット完了", + "environmentResetFailed": "リセット失敗: {{error}}", + "environmentSetupFailed": "環境セットアップ失敗", + "environmentSetupFinishedWithErrors": "環境セットアップ完了、エラーあり", + "environmentStateCurrent": "現在の状態: {{state}}", + "error": "エラー", + "errorData": "エラーデータ", + "eventCount_one": "{{count}} 件のイベント", + "eventCount_other": "{{count}} 件のイベント", + "executor2": "Executor", + "executorEnvironmentIsUnavailable": "Executor 環境は利用不可。", + "executorEnvironmentRunning": "Executor 環境実行中", + "executorEnvironmentStopped": "Executor 環境停止済み", + "executorHintDocker": "選択したベースブランチから Docker コンテナを作成し、task branch でチェックアウト。", + "executorHintLocal": "agent はリポジトリ上で直接実行。", + "executorHintWorktreeMulti": "各リポジトリ用の git worktree を親フォルダ内に作成。agent はその親フォルダで実行し、全 worktree を横並びで確認可能。", + "executorHintWorktreeSingle": "ベースブランチから git worktree を作成。", + "executorProfile2": "Executor プロファイル", + "executorSettings": "Executor 設定", + "executorSettingsPreparing": "実行設定、環境を準備しています", + "executorSettingsWithStatus": "実行設定、環境は{{status}}", + "executorTypeLocalDocker": "ローカル Docker", + "executorTypeLocalWorktree": "ローカル (worktree)", + "executorTypeRemoteDocker": "リモート Docker", + "executorTypeSpritesSandbox": "Sprites サンドボックス", + "executorTypeUnknown": "不明な実行環境", + "exitCodeShell": "終了コード {{exitCode}}", + "exitCodeUnavailable": "終了コードは利用できません", + "exitCodeValue": "終了コード: {{exitCode}}", + "exitInspectMode": "終了インスペクトモード", + "expandLastPrompt": "最後のプロンプトを展開", + "expandPlan": "プランを展開", + "expandReview": "レビューを展開", + "expandSubtasks": "サブタスクを展開", + "expired": "期限切れ", + "failed": "失敗しました", + "failed2": "{{operationName}} に失敗しました", + "failedAtStep": "失敗した箇所: {{step}}", + "failedToArchiveTask": "タスクのアーカイブに失敗しました", + "failedToChangeCompareBranch": "比較ブランチの変更に失敗しました", + "failedToChangeModel": "モデルの変更に失敗しました", + "failedToCloseTerminal": "ターミナルを閉じることに失敗しました", + "failedToDeleteDocument": "ドキュメントの削除に失敗しました", + "failedToDeleteLayout": "レイアウトの削除に失敗しました", + "failedToDiscardChanges": "変更の破棄に失敗しました", + "failedToGenerateContent": "コンテンツの生成に失敗しました", + "failedToLinkGithubIssue": "GitHub issue のリンクに失敗しました。", + "failedToLinkGithubPullRequest": "GitHub pull request のリンクに失敗しました。", + "failedToLinkTarget": "{{target}} のリンクに失敗しました。", + "failedToLoadDocuments": "ドキュメントの読み込みに失敗しました", + "failedToLoadDependencies": "依存関係の読み込みに失敗しました。", + "failedToLoadDependencyCandidates": "依存候補の読み込みに失敗しました。", + "failedToLoadPreview": "プレビューの読み込みに失敗しました。", + "htmlPreview": "HTML プレビュー", + "htmlPreviewError": "HTML プレビューを表示できません。", + "htmlPreviewLoading": "HTML プレビューを読み込んでいます...", + "htmlPreviewPublishFailed": "HTML プレビューを開けませんでした。もう一度お試しください。", + "htmlPreviewTooLarge": "この HTML バッファーは大きすぎるためプレビューできません。コードを表示して、より小さいファイルで再試行してください。", + "htmlPreviewTrustedCode": "プレビューを実行すると、ワークスペースのコードが Browser パネルの機能で実行されます。信頼できるファイルのみをプレビューしてください。", + "htmlPreviewUnavailable": "HTML プレビューセッションは利用不可。タスクセッション確認して再試行。", + "refreshHtmlPreview": "HTML プレビュー更新", + "failedToLoadRevision": "リビジョン読み込み失敗", + "failedToLoadRevisionContent": "リビジョン内容読み込み失敗", + "failedToOpenFile": "ファイルを開けない", + "failedToPublishShare": "共有の公開失敗。", + "failedToRead": "{{name}} の読み取り失敗", + "failedToRenameBranch": "ブランチ名変更失敗", + "failedToRenameItem": "項目名変更失敗", + "failedToRenameTask": "タスク名変更失敗", + "failedToRestorePlan": "プラン復元失敗", + "failedToRestoreWorkspace": "ワークスペース復元失敗", + "failedToResumeSession": "セッション再開失敗", + "failedToRevokeShare": "共有の取り消し失敗。", + "failedToSaveDocument": "ドキュメント保存失敗", + "failedToSaveLayout": "レイアウト保存失敗", + "failedToSendComment": "コメント送信失敗", + "failedToSendComments": "コメント送信失敗", + "failedToSendMessage": "メッセージ送信失敗", + "failedToStartTunnel": "トンネル開始失敗: {{error}}", + "failedToStartVsCode": "VS Code 起動失敗", + "failedToStopTunnel": "トンネル停止失敗: {{error}}", + "failedToUnarchiveTask": "タスクのアーカイブ解除失敗", + "failedToUnlinkGithubIssue": "GitHub issue のリンク解除失敗。", + "failedToUpload": "{{name}} のアップロード失敗", + "file": "ファイル", + "fileChangesTitle": "ファイル変更", + "fileCountLabel_one": "{{count}} ファイル", + "fileCountLabel_other": "{{count}} ファイル", + "fileNamesCannotContainPathSeparators": "ファイル名にパス区切り文字は入れられない", + "filename": "ファイル名...", + "files": "ファイル", + "filesChanged_one": "<0>{{count}} ファイル変更", + "filesChanged_other": "<0>{{count}} ファイル変更", + "filesReviewedCount": "{{reviewedCount}} / {{totalFileCount}} ファイル確認済み", + "filterBranches": "ブランチを絞り込み…", + "filterDimensionArchived": "アーカイブ済み", + "filterDimensionExecutorType": "実行者タイプ", + "filterDimensionHasDiff": "差分あり", + "filterDimensionHasPr": "PR あり", + "filterDimensionIssueWatch": "課題ウォッチ", + "filterDimensionPrReview": "PRレビュー", + "filterDimensionRepository": "リポジトリ", + "filterDimensionState": "状態", + "filterDimensionTitle": "タイトル", + "filterDimensionWorkflow": "ワークフロー", + "filterDimensionWorkflowStep": "ワークフローステップ", + "filterOpContains": "含む", + "filterOpDoesNotContain": "含まない", + "filterOpHide": "非表示", + "filterOpIn": "に含まれる", + "filterOpIs": "である", + "filterOpIsNot": "でない", + "filterOpNotIn": "に含まれない", + "filterOpShow": "表示", + "filterStateBacklog": "バックログ", + "filterStateInProgress": "進行中", + "filterStateReview": "レビュー", + "filterTitlePlaceholder": "部分一致...", + "filters": "フィルター", + "fingerprint": "フィンガープリント", + "fix": "修正", + "fixTheMarkedSources": "追加前にマーク済みソースを修正してください。", + "folder": "フォルダ", + "folderDisplayName": "フォルダ表示名", + "forcePush": "強制プッシュ", + "forkANewBranchFromA": "ベースから新規ブランチをフォークする。無効にすると現在のチェックアウトを使う", + "forkANewBranchFromA2": "現在のチェックアウトを使わず、ベースから新規ブランチをフォークする", + "forkModeANewBranchWill": "フォークモード: エージェント実行前に、選択したベースから新規ブランチを作成する。クリックで無効化し、代わりにリポジトリの現在のチェックアウトを使う。", + "foundFiles_one": "{{count}}ファイルを見つけた", + "foundFiles_other": "{{count}}ファイルを見つけた", + "freshBranchTooltip": "選択したベースから新規ブランチを作成する。ローカルクローン内の未コミット変更は破棄される。ある場合は確認を求める。", + "fromAgent": "エージェントから", + "fromAgentInTask": "タスク<1>「{{fullTitle}}」のエージェントから", + "fromBranch": "{{branch}} から", + "fromSessionInTask": "タスク<3>「{{fullTitle}}」のセッション<1>「{{sessionName}}」から", + "fromTask": "{{title}} から", + "fullImpactDetails": "影響の詳細をすべて表示", + "fullSize": "フルサイズ {{alt}}", + "generatingSummary": "要約を生成中...", + "generationFailed": "生成失敗", + "gitActions": "Git 操作", + "gitPollMode": "Git ポーリング: {{mode}} ({{label}})", + "githubIssue": "GitHubのIssue", + "githubIssue2": "GitHubのIssue", + "githubIssueLinked": "GitHub issue 連携済み", + "githubIssueNumbered": "GitHub の Issue #{{number}}", + "githubIssueRefPlaceholder": "#1470 または {{example}}", + "githubIssueUnlinked": "GitHub issue 未連携", + "githubPrRefPlaceholder": "#1471 または {{example}}", + "githubPullRequest": "GitHub プルリクエスト", + "githubPullRequestLinked": "GitHub pull request 連携済み", + "gitlabMergeRequest": "GitLab マージリクエスト", + "goToNextMessage": "次のメッセージへ", + "goToPreviousMessage": "前のメッセージへ", + "groupBy": "グループ化", + "groupExecutorType": "実行タイプ", + "groupExecutorTypeDescription": "タスクを実行タイプで分ける。", + "groupNone": "なし", + "groupNoneDescription": "全タスクを 1 つの一覧にまとめる。", + "groupRepository": "リポジトリ", + "groupRepositoryDescription": "タスクをリポジトリ別に分ける。", + "groupState": "状態", + "groupStateDescription": "タスクを状態別に分ける。", + "groupStatusRateLimited": "一時的にレート制限中", + "groupStatusTimeout": "検索タイムアウト", + "groupStatusUnauthorized": "サインイン必要", + "groupStatusUnsupportedScope": "このワークスペースでは利用不可", + "groupStatusUpstreamError": "プロバイダ利用不可", + "groupWorkflow": "ワークフロー", + "groupWorkflowDescription": "タスクをワークフロー別に分ける。", + "groupWorkflowStep": "ワークフローステップ", + "groupWorkflowStepDescription": "タスクをワークフローステップ別に分ける。", + "handOffToTarget": "<1>{{label}} に引き継ぐ", + "handoff": "引き継ぎ", + "hardReset": "ハードリセット", + "helpsPreserveCommittedWorkUncommittedChanges": "コミット済み作業の保持に役立つ。未コミット変更はプッシュ不可。", + "hiddenMessagesInPreview_one": "… このプレビューでさらに {{count}} 件のメッセージ非表示。共有には含まれる …", + "hiddenMessagesInPreview_other": "… このプレビューでさらに {{count}} 件のメッセージ非表示。共有には含まれる …", + "hideCommandOutput": "コマンド出力を非表示", + "hideDebugInfo": "デバッグ情報を非表示", + "hideDetails": "詳細を非表示", + "hideErrorDetails": "エラー詳細を非表示: {{displayLabel}}", + "hidePreparationDetails": "準備詳細を非表示", + "hidePreviousAgentError": "前回のエラーを非表示", + "hideRightPanel": "右パネルを非表示", + "hideRightPane": "右ペインを非表示", + "hideRightPanels": "右パネルを非表示", + "rightPaneUnavailable": "非表示にする独立した右ペインなし", + "rightPaneUnavailableWhileMaximized": "パネル最大化中は右ペイン利用不可", + "rightPanelsUnavailableWhileMaximized": "パネル最大化中は右パネル利用不可", + "hideSidebar": "サイドバーを非表示", + "hideTheCommentListTheComments": "コメント一覧を非表示。コメントはキューに残り、次回送信時にそのまま送られる(ここでもチャット欄からでも)。", + "host": "ホスト", + "iUnderstandAnyUncommittedChangesWill": "未コミット変更は失われるのを了承済み。", + "image": "画像", + "imagePreview": "画像プレビュー", + "imageWithSize": "画像 ({{bytes}})", + "implement": "実装", + "implementInFreshAgent": "新しいエージェントで実装", + "implementThePlanInThisSession": "このセッションで計画を実行する", + "includeThePlanAsContext": "計画をコンテキストとして含める", + "inheritParentWorkspace": "親ワークスペースを継承する", + "inputTokens": "入力トークン", + "inspectClickToPinOrDrag": "検査: クリックでピン留め、またはドラッグしてプレビュー内の領域を選択", + "inspectingClickToPin": "検査中 - クリックでピン留め、ドラッグで領域を選択、Escで終了", + "invalidName": "名前が無効です", + "isTheMaximumFileSizeIs": "{{name}}は{{size}}です。最大ファイルサイズは{{maxSize}}です。", + "isolatedWorktreeAt": "<1>{{path}} にある分離された worktree", + "issue": "Issue", + "jiraTicket": "Jira チケット", + "jiraTicketLinked": "Jira チケットがリンクされました", + "jiraTicketPlaceholder": "PROJ-123 またはチケットのURLを貼り付けてください", + "jiraTicketValidationHint": "Jira チケットのURLまたはキー(PROJ-123)を貼り付けてください。", + "kandevAskUserQuestion": "Kandev: ユーザーに質問する", + "kandevCreateTask": "Kandev: タスクを作成", + "kandevCreateTaskPlan": "Kandev: タスク計画を作成", + "kandevDeleteTaskPlan": "Kandev: タスク計画を削除", + "kandevGetTaskConversation": "Kandev: タスクの会話を取得", + "kandevGetTaskDocument": "Kandev: タスク文書を取得", + "kandevGetTaskPlan": "Kandev: タスク計画を取得", + "kandevListAgents": "Kandev: エージェントを一覧表示", + "kandevListExecutorProfiles": "Kandev: 実行プロファイルを一覧表示", + "kandevListRelatedTasks": "Kandev: 関連タスクを一覧表示", + "kandevListTaskDocuments": "Kandev: タスク文書を一覧表示", + "kandevListTasks": "Kandev: タスクを一覧表示", + "kandevListWorkflowSteps": "Kandev: ワークフローステップを一覧表示", + "kandevListWorkflows": "Kandev: ワークフローを一覧表示", + "kandevListWorkspaces": "Kandev: ワークスペースを一覧表示", + "kandevMessageTask": "Kandev: タスクにメッセージを送信", + "kandevMoveTask": "Kandev: タスクを移動", + "kandevUpdateAvailable": "Kandev の更新があります", + "kandevUpdateTask": "Kandev: タスクを更新", + "kandevUpdateTaskPlan": "Kandev: タスク計画を更新", + "kandevWriteTaskDocument": "Kandev: タスク文書を書く", + "keepEditing": "編集を続ける", + "keepOpen": "開いたままにする", + "keepRunning": "実行を継続する", + "keyAndContentAreRequired": "キーと内容は必須です", + "keyArrowDown": "下矢印", + "keyArrowLeft": "左矢印", + "keyArrowRight": "右矢印", + "keyArrowUp": "上矢印", + "keyDash": "ダッシュ", + "keyEGPlanNotes": "キー(例: 計画、メモ)", + "keyEnd": "End", + "keyEscape": "Escape", + "keyHome": "Home", + "keyPageDown": "Page Down", + "keyPageUp": "Page Up", + "keyPipe": "パイプ", + "keySlash": "スラッシュ", + "keyTab": "Tab", + "keyTilde": "チルダ", + "keyUnderscore": "アンダースコア", + "labelAlreadyExists": "ラベルはすでに存在", + "labelColor": "ラベル色", + "labelName": "ラベル名", + "labels": "ラベル", + "layoutPresets": "レイアウトプリセット", + "lineLevelDiffBetweenTheTwo": "選択した2つのバージョンの行単位差分。", + "lineNumber": "行 {{line}}", + "lineRange": "{{start}}行目-{{end}}行目", + "linearIssue": "Linear issue", + "linearIssueLinked": "Linear issue をリンク済み", + "linearIssuePlaceholder": "ENG-123 または issue URL を貼り付け", + "linearIssueValidationHint": "Linear issue の URL か識別子(ENG-123)を貼り付け。", + "link": "リンク", + "linkGithubIssue": "GitHub issue をリンク", + "linkGithubPullRequest": "GitHub pull request をリンク", + "linkJiraTicket": "Jira ticket をリンク", + "linkJiraTicketDescription": "このタスクに Jira ticket key か URL を使う。", + "linkLinearIssue": "Linear issue をリンク", + "linkLinearIssueDescription": "このタスクに Linear issue の識別子か URL を使う。", + "linkSentryIssue": "Sentry issue をリンク", + "linkSentryIssueDescription": "このタスクに Sentry short ID か URL を使う。", + "linkedIssue": "リンク済み issue", + "listeningPorts": "待受ポート", + "liveUpdateConsequenceSessionAndProcesses": "<0>セッションとプロセス: Kandev が workspace を再スキャンしても、agent と実行中の workspace プロセスは続く。task、session、task state、messages、plan、attached sources、model、mode はそのまま。", + "liveUpdateConsequenceWorkspace": "<0>workspace: repository は current remote workspace 下に top-level entry として名前付きで clone される。agent の作業ディレクトリは変わらず、既存ファイルと Git 変更は移動も破棄もされない。", + "loadOlderMessages": "古いメッセージを読み込む", + "loading": "読み込み中...", + "loading2": "読み込み中…", + "loadingAgentProfiles": "エージェントプロファイルを読み込み中...", + "loadingAgents": "エージェントを読み込み中…", + "loadingBranches": "ブランチを読み込み中…", + "loadingBranches2": "ブランチを読み込み中...", + "loadingBranches3": "ブランチを読み込み中…", + "loadingChangedFiles": "変更ファイルを読み込み中...", + "loadingChanges": "変更を読み込み中...", + "loadingCommandOutput": "コマンド出力を読み込み中...", + "loadingCommit": "コミットを読み込み中...", + "loadingConversation": "会話を読み込み中...", + "loadingDependencies": "依存関係を読み込み中...", + "loadingEditor": "エディタを読み込み中...", + "loadingFile": "ファイルを読み込み中...", + "loadingFiles": "ファイルを読み込み中...", + "loadingOlder": "古い項目を読み込み中…", + "loadingOlderMessages": "古いメッセージを読み込み中...", + "loadingPlan": "プランを読み込み中...", + "loadingPreview": "プレビューを読み込み中...", + "loadingProfiles": "プロファイルを読み込み中...", + "loadingRepositories": "リポジトリを読み込み中…", + "loadingSessions": "セッションを読み込み中…", + "loadingStatus": "ステータスを読み込み中...", + "localCommitNotYetPushed": "ローカルコミット(まだプッシュされていない)", + "localCheckoutCommit": "ローカルチェックアウトコミット", + "localCheckoutCommits": "ローカルチェックアウトコミット", + "localGitRepository": "ローカルGitリポジトリ", + "login": "ログイン", + "loginRequired": "ログイン必要", + "manual": "手動", + "markAsFavorite": "お気に入りにする", + "markMessageAsFavorite": "メッセージをお気に入りにする", + "maximize": "最大化", + "mcpConnectionStatus": "MCP接続ステータス", + "mcpPolicyLabel": "mcp:", + "mcpServers": "MCPサーバー", + "mcpExplorerTitle": "MCPサーバー", + "mcpExplorerDescription": "MCP接続ステータスと利用可能ツールを確認する。", + "mcpServerList": "サーバー", + "mcpStatusActive": "アクティブ", + "mcpStatusConnected": "接続済み", + "mcpStatusDelivered": "配信済み, 接続未検証", + "mcpStatusFailed": "失敗", + "mcpStatusFiltered": "フィルタ済み", + "mcpStatusUnavailable": "利用不可", + "mcpStatusUnknown": "不明", + "mcpToolCatalog": "ツールカタログ", + "mcpToolCatalogUnavailable": "Kandev ツールカタログは利用不可。", + "mcpThirdPartyCatalogUnavailable": "Kandev はこのサーバーのツールを検査しない。", + "mcpToolCount_one": "ツール: {{count}}", + "mcpToolCount_other": "ツール: {{count}}", + "mcpStoredToolCount_one": "保存済みツール {{count}} 件を表示中", + "mcpStoredToolCount_other": "保存済みツール {{count}} 件を表示中", + "mcpNoTools": "ツールは報告されなかった。", + "mcpBackToServers": "サーバーへ戻る", + "mcpClose": "閉じる", + "mcpTransport": "トランスポート", + "mcpTarget": "ターゲット", + "mcpConnectionId": "接続 ID", + "mcpLastObserved": "最後に確認されたツール", + "mcpToolCatalogTruncated_one": "カタログは途中まで。合計ツール数: {{count}}.", + "mcpToolCatalogTruncated_other": "カタログは途中まで。合計ツール数: {{count}}.", + "mcpToolCatalogNotLoaded": "ツールカタログはまだ読み込まれていない。", + "mcpNoServers": "MCP サーバーは未設定。", + "mcpConnectionDetails": "接続詳細", + "mcpBackToTools": "ツールへ戻る", + "mcpArguments": "引数", + "mcpRequired": "必須", + "mcpOptional": "任意", + "mcpNoArguments": "引数なし", + "mcpSchemaTooLarge": "スキーマ大きすぎて表示不可", + "mcpJsonSchema": "JSON スキーマ", + "mcpTokenEstimate_one": "約 {{count}} トークン", + "mcpTokenEstimate_other": "約 {{count}} トークン", + "mcpTokenEstimateHelp": "o200k_base で推定。実使用量はモデルとプロバイダーで変わる。", + "mcpDescription": "説明", + "mcpNoDescription": "説明は報告されなかった。", + "mentionTasksFilesPrompts": "タスク、ファイル、プロンプトに言及", + "merge": "マージ", + "mergeRequest": "マージリクエスト !{{mriid}}", + "mergeRequestLabel": "マージリクエスト", + "messageCommentCount_one": "{{count}} 件のメッセージコメント", + "messageCommentCount_other": "{{count}} 件のメッセージコメント", + "messageCount_one": "{{count}} 件のメッセージ", + "messageCount_other": "{{count}} 件のメッセージ", + "messageMetadata": "メッセージのメタデータ", + "messageMetadataEntries": "メッセージメタデータの項目", + "messageMetadataTitle": "メッセージのメタデータ", + "messageNotSent": "メッセージ未送信", + "messageSendStatusUnknown": "メッセージ送信状態不明", + "messageTime": "メッセージ時刻", + "modKeyEnterToAdd": "{{modKey}}+Enter で追加", + "model": "モデル", + "modelSelectionAgent": "エージェント", + "modelSelectionEffective": "有効モデル", + "modelSelectionExecutor": "実行者", + "modelSelectionExecutorProfile": "実行者プロファイル", + "modelSelectionFallback": "広告済みフォールバック", + "modelSelectionProviderDefault": "エージェントのデフォルト", + "modelSelectionReason": "理由", + "modelSelectionReasonAutoFallback": "広告されたモデルを適用できなかったため、自動フォールバックでエージェントのデフォルトを継続した。", + "modelSelectionReasonCatalogEmpty": "実行者がモデルカタログを広告しなかった。", + "modelSelectionReasonFallbackNotAdvertised": "保存されたフォールバックモデルを実行者が広告しなかった。", + "modelSelectionReasonRequestedNotAdvertised": "保存されたモデルを実行者が広告しなかった。", + "modelSelectionReasonUniqueVariation": "実行者は、保存されたモデルの広告済みバリエーション 1 つだけを適用した。", + "modelSelectionReasonUnknown": "{{reason}}", + "modelSelectionReasonUnsupported": "実行者はモデル選択をサポートしない。", + "modelSelectionRemediationAgentVersion": "実行者のエージェント版を確認。", + "modelSelectionRemediationConfiguration": "コピーしたエージェント設定を確認。", + "modelSelectionRemediationCredentials": "実行者の認証情報を確認。", + "modelSelectionRemediationTitle": "次を確認", + "modelSelectionRemediationUnknown": "実行者設定を確認。", + "modelSelectionRequested": "要求モデル", + "modelSelectionWarning": "実行者は保存されたモデル選択を使えなかった。", + "branchRecreatedWarning": "保存ブランチが使えなかったため、新しいブランチを作成した。", + "branchRecreatedOriginal": "元ブランチ", + "branchRecreatedNew": "新ブランチ", + "branchRecreatedBase": "ベースブランチ", + "branchRecreatedConversation": "会話履歴は新しいブランチで続行される。", + "branchRecreatedCodeNotRecovered": "利用不可のブランチのコード変更は復元されなかった。", + "monitor": "監視", + "monitorCommand": "監視: {{command}}", + "moreActions": "その他の操作", + "moreImplementOptions": "追加の実装オプション", + "moreNotShown_one": "+ {{count}} 件ほか非表示", + "moreNotShown_other": "+ {{count}} 件ほか非表示", + "moreToolbarActions": "ツールバーのその他操作", + "moveFailed": "移動失敗", + "moveFailedFiles": "一部ファイルは移動できなかった", + "moveFailedUnexpected": "ファイル移動中にエラー発生", + "moveHeadToThisCommitKeep": "HEAD をこのコミットへ移動。変更はすべてステージのまま保持。", + "moveHere": "ここへ移動", + "moveWithOptions": "オプション付きで移動", + "workflowMoveOptionsTitle": "{{step}} へオプション付きで移動", + "workflowMoveOptionsDescription": "これらの上書きは、タスクが移動先ステップに入るとき一度だけ適用される。", + "workflowMoveOptionsForStep": "{{step}} の移動オプションを開く", + "workflowMoveOptions": "オプション", + "workflowMoveResetContext": "入る前にエージェントコンテキストをクリア", + "workflowMoveSkipStepPrompt": "ステッププロンプトをスキップ", + "workflowMoveSkipStepPromptHint": "ステップのプロンプトもタスク説明も送らない。一時指示がある場合はそれだけ送信され、ない場合はエージェントは起動しない。", + "workflowMoveInstructions": "一時指示", + "workflowMoveInstructionsPlaceholder": "受け取り側エージェントへの指示を追加", + "workflowMoveApply": "移動", + "workflowMovePreviewChecking": "セッション確認中...", + "workflowMovePreviewUnavailable": "プレビュー利用不可", + "workflowMovePreviewRetry": "再試行", + "workflowMovePreviewReuseCurrent": "現在のセッションを再利用", + "workflowMovePreviewReuseOther": "別セッションを再利用", + "workflowMovePreviewReuseOtherNamed": "再利用: {{session}}", + "workflowMovePreviewNewSession": "新しいセッション", + "workflowMovePreviewUnknownSession": "セッション利用不可", + "workflowMovePreviewModel": "{{model}}", + "workflowMovePreviewModelChange": "{{before}} から {{after}} へ", + "workflowMovePreviewModelPlanned": "{{model}} (予定)", + "workflowMovePreviewModelRetainedOverride": "{{model}} (上書き保持)", + "workflowMovePreviewModelUnknown": "モデル不明", + "workflowMovePreviewAdditionalChanges_one": "+{{count}} 件の変更", + "workflowMovePreviewAdditionalChanges_other": "+{{count}} 件の変更", + "workflowMovePreviewDetails": "詳細", + "workflowMovePreviewShowDetails": "プレビュー詳細を表示", + "workflowMovePreviewHideDetails": "プレビュー詳細を非表示", + "workflowMovePreviewSession": "セッション", + "workflowMovePreviewProfile": "プロファイル", + "workflowMovePreviewModelDetails": "モデル", + "workflowMovePreviewChanges": "変更", + "workflowMovePreviewContext": "コンテキスト", + "workflowMovePreviewContextReset": "リセット", + "workflowMovePreviewSource": "元セッション", + "workflowMovePreviewSourceKeep": "維持", + "workflowMovePreviewSourcePark": "一時停止", + "workflowMovePreviewSourceComplete": "完了", + "workflowMovePreviewDispatch": "送信", + "workflowMovePreviewDispatchPrompt": "ステップのプロンプトを送信", + "workflowMovePreviewDispatchNoPrompt": "プロンプトを送信しない", + "workflowMovePreviewDispatchDeferred": "ターン終了後に再確認", + "workflowMovePreviewDispatchNoSession": "エージェント未開始", + "workflowMovePreviewNotes": "メモ", + "workflowMovePreviewNoticeRetainedOverride": "セッションはモデル上書きを保持します。", + "workflowMovePreviewNoticeUnavailable": "一部プレビュー設定は使えない。", + "workflowMovePreviewPlanned": "予定", + "workflowMovePreviewSkipped": "スキップ", + "workflowMovePreviewUnchanged": "変更なし", + "workflowMovePreviewUnknown": "不明", + "workflowMovePreviewTo": "へ", + "workflowMovePreviewExecutionCheck": "移動で現在状態を再確認する。", + "workflowMovePreviewNoSession": "セッションは開始されない", + "workflowMovePreviewFieldMode": "モード", + "workflowMovePreviewFieldStepPrompt": "ステップのプロンプト", + "workflowMovePreviewFieldReasoningEffort": "推論強度", + "workflowMovePreviewFieldVerbosity": "冗長さ", + "workflowMovePreviewFieldOther": "その他設定", + "workflowMovePreviewValueConfigured": "設定済み", + "workflowMovePreviewValueSkipped": "スキップ済み", + "workflowMovePreviewValueModeDefault": "デフォルト", + "workflowMovePreviewValueModePlan": "プラン", + "workflowMovePreviewValueLow": "低", + "workflowMovePreviewValueMedium": "中", + "workflowMovePreviewValueHigh": "高", + "workflowMovePreviewValueMax": "最大", + "workflowMovePreviewNoticeMissingOriginal": "元のセッション設定は利用不可。", + "workflowMovePreviewNoticeAmbiguous": "複数のセッション設定ルールが一致。", + "workflowMovePreviewNoticeConflicting": "セッション設定ルールが競合。", + "workflowMovePreviewNoticeInapplicable": "この会話ではセッション設定をスキップ。", + "workflowMovePreviewNoticeConfigurationUnavailable": "セッション設定を解決できず。", + "workflowMovePreviewNoticeInvalidConfiguration": "セッション設定に無効なルールあり。", + "workflowMovePreviewNoticeTargetUnavailable": "選択したセッション対象は利用不可。", + "workflowMovePreviewNoticeProfileUnavailable": "移動先エージェントプロファイルは利用不可。", + "moveTaskToTheNextWorkflow": "タスクを次のワークフローステップへ移動", + "moveTo": "移動先", + "moving": "移動中...", + "myLayout": "自分のレイアウト", + "name": "名前", + "needsInput": "入力必要", + "nestUnder": "下にネスト", + "new": "新規", + "newAgent": "新しいエージェント", + "newAgentInTask": "<1>{{title}} に新しいエージェント", + "newDocument": "新規ドキュメント", + "newFile": "新規ファイル", + "newMessages": "新しいメッセージ", + "newSession": "新しいセッション", + "newSession2": "新しいセッション", + "newSubTask": "新しいサブタスク", + "newSubtaskFor": "次の新しいサブタスク", + "newTask": "新しいタスク", + "newTerminal": "新しいターミナル", + "newTerminal2": "新しいターミナル", + "newView": "新しいビュー", + "newViewName": "新しいビュー名", + "newViewUnavailable": "新しいビューは使用不可。{{newViewDisabledReason}}", + "newline": "⇧↵ 改行", + "next": "次へ", + "nextMessage": "次のメッセージ", + "nextQuestion": "次の質問", + "noActiveSession": "アクティブなセッションなし", + "noActiveSessionDescription": "AI生成を使う前に、先にセッション開始", + "noActiveTask": "アクティブなタスクなし", + "noActivityYet": "まだアクティビティなし", + "noAgentFound": "エージェント見つからない。", + "noAgentProfileConfigured": "エージェントプロフィール未設定", + "noAgentProfileConfiguredDetail": "このタスクにエージェントプロフィールなし。workspace, workflow, workflow step にデフォルト設定なし。デフォルトのエージェントプロフィール選んで、新規タスクでセッション開始できるようにする。", + "noAgentProfileConfiguredFor": "<2>“{{name}}” にエージェントプロフィール未設定。Settings → Executors で認証情報設定。", + "noAgentProfilesConfigured": "エージェントプロフィール未設定", + "noAgentProfilesConfiguredAddOne": "エージェントプロフィール未設定。まず Settings → Agents で追加。", + "noAgentProfilesReadyForHandoff": "使えるエージェントプロフィールなし。Settings → Agents でエージェント CLI をインストール、または再接続。", + "noAgentRunning": "実行中エージェントなし", + "noAgentsFound": "エージェント見つからない。", + "noAgentsFound2": "エージェント見つからない", + "noAgentsYet": "まだエージェントなし", + "noAgentsYet2": "まだエージェントなし。", + "noAssignee": "担当者なし", + "noBranches": "ブランチなし", + "noBranchesForUrl": "この URL で使えるブランチなし。", + "noBranchesFound": "ブランチ見つからない", + "noChanges": "変更なし", + "noChangesToCommit": "コミットする変更なし", + "noCommandOutput": "コマンド出力なし。", + "noCommandOutputYet": "まだコマンド出力なし。", + "noCommentsYet": "まだコメントなし", + "noCompatibleAgentProfileFor": "{{target}} に対応するエージェントプロフィール未設定。Settings → Executors でエージェント認証情報設定。", + "noCompatibleAgentProfilesFor": "{{target}} に対応するエージェントプロフィールなし。", + "agentNotConfiguredOnExecutor": "{{agent}} は {{target}} に未設定。", + "workflowAgentNotConfiguredOnExecutor": "{{workflow}} ワークフローは {{agent}} を使うが、{{target}} に未設定。", + "selectedAgentNotConfiguredFor": "{{agent}} は {{target}} に未設定。Settings → Executors でエージェント認証情報設定。", + "selectedAgentProfileFallback": "選択中のエージェントプロフィール", + "selectedAgentProfileFallbackInline": "選択中のエージェントプロフィール", + "selectedAgentProfileUnavailable": "{{agent}} は使えない。対応するエージェントプロフィール選択。", + "noContent": "コンテンツなし", + "noDecisionYet": "まだ決定なし", + "noDependency": "依存関係なし", + "noDocumentsFound": "ドキュメント見つからない。", + "noDocumentsYet": "まだドキュメントなし。", + "noEditorsAvailable": "使えるエディタなし", + "noEnvironmentYet": "まだ環境なし", + "noExecutorFound": "Executor 見つからない。", + "noFilesFound": "ファイル見つからない", + "noFilesInThisCommit": "このコミットにファイルなし", + "noItemsFound": "項目見つからない。", + "noLabelsYet": "ラベルまだなし", + "noListeningPortsDetected": "リスニングポート検出なし。", + "noMatches": "一致なし", + "noMatchingBranches": "一致ブランチなし", + "noMessagesFound": "メッセージ見つからず。", + "noMessagesYetStartTheConversation": "メッセージまだなし。会話始めよう!", + "noOptions": "オプションなし", + "noOptions2": "オプションなし。", + "noOtherTasks": "他タスクなし", + "noParent": "親なし", + "noPendingReviewComments": "保留中レビューコメントなし。", + "noPlan": "計画なし", + "noPlanFound": "計画見つからず。", + "noProfileFound": "プロフィール見つからず。", + "noProfilesFound": "プロフィール見つからず。", + "noProject": "プロジェクトなし", + "noProjectsFound": "プロジェクト見つからず。", + "noQuestionsFound": "質問見つからず。", + "noRecentTasksYet": "最近タスクまだなし", + "noRelatedTasksFound": "関連タスク見つからず。", + "noRepositories": "リポジトリなし", + "noRepositoriesAvailableInWorkspace": "このワークスペースで使えるリポジトリなし", + "noRepositoriesFound": "リポジトリ見つからず。", + "noResourceDetailsAvailable": "リソース詳細なし。", + "noResultsFound": "結果見つからず", + "noRevisionsYetEditsWillAppear": "リビジョンまだなし。編集ここに出る。", + "noSavedLayouts": "保存レイアウトなし", + "noSessionsYetLaunchOneTo": "セッションまだなし。開始して使い始めよう。", + "noSteps": "ステップなし", + "noStepsConfigured": "ステップ未設定", + "noStepsFound": "ステップ見つからず。", + "noSubIssues": "サブ課題なし", + "noTaskSelected": "タスク未選択", + "noTasksFound": "タスク見つからず。", + "noTerminalsYet": "ターミナルまだなし。", + "noTextualChangesBetweenTheseVersions": "このバージョン間で文字変更なし。", + "noWorkItemsFound": "作業項目見つからず", + "noWorkflowsFound": "ワークフロー見つからず。", + "noWorkspacesFound": "ワークスペース見つからず。", + "none": "なし", + "notConfiguredForThisExecutor": "このexecutor用に未設定", + "onBranch": "ブランチ <1>{{branch}} 上", + "onDisk": "ディスク上", + "ontoBranch": "{{branch}} に", + "openCodeReview": "コードレビューを開く", + "openComposeBoxHelp": "ターミナル上に kandev 制御の compose box を開き、フォローアップメッセージ入力。送信は <1>Enter、改行は <3>Shift+Enter。", + "openEditor": "エディタを開く", + "openEntityReference": "{{label}} を開く: {{title}}", + "openFile": "ファイルを開く", + "openImage": "{{alt}} を開く", + "openInAdvancedView": "詳細ビューで開く", + "openInBrowserPanel": "ブラウザパネルで開く", + "openInBrowserTab": "ブラウザタブで開く", + "openInEditorNamed": "{{name}} で開く", + "openInNewTab": "新しいタブで開く", + "openInOfficeView": "office view で開く", + "openHtmlPreview": "HTML プレビューを開く", + "openInOtherEditor": "他のエディタで開く", + "openMarkdownPreview": "Markdown プレビューを開く", + "openPlanDetails": "計画詳細を開く", + "openPullRequest": "プルリクエストを開く", + "openSidebarFilters": "サイドバーフィルターを開く", + "openSourceTask": "ソースタスク {{fullTitle}} を開く", + "openTaskSwitcher": "タスクスイッチャーを開く", + "openTerminal": "ターミナルを開く", + "openTheBottomTerminalAndPaste": "下部ターミナルを開いて、このコマンドを貼り付け", + "openWorkspaceFolder": "ワークスペースフォルダを開く", + "openWorkspaceSettings": "ワークスペース設定を開く", + "option": "オプション {{index}}", + "orTypeACustomAnswer": "またはカスタム回答を入力…", + "otherChanges": "他の変更", + "output": "出力", + "outputTokens": "出力トークン", + "outputTruncated": "出力は切り詰め済み", + "panelAgent": "エージェント", + "panelChanges": "変更", + "panelDiffViewer": "差分ビューア", + "panelFileDiff": "差分 [{{file}}]", + "panelFiles": "ファイル", + "panelMergeRequest": "マージリクエスト", + "panelPlan": "計画", + "panelPrDetails": "PR詳細", + "panelPullRequest": "プルリクエスト", + "panelTerminal": "ターミナル", + "parent": "親", + "parkedCount": "保留中 ({{parked}})", + "parkedTerminals": "保留中のターミナル", + "pastedImageCouldnTBeAttached": "貼り付けた画像を添付できなかった", + "pathBasedProxyWorksForApis": "パスベースのプロキシ。API には使えるが、/ で配信される前提の Web アプリは壊れる可能性あり。", + "pauseTree": "ツリーを一時停止", + "paused": "一時停止中", + "pendingApproval": "承認待ち", + "pendingReviewCommentsHelp_one": "レビューコメントが {{count}} 件保留中。クリックで一覧を展開。各コメントは編集可能。ファイルパスをクリックでソースへ移動、ゴミ箱アイコンでコメント削除できる。", + "pendingReviewCommentsHelp_other": "レビューコメントが {{count}} 件保留中。クリックで一覧を展開。各コメントは編集可能。ファイルパスをクリックでソースへ移動、ゴミ箱アイコンでコメント削除できる。", + "permissionRequested": "権限を要求済み", + "permissionRequestNoLongerAvailable": "この権限要求はもう使えない。", + "permissionResponseFailed": "権限要求に応答できなかった。", + "permissionRequired": "権限が必要", + "pickADifferentRepoLocalFolder": "別の repo、ローカルフォルダ、またはリモート URL を選んで", + "pickAStartingFolderOptional": "開始フォルダを選ぶ(任意)", + "pickOrPasteARepo": "repo を選ぶか貼り付け", + "pinTasksCount_one": "タスクを {{count}} 件ピン留め", + "pinTasksCount_other": "タスクを {{count}} 件ピン留め", + "plan": "計画", + "planCommentCount_one": "{{count}} 件の計画コメント", + "planCommentCount_other": "{{count}} 件の計画コメント", + "planContentTooLarge": "計画は {{submitted}} で、上限 {{limit}} を超えている。文書を短くして、もう一度保存して。", + "planHistory": "計画履歴", + "planIsEmpty": "計画が空", + "planLoadError": "計画を読み込めなかった。", + "planMode": "計画モード", + "planRestoredToV": "v{{revisionnumber}} に計画を復元した", + "planRevisionCharCount_one": "{{formatted}} 文字", + "planRevisionCharCount_other": "{{formatted}} 文字", + "planRevisionDeltaTooltip": "前の版より {{delta}} 文字", + "planRevisionEdited": "編集済み", + "planRevisionWorkflowStepTooltip": "{{label}} からの計画版", + "planYourImplementation": "実装を計画", + "pleaseTryAgain": "もう一度試して。", + "pluginTopBarActions": "プラグイン上部バーの操作", + "portAlreadyAdded": "ポート追加済み", + "portForwarding": "ポート転送", + "portForwardingPreferenceUpdateFailed": "ポート転送の表示設定を更新できませんでした", + "portForwardingTunnelActive_one": "ポート転送 (トンネル {{count}} 件アクティブ)", + "portForwardingTunnelActive_other": "ポート転送 (トンネル {{count}} 件アクティブ)", + "portNumber": "ポート番号", + "position": "位置 {{positionLabel}}", + "promptHistory": "プロンプト履歴", + "promptHistoryPromptLabel": "プロンプト {{number}}", + "promptHistoryPromptLabelGeneric": "プロンプト", + "promptHistoryEmpty": "まだプロンプトなし。", + "expandPrompt": "プロンプトを展開", + "collapsePrompt": "プロンプトを折りたたむ", + "durationUnitSeconds": "秒", + "durationUnitMinutes": "分", + "durationUnitHours": "時", + "prChanges": "PR の変更", + "preparingEllipsis": "準備中...", + "preparingEnvironment": "環境を準備中", + "preparingEnvironmentEllipsis": "環境を準備中...", + "preparingWorkspace": "ワークスペースを準備中...", + "preparingWorkspace2": "ワークスペースを準備中…", + "presets": "プリセット", + "pressEnterToUpdateYourAnswer": "Enter で回答を更新…", + "pressEscToCancelCmdEnter": "Esc でキャンセル、Cmd+Enter で保存", + "preview": "プレビュー", + "previous": "前へ", + "previousAgentError": "前のエラー", + "previousMessage": "前のメッセージ", + "previousQuestion": "前の質問", + "priority": "優先度", + "priorityCritical": "緊急", + "priorityHigh": "高", + "priorityInfo": "優先度は、このタスクがボードでどれだけ急ぎか示します。", + "priorityInfoLabel": "タスクの優先度について", + "priorityLow": "低", + "priorityMedium": "中", + "private": "非公開", + "profileCount_one": "{{count}} 件のプロフィール", + "profileCount_other": "{{count}} 件のプロフィール", + "progress": "進捗", + "project": "プロジェクト", + "prompt": "プロンプト", + "promptFieldLabel": "prompt", + "providerPrivateContextThatKandevDid": "Kandev が記録してない provider のプライベート context は引き継がれないことあり。開いた terminal, dev server, ほか workspace process は止まる。task editor server も含む。", + "providerUnavailable": "provider 利用不可", + "providerAheadPushDisabled": "provider branch が先行中。push できない。", + "providerAheadPullRequiresUpstream": "pull には、この checkout に upstream 設定必要。", + "divergedActionsUnavailable": "contribution history が分岐した。Changes actions から version 選べ。", + "proxy": "プロキシ", + "publishARedactedSnapshotOfThis": "この完了 task の redacted snapshot を、自分の account の secret GitHub Gist として公開する。", + "publishToGithubGist": "GitHub Gist に公開", + "publishedAnyoneWithThisLinkCan": "公開済み。この link を知る人は conversation 見られる。", + "publishing": "公開中…", + "pull": "Pull", + "pullRequest": "Pull request", + "pullRequest2": "Pull Request", + "pullRequests": "Pull requests", + "push": "Push", + "pushCurrentBranchBeforeResetting": "reset 前に current branch を remote に push する。", + "pushYourBranchToItsRemote": "reset 前に committed work を残すため、確認 dialog で branch を remote に push する。", + "pushedCommit": "commit を push 済み", + "pushedToRemote": "remote に push 済み", + "questionCount_one": "{{count}} 問", + "questionCount_other": "{{count}} 問", + "questionOfTotal": "{{total}} 問中 {{index}} 問目", + "questionOfTotalAnswered": "{{total}} 問中 {{index}} 問目 (回答済み)", + "queueAdmissionFull": "message queue がいっぱい。次 turn まで待って drain する。", + "queueAdmissionIdentityConflict": "この draft は別 content で既に送信済み。", + "queueAdmissionSessionUnavailable": "選択 session は input に使えない。", + "queueAdmissionUnavailable": "message queue は一時的に使えない。再試行。", + "queueAdmissionValidation": "message content か attachment が不正。", + "queueMoreInstructions": "もっと instruction を queue...", + "queued": "queued", + "launchQueueTitle": "自動 launch", + "launchQueueLabel": "queued", + "launchQueueIndicator": "自動 launch queued", + "launchQueueDestination": "destination: {{destination}}", + "launchQueueWaitingCapacity": "session capacity 待ち。", + "launchQueueWaitingGlobalCapacity": "global session capacity 待ち。", + "launchQueueGlobalScope": "グローバル セッション上限", + "launchQueueGlobalScopeHelp": "全ワークスペース", + "launchQueueConfigureCapacity": "グローバル セッション上限を設定", + "launchQueueCapacity": "{{inUse}} / {{limit}} セッション使用中。{{checkedAt}} に確認済み。", + "launchQueueCapacityStale": "{{inUse}} / {{limit}} セッション使用中。容量データが古い。最終確認 {{checkedAt}}。", + "launchQueueCapacityDisconnected": "{{inUse}} / {{limit}} セッション使用中。容量接続なし。最終確認 {{checkedAt}}。", + "launchQueueCapacityUnavailable": "容量取得不可。Kandev が自動で再試行する。", + "launchQueueCapacityUnavailableStopped": "容量情報なし。", + "launchQueueSince": "{{time}} から待機中。", + "launchQueueAutomaticRetry": "容量が空き次第、Kandev が自動で再試行する。", + "launchQueueRetryPending": "再試行待ち。Kandev がキュー内の起動を保持する。", + "launchQueueRetryStopped": "自動再試行停止。", + "launchQueueOwnershipUnavailable": "起動の所有権取得不可。自動起動は未実施。", + "launchQueueReplayError": "キュー内起動に対応必要。Kandev が再試行する。", + "launchQueueReplayErrorStopped": "キュー内起動に対応必要。", + "launchQueueUnknownDestination": "キュー済みセッション", + "wipQueueTitle": "ワークフロー WIP 上限", + "wipQueueDestination": "{{workflow}} / {{step}}", + "wipQueuePosition": "このステップ待ち、{{position}} / {{total}} 件。", + "wipQueueAdmittedCount_one": "{{count}} / {{limit}} 件のタスクを許可。", + "wipQueueAdmittedCount_other": "{{count}} / {{limit}} 件のタスクを許可。", + "wipQueueAdmittedUnlimited_one": "{{count}} 件のタスクを許可。", + "wipQueueAdmittedUnlimited_other": "{{count}} 件のタスクを許可。", + "wipQueueConfigure": "ワークフロー WIP 上限を設定", + "wipQueueUnavailable": "ワークフロー WIP 詳細なし。", + "wipQueueConfigurationUnavailable": "ワークフロー設定リンクなし。", + "parkedSessionNote": "このセッションはワークフロー用に待機中。開いても再開しない。続けるにはメッセージ送信。", + "quorumAwaiting": "{{role}} の決定待ち、{{received}} / {{required}} 件", + "quorumStuck": "停止中", + "quorumStuckPendingReevaluation": "ブロック中: このステップを再評価するアクティブ セッションなし", + "ranCommands_one": "・{{count}} コマンド実行", + "ranCommands_other": "・{{count}} コマンド実行", + "random": "ランダム", + "read": "読む", + "readLines_one": "{{count}} 行を読む", + "readLines_other": "{{count}} 行を読む", + "reasonAddSessionDescription": "セッション説明を追加", + "reasonAddTaskPrompt": "タスクプロンプトを追加", + "reasonAddTaskTitle": "タスクタイトルを追加", + "reasonSelectAgent": "エージェントを選択", + "reasonSelectBranch": "ブランチを選択", + "reasonSelectRepository": "リポジトリを選択", + "reasonSelectWorkflow": "ワークフローを選択", + "reasonSelectWorkspace": "ワークスペースを選択", + "rebase": "リベース", + "recentTasks": "最近のタスク", + "reconnectingToTheExistingEnvironment": "既存環境へ再接続中…", + "redactedRules": "非表示: {{rules}}", + "referenceWorkItems": "参照ワークアイテム", + "refresh": "更新", + "rejected": "却下", + "restarts": "再起動", + "relatedBlockedBy": "ブロック元", + "relatedBlockers": "ブロッカー", + "relatedChildren": "子", + "relatedParents": "親", + "relatedSiblings": "兄弟", + "relatedTaskCount_one": "関連タスク {{count}} 件", + "relatedTaskCount_other": "関連タスク {{count}} 件", + "relatedTasks": "関連タスク", + "remote": "リモート", + "remoteContributionHistoryTitle": "タスクとPRの履歴が異なる", + "remoteContributionHistoryTooltip": "タスクと公開済みPRの履歴が異なる。版を選ぶ前に比較。", + "remoteContributionHistoryBody": "タスクと公開済みPRに異なる履歴あり。版を選ぶ前に比較。", + "remoteContributionHistoryLocalRebase": "タスクブランチはローカルでリベース済み。PRには古い履歴がまだある。", + "remoteContributionHistoryLoading": "ローカル履歴を確認中...", + "remoteContributionHistoryGuidance": "検証完了後にタスク版を公開。", + "compareContributionVersions": "版を比較", + "remoteContributionCompareDescription": "Gitを変えずに両方の履歴を表示。", + "publishTaskVersion": "タスク版を公開...", + "restorePublishedPRVersion": "公開済みPR版を復元...", + "openPROnGitHub": "GitHubでPRを開く", + "remoteContributionPublishDescription": "公開済みPRの履歴をタスク履歴で置き換える。確認と正確なprovider-head一致が必要。", + "remoteContributionRestoreDescription": "タスクチェックアウト履歴をPR履歴で置き換える。Kandevは先に復旧ブランチを作成し、クリーンな作業ツリーが必要。", + "remoteContributionPublishConfirmation": "{{repository}} の {{head}} でタスク版を公開する? これで公開済みPR履歴をタスク履歴に置き換える。", + "remoteContributionRestoreConfirmation": "{{head}} の公開済みPR版を復元する? これで現在のタスクチェックアウト履歴を置き換える。Kandevは先に復旧ブランチを作成し、作業ツリーはクリーン必須。", + "remoteContributionTaskCommits_one": "タスクコミット: {{count}}", + "remoteContributionTaskCommits_other": "タスクコミット: {{count}}", + "remoteContributionPublishedCommits_one": "公開済みコミット: {{count}}", + "remoteContributionPublishedCommits_other": "公開済みコミット: {{count}}", + "remoteContributionNewBaseCommits_one": "新しいベースコミット: {{count}}", + "remoteContributionNewBaseCommits_other": "新しいベースコミット: {{count}}", + "remoteContributionChangedTitle": "PR ブランチが変更された", + "remoteContributionChangedBody": "タスク版は変わってない。準備できたら、使う版を選ぶ。", + "replacePRBranch": "PR ブランチを置き換え", + "usePRVersion": "PR 版を使う", + "prNumberVersion": "PR #{{number}} 版", + "remoteContributionReplaceDescription": "公開済み PR ブランチを、変わってないタスク版で置き換える。確認と、provider-head の完全一致が必要。", + "remoteContributionUseDescription": "このタスクで現在の PR 版を使う。Kandev が先に回復ブランチを作成し、作業ツリーはクリーン必須。", + "remoteContributionViewDescription": "タスクのチェックアウトは変えずに、PR #{{number}} 版を開く。", + "replacePRBranchConfirmation": "{{repository}} の公開済み PR ブランチを {{head}} でタスク版に置き換える? これで provider ブランチがタスク版に合う。", + "usePRVersionConfirmation": "{{head}} の PR 版を使う? Kandev は先に今のタスク版の回復ブランチを作る。作業ツリーはクリーン必須。", + "remoteContributionProviderChangedAgain": "PR がまた変わった。provider 版を更新して、もう一度試す。", + "remoteContributionCleanWorktreeRequired": "PR 版を使う前に、ローカル変更をコミットか破棄。", + "remoteContributionResolutionFailed": "Kandev は contribution ブランチを変更できなかった。Git エラーを確認して、もう一度試す。", + "remoteContributionReplaced": "PR ブランチをタスク版に置き換えた。", + "remoteContributionUsed": "PR 版を採用した。回復ブランチ: {{branch}}", + "remoteCreatedLine": "作成: {{createdAt}}", + "remoteExecutor": "リモート実行者", + "remoteExecutorStatus": "{{name}} 実行者ステータス", + "remoteExecutorStatusUnavailable": "リモート実行環境の状態は利用不可。", + "remoteLastCheck": "最終確認", + "remoteLastCheckLine": "最終確認: {{checkedAt}}", + "remoteRepository": "リモートリポジトリ", + "remoteStateLine": "状態: {{state}}", + "remoteStatusFailedLine": "状態失敗: {{error}}", + "currentPRCommit": "現在のPRコミット", + "remoteUrlPressEnter": "<0>リモートURL。Enterで送信。", + "remove": "削除", + "remove2": "{{name}}を削除", + "remove3": "{{identifier}}を削除", + "removeAnnotation": "注釈 {{number}} を削除", + "removeComment": "コメントを削除", + "removeFile": "ファイルを削除", + "removeFilter": "フィルターを削除", + "removeFromFavorites": "お気に入りから削除", + "removeImage": "画像を削除", + "removeLabeled": "{{label}} を削除", + "removeMessageFromFavorites": "メッセージをお気に入りから削除", + "removeRepository": "リポジトリを削除", + "removeSource": "ソースを削除", + "rename": "名前変更", + "rename2": "名前変更…", + "renameTask": "タスク名を変更", + "renameTerminalLeaveEmptyToReset": "ターミナル名を変更。空欄でリセット、\"{{token}}\"を入力で削除してPTY停止。", + "repeatedTerminalCommandsHidden_one": "同一ターミナルコマンド {{count}} 件を非表示", + "repeatedTerminalCommandsHidden_other": "同一ターミナルコマンド {{count}} 件を非表示", + "repeatedTerminalCommandsShown_one": "同一ターミナルコマンド {{count}} 件を表示", + "repeatedTerminalCommandsShown_other": "同一ターミナルコマンド {{count}} 件を表示", + "repo": "リポジトリ", + "repositoriesAreAddedAsTopLevel": "リポジトリは現在のリモートワークスペースにトップレベル項目として追加。エージェントの作業ディレクトリは変わらない。", + "repository": "リポジトリ", + "repository2": "リポジトリ", + "repositoryWithPath": "リポジトリ · {{path}}", + "repositorySetsTrigger": "セット", + "repositorySetsSaveTitle": "リポジトリセットとして保存", + "repositorySetsSaveDescription": "このリポジトリ選択と保存済みベースブランチを今後のタスクで再利用。チェックアウトブランチはタスクごとのまま。", + "repositorySetsSaveNameLabel": "名前", + "repositorySetsSaveDescriptionLabel": "説明(任意)", + "repositorySetsSaveSubmit": "セットを保存", + "repositorySetsSaveMemberSummary_one": "{{count}} 件のリポジトリを保存", + "repositorySetsSaveMemberSummary_other": "{{count}} 件のリポジトリを保存", + "repositorySetsSaveExcludedRows_one": "{{count}} 行は保存済みのワークスペースリポジトリではないため、含まれません", + "repositorySetsSaveExcludedRows_other": "{{count}} 行は保存済みのワークスペースリポジトリではないため、含まれません", + "repositorySetsSaveNoSelection": "先に少なくとも 1 つのワークスペースリポジトリを選んでください。", + "repositorySetsSaveNameTaken": "このワークスペースには同じ名前のセットがもうあります。", + "repositorySetsSaveFailed": "セットを保存できませんでした。もう一度試してください。", + "repositorySetsSaveAction": "セットとして保存", + "repositorySetsApplyLabel": "リポジトリセットを適用", + "repositorySetsMenuLabel": "リポジトリセット", + "repositorySetsMemberCount_one": "{{count}} 件のリポジトリ", + "repositorySetsMemberCount_other": "{{count}} 件のリポジトリ", + "repositorySetsMissingMembers_one": "({{count}} はもう利用不可)", + "repositorySetsMissingMembers_other": "({{count}} はもう利用不可)", + "repositorySetsAlreadyApplied": "(すでに追加済み)", + "repositorySetsApplied_one": "{{name}} から {{count}} 件のリポジトリを追加", + "repositorySetsApplied_other": "{{name}} から {{count}} 件のリポジトリを追加", + "repositorySetsNothingToApply": "{{name}} のすべてのリポジトリは、すでにこのタスクにあります", + "repositorySetsSkippedMissing_one": "{{name}} の {{count}} 件のリポジトリは、このワークスペースにもうありません", + "repositorySetsSkippedMissing_other": "{{name}} の {{count}} 件のリポジトリは、このワークスペースにもうありません", + "repositorySetBaseUnavailable": "保存済みのベースブランチは利用できません。タスクを作る前に別のブランチを選んでください。", + "repositorySetBaseForLocal": "ベース: {{base}}", + "branchUnavailable": "この保存済みブランチは利用できません。別のブランチを選んでください。", + "branchUnavailableShort": "利用不可", + "requestChanges": "変更を依頼", + "requestedChanges": "変更を依頼済み", + "requestedChangesPlain": "{{who}} が変更を依頼", + "requestedChangesVerb": "変更を依頼済み", + "requestedChangesWithComment": "{{who}} が変更を依頼: '{{comment}}'", + "resetAgentContext": "エージェントコンテキストをリセットしますか?", + "resetAgentContextClearsConversationHistory": "エージェントコンテキストをリセット。会話履歴は消え、ワークスペースは保持", + "resetContext": "コンテキストをリセット", + "resetEnvironment": "環境をリセットしますか?", + "resetEnvironment2": "環境をリセット", + "resetLayout": "レイアウトをリセット", + "resetToCommitSha": "コミット {{shortSha}} にリセット", + "resetToThisCommit": "このコミットにリセット", + "resetting": "リセット中...", + "resize": "サイズ変更", + "restart": "再起動", + "restartConsequenceRunningProcesses": "<0>実行中プロセス: 開いてるターミナル、dev server、ほか workspace プロセスが止まる。task editor server も含む。未保存作業を保存してから、source 接続後にそれらプロセスを再度開くか再起動して。", + "restartConsequenceSessionContext": "<0>セッションコンテキスト: Kandev は task, session, task state, messages, plan, attached sources, selected model と mode を保ったまま idle agent を再起動する。cross-directory resume 対応 provider は native session を維持する。ほか provider は新しい session を開始し、Kandev が記録した会話を次の prompt で受け取る。Kandev が記録してない provider-private context は引き継がれない場合がある。", + "restartConsequenceWorkspace": "<0>Workspace: task root が agent の working directory になる。single-repository task なら、CWD が 1 レベル上に移り、全 source が名前付き top-level entry として表示される。既存 files と Git changes は移動も破棄もされない。", + "restarting": "再起動中...", + "restore": "復元", + "restoreThisVersion": "この version を復元", + "restoreToVersionConfirm": "version {{version}} に復元する?", + "restoreToVersionDescription": "v{{version}} の内容で新しい version を作る。失われるものはない。現在の version は history に残る。", + "restoreTree": "tree を復元", + "restoreVersion": "v{{version}} を復元", + "restoredFromEarlierVersion": "以前の version から復元済み", + "restoring": "復元中...", + "restoringThisTaskSMaterializedWorkspace": "この task の materialized workspace の復元に失敗した。launch 前に workspace を再設定して。", + "resume": "再開", + "resumeAgent": "agent を再開", + "resumeSession": "session を再開", + "resumeTree": "tree を再開", + "resumingSession": "session 再開中", + "retry": "再試行", + "retryChangeRequest": "{{shortName}} を再試行", + "retryRemoteRepositoryResolution": "remote repository の解決を再試行", + "retrying": "再試行中...", + "reverseISearch": "(reverse-i-search)", + "revertCommit": "commit を取り消し", + "richOutputBinaryPreviewUnavailable": "この file type では preview できない。", + "richOutputHidePreview": "preview を隠す", + "richOutputLoadingPreview": "preview 読み込み中", + "richOutputOpenFile": "file を開く", + "richOutputPreview": "preview", + "richOutputPreviewFailed": "preview できない。", + "richOutputPreviewTruncated": "preview を切り詰めた。", + "richOutputTool": "Kandev: visual output", + "richOutputUnavailable": "この presentation は使えない。", + "review": "レビュー", + "reviewComments": "レビューコメント", + "reviewCommentsReadyToSend_one": "送信準備できたレビューコメントは {{count}} 件", + "reviewCommentsReadyToSend_other": "送信準備できたレビューコメントは {{count}} 件", + "reviewCommentsTitle": "レビューコメント", + "reviewTheseChangesBeforeAddingSources": "source を追加する前にこの変更をレビューして。operation が終わるまで task は idle のままにする。", + "reviewed": "レビュー済み", + "reviewers": "レビュー担当", + "reviewsCount_one": "レビュー ({{count}})", + "reviewsCount_other": "レビュー ({{count}})", + "revoke": "取り消し", + "revokeShare": "共有を取り消し", + "revoking": "取り消し中…", + "roleApprover": "承認者", + "roleReviewer": "レビュー担当", + "run": "実行", + "runCommand": "/{{name}} コマンドを実行", + "runInTerminal": "ターミナルで実行", + "runInTheParentSMaterialized": "親の materialized workspace で実行", + "runInTheParentSWorktree": "親の worktree ({{worktreeBranch}}) で実行", + "runRepositorySetupScript": "リポジトリのセットアップスクリプトを実行", + "runScript": "スクリプトを実行", + "running": "実行中", + "sameBranchAsCurrentSession": "現在のセッションと同じブランチ", + "sameEnvironmentAsCurrentSession": "現在のセッションと同じ環境", + "saveAndSendToAgent": "保存してエージェントに送信", + "saveAndSendToAgentShortcut": "保存してエージェントに送信 ({{modKey}}+Shift+Enter)", + "saveAs": "名前を付けて保存:", + "saveAs2": "名前を付けて保存…", + "saveCommentForReview": "レビュー用コメントを保存", + "saveCommentForReviewShortcut": "レビュー用コメントを保存 ({{modKey}}+Enter)", + "saveCurrentLayout": "現在のレイアウトを保存", + "saveCurrentLayout2": "現在のレイアウトを保存...", + "saveOrDiscardBeforeNewView": "新しいビューを作る前に、変更を保存するか破棄してください。", + "saveYourCurrentPanelArrangementAs": "現在のパネル配置を再利用できるレイアウトとして保存。", + "savedAndLocalGitRepositoriesMust": "保存済みとローカルの Git リポジトリは、この実行環境でクローン可能な origin が必要。ローカルフォルダは使えない。", + "savedLayout": "保存済みレイアウト", + "savedLayouts": "保存済みレイアウト", + "saving": "保存中...", + "scriptExecutionMetadataUnavailable": "スクリプト実行 (メタデータなし)", + "scriptExitedWithCode": "スクリプトがコード {{code}} で終了", + "scriptFailed": "スクリプト失敗", + "scripts": "スクリプト", + "scrollToActiveSession": "アクティブなセッションへスクロール", + "scrollToLastPrompt": "最後のプロンプトへスクロール", + "scrollToStartOfTranscript": "トランスクリプトの先頭へスクロール", + "searchAgents": "エージェントを検索...", + "searchBranches": "ブランチを検索...", + "searchEllipsis": "検索…", + "searchEllipsis2": "検索...", + "searchFiles": "ファイルを検索", + "searchFiles2": "ファイルを検索...", + "searchFilesAndPrompts": "ファイルとプロンプトを検索...", + "searchProfiles": "プロファイルを検索...", + "searchProjects": "プロジェクトを検索...", + "searchRepositories": "リポジトリを検索...", + "searchRepositoriesOrPasteARemote": "リポジトリを検索するか、リモート URL を貼り付けてください", + "searchTasks": "タスクを検索...", + "searchTasksOrChangeRequest": "タスクまたは #PR/MR 番号を検索...", + "searching": "検索中…", + "searchingWorkItems": "作業項目を検索中…", + "selectASessionToOpenIts": "セッションを選んで作業ツリーを開く", + "selectATaskToStartChatting": "タスクを選んでチャット開始", + "selectAgent": "エージェントを選択", + "selectAgentProfile": "エージェントプロフィールを選択", + "selectAnInstance": "インスタンスを選択", + "selectBranch": "ブランチを選択", + "selectExecutorProfile": "実行者プロフィールを選択", + "selectFilesAndPromptsToInclude": "· 含めるファイルとプロンプトを選択", + "selectOrEnterRemoteRepoFirst": "先にリモートリポジトリを選択するか入力してください。", + "selectProfile": "プロフィールを選択", + "selectRepositoryFirst": "先にリポジトリを選択", + "selectSentryInstanceToLink": "リンクする Sentry インスタンスを選択してください。", + "selectTextAndPressToComment": "テキストを選んで <2>⌘⇧C を押してコメント", + "selectValue": "値を選択", + "selectValues": "値を選択", + "selectWorkflow": "ワークフローを選択", + "selectWorkspaceBeforeLinkingPr": "GitHub pull request をリンクする前にワークスペースを選択してください。", + "selected": "選択済み", + "send": "送信", + "sendAnswer": "回答を送信", + "sendComment": "コメントを送信", + "sendToAgent": "エージェントに送信", + "sendToAgentHelp": "パネル内の <1>エージェントに送信 を押せば、すぐ CLI エージェントへ渡せる。チャットボックスを開いて続けて入力してもいい。コメントは先頭に付く。", + "sendToWorkflow": "ワークフローに送信", + "senderWithSession": "{{base}} · {{sessionName}}", + "sentAsNewMessage": "· 新規メッセージとして送信", + "sentryInstance": "Sentry インスタンス", + "sentryIssue": "Sentry の問題", + "sentryIssueLinked": "Sentry issue がリンク済み", + "sentryIssuePlaceholder": "PROJ-123 または issue URL を貼り付け", + "sentryIssueValidationHint": "Sentry issue の URL か短い ID (PROJ-123) を貼り付けてください。", + "session": "セッション", + "sessionActions": "セッション操作", + "sessionContext": "セッションコンテキスト", + "sessionCount_one": "{{count}} セッション", + "sessionCount_other": "{{count}} セッション", + "sessionFallbackLabel": "セッション", + "sessionModelSettings": "セッションのモデル設定", + "sessionNotReady": "セッション準備できず", + "sessionStatusBackgroundRunning": "バックグラウンドで実行中", + "sessionStatusCancelled": "キャンセル済み", + "sessionStatusComplete": "完了", + "sessionStatusFailed": "失敗", + "sessionStatusPermissionRequested": "権限要求済み", + "sessionStatusRunning": "実行中", + "sessionStatusWaitingForInput": "入力待ち", + "sessions": "セッション", + "setAsDefaultLayout": "デフォルトレイアウトに設定", + "setAsPrimary": "Primary に設定", + "setup": "セットアップ", + "share": "共有", + "shareThisTask": "このタスクを共有", + "shareThisTaskConversationAsA": "このタスクの会話を公開リンクとして共有", + "sharedWorkspaceMembers_one": "共有ワークスペース · {{count}} 人のメンバー", + "sharedWorkspaceMembers_other": "共有ワークスペース · {{count}} 人のメンバー", + "shift": "Shift", + "shiftEnterToRun": ", ⌘+Shift+Enter で実行", + "shiftEnterToRun2": ", {{modKey}}+Shift+Enter で実行", + "shortcutTogglesChatInput": "ショートカット: <1>{{shortcut}} でこのチャット入力を切り替え。", + "showBranchAndGitCredentialDetails": "ブランチと Git 認証情報の詳細を表示", + "showCode": "コードを表示", + "retryHtmlPreview": "HTML プレビューを再試行", + "showCommandOutput": "コマンド出力を表示", + "showDebugInfo": "デバッグ情報を表示", + "showDetails": "詳細を表示", + "showErrorDetails": "エラー詳細を表示: {{displayLabel}}", + "showFormatted": "整形表示", + "showFormattedMessage": "整形メッセージを表示", + "showFullTimestamp": "完全なタイムスタンプを表示: {{absoluteTime}}", + "showMcpConnectionStatus": "MCP 接続状況を表示", + "showMessageMetadata": "メタデータを表示", + "showOlderSessions_one": "{{count}} 件前のセッションを表示", + "showOlderSessions_other": "{{count}} 件前のセッションを表示", + "showPreparationDetails": "準備詳細を表示", + "showRawText": "生テキストを表示", + "showRightPanel": "右パネルを表示", + "showRightPane": "右ペインを表示", + "showRightPanels": "右パネルを表示", + "showSidebar": "サイドバーを表示", + "sibling": "兄弟", + "sidebarFilters": "サイドバーフィルター", + "taskRow": "タスク行", + "taskRowChangeRequestStatus": "リクエスト状態を変更", + "taskRowChangeRequestStatusDescription": "プルリクエストかマージリクエストの状態を表示。", + "taskRowDetails": "詳細行", + "taskRowDetailsCount_one": "{{count}} 件の詳細", + "taskRowDetailsCount_other": "{{count}} 件の詳細", + "taskRowDetailsDescription": "選択したメタデータをタスクタイトル下に表示。", + "taskRowDetailsHidden": "詳細を非表示", + "taskRowGitChanges": "Git 変更", + "taskRowGitChangesDescription": "追加行と削除行を表示。", + "taskRowNothing": "なし", + "taskRowNothingDescription": "右側を空にする。", + "taskRowPullRequestNumber": "プルリクエスト番号", + "taskRowReorderable": "並べ替え可能", + "taskRowReorderHandle": "{{label}} を並べ替え", + "taskRowReordered": "{{label}} を {{position}} へ移動", + "taskRowRelativeTime": "相対時刻", + "taskRowRelativeTimeDescription": "タスクが最後に更新された時刻を表示。", + "taskRowRelativeTimeLastActivity": "使えるなら、タスクの最終アクティビティ時刻を使う。", + "taskRowRelativeTimeLastUpdate": "タスクの最終更新時刻を使う。", + "taskRowRepository": "リポジトリ", + "taskRowRightSide": "右側", + "taskRowShownOnRight": "右に表示", + "taskRowToggleDetail": "{{label}} の詳細表示切り替え", + "taskRowToggleDetails": "タスク詳細を表示", + "skipAllQuestions": "すべての質問をスキップ", + "skipped": "スキップ済み", + "snapshotMessageCount_one": "{{count}}件のメッセージ", + "snapshotMessageCount_other": "{{count}}件のメッセージ", + "softReset": "ソフトリセット", + "someone": "誰か", + "sort": "並べ替え", + "sortCreated": "作成日", + "sortCreatedDescription": "タスク作成日時。", + "sortCustom": "カスタム", + "sortCustomDescription": "タスクに設定した手動順。", + "sortDirection": "並べ替え方向 {{direction}}", + "sortSummary": "{{sort}}、{{direction}}", + "sortLastActivity": "最終アクティビティ", + "sortLastActivityDescription": "最後のユーザーかエージェントの操作。タスクを見ても変わらない。", + "sortStatus": "ステータス", + "sortStatusDescription": "タスク状態。レビューからバックログまで。", + "sortTitle": "タイトル", + "sortTitleDescription": "タスクタイトルをアルファベット順。", + "sortUpdated": "更新日", + "sortUpdatedDescription": "最後のタスク要約更新。バックグラウンドイベントで変わることあり。", + "source": "ソース", + "sourceChangesTitle": "{{source}} の変更", + "specifyALocalPortOrLeave": "ローカルポート指定するか、空欄でランダム。Docker/K8s なら、事前に公開済みポート使う。", + "split": "分割", + "splitDown": "下に分割", + "splitRight": "右に分割", + "splitView": "分割ビュー", + "sprite": "スプライト", + "stageAll": "すべてステージ", + "stageAllChangesBeforeCommitting": "コミット前にすべての変更をステージ", + "stageApproval": "承認", + "stageCount": "{{selectionCount}} をステージ", + "stageFile": "ファイルをステージ", + "stageImplement": "実装", + "stageReview": "レビュー", + "stageShip": "リリース", + "start": "開始", + "start2": "開始", + "startAgent": "エージェント開始", + "startAgent2": "エージェント開始", + "composerStartAgentHint": "メッセージ送信でエージェント自動開始", + "startDevServerPreview": "開発サーバーのプレビュー開始", + "stopDevServerPreview": "開発サーバーのプレビュー停止", + "startFreshSession": "新しいセッション開始", + "startPlanMode": "計画モード開始", + "startTask": "タスク開始", + "startTaskInPlanMode": "計画モードでタスク開始", + "startTunnel": "トンネル開始", + "startTypingYourPlan": "計画を入力開始...", + "started": "開始済み", + "starting": "開始中...", + "startingAgent": "{{agentLabel}} を開始中", + "startingEllipsis": "開始中…", + "startingTerminal": "ターミナル開始中…", + "startingVsCodeServer": "VS Code Server を開始中", + "startsANewSessionWithA": "クリーンなコンテキストウィンドウで新しいセッション開始", + "state": "状態", + "status": "ステータス", + "statusBacklog": "バックログ", + "statusBlocked": "ブロック中", + "statusCancelled": "キャンセル済み", + "statusChangedFromTo": "ステータスが <1>{{from}} から <3>{{to}} に変更", + "statusCompleted": "完了", + "statusDone": "完了", + "statusInProgress": "進行中", + "statusInReview": "レビュー中", + "statusTodo": "未着手", + "statusUpdate": "ステータス更新", + "statusWorking": "作業中", + "stepCount_one": "{{count}}ステップ", + "stepCount_other": "{{count}}ステップ", + "stepFieldLabel": "ステップ", + "stepNumber": "ステップ {{index}}", + "stepOf": "全{{totalSteps}}ステップ中 {{stepNumber}}: {{stepLabel}}", + "stepOfWithStatus": "全{{totalSteps}}ステップ中 {{stepNumber}}: {{stepLabel}}, {{status}}", + "stillWorkingSubjectMany": "これらのタスクのうち1つ以上がまだ作業中", + "stillWorkingSubjectOne": "このタスクはまだ作業中", + "stillWorkingWarning": "{{subject}}。エージェントがバックグラウンドで生成または実行中。今進めると、まだ進行中の作業が破棄される。", + "stop": "停止", + "stopTunnel": "トンネルを停止", + "stoppedWithAnError": "エラーで停止", + "stopping": "停止中…", + "subagent": "サブエージェント", + "subIssues": "サブ課題", + "subTasks": "サブタスク", + "submit": "送信", + "submitAnswers": "回答を送信", + "submitUnavailable": "送信不可", + "submitting": "送信中…", + "subtask": "サブタスク", + "subtasksHeading_one": "{{count}}件のサブタスク", + "subtasksHeading_other": "{{count}}件のサブタスク", + "subtasksBecomeRootTasksUnlessYou": "これにチェックしないと、サブタスクはルートタスクになる。進行中のままの可能性あり。", + "subtasksStayActiveUnlessYouTick": "これにチェックしないと、サブタスクはアクティブのまま。進行中のままの可能性あり。", + "successful": "{{operationName}} 成功", + "summarize": "要約", + "summarizeReturnedNoResult": "要約ユーティリティが結果を返さなかった", + "summarizeSession": "セッションを要約", + "summarizeSessionNamed": "{{label}} を要約", + "summarizing": "要約中...", + "switchRecentTasks": "最近のタスクを切り替え", + "switchSidebarView": "サイドバー表示を切り替え: {{name}}", + "switchWorkflows": "Workflows を切り替え", + "switchWorkspace": "Workspace を切り替え", + "system": "システム", + "systemSender": "システム", + "targetAlreadyExists": "対象はすでに存在: {{newPath}}", + "task": "タスク", + "taskActions": "タスク操作", + "taskChat": "タスクチャット", + "taskCount_one": "{{count}}件のタスク", + "taskCount_other": "{{count}}件のタスク", + "taskDebug": "タスクデバッグ", + "taskDetails": "タスク詳細", + "taskHasAnAgentError": "タスクにエラーあり", + "taskName": "タスク名", + "taskNeedsRepositoryForSources": "このタスクは、ソース追加前にリポジトリが必要。", + "taskOverview": "タスク概要", + "taskStatusAndAttention": "タスクの状態と注意", + "taskTitle": "タスクタイトル", + "taskTools": "タスクツール", + "taskTreeCancelled": "タスクツリーをキャンセル済み", + "taskTreePaused": "タスクツリーを一時停止済み", + "taskTreeRestored": "タスクツリーを復元済み", + "taskTreeResumed": "タスクツリーを再開済み", + "tasks": "タスク", + "tasksAffected_one": "{{count}} 件のタスクに影響あり", + "tasksAffected_other": "{{count}} 件のタスクに影響あり", + "tcpPortsWithActiveListenersInside": "リモート実行環境内でアクティブなリスナーがある TCP ポート。更新をクリックして再スキャン。", + "technicalDetails": "技術詳細", + "terminal": "ターミナル", + "terminalCount_one": "{{count}} 個のターミナル", + "terminalCount_other": "{{count}} 個のターミナル", + "terminalNotAvailableThisTaskIs": "ターミナル使えない。このタスクはアーカイブ済み", + "terminalNumbered": "ターミナル #{{seq}}", + "terminalPromptInputAreDisabledUntil": "ターミナルとプロンプト入力は、次の実行が始まるまで無効。", + "terminalSessionEnded": "このセッションは終了済み。使えるターミナルなし。", + "terminalUnavailableNoActiveSession": "ターミナル使えない。アクティブなセッションなし。", + "terminalWithSeq": "ターミナル {{seq}}", + "terminals": "ターミナル", + "terminate": "終了", + "terminateTerminal": "ターミナル #{{seq}} を終了", + "terminateThisKillsTheRunningPty": "{{label}} を終了する? 実行中 PTY を切る。", + "theAgentAndRunningWorkspaceProcesses": "エージェントと実行中ワークスペースプロセスは継続。既存ファイル、Git 変更、記録済みタスクとセッションのコンテキストはそのまま。", + "theAgentCanWriteAndUpdate": "エージェントは作業しながら計画を書き、更新できる", + "theAgentHasFinishedItsLast": "エージェントは最後のターンを終え、次の有効トリガー待ち。下のファイルツリーはディスク上の worktree から読み込み。前のチャット履歴は保持済み。", + "theAgentHasMovedOn": "エージェントは次へ進んだ。返信は新しいメッセージとして送られる。", + "theAgentStoppedWithAnError": "エージェントがエラーで停止。再開で同じ会話をやり直すか、新しいセッションを開始。", + "theBrowserDidnTProvideImage": "ブラウザが画像データを提供しなかった。画像を保存して、代わりにファイルを添付。", + "theBuiltInDefaultLayoutWill": "組み込み Default レイアウトがデフォルトになる。", + "theConnectionDroppedOrTimedOut": "接続が切れたか、タイムアウト。タスクを更新して通ったか確認。", + "theIdleAgentRestartsAtThe": "アイドル中エージェントはタスクルートで再開。既存ファイル、Git 変更、タスクとセッション履歴、メッセージ、計画、添付ソース、モデル、モードはそのまま。", + "theTextIsDeliveredStraightTo": "テキストは CLI エージェントの stdin にそのまま渡る。保留中のレビューコメントがあれば、自動で先頭に付く。", + "theseAreTheSameVersionNothing": "同じバージョン。比較するものなし。", + "thinking": "考え中", + "thisConversationHasNoShareableContent": "この会話に共有できる内容なし。", + "thisExecutor": "この実行環境", + "thisIsTheOnlySessionFor": "このタスクのセッションはこれだけ。タスクワークスペースとそのファイルは、次のセッション用に保持される。", + "thisIsThePrimarySessionAnother": "これはメインセッション。別のセッションがメインに設定される。", + "thisRepositoryMustHaveACloneable": "このリポジトリにはクローン可能な origin が必要です。Kandev は追加前にそれを確認します。", + "thisRestartsTheTaskWorkspace": "これはタスクのワークスペースを再起動します", + "thisSavedLayoutWillBePermanently": "この保存済みレイアウトは完全に削除されます。", + "thisSessionDidNotFinishSetting": "このセッションはワークスペースのセットアップを完了できませんでした。", + "thisStopsTheShellAndAny": "これにより、\"{{terminalName}}\" シェルと実行中のコマンドが停止します。", + "thisTask": "このタスク", + "thisTask2": "このタスク", + "thisTaskHasLinkedPullRequests": "このタスクには {{length}} 件のリンクされたプルリクエストがあります。GitHub で開くものを 1 つ選択してください。", + "thisTaskIsArchivedAndRead": "このタスクはアーカイブされており、読み取り専用です。", + "thisTaskPointsToBranch": "このタスクは <1>{{branch}} を指していますが、そのブランチはリモートリポジトリで見つかりませんでした。マージまたは削除された可能性があります。", + "thisTaskSharesItsParentS": "このタスクは親のワークスペースを共有します。現在および今後のセッションでも、その共有ワークスペースが使用されます。", + "thisTearsDownTheCurrentContainer": "これにより、このタスクの現在のコンテナ、サンドボックス、または worktree が破棄され、次のセッションは新しい環境で開始されます。", + "thisTerminal": "このターミナル", + "thisUpdatesTheLiveTaskWorkspace": "これはライブのタスクワークスペースを更新します", + "thisWillClearTheAgentS": "これにより、エージェントの会話履歴が消去され、新しいコンテキストで開始されます。ワークスペース、ファイル、git 状態は保持されます。", + "thisWillPermanentlyDeleteSelectedItems": "これにより、選択した {{selectedCount}} 個の項目が完全に削除されます。この操作は元に戻せません。", + "thisWillPermanentlyDeleteTheConversation": "これにより、このセッションとの会話履歴が完全に削除されます。タスクワークスペースとそのファイルは保持されます。", + "ticket": "チケット", + "timedOutAgentMovedOn": "タイムアウトしました (エージェントが先に進みました)", + "title": "タイトル", + "title2": "{{longName}} のタイトル", + "title3": "{{longName}} のタイトル...", + "titleOptional": "タイトル (任意)", + "titleRequired": "タイトルは空にできません。", + "toFocus": "フォーカスするには", + "todos": "ToDo", + "todosCompleted": "{{completed}}/{{total}} 完了", + "goalActive": "目標が有効です", + "goalDetailsTitle": "目標", + "goalStatusActive": "有効", + "goalContinuationExplanation": "エージェントは返信の間も自動的に継続する場合があります。", + "goalDetailsDescription": "このセッションの有効な目標です。", + "goalCloseDetails": "目標の詳細を閉じる", + "toggleWordWrap": "折り返しを切り替え", + "tokenCount_one": "{{formatted}} トークン", + "tokenCount_other": "{{formatted}} トークン", + "tokens": "トークン", + "tool": "ツール", + "toolCall": "ツール呼び出し", + "toolCallCount_one": "{{count}} 件のツール呼び出し", + "toolCallCount_other": "{{count}} 回のツール呼び出し", + "toolCount_one": "{{count}} ツール", + "toolCount_other": "{{count}} ツール", + "tools": "ツール", + "toolSearching": "検索中", + "treeActionFailed": "ツリー操作失敗", + "treeCancelDescription": "これで {{taskCount}} 件のタスクをキャンセルし、稼働中のエージェントセッション {{activeRunCount}} 件を中断する。Restore で元に戻せる。", + "treeCost": "ツリーコスト", + "treeTasks": "ツリータスク", + "truncated": "省略済み", + "truncatedParen": "(省略済み)", + "tryAgain": "もう一度試す", + "tunnel": "トンネル", + "tunnelStartedOnPort": "ポート {{port}} でトンネル開始", + "tunnelStopped": "トンネル停止", + "turnForDuration": "{{duration}} の間", + "turnMessageCount_one": "· {{count}} 件のメッセージ", + "turnMessageCount_other": "· {{count}} 件のメッセージ", + "turnWorked": "完了", + "turnWorking": "作業中", + "typeAMessageMentionFilesOr": "メッセージを入力、ファイルやプロンプトを @メンション、改行は Shift+Enter", + "typeShaToConfirm": "確認するには <1>{{shortSha}} を入力:", + "typeToSearch": "入力して検索...", + "typeToSearchPreviousMessages": "過去メッセージを入力して検索...", + "typeToSearchWorkItems": "ワークアイテムを入力して検索", + "unNestRemoveParent": "ネスト解除(親を削除)", + "unarchive": "アーカイブ解除", + "unarchiveTask": "タスクをアーカイブ解除", + "uncommitted": "未コミット", + "unified": "統合", + "unifiedView": "統合ビュー", + "unknown": "不明", + "unknownAgent": "不明なエージェント", + "unknownError": "不明なエラー", + "unknownError2": "不明なエラー", + "unlink": "リンク解除", + "unnamed": "(無名)", + "unpin": "ピン解除", + "unpinTasksCount_one": "{{count}} 件のタスクをピン解除", + "unpinTasksCount_other": "{{count}} 件のタスクをピン解除", + "unpinWillBeRemovedAfterSend": "送信後に削除されるため固定解除", + "unpushedCommit": "未プッシュのコミット", + "unstageAll": "すべてステージ解除", + "unstageCount": "{{selectionCount}}件をステージ解除", + "unstageFile": "ファイルをステージ解除", + "untitled": "(無題)", + "update": "更新", + "updateComment": "コメントを更新", + "updateTask": "タスクを更新", + "updated": "更新済み", + "updatedTodos": "Todoを更新済み", + "updating": "更新中…", + "updating2": "更新中...", + "uploadFailed": "アップロード失敗", + "uploaded": "{{name}}をアップロード済み", + "uptime": "稼働時間", + "useAFullGithubIssueUrl": "このタスクに GitHub issue の完全な URL を使ってください。", + "useAFullGithubPullRequest": "このタスクに GitHub pull request の完全な URL を使ってください。", + "useAFullIssueUrlOr": "{{owner}}/{{repo}} に完全な issue の URL か番号を使ってください。", + "useAFullPullRequestUrl": "{{owner}}/{{repo}} に完全な pull request の URL か番号を使ってください。", + "useAnExistingCheckoutOnThis": "このマシンの既存 checkout を使ってください。", + "userSkippedClarification": "ユーザーがスキップ", + "usesCurrentBranch": "現在のブランチを使用", + "usesTheCurrentCheckoutKandevDoes": "現在の checkout を使用。Kandev はローカルリポジトリのブランチを切り替えません。", + "value": "値", + "verbIsDormant": "{{verb}} は休止中", + "versionNumber": "バージョン {{version}}", + "viaSession": "セッション経由", + "view": "表示:", + "viewLimitReached_one": "保存できる view は {{count}} 件まで。", + "viewLimitReached_other": "保存できる view は {{count}} 件まで。", + "viewName": "view 名", + "viewPlanHistory": "プラン履歴を表示", + "vsCode": "VS Code", + "vsCodeServer": "VS Code Server", + "waitForActiveTurnToFinish": "source を追加する前に、アクティブなターンかツール呼び出しの完了を待ってください。", + "waitForTaskSourcesToLoad": "source を追加する前に、task source の読み込み完了を待ってください。", + "waitingForAnActiveSession": "アクティブなセッションを待機中...", + "walkMeThroughTheseChanges": "変更内容を順に説明", + "walkMeThroughTheseReviewChanges": "レビュー変更内容を順に説明", + "walkthrough": "ウォークスルー: {{title}}", + "walkthrough2": "ウォークスルー", + "walkthroughNoteCount_one": "{{count}}件のウォークスルーノート", + "walkthroughNoteCount_other": "{{count}}件のウォークスルーノート", + "websocketClientNotAvailable": "WebSocket クライアントなし", + "whatShouldTheAgentWorkOn": "エージェントは何に取り組む?", + "workdir": "作業ディレクトリ", + "workedRanCommands_one": "完了。{{count}}コマンド実行", + "workedRanCommands_other": "完了。{{count}}コマンド実行", + "workflow": "ワークフロー", + "workflowCount_one": "{{count}}件のワークフロー", + "workflowCount_other": "{{count}}件のワークフロー", + "workflowLabel": "ワークフロー: {{label}}", + "workflowSender": "ワークフロー", + "workflowStepMessageFrom": "{{label}} からのワークフローステップメッセージ", + "working": "作業中...", + "working3": "作業中", + "working4": "作業中…", + "workingIn": "<1>{{path}} で作業中", + "workingInBackground": "バックグラウンドで作業中", + "workspaceActions": "ワークスペース操作", + "workspaceCount_one": "{{count}}件のワークスペース", + "workspaceCount_other": "{{count}}件のワークスペース", + "workspaceIsStillStarting": "ワークスペースはまだ起動中。", + "workspaceMode": "ワークスペースモード", + "workspaceModeLabel": "モード: {{mode}}", + "workspaceRepository": "ワークスペースリポジトリ", + "workspaceRequiresConfiguration": "ワークスペースに設定が必要", + "workspaceRestoreFailed": "このタスクのワークスペースに再接続できなかった。", + "workspaceRestoreInProgress": "このワークスペースに再接続中...", + "workspaceRestorePending": "このワークスペースに再接続中...", + "workspaceUnavailable": "ワークスペース利用不可", + "unknownTaskFallback": "(不明なタスク)", + "worktree": "ワークツリー", + "wouldCreateABlockerCycle": "ブロッカーの循環が発生する: {{cycle}}", + "writeAComment": "コメントを書く…", + "writeAPromptForTheAgent": "エージェント向けプロンプトを書く... (@で保存済みプロンプトを挿入)", + "writeYourChangesHere": "変更をここに書く", + "you": "あなた", + "youCanAttachUpToFiles": "最大 {{maxFiles}} 個のファイルを添付できる。", + "yourBranchesLabel": "ブランチ:", + "yourChangedFilesWillAppearHere": "変更したファイルがここに表示されます", + "yourCodeLivesInLabel": "コードの場所:", + "yourReviewIsRequestedOnThis": "このタスクにレビュー依頼があります。", + "autopilot": "自動操縦", + "autopilotDescription": "エージェントは独立して動作し、重要な判断で進行が止まる場合にのみ親タスクに確認します。その後、回答を待ってから続行します。", + "autopilotInfoLabel": "自動操縦の詳細", + "autopilotSidebarDescription": "自動操縦タスク", + "autopilotChatDescription": "自動操縦が有効です。エージェントは重要な判断についてのみ親に確認します。", + "duplicateRepository": "リポジトリが重複しています", + "duplicateRepositoryDescription": "{{repository}} が複数回追加されています。重複している行を削除してください。", + "repositoryStillBeingVerified": "リポジトリはまだ検証中です", + "repositoryProviderVerificationFailed": "Kandev はこのプロバイダー URL を検証できませんでした。リポジトリ行で再試行を使用してください。", + "repositoryProviderVerificationPending": "タスクを作成する前に、プロバイダーの確認が完了するまでお待ちください。", + "repositorySelectionInvalid": "選択されたリポジトリを検証できませんでした。", + "repositorySelectionNotFound": "選択されたリポジトリが見つかりませんでした。", + "repositorySelectionUnavailable": "リポジトリプロバイダーを利用できません。接続を確認して、もう一度お試しください。", + "runnerReasonTaskArchived": "このタスクはアーカイブされているため、ランナーは変更できません。", + "runnerReasonNoRepository": "このタスクにはリポジトリがないため、ランナーは変更できません。", + "runnerReasonMultipleRepositories": "このタスクには複数のリポジトリがあるため、ランナーは変更できません。", + "runnerReasonSessionExists": "このタスクにはすでにセッションがあるため、ランナーは変更できません。", + "runnerReasonEnvironmentExists": "このタスクにはすでに環境があるため、ランナーは変更できません。", + "runnerReasonExecutorRunning": "このタスクの実行者はすでに実行中のため、ランナーは変更できません。", + "runnerReasonWorkspaceFolderAttached": "このタスクにはすでにワークスペースフォルダーが関連付けられているため、ランナーは変更できません。", + "runnerReasonWorkspacePathSet": "このタスクにはすでにワークスペースパスがあるため、ランナーは変更できません。", + "runnerReasonWorkspaceGroupMember": "このタスクは別のタスクとワークスペースを共有しているため、ランナーは変更できません。", + "runnerReasonWorkspaceBindingNotIndependent": "このタスクのワークスペースバインディングが独立していないため、ランナーは変更できません。", + "runnerReasonEvaluationUnavailable": "ランナーを確認できませんでした。もう一度お試しください。", + "runnerConflictTargetCannotMaterializeRepository": "その実行者では、このタスクのリポジトリを実行できません。", + "runnerSwitchNotFound": "このタスクが見つかりませんでした。", + "runnerSwitchInvalid": "その実行者プロファイルは利用できません。", + "runnerSwitchPartiallySaved": "ランナーは切り替わりましたが、他の変更を保存できませんでした。ほかの編集内容は下に表示されたままです。もう一度保存してください。", + "launchFailedAfterTaskSaved": "変更は保存されましたが、エージェントを起動できませんでした。もう一度起動をお試しください。", + "failedToCreateFile": "ファイルの作成に失敗しました", + "failedToCreateSession": "セッションの作成に失敗しました", + "failedToCreateTask": "タスクの作成に失敗しました", + "failedToDeleteItem": "項目の削除に失敗しました", + "failedToDeletePlan": "プランの削除に失敗しました", + "failedToDownloadFile": "ファイルのダウンロードに失敗しました", + "failedToFetchPlan": "プランの取得に失敗しました", + "failedToLoadPlanRevisions": "改訂の読み込みに失敗", + "failedToRevertPlan": "プランの元に戻しに失敗", + "failedToSavePlan": "プランの保存に失敗", + "failedToStartTaskPlanMode": "プランモードでタスク開始に失敗", + "failedToUpdateTask": "タスクの更新に失敗", + "noPullOrMergeRequestLinked": "このタスクに pull request か merge request がリンクされていない", + "sessionEndedCreateNew": "セッション終了。続行するには新しいセッションを作成してください。", + "sessionUnavailableForInput": "このセッションは入力不可", + "taskQueued": "タスクをキューに追加", + "taskQueuedWipLimit": "ワークフローステップが WIP 上限。空き出たらこのタスクを開始する。", + "failedToCheckRepositoryStatus": "ローカルリポジトリ状態の確認に失敗", + "failedToDiscoverRepositories": "リポジトリの検出に失敗", + "failedToLoadCommitDiff": "コミット差分の読み込みに失敗", + "failedToNestTask": "タスクのネストに失敗", + "failedToProceedToNextStep": "次のステップへの進行に失敗", + "failedToStartImplementingPlan": "プラン実装の開始に失敗", + "failedToStartImplementationSession": "実装セッションの開始に失敗", + "failedToMoveTask": "タスクの移動に失敗", + "taskMoveErrorGeneric": "タスクを移動できない。もう一度試して。", + "taskMoveErrorActiveSession": "タスクを移動する前にアクティブセッションを停止して。", + "taskMoveErrorArchived": "アーカイブ済みタスクは移動不可。", + "taskMoveErrorDifferentWorkspace": "タスクと対象ワークフローは同じ workspace を使う必要あり。", + "taskMoveErrorWorkflowStep": "対象ステップが対象ワークフローに属していない。", + "taskMoveErrorWipLimit": "対象ワークフローステップが WIP 上限。", + "failedToReorderTasks": "タスクの並べ替えに失敗", + "taskReorderErrorGeneric": "新しい順序を保存できない。もう一度試して。", + "movedTasksStepDescription_one": "タスクは選択したステップに移動済み。", + "movedTasksStepDescription_other": "タスクは選択したステップに移動済み。", + "movedTasksToStep_one": "タスクをステップに移動", + "movedTasksToStep_other": "{{count}} 件のタスクをステップに移動", + "movedTasksToWorkflow_one": "タスクをワークフローに移動", + "movedTasksToWorkflow_other": "{{count}} 件のタスクをワークフローに移動", + "movedTasksWorkflowDescription_one": "表示するには移動先ワークフローに切り替えて。", + "movedTasksWorkflowDescription_other": "表示するには移動先ワークフローに切り替えて。", + "sessionActionDelete": "セッション削除中", + "sessionActionFailed": "{{action}} 失敗", + "sessionActionProgress": "{{action}}...", + "sessionActionResume": "セッション再開中", + "sessionActionSetPrimary": "主に設定", + "sessionActionStop": "セッション停止中", + "sessionActionSuccessful": "{{action}} 成功", + "dynamicRouteWaiting": "利用可能なエージェントなし。", + "dynamicRouteActionRequired": "このルートには回復操作が必要。", + "dynamicRouteRetry": "現在のエージェントを再試行", + "dynamicRouteRetryNow": "今すぐ再試行", + "dynamicRouteTryNext": "次のエージェントを試す", + "dynamicRouteSkipNow": "今すぐスキップ", + "dynamicRouteRetrying": "エージェントを再試行中...", + "dynamicRouteTryNexting": "次のエージェントを試行中...", + "dynamicRouteSkipping": "エージェントをスキップ中...", + "dynamicRouteCancelWait": "待機をキャンセル", + "dynamicRouteStop": "停止", + "dynamicRouteReasonCandidateOrder": "プロファイル順で選択", + "dynamicRouteReasonNoEligibleCandidate": "条件を満たす候補なし", + "dynamicRouteReasonProviderUnavailable": "プロバイダ利用不可", + "dynamicRouteReasonQuotaLimited": "プロバイダ使用上限", + "dynamicRouteErrorClass": "エラークラス: {{class}}", + "dynamicRouteErrorCode": "エラーコード: {{code}}", + "dynamicRouteRetryOrdinal_one": "{{count}}回目を再試行", + "dynamicRouteRetryOrdinal_other": "{{count}}回目を再試行", + "dynamicRouteDeadline": "次の復旧試行: {{deadline}}", + "dynamicRoutePendingOutcome": "復旧後: {{outcome}}", + "sessionCompleted": "このセッションは完了。", + "composerPlaceholderRecovery": "上の復旧オプション選んで続行...", + "composerPlaceholderClarification": "質問保留中は指示をキューに入れる...", + "composerPlaceholderBusy": "エージェントに指示をキューに入れる...", + "composerPlaceholderFile": "このファイル作業を続行...", + "composerPlaceholderPlan": "この計画を続行...", + "composerPlaceholderTask": "このタスクを続行...", + "composerPlaceholderSwitchingAgent": "エージェント切り替え中...", + "agentHasStopped": "このエージェントは停止。", + "resuming": "再開中...", + "submitTooltipQueueMessage": "メッセージをキューに入れる", + "submitTooltipRequestPlanChanges": "計画変更を依頼", + "clarificationNoSelection": "選択なし", + "monitorStatusWatching": "監視中", + "monitorStatusEnded": "終了", + "monitorStatusEndedSessionRestart": "終了(セッション再開)", + "agentStillBeingSetUp": "エージェントはまだセットアップ中。", + "attachmentUploadFailed": "アップロード失敗", + "renameFailed": "名前変更失敗", + "workspaceUnavailableArchived": "ワークスペース利用不可。このタスクはアーカイブ済み。", + "credentialSourceWorkspace": "管理対象ワークスペースのID", + "credentialSourceExecutorProfile": "Executorプロファイルのトークン", + "credentialSourceExecutor": "Executor認証情報", + "credentialWorkspacePat": "ワークスペースの個人用アクセストークン", + "credentialWorkspaceGhCli": "ワークスペースのGitHub CLIアカウント", + "credentialWorkspaceGithubApp": "ワークスペースのGitHub App", + "credentialWorkspaceFallback": "ワークスペースのGitHub認証情報", + "credentialTransportManagedHttps": "Kandev管理のGitHub HTTPSとgh", + "credentialTransportProfileToken": "executorプロファイルのトークン", + "credentialTransportExecutorSelected": "executorのGitとgh認証情報", + "credentialTransportManagedFallback": "Kandev管理のタスク認証情報", + "credentialExplicitToken": "明示的な GH_TOKEN または GITHUB_TOKEN", + "agentResponseChangedSelectAgain": "エージェント応答が変わった。もう一度テキスト選択。", + "invalidGitHubUrl": "無効なGitHub URL。想定は github.com/owner/repo または .../pull/123", + "couldNotGenerateSummary": "要約を生成できなかった", + "updateAvailableToast": "Kandev {{version}} 利用可。Settings > System > Updates 開いて確認。", + "failedToLoadFileContent": "ファイル内容の読み込み失敗", + "openFileInProvider": "{{provider}} でファイルを開く", + "failedToResumeAndRestore": "セッション再開失敗。ワークスペース復元も不可", + "resumeAndRestoreFailed": "再開失敗: {{resumeError}}。ワークスペース復元失敗: {{restoreError}}。", + "sessionRecoveryFailed": "セッション復旧失敗", + "sessionRecoveryFailedDetail": "セッションを復元できませんでした。", + "sessionRecoveryDetails": "復旧詳細", + "sessionRecoveryResumeAttempt": "再開試行", + "sessionRecoveryRestoreAttempt": "ワークスペース復元試行", + "sessionHistoryRetrying": "いつもより時間かかる。再試行中...", + "sessionHistoryUnavailable": "会話を読み込めませんでした。", + "sessionHistoryUnknownError": "履歴リクエスト失敗。", + "sessionStatusUnavailable": "セッション状態は取得不可。", + "sessionStatusUnavailableDetail": "セッションはまだ利用可能。状態確認を再試行して。", + "sessionBootstrapRecoveryTitle": "セッション起動に対応必要", + "sessionBootstrapRecoverySummary": "エージェントを起動できませんでした。再開を再試行するか、ワークスペースを読み取り専用で復元して。", + "sessionBootstrapCauseAuthenticationRequired": "エージェント認証が必要。", + "sessionBootstrapCausePermissionDenied": "必要なコントリビューションアクセスが拒否された。", + "sessionBootstrapCauseDestinationInvalid": "コントリビューション先が無効。", + "sessionBootstrapCauseSourceBranchMissing": "コントリビューション元ブランチが利用不可。", + "sessionBootstrapCauseTransportUnavailable": "コントリビューションサービスに接続できなかった。", + "sessionBootstrapCauseTimeout": "起動操作がタイムアウトした。", + "sessionBootstrapCauseUnknown": "起動操作を完了できなかった。", + "resumeFailedWorkspaceReadOnly": "ワークスペースを読み取り専用で復元済み", + "continueOnNewBranch": "新しいブランチで続行", + "restoreReadOnlyWorkspace": "読み取り専用ワークスペースを復元", + "sessionRecoveryGuardInProgress": "このセッションのエージェントは、バックエンド再起動後の整合中。自動で消える。数秒待って再試行して。", + "sessionRecoveryGuardUnstoppable": "このセッションの以前のエージェントプロセスは、バックエンド再起動後に停止できなかった。バックエンドを再起動して解消し、その後もう一度試して。", + "sessionStatusGenerating": "生成中", + "branchDisabledLocalExecutor": "ローカル実行器はリポジトリの現在のチェックアウトを使うので、ここではブランチ変更できない。別のベースを選ぶには 'Fork a new branch' を切り替えて。", + "branchDisabledNoBranches": "このリポジトリで利用できるブランチなし。", + "branchDisabledSelectRepositoryFirst": "先にリポジトリを選んで。", + "branchPrefixCurrent": "現在: ", + "branchPrefixFrom": "元: ", + "branchPrefixWillSwitchTo": "切り替え先: ", + "branchTooltipCurrent": "リポジトリの現在のチェックアウト。エージェントはそのまま実行。git操作なし。", + "branchTooltipFrom": "ベースブランチ。ここから新しいブランチまたは worktree を分岐し、エージェントをそこで実行。", + "branchTooltipGeneric": "エージェントが実行するブランチ。", + "branchTooltipWillSwitchTo": "バックエンドはエージェント開始前に `git checkout` を実行して、リポジトリをこのブランチに切り替える。", + "cleanupAgentSessionsStopped": "実行中エージェントセッションは停止される。", + "cleanupBulkLocal_one": "{{count}} 個のローカルタスクがリポジトリ内で直接実行された。リポジトリフォルダは触られない。", + "cleanupBulkLocal_other": "{{count}} 個のローカルタスクがリポジトリ内で直接実行された。リポジトリフォルダは触られない。", + "cleanupBulkKubernetes_one": "{{count}} 個の Kubernetes Pod が削除されます。Kandev 管理のストレージは削除されます。既存の claim は保持されます。", + "cleanupBulkKubernetes_other": "{{count}} 個の Kubernetes Pod が削除されます。Kandev 管理のストレージは削除されます。既存の claim は保持されます。", + "cleanupBulkLocalDocker_one": "{{count}} 個の Docker コンテナが削除されます。", + "cleanupBulkLocalDocker_other": "{{count}} 個の Docker コンテナが削除されます。", + "cleanupBulkRemoteDocker_one": "{{count}} 個のリモート Docker コンテナが削除されます。", + "cleanupBulkRemoteDocker_other": "{{count}} 個のリモート Docker コンテナが削除されます。", + "cleanupBulkSprites_one": "{{count}} 個の Sprites サンドボックスが破棄されます。未コミット作業は失われます。", + "cleanupBulkSprites_other": "{{count}} 個の Sprites サンドボックスが破棄されます。未コミット作業は失われます。", + "cleanupBulkSsh_one": "{{count}} 個のリモートタスクディレクトリが削除されます。", + "cleanupBulkSsh_other": "{{count}} 個のリモートタスクディレクトリが削除されます。", + "cleanupBulkSshNote": "ベストエフォート削除なので、完了しない場合があります。ローカルリポジトリには触れません。", + "cleanupBulkWorktree_one": "{{count}} 個の worktree とそのブランチが削除されます。", + "cleanupBulkWorktree_other": "{{count}} 個の worktree とそのブランチが削除されます。", + "cleanupBulkWorktreeNote": "メインリポジトリと他のブランチには影響しません。", + "cleanupBulkLocalDockerNote": "ホストリポジトリには触れません。", + "cleanupSingleLocal": "エージェントはリポジトリ内で直接実行されました。ファイル、ブランチ、フォルダには触れません。", + "cleanupSingleKubernetes": "Kubernetes Pod が削除されます。Kandev 管理のストレージは削除されます。既存の claim は保持されます。", + "cleanupSingleLocalDocker": "このタスクを実行中の Docker コンテナは停止され、削除されます。", + "cleanupSingleLocalDockerNote": "ホストリポジトリには触れません。", + "cleanupSingleRemoteDocker": "このタスクを実行中のリモート Docker コンテナは停止され、削除されます。", + "cleanupSingleSprites": "このタスクの Sprites クラウドサンドボックスは破棄されます。中の未コミット作業は失われます。", + "cleanupSingleSsh": "リモートホスト上のタスクディレクトリが削除されます。", + "cleanupSingleSshNote": "ベストエフォート削除なので、完了しない場合があります。ローカルリポジトリには触れません。", + "cleanupSingleWorktree": "タスクの git worktree とそのブランチが削除されます。", + "cleanupSingleWorktreeNote": "メインリポジトリと他のブランチには影響しません。", + "enhancedPromptCopiedToClipboard": "拡張プロンプトをクリップボードにコピーしました。", + "enhancedPromptCouldNotBeCopied": "拡張プロンプトをコピーできませんでした。", + "enhancedPromptCouldNotBeInserted": "拡張プロンプトは生成されましたが、挿入できませんでした。", + "environmentNotCreated": "未作成", + "failedToCreateSubtask": "サブタスクの作成に失敗しました", + "failedToDetachTask": "タスクの切り離しに失敗しました", + "failedToFetchCumulativeDiff": "累積 diff の取得に失敗しました", + "failedToLoadFileTree": "ファイルツリーの読み込みに失敗しました", + "gitOperationFailedGeneric": "操作に失敗しました", + "invalidRegex": "無効な正規表現", + "messageFetchLimitHint": "このセッションの直近ターンより前に、ユーザープロンプトとエージェント応答がもっとあります。取得上限が小さすぎる可能性があります。ページ分割するか、上限を上げて表示してください。", + "messagePreviewShortened": "メッセージのプレビューを短縮しました", + "noBranchesShort": "ブランチなし", + "referenceSearchFailedRetry": "参照検索に失敗しました。再試行してください。", + "sessionFailedUnexpectedly": "セッションが予期せず失敗しました", + "sessionNotAvailableForInput": "選択したセッションは入力不可。", + "sessionStatusStarting": "開始中", + "sessionStatusTurnFinished": "ターン終了", + "summarizeCouldNotGenerate": "要約を生成できなかった。要約ユーティリティエージェントが設定で構成され、有効か確認。", + "summarizeFailed": "要約失敗", + "taskClosed": "タスク終了", + "taskClosedAutomatically": "このタスクは自動で終了。", + "taskClosedIssueClosed": "関連 issue が閉じたので、このタスクも自動で終了。", + "taskClosedPrApproved": "関連 pull request が承認されたので、このレビュータスクも自動で終了。", + "taskClosedPrMergedOrClosed": "関連 pull request がマージまたはクローズされたので、このレビュータスクも自動で終了。", + "taskFailedToStart": "タスク開始失敗", + "taskTitledWasClosed": "\"{{title}}\" は閉じた", + "updateFailed": "更新失敗", + "workspaceRoot": "ワークスペースルート", + "worktreeExecutorRequiresRepository": "worktree 実行には repository 必要。", + "worktreeNumbered": "Worktree {{index}}", + "launchDestinationHelpLabel": "タスク開始ステップを見る", + "launchDestinationHelp": "タスクはこの workflow ステップで開始。task description があると、自動開始ステップが設定済み Start ステップより優先される。", + "launchErrorBaseBranchMissing": "base branch が使えないので、タスク開始できなかった。", + "launchErrorDefaultBranchUnresolved": "repository の default branch を解決できなかった。", + "launchErrorPrAlreadyClosed": "タスクは閉じた pull request にリンク済み。", + "launchErrorWorkspaceCheckoutFailed": "タスクの launch 用 workspace を準備できなかった。", + "launchErrorGeneric": "タスク開始できなかった。", + "launchErrorSessionPreview": "タスク launch に対応必要。", + "launchNeedsAttention": "launch に対応必要", + "launchErrorNoChanges": "task か branch 設定、どちらも変更なし。", + "launchPromptPreview": "プロンプトプレビューを起動", + "retryWithDefaultBranch": "default branch で再試行", + "pickBaseBranch": "base branch を選ぶ", + "markReviewDone": "レビュー完了にする", + "retryLaunch": "launch 再試行", + "chooseBaseBranch": "base branch を選択", + "chooseBaseBranchDescription": "task を再 launch する前に使う branch を選択。", + "baseBranchNotSet": "base branch 未設定", + "launchRecoveryFailed": "recovery 開始できなかった", + "tryRecoveryAgain": "recovery 操作をもう一度試す。", + "launchFailedSeeDetails": "task launch 失敗。recovery 操作用に task details を開く。", + "previewLaunchPrompt": "workflow step prompt 付きで launch prompt をプレビュー: {{step}}", + "branchPoliciesGroup": "branch ポリシー", + "branchesGroup": "branches", + "branchPolicyMarker": "ポリシー", + "branchPolicyOptionSummary": "{{base}} から {{target}} へ", + "branchPolicySelected": "{{name}} ({{base}} から)", + "branchPolicyUnavailable": "ベースブランチを利用できません。ブランチを更新するか、このポリシーを編集してください。", + "branchPolicyRequiresSingleRepository": "ブランチポリシーをローカルエクゼキュータで使用するには、単一リポジトリである必要があります。", + "assignedTo": "担当者", + "unassigned": "未割り当て", + "assignToMe": "自分に割り当てる", + "searchPeople": "ユーザーを検索", + "noPeopleFound": "ユーザーが見つかりません", + "assignedToName": "{{name}} に割り当て済み", + "uploadConflictTitle_one": "{{count}} 件のファイルはすでに存在します", + "uploadConflictTitle_other": "{{count}} 件のファイルはすでに存在します", + "uploadConflictBody": "各項目の処理を選択してください。確定するまでアップロードは行われません。", + "uploadConflictApplyToAll": "すべてに適用", + "uploadConflictKeepBoth": "両方を残す", + "uploadConflictReplace": "置き換える", + "uploadConflictSkip": "スキップ", + "uploadConflictConfirm": "アップロード", + "uploadFiles": "ファイルをアップロード", + "uploadFolder": "フォルダをアップロード", + "uploadFilesHere": "ここにファイルをアップロード", + "uploadComplete_one": "{{count}} 件のファイルをアップロードしました", + "uploadComplete_other": "{{count}} 件のファイルをアップロードしました", + "uploadedTo": "{{path}} にアップロードしました", + "failedToUploadFile": "ファイルのアップロードに失敗しました", + "uploadPartiallyFailed_one": "{{count}} 件のファイルのアップロードに失敗しました", + "uploadPartiallyFailed_other": "{{count}} 件のファイルのアップロードに失敗しました", + "failedToLoadPlanComments": "プランコメントを読み込めませんでした。もう一度お試しください。", + "failedToSavePlanComment": "このプランコメントを保存できませんでした。もう一度お試しください。", + "failedToDeletePlanComment": "このプランコメントを削除できませんでした。もう一度お試しください。", + "failedToRunPlanComment": "このプランコメントを実行できませんでした。もう一度お試しください。", + "noPrimarySessionForPlanComment": "利用可能なプライマリセッションがありません。セッションを開始するか、1 つをプライマリにして Run を使用してください。", + "primarySessionUnavailableForPlanComment": "プライマリセッションは入力を受け付けられません。利用可能なプライマリセッションを開始するか選択してください。", + "planCommentNotReadyToRun": "このプランコメントはまだ保存中です。もう一度 Run を試してください。", + "planCommentsChangedRetry": "プランコメントが変更されました。確認して、もう一度送信してください。", + "primarySessionChangedRetry": "プライマリセッションが変更されました。もう一度 Run を試してください。", + "planCommentMigrationFailed": "保存済みのプランコメントの一部を復元できませんでした。", + "planCommentMigrationNeedsPlan": "保存済みコメントを復元するには、プランを作成または復元してください。", + "planCommentMigrationPending": "保存済みのプランコメントをまだ復元中です。メッセージは保持されています。", + "checkoutOptions.title": "リポジトリオプション", + "checkoutOptions.taskOnly": "このタスクのみ", + "checkoutOptions.download": "ダウンロード", + "checkoutOptions.standard": "標準", + "checkoutOptions.onDemand": "オンデマンド", + "checkoutOptions.downloadHelp": "オンデマンドは必要時にファイル内容をダウンロードし、コミット履歴を全部保持する。", + "checkoutOptions.folders": "チェックアウトするフォルダ", + "checkoutOptions.allFolders": "全フォルダ", + "checkoutOptions.selectedFolders": "選択したフォルダ", + "checkoutOptions.directories": "ディレクトリ", + "checkoutOptions.foldersHelp": "1行につき、リポジトリ相対ディレクトリ1つ。ルートファイルと親ディレクトリのファイルは利用可能のまま。最大64ディレクトリ。", + "checkoutOptions.invalidDirectories": "有効な相対ディレクトリを入力。ワイルドカード、親パスなし。", + "checkoutOptions.unavailable": "サポート確認できなかった。", + "checkoutOptions.checking": "リポジトリサポート確認中…", + "checkoutOptions.executorRequired": "サポート確認する実行環境を選んで。", + "checkoutOptions.providerUnsupported": "高度なチェックアウトオプションは、今は GitHub リポジトリで使える。", + "checkoutOptions.preparationUnsupported": "このオプション使うには、組み込み準備スクリプト付きの Worktree か Local Docker を選んで。", + "checkoutOptions.reset": "リセット", + "checkoutOptions.cancel": "キャンセル", + "checkoutOptions.apply": "適用", + "checkoutOptions.folderCount_one": "{{count}} フォルダ", + "checkoutOptions.folderCount_other": "{{count}} フォルダ", + "checkoutOptions.openFor": "{{repository}} のリポジトリオプション", + "checkoutOptions.repositoryRequired": "先にリポジトリ選んで", + "checkoutOptions.invalidLine": "{{line}} 行目のディレクトリが無効。", + "checkoutOptions.credentialsUnsupported": "高度なチェックアウトオプションには、Kandev 管理の Git 認証情報を使って。", + "toolPayloadRemovedAt": "ツール詳細は {{date}} に削除済み。", + "toolPayloadRemoved": "ツール詳細は削除済み。", + "openTaskSwitcherFor": "タスク切替を開く: {{title}}" +} diff --git a/apps/web/src/locales/ja/tasks.json b/apps/web/src/locales/ja/tasks.json new file mode 100644 index 0000000000..49ffbe3cdc --- /dev/null +++ b/apps/web/src/locales/ja/tasks.json @@ -0,0 +1,59 @@ +{ + "approvalRequired": "承認が必要", + "archive": "アーカイブ", + "archived": "アーカイブ済み", + "archiveTask": "タスクをアーカイブ", + "changesRequested": "変更が要求されました", + "columnStep": "ステップ", + "columnTask": "タスク", + "columnUpdated": "更新日", + "columnWorkflow": "ワークフロー", + "delete": "削除", + "deleteTask": "タスクを削除", + "failedToArchiveTask": "タスクのアーカイブに失敗しました", + "failedToDeleteTask": "タスクの削除に失敗しました", + "failedToLoadTasks": "タスクの読み込みに失敗しました", + "failedToUnarchiveTask": "タスクのアーカイブ解除に失敗しました", + "goToFirstPage": "最初のページへ移動", + "goToLastPage": "最後のページへ移動", + "goToNextPage": "次のページへ移動", + "goToPreviousPage": "前のページへ移動", + "group": "グループ", + "groupByNone": "なし", + "groupByRepository": "リポジトリ", + "groupByState": "状態", + "groupByWorkflow": "ワークフロー", + "ungrouped": "グループなし", + "loading": "読み込み中...", + "loadingTasks": "タスクを読み込み中...", + "noRepository": "リポジトリなし", + "noTasksFound": "タスクが見つかりませんでした。", + "noWorkflow": "ワークフローなし", + "openInAdvancedView": "詳細表示で開く", + "openInOfficeView": "オフィス表示で開く", + "rowsPerPage": "1ページあたりの行数", + "showArchived": "アーカイブ済みを表示", + "showingRange_one": "{{count}}件中{{start}}から{{end}}件を表示しています", + "showingRange_other": "{{count}}件中{{start}}から{{end}}件を表示しています", + "simpleViewForKanbanTasksShows": "カンバンのタスク向けのシンプル表示では、パネル内にすでにあるチャットを表示します。コメント、プロパティ、アクティビティタイムラインを含む完全なLinear風の体験を使うには、このタスクをオフィス表示で開いてください。", + "simpleViewShowsTheChatThat": "シンプル表示では、パネル内にすでにあるチャットを表示します。{{simpleQuery}} を使って詳細レイアウトに戻してください。", + "sort": "並べ替え", + "sortCreatedNewest": "作成日の新しい順", + "sortCreatedOldest": "作成日 古い順", + "sortTitleAZ": "タイトル A-Z", + "sortTitleZA": "タイトル Z-A", + "sortUpdatedNewest": "更新日 新しい順", + "sortUpdatedOldest": "更新日 古い順", + "taskArchived": "タスクをアーカイブ済み", + "taskArchivedDescription": "タスクを正常にアーカイブした。", + "taskArchiveCompleted_one": "{{count}}件のタスクをアーカイブした。", + "taskArchiveCompleted_other": "{{count}}件のタスクをアーカイブした。", + "taskDeleteCompleted_one": "{{count}}件のタスクを削除した。", + "taskDeleteCompleted_other": "{{count}}件のタスクを削除した。", + "taskUnarchived": "タスクのアーカイブ解除済み", + "unarchive": "アーカイブ解除", + "unarchivedBranchesMissing_one": "ブランチ{{branches}}はローカルにもリモートにももうない。次のセッションはベースブランチから新しく始まる。", + "unarchivedBranchesMissing_other": "ブランチ{{branches}}はローカルにもリモートにももうない。次のセッションはベースブランチから新しく始まる。", + "unarchivedTaskRestored": "タスクを復元した。", + "unarchiveTask": "タスクをアーカイブ解除" +} diff --git a/apps/web/src/locales/ja/threads.json b/apps/web/src/locales/ja/threads.json new file mode 100644 index 0000000000..7401cb1378 --- /dev/null +++ b/apps/web/src/locales/ja/threads.json @@ -0,0 +1,151 @@ +{ + "columnLabel": "{{title}} のエージェントスレッド", + "chooseThread": "スレッドを選択", + "chooseThreadLabel": "スレッドを選択。現在: {{title}}", + "chooseThreadDescription": "このビューの会話へ移動する。", + "threadPosition": "{{position}}/{{total}}", + "emptyBody": "Threads は実行中エージェントを横に並べる。タスクでエージェントを起動すると、その会話がここに列として出る。", + "emptyTitle": "今は動いてるエージェントなし", + "loading": "スレッドを読み込み中...", + "gridHeightFallback": "グリッドはもっと高さ必要。Columns を表示中。", + "collapseComposer": "コンポーザーを隠す", + "display": "表示", + "layout": "レイアウト", + "layoutColumns": "列", + "layoutGrid": "グリッド", + "layoutColumnsDescription": "読む、返事するための全高チャット。", + "layoutGridDescription": "もっと多くの会話を監視するための2段チャット。", + "autoHideComposer": "コンポーザーを自動で隠す", + "autoHideComposerDescription": "チャットにホバーかフォーカスでコンポーザー表示。隠れてる間は CI だけ見える。", + "touchComposerHint": "タッチ画面では、コンポーザーは表示されたまま。", + "phoneLayoutHint": "この選択は広い画面に適用。スマホは一度に1チャットだけ表示。", + "maxChatsDescription": "両段のチャット数を数える。Grid でこの上限は増えない。", + "newView": "新しいビュー", + "allThreads": "すべてのスレッド", + "backToViewEditor": "ビューエディタに戻る", + "chooseTasks": "タスク選択", + "selectedTaskCount_one": "{{count}} 件選択", + "selectedTaskCount_other": "{{count}} 件選択", + "taskSelectionLimitReached_one": "選べるタスクは最大 {{count}} 件", + "taskSelectionLimitReached_other": "選べるタスクは最大 {{count}} 件", + "searchTasks": "タスクを検索", + "selectAll": "すべて選択", + "clearAll": "すべて解除", + "noTasksToChoose": "選べるタスクなし", + "viewSettings": "表示設定", + "viewName": "表示名", + "taskScope": "タスク範囲", + "allEligibleTasks": "条件に合う全タスク", + "selectedTasks": "選択済みタスク", + "selectAtLeastOneTask": "少なくとも 1 件選択", + "filters": "フィルター", + "sort": "並び替え", + "toggleSortDirection": "並び順を切り替え", + "reapplySort": "並び替えを再適用", + "maxColumns": "最大チャット数", + "noColumnLimit": "制限なし", + "maxColumnsInvalid": "1 から 30 までの整数を入力、または空欄のままにする", + "filterLimitReached_one": "追加できるフィルターは最大 {{count}} 件", + "filterLimitReached_other": "追加できるフィルターは最大 {{count}} 件", + "filterValue": "値", + "removeFilter": "フィルターを削除", + "filterIs": "次に一致", + "filterIsNot": "次に一致しない", + "filterIn": "次に含まれる", + "filterNotIn": "次に含まれない", + "filterMatches": "一致する", + "filterNotMatches": "一致しない", + "filterThreadStatus": "スレッド状態", + "filterPendingAction": "保留中のアクション", + "filterTaskState": "タスク状態", + "filterWorkflow": "ワークフロー", + "filterWorkflowStep": "ワークフローのステップ", + "filterRepository": "リポジトリ", + "filterPrimaryAgent": "主要エージェント", + "filterExecutorType": "実行タイプ", + "filterPriority": "優先度", + "filterBlocked": "ブロック中", + "filterQueuedPrompts": "キュー済みプロンプト", + "filterActiveSubagents": "アクティブなサブエージェント", + "filterDiff": "変更あり", + "filterPullRequest": "プルリクエストあり", + "filterPullRequestAttention": "プルリクエスト要確認", + "filterTaskType": "タスク種別", + "filterTitle": "タイトル", + "filterActiveError": "アクティブエラー", + "filterTaskLabel": "タスクラベル", + "filterTaskOrigin": "タスク起点", + "filterMultipleSessions": "複数セッション", + "originManual": "手動", + "originAgentCreated": "エージェント作成", + "originRoutine": "ルーチン", + "originOnboarding": "オンボーディング", + "originAutomationRun": "自動化実行", + "originAutomationTask": "自動化タスク", + "statusNeedsAction": "対応必要", + "statusRunning": "実行中", + "statusWaiting": "待機中", + "statusReadyForReview": "レビュー準備完了", + "pendingClarification": "確認待ち", + "pendingPermission": "権限待ち", + "pendingNone": "なし", + "taskTypeStandard": "標準", + "taskTypePullRequestReview": "プルリクエストレビュー", + "taskTypeIssueWatch": "Issue監視", + "sortAttention": "注意度", + "sortAttentionDescription": "まず対応必要なタスク、次に実行中かレビュー中のタスク、最後に待機中タスクを表示。各グループ内は最近の動きで並べる。", + "sortLastActivity": "最終アクティビティ", + "sortLastActivityDescription": "最後のユーザーまたはエージェントのアクティビティ時刻。", + "sortUpdated": "更新日時", + "sortUpdatedDescription": "タスク記録の最後の変更時刻。", + "sortCreated": "作成日時", + "sortCreatedDescription": "タスク作成時刻。", + "sortTitle": "タイトル", + "sortTitleDescription": "タスクタイトルをアルファベット順で並べる。", + "sortTaskState": "タスク状態", + "sortTaskStateDescription": "作成からキャンセルまでのタスクのライフサイクル状態。", + "sortWorkflow": "ワークフロー", + "sortWorkflowDescription": "ワークフロー名、その後にワークフローステップ。", + "sortPriority": "優先度", + "sortPriorityDescription": "クリティカルから低までのタスク優先度。", + "sortPrimaryAgent": "主エージェント", + "sortPrimaryAgentDescription": "主エージェント名をアルファベット順。", + "viewPickerLabel": "{{name}} を表示", + "viewSettingsFor": "{{name}} の設定", + "columnsSummary": "{{matching}} 件中 {{admitted}} 件のチャット", + "hiddenCount_one": "非表示 {{count}} 件", + "hiddenCount_other": "非表示 {{count}} 件", + "saveAs": "名前を付けて保存", + "saveOrDiscardBeforeNewView": "別ビューを作る前に、現在の下書きを保存するか破棄して", + "saveOrDiscardBeforeSwitchingView": "ビュー切り替え前に、ビュー設定の変更を保存するか破棄して", + "viewLimitReached_one": "ビュー上限到達 ({{count}})", + "viewLimitReached_other": "ビュー上限到達 ({{count}})", + "newViewNumbered": "新しいビュー {{suffix}}", + "untitledView": "無題のビュー", + "copyName": "{{name}} のコピー", + "failedToSyncViews": "Threads のビュー同期に失敗", + "openInThreads": "Threads で開く", + "openTask": "タスクを開く", + "primarySession": "メイン", + "queuedPromptCount_one": "保留中プロンプト {{count}} 件", + "queuedPromptCount_other": "保留中プロンプト {{count}} 件", + "retrySessionList": "再試行", + "selectSession": "セッションを選択", + "selectSessionDescription": "このタスクに使う既存のエージェントセッションを選択して。", + "sessionListEmpty": "利用できるセッションなし。", + "sessionListLoading": "セッションを読み込み中...", + "sessionListUnavailable": "セッションを読み込めなかった。", + "statusCancelled": "キャンセル済み", + "statusCompleted": "完了", + "statusFailed": "失敗", + "statusNeedsYou": "対応必要", + "statusNotStarted": "未開始", + "statusPermissionNeeded": "権限が必要", + "statusQuestionFromAgent": "エージェントからの質問", + "statusStarting": "開始", + "statusTurnFinished": "ターン終了", + "statusWorking": "作業中", + "subagentCount_one": "{{count}} サブエージェント", + "subagentCount_other": "{{count}} サブエージェント", + "title": "スレッド" +} diff --git a/apps/web/src/locales/ja/workflows.json b/apps/web/src/locales/ja/workflows.json new file mode 100644 index 0000000000..41dbf3c41c --- /dev/null +++ b/apps/web/src/locales/ja/workflows.json @@ -0,0 +1,325 @@ +{ + "aConfiguredRepository": "設定済みリポジトリ", + "addCondition": "条件を追加", + "adding": "追加中...", + "addWorkflow": "ワークフローを追加", + "agentProfile": "エージェントプロファイル", + "agentProfileHelp": "このワークフローのタスク用デフォルトエージェントプロファイル。設定すると、タスク作成ダイアログでエージェント選択固定。", + "allowManualMove": "手動移動を許可", + "allowManualMoveHelp": "ボード上でタスクをこのステップへドラッグ可能にする。", + "applyAnyway": "そのまま適用", + "autoArchive": "自動アーカイブ", + "autoArchiveAfter": "後", + "autoArchiveHelp": "タスクがこのステップに一定時間いた後、自動でアーカイブ。ワークフロー最後のステップ, たとえば Done, のボード整理に便利。", + "autoArchiveHours": "時間", + "automaticWorkflowCycle": "自動ワークフローサイクル", + "autoStartAgent": "エージェント自動開始", + "autoStartAgentHelp": "タスクがこのステップに入ったら、エージェントを自動で開始。", + "autoSync": "自動同期", + "autoSyncOff": "自動同期オフ", + "autoTransition": "自動遷移", + "branchLabel": "ブランチ", + "childrenCompletedHelp": "親タスクのステップで使う。アクティブな直接の子タスクが全部 COMPLETED, FAILED, CANCELLED になったら、Kandev がこの遷移を 1 回だけ実行。アーカイブ済みと一時的な子タスクは無視。孫タスクはここでは数えない。親に子タスクがなければ何も実行しない。", + "childrenCompletedHelpAria": "子タスク完了時の遷移の仕組み", + "chooseAgentFamily": "エージェントファミリーを選択", + "chooseModelAndSessionSettings": "モデルとセッション設定を選択", + "close": "閉じる", + "color": "色", + "colorBlue": "青", + "colorCyan": "シアン", + "colorGray": "グレー", + "colorGreen": "緑", + "colorIndigo": "インディゴ", + "colorOrange": "オレンジ", + "colorPurple": "紫", + "colorRed": "赤", + "colorYellow": "黄色", + "configureOriginalSessionOptions": "元の設定オプションを構成", + "configureOriginalSessionOptionsDescription": "最初のエージェントファミリーがルールに一致する場合にのみ、既存の会話タブを変更します。", + "confirmWorkflowCycle": "ワークフローのサイクルを確認", + "confirmWorkflowCycleDescription": "続行する前に、繰り返し実行されるエージェントを確認します。", + "copied": "コピーしました", + "copy": "コピー", + "createAnyway": "とにかく作成", + "customAgentProfile": "カスタムエージェントプロファイル", + "customTemplate": "カスタム", + "customTemplateDescription": "ゼロから独自のエージェントワークフローを作成します。", + "cycle": "サイクル", + "delete": "削除", + "deleteAndArchiveTasks": "タスクを削除してアーカイブ", + "deleteStep": "ステップを削除", + "deleteStepAffectsTasks_one": "{{stepName}} を削除すると、{{count}} 件のタスクにも影響します。", + "deleteStepAffectsTasks_other": "{{stepName}} を削除すると、{{count}} 件のタスクにも影響します。", + "deleteStepAndTasks": "ステップとタスクを削除", + "deleteStepDialogTitle": "ステップを削除", + "deleteStepNoTasks": "これにより、{{stepName}} のワークフローステップが完全に削除されます。", + "deleteStepWithMigration_one": "{{stepName}} には {{count}} 件のタスクがあります。移行先を選択するか、ステップとそのタスクを削除してください。", + "deleteStepWithMigration_other": "{{stepName}} には {{count}} 件のタスクがあります。移行先を選択するか、ステップとそのタスクを削除してください。", + "deleteWorkflow": "ワークフローを削除", + "deleteWorkflowDialogTitle": "ワークフローを削除", + "deleteWorkflowNoTasks": "これにより、ワークフローとそのすべてのステップが完全に削除されます。", + "deleteWorkflowWithTasks_one": "このワークフローには {{count}} 件のタスクがあります。移行先を選択するか、ワークフローを削除してタスクをアーカイブしてください。", + "deleteWorkflowWithTasks_other": "このワークフローには {{count}} 件のタスクがあります。移行先を選択するか、ワークフローを削除してタスクをアーカイブしてください。", + "directoryLabel": "ディレクトリ", + "directoryLine": "ディレクトリ {{path}}", + "completeTaskOnEnter": "最終ステップに入ったらタスクを完了", + "completeTaskOnEnterHelp": "この最終ステップに入るとタスクを完了済みにします。会話は引き続き続行できます。", + "completeTaskOnEnterHelpAria": "最終ステップでタスクを完了することについての詳細情報", + "disablePlanMode": "プランモードを無効化", + "disablePlanModeOnComplete": "完了時にプランモードを無効化", + "disablePlanModeOnCompleteHelp": "タスクがこのステップに残っていても、エージェントが 1 ターンを終えた後にプランモードをオフにします。", + "disablePlanModeOnExitHelp": "このステップではすべてのターンでプランモードをオンに保ち、タスクが別のステップに移動したときにのみオフにします。", + "doNothing": "何もしない", + "doNothingWaitForUser": "何もしない(ユーザーを待つ)", + "duplicateUnavailableInImproveKandev": "このワークスペース内のワークフローは複製できません。", + "duplicateWorkflow": "複製", + "duplicatingWorkflow": "複製しています...", + "everySeconds_one": "{{count}}秒ごと", + "everySeconds_other": "{{count}}秒ごと", + "export": "エクスポート", + "exportAll": "すべてエクスポート", + "exportWorkflowsTitle": "ワークフローをエクスポート", + "exportWorkflowTitle": "ワークフローをエクスポート", + "failedToAddWorkflowStep": "ワークフローステップの追加に失敗しました", + "failedToCheckWorkflowStepTasks": "ワークフローステップのタスク確認に失敗しました", + "failedToCheckWorkflowTasks": "ワークフローのタスク確認に失敗しました", + "failedToDeleteStep": "ステップの削除に失敗しました", + "failedToDeleteWorkflow": "ワークフローの削除に失敗しました", + "failedToDuplicateWorkflow": "ワークフローの複製に失敗しました", + "failedToExportWorkflow": "ワークフローのエクスポートに失敗しました", + "failedToExportWorkflows": "ワークフローのエクスポートに失敗しました", + "failedToImportWorkflows": "ワークフローのインポートに失敗しました", + "failedToLoadSyncConfig": "ワークフローの同期設定の読み込みに失敗しました: {{error}}", + "failedToLoadWorkflowSteps": "ワークフローステップの読み込みに失敗しました", + "failedToMigrateTasks": "タスクの移行に失敗しました", + "failedToSaveWorkflowChanges": "ワークフローの変更の保存に失敗しました", + "failedToUpdateWorkflowStep": "ワークフローステップの更新に失敗しました", + "hopNumber": "ホップ {{index}}", + "import": "インポート", + "importCompleteTitle": "インポートが完了しました", + "importCreated": "作成済み: {{names}}", + "importing": "インポートしています...", + "importSkipped": "スキップ済み(既に存在): {{names}}", + "importWorkflowsTitle": "ワークフローをインポート", + "importContinue": "ワークフローをインポート", + "importNoEligibleProfiles": "利用可能な適格プロファイルがありません。グローバルエージェントプロファイルを有効にするか作成してから、再試行してください。", + "importProfileChanged": "このプロファイルは変更されました。現在のリビジョンを確認するには、もう一度選択してください。", + "importProfileMatched": "一致しました", + "importProfileNoMatches": "一致するプロファイルがありません", + "importProfileNotSet": "未設定", + "importProfilePickerDescription": "{{stepName}} のプロファイルを選択してください。", + "importProfilePickerTitle": "プロファイルを選択", + "importProfileSearchPlaceholder": "プロファイルを検索", + "importProfileSelectionRequired": "このステップのプロファイルを選択してください。", + "importProfileUnavailable": "このプロファイルはもう利用できません。別のプロファイルを選択してください。", + "importRequestedProfile": "要求されたプロファイル", + "importResolveProfilesDescription": "ワークフローの作成前に、影響を受ける各ステップの宛先プロファイルを選択してください。", + "importResolveProfilesTitle": "インポートしたステップのプロファイルを選択", + "importSelectProfile": "プロファイルを選択", + "openAgentSettings": "エージェントプロファイル設定を開く", + "retryImportPreview": "プレビューを再試行", + "invalidYaml": "無効なYAML", + "keepCurrent": "現在の設定を保持", + "lastAttempt": "最後の試行: {{when}}", + "lastSynced": "最終同期: {{when}}", + "loadingWorkflowSteps": "ワークフローステップを読み込み中...", + "migrateAndDelete": "移行して削除", + "migrateAndDeleteStep": "ステップを移行して削除", + "migrating": "移行中...", + "moreInformation": "詳細情報", + "moveToNextStep": "次のステップへ移動", + "moveToPreviousStep": "前のステップへ移動", + "moveToSpecificStep": "特定のステップへ移動", + "name": "名前", + "noFeederStep": "フィーダーステップなし", + "noneUseTaskDefault": "なし (タスクの既定値を使用)", + "noProfileOverride": "プロファイルの上書きなし", + "agentProfiles": "エージェントプロファイル", + "workflowSessions": "ワークフローセッション", + "initialAgentSession": "初回エージェントセッション", + "initialAgentSessionDescription": "タスクの元の会話を使用します。", + "sessionTargetStepLabel": "{{stepName}} · {{profileName}}", + "sessionTargetMissing": "ソースステップが見つかりません", + "profileUnavailable": "プロファイルを利用できません", + "sessionTargetAndProfileDescription": "ワークフロー会話またはエージェントプロファイルを選択してください。", + "sessionTargetRepairTitle": "このセッションターゲットを修復", + "sessionTargetSourceMissing": "ソースステップはもう存在しません。", + "sessionTargetSourceMustBeEarlier": "ソースステップはこのステップより前にある必要があります。", + "sessionTargetSourceNeedsProfile": "ソースステップには直接のエージェントプロファイルが必要です。", + "sessionTargetSourceMustBeDirect": "ソースステップは別のセッションをターゲットにできません。", + "sessionTargetChooseAnother": "別のターゲットを選択", + "sessionTargetUseNoProfile": "プロファイルの上書きを使用しない", + "sessionTargetUndoSourceEdit": "ソースの編集を元に戻す", + "workflowSessionTargetMustBeRepaired": "保存前に無効なセッションターゲットを修復してください。", + "sessionTargetDependentMustBeRepaired": "依存するセッションターゲットを先に修復してください", + "sessionTargetDependentRepairDescription": "{{stepName}} はこのステップをセッションのソースとして使用しています。このステップを削除する前に、そのターゲットを修復してください。", + "notARecognizedRepositoryLink": "認識できない{{provider}}リポジトリリンク。", + "notSyncedYet": "まだ同期されてない。Sync nowを使う", + "onExit": "終了時", + "onExitActions": "終了時アクション", + "onExitHelp": "このステップを離れる時に実行する。次のステップに入る前。", + "onTurnCompleteHelp": "エージェントがターンを終えた後に実行する。パイプラインに沿ってタスクを自動で進める時に使う。", + "onTurnCompleteLabel": "ターン完了時", + "onTurnCompleteTrigger": "ターン完了時", + "onTurnStartHelp": "ユーザーがメッセージを送った時に実行する。レビューサイクルに使う。例: フィードバックで In Progress に戻す。", + "onTurnStartLabel": "ターン開始時", + "onTurnStartTrigger": "ターン開始時", + "onUserMessage": "ユーザーメッセージ時", + "orPasteYaml": "または YAML を貼り付け", + "overrideAgentProfileHelp": "このステップ用にエージェントプロファイルを上書きする。別プロファイルなら、このステップに入る時に新しいセッションと新しいコンテキストで始まる。", + "overrideOriginalSessionOptions": "元のセッション設定を上書き", + "overrideOriginalSessionOptionsHelp": "このステップのセッション設定を変えつつ、元の会話タブはそのまま残す。たとえば、model 5.6 Sol で始めて、実装作業では 5.6 Luna に切り替える。", + "pasteGitLabPathHint": "GitLab リンクを貼り付ける。self-managed host も可。使うのは path のみ。path を直接入力してもいい。下で branch と directory を設定。", + "pasteRepositoryLinkHint": "{{provider}} リンクを貼り付けるか、path を直接入力。下で branch と directory を設定。", + "planMode": "計画モード", + "planModeHelp": "エージェントは直接変更せず、計画だけ提案する。", + "pollDisabledHint": "Sync now を押した時だけ同期する。", + "pollEnabledHint": "この間隔でリポジトリを確認する。最小 60s。", + "pollIntervalSeconds": "ポーリング間隔 (秒)", + "potentialRepeatedAgentRun": "エージェント実行が重複する可能性", + "profileSessionLifecycle": "セッションのライフサイクル", + "profileSessionLifecycleIntro": "この設定は、ワークフローがエージェントプロファイルを切り替える時に適用される。", + "profileSessionStartHeading": "このステップ開始時:", + "profileSessionStartReuse": "使えるセッションを再利用", + "profileSessionStartReuseDescription": "このエージェントプロファイルで、いちばん新しい使えるセッションを続ける。使えるものがなければ、新しいセッションを開始する。", + "profileSessionStartReuseShort": "開始時に再利用", + "profileSessionStartNew": "新しいセッションを開始", + "profileSessionStartNewDescription": "このステップでは、毎回新しい会話を開始する。", + "profileSessionStartNewShort": "開始時に新規", + "profileSessionEndHeading": "このステップ終了時:", + "profileSessionEndComplete": "セッションを完了", + "profileSessionEndCompleteDescription": "このセッションを閉じる。ワークフローでは後で再利用できない。", + "profileSessionEndCompleteShort": "終了時に完了", + "profileSessionEndPark": "セッションを保留", + "profileSessionEndParkDescription": "エージェントは止めるが、会話は再利用や手動フォローアップ用に残す。", + "profileSessionEndParkShort": "終了時に保留", + "projectPathOrLink": "プロジェクトのパスまたはリンク", + "promptSourceStepPrompt": "\"{{stepName}}\" を再実行すると、タスクの説明ではなくそのステップのプロンプトが送信されます。", + "promptSourceStepPromptWithTaskDescription": "\"{{stepName}}\" を再実行すると、タスクの説明を含むレンダリング済みのステッププロンプトが送信されます。", + "promptSourceTaskDescription": "\"{{stepName}}\" にはステッププロンプトがないため、再実行するとタスクの説明が送信されます。", + "pullFrom": "取得元", + "pullFromGuidanceWithFeeder": "任意の自動フィーダー投入です。宛先キューのタスクが先に受け入れられ、その後、容量が空くと Kandev が {{feeder}} から対象の作業を取得します。直接移動と自動遷移は宛先にキューされ、フィーダーは不要です。満杯のステップを対象にする新しいタスクはこのフィーダーを使用します。", + "pullFromGuidanceWithoutFeeder": "フィーダーが選択されていません。直接移動と自動遷移は、宛先が満杯のときにこの宛先へキューされます。新しいタスクも、容量が空くまでこのキューに表示されたままになります。", + "readOnlyManagedBySync": "読み取り専用。ワークフロー同期によって管理されています", + "readOnlyManagedByImproveKandev": "読み取り専用。Improve Kandev によって管理されています", + "remove": "削除", + "removeAgentCondition": "エージェント条件 {{index}} を削除", + "removeConditionalSessionConfigBeforeProfile": "このステップの固定エージェントプロフィールを選ぶ前に、条件付きセッション設定を削除してください。", + "removeSyncConfirm": "ワークフロー同期設定を削除しますか。これにより、すでに同期済みのワークフローは削除されません。", + "repositoryLink": "リポジトリリンク", + "repositoryRoot": "(リポジトリのルート)", + "resetAgentContext": "エージェントのコンテキストをリセット", + "resetAgentContextHelp": "このステップに入るとき、エージェントを新しい会話コンテキストで再起動します。偏りのない視点が必要なレビュー用ステップに便利です。", + "resetAgentContextHelpWithProfile": "不要です。エージェントプロフィールを切り替えると、すでに新しいコンテキストの新しいセッションが作成されます。", + "restoreOriginal": "元に戻す", + "retryPartialSaveBeforeLeaving": "離れる前に部分的なワークフロー保存を再試行", + "returnToWorkflow": "ワークフローに戻る", + "runCompletionActionsWhenTurnCancelled": "ターンがキャンセルされたときに完了アクションを実行する", + "runCompletionActionsWhenTurnCancelledHelp": "ユーザーが明示的にターンをキャンセルした場合にのみ適用されます。宛先ステップのオンエントリアクションで、すぐに別のエージェントターンが開始されることがあります。", + "save": "保存", + "saveBeforeExporting": "エクスポートする前にワークフローを保存してください。", + "saveBeforeDuplicating": "複製する前にワークフローを保存してください。", + "saveFailed": "保存に失敗しました: {{error}}", + "saveWorkflowsBeforeOrdering": "並べ替える前にワークフローを保存してください", + "saving": "保存中...", + "seconds": "秒", + "selectAction": "アクションを選択", + "selectedStepFallback": "選択済み", + "selectStep": "ステップを選択", + "selectWorkflow": "ワークフローを選択", + "sessionConfigCarryForwardWarning": "元の会話タブが再利用されるため、以前のワークフロー設定がこのステップに引き継がれる場合があります。", + "sessionConfigCarryForwardWarningMessage": "{{stepName}} で変更した設定が、{{agentName}} のこのステップに引き継がれる場合があります。保持、元に戻す、または新しい値を設定する、のいずれかを選択してください。", + "sessionConfigEmptyRules": "どの初期エージェントに設定を適用するかを選ぶ条件を追加してください。", + "sessionConfigFixedProfileWarning": "元のセッションを設定する前に、固定プロフィールの上書きを削除してください。2つの動作は排他的です。", + "sessionConfigKeep": "保持", + "sessionConfigModelOptionsUnavailable": "このエージェントではモデルオプションを利用できません。この条件を保存する前に、エージェントの機能を更新してください。", + "sessionConfigRestore": "復元", + "sessionConfigRulesHelp": "ルールはタスクの最初のエージェントセッションに適用されます。会話タブを作成したり切り替えたりすることはありません。", + "sessionConfigSetNew": "新しく設定", + "setSettings": "設定を行う", + "settingsForAgent": "{{agent}} の設定", + "showInCommandPanel": "コマンドパネルに表示", + "showInCommandPanelHelp": "コマンドパネルを開くときに、このステップのタスクを表示します (Cmd+K)。バックログや完了済みのステップをすばやくアクセスから隠すのに便利です。", + "startStep": "開始ステップ", + "startStepHelp": "新しいタスクはこのステップから開始します。各ワークフローで開始ステップにできるのは 1 つだけです。", + "stepIsPartOfReplayCycle": "{{stepName}} はリプレイサイクルの一部です", + "stepNamePlaceholder": "ステップ名", + "workflowPrompt": "ワークフロー プロンプト", + "workflowPromptHelp": "各ステップの入力時に、ステッププロンプトの前に毎回含める任意の指示です。{task_id} と @saved-prompt 参照をサポートします。展開はステッププロンプトと同じです。{{taskPrompt}} はステップ専用です。無効にするには空欄のままにしてください。エージェントに表示され、チャットでは折りたたまれて表示されます。", + "workflowPromptPlaceholder": "PR がマージまたはクローズされたら、タスクを Done に移動します。\n複数の Pull Request を作成する必要がある場合は、サブタスクをオーケストレーションすることを優先してください。", + "workflowPromptCollapsedHint": "任意. 共有のステップ入力指示を追加するには展開してください", + "workflowPromptSetHint": "設定済み. 編集するには展開してください", + "workflowInstructionsCollapsed": "ワークフロー指示", + "workflowMoveInstructionsCollapsed": "一度だけの移動指示", + "stepPrompt": "ステップ プロンプト", + "stepPromptHelp": "このステップでエージェントに与えるカスタム指示です。{{taskPrompt}} を使うとタスクの説明を含められます。", + "stepPromptPlaceholderExample": "OAuth2 を使ったユーザー認証を実装する", + "stepPromptPlaceholderTaskPrompt": "ユーザーが提供した元のタスク説明", + "stepPromptUsageHint": "プレースホルダーには {{open}} と入力します ({{taskPrompt}} はタスクの説明を挿入します)。または @ に続けて保存済みプロンプト名を参照します。その内容は非表示コンテキストとして添付され、保存済みプロンプトを編集するとそれを参照するすべてのステップが更新されます。注意: {{taskPrompt}} は参照した保存済みプロンプトの中ではなく、ステッププロンプト自体でのみ展開されます。", + "switchProviderWarning": "ソースを切り替えると、同期済みのワークフローはすべて新しいリポジトリの内容で置き換えられます。そこに存在しないワークフローは削除されます。", + "syncCompletedWithWarnings": "警告付きで同期が完了しました", + "syncConfigSaved": "ワークフローの同期設定を保存しました", + "syncDescription": "リポジトリからこのワークスペースへワークフロー定義を自動同期します。", + "syncDirectoryHelp": "ディレクトリには、ワークフローエクスポートファイル ({{extensions}}) が {{format}} 形式で含まれている必要があります。これはワークフローのエクスポートで生成されるのと同じ形式です。", + "synced": "同期済み", + "syncedBadgeTooltip": "読み取り専用です。{{source}} からのワークフロー同期によって管理されています。同期先のリポジトリで編集または削除してください。", + "syncedReadOnlyReason": "ワークフロー同期によって管理されています。同期先のリポジトリで編集または削除してください", + "syncFailed": "同期に失敗しました", + "syncFailedWithError": "同期に失敗しました: {{error}}", + "syncingFromRepository": "<1>{{repository}} から同期しています", + "syncNow": "今すぐ同期", + "syncProviderLabel": "同期元", + "syncRemoved": "ワークフロー同期を削除しました。同期済みワークフローを再び編集できます", + "syncRemoveFailed": "削除に失敗しました: {{error}}", + "syncResolvedTarget": "{{owner}}/{{repo}} @ {{branch}} を同期しています。ディレクトリは {{directory}} です。", + "syncResolvedTargetGitLab": "{{projectPath}} @ {{branch}} を同期しています。ディレクトリは {{directory}} です。", + "syncTitle": "ワークフロー同期", + "targetStep": "対象ステップ", + "targetWorkflow": "対象ワークフロー", + "template": "テンプレート", + "templateCodeReview": "コードレビュー", + "templatePlan": "計画", + "templates": "テンプレート:", + "templateSecurityAudit": "セキュリティ監査", + "transitionAuto": "自動", + "transitionBack": "戻る", + "transitionGoto": "移動", + "transitionManual": "手動", + "transitions": "遷移", + "unsavedStepChangesDiscarded": "保存されていないステップの変更は破棄されます。", + "unsavedWorkflowChangesDiscarded": "保存されていないワークフローの変更は破棄されます。", + "update": "更新", + "uploadYamlFile": "YAMLファイルをアップロード", + "userActionRequired": "ユーザーの操作が必要です", + "waitForAgentCompletionSignal": "エージェントの完了シグナルを待つ", + "waitForAgentCompletionSignalHelp": "エージェントが{{tool}}を呼び出した場合のみ、自動で次へ進みます。それ以外は、ターン終了を完了として扱います。", + "waitingForFirstSync": "最初の同期を待機中…", + "waitingForRetry": "失敗した変更の再試行を待機中です。", + "whenAgentIs": "エージェントが次の状態のとき", + "whenChildTasksComplete": "子タスクの完了時", + "wipLimit": "WIP上限", + "wipLimitHelp": "このステップで許可される最大のアクティブタスク数です。超過分はキューに表示されたままになります。無制限にするには0を指定してください。", + "wipLimitsNote": "WIP上限は可視性ではなく、作業中の量を制限します。超過分は容量が空くまでボード上に残ります。選択したフィーダーも満杯の場合は、新しいタスク作成は拒否されます。", + "workflow": "ワークフロー", + "workflowCycleBlocked": "ワークフローの循環がブロックされました", + "workflowCycleBlockedDescription": "続行する前に、ワークフローのステップを変更して自動循環を削除してください。", + "workflowCycleBlockingBody": "この経路は\"{{stepName}}\"に再度入り、別のユーザー操作なしでエージェントを再開する可能性があります。", + "workflowCycleReplayPathFor": "{{stepName}} の再生パス", + "workflowCycleWarningBody": "この経路は\"{{stepName}}\"に再度入り、ユーザー操作の後にエージェントを再開する可能性があります。", + "workflowDescription": "説明", + "workflowDescriptionPlaceholder": "任意の説明", + "workflowDetails": "ワークフローの詳細", + "reorderWorkflow": "{{name}} を並べ替え", + "workflowName": "ワークフロー名", + "workflowsReadOnlyImprove": "このワークスペースのワークフローは Improve Kandev によって管理されており、変更できません。", + "workflowNameIsRequired": "ワークフロー名は必須です", + "workflowNamePlaceholder": "マイプロジェクトワークフロー", + "workflowMutationInProgress": "現在のワークフロー変更が終わるまで待つ。", + "workflows": "ワークフロー", + "workflowsSectionDescription": "自動遷移つきの自律パイプライン、または自分でタスクを動かす手動ワークフローを作成する", + "workflowSteps": "ワークフローステップ", + "workflowSyncCompleted": "ワークフロー同期完了", + "loadingSteps": "ステップを読み込み中…", + "noStepsInThisWorkflow": "このワークフローにステップなし", + "selectAWorkflowFirst": "先にワークフローを選択" +} diff --git a/apps/web/src/locales/ja/workspaces.json b/apps/web/src/locales/ja/workspaces.json new file mode 100644 index 0000000000..be1eaf6fc5 --- /dev/null +++ b/apps/web/src/locales/ja/workspaces.json @@ -0,0 +1,268 @@ +{ + "addLocalRepository": "ローカルリポジトリを追加", + "addScript": "スクリプトを追加", + "addWorkspace": "ワークスペースを追加", + "alwaysPullBeforeWorktree": "新しい worktree を作成する前に常に pull する", + "backToWorkspaces": "ワークスペースに戻る", + "branchTemplateIssueKey": "チケットの別名。テンプレートで読みやすい方の名前を使ってください。", + "branchTemplateLiteralPrefix": "リテラルの接頭辞はそのまま記述します。例: <0>{{example}}。", + "branchTemplatePlaceholders": "ブランチテンプレートのプレースホルダー", + "branchTemplateSuffix": "短いランダムな接尾辞。任意ですが、ブランチ名の衝突を避けるために推奨されます。例: {{example}}。", + "branchTemplateTaskId": "Kandev のタスク UUID. ブランチ名用に整形済みです。例: {{example}}。", + "branchTemplateTicket": "まずタスク識別子. それがない場合は Jira, Linear, GitHub issue, または GitHub PR のメタデータを使用します。例: {{example}}。", + "branchTemplateTitle": "タスクのタイトルを小文字の ASCII に整形し、ハイフン区切りで最大 20 文字にしたもの。例: {{example}}。", + "branchTemplateTitleFull": "タイトルと同じ整形ですが、最大 80 文字です。例: {{example}}。", + "buildScriptChip": "build スクリプト", + "checking": "確認中...", + "cleanupScript": "クリーンアップスクリプト", + "cleanupScriptChip": "クリーンアップスクリプト", + "cleanupScriptHelp": "タスク完了時に実行され、ワークスペースをクリーンアップします。", + "close": "閉じる", + "closeRepositoryEditor": "リポジトリエディタを閉じる", + "confirmDelete": "削除を確認", + "copyFiles": "ファイルをコピー", + "copyFilesHelp": "Gitignore 対象のパスを新しい worktree にコピーします。項目に <0>{{symlink}} を付けると、メインリポジトリへのシンボリックリンクとして扱います。<2>{{symlink}} で終わるリテラルのファイル名には <1>{{escapedSymlink}} を使います。", + "copyFilesPathsResolved": "パスはリポジトリのルートを基準に解決され、各新しい worktree にその相対位置を保ったまま反映されます。worktree 内の既存ファイルは上書きされません。", + "copyFilesPatternBraces": "<0>{{braces}} の中括弧によるオルタネーション。例: <1>{{example}}", + "copyFilesPatternGlobstar": "<0>{{globstar}} は任意の数のディレクトリに一致します。例: <1>{{example}}", + "copyFilesPatternLiteral": "<0>{{pattern}} のリテラルなファイルまたはディレクトリ (ディレクトリは再帰的にコピーされます)", + "copyFilesPatternWildcards": "<0>{{star}}, <1>{{question}}, <2>{{charClass}} の単一セグメントのワイルドカード", + "copyFilesRemoteFallback": "リモート実行環境では、シンボリックリンクの代わりにファイル内容をコピーします。", + "copyFilesSizeLimit": "{{limit}} を超えるファイルは、リモート実行環境へコピーする際にスキップされます。ローカル worktree ではサイズ上限なしでコピーされます。", + "customScriptsLabel": "カスタムスクリプト", + "customScripts_one": "カスタムスクリプト {{count}} 件", + "customScripts_other": "カスタムスクリプト {{count}} 件", + "defaultAgentProfile": "デフォルトのエージェントプロファイル", + "defaultExecutor": "デフォルトの実行環境", + "delete": "削除", + "deleteRepository": "リポジトリを削除", + "deleteRepositoryConfirm": "これにより、リポジトリとそのスクリプトが削除されます。この操作は元に戻せません。", + "deleteRepositoryTitle": "リポジトリを削除", + "deleteRepositoryActiveSessions_one": "このリポジトリは、{{count}} 件のアクティブなエージェントセッションで使用されています。削除する前に停止するか完了してください。", + "deleteRepositoryActiveSessions_other": "このリポジトリは {{count}} 個のアクティブなエージェントセッションで使用されています。リポジトリを削除する前に、それらを停止するか終了してください。", + "deleteThisWorkspace": "このワークスペースを削除", + "deleteWorkspace": "ワークスペースを削除", + "devScript": "開発スクリプト", + "devScriptChip": "開発スクリプト", + "devScriptHelp": "このリポジトリのプレビュー開発サーバーを起動するために使用します。自動ポート割り当てには <0>{{port}} を使用してください。", + "discoverRepositoryDescription": "検出されたリポジトリを選択するか、検証するための絶対パスを指定してください。", + "chooseFoldersToDiscoverRepositories": "リポジトリを検出するフォルダーを選択", + "chooseFoldersToDiscoverRepositoriesDescription": "Home またはそれより狭いフォルダーを選択してください。Kandev はリポジトリ選択を使用している間のみそれをスキャンします。", + "continueHomeDiscovery": "Home の検出を続行", + "homeDiscoveryConfirmationDescription": "このインストールでは以前に Home が検索されました。Home の検出を許可したい場合のみ続行してください。", + "discoveredRepositories": "検出されたリポジトリ", + "edit": "編集", + "environmentSecrets": "環境シークレット", + "environmentSecretsDescription": "このリポジトリを使用するタスクに対して、保存済みのシークレットを環境キーに紐付けます。シークレットの値はここには表示されません。", + "environmentSecretKey": "環境キー", + "environmentSecretKeyPlaceholder": "NPM_TOKEN", + "environmentSecretValue": "保存済みシークレット", + "selectEnvironmentSecret": "シークレットを選択", + "missingSecretReference": "シークレット参照がありません", + "noEnvironmentSecrets": "環境シークレットは設定されていません。", + "noAvailableEnvironmentSecrets": "利用可能な Global または Workspace のシークレットがありません。", + "addEnvironmentSecret": "環境シークレットを追加", + "removeEnvironmentSecret": "環境シークレット {{key}} を削除", + "environmentSecretKeyInvalid": "有効な POSIX 環境キーを使用してください。", + "environmentSecretKeyDuplicate": "各環境キーは 1 回だけ紐付けできます。", + "environmentSecretKeyReserved": "この環境キーは Kandev によって予約されています。", + "environmentSecretRequired": "各環境キーに対して保存済みシークレットを選択してください。", + "globalSecretScope": "Global", + "workspaceSecretScope": "ワークスペース", + "failedToCheckRepositorySessions": "リポジトリセッションの確認に失敗しました", + "failedToCreateWorkspace": "ワークスペースの作成に失敗しました", + "failedToDeleteRepository": "リポジトリの削除に失敗しました", + "failedToDeleteWorkspace": "ワークスペースの削除に失敗しました", + "failedToDiscoverRepositories": "リポジトリの検出に失敗しました", + "failedToSaveRepository": "リポジトリの保存に失敗しました", + "failedToSaveWorkspace": "ワークスペースの保存に失敗しました", + "filterRepositories": "リポジトリを絞り込む...", + "invalidRepositoryPath": "無効なリポジトリパス", + "localPath": "ローカルパス", + "localPathNotSet": "ローカルパス未設定", + "repositoriesReadOnlyImprove": "このワークスペース内のリポジトリは Improve Kandev が管理中。変更不可。", + "manageWorkspaceDetails": "ワークスペース詳細を管理し、ワークフローかリポジトリへ移動", + "manageYourWorkspacesAndWorkflows": "ワークスペースとワークフローを管理", + "manualPath": "手動パス", + "name": "名前", + "noAgentProfilesAvailable": "利用可能なエージェントプロファイルなし", + "overview": "概要", + "noCustomScripts": "カスタムスクリプトなし", + "noDefault": "デフォルトなし", + "noExecutorsAvailable": "利用可能な実行環境なし", + "noRepositoriesFound": "リポジトリ見つからず。", + "noScriptsYet": "まだスクリプトなし。", + "noWorkspacesConfigured": "ワークスペース未設定。最初のワークスペースを追加して開始。", + "patternSyntax": "パターン構文", + "remoteRepository": "リモートリポジトリ", + "repositories": "リポジトリ", + "refreshRepositories": "リポジトリを更新", + "reconnectDiscoveryRoot": "再接続", + "removeDiscoveryRoot": "削除", + "repositoryDiscoveryNoRoots": "リポジトリ探索を始めるフォルダ選択。", + "resourceCount_one": "{{count}} 件のリソース", + "resourceCount_other": "{{count}} 件のリソース", + "repositoriesInThisWorkspace": "このワークスペース内のリポジトリ", + "repository": "リポジトリ", + "repositoryName": "リポジトリ名", + "scanningRepositories": "リポジトリをスキャン中...", + "scriptName": "スクリプト名", + "selectDefaultAgentProfile": "デフォルトのエージェントプロファイルを選択", + "selectDefaultExecutor": "デフォルトの実行環境を選択", + "setupScript": "セットアップスクリプト", + "setupScriptHelp": "リポジトリをクローンした時、または git worktree を作成した時に実行。", + "sourceLocal": "ローカル", + "sourceRemote": "リモート", + "supportedPatterns": "対応パターン:", + "thisActionCannotBeUndone": "この操作は元に戻せない。", + "typeWorkspaceNameToConfirm": "削除確認用にワークスペース名 <0>{{name}} を入力。この操作は元に戻せない。", + "untitledRepository": "無題のリポジトリ", + "useRepository": "リポジトリを使用", + "validGitRepository": "有効な git リポジトリ", + "validate": "検証", + "workspaceName": "ワークスペース名", + "workspaceNameIsRequired": "ワークスペース名は必須です。", + "workspaceNamePlaceholder": "マイワークスペース", + "workspaceNotFound": "ワークスペースが見つかりません", + "workspaceSettings": "ワークスペース設定", + "worktreeBranchTemplate": "ワークツリーのブランチテンプレート", + "worktreeSync": "ワークツリーの同期", + "enterRepositoryName": "リポジトリ名を入力してください。", + "chooseDifferentRepositoryName": "別のリポジトリ名を選択してください。", + "repositoryNameMustBeOneFolder": "リポジトリ名は1つのフォルダー名である必要があります。", + "sourceChooseAFolder": "フォルダーを選択してください。", + "sourceChooseRepoAndBranch": "リポジトリとベースブランチを選択してください。", + "sourceEnterValidRemoteUrl": "有効なリモートリポジトリURLとベースブランチを入力してください。", + "sourceFolderAlreadySelected": "このフォルダーはすでに選択されています。", + "sourceRepoBranchAlreadySelected": "このリポジトリとブランチはすでに選択されています。", + "repositorySetsTitle": "リポジトリセット", + "repositorySetsDescription": "このワークスペース内のリポジトリをまとめた名前付きグループです。タスクダイアログでセットを選ぶと、リポジトリピッカーに内容が反映され、保存済みのベースブランチがタスクにコピーされます。チェックアウトブランチはタスクごとに個別です。", + "repositorySetsCreate": "新しいセット", + "repositorySetsCreateTitle": "新しいリポジトリセット", + "repositorySetsEditTitle": "リポジトリセットを編集", + "repositorySetsEditorDescription": "このセットに含めるリポジトリ、その順序、各リポジトリの任意のベースブランチを選択してください。", + "repositorySetsEdit": "セットを編集", + "repositorySetsDelete": "セットを削除", + "repositorySetsDeleteTitle": "{{name}}を削除しますか?", + "repositorySetsDeleteDescription": "セットは削除されます。含まれるリポジトリや、それらをすでに使用しているタスクには影響しません。", + "repositorySetsEmpty": "まだリポジトリセットはありません。1つ作成すると、タスクダイアログのリポジトリピッカーに一度で反映できます。", + "repositorySetsNoMembers": "このセットにはリポジトリがありません。リポジトリはワークスペースから削除されました。", + "repositorySetsNoRepositories": "このワークスペースには、まだ追加できるリポジトリがありません。", + "repositorySetsNameLabel": "名前", + "repositorySetsDescriptionLabel": "説明 (任意)", + "repositorySetsMembersLabel": "リポジトリ", + "repositorySetsMembersHint": "タスクの順序に従ってリポジトリを追加してください。ベースブランチは任意です。", + "repositorySetsMoveUp": "前へ移動", + "repositorySetsMoveDown": "後へ移動", + "repositorySetsRemove": "リポジトリを削除", + "repositorySetsSave": "セットを保存", + "repositorySetsNameTaken": "このワークスペースには、同じ名前のセットがすでに存在します。", + "repositorySetsMemberRejected": "選択したリポジトリのいずれかが、このワークスペースでは利用できなくなっています。", + "repositorySetsSaveFailed": "セットを保存できませんでした。もう一度お試しください。", + "repositorySetsAlreadyDeleted": "このセットはすでに削除されています。更新して現在の一覧を表示してください。", + "repositorySetsDeleteFailed": "セットを削除できませんでした。もう一度お試しください。", + "repositorySetsAddRepository": "リポジトリを追加", + "repositorySetsSearchRepositories": "リポジトリを検索...", + "repositorySetsNoMatchingRepositories": "一致するリポジトリはありません。", + "repositorySetsSearchSelected": "選択済みのリポジトリを絞り込む...", + "repositorySetsNoMatchingMembers": "この検索に一致する選択済みリポジトリはありません。", + "repositorySetsNoMembersSelected": "まだリポジトリは選択されていません。", + "repositorySetsResetBases": "ベースをリセット", + "repositorySetsTaskDefault": "タスクのデフォルト ({{branch}})", + "repositorySetsTaskDefaultNoBranch": "タスクのデフォルト", + "repositorySetsBaseBranchLabel": "保存されたベースブランチ", + "repositorySetsBaseBranchFor": "{{name}} の保存されたベースブランチ", + "repositorySetsBranchUnavailable": "利用できません", + "repositorySetsBranchUnavailableReason": "この保存されたブランチは利用できません。別のブランチを選択するか、タスクのデフォルトにリセットしてください。", + "repositorySetsMemberMissing": "このワークスペースには、もはやこのリポジトリは存在しません。", + "repositorySetsMemberBase": "ベース: {{base}}", + "branchPoliciesTitle": "ブランチポリシー", + "branchPoliciesDescription": "タスクを作成するときに、名前付きのブランチポリシーを選択します。選択したポリシーはタスクに保存されます。", + "branchPoliciesSaveRepositoryFirst": "ブランチポリシーを追加する前に、このリポジトリを保存してください。", + "branchPoliciesEmpty": "まだブランチポリシーはありません。", + "branchPoliciesLoading": "ブランチポリシーを読み込み中...", + "branchPoliciesLoadFailed": "ブランチポリシーを読み込めませんでした。もう一度お試しください。", + "branchPoliciesRetry": "再試行", + "branchPolicyAdd": "ポリシーを追加", + "branchPolicyAddTitle": "ブランチポリシーを追加", + "branchPolicyEditTitle": "ブランチポリシーを編集", + "branchPolicyEditorDescription": "ベースブランチ、新しいブランチ名のパターン、プルリクエストの送信先を定義します。", + "branchPolicyName": "ポリシー名", + "branchPolicyNameHelpLabel": "ポリシー名について", + "branchPolicyNameHelp": "タスクダイアログでこのポリシーを選びやすいよう、短い名前を使ってください。", + "branchPolicyNameHint": "名前はこのリポジトリ内で一意です。", + "branchPolicyDescription": "説明 (任意)", + "branchPolicyBaseBranch": "ベースブランチ", + "branchPolicyBaseBranchHelpLabel": "ベースブランチについて", + "branchPolicyBaseBranchHelp": "新しい作業はこのブランチから開始されます。", + "branchPolicyPullRequestTarget": "プルリクエストの送信先", + "branchPolicyPullRequestTargetHelpLabel": "プルリクエストの送信先について", + "branchPolicyPullRequestTargetHelp": "Kandev のプルリクエストダイアログでは、このブランチがデフォルトで選択されます。エージェントがプルリクエストを作成するときは、この送信先を明示的に設定する必要があります。", + "branchPolicyTemplate": "ブランチ名のテンプレート", + "branchPolicyTemplateHelpLabel": "ブランチテンプレートについて", + "branchPolicyTemplateHelp": "title、task_id、ticket、suffix などのサポートされているプレースホルダーを使用してください。", + "branchPolicyTemplateHint": "テンプレートは安全な Git ブランチ名を生成する必要があります。", + "branchPolicySaved": "ブランチポリシーを保存しました", + "branchPolicySaveFailed": "ブランチポリシーを保存できませんでした。", + "branchPolicyEdit": "{{name}} を編集", + "branchPolicyDelete": "{{name}} を削除", + "branchPolicyDeleteTitle": "{{name}} を削除しますか?", + "branchPolicyDeleteDescription": "既存のタスクには、保存済みのポリシースナップショットが保持されます。このポリシーは新しいタスクでは利用できなくなります。", + "branchPolicyDeleteConfirm": "ポリシーを削除", + "branchPolicyDeleted": "ブランチポリシーを削除しました", + "branchPolicyDeleteFailed": "ブランチポリシーを削除できませんでした。", + "branchPolicyGitflowAdd": "Gitflow ポリシーを追加", + "branchPolicyGitflowTitle": "Gitflow ポリシーを追加", + "branchPolicyGitflowDescription": "この 2 つのブランチから、Feature、Bugfix、Hotfix、Release の各ポリシーを作成します。", + "branchPolicyProductionBranch": "本番ブランチ", + "branchPolicyDevelopmentBranch": "開発ブランチ", + "branchPolicyProductionHelpLabel": "本番ブランチについて", + "branchPolicyProductionHelp": "Hotfix と Release の pull request はこのブランチを対象にします。", + "branchPolicyDevelopmentHelpLabel": "開発ブランチについて", + "branchPolicyDevelopmentHelp": "Feature と Bugfix の作業はこのブランチから始まります。", + "branchPolicyGitflowPreview": "既存の異なる 2 つのブランチを選択してください。スターターは 4 つのポリシーを作成しますが、Git ブランチは変更しません。", + "branchPolicyGitflowCreate": "Gitflow ポリシーを作成", + "branchPolicyGitflowCreated": "Gitflow ポリシーを作成しました", + "branchPolicyGitflowFailed": "Gitflow ポリシーを作成できませんでした。", + "branchPolicySummary": "ベース: {{base}}。テンプレート: {{template}}。pull request の対象: {{target}}。", + "defaultVisibility.description": "今後作成されるワークスペースに適用されます。既存のワークスペースの公開設定はそのままです。", + "defaultVisibility.existingUnaffected": "これを変更しても、既存のワークスペースは変更されません。", + "defaultVisibility.label": "新しいワークスペースは", + "defaultVisibility.savedOrg": "新しいワークスペースは組織に公開されます。", + "defaultVisibility.savedPrivate": "新しいワークスペースは非公開になります。", + "defaultVisibility.title": "新しいワークスペースの既定値", + "teamAccess.addMember": "追加", + "teamAccess.addMemberLabel": "同僚を追加", + "teamAccess.addMemberPlaceholder": "人を選択", + "teamAccess.description": "このワークスペースにアクセスできる人を選び、同僚に役割を付与します。", + "teamAccess.genericError": "その変更は保存できませんでした。", + "teamAccess.makeOwner": "オーナーにする", + "teamAccess.memberAdded": "メンバーを追加しました。", + "teamAccess.memberRemoved": "メンバーを削除しました。", + "teamAccess.membersLabel": "メンバー", + "teamAccess.noMembers": "メンバーまだなし。所有者は常にフルアクセス。", + "teamAccess.noUsersToAdd": "全員すでにメンバー", + "teamAccess.nowOrgVisible": "このワークスペースは組織に表示されるようになりました。", + "teamAccess.nowPrivate": "このワークスペースは非公開になりました。", + "teamAccess.ownershipTransferred": "{{name}} が所有者になりました。", + "teamAccess.removeMember": "メンバーを削除", + "teamAccess.roleCollaborator": "コラボレーター", + "teamAccess.roleLabel": "役割", + "teamAccess.roleOwner": "所有者", + "teamAccess.roleUpdated": "役割を更新しました。", + "teamAccess.roleViewer": "閲覧者", + "teamAccess.title": "チームアクセス", + "teamAccess.visibilityLabel": "公開範囲", + "teamAccess.visibilityOrg": "組織内全員", + "teamAccess.visibilityOrgHint": "ゲスト除く全ユーザーが、このワークスペースを開いてタスクを作業できます。", + "teamAccess.visibilityPrivate": "非公開", + "teamAccess.visibilityPrivateHint": "所有者と下に一覧のメンバーだけが、このワークスペースを開けます。", + "placement.title": "配置", + "placement.description": "このワークスペースがどの単位に属するか。つまり、誰がアクセスできるか。変更方法は移動だけ。役割は強いもの同士で合算されるので、ここで権限を取り上げることはできません。", + "placement.pick": "単位を選ぶ", + "placement.search": "単位を検索", + "placement.none": "単位見つからず", + "placement.moved": "ワークスペースを移動しました。", + "placement.failed": "ワークスペースを移動できませんでした。", + "placement.ownerOnly": "ワークスペース所有者だけが移動できます" +} diff --git a/docs/i18n.md b/docs/i18n.md index 530f964d93..934f9e3727 100644 --- a/docs/i18n.md +++ b/docs/i18n.md @@ -3,8 +3,9 @@ Kandev's web UI is internationalized with [i18next](https://www.i18next.com) + [react-i18next](https://react.i18next.com). English is the source locale, European Portuguese (`pt-pt`), Simplified Chinese (`zh-cn`), Traditional Chinese -Taiwan (`zh-tw`), and Traditional Chinese Hong Kong (`zh-hk`) are the shipped -human locales, and a generated **pseudo-locale** is used for QA. Requirements live in +Taiwan (`zh-tw`), Traditional Chinese Hong Kong (`zh-hk`), and Japanese (`ja`, +endonym `日本語`) are the shipped human locales, and a generated **pseudo-locale** +is used for QA. Requirements live in [`docs/specs/platform/requirements/i18n.md`](specs/platform/requirements/i18n.md). Traditional Chinese catalogs are derived from `zh-cn` via OpenCC plus a product glossary; see [`docs/specs/platform/requirements/traditional-chinese-locales.md`](specs/platform/requirements/traditional-chinese-locales.md) @@ -27,8 +28,8 @@ Two enforcement layers, and it matters which is which: the migration ran; that list is now the migration record, not the bound. See [The guard is scoped](#the-guard-is-scoped-on-purpose) and [Externalizing a path](#externalizing-a-path). -- **The four real locales gate the build.** `pt-pt`, `zh-cn`, `zh-hk` and `zh-tw` - are complete, and adding an `en` key without translating it fails +- **The five real locales gate the build.** `pt-pt`, `zh-cn`, `zh-hk`, `zh-tw` + and `ja` are complete, and adding an `en` key without translating it fails `pnpm run i18n:check`. See [Real locales](#real-locale-catalogs-gate). ## TL;DR for adding a string @@ -1162,8 +1163,9 @@ Do it in its own PR, not inside a copy-only migration. ## Adding a real language -Use a canonical lowercase locale id such as `zh-cn`. Locale negotiation accepts -case variants such as `zh-CN`, but cookies and `` use the canonical id. +Use a canonical lowercase locale id such as `zh-cn` or `ja`. Locale negotiation +accepts case variants such as `zh-CN` and unambiguous region suffixes such as +`ja-JP` (collapsed onto `ja`); cookies and `` use the canonical id. For Traditional Chinese Taiwan / Hong Kong specifically, prefer converting from `zh-cn` with `node scripts/convert-zh-cn-to-zh-hant.mjs --write` (OpenCC + @@ -1218,11 +1220,12 @@ entries: | zh-hk | 415 | 81 | 1 | | zh-tw | 415 | 81 | 1 | -None of it visible in a green build. The four catalogs are now complete, so the -failure mode has flipped: the risk is no longer "a PR is blocked on a translator" -but "a PR silently re-opens the gap". So the pass **gates**, and the cost is that -adding user-facing copy means adding it in five languages. That is the real cost -of shipping five languages; it was previously being deferred rather than paid. +None of it visible in a green build. The four catalogs were completed first, then +`ja` joined them, so the failure mode has flipped: the risk is no longer "a PR is +blocked on a translator" but "a PR silently re-opens the gap". So the pass +**gates**, and the cost is that adding user-facing copy means adding it in six +languages (`en` plus five real locales). That is the real cost of shipping those +languages; it was previously being deferred rather than paid. For `zh-tw` and `zh-hk`, do not hand-translate: run `pnpm run i18n:zh-hant`, which converts `zh-cn` through OpenCC plus the product glossary and emits proper diff --git a/docs/plans/japanese-locale/plan.md b/docs/plans/japanese-locale/plan.md new file mode 100644 index 0000000000..2b6b05feab --- /dev/null +++ b/docs/plans/japanese-locale/plan.md @@ -0,0 +1,121 @@ +--- +created: 2026-09-20 +status: in_progress +requirements: + - REQ-PLATFORM-JAPANESE-LOCALE-001 +system_design: + - ../../specs/platform/system-design/i18n.md +legacy_specs: [] +--- + +# Implementation Plan: Japanese Locale + +## Overview + +Ship the `ja` (日本語) locale for the Kandev web UI and the Go-rendered browser +surfaces, following the same pattern already proven by `pt-pt`, `zh-cn`, +`zh-tw`, and `zh-hk`: commit human-maintained JSON catalogs mirroring `en` in +every namespace, register `ja` in the frontend runtime and the Go i18n +`supportedLocales`, let the existing drift/parity/lint gates discover `ja` +automatically from the directory listing, and prove the switch, cookie +persistence, ``, Japanese formatting, and English restoration with +unit tests and a Playwright scenario. + +Requirements: [`REQ-PLATFORM-JAPANESE-LOCALE-001`](../../specs/platform/requirements/japanese-locale.md) +(delivered as a sibling of the existing i18n requirement; `AC-PLATFORM-I18N-001.3` +in [`i18n.md`](../../specs/platform/requirements/i18n.md) gains `ja`). +System design: [`docs/specs/platform/system-design/i18n.md`](../../specs/platform/system-design/i18n.md). + +The combined change touches only localization wiring and catalogs; no product +behavior, routing, or data flow changes. The user did not provide translations, +so every Japanese value is produced by the implementer and recorded in the work +orders; a later human/LLM review pass may tighten wording but is not a merge +blocker (real-locale parity gates structurally; the identical-to-English check +rejects keys left verbatim in English unless declared in `_verbatim.json`). + +## Delivery waves + +Wave 1 — Catalogs and frontend runtime (Task 01). This is the largest chunk +(~10,837 keys across 37 namespaces) and is split into three commits so each +stage is independently reviewable and CI-green: + +1. mini showpiece: `common.json` + `settings.json` (~1,382 keys), frontend + registration, unit tests — the first RED/GREEN loop proving the wiring. +2. high-traffic namespaces around common+settings. +3. remaining namespaces to full parity. + +Wave 2 — Backend locale + negotiation tests + `docs/i18n.md` (Task 02). + +Wave 3 — E2E scenario + screenshots (Task 03). + +Wave 4 — Repository verification (`list-docs validate`, spec lint, optional +branch-level review) (Task 04). + +## Dependencies + +| Wave | Depends on | +| --- | --- | +| 2 | 1 (frontend registration is the reference runtime; backend mirrors it) | +| 3 | 1, 2 (E2E runs against integrated runtime, backend, and catalogs) | +| 4 | 1, 2, 3 (final all-gates pass) | + +## Verification strategy + +```bash +(cd apps && pnpm install --frozen-lockfile) # once after worktree creation +(cd apps/web && pnpm exec vitest run lib/i18n) # focused frontend suites (RED first) +(cd apps/web && pnpm run typecheck) +(cd apps/web && pnpm run i18n:check) # drift + parity + identical-to-en gate +(cd apps/web && pnpm run lint) +(cd apps/backend && make test) # backend i18n suite +(cd apps/web && pnpm e2e:run --host --project chromium -- tests/i18n/language-switch.spec.ts) +python3 scripts/list-docs.py validate && python3 scripts/lint-spec-files.py --all +``` + +Run one focused behavioral test in RED before the production/catalog edit, then +re-run the exact focused suite after the final relevant edit. + +## Work orders + +Wave 1: + +- [x] [Task 01: Frontend ja catalogs and locale runtime integration](task-01-frontend-ja-locale-catalogs.md) + +Wave 2: + +- [x] [Task 02: Backend ja locale negotiation](task-02-backend-ja-locale-negotiation.md) + +Wave 3: + +- [x] [Task 03: Japanese locale E2E](task-03-japanese-locale-e2e.md) + +Wave 4: + +- [x] [Task 04: Repository verification](task-04-repository-verification.md) + +## Risks + +- **Translation volume (~10,837 keys).** Key parity alone cannot prove natural + wording, preserved semantic tokens, or layout fit. Mitigation: the shared + `_verbatim.json` registry covers technical terms that stay English; every + value preserves `{{placeholders}}`, `_one`/`_other`, `` tags, code + tokens, shortcuts, and brand names (the parity gate enforces this + structurally); high-traffic namespaces get priority. +- **Japanese avoids English loanwords where awkward** (`Create` → `作成`, + `Delete` → `削除`) but dev tooling often keeps English technical terms + (`repository`, `pull request`, `workflow`, `agent`, `terminal`) or uses + katakana. The parity `identical-to-English` check would flag a key left + verbatim; the implementer records such keys in `src/locales/ja/_verbatim.json` + with a reason instead of English-casing a value that should be katakana. +- **Date/relative-time formatting** must pass `ja` into `Intl`/`date-fns`, not + leave English data; existing `date-locale.ts` mappings must be extended. +- **E2E and manual `make dev` validation are environment-sensitive** and may + expose baseline failures; focused locale evidence must remain separately + recorded. + +## Open Questions + +None. The user supplied the goal ("GUIの日本語化"), which this plan follows as +the shipped-language precedent established by `pt-pt` / `zh-cn` / +`zh-tw` / `zh-hk`: locale id `ja`, endonym `日本語`, full catalogs, backend +negotiation, CI parity, and E2E proof, committed in one feature branch. diff --git a/docs/plans/japanese-locale/task-01-frontend-ja-locale-catalogs.md b/docs/plans/japanese-locale/task-01-frontend-ja-locale-catalogs.md new file mode 100644 index 0000000000..29d3c4e61d --- /dev/null +++ b/docs/plans/japanese-locale/task-01-frontend-ja-locale-catalogs.md @@ -0,0 +1,145 @@ +--- +id: "01-frontend-ja-locale-catalogs" +title: "Frontend ja locale catalogs and runtime integration" +status: done +wave: 1 +depends_on: [] +plan: "plan.md" +requirements: + - REQ-PLATFORM-JAPANESE-LOCALE-001 +acceptance_criteria: + - AC-PLATFORM-JAPANESE-LOCALE-001.1 + - AC-PLATFORM-JAPANESE-LOCALE-001.2 + - AC-PLATFORM-JAPANESE-LOCALE-001.3 + - AC-PLATFORM-JAPANESE-LOCALE-001.5 +system_design: + - ../../specs/platform/system-design/i18n.md +--- + +# Task 01: Frontend ja catalogs and locale runtime integration + +## Outcome + +`ja` is a shipped, production-selectable locale labeled `日本語`; all 37 +`apps/web/src/locales/ja/*.json` catalogs mirror `en` key-for-key and preserve +placeholders, plural suffixes, `` tag structure, code tokens, shortcuts, +and brand names; activation and boot restoration set i18next, ``, +and the `kandev_locale` cookie to `ja`; Intl/date-fns formatting uses Japanese +locale data. + +## In scope + +- Frontend catalog files `apps/web/src/locales/ja/*.json` (37 namespaces, + ~10,837 keys). +- `apps/web/lib/i18n/index.ts`: add `ja` to `SUPPORTED_LOCALES`, `LOCALE_LABELS` + (`ja: "日本語"`), and the canonical `SupportedLocale` union; only `pseudo` + stays production-hidden. +- `apps/web/lib/i18n/date-locale.ts` (or the equivalent `Intl`/`date-fns` locale + mapping): register Japanese locale data so `formatRelative`/`formatDate`/ + `formatNumber` use it. +- `src/locales/ja/_verbatim.json` (only if a value must stay English verbatim + with a reason). +- Unit test updates: `lib/i18n/index.test.ts` (SUPPORTED_LOCALES / + selectableLocales), `boot.test.ts`, `formats.test.ts` / `date-locale.test.ts` + (Japanese relative time e.g. `5分前`), `bundling.test.ts` (lazy chunk), and + `scripts/check-i18n-keys.test.ts` if locale discovery behavior is asserted. + +## Exclusions + +- Backend (`apps/backend/internal/i18n`) — Task 02. +- E2E specs — Task 03. +- Repo-wide docs/lint config — Task 04. + +## Applicable requirements + +`REQ-PLATFORM-JAPANESE-LOCALE-001.1`, `.2`, `.3`, `.5`; `AC-PLATFORM-I18N-001.3` +(as extended by this package). + +## System design + +`docs/specs/platform/system-design/i18n.md` — Catalogs and locale runtime, +Data model, API surface (client boot), Scenarios. + +## Implementation acceptance conditions + +1. `SUPPORTED_LOCALES` includes `ja`, `LOCALE_LABELS["ja"] === "日本語"`, and + `selectableLocales(false)`/`selectableLocales(true)` reflect `ja`. +2. Selecting `ja` sets `` and writes `kandev_locale=ja`; a cold + boot with that cookie activates `ja` before first paint (lazy chunk loaded). +3. `pnpm run i18n:check` is green: no missing keys, `pseudo` synced, and `ja` + has exactly the same namespaces/keys as `en` (structurally) with no + unexplained identical-to-English values (any intentional English-verbatim + value declared in `src/locales/ja/_verbatim.json`). + +## Verification + +```bash +(cd apps && pnpm install --frozen-lockfile) +(cd apps/web && pnpm exec vitest run lib/i18n/index.test.ts lib/i18n/boot.test.ts lib/i18n/formats.test.ts lib/i18n/date-locale.test.ts) +(cd apps/web && pnpm exec vitest run lib/i18n/bundling.test.ts) +(cd apps/web && pnpm run typecheck) +(cd apps/web && pnpm run i18n:check) +(cd apps/web && pnpm run lint) +``` + +Run one focused behavioral test in RED before the production/catalog edit, then +re-run the exact focused suite after the final relevant edit. Record RED/GREEN +evidence, key counts by namespace at each commit, and translation-preservation +checks in Results. + +## Files likely touched + +- `apps/web/src/locales/ja/<37 namespaces>.json` +- `apps/web/src/locales/ja/_verbatim.json` (conditional) +- `apps/web/lib/i18n/index.ts` +- `apps/web/lib/i18n/index.test.ts` +- `apps/web/lib/i18n/boot.test.ts` +- `apps/web/lib/i18n/formats.test.ts` +- `apps/web/lib/i18n/date-locale.ts` and `date-locale.test.ts` +- `apps/web/lib/i18n/bundling.test.ts` + +## Dependencies + +None. + +## Parallelism + +Sequential. Catalogs and locale registration form one runtime contract. Commit +in three reviewable stages: (a) common+settings + registration + tests, +(b) high-traffic namespaces, (c) remaining namespaces to full parity. + +## Inputs + +- Spec: **What**, **Scenarios**, **Failure modes**, **Resolved decisions**. +- Plan: **Wave 1**. +- Existing patterns: `en` / `pseudo` / `zh-cn` catalogs, locale activation, boot + resolution, current Intl wrappers and their tests. + +## Output contract + +Report RED/GREEN evidence, key counts by namespace, files changed, exact +commands and results, translation-preservation checks, `ja` verbatim registry +entries, blockers/risks, and synchronized task/plan status. + +## Results + +- Catalogs: 37 namespaces, 10,837/10,837 keys, 0 missing, 0 placeholder/Trans mismatches. + Written to `apps/web/src/locales/ja/*.json`. No `ja/_verbatim.json` (none needed). +- Translation: OmniRoute `github/gpt-5.4-mini`, `stream:false`, 40-key batches, + 4 workers. Residual 131 identical-to-English copy keys retranslated one-by-one; + 6 leftovers patched by hand (`Webhook の URL`, `{{value}} 個の CPU`, `アプリ ID`, + `課題 IID`, `- Git:{{git}}`, `GitHub の Issue #{{number}}`). +- Runtime: `SUPPORTED_LOCALES` already included `ja` / `日本語`. Added `ja-JP` → `ja` + collapse in `normalizeLocale`/`isSupportedLocale` (matches Go `normalizeRegion`). + `date-locale.ts` maps `ja` to `date-fns/locale/ja`. +- Gates: + - `node scripts/check-i18n-keys.mjs`: `ja, pt-pt, zh-cn, zh-hk, zh-tw complete` + - `node scripts/check-trans-indices.mjs` / inline plurals / module-scope t() / + em-dash: OK + - `node scripts/check-nonjsx-copy.mjs`: OK + - `pnpm run i18n:parity`: ja missing=0 every namespace +- Tests: `pnpm exec vitest run lib/i18n/index.test.ts lib/i18n/boot.test.ts + lib/i18n/formats.test.ts lib/i18n/date-locale.test.ts lib/i18n/bundling.test.ts` + → 5 files, 82 tests, GREEN. `formatRelative(ja)` pins `5分前`. +- Later: `pnpm exec vitest run lib/i18n` → 9 files, 100 tests, GREEN. +- Status: catalogs + frontend runtime done. diff --git a/docs/plans/japanese-locale/task-02-backend-ja-locale-negotiation.md b/docs/plans/japanese-locale/task-02-backend-ja-locale-negotiation.md new file mode 100644 index 0000000000..6d72c76dc0 --- /dev/null +++ b/docs/plans/japanese-locale/task-02-backend-ja-locale-negotiation.md @@ -0,0 +1,109 @@ +--- +id: "02-backend-ja-locale-negotiation" +title: "Backend ja locale negotiation" +status: done +wave: 2 +depends_on: + - "01-frontend-ja-locale-catalogs" +plan: "plan.md" +requirements: + - REQ-PLATFORM-JAPANESE-LOCALE-001 +acceptance_criteria: + - AC-PLATFORM-JAPANESE-LOCALE-001.4 +system_design: + - ../../specs/platform/system-design/i18n.md +--- + +# Task 02: Backend ja locale negotiation + +## Outcome + +The Go shell and server-rendered browser surfaces accept `ja`: +`apps/backend/internal/i18n/locales/ja.json` is embedded, `Supported` / +`Normalize` / `FromRequest` (cookie and `Accept-Language`) resolve `ja`, and a +`ja` runtime locale produces `` in the first server response. + +## In scope + +- `apps/backend/internal/i18n/locales/ja.json`: translate the three + server-rendered browser error messages with an exact key match to `en.json` + (72 keys, mirroring `zh-cn.json` in shape). +- `apps/backend/internal/i18n/i18n.go`: add `"ja": true` to `supportedLocales` + (keep in sync with `apps/web/lib/i18n/index.ts`). +- `apps/backend/internal/i18n/i18n_test.go`: cover `ja` canonical normalization, + case-insensitive BCP-47 input, Japanese message lookup, exact catalog parity, + cookie precedence, q-value ordering, region matching, and English fallback. +- `apps/backend/internal/webapp/shell_test.go`: prove a `ja` runtime locale + produces `` in the first server response. + +## Exclusions + +- Frontend `ja` catalogs and runtime — covered by Task 01. +- E2E specs — Task 03. + +## Applicable requirements + +`REQ-PLATFORM-JAPANESE-LOCALE-001.4`; `AC-PLATFORM-I18N-001.7` (`` +reflects active locale). + +## System design + +`docs/specs/platform/system-design/i18n.md` — API surface (Go shell), Data +model, Scenarios (Accept-Language negotiation), Resolved decisions. + +## Implementation acceptance conditions + +1. `Supported("ja")`, `Normalize("ja-JP") === "ja"`, and a request with + `kandev_locale=ja` resolves `ja`; `Accept-Language: ja` without a cookie + also resolves `ja`. +2. `ja.json` has exactly the same keys as `en.json` (embedding loads without + error; parity is exact for backend catalogs, as with `zh-cn`). +3. `shell_test.go` proves `lang="ja"` in the served HTML. + +## Verification + +```bash +(cd apps/backend && make test) # or: go test ./internal/i18n/... ./internal/webapp/... +``` + +RED first: add the failing tests before production edits, confirm the expected +failure, then implement and re-run. + +## Files likely touched + +- `apps/backend/internal/i18n/locales/ja.json` +- `apps/backend/internal/i18n/i18n.go` +- `apps/backend/internal/i18n/i18n_test.go` +- `apps/backend/internal/webapp/shell_test.go` + +## Dependencies + +Task 01 (frontend registration is the reference runtime; backend mirrors it). + +## Parallelism + +Sequential after Task 01. + +## Inputs + +- Spec: **Acceptance criteria**, **Scenarios** (cookie, Accept-Language), + **Failure modes**. +- Plan: **Wave 2**. +- Existing patterns: `zh-cn`/`zh-tw` addition in `i18n.go`, `i18n_test.go` + coverage, and `shell_test.go`. + +## Output contract + +Report RED/GREEN evidence per test, exact commands and results, key-count +parity check for `ja.json` vs `en.json`, files changed, blockers/risks, and +synchronized task/plan status. + +## Results + +- Catalog: `apps/backend/internal/i18n/locales/ja.json` 72/72 keys vs `en.json`. +- `supportedLocales` includes `ja`. `Normalize("ja-JP")` collapses to `ja`. +- `FromRequest`: cookie `ja` wins; cookie `ja-JP` collapses; `Accept-Language: ja` + and `ja-JP` resolve `ja`. Invalid cookie (`klingon`) is ignored and does not + skip Accept-Language (regression: `Normalize` fallback to `en` would have). +- `shell_test.go`: `lang="ja"` and `ja-JP` → `ja`. +- Tests: `gofmt` + `go test ./internal/i18n/... ./internal/webapp/...` GREEN. diff --git a/docs/plans/japanese-locale/task-03-japanese-locale-e2e.md b/docs/plans/japanese-locale/task-03-japanese-locale-e2e.md new file mode 100644 index 0000000000..18d2769420 --- /dev/null +++ b/docs/plans/japanese-locale/task-03-japanese-locale-e2e.md @@ -0,0 +1,114 @@ +--- +id: "03-japanese-locale-e2e" +title: "Japanese locale E2E" +status: done +wave: 3 +depends_on: + - "01-frontend-ja-locale-catalogs" + - "02-backend-ja-locale-negotiation" +plan: "plan.md" +requirements: + - REQ-PLATFORM-JAPANESE-LOCALE-001 +acceptance_criteria: + - AC-PLATFORM-JAPANESE-LOCALE-001.2 + - AC-PLATFORM-JAPANESE-LOCALE-001.7 +system_design: + - ../../specs/platform/system-design/i18n.md +--- + +# Task 03: Japanese locale E2E + +## Outcome + +Playwright proves selecting `日本語` changes stable migrated copy and +`` to `ja`, survives reload through the `kandev_locale` cookie, and +restores English — in the desktop chromium project and, if the mobile project +convention applies, the mobile project. + +## In scope + +- `apps/web/e2e/tests/i18n/language-switch.spec.ts`: add a `ja` case + (option `日本語`, display-language label `表示言語`, ``, + cookie `kandev_locale=ja`, reload restoration, restore English) following the + `zh-tw`/`zh-hk` loop pattern at the same file location. +- `apps/web/e2e/tests/i18n/mobile-language-switch.spec.ts` if the mobile + convention covers this family. +- A fresh desktop Japanese Appearance screenshot under ignored + `apps/web/.pr-assets/` (never committed), inspected for secrets and layout + problems (Japanese text can truncate narrow labels). + +## Exclusions + +- Unit-level frontend and backend behavior — Tasks 01 and 02. +- Repository-level docs/lint final pass — Task 04. + +## Applicable requirements + +`REQ-PLATFORM-JAPANESE-LOCALE-001.2`, `.7`; `AC-PLATFORM-I18N-001.7`. + +## System design + +`docs/specs/platform/system-design/i18n.md` — Scenarios (switch, cookie, +reload, lang). + +## Implementation acceptance conditions + +1. Selecting `日本語` renders a known translated label (e.g. `表示言語`), + sets ``, and writes `kandev_locale=ja`. +2. Reload keeps `lang="ja"` and the translated label; switching back to English + restores `lang="en"` and `Display language`. +3. The existing pseudo-locale scenario stays intact and passing. + +## Verification + +```bash +(cd apps/web && pnpm e2e:run --host --project chromium -- tests/i18n/language-switch.spec.ts) +(cd apps/web && pnpm e2e:run --host --project mobile-chrome -- tests/i18n/mobile-language-switch.spec.ts) +``` + +Add the Japanese scenario first and observe its expected RED result before the +feature is complete, then rerun the focused spec after the final relevant edit. + +## Files likely touched + +- `apps/web/e2e/tests/i18n/language-switch.spec.ts` +- `apps/web/e2e/tests/i18n/mobile-language-switch.spec.ts` +- Ignored screenshot assets under `apps/web/.pr-assets/` only; never commit them + to the feature branch. + +## Dependencies + +Tasks 01-02 must be done so the E2E runs against the integrated runtime, +backend, and catalogs. + +## Parallelism + +Sequential. This task is the browser-level integration proof. + +## Inputs + +- Spec scenarios for the Japanese switch, reload, shell lang, and pseudo QA. +- Plan: **Wave 3**. +- Existing `language-switch.spec.ts` / `mobile-language-switch.spec.ts` + conventions and the `zh-tw`/`zh-hk` loop. + +## Output contract + +Report RED/GREEN evidence, screenshot paths (under `.pr-assets/`, ignored), any +mobile-project divergence, exact commands and results, blockers/risks, and +synchronized task/plan status. + +## Results + +- Desktop: `language-switch.spec.ts` loop gained `{ id: "ja", option: "日本語", + displayLanguage: "表示言語" }`. +- Mobile: `mobile-language-switch.spec.ts` gained Japanese switch/reload/restore. +- Commands: + - `pnpm e2e:run --host --no-build --project chromium -- tests/i18n/language-switch.spec.ts` + → 6 passed (39.9s), including 日本語. + - `pnpm e2e:run --host --no-build --project mobile-chrome -- tests/i18n/mobile-language-switch.spec.ts` + → 2 passed (25.1s). +- Screenshot (ignored, not committed): + `apps/web/.pr-assets/language-switch--japanese-locale-desktop.png` (1280x720). + First E2E run RED was Playwright chromium v1228 missing; repo installer + `scripts/install-playwright-browsers.sh` then GREEN. No mobile divergence. diff --git a/docs/plans/japanese-locale/task-04-repository-verification.md b/docs/plans/japanese-locale/task-04-repository-verification.md new file mode 100644 index 0000000000..3dd4c90fad --- /dev/null +++ b/docs/plans/japanese-locale/task-04-repository-verification.md @@ -0,0 +1,116 @@ +--- +id: "04-repository-verification" +title: "Repository verification" +status: in_progress +wave: 4 +depends_on: + - "01-frontend-ja-locale-catalogs" + - "02-backend-ja-locale-negotiation" + - "03-japanese-locale-e2e" +plan: "plan.md" +requirements: + - REQ-PLATFORM-JAPANESE-LOCALE-001 +acceptance_criteria: + - AC-PLATFORM-JAPANESE-LOCALE-001.6 +system_design: + - ../../specs/platform/system-design/i18n.md +--- + +# Task 04: Repository verification + +## Outcome + +The whole Japanese-locale package is repository-clean: docs catalog and spec +lint pass, all verification commands green in one final run, and the feature +branch is ready for the user's review with no stale/pruned plan markers. + +## In scope + +- `docs/i18n.md` update: add `ja` to the shipped-human-locales list, the + "four real locales gate the build" text (now five), and the locale-id / + parity guidance note (`日本語` endonym, `ja` canonical id). +- `docs/specs/platform/requirements/i18n.md` + `japanese-locale.md` + + `docs/specs/platform/system-design/i18n.md` consistency (already authored in + the package; validate). +- `python3 scripts/list-docs.py validate` and + `python3 scripts/lint-spec-files.py --all` — fix any issues introduced by the + package. +- Final all-gates run: `i18n:check`, `typecheck`, `lint`, backend `make test`, + focused E2E. + +## Exclusions + +- Any new product code or catalog changes (Tasks 01-03 own those). + +## Applicable requirements + +`REQ-PLATFORM-JAPANESE-LOCALE-001.6` (CI/lint/parity discovery); the docs +guidance in `docs/i18n.md`. + +## System design + +`docs/specs/platform/system-design/i18n.md` — Enforcement notes and delivery +notes as they describe docs/parity conventions. + +## Implementation acceptance conditions + +1. `docs/i18n.md` lists `ja` consistently and the "N real locales gate the + build" phrasing is correct (five real locales). +2. `python3 scripts/list-docs.py validate` and + `python3 scripts/lint-spec-files.py --all` pass. +3. One final run of the verification suite exits 0 (frontend typecheck, i18n + gates, lint, backend tests, focused E2E). + +## Verification + +```bash +(cd apps && pnpm install --frozen-lockfile) +(cd apps/web && pnpm run i18n:check && pnpm run typecheck && pnpm run lint) +(cd apps/backend && make test) +(cd apps/web && pnpm e2e:run --host --project chromium -- tests/i18n/language-switch.spec.ts) +python3 scripts/list-docs.py validate && python3 scripts/lint-spec-files.py --all +``` + +## Files likely touched + +- `docs/i18n.md` +- (validation-only) `docs/specs/platform/requirements/*`, `docs/specs/platform/system-design/i18n.md` + +## Dependencies + +Tasks 01-03. + +## Parallelism + +Sequential; final sweep. + +## Inputs + +- Plan: **Wave 4**, **Verification strategy**. +- The completed work orders' Results for RED/GREEN and command output. + +## Output contract + +Report exact commands and exit codes for every gate, docs validation output, +any fixes applied, blockers/risks, and synchronized task/plan status marking the +package ready for user review. + +## Results + +- `docs/i18n.md` lists `ja` (endonym `日本語`) and "five real locales gate the + build". Spec `japanese-locale.md` Overview/Intent/AC-001.3 updated: parity + gates, not advisory. `updated: 2026-09-21`. +- Docs: `python3 scripts/list-docs.py validate` → 292 decisions, 1055 specs. + `python3 scripts/lint-spec-files.py --all` → pass. +- Gates: + - `pnpm run i18n:check` → `ja, pt-pt, zh-cn, zh-hk, zh-tw complete` (exit 0) + - `pnpm run i18n:parity` → 37 namespaces, 10837 keys, ja missing=0 + - `pnpm run typecheck` → exit 0 + - `pnpm run lint` → exit 0 + - `pnpm exec vitest run lib/i18n` → 9 files, 100 tests, GREEN + - `go test ./internal/i18n/... ./internal/webapp/...` GREEN. Full + `make -C apps/backend test` timed out here and is not claimed green, + so this work order stays `in_progress` + - focused E2E chromium + mobile-chrome → GREEN + - Remaining system-design wording that still called real-locale parity + advisory is now aligned with the hard `i18n:check` gate diff --git a/docs/public/feature-status.md b/docs/public/feature-status.md index 82314b9e83..2ab623bf8f 100644 --- a/docs/public/feature-status.md +++ b/docs/public/feature-status.md @@ -88,7 +88,7 @@ Released builds can lag this page. Check **Settings > System > About** or `kande | Language servers | Limited | Desktop Monaco maps TypeScript/JavaScript, Go, Rust, Python, and experimental Kotlin to task-host servers with diagnostics, completion, hover, navigation, signature help, and semantic tokens. Status distinguishes a launched process awaiting `initialize` from server-reported project work; slow Kotlin Gradle imports can take minutes, with no automatic timeout or universal percentage/ETA. Fine-pointer desktop can place active-file status in the editor toolbar or the opt-in status surface controlled by **Show status bar**; when that surface is off it falls back to the toolbar. Touch tablet uses the toolbar, and phone has no LSP control. Auto-start/installation default off; Kotlin is manual-only. Local PC and Local Docker are supported, while Kubernetes, SSH, Sprites, remote Docker, and mobile LSP are not. | | Integrated shell terminals | Dependency-bound | Create, reopen, rename, and terminate are shipped. Shell settings affect new terminals, and executor/task-environment availability controls where the PTY runs. | | Prompts, keyboard shortcuts, notifications, appearance, and task actions | Supported | These are normal settings surfaces. Browser notification permission, custom command validity, and local shell/editor availability still apply to their effects. | -| Web UI localization | Limited | **Settings > General > Appearance** offers English, Português (Portugal), and 简体中文. The choice applies immediately, persists per browser through a `kandev_locale` cookie, and is negotiated from `Accept-Language` before defaulting to English when no cookie is set. Externalization is complete: every reachable web UI surface renders through the translation layer, and dates, numbers, and relative timestamps follow the selected locale. Per-language completeness still differs. Portuguese tracks English closely; Simplified Chinese is maintained out of band and lags, most visibly in the task workbench. An untranslated key falls back to English rather than failing. About fifteen shared `@kandev/ui` accessibility labels (mostly screen-reader-only text such as a dialog's **Close**) stay English even where the visible UI is translated. Desktop-shell and CLI surfaces, API/log diagnostics, and agent output were never in scope; user content such as task titles, chat, and diffs is never translated. Development and E2E builds list an extra **Pseudo (QA)** locale that production builds do not ship. | +| Web UI localization | Limited | **Settings > General > Appearance** offers English, Português (Portugal), 简体中文, 繁體中文(台灣), 繁體中文(香港), and 日本語. The choice applies immediately, persists per browser through a `kandev_locale` cookie, and is negotiated from `Accept-Language` before defaulting to English when no cookie is set. Externalization is complete: every reachable web UI surface renders through the translation layer, and dates, numbers, and relative timestamps follow the selected locale. Per-language completeness still differs. Portuguese tracks English closely; Simplified Chinese is maintained out of band and lags, most visibly in the task workbench. An untranslated key falls back to English rather than failing. About fifteen shared `@kandev/ui` accessibility labels (mostly screen-reader-only text such as a dialog's **Close**) stay English even where the visible UI is translated. Desktop-shell and CLI surfaces, API/log diagnostics, and agent output were never in scope; user content such as task titles, chat, and diffs is never translated. Development and E2E builds list an extra **Pseudo (QA)** locale that production builds do not ship. | diff --git a/docs/public/web-development.md b/docs/public/web-development.md index a7174d1523..4a80c4a290 100644 --- a/docs/public/web-development.md +++ b/docs/public/web-development.md @@ -85,7 +85,7 @@ Chat, plan, changes, files, terminal, editor/diff, preview, commit, and pull-req Every new user-facing string must go through i18next: `t("namespace:key")` or ``, never an inline literal. That covers visible copy, `placeholder`, `aria-label`, `title`, `alt`, toasts, validation and empty-state text, and dialog copy. Externalization of the existing UI is complete, so a hardcoded literal is now a regression rather than unfinished migration. -Catalogs live in `apps/web/src/locales//.json`. English is the source locale and the only hand-authored catalog; it is bundled into the entry chunk, while each other locale is a lazily fetched chunk loaded before that locale activates. Shipped locales are English, European Portuguese, and Simplified Chinese, plus a generated `pseudo` catalog that only development and E2E builds contain. A missing key falls back to English at runtime. +Catalogs live in `apps/web/src/locales//.json`. English is the source locale and the only hand-authored catalog; it is bundled into the entry chunk, while each other locale is a lazily fetched chunk loaded before that locale activates. Shipped locales are English, European Portuguese, Simplified Chinese, Traditional Chinese (Taiwan), Traditional Chinese (Hong Kong), and Japanese, plus a generated `pseudo` catalog that only development and E2E builds contain. A missing key falls back to English at runtime. Three mistakes cause silent bugs: never translate a string compared with `===`, never call `t()` at module scope, and never pass an English plural ending as a value; use `count` with `_one`/`_other` keys. diff --git a/docs/specs/platform/requirements/i18n.md b/docs/specs/platform/requirements/i18n.md index d52c746099..d6f58a663f 100644 --- a/docs/specs/platform/requirements/i18n.md +++ b/docs/specs/platform/requirements/i18n.md @@ -2,7 +2,7 @@ status: active system: platform created: 2026-07-27 -updated: 2026-08-12 +updated: 2026-09-21 owners: - jcfs --- @@ -10,20 +10,20 @@ owners: ## Overview -Kandev's i18n foundation lets migrated web surfaces externalize copy, switch locale, and format dates and numbers per language, but English is still the only human language shipped. Adding Simplified Chinese makes the existing localized surface usable by Chinese-speaking users while preserving English as the source language and the pseudo-locale as the migration QA oracle. +Kandev's i18n foundation lets migrated web surfaces externalize copy, switch locale, and format dates and numbers per language. English remains the source locale. The shipped human locales are European Portuguese, Simplified Chinese, Traditional Chinese (Taiwan and Hong Kong), and Japanese. The pseudo-locale remains the migration QA oracle. ## Requirements ### REQ-PLATFORM-I18N-001: Internationalization (i18n) -**Intent:** Kandev's i18n foundation lets migrated web surfaces externalize copy, switch locale, and format dates and numbers per language, but English is still the only human language shipped. Adding Simplified Chinese makes the existing localized surface usable by Chinese-speaking users while preserving English as the source language and the pseudo-locale as the migration QA oracle. +**Intent:** Kandev's i18n foundation lets migrated web surfaces externalize copy, switch locale, and format dates and numbers per language. English remains the source locale. The shipped human locales are European Portuguese, Simplified Chinese, Traditional Chinese (Taiwan and Hong Kong), and Japanese. The pseudo-locale remains the migration QA oracle. #### Acceptance criteria - **AC-PLATFORM-I18N-001.1:** The web UI SHALL render all user-facing text through a translation layer (i18next `t("ns:key")` / react-i18next ``), not from inline literals. "User-facing text" covers visible copy, `placeholder`, `aria-label`/`aria-description`, `title`, `alt`, toast/`sonner` messages, form-validation messages, empty-state and error copy, and confirm/dialog text. - **AC-PLATFORM-I18N-001.2:** Native UI plugins SHALL register plugin-owned catalogs through the public plugin SDK. Kandev SHALL isolate them by verified plugin identity, require English fallback copy, expose the active locale through imperative and reactive scoped translation APIs, and remove their resources with the plugin lifecycle. Plugin catalogs SHALL NOT mutate built-in or sibling-plugin namespaces. -- **AC-PLATFORM-I18N-001.3:** English SHALL remain the source locale. The shipped human locales SHALL be `en`, `pt-pt`, `zh-cn`, `zh-tw`, and `zh-hk`; copy lives in per-namespace JSON catalogs keyed by stable ids. The `pseudo` catalog is generated from `en`, never hand-edited. Traditional Chinese details live in [`traditional-chinese-locales.md`](traditional-chinese-locales.md). -- **AC-PLATFORM-I18N-001.4:** The app SHALL expose a **language switcher** in Settings. It lists English, European Portuguese, Simplified Chinese, Traditional Chinese (Taiwan), and Traditional Chinese (Hong Kong) by their fixed endonyms. Selecting a locale re-renders the UI without a full reload and persists the choice across restarts. Development and E2E builds additionally list the **pseudo-locale** (see below). +- **AC-PLATFORM-I18N-001.3:** English SHALL remain the source locale. The shipped human locales SHALL be `en`, `pt-pt`, `zh-cn`, `zh-tw`, `zh-hk`, and `ja`; copy lives in per-namespace JSON catalogs keyed by stable ids. The `pseudo` catalog is generated from `en`, never hand-edited. Traditional Chinese details live in [`traditional-chinese-locales.md`](traditional-chinese-locales.md); Japanese details live in [`japanese-locale.md`](japanese-locale.md). +- **AC-PLATFORM-I18N-001.4:** The app SHALL expose a **language switcher** in Settings. It lists English, European Portuguese, Simplified Chinese, Traditional Chinese (Taiwan), Traditional Chinese (Hong Kong), and Japanese (`日本語`) by their fixed endonyms. Selecting a locale re-renders the UI without a full reload and persists the choice across restarts. Development and E2E builds additionally list the **pseudo-locale** (see below). - **AC-PLATFORM-I18N-001.5:** The app SHALL ship a **pseudo-locale** (`pseudo`) that transforms every extracted message (accents + padding, e.g. `Ĉřéàţé ţàśķ`) so QA can visually confirm a string was externalized and detect truncation. The pseudo-locale is only selectable in dev/e2e builds, not in production builds. - **AC-PLATFORM-I18N-001.6:** Date, time, relative-time, and number formatting SHALL be locale-aware, driven by the active locale rather than hardcoded English strings. The custom `apps/web/lib/utils/time.ts` `timeAgo` helper is replaced by a locale-aware relative-time formatter, and `date-fns` calls take the active locale. - **AC-PLATFORM-I18N-001.7:** The document `` attribute SHALL reflect the active locale (both in the Go-rendered shell's default and after client locale changes). diff --git a/docs/specs/platform/requirements/japanese-locale.md b/docs/specs/platform/requirements/japanese-locale.md new file mode 100644 index 0000000000..0d5cddf213 --- /dev/null +++ b/docs/specs/platform/requirements/japanese-locale.md @@ -0,0 +1,37 @@ +--- +status: active +system: platform +created: 2026-09-20 +updated: 2026-09-21 +owners: + - y4tk +--- +# Japanese Locale Requirements + +## Overview + +Kandev ships English, European Portuguese, Simplified Chinese, Traditional Chinese (Taiwan and Hong Kong), and Japanese catalogs. `ja` makes the already-localized web surface usable by Japanese-speaking users while preserving English as the source locale, the JSON catalog contract, the `kandev_locale` cookie persistence, and the real-locale parity gate. + +## Requirements + +### REQ-PLATFORM-JAPANESE-LOCALE-001: Japanese locale + +**Intent:** Kandev ships English, European Portuguese, Simplified Chinese, Traditional Chinese (Taiwan and Hong Kong), and Japanese catalogs. `ja` makes the already-localized web surface usable by Japanese-speaking users while preserving English as the source locale, the JSON catalog contract, the `kandev_locale` cookie persistence, and the real-locale parity gate. + +#### Acceptance criteria + +- **AC-PLATFORM-JAPANESE-LOCALE-001.1:** The shipped human locales SHALL include `ja` (Japanese) in addition to the existing `en`, `pt-pt`, `zh-cn`, `zh-tw`, and `zh-hk`. Locale id SHALL be the lowercase BCP-47-style tag `ja`, consistent with `pt-pt` / `zh-cn`. +- **AC-PLATFORM-JAPANESE-LOCALE-001.2:** The Settings language switcher SHALL list Japanese by its fixed endonym `日本語`. Selecting it re-renders the UI without a full reload, persists via the existing `kandev_locale` cookie, and sets `` to `ja`. +- **AC-PLATFORM-JAPANESE-LOCALE-001.3:** Frontend catalogs SHALL live at `apps/web/src/locales/ja/*.json`, with the same namespaces and key set as `en` (real-locale parity gates, same as `pt-pt` / `zh-cn` / `zh-tw` / `zh-hk`; each key must preserve `{{placeholders}}`, plural `_one`/`_other` suffixes, `` tag structure, code tokens, shortcuts, and brand names). +- **AC-PLATFORM-JAPANESE-LOCALE-001.4:** The backend browser-facing catalog SHALL add `apps/backend/internal/i18n/locales/ja.json`, and `ja` SHALL be accepted by `Supported` / `Normalize` / `FromRequest` (cookie and `Accept-Language` negotiation). +- **AC-PLATFORM-JAPANESE-LOCALE-001.5:** Locale-aware date/time/number/relative-time formatting SHALL use Japanese locale data (e.g. relative time reads `5分前`, dates use Japanese ordering), driven by the active locale. +- **AC-PLATFORM-JAPANESE-LOCALE-001.6:** CI, lint, and catalog-parity checks SHALL discover `ja` automatically as a real locale; the identical-to-English tolerance SHALL use the shared `_verbatim.json` registry plus a `src/locales/ja/_verbatim.json` (if needed). A build that adds an `en` key without the `ja` translation SHALL fail, exactly as it does for the other real locales (`pt-pt`, `zh-cn`, `zh-tw`, `zh-hk`). +- **AC-PLATFORM-JAPANESE-LOCALE-001.7:** The Playwright `language-switch.spec.ts` SHALL cover selecting `日本語`, verifying `lang="ja"` and a known translated label, cookie persistence (`kandev_locale=ja`), reload restoration, and restoring English. + +## Explicit exclusions + +- Translating the CLI launcher, logs, ACP/agent output, or the ~1,100 diagnostic API error strings (these stay English by design; see the i18n spec out-of-scope). +- Translating user/domain content carried in the boot payload and store (task titles, workflow/step names, repo names, chat messages, diff content, agent transcripts). +- RTL layout support; `` stays `ltr`. +- Translating integration provider names, brand names, code identifiers, keyboard-shortcut glyphs, and other proper nouns. +- A translation-management platform / vendor sync. diff --git a/docs/specs/platform/system-design/i18n.md b/docs/specs/platform/system-design/i18n.md index adb37db8e5..a60326ed71 100644 --- a/docs/specs/platform/system-design/i18n.md +++ b/docs/specs/platform/system-design/i18n.md @@ -3,8 +3,9 @@ status: draft system: platform requirements: - REQ-PLATFORM-I18N-001 + - REQ-PLATFORM-JAPANESE-LOCALE-001 created: 2026-07-27 -updated: 2026-08-12 +updated: 2026-09-21 owners: - jcfs --- @@ -19,6 +20,7 @@ This design preserves the technical source detail for `REQ-PLATFORM-I18N-001` du | Requirement | Design section | | --- | --- | | `REQ-PLATFORM-I18N-001` | [Migrated source detail](#migrated-source-detail) | +| `REQ-PLATFORM-JAPANESE-LOCALE-001` | [Migrated source detail](#migrated-source-detail) | ## Migrated source detail @@ -42,13 +44,15 @@ language and the pseudo-locale as the migration QA oracle. locale through imperative and reactive scoped translation APIs, and remove their resources with the plugin lifecycle. Plugin catalogs SHALL NOT mutate built-in or sibling-plugin namespaces. - English SHALL remain the source locale. The shipped human locales SHALL be - `en`, `pt-pt`, `zh-cn`, `zh-tw`, and `zh-hk`; copy lives in per-namespace JSON + `en`, `pt-pt`, `zh-cn`, `zh-tw`, `zh-hk`, and `ja`; copy lives in per-namespace JSON catalogs keyed by stable ids. The `pseudo` catalog is generated from `en`, never hand-edited. Traditional Chinese details live in - [`traditional-chinese-locales.md`](../requirements/traditional-chinese-locales.md). + [`traditional-chinese-locales.md`](../requirements/traditional-chinese-locales.md); + Japanese details live in + [`japanese-locale.md`](../requirements/japanese-locale.md). - The app SHALL expose a **language switcher** in Settings. It lists English, - European Portuguese, Simplified Chinese, Traditional Chinese (Taiwan), and - Traditional Chinese (Hong Kong) by their fixed endonyms. Selecting a locale + European Portuguese, Simplified Chinese, Traditional Chinese (Taiwan), + Traditional Chinese (Hong Kong), and Japanese by their fixed endonyms. Selecting a locale re-renders the UI without a full reload and persists the choice across restarts. Development and E2E builds additionally list the **pseudo-locale** (see below). @@ -78,13 +82,11 @@ language and the pseudo-locale as the migration QA oracle. generated sync with `en`. Both are authored or generated in the same change as the code, so both SHALL fail the build. (Catalogs are NOT regenerated from source — with key-based ids the English copy exists only in the catalog.) -- Real-locale parity SHALL be reported as a **warning and SHALL NOT fail the - build**. Translation is performed out of band by a third party, so gating on it - blocks an English-only change for work nobody in the merge path can do. This is - a deliberate reversal of the original requirement: #2243 introduced `zh-cn` - together with a hard parity gate, #2261 added English keys twenty minutes - later, and `main` went red although neither change was wrong and no ordering of - the two could have avoided it. +- Real-locale parity SHALL fail the build. `i18n:check` fails on a missing key, + an extra key, a dropped placeholder, or a value left identical to English + unless declared in `_verbatim.json`. The shipped real locales are `pt-pt`, + `zh-cn`, `zh-hk`, `zh-tw`, and `ja`. i18next still falls back to `en` at + runtime when a key is absent. - The full sweep SHALL externalize **every** user-facing string across `apps/web/components/` (1,121 files), `apps/web/app/` (285 files), and the `@kandev/ui` primitives, leaving no user-facing English literal outside the @@ -101,8 +103,8 @@ merge. Sequence: language switcher, CI gates, codemods, the scoped lint guard, and one page (Settings → General → Appearance) migrated end-to-end as the worked example. 2. **First real language**: ship `zh-cn` catalogs for every existing namespace, - register the locale in the frontend and backend, and add advisory catalog - parity reporting for every committed real locale. + register the locale in the frontend and backend, and add catalog parity + reporting for every committed real locale (later a hard `i18n:check` gate). 3. **Per-directory migrations**: each PR externalizes one directory, appends it to `i18nGuardFiles`, and adds its screen to the pseudo-coverage spec. 4. **Close-out**: the env guard on the pseudo-coverage e2e spec is **removed** — @@ -121,12 +123,12 @@ i18n adds no server-side persistent entities. It introduces: - **Message catalogs** — checked-in JSON under `apps/web/src/locales//.json` for `en`, `pt-pt`, `zh-cn`, - `zh-tw`, `zh-hk`, and `pseudo`. `en` is hand-authored (keys are stable ids; the - English copy lives only here); `pt-pt` and `zh-cn` are human-maintained + `zh-tw`, `zh-hk`, `ja`, and `pseudo`. `en` is hand-authored (keys are stable ids; the + English copy lives only here); `pt-pt`, `zh-cn`, and `ja` are human-maintained translations; `zh-tw` / `zh-hk` are derived from `zh-cn` (OpenCC + product glossary) and then human-reviewed for high-traffic namespaces. Real-locale - namespace and key sets aim to mirror `en` but may lag it — a gap warns rather - than failing, and i18next falls back to `en` at runtime; `pseudo` is generated + namespace and key sets SHALL mirror `en`. A missing or extra key fails + `i18n:check`; i18next still falls back to `en` at runtime. `pseudo` is generated from `en` by `scripts/generate-pseudo-locale.mjs` and is never hand-edited. Catalogs load at runtime via Vite glob import — no build plugin. Only `en` is bundled into the initial download: it is the fallback locale, so it has to be @@ -175,9 +177,9 @@ Frontend module contract (new): **简体中文**, **THEN** every migrated message present in the `zh-cn` catalog resolves from it, any message not yet translated falls back to its `en` value rather than rendering the raw key, `` becomes `zh-cn`, and the - selection survives a reload through the `kandev_locale=zh-cn` cookie. (The - catalog may lag `en`, because real-locale parity is advisory — the fallback is - what makes that safe to ship.) + selection survives a reload through the `kandev_locale=zh-cn` cookie. Runtime + English fallback is a safety net if a key is absent at runtime; it is not a + substitute for a complete checked-in catalog, which `i18n:check` gates. - **GIVEN** no locale cookie and `Accept-Language: zh-CN`, **WHEN** the Go shell or a server-rendered browser error is returned, **THEN** locale negotiation selects `zh-cn`, the shell emits ``, and the backend message @@ -212,15 +214,13 @@ Frontend module contract (new): the locale changes, **THEN** each receives only its own message and reactive plugin surfaces rerender. **WHEN** one plugin is disabled, **THEN** only its catalog is removed. - **GIVEN** a production build, **WHEN** the language switcher renders, **THEN** - English, Português (Portugal), 简体中文, 繁體中文(台灣), and 繁體中文(香港) - are offered and the pseudo-locale is not. + English, Português (Portugal), 简体中文, 繁體中文(台灣), 繁體中文(香港), and + 日本語 are offered and the pseudo-locale is not. - **GIVEN** an English namespace or key changes, **WHEN** `i18n:check` runs, - **THEN** every real locale missing or adding a namespace or key is reported as - a warning naming the locale, namespace, and missing or extra entries, **AND** - the command still exits 0. + **THEN** every real locale missing or adding a namespace or key fails the + command, naming the locale, namespace, and missing or extra entries. - **GIVEN** the `pseudo` catalog has drifted from `en`, **WHEN** `i18n:check` - runs, **THEN** it fails, **even when** a real locale is also out of parity — - the advisory path must not mask the gating one. + runs, **THEN** it fails. ## Failure modes @@ -249,8 +249,8 @@ Frontend module contract (new): ## Out of scope -- Shipping human languages other than English, European Portuguese, and - Simplified Chinese. +- Shipping human languages other than English, European Portuguese, + Simplified Chinese, Traditional Chinese, and Japanese. - Translating the CLI launcher, logs, or ACP/agent output, and the ~1,100 diagnostic API error strings (`http.Error` / `gin.H{"error": …}`) — the SPA maps API failures onto its own translated copy, so those stay English by design. @@ -285,20 +285,18 @@ Frontend module contract (new): persisted and document locale. Locale negotiation is case-insensitive, so BCP-47 input such as `zh-CN` resolves to `zh-cn`. The switcher label is the fixed endonym `简体中文`, not a translated message. -- **Real-locale parity**: every committed real locale should contain every +- **Real-locale parity**: every committed real locale SHALL contain every English namespace and exactly the same keys, including plural suffixes and - `` structures — but this is **advisory, not enforced**, because - translation happens out of band (see the CI requirement above). Runtime English - fallback is what makes an incomplete catalog safe to merge; it remains a safety - net rather than a substitute for a complete checked-in catalog. -- **The parity check is structural, not translational**: it compares shapes, so a - green run does not mean "translated". It catches a missing/extra key or - namespace, an empty or non-string value, a dropped `{{placeholder}}`, and a - dropped or renumbered `` tag. It does **not** catch a value identical to - English, a catalog copy-pasted wholesale from `en`, or swapped `_one`/`_other` - forms. The identical-to-English tolerance is required — brand nouns and - technical literals must stay verbatim — so tightening it needs a per-key - exemption list or a whole-file proportion threshold, not a `value === en` rule. + `` structures. `i18n:check` fails the build on a missing key, an extra + key, a dropped placeholder, a dropped or renumbered `` tag, or a value + left identical to English unless declared in `_verbatim.json`. Runtime English + fallback remains a safety net rather than a substitute for a complete + checked-in catalog. +- **The parity check is structural plus identical-to-English**: a green run does + not mean "well translated". It catches shape defects and unexplained English + leftovers. It does **not** catch awkward-but-translated wording, or swapped + `_one`/`_other` forms that still exist as keys. Brand nouns and technical + literals that must stay English belong in `_verbatim.json`. - **Library**: react-i18next (superseding the initial Lingui implementation) — chosen so the English copy lives in one place and components stay free of inline source text.