fix(i18n): localize sidebar, settings tabs, and settings section titles

Three connected bugs where the Label/SettingsSection APIs took a `String`,
which routes through the StringProtocol overloads and bypasses localization
entirely. Identified by the user after testing zh-Hans / de / fr — the
sidebar menu items, Settings tab bar, and Settings section headers all
remained English under any App Language override.

- SidebarSection now exposes displayName: LocalizedStringResource; SidebarView
  builds Label via the Text/Image builders so the catalog key is actually
  used.
- SettingsTab gets the same displayName treatment; the .tabItem Label builds
  through the Text/Image builder too.
- SettingsSection.title changes from String → LocalizedStringKey so literal
  call sites (all ~20 of them) now extract into the catalog. Two call sites
  that were passing String variables (PlatformsView, CredentialPoolsView) are
  wrapped via LocalizedStringKey(...) — brand/provider names fall through to
  English as before. AuxiliaryTab's static task list gets a LocalizedStringKey
  column so its section titles extract too.

This change newly extracts 65 previously-invisible section-title keys into
the catalog; translations added for all six locales. Catalog: 575 → 644
source keys, each locale translated for 583 of them (brand names / protocol
names / format-only keys intentionally fall through).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Alan Wizemann
2026-04-21 03:32:32 +02:00
parent 1726a613a5
commit f47034d4ad
14 changed files with 3078 additions and 17 deletions
+65
View File
@@ -20,11 +20,14 @@
"%lld tools": "%lld ツール",
"30 Days": "30 日間",
"7 Days": "7 日間",
"90 Days": "90 日間",
"A QR code will appear below. Scan it with WhatsApp on your phone. The session is saved to ~/.hermes/platforms/whatsapp/ so you won't need to scan again after restarts.": "下に QR コードが表示されます。スマートフォンの WhatsApp でスキャンしてください。セッションは ~/.hermes/platforms/whatsapp/ に保存されるため、再起動後に再度スキャンする必要はありません。",
"API Key": "API キー",
"API keys are never displayed in full. Scarf only shows the last 4 characters for identification. Full key values are stored by hermes in ~/.hermes/auth.json.": "API キーは完全な形では表示されません。Scarf は識別用に末尾 4 文字のみを表示します。完全なキーの値は hermes が ~/.hermes/auth.json に保存します。",
"Access Control": "アクセス制御",
"Actions": "アクション",
"Active": "アクティブ",
"Active Personality": "アクティブなパーソナリティ",
"Active profile": "アクティブなプロファイル",
"Activity": "アクティビティ",
"Activity Patterns": "アクティビティパターン",
@@ -42,6 +45,7 @@
"Add from Preset": "プリセットから追加",
"Add rotation credentials so hermes can failover between keys when one hits rate limits.": "ローテーション用の資格情報を追加すると、あるキーがレート制限に達した際に hermes が別のキーにフェイルオーバーできます。",
"Add your first command": "最初のコマンドを追加",
"Advanced": "詳細",
"After approving in your browser, the provider shows a code. Paste it below and submit.": "ブラウザで承認するとプロバイダーがコードを表示します。下に貼り付けて送信してください。",
"Agent": "Agent",
"All": "すべて",
@@ -49,25 +53,34 @@
"All Sessions": "すべてのセッション",
"All Time": "全期間",
"All installed hub skills are up to date.": "インストールされているハブスキルはすべて最新です。",
"App Credentials": "アプリ資格情報",
"Approval": "承認",
"Approvals": "承認",
"Approve": "承認",
"Archive": "アーカイブ",
"Args (one per line)": "引数(1 行に 1 つ)",
"Arguments": "引数",
"Assistant Message": "アシスタントメッセージ",
"Auth": "認証",
"Authentication": "認証",
"Authentication uses ssh-agent": "認証には ssh-agent を使用します",
"Authorization Code": "認可コード",
"Authorization URL": "認可 URL",
"Aux Models": "補助モデル",
"Auxiliary tasks use separate, typically cheaper models. Leave Provider as `auto` to inherit the main provider.": "補助タスクには別の、通常はより安価なモデルを使用します。メインプロバイダーを継承するには Provider を `auto` のままにしてください。",
"Back": "戻る",
"Back to Catalog": "カタログに戻る",
"Backend": "バックエンド",
"Backup & Restore": "バックアップと復元",
"Backup Now": "今すぐバックアップ",
"Becomes the key under mcp_servers: in config.yaml.": "config.yaml の mcp_servers: 下のキーになります。",
"Behavior": "動作",
"Browse": "参照",
"Browse Hub": "ハブを参照",
"Browse the Hub": "ハブを参照",
"Browse...": "参照...",
"Browser": "ブラウザ",
"Built-in Memory": "ビルトインメモリ",
"By Day": "日別",
"By Hour": "時間別",
"Call timeout": "呼び出しタイムアウト",
@@ -81,6 +94,7 @@
"Check for Updates": "アップデートを確認",
"Check for Updates…": "アップデートを確認…",
"Checking…": "確認中…",
"Checkpoints": "チェックポイント",
"Choose a cron job from the list": "リストから cron ジョブを選択",
"Choose a profile to inspect.": "検査するプロファイルを選択してください。",
"Choose a project from the sidebar to view its dashboard.": "サイドバーからプロジェクトを選択してダッシュボードを表示します。",
@@ -98,16 +112,21 @@
"Close Window": "ウィンドウを閉じる",
"Code: %@": "コード: %@",
"Command": "コマンド",
"Command Allowlist": "コマンド許可リスト",
"Command looks destructive. Double-check before saving.": "コマンドが破壊的に見えます。保存前に再確認してください。",
"Component": "コンポーネント",
"Compress": "圧縮",
"Compress Conversation": "会話を圧縮",
"Compress conversation (/compress)": "会話を圧縮 (/compress)",
"Compression": "圧縮",
"Config Diagnostics": "設定診断",
"Configure": "設定",
"Connect timeout": "接続タイムアウト",
"Connected": "接続済み",
"Connected — can't read Hermes state": "接続済み — Hermes 状態を読み取れません",
"Connection": "接続",
"Container Limits": "コンテナ制限",
"Context & Compression": "コンテキストと圧縮",
"Continue Last Session": "前回のセッションを続ける",
"Copied": "コピー済み",
"Copy": "コピー",
@@ -132,21 +151,26 @@
"Cron Jobs": "Cron ジョブ",
"Current: %@": "現在: %@",
"Custom…": "カスタム…",
"Daemon Endpoint": "デーモンエンドポイント",
"Daemon running": "デーモン実行中",
"Dashboard": "ダッシュボード",
"Default": "デフォルト",
"Default: ~/.hermes": "デフォルト: ~/.hermes",
"Defaults to ~/.ssh/config or current user": "デフォルトは ~/.ssh/config または現在のユーザー",
"Defined Personalities": "定義済みパーソナリティ",
"Delegation": "委譲",
"Delete": "削除",
"Delete %@?": "%@ を削除しますか?",
"Delete Session?": "セッションを削除しますか?",
"Delete profile '%@'?": "プロファイル '%@' を削除しますか?",
"Delete...": "削除...",
"Deliver: %@": "配信: %@",
"Details": "詳細",
"Diagnostic Output": "診断出力",
"Diagnostics": "診断",
"Disable": "無効化",
"Disabled": "無効",
"Display": "表示",
"Docs": "ドキュメント",
"Done": "完了",
"Edit": "編集",
@@ -160,10 +184,13 @@
"Enable 2FA on your email account and generate an app password. Regular account passwords will fail. Always set allowed senders — otherwise anyone knowing the address can message the agent.": "メールアカウントで 2FA を有効にし、アプリパスワードを生成してください。通常のアカウントパスワードは使用できません。許可された送信者を必ず設定してください — そうしないと、アドレスを知っている誰もがエージェントにメッセージを送れます。",
"Enable the webhook platform to accept event-driven agent triggers. The HMAC secret is used as a fallback when individual routes don't provide their own.": "webhook プラットフォームを有効化してイベント駆動のエージェントトリガーを受け付けます。個別のルートが独自のものを提供しない場合、HMAC シークレットがフォールバックとして使用されます。",
"Enabled": "有効",
"End-to-End Encryption (experimental)": "エンドツーエンド暗号化(実験的)",
"Entity Filters (config.yaml only)": "エンティティフィルタ(config.yaml のみ)",
"Env vars, headers, and tool filters can be edited after the server is added.": "環境変数、ヘッダー、ツールフィルタはサーバー追加後に編集できます。",
"Environment Variables": "環境変数",
"Error": "エラー",
"Errors": "エラー",
"Event Filters": "イベントフィルタ",
"Exclude": "除外",
"Execute": "実行",
"Expected at %@": "%@ に期待",
@@ -172,18 +199,23 @@
"Export…": "エクスポート…",
"Expose prompts": "プロンプトを公開",
"Expose resources": "リソースを公開",
"External Provider": "外部プロバイダー",
"Feedback": "フィードバック",
"Fetch": "取得",
"Files": "ファイル",
"Filter logs...": "ログをフィルタ...",
"Filter servers...": "サーバーをフィルタ...",
"Filter skills...": "スキルをフィルタ...",
"Filter to session %@": "セッション %@ にフィルタ",
"Flush Memories": "メモリをフラッシュ",
"Focus topic (optional)": "フォーカストピック(任意)",
"Full copy of active profile (all state)": "アクティブなプロファイルの完全コピー(すべての状態)",
"Gateway": "Gateway",
"Gateway Running": "Gateway 実行中",
"Gateway Stopped": "Gateway 停止",
"Gateway restart required": "Gateway の再起動が必要です",
"General": "一般",
"Global Settings": "グローバル設定",
"Header": "ヘッダー",
"Headers": "ヘッダー",
"Health": "状態",
@@ -195,7 +227,10 @@
"Hide": "非表示",
"Hide Output": "出力を非表示",
"Hide details": "詳細を非表示",
"Home Channel": "ホームチャンネル",
"Homeserver": "ホームサーバー",
"Host key changed": "ホストキーが変更されました",
"Human Delay": "ヒューマンディレイ",
"ID: %@": "ID: %@",
"If this is the first connection, ensure your key is loaded with `ssh-add` and that the remote accepts it.": "初回接続の場合は、`ssh-add` でキーがロードされていることと、リモートがそれを受け付けていることを確認してください。",
"If you trust the change, remove the stale entry and reconnect:": "変更を信頼する場合、古いエントリを削除して再接続してください:",
@@ -217,6 +252,7 @@
"Last probe: %@": "最終確認: %@",
"Last run: %@": "最終実行: %@",
"Last updated: %@": "最終更新: %@",
"Layout": "レイアウト",
"Leave blank to infer from the model ID's prefix (\"openai/...\" → openai).": "モデル ID のプレフィックスから推定するには空のままにします(\"openai/...\" → openai)。",
"Leave blank unless Hermes is installed at a non-default path (systemd services often live at /var/lib/hermes/.hermes; Docker sidecars vary). Test Connection auto-suggests a value when it detects one of the known alternates.": "Hermes がデフォルト以外のパスにインストールされていない限り空のままにしてください(systemd サービスはしばしば /var/lib/hermes/.hermes にあり、Docker サイドカーは様々です)。テスト接続は既知の代替パスを検出すると自動的に値を提案します。",
"Level": "レベル",
@@ -227,7 +263,9 @@
"Loading session…": "セッションを読み込み中…",
"Local": "ローカル",
"Local (stdio)": "ローカル (stdio)",
"Locale": "ロケール",
"Log File": "ログファイル",
"Logging": "ログ",
"Logs": "ログ",
"MCP Servers": "MCP サーバー",
"MCP Servers (%lld)": "MCP サーバー (%lld)",
@@ -241,11 +279,14 @@
"Messages will appear here as the conversation progresses.": "会話が進むにつれてメッセージがここに表示されます。",
"Migrate": "移行",
"Missing required config:": "必須設定が不足しています:",
"Modal": "モーダル",
"Model": "モデル",
"Model ID": "モデル ID",
"Models": "モデル",
"Monitor": "モニター",
"Name": "名前",
"Name (no leading slash)": "名前(先頭のスラッシュなし)",
"Network": "ネットワーク",
"New Session": "新しいセッション",
"New Webhook Subscription": "新しい Webhook サブスクリプション",
"New name for '%@'": "'%@' の新しい名前",
@@ -283,6 +324,7 @@
"None": "なし",
"Notable Sessions": "注目のセッション",
"OAuth login for %@": "%@ の OAuth ログイン",
"OK": "OK",
"Open BotFather": "BotFather を開く",
"Open Developer Portal": "Developer Portal を開く",
"Open Local": "ローカルを開く",
@@ -294,6 +336,7 @@
"Open in Editor": "エディタで開く",
"Open in new window": "新しいウィンドウで開く",
"Open session": "セッションを開く",
"Optional": "任意",
"Optional — defaults to hostname": "任意 — デフォルトはホスト名",
"Optionally focus the summary on a specific topic. Leave blank to compress evenly.": "要約を特定のトピックに絞ることができます。均等に圧縮するには空のままにしてください。",
"Other": "その他",
@@ -304,11 +347,13 @@
"Pair Device": "デバイスをペアリング",
"Paired Users": "ペア済みユーザー",
"Paste code here…": "ここにコードを貼り付け…",
"Paths": "パス",
"Pause": "一時停止",
"Pending Approvals": "承認待ち",
"Per-route subscriptions (events, prompt template, delivery target) are managed in the Webhooks sidebar — not here. This panel only controls whether the webhook platform is listening at all.": "ルートごとのサブスクリプション(イベント、プロンプトテンプレート、配信先)は Webhooks サイドバーで管理します — ここではありません。このパネルは webhook プラットフォームが待ち受けるかどうかのみを制御します。",
"Period": "期間",
"Personalities": "パーソナリティ",
"Personality": "パーソナリティ",
"Pick an MCP server to add.": "追加する MCP サーバーを選択してください。",
"Pick one from the list, or add a new server from the toolbar.": "リストから選ぶか、ツールバーから新しいサーバーを追加してください。",
"Platforms": "プラットフォーム",
@@ -327,6 +372,7 @@
"Provider": "プロバイダー",
"Push to Talk": "押して話す",
"Push to talk (Ctrl+B)": "押して話す (Ctrl+B)",
"Push-to-Talk": "プッシュ・トゥ・トーク",
"Quick Commands": "クイックコマンド",
"Quick commands are shell shortcuts hermes exposes in chat as `/command_name`. They live under `quick_commands:` in config.yaml.": "クイックコマンドは、hermes がチャットで `/command_name` として公開するシェルショートカットです。config.yaml の `quick_commands:` 以下に記述します。",
"Quit Scarf": "Scarf を終了",
@@ -338,6 +384,7 @@
"Recent Sessions": "最近のセッション",
"Reconnect": "再接続",
"Recording…": "録音中…",
"Redaction": "秘匿化",
"Refresh": "更新",
"Reload": "再読み込み",
"Remote (HTTP)": "リモート (HTTP)",
@@ -353,6 +400,8 @@
"Rename Profile": "プロファイル名を変更",
"Rename Session": "セッション名を変更",
"Rename...": "名前を変更...",
"Required": "必須",
"Required Tokens": "必須トークン",
"Requires: %@": "必須: %@",
"Reset Cooldowns": "クールダウンをリセット",
"Restart": "再起動",
@@ -391,6 +440,7 @@
"Search or browse skills published to registries like skills.sh, GitHub, and the official hub.": "skills.sh、GitHub、公式ハブなどのレジストリに公開されたスキルを検索または参照します。",
"Search registries": "レジストリを検索",
"Search…": "検索…",
"Security": "セキュリティ",
"Select": "選択",
"Select Model": "モデルを選択",
"Select a Job": "ジョブを選択",
@@ -402,12 +452,14 @@
"Select an MCP Server": "MCP サーバーを選択",
"Send message (Enter)": "メッセージを送信 (Enter)",
"Series": "系列",
"Server": "サーバー",
"Server No Longer Exists": "サーバーは存在しません",
"Server name": "サーバー名",
"Servers": "サーバー",
"Service": "サービス",
"Service definition stale": "サービス定義が古くなっています",
"Session": "セッション",
"Session Search": "セッション検索",
"Session title": "セッションタイトル",
"Sessions": "セッション",
"Settings": "設定",
@@ -424,7 +476,9 @@
"Site": "サイト",
"Skills": "スキル",
"Skills (%lld)": "スキル (%lld)",
"Skills Hub": "スキルハブ",
"Source": "ソース",
"Speech-to-Text": "音声認識",
"Start": "開始",
"Start Daemon": "デーモンを開始",
"Start Hermes": "Hermes を開始",
@@ -449,6 +503,7 @@
"Test Connection": "接続テスト",
"Test failed": "テスト失敗",
"Test passed": "テスト成功",
"Text-to-Speech": "音声合成",
"The agent hasn't advertised any slash commands yet. Keep typing to send as a message, or press Esc.": "エージェントはまだスラッシュコマンドを提示していません。入力を続けるとメッセージとして送信されます。キャンセルするには Esc を押してください。",
"The remote's SSH fingerprint no longer matches what your `~/.ssh/known_hosts` file expected. This usually means the remote was reinstalled — or, less commonly, that someone is intercepting the connection.": "リモートの SSH フィンガープリントが `~/.ssh/known_hosts` の期待値と一致しません。通常はリモートが再インストールされたことを意味します — まれに通信が傍受されている可能性もあります。",
"The server this window was opened with has been removed from your registry.": "このウィンドウを開いたサーバーはレジストリから削除されました。",
@@ -465,14 +520,17 @@
"This will permanently delete the session and all its messages.": "これによりセッションとそのすべてのメッセージが恒久的に削除されます。",
"Timeout: %llds (%@)": "タイムアウト: %1$lld 秒 (%2$@)",
"Timeouts": "タイムアウト",
"Tirith Sandbox": "Tirith サンドボックス",
"To skip the passphrase prompt at every reboot, add `--apple-use-keychain` to cache it in macOS Keychain.": "毎回の再起動時にパスフレーズのプロンプトをスキップするには、`--apple-use-keychain` を追加して macOS キーチェーンにキャッシュしてください。",
"Toggle text-to-speech (/voice tts)": "テキスト読み上げを切り替え (/voice tts)",
"Toggle voice mode (/voice)": "音声モードを切り替え (/voice)",
"Token on disk. Clear to re-authenticate next time the gateway connects.": "トークンはディスク上にあります。消去すると、次回 gateway が接続する際に再認証します。",
"Tool Approval Required": "ツールの承認が必要",
"Tool Filters": "ツールフィルタ",
"Tool Progress": "ツールの進捗",
"Tools": "ツール",
"Top Tools": "トップツール",
"Turns & Reasoning": "ターンと推論",
"Uninstall": "アンインストール",
"Unknown: %@": "不明: %@",
"Update": "更新",
@@ -489,14 +547,21 @@
"Used as the YAML key. Lowercase, no spaces.": "YAML キーとして使用されます。小文字・空白なし。",
"View": "表示",
"View All": "すべて表示",
"Vision": "ビジョン",
"Voice": "音声",
"Voice Off": "音声オフ",
"Voice On": "音声オン",
"Waiting for authorization URL…": "認可 URL を待機中…",
"Waiting for first probe": "最初のプローブを待機中",
"Waiting for hermes to prompt for the code…": "hermes がコードを要求するのを待機中…",
"Web Extract": "Web 抽出",
"Webhook (advanced)": "Webhook(詳細)",
"Webhook (hermes side)": "Webhook(hermes 側)",
"Webhook Security": "Webhook セキュリティ",
"Webhook platform not enabled": "Webhook プラットフォームが有効ではありません",
"Webhooks": "Webhook",
"Webhooks let external services trigger agent responses. Each subscription gets its own URL endpoint.": "Webhook を使うと外部サービスがエージェントの応答をトリガーできます。各サブスクリプションは独自の URL エンドポイントを持ちます。",
"Website Blocklist": "ウェブサイトブロックリスト",
"WhatsApp uses the Baileys library to emulate a WhatsApp Web session. Pair this Mac as a linked device by running the pairing wizard and scanning the QR code with your phone (Settings → Linked Devices → Link a Device).": "WhatsApp は Baileys ライブラリで WhatsApp Web セッションをエミュレートします。ペアリングウィザードを実行し、スマートフォンで QR コードをスキャンしてこの Mac をリンク済みデバイスとしてペアリングしてください(設定 → リンク済みデバイス → デバイスをリンク)。",
"Working": "処理中",
"e.g. anthropic": "例: anthropic",