{
  "nav": {
    "chat": "チャット",
    "monitor": "監視",
    "overview": "概要",
    "analytics": "分析",
    "logs": "ログ",
    "agents": "エージェント",
    "sessions": "セッション",
    "approvals": "承認",
    "comms": "通信",
    "automation": "自動化",
    "workflows": "ワークフロー",
    "scheduler": "スケジューラ",
    "goals": "目標",
    "extensions": "拡張",
    "channels": "チャンネル",
    "skills": "スキル",
    "hands": "Hands",
    "plugins": "プラグイン",
    "system": "システム",
    "runtime": "ランタイム",
    "settings": "設定",
    "memory": "メモリ"
  },
  "status": {
    "connecting": "接続中...",
    "reconnecting": "再接続中...",
    "disconnected": "切断されています",
    "ready": "準備完了",
    "error": "エラー",
    "notConfigured": "未設定",
    "unknown": "不明"
  },
  "btn": {
    "refresh": "更新",
    "unlock": "ダッシュボードを解除",
    "retry": "再試行",
    "send": "送信",
    "stop": "停止",
    "cancel": "キャンセル",
    "save": "保存",
    "delete": "削除",
    "edit": "編集",
    "add": "追加",
    "close": "閉じる",
    "back": "戻る",
    "next": "次へ",
    "skip": "スキップ",
    "test": "接続をテスト",
    "go": "移動",
    "chat": "チャット",
    "copy": "コピー",
    "copied": "コピーしました"
  },
  "label": {
    "agents": "個のエージェントが稼働中",
    "status": "状態",
    "version": "バージョン",
    "provider": "プロバイダー",
    "model": "モデル",
    "agent": "エージェント",
    "messages": "メッセージ",
    "actions": "操作",
    "name": "名前",
    "key": "キー",
    "value": "値"
  },
  "auth": {
    "title": "API キーが必要です",
    "description": "このインスタンスでは API キーが必要です。config.toml のキーを入力してください。",
    "placeholder": "API キーを入力...",
    "hint": "~/.librefang/config.toml の先頭に api_key = \"your-key\" を追加してください"
  },
  "page": {
    "overview": "概要",
    "sessions": "セッション",
    "approvals": "承認",
    "logs": "ログ",
    "runtime": "ランタイム"
  },
  "health": {
    "healthy": "正常",
    "unreachable": "到達不可"
  },
  "stat": {
    "agentsRunning": "稼働中のエージェント",
    "tokensUsed": "使用トークン",
    "totalCost": "総コスト",
    "uptime": "稼働時間",
    "channels": "チャンネル",
    "skills": "スキル",
    "mcpServers": "MCP サーバー",
    "toolCalls": "ツール呼び出し",
    "providers": "プロバイダー"
  },
  "card": {
    "gettingStarted": "はじめに",
    "llmProviders": "LLM プロバイダー",
    "systemHealth": "システム状態",
    "securitySystems": "セキュリティシステム",
    "connectedChannels": "接続済みチャンネル"
  },
  "agents": {
    "newAgent": "+ 新しいエージェント",
    "stopAll": "すべて停止",
    "yourAgents": "あなたのエージェント",
    "startNew": "または新しいエージェントを開始",
    "startChatting": "チャットを始める"
  },
  "detail": {
    "info": "情報",
    "files": "ファイル",
    "config": "設定",
    "id": "ID",
    "state": "状態",
    "mode": "モード",
    "profile": "プロファイル",
    "provider": "プロバイダー",
    "model": "モデル",
    "change": "変更",
    "created": "作成日時",
    "fallbacks": "フォールバック",
    "none": "なし - フォールバックチェーンを追加",
    "addFallback": "+ 追加",
    "loadingFiles": "ファイルを読み込み中...",
    "notCreated": "未作成",
    "noWorkspaceFiles": "ワークスペースファイルが見つかりません",
    "saving": "保存中...",
    "name": "名前",
    "systemPrompt": "システムプロンプト",
    "emoji": "絵文字",
    "color": "色",
    "archetype": "アーキタイプ",
    "vibe": "雰囲気",
    "noneValue": "なし",
    "saveConfig": "設定を保存",
    "toolFilters": "ツールフィルター",
    "toolFiltersDesc": "許可リスト: これらのツールのみ利用可能です（空ならすべて）。ブロックリスト: これらのツールを除外します。",
    "allowlist": "許可リスト",
    "blocklist": "ブロックリスト",
    "toolNamePlaceholder": "ツール名",
    "clone": "複製",
    "clearHistory": "履歴をクリア",
    "removeTool": "{tool} を削除"
  },
  "mode": {
    "observe": "監視",
    "assist": "支援",
    "full": "フル"
  },
  "category": {
    "all": "すべて",
    "general": "一般",
    "development": "開発",
    "research": "調査",
    "writing": "執筆",
    "business": "ビジネス"
  },
  "profile": {
    "minimal": {
      "label": "最小",
      "desc": "読み取り専用のファイルアクセス"
    },
    "coding": {
      "label": "コーディング",
      "desc": "ファイル + シェル + Web 取得"
    },
    "research": {
      "label": "リサーチ",
      "desc": "Web 検索 + ファイル読み書き"
    },
    "messaging": {
      "label": "メッセージ",
      "desc": "エージェント + メモリアクセス"
    },
    "automation": {
      "label": "自動化",
      "desc": "カスタム以外のすべてのツール"
    },
    "balanced": {
      "label": "バランス",
      "desc": "汎用ツールセット"
    },
    "precise": {
      "label": "高精度",
      "desc": "精度重視のツールセット"
    },
    "creative": {
      "label": "クリエイティブ",
      "desc": "創造性重視のフルツールセット"
    },
    "full": {
      "label": "フル",
      "desc": "35 以上のすべてのツール"
    }
  },
  "template": {
    "GeneralAssistant": {
      "name": "汎用アシスタント",
      "desc": "日常のタスク、質問対応、提案に使える汎用的な会話エージェントです。"
    },
    "CodeHelper": {
      "name": "コードヘルパー",
      "desc": "複数言語でコードの作成、レビュー、デバッグを行うプログラミング特化エージェントです。"
    },
    "Researcher": {
      "name": "リサーチャー",
      "desc": "複雑な話題を分解し、情報を整理して、引用付きの要約を返す分析型エージェントです。"
    },
    "Writer": {
      "name": "ライター",
      "desc": "草案作成、編集、文章改善を支援する創作向けエージェントです。"
    },
    "DataAnalyst": {
      "name": "データアナリスト",
      "desc": "データセットの分析、クエリ作成、統計結果の解釈を支援するデータ重視のエージェントです。"
    },
    "DevOpsEngineer": {
      "name": "DevOps エンジニア",
      "desc": "CI/CD、インフラ、Docker、デプロイトラブルシューティングに特化したシステム志向のエージェントです。"
    },
    "CustomerSupport": {
      "name": "カスタマーサポート",
      "desc": "顧客からの問い合わせ対応や問題解決を行う、丁寧で共感的なエージェントです。"
    },
    "Tutor": {
      "name": "チューター",
      "desc": "概念を段階的に説明し、学習者のレベルに合わせて教える教育向けエージェントです。"
    },
    "APIDesigner": {
      "name": "API デザイナー",
      "desc": "RESTful API 設計、OpenAPI 仕様、統合アーキテクチャに特化したエージェントです。"
    },
    "MeetingNotes": {
      "name": "ミーティングノート",
      "desc": "会議の記録を、アクション項目や重要な決定事項を含む構造化ノートにまとめます。"
    }
  },
  "time": {
    "now": "たった今",
    "secondsAgo": "{count}秒前",
    "minutesAgo": "{count}分前",
    "hoursAgo": "{count}時間前",
    "daysAgo": "{count}日前"
  },
  "onboarding": {
    "welcome": "LibreFang へようこそ",
    "launchWizard": "セットアップウィザードを開始",
    "configureManually": "手動で設定",
    "dismiss": "閉じる"
  },
  "provider": {
    "bannerText": "AI プロバイダーが設定されていないため、エージェントは一時停止しています。",
    "bannerAction": "プロバイダーを設定",
    "tierFree": "無料 / ローカル",
    "tierRecommended": "推奨",
    "tierOther": "その他のプロバイダー",
    "getKey": "API キーを取得",
    "ollamaDetected": "このマシンで Ollama を検出しました",
    "ollamaNotDetected": "Ollama が見つかりません",
    "ollamaActivate": "Ollama を有効化",
    "activateSuccess": "プロバイダーを有効化しました - エージェントを再開します",
    "setupTitle": "AI プロバイダー設定",
    "setupDesc": "エージェントを有効化するには、少なくとも 1 つの AI プロバイダーを設定してください。"
  },
  "overview": {
    "connectionError": "接続エラー",
    "stepsCompleted": "5 ステップ中 {count} ステップ完了",
    "setupWizard": "セットアップウィザード",
    "welcomeDesc": "ガイド付きのセットアップウィザードですばやく開始するか、手動で設定してください:",
    "llmProviders": "LLM プロバイダー",
    "providersConfigured": "{configured}/{total} 設定済み",
    "systemHealth": "システム状態",
    "securitySystems": "セキュリティシステム",
    "connectedChannels": "接続済みチャンネル",
    "quickActions": "クイックアクション",
    "newAgent": "新しいエージェント",
    "browseSkills": "スキルを見る",
    "addChannel": "チャンネルを追加",
    "createWorkflow": "ワークフローを作成",
    "settings": "設定",
    "recentActivity": "最近のアクティビティ",
    "viewAll": "すべて表示",
    "noRecentActivity": "最近のアクティビティはありません",
    "activityWillAppear": "エージェントが処理を開始すると、ここにアクティビティが表示されます。",
    "chatWithAgent": "エージェントとチャット",
    "createAgent": "エージェントを作成",
    "spawnNewAgent": "新しいエージェントを起動",
    "configureProvider": "プロバイダーを設定",
    "setupLlmProvider": "LLM プロバイダーを設定",
    "exploreSkills": "利用可能なスキルを確認",
    "defenseActive": "{count} 個の多層防御システムが有効です",
    "channelsConnected": "{count} 個のチャンネルが接続済み",
    "toolsCount": "({count} ツール)",
    "providerReady": "{provider} - 準備完了",
    "providerNotConfigured": "{provider} - 未設定",
    "setupProvider": "LLM プロバイダーを設定",
    "setupAgent": "最初のエージェントを作成",
    "setupChat": "最初のメッセージを送信",
    "setupChannel": "メッセージングチャンネルを接続",
    "setupSkill": "スキルを閲覧またはインストール",
    "actionUnknown": "不明",
    "actionAgentCreated": "エージェント作成",
    "actionAgentStopped": "エージェント停止",
    "actionToolUsed": "ツール使用",
    "actionToolCompleted": "ツール完了",
    "actionMessageIn": "受信メッセージ",
    "actionResponseSent": "応答送信",
    "loadError": "概要データを読み込めませんでした。",
    "providerCoolingDown": "{provider} - クールダウン中（レート制限）",
    "providerCircuitOpen": "{provider} - サーキットブレーカー作動中",
    "actionNetworkAccess": "ネットワークアクセス",
    "actionShellCommand": "シェルコマンド",
    "actionFileAccess": "ファイルアクセス",
    "actionMemoryAccess": "メモリアクセス",
    "actionSessionReset": "セッションリセット",
    "actionCompacted": "圧縮済み",
    "actionModelChanged": "モデル変更",
    "actionLoginAttempt": "ログイン試行",
    "actionLoginOk": "ログイン成功",
    "actionLoginFailed": "ログイン失敗",
    "actionDenied": "拒否",
    "actionRateLimited": "レート制限",
    "actionWorkflowRun": "ワークフロー実行",
    "actionTriggerFired": "トリガー発火",
    "actionSkillInstalled": "スキルインストール",
    "actionMcpConnected": "MCP 接続"
  },
  "security": {
    "merkleAudit": "Merkle 監査",
    "taintTracking": "テイント追跡",
    "wasmSandbox": "WASM サンドボックス",
    "gcraRateLimit": "GCRA レート制限",
    "ed25519Signing": "Ed25519 署名",
    "ssrfProtection": "SSRF 保護",
    "secretZeroize": "シークレット消去",
    "loopGuard": "ループガード",
    "sessionRepair": "セッション修復"
  },
  "agentChat": {
    "backToAgents": "エージェント一覧へ戻る",
    "ready": "準備完了",
    "generating": "生成中...",
    "queueCount": "+{count} 件待機中",
    "queueCountCompact": "{count} 件待機中",
    "sessions": "セッション",
    "newSession": "+ 新規",
    "sessionDefault": "セッション {id}",
    "messagesCount": "{count} 件のメッセージ",
    "noSessions": "セッションがありません",
    "searchMessages": "メッセージを検索 (Ctrl+F)",
    "searchMessagesPlaceholder": "メッセージを検索...",
    "searchResults": "{total} 件中 {filtered} 件",
    "selectAgentToChat": "チャットを始めるエージェントを選択してください",
    "chooseAgentFromSidebar": "サイドバーからエージェントを選ぶか、エージェントタブで新規作成してください。",
    "copyMessage": "メッセージをコピー",
    "copied": "コピーしました",
    "dropFilesHere": "ここにファイルをドロップ",
    "running": "実行中...",
    "done": "完了",
    "input": "入力",
    "result": "結果",
    "chars": "({count} 文字)",
    "recordingRelease": "録音中... 離すと送信",
    "messageLibreFang": "LibreFang にメッセージ... (/ でコマンド)",
    "stopGenerating": "生成を停止",
    "attachFile": "ファイルを添付",
    "holdToRecord": "長押しで音声録音",
    "availableModels": "利用可能なモデル - 選択するか、そのまま入力を続けてください",
    "switching": "切り替え中...",
    "noModelsFound": "モデルが見つかりません",
    "searchModels": "モデルを検索...",
    "all": "すべて",
    "tokens": "トークン",
    "filesCount": "{count} 個のファイル",
    "audio": "音声: {name}",
    "secondsShort": "{count}秒",
    "loadingFiles": "ファイルを読み込み中...",
    "notCreated": "未作成",
    "noWorkspaceFiles": "ワークスペースファイルが見つかりません",
    "saveConfig": "設定を保存",
    "toolFilters": "ツールフィルター",
    "toolFiltersDesc": "許可リスト: これらのツールのみ使用可（空欄 = すべて）。拒否リスト: これらのツールを除外。",
    "allowlist": "許可リスト",
    "blocklist": "拒否リスト",
    "processing": "処理中...",
    "thinking": "思考中...",
    "thinkingWithLevel": "思考中 ({level})...",
    "usingTool": "{tool} を使用中...",
    "working": "作業中...",
    "usingHttpMode": "HTTP モードを使用中（ストリーミングなし）",
    "loadModelsFailed": "モデルの読み込みに失敗しました: {message}",
    "newSessionPrompt": "セッション名（任意）:",
    "newSessionCreated": "新しいセッションを作成しました",
    "newSessionFailed": "セッションの作成に失敗しました",
    "switchSessionFailed": "セッションの切り替えに失敗しました",
    "errorPrefix": "エラー: {message}",
    "memoryConflict": "メモリが更新されました: 以前は '{old}'、現在は '{new}'",
    "runCancelled": "実行をキャンセルしました",
    "stopFailed": "停止に失敗しました: {message}",
    "stopAgentTitle": "エージェントを停止",
    "stopAgentConfirm": "エージェント「{name}」を停止しますか？ エージェントはシャットダウンされます。",
    "agentStopped": "エージェント「{name}」を停止しました",
    "fileTooLarge": "ファイル「{name}」は 10MB 制限を超えています",
    "fileTypeNotSupported": "未対応のファイル形式です: {name}",
    "microphoneDenied": "マイクへのアクセスが拒否されました",
    "transcribingAudio": "音声を文字起こし中...",
    "failedUploadAudio": "音声のアップロードに失敗しました: {message}",
    "failedUploadFile": "{name} のアップロードに失敗しました",
    "welcomeTips": "**LibreFang Chat へようこそ！**\n\n- `/` を入力すると利用可能なコマンドを表示します\n- `/help` ですべてのコマンドを表示します\n- `/think on` で拡張思考を有効にします\n- `/context` でコンテキストウィンドウの使用状況を確認します\n- `/verbose off` でツール詳細を非表示にします\n- `Ctrl+Shift+F` で集中モードを切り替えます\n- ファイルはドラッグ＆ドロップで添付できます\n- `Ctrl+/` でコマンドパレットを開きます",
    "tipCommands": "/ でコマンド",
    "tipThinking": "/think on で拡張思考",
    "tipFocus": "Ctrl+Shift+F で集中モード",
    "tipAttach": "ドラッグして添付",
    "tipModel": "/model でモデル切替",
    "tipContext": "/context で使用状況確認",
    "tipVerbose": "/verbose off で詳細非表示",
    "cmd": {
      "help": "利用可能なコマンドを表示",
      "agents": "エージェントページへ移動",
      "new": "セッションをリセット（履歴をクリア）",
      "reboot": "セッションを完全リセット（コンテキストを消去、要約なし）",
      "compact": "LLM セッション圧縮を実行",
      "model": "モデルを表示または切替 (/model [name])",
      "stop": "現在のエージェント実行をキャンセル",
      "usage": "セッションのトークン使用量とコストを表示",
      "think": "拡張思考を切替 (/think [on|off|stream])",
      "context": "コンテキストウィンドウの使用量と圧迫状況を表示",
      "verbose": "ツール詳細レベルを切替 (/verbose [off|on|full])",
      "queue": "エージェントが処理中か確認",
      "status": "システム状態を表示",
      "clear": "チャット表示をクリア",
      "exit": "エージェントから切断",
      "budget": "支出上限と現在のコストを表示",
      "peers": "OFP ピアネットワークの状態を表示",
      "a2a": "検出された外部 A2A エージェントを一覧表示"
    },
    "toast": {
      "modelSwitched": "{model} に切り替えました",
      "switchFailed": "切り替えに失敗しました: {message}",
      "sessionReset": "セッションをリセットしました",
      "sessionRebooted": "セッションを完全リセットしました。コンテキストを消去しました。",
      "resetFailed": "リセットに失敗しました: {message}",
      "rebootFailed": "完全リセットに失敗しました: {message}",
      "compactFailed": "圧縮に失敗しました: {message}",
      "stopFailed": "停止に失敗しました: {message}",
      "modelSwitchFailed": "モデル切り替えに失敗しました: {message}"
    },
    "sys": {
      "compacting": "セッションを圧縮中...",
      "compactDone": "圧縮が完了しました",
      "runCancelled": "実行をキャンセルしました",
      "sessionUsageTitle": "セッション使用状況",
      "messages": "メッセージ",
      "approxTokens": "概算トークン",
      "thinkStatus": "拡張思考",
      "thinkStream": "有効（思考をストリーミング表示）",
      "thinkOn": "有効",
      "thinkOff": "無効",
      "thinkStreamDesc": "思考トークンは折りたたみ可能なパネルに表示されます。",
      "thinkOnDesc": "モデルが対応している場合、エージェントは思考内容を表示します。",
      "thinkOffDesc": "通常の応答モードです。",
      "notConnected": "未接続です。先にエージェントへ接続してください。",
      "notConnectedShort": "未接続です。",
      "systemStatus": "システム状態",
      "agents": "エージェント",
      "uptime": "稼働時間",
      "version": "バージョン",
      "modelSwitchedTo": "モデルを切り替えました: `{model}`",
      "provider": "プロバイダー",
      "currentModel": "現在のモデル",
      "providerLabel": "プロバイダー",
      "modelLabel": "モデル",
      "noAgent": "エージェントが選択されていません。",
      "budgetStatus": "予算状況",
      "unlimited": "無制限",
      "hourly": "時間ごと",
      "daily": "日ごと",
      "monthly": "月ごと",
      "ofpNetwork": "OFP ネットワーク",
      "status": "状態",
      "enabled": "有効",
      "disabled": "無効",
      "connectedPeers": "接続中のピア",
      "noA2aAgents": "外部 A2A エージェントは見つかっていません。",
      "a2aAgents": "A2A エージェント"
    }
  },
  "sessionsPage": {
    "title": "セッション",
    "filterByAgent": "エージェントで絞り込み...",
    "memory": "メモリ",
    "loading": "セッションを読み込み中...",
    "loadError": "セッションを読み込めませんでした。",
    "conversationSessions": "会話セッション",
    "conversationSessionsDesc": "各エージェントとの会話ごとにセッションが作成されます。セッションにはメッセージ履歴全体が保存されるため、後から会話を再開したり、過去のやり取りを確認したりできます。",
    "session": "セッション",
    "created": "作成日時",
    "noSessionsYet": "まだセッションがありません",
    "sessionsCreatedWhen": "セッションはエージェントとチャットすると作成されます。会話を開始すると、ここにセッション履歴が表示されます。",
    "startChatting": "チャットを開始",
    "noSessionsMatch": "条件に一致するセッションはありません。",
    "agentMemory": "エージェントメモリ",
    "agentMemoryDesc": "各エージェントは独自のキー・バリューメモリストアを持っています。エージェントは会話間で設定、メモ、文脈を保持するためにメモリを使います。",
    "selectAgent": "エージェントを選択...",
    "loadingMemory": "メモリを読み込み中...",
    "loadMemoryError": "メモリデータを読み込めませんでした。",
    "keysCount": "{count} 個のキー",
    "addKey": "+ キーを追加",
    "key": "キー",
    "value": "値",
    "noKeysStored": "保存されたキーはありません",
    "noMemoryEntries": "このエージェントにはまだメモリエントリがありません。エージェントは会話中に自動でメモリエントリを作成します。手動で追加することもできます。",
    "addFirstKey": "+ 最初のキーを追加",
    "valueJson": "値 (JSON)",
    "selectAnAgent": "エージェントを選択",
    "chooseAgentFromDropdown": "上のドロップダウンからエージェントを選択して、そのメモリストアを閲覧・編集してください。",
    "deleteSessionTitle": "セッションを削除",
    "deleteSessionConfirm": "この操作でセッションとそのメッセージは完全に削除されます。",
    "sessionDeleted": "セッションを削除しました",
    "deleteSessionFailed": "セッションの削除に失敗しました: {message}",
    "deleteKeyTitle": "キーを削除",
    "deleteKeyConfirm": "キー「{key}」を削除しますか？ この操作は元に戻せません。",
    "keySaved": "キー「{key}」を保存しました",
    "saveKeyFailed": "キーの保存に失敗しました: {message}",
    "keyDeleted": "キー「{key}」を削除しました",
    "deleteKeyFailed": "キーの削除に失敗しました: {message}",
    "keyUpdated": "キー「{key}」を更新しました",
    "saveFailed": "保存に失敗しました: {message}"
  },
  "agentsPage": {
    "createAgent": "エージェントを作成",
    "wizard": "ウィザード",
    "rawToml": "生の TOML",
    "agentManifest": "エージェントマニフェスト (TOML)",
    "spawnAgent": "エージェントを起動",
    "spawning": "起動中...",
    "agentName": "エージェント名",
    "agentNamePlaceholder": "my-agent",
    "providerModelPlaceholder": "provider/model",
    "choose": "選択...",
    "systemPromptPlaceholder": "あなたは役に立つアシスタントです。",
    "personality": "個性",
    "soulPersona": "魂 / ペルソナ",
    "editable": "(編集可能)",
    "soulPlaceholder": "このエージェントの性格やコミュニケーションスタイルを説明してください...",
    "toolProfile": "ツールプロファイル",
    "customCapabilities": "カスタム（手動で機能を指定）",
    "toolsIncluded": "含まれるツール",
    "capabilities": "機能",
    "memoryRead": "メモリ読み取り",
    "memoryWrite": "メモリ書き込み",
    "network": "ネットワーク",
    "shell": "シェル",
    "agentSpawn": "エージェント起動",
    "unnamed": "名称未設定",
    "genericAgent": "エージェント",
    "waitingProvider": "AI プロバイダーを待機中",
    "fileBytes": "{count} bytes",
    "loadAgentsFailed": "エージェントを読み込めませんでした。デーモンは起動していますか？",
    "loadAgentsFailedShort": "エージェントを読み込めませんでした。",
    "loadTemplatesFailed": "テンプレートを読み込めませんでした。",
    "stopAgentTitle": "エージェントを停止",
    "stopAgentConfirm": "エージェント \"{name}\" を停止しますか？ エージェントは終了します。",
    "agentStopped": "エージェント \"{name}\" を停止しました",
    "stopAgentFailed": "エージェントの停止に失敗しました: {message}",
    "stopAllTitle": "すべてのエージェントを停止",
    "stopAllConfirm": "{count} 個のエージェントを停止しますか？ すべてのエージェントが終了します。",
    "stopSomeFailed": "一部のエージェントの停止に失敗しました: {errors}",
    "agentsStopped": "{count} 個のエージェントを停止しました",
    "pleaseEnterAgentName": "エージェント名を入力してください",
    "modeSet": "モードを {mode} に設定しました",
    "setModeFailed": "モード設定に失敗しました: {message}",
    "manifestEmpty": "マニフェストが空です - 先にエージェント設定を入力してください",
    "agentSpawned": "エージェント \"{name}\" を起動しました",
    "newAgentName": "new",
    "spawnFailed": "起動に失敗しました: {message}",
    "unknownError": "不明なエラー",
    "spawnAgentFailed": "エージェントの起動に失敗しました: {message}",
    "loadFilesFailed": "ファイルの読み込みに失敗しました: {message}",
    "readFileFailed": "ファイルの読み込みに失敗しました: {message}",
    "fileSaved": "{file} を保存しました",
    "saveFileFailed": "ファイルの保存に失敗しました: {message}",
    "configUpdated": "設定を更新しました",
    "saveConfigFailed": "設定の保存に失敗しました: {message}",
    "clonedAs": "\"{name}\" として複製しました",
    "cloneFailed": "複製に失敗しました: {message}",
    "spawnedFromTemplate": "テンプレートからエージェント \"{name}\" を起動しました",
    "spawnFromTemplateFailed": "テンプレートからの起動に失敗しました: {message}",
    "clearHistoryTitle": "履歴をクリア",
    "clearHistoryConfirm": "\"{name}\" の会話履歴をすべて消去しますか？ この操作は元に戻せません。",
    "historyCleared": "\"{name}\" の履歴をクリアしました",
    "clearHistoryFailed": "履歴のクリアに失敗しました: {message}",
    "providerSuffix": " (provider: {provider})",
    "modelChanged": "モデルを変更しました{provider} (メモリをリセット)",
    "changeModelFailed": "モデル変更に失敗しました: {message}",
    "fallbackAdded": "フォールバックを追加しました: {value}",
    "saveFallbacksFailed": "フォールバックの保存に失敗しました: {message}",
    "fallbackRemoved": "フォールバックを削除しました",
    "updateToolFiltersFailed": "ツールフィルターの更新に失敗しました: {message}",
    "spawnBuiltinFailed": "エージェントの起動に失敗しました: {message}",
    "archetype": {
      "assistant": "アシスタント",
      "researcher": "リサーチャー",
      "coder": "コーダー",
      "writer": "ライター",
      "devops": "DevOps",
      "support": "サポート",
      "analyst": "アナリスト",
      "custom": "カスタム"
    },
    "vibe": {
      "professional": "プロフェッショナル",
      "friendly": "フレンドリー",
      "technical": "技術的",
      "creative": "クリエイティブ",
      "concise": "簡潔",
      "mentor": "メンター"
    }
  },
  "approvals": {
    "title": "実行承認",
    "loading": "読み込み中...",
    "loadError": "承認一覧を読み込めませんでした。",
    "pendingCount": "{count} 件が保留中",
    "filter": {
      "all": "すべて",
      "pending": "保留中",
      "approved": "承認済み",
      "rejected": "拒否済み"
    },
    "status": {
      "pending": "保留中",
      "approved": "承認済み",
      "rejected": "拒否済み",
      "expired": "期限切れ"
    },
    "emptyTitle": "承認はありません",
    "emptyDesc": "エージェントが重要な操作の許可を求めると、ここに表示されます。",
    "agentMeta": "エージェント: {agent} - {time}",
    "approve": "承認",
    "reject": "拒否",
    "approvedToast": "承認しました",
    "rejectTitle": "操作を拒否",
    "rejectConfirm": "この操作を本当に拒否しますか？",
    "rejectedToast": "拒否しました"
  },
  "logsPage": {
    "title": "ログ",
    "allLevels": "すべて",
    "searchPlaceholder": "検索...",
    "resume": "再開",
    "pause": "一時停止",
    "clear": "クリア",
    "export": "エクスポート",
    "autoScroll": "自動スクロール",
    "scrollLocked": "スクロール固定",
    "verifyChain": "チェーンを検証",
    "liveTab": "ライブ",
    "auditTab": "監査証跡",
    "connectingStream": "ログストリームに接続中...",
    "loadError": "ログを読み込めませんでした。",
    "noEntries": "ログエントリはまだありません",
    "noEntriesHint": "エージェントが動作すると、ここにアクティビティが表示されます。",
    "loadingAudit": "監査ログを読み込み中...",
    "auditLoadError": "監査ログを読み込めませんでした。",
    "auditTitle": "改ざん検知監査証跡",
    "auditDesc": "すべてのエージェント操作は暗号学的ハッシュチェーン付きで記録されます。\"チェーンを検証\" を使うと、エントリが改ざん・削除されていないことを確認できます。",
    "allActions": "すべてのアクション",
    "entriesCount": "{filtered} / {total} 件のエントリ",
    "tipHash": "tip: {hash}",
    "timestamp": "時刻",
    "action": "アクション",
    "detail": "詳細",
    "outcome": "結果",
    "noAuditEntries": "監査エントリはまだありません",
    "noAuditEntriesHint": "エージェントが動作すると、ここにアクティビティが表示されます。",
    "paused": "一時停止中",
    "live": "ライブ",
    "polling": "ポーリング",
    "disconnected": "切断",
    "valid": "正常",
    "broken": "破損",
    "chainVerified": "監査チェーンを検証しました - {count} 件のエントリが有効です",
    "chainBrokenToast": "監査チェーンが破損しています",
    "chainVerifyFailed": "チェーン検証に失敗しました: {message}"
  },
  "runtimePage": {
    "title": "ランタイム",
    "loading": "ランタイム情報を読み込み中...",
    "loadError": "ランタイムデータを読み込めませんでした。",
    "agents": "エージェント",
    "defaultModel": "デフォルトモデル",
    "system": "システム",
    "platform": "プラットフォーム",
    "architecture": "アーキテクチャ",
    "apiListen": "API リッスン",
    "homeDirectory": "ホームディレクトリ",
    "logLevel": "ログレベル",
    "network": "ネットワーク",
    "enabled": "有効",
    "disabled": "無効",
    "providers": "プロバイダー",
    "models": "モデル",
    "latency": "レイテンシ",
    "online": "オンライン",
    "ready": "準備完了",
    "notConfigured": "未設定",
    "secondsShort": "{count}s",
    "minutesSecondsShort": "{minutes}m {seconds}s",
    "hoursMinutesShort": "{hours}h {minutes}m",
    "daysHoursShort": "{days}d {hours}h"
  },
  "settingsPage": {
    "title": "設定",
    "loading": "設定を読み込み中...",
    "loadError": "設定を読み込めませんでした。",
    "saved": "設定を保存しました",
    "saveFailed": "設定の保存に失敗しました: {message}",
    "description": "説明",
    "providersTab": "プロバイダー",
    "modelsTab": "モデル",
    "toolsTab": "ツール",
    "securityTab": "セキュリティ",
    "networkTab": "ネットワーク",
    "budgetTab": "予算",
    "proactiveMemoryTab": "プロアクティブメモリ",
    "systemTab": "システム",
    "migrationTab": "移行",
    "llmProviders": "LLM プロバイダー",
    "llmProvidersDesc": "LibreFang は標準で多数の LLM プロバイダーに対応しています。各プロバイダーの API キーを設定すると利用可能なモデルを使えます。環境変数を設定して再起動するか、以下のフォームから直接キーを保存してください。",
    "loginWithGitHub": "GitHub でログイン",
    "waitingForAuthorization": "認証を待機中...",
    "installLabel": "インストール:",
    "removeKey": "キーを削除",
    "noApiKeyNeeded": "API キーは不要です - ローカル実行または無料利用できます",
    "baseUrl": "Base URL",
    "localBaseUrlPlaceholder": "http://localhost:...",
    "addCustomProvider": "カスタムプロバイダーを追加",
    "addCustomProviderDesc": "任意の OpenAI 互換 API (vLLM, LiteLLM, LocalAI など) を接続します",
    "providerName": "プロバイダー名",
    "baseUrlRequired": "Base URL (必須)",
    "apiKeyOptional": "API キー (任意)",
    "addProvider": "プロバイダーを追加",
    "noProvidersFound": "プロバイダーが見つかりません",
    "noProvidersFoundDesc": "プロバイダー情報を読み込めませんでした。API が起動しているか確認してください。",
    "modelCatalog": "モデルカタログ",
    "modelCatalogDesc": "各プロバイダーで利用可能なモデルを一覧表示します。「利用可能」と表示されるモデルは、そのプロバイダーが設定済みで利用可能です。",
    "catalogSync": "カタログ同期",
    "catalogSyncDesc": "コミュニティ管理のモデル定義元",
    "updateCatalog": "カタログを更新",
    "updating": "更新中...",
    "searchModels": "モデルを検索...",
    "allProviders": "すべてのプロバイダー",
    "allTiers": "すべてのティア",
    "addCustomModel": "カスタムモデルを追加",
    "modelIdRequired": "モデル ID (必須)",
    "contextWindow": "コンテキストウィンドウ",
    "maxOutputTokens": "最大出力トークン",
    "addModel": "モデルを追加",
    "clearFilters": "フィルターをクリア",
    "tier": "ティア",
    "context": "コンテキスト",
    "inputCost": "入力コスト",
    "outputCost": "出力コスト",
    "searchTools": "ツールを検索...",
    "clearSearch": "検索をクリア",
    "tool": "ツール",
    "runtimeConfiguration": "ランタイム設定",
    "runtimeConfigurationPrefix": "現在有効な設定を表示・編集します。変更は即時反映されます。高度な編集は",
    "runtimeConfigurationSuffix": "を LibreFang のデータディレクトリで直接編集してください。",
    "rawConfigJson": "Raw Config JSON (クリックで切替)",
    "loadingSecurityData": "セキュリティデータを読み込み中...",
    "securityHeroTitle": "多層防御",
    "securityHeroDesc": "LibreFang はネットワーク入口からエージェントサンドボックス、暗号化監査証跡まで、スタック全体に多層のセキュリティ機能を実装しています。中核保護は無効化できません。",
    "peerNetworkingTitle": "ピアネットワーキング (OFP)",
    "peerNetworkingDesc": "複数の LibreFang インスタンスを OFP ワイヤープロトコルでメッシュ接続します。",
    "nodeLabel": "ノード:",
    "listeningOn": "待受先",
    "loadingPeers": "ピアを読み込み中...",
    "connectedPeers": "接続済み",
    "totalPeers": "総ピア数",
    "node": "ノード",
    "address": "アドレス",
    "protocol": "プロトコル",
    "noPeersConnected": "接続されたピアはありません",
    "noPeersConnectedPrefix": "config.toml に",
    "noPeersConnectedMiddle": "セクションを追加し、",
    "noPeersConnectedSuffix": "とピアアドレスを設定してください。",
    "a2aExternalAgents": "A2A 外部エージェント",
    "a2aExternalAgentsDesc": "このノードが通信できる、他の LibreFang / A2A 互換インスタンス上のエージェントです。",
    "remoteAgentPlaceholder": "https://remote-agent.example.com",
    "discover": "検出",
    "autoDetect": "自動検出",
    "specifySourcePath": "ソースパスを指定",
    "sourceFramework": "ソースフレームワーク",
    "sourceHomeDirectory": "ソースのホームディレクトリ",
    "url": "URL",
    "noExternalAgents": "外部エージェントはまだ見つかっていません。上に URL を入力して検出してください。",
    "budgetTitle": "予算と支出上限",
    "budgetDesc": "すべてのエージェントの支出を監視・制御します。",
    "editLimits": "上限を編集",
    "loadingBudget": "予算を読み込み中...",
    "hourly": "時間ごと",
    "daily": "日ごと",
    "monthly": "月ごと",
    "alertThreshold": "アラートしきい値:",
    "ofAnyLimit": "いずれかの上限に対して",
    "hourlyTokenLimitPerAgent": "時間あたりトークン上限 (エージェントごと):",
    "hourlyLimit": "時間上限 ($)",
    "unlimitedPlaceholder": "0 = 無制限",
    "dailyLimit": "日次上限 ($)",
    "monthlyLimit": "月次上限 ($)",
    "alertPercent": "アラート (%)",
    "hourlyTokenLimitEdit": "時間あたりトークン上限 (エージェントごと、0 = エージェント別設定を使用)",
    "perAgentDefaultPlaceholder": "0 = エージェント既定値",
    "budgetEditHint": "0 を設定すると無制限 / エージェント既定値になります。変更は即時反映されます (config.toml には保存されません)。",
    "topSpendersToday": "本日の上位支出エージェント",
    "today": "今日",
    "hourlyLimitShort": "時間上限",
    "dailyLimitShort": "日次上限",
    "monthlyLimitShort": "月次上限",
    "tokenLimitPerHour": "時間あたりトークン上限",
    "noSpendingToday": "本日の支出はまだ記録されていません。",
    "proactiveMemory": "プロアクティブメモリ",
    "proactiveMemoryDesc": "エージェント会話中に関連メモリを自動抽出・想起する mem0 風のプロアクティブメモリを設定します。",
    "loadingProactiveMemory": "プロアクティブメモリ設定を読み込み中...",
    "section": {
      "general": "一般",
      "models": "モデル",
      "security": "セキュリティ",
      "memory": "メモリ",
      "plugins": "プラグイン"
    },
    "loadProactiveMemoryFailed": "プロアクティブメモリ設定の読み込みに失敗しました: {message}",
    "autoMemorize": "自動記憶",
    "autoMemorizeDesc": "各実行後に、エージェントの会話からメモリを自動抽出して保存します。",
    "autoRetrieve": "自動想起",
    "autoRetrieveDesc": "各エージェント実行前に、関連するメモリを自動で想起してコンテキストを補強します。",
    "maxRetrieve": "最大想起数",
    "maxRetrieveDesc": "クエリごとに想起するメモリの最大数です。",
    "extractionThreshold": "抽出しきい値",
    "extractionThresholdDesc": "抽出時の類似重複検出に使う信頼度しきい値です (0.0 - 1.0)。",
    "extractionModel": "抽出モデル",
    "extractionModelPlaceholder": "空欄の場合はエージェント既定のモデルを使用",
    "extractionModelDesc": "メモリ抽出に使用する LLM モデルです。空欄の場合はエージェント既定のモデルを使用します。",
    "extractCategories": "抽出カテゴリ",
    "extractCategoriesPlaceholder": "preference, frustration, workflow, fact, ...",
    "extractCategoriesDesc": "抽出するメモリカテゴリのカンマ区切り一覧です。空欄の場合は既定値を使用します。",
    "sessionTtlHours": "セッション TTL (時間)",
    "sessionTtlHoursDesc": "この時間を超えたセッションメモリは、各エージェント実行前に自動的にクリーンアップされます。",
    "confidenceDecayRate": "信頼度減衰率",
    "confidenceDecayRateDesc": "1 日あたりの指数減衰率です。値が低いほどメモリは長く保持されます (0.01 で半減まで約 70 日)。",
    "duplicateThreshold": "重複しきい値",
    "duplicateThresholdDesc": "重複検出に使う Jaccard 単語重なりしきい値です。この類似度を超えるメモリは統合されます。",
    "maxMemoriesPerAgent": "エージェントごとの最大メモリ数",
    "maxMemoriesPerAgentDesc": "エージェントごとに保持できるメモリの最大数です。超過時は最も信頼度の低いメモリから削除されます。0 で無効化します。",
    "proactiveMemorySaved": "プロアクティブメモリ設定を保存しました。",
    "proactiveMemorySaveFailed": "プロアクティブメモリ設定の保存に失敗しました: {message}",
    "providerModels": "{count} 個のモデルが利用可能",
    "envLabel": "環境変数: {env}",
    "enterEnv": "{env} を入力",
    "envRestart": "または環境変数に {env} を設定して再起動してください",
    "visitAndEnter": "{url} にアクセスして入力:",
    "catalogUpdated": "更新完了: {files} ファイル, {models} モデル",
    "catalogError": "エラー: {message}",
    "lastSynced": "最終同期: {time}",
    "neverSynced": "未同期",
    "customModelButton": "+ カスタムモデル",
    "modelsSummary": "{total} 件中 {filtered} 件のモデル",
    "noModelsMatch": "検索条件に一致するモデルがありません",
    "noModelsMatchDesc": "別の検索語を試すか、フィルターをクリアしてください。",
    "noModelsAvailable": "利用可能なモデルがありません",
    "noModelsAvailableDesc": "利用可能なモデルを表示するには LLM プロバイダーを設定してください。",
    "notFound": "見つかりません",
    "notFoundDesc": "OpenClaw または OpenFang のインストールは検出されませんでした。パスを手動で入力してスキャンできます。",
    "available": "利用可能",
    "needsKey": "キーが必要",
    "deleteCustomModelTitle": "カスタムモデルを削除",
    "toolsSummary": "{total} 件中 {filtered} 件のツール",
    "noToolsMatch": "検索条件に一致するツールがありません",
    "noToolsMatchDesc": "別の検索語を試してください。",
    "noToolsAvailable": "利用可能なツールがありません",
    "noToolsAvailableDesc": "エージェントが設定されるとツールが表示されます。",
    "coreProtections": "コア保護機能",
    "coreProtectionsDesc": "常時有効です。無効化できません。",
    "alwaysOn": "常時有効",
    "protectsAgainst": "防御対象:",
    "configurableControls": "設定可能な制御",
    "configurableControlsDesc": "調整可能なパラメータ付きで有効化されます。",
    "configurable": "設定可能",
    "monitoringAnalysis": "監視と分析",
    "monitoringAnalysisDesc": "稼働中の監視システムです。",
    "monitoring": "監視中",
    "auditChainIntegrity": "監査チェーン整合性",
    "verifyNow": "今すぐ検証",
    "auditChainIntegrityDesc": "SHA-256 Merkle ハッシュチェーン全体の暗号学的検証を実行します。",
    "chainValid": "チェーン正常 - {count} 件のエントリを検証済み",
    "chainBroken": "チェーン破損 - {message}",
    "securityDependencies": "セキュリティ依存要素",
    "securityDependency": {
      "sha256": "SHA-256",
      "hmacSha256": "HMAC-SHA256",
      "constantTime": "定数時間",
      "signing": "署名",
      "secretWiping": "シークレット消去",
      "randomness": "乱数",
      "rateLimiting": "レート制限"
    },
    "accessDenied": "ユーザーによってアクセスが拒否されました。",
    "active": "有効",
    "added": "追加しました",
    "adding": "追加中...",
    "addProviderFailed": "プロバイダーの追加に失敗しました: {message}",
    "apiKeyRemoved": "{provider} の API キーを削除しました",
    "apiKeySaved": "{provider} の API キーを保存しました",
    "auditTrailValue": "{state} | {algorithm} | {count} 件のエントリを記録",
    "authValue": "モード: {mode}{suffix}",
    "configured": "設定済み",
    "connectionFailed": "接続失敗",
    "copilotAuthenticated": "GitHub Copilot の認証に成功しました",
    "customModelIdPlaceholder": "例: my-org/my-model",
    "customModelProviderPlaceholder": "例: openai, groq, anthropic",
    "deleteCustomModelConfirm": "カスタムモデル \"{model}\" を削除しますか?",
    "deleteFailed": "削除に失敗しました: {message}",
    "deviceCodeExpired": "デバイスコードの有効期限が切れました。再試行してください。",
    "disabled": "無効",
    "enterApiKey": "API キーを入力してください",
    "enterBaseUrl": "Base URL を入力してください",
    "enterProviderName": "プロバイダー名を入力してください",
    "errorMessage": "エラー: {message}",
    "failed": "失敗",
    "fieldSaved": "{field} を保存しました",
    "keyConfiguredSuffix": " (キー設定済み)",
    "loadPeersFailed": "ピアを読み込めませんでした。",
    "manifestSigningValue": "アルゴリズム: {algorithm} | {availability}",
    "modelDeleted": "モデルを削除しました",
    "noKeyNeeded": "キー不要",
    "noKeySetSuffix": " (キー未設定)",
    "notAvailable": "利用不可",
    "notInstalled": "未インストール",
    "notSet": "未設定",
    "oauthError": "OAuth エラー: {message}",
    "off": "オフ",
    "on": "オン",
    "pollError": "ポーリングエラー: {message}",
    "providerAddedNotReachable": "プロバイダー \"{name}\" を追加しました (まだ到達不可)",
    "providerAddedReachable": "プロバイダー \"{name}\" を追加しました (到達可能)",
    "providerConnected": "{provider} に接続しました ({latency}ms)",
    "providerConnectionFailed": "{provider}: {message}",
    "providerKeyOptionalPlaceholder": "sk-... (不要なら空欄)",
    "providerNamePlaceholder": "例: my-local-llm",
    "providerUrlPlaceholder": "http://localhost:8080/v1",
    "rateLimiterValue": "アルゴリズム: {algorithm} | IP ごとに {count} トークン/分",
    "confirmRemoveKey": "{provider} の API キーを削除しますか？",
    "removeKeyFailed": "キーの削除に失敗しました: {message}",
    "saving": "保存中...",
    "saveKeyFailed": "キーの保存に失敗しました: {message}",
    "saveUrlFailed": "URL の保存に失敗しました: {message}",
    "scanError": "スキャンエラー: {message}",
    "scanFailed": "スキャンに失敗しました: {message}",
    "scanning": "スキャン中...",
    "startCopilotFailed": "Copilot ログインの開始に失敗しました: {message}",
    "taintTrackingValue": "{state} | 追跡: {labels}",
    "testFailed": "テスト失敗: {message}",
    "unknownError": "不明なエラー",
    "urlMustStart": "URL は http:// または https:// で始まる必要があります",
    "urlSavedNotReachable": "{provider} の URL を保存しましたが到達できません",
    "urlSavedReachable": "{provider} の URL を保存しました - 到達可能 ({latency}ms)",
    "wasmSandboxValue": "Fuel: {fuel} | Epoch: {epoch} | タイムアウト: {timeout}秒",
    "websocketLimitsValue": "IP ごと最大 {max} 接続 | アイドルタイムアウト {idle}分 | 最大メッセージ {size}KB",
    "perAgent": "エージェントごと",
    "unlimited": "無制限",
    "ofLimit": "{limit} の",
    "migrateFromOpenClaw": "OpenClaw から移行",
    "migrateFromOpenClawDesc": "既存の OpenClaw インストールからマニフェスト、ツール、チャンネル、ワークスペースデータを取り込みます。",
    "autoDetectOpenClaw": "OpenClaw を自動検出",
    "enterPathManually": "パスを手動入力",
    "specifyOpenClawPath": "OpenClaw のパスを指定",
    "openClawHomeDirectory": "OpenClaw ホームディレクトリ",
    "libreFangTargetDirectory": "LibreFang の移行先ディレクトリ",
    "scanDirectory": "ディレクトリをスキャン",
    "openClawWorkspaceFound": "OpenClaw ワークスペースを検出しました",
    "readyToMigrate": "移行準備完了",
    "migrateNow": "今すぐ移行",
    "migrating": "移行中...",
    "dryRun": "ドライラン",
    "startOver": "やり直す",
    "dryRunComplete": "ドライラン完了",
    "migrationComplete": "移行完了",
    "success": "成功",
    "failedShort": "失敗",
    "runMigrationForReal": "本番移行を実行",
    "startNewMigration": "新しい移行を開始",
    "openClawNotFound": "OpenClaw が見つかりません",
    "openClawNotFoundDesc": "OpenClaw のホームディレクトリを検出できませんでした。手動でパスを入力してスキャンできます。",
    "peerState": {
      "connected": "接続済み",
      "disconnected": "未接続"
    },
    "migrationFeature": {
      "manifest": "マニフェストとエージェント",
      "tools": "ツールとプロバイダー",
      "channels": "チャンネルとシークレット",
      "workspace": "ワークスペースとメモリ"
    },
    "coreFeatures": {
      "path_traversal": {
        "name": "パストラバーサル防止",
        "description": "すべてのファイル操作でディレクトリエスケープ攻撃 (../) を遮断します。2 段階検証として、まずパス要素を構文的に拒否し、その後 canonicalization でシンボリックリンクを正規化します。",
        "threat": "ディレクトリエスケープ、シンボリックリンク経由の権限昇格"
      },
      "ssrf_protection": {
        "name": "SSRF 防止",
        "description": "プライベート IP、localhost、クラウドメタデータエンドポイント (AWS/GCP/Azure) への外向きリクエストを遮断します。DNS リバインディング攻撃対策として、DNS 解決結果も検証します。",
        "threat": "内部ネットワーク探索、クラウド認証情報の窃取"
      },
      "capability_system": {
        "name": "Capability ベースアクセス制御",
        "description": "デフォルト拒否の権限システムです。各エージェント操作 (ファイル I/O、ネットワーク、シェル、メモリ、spawn) には、マニフェストでの明示的な capability 付与が必要です。",
        "threat": "不正なリソースアクセス、サンドボックス脱出"
      },
      "privilege_escalation_prevention": {
        "name": "権限昇格防止",
        "description": "親エージェントが子エージェントを起動する際、カーネルが子の capability を親の capability の部分集合に制限します。どのエージェントも自分が持たない権限を付与できません。",
        "threat": "エージェント spawn チェーンによる capability 昇格"
      },
      "subprocess_isolation": {
        "name": "サブプロセス環境分離",
        "description": "子プロセス (シェルツール) には、安全な許可リストにある環境変数のみを引き継ぎます。API キー、データベースパスワード、シークレットはサブプロセスへ漏洩しません。",
        "threat": "子プロセス環境経由のシークレット流出"
      },
      "security_headers": {
        "name": "セキュリティヘッダー",
        "description": "すべての HTTP レスポンスに CSP、X-Frame-Options: DENY、X-Content-Type-Options: nosniff、Referrer-Policy、X-XSS-Protection ヘッダーを付与します。",
        "threat": "XSS、クリックジャッキング、MIME スニッフィング、コンテンツ注入"
      },
      "wire_hmac_auth": {
        "name": "ワイヤープロトコル認証",
        "description": "エージェント間 OFP 接続では、nonce ベースのハンドシェイクと定数時間署名比較 (subtle crate) を用いた HMAC-SHA256 相互認証を使用します。",
        "threat": "メッシュネットワーク上の中間者攻撃"
      },
      "request_id_tracking": {
        "name": "リクエスト ID 追跡",
        "description": "すべての API リクエストに一意の UUID (x-request-id ヘッダー) を付与し、メソッド、パス、ステータスコード、レイテンシとともに記録して完全な追跡性を確保します。",
        "threat": "追跡不能な操作、フォレンジックの死角"
      }
    },
    "configurableFeatures": {
      "rate_limiter": {
        "name": "API レート制限",
        "description": "コスト認識トークン付きの GCRA (Generic Cell Rate Algorithm) です。エンドポイントごとにコストが異なり、エージェント起動は 50 トークン、ヘルスチェックは 1 トークンを消費します。",
        "hint": "固定値: IP ごとに 500 トークン/分。調整するには rate_limiter.rs を編集してください。"
      },
      "websocket_limits": {
        "name": "WebSocket 接続上限",
        "description": "IP ごとの接続上限で接続枯渇を防ぎます。アイドルタイムアウトで放置接続を閉じ、メッセージレート制限でフラッディングを防止します。",
        "hint": "固定値: IP ごとに 5 接続、30 分アイドルタイムアウト、最大メッセージ 64KB。調整するには ws.rs を編集してください。"
      },
      "wasm_sandbox": {
        "name": "WASM 二重メータリング",
        "description": "WASM モジュールは 2 つの独立したリソース上限で実行されます。fuel メータリング (CPU 命令数) と epoch interruption (ウォッチドッグスレッド付きの実時間タイムアウト) です。",
        "hint": "既定値: fuel 100 万単位、タイムアウト 30 秒。SandboxConfig でエージェントごとに設定できます。"
      },
      "auth": {
        "name": "Bearer トークン認証",
        "description": "ヘルスチェック以外のすべてのエンドポイントは Authorization: Bearer ヘッダーを要求します。API キー未設定時は、すべてのリクエストを localhost のみに制限します。",
        "hint": "リモートアクセスには ~/.librefang/config.toml に api_key を設定してください。空欄 = localhost のみ。"
      }
    },
    "monitoringFeatures": {
      "audit_trail": {
        "name": "Merkle 監査証跡",
        "description": "セキュリティ上重要なすべての操作は、不変で改ざん検知可能なログに追記されます。各エントリは SHA-256 ハッシュチェーンで前のエントリと暗号学的に連結されます。",
        "hint": "常時有効です。監査ログページからチェーン整合性を検証できます。"
      },
      "taint_tracking": {
        "name": "情報フロー汚染追跡",
        "description": "データの出所 (ExternalNetwork、UserInput、PII、Secret、UntrustedAgent) ごとにラベル付けし、安全でないフローを遮断します。たとえば外部データは shell_exec に到達できず、シークレットはネットワークに送れません。",
        "hint": "常時有効です。データフロー攻撃を自動で防ぎます。",
        "threat": "データフロー攻撃と機密情報の漏えい"
      },
      "manifest_signing": {
        "name": "Ed25519 マニフェスト署名",
        "description": "エージェントマニフェストは Ed25519 で暗号学的に署名できます。ロード前に整合性を検証することで、サプライチェーン改ざんを防止します。",
        "hint": "利用可能です。検証には ed25519-dalek でマニフェストに署名してください。"
      }
    }
  },
  "workflowsPage": {
    "title": "ワークフロー",
    "listTab": "一覧",
    "builderTab": "ビジュアルビルダー",
    "loading": "ワークフローを読み込み中...",
    "whatAreWorkflows": "ワークフローとは？",
    "whatAreWorkflowsDesc": "ワークフローは複数のエージェント手順を連結し、再利用可能な自動化にします。",
    "tryVisualBuilderPrefix": "より素早く設計したいですか？",
    "tryVisualBuilderSuffix": "でドラッグ＆ドロップ編集を試してください。",
    "newWorkflow": "+ 新しいワークフロー",
    "steps": "ステップ",
    "run": "実行",
    "history": "履歴",
    "noWorkflows": "ワークフローはまだありません",
    "noWorkflowsDesc": "最初のワークフローを作成して、複数ステップのエージェント作業を自動化しましょう。",
    "createWorkflow": "ワークフローを作成",
    "workflowNamePlaceholder": "My workflow",
    "workflowDescPlaceholder": "このワークフローの内容を説明してください",
    "stepsDescPrefix": "各ステップを順番に定義します。より高機能なエディターが必要なら",
    "stepsDescSuffix": "タブを使えます。",
    "stepNamePlaceholder": "ステップ名",
    "agentNamePlaceholder": "エージェント名",
    "mode": {
      "sequential": "順次実行",
      "fanOut": "ファンアウト",
      "conditional": "条件分岐",
      "loop": "ループ"
    },
    "promptPlaceholder": "プロンプトテンプレート",
    "addStep": "+ ステップを追加",
    "create": "作成",
    "input": "入力",
    "runInputPlaceholder": "ワークフローの入力を入力...",
    "execute": "実行",
    "running": "実行中...",
    "result": "結果",
    "stepsCount": "{count} ステップ",
    "runTitle": "実行: {name}",
    "loadError": "ワークフローを読み込めませんでした。",
    "created": "ワークフロー \"{name}\" を作成しました",
    "createFailed": "ワークフローの作成に失敗しました: {message}",
    "completed": "ワークフローが完了しました",
    "errorMessage": "エラー: {message}",
    "runFailed": "ワークフローに失敗しました: {message}",
    "historyFailed": "実行履歴の読み込みに失敗しました: {message}"
  },
  "workflowBuilder": {
    "nodePalette": "ノードパレット",
    "dragNodes": "ノードをキャンバスへドラッグしてください",
    "exportToml": "TOML をエクスポート",
    "saveWorkflow": "ワークフローを保存",
    "autoLayout": "自動レイアウト",
    "zoomOut": "ズームアウト",
    "zoomIn": "ズームイン",
    "resetView": "表示をリセット",
    "fit": "全体表示",
    "canvasHint": "出力ポートから入力ポートへドラッグしてノードを接続します。",
    "label": "ラベル",
    "selectAgent": "エージェントを選択",
    "promptTemplate": "プロンプトテンプレート",
    "modelOptional": "モデル（任意）",
    "defaultModelPlaceholder": "デフォルトモデルを使用",
    "expression": "式",
    "conditionPorts": "最初の出力は true、2 つ目の出力は false です。",
    "maxIterations": "最大反復回数",
    "untilStopCondition": "終了条件 / 停止条件",
    "fanOutCount": "ファンアウト数",
    "strategyLabel": "戦略",
    "strategy": {
      "all": "すべて待機",
      "first": "最初に完了したもの",
      "majority": "多数決"
    },
    "duplicate": "複製",
    "connectionSelected": "接続を選択中",
    "deleteConnection": "接続を削除",
    "generatedToml": "生成された TOML",
    "copyToClipboard": "クリップボードにコピー",
    "summary": "{nodes} ノード, {connections} 接続",
    "nodeType": {
      "agentStep": "エージェントステップ",
      "parallelFanOut": "並列ファンアウト",
      "condition": "条件分岐",
      "loop": "ループ",
      "collect": "集約",
      "start": "開始",
      "end": "終了"
    },
    "noAgent": "エージェントなし",
    "noCondition": "条件なし",
    "maxIterationsShort": "最大 {count} 回",
    "branchesShort": "{count} 分岐",
    "branch": {
      "true": "はい",
      "false": "いいえ"
    },
    "copySuffix": "{label} copy",
    "untitled": "無題",
    "saved": "ワークフローを保存しました",
    "saveFailed": "保存に失敗しました: {message}",
    "copied": "コピーしました",
    "copyFailed": "コピーに失敗しました"
  },
  "schedulerPage": {
    "title": "スケジューラー",
    "newJob": "+ 新規ジョブ",
    "scheduledJobsTab": "スケジュール済みジョブ",
    "eventTriggersTab": "イベントトリガー",
    "runHistoryTab": "実行履歴",
    "loadingJobs": "ジョブを読み込み中...",
    "scheduledJobsTitle": "スケジュール済みジョブ",
    "scheduledJobsDescPrefix": "cron スケジュールでエージェントを実行します。より複雑なロジックが必要ですか？",
    "scheduledJobsDescMiddle": "ワークフロー",
    "scheduledJobsDescSuffix": "を使うと複数ステップの自動化を構築できます。",
    "schedule": "スケジュール",
    "lastRun": "最終実行",
    "nextRun": "次回実行",
    "pause": "一時停止",
    "enable": "有効化",
    "newTrigger": "新しいトリガー",
    "loading": "スケジュールを読み込み中...",
    "loadError": "スケジューラーデータを読み込めませんでした。",
    "emptyTitle": "スケジュールがありません",
    "emptyDesc": "トリガーを作成して、定期実行やイベント駆動の自動化を始めてください。",
    "deleteShort": "削除",
    "noJobs": "スケジュール済みジョブはありません",
    "noJobsDesc": "スケジュールを作成して、エージェントを自動実行します。",
    "createScheduledJob": "スケジュール済みジョブを作成",
    "createScheduledJobTitle": "スケジュール済みジョブを作成",
    "jobName": "ジョブ名",
    "jobNamePlaceholder": "デイリーサマリー",
    "cronExpression": "Cron 式",
    "cronPlaceholder": "0 9 * * *",
    "cronFormat": "Cron 形式: 分 時 日 月 曜日",
    "quickPresets": "クイックプリセット",
    "targetAgent": "対象エージェント",
    "anyAvailableAgent": "利用可能な任意のエージェント",
    "noAgentsRunningPrefix": "現在実行中のエージェントはありません。スケジュールだけ保存することもできますし、",
    "spawnOneFirst": "先に起動する",
    "messageToSend": "送信するメッセージ",
    "messagePlaceholder": "このスケジュール実行時にエージェントへ何をさせますか？",
    "messageHelp": "空欄の場合、LibreFang がジョブ名からデフォルトメッセージを生成します。",
    "enabledCreate": "作成後に有効化",
    "disabledCreate": "無効のまま作成",
    "createSchedule": "スケジュールを作成",
    "creating": "作成中...",
    "loadingTriggers": "トリガーを読み込み中...",
    "eventTriggersTitle": "イベントトリガー",
    "eventTriggersDescPrefix": "トリガーはライフサイクル、システム、メモリの各イベントに反応し、",
    "eventTriggersDescSuffix": "を自動的に起動できます。",
    "pattern": "パターン",
    "fires": "発火回数",
    "enabledColumn": "有効",
    "noTriggers": "トリガーはまだありません",
    "noTriggersPrefix": "",
    "noTriggersSuffix": "ページから作成すると、ランタイムイベントに反応できるようになります。",
    "loadingHistory": "履歴を読み込み中...",
    "runHistoryTitle": "実行履歴",
    "runHistoryDesc": "最近のスケジューラーおよびトリガーの動作です。",
    "time": "時刻",
    "type": "種類",
    "totalRuns": "総実行回数",
    "noHistory": "実行履歴はまだありません",
    "noHistoryDesc": "完了したスケジュールや発火したトリガーがここに表示されます。",
    "activeJobsCount": "{active}/{total} 件が有効",
    "triggersCount": "{count}",
    "active": "有効",
    "paused": "一時停止中",
    "cronJob": "Cron ジョブ",
    "trigger": "トリガー",
    "loadTriggersError": "トリガーを読み込めませんでした。",
    "unnamed": "（無名）",
    "completedStatus": "完了",
    "triggerPrefix": "トリガー: {type}",
    "firedStatus": "発火",
    "enterJobName": "ジョブ名を入力してください",
    "enterCron": "Cron 式を入力してください",
    "defaultMessage": "スケジュール済みタスク: {name}",
    "created": "スケジュール「{name}」を作成しました",
    "createFailed": "スケジュールの作成に失敗しました: {message}",
    "enabledToast": "スケジュールを有効化しました",
    "pausedToast": "スケジュールを一時停止しました",
    "toggleFailed": "スケジュールの切り替えに失敗しました: {message}",
    "deleteScheduleTitle": "スケジュールを削除",
    "deleteScheduleConfirm": "「{name}」を削除しますか？ この操作は元に戻せません。",
    "deleted": "スケジュール「{name}」を削除しました",
    "deleteFailed": "スケジュールの削除に失敗しました: {message}",
    "runSuccess": "スケジュール「{name}」を正常に実行しました",
    "job": "ジョブ",
    "runFailed": "スケジュールの実行に失敗しました: {message}",
    "unknownError": "不明なエラー",
    "runUnavailable": "Cron ジョブの「今すぐ実行」はまだ利用できません",
    "triggerEnabled": "トリガーを有効化しました",
    "triggerDisabled": "トリガーを無効化しました",
    "toggleTriggerFailed": "トリガーの切り替えに失敗しました: {message}",
    "deleteTriggerTitle": "トリガーを削除",
    "deleteTriggerConfirm": "このトリガーを削除しますか？ この操作は元に戻せません。",
    "triggerDeleted": "トリガーを削除しました",
    "deleteTriggerFailed": "トリガーの削除に失敗しました: {message}",
    "anyAgent": "（任意）",
    "oneTimeAt": "1回限り: {time}",
    "everyMinutes": "{count} 分ごと",
    "everyHours": "{count} 時間ごと",
    "dailyAt": "毎日 {time}",
    "dayOfWeek": "曜日 {value}",
    "dayAt": "{day} {time}",
    "never": "なし",
    "inLessThanMinute": "<1分後",
    "inMinutes": "{count}分後",
    "inHours": "{count}時間後",
    "inDays": "{count}日後",
    "triggerType": {
      "lifecycle": "ライフサイクル",
      "agentSpawned": "エージェント起動",
      "agentTerminated": "エージェント終了",
      "system": "システム",
      "systemKeyword": "システムキーワード",
      "memoryUpdate": "メモリ更新",
      "memoryKey": "メモリキー",
      "allEvents": "すべてのイベント",
      "contentMatch": "内容一致"
    },
    "cron": {
      "everyMinute": "毎分",
      "every2Minutes": "2 分ごと",
      "every5Minutes": "5 分ごと",
      "every10Minutes": "10 分ごと",
      "every15Minutes": "15 分ごと",
      "every30Minutes": "30 分ごと",
      "everyHour": "毎時",
      "every2Hours": "2 時間ごと",
      "every4Hours": "4 時間ごと",
      "every6Hours": "6 時間ごと",
      "every12Hours": "12 時間ごと",
      "dailyMidnight": "毎日 0:00",
      "daily6am": "毎日 6:00",
      "daily9am": "毎日 9:00",
      "daily9amLong": "毎日 9:00",
      "dailyNoon": "毎日正午",
      "daily6pm": "毎日 18:00",
      "weekdays9am": "平日 9:00",
      "weekdays9amLong": "平日 9:00",
      "everyMonday9am": "毎週月曜 9:00",
      "mondays9am": "月曜 9:00",
      "sundaysMidnight": "日曜 0:00",
      "firstOfMonth": "毎月初日",
      "firstOfMonthLong": "毎月 1 日",
      "mondaysMidnight": "月曜 0:00"
    }
  },
  "channelsPage": {
    "title": "チャンネル",
    "loading": "チャンネルを読み込み中...",
    "searchPlaceholder": "チャンネルを検索...",
    "noResults": "検索条件に一致するチャンネルはありません。",
    "configuredSummary": "{configured}/{total} 設定済み",
    "setUp": "設定",
    "saving": "保存中...",
    "update": "更新",
    "saveAndTest": "保存してテスト",
    "testing": "テスト中...",
    "loadError": "チャンネルを読み込めませんでした。",
    "connected": "接続済み！",
    "testConnection": "接続をテスト",
    "remove": "削除",
    "done": "完了",
    "categoryCount": "{label} ({count})",
    "whatsAppConnected": "WhatsApp に接続しました！",
    "qrStartFailed": "QR ログインを開始できませんでした",
    "whatsAppLinked": "WhatsApp の連携が完了しました！",
    "qrExpired": "QR コードの有効期限が切れました。クリックして新しいコードを生成してください。",
    "waitingForScan": "スキャン待機中...",
    "activated": "{name} を有効化しました！",
    "savedWithMessage": "{name} を保存しました。{message}",
    "savedTestToVerify": "{name} を保存しました。接続確認のためテストしてください。",
    "failedMessage": "失敗: {message}",
    "unknownError": "不明なエラー",
    "removeTitle": "チャンネルを削除",
    "removeConfirm": "{name} の設定を削除しますか？ この操作でチャンネルは無効化されます。",
    "removed": "{name} を削除して無効化しました。",
    "testFailed": "テスト失敗: {message}",
    "copied": "クリップボードにコピーしました",
    "copyFailed": "コピーに失敗しました",
    "readyTitle": "{name} の準備ができました！",
    "readyDesc": "チャンネルの設定が完了し、メッセージ受信を開始できます。",
    "editConfig": "設定を編集",
    "connectingWhatsApp": "WhatsApp に接続中...",
    "generateNewQr": "新しい QR を生成",
    "channelActivatesAutomatically": "このチャンネルは QR コードをスキャンすると自動的に有効化されます。",
    "gatewayUnavailable": "この環境ではゲートウェイを利用できません。",
    "orUseBusinessApiPrefix": "代わりに",
    "businessApi": "Business API",
    "orUseBusinessApiSuffix": "の設定も利用できます。",
    "haveMetaBusiness": "Meta Business アカウントをお持ちですか？",
    "useBusinessApiInstead": "代わりに Business API を使う",
    "refreshQr": "QR を更新",
    "testingConnection": "接続をテスト中...",
    "backToQr": "QR に戻る",
    "businessApiDesc": "QR ログインの代わりに恒久トークンと電話番号 ID を使用します。",
    "howToGetCredentials": "認証情報の取得方法",
    "secretPlaceholderKeep": "現在の値を維持する場合は空欄のままにしてください",
    "secretPlaceholderSet": "秘密の値を入力",
    "commaSeparated": "comma,separated,values",
    "envVarSet": "環境変数で設定済み",
    "hideAdvanced": "詳細設定を隠す",
    "showAdvanced": "詳細設定を表示",
    "step": {
      "configure": "設定",
      "verify": "確認",
      "ready": "準備完了"
    },
    "status": {
      "notConfigured": "未設定",
      "missingToken": "トークン不足",
      "ready": "準備完了",
      "configured": "設定済み"
    },
    "category": {
      "all": "すべて",
      "messaging": "メッセージング",
      "social": "ソーシャル",
      "enterprise": "エンタープライズ",
      "developer": "開発者向け",
      "notifications": "通知"
    }
  },
  "skillsPage": {
    "title": "スキル",
    "introTitle": "スキルとエコシステム",
    "introDesc": "スキルはエージェントに新しい機能を追加します。LibreFang は OpenClaw/ClawHub エコシステム（3,000 件以上のコミュニティスキル）に加え、ローカルスキルにも対応しています。",
    "loading": "スキルを読み込み中...",
    "loadError": "スキルを読み込めませんでした。",
    "installedTab": "インストール済み",
    "clawHubTab": "ClawHub",
    "mcpTab": "MCP サーバー",
    "quickStartTab": "クイックスタート",
    "uninstall": "アンインストール",
    "noSkillsTitle": "インストール済みのスキルはありません",
    "noSkillsDesc": "スキルはエージェントに新しい機能を追加します。ClawHub で 3,000 件以上のコミュニティスキルを探すか、自分で作成できます。",
    "browseClawHub": "ClawHub を見る",
    "searchPlaceholder": "ClawHub スキルを検索...（入力して検索）",
    "install": "インストール",
    "installed": "インストール済み",
    "installing": "インストール中...",
    "loadMore": "さらに読み込む",
    "introPromptOnly": "プロンプト専用 - コンテキストと指示をエージェントのシステムプロンプトに注入します（ClawHub の大半のスキル）",
    "introCode": "Python / Node.js - 会話中にエージェントが呼び出せる実行可能ツール",
    "introMcp": "MCP サーバー - Model Context Protocol 経由の外部ツール（GitHub、ファイルシステム、データベースなど）",
    "toolCount": "{count} 個のツール",
    "promptContext": "（プロンプトコンテキスト）",
    "clearSearchTitle": "検索をクリア（Esc）",
    "clearSearch": "検索をクリア",
    "sort": {
      "trending": "トレンド順",
      "downloads": "ダウンロード数順",
      "stars": "スター数順",
      "updated": "最近更新"
    },
    "categoriesTitle": "カテゴリ",
    "searching": "ClawHub を検索中...",
    "searchFailed": "検索に失敗しました",
    "browseFailed": "閲覧に失敗しました",
    "clawHubUnavailable": "ClawHub は一時的に利用できない可能性があります。OpenClaw エコシステムは clawhub.ai で提供されています。",
    "resultsFor": "\"{query}\" の検索結果 {count} 件",
    "downloads": "{count} ダウンロード",
    "stars": "{count} スター",
    "noResultsFor": "\"{query}\" に一致するスキルは見つかりませんでした",
    "noResultsHint": "別の検索語を試すか、カテゴリから探してください。",
    "backToBrowse": "一覧に戻る",
    "mcpTitle": "MCP サーバー（Model Context Protocol）",
    "mcpDesc": "MCP サーバーは、GitHub、ファイルシステム、データベース、API などの外部ツールをエージェントに提供します。LibreFang はすべての OpenClaw 対応 MCP サーバーと互換性があります。",
    "mcpConfigHint": "config.toml の [mcp_servers] 配下で MCP サーバーを設定してください。",
    "loadingMcp": "MCP サーバーを読み込み中...",
    "connectedServers": "接続済みサーバー",
    "configuredServers": "設定済みサーバー",
    "connected": "接続済み",
    "toolsAvailable": "{count} 個のツールを利用可能",
    "toolsLabel": "ツール:",
    "andMore": "... ほか {count} 件",
    "envPrefix": "環境変数: {value}",
    "noMcpTitle": "MCP サーバーが設定されていません",
    "noMcpDesc": "MCP サーバーは外部ツールでエージェントを拡張します。config.toml にサーバーを追加してください:",
    "noMcpHint": "LibreFang はすべての OpenClaw 互換 MCP サーバーに対応しています。",
    "quickStartTitle": "クイックスタートスキル",
    "quickStartDesc": "ワンクリックでプロンプト専用スキルを作成できます。これらはコンテキストをエージェントのシステムプロンプトに注入し、コードは不要です。ドメイン知識やワークフロー指針の追加に最適です。",
    "createdShort": "作成済み",
    "createSkill": "スキルを作成",
    "created": "スキル \"{name}\" を作成しました",
    "createFailed": "スキルの作成に失敗しました: {message}",
    "loadingDetail": "スキル詳細を読み込み中...",
    "detailFailed": "スキル詳細の読み込みに失敗しました",
    "codeFailed": "スキルのソースコードを読み込めませんでした",
    "byAuthor": "作成者: {name}",
    "securityWarnings": "セキュリティ警告",
    "alreadyInstalled": "インストール済み",
    "alreadyInstalledToast": "このスキルはすでにインストールされています",
    "installFromClawHub": "ClawHub からインストール",
    "installedSuccess": "スキル \"{name}\" を正常にインストールしました",
    "installedWithWarnings": "スキル \"{name}\" を {count} 件の警告付きでインストールしました",
    "installFailedShort": "インストール失敗",
    "installFailed": "インストールに失敗しました: {message}",
    "securityBlocked": "セキュリティスキャンによりスキルがブロックされました",
    "uninstallTitle": "スキルをアンインストール",
    "uninstallConfirm": "スキル \"{name}\" をアンインストールしますか？ この操作は元に戻せません。",
    "uninstalled": "スキル \"{name}\" をアンインストールしました",
    "uninstallFailed": "スキルのアンインストールに失敗しました: {message}",
    "loadingShort": "読み込み中...",
    "viewCode": "コードを表示",
    "hideCode": "コードを隠す",
    "securityScanned": "スキルはインストール前にセキュリティスキャンされます。プロンプトインジェクションやマルウェアのパターンはブロックされます。",
    "runtime": {
      "prompt": "プロンプト"
    },
    "source": {
      "local": "ローカル",
      "clawhub": "ClawHub",
      "openclaw": "OpenClaw",
      "bundled": "組み込み"
    },
    "category": {
      "coding": "コーディングと IDE",
      "git": "Git と GitHub",
      "web": "Web とフロントエンド",
      "devops": "DevOps とクラウド",
      "browser": "ブラウザーと自動化",
      "search": "検索とリサーチ",
      "ai": "AI と LLM",
      "data": "データと分析",
      "productivity": "生産性",
      "communication": "コミュニケーション",
      "media": "メディアとストリーミング",
      "notes": "ノートと PKM",
      "security": "セキュリティ",
      "cli": "CLI ユーティリティ",
      "marketing": "マーケティングと営業",
      "finance": "金融",
      "smart-home": "スマートホームと IoT",
      "docs": "PDF とドキュメント"
    },
    "quickStartSkill": {
      "code-review-guide": {
        "name": "コードレビューガイド",
        "description": "コードレビューのベストプラクティスとチェックリストをエージェントのコンテキストに追加します。"
      },
      "writing-style": {
        "name": "ライティングスタイルガイド",
        "description": "コンテンツ生成のための設定可能な文章ガイダンスです。"
      },
      "api-design": {
        "name": "API 設計パターン",
        "description": "REST API の設計パターンと規約です。"
      },
      "security-checklist": {
        "name": "セキュリティチェックリスト",
        "description": "OWASP に沿ったセキュリティレビューチェックリストです。"
      }
    }
  },
  "handsPage": {
    "title": "Hands",
    "introTitle": "Hands - キュレーションされた自律機能パッケージ",
    "introDesc": "Hands は、特定のタスクを自律的に処理するよう事前設定された AI エージェントです。各 Hand には、調整済みのシステムプロンプト、必要なツール、作業状況を追跡するためのダッシュボードが含まれます。",
    "loading": "Hands を読み込み中...",
    "loadError": "Hands を読み込めませんでした。",
    "availableTab": "利用可能",
    "activeTab": "稼働中",
    "details": "詳細",
    "activate": "有効化",
    "pause": "一時停止",
    "resume": "再開",
    "deactivate": "無効化",
    "noHandsTitle": "利用可能な Hands はありません",
    "noActiveTitle": "稼働中の Hands はありません",
    "browseHands": "Hands を見る",
    "requirementsTitle": "要件",
    "toolsCount": "{count} 個のツール",
    "metricsCount": "{count} 個のメトリクス",
    "activateNamed": "{name} を有効化",
    "loadingShort": "読み込み中...",
    "noHandsDesc": "Hands はキュレーションされた AI 機能パッケージです。カーネルが組み込み Hand を読み込むと表示されます。",
    "loadingActive": "稼働中の Hands を読み込み中...",
    "activatedAt": "有効化日時: {time}",
    "agentLabel": "エージェント: {id}",
    "stats": "統計",
    "viewBrowser": "ブラウザーを表示",
    "errorHint": "エラー - 無効化して再度有効化してください",
    "noActiveDesc": "開始するには、利用可能タブから Hand を有効化してください。各 Hand は専用のエージェントを起動します。",
    "agentConfig": "エージェント設定",
    "toolsLabel": "ツール",
    "dashboardMetrics": "ダッシュボードメトリクス",
    "setupTitle": "{name} をセットアップ",
    "step": {
      "dependencies": "依存関係",
      "configure": "設定",
      "launch": "起動"
    },
    "detectedOnSystem": "システム上で検出済み",
    "noCommand": "利用可能なコマンドはありません",
    "copy": "コピー",
    "copied": "コピーしました",
    "getApiKey": "API キーを取得 ->",
    "docs": "ドキュメント",
    "manualDownload": "手動ダウンロード ->",
    "installingDeps": "依存関係をインストール中...",
    "installComplete": "インストール完了",
    "waiting": "待機中...",
    "progressReady": "{ready} / {total} 準備完了",
    "progressAllSet": "すべて準備完了",
    "progressInstallMissing": "不足している依存関係を上でインストールしてください",
    "noConfigNeeded": "この Hand には設定は不要です。次へをクリックして続行してください。",
    "requiresBinary": "必要: {binary}",
    "optionReady": "準備完了",
    "optionMissing": "未導入",
    "enabled": "有効",
    "disabled": "無効",
    "activating": "有効化中...",
    "loadingBrowser": "ブラウザー状態を読み込み中...",
    "browserTitle": "タイトル:",
    "allDepsInstalled": "すべての依存関係はすでにインストールされています",
    "installDepsSuccess": "すべての依存関係のインストールに成功しました",
    "installDepsFailedCount": "{count} 件の依存関係のインストールに失敗しました。以下の詳細を確認してください。",
    "installRequestFailed": "インストール要求に失敗しました",
    "allDepsSatisfied": "すべての依存関係を満たしています",
    "checkFailed": "確認に失敗しました: {message}",
    "checking": "確認中...",
    "verify": "確認",
    "installAll": "すべてインストール",
    "installingShort": "インストール中...",
    "detailLoadFailed": "Hand 詳細を読み込めませんでした: {message}",
    "activated": "Hand \"{hand}\" を {name} として有効化しました",
    "activationFailed": "有効化に失敗しました: {message}",
    "pauseFailed": "一時停止に失敗しました: {message}",
    "resumeFailed": "再開に失敗しました: {message}",
    "deactivateTitle": "Hand を無効化",
    "deactivateConfirm": "Hand \"{name}\" を無効化しますか？ そのエージェントは終了します。",
    "deactivated": "Hand を無効化しました。",
    "deactivationFailed": "無効化に失敗しました: {message}",
    "statsError": "統計を読み込めませんでした: {message}",
    "errorLabel": "エラー",
    "noBrowserSession": "有効なブラウザーセッションはありません",
    "browserLoadFailed": "ブラウザー状態を読み込めませんでした",
    "ready": "準備完了",
    "setupNeeded": "セットアップが必要",
    "unknownError": "不明なエラー",
    "status": {
      "active": "稼働中",
      "paused": "一時停止中",
      "inactive": "停止中",
      "error": "エラー"
    }
  },
  "pluginsPage": {
    "title": "プラグイン",
    "newPlugin": "新しいプラグイン",
    "install": "インストール",
    "installedTab": "インストール済み",
    "registryTab": "レジストリ",
    "loading": "読み込み中...",
    "loadingRegistries": "レジストリを読み込み中...",
    "noPlugins": "インストール済みプラグインはありません",
    "noPluginsDesc": "レジストリタブからプラグインをインストールするか、インストールボタンを使ってください。",
    "noRegistries": "設定済みレジストリはありません",
    "noAvailable": "利用可能なプラグインはありません",
    "name": "名前",
    "version": "バージョン",
    "description": "説明",
    "hooks": "フック",
    "size": "サイズ",
    "actions": "操作",
    "deps": "依存関係",
    "remove": "削除",
    "installed": "インストール済み",
    "installTitle": "プラグインをインストール",
    "source": "ソース",
    "sourceRegistry": "レジストリ",
    "sourceLocal": "ローカルパス",
    "sourceGit": "Git URL",
    "pluginName": "プラグイン名",
    "registryOptional": "レジストリ (任意)",
    "registryPlaceholder": "owner/repo (既定: official)",
    "path": "パス",
    "url": "URL",
    "branch": "ブランチ (任意)",
    "cancel": "キャンセル",
    "scaffoldTitle": "新しいプラグインを作成",
    "scaffoldDesc": "このプラグインは何をしますか？",
    "create": "作成",
    "depsInstalled": "依存関係をインストールしました",
    "ingest": "ingest",
    "afterTurn": "after_turn",
    "invalid": "無効"
  },
  "commsPage": {
    "title": "エージェント通信",
    "loadError": "通信データを読み込めませんでした。",
    "connectionError": "接続エラー",
    "sendMessage": "メッセージ送信",
    "postTask": "タスク投稿",
    "agentTopology": "エージェント構成",
    "agentsCount": "{count} 体のエージェント",
    "noAgentsRunning": "実行中のエージェントはいません",
    "liveEventFeed": "ライブイベントフィード",
    "liveBadge": "LIVE",
    "eventsCount": "{count} 件のイベント",
    "noEventsYet": "エージェント間イベントはまだありません",
    "sendAgentMessage": "エージェントにメッセージ送信",
    "fromAgent": "送信元エージェント",
    "toAgent": "送信先エージェント",
    "messageLabel": "メッセージ",
    "typeMessage": "メッセージを入力...",
    "sending": "送信中...",
    "selectAgent": "エージェントを選択...",
    "messageSent": "メッセージを送信しました",
    "sendFailed": "送信に失敗しました",
    "titleLabel": "タイトル",
    "taskTitlePlaceholder": "タスクタイトル...",
    "taskDescriptionPlaceholder": "タスク説明...",
    "assignToOptional": "担当者 (任意)",
    "unassigned": "未割り当て",
    "posting": "投稿中...",
    "taskPosted": "タスクを投稿しました",
    "taskFailed": "タスクに失敗しました",
    "event": {
      "message": "メッセージ",
      "spawned": "起動",
      "terminated": "終了",
      "taskPosted": "タスク投稿",
      "taskClaimed": "タスク取得",
      "taskDone": "タスク完了"
    },
    "state": {
      "running": "実行中",
      "suspended": "一時停止",
      "terminated": "終了",
      "crashed": "クラッシュ"
    }
  },
  "setupWizard": {
    "title": "セットアップウィザード",
    "skipSetup": "セットアップをスキップ",
    "loading": "読み込み中...",
    "welcomeStep": "ようこそ",
    "providerStep": "プロバイダー",
    "agentStep": "エージェント",
    "tryItStep": "試してみる",
    "channelStep": "チャンネル",
    "doneStep": "完了",
    "welcomeToLibreFang": "LibreFang へようこそ",
    "libreFangDesc": "LibreFang はオープンソースの Agent Operating System です。1 つのダッシュボードから、チャット、ツール利用、メモリアクセス、メッセージングチャンネル連携が可能な AI エージェントを実行できます。",
    "wizardWillHelp": "このウィザードでは次のことを行えます:",
    "connectLlmProvider": "LLM プロバイダーを接続する (Anthropic、OpenAI、Gemini など)",
    "createFirstAgent": "10 個のテンプレートから最初の AI エージェントを作成する",
    "tryWithTestMessage": "簡単なテストメッセージで試してみる",
    "optionallyConnectChannel": "必要に応じてメッセージングチャンネルを接続する (Telegram、Discord、Slack)",
    "takesAbout2Min": "所要時間は約 2 分です。どのステップもスキップして後で設定できます。",
    "getStarted": "開始する",
    "connectAnLlmProvider": "LLM プロバイダーを接続",
    "providerAlreadyConfigured": "プロバイダーはすでに設定済みです",
    "popularProviders": "人気のプロバイダー",
    "otherProviders": "その他のプロバイダー",
    "ready": "準備完了",
    "apiKey": "API キー",
    "saveAndTest": "保存してテスト",
    "connectedSuccessfully": "正常に接続しました",
    "connectionFailed": "接続に失敗しました",
    "testConnection": "接続をテスト",
    "createYourFirstAgent": "最初のエージェントを作成",
    "agentName": "エージェント名",
    "createAgentButton": "エージェントを作成",
    "createdSuccessfully": "エージェント \"{name}\" を正常に作成しました",
    "nextTryIt": "次へ: 試してみる",
    "tryYourAgent": "エージェントを試す",
    "thinking": "考え中...",
    "typeMessage": "メッセージを入力...",
    "continue": "続行",
    "connectChannel": "チャンネルを接続",
    "optional": "任意",
    "save": "保存",
    "youreAllSet": "準備完了です！",
    "nextSteps": "次のステップ",
    "goToDashboard": "ダッシュボードへ移動",
    "needsAtLeastOne": "LibreFang でエージェントを動かすには少なくとも 1 つの LLM プロバイダーが必要です。プロバイダーを選択して API キーを入力してください。",
    "alreadyHaveProvider": "少なくとも 1 つのプロバイダーがすでに設定されています。次のステップに進むか、追加のプロバイダーを設定できます。",
    "modelsAvailable": "{count} モデル",
    "configureClaudeCode": "Claude Code を設定",
    "claudeCodeNoApiKey": "Claude Code は独自の CLI 認証を使用するため、API キーは不要です。",
    "detectInstructions3": "下の「検出」をクリックして確認してください",
    "detect": "Claude Code を検出",
    "claudeCodeDetected": "Claude Code を検出しました",
    "claudeCodeNotDetected": "Claude Code CLI が検出されませんでした。次を実行していることを確認してください: npm install -g @anthropic-ai/claude-code && claude auth",
    "environmentVariable": "環境変数:",
    "enterApiKey": "{provider} の API キーを入力",
    "isConfiguredAndReady": "{provider} は設定済みで使用可能です",
    "youCanTestOrContinue": "接続をテストするか、次のステップに進めます。",
    "pickTemplateToStart": "すぐに始められるようにテンプレートを選んでください。後でエージェントをカスタマイズしたり、エージェントページから追加作成したりできます。",
    "willUseWithProfile": "{provider} / {model} を {profile} プロファイルで使用します",
    "sendQuickMessage": "新しいエージェントをテストするために簡単なメッセージを送ってください。下の候補を使うか、自分で入力できます。",
    "channelsLetAgent": "チャンネルを使うと、エージェントはメッセージングプラットフォーム経由で会話できます。これは任意です。内蔵の Web チャットはいつでも利用できます。",
    "orSetEnv": "または環境に {env} を設定してください",
    "configuredAndActivated": "{channel} を設定し、有効化しました。",
    "canSkipThis": "このステップはスキップできます。内蔵 Web チャットはエージェントページからいつでも利用可能です。チャンネルは 設定 -> チャンネル からいつでも追加できます。",
    "libreFangConfigured": "LibreFang の設定が完了し、使用できる状態になりました。設定内容の概要は次のとおりです:",
    "llmProvider": "LLM プロバイダー",
    "preConfigured": "事前設定済み",
    "skipped": "スキップ済み",
    "firstAgent": "最初のエージェント",
    "channel": "チャンネル",
    "noneWebChatAvailable": "なし (Web チャットは利用可能)",
    "openAgentsToChat": "エージェントを開いてエージェントとの会話を始める",
    "goToAgentsToCreate": "エージェントページに移動して最初のエージェントを作成する",
    "browseSkillsToAdd": "スキルを見て機能を追加する (Web 検索、コード実行など)",
    "checkSettingsForAdvanced": "高度な設定は設定で確認する",
    "visitChannelsToConnect": "チャンネルに移動してメッセージングプラットフォームを接続する",
    "pleaseEnterApiKey": "API キーを入力してください",
    "apiKeySavedFor": "{provider} の API キーを保存しました",
    "saveKeyFailed": "API キーの保存に失敗しました: {message}",
    "testFailed": "テスト失敗: {message}",
    "pleaseEnterAgentName": "エージェント名を入力してください",
    "agentCreatedToast": "エージェント \"{name}\" を作成しました",
    "agentCreateFailed": "エージェントの作成に失敗しました: {message}",
    "pleaseEnterToken": "{label} を入力してください",
    "channelConfigFailed": "失敗: {message}"
  },
  "goalsPage": {
    "title": "目標",
    "newGoal": "+ 新しい目標",
    "statTotal": "合計",
    "statInProgress": "進行中",
    "statCompleted": "完了",
    "statPending": "保留中",
    "loading": "目標を読み込み中...",
    "loadError": "目標を読み込めませんでした",
    "noGoalsYet": "目標はまだありません",
    "createFirstGoal": "+ 最初の目標を作成",
    "thTitle": "タイトル",
    "thStatus": "状態",
    "thProgress": "進捗",
    "thAgent": "エージェント",
    "thActions": "操作",
    "statusPending": "保留中",
    "statusInProgress": "進行中",
    "statusCompleted": "完了",
    "statusCancelled": "キャンセル済み",
    "addSubGoal": "サブ目標を追加",
    "del": "削除",
    "createGoal": "目標を作成",
    "createFailed": "目標の作成に失敗しました",
    "updateFailed": "目標の更新に失敗しました",
    "deleteFailed": "目標の削除に失敗しました",
    "deleteConfirm": "この目標を削除しますか？",
    "deleteWithChildrenConfirm": "この目標とすべてのサブ目標を削除しますか？",
    "labelTitle": "タイトル *",
    "placeholderTitle": "目標タイトル",
    "labelDescription": "説明",
    "placeholderDescription": "目標の内容を入力...",
    "labelParentGoal": "親目標",
    "noneTopLevel": "なし（トップレベルの目標）",
    "labelStatus": "状態",
    "creating": "作成中..."
  },
  "analyticsPage": {
    "title": "分析",
    "loading": "使用状況データを読み込み中...",
    "loadError": "使用状況データを読み込めませんでした。",
    "totalTokens": "総トークン数",
    "estimatedCost": "推定コスト",
    "apiCalls": "API 呼び出し",
    "toolCalls": "ツール呼び出し",
    "tabSummary": "概要",
    "tabByModel": "モデル別",
    "tabByAgent": "エージェント別",
    "tabCosts": "コスト",
    "tokenBreakdown": "トークン内訳",
    "inputTokens": "入力トークン",
    "outputTokens": "出力トークン",
    "totalCost": "総コスト",
    "thModel": "モデル",
    "thCalls": "呼び出し回数",
    "thInputTokens": "入力トークン",
    "thOutputTokens": "出力トークン",
    "thCost": "コスト",
    "thUsage": "使用量",
    "noModelData": "モデル使用データはまだありません。",
    "thAgent": "エージェント",
    "thTotalTokens": "総トークン数",
    "thToolCalls": "ツール呼び出し",
    "noAgentData": "エージェント使用データはまだありません。",
    "totalSpend": "総支出",
    "todaysSpend": "今日の支出",
    "projectedMonthly": "月間予測",
    "avgCostPerMessage": "1 メッセージあたり平均コスト",
    "costByProvider": "プロバイダー別コスト",
    "noCostData": "コストデータはまだありません。",
    "dailyCost": "日別コスト（過去 7 日間）",
    "barTooltip": "{date}: {cost}（{calls} 回の呼び出し）",
    "noDailyData": "日別データはまだありません。",
    "costByModel": "モデル別コスト",
    "thProvider": "プロバイダー",
    "thTier": "階層",
    "thCostShare": "コスト比率",
    "noModelCostData": "モデルコストデータはまだありません。",
    "providerUnknown": "不明",
    "providerOther": "その他",
    "tierFrontier": "先端",
    "tierSmart": "高知能",
    "tierBalanced": "バランス",
    "tierFast": "高速",
    "dayShort": {
      "sun": "日",
      "mon": "月",
      "tue": "火",
      "wed": "水",
      "thu": "木",
      "fri": "金",
      "sat": "土"
    }
  },
  "memoryPage": {
    "title": "メモリ",
    "subtitle": "プロアクティブメモリシステム — エージェントがユーザーについて記憶している内容。",
    "totalMemories": "総メモリ数",
    "userLevel": "ユーザーレベル",
    "sessionLevel": "セッションレベル",
    "agentLevel": "エージェントレベル",
    "searchPlaceholder": "メモリを検索...",
    "search": "検索",
    "all": "すべて",
    "content": "内容",
    "level": "レベル",
    "category": "カテゴリ",
    "created": "作成日時",
    "noMemoriesFound": "メモリが見つかりません",
    "versionHistory": "変更履歴",
    "replacedAt": "置き換え日時:",
    "noPreviousVersions": "以前のバージョンはありません",
    "allAgents": "すべてのエージェント",
    "filterByAgent": "エージェントで絞り込み",
    "addMemory": "メモリを追加",
    "contentLabel": "内容",
    "contentPlaceholder": "メモリ内容を入力...",
    "levelLabel": "レベル",
    "save": "保存",
    "saving": "保存中...",
    "contentRequired": "メモリ内容を入力してください",
    "memoryAdded": "{count} 件のメモリを追加しました",
    "addMemoryFailed": "メモリの追加に失敗しました: {message}",
    "memoryDeleted": "メモリを削除しました",
    "deleteMemoryFailed": "メモリの削除に失敗しました",
    "confirmDelete": "このメモリを削除しますか？",
    "memoriesUsed": "使用されたメモリ",
    "memoriesSaved": "保存されたメモリ",
    "recalled": "呼び出し済み",
    "saved": "保存済み"
  },
  "theme": {
    "light": "ライト",
    "system": "システム",
    "dark": "ダーク"
  },
  "sidebar": {
    "shortcutHint": "Ctrl+K エージェント | Ctrl+N 新規"
  },
  "agentChat2": {
    "focusMode": "フォーカスモード (Ctrl+Shift+F)",
    "switchModel": "モデル切替 (Ctrl+M)",
    "vision": "Vision",
    "tools": "ツール",
    "agentSettings": "エージェント設定",
    "providerModelPlaceholder": "provider/model",
    "doubleClickToEdit": "ダブルクリックで編集"
  },
  "settingsPage2": {
    "enabled": "有効",
    "pmMasterToggleDesc": "プロアクティブメモリ全体のマスタートグルです。オフの場合、メモリは保存も取得もされません。",
    "pluginNamePlaceholder": "例: echo-memory"
  },
  "agentsPage2": {
    "modelPlaceholder": "例: llama-3.3-70b-versatile"
  },
  "schedulerPage2": {
    "deleteTrigger": "削除"
  },
  "analyticsPage2": {
    "total": "合計"
  },
  "memoryPage2": {
    "deleteSelected": "{count} 件を削除"
  },
  "confirm": {
    "cancel": "キャンセル",
    "confirm": "確認"
  },
  "setupWizard2": {
    "configure": "{name} を設定"
  }
}
