* feat(settings): expand settings api payload * feat(webui): build app-style settings center * feat(webui): add centered chat search dialog * fix(webui): shorten chat search label * fix(webui): center dialog entrance animation * fix(webui): simplify chat search results * fix(webui): tighten mobile settings navigation * feat(webui): persist sidebar state * feat(webui): add sidebar organization controls * refactor(webui): organize backend helpers * refactor(webui): remove utils compatibility shims * refactor(session): move shared webui helpers out of webui package * feat(webui): add image generation settings * style(webui): refine settings overview layout * fix(webui): localize settings zh-CN copy * style(webui): add settings status indicators * feat(webui): show sidebar run indicators * fix(webui): persist sidebar run indicators * fix(webui): highlight settings pending status * fix(webui): align settings test with provider update * fix(utils): preserve legacy webui helper imports
466 lines
19 KiB
JSON
466 lines
19 KiB
JSON
{
|
||
"app": {
|
||
"brand": "nanobot",
|
||
"loading": {
|
||
"connecting": "nanobot に接続中…",
|
||
"boot": "nanobot を読み込み中…"
|
||
},
|
||
"error": {
|
||
"title": "nanobot に接続できませんでした",
|
||
"gatewayHint": "gateway(`nanobot gateway`)が起動しており、このページが同じマシン上で開かれていることを確認してください。"
|
||
},
|
||
"system": {
|
||
"section": "システム",
|
||
"restartHint": "実行時の変更を適用するには nanobot を再起動します。",
|
||
"restart": "nanobot を再起動",
|
||
"restarting": "再起動中..."
|
||
},
|
||
"restart": {
|
||
"completed": "{{seconds}} 秒で再起動が完了しました。"
|
||
},
|
||
"documentTitle": {
|
||
"base": "nanobot",
|
||
"chat": "{{title}} · nanobot"
|
||
},
|
||
"meta": {
|
||
"description": "nanobot Web UI — nanobot ワークスペースと会話します。"
|
||
}
|
||
},
|
||
"sidebar": {
|
||
"collapse": "サイドバーを閉じる",
|
||
"toggleTheme": "テーマを切り替える",
|
||
"newChat": "新しいチャット",
|
||
"viewOptions": "View",
|
||
"compactList": "Compact list",
|
||
"showPreviews": "Show previews",
|
||
"showTimestamps": "Show time",
|
||
"sortLabel": "Sort",
|
||
"sortUpdated": "Recently updated",
|
||
"sortCreated": "Recently created",
|
||
"sortTitle": "Title A-Z",
|
||
"recent": "最近のチャット",
|
||
"refreshSessions": "セッションを更新",
|
||
"settings": "設定",
|
||
"language": {
|
||
"label": "言語",
|
||
"ariaLabel": "言語を変更"
|
||
},
|
||
"searchAria": "検索",
|
||
"searchPlaceholder": "検索",
|
||
"searchResults": "検索結果",
|
||
"noSearchResults": "一致するチャットはありません。"
|
||
},
|
||
"settings": {
|
||
"backToChat": "チャットに戻る",
|
||
"sidebar": {
|
||
"title": "設定",
|
||
"ariaLabel": "設定セクション"
|
||
},
|
||
"nav": {
|
||
"general": "一般",
|
||
"byok": "BYOK",
|
||
"overview": "Overview",
|
||
"appearance": "Appearance",
|
||
"models": "Models",
|
||
"providers": "Providers",
|
||
"image": "Image",
|
||
"web": "Web",
|
||
"runtime": "Runtime",
|
||
"advanced": "Advanced"
|
||
},
|
||
"sections": {
|
||
"interface": "インターフェース",
|
||
"ai": "AI",
|
||
"system": "システム",
|
||
"status": "Status",
|
||
"localPreferences": "Local preferences",
|
||
"presets": "Presets",
|
||
"webSearch": "Web search",
|
||
"webBehavior": "Behavior",
|
||
"identity": "Identity",
|
||
"safety": "Safety",
|
||
"integrations": "Integrations"
|
||
},
|
||
"rows": {
|
||
"theme": "テーマ",
|
||
"language": "言語",
|
||
"provider": "プロバイダー",
|
||
"model": "モデル",
|
||
"restart": "nanobot を再起動",
|
||
"configPath": "設定パス",
|
||
"activePreset": "Active preset",
|
||
"gateway": "Gateway",
|
||
"restartState": "Restart state",
|
||
"selectedPreset": "Selected preset",
|
||
"presetModel": "Preset model",
|
||
"density": "Density",
|
||
"activityMode": "Activity detail",
|
||
"codeWrap": "Code wrapping",
|
||
"maxResults": "Max results",
|
||
"timeout": "Timeout",
|
||
"jinaReader": "Jina reader",
|
||
"botName": "Bot name",
|
||
"botIcon": "Bot icon",
|
||
"timezone": "Timezone",
|
||
"toolHintMaxLength": "Tool hint length",
|
||
"workspacePath": "Workspace path",
|
||
"heartbeat": "Heartbeat",
|
||
"dream": "Dream",
|
||
"unifiedSession": "Unified session",
|
||
"restrictWorkspace": "Restrict to workspace",
|
||
"execTool": "Exec tool",
|
||
"execSandbox": "Exec sandbox",
|
||
"ssrfWhitelist": "SSRF whitelist",
|
||
"mcpServers": "MCP servers",
|
||
"pathAppend": "PATH append",
|
||
"configurationDocs": "Configuration docs"
|
||
},
|
||
"help": {
|
||
"theme": "ライト表示とダーク表示を切り替えます。",
|
||
"language": "WebUI で使用する言語を選択します。",
|
||
"provider": "新しいモデルリクエストに使うプロバイダーを選択します。",
|
||
"model": "nanobot が既定で使用するモデル名を設定します。",
|
||
"configPath": "現在ゲートウェイが使用している設定ファイルです。",
|
||
"selectedPreset": "Named presets are read-only here; edit them in config.json.",
|
||
"presetModel": "Switch to Default to edit model and provider from the WebUI.",
|
||
"density": "Stored only in this browser.",
|
||
"activityMode": "Choose how much agent activity chrome to show by default.",
|
||
"codeWrap": "Keep long code lines readable on smaller screens.",
|
||
"maxResults": "Results returned by each web_search call.",
|
||
"timeout": "Seconds before a search provider request times out.",
|
||
"jinaReader": "Use Jina Reader for web_fetch when available.",
|
||
"botName": "Shown in runtime surfaces that use the configured bot identity.",
|
||
"botIcon": "Short emoji or text shown beside the bot name.",
|
||
"timezone": "IANA timezone used by runtime context and schedules.",
|
||
"toolHintMaxLength": "Maximum characters shown in tool progress hints.",
|
||
"advancedReadOnly": "Advanced safety controls are read-only in WebUI. Edit config.json intentionally when needed."
|
||
},
|
||
"values": {
|
||
"light": "ライト",
|
||
"dark": "ダーク",
|
||
"notAvailable": "利用不可",
|
||
"enabled": "Enabled",
|
||
"disabled": "Disabled",
|
||
"restartRequired": "Restart required",
|
||
"liveReload": "Live reload ready",
|
||
"comfortable": "Comfortable",
|
||
"compact": "Compact",
|
||
"auto": "Auto",
|
||
"expanded": "Expanded",
|
||
"on": "On",
|
||
"off": "Off",
|
||
"configured": "Configured",
|
||
"notConfigured": "Not configured"
|
||
},
|
||
"status": {
|
||
"loading": "設定を読み込んでいます...",
|
||
"loadError": "設定を読み込めませんでした",
|
||
"unsaved": "未保存の変更があります。",
|
||
"savedRestart": "保存しました。反映するには nanobot を再起動してください。"
|
||
},
|
||
"actions": {
|
||
"save": "保存",
|
||
"saving": "保存中",
|
||
"edit": "編集",
|
||
"cancel": "キャンセル",
|
||
"openDocs": "Open docs"
|
||
},
|
||
"byok": {
|
||
"description": "自分の provider キーを使います。Nanobot は現在の config から値を読み込み、設定済みの provider だけを一般設定で選択できます。",
|
||
"configured": "設定済み",
|
||
"notConfigured": "未設定",
|
||
"configuredSection": "設定済み",
|
||
"notConfiguredSection": "未設定",
|
||
"showMore": "さらに {{count}} 件表示",
|
||
"showLess": "折りたたむ",
|
||
"apiKey": "API key",
|
||
"apiBase": "API base",
|
||
"apiKeyPlaceholder": "API key を入力",
|
||
"apiKeyConfiguredPlaceholder": "空欄のままなら現在の key を保持",
|
||
"configuredKeyHint": "設定済み key",
|
||
"apiBasePlaceholder": "provider の既定値を使用",
|
||
"apiKeyRequired": "この provider を設定するには API key が必要です。",
|
||
"showApiKey": "API key を表示",
|
||
"hideApiKey": "API key を隠す",
|
||
"noConfiguredProviders": "設定済み provider がありません",
|
||
"configureFirst": "先に BYOK で provider を設定してください。",
|
||
"openByok": "BYOK を開く",
|
||
"tabs": {
|
||
"ariaLabel": "BYOK 認証情報タイプ",
|
||
"llm": "LLM",
|
||
"webSearch": "Web Search"
|
||
},
|
||
"webSearch": {
|
||
"provider": "検索 provider",
|
||
"providerHelp": "web search ツールで使うバックエンドを選択します。",
|
||
"selectProvider": "provider を選択",
|
||
"credentials": "認証情報",
|
||
"noCredentialRequired": "key は不要",
|
||
"noCredentialHelp": "DuckDuckGo は API key を保存せずに使えます。",
|
||
"apiKeyHelp": "config に保存され、保存後はマスク表示されます。",
|
||
"baseUrl": "Base URL",
|
||
"baseUrlHelp": "SearXNG には自分のインスタンス URL が必要です。",
|
||
"baseUrlPlaceholder": "https://search.example.com",
|
||
"apiKeyRequired": "この検索 provider には API key が必要です。",
|
||
"baseUrlRequired": "SearXNG には Base URL が必要です。",
|
||
"missingCredential": "保存する前に必要な認証情報を入力してください。",
|
||
"saveHint": "変更は新しい web search リクエストに適用されます。"
|
||
}
|
||
},
|
||
"overview": {
|
||
"model": "Current model",
|
||
"providers": "Providers",
|
||
"configuredCount": "{{count}} configured",
|
||
"totalProviders": "{{count}} available",
|
||
"webSearch": "Web search",
|
||
"workspace": "Workspace"
|
||
},
|
||
"providers": {
|
||
"searchPlaceholder": "Search providers",
|
||
"noMatches": "No providers match this search."
|
||
}
|
||
},
|
||
"chat": {
|
||
"fallbackTitle": "チャット {{id}}",
|
||
"loading": "読み込み中…",
|
||
"noSessions": "まだセッションがありません。",
|
||
"actions": "「{{title}}」のチャット操作",
|
||
"activity": {
|
||
"running": "Agent running",
|
||
"complete": "Agent finished"
|
||
},
|
||
"pin": "Pin",
|
||
"unpin": "Unpin",
|
||
"rename": "Rename",
|
||
"renameTitle": "Rename chat",
|
||
"renameDescription": "Choose a local sidebar name for this chat.",
|
||
"renamePlaceholder": "Chat name",
|
||
"renameSave": "Save",
|
||
"archive": "Archive",
|
||
"unarchive": "Unarchive",
|
||
"showArchived": "Show archived",
|
||
"hideArchived": "Hide archived",
|
||
"delete": "削除",
|
||
"newChat": "新しいチャット",
|
||
"groups": {
|
||
"pinned": "Pinned",
|
||
"all": "Chats",
|
||
"today": "Today",
|
||
"yesterday": "Yesterday",
|
||
"earlier": "Earlier",
|
||
"archived": "Archived"
|
||
}
|
||
},
|
||
"deleteConfirm": {
|
||
"title": "このチャットを削除しますか?",
|
||
"description": "この操作は元に戻せません。",
|
||
"cancel": "キャンセル",
|
||
"confirm": "削除"
|
||
},
|
||
"connection": {
|
||
"idle": "待機中",
|
||
"connecting": "接続中…",
|
||
"open": "接続済み",
|
||
"reconnecting": "再接続中…",
|
||
"closed": "切断済み",
|
||
"error": "接続エラー"
|
||
},
|
||
"thread": {
|
||
"loadingConversation": "会話を読み込み中…",
|
||
"empty": {
|
||
"description": "質問したり、ローカル作業を続けたり、新しいスレッドを始めたりできます。",
|
||
"greeting": "何をお手伝いしましょうか?",
|
||
"quickActions": {
|
||
"plan": {
|
||
"title": "プロジェクト計画を作成",
|
||
"prompt": "次に作るものについて、簡潔なプロジェクト計画を作成してください。"
|
||
},
|
||
"analyze": {
|
||
"title": "このデータを分析",
|
||
"prompt": "このデータを分析し、最も重要なパターンを指摘してください。"
|
||
},
|
||
"brainstorm": {
|
||
"title": "アイデアを出す",
|
||
"prompt": "この問題について、実用的なアイデアとトレードオフをいくつか出してください。"
|
||
},
|
||
"code": {
|
||
"title": "コードを書く",
|
||
"prompt": "このタスクのコードを書くのを手伝ってください。まず最小限の有用な変更から始めてください。"
|
||
},
|
||
"summarize": {
|
||
"title": "この文書を要約",
|
||
"prompt": "この文書を要約し、重要なポイントを列挙してください。"
|
||
},
|
||
"more": {
|
||
"title": "その他",
|
||
"prompt": "このワークスペースであなたが手伝える便利な方法をいくつか見せてください。"
|
||
}
|
||
},
|
||
"imageQuickActions": {
|
||
"icon": {
|
||
"title": "アプリアイコンを作る",
|
||
"prompt": "nanobot のクリーンな 1:1 アプリアイコンを生成してください。親しみやすいロボット、シンプルなベクター風、柔らかい青と白の配色、文字なし。"
|
||
},
|
||
"sticker": {
|
||
"title": "ステッカーを作る",
|
||
"prompt": "小さなロボットアシスタントのかわいいステッカー風画像を生成してください。透明風の背景で、表情豊かで遊び心のある雰囲気。"
|
||
},
|
||
"poster": {
|
||
"title": "ポスターを作る",
|
||
"prompt": "個人向け AI アシスタントの洗練されたポスター案を生成してください。モダンな構図、強い視覚階層、ランディングページ向け。"
|
||
},
|
||
"product": {
|
||
"title": "製品モックアップ",
|
||
"prompt": "会話型 AI Web アプリのクリーンな製品モックアップ画像を生成してください。ミニマルな UI、上質なライティング、リアルなデバイスフレーム。"
|
||
},
|
||
"portrait": {
|
||
"title": "スタイル付きポートレート",
|
||
"prompt": "親しみやすい AI コンパニオンのスタイル付きポートレートを生成してください。柔らかい光、細部は豊かで近づきやすい、モダンなイラスト風。"
|
||
},
|
||
"edit": {
|
||
"title": "画像を編集",
|
||
"prompt": "画像編集を手伝ってください。まず編集する画像のアップロードまたは指定を求め、その後に編集後の結果を生成してください。"
|
||
}
|
||
}
|
||
},
|
||
"header": {
|
||
"toggleSidebar": "サイドバーを切り替える"
|
||
},
|
||
"composer": {
|
||
"placeholderThread": "メッセージを入力…",
|
||
"placeholderHero": "何を考えていますか?",
|
||
"placeholderOpening": "新しいチャットを開いています…",
|
||
"placeholderStreaming": "モデルが応答しています…",
|
||
"inputAria": "メッセージ入力欄",
|
||
"sendHint": "Enter で送信 · Shift+Enter で改行",
|
||
"runRuntimeTitle": "実行中 · {{elapsed}}",
|
||
"goalStateStrip": "目標 · {{label}}",
|
||
"goalStateFallback": "目標",
|
||
"goalStateExpandAria": "目標の全文を表示",
|
||
"goalStateSheetTitle": "目標",
|
||
"send": "メッセージを送信",
|
||
"stop": "応答を停止",
|
||
"attachImage": "画像を添付",
|
||
"imageMode": {
|
||
"label": "画像生成",
|
||
"toggle": "画像生成モードを切り替え",
|
||
"placeholder": "画像を説明または編集…",
|
||
"aspectAria": "画像のアスペクト比",
|
||
"aspectLabel": "画像の比率",
|
||
"aspect": {
|
||
"auto": "自動",
|
||
"1_1": "正方形 1:1",
|
||
"3_4": "縦長 3:4",
|
||
"9_16": "ストーリー 9:16",
|
||
"4_3": "横長 4:3",
|
||
"16_9": "ワイド 16:9"
|
||
}
|
||
},
|
||
"encoding": "処理中…",
|
||
"remove": "添付を削除",
|
||
"normalizedSizeHint": "{{orig}} → {{current}}(自動圧縮)",
|
||
"imageRejected": {
|
||
"unsupported_type": "対応していないファイル形式です",
|
||
"too_many_images": "1 メッセージにつき最大 {{max}} 枚です",
|
||
"magic_mismatch": "画像ファイルではないようです",
|
||
"decode_failed": "この画像をデコードできません",
|
||
"too_large": "画像が大きすぎます。小さいものを選んでください",
|
||
"io": "このファイルを読み込めません"
|
||
},
|
||
"slash": {
|
||
"ariaLabel": "スラッシュコマンド",
|
||
"label": "コマンド",
|
||
"navigateHint": "↑↓ 選択",
|
||
"selectHint": "Enter/Tab 入力",
|
||
"closeHint": "Esc 閉じる",
|
||
"commands": {
|
||
"new": {
|
||
"title": "新しいチャット",
|
||
"description": "現在のタスクを停止して、新しい会話を開始します。"
|
||
},
|
||
"stop": {
|
||
"title": "現在のタスクを停止",
|
||
"description": "このチャットで実行中の agent ターンをキャンセルします。"
|
||
},
|
||
"restart": {
|
||
"title": "nanobot を再起動",
|
||
"description": "bot プロセスをその場で再起動します。"
|
||
},
|
||
"status": {
|
||
"title": "ステータスを表示",
|
||
"description": "ランタイム、provider、channel の状態を表示します。"
|
||
},
|
||
"history": {
|
||
"title": "会話履歴を表示",
|
||
"description": "保存済みの直近 N 件の会話メッセージを表示します。"
|
||
},
|
||
"dream": {
|
||
"title": "Dream を実行",
|
||
"description": "メモリ統合を手動で開始します。"
|
||
},
|
||
"dream_log": {
|
||
"title": "Dream ログを表示",
|
||
"description": "直近の Dream 統合で変更された内容を表示します。"
|
||
},
|
||
"dream_restore": {
|
||
"title": "メモリを復元",
|
||
"description": "以前の Dream スナップショットへメモリを戻します。"
|
||
},
|
||
"goal": {
|
||
"title": "長期目標",
|
||
"description": "持続的な複数ステップの目標として扱うようエージェントに伝えます。"
|
||
},
|
||
"help": {
|
||
"title": "ヘルプを表示",
|
||
"description": "利用可能なスラッシュコマンドを一覧表示します。"
|
||
}
|
||
}
|
||
},
|
||
"goalStateCloseAria": "目標を閉じる"
|
||
},
|
||
"scrollToBottom": "一番下へスクロール",
|
||
"loadEarlier": "以前のメッセージを読み込む"
|
||
},
|
||
"message": {
|
||
"streaming": "生成中",
|
||
"assistantTyping": "アシスタントが入力中",
|
||
"toolSingle": "ツールを使用中",
|
||
"toolMany": "{{count}} 個のツールを使用",
|
||
"toolSummary": "{{count}} 個のツール",
|
||
"toolSummaryMany": "{{count}} 個のツール",
|
||
"reasoningTools": "思考 · {{count}} 個のツール",
|
||
"reasoningToolsSingular": "思考 · 1 個のツール",
|
||
"reasoning": "思考",
|
||
"reasoningStreaming": "思考中…",
|
||
"reasoningSummary": "思考",
|
||
"agentActivitySummary": "{{reasoning}} ステップ · ツール呼び出し {{tools}} 回",
|
||
"agentActivityToolsOnly": "ツール呼び出し {{tools}} 回",
|
||
"agentActivityLiveSummary": "実行中… · {{reasoning}} ステップ · ツール呼び出し {{tools}} 回",
|
||
"agentActivityLiveToolsOnly": "実行中… · ツール呼び出し {{tools}} 回",
|
||
"imageAttachment": "画像の添付",
|
||
"turnLatencyTitle": "応答時間(全行程)"
|
||
},
|
||
"lightbox": {
|
||
"title": "画像プレビュー",
|
||
"open": "画像を表示",
|
||
"prev": "前の画像",
|
||
"next": "次の画像",
|
||
"close": "プレビューを閉じる"
|
||
},
|
||
"code": {
|
||
"fallbackLanguage": "コード",
|
||
"copyAria": "コードをコピー",
|
||
"copy": "コピー",
|
||
"copied": "コピーしました"
|
||
},
|
||
"common": {
|
||
"dismiss": "閉じる"
|
||
},
|
||
"errors": {
|
||
"messageTooBig": {
|
||
"title": "メッセージが大きすぎます",
|
||
"body": "サイズ上限を超えたため、直前のメッセージはサーバーに拒否されました。画像を減らすか、より小さいファイルに差し替えて再送してください。"
|
||
}
|
||
}
|
||
}
|