{
    "common": {
        "save": "保存",
        "cancel": "キャンセル",
        "close": "閉じる",
        "confirm": "確認",
        "clear": "クリア",
        "edit": "編集",
        "delete": "削除",
        "loading": "読み込み中..",
        "new": "新規"
    },
    "nav": {
        "about": "概要",
        "editor": "エディタ",
        "newChat": "新しいチャットを開始",
        "github": "GitHub",
        "settings": "設定",
        "hidePanel": "チャットパネルを非表示 (Ctrl+B)",
        "showPanel": "チャットパネルを表示 (Ctrl+B)",
        "aiChat": "AI チャット"
    },
    "providers": {
        "useServerDefault": "サーバーデフォルトを使用",
        "openai": "OpenAI",
        "anthropic": "Anthropic",
        "google": "Google",
        "azure": "Azure OpenAI",
        "openrouter": "OpenRouter",
        "deepseek": "DeepSeek",
        "siliconflow": "SiliconFlow",
        "modelscope": "ModelScope",
        "minimax": "MiniMax",
        "glm": "GLM",
        "qwen": "Qwen",
        "kimi": "Kimi",
        "qiniu": "Qiniu",
        "mimo": "MiMo (Xiaomi)"
    },
    "chat": {
        "placeholder": "ダイアグラムを説明するか、ファイルをアップロード...",
        "send": "送信",
        "stopGeneration": "生成を停止",
        "sendMessage": "メッセージを送信",
        "clearConversation": "会話をクリア",
        "diagramHistory": "ダイアグラム履歴",
        "saveDiagram": "ダイアグラムを保存",
        "uploadFile": "ファイルをアップロード（画像、PDF、テキスト）",
        "minimalStyle": "ミニマル",
        "styledMode": "スタイル付き",
        "minimalTooltip": "高速生成のためミニマルを使用（色なし）",
        "regenerate": "応答を再生成",
        "copyResponse": "応答をコピー",
        "copied": "コピーしました！",
        "failedToCopy": "コピーに失敗しました",
        "failedToCopyDetail": "メッセージのコピーに失敗しました。手動でコピーするか、クリップボードの権限を確認してください。",
        "goodResponse": "良い応答",
        "badResponse": "悪い応答",
        "clickToEdit": "クリックして編集",
        "editMessage": "メッセージを編集",
        "saveAndSubmit": "保存して送信",
        "ExtractURL": "URLから抽出"
    },
    "examples": {
        "title": "AI でダイアグラムを作成",
        "subtitle": "作成したいものを説明するか、画像をアップロードして複製",
        "quickExamples": "クイック例",
        "paperToDiagram": "論文からダイアグラムへ",
        "paperDescription": ".pdf, .txt, .md, .json, .csv, .py, .js, .ts などをアップロード",
        "animatedDiagram": "アニメーション図",
        "animatedDescription": "アニメーションコネクタ付きの Transformer アーキテクチャを描画",
        "awsArchitecture": "AWS アーキテクチャ",
        "awsDescription": "AWS アイコンでクラウドアーキテクチャ図を作成",
        "replicateFlowchart": "フローチャートを複製",
        "replicateDescription": "既存のフローチャートをアップロードして複製",
        "creativeDrawing": "クリエイティブな描画",
        "creativeDescription": "楽しくてクリエイティブなものを描く",
        "cachedNote": "例はキャッシュされ、即座に応答します",
        "mcpServer": "MCP サーバー",
        "mcpDescription": "Claude Desktop、VS Code、Cursor で使用"
    },
    "settings": {
        "title": "設定",
        "description": "アプリケーション設定を構成します。",
        "apiKeysModels": "API キーとモデル",
        "apiKeysModelsDescription": "AI プロバイダーと API キーを設定します。",
        "accessCode": "アクセスコード",
        "accessCodePlaceholder": "アクセスコードを入力",
        "accessCodeDescription": "このアプリケーションを使用するために必要です。",
        "aiProvider": "AI プロバイダー設定",
        "aiProviderDescription": "独自の API キーを使用して使用制限を回避できます。キーはブラウザのローカルに保存され、サーバーには保存されません。",
        "provider": "プロバイダー",
        "modelId": "モデル ID",
        "apiKey": "API キー",
        "apiKeyPlaceholder": "あなたの API キー",
        "baseUrl": "ベース URL（オプション）",
        "customEndpoint": "カスタムエンドポイント URL",
        "overrides": "上書き",
        "clearSettings": "設定をクリア",
        "useServerDefault": "サーバーデフォルトを使用",
        "language": "言語",
        "languageDescription": "インターフェース言語を選択します。",
        "theme": "テーマ",
        "themeDescription": "インターフェースと DrawIO キャンバスのダーク/ライトモード。",
        "drawioStyle": "DrawIO スタイル",
        "drawioStyleDescription": "キャンバススタイル",
        "themeDefault": "デフォルト",
        "themeDark": "ダーク",
        "themeMinimal": "ミニマル",
        "themeSketch": "スケッチ",
        "themeSimple": "シンプル",
        "diagramStyle": "ダイアグラムスタイル",
        "diagramStyleDescription": "ミニマルとスタイル付きの出力を切り替えます。",
        "sendShortcut": "送信ショートカット",
        "sendShortcutDescription": "メッセージの送信方法を選択します。",
        "enterToSend": "Enterで送信",
        "ctrlEnterToSend": "Cmd/Ctrl+Enterで送信",
        "diagramActions": "ダイアグラム操作",
        "diagramActionsDescription": "ダイアグラムの履歴とエクスポートを管理",
        "history": "履歴",
        "download": "ダウンロード",
        "proxy": "プロキシ設定",
        "proxyDescription": "API リクエスト用の HTTP/HTTPS プロキシを設定（デスクトップ版のみ）",
        "httpProxy": "HTTP プロキシ",
        "httpsProxy": "HTTPS プロキシ",
        "applyProxy": "適用",
        "proxyApplied": "プロキシ設定が適用されました",
        "diagramValidation": "ダイアグラム検証（実験的）",
        "diagramValidationDescription": "視覚言語モデルを使用して生成されたダイアグラムを検証します。GPT-5.2 や Sonnet-4.5 などの VLM が必要です。",
        "enabled": "有効",
        "disabled": "無効",
        "customSystemMessage": "カスタムシステムメッセージ",
        "customSystemMessageDescription": "AIのシステムプロンプトに追加されるカスタム指示を入力します。",
        "customSystemMessagePlaceholder": "例：ダイアグラムには常に青色のカラースキームを使用...",
        "maxOutputTokens": "最大出力トークン数",
        "maxOutputTokensDescription": "1回の応答の予算で、思考過程とダイアグラムの XML が共有します。AI が考え続けてダイアグラムが生成されない場合は大きくしてください。空欄ならデフォルト値を使います。",
        "panelVisibility": "ロビーパネル",
        "panelVisibilityDescription": "チャットロビーに表示するパネルを選択します。",
        "showRecentChats": "最近のチャット",
        "showMyTemplates": "マイテンプレート",
        "showQuickExamples": "クイック例"
    },
    "save": {
        "title": "ダイアグラムを保存",
        "description": "形式とファイル名を選択してダイアグラムを保存します。",
        "format": "形式",
        "filename": "ファイル名",
        "filenamePlaceholder": "ファイル名を入力",
        "formats": {
            "drawio": "Draw.io XML",
            "png": "PNG 画像",
            "svg": "SVG 画像",
            "xmlsvg": "編集可能 SVG"
        },
        "savedSuccessfully": "保存完了！"
    },
    "history": {
        "title": "ダイアグラム履歴",
        "description": "AI 修正前に保存された各ダイアグラム。\nダイアグラムをクリックして復元",
        "noHistory": "まだ履歴がありません。メッセージを送信してダイアグラム履歴を作成してください。",
        "version": "バージョン",
        "restoreTo": "バージョン {version} に復元しますか？"
    },
    "dialogs": {
        "clearTitle": "すべてクリアしますか？",
        "clearDescription": "現在の会話をクリアし、ダイアグラムをリセットします。この操作は元に戻せません。",
        "clearEverything": "すべてクリア",
        "clearSuccess": "新しいチャットを開始しました"
    },
    "errors": {
        "maxFiles": "ファイルが多すぎます。最大 {max} 個まで許可されています。",
        "onlyMoreAllowed": "あと {slots} 個のファイルのみ許可されています",
        "fileExceeds": "「{name}」は {size} です（{max}MB を超えています）",
        "unsupportedType": "「{name}」はサポートされていないファイルタイプです",
        "filesRejected": "{count} 個のファイルが拒否されました：",
        "andMore": "...およびさらに {count} 個",
        "invalidAccessCode": "無効または欠落したアクセスコード。設定で入力してください。",
        "networkError": "ネットワークエラー。接続を確認してください。",
        "retryLimit": "自動再試行制限に達しました（{max}）。手動で再試行してください。",
        "continuationRetryLimit": "継続再試行制限に達しました（{max}）。ダイアグラムが複雑すぎる可能性があります。",
        "validationFailed": "ダイアグラムの検証に失敗しました。再生成してみてください。",
        "malformedXml": "AI が無効なダイアグラム XML を生成しました。再生成してみてください。",
        "failedToProcess": "ダイアグラムの処理に失敗しました。再生成してみてください。",
        "sessionCorrupted": "セッションデータが破損しました。最初からやり直します。",
        "failedToSave": "localStorage へのメッセージの保存に失敗しました",
        "failedToRestore": "localStorage からの復元に失敗しました",
        "failedToPersist": "アンロード前の状態の永続化に失敗しました",
        "failedToExport": "チャートデータの取得エラー",
        "failedToLoadExample": "例の画像の読み込みエラー",
        "failedToRecordFeedback": "フィードバックの記録に失敗しました。もう一度お試しください。",
        "storageUpdateFailed": "チャットはクリアされましたが、ブラウザストレージを更新できませんでした"
    },
    "quota": {
        "dailyLimit": "1日の割当量に達しました",
        "tokenLimit": "1日のトークン制限に達しました",
        "tpmLimit": "レート制限",
        "tpmMessage": "リクエストが多すぎます。しばらくお待ちください。",
        "tpmMessageDetailed": "レート制限に達しました（{limit}トークン/分）。{seconds}秒待ってからもう一度リクエストしてください。",
        "messageApi": "今日のデモ利用上限に達してしまったようです。楽しんでいただけて本当に嬉しいです。このデモはByteDance Doubaoのご厚意により提供されていますが、皆様に公平にご利用いただくため、少し制限を設けさせていただいております。",
        "messageApiSelfHosted": null,
        "messageToken": "今日のトークン利用上限に達してしまったようです。楽しんでいただけて本当に嬉しいです。このデモはByteDance Doubaoのご厚意により提供されていますが、皆様に公平にご利用いただくため、少し制限を設けさせていただいております。",
        "messageTokenSelfHosted": null,
        "tip": "<strong>ヒント：</strong>独自の API キーを使用する（設定アイコンをクリック）か、プロジェクトをセルフホストしてこれらの制限を回避できます。",
        "tipSelfHosted": "<strong>ヒント：</strong>設定で独自の API キーを設定することで、引き続きサービスをご利用いただけます。",
        "reset": "制限は明日リセットされます。ご理解ありがとうございます。",
        "doubaoSponsorship": "<a href=\"{link}\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"underline hover:text-foreground\">こちらから登録</a>すると、各モデル（Doubao、DeepSeek、Kimi含む）で50万トークンを無料で取得できます。モデル設定でAPIキーを設定してください。",
        "configModel": "APIキーを使用",
        "selfHost": "セルフホスト",
        "sponsor": "スポンサー",
        "learnMore": "詳細 →",
        "usedOf": "{used}/{limit}"
    },
    "tools": {
        "generateDiagram": "ダイアグラムを生成",
        "editDiagram": "ダイアグラムを編集",
        "appendDiagram": "ダイアグラムに追加",
        "complete": "完了",
        "error": "エラー",
        "truncated": "切り捨て"
    },
    "file": {
        "reading": "読み込み中...",
        "chars": "文字",
        "removeFile": "ファイルを削除"
    },
    "url": {
        "title": "URLからコンテンツを抽出",
        "description": "URLを貼り付けてそのコンテンツを抽出および分析します",
        "Extracting": "抽出中...",
        "extract": "抽出",
        "Cancel": "キャンセル",
        "enterUrl": "URLを入力してください",
        "invalidFormat": "無効なURL形式です"
    },
    "reasoning": {
        "thinking": "考え中...",
        "thoughtFor": "{duration} 秒考えました",
        "thoughtBrief": "数秒考えました"
    },
    "dev": {
        "title": "開発：XMLストリーミングシミュレーター",
        "preset": "プリセット：",
        "selectPreset": "プリセットを選択...",
        "clear": "クリア",
        "placeholder": "ここに mxCell XML を貼り付けるか、プリセットを選択...",
        "interval": "間隔：",
        "chars": "文字：",
        "streaming": "ストリーミング中...",
        "simulate": "シミュレート",
        "stop": "停止",
        "testQuotaToast": "クォータトーストをテスト",
        "simulatingMessage": "[開発] XMLストリーミングをシミュレート中",
        "successMessage": "ダイアグラムの表示に成功しました。"
    },
    "about": {
        "modelChange": "モデル変更と利用制限について",
        "walletCrying": "（別名：お財布が悲鳴を上げています）",
        "seekingSponsorship": "スポンサー募集",
        "contactMe": "お問い合わせ",
        "usageNotice": "利用量の増加に伴い、コスト削減のためモデルを Claude から minimax-m2 に変更し、いくつかの利用制限を設けました。詳細は概要ページをご覧ください。"
    },
    "sessionHistory": {
        "tooltip": "チャット履歴",
        "newChat": "新しいチャット",
        "empty": "チャット履歴はまだありません",
        "emptyHint": "会話を始めてください",
        "today": "今日",
        "yesterday": "昨日",
        "thisWeek": "今週",
        "earlier": "それ以前",
        "deleteTitle": "このチャットを削除しますか？",
        "deleteDescription": "このチャットセッションとダイアグラムは完全に削除されます。この操作は取り消せません。",
        "recentChats": "最近のチャット",
        "justNow": "たった今",
        "searchPlaceholder": "チャットを検索...",
        "noResults": "チャットが見つかりません"
    },
    "validation": {
        "title": "ダイアグラムを検証",
        "capturing": "キャプチャ中",
        "validating": "検証中",
        "validatingWithAttempt": "検証中 ({attempt}/{max})",
        "valid": "有効",
        "validWithWarnings": "有効（警告あり）",
        "issuesFound": "問題が見つかりました",
        "error": "エラー",
        "skipped": "スキップ",
        "capturedScreenshot": "キャプチャした画像：",
        "issuesFoundLabel": "検出された問題：",
        "suggestions": "提案：",
        "passedValidation": "ダイアグラムは視覚検証に合格しました - 問題は検出されませんでした。",
        "improvementRequested": "改善リクエスト済み - 下の新しいダイアグラムを確認してください",
        "improveWithSuggestions": "提案で改善",
        "regenerateWithFeedback": "検証フィードバックを使用してダイアグラムを再生成"
    },
    "modelConfig": {
        "title": "AIモデル設定",
        "description": "複数のAIプロバイダーとモデルを設定",
        "configure": "設定",
        "addProvider": "プロバイダーを追加",
        "addModel": "モデルを追加",
        "modelId": "モデルID",
        "modelLabel": "表示名",
        "streaming": "ストリーミングを有効",
        "deleteProvider": "プロバイダーを削除",
        "deleteModel": "モデルを削除",
        "noModels": "モデルが設定されていません。モデルを追加してください。",
        "selectProvider": "プロバイダーを選択または追加してください",
        "configureMultiple": "複数のAIプロバイダーを設定して簡単に切り替え",
        "apiKeyStored": "APIキーはブラウザにローカル保存されます",
        "test": "テスト",
        "validationError": "検証に失敗しました",
        "addModelFirst": "検証するには少なくとも1つのモデルを追加してください",
        "providers": "プロバイダー",
        "addProviderHint": "プロバイダーを追加して開始",
        "verified": "検証済み",
        "configuration": "設定",
        "displayName": "表示名",
        "awsAccessKeyId": "AWS アクセスキー ID",
        "awsSecretAccessKey": "AWS シークレットアクセスキー",
        "awsRegion": "AWS リージョン",
        "selectRegion": "リージョンを選択",
        "apiKey": "API キー",
        "enterApiKey": "API キーを入力",
        "enterSecretKey": "シークレットアクセスキーを入力",
        "baseUrl": "ベース URL",
        "optional": "（オプション）",
        "baseUrlWithExample": "ベース URL（オプション、例: {example}）",
        "customEndpoint": "カスタムエンドポイント URL",
        "minimaxBaseUrlHint": "/anthropic で Anthropic 互換 API（推奨）、または /v1 で OpenAI 互換 API を使用",
        "mimoBaseUrlHint": "デフォルトは従量課金キー（sk-...）用です。Token Plan 加入者（tp-... キー）は https://token-plan-cn.xiaomimimo.com/v1 を設定してください",
        "models": "モデル",
        "customModelId": "カスタムモデル ID...",
        "allAdded": "すべて追加済み",
        "suggested": "おすすめ",
        "noModelsConfigured": "モデルが設定されていません",
        "modelIdEmpty": "モデル ID は空にできません",
        "modelIdExists": "このモデル ID は既に存在します",
        "configureProviders": "AI プロバイダーを設定",
        "selectProviderHint": "リストからプロバイダーを選択するか、新規追加して API キーとモデルを設定",
        "deleteConfirmDesc": "{name} を削除してもよろしいですか？設定されたすべてのモデルが削除され、元に戻せません。",
        "typeToConfirm": "確認のため「{name}」と入力",
        "typeProviderName": "プロバイダー名を入力...",
        "modelsConfiguredCount": "{count} 個のモデルを設定済み",
        "validationFailedCount": "{count} 個のモデルの検証に失敗",
        "cancel": "キャンセル",
        "delete": "削除",
        "clickToChange": "（クリックして変更）",
        "usingServerDefault": "サーバーデフォルトモデルを使用中",
        "selectModel": "モデルを選択",
        "searchModels": "モデルを検索...",
        "noVerifiedModels": "検証済みのモデルがありません。先にモデルをテストしてください。",
        "noModelsFound": "モデルが見つかりません。",
        "default": "デフォルト",
        "serverDefault": "サーバーデフォルト",
        "serverModels": "サーバーモデル",
        "userModels": "ユーザーモデル",
        "configureModels": "モデルを設定...",
        "onlyVerifiedShown": "検証済みのモデルのみ表示",
        "showUnvalidatedModels": "未検証のモデルを表示",
        "allModelsShown": "すべてのモデルを表示（未検証を含む）",
        "unvalidatedModelWarning": "このモデルは検証されていません",
        "serverDefaultModel": "サーバーデフォルトモデル",
        "showValue": "値を表示",
        "hideValue": "値を非表示"
    },
    "templates": {
        "title": "マイテンプレート",
        "subtitle": "素早いダイアグラム作成のための個人的なプロンプトライブラリ",
        "emptyTitle": "テンプレートがありません",
        "emptyDescription": "最初のテンプレートを作成して、個人的なプロンプトライブラリを構築しましょう",
        "createFirst": "最初のテンプレートを作成",
        "neverUsed": "未使用",
        "usedCount": "{count} 回使用",
        "myTemplates": "マイテンプレート",
        "createTitle": "テンプレート作成",
        "createDescription": "再利用のためにプロンプトを保存します。テンプレートを使用すると、一般的なワークフローを素早く開始できます。",
        "promptLabel": "プロンプト",
        "promptPlaceholder": "作成するダイアグラムを説明してください...",
        "promptRequired": "プロンプトは必須です",
        "titleLabel": "タイトル",
        "titlePlaceholder": "タイトルを入力",
        "titleHint": "空欄の場合はプロンプトの最初の20文字が使用されます",
        "descriptionLabel": "説明",
        "descriptionPlaceholder": "このテンプレートの説明を追加",
        "pinnedLabel": "テンプレートをピン留め",
        "pinnedHint": "ピン留めされたテンプレートはリストの上部に表示されます",
        "createButton": "テンプレート作成",
        "createFailed": "テンプレートの作成に失敗しました。もう一度お試しください。",
        "editTitle": "テンプレート編集",
        "editDescription": "テンプレートの内容と設定を更新します。",
        "updateFailed": "テンプレートの更新に失敗しました。もう一度お試しください。",
        "duplicate": "複製",
        "copySuffix": "(コピー)",
        "deleteTitle": "このテンプレートを削除しますか？",
        "deleteDescription": "このテンプレートは完全に削除されます。この操作は取り消せません。",
        "confirmSendTitle": "現在の入力を置き換えますか？",
        "confirmSendDescription": "未送信のコンテンツがあります。このテンプレートを送信すると置き換えられます。",
        "confirmSendButton": "テンプレートを送信",
        "searchPlaceholder": "テンプレートを検索...",
        "searchNoResults": "検索に一致するテンプレートがありません",
        "pin": "上部にピン留め",
        "unpin": "ピン留め解除",
        "saveAsTemplate": "テンプレートとして保存",
        "exportTemplates": "テンプレートをエクスポート",
        "importTemplates": "テンプレートをインポート",
        "exportEmpty": "エクスポートするテンプレートがありません",
        "exportSuccess": "{count} 件のテンプレートをエクスポートしました",
        "importNoFile": "JSON ファイルを選択してください",
        "importFailed": "インポートに失敗しました：{error}",
        "importSuccess": "{imported} 件インポート、{skipped} 件の重複をスキップしました"
    },
    "admin": {
        "title": "管理者設定",
        "loginPrompt": "サーバー設定を管理するには、管理者パスワード（ADMIN_PASSWORD 環境変数）を入力してください。",
        "password": "パスワード",
        "signIn": "ログイン",
        "signingIn": "ログイン中…",
        "loginFailed": "ログインに失敗しました",
        "precedence": "ファイルが環境変数を上書き · 環境変数がデフォルトを上書き",
        "notWritable": "このデプロイ環境では設定ファイルに書き込めません（サーバーレス環境には永続ディスクがありません）。設定は読み取り専用で表示されます——代わりに環境変数で構成してください。",
        "settingGroups": "設定グループ",
        "enabled": "有効",
        "disabled": "無効",
        "enableGroup": "{group} を有効化",
        "unsavedChanges": "未保存の変更があります",
        "saved": "設定を保存しました。変更は即座に反映されます。",
        "saveFailed": "保存に失敗しました。接続を確認して再試行してください。",
        "invalidSettings": "一部の設定が無効です。",
        "discard": "破棄",
        "saveChanges": "変更を保存",
        "saving": "保存中…",
        "sourceSaved": "保存済み",
        "sourceEnv": "環境変数",
        "sourceSavedTitle": "管理者設定ファイルで設定",
        "sourceEnvTitle": "環境変数で設定",
        "restartRequired": "再起動が必要",
        "modified": "変更済み",
        "notSet": "未設定",
        "savedReplace": "保存済み（{hint}）——入力して置き換え",
        "showValue": "値を表示",
        "hideValue": "値を非表示",
        "removeValue": "値を削除",
        "removeValueTitle": "保存された値を削除",
        "resetToDefault": "デフォルトに戻す",
        "models": "モデル",
        "modelsDescription": "全ユーザーが利用できるサーバー側のプロバイダーとモデル——個人の API キーは不要です。ユーザーがモデルを選択しない場合、デフォルトプロバイダーの最初のモデルが使用されます。",
        "addProviderHint": "プロバイダーを追加して、全ユーザーにサーバー側モデルを提供します。",
        "selectProviderHint": "プロバイダーを選択または追加して、その資格情報とモデルを構成します。",
        "addProviderToOfferModels": "ユーザーにこのプロバイダーを公開するには、モデルを少なくとも 1 つ追加してください。",
        "managedViaEnv": "（環境変数で管理）",
        "envReadOnly": "AI_MODELS_CONFIG / ai-models.json で定義——ここでは読み取り専用です。変更するには環境構成を編集してください。",
        "defaultModel": "デフォルトモデル",
        "noModelsConfigured": "モデルが構成されていません",
        "modelCount": "{count} 個のモデル",
        "modelCountPlural": "{count} 個のモデル",
        "default": "デフォルト",
        "setAsDefault": "デフォルトプロバイダーに設定",
        "defaultProvider": "デフォルトプロバイダー",
        "modelIdPlaceholder": "モデル ID…",
        "addModel": "モデルを追加",
        "suggested": "おすすめ",
        "test": "テスト",
        "testOk": "正常（{ms}ms）",
        "testFailed": "失敗",
        "removeModel": "{model} を削除",
        "deleteProviderTitle": "{name} を削除しますか？",
        "deleteProviderDesc": "保存後、その資格情報とモデルはサーバーから削除されます。",
        "cancel": "キャンセル",
        "delete": "削除",
        "groups": {
            "generation": {
                "title": "生成",
                "description": "すべてのチャットリクエストに適用される出力パラメーター。"
            },
            "access": {
                "title": "アクセス制御",
                "description": "このデプロイを使用できるユーザーを制限します。"
            },
            "features": {
                "title": "機能",
                "description": "オプション機能とセキュリティの切り替え。"
            },
            "observability": {
                "title": "オブザーバビリティ",
                "description": "LLM 呼び出しの Langfuse トレース。"
            },
            "quota": {
                "title": "クォータとレート制限",
                "description": "IP ごとの使用制限。強制には DynamoDB テーブルが必要です。"
            }
        },
        "settings": {
            "TEMPERATURE": {
                "label": "温度",
                "description": "温度を受け付けない推論モデルの場合は未設定のままにしてください。"
            },
            "MAX_OUTPUT_TOKENS": {
                "label": "最大出力トークン数"
            },
            "ACCESS_CODE_LIST": {
                "label": "アクセスコード",
                "description": "カンマ区切りのリスト。チャットにはいずれかの入力が必要です。空 = オープンアクセス。"
            },
            "ENABLE_VLM_VALIDATION": {
                "label": "VLM 図検証",
                "description": "ビジョンモデルで生成された図を視覚的に検証します。"
            },
            "VALIDATION_MODEL": {
                "label": "検証モデル",
                "description": "空の場合はデフォルトの AI モデルにフォールバックします。"
            },
            "VALIDATION_TIMEOUT": {
                "label": "検証タイムアウト（ms）"
            },
            "ENABLE_HISTORY_XML_REPLACE": {
                "label": "履歴 XML 圧縮",
                "description": "履歴内の古い図 XML をプレースホルダーで置き換えます。"
            },
            "ALLOW_PRIVATE_URLS": {
                "label": "プライベート URL を許可",
                "description": "オフにすると、プライベート IP や内部ホスト名へのリクエストをブロックします（SSRF 保護）。"
            },
            "LANGFUSE_PUBLIC_KEY": {
                "label": "Langfuse Public Key"
            },
            "LANGFUSE_SECRET_KEY": {
                "label": "Langfuse Secret Key"
            },
            "LANGFUSE_BASEURL": {
                "label": "Langfuse Base URL"
            },
            "DAILY_REQUEST_LIMIT": {
                "label": "1 日あたりのリクエスト上限",
                "description": "IP ごと 1 日あたり。"
            },
            "DAILY_TOKEN_LIMIT": {
                "label": "1 日あたりのトークン上限",
                "description": "IP ごと 1 日あたり。"
            },
            "TPM_LIMIT": {
                "label": "1 分あたりのトークン数"
            },
            "DYNAMODB_QUOTA_TABLE": {
                "label": "DynamoDB テーブル",
                "description": "空の場合、クォータの強制は無効になります。"
            },
            "DYNAMODB_REGION": {
                "label": "DynamoDB リージョン"
            },
            "QUOTA_TIMEZONE": {
                "label": "クォータタイムゾーン",
                "description": "1 日のリセット境界に使用するタイムゾーン。"
            }
        }
    }
}
